MjAxMy0wNi0xMCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFJlbW92ZSBYY29kZSA0IHNraW4gYW5kIG9ubHkgaGF2ZSB0aGUgWGNvZGUgNSBsb29rLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9CdXR0b25OYXZpZ2F0aW9uSXRlbS5jc3M6CiAgICAgICAgKC5uYXZpZ2F0aW9uLWJhciAuaXRlbS5idXR0b24uc3VwcHJlc3MtZW1ib3NzLmRpc2FibGVkID4gLmdseXBoKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29kZU1pcnJvck92ZXJyaWRlcy5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Rhc2hib2FyZFZpZXcuY3NzOgogICAgICAgICgudG9vbGJhciAuZGFzaGJvYXJkKToKICAgICAgICAoYm9keS53aW5kb3ctaW5hY3RpdmUgLnRvb2xiYXIgLmRhc2hib2FyZCk6CiAgICAgICAgKC50b29sYmFyLmNvbGxhcHNlZCAuZGFzaGJvYXJkKToKICAgICAgICAoLnRvb2xiYXIuY29sbGFwc2VkIC5kYXNoYm9hcmQgPiAubG9ncyk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Rhc2hib2FyZFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXNoYm9hcmRWaWV3KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhc2hib2FyZFZpZXcucHJvdG90eXBlLl9zZXRJdGVtRW5hYmxlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RldGFpbHNTZWN0aW9uLmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGl2aWRlck5hdmlnYXRpb25JdGVtLmNzczoKICAgICAgICAoLm5hdmlnYXRpb24tYmFyIC5pdGVtLmRpdmlkZXIpOgogICAgICAgICogVXNlckludGVyZmFjZS9GaWx0ZXJCYXIuY3NzOgogICAgICAgICguZmlsdGVyLWJhciA+IGlucHV0W3R5cGU9InNlYXJjaCJdKToKICAgICAgICAoLmZpbHRlci1iYXIgPiBpbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcik6CiAgICAgICAgKC5maWx0ZXItYmFyID4gaW5wdXRbdHlwZT0ic2VhcmNoIl06dmFsaWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9GaW5kQmFubmVyLmNzczoKICAgICAgICAoLmZpbmQtYmFubmVyID4gaW5wdXRbdHlwZT0ic2VhcmNoIl0pOgogICAgICAgICguZmluZC1iYW5uZXIgPiBidXR0b24pOgogICAgICAgICogVXNlckludGVyZmFjZS9IaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50LmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xheWVyVHJlZVNpZGViYXJQYW5lbC5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uY3NzOgogICAgICAgICgjc3BsaXQtY29udGVudC1icm93c2VyID4gLm5hdmlnYXRpb24tYmFyKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvbkJhci5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05hdmlnYXRpb25TaWRlYmFyUGFuZWwuY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9SYWRpb0J1dHRvbk5hdmlnYXRpb25JdGVtLmNzczoKICAgICAgICAoLm5hdmlnYXRpb24tYmFyIC5pdGVtLnJhZGlvLmJ1dHRvbi50ZXh0LW9ubHkuc2VsZWN0ZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVNpZGViYXJQYW5lbC5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLnRyZWVFbGVtZW50Rm9yUmVwcmVzZW50ZWRPYmplY3QpOgogICAgICAgICogVXNlckludGVyZmFjZS9TY29wZUJhci5jc3M6CiAgICAgICAgKC5zY29wZS1iYXIgPiBsaSk6CiAgICAgICAgKC5zY29wZS1iYXIgPiBsaTphY3RpdmUpOgogICAgICAgICguc2NvcGUtYmFyID4gbGk6aG92ZXIpOgogICAgICAgICguc2NvcGUtYmFyID4gbGkuc2VsZWN0ZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9TZWFyY2hCYXIuY3NzOgogICAgICAgICguc2VhcmNoLWJhciA+IGlucHV0W3R5cGU9InNlYXJjaCJdKToKICAgICAgICAoLnNlYXJjaC1iYXIgPiBpbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcik6CiAgICAgICAgKC5zZWFyY2gtYmFyID4gaW5wdXRbdHlwZT0ic2VhcmNoIl06dmFsaWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZXNDb250ZW50Vmlldy5jc3M6CiAgICAgICAgKC5jb250ZW50LXZpZXcudGltZWxpbmVzID4gLmRhdGEtZ3JpZCA+IC5uYXZpZ2F0aW9uLWJhci1jb250YWluZXIgPiAubmF2aWdhdGlvbi1iYXIpOgoKMjAxMy0wNi0wOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEltcHJvdmUgc3dpdGNoaW5nIGZyb20gdGhlIGZ1bGwgdmlldyBjb25zb2xlIHRvIHRoZSBSZXNvdXJjZSBzaWRlYmFyLCBzbyB0aGUgcHJldmlvdXMgcmVzb3VyY2UgaXMgc2hvd24gaW4gdGhlIGNvbnRlbnQgYnJvd3NlciBhZ2Fpbi4KCiAgICAgICAgQWxzbyBjbGVhbnMgdXAgbXkgZWFybGllciBjaGFuZ2VzIGFuZCByZW1vdmVzIGFuIGFzc2VydCB0aGF0IGNhbiBmaXJlIG9mdGVuIG5vdy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE0MDc1MzUyPiBKdW1waW5nIHRvIGEgcmVzb3VyY2UgZnJvbSB0aGUgVGltZWxpbmVzIHBhbmVsIHNob3VsZCByZXZlYWwgZmlsZSBpbiBSZXNvdXJjZXMgc2lkZWJhciB3aGVuIHNob3dpbmcgcmVzb3VyY2UKCiAgICAgICAgUmV2aWV3ZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5zaG93RnVsbEhlaWdodENvbnNvbGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuX3NpZGViYXJDb2xsYXBzZWRTdGF0ZURpZENoYW5nZSk6IENhbGwgX3VwZGF0ZU5hdmlnYXRpb25TaWRlYmFyRm9yQ3VycmVudENvbnRlbnRWaWV3IGZvciB0aGUgbmF2aWdhdGlvbiBzaWRlYmFyLgogICAgICAgIChXZWJJbnNwZWN0b3IuX3JldmVhbEFuZFNlbGVjdFJlcHJlc2VudGVkT2JqZWN0SW5OYXZpZ2F0aW9uU2lkZWJhcik6IE9ubHkgZG8gdGhpcyB3b3JrIGlmIHRoZSBzaWRlYmFyIGlzIG5vdCBjb2xsYXBzZWQuIFdlIGRvbid0CiAgICAgICAgd2FudCB0byBkZXNlbGVjdCBpdGVtcyBpZiB0aGUgc2lkZWJhciBpcyBjb2xsYXBzZWQsIHByZXNlcnZpbmcgdGhlIHNlbGVjdGlvbiBpcyBpbXBvcnRhbnQgd2hlbiBzaG93aW5nIHRoZSBzaWRlYmFyIGxhdGVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuX3VwZGF0ZU5hdmlnYXRpb25TaWRlYmFyRm9yQ3VycmVudENvbnRlbnRWaWV3KTogQWRkZWQuIFNwbGl0IG9mZiBmcm9tIF9uYXZpZ2F0aW9uU2lkZWJhclBhbmVsU2VsZWN0ZWQuIE9ubHkgZG8gdGhpcyB3b3JrCiAgICAgICAgaWYgdGhlIHNpZGViYXIgaXMgbm90IGNvbGxhcHNlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLl9uYXZpZ2F0aW9uU2lkZWJhclBhbmVsU2VsZWN0ZWQpOiBDYWxsIF91cGRhdGVOYXZpZ2F0aW9uU2lkZWJhckZvckN1cnJlbnRDb250ZW50Vmlldy4KICAgICAgICAoV2ViSW5zcGVjdG9yLl9jb250ZW50QnJvd3NlckN1cnJlbnRDb250ZW50Vmlld0RpZENoYW5nZSk6IENsZWFuIHVwIGJ5IHJldHVybmluZyBlYXJseSBpZiB0aGVyZSBpcyBubyBjdXJyZW50IGNvbnRlbnQgdmlldy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUudHJlZUVsZW1lbnRGb3JSZXByZXNlbnRlZE9iamVjdCk6IFJlbW92ZSBhbiBhc3NlcnQgdGhhdCBjYW4gaGFwcGVuIGEgbG90IG5vdy4KCjIwMTMtMDYtMDcgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE0MDk0MzA4PiBTdHlsZXMgc2hvdWxkIGNvbWUgYmVmb3JlIExheWVycyBkZXRhaWxzIHNpZGViYXIKCiAgICAgICAgU3dpdGNoIExheWVycyBhbmQgU3R5bGVzLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwpOgogICAgICAgICogVXNlckludGVyZmFjZS9MYXllclRyZWVTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVTaWRlYmFyUGFuZWwpOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6CgoyMDEzLTA2LTA3ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgS2VlcCB0aGUgc2VsZWN0ZWQgdHJlZSBlbGVtZW50IGluIHN5bmMgd2l0aCB0aGUgY3VycmVudCBjb250ZW50IHZpZXcuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNDA3NTM1Mj4gSnVtcGluZyB0byBhIHJlc291cmNlIGZyb20gdGhlIFRpbWVsaW5lcyBwYW5lbCBzaG91bGQgcmV2ZWFsIGZpbGUgaW4gUmVzb3VyY2VzIHNpZGViYXIgd2hlbiBzaG93aW5nIHJlc291cmNlCgogICAgICAgIFJldmlld2VkIGJ5IEFudG9pbmUgUXVpbnQuCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuX3JldmVhbEFuZFNlbGVjdFJlcHJlc2VudGVkT2JqZWN0SW5OYXZpZ2F0aW9uU2lkZWJhcik6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuX25hdmlnYXRpb25TaWRlYmFyUGFuZWxTZWxlY3RlZCk6IENhbGwgX3JldmVhbEFuZFNlbGVjdFJlcHJlc2VudGVkT2JqZWN0SW5OYXZpZ2F0aW9uU2lkZWJhci4KICAgICAgICAoV2ViSW5zcGVjdG9yLl9jb250ZW50QnJvd3NlckN1cnJlbnRDb250ZW50Vmlld0RpZENoYW5nZSk6IERpdHRvLgoKMjAxMy0wNi0wNyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEtlZXAgdGhlIG5hdmlnYXRpb24gc2lkZWJhciBhbmQgdGhlIGN1cnJlbnQgY29udGVudCB2aWV3IGluIHN5bmMgd2l0aCBhIHNldCBvZiBhbGxvd2VkIHNpZGViYXJzIHBlciBjb250ZW50IHZpZXcuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNDA3NTM1Mj4gSnVtcGluZyB0byBhIHJlc291cmNlIGZyb20gdGhlIFRpbWVsaW5lcyBwYW5lbCBzaG91bGQgcmV2ZWFsIGZpbGUgaW4gUmVzb3VyY2VzIHNpZGViYXIgd2hlbiBzaG93aW5nIHJlc291cmNlCgogICAgICAgIFJldmlld2VkIGJ5IEFudG9pbmUgUXVpbnQuCgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgYWxsb3dlZE5hdmlnYXRpb25TaWRlYmFyUGFuZWxzKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgYWxsb3dlZE5hdmlnYXRpb25TaWRlYmFyUGFuZWxzKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5zaG93U3BsaXRDb25zb2xlKTogU2hvdyB0aGUgbmF2aWdhdGlvbiBzaWRlYmFyIGlmIGl0IHdhcyBzaG93aW5nLgogICAgICAgIChXZWJJbnNwZWN0b3Iuc2hvd0Z1bGxIZWlnaHRDb25zb2xlKTogSGlkZSB0aGUgbmF2aWdhdGlvbiBzaWRlYmFyIGFuZCByZW1lbWJlciBpZiBpdCB3YXMgc2hvd2luZy4KICAgICAgICAoV2ViSW5zcGVjdG9yLnRvZ2dsZUNvbnNvbGVWaWV3KTogU2hvdyB0aGUgc2lkZWJhciBpZiBpdCB3YXMgc2hvd2luZy4KICAgICAgICAoV2ViSW5zcGVjdG9yLl9uYXZpZ2F0aW9uU2lkZWJhclBhbmVsU2VsZWN0ZWQpOiBFbnN1cmUgdGhlIG5hdmlnYXRpb24gc2lkZWJhciBwYW5lbCBpcyBhbGxvd2VkIGJ5IHRoZSBjdXJyZW50IGNvbnRlbnQgdmlldy4KICAgICAgICAoV2ViSW5zcGVjdG9yLl9jb250ZW50QnJvd3NlckN1cnJlbnRDb250ZW50Vmlld0RpZENoYW5nZSk6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbC5wcm90b3R5cGUuc2hvd0NvbnRlbnRWaWV3Rm9yQ3VycmVudFNlbGVjdGlvbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLnByb3RvdHlwZS5zaG93bik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Byb2ZpbGVWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZVZpZXcucHJvdG90eXBlLmdldCBhbGxvd2VkTmF2aWdhdGlvblNpZGViYXJQYW5lbHMpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VDbHVzdGVyQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZUNsdXN0ZXJDb250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IGFsbG93ZWROYXZpZ2F0aW9uU2lkZWJhclBhbmVscyk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZXNDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgYWxsb3dlZE5hdmlnYXRpb25TaWRlYmFyUGFuZWxzKTogQWRkZWQuCgoyMDEzLTA2LTA2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUHJvcGVybHkgZmlsdGVyIGludG8gcmVzb3VyY2VzIHdpdGggYSBzb3VyY2UgbWFwIGlmIHRoZXkgaGF2ZW4ndCBiZWVuIGV4cGFuZGVkIHlldC4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE0MDcyNTQ4PiBSZXNvdXJjZXMgZmlsdGVyIHNob3dzICJObyBGaWx0ZXIgUmVzdWx0cyIgYWZ0ZXIgcmVsb2FkIHdpdGggU291cmNlTWFwcwoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3RyZWVFbGVtZW50QWRkZWRPckNoYW5nZWQpOiBQYXNzIGZhbHNlIHRvCiAgICAgICAgdHJhdmVyc2VOZXh0VHJlZUVsZW1lbnQgdG8gY2F1c2UgdGhlIHRyZWUgZWxlbWVudHMgdG8gYmUgcG9wdWxhdGVkLiBUaGlzIG1hdGNoZXMgdGhlIGludGVyYWN0aXZlCiAgICAgICAgY2FzZSB3aGVuIHR5cGluZyBpbnRvIHRoZSBmaWx0ZXIgYmFyLCB3aGljaCBhbHJlYWR5IHdvcmtlZCB3aXRoIHNvdXJjZSBtYXBzLgoKMjAxMy0wNi0wNSAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTQwNzc0MDc+IEp1bXBpbmcgdG8gYW4gZXJyb3IgaW4gYSBKUyBmaWxlIGZvcm0gdGhlIGNvbnNvbGUgaGlnaGxpZ2h0cyB0byB3aGl0ZSBmaXJzdCBiZWZvcmUgZ29pbmcgYmFjayB0byByZWQKCiAgICAgICAgUmVtb3ZlIHRoZSBleHBsaWNpdCDSdG/TIGNvbG9yIGluIHRoZSBDU1MgYW5pbWF0aW9uIHdlIHVzZSB0byBoaWdobGlnaHQgYSBsaW5rCiAgICAgICAgaW4gdGhlIHRleHQgZWRpdG9yIGFzIGl0IGlzIHJldmVhbGVkLCB3aGljaCBtZWFucyB0aGUg0nRv0yBjb2xvciB3aWxsIGJlIHRoZQogICAgICAgIHVuZGVybHlpbmcgY29sb3Igc2V0IG9uIHRoZSBlbGVtZW50LiBUaGlzIHdpbGwgYW5pbWF0ZSB0byByZWQgZm9yIGVycm9ycywKICAgICAgICB5ZWxsb3cgZm9yIHdhcm5pbmdzLCBhbmQgdHJhbnNwYXJlbnQgZm9yIHJlZ3VsYXIgbGluZXMuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuY3NzOgogICAgICAgIChALXdlYmtpdC1rZXlmcmFtZXMgdGV4dC1lZGl0b3ItaGlnaGxpZ2h0LWZhZGVvdXQpOgoKMjAxMy0wNi0wNSAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTQwNzcxNTI+IEFjdGl2aXR5IHZpZXdlciBkb2VzIG5vdCB1cGRhdGUgZXJyb3IgY291bnQgZm9yIGdyb3VwZWQgZXJyb3JzIHdoZW4gaW5zcGVjdG9yIGlzIGNsb3NlZC4KCiAgICAgICAgVGFrZSBpbnRvIGFjY291bnQgdGhlIHJlcGVhdCBjb3VudCBvZiBhbiBlcnJvciB3aGVuIGluY3JlbWVudGluZwogICAgICAgIHRoZSBtZXNzYWdlIGNvdW50LgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9EYXNoYm9hcmRNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGFzaGJvYXJkTWFuYWdlci5wcm90b3R5cGUuX2NvbnNvbGVNZXNzYWdlQWRkZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGFzaGJvYXJkTWFuYWdlci5wcm90b3R5cGUuX2NvbnNvbGVNZXNzYWdlV2FzUmVwZWF0ZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGFzaGJvYXJkTWFuYWdlci5wcm90b3R5cGUuX2luY3JlbWVudENvbnNvbGVNZXNzYWdlVHlwZSk6CgoyMDEzLTA2LTA1ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNDA3MjQwOT4gUHJlc3NpbmcgRW50ZXIvRXNjIHdoZW4gZWRpdGluZyBhIGJyZWFrcG9pbnQgKGNvbmRpdGlvbmFsIGJyZWFrcG9pbnQpIHNob3VsZCBkaXNtaXNzIHBvcG92ZXIKCiAgICAgICAgSGFuZGxlIEVzYyBhbmQgRW50ZXIgb24gdGhlIDxpbnB1dD4gdG8gZGlzbWlzcyB0aGUgcG9wb3Zlci4KICAgICAgICBUaGlzIGJlaGF2ZXMgbGlrZSBYY29kZSdzIGJyZWFrcG9pbnQgY29uZGl0aW9uIHBvcG92ZXIuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0JyZWFrcG9pbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZS5fcG9wb3ZlckNvbmRpdGlvbklucHV0S2V5RG93bik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZS5fZWRpdEJyZWFrcG9pbnRQb3BvdmVyQ29udGVudEVsZW1lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUuX3Nob3dFZGl0QnJlYWtwb2ludFBvcG92ZXIpOgoKMjAxMy0wNi0wNSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTQwNTQ4ODY+IFByZXNzaW5nIEVudGVyIGluIGEgYmxhbmsgY29uc29sZSBzaG91bGQgZG8gbm90aGluZywgbm90IGluc2VydCBhIG5ld2xpbmUKCiAgICAgICAgUmV2aWV3ZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnNvbGVQcm9tcHQuanM6CgoyMDEzLTA2LTA1ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkL3VwZGF0ZSBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgdG8gYWxsIHRoZSB1c2VyIGludGVyZmFjZSBmaWxlcyBpbgogICAgICAgIHByZXBhcmF0aW9uIGZvciBvcGVuIHNvdXJjaW5nIHRvIFdlYktpdC4KCiAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0FjdGl2YXRlQnV0dG9uTmF2aWdhdGlvbkl0ZW0uanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0FjdGl2YXRlQnV0dG9uVG9vbGJhckl0ZW0uanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0FwcGxpY2F0aW9uQ2FjaGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9BcHBsaWNhdGlvbkNhY2hlRnJhbWUuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0FwcGxpY2F0aW9uQ2FjaGVGcmFtZUNvbnRlbnRWaWV3LmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQXBwbGljYXRpb25DYWNoZUZyYW1lQ29udGVudFZpZXcuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0FwcGxpY2F0aW9uQ2FjaGVGcmFtZVRyZWVFbGVtZW50LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9BcHBsaWNhdGlvbkNhY2hlSWNvbnMuY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9BcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9BcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RUcmVlRWxlbWVudC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQXBwbGljYXRpb25DYWNoZU9ic2VydmVyLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9CaW5hcnlTZWFyY2guanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0JsYW5rU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQm90dG9tVXBQcm9maWxlRGF0YUdyaWRUcmVlLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9Cb3hNb2RlbERldGFpbHNTZWN0aW9uUm93LmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQm94TW9kZWxEZXRhaWxzU2VjdGlvblJvdy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnJhbmNoLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9CcmFuY2hNYW5hZ2VyLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9CcmVha3BvaW50LmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnJlYWtwb2ludC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnJlYWtwb2ludEljb25zLmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnJlYWtwb2ludFRyZWVFbGVtZW50LmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnJlYWtwb2ludFRyZWVFbGVtZW50LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9CdXR0b25OYXZpZ2F0aW9uSXRlbS5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0J1dHRvbk5hdmlnYXRpb25JdGVtLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9CdXR0b25Ub29sYmFySXRlbS5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0J1dHRvblRvb2xiYXJJdGVtLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NDb21wbGV0aW9ucy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTS2V5d29yZENvbXBsZXRpb25zLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NNZWRpYS5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTT2JzZXJ2ZXIuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1Byb3BlcnR5LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NSdWxlLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTZWxlY3RvclByb2ZpbGVPYmplY3QuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1NlbGVjdG9yUHJvZmlsZVR5cGUuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1NlbGVjdG9yUHJvZmlsZVZpZXcuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb24uanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uLmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZWNsYXJhdGlvblNlY3Rpb24uanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVNYW5hZ2VyLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZVNoZWV0LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9DYWxsRnJhbWUuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NhbGxGcmFtZUljb25zLmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ2FsbEZyYW1lVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NsdXN0ZXJDb250ZW50Vmlldy5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NsdXN0ZXJDb250ZW50Vmlldy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29kZU1pcnJvckFkZGl0aW9ucy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9Db2RlTWlycm9yRm9ybWF0dGVycy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29kZU1pcnJvck92ZXJyaWRlcy5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29sb3IuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbXBsZXRpb25TdWdnZXN0aW9uc1ZpZXcuY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9Db21wbGV0aW9uU3VnZ2VzdGlvbnNWaWV3LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9Db21wdXRlZFN0eWxlRGV0YWlsc1BhbmVsLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9Db25zb2xlQ29tbWFuZC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29uc29sZUNvbW1hbmRSZXN1bHQuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnNvbGVHcm91cC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29uc29sZU1lc3NhZ2UuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnNvbGVNZXNzYWdlSW1wbC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29uc29sZU9ic2VydmVyLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9Db25zb2xlUHJvbXB0LmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29uc29sZVByb21wdC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudEJyb3dzZXIuY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZW50QnJvd3Nlci5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudFZpZXcuY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZW50Vmlldy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudFZpZXdDb250YWluZXIuY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZW50Vmlld0NvbnRhaW5lci5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGV4dE1lbnUuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xUb29sYmFySXRlbS5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xUb29sYmFySXRlbS5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29va2llSWNvbi5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Nvb2tpZVN0b3JhZ2VDb250ZW50Vmlldy5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Nvb2tpZVN0b3JhZ2VDb250ZW50Vmlldy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29va2llU3RvcmFnZU9iamVjdC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29va2llU3RvcmFnZVRyZWVFbGVtZW50LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9ET01EZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9ET01Ob2RlLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9ET01Ob2RlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NTm9kZVN0eWxlcy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NT2JzZXJ2ZXIuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVNlYXJjaE1hdGNoT2JqZWN0LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9ET01TdG9yYWdlQ29udGVudFZpZXcuY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9ET01TdG9yYWdlQ29udGVudFZpZXcuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVN0b3JhZ2VJY29ucy5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVN0b3JhZ2VPYmplY3QuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVN0b3JhZ2VPYnNlcnZlci5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NU3RvcmFnZVRyZWVFbGVtZW50LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlQ29udGVudFZpZXcuY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlQ29udGVudFZpZXcuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVFbGVtZW50LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlRWxlbWVudFBhdGhDb21wb25lbnQuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVNYW5hZ2VyLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlT3V0bGluZS5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVPdXRsaW5lLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlVXBkYXRlci5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVXRpbGl0aWVzLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9EYXNoYm9hcmRNYW5hZ2VyLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9EYXNoYm9hcmRWaWV3LmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGFzaGJvYXJkVmlldy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YUdyaWQuY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9EYXRhR3JpZC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YWJhc2VDb250ZW50Vmlldy5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFiYXNlQ29udGVudFZpZXcuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFiYXNlSG9zdFRyZWVFbGVtZW50LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9EYXRhYmFzZUljb24uY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9EYXRhYmFzZU9iamVjdC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YWJhc2VPYnNlcnZlci5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YWJhc2VUYWJsZUNvbnRlbnRWaWV3LmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YWJhc2VUYWJsZUNvbnRlbnRWaWV3LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9EYXRhYmFzZVRhYmxlSWNvbi5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFiYXNlVGFibGVPYmplY3QuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFiYXNlVGFibGVUcmVlRWxlbWVudC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YWJhc2VUcmVlRWxlbWVudC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGVidWdnZXJNYW5hZ2VyLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9EZWJ1Z2dlck9ic2VydmVyLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9EZWJ1Z2dlclNpZGViYXJQYW5lbC5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RlYnVnZ2VyU2lkZWJhclBhbmVsLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9EZXRhaWxzU2VjdGlvbi5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RldGFpbHNTZWN0aW9uLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9EZXRhaWxzU2VjdGlvbkRhdGFHcmlkUm93LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9EZXRhaWxzU2VjdGlvbkdyb3VwLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9EZXRhaWxzU2VjdGlvblByb3BlcnRpZXNSb3cuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RldGFpbHNTZWN0aW9uUm93LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9EZXRhaWxzU2VjdGlvblNpbXBsZVJvdy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGV0YWlsc1NpZGViYXJQYW5lbC5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RpdmlkZXJOYXZpZ2F0aW9uSXRlbS5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RpdmlkZXJOYXZpZ2F0aW9uSXRlbS5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRWRpdGluZy5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0VkaXRpbmdTdXBwb3J0LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9FdmVudEhhbmRsZXIuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V2ZW50TGlzdGVuZXJTZWN0aW9uLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9FdmVudExpc3RlbmVyU2VjdGlvbkdyb3VwLmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXZlbnRMaXN0ZW5lclNlY3Rpb25Hcm91cC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXhlY3V0aW9uQ29udGV4dC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXhlY3V0aW9uQ29udGV4dExpc3QuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZpbHRlckJhci5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZpbHRlckJhci5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRmluZEJhbm5lci5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZpbmRCYW5uZXIuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZsZXhpYmxlU3BhY2VOYXZpZ2F0aW9uSXRlbS5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZsZXhpYmxlU3BhY2VOYXZpZ2F0aW9uSXRlbS5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRm9sZGVySWNvbi5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZvbGRlclRyZWVFbGVtZW50LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9Gb250UmVzb3VyY2VDb250ZW50Vmlldy5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZvbnRSZXNvdXJjZUNvbnRlbnRWaWV3LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9Gb3JtYXR0ZXIuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Zvcm1hdHRlckNvbnRlbnRCdWlsZGVyLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9Gb3JtYXR0ZXJTb3VyY2VNYXAuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9GcmFtZUNvbnRlbnRWaWV3LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9GcmFtZVJlc291cmNlTWFuYWdlci5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWVUcmVlRWxlbWVudC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvR2VuZXJhbFRyZWVFbGVtZW50LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9HZW5lcmFsVHJlZUVsZW1lbnRQYXRoQ29tcG9uZW50LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9HZW5lcmljUmVzb3VyY2VDb250ZW50Vmlldy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvR2VvbWV0cnkuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0hpZXJhcmNoaWNhbFBhdGhDb21wb25lbnQuY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9IaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9IaWVyYXJjaGljYWxQYXRoTmF2aWdhdGlvbkl0ZW0uanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlUmVzb3VyY2VDb250ZW50Vmlldy5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlUmVzb3VyY2VDb250ZW50Vmlldy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VVdGlsaXRpZXMuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luZGV0ZXJtaW5hdGVQcm9ncmVzc1NwaW5uZXIuY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9JbmRldGVybWluYXRlUHJvZ3Jlc3NTcGlubmVyLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9JbnNwZWN0b3JCYWNrZW5kLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9JbnNwZWN0b3JGcm9udGVuZEFQSS5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zcGVjdG9yT2JzZXJ2ZXIuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3RydW1lbnRJY29ucy5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3RydW1lbnRTaWRlYmFyUGFuZWwuY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9JbnN0cnVtZW50U2lkZWJhclBhbmVsLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9Jc3N1ZU1hbmFnZXIuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0lzc3VlTWVzc2FnZS5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9KYXZhU2NyaXB0UHJvZmlsZU9iamVjdC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSmF2YVNjcmlwdFByb2ZpbGVUeXBlLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9KYXZhU2NyaXB0UHJvZmlsZVZpZXcuY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9KYXZhU2NyaXB0UHJvZmlsZVZpZXcuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0tleWJvYXJkU2hvcnRjdXQuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xheWVyVHJlZURhdGFHcmlkLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9MYXllclRyZWVEYXRhR3JpZE5vZGUuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xheWVyVHJlZU1hbmFnZXIuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xheWVyVHJlZU9ic2VydmVyLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9MYXllclRyZWVTaWRlYmFyUGFuZWwuY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9MYXllclRyZWVTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xheW91dFRpbWVsaW5lRGF0YUdyaWQuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xheW91dFRpbWVsaW5lRGF0YUdyaWROb2RlLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9MYXlvdXRUaW1lbGluZVJlY29yZC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9hZEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9hZExvY2FsaXplZFN0cmluZ3MuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ0NvbnRlbnRWaWV3LmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nQ29udGVudFZpZXcuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ0ljb24uY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dNYW5hZ2VyLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dPYmplY3QuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ1RyZWVFbGVtZW50LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9NSU1FVHlwZVV0aWxpdGllcy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWV0cmljc1N0eWxlRGV0YWlsc1BhbmVsLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uQmFyLmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvbkJhci5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvbkl0ZW0uanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05hdmlnYXRpb25TaWRlYmFyUGFuZWwuY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9OZXR3b3JrRGF0YUdyaWQuY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9OZXR3b3JrRGF0YUdyaWQuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05ldHdvcmtHcmFwaENhbGN1bGF0b3IuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05ldHdvcmtPYnNlcnZlci5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmV0d29ya1RpbWVsaW5lLmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvT2JqZWN0LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUGFnZU9ic2VydmVyLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9QYXRoQ29tcG9uZW50SWNvbnMuY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9Qb3BvdmVyLmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUG9wb3Zlci5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUHJvZmlsZU1hbmFnZXIuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Byb2ZpbGVPYmplY3QuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Byb2ZpbGVUeXBlLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9Qcm9maWxlVmlldy5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Byb2ZpbGVWaWV3LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9Qcm9maWxlck9ic2VydmVyLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9Qcm9wZXJ0aWVzU2VjdGlvbi5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlLmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9RdWlja0NvbnNvbGVOYXZpZ2F0aW9uQmFyLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9SYWRpb0J1dHRvbk5hdmlnYXRpb25JdGVtLmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmFkaW9CdXR0b25OYXZpZ2F0aW9uSXRlbS5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2UuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlQ2x1c3RlckNvbnRlbnRWaWV3LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZUNvbGxlY3Rpb24uanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlQ29udGVudFZpZXcuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VJY29ucy5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlU2VhcmNoTWF0Y2hPYmplY3QuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlU2lkZWJhclBhbmVsLmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlVGltZWxpbmVEYXRhR3JpZE5vZGUuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlVGltZWxpbmVEYXRhR3JpZE5vZGVQYXRoQ29tcG9uZW50LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVRpbWVsaW5lUmVjb3JkLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVRyZWVFbGVtZW50LmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VUcmVlRWxlbWVudC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmV2aXNpb24uanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1J1bGVzU3R5bGVEZXRhaWxzUGFuZWwuY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9SdWxlc1N0eWxlRGV0YWlsc1BhbmVsLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9SdW50aW1lT2JzZXJ2ZXIuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Njb3BlQmFyLmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2NvcGVCYXIuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Njb3BlQmFySXRlbS5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2NvcGVDaGFpbkRldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Njb3BlQ2hhaW5Ob2RlLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9TY29wZVZhcmlhYmxlVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NjcmlwdC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2NyaXB0Q29udGVudFZpZXcuY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9TY3JpcHRDb250ZW50Vmlldy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2NyaXB0VGltZWxpbmVEYXRhR3JpZC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2NyaXB0VGltZWxpbmVEYXRhR3JpZE5vZGUuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NjcmlwdFRpbWVsaW5lUmVjb3JkLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9TY3JpcHRUcmVlRWxlbWVudC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2VhcmNoQmFyLmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2VhcmNoQmFyLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9TZWFyY2hJY29ucy5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NlYXJjaFJlc3VsdFRyZWVFbGVtZW50LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9TZWN0aW9uLmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2VjdGlvbi5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2V0dGluZy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2lkZWJhci5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NpZGViYXIuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NpZGViYXJQYW5lbC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlQ29kZS5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlQ29kZUxvY2F0aW9uLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VDb2RlUG9zaXRpb24uanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGVSZXZpc2lvbi5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlQ29kZVRleHRFZGl0b3IuY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlQ29kZVRleHRSYW5nZS5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlQ29kZVRyZWVFbGVtZW50LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VNYXAuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZU1hcE1hbmFnZXIuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZU1hcFJlc291cmNlLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VNYXBSZXNvdXJjZVRyZWVFbGVtZW50LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9TdG9yYWdlTWFuYWdlci5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3RvcmFnZVRyZWVFbGVtZW50LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9TdHlsZURldGFpbHNQYW5lbC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3R5bGVSdWxlSWNvbnMuY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9TeW50YXhIaWdobGlnaHRpbmdEZWZhdWx0VGhlbWUuY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9TeW50YXhIaWdobGlnaHRpbmdTdXBwb3J0LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0Q29udGVudFZpZXcuY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0Q29udGVudFZpZXcuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0RWRpdG9yLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0UmFuZ2UuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRSZXNvdXJjZUNvbnRlbnRWaWV3LmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dFJlc291cmNlQ29udGVudFZpZXcuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lRGF0YUdyaWQuY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZURhdGFHcmlkLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZURlY29yYXRpb25zLmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVEZWNvcmF0aW9ucy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVFdmVudE1hcmtlci5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVNYW5hZ2VyLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZU9ic2VydmVyLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZU92ZXJ2aWV3LmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVPdmVydmlldy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVSZWNvcmQuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lc0NvbnRlbnRWaWV3LmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVzQ29udGVudFZpZXcuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lc09iamVjdC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVG9nZ2xlQnV0dG9uTmF2aWdhdGlvbkl0ZW0uanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RvZ2dsZUNvbnRyb2xUb29sYmFySXRlbS5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVG9vbGJhci5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Rvb2xiYXIuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RyZWVPdXRsaW5lLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9VdGlsaXRpZXMuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1dlYkluc3BlY3Rvci5qczoKCjIwMTMtMDYtMDUgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBQcm9wZXJseSB1cGRhdGUgdGhlIGJvdW5kYXJpZXMgZm9yIHRoZSBOZXR3b3JrVHJhbnNmZXJUaW1lQ2FsY3VsYXRvci4KCiAgICAgICAgSXQgaXMgZXhwZWN0ZWQgdGhhdCBfbG93ZXJCb3VuZCBhbmQgX3VwcGVyQm91bmQgcmV0dXJuIE5hTiBpbnN0ZWFkIG9mIDAuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNDA0MDMxND4gV2ViIEluc3BlY3RvciBzYXlzIGl0IHRha2VzIH4xNSwwMDAgZGF5cyB0byBsb2FkIGRldmVsb3BlciBsaWJyYXJ5CgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05ldHdvcmtEYXRhR3JpZC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLk5ldHdvcmtEYXRhR3JpZC5wcm90b3R5cGUuX3VwZGF0ZUhlYWRlclRpbWVzKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmV0d29ya0dyYXBoQ2FsY3VsYXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLk5ldHdvcmtUcmFuc2ZlclRpbWVDYWxjdWxhdG9yLnByb3RvdHlwZS5fbG93ZXJCb3VuZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrVHJhbnNmZXJUaW1lQ2FsY3VsYXRvci5wcm90b3R5cGUuX3VwcGVyQm91bmQpOgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZURlY29yYXRpb25zLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVEZWNvcmF0aW9ucy5wcm90b3R5cGUudXBkYXRlSGVhZGVyVGltZXMpOgoKMjAxMy0wNi0wNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFVubG9jYWxpemUgdGhlIGJveCBtb2RlbCBsYWJlbHMuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNDA1Nzc0NT4gW1dlYkJyb3dzZXJdOiBFdXJvOiAxM0E0NzZyOiBCb3ggbW9kZWwgc2hvdWxkIG5vdCBiZSBsb2NhbGl6ZWQKCiAgICAgICAgUmV2aWV3ZWQgYnkgQWRhIENoYW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9Cb3hNb2RlbERldGFpbHNTZWN0aW9uUm93LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQm94TW9kZWxEZXRhaWxzU2VjdGlvblJvdy5wcm90b3R5cGUuX3VwZGF0ZU1ldHJpY3MpOgoKMjAxMy0wNi0wNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFN5bnRheCBoaWdobGlnaHQgaW5oZXJpdCwgaW5pdGlhbCBhbmQgZnVuY3Rpb24gbmFtZXMgaW4gQ1NTIGFzIGtleXdvcmRzLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTQwNTM2MTM+ICItd2Via2l0LXRyYW5zZm9ybSIgYXV0b2NvbXBsZXRlcyB3aXRoIGNvbG9uIGluIC13ZWJraXQtdHJhbnNpdGlvbiBkZWZpbml0aW9uCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU0NvbXBsZXRpb25zLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMucmVxdWVzdENTU05hbWVDb21wbGV0aW9ucy5wcm9wZXJ0eU5hbWVzQ2FsbGJhY2spOgogICAgICAgIFN0cmlwIGZ1bmN0aW9uIHBhcmVudGhlc2lzIGZyb20gbmFtZXMuIFByb2Nlc3MgdGhlIGNvbG9yIGxpc3QgdG8gc3RyaXAgZnVuY3Rpb24gcGFyZW50aGVzaXMgZnJvbSByZ2IoKSwgZXRjLgoKMjAxMy0wNi0wNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEltcHJvdmUgdGhlIGltcGxpY2l0IHN1ZmZpeCBoYW5kbGluZyB3aGVuIGVkaXRpbmcgaW4gdGhlIG1pZGRsZSBvZiBhIENTUyB2YWx1ZS4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzE0MDUzNjEzPiAiLXdlYmtpdC10cmFuc2Zvcm0iIGF1dG9jb21wbGV0ZXMgd2l0aCBjb2xvbiBpbiAtd2Via2l0LXRyYW5zaXRpb24gZGVmaW5pdGlvbgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLl9nZW5lcmF0ZUNTU0NvbXBsZXRpb25zKToKCjIwMTMtMDYtMDUgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBdXRvY29tcGxldGUgcHJvcGVydHkgbmFtZXMgZm9yIHRyYW5zaXRpb24gYW5kIHRyYW5zaXRpb24tcHJvcGVydHkuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xNDA1MzYxMz4gIi13ZWJraXQtdHJhbnNmb3JtIiBhdXRvY29tcGxldGVzIHdpdGggY29sb24gaW4gLXdlYmtpdC10cmFuc2l0aW9uIGRlZmluaXRpb24KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTQ29tcGxldGlvbnMuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5wcm90b3R5cGUuZ2V0IHZhbHVlcyk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU0tleXdvcmRDb21wbGV0aW9ucy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU0tleXdvcmRDb21wbGV0aW9ucy5mb3JQcm9wZXJ0eSk6CgoyMDEzLTA2LTA0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUHJvcGVybHkgYXV0b2NvbXBsZXRlIENTUyB2YWx1ZXMgaWYgdGhlIHByb3BlcnR5IG5hbWUgaXMgb24gYSBwcmV2aW91cyBsaW5lLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTQwNTM2MTM+ICItd2Via2l0LXRyYW5zZm9ybSIgYXV0b2NvbXBsZXRlcyB3aXRoIGNvbG9uIGluIC13ZWJraXQtdHJhbnNpdGlvbiBkZWZpbml0aW9uCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUuX2dlbmVyYXRlQ1NTQ29tcGxldGlvbnMpOgoKMjAxMy0wNi0wMyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBwcm9wZXJ0eSBuYW1lcyB0byB0aGUgdmFsdWUga2V5d29yZHMgbGlzdCBzbyB0aGV5IGFyZSBoaWdobGlnaHRlZCBmb3IgLXdlYmtpdC10cmFuc2l0aW9uLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTQwNTI2NjI+ICItd2Via2l0LXRyYW5zZm9ybSIgaXMgbm90IGNvcnJlY3RseSBoaWdobGlnaHRlZCB3aGVuIGVkaXRpbmcgQ1NTIHJlc291cmNlCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU0NvbXBsZXRpb25zLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMucmVxdWVzdENTU05hbWVDb21wbGV0aW9ucy5jb2xsZWN0UHJvcGVydHlOYW1lRm9yQ29kZU1pcnJvcik6CgoyMDEzLTA2LTAzICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNDA0NzMxMj4gQWRkIE5ldyBSdWxlcyBzb21ldGltZXMgZG9lc24ndCBkbyBhbnl0aGluZwoKICAgICAgICBCZXR0ZXIgaGFuZGxlIGdlbmVyYXRpbmcgc2VsZWN0b3JzIGZvciBub2RlcyB3aXRoIHNwYWNlcyBpbiBjbGFzcyBvciBpZCBhdHRyaWJ1dGVzLgoKICAgICAgICBUZXN0czogKENhc2VzIHRoYXQgd2VyZSBmYWlsaW5nIGJlZm9yZSkKCiAgICAgICAgICA8ZGl2IGNsYXNzPSIgeCAiPiA9PiBCZWZvcmU6ICguLnguKSAgQWZ0ZXI6ICgueCkKICAgICAgICAgIDxkaXYgaWQ9IiB4ICI+ICAgID0+IEJlZm9yZTogKCMgeCApICBBZnRlcjogKGRpdltpZD0iIHggIl0pCiAgICAgICAgICA8ZGl2IGlkPScieCInPiAgICA9PiBCZWZvcmU6ICgjIngiKSAgQWZ0ZXI6IChkaXZbaWQ9IlwieFwiIl0pCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5hcHByb3ByaWF0ZVNlbGVjdG9yRm9yKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVXRpbGl0aWVzLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuZGlzcGxheU5hbWVGb3JOb2RlKToKCjIwMTMtMDYtMDMgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzOTMyMjI5PiBVcGRhdGUgQ1NTS2V5d29yZENvbXBsZXRpb25zLmpzIGZvciBpT1MgcHJvcGVydGllcwoKICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdGhlIG5ldyDSLWFwcGxl0y1wcmVmaXhlZCB2YWx1ZXMgZm9yIHRoZSDSZm9udNMgcHJvcGVydHkuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU0tleXdvcmRDb21wbGV0aW9ucy5qczoKCjIwMTMtMDYtMDMgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE0MDQ3MDI5PiBFeGNlcHRpb24gQ2FsbEZyYW1lVHJlZUVsZW1lbnQuanM6MTk6IFR5cGVFcnJvcjogJ251bGwnIGlzIG5vdCBhbiBvYmplY3QgKGV2YWx1YXRpbmcgJ2NhbGxGcmFtZS5zb3VyY2VDb2RlTG9jYXRpb24uZGlzcGxheVNvdXJjZUNvZGUnKQoKICAgICAgICBPbmx5IGluY2x1ZGUgYSBzdWJ0aXRsZSBmb3IgY2FsbCBmcmFtZSB0cmVlIGVsZW1lbnRzIGlmIHRoZXJlIGlzIGEKICAgICAgICBzb3VyY2UgY29kZSBsb2NhdGlvbiwgYmVjYXVzZSB0aGF0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBzdWJ0aXRsZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ2FsbEZyYW1lVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DYWxsRnJhbWVUcmVlRWxlbWVudCk6CgoyMDEzLTA2LTAzICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgSGlkZSB0aGUgY2FyZXQgaW4gcmVhZC1vbmx5IHN0eWxlIGRlY2xhcmF0aW9ucy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE0MDQ3MzQ0PiBMb2NrZWQgcnVsZXMgKFVBIHN0eWxlc2hlZXRzKSBpbiBTdHlsZXMgc2lkZWJhciBzaG91bGRuJ3QgZGlzcGxheSBhIGNhcmV0CgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLmNzczoKICAgICAgICAoLmNzcy1zdHlsZS10ZXh0LWVkaXRvci5yZWFkLW9ubHkgPiAuQ29kZU1pcnJvciAuQ29kZU1pcnJvci1jdXJzb3IpOiBBZGRlZC4KCjIwMTMtMDYtMDMgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBDb3JyZWN0bHkgc3RvcCBhdXRvIHJlY29yZGluZyB0aGUgVGltZWxpbmUgYWZ0ZXIgdGhlIGxvYWQgZXZlbnQgb3IgYSBtYXhpbXVtIGR1cmF0aW9uICh3aGljaCBldmVyIGNvbWVzIGZpcnN0KS4KCiAgICAgICAgVGhlIG9yaWdpbmFsIGZpeCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzEzMTgwMDA5PiB3YXMgaW5jb3JyZWN0IGFuZCBjYXVzZWQgPHJkYXI6Ly9wcm9ibGVtLzEzOTE5OTc0PgogICAgICAgIGFuZCBhbHNvIGNhdXNlZCBpbmZpbml0ZSBhdXRvIHJlY29yZGluZyBvbiBwYWdlcyB3aXRoIGluZGVmaW5pdGUgdGltZXJzIHRoYXQgcmFwaWRseSBhZGRzIHJlY29yZHMuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNDA0MzE4MD4gUkVHUkVTU0lPTiAoNi4wLjUtQ3VyaWUpOiBTYWZhcmkgV2ViIENvbnRlbnQ6IDEwMCUgQ1BVIHdoZW4gdXNpbmcgSW5zcGVjdG9yCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuZXZlbnRSZWNvcmRlZC5wcm9jZXNzUmVjb3JkKToKICAgICAgICBEb24ndCBjYWxsIF9zdG9wQXV0b1JlY29yZGluZ1Nvb24gZm9yIHRoZSBET01Db250ZW50IGV2ZW50LgoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuX2FkZFJlY29yZCk6CiAgICAgICAgRG9uJ3QgY2FsbCBfc3RvcEF1dG9SZWNvcmRpbmdTb29uLiBBZGQgdGhlIGNhbGwgdG8gX3Jlc2V0QXV0b1JlY29yZGluZ0RlYWRUaW1lVGltZW91dCBiYWNrLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuX3N0YXJ0QXV0b1JlY29yZGluZyk6CiAgICAgICAgVXNlIE1heGltdW1BdXRvUmVjb3JkRHVyYXRpb24gaW5zdGVhZCBvZiBNYXhpbXVtQXV0b1JlY29yZER1cmF0aW9uQWZ0ZXJMYXN0UmVjb3JkIGZvciB0aGUgdGltZW91dC4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlLl9zdG9wQXV0b1JlY29yZGluZ1Nvb24pOgogICAgICAgIFJlbW92ZSB0aGUgZGVhZCB0aW1lIHRpbWVvdXQgbm93IHRoYXQgaXQgaXMgYmFjayBpbiBfYWRkUmVjb3JkLgoKMjAxMy0wNi0wMiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTQwNDA1MTk+IEJveE1vZGVsRGV0YWlsc1NlY3Rpb25Sb3cuanM6MTIwOiBFUlJPUjogVHlwZUVycm9yOiAnbnVsbCcgaXMgbm90IGFuIG9iamVjdCAoZXZhbHVhdGluZyAnc3R5bGUucHJvcGVydHlGb3JOYW1lKHdpZHRoKS52YWx1ZScpCgogICAgICAgIE1ha2UgdGhlIHNpZGViYXIgcmVzaWxpZW50IGFnYWluc3QgdGhlIHBvc3NpYmlsaXR5IG9mIGFuIGVtcHR5IGNvbXB1dGVkCiAgICAgICAgc3R5bGUgb2JqZWN0LiBUaGUgdWx0aW1hdGUgaXNzdWUgaXMgdGhhdCB0aGUgRE9NIFRyZWUgZG9lcyBub3QgaGF2ZSBhCiAgICAgICAgc2VsZWN0ZWQgbm9kZSwgYnV0IHRoaXMgY291bGQgc2hvdWxkIGJlIHJlc2lsaWVudCBhbnl3YXlzLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Cb3hNb2RlbERldGFpbHNTZWN0aW9uUm93LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQm94TW9kZWxEZXRhaWxzU2VjdGlvblJvdy5wcm90b3R5cGUuX3VwZGF0ZU1ldHJpY3MpOgoKMjAxMy0wNi0wMiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBSZXZlYWwgbGluZSBzb21ldGltZXMgZG9lc24ndCB3b3JrIHdpdGggY29udGVudCByaWdodCBhdCB0aGUgZWRnZSBvZiB0aGUgc2NyZWVuLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX2lzUG9zaXRpb25WaXNpYmxlKToKCjIwMTMtMDUtMzEgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE0MDM5ODg4PiBTaG91bGQgbm90IGhhdmUgc3BlbGxjaGVja2luZyBkdXJpbmcgbW9zdCBIVE1MIGVkaXRpbmcKCiAgICAgICAgQWxsb3cgRWRpdGluZ0NvbmZpZyB0byBzcGVjaWZ5IHdoZXRoZXIgb3Igbm90IHNwZWxsY2hlY2tpbmcgc2hvdWxkIGJlIGVuYWJsZWQuCiAgICAgICAgU3BlbGxjaGVjayBpcyBvZmYgYnkgZGVmYXVsdCwgYmVjYXVzZSBtb3N0IG9mIHRoZSB0aW1lIGl0IGlzIGNvZGUsIGFuZCBpdCBpcwogICAgICAgIG9ubHkgZW5hYmxlZCB3aGVuIGVkaXRpbmcgYSBUZXh0Tm9kZSBpbiB0aGUgRE9NIFRyZWUuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUVsZW1lbnQucHJvdG90eXBlLl9zdGFydEVkaXRpbmdUZXh0Tm9kZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0VkaXRpbmdTdXBwb3J0LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWRpdGluZ0NvbmZpZyk6CiAgICAgICAgKC5jbGVhblVwQWZ0ZXJFZGl0aW5nKToKCjIwMTMtMDUtMzAgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE0MDMwMjg5PiBHb3RvIGFycm93IGZyb20gVGltZWxpbmVzIHRvIGF1dG9mb3JtYXR0ZWQgc2NyaXB0IG5vdCBoaWdobGlnaHRpbmcgbGluZSBjb3JyZWN0bHkKCiAgICAgICAgUHJldmlvdXNseSB0aGUgU291cmNlQ29kZVRleHRFZGl0b3Igd2FzIGF1dG9tYXRpY2FsbHkgZm9ybWF0dGluZyB0aGUKICAgICAgICBjb250ZW50IGFmdGVyIHRoZSBjb250ZW50IHdhcyBzZXQgb24gdGhlIFRleHRFZGl0b3IgYW5kIHNvbWUgaW5pdGlhbAogICAgICAgIHByb2Nlc3Npbmc7IHN1Y2ggYXMgcmV2ZWFsaW5nIGEgcGVuZGluZyBwb3NpdGlvbi4gVGhpcyBjaGFuZ2UgbGV0cwogICAgICAgIHRoZSBTb3VyY2VDb2RlVGV4dEVkaXRvciBzaWduYWwgdG8gdGhlIFRleHRFZGl0b3IgdGhhdCBpdCBzaG91bGQKICAgICAgICBhdXRvbWF0aWNhbGx5IGZvcm1hdCB0aGUgaW5jb21pbmcgc3RyaW5nIGJlZm9yZSB0aGUgZXh0cmEgcHJvY2Vzc2luZwogICAgICAgIHRha2VzIHBsYWNlLiBOb3cgdGhlIHBlbmRpbmcgcG9zaXRpb24gaXMgdXBkYXRlZCBpbiBfcHJldHR5UHJpbnQsCiAgICAgICAgYW5kIHJldmVhbGVkIGFwcHJvcHJpYXRlbHkuCgogICAgICAgIFJldmlld2VkIGJ5IEFudG9pbmUgUXVpbnQuCgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fY29udGVudFdpbGxQb3B1bGF0ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX2NvbnRlbnREaWRQb3B1bGF0ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3BvcHVsYXRlV2l0aENvbnRlbnQpOgogICAgICAgIE1vdmUgdGhlIGF1dG8gZm9ybWF0dGluZyBkZWNpc2lvbiBmcm9tIGRpZFBvcHVsYXRlIHRvIHdpbGxQb3B1bGF0ZS4KICAgICAgICBJZiBhdXRvZm9ybWF0dGluZyBpcyBuZWVkZWQsIHdlIHNpZ25hbCB0aGUgVGV4dEVkaXRvciBiZWZvcmUgc2V0dGluZwogICAgICAgIHRoZSBzdHJpbmcuCgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuc2V0IHN0cmluZy51cGRhdGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuc2V0IHN0cmluZyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zZXQgYXV0b0Zvcm1hdCk6CiAgICAgICAgS2VlcCBhIGJvb2xlYW4gZm9yIHdoZXRoZXIgb3Igbm90IHdlIHNob3VsZCBhdXRvIGZvcm1hdCB3aGVuIHNldHRpbmcKICAgICAgICB0aGUgc3RyaW5nLiBXaGVuIHNldHRpbmcgdGhlIHN0cmluZywgZm9ybWF0IGlmIG5lZWRlZCwgYWZ0ZXIgY2xlYXJpbmcKICAgICAgICB0aGUgaGlzdG9yeSBhbmQgYmVmb3JlIGFueSBwZW5kaW5nIHBvc2l0aW9uIHJldmVhbHMuCgoyMDEzLTA1LTMwICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNDAzMDI4OT4gR290byBhcnJvdyBmcm9tIFRpbWVsaW5lcyB0byBhdXRvZm9ybWF0dGVkIHNjcmlwdCBub3QgaGlnaGxpZ2h0aW5nIGxpbmUgY29ycmVjdGx5CgogICAgICAgIFJlbmFtZSAicmV2ZWFsTGluZSIgdG8gInJldmVhbFBvc2l0aW9uIi4gTm93LCBpZiB0aGUgZmlyc3QgcmV2ZWFsIGlzCiAgICAgICAgZm9yIGEgcG9zaXRpb24gaW4gcHJldHR5IHByaW50ZWQgY29kZSwgaXQgY2FuIGJlIHJlbWFwcGVkIHRvIGFuCiAgICAgICAgYXBwcm9wcmlhdGUgKGxpbmUsIGNvbHVtbiksIGluc3RlYWQgb2Ygd2hhdGV2ZXIgKGxpbmUsIDApIG1hcHBlZCB0by4KCiAgICAgICAgVGhlcmUgaXMgb25lIGJ1ZyBmaXggaGVyZSwgdGhlIF9wcmV0dHlQcmludCBpbiBUZXh0RWRpdG9yIHdhcwogICAgICAgIGluY29ycmVjdGx5IGRvaW5nIHRoaXMuX2xpbmVOdW1iZXJUb1JldmVhbC5saW5lTnVtYmVyLCB3aGljaCBzaG91bGQKICAgICAgICBoYXZlIGp1c3QgYmVlbiB0aGlzLl9saW5lTnVtYmVyVG9SZXZlYWwuIEhvd2V2ZXIsIHRoaXMgY29kZSB3YXMgbm90CiAgICAgICAgZ2V0dGluZyByZWFjaGVkIGluIGl0cyBjdXJyZW50IGZvcm0uIFRoYXQgd2lsbCBiZSBhZGRyZXNzZWQgaW4gdGhlCiAgICAgICAgbmV4dCBwYXJ0LgoKICAgICAgICBSZXZpZXdlZCBieSBBbnRvaW5lIFF1aW50LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWVDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lQ29udGVudFZpZXcucHJvdG90eXBlLnNob3dTb3VyY2VDb2RlKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VDbHVzdGVyQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZUNsdXN0ZXJDb250ZW50Vmlldy5wcm90b3R5cGUuc2hvd1Jlc3BvbnNlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlQ2x1c3RlckNvbnRlbnRWaWV3LnByb3RvdHlwZS5fcmVzb3VyY2VMb2FkaW5nRGlkRmluaXNoKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuc2hvd1NvdXJjZUNvZGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLnNob3dTb3VyY2VDb2RlTG9jYXRpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLnNob3dPcmlnaW5hbFVuZm9ybWF0dGVkU291cmNlQ29kZUxvY2F0aW9uKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5zaG93T3JpZ2luYWxPckZvcm1hdHRlZFNvdXJjZUNvZGVMb2NhdGlvbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuc2hvd1NvdXJjZUNvZGVUZXh0UmFuZ2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLnNob3dPcmlnaW5hbE9yRm9ybWF0dGVkU291cmNlQ29kZVRleHRSYW5nZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NjcmlwdENvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0Q29udGVudFZpZXcucHJvdG90eXBlLnJldmVhbFBvc2l0aW9uKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dENvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dENvbnRlbnRWaWV3LnByb3RvdHlwZS5yZXZlYWxQb3NpdGlvbik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zZXQgc3RyaW5nLnVwZGF0ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zZXQgc3RyaW5nKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnJldmVhbE5leHRTZWFyY2hSZXN1bHQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUubGluZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS51cGRhdGVMYXlvdXQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3RleHRSYW5nZUZyb21Db2RlTWlycm9yUG9zaXRpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX2NvZGVNaXJyb3JQb3NpdGlvbkZyb21UZXh0UmFuZ2UpOgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5yZXZlYWxQb3NpdGlvbik6CgoyMDEzLTA1LTMwICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNDAzMDI4OT4gR290byBhcnJvdyBmcm9tIFRpbWVsaW5lcyB0byBhdXRvZm9ybWF0dGVkIHNjcmlwdCBub3QgaGlnaGxpZ2h0aW5nIGxpbmUgY29ycmVjdGx5CgogICAgICAgIEFkZCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVBvc2l0aW9uLiBSYXRoZXIgdGhhbiBwYXNzaW5nIGxpbmVOdW1iZXIKICAgICAgICBhbmQgY29sdW1uTnVtYmVyIGFzIHNlcGFyYXRlIHBhcmFtZXRlcnMgYWxsIG92ZXIgdGhlIHBsYWNlLCB3ZSBjYW4KICAgICAgICBwYXNzIGEgcG9zaXRpb24gb2JqZWN0LiBDcmVhdGUgcG9zaXRpb25zIGFzIGFwcHJvcHJpYXRlIGZyb20gb3RoZXIKICAgICAgICBjbGFzc2VzIGxpa2UgU291cmNlQ29kZUxvY2F0aW9uIGFuZCBUZXh0UmFuZ2UuCgogICAgICAgIFJldmlld2VkIGJ5IEFudG9pbmUgUXVpbnQuCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGVMb2NhdGlvbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVMb2NhdGlvbi5wcm90b3R5cGUucG9zaXRpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZUxvY2F0aW9uLnByb3RvdHlwZS5mb3JtYXR0ZWRQb3NpdGlvbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlTG9jYXRpb24ucHJvdG90eXBlLmRpc3BsYXlQb3NpdGlvbik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGVQb3NpdGlvbi5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlUG9zaXRpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVBvc2l0aW9uLnByb3RvdHlwZS5nZXQgbGluZU51bWJlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlUG9zaXRpb24ucHJvdG90eXBlLmdldCBjb2x1bW5OdW1iZXIpOgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0UmFuZ2UuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmFuZ2UucHJvdG90eXBlLnN0YXJ0UG9zaXRpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJhbmdlLnByb3RvdHlwZS5lbmRQb3NpdGlvbik6CgoyMDEzLTA1LTMwICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNDAzMDI4OT4gR290byBhcnJvdyBmcm9tIFRpbWVsaW5lcyB0byBhdXRvZm9ybWF0dGVkIHNjcmlwdCBub3QgaGlnaGxpZ2h0aW5nIGxpbmUgY29ycmVjdGx5CgogICAgICAgIFJlbW92ZSBhIHJldmVhbCB0aGF0IGFsd2F5cyBoYXBwZW5zIHdpdGggbGluZSBudW1iZXIgMC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci50b2dnbGVDb25zb2xlVmlldyk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLnNob3dNYWluRnJhbWVTb3VyY2VDb2RlKToKCjIwMTMtMDUtMzAgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgVW5wcmVmaXggdXNlcyBvZiAiLXdlYmtpdC1jYWxjIi4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IuY3NzOgogICAgICAgICguY3NzLXN0eWxlLXRleHQtZWRpdG9yID4gLkNvZGVNaXJyb3IgLkNvZGVNaXJyb3ItbGluZXMgLmNvbG9yLXN3YXRjaCk6CgoyMDEzLTA1LTMwICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNDAyODU3Nj4gSW5zcGVjdG9yIGZpbmRzIENTUyBjb2xvciBuYW1lcyBpbiBvdGhlciBzdHJpbmdzCgogICAgICAgIEJlIGEgbGl0dGxlIG1vcmUgcGlja3kgd2l0aCBvdXIgQ1NTIHJlZ2V4LCBhbmQgaW5jbHVkZSBzb21lIHBvc3QtcHJvY2Vzc2luZwogICAgICAgIHRvIGFjdCBhcyBhIG5lZ2F0aXZlIGxvb2tiZWhpbmQsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gSmF2YVNjcmlwdCByZWdleGVzLgogICAgICAgIERvIG5vdCBhbGxvdyBjb2xvciBuYW1lcyB0aGF0IGFyZSBwcmVmaXhlZCBvciBwb3N0LWZpeGVkIHdpdGggJy0nIG9yICcuJy4KCiAgICAgICAgVGVzdHMgY2FzZXMgdGhhdCBwcmV2aW91c2x5IHdvdWxkIGhhdmUgcHJvZHVjZWQgc3dhdGNoZXM6CgogICAgICAgICAgdXJsKGdvbGQucG5nKTsKICAgICAgICAgIHVybCgiZm9vbHMtZ29sZC5wbmciKTsKICAgICAgICAgIHVybChmb29scy5nb2xkLnBuZyk7CgogICAgICAgIFVzaW5nIGEgcmVnZXggaXMgb2YgY291cnNlIGFuIGltcGVyZmVjdCBzb2x1dGlvbiwgYnV0IGl0IGNvdmVycyB0aGUgbWFqb3JpdHkKICAgICAgICBvZiBjYXNlcyBhbmQgd29ya3Mgd2VsbC4gSXQgYWxzbyBhbGxvd3MgdXMgdG8gZGV0ZWN0IGNvbG9ycyBpbiBjb21tZW50cyBhbmQKICAgICAgICBwcm92aWRlIGNvbG9yIHN3YXRjaGVzIGZvciB0aG9zZS4gVGhpcyBhbGxvd3MgdXMgdG8gZmlsdGVyIG91dCBzb21lIG1vcmUKICAgICAgICBpbmFwcHJvcHJpYXRlIGNhc2VzLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS4pOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLl9jcmVhdGVDb2xvclN3YXRjaGVzKToKCjIwMTMtMDUtMzAgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE0MDIzNjQ5PiBObyAtd2Via2l0LWZpbHRlciBhdXRvY29tcGxldGlvbgoKICAgICAgICBBZGQgZnVuY3Rpb25zIHRvIENTUyBjb21wbGV0aW9uIHN1Z2dlc3Rpb25zLiBXaGVuIHRoZSBjb21wbGV0aW9uCiAgICAgICAgc3VnZ2VzdGlvbiBpcyBzaG93aW5nIGl0IGhhcyBib3RoIHBhcmVucywgd2hlbiBjb21taXR0ZWQsIHRoZSBjdXJzb3IgaXMKICAgICAgICBwbGFjZWQgaW5zaWRlIHRoZSB0d28gcGFyZW5zIHNvIHVzZXJzIGNhbiBrZWVwIHR5cGluZy4KCiAgICAgICAgVGhpcyBhZGRzIGEgYnVuY2ggb2YgY29tbW9uIGZ1bmN0aW9uIGNvbXBsZXRpb25zLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NLZXl3b3JkQ29tcGxldGlvbnMuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUuX2NvbW1pdENvbXBsZXRpb25IaW50KToKCjIwMTMtMDUtMzAgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzOTk0NDg1PiBIb3ZlcmluZyBlbGVtZW50IGJyZWFkY3J1bWJzIHNob3VsZCBoaWdobGlnaHQgZWxlbWVudCBvbiBwYWdlCgogICAgICAgIFdoZW4gaG92ZXJpbmcgRE9NVHJlZUVsZW1lbnRQYXRoQ29tcG9uZW50cyBoaWdobGlnaHQgdGhlIGFzc29jaWF0ZWQKICAgICAgICBub2RlIG9uIHRoZSBwYWdlLCBsaWtlIHdoZW4geW91IGhvdmVyIHRoZSBET01UcmVlRWxlbWVudC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgRGVhbiBKYWNrc29uLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSGllcmFyY2hpY2FsUGF0aENvbXBvbmVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkhpZXJhcmNoaWNhbFBhdGhDb21wb25lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuSGllcmFyY2hpY2FsUGF0aENvbXBvbmVudC5wcm90b3R5cGUuX3NlbGVjdEVsZW1lbnRNb3VzZU92ZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuSGllcmFyY2hpY2FsUGF0aENvbXBvbmVudC5wcm90b3R5cGUuX3NlbGVjdEVsZW1lbnRNb3VzZU91dCk6CiAgICAgICAgUHJvdmlkZSBob29rcyBmb3Igc3ViY2xhc3MgbW91c2VPdmVyIGFuZCBtb3VzZU91dCBmdW5jdGlvbnMuCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlRWxlbWVudFBhdGhDb21wb25lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlRWxlbWVudFBhdGhDb21wb25lbnQucHJvdG90eXBlLmdldCBuZXh0U2libGluZyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlRWxlbWVudFBhdGhDb21wb25lbnQucHJvdG90eXBlLm1vdXNlT3Zlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlRWxlbWVudFBhdGhDb21wb25lbnQucHJvdG90eXBlLm1vdXNlT3V0KToKICAgICAgICBJbXBsZW1lbnQgdGhlIG1vdXNlT3ZlciBhbmQgbW91c2VPdXQgdG8gc2hvdyAvIGhpZGUgdGhlIERPTSBoaWdobGlnaHQuCgoyMDEzLTA1LTMwICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNDAyMDIwNj4gRGVidWdnZXIgcG9wb3ZlciBub3Qgc2hvd2luZyBmb3IgInRoaXMiCgogICAgICAgIEFsbG93IHBvcG92ZXIgZm9yIHRoZSBrZXl3b3JkICJ0aGlzIi4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5wcm90b3R5cGUuX3Byb2Nlc3NKYXZhU2NyaXB0RXhwcmVzc2lvbik6CgoyMDEzLTA1LTI4ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNDAwNzQ5NT4gV2ViIEluc3BlY3RvciBoYXMgIkluc3RydW1lbnRzLCIgYnV0IHRoaXMgaXMgYWxyZWFkeSBhIGZlYXR1cmUgaW4gWGNvZGUKCiAgICAgICAgUmVuYW1lIHRoZSAiSW5zdHJ1bWVudHMiIE5hdmlnYXRpb24gU2lkZWJhciB0byAiVGltZWxpbmVzIi4gTWFya2V0aW5nCiAgICAgICAgaGFkIGNvbmNlcm5zIGFib3V0IHVzaW5nIHRoZSBzYW1lIG5hbWUgaW4gbXVsdGlwbGUgcGxhY2VzLgoKICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9JbnN0cnVtZW50U2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zdHJ1bWVudFNpZGViYXJQYW5lbCk6CgoyMDEzLTA1LTI4ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNDAwNjU1MD4gQ29uc29sZSBlcnJvcnMgcGVyc2lzdCB3aGVuIHlvdSBuYXZpZ2F0ZSB0byBvdGhlciBwYWdlcwoKICAgICAgICBUaGUgY29uc29sZSBjYW4gY2xlYXIgaW4gdHdvIHdheXMsIGhhbmRsZSBib3RoIGV2ZW50cy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGFzaGJvYXJkTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhc2hib2FyZE1hbmFnZXIpOgoKMjAxMy0wNS0yNyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEZpeCBjb3B5IGhhbmRlbGluZyBmb3IgRGF0YUdyaWQuCgogICAgICAgIFdoZW4gdGV4dCBzZWxlY3Rpb24gd2FzIGRpc2FibGVkIGluIHI0ODg2NiwgdGhhdCBicm9rZSB0aGUgY29weSBldmVudAogICAgICAgIGhhbmRsZXJzIGZvciBEYXRhR3JpZC4gVGhhdCBjaGFuZ2UgcHJldmVudHMgZm9jdXMgZnJvbSBtYWtpbmcgYSBjYXJldAogICAgICAgIHNlbGVjdGlvbiBpbnNpZGUgdGhlIERhdGFHcmlkIChpdCBnb2VzIG91dHNpZGUgdG8gdGhlIG5lYXJlc3Qgc2VsZWN0YWJsZQogICAgICAgIHRleHQpLiBUaGlzIGJyb2tlIGJ1YmJsaW5nIG9mIHRoZSBjb3B5IGV2ZW50IHRvIHRoZSByaWdodCBlbGVtZW50cy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFHcmlkLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YUdyaWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YUdyaWQucHJvdG90eXBlLmhhbmRsZUJlZm9yZUNvcHlFdmVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhR3JpZC5wcm90b3R5cGUuaGFuZGxlQ29weUV2ZW50KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLl9iZWZvcmVjb3B5KToKICAgICAgICAoV2ViSW5zcGVjdG9yLl9jb3B5KToKCjIwMTMtMDUtMjcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBbGxvdyBkYXRhIGdyaWQgdmFsdWUgY29sdW1uJ3MgaW4gZGV0YWlscyBzZWN0aW9ucyB3cmFwIHRvIG11bHRpcGxlIGxpbmVzLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTIzMjk5MDU+IENhbid0IGVhc2lseSB2aWV3IGxvbmcgaGVhZGVyIHZhbHVlcwoKICAgICAgICBSZXZpZXdlZCBieSBBbnRvaW5lIFF1aW50LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YUdyaWQuY3NzOgogICAgICAgICguZGF0YS1ncmlkIHRyLnNlbGVjdGVkKToKICAgICAgICAoLmRhdGEtZ3JpZDpmb2N1cyB0ci5zZWxlY3RlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RldGFpbHNTZWN0aW9uLmNzczoKICAgICAgICAoLmRldGFpbHMtc2VjdGlvbiA+IC5jb250ZW50IC5kYXRhLWdyaWQgdGFibGUuZGF0YSk6CiAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24gPiAuY29udGVudCAuZGF0YS1ncmlkIHRyOm50aC1jaGlsZChldmVuKSk6CiAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24gPiAuY29udGVudCAuZGF0YS1ncmlkIHRyOm50aC1jaGlsZChvZGQpKToKICAgICAgICAoLmRldGFpbHMtc2VjdGlvbiA+IC5jb250ZW50IC5kYXRhLWdyaWQgdGQudmFsdWUtY29sdW1uKToKICAgICAgICAoLmRldGFpbHMtc2VjdGlvbiA+IC5jb250ZW50IC5kYXRhLWdyaWQgdGQudmFsdWUtY29sdW1uID4gZGl2KToKCjIwMTMtMDUtMjcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBPbmx5IGFkZCBldmVudCBtYXJrZXJzIGZvciB0aGUgbWFpbiBmcmFtZS4KCiAgICAgICAgVGhlIGV2ZW50IG1hcmtlcnMgZm9yIGZyYW1lIGhlYXZ5IHBhZ2VzIGFyZSB0b28gbm9pc3kgYW5kIG5vdCB2ZXJ5CiAgICAgICAgdXNlZnVsLiBXZSBhbHNvIGRpZG4ndCBkaXN0aW5ndWlzaCBmcmFtZXMgaW4gdGhlIG1hcmtlciB0b29sdGlwcy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuZXZlbnRSZWNvcmRlZC5wcm9jZXNzUmVjb3JkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuZXZlbnRSZWNvcmRlZCk6CgoyMDEzLTA1LTI2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgU3RvcCB1c2luZyBhIENTUyBkcm9wLXNoYWRvdyBmaWx0ZXIgZm9yIHRoZSBXZWIgSW5zcGVjdG9yIHBvcG92ZXIuCgogICAgICAgIFVzZSB0aGUgZXhpc3RpbmcgYmFja2dyb3VuZCBjYW52YXMgdG8gZHJhdyB0aGUgZHJvcCBzaGFkb3cgaW5zdGVhZC4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzOTkxOTAyPiBTdG9wIHVzaW5nIENTUyBmaWx0ZXJzIGZvciBQb3BvdmVyCgogICAgICAgIFRoaXMgYWxzbyBmaXhlczoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM5Nzc0NjY+IFBvcG92ZXIgYXJyb3cgaXMgbm90IHBlcmZlY3RseSBjZW50ZXJlZCB3aXRoIGNvbnRlbnQKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUG9wb3Zlci5jc3M6CiAgICAgICAgKC5wb3BvdmVyKToKICAgICAgICAoLnBvcG92ZXIgPiAuY29udGFpbmVyKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUG9wb3Zlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlBvcG92ZXIucHJvdG90eXBlLl91cGRhdGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUG9wb3Zlci5wcm90b3R5cGUuX2RyYXdCYWNrZ3JvdW5kKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlBvcG92ZXIucHJvdG90eXBlLl9iZXN0TWV0cmljc0ZvckVkZ2UpOgoKMjAxMy0wNS0yNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFNob3cgdGhlIHBvcG92ZXIgYWZ0ZXIgYSBkZWxheSBzbyBxdWlja2x5IGFycm93aW5nIGRvd24gdGhlIGdyaWQgZG9lcyBub3QgZmxhc2ggdGhlIHBvcG92ZXIuCgogICAgICAgIEFsc28gcHJldmVudCBzaG93aW5nIHRoZSBwb3BvdmVyIGlmIHRoZSBlbGVtZW50IGlzIGhpZGRlbiwgd2hpY2ggd2FzIGhhcHBlbmluZyBzb21ldGltZXMgZm9yCiAgICAgICAgcm93cyBhdCB0aGUgYm90dG9tIHdoaWNoIHdlcmUgbWFya2VkIGFzIG9mZnNjcmVlbiBzdGlsbC4gUHV0IE1JTl9ZIGJlZm9yZSBNQVhfWCBzbyB0aGUgcG9wb3ZlcgogICAgICAgIGlzIG1vcmUgcHJlZGljdGFibHkgcG9zaXRpb25lZCwgYW5kIHRoaXMgbWF0Y2hlcyBOU1BvcG92ZXIuIFBsdXMgYWx3YXlzIGNsZWFyIHRoZSBwb3BvdmVyCiAgICAgICAgVHJlZU91dGxpbmUgYWZ0ZXIgZ2l2aW5nIHRoZSBwb3BvdmVyIHRpbWUgdG8gYW5pbWF0ZSBvdXQgd2hlbiBoaWRpbmcuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lRGF0YUdyaWQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZURhdGFHcmlkLnByb3RvdHlwZS5fZGF0YUdyaWRTZWxlY3RlZE5vZGVDaGFuZ2VkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lRGF0YUdyaWQucHJvdG90eXBlLl9zaG93UG9wb3ZlckZvclNlbGVjdGVkTm9kZVNvb24uZGVsYXllZFdvcmspOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVEYXRhR3JpZC5wcm90b3R5cGUuX3Nob3dQb3BvdmVyRm9yU2VsZWN0ZWROb2RlU29vbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZURhdGFHcmlkLnByb3RvdHlwZS5faGlkZVBvcG92ZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVEYXRhR3JpZC5wcm90b3R5cGUuX3VwZGF0ZVBvcG92ZXJGb3JTZWxlY3RlZE5vZGUpOgoKMjAxMy0wNS0yNCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBTaG93IGEgaGlnaGxpZ2h0IHF1YWQgb24gdGhlIHNjcmVlbiB3aGVuIHNlbGVjdGluZyBhIExheW91dC9QYWludCByZWNvcmQuCgogICAgICAgIElmIHdlIGtub3cgdGhlIFF1YWQgLyBSZWN0IG9mIGEgUGFpbnQgLyBMYXlvdXQgd2UgY2FuIGhpZ2hsaWdodCB0aGF0CiAgICAgICAgcG9ydGlvbiBvbiB0aGUgaW5zcGVjdGVkIHBhZ2UuIFVuZm9ydHVuYXRlbHkgdGhpcyBpbmZvcm1hdGlvbiBpcyBub3QKICAgICAgICB2ZXJ5IHVzZWZ1bCBhZnRlciB0aGUgcGFnZSBzY3JvbGxzLCBidXQgaXQgY2FuIGJlIHVzZWZ1bC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvR2VvbWV0cnkuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWFkLnByb3RvdHlwZS50b1Byb3RvY29sKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTGF5b3V0VGltZWxpbmVEYXRhR3JpZC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheW91dFRpbWVsaW5lRGF0YUdyaWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5b3V0VGltZWxpbmVEYXRhR3JpZC5wcm90b3R5cGUucmVzZXQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5b3V0VGltZWxpbmVEYXRhR3JpZC5wcm90b3R5cGUuY2FsbEZyYW1lUG9wb3ZlckFuY2hvckVsZW1lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5b3V0VGltZWxpbmVEYXRhR3JpZC5wcm90b3R5cGUuaGlkZGVuKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheW91dFRpbWVsaW5lRGF0YUdyaWQucHJvdG90eXBlLl9sYXlvdXREYXRhR3JpZFNlbGVjdGVkTm9kZUNoYW5nZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5b3V0VGltZWxpbmVEYXRhR3JpZC5wcm90b3R5cGUuX2hpZGVIaWdobGlnaHRJZk5lZWRlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lRGF0YUdyaWQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZURhdGFHcmlkLnByb3RvdHlwZS5zaG93bik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZURhdGFHcmlkLnByb3RvdHlwZS5oaWRkZW4pOgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZXNDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5zaG93VGltZWxpbmVGb3JSZWNvcmRUeXBlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5zaG93bik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldy5wcm90b3R5cGUuaGlkZGVuKToKCjIwMTMtMDUtMjQgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyNjU2NjgzPiBTaG93IHdob2xlIEpTIHN0YWNrIGZvciBsYXlvdXQgJiByZW5kZXJpbmcgdHJpZ2dlcnMKCiAgICAgICAgQ2xlYXIgdGhlIHBvcG92ZXIncyBjb250ZW50cyB3aGVuIHRoZSBjb250ZW50IHZpZXcgaXMgcmVzZXQgc28KICAgICAgICB3ZSBkb24ndCBsZWFrIGFueXRoaW5nIGhlbGQgYnkgdGhlIENhbGxGcmFtZVRyZWVFbGVtZW50cy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmV0d29ya0RhdGFHcmlkLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya0RhdGFHcmlkLnByb3RvdHlwZS5yZXNldCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lRGF0YUdyaWQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZURhdGFHcmlkLnByb3RvdHlwZS5yZXNldCk6CgoyMDEzLTA1LTI0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjY1NjY4Mz4gU2hvdyB3aG9sZSBKUyBzdGFjayBmb3IgbGF5b3V0ICYgcmVuZGVyaW5nIHRyaWdnZXJzCgogICAgICAgIFN0YWNrIHRyYWNlIGluZm9ybWF0aW9uIGlzIGFscmVhZHkgYXZhaWxhYmxlIGZyb20gdGhlIGJhY2tlbmQuIERpc3BsYXkKICAgICAgICBpdCBpbiBhIHBvcG92ZXIgd2hlbiB0aGUgY29ycmVzcG9uZGluZyByb3cgaW4gdGhlIGRhdGEgZ3JpZCBpcyBzZWxlY3RlZC4KICAgICAgICBVc2VycyBjYW4gdGhlbiBjbGljayBhIGNhbGwgZnJhbWUgdG8ganVtcCB0byB0aGF0IHNvdXJjZSBjb2RlIGxvY2F0aW9uLgoKICAgICAgICBCZWNhdXNlIGJvdGggTGF5b3V0IGFuZCBTY3JpcHQgdGltZWxpbmVzIGluY2x1ZGUgY2FsbCB0cmFjZXMsIHRoaXMgaXMKICAgICAgICBtYWRlIGdlbmVyaWMgYW4gcHV0IGluIFRpbWVsaW5lRGF0YUdyaWQuIFN1YmNsYXNzZXMgdGVsbCB0aGUgc3VwZXJjbGFzcwogICAgICAgIHdoaWNoIGVsZW1lbnQgdG8gYW5jaG9yIHRoZSBwb3BvdmVyIG5leHQgdG8sIGJ1dCB0aGUgc3VwZXJjbGFzcyBoYW5kbGVzCiAgICAgICAgc2hvd2luZyB0aGUgcG9wb3Zlci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ2FsbEZyYW1lVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DYWxsRnJhbWVUcmVlRWxlbWVudCk6CiAgICAgICAgQWxsb3cgYSBDYWxsRnJhbWVUcmVlRWxlbWVudCBmb3IgbmF0aXZlIGNvZGUgY2FsbCBmcmFtZXMuIFN1Y2ggY2FsbAogICAgICAgIGZyYW1lcyBkb24ndCBoYXZlIGEgc291cmNlIGNvZGUgbG9jYXRpb24sIHNvIHRoZXkgaGF2ZSBubyBzdWJ0aXRsZS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OYXRpdmUucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ2FsbEZyYW1lSWNvbnMuY3NzOgogICAgICAgICgubmF0aXZlLWljb24gLmljb24pOgogICAgICAgIFRoaXMgaXMgYSBkdXBsaWNhdGUgb2YgdGhlIERPTU5vZGUucGRmIGdyYXkgW05dIGljb24uCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CiAgICAgICAgSW5jbHVkZSBuZXcgZmlsZXMuCgogICAgICAgICogVXNlckludGVyZmFjZS9OZXR3b3JrRGF0YUdyaWQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrRGF0YUdyaWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9TY3JpcHRUaW1lbGluZURhdGFHcmlkLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFRpbWVsaW5lRGF0YUdyaWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0VGltZWxpbmVEYXRhR3JpZC5wcm90b3R5cGUuY2FsbEZyYW1lUG9wb3ZlckFuY2hvckVsZW1lbnQpOgogICAgICAgICogVXNlckludGVyZmFjZS9MYXlvdXRUaW1lbGluZURhdGFHcmlkLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkxheW91dFRpbWVsaW5lRGF0YUdyaWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5b3V0VGltZWxpbmVEYXRhR3JpZC5wcm90b3R5cGUuY2FsbEZyYW1lUG9wb3ZlckFuY2hvckVsZW1lbnQpOgogICAgICAgIEdpdmUgZWFjaCBUaW1lbGluZURhdGFHcmlkIHN1YmNsYXNzIGl0cyBvd24gY2xhc3MuIEltcGxlbWVudCBvbmx5CiAgICAgICAgd2hhdCBpcyBuZWVkZWQuIFRoZSBuZXcgc3ViY2xhc3NlcyBwcm92aWRlIHRoZSBlbGVtZW50IGZvciB0aGUKICAgICAgICBzdXBlcmNsYXNzIHRvIGFuY2hvciB0aGUgY2FsbCBmcmFtZSBwb3BvdmVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVzQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldyk6CiAgICAgICAgSW5zdGFudGlhdGUgdGhlIHNwZWNpZmljIERhdGFHcmlkIHR5cGVzLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVEYXRhR3JpZC5jc3M6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZURhdGFHcmlkLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVEYXRhR3JpZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZURhdGFHcmlkLnByb3RvdHlwZS5jYWxsRnJhbWVQb3BvdmVyQW5jaG9yRWxlbWVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZURhdGFHcmlkLnByb3RvdHlwZS5fc2NvcGVCYXJTZWxlY3RlZEl0ZW1zRGlkQ2hhbmdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lRGF0YUdyaWQucHJvdG90eXBlLl9kYXRhR3JpZFNlbGVjdGVkTm9kZUNoYW5nZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVEYXRhR3JpZC5wcm90b3R5cGUuX3dpbmRvd1Jlc2l6ZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVEYXRhR3JpZC5wcm90b3R5cGUuX2hpZGVQb3BvdmVyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lRGF0YUdyaWQucHJvdG90eXBlLl91cGRhdGVQb3BvdmVyRm9yU2VsZWN0ZWROb2RlKToKICAgICAgICBTaG93IGFuZCBtYW5hZ2VyIHRoZSBwb3BvdmVyLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lRGF0YUdyaWQucHJvdG90eXBlLl9jcmVhdGVQb3BvdmVyQ29udGVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZURhdGFHcmlkLnByb3RvdHlwZS5fcG9wb3ZlckNhbGxTdGFja1RyZWVFbGVtZW50U2VsZWN0ZWQpOgogICAgICAgIFBvcG92ZXIgY29udGVudCBpcyBhIFRyZWVPdXRsaW5lIGNvbnRhaW5pbmcgQ2FsbEZyYW1lVHJlZUVsZW1lbnRzLgogICAgICAgIFdoZW4gYSBjYWxsIGZyYW1lIGlzIHNlbGVjdGVkLCByZXZlYWwgdGhlIHNvdXJjZSBjb2RlIGxvY2F0aW9uLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YUdyaWQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUucHJvdG90eXBlLmVsZW1lbnRXaXRoQ29sdW1uSWRlbnRpZmllcik6CiAgICAgICAgSGVscGVyIGZvciBhY2Nlc3NpbmcgYSBzcGVjaWZpYyA8dGQ+IGluc2lkZSBhIDx0cj4gYnkgY29sdW1uIG5hbWUuCgoyMDEzLTA1LTI0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIFN3aXRjaCBmcm9tICJYIiBhbmQgIlkiIHRvICJBcmVhIiBpbiB0aGUgTGF5b3V0IFRpbWVsaW5lCgogICAgICAgIEZvciB0cmFuc2Zvcm1lZCBwYWludCByZWN0cyBhbiBYLCBZLCBXaWR0aCBhbmQgSGVpZ2h0LCBkaWRuJ3QgbWFrZQogICAgICAgIHNlbnNlLCBzbyB0aGUgYmFja2VuZCBzd2l0Y2hlZCB0byBxdWFkcy4gSW5zdGVhZCBvZiBzaG93aW5nIGFwcHJveGltYXRlCiAgICAgICAgdmFsdWVzLCBsaWtlIHRoZSBib3VuZGluZyBib3gsIGxldHMganVzdCByZW1vdmUgdW5rbm93bnMgYW5kIHN3aXRjaAogICAgICAgIHRvIHNob3dpbmcgdGhlIEFyZWEgaW5zdGVhZC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTGF5b3V0VGltZWxpbmVEYXRhR3JpZE5vZGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXlvdXRUaW1lbGluZURhdGFHcmlkTm9kZS5wcm90b3R5cGUuY3JlYXRlQ2VsbENvbnRlbnQpOgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZXNDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3KToKCjIwMTMtMDUtMjQgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgUmVzdG9yZSBXaWR0aCBhbmQgSGVpZ2h0IHZhbHVlcyBmb3IgTGF5b3V0cyBhbmQgUGFpbnRzIGluIFRpbWVsaW5lCgogICAgICAgIFRoZSBiYWNrZW5kIGNoYW5nZWQgYSB3aGlsZSBiYWNrIGZyb20gaW5jbHVkaW5nIHJlY3QgdmFsdWVzLCB0byBxdWFkCiAgICAgICAgdmFsdWVzLiBXZSBzaG91bGQgbW92ZSBhd2F5IGZyb20gWCBhbmQgWSBhbmQgaW5zdGVhZCBzaG93IEFyZWEuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0dlb21ldHJ5LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVhZCk6CiAgICAgICAgUHJvdmlkZSBhIHdyYXBwZXIgb2JqZWN0IGZvciB0aGUgcHJvdG9jb2wgUXVhZCByZXByZXNlbnRhdGlvbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuZXZlbnRSZWNvcmRlZC5wcm9jZXNzUmVjb3JkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuZXZlbnRSZWNvcmRlZCk6CiAgICAgICAgSW5nZXN0IG5ldyBhbmQgb2xkIExheW91dCBhbmQgUGFpbnQgdGltZWxpbmUgcmVjb3JkLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTGF5b3V0VGltZWxpbmVSZWNvcmQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXlvdXRUaW1lbGluZVJlY29yZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXlvdXRUaW1lbGluZVJlY29yZC5wcm90b3R5cGUuZ2V0IGFyZWEpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5b3V0VGltZWxpbmVSZWNvcmQucHJvdG90eXBlLmdldCByZWN0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheW91dFRpbWVsaW5lUmVjb3JkLnByb3RvdHlwZS5nZXQgcXVhZCk6CiAgICAgICAgQSByZWNvcmQgbWF5IGJlIHdyYXBwaW5nIGEgcXVhZC4KCjIwMTMtMDUtMjQgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgVXNlIFNvdXJjZUNvZGVMb2NhdGlvbnMgd2hlbiBkaXNwbGF5aW5nIFNjcmlwdCBsb2NhdGlvbnMuCgogICAgICAgIFVzaW5nIFNvdXJjZUNvZGVMb2NhdGlvbnMgYWxsb3dzIHRoZSBsb2NhdGlvbnMgdG8gc2hvdyBmb3JtYXR0ZWQKICAgICAgICBhbmQgZGlzcGxheSBsb2NhdGlvbnMgYW5kIGlzIHRoZXJlZm9yZSBtb3JlIGFjY3VyYXRlLiBJdCBhbHNvIHNob3dzCiAgICAgICAgdGhlIHRvb2x0aXAgYW5kIGRpc3BsYXkgc3RyaW5ncyBjb25zaXN0ZW50IHdpdGggdGhlIHJlc3Qgb2YgdGhlIFVJLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9TY3JpcHRUaW1lbGluZURhdGFHcmlkTm9kZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFRpbWVsaW5lRGF0YUdyaWROb2RlLnByb3RvdHlwZS5jcmVhdGVDZWxsQ29udGVudCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NjcmlwdFRpbWVsaW5lUmVjb3JkLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0VGltZWxpbmVSZWNvcmQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0VGltZWxpbmVSZWNvcmQucHJvdG90eXBlLmdldCBsaW5lTnVtYmVyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFRpbWVsaW5lUmVjb3JkLnByb3RvdHlwZS5nZXQgY2FsbEZyYW1lcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRUaW1lbGluZVJlY29yZC5wcm90b3R5cGUuZ2V0IHNvdXJjZUNvZGVMb2NhdGlvbik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuZXZlbnRSZWNvcmRlZC5wcm9jZXNzUmVjb3JkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuZXZlbnRSZWNvcmRlZCk6CgoyMDEzLTA1LTI0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIEFkZCBTY3JpcHQgVGltZWxpbmUgcmVjb3JkcyBmb3IgSW5zdGFsbGluZyAvIFJlbW92aW5nIFRpbWVsaW5lcwoKICAgICAgICBXZSBoYWQgcmVjb3JkcyBmb3IgVGltZXJGaXJlZCBidXQgbm90IGluc3RhbGwgLyByZW1vdmUuIEl0IGlzIHNvbWV0aW1lcwogICAgICAgIHVzZWZ1bCB0byBzZWUgdGhlIHN0YWNrIHRyYWNlcyB3aGVyZSB0aW1lcnMgYXJlIGFkZGVkIGFuZCByZW1vdmVkLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9TY3JpcHRUaW1lbGluZVJlY29yZC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFRpbWVsaW5lUmVjb3JkLkV2ZW50VHlwZS5kaXNwbGF5TmFtZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuZXZlbnRSZWNvcmRlZC5wcm9jZXNzUmVjb3JkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuZXZlbnRSZWNvcmRlZCk6CgoyMDEzLTA1LTI0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIFJlbW92ZSBzb21lIHVudXNlZCBvbGQgc3R5bGUgRGF0YUdyaWQgZXZlbnRzLgoKICAgICAgICBUaGVzZSBldmVudHMgYXJlIG5vdCB1c2VkIGFueXdoZXJlLCBhbmQgd2UgaGF2ZSBhIG5ldyBzdHlsZSBldmVudC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YUdyaWQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUucHJvdG90eXBlLnNlbGVjdCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUucHJvdG90eXBlLmRlc2VsZWN0KToKCjIwMTMtMDUtMjMgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgVHVybiBvZmYgc3BlbGxjaGVja2luZyBvbiBzb21lIHRleHQgaW5wdXRzLgoKICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBLaWx6ZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9CcmVha3BvaW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUuX2VkaXRCcmVha3BvaW50UG9wb3ZlckNvbnRlbnRFbGVtZW50KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRmluZEJhbm5lci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkZpbmRCYW5uZXIpOgoKMjAxMy0wNS0yNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFRhZyBhbGwgV2ViIEluc3BlY3RvciBpbWFnZXMgd2l0aCBjb3B5cmlnaHQgaW5mby4KCiAgICAgICAgQWRkZWQgdG8gYWxsIGltYWdlczogQ29weXJpZ2h0IKkgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgICAgIFJlcXVlc3RlZCBieSBKb3ljZSBDaG93LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0FwcGxpY2F0aW9uQ2FjaGUucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvQXBwbGljYXRpb25DYWNoZUAyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9BcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3QucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0QDJ4LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0JhY2tBcnJvdy5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Cb3R0b21VcFRyZWUucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvQnJlYWtwb2ludC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9CcmVha3BvaW50QDJ4LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0JyZWFrcG9pbnRCdXR0b24ucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvQnJlYWtwb2ludEluYWN0aXZlLnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0JyZWFrcG9pbnRJbmFjdGl2ZUAyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9CcmVha3BvaW50SW5hY3RpdmVCdXR0b24ucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvQ2xpcHBpbmdDU1MucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvQ2xpcHBpbmdDU1NAMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvQ2xpcHBpbmdHZW5lcmljLnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0NsaXBwaW5nR2VuZXJpY0AyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9DbGlwcGluZ0pTLnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0NsaXBwaW5nSlNAMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvQ2xvc2UucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvQ29sb3JzLnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0NvbG9yc0AyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Db29raWUucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvQ29va2llQDJ4LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0Nyb3NzaGFpci5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9ET01DaGFyYWN0ZXJEYXRhLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RPTUNvbW1lbnQucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRE9NRG9jdW1lbnQucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRE9NRG9jdW1lbnRUeXBlLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RPTUVsZW1lbnQucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRE9NTm9kZS5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9ET01UZXh0Tm9kZS5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9ET01UcmVlLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RhdGFiYXNlLnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RhdGFiYXNlQDJ4LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RhdGFiYXNlVGFibGUucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRGF0YWJhc2VUYWJsZUAyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9EaXNjbG9zdXJlVHJpYW5nbGVTbWFsbENsb3NlZC5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9EaXNjbG9zdXJlVHJpYW5nbGVTbWFsbE9wZW4ucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRGlzY2xvc3VyZVRyaWFuZ2xlVGlueUNsb3NlZC5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9EaXNjbG9zdXJlVHJpYW5nbGVUaW55T3Blbi5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Eb2NrQm90dG9tLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RvY2tSaWdodC5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Eb2N1bWVudENTUy5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Eb2N1bWVudENTU0AyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Eb2N1bWVudEZvbnQucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRG9jdW1lbnRGb250QDJ4LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RvY3VtZW50R2VuZXJpYy5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Eb2N1bWVudEdlbmVyaWNAMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRG9jdW1lbnRJbWFnZS5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Eb2N1bWVudEltYWdlQDJ4LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RvY3VtZW50SlMucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRG9jdW1lbnRKU0AyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Eb2N1bWVudE1hcmt1cC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Eb2N1bWVudE1hcmt1cEAyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9FcnJvci5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9FcnJvclNtYWxsLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0Vycm9ycy5zdmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9FcnJvcnNFbmFibGVkLnN2ZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0V2ZW50TGlzdGVuZXIucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRXhjZXB0aW9uLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0ZpbHRlckZpZWxkR2x5cGgucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRm9sZGVyR2VuZXJpYy5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Gb2xkZXJHZW5lcmljQDJ4LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0ZvcndhcmRBcnJvdy5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9GdW5jdGlvbi5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Hb1RvQXJyb3cucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvSGllcmFyY2hpY2FsTmF2aWdhdGlvbkl0ZW1DaGV2cm9uLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0luZGV0ZXJtaW5hdGVQcm9ncmVzc1NwaW5uZXIxLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0luZGV0ZXJtaW5hdGVQcm9ncmVzc1NwaW5uZXIxMC5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9JbmRldGVybWluYXRlUHJvZ3Jlc3NTcGlubmVyMTEucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvSW5kZXRlcm1pbmF0ZVByb2dyZXNzU3Bpbm5lcjEyLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0luZGV0ZXJtaW5hdGVQcm9ncmVzc1NwaW5uZXIyLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0luZGV0ZXJtaW5hdGVQcm9ncmVzc1NwaW5uZXIzLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0luZGV0ZXJtaW5hdGVQcm9ncmVzc1NwaW5uZXI0LnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0luZGV0ZXJtaW5hdGVQcm9ncmVzc1NwaW5uZXI1LnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0luZGV0ZXJtaW5hdGVQcm9ncmVzc1NwaW5uZXI2LnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0luZGV0ZXJtaW5hdGVQcm9ncmVzc1NwaW5uZXI3LnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0luZGV0ZXJtaW5hdGVQcm9ncmVzc1NwaW5uZXI4LnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0luZGV0ZXJtaW5hdGVQcm9ncmVzc1NwaW5uZXI5LnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0luc3RydWN0aW9uUG9pbnRlci5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9JbnN0cnVjdGlvblBvaW50ZXJAMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvSXNzdWVzLnN2ZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0lzc3Vlc0VuYWJsZWQuc3ZnOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTGF5ZXJCb3JkZXJzLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0xlc3NDb2x1bW5zLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0xvY2FsU3RvcmFnZS5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Mb2NhbFN0b3JhZ2VAMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTG9ja2VkLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0xvZy5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Mb2dAMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTG9ncy5zdmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9NZW1vcnkuc3ZnOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTW9yZUNvbHVtbnMucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmF2aWdhdGlvbkl0ZW1BbmdsZUJyYWNrZXRzLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05hdmlnYXRpb25JdGVtQnJ1c2hBbmRSdWxlci5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OYXZpZ2F0aW9uSXRlbUJ1Zy5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OYXZpZ2F0aW9uSXRlbUN1cmxleUJyYWNlcy5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OYXZpZ2F0aW9uSXRlbUZpbGUucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmF2aWdhdGlvbkl0ZW1MYXllcnMucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmF2aWdhdGlvbkl0ZW1Mb2cucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmF2aWdhdGlvbkl0ZW1NYWduaWZ5aW5nR2xhc3MucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmF2aWdhdGlvbkl0ZW1TdG9wd2F0Y2gucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmF2aWdhdGlvbkl0ZW1TdG9yYWdlLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05hdmlnYXRpb25JdGVtVHJhc2gucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmF2aWdhdGlvbkl0ZW1WYXJpYWJsZS5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrLnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05ldHdvcmtAMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0JhckJsdWUucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0JhckJsdWVAMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0JhckdyYXkucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0JhckdyYXlAMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0JhckdyZWVuLnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05ldHdvcmtCYXJHcmVlbkAyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrQmFyTGFiZWxDYWxsb3V0TGVmdC5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrQmFyTGFiZWxDYWxsb3V0UmlnaHQucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0JhckxhYmVsQ2FsbG91dFdoaXRlTGVmdC5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrQmFyTGFiZWxDYWxsb3V0V2hpdGVSaWdodC5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrQmFyT3JhbmdlLnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05ldHdvcmtCYXJPcmFuZ2VAMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0JhclB1cnBsZS5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrQmFyUHVycGxlQDJ4LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05ldHdvcmtCYXJSZWQucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0JhclJlZEAyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrQmFyV2hpdGVGbGF0LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05ldHdvcmtCYXJXaGl0ZUZsYXRAMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0JhclllbGxvdy5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrQmFyWWVsbG93QDJ4LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05ldHdvcmtIb2xsb3dCYXJCbHVlLnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05ldHdvcmtIb2xsb3dCYXJCbHVlQDJ4LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05ldHdvcmtIb2xsb3dCYXJHcmF5LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05ldHdvcmtIb2xsb3dCYXJHcmF5QDJ4LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05ldHdvcmtIb2xsb3dCYXJHcmVlbi5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrSG9sbG93QmFyR3JlZW5AMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0hvbGxvd0Jhck9yYW5nZS5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrSG9sbG93QmFyT3JhbmdlQDJ4LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05ldHdvcmtIb2xsb3dCYXJQdXJwbGUucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0hvbGxvd0JhclB1cnBsZUAyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrSG9sbG93QmFyUmVkLnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05ldHdvcmtIb2xsb3dCYXJSZWRAMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0hvbGxvd0JhclllbGxvdy5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrSG9sbG93QmFyWWVsbG93QDJ4LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1BhdXNlLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1BlcmNlbnQucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvUGx1cy5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Qcm9maWxlLnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1Byb2ZpbGVAMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvUHNldWRvRWxlbWVudC5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9SZWNvcmRpbmcucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvUmVjb3JkaW5nQDJ4LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1JlY29yZGluZ0hvdmVyZWQucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvUmVjb3JkaW5nSG92ZXJlZEAyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9SZWNvcmRpbmdTdG9wcGVkLnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1JlY29yZGluZ1N0b3BwZWRAMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvUmVmbGVjdGlvbi5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9SZWxvYWQuc3ZnOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvUmVsb2FkU2VsZWN0ZWQuc3ZnOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvUmVxdWVzdC5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9SZXNvdXJjZXMuc3ZnOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvUmVzcG9uc2UucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvUmVzdWx0TGluZS5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9SZXN1bWUucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvU2NyaXB0LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1NjcmlwdEAyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9TZXNzaW9uU3RvcmFnZS5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9TZXNzaW9uU3RvcmFnZUAyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9TaGFkb3dET00ucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvU29ydEluZGljYXRvckRvd25BcnJvdy5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Tb3J0SW5kaWNhdG9yVXBBcnJvdy5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Tb3VyY2VDb2RlLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1NwbGl0VG9nZ2xlRG93bi5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9TcGxpdFRvZ2dsZVVwLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1N0ZXBJbnRvLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1N0ZXBPdXQucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvU3RlcE92ZXIucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvU3RvcHdhdGNoLnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1N0b3B3YXRjaEAyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9TdHlsZVJ1bGVBdXRob3IucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvU3R5bGVSdWxlSW5oZXJpdGVkLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1N0eWxlUnVsZUluaGVyaXRlZEVsZW1lbnQucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvU3R5bGVSdWxlSW5zcGVjdG9yLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1N0eWxlUnVsZVVzZXIucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvU3R5bGVSdWxlVXNlckFnZW50LnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1RpbWUuc3ZnOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvVGltZWxpbmVCYXJCbHVlLnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1RpbWVsaW5lQmFyQmx1ZUAyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9UaW1lbGluZUJhck9yYW5nZS5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9UaW1lbGluZUJhck9yYW5nZUAyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9UaW1lbGluZUJhclB1cnBsZS5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9UaW1lbGluZUJhclB1cnBsZUAyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9VbmRvY2sucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvVXBEb3duQXJyb3dzLnN2ZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1VzZXJJbnB1dFByb21wdC5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Vc2VySW5wdXRQcm9tcHRQcmV2aW91cy5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Vc2VySW5wdXRQcm9tcHRQcmV2aW91c1NlbGVjdGVkLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1VzZXJJbnB1dFJlc3VsdC5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Vc2VySW5wdXRSZXN1bHRTZWxlY3RlZC5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9XYXJuaW5nLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1dhcm5pbmdTbWFsbC5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9XZWlnaHQuc3ZnOgoKMjAxMy0wNS0yNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFdvcmthcm91bmQgYW4gZXJyb3Igd2l0aCBtaW5pZnlpbmcgdGhlIFdlYiBJbnNwZWN0b3IuCgogICAgICAgIGpzbWluLnB5IGRvZXMgbm90IGxpa2U6IHJldHVybiAvLy50ZXN0KCk7CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzk4MzQ3NT4gUkVHUkVTU0lPTihyNTE1ODMpOiBDYW5ub3Qgc2hvdyB3ZWIgaW5zcGVjdG9yIGluIHJlY2VudCBzcGFkZXMKCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29kZW1pcnJvci5qczoKICAgICAgICAod2luZG93LkNvZGVNaXJyb3IpOgoKMjAxMy0wNS0yMyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFVwZGF0ZSBDb2RlTWlycm9yIGZyb20gMy4xMiB0byAzLjEzLgoKICAgICAgICBJbmNsdWRlIHRoZSBuZXcgY29tbWVudC5qcyBhZGRvbiBhbmQgaG9vayBpdCB1cCB0byBDb21tYW5kLS8uCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBTY3JpcHRzL3VwZGF0ZS1jb2RlbWlycm9yLXJlc291cmNlcy5yYjogQWRkZWQgY29tbWVudC5qcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29kZU1pcnJvckFkZGl0aW9ucy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jbG9qdXJlLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZGVtaXJyb3IuY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZGVtaXJyb3IuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29mZmVlc2NyaXB0LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvbW1lbnQuanM6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nzcy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9qYXZhc2NyaXB0LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2xlc3MuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvcGxhY2Vob2xkZXIuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvcnVubW9kZS5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9zYXNzLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3NlYXJjaGN1cnNvci5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9zcWwuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IveG1sLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEluY2x1ZGUgY29tbWVudC5qcy4KCjIwMTMtMDUtMjMgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzOTcyNTc3PiBFUjogd2hlbiBkZWxldGluZyBicmVhayBwb2ludHMgb24gYSBmaWxlLCBkb24ndCBtb3ZlIHVwIGlmIHlvdSBjYW4ndCBkZWxldGUKCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGVidWdnZXJTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2JyZWFrcG9pbnRUcmVlT3V0bGluZURlbGV0ZVRyZWVFbGVtZW50KToKCjIwMTMtMDUtMjMgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc1NDUyNjI+IENvbW1hbmQtRSBzaG91bGQgcHV0IHNlbGVjdGVkIHRleHQgaW4gdGhlIHNlYXJjaCBib3gKCiAgICAgICAgRG9uJ3QgaW1wbGljaXRseSBwcmV2ZW50RGVmYXVsdCB3aXRoIHRoZSBrZXlib2FyZCBzaG9ydGN1dC4gVGhpcyBhbGxvd3MgdGhlCiAgICAgICAgZGVmYXVsdCBiZWhhdmlvciBvZiBwb3B1bGF0aW5nIHRoZSBzeXN0ZW0gZmluZCBwYXN0ZWJvYXJkLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9GaW5kQmFubmVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRmluZEJhbm5lcik6CgoyMDEzLTA1LTIzICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS83NTQ1MjYyPiBDb21tYW5kLUUgc2hvdWxkIHB1dCBzZWxlY3RlZCB0ZXh0IGluIHRoZSBzZWFyY2ggYm94CgogICAgICAgIFBhc3MgdGhlICJjaGFuZ2VGb2N1cyIgcGFyYW1ldGVyIHRocm91Z2ggdGhlIGludGVybmFsIGN1cnNvciByZWxhdGl2ZSByZXZlYWwgZnVuY3Rpb25zLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUucmV2ZWFsUHJldmlvdXNTZWFyY2hSZXN1bHQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUucmV2ZWFsTmV4dFNlYXJjaFJlc3VsdCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fcmV2ZWFsRmlyc3RTZWFyY2hSZXN1bHRCZWZvcmVDdXJzb3IpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3JldmVhbEZpcnN0U2VhcmNoUmVzdWx0QWZ0ZXJDdXJzb3IpOgoKMjAxMy0wNS0yMyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzU0NTI2Mj4gQ29tbWFuZC1FIHNob3VsZCBwdXQgc2VsZWN0ZWQgdGV4dCBpbiB0aGUgc2VhcmNoIGJveAoKICAgICAgICBJbnN0ZWFkIG9mIGNvbnRpbnVpbmcgdGhlIGJpbmFyeSBzZWFyY2ggd2hlbiB3ZSBlbmNvdW50ZXIgYW4gaW52YWxpZCBlbnRyeSwKICAgICAgICBqdXN0IGJyZWFrIG91dCBpbW1lZGlhdGVseS4gVGhpcyB3YXkgd2UgY2FuIHJldmFsaWRhdGUgYWxsIG9mIHRoZSBzZWFyY2ggcmVzdWx0cwogICAgICAgIGFuZCBhY2N1cmF0ZWx5IHNlYXJjaCBmb3J3YXJkIG9yIGJhY2suCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvZGVNaXJyb3JBZGRpdGlvbnMuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fYmluYXJ5U2VhcmNoSW5zZXJ0aW9uSW5kZXhJblNlYXJjaFJlc3VsdHMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3JldmVhbEZpcnN0U2VhcmNoUmVzdWx0QmVmb3JlQ3Vyc29yKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9yZXZlYWxGaXJzdFNlYXJjaFJlc3VsdEFmdGVyQ3Vyc29yKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9jdXJzb3JEb2VzTm90TWF0Y2hMYXN0UmV2ZWFsZWRTZWFyY2hSZXN1bHQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3JldmFsaWRhdGVTZWFyY2hSZXN1bHRzKToKCjIwMTMtMDUtMjMgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc1NDUyNjI+IENvbW1hbmQtRSBzaG91bGQgcHV0IHNlbGVjdGVkIHRleHQgaW4gdGhlIHNlYXJjaCBib3gKCiAgICAgICAgQ2xlYXIgdGhlIGF1dG9tYXRpY2FsbHlSZXZlYWxGaXJzdFNlYXJjaFJlc3VsdCBzdGF0ZSBhZnRlciByZXZlYWxpbmcgYSBzZWFyY2ggdGVybS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKCjIwMTMtMDUtMjMgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc1NDUyNjI+IENvbW1hbmQtRSBzaG91bGQgcHV0IHNlbGVjdGVkIHRleHQgaW4gdGhlIHNlYXJjaCBib3gKCiAgICAgICAgV2hlbiBzZWFyY2hpbmcgZm9yd2FyZHMgYW5kIGJhY2t3YXJkcyBzZWFyY2ggcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uLgogICAgICAgIElmIHdlIHdlcmUgYWxyZWFkeSBvbiBhIHBhcnRpY3VsYXIgcmVzdWx0IHdlIGNhbiBrZWVwIHRoZSBvbGQgcGF0aCBhbmQganVzdCBtb3ZlCiAgICAgICAgZm9yd2FyZCAvIGJhY2sgaW4gdGhlIHJlc3VsdCBsaXN0LiBPdGhlcndpc2Ugd2UgYmluYXJ5IHNlYXJjaCB0aGUgY2xvc2VzdCBwb3NpdGlvbgogICAgICAgIHRvIHRoZSBjdXJzb3IuIEJlY2F1c2UgcmVzdWx0cyBjYW4gYmUgcmVtb3ZlZCBpbiB0aGUgc2VhcmNoIHBhdGggd2UgaGF2ZSBhCiAgICAgICAgYml0IG9mIGFkZGVkIGNvbXBsZXhpdHkuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zZXQgYXV0b21hdGljYWxseVJldmVhbEZpcnN0U2VhcmNoUmVzdWx0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLmFkZFNlYXJjaFJlc3VsdHMubWFya1Jhbmdlcyk6CiAgICAgICAgV2hlbiBhdXRvbWF0aWNhbGx5IHJldmVhbGluZywgZG8gc28gcmVsYXRpdmUgdG8gdGhlIGN1cnNvci4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5yZXZlYWxQcmV2aW91c1NlYXJjaFJlc3VsdCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5yZXZlYWxOZXh0U2VhcmNoUmVzdWx0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9jdXJzb3JEb2VzTm90TWF0Y2hMYXN0UmV2ZWFsZWRTZWFyY2hSZXN1bHQpOgogICAgICAgIElmIHdlIGRvbid0IGhhdmUgYSBzZWFyY2ggcmVzdWx0IGluZGV4LCBvciBpZiB0aGUgY3Vyc29yIG1vdmVkIG9mZgogICAgICAgIG9mIHRoZSBsYXN0IHNlYXJjaCByZXN1bHQgaW5kZXgsIHNlYXJjaCByZWxhdGl2ZSB0byB0aGUgY3Vyc29yLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9jb21wYXJlUG9zaXRpb25zKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9iaW5hcnlTZWFyY2hJbnNlcnRpb25JbmRleEluU2VhcmNoUmVzdWx0cyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fcmV2ZWFsRmlyc3RTZWFyY2hSZXN1bHRCZWZvcmVDdXJzb3IpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3JldmVhbEZpcnN0U2VhcmNoUmVzdWx0QWZ0ZXJDdXJzb3IpOgogICAgICAgIEJpbmFyeSBzZWFyY2ggc2VhcmNoIHJlc3VsdHMgaGFuZGxpbmcgdGhlIHBvc3NpYmlsaXR5IHRoYXQgYSBzZWFyY2ggcmVzdWx0CiAgICAgICAgY291bGQgYmUgbnVsbC4gSSdtIG5vdCBzdXJlIGlmIHRoaXMgd29ya3MgcGVyZmVjdGx5IGluIHN1Y2ggY2FzZXMsIGJ1dAogICAgICAgIGl0IHdvcmtlZCBmaW5lIGluIHByYWN0aWNlLgogICAgICAgIAogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3JldmFsaWRhdGVTZWFyY2hSZXN1bHRzKToKICAgICAgICBXaGVuIHdlIHRyeSB0byB0cmF2ZXJzZSB0byBhIHNlYXJjaCByZXN1bHQgYW5kIGl0IHdhcyBkZWxldGVkLCByZXZhbGlkYXRlCiAgICAgICAgYWxsIHRoZSBzZWFyY2ggcmVzdWx0cy4gVGhpcyBjYW4gaGFwcGVuIGlmIGluIGEgQ1NTIGZpbGUgYW5kIHRoZSB1c2VyCiAgICAgICAgZGVsZXRlZCBzb21lIGluc3RhbmNlcyBvZiBhIHNlYXJjaCByZXN1bHQuCgoyMDEzLTA1LTIzICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS83NTQ1MjYyPiBDb21tYW5kLUUgc2hvdWxkIHB1dCBzZWxlY3RlZCB0ZXh0IGluIHRoZSBzZWFyY2ggYm94CgogICAgICAgIFN0ZXAgMSwgbWFrZSBDb21tYW5kK0UgcG9wdWxhdGUgdGhlIEZpbmRCYW5uZXIncyBzZWFyY2ggcXVlcnksIGFuZCBzaWxlbnRseQogICAgICAgIHBlcmZvcm0gdGhlIHNlYXJjaCBzbyB0aGF0IENvbW1hbmQrRyBhbmQgU2hpZnQrQ29tbWFuZCtHIHdvcmsuIEV4cG9zZSBhCiAgICAgICAgbmV3IENvbnRlbnRWaWV3IG1ldGhvZCAic2VhcmNoUXVlcnlXaXRoU2VsZWN0aW9uIiB0byBnZXQgYSBzZWFyY2ggcXVlcnkKICAgICAgICBmcm9tIHRoZSBzZWxlY3Rpb24gaW4gdGhhdCBDb250ZW50Vmlldy4gVGhpcyBjdXJyZW50bHkgb25seSB3b3JrcyB3aXRoCiAgICAgICAgVGV4dEVkaXRvciBDb250ZW50Vmlld3MuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZpbmRCYW5uZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GaW5kQmFubmVyKTogQWRkIHRoZSBrZXlib2FyZCBzaG9ydGN1dC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZpbmRCYW5uZXIucHJvdG90eXBlLl9wb3B1bGF0ZVNlYXJjaFF1ZXJ5RnJvbVNlbGVjdGlvbik6CiAgICAgICAgQXNrIHRoZSBkZWxlZ2F0ZSAoQ29udGVudEJyb3dzZXIpIGZvciBhIHNlYXJjaCBxdWVyeSBmcm9tIHNlbGVjdGlvbi4KICAgICAgICBJZiB3ZSBnZXQgb25lLCBzaWxlbnRseSBwZXJmb3JtIGEgc2VhcmNoLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnNlYXJjaFF1ZXJ5V2l0aFNlbGVjdGlvbik6CiAgICAgICAgR2V0IHRoZSBzZWxlY3Rpb24gZnJvbSBDb2RlTWlycm9yIGFuZCByZXR1cm4gdGhhdC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXcucHJvdG90eXBlLnNlYXJjaFF1ZXJ5V2l0aFNlbGVjdGlvbik6CiAgICAgICAgRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwsIG1lYW5pbmcgbm8gY2hhbmdlLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ2x1c3RlckNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ2x1c3RlckNvbnRlbnRWaWV3LnByb3RvdHlwZS5zZWFyY2hRdWVyeVdpdGhTZWxlY3Rpb24pOgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZW50QnJvd3Nlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyLnByb3RvdHlwZS5maW5kQmFubmVyU2VhcmNoUXVlcnlGb3JTZWxlY3Rpb24pOgogICAgICAgICogVXNlckludGVyZmFjZS9TY3JpcHRDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdENvbnRlbnRWaWV3LnByb3RvdHlwZS5zZWFyY2hRdWVyeVdpdGhTZWxlY3Rpb24pOgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0Q29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Q29udGVudFZpZXcucHJvdG90eXBlLnNlYXJjaFF1ZXJ5V2l0aFNlbGVjdGlvbik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRSZXNvdXJjZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLnNlYXJjaFF1ZXJ5V2l0aFNlbGVjdGlvbik6CiAgICAgICAgUGx1bWJpbmcgdGhlIG1lc3NhZ2UgZG93biB0aGUgY29udGVudCB2aWV3cyBoZWlyYXJjaHkuCgoyMDEzLTA1LTIzICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIFJlbW92ZSB1bm5lY2Vzc2FyeSByZXR1cm4gZm9yIHNldHRlci4KCiAgICAgICAgVGhpcyB3YXMganVzdCBhIGNvcHkgLyBwYXN0ZSBlcnJvciBmcm9tIHdoZW4gaXQgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbi4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ2x1c3RlckNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ2x1c3RlckNvbnRlbnRWaWV3LnByb3RvdHlwZS5zZXQgYXV0b21hdGljYWxseVJldmVhbEZpcnN0U2VhcmNoUmVzdWx0KToKCjIwMTMtMDUtMjMgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgUmVtb3ZlIHVudXNlZCBpbnN0YW5jZSB2YXJpYWJsZSBUZXh0RWRpdG9yLl9wZW5kaW5nU2VhcmNoUmVzdWx0TGluZU51bWJlcnMKCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IpOgoKMjAxMy0wNS0yMiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM5NjE3OTE+IFN0b3BwaW5nIHJlY29yZGluZyBjbGVhcnMgdGhlIHRpbWVsaW5lCgogICAgICAgIEl0IGFjdHVhbGx5IHNlZW1zIGxpa2UgYSBub24tbWFpbiBmcmFtZSByZXNvdXJjZSBjaGFuZ2UgY2F1c2VzIHRoZQogICAgICAgIHRpbWVsaW5lIHRvIGNsZWFyLiBPbmx5IGNsZWFyIG9uIG1haW4gZnJhbWUgbWFpbiByZXNvdXJjZSBjaGFuZ2VzLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlLl9tYWluUmVzb3VyY2VEaWRDaGFuZ2UpOgoKMjAxMy0wNS0yMiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI4MzczMjY+IFJFR1JFU1NJT046IENvbnRlbnQganVzdCBkaXNwbGF5cyBhIHNwaW5uZXIgd2hlbiBpdCBzdG9wcyBvbiBhIGJyZWFrcG9pbnQgZHVyaW5nIGxvYWQKCiAgICAgICAgV2hlbiBhIEJyZWFrcG9pbnRUcmVlRWxlbWVudCBpcyBzZWxlY3RlZCBhbmQgdGhlIHBhZ2UgaXMgcmVsb2FkZWQgdGhlCiAgICAgICAgYnJlYWtwb2ludCB0cmVlIGVsZW1lbnRzIGFyZSByZW1vdmVkLiBXaGVuIHJlbW92aW5nIHRoZSB0cmVlIGVsZW1lbnQKICAgICAgICB0aGUgcGFyZW50LCBSZXNvdXJjZVRyZWVFbGVtZW50LCB3YXMgc2VsZWN0ZWQgYW5kIHRoZSB0cmVlIG91dGxpbmUKICAgICAgICBjcmVhdGVkIGEgY29udGVudCB2aWV3IHRvIHNob3cgZm9yIHRoYXQgcmVzb3VyY2UuIFRoaXMgY29udGVudCB2aWV3CiAgICAgICAgd2FzIGJlaW5nIG9ycGhhbmVkIGFuZCByZXBsYWNlZCB3aGVuIG5ldyByZXNvdXJjZXMgd2VyZSBsb2FkZWQuCgogICAgICAgIFdlIG5ldmVyIHdhbnQgdG8gY3JlYXRlIGEgY29udGVudCB2aWV3IGZvciBhIFNjcmlwdC9SZXNvdXJjZVRyZWVFbGVtZW50CiAgICAgICAgaW4gdGhlIERlYnVnZ2VyU2lkZWJhclBhbmVsIHdoZW4gaXQgaGFzIG5vIGNoaWxkcmVuLiBUaGF0IGlzIGEgc2lnbgogICAgICAgIHRoYXQgdGhlIHRyZWUgZWxlbWVudCBpcyBhYm91dCB0byBiZSBkZWxldGVkLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9EZWJ1Z2dlclNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdHJlZUVsZW1lbnRTZWxlY3RlZCk6CgoyMDEzLTA1LTIyICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjgzNzMyNj4gUkVHUkVTU0lPTjogQ29udGVudCBqdXN0IGRpc3BsYXlzIGEgc3Bpbm5lciB3aGVuIGl0IHN0b3BzIG9uIGEgYnJlYWtwb2ludCBkdXJpbmcgbG9hZAoKICAgICAgICBQcmV2ZW50IHRoZSBwb3B1bGF0ZSB3aXRoIHNjcmlwdCBjb250ZW50IHBhdGggZnJvbSByZXF1ZXN0aW5nIGNvbnRlbnQKICAgICAgICBtdWx0aXBsZSB0aW1lcy4gVGhpcyBpcyBqdXN0IGFuIG9wdGltaXphdGlvbiB0byBwcmV2ZW50IGR1cGxpY2F0ZWQgd29yay4KICAgICAgICBUaGlzIGNhbiBoYXBwZW4gdGhlIGZpcnN0IHRpbWUgdGhlIGRlYnVnZ2VyIGlzIHBhdXNlZCwgYnkgc2V0dGluZyB0aGUKICAgICAgICBhY3RpdmUgY2FsbCBmcmFtZSwgb3BlbmluZyB0aGUgcmVzb3VyY2UsIGFuZCB0aGVuIHRyaWdnZXJpbmcgdGhlIGFjdGl2ZQogICAgICAgIGNhbGwgZnJhbWUgZGlkIGNoYW5nZSBub3RpZmljYXRpb24uCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9hY3RpdmVDYWxsRnJhbWVEaWRDaGFuZ2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9wb3B1bGF0ZVdpdGhJbmxpbmVTY3JpcHRDb250ZW50LnNjcmlwdENvbnRlbnRBdmFpbGFibGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9wb3B1bGF0ZVdpdGhJbmxpbmVTY3JpcHRDb250ZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fcG9wdWxhdGVXaXRoU2NyaXB0Q29udGVudCk6CgoyMDEzLTA1LTIyICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjgzNzMyNj4gUkVHUkVTU0lPTjogQ29udGVudCBqdXN0IGRpc3BsYXlzIGEgc3Bpbm5lciB3aGVuIGl0IHN0b3BzIG9uIGEgYnJlYWtwb2ludCBkdXJpbmcgbG9hZAoKICAgICAgICBPbiBpT1MgNiwgd2hlbiBhc3NvY2lhdGluZyBhIFNjcmlwdCB3aXRoIGEgUmVzb3VyY2UgYWxzbyB1cGRhdGUgdGhlIHR5cGUKICAgICAgICB0byBiZSBTY3JpcHQsIHRoYXQgd2F5IHRoZSByZXNvdXJjZSB3aWxsIGdldCBhIFRleHRSZXNvdXJjZUNvbnRlbnRWaWV3CiAgICAgICAgaW5zdGVhZCBvZiBhIEdlbmVyYWxSZXNvdXJjZUNvbnRlbnRWaWV3IGFuZCBmYWxsIGludG8gdGhlIGV4aXN0aW5nIHBhdGgKICAgICAgICB0aGF0IHdpbGwgZmV0Y2ggU2NyaXB0IFNvdXJjZSBmb3IgYW4gZWRpdG9yIHdoZW4gaXQgaXMgb24gYSBicmVha3BvaW50CiAgICAgICAgYW5kIGNhbm5vdCBsb2FkIHRoZSByZXNvdXJjZSBjb250ZW50LgoKICAgICAgICBBbHNvLCByZXBsYWNlIGluc3RhbmNlcyBvZiAic2NyaXB0c0ZvclJlc291cmNlIiB3aXRoIHRoZSBuZXcgc2NyaXB0cwogICAgICAgIGFjY2Vzc29yIG9uIFdlYkluc3BlY3Rvci5SZXNvdXJjZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGVidWdnZXJNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5icmVha3BvaW50c0ZvclNvdXJjZUNvZGUpOgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5hc3NvY2lhdGVXaXRoU2NyaXB0KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlQ29kZVRleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUudGV4dEVkaXRvclVwZGF0ZWRGb3JtYXR0aW5nKToKCjIwMTMtMDUtMjIgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyODM3MzI2PiBSRUdSRVNTSU9OOiBDb250ZW50IGp1c3QgZGlzcGxheXMgYSBzcGlubmVyIHdoZW4gaXQgc3RvcHMgb24gYSBicmVha3BvaW50IGR1cmluZyBsb2FkCgogICAgICAgIE5ldmVyIGxvYWRpbmcgY29udGVudCB3aGlsZSBvbiBhIGJyZWFrcG9pbnQgaXMgcG9zc2libGUgaW4gc2NyaXB0cyBpZgogICAgICAgIHRoZSBiYWNrZW5kIGlzIHBhdXNlZCBleGVjdXRpbmcgdGhlIHNjcmlwdCBiZWZvcmUgaXQgaGFzIHNlbnQgdGhlCiAgICAgICAgZnJvbnRlbmQgaW5mb3JtYXRpb24gdGhhdCB0aGUgcmVzb3VyY2UgaGFzIGZpbmlzaGVkIGxvYWRpbmcuIEluIHRoZXNlCiAgICAgICAgY2FzZXMsIGl0IGlzIHN0aWxsIHBvc3NpYmxlIGZvciB0aGUgZnJvbnRlbmQgdG8gZ2V0IHRoZSAic2NyaXB0IHNvdXJjZSIKICAgICAgICBpbnN0ZWFkIG9mIHRoZSAicmVzb3VyY2UgY29udGVudCIuIFRoZXNlIHBhdGNoZXMgZG8gdGhhdC4KCiAgICAgICAgU3RhcnQgYnkgY3JlYXRpbmcgYW4gYXNzb2NpYXRpb24gYmV0d2VlbiBXZWJJbnNwZWN0b3IuUmVzb3VyY2UgYW5kCiAgICAgICAgV2ViSW5zcGVjdG9yLlNjcmlwdC4gVGhlIG9yZGVyIG9mIGV2ZW50cyBpcyBhbHdheXMgc3VjaCB0aGF0IHRoZSBSZXNvdXJjZQogICAgICAgIGlzIGNyZWF0ZWQgZmlyc3Q6CgogICAgICAgICAgLSBOZXR3b3JrLnJlcXVlc3RXaWxsQmVTZW50ID0+IGNyZWF0ZSBXZWJJbnNwZWN0b3IuUmVzb3VyY2UKICAgICAgICAgIC0gRGVidWdnZXIuc2NyaXB0UGFyc2VkID0+IGNyZWF0ZSBXZWJJbnNwZWN0b3IuU2NyaXB0CgogICAgICAgIFNvIGFzc29jaWF0ZSBhIFNjcmlwdCB3aXRoIGEgUmVzb3VyY2UsIGlmIHRoZXJlIGlzIG9uZSwgd2hlbiB0aGUgU2NyaXB0CiAgICAgICAgaXMgY3JlYXRlZC4gQ3VycmVudGx5IHdlIGNhbiBvbmx5IGNyZWF0ZSB0aGUgYXNzb2NpYXRpb24gd2l0aCBVUkxzLAogICAgICAgIHdoaWNoIGlzIG5vdCBwZXJmZWN0IGlmIHJlc291cmNlcyBoYXZlIHRoZSBzYW1lIFVSTCBidXQgZGlmZmVyZW50CiAgICAgICAgY29udGVudHMuIFRoYXQgaGFzIG5ldmVyIHdvcmtlZCBwZXJmZWN0bHkuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NjcmlwdC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHQucHJvdG90eXBlLmdldCByZXNvdXJjZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHQucHJvdG90eXBlLnJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlwZS5fcmVzb2x2ZVJlc291cmNlKToKICAgICAgICBPbiBjcmVhdGlvbiBhc3NvY2lhdGUgd2l0aCBhIFJlc291cmNlIHZpYSBVUkwuCgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5nZXQgc2NyaXB0cyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUuYXNzb2NpYXRlV2l0aFNjcmlwdCk6CiAgICAgICAgQWxsb3cgYSBTY3JpcHQgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyByZXNvdXJjZS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lUmVzb3VyY2VNYW5hZ2VyLmpzOgogICAgICAgIFJlbW92ZSAicmVzb3VyY2VGb3JTY3JpcHQiLiBTY3JpcHQncyBub3cgaGF2ZSBhIHJlc291cmNlIHByb3BlcnR5LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGVidWdnZXJTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3NjcmlwdEFkZGVkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmxpbmtpZnlMb2NhdGlvbik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLnNob3dTb3VyY2VDb2RlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fc2NyaXB0V2FzQWRkZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9TY3JpcHRDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdENvbnRlbnRWaWV3KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlQ29kZVRleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUudGV4dEVkaXRvckJyZWFrcG9pbnRUb2dnbGVkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlTWFwTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcE1hbmFnZXIucHJvdG90eXBlLl9sb2FkQW5kUGFyc2VTdWNjZWVkZWQpOgogICAgICAgIFJlZmFjdG9yIHRvIHRoZSBzaW1wbGVyIHNjcmlwdC5yZXNvdXJjZS4KCjIwMTMtMDUtMjEgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgUmVtb3ZlIGdlbmVyaWMgZXZlbnQgbGlzdGVuZXJzIHdoZW4gQ2x1c3RlckNvbnRlbnRWaWV3cyBhcmUgY2xvc2VkLgoKICAgICAgICBTb21lIGV2ZW50IGxpc3RlbmVycyB3ZXJlIHJlbW92ZWQsIGJ1dCBub3QgYWxsLiBUaGlzIHdvdWxkIGhhdmUKICAgICAgICBjYXVzZWQgdGhlIGNsdXN0ZXIgY29udGVudCB2aWV3cyB0byBiZSBsZWFrZWQuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NsdXN0ZXJDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNsdXN0ZXJDb250ZW50Vmlldy5wcm90b3R5cGUuY2xvc2VkKToKCjIwMTMtMDUtMjEgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgUmVtb3ZlIHRoZSBjb25jZXB0IG9mIGxlZnQgYW5kIHJpZ2h0IG5hdmlnYXRpb24gaXRlbXMuCgogICAgICAgIFRoZXkgYXJlIHVudXNlZC4gU28ganVzdCByZW1vdmUgdGhlbS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudEJyb3dzZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuX3VwZGF0ZUNvbnRlbnRWaWV3TmF2aWdhdGlvbkl0ZW1zKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2lkZWJhci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXIpOgoKMjAxMy0wNS0yMiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEZpeCBhdXRvIGNvbXBsZXRlIHByb3BlcnR5IGNhY2hpbmcuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzk2MTgzMj4gQXV0b2NvbXBsZXRlIG9mIGZ1bmN0aW9uIHJldHVybiB2YWx1ZSBjYXVzZXMgc2lkZS1lZmZlY3RzIG11bHRpcGxlIHRpbWVzCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0phdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5qczoKCjIwMTMtMDUtMjEgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzOTQ4ODYyPiBSRUdSRVNTSU9OIChyMTUwMzk1KTogU3RpY2t5IGhlYWRlcnMgYXJlIG1pcy1wb3NpdGlvbmVkCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RldGFpbHNTZWN0aW9uLmNzczoKICAgICAgICAoLmRldGFpbHMtc2VjdGlvbiA+IC5oZWFkZXIpOgogICAgICAgICguZGV0YWlscy1zZWN0aW9uIC5kZXRhaWxzLXNlY3Rpb24gPiAuaGVhZGVyKToKICAgICAgICBQb3NpdGlvbiBhbmQgbGF5ZXIgdGhlIGhlYWRlcnMgY29ycmVjdGx5IHN1Y2ggdGhhdCB0aGV5IHNuYXAgdG8KICAgICAgICB0aGUgcmlnaHQgcG9zaXRpb24gd2hlbiBzY3JvbGxpbmcuCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IudXBkYXRlRG9ja2VkU3RhdGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuX3Rvb2xiYXJEaXNwbGF5TW9kZURpZENoYW5nZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5fdG9vbGJhclNpemVNb2RlRGlkQ2hhbmdlKToKICAgICAgICBSZW1vdmUgdW5uZWNlc3NhcnkgY29kZSBub3cgdGhhdCBzdGlja3ktcG9zaXRpb25lZCBlbGVtZW50cyBiZWhhdmUKICAgICAgICBhcyBleHBlY3RlZCBpbiDSb3ZlcmZsb3c6IHNjcm9sbNMgZWxlbWVudHMuCgoyMDEzLTA1LTIxICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzk0MTQzOD4gRGVidWdnZXIgcG9wb3ZlcnMgc2hvdWxkIHByZWZlciBwbGFjZW1lbnQgdG8gdGhlIGJvdHRvbS9yaWdodCBvdmVyIGxlZnQgdG8gbm90IGNvdmVyIGV4cHJlc3Npb24KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICBMZXQgUG9wb3Zlci5wcmVzZW50KCkgYmUgcHJvdmlkZWQgd2l0aCBhIGxpc3Qgb2YgcHJlZmVycmVkIGVkZ2VzIGluIG9yZGVyCiAgICAgICAgb2YgcHJlZmVyZW5jZSBhbmQgbGV0IHRoZSBzb3VyY2UgY29kZSBwb3BvdmVycyBwcmVmZXIgbGF5b3V0IGFib3ZlLCBiZWxvdyBhbmQgb24KICAgICAgICB0aGUgcmlnaHQsIGluIHRoaXMgb3JkZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9CcmVha3BvaW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUuX3Nob3dFZGl0QnJlYWtwb2ludFBvcG92ZXIpOgogICAgICAgICogVXNlckludGVyZmFjZS9MYXllclRyZWVTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLl91cGRhdGVQb3BvdmVyRm9yU2VsZWN0ZWROb2RlKToKICAgICAgICBBZG9wdCBuZXcgUG9wb3Zlci5wcmVzZW50KCkgcGFyYW1ldGVyIHR5cGUuCgogICAgICAgICogVXNlckludGVyZmFjZS9Qb3BvdmVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUG9wb3Zlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Qb3BvdmVyLnByb3RvdHlwZS5wcmVzZW50KToKICAgICAgICBSZW5hbWUg0nByZWZlcnJlZEVkZ2XTIHRvINJwcmVmZXJyZWRFZGdlc9MgKHBsdXJhbCkuCgogICAgICAgIChXZWJJbnNwZWN0b3IuUG9wb3Zlci5wcm90b3R5cGUuX3VwZGF0ZSk6CiAgICAgICAgSW5zdGVhZCBvZiBnYXRoZXJpbmcgbWV0cmljcyBzb3J0ZWQgYnkga2V5cywgZ2F0aGVyIHRoZW0gc29ydGVkIGluIHRoZQogICAgICAgIG9yZGVyIG9mIHByZWZlcmVuY2UgcHJvdmlkZWQgYnkgdGhlINJwcmVmZXJyZWRFZGdlc9MgYXJndW1lbnQuCgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fc2hvd1BvcG92ZXIpOgogICAgICAgIEFkb3B0IG5ldyBQb3BvdmVyLnByZXNlbnQoKSBwYXJhbWV0ZXIgdHlwZSBhbmQgcHJvdmlkZSB0aGUgZGVzaXJlZCBsaXN0CiAgICAgICAgb2YgcHJlZmVycmVkIGVkZ2VzIGluIG9yZGVyLgoKMjAxMy0wNS0yMCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM5NDU4OTI+IENvbnNvbGUgbWVzc2FnZXMgbm90IHdvcmtpbmcgd2l0aCBpT1MgNgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgIERvbid0IHVzZSB0aGUgZW51bXMgcmlnaHQgbm93LiBUaGV5IHdlcmUgbm90IGdlbmVyYXRlZCBmb3IgdGhlIGlPUyA2CiAgICAgICAgSW5zcGVjdG9yQmFja2VuZCBjb21tYW5kcyBmaWxlLiBJbiB0aGUgZnV0dXJlIHdlIHNob3VsZCBnZW5lcmF0ZSBpdAogICAgICAgIGZvciBMZWdhY3kgc3lzdGVtcyBhcyB3ZWxsIGFzIHRydW5rLCBhbmQgdXNlIGNvbnN0YW50cyBpbnN0ZWFkIG9mCiAgICAgICAgbWFnaWMgdmFsdWVzIGluIGNvZGUuCgogICAgICAgICogVXNlckludGVyZmFjZS9Db25zb2xlT2JzZXJ2ZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlT2JzZXJ2ZXIucHJvdG90eXBlLm1lc3NhZ2VBZGRlZCk6CgoyMDEzLTA1LTE5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUHJldmVudCBzZWxlY3Rpb24gYW5kIGRlc2VsZWN0IGFsbCBtZXNzYWdlcyB3aGVuIGNsaWNraW5nIGRpc2Nsb3N1cmUgdHJpYW5nbGVzIGluIHRoZSBjb25zb2xlLgoKICAgICAgICBUaGlzIG1vc3RseSB3b3JrZWQgYmVmb3JlLCBidXQgaWYgYSBzZWxlY3Rpb24gZGlkIGhhcHBlbiBpdCB3b3VsZG4ndCBnbyBhd2F5IGJ5IGl0c2VsZi4gTm93CiAgICAgICAgaXQgd2lsbCBnbyBhd2F5IGlmIGEgZGlzY2xvc3VyZSB0cmlhbmdsZSBpcyBjbGlja2VkLiBBbHNvIHRoZSBpbml0aWFsIGZvY3VzIG1vdXNlIGRvd24gYWx3YXlzCiAgICAgICAgc2VsZWN0ZWQgdGhlIHJvdywgbm93IGl0IGRvZXMgbm90LgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM4Mzk3NjI+IFJFR1JFU1NJT046IFdoZW4gaW5zcGVjdGluZyBhbiBvYmplY3QgaW4gdGhlIGNvbnNvbGUsIHRoZSBlbnRpcmUgb2JqZWN0IGJlY29tZXMgaGlnaGxpZ2h0ZWQKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29uc29sZUdyb3VwLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZUdyb3VwLnByb3RvdHlwZS5hZGRNZXNzYWdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVHcm91cC5wcm90b3R5cGUuX3RpdGxlTW91c2VEb3duKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlR3JvdXAucHJvdG90eXBlLl90aXRsZUNsaWNrZWQpOgogICAgICAgIERvbid0IHNlbGVjdCBhIGdyb3VwIHJvdyB3aGVuIHRoZSB0aXRsZSBpcyBjbGlja2VkLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZU91dGxpbmUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlT3V0bGluZS5wcm90b3R5cGUuX29ubW91c2Vkb3duKToKICAgICAgICBQcmV2ZW50IGRlZmF1bHQgaW5zdGVhZCBvZiBzdG9wcGluZyBwcm9wYWdhdGlvbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ0NvbnRlbnRWaWV3LmNzczoKICAgICAgICAoLm91dGxpbmUtZGlzY2xvc3VyZSBsaS5wYXJlbnQ6OmJlZm9yZSk6CiAgICAgICAgRHJpdmUgYnkgZGlzY2xvc3VyZSB0cmlhbmdsZSBwb3NpdGlvbiB0d2Vhay4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ0NvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9tb3VzZWRvd24pOgogICAgICAgIENoZWNrIGZvciBkZWZhdWx0UHJldmVudGVkIGFuZCBkZXNlbGVjdCBhbGwgbWVzc2FnZXMuCgogICAgICAgICogVXNlckludGVyZmFjZS9UcmVlT3V0bGluZS5qczoKICAgICAgICAoVHJlZUVsZW1lbnQudHJlZUVsZW1lbnRNb3VzZURvd24pOgogICAgICAgIFByZXZlbnQgZGVmYXVsdCBpbnN0ZWFkIG9mIHN0b3BwaW5nIHByb3BhZ2F0aW9uLgoKMjAxMy0wNS0xOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEZpeCB0aGUgaXNzdWUgd2hlcmUgY29uc29sZSBsb2dzIHdvdWxkIG92ZXJsYXAgb24gcmVsb2FkLgoKICAgICAgICBSZWppZ2dlciB0aGUgY29uc29sZSBlbGVtZW50cyBzbyB0aGUgZmxleCBlbGVtZW50IGNhbiBncm93IHRvIGZpdCBhbmQgdGhlIHBhcmVudCBkb2VzIHRoZSBzY3JvbGxpbmcuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzkzMjgyNj4gUkVHUkVTU0lPTiAocjE0NzI2MSk6IFJlbG9hZGluZyBwYWdlIGNhdXNlcyBvdmVybGFwcGluZyBjb25zb2xlIGxvZ3MgKDExNjQwNCkKCiAgICAgICAgUmV2aWV3ZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0phdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlLmlzU2Nyb2xsZWRUb0JvdHRvbSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlLnNjcm9sbFRvQm90dG9tLmRlbGF5ZWRXb3JrKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUuc2Nyb2xsVG9Cb3R0b20pOgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dDb250ZW50Vmlldy5jc3M6CiAgICAgICAgKC5jb250ZW50LXZpZXcubG9nKToKICAgICAgICAoLmNvbnNvbGUtbWVzc2FnZXMpOgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS51cGRhdGVMYXlvdXQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLmdldCBzY3JvbGxhYmxlRWxlbWVudHMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9lbnN1cmVNZXNzYWdlSXNWaXNpYmxlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fcG9zaXRpb25Gb3JNZXNzYWdlKToKCjIwMTMtMDUtMTggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIHByZWZpeGVkIGtleXdvcmRzIHN5bnRheCBoaWdobGlnaHQgY29ycmVjdGx5LgoKICAgICAgICBDb2RlTWlycm9yIHBhcnNlcyB0aGUgdmVuZG9yIHByZWZpeCBzZXBhcmF0ZSBmcm9tIHRoZSBwcm9wZXJ0eSBvciBrZXl3b3JkIG5hbWUsCiAgICAgICAgc28gd2UgbmVlZCB0byBzdHJpcCB2ZW5kb3IgcHJlZml4ZXMgZnJvbSBvdXIgYWxsIG91ciBuYW1lcywgbm90IGp1c3QgcHJvcGVydGllcy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTQ29tcGxldGlvbnMuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5yZXF1ZXN0Q1NTTmFtZUNvbXBsZXRpb25zLm5hbWVGb3JDb2RlTWlycm9yKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU0NvbXBsZXRpb25zLnJlcXVlc3RDU1NOYW1lQ29tcGxldGlvbnMuY29sbGVjdFByb3BlcnR5TmFtZUZvckNvZGVNaXJyb3IpOgoKMjAxMy0wNS0xOCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM3NzQ0MTI+IFVwZGF0ZSBDU1NLZXl3b3JkQ29tcGxldGlvbnMuanMgZm9yIEN1cmllICsgaU9TCgogICAgICAgIFRoaXMgaXMgYSBwcmV0dHkgbWVjaGFuaWNhbCB1cGRhdGUgdG8gQ1NTIGF1dG9jb21wbGV0aW9uIHN1Z2dlc3Rpb25zLgogICAgICAgIEFsc28gZml4IHN1Z2dlc3Rpb25zIG5vdCB3b3JraW5nIGZvciAiLXdlYmtpdC0iIHByb3BlcnRpZXMuCgogICAgICAgIE1vc3Qgb2YgdGhpcyBsaXN0IHdhcyBtYW51YWxseSBnZW5lcmF0ZWQgYnkgbG9va2luZyBhdCBzcGVjaWZpY2F0aW9ucwogICAgICAgIGFuZCB3YWxraW5nIENTU1BhcnNlcjo6cGFyc2VWYWx1ZSwgaXNWYWxpZEtleXdvcmRQcm9wZXJ0eUFuZFZhbHVlLAogICAgICAgIENTU1Byb3BlcnR5Ojppc0luaGVyaXRlZFByb3BlcnR5LCB0aGUgcmVsYXRlZCAuaW4gZmlsZXMsIGFuZCBhIGJpdAogICAgICAgIG9mIHNsZXV0aGluZy4gSXQgaXMgbm90IG1lYW50IHRvIGJlIHBlcmZlY3QsIHdlYmtpdCBkaWZmZXJzIGZyb20KICAgICAgICBzcGVjcyBzbGlnaHRseSBhbmQgZG9lc24ndCBpbXBsZW1lbnQgYWxsIHByb3BlcnRpZXMsIGJ1dCBpdCBkb2VzCiAgICAgICAgYSBiZXR0ZXIgam9iIHRoYW4gYmVmb3JlLgoKICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NLZXl3b3JkQ29tcGxldGlvbnMuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NLZXl3b3JkQ29tcGxldGlvbnMuZm9yUHJvcGVydHkpOgoKMjAxMy0wNS0xNyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIERyb3AgLXdlYmtpdC0gcHJlZml4ZXMgZnJvbSBDU1MgcHJvcGVydGllcyB0aGF0IG5vIGxvbmdlciByZXF1aXJlIHRoZW0uCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uLmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29kZU1pcnJvck92ZXJyaWRlcy5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVPdXRsaW5lLmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRWRpdGluZy5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ0NvbnRlbnRWaWV3LmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05hdmlnYXRpb25TaWRlYmFyUGFuZWwuY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9TZWN0aW9uLmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVzQ29udGVudFZpZXcuY3NzOgoKMjAxMy0wNS0xNyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM5MTk5NzQ+IDExQTM2ODogSW5zdHJ1bWVudHMgdGFiIG9mIFJXSSBpcyBhbG1vc3QgZW1wdHkgd2hlbiBsb2FkaW5nIGFwcGxlLmNvbSBvbiBkZXZpY2UKCiAgICAgICAgRml4IGEgdHlwbyBpbiB0aGUgY29uc3RhbnQgbmFtZS4gSXQgd2FzIHVzaW5nIGEgbm9uLWV4aXN0ZW50IGNvbnN0YW50CiAgICAgICAgd2hpY2ggcmVzdWx0ZWQgaW4gYSAwbXMgdGltZW91dCBpbnN0ZWFkIG9mIHRoZSBpbnRlbmRlZCAxNXMuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuX3N0YXJ0QXV0b1JlY29yZGluZyk6CgoyMDEzLTA1LTE2ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzkxNzk4Mj4gSW5jb25zaXN0ZW5jeSBiZXR3ZWVuIHJpZ2h0LWNsaWNraW5nIGFuZCBjb250cm9sLWNsaWNraW5nIGluIERlYnVnZ2VyIGd1dHRlcgoKICAgICAgICBJZ25vcmUgIkN0cmwgKyBMZWZ0IENsaWNrIiBpbiBtb3JlIHBsYWNlczoKCiAgICAgICAgICAqIGluIGRyYWcgLyByZXNpemUgc2NlbmFyaW9zCiAgICAgICAgICAqIHRleHQgZWRpdG9yIGd1dHRlciBvbiBhIGJyZWFrcG9pbnQKCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YUdyaWQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhR3JpZC5wcm90b3R5cGUuX3N0YXJ0UmVzaXplckRyYWdnaW5nKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFHcmlkLnByb3RvdHlwZS5fcmVzaXplckRyYWdnaW5nKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFHcmlkLnByb3RvdHlwZS5fZW5kUmVzaXplckRyYWdnaW5nKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLl9kb2NrZWRSZXNpemVyTW91c2VEb3duLmRvY2tlZFJlc2l6ZXJEcmFnKToKICAgICAgICAoV2ViSW5zcGVjdG9yLl9kb2NrZWRSZXNpemVyTW91c2VEb3duLmRvY2tlZFJlc2l6ZXJEcmFnRW5kKToKICAgICAgICAoV2ViSW5zcGVjdG9yLl9kb2NrZWRSZXNpemVyTW91c2VEb3duKToKICAgICAgICAoV2ViSW5zcGVjdG9yLl9tb3ZlV2luZG93TW91c2VEb3duLnRvb2xiYXJEcmFnKToKICAgICAgICAoV2ViSW5zcGVjdG9yLl9tb3ZlV2luZG93TW91c2VEb3duLnRvb2xiYXJEcmFnRW5kKToKICAgICAgICAoV2ViSW5zcGVjdG9yLl9tb3ZlV2luZG93TW91c2VEb3duKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2lkZWJhci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXIucHJvdG90eXBlLl9yZXNpemVyTW91c2VEb3duKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXIucHJvdG90eXBlLl9yZXNpemVyTW91c2VVcCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fZ3V0dGVyTW91c2VEb3duKToKCjIwMTMtMDUtMTcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIGNsaWNraW5nIGNvbXBsZXRpb25zIHdvcmsgYWdhaW4gaW4gdGhlIFN0eWxlIGRldGFpbHMgc2lkZWJhci4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzOTE5MzQxPiBSRUdSRVNTSU9OOiBNb3VzZSBjbGlja2luZyBhIENTUyBhdXRvY29tcGxldGlvbiBzdWdnZXN0aW9uIG5vIGxvbmdlciB3b3JrcwoKICAgICAgICBSZXZpZXdlZCBieSBBbnRvaW5lIFF1aW50LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuX2VkaXRvckJsdXJlZCk6CiAgICAgICAgQ2xpY2tpbmcgYSBzdWdnZXN0aW9uIGNhdXNlcyB0aGUgZWRpdG9yIHRvIGJsdXIuIFdlIGRvbid0IHdhbnQgdG8gcmVzZXQgY29udGVudCBpbiB0aGlzIGNhc2UuCgogICAgICAgICogVXNlckludGVyZmFjZS9Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLmlzSGFuZGxpbmdDbGlja0V2ZW50KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLl9nZW5lcmF0ZUphdmFTY3JpcHRDb21wbGV0aW9ucyk6IFVzZSB0aGlzLmlzSGFuZGxpbmdDbGlja0V2ZW50KCkuCgoyMDEzLTA1LTE2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUmVzZXQgdGhlIGJyYW5jaGVzIHdoZW4gdGhlIG1haW4gZnJhbWUgbmF2aWdhdGVzLgoKICAgICAgICBUaGlzIG1ha2VzIHN1cmUgdGhlIFNvdXJjZUNvZGVSZXZpc2lvbnMgZG9uJ3Qgc3RpY2sgYXJvdW5kIGJldHdlZW4gcGFnZSBsb2FkcyBhbmQgdGFrZSB1cCBtZW1vcnkuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0JyYW5jaE1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmFuY2hNYW5hZ2VyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyYW5jaE1hbmFnZXIucHJvdG90eXBlLmluaXRpYWxpemUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJhbmNoTWFuYWdlci5wcm90b3R5cGUuZGVsZXRlQnJhbmNoKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyYW5jaE1hbmFnZXIucHJvdG90eXBlLl9tYWluUmVzb3VyY2VEaWRDaGFuZ2UpOgoKMjAxMy0wNS0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFNvbWUgcmFuZG9tIHN0eWxlIHR3ZWFrcy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZWNsYXJhdGlvblNlY3Rpb24uY3NzOgogICAgICAgICguc3R5bGUtZGVjbGFyYXRpb24tc2VjdGlvbiA+IC5oZWFkZXIpOiBTbWFsbGVyIHRvcCBtYXJnaW4gdG8gYWxpZ24gd2l0aCB0aGUgaWNvbiBiZXR0ZXIuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvZGVNaXJyb3JPdmVycmlkZXMuY3NzOgogICAgICAgICguQ29kZU1pcnJvciAuQ29kZU1pcnJvci1ndXR0ZXJzKTogTGlnaHRlciBib3JkZXIgY29sb3IgdG8gbWF0Y2ggWGNvZGUgNS4KCjIwMTMtMDUtMTYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBGaXggYSBjYXNlIHdoZXJlIHdlIHdvdWxkIGVudGVyIGFuIGluZmluaXRlIGxvb3AsIGNvbnN1bWluZyBtZW1vcnkgYW5kIGhhbmcuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzkxMTYwOD4gUkVHUkVTU0lPTiAocjUwOTk4KTogTWFzc2l2ZSBtZW1vcnkgZ3Jvd3RoIGFuZCBoYW5naW5nICgxMTU4MTEpCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLnVwZGF0ZUZvclJlZGlyZWN0UmVzcG9uc2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLnVwZGF0ZUZvclJlc3BvbnNlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5pbmNyZWFzZVNpemUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLm1hcmtBc0ZpbmlzaGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5tYXJrQXNGYWlsZWQpOgogICAgICAgIFRpbWVzdGFtcHMgYXJlIGV4cGVjdGVkIHRvIGJlIE5hTiBpbnN0ZWFkIG9mIG51bGwuIFRoaXMgd2Fzbid0IGFuIGlzc3VlIGJlZm9yZSBiZWNhdXNlCiAgICAgICAgdGhlIHRpbWVsaW5lIGNvZGUgZGlkbid0IHVzZSB0aGVzZSB0aW1lc3RhbXBzLiBOb3cgUmVzb3VyY2UuZmlyc3RUaW1lc3RhbXAgdXNlcyB0aGVtLAogICAgICAgIHdoaWNoIGlzIHVzZWQgYnkgUmVzb3VyY2VUaW1lbGluZVJlY29yZC5zdGFydFRpbWUuCgoyMDEzLTA1LTE1ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWxsb3cgQ29tbWFuZC1LIHRvIGNsZWFyIHRoZSBjb25zb2xlIGFueXdoZXJlIGluIHRoZSBJbnNwZWN0b3IuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzg4ODI0MT4gQ29tbWFuZC1LIGRvZXNuJ3QgY2xlYXIgdGhlIENvbnNvbGUgdW5sZXNzIGl0IGhhcyBmb2N1cwoKICAgICAgICBSZXZpZXdlZCBieSBBbnRvaW5lIFF1aW50LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyKToKCjIwMTMtMDUtMTUgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBGaXggdGhlIFNhdmUgQXMuLi4ga2V5Ym9hcmQgc2hvcnRjdXQuCgogICAgICAgIFJldmlld2VkIGJ5IEFudG9pbmUgUXVpbnQuCgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZW50QnJvd3Nlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyKToKICAgICAgICBEb24ndCByZXF1aXJlIHRoZSBPcHRpb24ga2V5LiBJdCBpcyBDb21tYW5kLVNoaWZ0LVMuCgoyMDEzLTA1LTE1ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSBjbGlja2luZyB0aGUgY29uc29sZSBpY29ucyBpbiB0aGUgZGFzaGJvYXJkIHRvZ2dsZSB0aGUgc2NvcGUuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzg4NDcxMz4gSW1wcm92ZSBjb25zb2xlIGZpbHRlcmluZyB2aWEgdGhlIGRhc2hib2FyZCBidXR0b25zCgogICAgICAgIFJldmlld2VkIGJ5IEFudG9pbmUgUXVpbnQuCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3Iuc2hvd0Z1bGxIZWlnaHRDb25zb2xlKToKICAgICAgICBJZiB0aGUgcmVxdWVzdGVkIHNjb3BlIGlzIGFscmVhZHkgc2VsZWN0ZWQgYW5kIHRoZSBjb25zb2xlIGlzIHNob3dpbmcsIHRoZW4gc3dpdGNoIGJhY2sgdG8gQWxsLgoKMjAxMy0wNS0xNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgdGhlIHRhYiBrZXkgY29tbWl0IHRoZSBjb21wbGV0aW9uIG9mIHRoZXJlIGlzIG9ubHkgb25lIHN1Z2dlc3Rpb24uCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzg5NzAwMT4gUkVHUkVTU0lPTiAoU2FmYXJpIDYpOiBUYWIgdG8gYWNjZXB0IGF1dG9jb21wbGV0ZSB3aXRoIDEgcmVzdWx0CiAgICAgICAgc2hvdWxkIGRpc21pc3MgY29tcGxldGlvbiBzdWdnZXN0aW9ucyBwb3BvdmVyCgogICAgICAgIFJldmlld2VkIGJ5IEFudG9pbmUgUXVpbnQuCgogICAgICAgICogVXNlckludGVyZmFjZS9Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLl9oYW5kbGVUYWJLZXkpOgogICAgICAgIENvbW1pdCB0aGUgY3VycmVudCBjb21wbGV0aW9uIGlmIHRoZXJlIGlzIG9ubHkgb25lIHN1Z2dlc3Rpb24uCgoyMDEzLTA1LTE0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWx3YXlzIGV2YWx1YXRlIHRoZSBjb25zb2xlIHByb21wdCBpZiB0aGUgY3Vyc29yIGlzIG5vdCBhdCB0aGUgbGFzdCBwb3NpdGlvbi4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzODU0NjkxPiBOZXcgUmV0dXJuIGtleSBiZWhhdmlvciBpbiBXZWIgSW5zcGVjdG9yIGJyZWFrcyBteSB0eXBpY2FsIHVzYWdlCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnNvbGVQcm9tcHQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlUHJvbXB0LnByb3RvdHlwZS5faGFuZGxlRW50ZXJLZXkpOgogICAgICAgICogVXNlckludGVyZmFjZS9KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIuanM6CgoyMDEzLTA1LTE0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgVXBkYXRlIEZyYW1lLnNlY3VyaXR5T3JpZ2luIHdoZW4gY29tbWl0dGluZyB0aGUgcHJvdmlzaW9uYWwgbG9hZC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZS5wcm90b3R5cGUuY29tbWl0UHJvdmlzaW9uYWxMb2FkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWVSZXNvdXJjZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUuZnJhbWVEaWROYXZpZ2F0ZSk6CgoyMDEzLTA1LTE0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIERPTVN0b3JhZ2Ugd2hlbiB0aGUgbWFpbiByZXNvdXJjZSBjaGFuZ2VzLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM4NDQwNjY+IFJFR1JFU1NJT046IElmIHRoZSBXZWIgSW5zcGVjdG9yIGlzIGRpc3BsYXllZCB3aGVuIHlvdSByZWZyZXNoIHRoZSBwYWdlLCBsb2NhbCBhbmQgc2Vzc2lvbiBzdG9yYWdlIGlzIG5vdCB2aXNpYmxlCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N0b3JhZ2VNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZU1hbmFnZXIucHJvdG90eXBlLl9tYWluUmVzb3VyY2VEaWRDaGFuZ2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZU1hbmFnZXIucHJvdG90eXBlLl9hZGRET01TdG9yYWdlSWZOZWVkZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZU1hbmFnZXIucHJvdG90eXBlLl9zZWN1cml0eU9yaWdpbkRpZENoYW5nZSk6CgoyMDEzLTA1LTEzICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzg3NjM3OT4gUHJldHR5IHByaW50aW5nIHdoaWxlIHBhdXNlZCBpbiB0aGUgZGVidWdnZXIgbG9zZXMgdGhlIGV4ZWN1dGlvbiBsaW5lCgogICAgICAgIFdoZW4gcHJldHR5IHByaW50aW5nIHdlIHJlcGxhY2UgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgZWRpdG9yLiBJZgogICAgICAgIHRoZSBkaXNwbGF5IGxvY2F0aW9uIGRpZG4ndCBjaGFuZ2UgYXQgYWxsLCB0aGVuIHdoZW4gd2UgcmUtc2V0IHRoZQogICAgICAgIGV4ZWN1dGlvbiBsaW5lIG51bWJlciwgd2Ugd291bGRuJ3QgdXBkYXRlIHRoZSBzdHlsZSBvbiB0aGUgbGluZS4KCiAgICAgICAgVGhpcyBjaGFuZ2UgbWFrZXMgdXBkYXRpbmcgdGhlIGV4ZWN1dGlvbiBsaW5lIG1vcmUgb2YgdGhlIFRleHRFZGl0b3IncwogICAgICAgIHJlc3BvbnNpYmlsaXR5IG9uIGEgcHJldHR5IHByaW50LiBQcmV2aW91c2x5IGl0IHdhcyB3b3JraW5nIGluIG1vc3QgY2FzZXMKICAgICAgICBidXQgbm93IGl0IHNob3VsZCBhbHdheXMgd29yayBhcyBsb25nIGFzIHRoZSBUZXh0RWRpdG9yIGhhcyBiZWVuIGdpdmVuCiAgICAgICAgYW4gYWNjdXJhdGUgZXhlY3V0aW9uIGxpbmUgYW5kIGNvbHVtbiBudW1iZXIuIEluIHByZXR0eSBwcmludCB3ZSBkZWxldGUKICAgICAgICB0aGUgZXhlY3V0aW9uIGxpbmUgaGFuZGxlIHNvIHdlIGFyZSBndWFyYW50ZWVkIHRvIHJlY3JlYXRlIGl0LgoKICAgICAgICBKdXN0IGluIGNhc2UsIGFsc28gdXBkYXRlIFNvdXJjZUNvZGVMb2NhdGlvbiB0byBsaXN0ZW4gdG8gYW55IGxvY2F0aW9uCiAgICAgICAgY2hhbmdlcywgbm90IGp1c3QgZGlzcGxheSBsb2NhdGlvbiBjaGFuZ2VzLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5jbG9zZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX2FjdGl2ZUNhbGxGcmFtZURpZENoYW5nZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX2FjdGl2ZUNhbGxGcmFtZVNvdXJjZUNvZGVMb2NhdGlvbkNoYW5nZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5nZXQgZXhlY3V0aW9uQ29sdW1uTnVtYmVyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnNldCBleGVjdXRpb25Db2x1bW5OdW1iZXIpOgoKMjAxMy0wNS0xMyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEZpeCB0aGUgc2hvcnRjdXQgZm9yIHRoZSBMYXllciBkZXRhaWxzIHNpZGViYXIgcGFuZWwuCgogICAgICAgIEFsc28gZml4IHRoZSBuYW1pbmcgb2YgdGhlIHRvb2xiYXIgYnV0dG9ucyBmb3IgdGhlIFN0eWxlIGRldGFpbHMgc2lkZWJhciBhbmQKICAgICAgICBMYXllciBkZXRhaWxzIHNpZGViYXIgc28gdGhleSBhcmUgcGx1cmFsIHdoaWxlIHRoZSBuYW1lIGluIHRoZSB0b29sdGlwIGlzIHN0aWxsIHNpbmd1bGFyLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM4NzE4NzI+IExheWVycyBkZXRhaWxzIHNpZGViYXIgc2hvcnRjdXQgc2hvdWxkIGJlIGNvbnRyb2wtc2hpZnQtNCwgbm90IGNvbnRyb2wtc2hpZnQtNQoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9BcHBsaWNhdGlvbkNhY2hlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVEZXRhaWxzU2lkZWJhclBhbmVsKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTURldGFpbHNTaWRlYmFyUGFuZWwpOgogICAgICAgICogVXNlckludGVyZmFjZS9ET01Ob2RlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVEZXRhaWxzU2lkZWJhclBhbmVsKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRldGFpbHNTaWRlYmFyUGFuZWwpOgogICAgICAgICogVXNlckludGVyZmFjZS9MYXllclRyZWVTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVTaWRlYmFyUGFuZWwpOgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwpOgogICAgICAgICogVXNlckludGVyZmFjZS9TY29wZUNoYWluRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjb3BlQ2hhaW5EZXRhaWxzU2lkZWJhclBhbmVsKToKCjIwMTMtMDUtMTMgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBUd2VhayB0aGUgY29uc29sZSBjb21wbGV0aW9ucyB0byB3b3JrIGFzIGV4cGVjdGVkIGluIG1vcmUgY2FzZXMuCgogICAgICAgIEFsc28gcHJldmVudCBlbXB0eSBwcmVmaXggY29tcGxldGlvbnMgdW5sZXNzIGl0IGlzIHRoZSBzdGFydCBvZiBwcm9wZXJ0eSBhY2Nlc3MuCiAgICAgICAgVGhpcyB3YXMgYSByZWdyZXNzaW9uIGZyb20gdGhlIGZpeCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzEzODYwNjI3Pi4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzODcxODg1PiBDb21tYW5kLWxpbmUgQVBJIGZ1bmN0aW9ucyBkb24ndCBhdXRvY29tcGxldGUgd2hlbiBwYXNzZWQgYXMgcGFyYW1ldGVyCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUuX2NvbXBsZXRlQXRDdXJyZW50UG9zaXRpb24pOgogICAgICAgICogVXNlckludGVyZmFjZS9Db25zb2xlUHJvbXB0LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZVByb21wdC5wcm90b3R5cGUuY29tcGxldGlvbkNvbnRyb2xsZXJDb21wbGV0aW9uc05lZWRlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0phdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5qczoKCjIwMTMtMDUtMTIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBVcGRhdGUgdGhlIHRvb2xiYXIgaGVpZ2h0IHNvIHRoZSBzYXZlIHNoZWV0IGlzIHBvc2l0aW9uZWQgY29ycmVjdGx5IGFuZCB3aW5kb3cgZ3JhZGllbnQgaXMgYWNjdXJhdGUuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzg3MTA2Nz4gU2F2ZSBzaGVldCBvbiB0aGUgV2ViIEluc3BlY3RvciBkb2VzIG5vdCBjb21lIG91dCBmcm9tIHVuZGVyIHRoZSB0b29sYmFyCgogICAgICAgIFJldmlld2VkIGJ5IEFudG9pbmUgUXVpbnQuCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci51cGRhdGVEb2NrZWRTdGF0ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5fdXBkYXRlVG9vbGJhckhlaWdodCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5fdG9vbGJhckRpc3BsYXlNb2RlRGlkQ2hhbmdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLl90b29sYmFyU2l6ZU1vZGVEaWRDaGFuZ2UpOgoKMjAxMy0wNS0xMyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBJbXByb3ZlIFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aCB0byBub3Qgc2VhcmNoIHRoZSBlbnRpcmUgc3RyaW5nLgoKICAgICAgICBVc2luZyB0aGUgb3B0aW9uYWwgc2Vjb25kIHBhcmFtZXRlciBvZiBsYXN0SW5kZXhPZiB3ZSBjYW4gb25seSBzZWFyY2gKICAgICAgICBmb3IgYSBzdWJzdHJpbmcgZnJvbSBpbmRleCAwLCBhbmQgbm90IGNoZWNrIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcuCgogICAgICAgIEkgYWxzbyB3ZW50IHRocm91Z2ggYW5kIHJlcGxhY2VkIGFsbCB1c2VzIG9mIHN0ci5pbmRleE9mKC4uLikgPT09IDAgd2l0aAogICAgICAgIHN0ci5zdGFydHNXaXRoKC4uLiksIG9yIGlmIGEgc2luZ2xlIGNoYXJhY3RlciBzdHIuY2hhckF0KDApID09PSAiPyIuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU0NvbXBsZXRpb25zLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMucHJvdG90eXBlLnN0YXJ0c1dpdGgpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMucHJvdG90eXBlLl9maXJzdEluZGV4T2ZQcmVmaXgpOgogICAgICAgICogVXNlckludGVyZmFjZS9DYWxsRnJhbWVUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNhbGxGcmFtZVRyZWVFbGVtZW50KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29va2llU3RvcmFnZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29va2llTWF0Y2hlc1Jlc291cmNlVVJMKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlRWxlbWVudC5wcm90b3R5cGUuX2J1aWxkQXR0cmlidXRlRE9NKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRWRpdGluZ1N1cHBvcnQuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3RydW1lbnRTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5JbnN0cnVtZW50U2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdGl0bGVGb3JQcm9maWxlKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSmF2YVNjcmlwdFByb2ZpbGVWaWV3LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IubGlua2lmeVN0cmluZ0FzRnJhZ21lbnRXaXRoQ3VzdG9tTGlua2lmaWVyKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2UuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5UeXBlLmZyb21NSU1FVHlwZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1V0aWxpdGllcy5qczoKCjIwMTMtMDUtMTMgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSBtYWlsdG86IGhyZWYgbGlua3MgYmVoYXZlIGNvcnJlY3RseS4KCiAgICAgICAgVGVzdDogZGF0YTp0ZXh0L2h0bWwsPGEgaHJlZj0ibWFpbHRvOnBlY29yYXJvQGFwcGxlLmNvbT9zdWJqZWN0PWVtYWlsIj5FbWFpbCBKb2U8L2E+CgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1V0aWxpdGllcy5qczoKCjIwMTMtMDUtMTMgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNTcyNzM5PiBSRUdSRVNTSU9OOiBTdHlsZXMgc2lkZWJhciB1cmwoLi4uKSBzaG91bGQgaGF2ZSBhIHdheSB0byBqdW1wIHRvIHRoZSByZXNvdXJjZQoKICAgICAgICBUZXh0RWRpdG9yIC8gU291cmNlQ29kZVRleHRFZGl0b3IgKG1vc3QgcmVzb3VyY2VzKSBhbHJlYWR5IGhhZCBiZWhhdmlvciB3aGVyZQogICAgICAgIGNsaWNraW5nIGEgImxpbmsiIHdvdWxkIGF0dGVtcHQgdG8gb3BlbiBpdCBpbiB0aGUgSW5zcGVjdG9yLCBhbmQgZmFsbGJhY2sgdG8KICAgICAgICBvcGVuaW5nIGEgbmV3IGJyb3dzZXIgdGFiIGZvciB0aGUgVVJMLiBUaGlzIGhhcmRlbnMgdGhhdCBiZWhhdmlvciBpbiB0aGUKICAgICAgICAianVtcCB0byBzeW1ib2wiIGNhc2UsIGFuZCBtYWtlcyBpdCB3b3JrIGluIHRoZSBDU1MgU2lkZWJhciB3aXRoIENvbW1hbmQrQ2xpY2suCgogICAgICAgIFRvIGVuY291cmFnZSBlZGl0aW5nIGluIHRoZSBzdHlsZSBzaWRlYmFyLCBzdHlsZSB1cmwoLi4uKXMgYXMgc3RyaW5ncywKICAgICAgICB3aGljaCBpcyBob3cgdGhleSBkaXNwbGF5ZWQgYmVmb3JlIHRoZXNlIHBhdGNoZXMuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fb3BlbkNsaWNrZWRMaW5rcyk6CiAgICAgICAgQ2xlYW51cCB0aGUgY29kZSBhIGJpdC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLnRva2VuVHJhY2tpbmdDb250cm9sbGVySGlnaGxpZ2h0ZWRSYW5nZVdhc0NsaWNrZWQpOgogICAgICAgIERvbid0IGp1bXAgdG8gc3ltYm9sIHdoZW4gY2xpY2tpbmcgYSBsaW5rLiBGYWxsYmFjayB0byBUZXh0RWRpdG9yJ3MgbGluayBvcGVuaW5nIGJlaGF2aW9yLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUpOgogICAgICAgIEhhbmRsZSBqdW1wIHRvIHN5bWJvbCB3aGVuIGNsaWNraW5nIGEgbGluayB0byBiZWhhdmUgbGluayBUZXh0RWRpdG9yJ3MgbGluayBvcGVuaW5nIGJlaGF2aW9yLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IuY3NzOgogICAgICAgICguY3NzLXN0eWxlLXRleHQtZWRpdG9yID4gLkNvZGVNaXJyb3IgLmNtLWxpbmspOgogICAgICAgIEluIHRoZSBTdHlsZSBzaWRlYmFyIGVkaXRvcnMgZGlzcGxheSBsaW5rcyBhcyBzdHJpbmdzIGJ5IGRlZmF1bHQuCgoyMDEzLTA1LTEzICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzU3MjczOT4gUkVHUkVTU0lPTjogU3R5bGVzIHNpZGViYXIgdXJsKC4uLikgc2hvdWxkIGhhdmUgYSB3YXkgdG8ganVtcCB0byB0aGUgcmVzb3VyY2UKCiAgICAgICAgQWRkIGV4dGVuZGVkQ1NTVG9rZW4sIG1vZGVsZWQgYWZ0ZXIgZXh0ZW5kZWRYTUxUb2tlbiB0byBwYXJzZSB1cmwoLi4uKQogICAgICAgIGxpbmtzIGFuZCBnaXZlIHRoZW0gYSAibGluayIgc3R5bGUgY2xhc3MuCgogICAgICAgIE5vcm1hbGx5IENvZGVNaXJyb3IgcGFyc2VzICJ1cmwiLCAiKCIsIDxvcHRpb25hbGx5IHF1b3RlZCBzdHJpbmc+LCAiKSIuCiAgICAgICAgV2UgaG9vayBpbnRvIHRoaXMgY2FzZSBhbmQgbWFudWFsbHkgcGFyc2UgdGhlIG9wdGlvbmFsbHkgcXVvdGVkIHN0cmluZwogICAgICAgIG91cnNlbHZlcyBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgcXVvdGVzIGFuZCB3aGl0ZXNwYWNlIGV4YWN0bHkgaG93IHdlCiAgICAgICAgd2FudCB0by4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29kZU1pcnJvckFkZGl0aW9ucy5qczoKCjIwMTMtMDUtMTUgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzODY1MTIzPiBSRUdSRVNTSU9OOiBJbmNvcnJlY3QgbGluayB0b2tlbml6YXRpb24gb2YgdW5xdW90ZWQgc3JjL2hyZWYgbGlua3MgLSA8aW1nIHNyYz0uLi4+CgogICAgICAgIEhhbmRsZSB1bnF1b3RlZCBhdHRyaWJ1dGVzIHdoZW4gd2UgdGFrZSBvdmVyIHRva2VuaXphdGlvbiBvZiBsaW5rIGF0dHJpYnV0ZSB2YWx1ZXMuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvZGVNaXJyb3JBZGRpdGlvbnMuanM6CgoyMDEzLTA1LTExICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSB0aGUgdGFiIGJlaGF2aW9yIGNvbnNpc3RlbnQgYW1vbmcgYWxsIENvZGVNaXJyb3IgZWRpdG9ycy4KCiAgICAgICAgTWFraW5nIHRoaXMgYSBzZXR0aW5nIGlzIHRyYWNrZWQgYnkgPHJkYXI6Ly9wcm9ibGVtLzEwNTkzOTQ4Pi4KCiAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IpOgoKMjAxMy0wNS0xMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFsbG93IGVkaXRpbmcgYW55IGxvY2FsIGZpbGUgc2luY2UgZWRpdHMgY2FuIGJlIHNhdmVkIGFuZCByZWxvYWRlZCByaWdodCBmcm9tIHRoZSBJbnNwZWN0b3IuCgogICAgICAgIFJldmlld2VkIGJ5IERlYW4gSmFja3Nvbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NjcmlwdENvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0Q29udGVudFZpZXcucHJvdG90eXBlLl9jb250ZW50V2lsbFBvcHVsYXRlKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dFJlc291cmNlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUuX2NvbnRlbnRXaWxsUG9wdWxhdGUpOgoKMjAxMy0wNS0xMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFN1cHBvcnQgc2F2aW5nIHRleHQgcmVzb3VyY2VzIGFuZCB0aGUgY29uc29sZSBsb2cgdG8gYSBsb2NhbCBmaWxlLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTgyNzI3NT4gUEFSSVRZIChDaHJvbWUgRGV2ZWxvcGVyIFRvb2xzKTogQWRkIGFuIG9wdGlvbiB0byBzYXZlIGEgcmVzb3VyY2UgbG9jYWxseQoKICAgICAgICBSZXZpZXdlZCBieSBEZWFuIEphY2tzb24uCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiBVcGRhdGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9DbHVzdGVyQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DbHVzdGVyQ29udGVudFZpZXcucHJvdG90eXBlLmdldCBzdXBwb3J0c1NhdmUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ2x1c3RlckNvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgc2F2ZURhdGEpOgogICAgICAgICogVXNlckludGVyZmFjZS9Db25zb2xlTWVzc2FnZUltcGwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZUltcGwucHJvdG90eXBlLnRvQ2xpcGJvYXJkU3RyaW5nKTogQWx3YXlzIGluY2x1ZGUgdGhlIGxldmVsLiBJdCB3YXMgb21pdHRlZAogICAgICAgIHdoZW4gd2UgZGlkbid0IGhhdmUgdGV4dCByYW5nZSBzZWxlY3Rpb24gdG8gbWFrZSBpdCBlYXNpZXIgdG8gY29weSBhbmQgcGFzdGUuIEJ1dCB3ZSBhbHNvIGluY2x1ZGUgdGhlCiAgICAgICAgZmlsZSBhbmQgbGluZSBpbmZvLCBzbyBpdCB3YXMgYWxyZWFkeSBoYXMgbW9yZSBpbmZvIHRoYW4ganVzdCB0aGUgbWVzc2FnZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudEJyb3dzZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuX3NhdmVEYXRhVG9GaWxlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyLnByb3RvdHlwZS5fc2F2ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuX3NhdmVBcyk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ0NvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLmdldCBzdXBwb3J0c1NhdmUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLmdldCBzYXZlRGF0YSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuaGFuZGxlQ29weUV2ZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fZm9ybWF0TWVzc2FnZXNBc0RhdGEudmFyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fZm9ybWF0TWVzc2FnZXNBc0RhdGEpOgogICAgICAgICogVXNlckludGVyZmFjZS9TY3JpcHRDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdENvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgc3VwcG9ydHNTYXZlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdENvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgc2F2ZURhdGEpOgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0Q29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Q29udGVudFZpZXcucHJvdG90eXBlLmdldCBzdXBwb3J0c1NhdmUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dENvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgc2F2ZURhdGEpOgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgc3VwcG9ydHNTYXZlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgc2F2ZURhdGEpOgoKMjAxMy0wNS0xMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEZpeCBhbiBleGNlcHRpb24gSSBzYXcgd2hpbGUgbmF2aWdhdGluZyBiZXR3ZWVuIHBhZ2VzLgoKICAgICAgICBJIG9ubHkgcmVwcm9kdWNlZCB0aGlzIG9uY2UsIGJ1dCB0aGUgZml4IGlzIGEgc2ltcGxlIG51bGwgY2hlY2suCiAgICAgICAgSSdtIGFzc3VtaW5nIGNsb3NlIHdhcyBjYWxsZWQgYSBzZWNvbmQgdGltZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZU91dGxpbmUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlT3V0bGluZS5wcm90b3R5cGUuY2xvc2UpOgoKMjAxMy0wNS0xMCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFR3ZWFrIGxheWVyIGJvcmRlcnMgaWNvbi4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNzE3ODg2PiBUd28gbGF5ZXJzIGJ1dHRvbnMgd2l0aCBkaWZmZXJlbnQgbWVhbmluZ3MKCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9MYXllckJvcmRlcnMucGRmOgoKMjAxMy0wNS0xMCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM3Njk2OTg+IFNob3VsZCBiZSBhIHdheSB0byBqdW1wIGJldHdlZW4gU291cmNlTWFwIHJlc291cmNlIGFuZCBPcmlnaW5hbCByZXNvdXJjZQoKICAgICAgICBBZGQgYSAianVtcCB0byBzeW1ib2wiIG1vZGUgd2hlbiB0aGUgY29tbWFuZCBrZXkgaXMgZG93biBmb3IgdGhlIENTUwogICAgICAgIHN0eWxlIHNpZGViYXIgdG8ganVtcCB0byB0aGUgZGlzcGxheSBDU1MgUmVzb3VyY2UuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLnNldCBzdHlsZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuX3VwZGF0ZUp1bXBUb1N5bWJvbFRyYWNraW5nTW9kZSk6CiAgICAgICAgTGlzdGVuIGZvciBHbG9iYWxNb2RpZmllcktleXNEaWRDaGFuZ2UgZXZlbnRzIHdoZW4gdGhlIHN0eWxlIGZvciB0aGUKICAgICAgICBlZGl0b3IgaGFzIGFuIG93bmVyIHJ1bGUgYW5kIHRoYXQgb3duZXIgcnVsZSBoYXMgYSBzb3VyY2UgY29kZSBsb2NhdGlvbi4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUudG9rZW5UcmFja2luZ0NvbnRyb2xsZXJIaWdobGlnaHRlZFJhbmdlV2FzQ2xpY2tlZCk6CiAgICAgICAgSnVtcCB0byB0aGUgZGlzcGxheSByZXNvdXJjZSB3aGVuIGNsaWNraW5nIHRoZSBoaWdobGlnaHRlZCByYW5nZS4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUudG9rZW5UcmFja2luZ0NvbnRyb2xsZXJOZXdIaWdobGlnaHRDYW5kaWRhdGUpOgogICAgICAgIEltbWVkaWF0ZWx5IGhpZ2hsaWdodCBob3ZlcmVkIHJhbmdlcyBmb3IganVtcCB0byBzeW1ib2wgbW9kZS4KCjIwMTMtMDUtMTAgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNzY5Njk4PiBTaG91bGQgYmUgYSB3YXkgdG8ganVtcCBiZXR3ZWVuIFNvdXJjZU1hcCByZXNvdXJjZSBhbmQgT3JpZ2luYWwgcmVzb3VyY2UKCiAgICAgICAgQWRkIGEgImp1bXAgdG8gc3ltYm9sIiBtb2RlIHdoZW4gdGhlIGNvbW1hbmQga2V5IGlzIGRvd24sIHRvIHF1aWNrbHkKICAgICAgICBqdW1wIGJldHdlZW4gYSBTb3VyY2VNYXBSZXNvdXJjZSBhbmQgdGhlIG9yaWdpbmFsIHJlc291cmNlcyBmb3IgdGhlCiAgICAgICAgaG92ZXJlZCB0b2tlbi4gVGhpcyBtb2RlIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBkZWJ1Z2dlciBwb3BvdmVycyBpZgogICAgICAgIGVuYWJsZWQgKGJlY2F1c2UgdGhlIGNvbW1hbmQga2V5IGlzIHByZXNzZWQpLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5oaWRkZW4pOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLmNsb3NlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fY29udGVudERpZFBvcHVsYXRlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fc2hvdWxkVHJhY2tUb2tlbkhvdmVyaW5nKToKICAgICAgICBMaXN0ZW4gZm9yIEdsb2JhbE1vZGlmaWVyS2V5c0RpZENoYW5nZSBldmVudHMgd2hlbiB0aGlzIGZpbGUgaGFzIGEgc291cmNlIG1hcAogICAgICAgIChlaXRoZXIgaXQgaXMgYSBTb3VyY2VNYXBSZXNvdXJjZSBvciBpdCBpcyBhIFNvdXJjZUNvZGUgd2l0aCBzb3VyY2VNYXAgcmVzb3VyY2VzKS4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3N0YXJ0VHJhY2tpbmdUb2tlbkhvdmVyaW5nSWZOZWVkZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9zdG9wVHJhY2tpbmdUb2tlbkhvdmVyaW5nSWZOZWVkZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9kZWJ1Z2dlckRpZFBhdXNlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fZGVidWdnZXJEaWRSZXN1bWUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9zb3VyY2VDb2RlU291cmNlTWFwQWRkZWQpOgogICAgICAgIEluIFNvdXJjZUNvZGVUZXh0RWRpdG9ycyB0aGVyZSBhcmUgMiBwb3NzaWJsZSByZWFzb25zIHdlIG1heSBoYXZlIGhvdmVyIHRyYWNraW5nLAogICAgICAgIHdoZW4gb24gYSBicmVha3BvaW50IGZvciBKYXZhU2NyaXB0IG9yIGluIEp1bXAgVG8gU3ltYm9sIHRyYWNraW5nIG1vZGUuCgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl91cGRhdGVKdW1wVG9TeW1ib2xUcmFja2luZ01vZGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9lbmFibGVKdW1wVG9TeW1ib2xUcmFja2luZ01vZGVTZXR0aW5ncyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX2Rpc2FibGVKdW1wVG9TeW1ib2xUcmFja2luZ01vZGVTZXR0aW5ncyk6CiAgICAgICAgU3dpdGNoIGJldHdlZW4gYW5kIGRpZmZlcmVudCB0cmFja2luZyBtb2RlcyB3aXRoIGRpZmZlcmVudCBzZXR0aW5ncy4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3NvdXJjZUNvZGVMb2NhdGlvbkZvckVkaXRvclBvc2l0aW9uKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS50b2tlblRyYWNraW5nQ29udHJvbGxlckhpZ2hsaWdodGVkUmFuZ2VXYXNDbGlja2VkKToKICAgICAgICBXaGVuIGluIGp1bXAgdG8gc3ltYm9sIG1vZGUsIGRldGVybWluZSB0aGUgc291cmNlQ29kZUxvY2F0aW9uIHJlbGF0aW5nIHRvIHRoZQogICAgICAgIHRva2VuIHRoYXQgd2FzIGNsaWNrZWQgYW5kIGp1bXAgYmV0d2VlbiByZXNvdXJjZXMuCiAgICAgICAgCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUudG9rZW5UcmFja2luZ0NvbnRyb2xsZXJOZXdIaWdobGlnaHRDYW5kaWRhdGUpOgogICAgICAgIFdoZW4gaW4ganVtcCB0byBzeW1ib2wgbW9kZSwgdGhhdCB0YWtlcyBwcmVjZWRlbmNlLiBIaWdobGlnaHQganVzdCB0aGUgaG92ZXJlZCB0b2tlbi4KCjIwMTMtMDUtMTAgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNzY5Njk4PiBTaG91bGQgYmUgYSB3YXkgdG8ganVtcCBiZXR3ZWVuIFNvdXJjZU1hcCByZXNvdXJjZSBhbmQgT3JpZ2luYWwgcmVzb3VyY2UKCiAgICAgICAgTW92ZSB0b2tlbiB0cmFja2luZyBvdXQgb2YgVGV4dEVkaXRvciBpbnRvIGl0cyBvd24gY2xhc3Mgd2l0aCBzZXR0aW5ncywKICAgICAgICBDb2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuIFlvdSBjYW4gbm93IHNldCB0aGUgdG9rZW4gbW9kZSBvbgogICAgICAgIHRoZSBjb250cm9sbGVyIHRvIGdldCBkaWZmZXJlbnQgdHlwZXMgb2YgY2FuZGlkYXRlIGhvdmVyZWQgdG9rZW4gcmVzdWx0cwogICAgICAgIGJhY2sgdG8gdGhlIGRlbGVnYXRlIChUZXh0RWRpdG9yIHN1YmNsYXNzKS4KCiAgICAgICAgVGhlIENvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlciBjYW4gc3RhcnQvc3RvcCB0cmFja2luZywgaGlnaGxpZ2h0CiAgICAgICAgYSBnaXZlbiB0ZXh0IHJhbmdlLCBzZXQgZGVsYXlzIGZvciBtb3VzaW5nIG92ZXIgYW5kIG91dCBvZiB0b2tlbnMgYmVmb3JlCiAgICAgICAgYWN0aW9ucyBhcmUgdGFrZW4sIGFuZCBwcm92aWRlIGRpZmZlcmVudCBjYW5kaWRhdGVzIGRlcGVuZGluZyB0aGUgY2hvc2VuCiAgICAgICAgbW9kZS4gVGhlIGN1cnJlbnQgbW9kZXMgYXJlOgogICAgICAgIAogICAgICAgICAgICBOb25TeW1ib2xUb2tlbnMgLSByZXR1cm5zIGEgY2FuZGlkYXRlIGZvciBqdXN0IHRoZSBob3ZlcmVkIHRva2VuLgogICAgICAgICAgICBKYXZhU2NyaXB0RXhwcmVzc2lvbiAtIHJldHVybnMgYSBjYW5kaWRhdGUgZm9yIHRoZSBob3ZlcmVkIHRva2VuIHdpdGgKICAgICAgICAgICAgZXh0cmEgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEphdmFTY3JpcHQgZXhwcmVzc2lvbiBlbmRpbmcgYXQgdGhhdCB0b2tlbi4KCiAgICAgICAgV2hlbiB0cmFja2luZyBpcyBlbmFibGVkLCB0aGUgZGVsZWdhdGUgbWF5IGJlIG5vdGlmaWVkIG9mIGNoYW5nZXM6CgogICAgICAgICAgICB0b2tlblRyYWNraW5nQ29udHJvbGxlckNhblJlbGVhc2VIaWdobGlnaHRlZFJhbmdlIC0gc2hvdWxkIHJlbW92ZSB0aGUgaGlnaGxpZ2h0CiAgICAgICAgICAgIHRva2VuVHJhY2tpbmdDb250cm9sbGVySGlnaGxpZ2h0ZWRSYW5nZVJlbGVhc2VkIC0gdGhlIGhpZ2hsaWdodCB3YXMgcmVtb3ZlZAogICAgICAgICAgICB0b2tlblRyYWNraW5nQ29udHJvbGxlckhpZ2hsaWdodGVkUmFuZ2VXYXNDbGlja2VkIC0gdGhlIGhpZ2hsaWdodCB3YXMgY2xpY2tlZAogICAgICAgICAgICB0b2tlblRyYWNraW5nQ29udHJvbGxlck5ld0hpZ2hsaWdodENhbmRpZGF0ZSAtIG5ldyBob3ZlcmVkIGhpZ2hsaWdodCBjYW5kaWRhdGUKCiAgICAgICAgQSBwbHVzIHNpZGUgb2YgdGhpcyBpcyB0aGF0IFRleHRFZGl0b3Igbm93IG5vIGxvbmdlciBrbm93cyBhYm91dAogICAgICAgICJKYXZhU2NyaXB0Ii4gSXQgc2hvdWxkbid0IG5lZWQgdG8ga25vdyBhYm91dCBhIGNlcnRhaW4gbW9kZSBvZgogICAgICAgIGNvbnRlbnQgdGhhdCBpdCBjb250YWlucy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgogICAgICAgICogVXNlckludGVyZmFjZS9Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuY3NzOiBBZGRlZC4KICAgICAgICAoLkNvZGVNaXJyb3IgLmp1bXAtdG8tc3ltYm9sLWhpZ2hsaWdodCk6IFNoYXJlZCBzdHlsZSBmb3IgYW55IHR5cGUgb2YgZWRpdG9yLgogICAgICAgICogVXNlckludGVyZmFjZS9Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5wcm90b3R5cGUuZ2V0IGRlbGVnYXRlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5wcm90b3R5cGUuc2V0IGRlbGVnYXRlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5wcm90b3R5cGUuZ2V0IG1vZGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLnByb3RvdHlwZS5zZXQgbW9kZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIucHJvdG90eXBlLmdldCBtb3VzZU92ZXJEZWxheUR1cmF0aW9uKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5wcm90b3R5cGUuc2V0IG1vdXNlT3ZlckRlbGF5RHVyYXRpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLnByb3RvdHlwZS5nZXQgbW91c2VPdXRSZWxlYXNlRGVsYXlEdXJhdGlvbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIucHJvdG90eXBlLnNldCBtb3VzZU91dFJlbGVhc2VEZWxheUR1cmF0aW9uKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5wcm90b3R5cGUuZ2V0IGNsYXNzTmFtZUZvckhpZ2hsaWdodGVkUmFuZ2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLnByb3RvdHlwZS5zZXQgY2xhc3NOYW1lRm9ySGlnaGxpZ2h0ZWRSYW5nZSk6CiAgICAgICAgRGlmZmVyZW50IHNldHRpbmdzIG9mIHRoZSBjb250cm9sbGVyLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5wcm90b3R5cGUuZ2V0IHRyYWNraW5nKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5wcm90b3R5cGUuZ2V0IGNhbmRpZGF0ZSk6CiAgICAgICAgQWNjZXNzb3JzIGZvciBjdXJyZW50IHN0YXRlLCBidXQgY2Fubm90IGJlIG1vZGlmaWVkLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5wcm90b3R5cGUuc3RhcnRUcmFja2luZyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIucHJvdG90eXBlLnN0b3BUcmFja2luZyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIucHJvdG90eXBlLmhpZ2hsaWdodFJhbmdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5wcm90b3R5cGUucmVtb3ZlSGlnaGxpZ2h0ZWRSYW5nZSk6CiAgICAgICAgQVBJIHRvIG1ha2UgdXNlIG9mIHRoZSB0cmFja2VyIHRvIHN0YXJ0L3N0b3AvaGlnaGxpZ2h0LgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5wcm90b3R5cGUuYm91bmRzRm9yUmFuZ2UpOgogICAgICAgIEhlbHBlciBmb3IgZ2V0dGluZyB0aGUgYm91bmRzIG9mIGEgZ2l2ZW4gY29kZW1pcnJvciB0ZXh0IHJhbmdlLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5wcm90b3R5cGUuaGFuZGxlRXZlbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLnByb3RvdHlwZS5fbW91c2VNb3ZlZFdpdGhNYXJrZWRUZXh0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5wcm90b3R5cGUuX21hcmtlZFRleHRJc05vTG9uZ2VySG92ZXJlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIucHJvdG90eXBlLl9tb3VzZU1vdmVkT3ZlckVkaXRvcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIucHJvdG90eXBlLl9tb3VzZU1vdmVkT3V0T2ZFZGl0b3IpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLnByb3RvdHlwZS5fbW91c2VCdXR0b25XYXNQcmVzc2VkT3ZlckVkaXRvcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIucHJvdG90eXBlLl9tb3VzZUJ1dHRvbldhc1JlbGVhc2VkT3ZlckVkaXRvcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIucHJvdG90eXBlLl93aW5kb3dMb3N0Rm9jdXMpOgogICAgICAgIEV2ZW50cyBoYW5kbGVkIHdoaWxlIHRyYWNraW5nLiBWZXJ5IGZldyBjaGFuZ2VzLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5wcm90b3R5cGUuX3Byb2Nlc3NOZXdIb3ZlcmVkVG9rZW4pOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLnByb3RvdHlwZS5fcHJvY2Vzc05vblN5bWJvbFRva2VuKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5wcm90b3R5cGUuX3Byb2Nlc3NKYXZhU2NyaXB0RXhwcmVzc2lvbik6CiAgICAgICAgV2hlbiBhIHRva2VuIGlzIGhvdmVyZWQsIGNyZWF0ZSBhIGNhbmRpZGF0ZSBkZXBlbmRpbmcgb24gdGhlIGNvbnRyb2xsZXIncyBtb2RlLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuZ2V0IHRva2VuVHJhY2tpbmdDb250cm9sbGVyKToKICAgICAgICBDcmVhdGUgYW5kIGV4cG9zZSB0aGUgdG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fYnJlYWtwb2ludFJlbW92ZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLnRleHRFZGl0b3JVcGRhdGVkRm9ybWF0dGluZyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3Nob3VsZFRyYWNrVG9rZW5Ib3ZlcmluZyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3N0YXJ0VHJhY2tpbmdUb2tlbkhvdmVyaW5nSWZOZWVkZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9zdG9wVHJhY2tpbmdUb2tlbkhvdmVyaW5nSWZOZWVkZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9kZWJ1Z2dlckRpZFBhdXNlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fZGVidWdnZXJEaWRSZXN1bWUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl91cGRhdGVKdW1wVG9TeW1ib2xUcmFja2luZ01vZGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9lbmFibGVKdW1wVG9TeW1ib2xUcmFja2luZ01vZGVTZXR0aW5ncyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX2Rpc2FibGVKdW1wVG9TeW1ib2xUcmFja2luZ01vZGVTZXR0aW5ncyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUudG9rZW5UcmFja2luZ0NvbnRyb2xsZXJDYW5SZWxlYXNlSGlnaGxpZ2h0ZWRSYW5nZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUudG9rZW5UcmFja2luZ0NvbnRyb2xsZXJIaWdobGlnaHRlZFJhbmdlV2FzQ2xpY2tlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3Nob3dQb3BvdmVyRm9yRnVuY3Rpb24uZGlkR2V0RGV0YWlscyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3Nob3dQb3BvdmVyRm9yRnVuY3Rpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9zaG93UG9wb3ZlckZvck9iamVjdCk6CiAgICAgICAgU3dpdGNoIHRvIHRoZSB0cmFja2luZyBjb250cm9sbGVyIGluc3RlYWQgb2YgVGV4dEVkaXRvciBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5jc3M6CiAgICAgICAgKC50ZXh0LWVkaXRvciA+IC5Db2RlTWlycm9yIC5ob3ZlcmVkLWV4cHJlc3Npb24taGlnaGxpZ2h0KToKICAgICAgICAoQC13ZWJraXQta2V5ZnJhbWVzIHRleHQtZWRpdG9yLWhvdmVyZWQtZXhwcmVzc2lvbi1oaWdobGlnaHQtZmFkZW91dCk6CiAgICAgICAgUmVuYW1lZCB0aGUgY2xhc3MgbmFtZSBmb3IgZXhwcmVzc2lvbnMgdG8gaGF2ZSAiZXhwcmVzc2lvbiIgaW4gdGhlIG5hbWUuCgoKMjAxMy0wNS0xMCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM3Njk2OTg+IFNob3VsZCBiZSBhIHdheSB0byBqdW1wIGJldHdlZW4gU291cmNlTWFwIHJlc291cmNlIGFuZCBPcmlnaW5hbCByZXNvdXJjZQoKICAgICAgICBJbnRyb2R1Y2UgV2ViSW5zcGVjdG9yLm1vZGlmaWVyS2V5cyB0byBrbm93IHdoaWNoIG1vZGlmaWVyIGtleXMgYXJlCiAgICAgICAgYWN0aXZlIGF0IGFueSB0aW1lIChjb21tYW5kLCBvcHRpb24sIHNoaWZ0KS4gVHJpZ2dlciBldmVudHMgb24gY2hhbmdlcwogICAgICAgIHRocm91Z2ggV2ViSW5zcGVjdG9yLm5vdGlmaWNhdGlvbnMuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLl91cGRhdGVNb2RpZmllcktleXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuX3dpbmRvd0tleURvd24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuX3dpbmRvd0tleVVwKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvT2JqZWN0LmpzOgoKMjAxMy0wNS0xMCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBEbyBhIGxpdHRsZSByZW5hbWluZyBvbiBSZXNvdXJjZVNpZGViYXJQYW5lbCBzaG93IG1ldGhvZHMgZm9yIHRleHQKICAgICAgICByYW5nZXMuIFRoaXMgYmV0dGVyIG1hdGNoZXMgdGhlIHNob3dTb3VyY2VDb2RlTG9jYXRpb24gbWV0aG9kIG5hbWVzLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5zaG93U291cmNlQ29kZVRleHRSYW5nZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuc2hvd09yaWdpbmFsT3JGb3JtYXR0ZWRTb3VyY2VDb2RlVGV4dFJhbmdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdHJlZUVsZW1lbnRTZWxlY3RlZCk6CgoyMDEzLTA1LTEwICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSB0aGUgY29uc29sZSBwcm9tcHQgc3VnZ2VzdCBjb21wbGV0aW9ucyBhZnRlciB0eXBpbmcgIi4iIG9yICJbIi4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzODYwNjI3PiBSRUdSRVNTSU9OOiBDb25zb2xlIGF1dG9jb21wbGV0aW9uIGRvZXMgbm90IHN1Z2dlc3QgYW55dGhpbmcgdW50aWwgZmlyc3QgY2hhcmFjdGVyIGlzIHR5cGVkCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUudXBkYXRlQ29tcGxldGlvbnMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5oaWRlQ29tcGxldGlvbnMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5fc2NhblN0cmluZ0ZvckV4cHJlc3Npb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5fY29tcGxldGVBdEN1cnJlbnRQb3NpdGlvbik6CgoyMDEzLTA1LTA5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgVGVsbCBXZWJJbnNwZWN0b3IuUmVzb3VyY2UgYWJvdXQgaXRzIHR5cGUgd2hlbiBpdCBpcyBjcmVhdGVkIGluc3RlYWQgb2YgY2hhbmdpbmcgaXQgbGF0ZXIuCiAgICAgICAgCiAgICAgICAgVGhpcyBkZXBlbmRzIG9uOiBodHRwczovL3dlYmtpdC5vcmcvYi83NDkzNQoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM3MjYxMDU+IFRpbWVsaW5lIG5ldHdvcmsgZmlsdGVycyBkb24ndCB1cGRhdGUgYXMgcmVzb3VyY2VzIGNoYW5nZSB0eXBlICg3NDkzNSkKCiAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgS2lsemVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWVSZXNvdXJjZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUuZnJhbWVEaWROYXZpZ2F0ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUucmVzb3VyY2VSZXF1ZXN0V2lsbEJlU2VudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUucmVzb3VyY2VSZXF1ZXN0V2FzU2VydmVkRnJvbU1lbW9yeUNhY2hlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5yZXNvdXJjZVJlcXVlc3REaWRSZWNlaXZlUmVzcG9uc2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLl9hZGROZXdSZXNvdXJjZVRvRnJhbWUpOgogICAgICAgICogVXNlckludGVyZmFjZS9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05ldHdvcmtPYnNlcnZlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLk5ldHdvcmtPYnNlcnZlci5wcm90b3R5cGUucmVxdWVzdFdpbGxCZVNlbnQpOgoKMjAxMy0wNS0wOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFVzZSBhIGRpZmZlcmVudCBpbWFnZSBmb3IgdGhlIGxheWVyIGJvcmRlciB0b2dnbGUgYnV0dG9uLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM3MTc4ODY+IFR3byBsYXllcnMgYnV0dG9ucyB3aXRoIGRpZmZlcmVudCBtZWFuaW5ncwoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlQ29udGVudFZpZXcpOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTGF5ZXJCb3JkZXJzLnBkZjogQWRkZWQuCgoyMDEzLTA1LTA4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IHRoZSBoZWlyYXJjaGljYWwgcGF0aCBjb21wb25lbnRzIGZvciB1bnJldmVhbGVkIHNvdXJjZSBtYXAgcmVzb3VyY2VzLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM2ODE0ODc+IE1pc3NpbmcgaGVpcmFyY2hpY2FsIHBhdGggY29tcG9uZW50cyBzZWxlY3RpbmcgYnJlYWtwb2ludHMgaW4gc291cmNlIG1hcCByZXNvdXJjZXMgaW4gRGVidWdnZXIgc2lkZWJhcgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS50cmVlRWxlbWVudEZvclJlcHJlc2VudGVkT2JqZWN0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS50cmVlRWxlbWVudEZvclJlcHJlc2VudGVkT2JqZWN0LmdldFBhcmVudCk6CiAgICAgICAgU3BlY2lhbCBjYXNlIFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBSZXNvdXJjZS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGVUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUcmVlRWxlbWVudC5wcm90b3R5cGUuX3VwZGF0ZVNvdXJjZUNvZGUpOgogICAgICAgIFJldmVydCByNTA2MDguCgoyMDEzLTA1LTA3ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGZvciB0aGUgVGltZWxpbmUgbmF2aWdhdGlvbiBiYXIuCgogICAgICAgIFRoZSBjb250YWluZXIgaXMgdGFsbGVyIHRoYW4gdGhlIG5hdmlnYXRpb24gYmFyLCBhbmQgaXQgdXNlZCBmb3IgbW91c2Ugb3ZlciBzbG9wLgogICAgICAgIFNvIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG5lZWRzIHRvIGJlIG9uIHRoZSBuYXZpZ2F0aW9uIGJhci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVzQ29udGVudFZpZXcuY3NzOgogICAgICAgICguY29udGVudC12aWV3LnRpbWVsaW5lcyA+IC5kYXRhLWdyaWQgPiAubmF2aWdhdGlvbi1iYXItY29udGFpbmVyKToKICAgICAgICAoLmNvbnRlbnQtdmlldy50aW1lbGluZXMgPiAuZGF0YS1ncmlkID4gLm5hdmlnYXRpb24tYmFyLWNvbnRhaW5lciA+IC5uYXZpZ2F0aW9uLWJhcik6CgoyMDEzLTA1LTA3ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQ29tcGFyZSBhc3luYyByZXNvdXJjZSB0eXBlcyBieSB0aGVpciBmaXJzdCB0aW1lc3RhbXAgc28gdGhleSBhcmUgaW4gY2hyb25vbG9naWNhbCBvcmRlci4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzODI3MTE4PiBXZWIgSW5zcGVjdG9yOiBjYW5ub3Qgc2VlIG9yZGVyIG9mIHhocnMgaW4gcmVzb3VyY2UgaW5zcGVjdG9yICgxMTU3MjgpCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVFbGVtZW50LmNvbXBhcmVSZXNvdXJjZVRyZWVFbGVtZW50cyk6CgoyMDEzLTA1LTA3ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IGFuZCBzaW1wbGlmeSB0aGUgbGF5b3V0IHBhdGggZm9yIFRvb2xiYXIuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzgyODIzMj4gUkVHUkVTU0lPTjogVG9vbGJhciBvdmVyZmxvd3Mgd2hlbiB1c2luZyBJY29ucyBhbmQgVGV4dCAoSG9yaXpvbnRhbCkgbW9kZQoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9Ub29sYmFyLmNzczoKICAgICAgICAoLnRvb2xiYXIgLmNvbnRyb2wtc2VjdGlvbik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Rvb2xiYXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Ub29sYmFyLnByb3RvdHlwZS5jdXN0b21VcGRhdGVMYXlvdXQuaXNPdmVyZmxvd2luZ1Rvb2xiYXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVG9vbGJhci5wcm90b3R5cGUuY3VzdG9tVXBkYXRlTGF5b3V0KToKCjIwMTMtMDUtMDcgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzODIxMTM5PiBBZnRlciBkZWxldGluZyBhIG5vZGUgd2hlbiByZW1vdGUgaW5zcGVjdGluZywgV2ViIEluc3BlY3RvciBpcyBicm9rZW4KCiAgICAgICAgV2hlbiB1c2luZyB0aGUgcmVtb3RlIGluc3BlY3RvciwgdGhlcmUgaXMgZW5vdWdoIG9mIGEgZGVsYXkgYmV0d2VlbgogICAgICAgIG1lc3NhZ2VzIHRoYXQgdGhlIGRpZFJlbW92ZU5vZGUgaGFuZGxlciB0cmlnZ2VycyB0aGUgRE9NVHJlZVVwZGF0ZXIgdG8KICAgICAgICByZWZyZXNoIHRoZSBwb3J0aW9uIG9mIHRoZSB0cmVlIGJlZm9yZSB0aGlzIHJlbW92ZU5vZGVDYWxsYmFjayBoYXBwZW5zLgogICAgICAgIFNpbmNlIHJlbW92ZU5vZGVDYWxsYmFjayBpcyBhc3luY2hyb25vdXMgYW55d2F5cywgd2Ugc2hvdWxkIGJhaWwgaWYKICAgICAgICB0aGUgdHJlZSBlbGVtZW50IHdhcyBhbHJlYWR5IHJlbW92ZWQgZnJvbSB0aGUgdHJlZSAoaGFzIG5vIHBhcmVudCkuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUVsZW1lbnQucHJvdG90eXBlLnJlbW92ZS5yZW1vdmVOb2RlQ2FsbGJhY2spOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUVsZW1lbnQucHJvdG90eXBlLnJlbW92ZSk6CgoyMDEzLTA1LTA3ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIEZpeCBtZW1iZXIgbmFtZSB0eXBvLgoKICAgICAgICBUaGlzIHdhcyB0aGUgb25seSBvY2N1cnJlbmNlIG9mIF9zZWxlY3RET01Ob2RlLiBUaGlzIGxvb2tzCiAgICAgICAgbGlrZSBpdCB3YXMganVzdCBhIHR5cG8gb2YgX3NlbGVjdGVkRE9NTm9kZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlT3V0bGluZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVPdXRsaW5lKToKCjIwMTMtMDUtMDcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBVc2UgYSBicmlnaHRlciBibHVlIGZvciBzZWxlY3RlZCBsYWJlbHMgaW4gdGhlIGxhYmVsLW9ubHkgdG9vbGJhciBtb2RlLgoKICAgICAgICBUaGlzIGJldHRlciBtYXRjaGVzIHRoZSBibHVlIHVzZWQgaW4gdGhlIHNlbGVjdGVkIHRvb2xiYXIgaWNvbnMuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMzgxMDk5Mj4gVXBkYXRlIFdlYiBJbnNwZWN0b3IgdG8gbWF0Y2ggWGNvZGUgNSdzIG5ldyBkZXNpZ24gbGFuZ3VhZ2UKCiAgICAgICAgUmV2aWV3ZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0J1dHRvblRvb2xiYXJJdGVtLmNzczoKICAgICAgICAoLnRvb2xiYXIubGFiZWwtb25seSAuaXRlbS5hY3RpdmF0ZS5idXR0b24uYWN0aXZhdGVkID4gLmxhYmVsKToKCjIwMTMtMDUtMDcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBPbmx5IGFsbG93IHRoZSBMQ0QgdG8gYmUgYSBzaW5nbGUgbGluZSwgZ2l2aW5nIGxlc3MgZGlmZmVyZW5jZSBiZXR3ZWVuIHRvb2xiYXIgbW9kZXMgYW5kIHNpemVzLgoKICAgICAgICBUaGlzIGJldHRlciBkaXN0cmlidXRlcyB0aGUgc3BhY2UgaW4gdGhlIExDRCBhbmQgbWFrZXMgaXQgY29sbGFwc2UgZG93biB0byAzIGl0ZW1zIHdoZW4KICAgICAgICB0aGVyZSBpc24ndCBlbm91Z2ggcm9vbSBmb3IgYWxsIDYgaXRlbXMuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMzgxMDk5Mj4gVXBkYXRlIFdlYiBJbnNwZWN0b3IgdG8gbWF0Y2ggWGNvZGUgNSdzIG5ldyBkZXNpZ24gbGFuZ3VhZ2UKCiAgICAgICAgUmV2aWV3ZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Rhc2hib2FyZFZpZXcuY3NzOgogICAgICAgICgudG9vbGJhciAuZGFzaGJvYXJkKToKICAgICAgICAoYm9keS5uaWdodGx5LWJ1aWxkIC50b29sYmFyIC5kYXNoYm9hcmQpOgogICAgICAgIChib2R5Lm5pZ2h0bHktYnVpbGQgLnRvb2xiYXIuY29sbGFwc2VkIC5kYXNoYm9hcmQpOgogICAgICAgIChib2R5Om5vdCgubmlnaHRseS1idWlsZCkgLnRvb2xiYXIuY29sbGFwc2VkIC5kYXNoYm9hcmQpOgogICAgICAgIChib2R5Om5vdCgubmlnaHRseS1idWlsZCkgLnRvb2xiYXIuY29sbGFwc2VkIC5kYXNoYm9hcmQgPiAubG9ncyk6CiAgICAgICAgKC50b29sYmFyIC5kYXNoYm9hcmQgPiAuaXRlbSk6CiAgICAgICAgKC50b29sYmFyIC5kYXNoYm9hcmQgPiAucmVzb3VyY2VzU2l6ZSk6CiAgICAgICAgKC50b29sYmFyIC5kYXNoYm9hcmQgPiAuaXRlbSA+IGRpdik6CiAgICAgICAgKC50b29sYmFyLm5vcm1hbC1zaXplLmljb24tYW5kLWxhYmVsLXZlcnRpY2FsIC5kYXNoYm9hcmQpOgogICAgICAgICgudG9vbGJhci5ub3JtYWwtc2l6ZS5pY29uLWFuZC1sYWJlbC1ob3Jpem9udGFsIC5kYXNoYm9hcmQgPiAuaXRlbSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Rhc2hib2FyZFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXNoYm9hcmRWaWV3KToKCjIwMTMtMDUtMDYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBVcGRhdGUgdGhlIExDRCBiYWNrZ3JvdW5kIHRvIG1hdGNoIFhjb2RlIDUuCgogICAgICAgIFRoaXMgY2hhbmdlIGlzIGNvbmRpdGlvbmFsIHRvIG5vbi1uaWdodGxpZXMuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMzgxMDk5Mj4gVXBkYXRlIFdlYiBJbnNwZWN0b3IgdG8gbWF0Y2ggWGNvZGUgNSdzIG5ldyBkZXNpZ24gbGFuZ3VhZ2UKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGFzaGJvYXJkVmlldy5jc3M6CiAgICAgICAgKC50b29sYmFyIC5kYXNoYm9hcmQpOgogICAgICAgIChib2R5Om5vdCgubmlnaHRseS1idWlsZCkgLnRvb2xiYXIgLmRhc2hib2FyZCk6CiAgICAgICAgKGJvZHkud2luZG93LWluYWN0aXZlOm5vdCgubmlnaHRseS1idWlsZCkgLnRvb2xiYXIgLmRhc2hib2FyZCk6CiAgICAgICAgKGJvZHkubmlnaHRseS1idWlsZCAudG9vbGJhciAuZGFzaGJvYXJkKToKICAgICAgICAoLnRvb2xiYXIgLmRhc2hib2FyZCA+IC5pdGVtKToKICAgICAgICAoLnRvb2xiYXIuc21hbGwtc2l6ZS5pY29uLWFuZC1sYWJlbC1ob3Jpem9udGFsIC5kYXNoYm9hcmQpOgogICAgICAgIChib2R5Lm5pZ2h0bHktYnVpbGQgLnRvb2xiYXIuc21hbGwtc2l6ZS5pY29uLWFuZC1sYWJlbC1ob3Jpem9udGFsIC5kYXNoYm9hcmQpOgogICAgICAgICgudG9vbGJhci5zbWFsbC1zaXplLmljb24tYW5kLWxhYmVsLWhvcml6b250YWwgLmRhc2hib2FyZCA+IC5pdGVtKToKICAgICAgICAoYm9keS5uaWdodGx5LWJ1aWxkIC50b29sYmFyLnNtYWxsLXNpemUuaWNvbi1hbmQtbGFiZWwtaG9yaXpvbnRhbCAuZGFzaGJvYXJkID4gLml0ZW0pOgogICAgICAgICgudG9vbGJhci5ub3JtYWwtc2l6ZS5pY29uLWFuZC1sYWJlbC1ob3Jpem9udGFsIC5kYXNoYm9hcmQpOgogICAgICAgIChib2R5Lm5pZ2h0bHktYnVpbGQgLnRvb2xiYXIubm9ybWFsLXNpemUuaWNvbi1hbmQtbGFiZWwtaG9yaXpvbnRhbCAuZGFzaGJvYXJkKToKICAgICAgICAoLnRvb2xiYXIuc21hbGwtc2l6ZS5pY29uLWFuZC1sYWJlbC12ZXJ0aWNhbCAuZGFzaGJvYXJkKToKICAgICAgICAoYm9keS5uaWdodGx5LWJ1aWxkIC50b29sYmFyLnNtYWxsLXNpemUuaWNvbi1hbmQtbGFiZWwtdmVydGljYWwgLmRhc2hib2FyZCk6CiAgICAgICAgKC50b29sYmFyLm5vcm1hbC1zaXplLmljb24tYW5kLWxhYmVsLXZlcnRpY2FsIC5kYXNoYm9hcmQpOgogICAgICAgIChib2R5Lm5pZ2h0bHktYnVpbGQgLnRvb2xiYXIubm9ybWFsLXNpemUuaWNvbi1hbmQtbGFiZWwtdmVydGljYWwgLmRhc2hib2FyZCk6CiAgICAgICAgKC50b29sYmFyLmljb24tYW5kLWxhYmVsLXZlcnRpY2FsIC5kYXNoYm9hcmQgPiAuaXRlbSk6CiAgICAgICAgKGJvZHkubmlnaHRseS1idWlsZCAudG9vbGJhci5pY29uLWFuZC1sYWJlbC12ZXJ0aWNhbCAuZGFzaGJvYXJkID4gLml0ZW0pOgoKMjAxMy0wNS0wNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFVwZGF0ZSB0aGUgZmlsdGVyIGZpZWxkIHBsYWNlaG9sZGVyIGluIHRoZSBSZXNvdXJjZXMgc2lkZWJhciB3aGVuIHNob3dpbmcgc2VhcmNoIHJlc3VsdHMuCgogICAgICAgIFJldmlld2VkIGJ5IEFudG9pbmUgUXVpbnQuCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVNpZGViYXJQYW5lbC5qczoKCjIwMTMtMDUtMDYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBbHdheXMgaGF2ZSB0aGUgSGllcmFyY2hpY2FsUGF0aENvbXBvbmVudCB0YWtlIHNwYWNlIHNvIGl0IGdpdmVzIHRoZSBsYXN0IGl0ZW0gc29tZSBwYWRkaW5nLgoKICAgICAgICBSZXZpZXdlZCBieSBBbnRvaW5lIFF1aW50LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSGllcmFyY2hpY2FsUGF0aENvbXBvbmVudC5jc3M6CiAgICAgICAgKC5oaWVyYXJjaGljYWwtcGF0aDpub3QoLmFsd2F5cy1zaG93LWxhc3QtcGF0aC1jb21wb25lbnQtc2VwYXJhdG9yKSA+IC5oaWVyYXJjaGljYWwtcGF0aC1jb21wb25lbnQ6bGFzdC1jaGlsZCA+IC5zZXBhcmF0b3IpOgogICAgICAgIFVzZSB2aXNpYmlsaXR5OiBoaWRkZW4gaW5zdGVhZCBvZiBkaXNwbGF5OiBub25lLgoKMjAxMy0wNS0wNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgU2NvcGVCYXJJdGVtIGFuZCBSYWRpb0J1dHRvbk5hdmlnYXRpb25JdGVtIGhhdmUgYSBtaW4td2lkdGggc28gd2hlbiB0aGV5IGFyZSBzZWxlY3RlZCB0aGUgYm9sZAogICAgICAgIHdlaWdodCBkb2VzIG5vdCBjYXVzZSB0aGUgaXRlbSB0byBjaGFuZ2UgaXRzIHdpZHRoLgoKICAgICAgICBUaGlzIGFkZHMgc29tZSB1cGRhdGVMYXlvdXQgY2FsbHMgdG8gcGxhY2VzIHRoYXQgbmVlZGVkIGl0IG5vdyBvciB3ZXJlIG1pc3NpbmcgaXQgYWxyZWFkeS4KCiAgICAgICAgVGhpcyBjaGFuZ2UgaXMgbm90IGNvbmRpdGlvbmFsIHRvIG5vbi1uaWdodGxpZXMuIEl0IGRvZXMgbm8gaGFybSB0byBhbHdheXMgZG8gdGhpcy4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEzODEwOTkyPiBVcGRhdGUgV2ViIEluc3BlY3RvciB0byBtYXRjaCBYY29kZSA1J3MgbmV3IGRlc2lnbiBsYW5ndWFnZQoKICAgICAgICBSZXZpZXdlZCBieSBBbnRvaW5lIFF1aW50LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnV0dG9uTmF2aWdhdGlvbkl0ZW0uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuc2V0IGxhYmVsKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS52aXNpYmlsaXR5RGlkQ2hhbmdlKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLl9jb250ZW50QnJvd3NlclNpemVEaWRDaGFuZ2UpOgogICAgICAgICogVXNlckludGVyZmFjZS9SYWRpb0J1dHRvbk5hdmlnYXRpb25JdGVtLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmFkaW9CdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuZ2V0IHNlbGVjdGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJhZGlvQnV0dG9uTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLnNldCBzZWxlY3RlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SYWRpb0J1dHRvbk5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5nZXQgYWN0aXZlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJhZGlvQnV0dG9uTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLnNldCBhY3RpdmUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmFkaW9CdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUudXBkYXRlTGF5b3V0KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2NvcGVCYXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TY29wZUJhci5wcm90b3R5cGUudXBkYXRlTGF5b3V0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjb3BlQmFyLnByb3RvdHlwZS5fcG9wdWxhdGUpOgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZURhdGFHcmlkLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVEYXRhR3JpZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZURhdGFHcmlkLnByb3RvdHlwZS51cGRhdGVMYXlvdXQpOgoKMjAxMy0wNS0wNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFNob3cgb3ZlcmZsb3cgc2hhZG93IHBvY2tldHMgaW4gdGhlIG5hdmlnYXRpb24gc2lkZWJhciB3aGVuIGNvbnRlbnQgY2FuIHNjcm9sbC4KCiAgICAgICAgVGhpcyBjaGFuZ2UgaXMgY29uZGl0aW9uYWwgdG8gbm9uLW5pZ2h0bGllcy4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEzODEwOTkyPiBVcGRhdGUgV2ViIEluc3BlY3RvciB0byBtYXRjaCBYY29kZSA1J3MgbmV3IGRlc2lnbiBsYW5ndWFnZQoKICAgICAgICBSZXZpZXdlZCBieSBBbnRvaW5lIFF1aW50LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvblNpZGViYXJQYW5lbC5jc3M6CiAgICAgICAgKC5zaWRlYmFyID4gLnBhbmVsLm5hdmlnYXRpb24gPiAub3ZlcmZsb3ctc2hhZG93KToKICAgICAgICAoYm9keS5uaWdodGx5LWJ1aWxkIC5zaWRlYmFyID4gLnBhbmVsLm5hdmlnYXRpb24gPiAub3ZlcmZsb3ctc2hhZG93KToKICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwubmF2aWdhdGlvbiA+IC5vdmVyZmxvdy1zaGFkb3cudG9wKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvblNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25TaWRlYmFyUGFuZWwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbC5wcm90b3R5cGUuY3JlYXRlQ29udGVudFRyZWVPdXRsaW5lKToKICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25TaWRlYmFyUGFuZWwucHJvdG90eXBlLnNob3dFbXB0eUNvbnRlbnRQbGFjZWhvbGRlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLnByb3RvdHlwZS5oaWRlRW1wdHlDb250ZW50UGxhY2Vob2xkZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbC5wcm90b3R5cGUuc2hvd24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3VwZGF0ZUNvbnRlbnRPdmVyZmxvd1NoYWRvd1Zpc2liaWxpdHkpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3VwZGF0ZUZpbHRlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdHJlZUVsZW1lbnRBZGRlZE9yQ2hhbmdlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdHJlZUVsZW1lbnRFeHBhbmRlZE9yQ29sbGFwc2VkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RyZWVPdXRsaW5lLmpzOgogICAgICAgIChUcmVlRWxlbWVudC5wcm90b3R5cGUuY29sbGFwc2UpOgogICAgICAgIChUcmVlRWxlbWVudC5wcm90b3R5cGUuZXhwYW5kKToKCjIwMTMtMDUtMDYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBVcGRhdGUgZm9jdXMgYW5kIGFjdGl2ZSBmb2N1cyBnZW5lcmF0ZWQgaW1hZ2VzIHRvIG1hdGNoIHRoZSBibHVlcyB1c2VkIGJ5IFhjb2RlIDUuCgogICAgICAgIFRoaXMgY2hhbmdlIGlzIG5vdCBjb25kaXRpb25hbCB0byBub24tbmlnaHRsaWVzLiBJdCBzaG91bGRuJ3QgYmUgdG9vIHJldmVhbGluZy4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEzODEwOTkyPiBVcGRhdGUgV2ViIEluc3BlY3RvciB0byBtYXRjaCBYY29kZSA1J3MgbmV3IGRlc2lnbiBsYW5ndWFnZQoKICAgICAgICBSZXZpZXdlZCBieSBBbnRvaW5lIFF1aW50LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VVdGlsaXRpZXMuanM6CiAgICAgICAgKC5nZW5lcmF0ZUltYWdlKToKCjIwMTMtMDUtMDYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBVcGRhdGUgc3R5bGVzIHRvIG1hdGNoIHRoZSBtYWpvcml0eSBvZiBYY29kZSA1J3MgZGVzaWduIGNoYW5nZXMuCgogICAgICAgIFRoZSBzdHlsZSBjaGFuZ2VzIGFyZSBjb25kaXRpb25hbCBzbyB0aGV5IHdvbnQgYXBwbHkgd2hlbiBydW5uaW5nIGEgV2ViS2l0IG5pZ2h0bHkuCiAgICAgICAgQWZ0ZXIgV1dEQyB3ZSBjYW4gcmVtb3ZlIHRoZSBjb25kaXRpb24gYW5kIHRoZSBleHRyYSBzdHlsZSBydWxlcyB0aGlzIGFkZHMuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMzgxMDk5Mj4gVXBkYXRlIFdlYiBJbnNwZWN0b3IgdG8gbWF0Y2ggWGNvZGUgNSdzIG5ldyBkZXNpZ24gbGFuZ3VhZ2UKCiAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0J1dHRvbk5hdmlnYXRpb25JdGVtLmNzczoKICAgICAgICAoLm5hdmlnYXRpb24tYmFyIC5pdGVtLmJ1dHRvbi50ZXh0LW9ubHkpOgogICAgICAgIChib2R5Lm5pZ2h0bHkgLm5hdmlnYXRpb24tYmFyIC5pdGVtLmJ1dHRvbjpub3QoLmRpc2FibGVkKTpub3QoLnJhZGlvKTpub3QoLnN1cHByZXNzLWJlemVsKTphY3RpdmUpOgogICAgICAgICogVXNlckludGVyZmFjZS9Db2RlTWlycm9yT3ZlcnJpZGVzLmNzczoKICAgICAgICAoLkNvZGVNaXJyb3IgLkNvZGVNaXJyb3ItZ3V0dGVycyk6CiAgICAgICAgKC5ib2R5Lm5pZ2h0bHktYnVpbGQgLkNvZGVNaXJyb3IgLkNvZGVNaXJyb3ItZ3V0dGVycyk6CiAgICAgICAgKC5Db2RlTWlycm9yIC5Db2RlTWlycm9yLWxpbmVudW1iZXIpOgogICAgICAgICogVXNlckludGVyZmFjZS9EZXRhaWxzU2VjdGlvbi5jc3M6CiAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24gPiAuaGVhZGVyKToKICAgICAgICAoLmRldGFpbHMtc2VjdGlvbiAuZGV0YWlscy1zZWN0aW9uID4gLmhlYWRlcik6CiAgICAgICAgKGJvZHkubmlnaHRseS1idWlsZCAuZGV0YWlscy1zZWN0aW9uID4gLmhlYWRlcik6CiAgICAgICAgKGJvZHkubmlnaHRseS1idWlsZCAuZGV0YWlscy1zZWN0aW9uIC5kZXRhaWxzLXNlY3Rpb24gPiAuaGVhZGVyKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGl2aWRlck5hdmlnYXRpb25JdGVtLmNzczoKICAgICAgICAoLm5hdmlnYXRpb24tYmFyIC5pdGVtLmRpdmlkZXIpOgogICAgICAgIChib2R5Lm5pZ2h0bHkgLm5hdmlnYXRpb24tYmFyIC5pdGVtLmRpdmlkZXIpOgogICAgICAgICogVXNlckludGVyZmFjZS9GaWx0ZXJCYXIuY3NzOgogICAgICAgICguZmlsdGVyLWJhcik6CiAgICAgICAgKGJvZHkubmlnaHRseS1idWlsZCAuZmlsdGVyLWJhcik6CiAgICAgICAgKGJvZHk6bm90KC5uaWdodGx5LWJ1aWxkKSAuZmlsdGVyLWJhciA+IGlucHV0W3R5cGU9InNlYXJjaCJdKToKICAgICAgICAoYm9keTpub3QoLm5pZ2h0bHktYnVpbGQpIC5maWx0ZXItYmFyID4gaW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIpOgogICAgICAgIChib2R5Om5vdCgubmlnaHRseS1idWlsZCkgLmZpbHRlci1iYXIgPiBpbnB1dFt0eXBlPSJzZWFyY2giXTp2YWxpZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZpbHRlckJhci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkZpbHRlckJhcik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZpbmRCYW5uZXIuY3NzOgogICAgICAgIChib2R5Lm5pZ2h0bHktYnVpbGQgLmZpbmQtYmFubmVyKToKICAgICAgICAoYm9keTpub3QoLm5pZ2h0bHkpIC5maW5kLWJhbm5lciA+IGlucHV0W3R5cGU9InNlYXJjaCJdKToKICAgICAgICAoYm9keTpub3QoLm5pZ2h0bHkpIC5maW5kLWJhbm5lciA+IGJ1dHRvbik6CiAgICAgICAgKC5maW5kLWJhbm5lciA+IGJ1dHRvbiA+IC5nbHlwaCk6CiAgICAgICAgKGJvZHkubmlnaHRseSAuZmluZC1iYW5uZXIgPiBidXR0b24gPiAuZ2x5cGgpOgogICAgICAgICogVXNlckludGVyZmFjZS9IaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50LmNzczoKICAgICAgICAoYm9keS5uaWdodGx5IC5oaWVyYXJjaGljYWwtcGF0aC1jb21wb25lbnQgPiAuc2VwYXJhdG9yKToKICAgICAgICAoLmhpZXJhcmNoaWNhbC1wYXRoLWNvbXBvbmVudC50ZXh0LW9ubHkgPiBzZWxlY3QpOgogICAgICAgICogVXNlckludGVyZmFjZS9JbnN0cnVtZW50U2lkZWJhclBhbmVsLmNzczoKICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuaW5zdHJ1bWVudCA+IC50aXRsZS1iYXIpOgogICAgICAgIChib2R5Lm5pZ2h0bHktYnVpbGQgLnNpZGViYXIgPiAucGFuZWwuaW5zdHJ1bWVudCA+IC50aXRsZS1iYXIpOgogICAgICAgICguc2lkZWJhciA+IC5wYW5lbC5pbnN0cnVtZW50ID4gLnRpdGxlLWJhci5wcm9maWxlcyk6CiAgICAgICAgKGJvZHkubmlnaHRseS1idWlsZCAuc2lkZWJhciA+IC5wYW5lbC5pbnN0cnVtZW50ID4gLnRpdGxlLWJhci5wcm9maWxlcyk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xheWVyVHJlZVNpZGViYXJQYW5lbC5jc3M6CiAgICAgICAgKC5sYXllci10cmVlLnBhbmVsIC5ib3R0b20tYmFyKToKICAgICAgICAoYm9keS5uaWdodGx5LWJ1aWxkIC5sYXllci10cmVlLnBhbmVsIC5ib3R0b20tYmFyKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5jc3M6CiAgICAgICAgKCNzcGxpdC1jb250ZW50LWJyb3dzZXIgPiAubmF2aWdhdGlvbi1iYXIpOgogICAgICAgIChib2R5Lm5pZ2h0bHktYnVpbGQgI3NwbGl0LWNvbnRlbnQtYnJvd3NlciA+IC5uYXZpZ2F0aW9uLWJhcik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05hdmlnYXRpb25CYXIuY3NzOgogICAgICAgICgubmF2aWdhdGlvbi1iYXIpOgogICAgICAgIChib2R5Lm5pZ2h0bHktYnVpbGQgLm5hdmlnYXRpb24tYmFyKToKICAgICAgICAoYm9keS5uaWdodGx5LWJ1aWxkLndpbmRvdy1pbmFjdGl2ZSAubmF2aWdhdGlvbi1iYXIpOgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLmNzczoKICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwubmF2aWdhdGlvbiA+IC5jb250ZW50KToKICAgICAgICAoYm9keS5uaWdodGx5LWJ1aWxkIC5zaWRlYmFyID4gLnBhbmVsLm5hdmlnYXRpb24gPiAuY29udGVudCk6CiAgICAgICAgKC5zaWRlYmFyID4gLnBhbmVsLm5hdmlnYXRpb24gPiAub3ZlcmZsb3ctc2hhZG93KToKICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwubmF2aWdhdGlvbiA+IC5vdmVyZmxvdy1zaGFkb3cudG9wKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmFkaW9CdXR0b25OYXZpZ2F0aW9uSXRlbS5jc3M6CiAgICAgICAgKC5uYXZpZ2F0aW9uLWJhciAuaXRlbS5yYWRpby5idXR0b24udGV4dC1vbmx5LnNlbGVjdGVkKToKICAgICAgICAoYm9keTpub3QoLm5pZ2h0bHkpIC5uYXZpZ2F0aW9uLWJhciAuaXRlbS5yYWRpby5idXR0b24udGV4dC1vbmx5LnNlbGVjdGVkKToKICAgICAgICAoYm9keS5uaWdodGx5IC5uYXZpZ2F0aW9uLWJhciAuaXRlbS5yYWRpby5idXR0b24uc2VsZWN0ZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVNpZGViYXJQYW5lbC5jc3M6CiAgICAgICAgKC5zaWRlYmFyID4gLnBhbmVsLnJlc291cmNlID4gLmVtcHR5LWNvbnRlbnQtcGxhY2Vob2xkZXIpOgogICAgICAgIChib2R5Lm5pZ2h0bHktYnVpbGQgLnNpZGViYXIgPiAucGFuZWwucmVzb3VyY2UgPiAuZW1wdHktY29udGVudC1wbGFjZWhvbGRlcik6CiAgICAgICAgKC5zaWRlYmFyID4gLnBhbmVsLnJlc291cmNlID4gLnNlYXJjaC1iYXIpOgogICAgICAgIChib2R5Lm5pZ2h0bHktYnVpbGQgLnNpZGViYXIgPiAucGFuZWwucmVzb3VyY2UgPiAuc2VhcmNoLWJhcik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwpOgogICAgICAgICogVXNlckludGVyZmFjZS9TY29wZUJhci5jc3M6CiAgICAgICAgKC5zY29wZS1iYXIgPiBsaSk6CiAgICAgICAgKGJvZHk6bm90KC5uaWdodGx5LWJ1aWxkKSAuc2NvcGUtYmFyID4gbGkpOgogICAgICAgIChib2R5Om5vdCgubmlnaHRseS1idWlsZCkgLnNjb3BlLWJhciA+IGxpOmFjdGl2ZSk6CiAgICAgICAgKGJvZHk6bm90KC5uaWdodGx5LWJ1aWxkKSAuc2NvcGUtYmFyID4gbGkuc2VsZWN0ZWQpOgogICAgICAgIChib2R5Lm5pZ2h0bHktYnVpbGQgLnNjb3BlLWJhciA+IGxpKToKICAgICAgICAoYm9keS5uaWdodGx5LWJ1aWxkIC5zY29wZS1iYXIgPiBsaTphY3RpdmUpOgogICAgICAgICguc2NvcGUtYmFyID4gbGk6aG92ZXIpOgogICAgICAgICguc2NvcGUtYmFyID4gbGkuc2VsZWN0ZWQpOgogICAgICAgICguc2NvcGUtYmFyID4gbGk6YWN0aXZlKToKICAgICAgICAoYm9keS5uaWdodGx5LWJ1aWxkIC5zY29wZS1iYXIgPiBsaS5zZWxlY3RlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NlYXJjaEJhci5jc3M6CiAgICAgICAgKC5zZWFyY2gtYmFyID4gaW5wdXRbdHlwZT0ic2VhcmNoIl0pOgogICAgICAgIChib2R5Om5vdCgubmlnaHRseS1idWlsZCkgLnNlYXJjaC1iYXIgPiBpbnB1dFt0eXBlPSJzZWFyY2giXSk6CiAgICAgICAgKGJvZHk6bm90KC5uaWdodGx5LWJ1aWxkKSAuc2VhcmNoLWJhciA+IGlucHV0W3R5cGU9InNlYXJjaCJdOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyKToKICAgICAgICAoYm9keTpub3QoLm5pZ2h0bHktYnVpbGQpIC5zZWFyY2gtYmFyID4gaW5wdXRbdHlwZT0ic2VhcmNoIl06dmFsaWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9TZWFyY2hCYXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hCYXIpOgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZXNDb250ZW50Vmlldy5jc3M6CiAgICAgICAgKC5jb250ZW50LXZpZXcudGltZWxpbmVzID4gLmRhdGEtZ3JpZCk6CiAgICAgICAgKGJvZHkubmlnaHRseS1idWlsZCAuY29udGVudC12aWV3LnRpbWVsaW5lcyA+IC5kYXRhLWdyaWQpOgogICAgICAgICguY29udGVudC12aWV3LnRpbWVsaW5lcyA+IC5kYXRhLWdyaWQgdGgpOgogICAgICAgIChib2R5Lm5pZ2h0bHktYnVpbGQgLmNvbnRlbnQtdmlldy50aW1lbGluZXMgPiAuZGF0YS1ncmlkIHRoKToKICAgICAgICAoLmNvbnRlbnQtdmlldy50aW1lbGluZXMgPiAuZGF0YS1ncmlkIHRoOm5vdCg6bGFzdC1jaGlsZCkpOgogICAgICAgIChib2R5Lm5pZ2h0bHktYnVpbGQgLmNvbnRlbnQtdmlldy50aW1lbGluZXMgPiAuZGF0YS1ncmlkIHRoOm5vdCg6bGFzdC1jaGlsZCkpOgogICAgICAgICguY29udGVudC12aWV3LnRpbWVsaW5lcyA+IC5kYXRhLWdyaWQgdGguc29ydGFibGU6bm90KC5tb3VzZS1vdmVyLWNvbGxhcHNlcik6YWN0aXZlKToKICAgICAgICAoYm9keS5uaWdodGx5LWJ1aWxkIC5jb250ZW50LXZpZXcudGltZWxpbmVzID4gLmRhdGEtZ3JpZCB0aC5zb3J0YWJsZTpub3QoLm1vdXNlLW92ZXItY29sbGFwc2VyKTphY3RpdmUpOgogICAgICAgICguY29udGVudC12aWV3LnRpbWVsaW5lcyA+IC5kYXRhLWdyaWQgdGguc29ydC1kZXNjZW5kaW5nKToKICAgICAgICAoYm9keS5uaWdodGx5LWJ1aWxkIC5jb250ZW50LXZpZXcudGltZWxpbmVzID4gLmRhdGEtZ3JpZCB0aC5zb3J0LWRlc2NlbmRpbmcpOgogICAgICAgICguY29udGVudC12aWV3LnRpbWVsaW5lcyA+IC5kYXRhLWdyaWQgPiAubmF2aWdhdGlvbi1iYXItY29udGFpbmVyKToKICAgICAgICAoLmNvbnRlbnQtdmlldy50aW1lbGluZXMgPiAuZGF0YS1ncmlkID4gLm5hdmlnYXRpb24tYmFyLWNvbnRhaW5lciA+IC5uYXZpZ2F0aW9uLWJhcik6CiAgICAgICAgKGJvZHkubmlnaHRseS1idWlsZCAuY29udGVudC12aWV3LnRpbWVsaW5lcyA+IC5kYXRhLWdyaWQgPiAubmF2aWdhdGlvbi1iYXItY29udGFpbmVyID4gLm5hdmlnYXRpb24tYmFyKToKCjIwMTMtMDUtMDYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgYSBuaWdodGx5LWJ1aWxkIGNsYXNzIHNvIHdlIGNhbiBoaWRlIG5ldyBVSSBmcm9tIG5pZ2h0bHkgV2ViS2l0IGJ1aWxkcy4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEzODEwOTkyPiBVcGRhdGUgV2ViIEluc3BlY3RvciB0byBtYXRjaCBYY29kZSA1J3MgbmV3IGRlc2lnbiBsYW5ndWFnZQoKICAgICAgICBSZXZpZXdlZCBieSBBbnRvaW5lIFF1aW50LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOgogICAgICAgIFNldCB0aGUgbmlnaHRseS1idWlsZCBjbGFzcyBvbiBib2R5IGlmIHdlIGFyZSBpbiBhIG5pZ2h0bHkgYnVpbGQuCgoyMDEzLTA1LTAzICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIHN0dWJzIGZvciBzYXZlZFVSTCBhbmQgYXBwZW5kZWRUb1VSTC4KCiAgICAgICAgaHR0cHM6Ly93ZWJraXQub3JnL2IvMTE1NTYxCiAgICAgICAgcmRhcjovL3Byb2JsZW0vMTM4MDYwNTUKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zcGVjdG9yRnJvbnRlbmRBUEkuanM6CiAgICAgICAgKEluc3BlY3RvckZyb250ZW5kQVBJLnNhdmVkVVJMKToKICAgICAgICAoSW5zcGVjdG9yRnJvbnRlbmRBUEkuYXBwZW5kZWRUb1VSTCk6CgoyMDEzLTA1LTAyICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IHRoZSBhbGlnbm1lbnQgb2YgdGhlIHRpdGxlcyBpbiB0aGUgVGltZWxpbmVzIHNpZGViYXIuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0dlbmVyYWxUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkdlbmVyYWxUcmVlRWxlbWVudC5wcm90b3R5cGUuX3VwZGF0ZVRpdGxlRWxlbWVudHMpOgogICAgICAgIE9ubHkgY3JlYXRlIGEgc3VidGl0bGUgaWYgdGhlIHN0cmluZyBoYXMgYSB2YWx1ZSwgbm90IGFuIGVtcHR5IHN0cmluZy4KCjIwMTMtMDUtMDEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIHRoZSBEYXNoYm9hcmQgdGltZXIgYW5kIFRpbWVsaW5lIHZpZXdzIG1vcmUgcm9idXN0IHdoZW4gZ29pbmcgYmFjay9mb3J3YXJkLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM2MTIwMjU+IERhc2hib2FyZDogTENEIHRpbWVyIG5ldmVyIHN0b3BzIHdoZW4gZ29pbmcgYmFjay9mb3J3YXJkCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMTgwMDA5PiBSZWNvcmRpbmcgc29tZXRpbWVzIG5ldmVyIHN0b3BzIGJlY2F1c2UgdGhlIGxvYWQgZXZlbnQgbWFya2VyIGlzIG5ldmVyIGFkZGVkCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNTEwOTU1PiBJbnRlcm1pdHRlbnRseSwgdGltZWxpbmUgaXMgaW4gImRheXMiIGFmdGVyIHJlZnJlc2hpbmcgd3NqLmNvbSBzaXRlCgogICAgICAgIFJldmlld2VkIGJ5IEFudG9pbmUgUXVpbnQuCgogICAgICAgICogVXNlckludGVyZmFjZS9EYXNoYm9hcmRNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGFzaGJvYXJkTWFuYWdlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXNoYm9hcmRNYW5hZ2VyLnByb3RvdHlwZS5fbWFpblJlc291cmNlRGlkQ2hhbmdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhc2hib2FyZE1hbmFnZXIucHJvdG90eXBlLl9yZWNvcmRpbmdTdG9wcGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhc2hib2FyZE1hbmFnZXIucHJvdG90eXBlLl9zdGFydFVwZGF0aW5nVGltZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXNoYm9hcmRNYW5hZ2VyLnByb3RvdHlwZS5fc3RvcFVwZGF0aW5nVGltZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGFzaGJvYXJkTWFuYWdlci5wcm90b3R5cGUuX3VwZGF0ZVRpbWUpOgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmV0d29ya0dyYXBoQ2FsY3VsYXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLk5ldHdvcmtUcmFuc2ZlclRpbWVDYWxjdWxhdG9yLnByb3RvdHlwZS5fbG93ZXJCb3VuZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrVHJhbnNmZXJUaW1lQ2FsY3VsYXRvci5wcm90b3R5cGUuX3VwcGVyQm91bmQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya1RyYW5zZmVyRHVyYXRpb25DYWxjdWxhdG9yLnByb3RvdHlwZS5fdXBwZXJCb3VuZCk6CiAgICAgICAgRG9uJ3QgcmV0dXJuIE5hTiBmb3IgdGhlIGJvdW5kcy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLmdldCBmaXJzdFRpbWVzdGFtcCk6IEFkZGVkLgogICAgICAgIEFkZGVkIGFzIGEgaGVscGVyIHRvIHByZXZlbnQgdXNpbmcgTmFOIGFzIHRoZSBzdGFydCB0aW1lLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VUaW1lbGluZVJlY29yZC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVGltZWxpbmVSZWNvcmQucHJvdG90eXBlLmdldCBzdGFydFRpbWUpOgogICAgICAgIFVzZSBmaXJzdFRpbWVzdGFtcC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuc3RhcnRSZWNvcmRpbmcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLnByb3RvdHlwZS5zdG9wUmVjb3JkaW5nKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuZXZlbnRSZWNvcmRlZC5wcm9jZXNzUmVjb3JkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuZXZlbnRSZWNvcmRlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlLl9jbGVhcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlLl9hZGRSZWNvcmQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLnByb3RvdHlwZS5fc3RhcnRBdXRvUmVjb3JkaW5nKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuX3N0b3BBdXRvUmVjb3JkaW5nU29vbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlLl9yZXNldEF1dG9SZWNvcmRpbmdEZWFkVGltZVRpbWVvdXQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLnByb3RvdHlwZS5fbWFpblJlc291cmNlRGlkQ2hhbmdlKToKICAgICAgICBGaXJlIGFuIGV2ZW50IG9uIGNsZWFyIHNvIHRoZSB0aW1lbGluZSB2aWV3IGNsZWFycyBldmVuIGlmIHJlY29yZGluZyBkb2VzIG5vdCBzdGFydC4KICAgICAgICBUcmFjayB0aGUgbWFpbiByZXNvdXJjZSBvYmplY3QgYW5kIG5vdCB0aGUgcmVxdWVzdCBpZGVudGlmaWVyLCBzaW5jZSBhIHJlc291cmNlCiAgICAgICAgbWlnaHQgbm90IGhhdmUgYSByZXF1ZXN0IGlkZW50aWZpZXIgaW4gdGhlIGJhY2svZm9yd2FyZCBjYXNlLiBBdXRvIHN0b3AgcmVjb3JkaW5nIHNvb24KICAgICAgICBhZnRlciBldmVyeSByZWNvcmQsIG5vdCBqdXN0IHRoZSBsb2FkIGV2ZW50IHNpbmNlIHdlIGRvbid0IGFsd2F5cyBoYXZlIGxvYWQgZXZlbnRzLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVzQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldy5wcm90b3R5cGUuX3JlY29yZHNDbGVhcmVkKToKICAgICAgICBVc2UgUmVjb3Jkc0NsZWFyZWQgZXZlbnQgaW5zdGVhZCBvZiBSZWNvcmRpbmdTdGFydGVkIHRvIGNsZWFyIHRoZSB2aWV3LgoKMjAxMy0wNS0wMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFJldmVhbCB0aGUgbGluZSAoaWYgc3VwcGxpZWQpIHdoZW4gc2hvd2luZyBhIFNjcmlwdENvbnRlbnRWaWV3LgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM3ODUwMjc+IFJFR1JFU1NJT046IEV4dHJhIFNjcmlwdHM6IG5vIGF1dG9zY3JvbGwgdG8gZGVidWdnZXIgc3RhdGVtZW50LgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5zaG93U291cmNlQ29kZSk6CgoyMDEzLTA1LTAxICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRG9uJ3QgdXBkYXRlIHRoZSBkYXNoYm9hcmQgdGV4dCB1bmxlc3MgaXQgaGFzIGNoYW5nZWQuCgogICAgICAgIEFsc28gc3RlcCB1cCB0aGUgaW50ZXJ2YWwgd2UgdXBkYXRlIHRoZSB0aW1lIHNvIGl0IGRvZXMgbm90IHRyeSB0byB1cGRhdGUgZXZlcnkgNTBtcyB3aGVuIHRoZQogICAgICAgIGR1cmF0aW9uIGlzIGxvbmcgZW5vdWdoIHRvIG5vdCBtYXR0ZXIuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzcxODA1Nj4gV2hpbGUgSlMgZGVidWdnaW5nLCBldmVyeXRoaW5nIGluIHRoZSBpbnNwZWN0b3Igd2luZG93IGlzIHJlcGFpbnRpbmcgYWxsIHRoZSB0aW1lCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Rhc2hib2FyZE1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXNoYm9hcmRNYW5hZ2VyLnByb3RvdHlwZS5fc3RhcnRVcGRhdGluZ1RpbWUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGFzaGJvYXJkTWFuYWdlci5wcm90b3R5cGUuX3VwZGF0ZVRpbWUpOgogICAgICAgICogVXNlckludGVyZmFjZS9EYXNoYm9hcmRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGFzaGJvYXJkVmlldy5wcm90b3R5cGUuc2V0IGxvZ3MpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGFzaGJvYXJkVmlldy5wcm90b3R5cGUuc2V0IGlzc3Vlcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXNoYm9hcmRWaWV3LnByb3RvdHlwZS5zZXQgZXJyb3JzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhc2hib2FyZFZpZXcucHJvdG90eXBlLnNldCB0aW1lKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhc2hib2FyZFZpZXcucHJvdG90eXBlLnNldCByZXNvdXJjZXNDb3VudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXNoYm9hcmRWaWV3LnByb3RvdHlwZS5zZXQgcmVzb3VyY2VzU2l6ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXNoYm9hcmRWaWV3LnByb3RvdHlwZS5fYXBwZW5kRWxlbWVudEZvck5hbWVkSXRlbS4pOgoKMjAxMy0wNS0wMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEJyZWFrcG9pbnQgY29udGV4dCBtZW51IGl0ZW1zIHNob3VsZCBhcHBlYXIgZm9yIEV4dHJhIGFuZCBBbm9ueW1vdXMgU2NyaXB0cy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNzc2Mjk5PgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9EZWJ1Z2dlclNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fYnJlYWtwb2ludHNCZW5lYXRoVHJlZUVsZW1lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9icmVha3BvaW50VHJlZU91dGxpbmVEZWxldGVUcmVlRWxlbWVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2JyZWFrcG9pbnRUcmVlT3V0bGluZUNvbnRleHRNZW51VHJlZUVsZW1lbnQpOgogICAgICAgIENoZWNrIGZvciBXZWJJbnNwZWN0b3IuU2NyaXB0VHJlZUVsZW1lbnQgaW4gYWRkaXRpb24gdG8gV2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZUVsZW1lbnQuCgoyMDEzLTA0LTMwICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRGlzYWJsZSBzcGVsbGNoZWNrIGFuZCBzbWFydCBxdW90ZXMgaW4gdGhlIGNvbnNvbGUgcHJvbXB0LgoKICAgICAgICBJJ2xsIHVwc3RyZWFtIHRoaXMgdG8gQ29kZU1pcnJvciBvbmNlIEkgZ2V0IGFwcHJvdmFsIGZyb20gbGVnYWwuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzc1NzcwOT4KCiAgICAgICAgUmV2aWV3ZWQgYnkgUmlja3kgTW9uZGVsbG8uCgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZGVtaXJyb3IuanM6CiAgICAgICAgKHdpbmRvdy5Db2RlTWlycm9yKToKCjIwMTMtMDQtMzAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBUd2VhayB0aGUgVG9vbGJhciBsYXlvdXQgY29kZSB0byBub3QgaGlkZSB0aGUgRGFzaGJvYXJkIHdoZW4gc2l6ZXMgYXJlIG9mZiBieSBvbmUuCgogICAgICAgIFRoaXMgd2Fzbid0IG5lZWRlZCB3aGVuIHN1Yi1waXhlbCBsYXlvdXQgd2FzIG9uLCBidXQgdGhhdCB3YXMgZGlzYWJsZWQgaW4gaHR0cDovL3dlYmtpdC5vcmcvYi8xNDkyMDkuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzc1NzM1ND4gUkVHUkVTU0lPTjogVG9vbGJhciB0aGlua3MgaXQgaXMgY29sbGFwc2VkLCBzbyBkYXNoYm9hcmQgaXMgaGlkZGVuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Rvb2xiYXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Ub29sYmFyLnByb3RvdHlwZS5jdXN0b21VcGRhdGVMYXlvdXQpOgoKMjAxMy0wNC0zMCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEhhdmUgZGFzaGJvYXJkIGJ1dHRvbnMgKGNvbnNvbGUgc3VtbWFyeSBidXR0b25zKSBkbyBmaWx0ZXJpbmcgYXMgd2VsbC4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNjg1Njg1PgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9EYXNoYm9hcmRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGFzaGJvYXJkVmlldyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXNoYm9hcmRWaWV3LnByb3RvdHlwZS5fY29uc29sZUl0ZW1XYXNDbGlja2VkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IHNjb3BlQmFyKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLnNob3dGdWxsSGVpZ2h0Q29uc29sZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5zaG93Q29uc29sZVZpZXcpOgoKMjAxMy0wNC0zMCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI3MTk5MjU+IENhbGwgc3RhY2sgc2hvdWxkIHNob3cgbGl2ZSBsaW5lIG51bWJlciBuZXh0IHRvIGZpbGUgbmFtZQoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9HZW5lcmFsVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5HZW5lcmFsVHJlZUVsZW1lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuR2VuZXJhbFRyZWVFbGVtZW50LnByb3RvdHlwZS5nZXQgdG9vbHRpcEhhbmRsZWRTZXBhcmF0ZWx5KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkdlbmVyYWxUcmVlRWxlbWVudC5wcm90b3R5cGUuc2V0IHRvb2x0aXBIYW5kbGVkU2VwYXJhdGVseSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5HZW5lcmFsVHJlZUVsZW1lbnQucHJvdG90eXBlLl91cGRhdGVUaXRsZUVsZW1lbnRzKToKICAgICAgICBBbGxvdyBjbGllbnRzIHRvIGhhbmRsZSB0aGUgdG9vbHRpcCB0aGVtc2VsdmVzLCBhbmQgdG8gc2V0IHN1YnRpdGxlIGFzCiAgICAgICAgYW4gZWxlbWVudCwgaW5zdGVhZCBvZiBhIHN0cmluZyAoYWxyZWFkeSBwb3NzaWJsZSB3aXRoIG1haW5UaXRsZSkuCgogICAgICAgICogVXNlckludGVyZmFjZS9DYWxsRnJhbWVUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNhbGxGcmFtZVRyZWVFbGVtZW50KToKICAgICAgICBTZXQgdGhlIHN1YnRpdGxlIGFzIGEgbGl2ZSBsb2NhdGlvbiA8c3Bhbj4uCiAgICAgICAgKFdlYkluc3BlY3Rvci5DYWxsRnJhbWVUcmVlRWxlbWVudC5wcm90b3R5cGUub25hdHRhY2gpOgogICAgICAgIFNldCB0aGUgdG9vbHRpcCBvbiB0aGUgZW50aXJlIHRyZWUgZWxlbWVudCBvbmNlIGl0IGlzIGNyZWF0ZWQuCgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VDb2RlTG9jYXRpb24uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlTG9jYXRpb24ucHJvdG90eXBlLnBvcHVsYXRlTGl2ZURpc3BsYXlMb2NhdGlvblRvb2x0aXApOgogICAgICAgIEFsbG93IGFuIG9wdGlvbmFsIHByZWZpeCBiZWZvcmUgdGhlIGxvY2F0aW9uIHN0cmluZy4KCjIwMTMtMDQtMjkgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBSZW1vdmUgYW4gYXNzZXJ0IGZyb20gU3R5bGVEZXRhaWxzUGFuZWwucHJvdG90eXBlLnNob3duLgoKICAgICAgICBUaGUgc2hvd24gZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4gSnVzdCBrZWVwIHRoZSBlYXJseSByZXR1cm4uCiAgICAgICAgQWxzbyBtYWtlIHN1cmUgdG8gY2FsbCBTdHlsZURldGFpbHNQYW5lbC5wcm90b3R5cGUuaGlkZGVuIGluIGFub3RoZXIgY2FzZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS52aXNpYmlsaXR5RGlkQ2hhbmdlKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3R5bGVEZXRhaWxzUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZURldGFpbHNQYW5lbC5wcm90b3R5cGUuc2hvd24pOgoKMjAxMy0wNC0yOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFNraXAgaW52YWxpZCBwcm9wZXJ0aWVzIHdoZW4gYXNzb2NpYXRpbmcgcmVsYXRlZCBwcm9wZXJ0aWVzLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM3NTI1ODY+IERPTU5vZGVTdHlsZXMuanM6OTgxOiBjb25zb2xlLmFzc2VydChwcm9wZXJ0eS5vdmVycmlkZGVuKTsgb24gaHRtbDVwbGVhc2UuY29tCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGVTdHlsZXMuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5fYXNzb2NpYXRlUmVsYXRlZFByb3BlcnRpZXMpOgoKMjAxMy0wNC0yOSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBEb24ndCBhbGxvdyBDb21tYW5kK0VudGVyIGluIHRoZSBDb25zb2xlIHdpdGggYW4gZW1wdHkgZXhwcmVzc2lvbi4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29uc29sZVByb21wdC5qczoKCjIwMTMtMDQtMjkgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNjE2NTY3PiBDYW4gbm8gbG9uZ2VyIGNsZWFyIHRoZSBjb25zb2xlIHdpdGggY2xlYXIoKQoKICAgICAgICBMb2dDb250ZW50VmlldyBzdGFydHMgbGlzdGVuaW5nIGZvciBhbiBldmVudCBpbiB0aGUgY29uc3RydWN0b3Igd2hpY2gKICAgICAgICB3YXMgZ2V0dGluZyByZW1vdmVkIGluIGNsb3NlIGFuZCBub3QgYmVpbmcgYWRkZWQgYmFjay4gVGhpcyBDb250ZW50VmlldwogICAgICAgIGlzIGFscmVhZHkgdHJlYXRlZCBsaWtlIGEgc2luZ2xldG9uIHdpdGggb3RoZXIgZXZlbnRzLCB0cmVhdCB0aGlzIHRoZQogICAgICAgIHNhbWUgYW5kIGp1c3QgYXZvaWQgcmVtb3ZpbmcgZXZlbnQgbGlzdGVuZXJzIGluIGNsb3NlLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dDb250ZW50Vmlldy5qczoKCjIwMTMtMDQtMjkgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNzY1NDc0PiBSRUdSRVNTSU9OOiBDb25zb2xlIHNob3VsZCBub3QgY2xlYXIgb24gcmVsb2FkCgogICAgICAgIFRoZSBiYWNrZW5kIHNlbmRzIHRoZSBmcm9udGVuZCBhIG1lc3NhZ2VzQ2xlYXJlZCBtZXNzYWdlcyBmb3IgbWFueSByZWFzb25zLgogICAgICAgIFdlIHNob3VsZCBub3QgY2xlYXIgdGhlIGFjdGl2ZSBsb2cgd2hlbiB0aGVyZSB3YXMgYSBuYXZpZ2F0aW9uLiBJbiB0aG9zZQogICAgICAgIGNhc2VzIHRoZSBMb2dNYW5hZ2VyIHdpbGwgc2VuZCBvdXQgYSBDbGVhcmVkIG9yIFNlc3Npb25TdGFydGVkIGV2ZW50LgogICAgICAgIEl0IHdvdWxkIGJlIG1lc3N5IGFuZCBicml0dGxlIHRvIGRldGVybWluZSBpZiB3ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhCiAgICAgICAgbWFpbiByZXNvdXJjZSBsb2FkLCBzbyBpdCBpcyBlYXNpZXIgdG8gZG8gYSBzZXRUaW1lb3V0IGFuZCBzZW5kIGFuIGV2ZW50CiAgICAgICAgaWYgd2UgZGlkIG5vdCBkbyBhIG5hdmlnYXRpb24uCgogICAgICAgIFRoaXMgd29ya3Mgd2VsbCB3aXRoIGFsbCBjb21tb24gY2FzZXMsIGJ1dCBicmVha3M6CgogICAgICAgICAgICBqcz4gY29uc29sZS5sb2coMSk7IGNvbnNvbGUuY2xlYXIoKTsgY29uc29sZS5sb2coMik7CgogICAgICAgIEZpbGVkIHRoZSBmb2xsb3ctdXAgYnVnIHRvIGhhbmRsZSBmaXhpbmcgdGhpcyBieSBwcm92aWRpbmcgdGhlIGZyb250ZW5kCiAgICAgICAgd2l0aCB0aGUgaW5mb3JtYXRpb24gaXQgbmVlZHMgaW4gbWVzc2FnZXNDbGVhcmVkLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Db25zb2xlT2JzZXJ2ZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlT2JzZXJ2ZXIucHJvdG90eXBlLm1lc3NhZ2VBZGRlZCk6CiAgICAgICAgRG9uJ3QgYXBwZW5kIGEgYmxhbmsgQ29uc29sZU1lc3NhZ2Ugcm93IGZvciBjb25zb2xlLmNsZWFyIG1lc3NhZ2VzLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ01hbmFnZXIucHJvdG90eXBlLm1lc3NhZ2VzQ2xlYXJlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyLnByb3RvdHlwZS5fbWFpblJlc291cmNlRGlkQ2hhbmdlKToKICAgICAgICBEZWZlciBBY3RpdmVMb2dDbGVhcmVkIGV2ZW50cyBzbyB0aGF0IHdlIGRvbid0IGlzc3VlIG9uZSB3aGlsZSB3ZQogICAgICAgIGFyZSByZWxvYWRpbmcgdGhlIHBhZ2UuCgoyMDEzLTA0LTI5ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzc2NDY2Mz4gVG9vbHRpcHMgb24gbGl2ZSBsb2NhdGlvbiBsaW5rcyBhcmUgbm8gbG9uZ2VyIHdvcmtpbmcKCiAgICAgICAgQ2hhbmdpbmcgdGhlIGNvbnRlbnQgaW4gbW91c2Vtb3ZlLCBldmVuIGlmIHRoZSBjb250ZW50IHdhcyB0aGUgc2FtZSwKICAgICAgICB3b3VsZCBjYXVzZSB0aGUgdG9vbHRpcCB0byBkaXNhcHBlYXIuIEF2b2lkIGNoYW5naW5nIHRoZSBjb250ZW50IHVubGVzcwogICAgICAgIHdlIGFic29sdXRlbHkgbmVlZCB0by4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlQ29kZUxvY2F0aW9uLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZUxvY2F0aW9uLnByb3RvdHlwZS51cGRhdGVEaXNwbGF5U3RyaW5nKToKICAgICAgICBBdm9pZCB1bm5lY2Vzc2FyeSBjb250ZW50IHVwZGF0ZXMuCgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZUxvY2F0aW9uLnByb3RvdHlwZS5fbG9jYXRpb25TdHJpbmcpOgogICAgICAgIEZpeCB0eXBvIGNhdXNpbmcgY29sdW1uIG51bWJlcnMgdG8gbm90IHNob3cgdXAgaW4gdG9vbHRpcHMuCgoyMDEzLTA0LTI5ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzc2Mzk4OD4gSnVtcCB0byAicnMuanMiIGVycm9yIGxvY2F0aW9uIGxpbmsgbm90IGxpdmUgb24gdGhldmVyZ2UuY29tCgogICAgICAgIFRoZSBVUkwgaW4gdGhlIENvbnNvbGVNZXNzYWdlIGlzIHRoZSBVUkwgb2YgdGhlIFNjcmlwdCwgd2hpY2ggY29udGFpbnMKICAgICAgICBhIGZyYWdtZW50LiBUaGUgVVJMIG9mIHRoZSBSZXNvdXJjZSBkb2VzIG5vdCBjb250YWluIHRoZSBmcmFnbWVudC4gV2hlbgogICAgICAgIHdlIGNyZWF0ZSBhIHNvdXJjZUNvZGVMb2NhdGlvbiBpbiBsaW5raWZ5TG9jYXRpb24gd2Ugd2FudCB0byBnZXQgdGhlCiAgICAgICAgcmVzb3VyY2UgdGhhdCBoYXMgYSBzaWRlYmFyIGl0ZW0sIGJlY2F1c2UgdGhhdCBpcyB0aGUgcmVzb3VyY2UgaW4gdGhlCiAgICAgICAgc2lkZWJhciB0aGF0IHdpbGwgc2hvdyBhIENvbnRlbnRWaWV3LiBTbyBpZiB3ZSBnZXQgYSBTY3JpcHQgdHJ5IHRvIGdldAogICAgICAgIHRoZSBSZXNvdXJjZSBmb3IgdGhhdCBTY3JpcHQgaWYgb25lIGV4aXN0cy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmxpbmtpZnlMb2NhdGlvbik6CgoyMDEzLTA0LTI5ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzQ0MjU2Nj4gQ29uc29sZSBjb250ZXh0IHNlbGVjdG9yIHNob3VsZCB0cnVuY2F0ZSBvciBnZW5lcmF0ZSBiZXR0ZXIgbmFtZXMgd2hlbiB0aGUgbmFtZXMgYXJlIGxvbmcKCiAgICAgICAgVHJ1bmNhdGUgdGhlIGNvbnRleHQgc2VsZWN0b3IgcXVpY2sgY29uc29sZSBuYXYgYmFyIGl0ZW0uIEFuZCBtb2RpZnkKICAgICAgICBob3cgaXRlbXMgYXJlIHNvcnRlZCBpbiB0aGUgY29udGV4dCBtZW51IHRvIHNob3cgdGhlIGZyYW1lIG5hbWUgaWYgb25lCiAgICAgICAgaXMgYXZhaWxhYmxlLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9IaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSGllcmFyY2hpY2FsUGF0aENvbXBvbmVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5IaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50LnByb3RvdHlwZS5nZXQgZGlzcGxheU5hbWUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuSGllcmFyY2hpY2FsUGF0aENvbXBvbmVudC5wcm90b3R5cGUuc2V0IGRpc3BsYXlOYW1lKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkhpZXJhcmNoaWNhbFBhdGhDb21wb25lbnQucHJvdG90eXBlLmdldCB0cnVuY2F0ZWREaXNwbGF5TmFtZUxlbmd0aCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5IaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50LnByb3RvdHlwZS5zZXQgdHJ1bmNhdGVkRGlzcGxheU5hbWVMZW5ndGgpOgogICAgICAgIFNlcGFyYXRlIHRoZSBkaXNwbGF5IG5hbWUgcHJvcGVydHkgZnJvbSB0aGUgdGl0bGUgZWxlbWVudCdzIGNvbnRlbnQsIHNvIHdlCiAgICAgICAgY2FuIHRydW5jYXRlIHRoZSBkaXNwbGF5IGJ1dCBzdG9yZSB0aGUgcmVhbCBuYW1lLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkhpZXJhcmNoaWNhbFBhdGhDb21wb25lbnQucHJvdG90eXBlLl91cGRhdGVFbGVtZW50VGl0bGVBbmRUZXh0KToKICAgICAgICBUcnVuY2F0ZSB0aGUgZGlzcGxheSBpbiB0aGUgbmF2aWdhdGlvbiBiYXIuCgogICAgICAgIChXZWJJbnNwZWN0b3IuSGllcmFyY2hpY2FsUGF0aENvbXBvbmVudC5wcm90b3R5cGUuX3VwZGF0ZVNlbGVjdEVsZW1lbnQuY3JlYXRlT3B0aW9uKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkhpZXJhcmNoaWNhbFBhdGhDb21wb25lbnQucHJvdG90eXBlLl91cGRhdGVTZWxlY3RFbGVtZW50KToKICAgICAgICBXb3JrIGFyb3VuZCBhbiBOU01lbnUgaXNzdWUgYW5kIHRydW5jYXRlIGluIHRoZSBvcHRpb24gdGV4dCBpbiB0aGUgY29udGV4dCBtZW51LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fY3JlYXRlRXhlY3V0aW9uQ29udGV4dFBhdGhDb21wb25lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fY3JlYXRlRXhlY3V0aW9uQ29udGV4dFBhdGhDb21wb25lbnRGcm9tRnJhbWUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fY29tcGFyZUV4ZWN1dGlvbkNvbnRleHRQYXRoQ29tcG9uZW50cyk6CiAgICAgICAgU2V0IHRoZSBGcmFtZSBvbiB0aGUgUGF0aENvbXBvbmVudHMgdG8gdXNlIGxhdGVyIGZvciBzb3J0aW5nLgoKMjAxMy0wNC0yOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFib3J0IGVhcmxpZXIgd2hlbiBsb2FkaW5nIGNvbXBsZXRpb25zIGZvciBhIG51bGwgb3IgdW5kZWZpbmVkIHZhbHVlLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM3NjQ2MTE+IEphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5qczoyOTM6IENPTlNPTEVBUEkgRVJST1I6IFVua25vd24gcmVzdWx0IHR5cGU6IHVuZGVmaW5lZAoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlLmNvbnNvbGVQcm9tcHRDb21wbGV0aW9uc05lZWRlZCk6CiAgICAgICAgUmV0dXJuIGVhcmx5IGlmIHRoZSBSZW1vdGVPYmplY3QgaXMgbnVsbCBvciB1bmRlZmluZWQuIEFsc28gcmVsZWFzZSB0aGUgY29tcGxldGlvbiBncm91cC4KCjIwMTMtMDQtMjkgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBDb3JyZWN0IHRoZSBsYXlvdXQgb2YgbmF2aWdhdGlvbiBpdGVtcyB3aGVuIGFuIGl0ZW0gaGFzIHNlbGVjdG9yIGFycm93cy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNzE3OTIyPiBMYXllciBib3JkZXIgdG9nZ2xlIGJ1dHRvbiBkaXNhcHBlYXJzIHNvbWV0aW1lcwoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9IaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSGllcmFyY2hpY2FsUGF0aENvbXBvbmVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5IaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50LnByb3RvdHlwZS5nZXQgbWluaW11bVdpZHRoKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5IaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50LnByb3RvdHlwZS5zZXQgZm9yY2VkV2lkdGgpOgogICAgICAgIChXZWJJbnNwZWN0b3IuSGllcmFyY2hpY2FsUGF0aENvbXBvbmVudC5wcm90b3R5cGUuZ2V0IHNlbGVjdG9yQXJyb3dzKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5IaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50LnByb3RvdHlwZS5zZXQgc2VsZWN0b3JBcnJvd3MpOiBBZGRlZC4KICAgICAgICBBY2NvdW50IGZvciB0aGUgd2lkdGggb2YgdGhlIHNlbGVjdG9yIGFycm93cyB3aGVuIHVzaW5nIG1pbmltdW0gd2lkdGguCgogICAgICAgICogVXNlckludGVyZmFjZS9IaWVyYXJjaGljYWxQYXRoTmF2aWdhdGlvbkl0ZW0uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5IaWVyYXJjaGljYWxQYXRoTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLnVwZGF0ZUxheW91dCk6CiAgICAgICAgQXNrIEhpZXJhcmNoaWNhbFBhdGhDb21wb25lbnQgZm9yIGl0cyBtaW5pbXVtIHdpZHRoLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvbkJhci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25CYXIucHJvdG90eXBlLnVwZGF0ZUxheW91dCk6CiAgICAgICAgU2tpcCBmbGV4aWJsZSBzcGFjZSBpdGVtcyBzaW5jZSB0aGV5IGNhbiB0YWtlIHVwIG5vIHNwYWNlIGF0IHRoZSBtaW5pbXVtIHdpZHRoLgoKMjAxMy0wNC0yNyAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzQ0MTcwOD4gTWFrZSB0aGUgV2ViIEluc3BlY3RvciB3b3JrIGlmIEhpRFBJIGNhbnZhcyBpcyBkaXNhYmxlZCBvbiBPUyBYCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICBGb3IgPHJkYXI6Ly9wcm9ibGVtLzEzNDM3MzI4PiwgSElHSF9EUElfQ0FOVkFTIHdhcyBkaXNhYmxlZCBvbiByZXRpbmEgZGV2aWNlcywgc28KICAgICAgICB0aGUgcGxhY2VzIGluIHRoZSBpbnNwZWN0b3IgdGhhdCB1c2UgYSBjYW52YXMgbXVzdCBkb3VibGUgdGhlIGRpbWVuc2lvbnMgb2YKICAgICAgICB0aGUgaW1hZ2UgYnVmZmVycyB0aGV5IHJlcXVlc3QuCgogICAgICAgICogVXNlckludGVyZmFjZS9EYXNoYm9hcmRWaWV3LmNzczoKICAgICAgICAoLnRvb2xiYXIgLmRhc2hib2FyZCk6IFNpbmNlIHRoZSBpbWFnZSBiZWluZyBwYXNlZCBpbiBhcyBiYWNrZ3JvdW5kIG1pZ2h0IGJlIDJ4LAogICAgICAgICAgICBtYWtlIHN1cmUgdGhhdCBpdCB1c2VzIHRoZSBlbGVtZW50IHNpemUgZm9yIHRoZSBiYWNrZ3JvdW5kLgogICAgICAgICogVXNlckludGVyZmFjZS9EYXNoYm9hcmRWaWV3LmpzOiBSZXF1ZXN0IGEgMnggY2FudmFzIGlmIG5lY2Vzc2FyeS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlVXRpbGl0aWVzLmpzOgogICAgICAgIChnZW5lcmF0ZUNvbG9yZWRJbWFnZSk6IE5vIG5lZWQgdG8gcGFzcyBpbiBzY2FsZSwgYXMgdGhpcyBtZXRob2QgaXMgcGFzc2VkIHRoZQogICAgICAgICAgICBjb3JyZWN0IHdpZHRoIGFuZCBoZWlnaHQgdGhlIGNhbGxlciBuZWVkcy4gVXNlIGdldC9zZXRJbWFnZURhdGEgbWV0aG9kcy4KICAgICAgICAoZ2VuZXJhdGVDb2xvcmVkSW1hZ2VzRm9yQ1NTKTogQ2FsY3VsYXRlIGEgc2NhbGVkV2lkdGgvSGVpZ2h0IHRvIGJlIHVzZWQgdGhyb3VnaG91dAogICAgICAgICAgICB0aGlzIG1ldGhvZC4gTWFrZSBzdXJlIHdlIGNyZWF0ZSBjb250ZXh0cyB3aXRoIHRoZSBjb3JyZWN0IGRpbWVuc2lvbnMsIGFuZCBzYXZlL3Jlc3RvcmUKICAgICAgICAgICAgdGhlbSBhdCBmdWxsIHNpemUuCiAgICAgICAgKC5fZHJhd0ltYWdlU2hhZG93KTogVXNlIHNjYWxlZFdpZHRoL0hlaWdodC4KICAgICAgICAoLl9pbnZlcnRNYXNrSW1hZ2UpOiBObyBuZWVkIHRvIHBhc3MgaW4gd2lkdGggYW5kIGhlaWdodC4uCiAgICAgICAgKC5fYXBwbHlJbWFnZU1hc2spOiBEaXR0by4KICAgICAgICAoZ2VuZXJhdGVFbWJvc3NlZEltYWdlcyk6IENhbGN1bGF0ZSBhIHNjYWxlZFdpZHRoL0hlaWdodCB0byBiZSB1c2VkIHRocm91Z2hvdXQKICAgICAgICAgICAgdGhpcyBtZXRob2QuIE1ha2Ugc3VyZSB3ZSBjcmVhdGUgY29udGV4dHMgd2l0aCB0aGUgY29ycmVjdCBkaW1lbnNpb25zLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUG9wb3Zlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlBvcG92ZXIucHJvdG90eXBlLnNldCBmcmFtZSk6IE1ha2Ugc3VyZSB0byBzZXQgdGhlIGJhY2tncm91bmQgc2l6ZSB3aGVuCiAgICAgICAgICAgIHRoZSBmcmFtZSBpcyB1cGRhdGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuUG9wb3Zlci5wcm90b3R5cGUuX2RyYXdCYWNrZ3JvdW5kKTogQ3JlYXRlIGEgY29ycmVjdGx5IHNjYWxlZCBjYW52YXMsCiAgICAgICAgICAgIGFuZCBzb21lIG1pbm9yIGNvZGUgY2xlYW51cC4KCjIwMTMtMDQtMjcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBGaXggdGhlIHNwZWVkIG9mIHR5cGluZyBpbiB0aGUgV2ViIEluc3BlY3Rvci4KCiAgICAgICAgVG9nZ2xlQ29udHJvbFRvb2xiYXJJdGVtIHJlZ2VuZXJhdGVzIGl0cyBpbWFnZXMgZXZlcnkgdGltZSAndG9nZ2xlZCcgaXMgc2V0LCBldmVuCiAgICAgICAgaWYgdGhlIGZsYWcgZG9lcyBub3QgY2hhbmdlISBBbmQgdGhlIGRvY2sgYnV0dG9uIHVwZGF0ZXMgJ3RvZ2dsZWQnIG9uIGtleWRvd24gYW5kCiAgICAgICAga2V5dXAgdG8gdXBkYXRlIHdoZW4gT3B0aW9uIGlzIHByZXNzZWQuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzc1NjQ5Nj4gUkVHUkVTU0lPTjogRG9jay91bmRvY2sgYnV0dG9ucyByZWdlbmVyYXRlcyBldmVyIGtleWRvd24gYW5kIGtleXVwIQoKICAgICAgICBSZXZpZXdlZCBieSBEZWFuIEphY2tzb24uCgogICAgICAgICogVXNlckludGVyZmFjZS9Ub2dnbGVCdXR0b25OYXZpZ2F0aW9uSXRlbS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRvZ2dsZUJ1dHRvbk5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5zZXQgdG9nZ2xlZCk6IFJldHVybiBlYXJseSBpZiBmbGFnIGRvZXMgbm90IGNoYW5nZS4KCjIwMTMtMDQtMjcgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMTQzNjkyPiBPYmplY3QgbGl0ZXJhbCBwcm9wZXJ0aWVzIHNob3VsZCBub3QgaGF2ZSBwb3BvdmVycwoKICAgICAgICBHaXZlbiB0ZXN0OgoKICAgICAgICAgIHZhciBmb28gPSAzMDAsIG8gPSB7IGZvbzogMSB9OwogICAgICAgICAgdmFyIHJlc3VsdCA9IG8uZm9vOwoKICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIGl0IHNvIGhvdmVyaW5nICJmb28iIGluIHRoZSBvYmplY3QgbGl0ZXJhbCBkb2VzIG5vdAogICAgICAgIHNob3cgYSBwb3BvdmVyLCBpdCB1c2VkIHRvIHNob3cgMzAwLiBXaGlsZSBob3ZlcmluZyB0aGUgdmFyaWFibGUgImZvbyIKICAgICAgICBvciBob3ZlcmluZyB0aGUgcHJvcGVydHkgYWNjZXNzICJvLmZvbyIgYm90aCBzaG93IGV4cGVjdGVkIHZhbHVlcy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9tb3VzZU1vdmVkT3ZlckVkaXRvcik6CiAgICAgICAgSWYgd2UgYXJlIGhvdmVyaW5nIGEgSmF2YVNjcmlwdCB0b2tlbiBpbnNpZGUgb2YgYSA8c2NyaXB0PiBpbiBIVE1MIHJlc291cmNlcwogICAgICAgIHRoZW4gdGhlIEphdmFTY3JpcHQgc3RhdGUgaXMgYWN0dWFsbHkgdG9rZW4uc3RhdGUubG9jYWxTdGF0ZS4gSWYgaXQgaXMgaW4KICAgICAgICBhIEphdmFTY3JpcHQgcmVzb3VyY2UgdGhlbiBpdCBpcyBqdXN0IHRva2VuLnN0YXRlLiBQYXNzIHRoZSBtb3N0IHNwZWNpZmljCiAgICAgICAgc3RhdGUgb24gb3VyIHBhcnRpYWwgInRva2VuIiBvYmplY3QuCgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX2NoZWNrSG92ZXJlZFRva2VuKToKICAgICAgICBCYWlsIGZvciBKYXZhU2NyaXB0IG9iamVjdCBsaXRlcmFsIHByb3BlcnRpZXMuCgoyMDEzLTA0LTI2ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzc1MzEwNj4gU291cmNlQ29kZVRleHRFZGl0b3IuanM6ODE1OiBKUyBFUlJPUjogVHlwZUVycm9yOiB1bmRlZmluZWQgaXMgbm90IGFuIG9iamVjdCAoZXZhbHVhdGluZyB0aGlzLmhvdmVyZWRUb2tlbi5ib3VuZHMpCgogICAgICAgIFdlIGhhdmUgYSBjb21wbGV0ZSB0b2tlbiBpbiB0b2tlbldhc0hvdmVyZWQsIGhvd2V2ZXIgYmV0d2VlbiB0aGVuIGFuZAogICAgICAgIHdoZW4gdGhlIGFzeW5jIERlYnVnZ2VyQWdlbnQuZXZhbHVhdGVPbkNhbGxGcmFtZSBjYWxsYmFjayBoYXBwZW5zIHRoZQogICAgICAgIGhvdmVyZWQgdG9rZW4gY2FuIGNoYW5nZS4gSWYgaXQgY2hhbmdlZCwgYmFpbCwgc28gd2UgZG9uJ3QgZW5kIHVwCiAgICAgICAgdHJ5aW5nIHRvIHB1dCB0aGUgcG9wb3ZlciBvbiB0aGUgd3JvbmcgaG92ZXJlZCB0b2tlbiBvciB3b3JzZQogICAgICAgIGhpdCB0aGlzIGV4Y2VwdGlvbiBhbmQgYnJlYWsgZXhlY3V0aW9uLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS50b2tlbldhc0hvdmVyZWQucG9wdWxhdGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLnRva2VuV2FzSG92ZXJlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3Nob3dQb3BvdmVyKToKICAgICAgICBBZGQgYXNzZXJ0cyBhbmQgcHJldmVudGF0aXZlIGJhaWxzIGluIG11bHRpcGxlIHBsYWNlcyB0byBjYXRjaAogICAgICAgIHNpbWlsYXIgaXNzdWVzIGluIHRoZSBmdXR1cmUgaWYgbmV3IHBhdGhzIGFyZSBhZGRlZC4KCjIwMTMtMDQtMjYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNzQ2MDk0PiBFc2MgaW5zaWRlIGEgcmVhZCBvbmx5IGVkaXRvciAoSmF2YVNjcmlwdCkgc2hvdWxkIG5vdCBicmluZyB1cCBjb21wbGV0aW9uIHN1Z2dlc3Rpb25zCgogICAgICAgIFBhc3Mgb24gIkVzYyIgaWYgdGhlIGVkaXRvciBpcyByZWFkIG9ubHkuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUuX2hhbmRsZUVzY2FwZUtleSk6CgoyMDEzLTA0LTI2ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzU3MzkwMj4gTGluZSBudW1iZXJzIGluIEpTIGNvbnNvbGUubG9nIC8gY29uc29sZS5lcnJvciBNZXNzYWdlcyBzaG91bGQgYmUgbGl2ZSwgdGhleSBqdW1wIHRvIHRoZSB3cm9uZyBsb2NhdGlvbgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzcwMjM1Nz4gTGluZSBudW1iZXJzIGluIEpTIENvbnNvbGUgRXJyb3IgTWVzc2FnZXMgc2hvdWxkIGJlIGxpdmUsIHRoZXkganVtcCB0byB0aGUgd3JvbmcgbG9jYXRpb24KCiAgICAgICAgTWFrZSB0aGUgQ29uc29sZU1lc3NhZ2UgYW5kIFByb2ZpbGVyIGxpbmtzIGxpdmUgd2hlbiBwb3NzaWJsZS4gQ3JlYXRlCiAgICAgICAgYSBsaXZlIGxpbmsgd2l0aCBjcmVhdGVTb3VyY2VDb2RlTG9jYXRpb25MaW5rIG9yIGxpbmtpZnlMb2NhdGlvbi4KICAgICAgICBDb25zb2xlTWVzc2FnZXMncyBoYXZlIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBub3cgYm90aCBhdCB0aGUKICAgICAgICBiYXNlIGFuZCBpbiBzdGFjayB0cmFjZXMuIFByb2ZpbGVyIG5vZGVzIGRvbid0IGhhdmUgY29sdW1uIGluZm8sIGJ1dCB3ZQogICAgICAgIGNhbiBzdGlsbCBtYWtlIHRoZW0gbGl2ZSwganVzdCBub3QgZW50aXJlbHkgYWNjdXJhdGUuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnNvbGVNZXNzYWdlSW1wbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUuX2Zvcm1hdE1lc3NhZ2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS5fbGlua2lmeUxvY2F0aW9uKToKICAgICAgICBVc2UgV2ViSW5zcGVjdG9yLmxpbmtpZnlMb2NhdGlvbiB3aXRoIHVybCwgbGluZSwgYW5kIGNvbHVtbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKC5zaG93U291cmNlQ29kZUxvY2F0aW9uKToKICAgICAgICAoV2ViSW5zcGVjdG9yLmNyZWF0ZVNvdXJjZUNvZGVMb2NhdGlvbkxpbmspOgogICAgICAgIChXZWJJbnNwZWN0b3IubGlua2lmeUxvY2F0aW9uKToKICAgICAgICBJZiB3ZSBoYXZlIHRoZSByZXNvdXJjZSB3aXRoIHVybCBwYXNzZWQgaW50byBsaW5raWZ5TG9jYXRpb24KICAgICAgICBpdCBjcmVhdGVzIGEgbGluayB3aXRoIGEgc291cmNlQ29kZUxvY2F0aW9uLiBPdGhlcndpc2UgaXQganVzdAogICAgICAgIGNyZWF0ZXMgYSBiYXNpYyBsaW5rIHdpdGggdGhlIGFwcHJvcHJpYXRlIHN0eWxlcy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1NlbGVjdG9yUHJvZmlsZVZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTZWxlY3RvckRhdGFHcmlkTm9kZS5wcm90b3R5cGUuY3JlYXRlQ2VsbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTZWxlY3RvckRhdGFHcmlkTm9kZS5wcm90b3R5cGUuX2xpbmtpZnlMb2NhdGlvbik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Byb2ZpbGVEYXRhR3JpZFRyZWUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlRGF0YUdyaWROb2RlLnByb3RvdHlwZS5fbGlua2lmeUxvY2F0aW9uKToKICAgICAgICBVc2UgV2ViSW5zcGVjdG9yLmxpbmtpZnlMb2NhdGlvbiB3aXRoIHVybCBhbmQgbGluZU51bWJlci4gQWRkCiAgICAgICAgYSBGSVhNRSBhYm91dCB0aGUgbWlzc2luZyBjb2x1bW4gbnVtYmVyLgoKMjAxMy0wNC0yNiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM1NzM5MDI+IExpbmUgbnVtYmVycyBpbiBKUyBjb25zb2xlLmxvZyAvIGNvbnNvbGUuZXJyb3IgTWVzc2FnZXMgc2hvdWxkIGJlIGxpdmUsIHRoZXkganVtcCB0byB0aGUgd3JvbmcgbG9jYXRpb24KICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM3MDIzNTc+IExpbmUgbnVtYmVycyBpbiBKUyBDb25zb2xlIEVycm9yIE1lc3NhZ2VzIHNob3VsZCBiZSBsaXZlLCB0aGV5IGp1bXAgdG8gdGhlIHdyb25nIGxvY2F0aW9uCgogICAgICAgIEdpdmUgQ29uc29sZU1lc3NhZ2UgYSBjb2x1bW4gbnVtYmVyLiBUaGUgYmFja2VuZCBub3cgc2VuZHMgdXMgdGhpcyBpbmZvLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Db25zb2xlQ29tbWFuZFJlc3VsdC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29uc29sZU1lc3NhZ2UuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5jcmVhdGUpOgogICAgICAgICogVXNlckludGVyZmFjZS9Db25zb2xlTWVzc2FnZUltcGwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZUltcGwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS5nZXQgbGV2ZWxTdHJpbmcpOgogICAgICAgICogVXNlckludGVyZmFjZS9Db25zb2xlT2JzZXJ2ZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlT2JzZXJ2ZXIucHJvdG90eXBlLm1lc3NhZ2VBZGRlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ01hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyLnByb3RvdHlwZS5tZXNzYWdlV2FzQWRkZWQpOgoKMjAxMy0wNC0yNiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM3NDUxMDQ+IEZpcnN0IHJldmVhbExpbmUgdG8gU291cmNlTWFwUmVzb3VyY2UgbGluZU51bWJlciBpcyBub3Qgd29ya2luZwoKICAgICAgICBTb3VyY2VNYXBSZXNvdXJjZSdzIG1heSBsYXppbHkgbG9hZCB0aGVpciBkYXRhLiBJbiBzdWNoIGNhc2VzIHRoZQogICAgICAgIENvbnRlbnRWaWV3IGZvciB0aGUgcmVzb3VyY2Ugd2lsbCBiZSBHZW5lcmljIGFuZCBpZ25vcmUgdGhlIHJldmVhbExpbmUuCiAgICAgICAgT25jZSBsb2FkZWQsIHRoZSBHZW5lcmljIENvbnRlbnRWaWV3IHdpbGwgYmUgcmVwbGFjZWQgYnkgYSBiZXR0ZXIgdmlldywKICAgICAgICBidXQgdGhlIGxpbmUgbnVtYmVyIHRvIHJldmVhbCBoYXMgYmVlbiBsb3N0LiBTYXZlIHRoYXQgaW5mb3JtYXRpb24gaW4KICAgICAgICB0aGUgY2x1c3RlciBjb250ZW50IHZpZXcsIGFzIGxvbmcgYXMgdGhlIHJlc291cmNlIGhhcyBub3QgZmluaXNoZWQsCiAgICAgICAgYW5kIHBhc3MgaXQgb24gdG8gdGhlIG5ldyBjb250ZW50IHZpZXcgd2hlbiB0aGUgcmVzb3VyY2UgZmluaXNoZXMuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZU1hcFJlc291cmNlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwUmVzb3VyY2UucHJvdG90eXBlLnJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQpOgogICAgICAgIE1hcmsgYXMgZmluaXNoZWQgYWZ0ZXIgdXBkYXRpbmcgdHlwZXMuCgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZUNsdXN0ZXJDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlQ2x1c3RlckNvbnRlbnRWaWV3LnByb3RvdHlwZS5zaG93UmVzcG9uc2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VDbHVzdGVyQ29udGVudFZpZXcucHJvdG90eXBlLl9yZXNvdXJjZVR5cGVEaWRDaGFuZ2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VDbHVzdGVyQ29udGVudFZpZXcucHJvdG90eXBlLl9yZXNvdXJjZUxvYWRpbmdEaWRGaW5pc2gpOgogICAgICAgIElmIGEgcmV2ZWFsTGluZSBjb21lcyBpbiBmb3IgYSByZXNvdXJjZSBub3QgeWV0IGZpbmlzaGVkIGxvYWRpbmcsIHJlcGxheQogICAgICAgIHRoZSByZXZlYWwgbGluZSB3aGVuIHRoZSByZXNvdXJjZSBkb2VzIGZpbmlzaC4gSWYgc3Vic2VxdWVudCByZXZlYWxzIGNvbWUKICAgICAgICBpbiwgdGhlIG1vc3QgcmVjZW50IG9uZSB3aW5zLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IuX3ByZXR0eVByaW50LnByZXR0eVByaW50QW5kVXBkYXRlRWRpdG9yKToKICAgICAgICBXaGVuIGEgZmlsZSBpcyBmb3JtYXR0ZWQgd2UgdXBkYXRlZCB0aGUgZGVsYXllZCBsaW5lIG51bWJlciB0byByZXZlYWwsIGJ1dAogICAgICAgIGRpZG4ndCB1cGRhdGUgdGhlIGRlbGF5ZWQgdGV4dCByYW5nZSB0byBzZWxlY3QuIERvIHRoYXQganVzdCBpbiBjYXNlLgoKMjAxMy0wNC0yNiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM3MDE1Nzk+IFN0eWxlcyBzaWRlYmFyIHNob3VsZCBzaG93IHNvdXJjZSBtYXAgbG9jYXRpb24gYnkgZGVmYXVsdCBpbnN0ZWFkIG9mIG9uIGhvdmVyCgogICAgICAgIFdoZW4gaG92ZXJpbmcgYSBsaW5rIHdpdGggQ29tbWFuZCB3ZSBhcmUgc2hvd2luZyB0aGUgb3JpZ2luYWwsCiAgICAgICAgdW5mb3JtYXR0ZWQgbG9jYXRpb24uIFNvIG1ha2Ugc3VyZSB0aGF0IHdoZW4gY2xpY2tlZCB3ZSBqdW1wCiAgICAgICAgdG8gdGhhdCBleGFjdCwgdW5mb3JtYXR0ZWQgbG9jYXRpb24uCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jcmVhdGVHb1RvQXJyb3dCdXR0b24pOgogICAgICAgIEhhbmRsZSBDb21tYW5kK0NsaWNrIHRvIGp1bXAgdG8gYW4gdW5mb3JtYXR0ZWQgbG9jYXRpb24uCgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5zaG93U291cmNlQ29kZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuc2hvd09yaWdpbmFsVW5mb3JtYXR0ZWRTb3VyY2VDb2RlTG9jYXRpb24pOgogICAgICAgIEFsbG93IHNob3dpbmcgYSBzb3VyY2UgY29kZSB0aGF0IGZvcmNlcyB1bmZvcm1hdHRpbmcuCgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3JldmVhbFBlbmRpbmdMaW5lSWZQb3NzaWJsZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5yZXZlYWxMaW5lKToKICAgICAgICBNYXkgbmVlZCB0byB1bmZvcm1hdCB0aGUgcmVzb3VyY2UgYmVmb3JlIHJldmVhbGluZyB0aGUgbGluZS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5zaG93U291cmNlQ29kZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlQ2x1c3RlckNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VDbHVzdGVyQ29udGVudFZpZXcucHJvdG90eXBlLnNob3dSZXNwb25zZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NjcmlwdENvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0Q29udGVudFZpZXcucHJvdG90eXBlLnJldmVhbExpbmUpOgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0Q29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Q29udGVudFZpZXcucHJvdG90eXBlLnJldmVhbExpbmUpOgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5yZXZlYWxMaW5lKToKICAgICAgICBQYXNzIHRoZSBmb3JjZVVuZm9ybWF0IG9wdGlvbiB0aHJvdWdoIHJldmVhbExpbmUgcGF0aHMuCgoyMDEzLTA0LTI2ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzcwMTU3OT4gU3R5bGVzIHNpZGViYXIgc2hvdWxkIHNob3cgc291cmNlIG1hcCBsb2NhdGlvbiBieSBkZWZhdWx0IGluc3RlYWQgb2Ygb24gaG92ZXIKCiAgICAgICAgVXBkYXRlIHRoZSBydWxlcyBmb3IgYSBsaXZlIGxvY2F0aW9uIGRpc3BsYXkuCgogICAgICAgICAgLSBTaG93IGRpc3BsYXkgbG9jYXRpb24gYnkgZGVmYXVsdCBpZiB0aGVyZSBpcyBvbmUuCiAgICAgICAgICAtIFNob3cgZGlzcGxheSBsb2NhdGlvbnMgaW4gaXRhbGljcywgb3JpZ2luYWwgbG9jYXRpb25zIGRpc3BsYXkgbm9uLWl0YWxpY3MuCiAgICAgICAgICAtIENvbW1hbmQrTW91c2VvdmVyIGEgZGlzcGxheSBsb2NhdGlvbiB3aWxsIHNob3cgdGhlIG9yaWdpbmFsIGxvY2F0aW9uLgogICAgICAgICAgLSBQcm92aWRlIGRpZmZlcmVudCBkaXNwbGF5IHN0eWxlcyBmb3IgY29sdW1uIG51bWJlcnMuIERlZmF1bHQgdG8gIk9ubHlJZkxhcmdlIgogICAgICAgICAgICBtZWFuaW5nIG9ubHkgc2hvdyBjb2x1bW4gbnVtYmVycyBpZiB0aGUgY29sdW1uIGlzID4gODAuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NhbGxGcmFtZVRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ2FsbEZyYW1lVHJlZUVsZW1lbnQpOgogICAgICAgIFNpbXBsaWZ5IGJ5IHVzaW5nIFNvdXJjZUNvZGVMb2NhdGlvbi5wcm90b3R5cGUudG9vbHRpcFN0cmluZy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGVMb2NhdGlvbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVMb2NhdGlvbi5wcm90b3R5cGUub3JpZ2luYWxMb2NhdGlvblN0cmluZyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlTG9jYXRpb24ucHJvdG90eXBlLmZvcm1hdHRlZExvY2F0aW9uU3RyaW5nKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVMb2NhdGlvbi5wcm90b3R5cGUuZGlzcGxheUxvY2F0aW9uU3RyaW5nKToKICAgICAgICBBZGQgdGhlIG5ldyBjb2x1bW4gc3R5bGUgcGFyYW1ldGVyLiBQYXNzIGl0IHRocm91Z2ggdG8gX2xvY2F0aW9uU3RyaW5nLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVMb2NhdGlvbi5wcm90b3R5cGUudG9vbHRpcFN0cmluZyk6CiAgICAgICAgQWx3YXlzIHNob3cgZnVsbCBVUkxzIGFuZCBjb2x1bW5zIGluIHRvb2x0aXBzLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVMb2NhdGlvbi5wcm90b3R5cGUuX2xvY2F0aW9uU3RyaW5nKToKICAgICAgICBSZXNwZWN0IHRoZSBjb2x1bW4gc3R5bGUgd2hlbiBpbmNsdWRpbmcgY29sdW1uIG51bWJlcnMuCgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZUxvY2F0aW9uLnByb3RvdHlwZS51cGRhdGVEaXNwbGF5U3RyaW5nKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVMb2NhdGlvbi5wcm90b3R5cGUubW91c2VPdmVyT3JNb3ZlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVMb2NhdGlvbi5wcm90b3R5cGUucG9wdWxhdGVMaXZlRGlzcGxheUxvY2F0aW9uU3RyaW5nKToKICAgICAgICBVcGRhdGUgdGhlIGRlZmF1bHQgdmFsdWUgdG8gZGlzcGxheUxvY2F0aW9uLiBBbmQgdGhlIENvbW1hbmQrTW91c2VvdmVyIHRvIG9yaWdpbmFsTG9jYXRpb24uCgoyMDEzLTA0LTI2ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzcwMTU3Nj4gU0FTUyBzb3VyY2UgbWFwIGxvY2F0aW9uIGlzIHdyb25nIG9uIGh0dHA6Ly9odG1sNXBsZWFzZS5jb20KCiAgICAgICAgQ1NTUnVsZS5zZWxlY3Rvckxpc3QucmFuZ2UgaGFzIGNvbHVtbiBpbmZvcm1hdGlvbiwgd2hpY2ggYWxsb3dzIHVzIHRvCiAgICAgICAgcHJvdmlkZSBhIG11Y2ggYmV0dGVyIGxvY2F0aW9uIHRvIGp1bXAgdG8uIFNvIHdoZW4gc2VsZWN0b3JMaXN0IGFuZAogICAgICAgIGl0cyBTb3VyY2VSYW5nZSBpcyBhdmFpbGFibGUsIHVzZSB0aGF0IGZvciBpdHMgc3RhcnQgbGluZSBhbmQgY29sdW1uLgogICAgICAgIEZhbGxiYWNrIHRvIHRoZSBDU1NSdWxlLnNvdXJjZUxpbmUgd2hpY2ggaXMgYWx3YXlzIGF2YWlsYWJsZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NTm9kZVN0eWxlcy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLl9wYXJzZVJ1bGVQYXlsb2FkKToKCjIwMTMtMDQtMjYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBVcGRhdGUgQ29kZU1pcnJvciBmcm9tIDMuMTErIHRvIDMuMTIuCgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nsb2p1cmUuanM6IFVwZGF0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29kZW1pcnJvci5qczogVXBkYXRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9qYXZhc2NyaXB0LmpzOiBVcGRhdGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3NlYXJjaGN1cnNvci5qczogVXBkYXRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9zcWwuanM6IFVwZGF0ZWQuCgoyMDEzLTA0LTI2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSBjb21wbGV0aW9ucyB3b3JrIGFmdGVyIG9wZW4gYnJhY2tldHMuCgogICAgICAgIFRoaXMgYWxzbyBpbXByb3ZlcyB0aGluZ3MgdG8gbGltaXQga2V5d29yZHMgdG8gY2VydGFpbiBjb250ZXh0cy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNzQ2NDkxPiBTaG91bGQgaGF2ZSBKYXZhU2NyaXB0IGNvbXBsZXRpb24gc3VnZ2VzdGlvbnMgYWZ0ZXIgYSBiYXNlIG9mIGFsbCBvcGVuIGJyYWNrZXQgY2hhcmFjdGVycywgZS5nLiAiaWYgKHRyfCIKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5fZ2VuZXJhdGVKYXZhU2NyaXB0Q29tcGxldGlvbnMpOgogICAgICAgICogVXNlckludGVyZmFjZS9KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlLmNvbnNvbGVQcm9tcHRDb21wbGV0aW9uc05lZWRlZCk6CgoyMDEzLTA0LTI2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgSW1wcm92ZSBtdWx0aS1saW5lIHN1cHBvcnQgaW4gdGhlIGNvbnNvbGUgcHJvbXB0LgoKICAgICAgICBQcmVzc2luZyByZXR1cm4gYXQgdGhlIGVuZCBvZiB0aGUgZXhwcmVzc2lvbiBub3cgZG9lcyBhIHBhcnNlIHRvIHNlZSBpZiB0aGUgZXhwcmVzc2lvbgogICAgICAgIGlzIHJlYWR5IHRvIGV2YWx1YXRlLiBXZSB3aWxsIGluc2VydCBhIG5ldyBsaW5lIGlmIHRoZSBlcnJvciBpcyByZWNvdmVyYWJsZSwgb3RoZXJ3aXNlCiAgICAgICAgd2Ugd2lsbCBldmFsdWF0ZSBpdC4gUHJlc3NpbmcgZW50ZXIgd2lsbCBpbnNlcnQgYSBuZXcgbGluZSB3aGVuIHRoZXJlIGlzIG5vIHRleHQsIHdoZW4KICAgICAgICB0aGUgY3Vyc29yIGlzIG5vdCBhdCB0aGUgbGFzdCBwb3NpdGlvbiBvciB0aGVyZSBpcyBhIHNlbGVjdGlvbi4gQ29tbWFuZC1FbnRlciB3aWxsIG5vdwogICAgICAgIGFsd2F5cyBldmFsdWF0ZSB0aGUgZXhwcmVzc2lvbi4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNzQ3MzY3PgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9Db25zb2xlUHJvbXB0LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZVByb21wdCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlUHJvbXB0LnByb3RvdHlwZS5faGFuZGxlRW50ZXJLZXkucG9zaXRpb25zRXF1YWwpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVQcm9tcHQucHJvdG90eXBlLl9oYW5kbGVFbnRlcktleS5jb21taXRUZXh0T3JJbnNlcnROZXdMaW5lKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlUHJvbXB0LnByb3RvdHlwZS5faGFuZGxlRW50ZXJLZXkpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZVByb21wdC5wcm90b3R5cGUuX2hhbmRsZUNvbW1hbmRFbnRlcktleSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZS4pOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZS5jb25zb2xlUHJvbXB0U2hvdWxkQ29tbWl0VGV4dCk6CgoyMDEzLTA0LTI1ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IHNvbWUgZWRnZSBjYXNlcyB3aXRoIHRoZSBkZWZhdWx0IEphdmFTY3JpcHQgY29tcGxldGlvbnMuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUuX2dlbmVyYXRlSmF2YVNjcmlwdENvbXBsZXRpb25zKToKICAgICAgICBDb3JyZWN0IHRoZSBjaGVjayBmb3Igc3dpdGNoIHN0YXRlbWVudHMgd2hpY2ggd2FzIG1pc3NpbmcgdGhlICJ0eXBlIiBwYXJ0cy4gVXNlICJpbmZvIgogICAgICAgIGluc3RlYWQgdG8gY2hlY2sgZm9yICJzd2l0Y2giLiBTdWJzdHJpbmcgdGhlIHN1ZmZpeCwgc2luY2UgdGhlcmUgYXJlIGNhc2VzIGl0IGNhbiBiZSBsb25nZXIuCiAgICAgICAgQWxzbyBwcmV2ZW50IGtleXdvcmQgY29tcGxldGlvbnMgaW4gdmFyIGRlY2xhcmF0aW9ucywgZXhjZXB0IGZvciAidGhpcyIuCgoyMDEzLTA0LTI1ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUHJvcGVybHkgaGFuZGxlIGR1cGxpY2F0ZSBxdWVyeSBwYXJhbWV0ZXJzIGFuZCBmb3JtIGVuY29kZWQgUE9TVCBkYXRhLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM3MzcxMDU+IER1cGxpY2F0ZSBxdWVyeSBwYXJhbWV0ZXJzIG9ubHkgc2hvdyB0aGUgbGFzdCBpdGVtIGluIHRoZSBzaWRlYmFyIGRhdGEgZ3JpZHMKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVmcmVzaFVSTCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9jcmVhdGVOYW1lVmFsdWVEYXRhR3JpZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9yZWZyZXNoUmVxdWVzdERhdGFTZWN0aW9uKToKICAgICAgICBQYXNzIHRydWUgdG8gcGFyc2VRdWVyeVN0cmluZyB0byBnZXQgYW4gYXJyYXkgb2YgbmFtZS92YWx1ZSBwYWlycy4gVGhlbiBidWlsZAogICAgICAgIHRoZSBEYXRhR3JpZCB1c2luZyB0aGF0IHJlc3VsdC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1V0aWxpdGllcy5qczoKICAgICAgICAocGFyc2VMb2NhdGlvblF1ZXJ5UGFyYW1ldGVycyk6CiAgICAgICAgKHBhcnNlUXVlcnlTdHJpbmcpOgogICAgICAgIEFkZGVkIGFycmF5UmVzdWx0IHBhcmFtZXRlciB0byBhbGxvdyBnZXR0aW5nIGFsbCB2YWx1ZXMsIG5vdCBqdXN0IHRoZSBsYXN0IG9uZS4KCjIwMTMtMDQtMjQgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBJbXByb3ZlIHRoZSBzb3J0IG9yZGVyIGZvciBhcnJheSBpbmRleCBjb21wbGV0aW9ucy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZS5jb25zb2xlUHJvbXB0Q29tcGxldGlvbnNOZWVkZWQucmVjZWl2ZWRQcm9wZXJ0eU5hbWVzLmNvbXBhcmUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZS5jb25zb2xlUHJvbXB0Q29tcGxldGlvbnNOZWVkZWQucmVjZWl2ZWRQcm9wZXJ0eU5hbWVzKToKICAgICAgICBUcnkgdG8gc29ydCBpbiBudW1lcmljYWwgb3JkZXIgZmlyc3QsIHRoZW4gYXMgc3RyaW5ncy4KCjIwMTMtMDQtMjQgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBbGxvdyBhdXRvY29tcGxldGlvbiBhZnRlciAiKHthOjEsYjoyfSkiIHRvIHN1Z2dlc3QgImEiIGFuZCAiYiIgcHJvcGVydGllcy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4NjYyODE+IENvbnNvbGUgc2hvdWxkIGFsbG93IGF1dG9jb21wbGV0aW9uIGFmdGVyIHN5bWJvbHMgbGlrZSApLCBdLCB9CgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUuX3NjYW5TdHJpbmdGb3JFeHByZXNzaW9uKToKICAgICAgICBJZ25vcmUgc3RvcCBjaGFyYWN0ZXJzIHdoZW4gd2UgYXJlIGluc2lkZSBicmFja2V0cy4KCjIwMTMtMDQtMjQgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBSZW1vdmUgVGV4dFByb21wdCBhbmQgSmF2YVNjcmlwdFRleHRQcm9tcHQuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0phdmFTY3JpcHRUZXh0UHJvbXB0LmNzczogUmVtb3ZlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSmF2YVNjcmlwdFRleHRQcm9tcHQuanM6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dFByb21wdC5jc3M6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRQcm9tcHQuanM6IFJlbW92ZWQuCgoyMDEzLTA0LTI0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgVXBkYXRlIERhdGFiYXNlQ29udGVudFZpZXcgdG8gdXNlIENvbnNvbGVQcm9tcHQuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFiYXNlQ29udGVudFZpZXcuY3NzOgogICAgICAgICguZGF0YWJhc2UtcXVlcnktcHJvbXB0KToKICAgICAgICAoLmRhdGFiYXNlLXVzZXItcXVlcnk6OmJlZm9yZSwgLmRhdGFiYXNlLXF1ZXJ5LXByb21wdDo6YmVmb3JlLCAuZGF0YWJhc2UtcXVlcnktcmVzdWx0OjpiZWZvcmUpOgogICAgICAgICguZGF0YWJhc2UtdXNlci1xdWVyeSk6CiAgICAgICAgKC5kYXRhYmFzZS1xdWVyeS1yZXN1bHQpOgogICAgICAgICogVXNlckludGVyZmFjZS9EYXRhYmFzZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YWJhc2VDb250ZW50Vmlldyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5zaG93bik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZUNvbnRlbnRWaWV3LnByb3RvdHlwZS51cGRhdGVMYXlvdXQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YWJhc2VDb250ZW50Vmlldy5wcm90b3R5cGUuX21lc3NhZ2VzQ2xpY2tlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5hY2N1bXVsYXRlTWF0Y2hlcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZUNvbnRlbnRWaWV3LnByb3RvdHlwZS50YWJsZU5hbWVzQ2FsbGJhY2spOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YWJhc2VDb250ZW50Vmlldy5wcm90b3R5cGUuY29uc29sZVByb21wdENvbXBsZXRpb25zTmVlZGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlQ29udGVudFZpZXcucHJvdG90eXBlLmNvbnNvbGVQcm9tcHRUZXh0Q29tbWl0ZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YWJhc2VDb250ZW50Vmlldy5wcm90b3R5cGUuX2FwcGVuZFF1ZXJ5UmVzdWx0KToKCjIwMTMtMDQtMjQgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBJbXBsZW1lbnQgbGl2ZSBjb21wbGV0aW9ucyBmb3IgdGhlIENvbnNvbGVQcm9tcHQuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMzM1OTkxNj4gVHlwaW5nIGluIHRoZSBjb25zb2xlIGlzIGltcHJvdmVkLCBidXQgc3RpbGwgbXVjaCBzbG93ZXIKICAgICAgICB0aGFuIGluIENocm9tZSAvIHRoZSBXZWJLaXQgaW5zcGVjdG9yCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnNvbGVQcm9tcHQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlUHJvbXB0LnByb3RvdHlwZS51cGRhdGVDb21wbGV0aW9ucyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlUHJvbXB0LnByb3RvdHlwZS5jb21wbGV0aW9uQ29udHJvbGxlckNvbXBsZXRpb25zTmVlZGVkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUuY29uc29sZVByb21wdENvbXBsZXRpb25zTmVlZGVkLmV2YWx1YXRlZC5nZXRDb21wbGV0aW9ucyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlLmNvbnNvbGVQcm9tcHRDb21wbGV0aW9uc05lZWRlZC5ldmFsdWF0ZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZS5jb25zb2xlUHJvbXB0Q29tcGxldGlvbnNOZWVkZWQucmVjZWl2ZWRQcm9wZXJ0eU5hbWVzRnJvbUV2YWx1YXRlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUuY29uc29sZVByb21wdENvbXBsZXRpb25zTmVlZGVkLnJlY2VpdmVkUHJvcGVydHlOYW1lcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlLmNvbnNvbGVQcm9tcHRDb21wbGV0aW9uc05lZWRlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlLl9jbGVhckxhc3RQcm9wZXJ0aWVzKToKICAgICAgICBNb3N0IG9mIHRoaXMgaXMgY29waWVkIGFuZCBhZGFwdGVkIGZyb20gSmF2YVNjcmlwdFRleHRQcm9tcHQuIFRoZSBuZXcgcGFydCBpZiB0aGUgY2FjaGluZyBvZiBwcm9wZXJ0eSBuYW1lcy4KCjIwMTMtMDQtMjQgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBQcmV2ZW50IHRoZSBFc2NhcGUga2V5IGZyb20gdG9nZ2xpbmcgYW5kIHRyaWdnZXJpbmcgYSBjb21wbGV0aW9uLgoKICAgICAgICBXaGVuIHRoZSBwcm9tcHQgaXMgZW1wdHkgd2UgYWxsb3cgY29uc29sZSB0b2dnbGluZy4gV2hlbiBub3QgZW1wdHkgaXQgdHJpZ2dlcnMgY29tcGxldGlvbi4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEzMzU5OTE2PiBUeXBpbmcgaW4gdGhlIGNvbnNvbGUgaXMgaW1wcm92ZWQsIGJ1dCBzdGlsbCBtdWNoIHNsb3dlcgogICAgICAgIHRoYW4gaW4gQ2hyb21lIC8gdGhlIFdlYktpdCBpbnNwZWN0b3IKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5faGFuZGxlRXNjYXBlS2V5KToKICAgICAgICBDYWxsIHRoZSBjb21wbGV0aW9uQ29udHJvbGxlclNob3VsZEFsbG93RXNjYXBlQ29tcGxldGlvbiBkZWxlZ2F0ZSBmdW5jdGlvbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnNvbGVQcm9tcHQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlUHJvbXB0LnByb3RvdHlwZS5jb21wbGV0aW9uQ29udHJvbGxlclNob3VsZEFsbG93RXNjYXBlQ29tcGxldGlvbik6CiAgICAgICAgQWRkZWQuIFJldHVybiB0cnVlIGlmIHRoZSBwcm9tcHQgaXMgbm90IGVtcHR5LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvS2V5Ym9hcmRTaG9ydGN1dC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuX2hhbmRsZUtleURvd24pOgogICAgICAgIERvbid0IHByb2Nlc3MgdGhlIHNob3J0Y3V0IGlmIGRlZmF1bHQgd2FzIHByZXZlbnRlZC4gV2Uga25vdyBzb21lb25lIGFscmVhZHkgaGFuZGxlZAogICAgICAgIHRoZSBrZXksIGJ1dCBkaWRuJ3QgY2FsbCBzdG9wUHJvcGFnYXRpb24uIENvZGVNaXJyb3IgZG9lcyB0aGlzLgoKMjAxMy0wNC0yNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEltcGxlbWVudCBkZWZhdWx0IGNvbXBsZXRpb25zIGZvciBKYXZhU2NyaXB0IGluIENvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci4KCiAgICAgICAgQWxzbyBob29rIHVwIGNvbXBsZXRpb25zIGluIENvbnNvbGVQcm9tcHQgdG8gZ2V0IHRoZSBkZWZhdWx0IGNvbXBsZXRpb25zLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTMzNTk5MTY+IFR5cGluZyBpbiB0aGUgY29uc29sZSBpcyBpbXByb3ZlZCwgYnV0IHN0aWxsIG11Y2ggc2xvd2VyCiAgICAgICAgdGhhbiBpbiBDaHJvbWUgLyB0aGUgV2ViS2l0IGluc3BlY3RvcgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLl9zY2FuU3RyaW5nRm9yRXhwcmVzc2lvbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLl9jb21wbGV0ZUF0Q3VycmVudFBvc2l0aW9uKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUuX2dlbmVyYXRlQ1NTQ29tcGxldGlvbnMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5fZ2VuZXJhdGVKYXZhU2NyaXB0Q29tcGxldGlvbnMubWF0Y2hLZXl3b3Jkcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLl9nZW5lcmF0ZUphdmFTY3JpcHRDb21wbGV0aW9ucy5tYXRjaFZhcmlhYmxlcy5maWx0ZXJWYXJpYWJsZXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5fZ2VuZXJhdGVKYXZhU2NyaXB0Q29tcGxldGlvbnMubWF0Y2hWYXJpYWJsZXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5fZ2VuZXJhdGVKYXZhU2NyaXB0Q29tcGxldGlvbnMpOgogICAgICAgICogVXNlckludGVyZmFjZS9Db25zb2xlUHJvbXB0LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZVByb21wdCk6CgoyMDEzLTA0LTI0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgSG9vayB1cCB0aGUgQ29uc29sZVByb21wdCBkZWxlZ2F0ZSB0byBKYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIuCgogICAgICAgIFRoaXMgbWFrZXMgdGhlIHByb21wdCB3b3JrIGFuZCBldmFsdWF0ZSByZXN1bHRzLiBObyBhdXRvIGNvbXBsZXRpb24geWV0LgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTMzNTk5MTY+IFR5cGluZyBpbiB0aGUgY29uc29sZSBpcyBpbXByb3ZlZCwgYnV0IHN0aWxsIG11Y2ggc2xvd2VyCiAgICAgICAgdGhhbiBpbiBDaHJvbWUgLyB0aGUgV2ViS2l0IGluc3BlY3RvcgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlLmNvbnNvbGVQcm9tcHRIaXN0b3J5RGlkQ2hhbmdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUuY29uc29sZVByb21wdFRleHRDb21taXRlZC5wcmludFJlc3VsdCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlLmNvbnNvbGVQcm9tcHRUZXh0Q29tbWl0ZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZS5fZXZhbHVhdGVJbkluc3BlY3RlZFdpbmRvdy5ldmFsQ2FsbGJhY2spOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZS5fZXZhbHVhdGVJbkluc3BlY3RlZFdpbmRvdyk6CiAgICAgICAgQ29waWVkIGZyb20gSmF2YVNjcmlwdFRleHRQcm9tcHQuZXZhbEluSW5zcGVjdGVkV2luZG93LgoKMjAxMy0wNC0yNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFN0YXJ0IHVzaW5nIENvbnNvbGVQcm9tcHQgaW4gdGhlIFF1aWNrQ29uc29sZS4KCiAgICAgICAgVGhpcyBzaW1wbGlmaWVzIHRoZSBET00gc3RydWN0dXJlIG9mIHRoZSBRdWlja0NvbnNvbGUgYW5kIG1ha2VzIHJlc2l6aW5nIGhhcHBlbgogICAgICAgIGF1dG9tYXRpY2FsbHkgdXNpbmcgZmxleCBsYXlvdXQgaW5zdGVhZCBvZiBKYXZhU2NyaXB0LgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTMzNTk5MTY+IFR5cGluZyBpbiB0aGUgY29uc29sZSBpcyBpbXByb3ZlZCwgYnV0IHN0aWxsIG11Y2ggc2xvd2VyCiAgICAgICAgdGhhbiBpbiBDaHJvbWUgLyB0aGUgV2ViS2l0IGluc3BlY3RvcgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZS5jbGVhcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlLnN0YXJ0TmV3U2Vzc2lvbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlLl9oYW5kbGVDbGVhclNob3J0Y3V0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUuX2hhbmRsZUZpbmRTaG9ydGN1dCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlLl9oYW5kbGVGaW5kTmV4dFNob3J0Y3V0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUuX2hhbmRsZUZpbmRQcmV2aW91c1Nob3J0Y3V0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUuX2FwcGVuZENvbnNvbGVNZXNzYWdlKToKICAgICAgICBSZW1vdmUga2V5ZG93biBhbmQgYmluZCB0aGUgdGhlIGtleWJvYXJkIHNob3J0Y3V0cyB0byB0aGUgbWVzc2FnZXMgZWxlbWVudAogICAgICAgIGFuZCBwcm9tcHQgZWxlbWVudCB1c2luZyBzcGVjaWZpYyBldmVudCBoYW5kbGVycy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ0NvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLnNob3duKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5zZWFyY2hCYXJXYW50c1RvTG9zZUZvY3VzKTogTWF0Y2ggX2VzY2FwZVdhc1ByZXNzZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX2FjdGl2ZUxvZ0NsZWFyZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9rZXlEb3duKToKICAgICAgICBSZW1vdmVkIGtleWJvYXJkIHNob3J0Y3V0IGhhbmRsaW5nIHRoYXQgd2FzIHVzaW5nIHByaXZhdGUgcHJvcGVydGllcwogICAgICAgIGZyb20gSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgogICAgICAgIEluY2x1ZGUgQ29uc29sZVByb21wdC5qcyBhbmQgQ29uc29sZVByb21wdC5jc3MuCgogICAgICAgICogVXNlckludGVyZmFjZS9RdWlja0NvbnNvbGUuY3NzOgogICAgICAgICgucXVpY2stY29uc29sZSk6CiAgICAgICAgKC5xdWljay1jb25zb2xlID4gLmNvbnNvbGUtcHJvbXB0KToKICAgICAgICAoLnF1aWNrLWNvbnNvbGUgPiAuY29uc29sZS1wcm9tcHQ6OmJlZm9yZSk6CiAgICAgICAgKC5xdWljay1jb25zb2xlID4gLmNvbnNvbGUtcHJvbXB0ID4gLkNvZGVNaXJyb3IpOgogICAgICAgICgucXVpY2stY29uc29sZSA+IC5uYXZpZ2F0aW9uLWJhcik6CiAgICAgICAgU2ltcGxpZmllZCBieSByZW1vdmluZyByZWR1bmRhbnQgZWxlbWVudHMuCgogICAgICAgICogVXNlckludGVyZmFjZS9RdWlja0NvbnNvbGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUpOiBSZW1vdmVkIHJlZHVuZGFudCBlbGVtZW50cy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUudXBkYXRlTGF5b3V0KToKICAgICAgICBTZXQgbWF4LWhlaWdodCBhbmQgc3RvcCBjYWxsaW5nIF91cGRhdGVTaXplLgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fdXBkYXRlU2l6ZSk6IFJlbW92ZWQuCgoyMDEzLTA0LTIzICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgU3RhcnQgdXNpbmcgQ29kZU1pcnJvciBmb3IgdGhlIENvbnNvbGUgcHJvbXB0LgoKICAgICAgICBUaGlzIGludHJvZHVjZXMgYSBuZXcgY2xhc3MsIENvbnNvbGVQcm9tcHQuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMzM1OTkxNj4gVHlwaW5nIGluIHRoZSBjb25zb2xlIGlzIGltcHJvdmVkLCBidXQgc3RpbGwgbXVjaCBzbG93ZXIKICAgICAgICB0aGFuIGluIENocm9tZSAvIHRoZSBXZWJLaXQgaW5zcGVjdG9yCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnNvbGVQcm9tcHQuY3NzOiBBZGRlZC4KICAgICAgICAoLmNvbnNvbGUtcHJvbXB0KToKICAgICAgICAoLmNvbnNvbGUtcHJvbXB0ID4gLkNvZGVNaXJyb3IpOgogICAgICAgICguY29uc29sZS1wcm9tcHQgPiAuQ29kZU1pcnJvci1zY3JvbGwpOgogICAgICAgICogVXNlckludGVyZmFjZS9Db25zb2xlUHJvbXB0LmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVQcm9tcHQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZVByb21wdC5wcm90b3R5cGUuZ2V0IGVsZW1lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZVByb21wdC5wcm90b3R5cGUuZ2V0IGRlbGVnYXRlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVQcm9tcHQucHJvdG90eXBlLnNldCBkZWxlZ2F0ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlUHJvbXB0LnByb3RvdHlwZS5nZXQgdGV4dCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlUHJvbXB0LnByb3RvdHlwZS5zZXQgdGV4dCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlUHJvbXB0LnByb3RvdHlwZS5nZXQgaGlzdG9yeSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlUHJvbXB0LnByb3RvdHlwZS5zZXQgaGlzdG9yeSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlUHJvbXB0LnByb3RvdHlwZS5nZXQgZm9jdXNlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlUHJvbXB0LnByb3RvdHlwZS5mb2N1cyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlUHJvbXB0LnByb3RvdHlwZS5zaG93bik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlUHJvbXB0LnByb3RvdHlwZS5faGFuZGxlUHJldmlvdXNLZXkpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZVByb21wdC5wcm90b3R5cGUuX2hhbmRsZU5leHRLZXkpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZVByb21wdC5wcm90b3R5cGUuX2hhbmRsZUVudGVyS2V5KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVQcm9tcHQucHJvdG90eXBlLl9yZXN0b3JlSGlzdG9yeUVudHJ5KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVQcm9tcHQucHJvdG90eXBlLl9oaXN0b3J5RW50cnlGb3JDdXJyZW50VGV4dCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlUHJvbXB0LnByb3RvdHlwZS5fcmVtZW1iZXJDdXJyZW50VGV4dEluSGlzdG9yeSk6CgoyMDEzLTA0LTIzICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzY4MTkzMT4gRGVidWdnZXIgUG9wb3ZlciBzaG91bGQgbm90IGRpc21pc3Mgd2hlbiBtb3VzZSBpcyBvdmVyIHRoZSBwb3BvdmVyCgogICAgICAgIFdlIHdvdWxkIGFsd2F5cyBkaXNtaXNzIHRoZSBwb3BvdmVyIHdoZW4gd2UnZCBob3ZlciBtb3JlIHRoYW4gMSBzZWNvbmQKICAgICAgICBvdXRzaWRlIG9mIHRoZSBtYXJrZWQgdG9rZW4gaW4gdGhlIHRleHQgZWRpdG9yLiBUaGlzIHdvdWxkIGFsc28gaGFwcGVuCiAgICAgICAgaWYgdGhlIG1vdXNlIGhhcHBlbmVkIHRvIGJlIG92ZXIgdGhlIHBvcG92ZXIgc2hvd24gZm9yIHRoZSBtYXJrZWQgdG9rZW4uCiAgICAgICAgV2Ugbm93IHRyYWNrIHdoZXRoZXIgdGhlIG1vdXNlIGlzIG92ZXIgdGhlIHByZXNlbnRlZCBwb3BvdmVyIGFuZCBvbmx5CiAgICAgICAgZGlzbWlzcyB0aGUgcG9wb3ZlciB3aGVuIG5vIGxvbmdlciBob3ZlcmluZyB0aGUgbWFya2VkIHRleHQgaW4gY2FzZSB0aGUKICAgICAgICBtb3VzZSBpcyBub3Qgb3ZlciBpdC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXZlbnRIYW5kbGVyLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkV2ZW50SGFuZGxlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FdmVudEhhbmRsZXIucHJvdG90eXBlLmhhbmRsZUV2ZW50KToKICAgICAgICBOZXcgdXRpbGl0eSB0byBoYW5kbGUgZXZlbnRzIGluIGEgd2F5IHRoYXQgbWFrZXMgaXQgY29udmVuaWVudCB0byBzdGFydAogICAgICAgIGFuZCBzdG9wIHRyYWNraW5nIGV2ZW50cyBpbiB0aGUgc2NvcGUgb2YgdGhhdCBvYmplY3Qgd2l0aG91dCB1c2luZyBjbG9zdXJlcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgogICAgICAgIEFkZCB0aGUgbmV3IEV2ZW50SGFuZGxlciBoZWxwZXIuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLmhpZGRlbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX2FjdGl2ZUNhbGxGcmFtZURpZENoYW5nZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX2RlYnVnZ2VyRGlkUmVzdW1lKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5ob3ZlcmVkVG9rZW5XYXNSZWxlYXNlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3Nob3dQb3BvdmVyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fc2hvd1BvcG92ZXJGb3JGdW5jdGlvbi5kaWRHZXREZXRhaWxzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fc2hvd1BvcG92ZXJGb3JGdW5jdGlvbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUud2lsbERpc21pc3NQb3BvdmVyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fZGlzbWlzc1BvcG92ZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl90cmFja1BvcG92ZXJFdmVudHMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9wb3BvdmVyTW91c2VvdmVyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fcG9wb3Zlck1vdXNlb3V0KToKCjIwMTMtMDQtMjIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBUZWFjaCBDb2RlTWlycm9yIGFib3V0IHRoZSBDU1MgcHJvcGVydGllcywga2V5d29yZHMgYW5kIGNvbG9ycyB3ZSBzdXBwb3J0IGluIFdlYktpdC4KCiAgICAgICAgVGhpcyBrZWVwcyBzeW50YXggaGlnaGxpZ2h0aW5nIGluIHN5bmMgd2l0aCBjb2RlIGNvbXBsZXRpb24uCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU0NvbXBsZXRpb25zLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMucmVxdWVzdENTU05hbWVDb21wbGV0aW9ucy5jb2xsZWN0UHJvcGVydHlOYW1lRm9yQ29kZU1pcnJvcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5yZXF1ZXN0Q1NTTmFtZUNvbXBsZXRpb25zLnVwZGF0ZUNvZGVNaXJyb3JDU1NNb2RlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU0NvbXBsZXRpb25zLnJlcXVlc3RDU1NOYW1lQ29tcGxldGlvbnMpOgoKMjAxMy0wNC0yMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEZpeCBzb21lIHNlbGVjdGlvbiBpc3N1ZXMgaW4gdGhlIENvbnNvbGUuCgogICAgICAgIEFsbG93IGNvbW1hbmQtY2xpY2sgb24gYSBzaW5nbGUgcm93IHNlbGVjdGlvbiB0byBkZXNlbGVjdCB0aGF0IHJvdyB0aGUgZmlyc3QgdGltZS4KICAgICAgICBCZWZvcmUgaXQgd2FzIHJlcXVpcmluZyB0d28gY2xpY2tzIC0tIGJlY2F1c2UgaXQgd291bGQgYmVjb21lIHNlbGVjdGVkIHR3aWNlIC0tCiAgICAgICAgYmVmb3JlIGl0IHdvdWxkIGRlc2VsZWN0LgoKICAgICAgICBBbHNvIG1ha2Ugc3VyZSB0byBjbGVhciBmb2N1c2FibGUgY2hpbGRyZW4gYWZ0ZXIgcG9wdWxhdGluZyBkZWxheWVkIHJlc3VsdHMsCiAgICAgICAgbGlrZSBhIHRoZSBET00gdHJlZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuZGlkQXBwZW5kQ29uc29sZU1lc3NhZ2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl91cGRhdGVNZXNzYWdlc1NlbGVjdGlvbik6CgoyMDEzLTA0LTIxICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWxsb3cgdGhlIGNvbnRleHQgbWVudSBhbmQgY2xpY2tpbmcgb24gYW55IGxpbmsgaW4gdGhlIGNvbnNvbGUuCgogICAgICAgIFRoZXJlIGFyZSBvdGhlciBsaW5rcyBpbiB0aGUgY29uc29sZSBiZXNpZGVzIHRob3NlIHdpdGggdGhlIGNvbnNvbGUtbWVzc2FnZS11cmwKICAgICAgICBzdHlsZSBjbGFzcyB0aGF0IHNob3VsZCB3b3JrIGFuZCBnZXQgdGhlIG5vcm1hbCBjb250ZXh0IG1lbnUuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzcwMjAzMT4gY2FuJ3QgY2xpY2sgb24gYSAiZmFpbGVkIHRvIGxvYWQiIHVybCBpbiBjb25zb2xlCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ0NvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9oYW5kbGVDb250ZXh0TWVudUV2ZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fdGFyZ2V0SW5NZXNzYWdlQ2FuQmVTZWxlY3RlZCk6CiAgICAgICAgQ2hlY2sgb25seSBmb3IgdGFnIG5hbWUsIG5vdCBjbGFzcyBuYW1lLgoKMjAxMy0wNC0xOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFsbG93IGJvdGggdGV4dCBhbmQgcm93IHNlbGVjdGlvbnMgaW4gdGhlIENvbnNvbGUuCgogICAgICAgIFRleHQgc2VsZWN0aW9uIHN3aXRjaGVzIHRvIHJvdyBzZWxlY3Rpb24gaWYgdGhlIHRleHQgc2VsZWN0aW9uIHNwYW5zIG11bHRpcGxlIHJvd3MuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzU5OTYxMD4gUkVHUkVTU0lPTjogQ2FuJ3Qgc2VsZWN0IHBhcnRpYWwgdGV4dCBvZiBjb25zb2xlIG91dHB1dAoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlT3V0bGluZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVPdXRsaW5lLnByb3RvdHlwZS5fb25tb3VzZWRvd24pOgogICAgICAgIENhbGwgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkgdG8gcHJldmVudCByb3cgc2VsZWN0aW9uIGluIHRoZSBjb25zb2xlLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nQ29udGVudFZpZXcuY3NzOgogICAgICAgICguY29uc29sZS1tZXNzYWdlLXRleHQgPiBzcGFuKTogQWRkZWQuIEFsbG93IHRleHQgc2VsZWN0aW9uLgogICAgICAgICguY29uc29sZS1tZXNzYWdlOjpiZWZvcmUsIC5jb25zb2xlLXVzZXItY29tbWFuZDo6YmVmb3JlLCAuamF2YXNjcmlwdC1wcm9tcHQ6OmJlZm9yZSwgLmNvbnNvbGUtZ3JvdXAtdGl0bGU6OmJlZm9yZSk6CiAgICAgICAgKC5jb25zb2xlLWdyb3VwLXRpdGxlOjpiZWZvcmUpOgogICAgICAgIFVzZSBweCBpbnN0ZWFkIG9mIGVtIHRvIGZpeCBhIHBvc2l0aW9uaW5nIGlzc3VlLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX21vdXNlZG93bik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX3RhcmdldEluTWVzc2FnZUNhbkJlU2VsZWN0ZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9tb3VzZW1vdmUpOgogICAgICAgIEFsbG93IHRleHQgc2VsZWN0aW9uIHRoYXQgc3dpdGNoZXMgdG8gcm93IHNlbGVjdGlvbiBpZiB0aGUgdGV4dCBzZWxlY3Rpb24gc3BhbnMgbXVsdGlwbGUgcm93cy4KICAgICAgICBUaGlzIGludm9sdmVzIGRlbGF5aW5nIG9wZXJhdGlvbnMgZnJvbSBtb3VzZWRvd24gdW50aWwgbGF0ZXIgaW4gbW91c2Vtb3ZlIG9yIG1vdXNldXAuCgogICAgICAgICogVXNlckludGVyZmFjZS9UcmVlT3V0bGluZS5qczoKICAgICAgICAoVHJlZUVsZW1lbnQudHJlZUVsZW1lbnRNb3VzZURvd24pOgogICAgICAgIENhbGwgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkgdG8gcHJldmVudCByb3cgc2VsZWN0aW9uIGluIHRoZSBjb25zb2xlLgoKMjAxMy0wNC0yMCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM3MDE1NjE+IEltcHJvdmUgU291cmNlTWFwIGZvbGRlciB0cmVlIGhpZXJhcmNoaWVzCgogICAgICAgIEltcGxlbWVudCBhIGZldyBpbXByb3ZlbWVudHMgdG8gZm9sZGVyIHRyZWUgaGllcmFyY2hpZXMuCgogICAgICAgICAgLSBpZiB0aGVyZSBpcyBhIHNvdXJjZVJvb3QgaW4gdGhlIHNvdXJjZU1hcCB1c2UgdGhhdCBhcyB0aGUgYmFzZSBmb3IKICAgICAgICAgICAgc3VicGF0aHMsIG90aGVyd2lzZSBmYWxsYmFjayB0byB0aGUgc291cmNlTWFwcGluZ1VSTCAobWF5IGNoYW5nZSkuCiAgICAgICAgICAtIGlmIGEgc291cmNlIGlzIGFuIGFic29sdXRlIFVSTCBvbiBhIGRpZmZlcmVudCBzY2hlbWUgLyBob3N0LCBwcmVmaXgKICAgICAgICAgICAgdGhlIHN1YnBhdGggd2l0aCBhIGZvbGRlciBvZiB0aGUgaG9zdCBuYW1lLgogICAgICAgICAgLSBmbGF0dGVuIGZvbGRlciBjaGFpbnMgaW4gdGhlIFVJLiBNYWtlcyBleHBhbmRpbmcgZm9sZGVycyBlYXNpZXIuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZU1hcC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VNYXAucHJvdG90eXBlLmdldCBzb3VyY2VNYXBwaW5nQmFzZVBhdGhVUkxDb21wb25lbnRzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5wcm90b3R5cGUuX3BhcnNlTWFwKToKICAgICAgICBTYXZlIHRoZSBzb3VyY2VSb290LiBBbmQgcmV0dXJuIHVybENvbXBvbmVudHMgZm9yIHRoZSBiYXNlUGF0aCwgaW5zdGVhZCBvZgogICAgICAgIGp1c3QgdGhlIHBhdGguCgogICAgICAgICogVXNlckludGVyZmFjZS9VdGlsaXRpZXMuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZU1hcFJlc291cmNlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwUmVzb3VyY2UucHJvdG90eXBlLmdldCBzb3VyY2VNYXBEaXNwbGF5U3VicGF0aCk6CiAgICAgICAgRGV0ZXJtaW5lIHRoZSBzdWJwYXRoIHRvIGRpc3BsYXkgaW4gdGhlIFVJIGZvciB0aGlzIHNvdXJjZSBtYXAgcmVzb3VyY2UuCgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VDb2RlVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVHJlZUVsZW1lbnQucHJvdG90eXBlLm9ucG9wdWxhdGUuY29tYmluZUZvbGRlckNoYWluKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUcmVlRWxlbWVudC5wcm90b3R5cGUub25wb3B1bGF0ZS5maW5kQW5kQ29tYmluZUZvbGRlckNoYWlucyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVHJlZUVsZW1lbnQucHJvdG90eXBlLm9ucG9wdWxhdGUpOgogICAgICAgIEZsYXR0ZW4gZm9sZGVyIGNoYWlucy4KCjIwMTMtMDQtMjAgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNzAxNTYxPiBJbXByb3ZlIFNvdXJjZU1hcCBmb2xkZXIgdHJlZSBoaWVyYXJjaGllcwoKICAgICAgICBDb3JyZWN0bHkgcmVzb2x2ZSBkb3RzIHdoZW4gZGV0ZXJtaW5pbmcgYWJzb2x1dGUgVVJMcy4gUHJldmlvdXNseSBJIGhhZAogICAgICAgIGxlZnQgaW4gZXh0cmEgIi4uL3MiLCBob3dldmVyIHRoZXkgc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVkLiBBbmQKICAgICAgICBhYnNvbHV0ZVVSTCBzaG91bGQgaGFuZGxlIHJlc29sdmluZyBhbnkgZG90cyBpbiB0aGUgcGFydGlhbFVSTC4KCiAgICAgICAgVGhpcyBmaXhlcyBBU1NFUlRzIGluIERlYnVnIFdlYktpdCBidWlsZHMgd2hlcmUgd2Ugd2VyZSBjYWxsaW5nCiAgICAgICAgbG9hZFJlc291cmNlU3luY2hyb25vdXNseSB3aXRoIGEgVVJMIHRoYXQgd2FzIGV4cGVjdGVkIHRvIGJlCiAgICAgICAgYWJzb2x1dGUgYW5kIHdhc24ndC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlTWFwLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9VdGlsaXRpZXMuanM6CgoyMDEzLTA0LTIwICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzcwMTU2MT4gSW1wcm92ZSBTb3VyY2VNYXAgZm9sZGVyIHRyZWUgaGllcmFyY2hpZXMKCiAgICAgICAgUmVtb3ZlIHRoZSBvbGQgY29tYmluZSBmb2xkZXIgY2hhaW4gY29kZS4gSXQgd2lsbCBiZSBlYXNpZXIgdG8gZm9sbG93CiAgICAgICAgdGhlIG5ldyBjb2RlIHdpdGggdGhlIG9sZCBjb2RlIGdvbmUuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGVUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUcmVlRWxlbWVudC5wcm90b3R5cGUub25wb3B1bGF0ZS5jb21iaW5lRm9sZGVyQ2hhaW4pOgoKMjAxMy0wNC0xOSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM2NTQ3OTM+IFNvdXJjZSBNYXBzOiBTdXBwb3J0IGZvciBTdHlsZXNoZWV0cyAobGVzcyAvIHNhc3MgLyBzY3NzKSB3aXRoIFNvdXJjZU1hcHMKCiAgICAgICAgVGhlIEluc3BlY3RvciBwcm90b2NvbCBub3cgdGVsbHMgdXMgd2hlbiBhIENTUyByZXNwb25zZSBjb250YWlucyBhCiAgICAgICAgc291cmNlTWFwcGluZ1VSTCBmb3IgYSBSZXNvdXJjZS4gSWYgd2UgYXJlIGdpdmVuIGEgc291cmNlIG1hcCBVUkwsCiAgICAgICAgZG93bmxvYWQgdGhlIHNvdXJjZSBtYXAgYW5kIGFzc29jaWF0ZSBpdCB3aXRoIHRoZSBSZXNvdXJjZS4KCiAgICAgICAgR2l2ZSBTdHlsZXNoZWV0IFNvdXJjZU1hcFJlc291cmNlcyAobGlrZSBzYXNzIHN0eWxlc2hlZXRzKSBhIENTUwogICAgICAgIGNsaXBwaW5nIGljb24gaW5zdGVhZCBvZiB1c2luZyB0aGUgZ2VuZXJpYyBjbGlwcGluZyBpY29uLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9GcmFtZVJlc291cmNlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5yZXNvdXJjZVJlcXVlc3RXYXNTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLnJlc291cmNlUmVxdWVzdERpZEZpbmlzaExvYWRpbmcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLl9jcmVhdGVSZXNvdXJjZSk6CiAgICAgICAgSWYgdGhlcmUgaXMgYSBzb3VyY2VNYXBVUkwsIGRvd25sb2FkIGl0IGFuZCBhc3NvY2lhdGUgaXQgd2l0aCB0aGUgUmVzb3VyY2UuCgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvQ2xpcHBpbmdDU1MucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0NsaXBwaW5nQ1NTQDJ4LnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlSWNvbnMuY3NzOgogICAgICAgICguc291cmNlLW1hcC1yZXNvdXJjZS5yZXNvdXJjZS1pY29uLnJlc291cmNlLXR5cGUtc3R5bGVzaGVldCAuaWNvbik6CiAgICAgICAgQ1NTIENsaXBwaW5nIGljb24gZm9yIHN0eWxlc2hlZXQgc291cmNlIG1hcCByZXNvdXJjZXMgKGxpa2UgbGVzcyAvIHNhc3MgLyBzY3NzKS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmV0d29ya09ic2VydmVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya09ic2VydmVyLnByb3RvdHlwZS5sb2FkaW5nRmluaXNoZWQpOgogICAgICAgIEhhbmRsZSBhbmQgcGFzcyBvbiB0aGUgbmV3ICJleHRyYVJlc291cmNlSW5mbyIgcGFyYW1ldGVyLgoKMjAxMy0wNC0xOSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM2NTQ3OTM+IFNvdXJjZSBNYXBzOiBTdXBwb3J0IGZvciBTdHlsZXNoZWV0cyAobGVzcyAvIHNhc3MgLyBzY3NzKSB3aXRoIFNvdXJjZU1hcHMKCiAgICAgICAgRm9sbG93IE9wZW5Tb3VyY2UgYW5kIG1lcmdlIFBvc2l0aW9uU291cmNlTWFwIGludG8gU291cmNlTWFwLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VNYXAuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VNYXApOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwLnByb3RvdHlwZS5maW5kRW50cnkpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwLnByb3RvdHlwZS5maW5kRW50cnlSZXZlcnNlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VNYXAucHJvdG90eXBlLl9wYXJzZU1hcCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZU1hcE1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBNYW5hZ2VyLnByb3RvdHlwZS5fbG9hZEFuZFBhcnNlU291cmNlTWFwKToKCjIwMTMtMDQtMTggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIHN1cmUgdG8gY2FsbCBzaG93biBvbiB0aGUgY3VycmVudCBTdHlsZSBzdWItcGFuZWwgd2hlbiB0aGUgc2lkZWJhciB2aXNpYmlsaXR5IGNoYW5nZXMuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzYwNDE0OD4gQ29udGVudCBqdW1wcyBpbiBkZXRhaWxzIHNpZGViYXIgd2hlbiBzd2l0Y2hpbmcgdG8gc3R5bGVzIHBhbmUKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS52aXNpYmlsaXR5RGlkQ2hhbmdlKToKICAgICAgICBDYWxsIHNob3duIG9uIHRoZSBzZWxlY3RlZCBwYW5lbC4KCjIwMTMtMDQtMTggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBVc2UgQ1NTQWdlbnQuc2V0U3R5bGVUZXh0IGZvciBTdHlsZSBBdHRyaWJ1dGUgZWRpdGluZyB0b28uCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzYzMDQ4Mz4gU3R5bGUgQXR0cmlidXRlIGVkaXRpbmcgaW4gdGhlIFN0eWxlIGRldGFpbHMgc2lkZWJhciBkb2VzIG5vdCB3b3JrIG9uIHNoYWRvdyBjb250ZW50ICgxMTQ0NDIpCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGVTdHlsZXMuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5jaGFuZ2VTdHlsZVRleHQpOgoKMjAxMy0wNC0xOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFN3aXRjaCBmcm9tIFgtV2ViS2l0LUNTUCB0byBDb250ZW50LVNlY3VyaXR5LVBvbGljeSBmb3IgdGhlIENTUCBoZWFkZXIuCgogICAgICAgIEFsc28gc3RvcCBhbGxvd2luZyAndW5zYWZlLWV2YWwnIHNpbmNlIHRoZSBvbmUgcGxhY2Ugd2UgdXNlZCBldmFsKCkgaXMgZGVhZCBjb2RlLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9JbnNwZWN0b3JCYWNrZW5kLmpzOgogICAgICAgIChJbnNwZWN0b3JCYWNrZW5kQ2xhc3MucHJvdG90eXBlLmxvYWRGcm9tSlNPTklmTmVlZGVkKTogUmVtb3ZlZC4gTm90IHVzZWQgYnkgU2FmYXJpLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CgoyMDEzLTA0LTE4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSBzdXJlIHRvIGFsd2F5cyBpbmNsdWRlIHRoZSBOZXcgUnVsZSBidXR0b24gaW4gdGhlIFN0eWxlcyBzaWRlYmFyLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM2ODM5NDE+IENhbid0IGFkZCBhIG5ldyBydWxlIHVubGVzcyB0aGVyZSBpcyBhIG1hdGNoZWQgcnVsZSBhbHJlYWR5CgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1J1bGVzU3R5bGVEZXRhaWxzUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SdWxlc1N0eWxlRGV0YWlsc1BhbmVsLnByb3RvdHlwZS5yZWZyZXNoLmFkZE5ld1J1bGVCdXR0b24pOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJ1bGVzU3R5bGVEZXRhaWxzUGFuZWwucHJvdG90eXBlLnJlZnJlc2gpOiBDYWxsIGFkZE5ld1J1bGVCdXR0b24gaWYKICAgICAgICBhZGRlZE5ld1J1bGVCdXR0b24gaXNuJ3QgdHJ1ZSBhZnRlciB0aGUgZW5kIG9mIHRoZSBsb29wLgoKMjAxMy0wNC0xOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFJlbW92ZSB3b3JrYXJvdW5kIGZvciA8cmRhcjovL3Byb2JsZW0vMTMzMzcyMTE+IG5vdyB0aGF0IGl0IGlzIGZpeGVkLgoKICAgICAgICBSZW1vdmluZyB0aGlzIGVuZHMgdXAgZml4aW5nOgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzYxMjk0Mj4gUkVHUkVTU0lPTjogU3R5bGUgc2lkZWJhciBkb2VzIG5vdCB1cGRhdGUgaW1tZWRpYXRlbHkgd2l0aCBub2RlIGNoYW5nZQoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01Ob2RlU3R5bGVzLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUucmVmcmVzaCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5yZWZyZXNoLmZldGNoZWRNYXRjaGVkU3R5bGVzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLnJlZnJlc2guZmV0Y2hlZElubGluZVN0eWxlcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5yZWZyZXNoLmZldGNoZWRDb21wdXRlZFN0eWxlKToKICAgICAgICBSZW1vdmVkIHRoZSByZXBlYXQgcmVmcmVzaCBwb2xsaW5nIGxvZ2ljLgoKMjAxMy0wNC0xOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFByb3Blcmx5IGhhbmRsZSAhaW1wb3J0YW50IHByb3BlcnRpZXMgZnJvbSBpbmhlcml0ZWQgcnVsZXMuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzY4Mzc0Mj4gSW1wb3J0YW50IHByb3BlcnRpZXMgZnJvbSBpbmhlcml0ZWQgcnVsZXMKICAgICAgICBtaXN0YWtlbmx5IHN0cmlrZW91dCB0aGUgZWZmZWN0aXZlIHByb3BlcnR5CgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGVTdHlsZXMuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5fbWFya092ZXJyaWRkZW5Qcm9wZXJ0aWVzKToKICAgICAgICBNYXJrIHByb3BlcnRpZXMgYXMgb3ZlcnJpZGRlbiBmcm9tIGluaGVyaXRlZCBlbGVtZW50cyBpZiB0aGVyZQogICAgICAgIGlzIGFscmVhZHkgYW4gZWZmZWN0aXZlIHByb3BlcnR5IGZyb20gYW5vdGhlciBlbGVtZW50LgoKMjAxMy0wNC0xOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkb3B0IENTU0FnZW50LnNldFN0eWxlVGV4dCBhZGRlZCBpbiBodHRwczovL3dlYmtpdC5vcmcvYi8xMDkzNDAuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzMzNzIxMT4gRWRpdGluZyBzdHlsZXMgb24gZGFyaW5nZmlyZWJhbGwubmV0IGludGVycnVwdHMgYXV0b2NvbXBsZXRpb24gYW5kIGZsYXNoZXMKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NTm9kZVN0eWxlcy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLnN0eWxlQ2hhbmdlZCk6IFVzZSBDU1NBZ2VudC5zZXRTdHlsZVRleHQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qczogVXBkYXRlZC4KCjIwMTMtMDQtMTggIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNjgxNTc3PiBVbnJlc29sdmVkIGJyZWFrcG9pbnQgaW4gU291cmNlTWFwUmVzb3VyY2Ugd2hlbiByZWxvYWRpbmcgcGFnZQoKICAgICAgICBUaGUgQ29udGVudEJyb3dzZXIgbm8gbG9uZ2VyIGNvbnRhaW5zIFJlc291cmNlQ29udGVudFZpZXdzIGRpcmVjdGx5LCBpdAogICAgICAgIGhhcyBSZXNvdXJjZUNsdXN0ZXJDb250ZW50Vmlld3MuIFVwZGF0ZSB0aGUgY2xvc2VBbGwgcHJvdG90eXBlIGNhbGwgb24KICAgICAgICBwYWdlIG5hdmlnYXRpb25zIHRvIG1ha2Ugc3VyZSByZXNvdXJjZSB2aWV3cyBnZXQgY2xvc2VkIHByb3Blcmx5LgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVNpZGViYXJQYW5lbC5qczoKCjIwMTMtMDQtMTggIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNjgxNDg3PiBNaXNzaW5nIGhlaXJhcmNoaWNhbCBwYXRoIGNvbXBvbmVudHMgc2VsZWN0aW5nIGJyZWFrcG9pbnRzIGluIHNvdXJjZSBtYXAgcmVzb3VyY2VzIGluIERlYnVnZ2VyIHNpZGViYXIKCiAgICAgICAgRm9yY2Ugb25wb3B1bGF0ZSB0byBjcmVhdGUgdGhlIFNvdXJjZU1hcFRyZWVFbGVtZW50cyBpbW1lZGlhdGVseSwKICAgICAgICBpbnN0ZWFkIG9mIGxhemlseSB3YWl0aW5nIGZvciB0aGUgdXNlciB0byBleHBhbmQgdGhlIFJlc291cmNlIGluCiAgICAgICAgdGhlIFJlc291cmNlcyBzaWRlYmFyLiBUaGVuLCB3aGVuIHdlIGxvb2sgdXAgdGhlIFRyZWVFbGVtZW50IHRvCiAgICAgICAgZ2V0IHRoZSBoaWVyYXJjaGljYWwgcGF0aCBjb21wb25lbnRzIGl0IHdpbGwgYmUgZm91bmQuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGVUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUcmVlRWxlbWVudC5wcm90b3R5cGUuX3VwZGF0ZVNvdXJjZUNvZGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fc291cmNlTWFwQWRkZWQpOgoKMjAxMy0wNC0xNyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBFUlJPUjogVHlwZUVycm9yOiAndW5kZWZpbmVkJyBpcyBub3QgYW4gb2JqZWN0IChldmFsdWF0aW5nICdjdXJyZW50Q29udGVudFZpZXcuaGFuZGxlQ29weUV2ZW50LmJpbmQnKQoKICAgICAgICBSaWdodCBjbGlja2luZyBpbiBhbiBlZGl0b3Igd2FzIHByb2R1Y2luZyBhbiBlcnJvci4gQ2hlY2sgaWYgYm90aAogICAgICAgIHRoZSBjb250ZW50IHZpZXcgYW5kIHRoZSBoYW5kbGVDb3B5RXZlbnQgaGFuZGxlciBleGlzdC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ2x1c3RlckNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ2x1c3RlckNvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgaGFuZGxlQ29weUV2ZW50KToKCjIwMTMtMDQtMTUgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBGaXggYW4gZXhjZXB0aW9uIHRoYXQgaGFwcGVucyB3aGVuIGNsaWNraW5nIHNvdXJjZSBsaW5rcyBtdWx0aXBsZSB0aW1lcy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRWaWV3Q29udGFpbmVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdDb250YWluZXIucHJvdG90eXBlLnNob3dDb250ZW50Vmlldyk6CiAgICAgICAgUmV0dXJuIGN1cnJlbnRWaWV3IGlmIGl0IGlzIGFscmVhZHkgc2hvd2luZy4gVGhpcyBtYXRjaGVzIHRoZSBjYXNlIHdoZXJlIHdlIHJldHVybiB0aGUgdmlldwogICAgICAgIGlmIGl0IHdhc24ndCBhbHJlYWR5IHNob3dpbmcuIENoYW5nZSBvdGhlciByZXR1cm5zIHRvIHJldHVybiBudWxsIGluc3RlYWQgb2YgdW5kZWZpbmVkLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VDbHVzdGVyQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZUNsdXN0ZXJDb250ZW50Vmlldy5wcm90b3R5cGUuX3Nob3dDb250ZW50Vmlld0ZvcklkZW50aWZpZXIpOgogICAgICAgIEFkZCBhbiBhc3NlcnQgdGhhdCB3ZSBoYXZlIGEgY29udGVudCB2aWV3LiBUaGlzIHdhc24ndCBuZWVkZWQgYnV0IEkgdXNlZCB0byB0byBwaW5wb2ludCB0aGUgYnVnLgoKMjAxMy0wNC0xNSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM2NDQ0MjY+IFN1cHBvcnQgJWMgLSBzdHlsZWQgY29uc29sZSBtZXNzYWdlcyAtIGh0dHA6Ly9hZGFtc2Nod2FydHouY28vbG9nLwoKICAgICAgICBNZXJnZSBPcGVuU291cmNlIHIxMzA5NDEsIHIxMzE0NDgsIHIxMzQxNjYsIHIxMzQyMDIuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnNvbGVNZXNzYWdlSW1wbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUuc3R5bGVGb3JtYXR0ZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS5pc1doaXRlbGlzdGVkUHJvcGVydHkpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS5hcHBlbmQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS5fZm9ybWF0V2l0aFN1YnN0aXR1dGlvblN0cmluZyk6CgoyMDEzLTA0LTE1ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzY1ODc0ND4gSW1wcm92ZSAlZiwgJWQsICVpIGZvcm1hdHRlcnMgZm9yIG51bWJlcnMgYW5kIG5vbi1udW1lcmljIGlucHV0CgogICAgICAgIERldmVsb3BlciB0b29scyBkaWZmZXIgc3VidGx5IGluIHRoaXMgYXJlYS4gSSBsaWtlIEZpcmVmb3gncyBiZWhhdmlvcgogICAgICAgIHRoZSBtb3N0LCBjYWxsaW5nIHBhcnNlRmxvYXQgb3IgcGFyc2VJbnQgb24gdGhlIGFyZ3VtZW50LiBXZSBub3cgbWF0Y2gKICAgICAgICB0aGF0IGJlaGF2aW9yLgoKICAgICAgICBDaHJvbWUgcHJpbnRzIE5hTiBmb3IgYW55dGhpbmcgYnV0IHByaW1pdGl2ZSBudW1iZXJzLiBXaGljaCBjYXVzZXMgaXQKICAgICAgICB0byBwcmludCBOYU4gZm9yIEluZmluaXR5IGFuZCAiMS41Ii4gRmlyZWJ1ZyBqdXN0IHByaW50cyBvdXQgZXZlcnl0aGluZwogICAgICAgIGxpa2UgIiVzIiwgbGlrZSB3ZSB1c2VkIHRvIGJlZm9yZSB0aGlzIHBhdGNoLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Db25zb2xlTWVzc2FnZUltcGwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZUltcGwucHJvdG90eXBlLnN0cmluZ0Zvcm1hdHRlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZUltcGwucHJvdG90eXBlLmZsb2F0Rm9ybWF0dGVyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUuaW50ZWdlckZvcm1hdHRlcik6CgoyMDEzLTA0LTE1ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRG9uJ3QgY2FsbCBjbGVhckhpc3Rvcnkgb3IgbWFya0NsZWFuIGluIFRleHRFZGl0b3IgYWZ0ZXIgdGhlIGZpcnN0IHRpbWUuCgogICAgICAgIFRoaXMgYWxsb3dzIHVuZG8vcmVkbyBpbiB0aGUgY29udGVudCBicm93c2VyIGFmdGVyIGVkaXRpbmcgaW4gc3R5bGUgc2lkZWJhci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IpOiBTZXQgX2luaXRpYWxTdHJpbmdOb3RTZXQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zZXQgc3RyaW5nLnVwZGF0ZSk6CiAgICAgICAgQ2FsbCBjbGVhckhpc3RvcnkgYW5kIG1hcmtDbGVhbiBvbmx5IGlmIF9pbml0aWFsU3RyaW5nTm90U2V0IGlzIHNldC4KICAgICAgICBBbmQgZGVsZXRlIF9pbml0aWFsU3RyaW5nTm90U2V0IGFmdGVyd2FyZHMuCgoyMDEzLTA0LTE0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRGVmYXVsdCBkb2NrU2lkZSB0byAidW5kb2NrZWQiIGlmIGl0IGlzbid0IHNwZWNpZmllZCBpbiB0aGUgcXVlcnkgcGFyYW1ldGVycy4KCiAgICAgICAgVGhpcyBoaWRlcyB0aGUgZG9jayBidXR0b25zIGFnYWluIGluIHRoZSBpT1MgSW5zcGVjdG9yLgoKICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOgoKMjAxMy0wNC0xNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIERvbid0IGFsbG93IENvbW1hbmQtWiB0byBjbGVhciB0aGUgZWRpdG9yLgoKICAgICAgICBSZXZpZXdlZCBieSBBbnRvaW5lIFF1aW50LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnNldCBzdHJpbmcudXBkYXRlKToKICAgICAgICBDYWxsIGNsZWFySGlzdG9yeSBhbmQgbWFya0NsZWFuLgoKMjAxMy0wNC0xMyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEZpeCBhbiBleGNlcHRpb24gd2hlbiBpbnNwZWN0aW5nIGEgcmVxdWVzdCB0aGF0IGhhcyBhICJDb250ZW50LXR5cGUiCiAgICAgICAgaGVhZGVyIGluc3RlYWQgb2YgIkNvbnRlbnQtVHlwZSIuCgogICAgICAgIEFsbCBIVFRQIGhlYWRlcnMgYXJlIGNhc2UtaW5zZW5zaXRpdmUsIHNvIHdlIG5lZWQgdG8gaGFuZGxlIHRoYXQuCgogICAgICAgIFJldmlld2VkIGJ5IFJpY2t5IE1vbmRlbGxvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2UuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUuZ2V0IHJlcXVlc3REYXRhQ29udGVudFR5cGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLmdldCBlbmNvZGVkU2l6ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUuZ2V0IGNvbXByZXNzZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLnVwZGF0ZUZvclJlc3BvbnNlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5pbmNyZWFzZVNpemUpOgogICAgICAgIFVzZSB2YWx1ZUZvckNhc2VJbnNlbnNpdGl2ZUtleSB0byBmZXRjaCBoZWFkZXJzLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVmcmVzaFJlcXVlc3REYXRhU2VjdGlvbik6CiAgICAgICAgU2V0IHJlcXVlc3REYXRhQ29udGVudFR5cGUgdG8gIiIgaWYgaXQgaXMgbnVsbCBzbyB0aGUgc3BsaXQoKSB0aGF0IGNvbWVzIGxhdGVyIHdvcmtzLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVXRpbGl0aWVzLmpzOgogICAgICAgIChPYmplY3QucHJvdG90eXBlLnZhbHVlRm9yQ2FzZUluc2Vuc2l0aXZlS2V5KTogQWRkZWQuCgoyMDEzLTA0LTEzICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUmVuYW1lICJQb3N0IERhdGEiIHRvICJSZXF1ZXN0IERhdGEiIGFuZCBzaG93IHRoZSBkYXRhIGlmIGl0IGV4aXN0cywKICAgICAgICBub3QganVzdCBmb3IgdGhlICJQT1NUIiBtZXRob2QuCgogICAgICAgIFJldmlld2VkIGJ5IEFudG9pbmUgUXVpbnQuCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiBVcGRhdGVkLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWVSZXNvdXJjZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUuX2FkZE5ld1Jlc291cmNlVG9GcmFtZSk6CgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5nZXQgcmVxdWVzdERhdGEpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLmdldCByZXF1ZXN0RGF0YUNvbnRlbnRUeXBlKToKCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlQ2x1c3RlckNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VDbHVzdGVyQ29udGVudFZpZXcucHJvdG90eXBlLmdldCByZXF1ZXN0Q29udGVudFZpZXcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VDbHVzdGVyQ29udGVudFZpZXcucHJvdG90eXBlLl9jYW5TaG93UmVxdWVzdENvbnRlbnRWaWV3KToKCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlRGV0YWlsc1NpZGViYXJQYW5lbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLnJlZnJlc2gpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fZ29Ub1JlcXVlc3REYXRhQ2xpY2tlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9yZWZyZXNoUmVxdWVzdERhdGFTZWN0aW9uKToKICAgICAgICBSZW1vdmUgYSB3b3JrYXJvdW5kIGZvciBmaWxlIGRhdGEgdGhhdCBpcyBubyBsb25nZXIgbmVlZGVkLgoKMjAxMy0wNC0xMiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFByZXZlbnQgYSBkb3VibGUgbGF5b3V0IGluIHRoZSBjb250ZW50IGJyb3dzZXIgbmF2aWdhdGlvbiBiYXIgd2hlbiBzd2l0Y2hpbmcgdmlld3MuCgogICAgICAgIEJ5IGRlZmF1bHQgaW5zZXJ0ZWQgbmF2aWdhdGlvbiBpdGVtcyBzY2hlZHVsZSBhIGxheW91dCBzb29uLCB3aGljaCBwcmV2ZW50cyBtdWx0aXBsZSBjb25zZWN1dGl2ZSBsYXlvdXRzCiAgICAgICAgd2hlbiBpbnNlcnRpbmcgbWFueSBuYXZpZ2F0aW9uIGl0ZW1zLiBGb3JjaW5nIGEgbGF5b3V0IGFmdGVyIGluc2VydGluZyBuYXZpZ2F0aW9uIGl0ZW1zIGNhdXNlcyB0aGUKICAgICAgICBpdGVtcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlaXIgZmluYWwgcG9zaXRpb25zIGFuZCBzaXplcyByaWdodCBhd2F5LgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZW50QnJvd3Nlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyLnByb3RvdHlwZS5fY29udGVudFZpZXdTZWxlY3Rpb25QYXRoQ29tcG9uZW50RGlkQ2hhbmdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyLnByb3RvdHlwZS5fY3VycmVudENvbnRlbnRWaWV3RGlkQ2hhbmdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyLnByb3RvdHlwZS5fY29udGVudFZpZXdOYXZpZ2F0aW9uSXRlbXNEaWRDaGFuZ2UpOgogICAgICAgIENhbGwgdXBkYXRlTGF5b3V0IGFmdGVyIGNoYW5naW5nIHRoZSBuYXZpZ2F0aW9uIGJhci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0hpZXJhcmNoaWNhbFBhdGhOYXZpZ2F0aW9uSXRlbS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkhpZXJhcmNoaWNhbFBhdGhOYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuc2V0IGNvbXBvbmVudHMpOgogICAgICAgIFVzZSB1cGRhdGVMYXlvdXRTb29uIHRvIGNvYWxlc2NlIG11bHRpcGxlIGNoYW5nZXMuCgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uQmFyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvbkJhci5wcm90b3R5cGUudXBkYXRlTGF5b3V0KTogQ2xlYXIgdGhlIHRpbWVvdXQuCgoyMDEzLTA0LTEyICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IHRoZSBsYXlvdXQgb2YgdGhlIHNlbGVjdG9yIGFycm93cyB3aGVuIGNvbXBvbmVudHMgc3RhcnQgdG8gY29sbGFwc2UuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0hpZXJhcmNoaWNhbFBhdGhDb21wb25lbnQuY3NzOgogICAgICAgICguaGllcmFyY2hpY2FsLXBhdGgtY29tcG9uZW50LnNob3ctc2VsZWN0b3ItYXJyb3dzKTogQWRkZWQuCiAgICAgICAgKC5oaWVyYXJjaGljYWwtcGF0aDpub3QoLmFsd2F5cy1zaG93LWxhc3QtcGF0aC1jb21wb25lbnQtc2VwYXJhdG9yKSA+IC5oaWVyYXJjaGljYWwtcGF0aC1jb21wb25lbnQuc2hvdy1zZWxlY3Rvci1hcnJvd3M6bGFzdC1jaGlsZCk6IEFkZGVkLgogICAgICAgIFNwZWNpZnkgY29ycmVjdCBtaW4td2lkdGhzIHRoYXQgaW5jbHVkZSBzcGFjZSBmb3IgdGhlIHNlbGVjdG9yIGFycm93cy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0hpZXJhcmNoaWNhbFBhdGhDb21wb25lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5IaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50KTogQWRkIHRoZSBzaG93LXNlbGVjdG9yLWFycm93cyBjbGFzcyBuYW1lIHRvIHRoZSBlbGVtZW50LgoKMjAxMy0wNC0xMiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCB0aGUgYWJpbGl0eSB0byBzZWUgUE9TVCBkYXRhIHRoYXQgaXNuJ3QgaW4gdGhlIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBmb3JtYXQuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjY2NzQ4NT4gUkVHUkVTU0lPTiAoU2FmYXJpIDYpOiBNaXNzaW5nIFBPU1QgcmVxdWVzdCB2aWV3IGZvciBub24tdXJsZW5jb2RlZCBkYXRhCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6IFVwZGF0ZWQuCgogICAgICAgICogVXNlckludGVyZmFjZS9DbHVzdGVyQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DbHVzdGVyQ29udGVudFZpZXcucHJvdG90eXBlLmdldCBoYW5kbGVDb3B5RXZlbnQpOiBBZGRlZC4KICAgICAgICBIYW5kbGVzIHBhc3NpbmcgdGhyb3VnaCB0aGUgY3VycmVudCBjb250ZW50IHZpZXcncyBoYW5kbGVDb3B5RXZlbnQgZnVuY3Rpb24uCgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3LmlzVmlld2FibGUpOgogICAgICAgIEFkZGVkIFRleHRDb250ZW50Vmlldy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RldGFpbHNTZWN0aW9uLmNzczoKICAgICAgICAoLmRldGFpbHMtc2VjdGlvbiA+IC5jb250ZW50ID4gLmdyb3VwID4gLnJvdy5zaW1wbGUgPiAudmFsdWUgLmdvLXRvLWFycm93KTogQWRkZWQuCgogICAgICAgICogVXNlckludGVyZmFjZS9GcmFtZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVDb250ZW50Vmlldy5jcmVhdGVQYXRoQ29tcG9uZW50KTogUGFzcyB0cnVlIHRvIGdldCBkb3VibGUgYXJyb3dzLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVDb250ZW50Vmlldy5wcm90b3R5cGUuc2hvd1Jlc291cmNlKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5zaG93U291cmNlQ29kZSk6IFJldHVybiB0aGUgdmlldy4gVXNlIHNob3dSZXNvdXJjZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lQ29udGVudFZpZXcucHJvdG90eXBlLnNob3dET01UcmVlKTogUmV0dXJuIHRoZSB2aWV3LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1JlcXVlc3QucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1Jlc3BvbnNlLnBkZjogQWRkZWQuCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEluY2x1ZGVkIG5ldyBmaWxlcy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1BhdGhDb21wb25lbnRJY29ucy5jc3M6CiAgICAgICAgKC5yZXF1ZXN0LWljb24gLmljb24pOiBBZGRlZC4KICAgICAgICAoLnJlc3BvbnNlLWljb24gLmljb24pOiBBZGRlZC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlQ2x1c3RlckNvbnRlbnRWaWV3LmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlQ2x1c3RlckNvbnRlbnRWaWV3LmNyZWF0ZVBhdGhDb21wb25lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VDbHVzdGVyQ29udGVudFZpZXcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VDbHVzdGVyQ29udGVudFZpZXcucHJvdG90eXBlLmdldCByZXNvdXJjZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZUNsdXN0ZXJDb250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IHJlc3BvbnNlQ29udGVudFZpZXcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VDbHVzdGVyQ29udGVudFZpZXcucHJvdG90eXBlLmdldCByZXF1ZXN0Q29udGVudFZpZXcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VDbHVzdGVyQ29udGVudFZpZXcucHJvdG90eXBlLmdldCBzZWxlY3Rpb25QYXRoQ29tcG9uZW50cyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZUNsdXN0ZXJDb250ZW50Vmlldy5wcm90b3R5cGUuc2hvd24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VDbHVzdGVyQ29udGVudFZpZXcucHJvdG90eXBlLmNsb3NlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZUNsdXN0ZXJDb250ZW50Vmlldy5wcm90b3R5cGUuc2hvd1JlcXVlc3QpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VDbHVzdGVyQ29udGVudFZpZXcucHJvdG90eXBlLnNob3dSZXNwb25zZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZUNsdXN0ZXJDb250ZW50Vmlldy5wcm90b3R5cGUuX2NhblNob3dSZXF1ZXN0Q29udGVudFZpZXcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VDbHVzdGVyQ29udGVudFZpZXcucHJvdG90eXBlLl9wYXRoQ29tcG9uZW50Rm9yQ29udGVudFZpZXcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VDbHVzdGVyQ29udGVudFZpZXcucHJvdG90eXBlLl9pZGVudGlmaWVyRm9yQ29udGVudFZpZXcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VDbHVzdGVyQ29udGVudFZpZXcucHJvdG90eXBlLl9zaG93Q29udGVudFZpZXdGb3JJZGVudGlmaWVyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlQ2x1c3RlckNvbnRlbnRWaWV3LnByb3RvdHlwZS5fcGF0aENvbXBvbmVudFNlbGVjdGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlQ2x1c3RlckNvbnRlbnRWaWV3LnByb3RvdHlwZS5fcmVzb3VyY2VUeXBlRGlkQ2hhbmdlKToKCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZUNvbnRlbnRWaWV3KToKICAgICAgICBSZW1vdmVkIGNvZGUgdGhhdCBoYW5kbGVkIHJlc291cmNlIHR5cGUgY2hhbmdlcyBhbmQgY29uY3JldGUgc3ViY2xhc3Nlcy4KICAgICAgICBUaGF0IGlzIG5vdyBoYW5kbGVkIGJ5IFJlc291cmNlQ2x1c3RlckNvbnRlbnRWaWV3LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fZ29Ub1Bvc3REYXRhQ2xpY2tlZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVmcmVzaFBvc3REYXRhU2VjdGlvbik6CiAgICAgICAgUmVuYW1lZCBTaXplIHRvIERhdGEgaW4gdGhlIFBvc3QgRGF0YSBzZWN0aW9uLiBBZGRlZCBhIGdvLXRvIGFycm93LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuY29va2llRm9yQ29udGVudFZpZXcpOiBIYW5kbGUgUmVzb3VyY2VDbHVzdGVyQ29udGVudFZpZXcuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuc2hvd1NvdXJjZUNvZGUpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5zaG93UmVzb3VyY2VSZXF1ZXN0KTogQWRkZWQuCgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0Q29udGVudFZpZXcuY3NzOiBBZGRlZC4KICAgICAgICAoLmNvbnRlbnQtdmlldy50ZXh0ID4gLnRleHQtZWRpdG9yKToKCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRDb250ZW50Vmlldy5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Q29udGVudFZpZXcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dENvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgdGV4dEVkaXRvcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Q29udGVudFZpZXcucHJvdG90eXBlLmdldCBuYXZpZ2F0aW9uSXRlbXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dENvbnRlbnRWaWV3LnByb3RvdHlwZS5yZXZlYWxMaW5lKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRDb250ZW50Vmlldy5wcm90b3R5cGUuc2hvd24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dENvbnRlbnRWaWV3LnByb3RvdHlwZS5oaWRkZW4pOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dENvbnRlbnRWaWV3LnByb3RvdHlwZS5jbG9zZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dENvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgc3VwcG9ydHNTZWFyY2gpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dENvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgbnVtYmVyT2ZTZWFyY2hSZXN1bHRzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRDb250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IGhhc1BlcmZvcm1lZFNlYXJjaCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Q29udGVudFZpZXcucHJvdG90eXBlLnNldCBhdXRvbWF0aWNhbGx5UmV2ZWFsRmlyc3RTZWFyY2hSZXN1bHQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dENvbnRlbnRWaWV3LnByb3RvdHlwZS5wZXJmb3JtU2VhcmNoKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRDb250ZW50Vmlldy5wcm90b3R5cGUuc2VhcmNoQ2xlYXJlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Q29udGVudFZpZXcucHJvdG90eXBlLnJldmVhbFByZXZpb3VzU2VhcmNoUmVzdWx0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRDb250ZW50Vmlldy5wcm90b3R5cGUucmV2ZWFsTmV4dFNlYXJjaFJlc3VsdCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Q29udGVudFZpZXcucHJvdG90eXBlLnVwZGF0ZUxheW91dCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Q29udGVudFZpZXcucHJvdG90eXBlLl90b2dnbGVQcmV0dHlQcmludCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Q29udGVudFZpZXcucHJvdG90eXBlLl90ZXh0RWRpdG9yRm9ybWF0dGluZ0RpZENoYW5nZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Q29udGVudFZpZXcucHJvdG90eXBlLl9udW1iZXJPZlNlYXJjaFJlc3VsdHNEaWRDaGFuZ2UpOgoKMjAxMy0wNC0xMSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM2MzA4NTk+IFJlbW90ZSBXZWIgSW5zcGVjdG9yIGRvZXNuJ3Qgd29yayBmb3Igc29tZSBzaXRlcyAoMTE0NDQ3KQoKICAgICAgICBSV0lJbnNwZWN0b3JGcm9udGVuZEhvc3QgYWx3YXlzIHJldHVybnMgdW5kZWZpbmVkIGZvciBJRkgubG9hZFJlc291cmNlU3luY2hyb25vdXNseS4KICAgICAgICBHcmFjZWZ1bGx5IGhhbmRsZSB0aGF0IGluIG91ciBmcm9udGVuZCB3aGlsZSB3ZSBlaXRoZXIgaW1wbGVtZW50IGl0LCBvciBjcmVhdGUKICAgICAgICBhIG5ldyBJbnNwZWN0b3IgcHJvdG9jb2wgbWV0aG9kIHRvIGxvYWQgcmVzb3VyY2VzIHRocm91Z2ggdGhlIGJhY2tlbmQuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZU1hcE1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBNYW5hZ2VyLnByb3RvdHlwZS5fbG9hZEFuZFBhcnNlU291cmNlTWFwKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlTWFwUmVzb3VyY2UuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBSZXNvdXJjZS5wcm90b3R5cGUuX3JlcXVlc3RSZXNvdXJjZUFzeW5jaHJvbm91c2x5KToKCjIwMTMtMDQtMTEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBGb3JjZSBDb2RlTWlycm9yIGVkaXRvcnMgdG8gYmUgYSBzdGFja2luZyBjb250ZXh0IHRvIHByZXZlbnQgY3JlYXRpbmcgbWFueSBsYXllcnMKICAgICAgICBpbnNpZGUgd2hlbiBhbm90aGVyIGVsZW1lbnQgb3ZlcmxhcHMuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzYwODgzOT4gUkVHUkVTU0lPTjogVGV4dCBpbiBXZWIgSW5zcGVjdG9yIFNvdXJjZSBDb2RlCiAgICAgICAgdmlldyBsb29rcyBoZWF2eSAoZG91YmxlIHJlbmRlcmVkPykKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29kZU1pcnJvck92ZXJyaWRlcy5jc3M6CiAgICAgICAgKC5Db2RlTWlycm9yKTogQWRkZWQuIFNldCB6LWluZGV4OiAwLiBQb3NpdGlvbiBpcyBhbHJlYWR5IHNldCBpbiBjb2RlbWlycm9yLmNzcy4KCjIwMTMtMDQtMTAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIHRoZSBXZWIgSW5zcGVjdG9yIGRhdGFiYXNlIGNvZGUgdG9sZXJhbnQgb2YgcXVvdGEgZXhjZXB0aW9ucy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VVdGlsaXRpZXMuanM6CiAgICAgICAgSWYgd2UgY2FuJ3Qgb3BlbiB0aGUgZGF0YWJhc2UgaXQgaXNuJ3QgdGhlIGVuZCBvZiB0aGUgd29ybGQsIHdlIGp1c3Qgd2lsbAogICAgICAgIGFsd2F5cyBnZW5lcmF0ZSB0aGUgaW1hZ2VzIGFuZCBub3QgY2FjaGUgdGhlbSBmb3IgYmV0dGVyIGxvYWQgdGltZXMuCgoyMDEzLTA0LTEwICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRHJvcCB0aGUgZXhwZWN0ZWQgdXNhZ2UgZG93biB0byA1IE1CIHRvIG1hdGNoIHRoZSB2YWx1ZXMgaW4gUldJIGFuZCBXSzEuCgogICAgICAgIFRoaXMgZml4ZXMgYW4gZXhjZXB0aW9uIG9uIGxvYWQgZm9yIGZpcnN0IHRpbWUgdXNlcnMuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlVXRpbGl0aWVzLmpzOgoKMjAxMy0wNC0xMCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFVwZGF0ZSB0aGUgU3R5bGUgQXR0cmlidXRlIGluIHRoZSBzaWRlYmFyIHdoZW4gdGhlIERPTSBhdHRyaWJ1dGUgY2hhbmdlcy4KCiAgICAgICAgQWxzbyBvbmx5IHVwZGF0ZSBhIHN0eWxlIHJ1bGUgZm9yIGV4dGVybmFsIGNoYW5nZXMgaWYgdGhlIGVkaXRvciBpc24ndCBmb2N1c2VkLgogICAgICAgIFRoaXMgcHJldmVudHMgZXh0ZXJuYWwgY2hhbmdlcyBmcm9tIGZpZ2h0aW5nIHdpdGggdXNlciBlZGl0cy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNjE5MDQ5PgoKICAgICAgICBSZXZpZXdlZCBieSBBbnRvaW5lIFF1aW50LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuX2NvbW1pdENoYW5nZXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLl9lZGl0b3JCbHVyZWQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5fcHJvcGVydGllc0NoYW5nZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLl9yZXNldENvbnRlbnQpOgogICAgICAgIFNpbXBsaWZ5IHdoZW4gd2UgcmVzZXQgdGhlIGNvbnRlbnQgdG8gb25seSBkbyBpdCB3aGVuIG5vdCBmb2N1c2VkLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUuX2xvYWROb2RlQXR0cmlidXRlcyk6CiAgICAgICAgRmlyZSBXZWJJbnNwZWN0b3IuRE9NTm9kZS5FdmVudC5BdHRyaWJ1dGVNb2RpZmllZC4gUmVtb3ZlIFN0eWxlSW52YWxpZGF0ZWQgZXZlbnQuCgoyMDEzLTA0LTEwICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSBET01Ob2RlU3R5bGVzIG1hcmsgYXMgbmVlZGluZyByZWZyZXNoIGluIGFsbCBjYXNlcyB3aGVuIGEgc3R5bGVzaGVldCBjaGFuZ2VzLgoKICAgICAgICBUaGUgc3R5bGVzaGVldCBjaGFuZ2UgbWlnaHQgYmUgYSBydWxlIHRoYXQgd2UgZGlkbid0IG1hdGNoIHlldCwgc28gY2hlY2tpbmcgZXhpc3RpbmcgbWF0Y2hlZAogICAgICAgIHJ1bGVzIGZvciB0aGUgc3R5bGVzaGVldCB3aWxsIG5vdCB0cmlnZ2VyIGEgcmVmcmVzaC4gVGhpcyBjb2RlIHdhcyBhZGRlZCBiYWNrIHdoZW4gcmVmcmVzaCB3YXMKICAgICAgICBub3QgYXMgc21hcnQsIHNvIHRoaXMgaXMgdGhlIGNvcnJlY3QgdGhpbmcgdG8gZG8gbm93LgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMzODczNTk+IFVuZG9pbmcgc2VsZWN0b3IgY2hhbmdlIGRvZXMgbm90IHNob3cgc2VsZWN0b3IgYWZmZWN0aW5nIHRoZSBwYWdlIGFueXdoZXJlCgogICAgICAgIFJldmlld2VkIGJ5IEFudG9pbmUgUXVpbnQuCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01Ob2RlU3R5bGVzLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuX3N0eWxlU2hlZXRDb250ZW50RGlkQ2hhbmdlKToKICAgICAgICBTaW1wbGlmeSBieSBhbHdheXMgY2FsbGluZyBfbWFya0FzTmVlZHNSZWZyZXNoLgoKMjAxMy0wNC0wOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEluZGVudCBpbnZhbGlkIHN0eWxlIHByb3BlcnRpZXMsIG5vdCBqdXN0IGJsYW5rIGxpbmVzLgoKICAgICAgICBBbHNvIHN0cmlrZSBvdXQgdGV4dCB0aGF0IGlzIG5vdCByZWNvZ25pemVkIGFzIGEgcHJvcGVydHkgb3IgY29tbWVudC4KCiAgICAgICAgVGhpcyB3aWxsIG5vdyBwcm9wZXJseSBpbmRlbnQgYW5kIHN0cmlrZSBvdXQgdGhlc2UgdHdvIGVycm9yIGNhc2VzOgoKICAgICAgICAgICAgcGFkZGluZzsgMDsKICAgICAgICAgICAgKmxpbmUtaGVpZ2h0OiAxOwoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM2MDg4NDg+IENoZWNrYm94IG1pc3NpbmcgZm9yIGEgc3R5bGUgcHJvcGVydHkKCiAgICAgICAgUmV2aWV3ZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLmNzczoKICAgICAgICBTdHJpa2Ugb3V0IHNwYW5zIHRoYXQgYXJlIG5vdCBjb21tZW50cyBvciBtYXJrZWQgcHJvcGVydGllcy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLl9jb250ZW50Q2hhbmdlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuX3VwZGF0ZVRleHRNYXJrZXJzKToKICAgICAgICBDYWxsIF9tYXJrTGluZXNXaXRoQ2hlY2tib3hQbGFjZWhvbGRlciBzbyB0aGUgcGxhY2Vob2xkZXJzIGFyZSBhZGRlZCBpZiBuZWVkZWQgZm9yCiAgICAgICAgbGluZXMgaHRhdCBkaWRuJ3QgaGF2ZSBwcm9wZXJ0aWVzLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5fY3JlYXRlVGV4dE1hcmtlckZvclByb3BlcnR5SWZOZWVkZWQpOgogICAgICAgIFJlbW92ZSB1c2Ugb2YgX19jaGVja2JveE1hcmtlciwgaXQgaXMgbm90IHNldCBhbnltb3JlLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5fbWFya0xpbmVzV2l0aENoZWNrYm94UGxhY2Vob2xkZXIpOgogICAgICAgIFJlbmFtZWQgZnJvbSBfbWFya0JsYW5rTGluZXNXaXRoQ2hlY2tib3hQbGFjZWhvbGRlciBhbmQgdGF1Z2h0IGhvdyB0byBtYXJrIG9ubHkgbGluZXMgdGhhdAogICAgICAgIG5lZWQgbWFya2VkLCBhbmQgaWdub3JlcyB0aGUgcmVzdC4KCjIwMTMtMDQtMDggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBdm9pZCBhIGNvbnNvbGUgZXJyb3Igd2hlbiB2aWV3aW5nIEFub255bW91cyBzY3JpcHRzLgoKICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLmNvb2tpZUZvckNvbnRlbnRWaWV3KToKCjIwMTMtMDQtMDggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIHRoZSBTY29wZSBWYXJpYWJsZXMgZGV0YWlscyBzaWRlYmFyIHdvcmsgd2hlbiBldmFsdWF0aW5nIGluIHRoZSBDb25zb2xlLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI4MzEyMzY+IFJFR1JFU1NJT04gKDYuMC4zLUN1cmllKTogU2NvcGUgQ2hhaW4gc2hvd3Mgbm90aGluZyB3aGlsZSBkZWJ1Z2dpbmcKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2NvcGVDaGFpbkRldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TY29wZUNoYWluRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUucmVmcmVzaC5kZWxheWVkV29yayk6IENsZWFyIHRoZSB0aW1lb3V0LgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NvcGVDaGFpbkRldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLnJlZnJlc2gpOiBTZXQgYSB0aW1lb3V0LgoKMjAxMy0wNC0wOCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBDb3B5IFByZXR0eVByaW50ZXIgdXBkYXRlcyBpbnRvIFVzZXJJbnRlcmZhY2UgdG8gZW5hY3QgdGhlIGNoYW5nZXMuCgogICAgICAgIFVucmV2aWV3ZWQsIGp1c3QgbW92aW5nIHJldmlld2VkIGNvZGUgYmV0d2VlbiBkaXJlY3Rvcmllcy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvZGVNaXJyb3JGb3JtYXR0ZXJzLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2phdmFzY3JpcHQuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Zvcm1hdHRlci5qczoKICAgICAgICAoRm9ybWF0dGVyLnByb3RvdHlwZS5faGFuZGxlVG9rZW4pOgoKMjAxMy0wNC0wOCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM1OTM3Nzk+IFByZXR0eSBwcmludGVyIHNob3VsZCBsaW5lICJjYXNlIiBhbmQgImRlZmF1bHQiIHdpdGggInN3aXRjaCIKCiAgICAgICAgRGVkZW50IGJlZm9yZSBjYXNlL2RlZmF1bHQgYW5kIGluZGVudCBhZnRlciwgc28gaXQgbGluZXMgdXAgd2l0aCB0aGUgc3dpdGNoLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVG9vbHMvUHJldHR5UHJpbnRpbmcvQ29kZU1pcnJvckZvcm1hdHRlcnMuanM6CiAgICAgICAgKiBUb29scy9QcmV0dHlQcmludGluZy9pbmRleC5odG1sOgogICAgICAgICogVG9vbHMvUHJldHR5UHJpbnRpbmcvanMtdGVzdHMvc3dpdGNoLWNhc2UtZGVmYXVsdC1leHBlY3RlZC5qczogQWRkZWQuCiAgICAgICAgKiBUb29scy9QcmV0dHlQcmludGluZy9qcy10ZXN0cy9zd2l0Y2gtY2FzZS1kZWZhdWx0LmpzOiBBZGRlZC4KCjIwMTMtMDQtMDggIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNTg0NzEzPiBQcmV0dHkgcHJpbnRlciBzaG91bGQgZ3JhY2VmdWxseSBoYW5kbGUgc2luZ2xlIGxpbmUgaWYvZWxzZS9mb3IvZG8vd2hpbGUgYmxvY2tzCgogICAgICAgIFRoaXMgYWRkcyBpbmRlbnRhdGlvbiBzdXBwb3J0IGZvciBzaW5nbGUgc3RhdGVtZW50IGJsb2Nrcy4gVGhpcyBoYWQgYQogICAgICAgIHByZXR0eSBiaWcgcGVyZm9ybWFuY2UgY29zdCBwcmV0dHkgcHJpbnRpbmcganF1ZXJ5Lm1pbi5qcyAoMjBtcyksIGJ1dAogICAgICAgIEkgdGhpbmsgaXQgaXMgd29ydGggaXQuIEluIHRoZSBpbnNwZWN0b3IgaXRzZWxmLCBJIGRpZCBub3Qgc2VlIHByZXR0eQogICAgICAgIHByaW50aW5nIGFjdHVhbGx5IHRha2luZyBsb25nZXIuIEknbGwgY29udGludWUgdG8gbG9vayBhdCBwZXJmb3JtYW5jZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFRvb2xzL1ByZXR0eVByaW50aW5nL0Zvcm1hdHRlci5qczoKICAgICAgICAoRm9ybWF0dGVyLnByb3RvdHlwZS5faGFuZGxlVG9rZW4pOgogICAgICAgIExldCB0aGUgQ29kZSBtb2RpZnkgc3RhdGUgYmVmb3JlIC8gYWZ0ZXIgdGhlIHRva2VuIGlzIGNvbnN1bWVkLgogICAgICAgIExldCB0aGUgZm9ybWF0dGVycyBzcGVjaWZ5IG11bHRpcGxlIGRlZGVudHMgYXQgb25jZS4KCiAgICAgICAgKiBUb29scy9QcmV0dHlQcmludGluZy9Gb3JtYXR0ZXJEZWJ1Zy5qczoKICAgICAgICAoRm9ybWF0dGVyLnByb3RvdHlwZS5kZWJ1Zyk6CiAgICAgICAgSW4gSmF2YVNjcmlwdCBwcmludCBvdXQgdGhlIHByZXZpb3VzIGxleGljYWwgc3RhdGUuCgogICAgICAgICogVG9vbHMvUHJldHR5UHJpbnRpbmcvQ29kZU1pcnJvckZvcm1hdHRlcnMuanM6CiAgICAgICAgUHJldHR5IHByaW50IGEgZ29vZCBjaHVuayBvZiBKYXZhU2NyaXB0IHNpbmdsZSBzdGF0ZW1lbnQgYmxvY2tzIGFuZAogICAgICAgIGlmL2Vsc2UgY2hhaW5zLgoKICAgICAgICAqIFRvb2xzL1ByZXR0eVByaW50aW5nL2phdmFzY3JpcHQuanM6CiAgICAgICAgVXBkYXRlIHRvICJuZWFyIiB0cnVuayBDb2RlTWlycm9yIEphdmFTY3JpcHQuIFRoZSBtb3N0IHJlY2VudCBjb21taXQKICAgICAgICBjYXVzZXMgaXNzdWVzLgoKICAgICAgICAqIFRvb2xzL1ByZXR0eVByaW50aW5nL2luZGV4Lmh0bWw6CiAgICAgICAgKiBUb29scy9QcmV0dHlQcmludGluZy9qcy10ZXN0cy9ibG9jay1jb21tZW50LWV4cGVjdGVkLmpzOiBBZGRlZC4KICAgICAgICAqIFRvb2xzL1ByZXR0eVByaW50aW5nL2pzLXRlc3RzL2Jsb2NrLWNvbW1lbnQuanM6IEFkZGVkLgogICAgICAgICogVG9vbHMvUHJldHR5UHJpbnRpbmcvanMtdGVzdHMvc2luZ2xlLXN0YXRlbWVudC1ibG9ja3MtZXhwZWN0ZWQuanM6IEFkZGVkLgogICAgICAgICogVG9vbHMvUHJldHR5UHJpbnRpbmcvanMtdGVzdHMvc2luZ2xlLXN0YXRlbWVudC1ibG9ja3MuanM6IEFkZGVkLgogICAgICAgIEFkZGVkIHNvbWUgbWljcm8tdGVzdHMgZm9yIHJlY2VudCBwcmV0dHkgcHJpbnRpbmcgY2hhbmdlcy4KCjIwMTMtMDQtMDggIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIGEgbGl0dGxlIHRlc3QgcnVubmluZyBoYXJuZXNzIHRvIHRoZSBQcmV0dHlQcmludGVyIHRvb2wuIE5vIHRlc3RzIHlldC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFRvb2xzL1ByZXR0eVByaW50aW5nL2luZGV4Lmh0bWw6CgoyMDEzLTA0LTA4ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIFVwZGF0ZSB0aGUgUHJldHR5UHJpbnRpbmcgVG9vbCB0byBtYXRjaCBVc2VySW50ZXJmYWNlLgoKICAgICAgICBVbnJldmlld2VkIHRvb2xzIGNoYW5nZS4KCiAgICAgICAgKiBUb29scy9QcmV0dHlQcmludGluZy9jb2RlbWlycm9yLmpzOgogICAgICAgICh3aW5kb3cuQ29kZU1pcnJvcik6CiAgICAgICAgKiBUb29scy9QcmV0dHlQcmludGluZy9qYXZhc2NyaXB0LmpzOgoKMjAxMy0wNC0wOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEVuYWJsZSBjb21wbGV0aW9ucyBmb3IgcmVzb3VyY2UgY29udGVudCB2aWV3cy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNTk4MDYyPgoKICAgICAgICBSZXZpZXdlZCBieSBBbnRvaW5lIFF1aW50LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IpOiBIb29rIHVwIGEgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci4KCjIwMTMtMDQtMDggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBEZWxheSBjb21wdXRpbmcgc3VnZ2VzdGlvbnMgZm9yIDI1MG1zIHRvIGtlZXAgZnJvbSBzbG93aW5nIGRvd24gdHlwaW5nLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM1OTgwMTQ+IENTUyBjb21wbGV0aW9ucyBjYW4gc2xvdyBkb3duIHR5cGluZwoKICAgICAgICBSZXZpZXdlZCBieSBBbnRvaW5lIFF1aW50LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5oaWRlQ29tcGxldGlvbnMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5fY29tcGxldGVBdEN1cnJlbnRQb3NpdGlvbik6CiAgICAgICAgQ2xlYXIgdGhlIHR5cGluZyBkZWxheSB0aW1lb3V0LgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUuX2hhbmRsZUNoYW5nZSk6CiAgICAgICAgU2V0IF9pZ25vcmVOZXh0Q3Vyc29yQWN0aXZpdHkgc28gaGlkZUNvbXBsZXRpb25zIGlzbid0IGNhbGxlZC4KCjIwMTMtMDQtMDggIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNTk3NjgxPiBMYXllcnMgc2lkZWJhciBwYW5lbCBtYXkgZmxhc2ggcG9wb3ZlcnMgd2l0aCBzdGFsZSBjb250ZW50CgogICAgICAgIFdlIG9ubHkgcHJlc2VudCB0aGUgcG9wb3ZlciB3aGVuIHRoZSBkYXRhIGdyaWQgbm9kZSBoYXNuJ3QgY2hhbmdlZAogICAgICAgIGJldHdlZW4gdGhlIHRpbWUgd2UgY2FsbGVkIGludG8gdGhlIGJhY2tlbmQgYW5kIHRoZSB0aW1lIHRoZSBjYWxsYmFjawogICAgICAgIGlzIGNhbGxlZC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTGF5ZXJUcmVlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fc2hvd1BvcG92ZXJGb3JTZWxlY3RlZE5vZGUpOgoKMjAxMy0wNC0wOCAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI4OTIyODA+IExheWVyIHRyZWUgcGFuZWwgZGF0YSBncmlkIHNob3VsZCByZWZyZXNoIGxlc3MgZnJlcXVlbnRseSB3aGVuIGxheWVycyBmb3Igbm9kZXMgYXJlIHJlY3JlYXRlZAoKICAgICAgICBQcm92aWRlIGEgY3VzdG9tIERhdGFHcmlkIHN1YmNsYXNzIGZvciB0aGUgTGF5ZXJzIHBhbmVsIHdoZXJlIHdlCiAgICAgICAgdXNlIENTUyB0cmFuc2Zvcm1zIHRvIHVwZGF0ZSB0aGUgcG9zaXRpb24gb2YgZGF0YSBncmlkIG5vZGVzCiAgICAgICAgaW5zdGVhZCBvZiByZWx5aW5nIG9uIERPTSBvcmRlciBzbyB0aGF0IHdlIGNhbiBhdm9pZCBET00gdGhyYXNoaW5nCiAgICAgICAgYW5kIHJldGFpbiBzY3JvbGwgcG9zaXRpb24gZm9yIHJhcGlkbHkgY2hhbmdpbmcgY29udGVudC4gV2UgYWxzbwogICAgICAgIHNldCB0aGUgd2lkdGggb2YgIlBhaW50cyIgYW5kICJNZW1vcnkiIGNvbHVtbnMgZm9yIGEgbmljZWx5CiAgICAgICAgY29uc2lzdGVudCBmb3JtYXR0aW5nLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9EZXRhaWxzU2VjdGlvbkRhdGFHcmlkUm93LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsc1NlY3Rpb25EYXRhR3JpZFJvdy5wcm90b3R5cGUuc2V0IGRhdGFHcmlkKToKICAgICAgICBQZXJmb3JtIGEgcXVpY2sgcmV0dXJuIGluIGNhc2UgdGhlIG5ldyBkYXRhIGdyaWQgaXMgdGhlIHNhbWUKICAgICAgICBhcyB0aGUgcHJldmlvdXMgaW4gb3JkZXIgdG8gcmVtb3ZlIHRoZSBwb3NzaWJpbGl0eSBvZiBhcHBlbmRpbmcKICAgICAgICB0aGUgZGF0YSBncmlkJ3MgZWxlbWVudCBpZiBpdCB3YXMgYWxyZWFkeSB0aGUgY3VycmVudCBkYXRhIGdyaWQuCgogICAgICAgICogVXNlckludGVyZmFjZS9MYXllclRyZWVEYXRhR3JpZC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVEYXRhR3JpZCk6CiAgICAgICAgSW5pdGlhbGl6ZSB0aGUgRGF0YUdyaWQgd2l0aCBhIGN1c3RvbSBzZXQgb2YgY29sdW1ucyBhbmQgc2V0IHRoZQogICAgICAgIHdpZHRoIG9mIHRoZSAiUGFpbnRzIiBhbmQgIk1lbW9yeSIgY29sdW1ucy4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVEYXRhR3JpZC5wcm90b3R5cGUuaW5zZXJ0Q2hpbGQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlRGF0YUdyaWQucHJvdG90eXBlLnJlbW92ZUNoaWxkKToKICAgICAgICBPdmVycmlkZSB0aGVzZSBEYXRhR3JpZCBtZXRob2RzIHRvIHBlcmZvcm0gb3VyIGN1c3RvbSBsYXlvdXQgb2YKICAgICAgICBjZWxscyB3aGVuIGEgY2hpbGQgaXMgYWRkZWQgb3IgcmVtb3ZlZC4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVEYXRhR3JpZC5wcm90b3R5cGUuc2V0Q2hpbGRyZW4pOgogICAgICAgIFB1YmxpYyBBUEkgdXNlZCB0byBzZXQgdGhlIGxpc3Qgb2YgY2hpbGRyZW4gZGF0YSBncmlkIG5vZGVzIGZvcgogICAgICAgIHRoaXMgZGF0YSBncmlkLiBXZSBjb21wYXJlIHRoaXMgbmV3IGxpc3QgdG8gdGhlIHByZXZpb3VzIGxpc3QKICAgICAgICBhbmQgb25seSByZW1vdmUgLyBhZGQgdGhlIG5vZGVzIHRoYXQgbmVlZCB0byBiZSwgYXZvaWRpbmcgaGF2aW5nCiAgICAgICAgdG8gcmVtb3ZlIHRoZSBlbnRpcmUgc2V0IG9mIGNoaWxkcmVuIHRvIHVwZGF0ZSB0aGUgbm9kZXMgbGlzdC4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVEYXRhR3JpZC5wcm90b3R5cGUuX3VwZGF0ZUNoaWxkcmVuKToKICAgICAgICBQb3NpdGlvbiB0aGUgY2hpbGRyZW4gZGF0YSBncmlkIG5vZGVzIHVzaW5nIENTUyB0cmFuc2Zvcm1zIGluc3RlYWQKICAgICAgICBvZiBET00gb3JkZXIuIFdlIGFsc28gbWFudWFsbHkgc2V0IHRoZSBzaWJsaW5nIHJlbGF0aW9uc2hpcCB0aGVyZQogICAgICAgIHNpbmNlIGl0IGNhbiBubyBsb25nZXIgYmUgYWNjb21wbGlzaGVkIGluIGluc2VydENoaWxkKCkgb3IKICAgICAgICByZW1vdmVDaGlsZCgpIGNhbGxzLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZURhdGFHcmlkLnByb3RvdHlwZS5fcmVjYWxjdWxhdGVTaWJsaW5ncyk6CiAgICAgICAgTWFrZSB0aGlzIG1ldGhvZCBhIG5vLW9wIHNpbmNlIHdlIG1hbnVhbGx5IHBlcmZvcm0gdGhlIHNhbWUgdGFzayBpbgogICAgICAgIF91cGRhdGVDaGlsZHJlbigpLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTGF5ZXJUcmVlRGF0YUdyaWROb2RlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlRGF0YUdyaWROb2RlKToKICAgICAgICBBZGQgYSBuZXcgX291dGxldHMgcHJpdmF0ZSBpdmFyIHdlIHVzZSB0byBzdGFzaCB0aGUgRE9NIGVsZW1lbnRzCiAgICAgICAgd2UnbGwgbmVlZCB0byB1cGRhdGUgd2hlbiB0aGUgbm9kZSdzIGRhdGEgY2hhbmdlcy4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVEYXRhR3JpZE5vZGUucHJvdG90eXBlLmNyZWF0ZUNlbGxzKToKICAgICAgICBPdmVycmlkZSB0aGlzIERhdGFHcmlkTm9kZSBBUEkgaW4gb3JkZXIgdG8gYWRkIGEgZmxhZyB0aGF0IGNlbGxzCiAgICAgICAgd2VyZSBjcmVhdGVkIHdoaWNoIHdlJ2xsIHVzZSBhcyBhIGZsYWcgdG8gYWxsb3cgdGhlIHVwZGF0ZSBvZiBhCiAgICAgICAgY2VsbCdzIGRhdGEgaW4gdGhlIGRhdGEgc2V0dGVyLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZURhdGFHcmlkTm9kZS5wcm90b3R5cGUuY3JlYXRlQ2VsbENvbnRlbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlRGF0YUdyaWROb2RlLnByb3RvdHlwZS5zZXQgbGF5ZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlRGF0YUdyaWROb2RlLnByb3RvdHlwZS5nZXQgZGF0YSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVEYXRhR3JpZE5vZGUucHJvdG90eXBlLnNldCBkYXRhKToKICAgICAgICBDdXN0b20gZGF0YSBzZXR0ZXIgYXMgdGhlIGRlZmF1bHQgdmVyc2lvbiB3b3VsZCBjb21wbGV0ZWx5IHRyYXNoCiAgICAgICAgdGhlIERPTSB0cmVlIGFuZCByZXBsYWNlIGl0IHdpdGggYSB3aG9sZSBuZXcgc2V0IG9mIGVsZW1lbnRzIHRvCiAgICAgICAgdXBkYXRlIHRoZSBkYXRhLiBXZSBjaG9vc2UgYSBtb3JlIGluY3JlbWVudGFsIGFwcHJvYWNoIGhlcmUgc2luY2UKICAgICAgICBpbmRpdmlkdWFsIGZpZWxkcyBmb3IgdGhpcyBub2RlIG1heSBjaGFuZ2UgKHBhaW50IGNvdW50IGJlaW5nIHRoZQogICAgICAgIG1vc3QgbGlrZWx5KS4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVEYXRhR3JpZE5vZGUucHJvdG90eXBlLl9tYWtlT3V0bGV0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZURhdGFHcmlkTm9kZS5wcm90b3R5cGUuX21ha2VOYW1lQ2VsbCk6CiAgICAgICAgUHJlcGFyZSB0aGUgRE9NIGVsZW1lbnRzIHVzZWQgdG8gcHJlc2VudCB0aGUgbm9kZSdzIGRhdGEuIE1hbnkKICAgICAgICBlbGVtZW50cyBmb3IgdGhlIG5hbWUgY2VsbCBhcmUgZHluYW1pY2FsbHkgYWRkZWQgYW5kIHJlbW92ZWQgaW4KICAgICAgICBfdXBkYXRlTmFtZUNlbGxEYXRhKCkuCgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlRGF0YUdyaWROb2RlLnByb3RvdHlwZS5fdXBkYXRlQ2VsbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVEYXRhR3JpZE5vZGUucHJvdG90eXBlLl91cGRhdGVOYW1lQ2VsbERhdGEpOgogICAgICAgIFVwZGF0ZSB0aGUgaW5mb3JtYXRpb24gb24gb3V0bGV0cyBvciB0aGVpciB2ZXJ5IGF2YWlsYWJpbGl0eSBiYXNlZAogICAgICAgIG9uIHRoZSBjdXJyZW50IGRhdGEgYW5kIHJlcHJlc2VudGVkIGxheWVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTGF5ZXJUcmVlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5zaG93bik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLmhpZGRlbik6CiAgICAgICAgUmVtb3ZlIHRoZSBhdXRvLXNpemluZyBvZiBkYXRhIGdyaWQgY29sdW1ucyBhcyB3ZSdyZSBub3Qgc2V0dGluZyB0aGVtCiAgICAgICAgdG8gYmUgY29uc3RhbnQgZm9yIGEgbW9yZSBjb25zaXN0ZW50IGxvb2suCgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fYnVpbGREYXRhR3JpZFNlY3Rpb24pOgogICAgICAgIEluc3RhbnRpYXRlIG91ciBuZXcgTGF5ZXJUcmVlRGF0YUdyaWQgY2xhc3MuCgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fc29ydERhdGFHcmlkKToKICAgICAgICBVc2UgdGhlIGN1c3RvbSBzZXRDaGlsZHJlbigpIEFQSSBvbiBMYXllclRyZWVEYXRhR3JpZCB0byBjaGFuZ2UgdGhlCiAgICAgICAgY2hpbGRyZW4gb3JkZXIuCgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdXBkYXRlRGF0YUdyaWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CiAgICAgICAgQWRkIExheWVyVHJlZURhdGFHcmlkLmpzLgoKMjAxMy0wNC0wNyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM1ODQ2OTY+IFByZXR0eSBwcmludGVyIHNob3VsZCBwcmVzZXJ2ZSB3aGl0ZXNwYWNlIGluIG11bHRpLWxpbmUgY29tbWVudHMKCiAgICAgICAgVXBkYXRlIENvZGVNaXJyb3IgdG8gdHJ1bmsgdG8gZ2V0IGEgZmV3IHJlY2VudCBmaXhlcy4KCiAgICAgICAgVGhpcyB1cGRhdGUgaW5jbHVkZXMgcHJvamVjdCB3aWRlIHRhaWxpbmcgd2hpdGVzcGFjZSBhbmQgdGFiIHJlbW92YWwKICAgICAgICB3aGljaCBpcyB3aHkgc28gbWFueSBmaWxlcyB3ZXJlIGNoYW5nZWQuCgogICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY2xvanVyZS5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9yLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZmZlZXNjcmlwdC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9qYXZhc2NyaXB0LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2xlc3MuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvbWF0Y2hicmFja2V0cy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9vdmVybGF5LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3NxbC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci94bWwuanM6CgoyMDEzLTA0LTA3ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzA0MzU1MD4gUkVHUkVTU0lPTjogU2Nyb2xsYmFyIHJlbmRlcnMgYmVoaW5kIHBvc2l0aW9uOiBzdGlja3kgZWxlbWVudHMgaW4gdGhlIFdlYiBJbnNwZWN0b3IKCiAgICAgICAgR2l2ZSB0aGUgU2lkZWJhciBQYW5lbHMgYSBzdGFja2luZyBjb250ZXh0IHRvIHdvcmsgYXJvdW5kIHRoZSBpc3N1ZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgUmlja3kgTW9uZGVsbG8uCgogICAgICAgICogVXNlckludGVyZmFjZS9TaWRlYmFyLmNzczoKICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwpOgoKMjAxMy0wNC0wNSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBBZGQgYSBzbWFsbCBzY3JpcHQgdG8gdXBkYXRlIHRoZSBUb29scy9QcmV0dHlQcmludGluZyBkaXJlY3RvcnkuCgogICAgICAgIE15IHdvcmtmbG93IGZvciBmaXhpbmcgYSBQcmV0dHlQcmludGluZyBidWcgaXMgdG8gZmlyc3QgdXBkYXRlIHRoZSBUb29scwogICAgICAgIGRpcmVjdG9yeSB3aXRoIGV4YWN0IHJlcGxpY2FzIG9mIGZpbGVzIGluIFVzZXJJbnRlcmZhY2UuIE1ha2UgY2hhbmdlcwogICAgICAgIGFuZCB0ZXN0IHdpdGggdGhlIGRlYnVnIHBhZ2UsIGFuZCB0aGVuIHRyYW5zZmVyIHRoZSBmaWxlcyBiYWNrIHRvIHRoZQogICAgICAgIGluc3BlY3Rvci4gVGhpcyBzY3JpcHQgaGVscHMgYXV0b21hdGUgdGhvc2Ugc3RlcHMuCgogICAgICAgIFJldmlld2VkIGJ5IENvZHkgS3JpZWdlci4KCiAgICAgICAgKiBTY3JpcHRzL3VwZGF0ZS1jb2RlbWlycm9yLXJlc291cmNlcy5yYjoKICAgICAgICAqIFNjcmlwdHMvdXBkYXRlLXByZXR0eS1wcmludGVyLnJiOiBBZGRlZC4KCjIwMTMtMDQtMDUgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgVXBkYXRlIHRoZSBQcmV0dHlQcmludGluZyBUb29sIHdpdGggYSBmZXcgRGVidWcgY2hhbmdlcy4KCiAgICAgICAgVW5yZXZpZXdlZCB0b29scyBjaGFuZ2UuCgogICAgICAgICogVG9vbHMvUHJldHR5UHJpbnRpbmcvaW5kZXguaHRtbDoKICAgICAgICAqIFRvb2xzL1ByZXR0eVByaW50aW5nL0Zvcm1hdHRlckRlYnVnLmpzOgogICAgICAgICgucGFkKToKICAgICAgICAoLmRlYnVnVG9rZW4pOgogICAgICAgIChGb3JtYXR0ZXIucHJvdG90eXBlLmRlYnVnKToKICAgICAgICBPdXRwdXQgbnVsbCwgdW5kZWZpbmVkLCBvciAnc3RyaW5nJyBmb3IgdG9rZW5zLgogICAgICAgIFByZXZpb3VzbHkgbnVsbCBhbmQgdW5kZWZpbmVkIG91dHB1dCBhcyAnLScuCgoyMDEzLTA0LTA1ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIFVwZGF0ZSB0aGUgUHJldHR5UHJpbnRpbmcgVG9vbCB3aXRoIENvZGVNaXJyb3IgQ1NTIGNoYW5nZXMuCgogICAgICAgIFVucmV2aWV3ZWQgdG9vbHMgY2hhbmdlLgoKICAgICAgICAqIFRvb2xzL1ByZXR0eVByaW50aW5nL2NvZGVtaXJyb3ItYWRkaXRpb25zLmNzczogQWRkZWQuCiAgICAgICAgKiBUb29scy9QcmV0dHlQcmludGluZy9jb2RlbWlycm9yLmNzczoKICAgICAgICAqIFRvb2xzL1ByZXR0eVByaW50aW5nL2luZGV4Lmh0bWw6CgoyMDEzLTA0LTA1ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgVHdlYWsgV2ViIEluc3BlY3RvcidzIGltYWdlIGNhY2hlIGRhdGFiYXNlLgoKICAgICAgICBXZSBvbmx5IHdhbnQgdG8ga2VlcCB0aGUgaW1hZ2UgZGF0YSBhcm91bmQgZm9yIHRoZSBmaXJzdCB1c2UuIFRoZXNlCiAgICAgICAgaW1hZ2VzIGFyZSB0eXBpY2FsbHkgb25seSB1c2VkIGluIG9uZSBwbGFjZS4gVGhpcyBrZWVwcyBwZXJmb3JtYW5jZQogICAgICAgIGdvb2QgZHVyaW5nIHBhZ2UgbG9hZCBhbmQgZnJlZXMgbWVtb3J5IHRoYXQgdHlwaWNhbGx5IHdvbid0IGJlIHJldXNlZC4KCiAgICAgICAgQWxzbyBhZGQgdHJhbnNhY3Rpb24gZXJyb3IgbG9nZ2luZyBhbmQgYSBiZXR0ZXIgZXhwZWN0ZWQgZGF0YWJhc2Ugc2l6ZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VVdGlsaXRpZXMuanM6CiAgICAgICAgKF9sb2dTUUxUcmFuc2FjdGlvbkVycm9yKToKICAgICAgICAoX3ByZWZldGNoQ2FjaGVkSW1hZ2VzQW5kVXBkYXRlKToKICAgICAgICAoLnJlc3RvcmVJbWFnZURhdGEpOgogICAgICAgIChyZXN0b3JlSW1hZ2VGcm9tU3RvcmFnZSk6CgoyMDEzLTA0LTA1ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIFVwZGF0ZSB0aGUgUHJldHR5UHJpbnRpbmcgVG9vbCB3aXRoIG5ldyBmb3JtYXR0ZXIgY2hhbmdlcy4KCiAgICAgICAgQWxzbyBzb21lIHR3ZWFrcyBzbyB0aGF0IHRoZSBUb29scyBmaWxlcyBhcmUgaWRlbnRpY2FsIHRvIHRoZSBvbmVzIGluCiAgICAgICAgdGhlIGFjdHVhbCBXZWIgSW5zcGVjdG9yIChVc2VySW50ZXJmYWNlKS4KCiAgICAgICAgVW5yZXZpZXdlZCB0b29scyBjaGFuZ2UuCgogICAgICAgICogVG9vbHMvUHJldHR5UHJpbnRpbmcvQ29kZU1pcnJvckZvcm1hdHRlcnMuanM6CiAgICAgICAgKiBUb29scy9QcmV0dHlQcmludGluZy9Gb3JtYXR0ZXIuanM6CiAgICAgICAgKEZvcm1hdHRlci5wcm90b3R5cGUuZm9ybWF0KToKICAgICAgICAoRm9ybWF0dGVyLnByb3RvdHlwZS5faGFuZGxlVG9rZW4pOgogICAgICAgIChGb3JtYXR0ZXIucHJvdG90eXBlLl9oYW5kbGVFbXB0eUxpbmUpOgogICAgICAgICogVG9vbHMvUHJldHR5UHJpbnRpbmcvRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIuanM6CiAgICAgICAgKEZvcm1hdHRlckNvbnRlbnRCdWlsZGVyLnByb3RvdHlwZS5hcHBlbmROZXdsaW5lKToKICAgICAgICAoRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIucHJvdG90eXBlLmFwcGVuZE11bHRpcGxlTmV3bGluZXMpOgogICAgICAgIChGb3JtYXR0ZXJDb250ZW50QnVpbGRlci5wcm90b3R5cGUucmVtb3ZlTGFzdE5ld2xpbmUpOgogICAgICAgIChGb3JtYXR0ZXJDb250ZW50QnVpbGRlci5wcm90b3R5cGUuX2FkZEZvcm1hdHRlZExpbmVFbmRpbmcpOgogICAgICAgICogVG9vbHMvUHJldHR5UHJpbnRpbmcvRm9ybWF0dGVyRGVidWcuanM6IEFkZGVkLgogICAgICAgIChGb3JtYXR0ZXIucHJvdG90eXBlLmRlYnVnKToKICAgICAgICAqIFRvb2xzL1ByZXR0eVByaW50aW5nL1V0aWxpdGllcy5qczogQWRkZWQuCiAgICAgICAgKiBUb29scy9QcmV0dHlQcmludGluZy9jb2RlbWlycm9yLmpzOgogICAgICAgICogVG9vbHMvUHJldHR5UHJpbnRpbmcvY3NzLmpzOgogICAgICAgICogVG9vbHMvUHJldHR5UHJpbnRpbmcvaW5kZXguaHRtbDoKICAgICAgICAqIFRvb2xzL1ByZXR0eVByaW50aW5nL2phdmFzY3JpcHQuanM6CgoyMDEzLTA0LTA1ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIFdpbiBiYWNrIHBlcmZvcm1hbmNlIGluIHByZXR0eS1wcmludGluZyBsYXJnZSBmaWxlcwoKICAgICAgICBXaXRoIHByZXNlcnZpbmcgbmV3bGluZXMgd2UgbG9zdCBhIGZldyBtcy4gVGhpcyB3aW5zIGJhY2sgYXQKICAgICAgICBsZWFzdCB0aGUgc2FtZSBhbW91bnQgYW5kIGEgYml0IG1vcmUgb24gSmF2YVNjcmlwdCAoMi0zbXMpLgoKICAgICAgICBDaGVja2luZyBpZiB0aGUgY3VycmVudCB0b2tlbiBpcyBhIGNvbW1lbnQgaXMgYSB2ZXJ5IGNvbW1vbgogICAgICAgIGluIG91ciBwcmV0dHkgcHJpbnRlcnMuIE9ubHkgcGVyZm9ybSB0aGUgd29yayBvbmNlLCBhbmQgcGFzcwogICAgICAgIHRoZSByZXN1bHQgYXJvdW5kIGFzIG5lZWRlZCB0byBwcmV2ZW50IGR1cGxpY2F0ZWQgd29yay4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29kZU1pcnJvckZvcm1hdHRlcnMuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Zvcm1hdHRlci5qczoKICAgICAgICAoRm9ybWF0dGVyLnByb3RvdHlwZS5faGFuZGxlVG9rZW4pOgoKMjAxMy0wNC0wNSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM1ODIwMjM+IFdlYiBJbnNwZWN0b3IgcmVtb3ZlcyBibGFuayBsaW5lcyBpbiBteSBKUyB3aGVuIHByZXR0eSBwcmludGluZwoKICAgICAgICBXaGVuIHByZXR0eS1wcmludGluZyBhbHJlYWR5IHByZXR0eSBjb2RlIHdlIGRpZCBhIHBvb3Igam9iIG9mIHByZXNlcnZpbmcKICAgICAgICB0aGUgbmljZSBleHRyYSB3aGl0ZXNwYWNlIHRoZSBvcmlnaW5hbCBjb2RlIGhhZC4gVGhpcyBwcmVzZXJ2ZXMgdGhlIGVtcHR5CiAgICAgICAgKHdoaXRlc3BhY2Ugb25seSkgbGluZXMgaW4gdGhlIG9yaWdpbmFsIGNvZGUuCgogICAgICAgIEJlY2F1c2Ugb3VyIHByZXR0eSBwcmludGVyIHNvbWV0aW1lcyBhZGRzIG11bHRpcGxlIG5ld2xpbmVzLCBsaWtlIGluIENTUwogICAgICAgIGFmdGVyIGVhY2ggcnVsZSwgd2UgZG9uJ3QgbmVlZCB0byBhZGQgeWV0IGFub3RoZXIgbmV3bGluZSB0byBqdXN0IHByZXNlcnZlCiAgICAgICAgYSBibGFuayBsaW5lIGZyb20gdGhlIG9yaWdpbmFsIGNvbnRlbnQuIEhhbmRsZSB0aGF0IGdyYWNlZnVsbHkuCgogICAgICAgIFRoaXMgaW50cm9kdWNlcyBhIG1pbm9yIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gKDEtM21zIGluIGxhcmdlIGNvbnRlbnQpCiAgICAgICAgYnV0IEkgdGhpbmsgaXQgaXMgd2VsbCB3b3J0aCBpdCBjb25zaWRlcmluZyB0aGUgcmVzdWx0cy4gTXVjaCBwcmV0dGllciEKCiAgICAgICAgSmF2YVNjcmlwdCBUZXN0OgoKICAgICAgICAgICAgRm9vLnByb3RvdHlwZS5mID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgLy8gLi4uCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIEZvby5wcm90b3R5cGUuZyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIC8vIC4uLgogICAgICAgICAgICB9CgogICAgICAgIENTUyBUZXN0OgoKICAgICAgICAgICAgLyogY29tbWVudCBvbmUgKi8KICAgICAgICAgIAogICAgICAgICAgICAvKiBjb21tZW50IHR3byAqLwoKICAgICAgICBSZXZpZXdlZCBieSBBbnRvaW5lIFF1aW50LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRm9ybWF0dGVyLmpzOgogICAgICAgIChGb3JtYXR0ZXIucHJvdG90eXBlLmZvcm1hdCk6CiAgICAgICAgKEZvcm1hdHRlci5wcm90b3R5cGUuX2hhbmRsZVRva2VuKToKICAgICAgICAoRm9ybWF0dGVyLnByb3RvdHlwZS5faGFuZGxlRW1wdHlMaW5lKToKICAgICAgICBDYWxsIGhhbmRsZUVtcHR5TGluZSBmb3Igd2hpdGVzcGFjZSBvbmx5IGxpbmVzLCBhbmQgZm9yY2UKICAgICAgICBhcHBlbmQgYSBuZXdsaW5lIHVubGVzcyB0aGUgYnVpbGRlciBqdXN0IGhhZCBtdWx0aXBsZS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Zvcm1hdHRlckNvbnRlbnRCdWlsZGVyLmpzOgogICAgICAgIChGb3JtYXR0ZXJDb250ZW50QnVpbGRlcik6CiAgICAgICAgKEZvcm1hdHRlckNvbnRlbnRCdWlsZGVyLnByb3RvdHlwZS5hcHBlbmROZXdsaW5lKToKICAgICAgICAoRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIucHJvdG90eXBlLmFwcGVuZE11bHRpcGxlTmV3bGluZXMpOgogICAgICAgIEhlbHBlciBmb3IgYXBwZW5kaW5nIG11bHRpcGxlIG5ld2xpbmVzLCB0byBzZXQgc29tZSBleHRyYSBzdGF0ZS4KCjIwMTMtMDQtMDQgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNTgzNzE4PiBQcmV0dHkgcHJpbnRpbmcgc2hvdWxkIG5vdCBtb3ZlIGNvbW1lbnRzIHRvIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGxpbmUKCiAgICAgICAgUHJldmlvdXNseSB3ZSByZW1vdmVkIG5ld2xpbmVzIGJlZm9yZSBjb21tZW50cyBpZiB0aGV5IHdlcmUgYWZ0ZXIgYQogICAgICAgIHNlbWljb2xvbi4gVGhpcyB3YXMgaW50ZW5kZWQgdG8ga2VlcCBjb21tZW50cyBvbiB0aGUgc2FtZSBsaW5lIGFzIGNvZGUuCiAgICAgICAgVGhpcyBjb3VsZCBiYWNrZmlyZSBpZiB0aGUgY29tbWVudCB3YXMgcmVhbGx5IG9uIGFjdHVhbGx5IG9uIHRoZSBuZXh0CiAgICAgICAgbGluZS4gU28gYmUgbW9yZSBzcGVjaWZpYywgYW5kIGRvbid0IHJlbW92ZSB0aGUgcHJldmlvdXMgbmV3bGluZSBpZgogICAgICAgIHRoZSBjb21tZW50IGlzIHRoZSBmaXJzdCB0b2tlbiBvbiBhIGxpbmUuCgogICAgICAgIEphdmFTY3JpcHQgVGVzdDoKCiAgICAgICAgICAgIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIHZhciBhOwogICAgICAgICAgICAgIC8vIHRlc3QKICAgICAgICAgICAgfQoKICAgICAgICBDU1MgVGVzdDoKCiAgICAgICAgICAgIGEgewogICAgICAgICAgICAgIGNvbG9yOiByZWQ7CiAgICAgICAgICAgICAgLyogdGVzdCAqLwogICAgICAgICAgICB9CgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvZGVNaXJyb3JGb3JtYXR0ZXJzLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9Gb3JtYXR0ZXIuanM6CiAgICAgICAgKEZvcm1hdHRlci5wcm90b3R5cGUuZm9ybWF0KToKICAgICAgICAoRm9ybWF0dGVyLnByb3RvdHlwZS5faGFuZGxlVG9rZW4pOgoKMjAxMy0wNC0wNSAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM0NzIzMDA+IExheWVycyBpbiBzaWRlYmFyIHBhbmVsIHNob3VsZCB1c2UgaWNvbm9ncmFwaHkKCiAgICAgICAgUmVmcmVzaGluZyB0aGUgbG9vayBvZiB0aGUgTGF5ZXJzIHNpZGViYXIgcGFuZWwgZGF0YSBncmlkIG5vZGVzCiAgICAgICAgdG8gdXNlIGljb25zIHRvIGlkZW50aWZ5IHRoZSBraW5kIG9mIGxheWVycyBwcmVzZW50ZWQgKGVsZW1lbnQsCiAgICAgICAgcHNldWRvLWVsZW1lbnQgb3IgcmVmbGVjdGlvbikuIEFsc28sIHdlIG1hcmsgdGhlIHBzZXVkby1lbGVtZW50CiAgICAgICAgcGFydCBvZiB0aGUgQ1NTIHNlbGVjdG9yIGJ5IGRpc3BsYXlpbmcgaXQgaW4gbGlnaHRlciB0ZXh0IGFzIHdlbGwKICAgICAgICBhcyBzaG93aW5nIGEgIiDRIFJlZmxlY3Rpb24iIGV4dHJhIGxhYmVsIGluIHRoZSBjYXNlIG9mIHJlZmxlY3Rpb25zLgogICAgICAgIEZpbmFsbHksIHdlIGFsc28gdHJpbSB0aGUgdGV4dCBpbiB0aGUgQ1NTIHNlbGVjdG9yIGxhYmVsIGFuZCBzaG9ydGVuCiAgICAgICAgaXQgdG8gbWFrZSByb29tIGZvciB0aGUgZ28tdG8gYXJyb3cgYnV0dG9uIHNob3VsZCBpdCBiZSB2aXNpYmxlCiAgICAgICAgd2hlbiBob3ZlcmluZyB0aGUgZGF0YSBncmlkIG5vZGUuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Qc2V1ZG9FbGVtZW50LnBkZjogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9SZWZsZWN0aW9uLnBkZjogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xheWVyVHJlZURhdGFHcmlkTm9kZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZURhdGFHcmlkTm9kZS5wcm90b3R5cGUuY3JlYXRlQ2VsbENvbnRlbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlRGF0YUdyaWROb2RlLnByb3RvdHlwZS5zZXQgbGF5ZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlRGF0YUdyaWROb2RlLnByb3RvdHlwZS5fY3JlYXRlTm9kZUNlbGxDb250ZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZURhdGFHcmlkTm9kZS5wcm90b3R5cGUuX2dvVG9BcnJvd1dhc0NsaWNrZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9MYXllclRyZWVTaWRlYmFyUGFuZWwuY3NzOgogICAgICAgICgubGF5ZXItdHJlZS5wYW5lbCAuZGF0YS1ncmlkIHRhYmxlLmRhdGEpOgogICAgICAgICgubGF5ZXItdHJlZS5wYW5lbCAuZGF0YS1jb250YWluZXIgdHIpOgogICAgICAgICgubGF5ZXItdHJlZS5wYW5lbCAuZGF0YS1jb250YWluZXIgdGQgPiBkaXYpOgogICAgICAgICgubGF5ZXItdHJlZS5wYW5lbCAuZGF0YS1jb250YWluZXIgLm5hbWUtY29sdW1uKToKICAgICAgICAoLmxheWVyLXRyZWUucGFuZWwgLmRhdGEtY29udGFpbmVyIC5uYW1lLWNvbHVtbiAuaWNvbik6CiAgICAgICAgKC5sYXllci10cmVlLnBhbmVsIC5kYXRhLWNvbnRhaW5lciB0ci5yZWZsZWN0aW9uIC5uYW1lLWNvbHVtbiAuaWNvbik6CiAgICAgICAgKC5sYXllci10cmVlLnBhbmVsIC5kYXRhLWNvbnRhaW5lciB0ci5wc2V1ZG8tZWxlbWVudCAubmFtZS1jb2x1bW4gLmljb24pOgogICAgICAgICgubGF5ZXItdHJlZS5wYW5lbCAuZGF0YS1jb250YWluZXIgLm5hbWUtY29sdW1uIC5sYWJlbCk6CiAgICAgICAgKC5sYXllci10cmVlLnBhbmVsIC5kYXRhLWNvbnRhaW5lciB0cjpob3ZlciAubmFtZS1jb2x1bW4gLmxhYmVsKToKICAgICAgICAoLmxheWVyLXRyZWUucGFuZWwgLmRhdGEtY29udGFpbmVyIC5uYW1lLWNvbHVtbiAucmVmbGVjdGlvbik6CiAgICAgICAgKC5sYXllci10cmVlLnBhbmVsIC5kYXRhLWNvbnRhaW5lciB0ci5zZWxlY3RlZCAubmFtZS1jb2x1bW4gLnJlZmxlY3Rpb24pOgogICAgICAgICgubGF5ZXItdHJlZS5wYW5lbCAuZGF0YS1jb250YWluZXIgLmdvLXRvLWFycm93KToKICAgICAgICAoLmxheWVyLXRyZWUucGFuZWwgLmRhdGEtY29udGFpbmVyIHRyOmhvdmVyIC5nby10by1hcnJvdyk6CgoyMDEzLTA0LTA0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzU3MzE2NT4gUHJlc3NpbmcgRXNjIGluIGEgcmVhZE9ubHkgZWRpdG9yIHNob3VsZCBzdGlsbCBmb2N1cyB0aGUgcXVpY2sgY29uc29sZQoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9FZGl0aW5nU3VwcG9ydC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmlzRXZlbnRUYXJnZXRBbkVkaXRhYmxlRmllbGQpOgoKMjAxMy0wNC0wNCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM1ODAxNTQ+IERPTVRyZWVPdXRsaW5lLmpzOjUwNDogSlMgRVJST1I6IFR5cGVFcnJvcjogJ3RydWUnIGlzIG5vdCBhIGZ1bmN0aW9uIChldmFsdWF0aW5nICd0aGlzLl9jb250ZXh0TWVudUNhbGxiYWNrKGNvbnRleHRNZW51LCBub2RlKScKCiAgICAgICAgRE9NVHJlZU91dGxpbmUgY29uc3RydWN0b3JzIHdlcmUgcGFzc2luZyAzIGJvb2xlYW5zLiBJbiB0aGUgY2FzZSBvZgogICAgICAgIG91dGxpbmVzIGluIHRoZSBDb25zb2xlIGl0IHdhcyBwYXNzaW5nICJ0cnVlIiBleHBlY3RpbmcgdGhhdCB0byBwcm92aWRlCiAgICAgICAgYSAiUmV2ZWFsIEVsZW1lbnQiIGNvbnRleHQgbWVudSBpdGVtLCBidXQgdGhhdCBtaXMtbWF0Y2hlZCB0aGUKICAgICAgICBjb25zdHJ1Y3Rvci4gRml4IHRoZSBlcnJvciwgYW5kIGFkZCBiYWNrIHRoZSBjb250ZXh0IG1lbnUgaXRlbS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZU91dGxpbmUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlT3V0bGluZSk6CiAgICAgICAgVXBkYXRlIHBhcmFtZXRlcnMuCgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZU91dGxpbmUucHJvdG90eXBlLnJldmVhbEVsZW1lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZU91dGxpbmUucHJvdG90eXBlLl9wb3B1bGF0ZUNvbnRleHRNZW51KToKICAgICAgICBBcHBlbmQgYSAiUmV2ZWFsIEVsZW1lbnQiIGNvbnRleHQgbWVudSBpdGVtIGlmIG5lZWRlZC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL09iamVjdFByb3BlcnRpZXNTZWN0aW9uLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUuX2NvbnRleHRNZW51RXZlbnRGaXJlZCk6CiAgICAgICAgVXBkYXRlIHRoZSBzdHJpbmcuIFdlIGRvbid0IGhhdmUgYSBwYW5lbCwgdGhlIG5hdiBiYXIgbGFiZWxzIHRoaXMgIkRPTSBUcmVlIi4KCjIwMTMtMDQtMDQgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgRVJST1IgVVJJRXJyb3I6IFVSSSBlcnJvciBpbiBGcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUucmVzb3VyY2VGb3JTY3JpcHQKCiAgICAgICAgZGVjb2RlVVJJIGNhbiB0aHJvdyBhIFVSSUVycm9yLCBlLmcuIGRlY29kZVVSSSgiJSIpLiBQcm90ZWN0IGFnYWluc3QKICAgICAgICB0aGlzIGluIEZyYW1lUmVzb3VyY2VNYW5hZ2VyLiBUaGlzIG1ldGhvZCBpcyBtZWFudCB0byB3b3JrIHdpdGggYm90aAogICAgICAgIGFscmVhZHkgZGVjb2RlZCBhbmQgZW5jb2RlZCBVUklzLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9GcmFtZVJlc291cmNlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5yZXNvdXJjZUZvclNjcmlwdCk6CiAgICAgICAgV3JhcCB0aGUgY29kZSB3aXRoIGRlY29kZVVSSSBpbiBhIHRyeS9jYXRjaC4KCjIwMTMtMDQtMDQgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBGaXggb3BlbmluZyB0aGUgV2ViIEluc3BlY3RvciBpbiBQcm9kdWN0aW9uIGJ1aWxkcy4KCiAgICAgICAgQSBmdW5jdGlvbiBkZWNsYXJhdGlvbiB3YXMgcHVzaGVkIHVwIG5leHQgdG8gYSBwYXJlbnRoZXNpcyB3aGVuIG1pbmlmaWVkLgogICAgICAgIFRoaXMgbWFkZSB0aGUgcGFyc2VyIHRoaW5rIHdlIHdlcmUgdHJ5aW5nIHRvIG1ha2UgYSBjYWxsLiBBZGRpbmcgYSBzZW1pY29sb24KICAgICAgICBpcyBhbGwgd2UgbmVlZCB0byBtYWtlIHRoaW5ncyB3b3JrIGFnYWluIHdoZW4gY29tYmluZWQgYW5kIG1pbmlmaWVkLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM1Nzc1OTE+IFJFR1JFU1NJT04gKHI1MDEyMC01MDEyNCk6IENhbid0IG9wZW4gV2ViIEluc3BlY3RvcgoKICAgICAgICBSZXZpZXdlZCBieSBSaWNreSBNb25kZWxsby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01JTUVUeXBlVXRpbGl0aWVzLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuZmlsZUV4dGVuc2lvbkZvclVSTCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5taW1lVHlwZUZvckZpbGVFeHRlbnNpb24pOgoKMjAxMy0wNC0wNCAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM1NzA4MjE+IFJlYXNvbnMgZm9yIGNvbXBvc2l0aW5nIHBvcG92ZXIgc2hvdWxkIGFkanVzdCBwb3NpdGlvbiBpZiBpbnNwZWN0b3Igd2luZG93IHJlc2l6ZXMKCiAgICAgICAgQWxsb3cgZm9yIHBvcG92ZXJzIHRvIGhhdmUgdGhlaXIgdGFyZ2V0IGZyYW1lIHVwZGF0ZWQgaW5kZXBlbmRlbnRseQogICAgICAgIG9mIHRoZWlyIGNvbnRlbnQgc28gd2UgY2FuIGVmZmljaWVudGx5IHVwZGF0ZSB0aGVpciBwb3NpdGlvbiBhcyB0aGUKICAgICAgICBlbGVtZW50IGZvciB3aGljaCBhIHBvcG92ZXIgaXMgcHJlc2VudGVkIGNoYW5nZXMgcG9zaXRpb24uIE5vdyB0aGF0CiAgICAgICAgd2UgaGF2ZSB0aGlzIHN1cHBvcnQsIHdlIHVwZGF0ZSB0aGUgcG9wb3ZlciBwcmVzZW50YXRpb24gd2hlbiB0aGUKICAgICAgICB3aW5kb3cgc2l6ZSBjaGFuZ2VzIGFuZCBhIHBvcG92ZXIgaXMgdmlzaWJsZSBpbiB0aGUgTGF5ZXJzIHNpZGViYXIKICAgICAgICBwYW5lbC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnJlYWtwb2ludC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlLl9zaG93RWRpdEJyZWFrcG9pbnRQb3BvdmVyKToKICAgICAgICBBZG9wdCB0aGUgdXBkYXRlZCBQb3BvdmVyIEFQSS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xheWVyVHJlZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZVNpZGViYXJQYW5lbCk6CiAgICAgICAgVHJhY2sgd2luZG93IHJlc2l6ZSBldmVudHMgc28gdGhhdCB3ZSBtYXkgdXBkYXRlIHRoZSBwb3BvdmVyCiAgICAgICAgcHJlc2VudGF0aW9uIGFzIGl0IGNoYW5nZXMuCgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fd2luZG93UmVzaXplZCk6CiAgICAgICAgVXBkYXRlIHRoZSBwb3BvdmVyIHByZXNlbnRhdGlvbiBpbiBjYXNlIHRoZXJlIGlzIGEgdmlzaWJsZSBwb3BvdmVyLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3Nob3dQb3BvdmVyRm9yU2VsZWN0ZWROb2RlKToKICAgICAgICBVc2UgdGhlIG5ldyBfdXBkYXRlUG9wb3ZlckZvclNlbGVjdGVkTm9kZSgpIG1ldGhvZCBhcyB0aGUgY2FsbGJhY2suCgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdXBkYXRlUG9wb3ZlckZvclNlbGVjdGVkTm9kZSk6CiAgICAgICAgQWRvcHQgdGhlIHVwZGF0ZWQgUG9wb3ZlciBBUEkgYW5kIG9ubHkgc2V0IHRoZSBwb3BvdmVyJ3MgY29udGVudAogICAgICAgIHNob3VsZCBvbmUgYmUgcHJvdmlkZWQsIGllLiB3aGVuIHRoZSBtZXRob2QgaXMgY2FsbGVkIGFzIGNhbGxiYWNrCiAgICAgICAgdG8gX2NvbnRlbnRGb3JQb3BvdmVyKCkuCgogICAgICAgICogVXNlckludGVyZmFjZS9Qb3BvdmVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUG9wb3Zlcik6CiAgICAgICAgTmV3IHByaXZhdGUgaXZhcnMgdG8gdHJhY2sgc29tZSBwb3BvdmVyIHByZXNlbnRhdGlvbiBzdGF0ZS4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Qb3BvdmVyLnByb3RvdHlwZS5nZXQgdmlzaWJsZSk6CiAgICAgICAgTmV3IHB1YmxpYyBwcm9wZXJ0eSB0byBsZXQgY2xpZW50cyBjaGVjayBvbiBwb3BvdmVyIHZpc2liaWxpdHkuCgogICAgICAgIChXZWJJbnNwZWN0b3IuUG9wb3Zlci5wcm90b3R5cGUuc2V0IGNvbnRlbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUG9wb3Zlci5wcm90b3R5cGUucHJlc2VudCk6CiAgICAgICAgTmV3IHB1YmxpYyBwcm9wZXJ0eSBhbmQgbWV0aG9kIHNpZ25hdHVyZSB0byBsZXQgY2xpZW50cyBzZXQgdGhlCiAgICAgICAgY29udGVudCBvZiB0aGUgcG9wb3ZlciBpbmRlcGVuZGVudGx5IG9mIGl0cyBwcmVzZW50YXRpb24gYXR0cmlidXRlcy4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Qb3BvdmVyLnByb3RvdHlwZS5fdXBkYXRlKToKICAgICAgICBOZXcgcHJpdmF0ZSBtZXRob2QgY2FsbGVkIHRvIHVwZGF0ZSB0aGUgcHJlc2VudGF0aW9uIHN0YXRlCiAgICAgICAgb2YgdGhlIHBvcG92ZXIgYW5kIGJhc2ljYWxseSB0aGUgb2xkIGNvbnRlbnQgb2YgdGhlIHByZXNlbnQoKQogICAgICAgIG1ldGhvZCB3aXRoIHVzZSBvZiB0aGUgcHJlc2VudGF0aW9uIGl2YXJzIGluc3RlYWQgb2YgbWV0aG9kCiAgICAgICAgYXJndW1lbnRzIGFuZCBzb21lIG9wdGltaXphdGlvbnMgdG8gY2hlY2sgdGhhdCB3ZSBvbmx5IHVwZGF0ZQogICAgICAgIHRoZSBjb250ZW50IGFuZCBkcmF3IHRoZSBjYW52YXMgYmFja2dyb3VuZCBzaG91bGQgdGhleSBoYXZlCiAgICAgICAgY2hhbmdlZC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9zaG93UG9wb3Zlcik6CiAgICAgICAgQWRvcHQgdGhlIHVwZGF0ZWQgUG9wb3ZlciBBUEkuCgoyMDEzLTA0LTA0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSBDb250ZW50Vmlld0NvbnRhaW5lciByb2J1c3QgYWdhaW5zdCBudWxsL3VuZGVmaW5lZCBlbGVtZW50cyBpbiBjb250ZW50Vmlldy5zY3JvbGxhYmxlRWxlbWVudHMuCgogICAgICAgIERhdGFiYXNlVGFibGVDb250ZW50VmlldyBjYW4gcmV0dXJuIGEgbnVsbCBlbGVtZW50IHdoZW4gdGhlIHRhYmxlIGlzIGVtcHR5LCBhbmQgdGhpcyBjYXVzZXMgZXhjZXB0aW9ucy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRWaWV3Q29udGFpbmVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdDb250YWluZXIucHJvdG90eXBlLl9zYXZlU2Nyb2xsUG9zaXRpb25zRm9yQ29udGVudFZpZXcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdDb250YWluZXIucHJvdG90eXBlLl9yZXN0b3JlU2Nyb2xsUG9zaXRpb25zRm9yQ29udGVudFZpZXcpOgoKMjAxMy0wNC0wNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIERvbid0IHVzZSBsb2NhbFN0b3JhZ2UgdG8gY2FjaGUgZ2VuZXJhdGVkIGltYWdlcyBpbiB0aGUgV2ViIEluc3BlY3Rvci4KCiAgICAgICAgVGhpcyBtaWdyYXRlcyBJbWFnZVV0aWxpdGllcyBvZmYgbG9jYWxTdG9yYWdlIHRvIGEgU1FMIGRhdGFiYXNlLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM1NzQyMjY+IFdlYiBJbnNwZWN0b3IgYnJlYWtzIHdoZW4gZmlsZTovLy8gbG9jYWxTdG9yYWdlIGhpdHMgNU1CIGxpbWl0CgogICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IEFudG9pbmUgUXVpbnQuCgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZVV0aWxpdGllcy5qczoKICAgICAgICAoX2RldmljZVBpeGVsUmF0aW9DaGFuZ2VkKToKICAgICAgICAoX3JlZ2lzdGVyR2VuZXJhdGVkSW1hZ2VVcGRhdGVGdW5jdGlvbik6CiAgICAgICAgKF9sb2dTUUxFcnJvcik6CiAgICAgICAgKF9wcmVmZXRjaENhY2hlZEltYWdlc0FuZFVwZGF0ZS5jb21wbGV0ZSk6CiAgICAgICAgKF9wcmVmZXRjaENhY2hlZEltYWdlc0FuZFVwZGF0ZS5fZ2VuZXJhdGVkSW1hZ2VDYWNoZURhdGFiYXNlLnRyYW5zYWN0aW9uKToKICAgICAgICAoX3ByZWZldGNoQ2FjaGVkSW1hZ2VzQW5kVXBkYXRlKToKICAgICAgICAocmVzdG9yZUltYWdlRnJvbVN0b3JhZ2UpOgogICAgICAgIChnZW5lcmF0ZUNvbG9yZWRJbWFnZXNGb3JDU1MucmVzdG9yZUltYWdlcyk6CiAgICAgICAgKGdlbmVyYXRlQ29sb3JlZEltYWdlc0ZvckNTUy5yZXN0b3JlSW1hZ2VzLnJlc3RvcmVBY3RpdmVJbWFnZXMpOgogICAgICAgIChnZW5lcmF0ZUNvbG9yZWRJbWFnZXNGb3JDU1MucmVzdG9yZUltYWdlKToKICAgICAgICAoZ2VuZXJhdGVDb2xvcmVkSW1hZ2VzRm9yQ1NTLnVwZGF0ZSk6CiAgICAgICAgKGdlbmVyYXRlQ29sb3JlZEltYWdlc0ZvckNTUy5nZW5lcmF0ZUltYWdlKToKICAgICAgICAoZ2VuZXJhdGVFbWJvc3NlZEltYWdlcyk6CiAgICAgICAgKGdlbmVyYXRlRW1ib3NzZWRJbWFnZXMuZ2VuZXJhdGVJbWFnZXMpOgogICAgICAgIChnZW5lcmF0ZUVtYm9zc2VkSW1hZ2VzLmdlbmVyYXRlSW1hZ2VzLmdlbmVyYXRlQWN0aXZlSW1hZ2VzKToKCjIwMTMtMDQtMDQgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNTcwNzc5PiBSZWFzb25zIGZvciBjb21wb3NpdGluZyBwb3BvdmVyIGluIGxheWVycyBzaWRlYmFyIGlzIHBvb3JseSBhbGlnbmVkIHdpdGggc2VsZWN0ZWQgZGF0YWdyaWQgcm93CgogICAgICAgIEFsc28gYXBwbHkgcGFkZGluZyB0byB0aGUgdGFyZ2V0IGZyYW1lIHNpemUsIG5vdCBqdXN0IHRoZSBvcmlnaW4sIGFuZAogICAgICAgIGFkanVzdCB0aGUgcGFkZGluZyBkb3duIHRvIDIgdG8gbWF0Y2ggdGhlIHBhZGRpbmcgdXNlZCBmb3IgYnJlYWtwb2ludHMuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xheWVyVHJlZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3Nob3dQb3BvdmVyRm9yU2VsZWN0ZWROb2RlKToKCjIwMTMtMDQtMDMgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNTczNzk4PiBSRUdSRVNTSU9OOiBDb2RlTWlycm9yIGVkaXRvciBkb2Vzbid0IHJlZnJlc2ggd2hlbiBzcGxpdCBjb25zb2xlIGlzIGhpZGRlbiBhbmQgbW9yZSBvZiB0aGUgY29udGVudCB2aWV3IGlzIHZpc2libGUKCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5jb25zb2xlTG9nVmlzaWJpbGl0eUNoYW5nZWQpOgogICAgICAgIFRyaWdnZXIgYSBEaWRSZXNpemUgZXZlbnQgYmVjYXVzZSB0aGUgY29uc29sZSB3b3VsZCBoYXZlIGNoYW5nZWQKICAgICAgICBpdHMgdmlzaWJsZSBzaXplLgoKMjAxMy0wNC0wMyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM0NzQ3Mzk+IFJlc3BlY3Qgc291cmNlc0NvbnRlbnQgaW4gU291cmNlTWFwcyBmb3IgU291cmNlTWFwUmVzb3VyY2VzCgogICAgICAgIElmIHRoZSByZXNvdXJjZSdzIGNvbnRlbnRzIGFyZSBhdmFpbGFibGUgdmlhIHRoZSBTb3VyY2UgTWFwJ3MKICAgICAgICBzb3VyY2VzQ29udGVudCBhcnJheSwgdGhlbiB1c2UgdGhlbS4gT3RoZXJ3aXNlLCBnbyB0aGUgbm9ybWFsIHBhdGggb2YKICAgICAgICBkb3dubG9hZGluZyB0aGUgcmVzb3VyY2UuIEJlY2F1c2UgbmVpdGhlciBwYXRoIGNhbiBnZXQgdGhlIE1JTUUgdHlwZSBvZgogICAgICAgIHRoZSByZXNvdXJjZSByaWdodCBub3csIGZhbGxiYWNrIHRvIHRyeWluZyB0byBkZXRlcm1pbmUgdGhlIE1JTUUgdHlwZQogICAgICAgIGZyb20gdGhlIHJlc291cmNlJ3MgZmlsZSBleHRlbnNpb24uCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTUlNRVR5cGVVdGlsaXRpZXMuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuZmlsZUV4dGVuc2lvbkZvclVSTCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5taW1lVHlwZUZvckZpbGVFeHRlbnNpb24pOgogICAgICAgIEhlbHBlcnMgZm9yIGV4dGVuc2lvbnMgYW5kIE1JTUUgdHlwZXMuCgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VNYXBSZXNvdXJjZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcFJlc291cmNlLnByb3RvdHlwZS5fcmVxdWVzdFJlc291cmNlQXN5bmNocm9ub3VzbHkpOgogICAgICAgIENoZWNrIGZvciBlbWJlZGRlZCBzb3VyY2VzQ29udGVudCBjb250ZW50LCBhbmQgZGV0ZXJtaW5lIHRoZSBNSU1FIHR5cGUKICAgICAgICBmcm9tIHRoZSBmaWxlIGV4dGVuc2lvbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlLmpzOgogICAgICAgIEJlIHN1cmUgdG8gZ2l2ZSB0eXBlcyB0byBzb21lIG9mIHRoZSBNSU1FIHR5cGVzIGZvciBDb2RlTWlycm9yIHN1cHBvcnRlZAogICAgICAgIHR5cGVzLCB3aGljaCBtYXkgc2hvdyB1cCBhcyBTb3VyY2VNYXAgc291cmNlcy4KCjIwMTMtMDQtMDMgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgRVJST1I6IGNvbnNvbGUuYXNzZXJ0KGFsdGVybmF0ZUltYWdlKSBpbiBUb2dnbGVCdXR0b25OYXZpZ2F0aW9uSXRlbS5qczo0CgogICAgICAgIFJlbW92ZSBhc3NlcnQgdGhhdCB0aGVyZSBtdXN0IGJlIGFuIGFsdGVybmF0ZUltYWdlLiBUaGUgdW5kb2NrIGJ1dHRvbgogICAgICAgIGRvZXMgbm90IGhhdmUgYW4gYWx0ZXJuYXRlIGltYWdlLCBhbmQgdGhpcyBhc3NlcnQgd291bGQgdHJpZ2dlciBlYWNoCiAgICAgICAgdGltZSB0aGUgaW5zcGVjdG9yIHdhcyBvcGVuZWQuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RvZ2dsZUJ1dHRvbk5hdmlnYXRpb25JdGVtLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVG9nZ2xlQnV0dG9uTmF2aWdhdGlvbkl0ZW0pOgoKMjAxMy0wNC0wMyAgSmVzc2llIEJlcmxpbiAgPGpiZXJsaW5AYXBwbGUuY29tPgoKICAgICAgICBSYW4gdXBkYXRlLXNhZmFyaS1sb2NhbGl6YWJsZS1zdHJpbmdzLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKCjIwMTMtMDQtMDMgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgc3dpdGNoIHRvIGFjdGl2YXRlIC8gZGVhY3RpdmF0ZSBhbGwgYnJlYWtwb2ludHMuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTMyOTA1Nz4gUkVHUkVTU0lPTiAoU2FmYXJpIDYpOiBTd2l0Y2ggdG8gYWN0aXZhdGUgLyBkZWFjdGl2YXRlIGFsbAogICAgICAgIGJyZWFrcG9pbnRzIGlzIG1pc3NpbmcgKGRlYnVnZ2VyKQoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiBVcGRhdGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9CcmVha3BvaW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUuZ2V0IHJlc29sdmVkKToKICAgICAgICBDaGVjayBEZWJ1Z2dlck1hbmFnZXIuYnJlYWtwb2ludHNFbmFibGVkLiBUaGlzIGlzIHRoZSBlYXNpZXN0IGFwcHJvYWNoIHRvIGdldCB0aGUgZ3JheQogICAgICAgIGljb25zIGZvciBicmVha3BvaW50cyBpbiBhbGwgdGhlIHJpZ2h0IHBsYWNlcyB3aXRob3V0IGFkZGluZyBjaGVja3MgYXQgYWxsIGNhbGwgc2l0ZXMuCgogICAgICAgICogVXNlckludGVyZmFjZS9EZWJ1Z2dlck1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXQgYnJlYWtwb2ludHNFbmFibGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUuc2V0IGJyZWFrcG9pbnRzRW5hYmxlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLl91cGRhdGVCcmVha09uRXhjZXB0aW9uc1N0YXRlKToKICAgICAgICBDaGVjayB0aGUgYnJlYWtwb2ludHNFbmFibGVkIHNldHRpbmcgd2hlbiB1cGRhdGluZyB0aGUgYnJlYWsgb24gZXhjZXB0aW9uIHN0YXRlLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGVidWdnZXJTaWRlYmFyUGFuZWwuY3NzOgogICAgICAgICguc2lkZWJhciA+IC5wYW5lbC5kZWJ1Z2dlciAuYnJlYWtwb2ludC10b2dnbGUpOiBBZGRlZC4KICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuZGVidWdnZXIgLmJyZWFrcG9pbnQtdG9nZ2xlLmVuYWJsZWQpOiBBZGRlZC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RlYnVnZ2VyU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJTaWRlYmFyUGFuZWwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9icmVha3BvaW50c1RvZ2dsZUJ1dHRvbkNsaWNrZWQpOgogICAgICAgIEFkZGVkIGEgYnV0dG9uIHRvIHRoZSBCcmVha3BvaW50cyBzZWN0aW9uIGhlYWRlci4KCjIwMTMtMDQtMDMgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNTY2MDgyPiBET01UcmVlTWFuYWdlci5oaWdobGlnaHRSZWN0KCkgZG9lcyBub3QgdGFrZSBzY3JvbGxpbmcgaW50byBhY2NvdW50CgogICAgICAgIEFkZCBzdXBwb3J0IGZvciB0aGUgbmV3ICJ1c2VQYWdlQ29vcmRpbmF0ZXMiIGFyZ3VtZW50IHRvIERPTS5oaWdobGlnaHRSZWN0KCkKICAgICAgICBhbmQgc2V0IGl0IHRvIHRydWUgd2hlbiBoaWdobGlnaHRpbmcgdGhlIGJvdW5kcyBvZiBnZW5lcmF0ZWQgbGF5ZXJzLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLnByb3RvdHlwZS5oaWdobGlnaHRSZWN0KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9MYXllclRyZWVTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9oaWdobGlnaHRTZWxlY3RlZE5vZGUpOgoKMjAxMy0wNC0wMyAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMxMDUyMjQ+IFJlZmxlY3QgZGF0YSBncmlkIHRpbWVsaW5lIGZpbHRlcnMgaW4gdGhlIFRpbWVsaW5lIG92ZXJ2aWV3CgogICAgICAgIEFwcGx5IHRoZSBmaWx0ZXJpbmcgb2YgcmVjb3JkcyBkaXJlY3RseSBpbnRvIHRoZSB0aW1lbGluZU92ZXJ2aWV3UmVjb3Jkc1dpdGhUeXBlKCkKICAgICAgICBtZXRob2Qgd2hpY2ggaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBUaW1lbGluZU92ZXJ2aWV3IHRvIGdhdGhlciBkYXRhLiBBZGRpdGlvbmFsbHksCiAgICAgICAgd2Ugbm93IHVwZGF0ZSB0aGUgY29udGVudCBvZiB0aGUgVGltZWxpbmVPdmVydmlldyB3aGVuIHRoZSBmaWx0ZXJzIGFwcGxpZWQgdG8gb25lIG9mCiAgICAgICAgdGhlIGRhdGEgZ3JpZHMgY2hhbmdlIHN1Y2ggdGhhdCB0aGUgdGltZWxpbmUgb3ZlcnZpZXcgaXMga2VwdCBpbiBzeW5jLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZXNDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS50aW1lbGluZU92ZXJ2aWV3UmVjb3Jkc1dpdGhUeXBlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fZGF0YUdyaWRGaWx0ZXJzRGlkQ2hhbmdlKToKCjIwMTMtMDQtMDMgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNTU3MzczPiBMYXllcnMgcGFuZWwgZG9lc24ndCBrbm93IGhvdyB0byBhY2NvdW50IGZvciBhbm9ueW1vdXMgbGF5ZXJzCgogICAgICAgIEhhbmRsZSB0aGUgbmV3ICJpc0Fub255bW91cyIgcHJvcGVydHkgb24gdGhlIHByb3RvY29sIGFuZCB0aGUgcmVuYW1lZAogICAgICAgICJwc2V1ZG9FbGVtZW50IiBwcm9wZXJ0eS4gV2UgYWxzbyBmb3JtYXQgdXNlIG9mIHBzZXVkby1lbGVtZW50cyBiZXR0ZXIKICAgICAgICBhbmQgaGFuZGxlIHRoZSBzb21ld2hhdCB1bmxpa2VseSBwb3NzaWJpbGl0eSB0aGF0IHdlIHdvdWxkIGRlYWwgd2l0aAogICAgICAgIGxheWVycyB3aXRoIHVua25vd24gbm9kZXMuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6CiAgICAgICAgTmV3IGxvY2FsaXplZCBzdHJpbmcgZm9yICJVbmtub3duIG5vZGUiLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTGF5ZXJUcmVlRGF0YUdyaWROb2RlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlRGF0YUdyaWROb2RlLnByb3RvdHlwZS5jcmVhdGVDZWxsQ29udGVudCk6CiAgICAgICAgVXBkYXRlIHRoZSAibm8tbm9kZSIgY2xhc3Mgb24gdGhlIGRhdGEgZ3JpZCBub2RlJ3MgZWxlbWVudC4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVEYXRhR3JpZE5vZGUucHJvdG90eXBlLnNldCBsYXllcik6CiAgICAgICAgU2V0IGFuICJVbmtub3duIG5vZGUiIGxhYmVsIGZvciBsYXllcnMgd2l0aCBhbiB1bmtub3duIG5vZGUsIHdoaWNoCiAgICAgICAgc2hvdWxkbid0IHJlYWxseSBoYXBwZW4sIGJ1dCB3ZSBzaG91bGQgYmUgcHJlcGFyZWQgZm9yIHRoZSBwb3NzaWJpbGl0eS4KICAgICAgICBTZWVpbmcgdGhpcyBtZXNzYWdlIG1lYW5zIHRoYXQgdGhlIGFnZW50IHNob3VsZCBiZSB0YXVnaHQgaG93IHRvIGRlYWwKICAgICAgICB3aXRoIGEgcHJvYmFibHkgZWRnZSBjYXNlLiBXZSBhbHNvIHVwZGF0ZSB0aGUgY29kZSB0byBkZWFsIHdpdGggdGhlCiAgICAgICAgInBzZXVkb0VsZW1lbnQiIHByb3BlcnR5IGluc3RlYWQgb2YgInBzZXVkb0NsYXNzIiB0byBtYXRjaCB0aGUgcHJvdG9jb2wKICAgICAgICBjaGFuZ2UuIEZpbmFsbHksIHdlIGFsc28gdXBkYXRlIHRoZSAibm8tbm9kZSIgY2xhc3Mgb24gdGhlIGRhdGEgZ3JpZCdzIG5vZGUuCgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlRGF0YUdyaWROb2RlLnByb3RvdHlwZS5fdXBkYXRlRE9NTm9kZUF2YWlsYWJpbGl0eSk6CiAgICAgICAgTmV3IG1ldGhvZCB0byB1cGRhdGUgdGhlICJuby1ub2RlIiBjbGFzcyBvbiB0aGUgZGF0YSBncmlkJ3Mgbm9kZSBzbwogICAgICAgIHRoYXQgd2UgbWF5IGhpZGUgdGhlIGdvLXRvIGFycm93IGJ1dHRvbiBpbiB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcwogICAgICAgIG5vIGFzc29jaWF0ZWQgbm9kZS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xheWVyVHJlZVNpZGViYXJQYW5lbC5jc3M6CiAgICAgICAgKC5sYXllci10cmVlLnBhbmVsIC5kYXRhLWdyaWQgdHIubm8tbm9kZSAuZ28tdG8tYXJyb3cpOgogICAgICAgIEhpZGUgdGhlIGdvLXRvIGFycm93IGJ1dHRvbiBpbiB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBubyBhc3NvY2lhdGVkIG5vZGUuCgogICAgICAgICogVXNlckludGVyZmFjZS9MYXllclRyZWVTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9oaWdobGlnaHRTZWxlY3RlZE5vZGUpOgogICAgICAgIEFsc28gdXNlIGhpZ2hsaWdodFJlY3QoKSBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgbGF5ZXIgaXMgYW5vbnltb3VzLgoKMjAxMy0wNC0wMiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM1NDg0NzA+IFJFR1JFU1NJT046IFdlYiBpbnNwZWN0b3IgaHVuZyBhZnRlciBzZWFyY2hpbmcgZm9yICJzd2YiCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fc2Nyb2xsSW50b1ZpZXdDZW50ZXJlZCk6CiAgICAgICAgQmUgbW9yZSBjYXJlZnVsIHByb3ZpZGluZyBhIGNlbnRlciBtYXJnaW4gd2hlbiB0aGUgdGV4dCBzaXplIGFuZCBlZGl0b3IKICAgICAgICBoZWlnaHQgY2FuIGJlIGZyYWN0aW9uYWwuIElmIHRoZSBtYXJnaW4gaXMgZ3JlYXRlciB0aGFuIGhhbGYgdGhlIHNpemUgb2YKICAgICAgICB0aGUgZWRpdG9yLCBDb2RlTWlycm9yIGdldHMgc3R1Y2sgaW4gYW4gaW5maW5pdGUgbG9vcC4KCjIwMTMtMDQtMDIgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgRVJST1I6IFR5cGVFcnJvcjogJ3VuZGVmaW5lZCcgaXMgbm90IGFuIG9iamVjdCAoZXZhbHVhdGluZyAndGhpcy5fcHJvZmlsZVZpZXcuc2hvd1RpbWVBc1BlcmNlbnQudmFsdWUnKQoKICAgICAgICBXaGVuIHNlbGVjdGluZyBhIENTUyBQcm9maWxlLCBkaXNwbGF5UHJvZmlsZSBjb3VsZCB0cmlnZ2VyIGZyb20gdGhlCiAgICAgICAgc3VwZXJjbGFzcyBjb25zdHJ1Y3RvciBiZWZvcmUgdGhlIHNob3dUaW1lQXNQZXJjZW50IFNldHRpbmcgd2FzCiAgICAgICAgaW5pdGlhbGl6ZWQsIGNhdXNpbmcgdGhpcyBlcnJvci4gUHJvZmlsZVZpZXcncyBhcmUgYXNzdW1lZCB0byBoYXZlCiAgICAgICAgdGhpcyBwcm9wZXJ0eSwgYW5kIHRoZSBQcm9maWxlVmlldyBjb25zdHJ1Y3RvciBoYWQgYW4gdW51c2VkCiAgICAgICAgcGFyYW1ldGVyLCB3aGljaCBsb29rcyBsaWtlIGl0IHdhcyBpbnRlbmRlZCBmb3IgdGhpcyBwdXJwb3NlLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTZWxlY3RvclByb2ZpbGVWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU2VsZWN0b3JQcm9maWxlVmlldyk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0phdmFTY3JpcHRQcm9maWxlVmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRQcm9maWxlVmlldyk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Byb2ZpbGVWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZVZpZXcpOgoKMjAxMy0wNC0wMiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFVwZGF0ZSB0b29sYmFyIGxheW91dCBmb3IgcmVjZW50IGZsZXggYm94IGNoYW5nZXMuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzU1NjAyND4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVG9vbGJhci5jc3M6CiAgICAgICAgKC50b29sYmFyIC5pdGVtLXNlY3Rpb24pOiBBZGRlZCBtaW4td2lkdGg6IC13ZWJraXQtbWluLWNvbnRlbnQuCiAgICAgICAgbWluLXdpZHRoIG5vdyBkZWZhdWx0cyB0byAwLCBidXQgd2UgbmVlZCB0aGUgc2VjdGlvbnMgdG8gc3RvcCBhdCB0aGUKICAgICAgICBjb250ZW50IHNpemUgc28gdGhlIEphdmFTY3JpcHQgbGF5b3V0IGZ1bmN0aW9uIGNhbiBkbyB0aGUgcmlnaHQgdGhpbmcuCgoyMDEzLTA0LTAyICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzU0NTI1Nj4gQXV0b21hdGljIHNlbGVjdGlvbiBvZiBhIENTUyBwcm9maWxlIHVwb24gZmluaXNoaW5nIHJlY29yZGluZyBmYWlscyB0byBzaG93IGFueSBjb250ZW50CgogICAgICAgIE1ha2Ugc3VyZSB3ZSBzZXQgdGhlICJzaG93QXNUaW1lUGVyY2VudCIgcHJvcGVydHkgYmVmb3JlIGNhbGxpbmcgc3VwZXIgc2luY2UKICAgICAgICBpdCBtYXkgYmUgdXNlZCBieSB0aGUgZ2VuZXJhdGVkIFdlYkluc3BlY3Rvci5DU1NTZWxlY3RvckRhdGFHcmlkTm9kZSBpbiAKICAgICAgICBkaXNwbGF5UHJvZmlsZSgpIHdoaWNoIHdvdWxkIGJlIGNhbGxlZCBpbiB0aGUgc3VwZXIgY2FsbCBpbiB0aGUgY2FzZSB3aGVyZQogICAgICAgIHRoZSB2aWV3IGlzIGNyZWF0ZWQgYXMgdGhlIHByb2ZpbGUgZmluaXNoZXMgcmVjb3JkaW5nLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTZWxlY3RvclByb2ZpbGVWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU2VsZWN0b3JQcm9maWxlVmlldyk6CgoyMDEzLTA0LTAxICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IHRoZSBpY29ucyBmb3IgdGhlIGV4Y2VwdGlvbiBicmVha3BvaW50cy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNTUyMzI2PiBSRUdSRVNTSU9OOiBFeGNlcHRpb24gYnJlYWtwb2ludHMgYXJlIG1pc3NpbmcgY3VzdG9tIGljb25zCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RlYnVnZ2VyU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJTaWRlYmFyUGFuZWwuRXhjZXB0aW9uSWNvblN0eWxlQ2xhc3NOYW1lKTogQWRkZWQuCiAgICAgICAgVGhpcyBwcm9wZXJ0eSB3YXMgZXhwZWN0ZWQgdG8gZXhpc3QgYnV0IGdvdCByZW1vdmVkIGF0IHNvbWUgcG9pbnQuCiAgICAgICAgQnJlYWtwb2ludFRyZWVFbGVtZW50IHByb3BlcnR5IGhhbmRsZWQgdW5kZWZpbmVkIGFuZCB1c2VkIHRoZSBnZW5lcmljIGljb24uCgoyMDEzLTA0LTAxICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQ29tcHJlc3NlZCBQTkdzIHdpdGggcG5nY3J1c2ggYW5kIGZ1cnRoZXIgcmVkdWNlZCB0aGUgc2l6ZSBvZiBzb21lIFBERnMgYnkgcmUtZXhwb3J0aW5nIHRoZW0uIFJlbW92ZWQgc29tZSB1bnVzZWQgaW1hZ2VzIHRvby4KCiAgICAgICAgVGhpcyBnb2VzIGZyb20gMi4xIE1CIG9mIGltYWdlcyBkb3duIHRvIDEuMiBNQi4KCiAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0FwcGxpY2F0aW9uQ2FjaGUucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvQXBwbGljYXRpb25DYWNoZUAyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9BcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3QucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0QDJ4LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0JyZWFrcG9pbnQucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvQnJlYWtwb2ludEAyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9CcmVha3BvaW50SW5hY3RpdmUucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvQnJlYWtwb2ludEluYWN0aXZlQDJ4LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0NsaXBwaW5nR2VuZXJpYy5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9DbGlwcGluZ0dlbmVyaWNAMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvQ2xpcHBpbmdKUy5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9DbGlwcGluZ0pTQDJ4LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0Nsb3NlLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0NvbG9ycy5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Db2xvcnNAMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvQ29va2llLnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0Nvb2tpZUAyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Dcm9zc2hhaXIucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRE9NQ2hhcmFjdGVyRGF0YS5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9ET01Db21tZW50LnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RPTURvY3VtZW50LnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RPTURvY3VtZW50VHlwZS5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9ET01FbGVtZW50LnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RPTU5vZGUucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRE9NVGV4dE5vZGUucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRE9NVHJlZS5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9EYXRhYmFzZS5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9EYXRhYmFzZUAyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9EYXRhYmFzZVRhYmxlLnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RhdGFiYXNlVGFibGVAMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRGlzY2xvc3VyZVRyaWFuZ2xlU21hbGxDbG9zZWQucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRGlzY2xvc3VyZVRyaWFuZ2xlU21hbGxPcGVuLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RvY2tCb3R0b20ucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRG9ja1JpZ2h0LnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RvY3VtZW50Q1NTLnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RvY3VtZW50Q1NTQDJ4LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RvY3VtZW50Rm9udC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Eb2N1bWVudEZvbnRAMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRG9jdW1lbnRHZW5lcmljLnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RvY3VtZW50R2VuZXJpY0AyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Eb2N1bWVudEltYWdlLnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RvY3VtZW50SW1hZ2VAMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRG9jdW1lbnRKUy5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Eb2N1bWVudEpTQDJ4LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RvY3VtZW50TWFya3VwLnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RvY3VtZW50TWFya3VwQDJ4LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0V2ZW50TGlzdGVuZXIucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRXhjZXB0aW9uLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0ZpbHRlckZpZWxkR2x5cGgucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRm9sZGVyR2VuZXJpYy5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Gb2xkZXJHZW5lcmljQDJ4LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0Z1bmN0aW9uLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0hpZXJhcmNoaWNhbE5hdmlnYXRpb25JdGVtQ2hldnJvbi5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9JbnN0cnVjdGlvblBvaW50ZXIucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvSW5zdHJ1Y3Rpb25Qb2ludGVyQDJ4LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0xlZnRTaWRlYmFyQ2xvc2UucGRmOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTGVmdFNpZGViYXJPcGVuLnBkZjogUmVtb3ZlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0xlc3NDb2x1bW5zLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0xvY2FsU3RvcmFnZS5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Mb2NhbFN0b3JhZ2VAMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTG9nLnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0xvZ0AyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Nb3JlQ29sdW1ucy5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OYXZpZ2F0aW9uSXRlbUFuZ2xlQnJhY2tldHMucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmF2aWdhdGlvbkl0ZW1CdWcucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmF2aWdhdGlvbkl0ZW1DdXJsZXlCcmFjZXMucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmF2aWdhdGlvbkl0ZW1GaWxlLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05hdmlnYXRpb25JdGVtTGF5ZXJzLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05hdmlnYXRpb25JdGVtTG9nLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05hdmlnYXRpb25JdGVtUnVsZXIucGRmOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmF2aWdhdGlvbkl0ZW1TdG9wd2F0Y2gucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmF2aWdhdGlvbkl0ZW1TdG9yYWdlLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05ldHdvcmsucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0AyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrQmFyQmx1ZS5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrQmFyQmx1ZUAyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrQmFyR3JheS5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrQmFyR3JheUAyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrQmFyR3JlZW4ucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0JhckdyZWVuQDJ4LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05ldHdvcmtCYXJMYWJlbENhbGxvdXRMZWZ0LnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05ldHdvcmtCYXJMYWJlbENhbGxvdXRSaWdodC5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrQmFyTGFiZWxDYWxsb3V0V2hpdGVMZWZ0LnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05ldHdvcmtCYXJMYWJlbENhbGxvdXRXaGl0ZVJpZ2h0LnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05ldHdvcmtCYXJPcmFuZ2UucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0Jhck9yYW5nZUAyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrQmFyUHVycGxlLnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05ldHdvcmtCYXJQdXJwbGVAMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0JhclJlZC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrQmFyUmVkQDJ4LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05ldHdvcmtCYXJXaGl0ZUZsYXQucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0JhcldoaXRlRmxhdEAyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrQmFyWWVsbG93LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05ldHdvcmtCYXJZZWxsb3dAMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0hvbGxvd0JhckJsdWUucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0hvbGxvd0JhckJsdWVAMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0hvbGxvd0JhckdyYXkucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0hvbGxvd0JhckdyYXlAMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0hvbGxvd0JhckdyZWVuLnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05ldHdvcmtIb2xsb3dCYXJHcmVlbkAyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrSG9sbG93QmFyT3JhbmdlLnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05ldHdvcmtIb2xsb3dCYXJPcmFuZ2VAMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0hvbGxvd0JhclB1cnBsZS5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrSG9sbG93QmFyUHVycGxlQDJ4LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05ldHdvcmtIb2xsb3dCYXJSZWQucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0hvbGxvd0JhclJlZEAyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrSG9sbG93QmFyWWVsbG93LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05ldHdvcmtIb2xsb3dCYXJZZWxsb3dAMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvUGF1c2UucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvUHJvZmlsZS5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Qcm9maWxlQDJ4LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1JlY29yZGluZy5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9SZWNvcmRpbmdIb3ZlcmVkLnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1JlY29yZGluZ0hvdmVyZWRAMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvUmVjb3JkaW5nU3RvcHBlZC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9SZWNvcmRpbmdTdG9wcGVkQDJ4LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1Jlc3VsdExpbmUucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvUmVzdW1lLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1JpZ2h0U2lkZWJhckNsb3NlLnBkZjogUmVtb3ZlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1JpZ2h0U2lkZWJhck9wZW4ucGRmOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvU2NyaXB0LnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1NjcmlwdEAyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9TZXNzaW9uU3RvcmFnZS5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9TZXNzaW9uU3RvcmFnZUAyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Tb3VyY2VDb2RlLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1N0ZXBJbnRvLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1N0ZXBPdXQucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvU3RlcE92ZXIucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvU3RvcHdhdGNoLnBuZzoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1N0b3B3YXRjaEAyeC5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9TdHlsZVJ1bGVBdXRob3IucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvU3R5bGVSdWxlSW5oZXJpdGVkLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1N0eWxlUnVsZUluaGVyaXRlZEVsZW1lbnQucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvU3R5bGVSdWxlSW5zcGVjdG9yLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1N0eWxlUnVsZVVzZXIucGRmOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvU3R5bGVSdWxlVXNlckFnZW50LnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1RpbWVsaW5lQmFyQmx1ZS5wbmc6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9UaW1lbGluZUJhckJsdWVAMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvVGltZWxpbmVCYXJPcmFuZ2UucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvVGltZWxpbmVCYXJPcmFuZ2VAMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvVGltZWxpbmVCYXJQdXJwbGUucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvVGltZWxpbmVCYXJQdXJwbGVAMngucG5nOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvVG9nZ2xlQXJyb3dEb3duLnBkZjogUmVtb3ZlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1RvZ2dsZUFycm93VXAucGRmOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvVW5kb2NrLnBkZjoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1VzZXJJbnB1dFByb21wdC5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Vc2VySW5wdXRQcm9tcHRQcmV2aW91cy5wZGY6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Vc2VySW5wdXRSZXN1bHQucGRmOgoKMjAxMy0wMy0zMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFsbG93IGNoYW5naW5nIFdlYiBJbnNwZWN0b3IgZG9jayBzaWRlcyB3aXRob3V0IHVuZG9ja2luZyBmaXJzdC4KCiAgICAgICAgSG9sZGluZyBvcHRpb24gd2lsbCBjaGFuZ2UgdGhlIHVuZG9jayBidXR0b24gdG8gdGhlIG9wcG9zaXRlIGF0dGFjaG1lbnQgc2lkZS4gV2hlbiBjbGlja2VkCiAgICAgICAgdGhlIGJ1dHRvbiB3aWxsIGNoYW5nZSB0byB0aGUgb3RoZXIgYXR0YWNobWVudCBzaWRlLiBIb2xkaW5nIG9wdGlvbiB3aXRoIGFsbG93IHVuZG9jay4gVGhpcwogICAgICAgIGtlZXBzIHRoZSBsYXN0IHVzZWQgb3B0aW9uIGF2YWlsYWJsZSBpZiB0aGUgdXNlciBoYXJkbHkgdW5kb2NrcyBidXQgZnJlcXVlbnRseSBjaGFuZ2VzIHNpZGVzLgoKICAgICAgICByZGFyOi8vcHJvYmxlbS8xMzU0MzEyNwoKICAgICAgICBSZXZpZXdlZCBieSBBbnRvaW5lIFF1aW50LgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczogVXBkYXRlZC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Eb2NrLnBkZjogUmVtb3ZlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RvY2tCb3R0b20ucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RvY2tSaWdodC5wZGY6IEFkZGVkLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmxvYWRlZCk6IEFkZGVkIGtleSBldmVudCBsaXN0ZW5lcnMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKTogVXNlIFRvZ2dsZUNvbnRyb2xUb29sYmFySXRlbSBmb3IgdW5kb2NrIGJ1dHRvbi4KICAgICAgICAoV2ViSW5zcGVjdG9yLl93aW5kb3dLZXlEb3duKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5fd2luZG93S2V5VXApOiBBZGRlZC4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5fdW5kb2NrKToKICAgICAgICAoV2ViSW5zcGVjdG9yLl91cGRhdGVEb2NrTmF2aWdhdGlvbkl0ZW1zKToKICAgICAgICBTZXQgYW5kIGNoZWNrIHRvZ2dsZWQgc3RhdGUgZm9yIHVuZG9jayBidXR0b24gYW5kIGRvIHRoZSByaWdodCB0aGluZy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RvZ2dsZUJ1dHRvbk5hdmlnYXRpb25JdGVtLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVG9nZ2xlQnV0dG9uTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLnNldCBhbHRlcm5hdGVUb29sVGlwKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Ub2dnbGVCdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuc2V0IGFsdGVybmF0ZUltYWdlKTogQWRkZWQuCgoyMDEzLTA0LTAxICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzQ5MjQxMz4gSW1wcm92ZSBsaW5lIG51bWJlciBzdWJ0aXRsZSBmb3IgU291cmNlTWFwIEJyZWFrcG9pbnRzIGluIERlYnVnZ2VyIHNpZGViYXIKCiAgICAgICAgSWYgYSBicmVha3BvaW50IGlzIGluIGEgU291cmNlTWFwUmVzb3VyY2UsIHRoZXJlIGlzIGEgc3VidGl0bGUgc2hvd2luZwogICAgICAgIHRoZSBvcmlnaW5hbCBsb2NhdGlvbi4gSWYgdGhlIG9yaWdpbmFsIGxvY2F0aW9uIGlzIGluIGEgZm9ybWF0dGVkIGZpbGUKICAgICAgICBzaG93IHRoZSBpdGFsaWNzIGZvcm1hdHRlZCBsb2NhdGlvbiB0aGF0IHlvdSB3b3VsZCBqdW1wIHRvLiBEb24ndCBzaG93CiAgICAgICAgYSBzdWJ0aXRsZSBmb3IgYnJlYWtwb2ludHMgaW4gZm9ybWF0dGVkIHJlc291cmNlcywganVzdCB0aGUgTGluZTpDb2x1bW4uCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0JyZWFrcG9pbnRUcmVlRWxlbWVudC5jc3M6CiAgICAgICAgKC5pdGVtLmJyZWFrcG9pbnQgLnN1YnRpdGxlLmZvcm1hdHRlZC1sb2NhdGlvbik6CiAgICAgICAgSXRhbGljcyBpZiB0aGUgc3VidGl0bGUgaXMgZGlzcGxheWluZyBhIGZvcm1hdHRlZCBsb2NhdGlvbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0JyZWFrcG9pbnRUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRUcmVlRWxlbWVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50VHJlZUVsZW1lbnQucHJvdG90eXBlLl91cGRhdGVUaXRsZXMpOgogICAgICAgIEZvciBTb3VyY2VNYXAgcmVzb3VyY2VzLCBzaG93IHRoZSBmb3JtYXR0ZWQgLyBvcmlnaW5hbCBsb2NhdGlvbi4KICAgICAgICBBbHdheXMgaGF2ZSB0aGUgcmVhbCBvcmlnaW5hbCBsb2NhdGlvbiBpbiB0aGUgdG9vbHRpcC4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50VHJlZUVsZW1lbnQucHJvdG90eXBlLl9icmVha3BvaW50TG9jYXRpb25EaWRDaGFuZ2UpOgogICAgICAgIFVwZGF0ZSB0aGUgdGl0bGVzIGlmIGFueSBsb2NhdGlvbiBjaGFuZ2VzICh0aGUgb3JpZ2luYWwgZmlsZSBtYXkKICAgICAgICBoYXZlIGJlZW4gZm9ybWF0dGVkLCBhbmQgd2UnZCB3YW50IHRvIHVwZGF0ZSBmb3IgdGhhdCkuCgogICAgICAgICogVXNlckludGVyZmFjZS9HZW5lcmFsVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5HZW5lcmFsVHJlZUVsZW1lbnQucHJvdG90eXBlLmdldCBzdWJ0aXRsZUVsZW1lbnQpOgogICAgICAgIEJlIHN1cmUgdG8gY3JlYXRlIHRoZSB0aXRsZSBlbGVtZW50IHRoZSBzdWJ0aXRsZSBnZXRzIGFwcGVuZGVkIHRvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuc2hvd09yaWdpbmFsT3JGb3JtYXR0ZWRTb3VyY2VDb2RlTG9jYXRpb24pOgogICAgICAgIFRoaXMgZXNzZW50aWFsbHkgbWVhbnMsIHNob3cgbG9jYXRpb24gaW4gdGhlIGVkaXRvci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGVMb2NhdGlvbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVMb2NhdGlvbi5wcm90b3R5cGUuZm9ybWF0dGVkTG9jYXRpb25TdHJpbmcpOgogICAgICAgIEhlbHBlciBmb3IgZ2V0dGluZyB0aGUgZGlzcGxheSBzdHJpbmcgZm9yIHRoZSBmb3JtYXR0ZWQgbG9jYXRpb24uCgoyMDEzLTA0LTAxICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIEF2b2lkIHNvbWUgYXNzZXJ0cyB0aGF0IGNhbiBoYXBwZW4gd2hlbiByZWZvcm1hdHRpbmcgZmlsZXMgd2l0aCBicmVha3BvaW50cy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlQ29kZVRleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3VwZGF0ZUJyZWFrcG9pbnRMb2NhdGlvbik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS51cGRhdGVTdHlsZXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3JlbW92ZUJyZWFrcG9pbnRGcm9tTGluZUFuZENvbHVtbik6CgoyMDEzLTAzLTI5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIENTUyBhcyBhIGtub3duIHNvdXJjZSB0eXBlLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM0OTgzODA+IEFTU0VSVElPTjogSXNzdWVNZXNzYWdlLmpzOjY0OiBVbmtub3duIGlzc3VlIHNvdXJjZTogY3NzCgogICAgICAgIFJldmlld2VkIGJ5IFJpY2t5IE1vbmRlbGxvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSXNzdWVNZXNzYWdlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSXNzdWVNZXNzYWdlKToKCjIwMTMtMDMtMjkgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBEb24ndCB0cnkgdG8gdG9nZ2xlIHZpc2liaWxpdHkgaWYgYSB0b2dnbGUgaXMgYWxyZWFkeSBwZW5kaW5nLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM0MDEwMTE+IE5ldyBTaG9ydGN1dCB0byBoaWRlL3Nob3cgZWxlbWVudHMgd2hpbGUKICAgICAgICBpbnNwZWN0aW5nIGJyZWFrcyBpZiB5b3UgbGVhdmUgdGhlIGtleSBwcmVzc2VkLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlT3V0bGluZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVPdXRsaW5lLnByb3RvdHlwZS5faGlkZUVsZW1lbnQudG9nZ2xlUHJvcGVydGllcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlT3V0bGluZS5wcm90b3R5cGUuX2hpZGVFbGVtZW50KToKCjIwMTMtMDMtMjkgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgQXZvaWQgYSBTb3VyY2VNYXBSZXNvdXJjZSBGb2xkZXIgY2hhaW4gb2Ygc2luZ2xlIGxldmVsIGZvbGRlcnMuCgogICAgICAgIE9uIG9mIG15IHRlc3QgY2FzZXMsIDxodHRwOi8vZGV2LmZvbnRkcmFnci5jb20+LCBhIHJlc291cmNlIHdpdGgKICAgICAgICBhIHNvdXJjZSBtYXAgaGFzIGFsbCBpdHMgc291cmNlIG1hcCByZXNvdXJjZXMgaW4gYSAic3JjIiBmb2xkZXIuCiAgICAgICAgVGhpcyBjcmVhdGVzIGEgcG9vciBleHBlcmllbmNlIGluIHRoZSByZXNvdXJjZXMgc2lkZWJhci4gV2hlbgogICAgICAgIGV4cGFuZGluZyB0aGUgcmVzb3VyY2UsIHRoZXJlIGlzIGp1c3QgYSAic3JjIiBmb2xkZXIuIEluIHRob3NlCiAgICAgICAgY2FzZXMsIGFuZCBpbiBnZW5lcmFsIGlmIHRoZXJlIGlzIG9uZSBsb25nIGNoYWluIG9mIGZvbGRlcnMsCiAgICAgICAgZG9uJ3QgZXZlbiB1c2UgZm9sZGVycy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlQ29kZVRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRyZWVFbGVtZW50LnByb3RvdHlwZS5vbnBvcHVsYXRlLmZvbGRlckhhc09ubHlSZXNvdXJjZUNoaWxkcmVuKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUcmVlRWxlbWVudC5wcm90b3R5cGUub25wb3B1bGF0ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVHJlZUVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZUZvbGRlcnNBc05lZWRlZEZvclN1YnBhdGgpOgoKMjAxMy0wMy0yOCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMzMTA3MTc+IFNvdXJjZSBNYXBzOiBzaG91bGQgZGlzcGxheSBmb2xkZXIgaGllcmFyY2h5IGluIHRoZSBzaWRlYmFyCgogICAgICAgIFJlc29sdmUgIi4vIiBhbmQgIi4uLyIgaW4gVVJMIHBhdGhzIGluIHBhcnNlVVJMLiBMZWF2ZSB0aGUgcGF0aAogICAgICAgIHVuYWRqdXN0ZWQgaWYgd2UgZ2V0IHRvIGEgcG9pbnQgd2UgZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlLCBlLmcuCiAgICAgICAgdG9vIG1hbnkgIi4uLyIgY29tcG9uZW50cy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlQ29kZVRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRyZWVFbGVtZW50LnByb3RvdHlwZS5jcmVhdGVGb2xkZXJzQXNOZWVkZWRGb3JTdWJwYXRoKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVXRpbGl0aWVzLmpzOgoKMjAxMy0wMy0yOCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMzMTA3MTc+IFNvdXJjZSBNYXBzOiBzaG91bGQgZGlzcGxheSBmb2xkZXIgaGllcmFyY2h5IGluIHRoZSBzaWRlYmFyCgogICAgICAgIE9mdGVuIFNvdXJjZU1hcCdzIGluY2x1ZGUgc291cmNlcyBpbiBhIGhpZXJhcmNoeS4gV2Ugc2hvdWxkIGNyZWF0ZQogICAgICAgIGEgZm9sZGVyIHN0cnVjdHVyZSBmb3IgdGhhdCBoaWVyYXJjaHkgaW4gdGhlIHJlc291cmNlcyBzaWRlYmFyLiBXaGVuCiAgICAgICAgdGhlIFNvdXJjZU1hcCBpcyBwYXJ0IG9mIGEgRnJhbWUsIHdlIGRvbid0IGRvIHRoaXMsIHdlIHN0aWxsIGp1c3QKICAgICAgICBzb3J0IFNvdXJjZU1hcFJlc291cmNlcyBpbnRvIHRoZWlyIGFzc29jaWF0ZWQgdHlwZSBmb2xkZXIuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVFbGVtZW50LmNvbXBhcmVGb2xkZXJBbmRSZXNvdXJjZVRyZWVFbGVtZW50cyk6CiAgICAgICAgQWRkZWQgYSBnZW5lcmljIHNvcnQgZnVuY3Rpb24gdGhhdCBjYW4gdGFrZSBib3RoIEZvbGRlciBhbmQgUmVzb3VyY2UKICAgICAgICB0cmVlIGVsZW1lbnRzLiBJdCBzb3J0cyBmb2xkZXJzIGZpcnN0LCBieSBuYW1lLCB0aGVuIHJlc291cmNlcyBieSB0aGVpcgogICAgICAgIG5vcm1hbCBzb3J0IG9yZGVyICh0eXBlIGFuZCBuYW1lKS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZU1hcC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5wcm90b3R5cGUuZ2V0IHNvdXJjZU1hcHBpbmdVUkxCYXNlUGF0aCk6CiAgICAgICAgV2hlbiB0aGUgc291cmNlIG1hcCByZXNvbHZlcyBpdHMgc291cmNlcyBpdCBidWlsZHMgYW4gYWJzb2x1dGUgVVJMCiAgICAgICAgdXNpbmcgdGhlIHBhcnRpYWwgVVJMIChtYXAuc291cmNlUm9vdCArIG1hcC5zb3VyY2VbaV0pIGFuZCBiYXNlIFVSTAogICAgICAgIG9mIHRoZSBwcm92aWRlZCBzb3VyY2VNYXBwaW5nVVJMLiBXZSBjYW4gdXNlIHRoaXMgImJhc2UgcGF0aCIgdG8KICAgICAgICBnZXQgb25seSB0aGUgaW5kaXZpZHVhbCBzb3VyY2UncyByZWxhdGl2ZSBzdWJwYXRoIGxhdGVyIG9uLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlTWFwUmVzb3VyY2UuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBSZXNvdXJjZS5wcm90b3R5cGUuZ2V0IHNvdXJjZU1hcFJlbGF0aXZlU3VicGF0aCk6CiAgICAgICAgR2V0IHRoZSBzdWJwYXRoIHJlbGF0aXZlIHRvIHRoZSBTb3VyY2VNYXAncyB1cmwuIFRoaXMgYWxsb3dzIHVzCiAgICAgICAgdG8gZ2V0IHRoZSBwYXRoIGNvbXBvbmVudHMgYW5kIGJ1aWxkIGEgZGlyZWN0b3J5IHRyZWUuCgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VDb2RlVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVHJlZUVsZW1lbnQucHJvdG90eXBlLm9ucG9wdWxhdGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRyZWVFbGVtZW50LnByb3RvdHlwZS5jcmVhdGVGb2xkZXJzQXNOZWVkZWRGb3JTdWJwYXRoKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUcmVlRWxlbWVudC5wcm90b3R5cGUuZGVzY2VuZGFudFJlc291cmNlVHJlZUVsZW1lbnRUeXBlRGlkQ2hhbmdlKToKICAgICAgICBHaXZlbiBhIHN1YnBhdGgsIGNyZWF0ZSBmb2xkZXJzIGFzIG5lZWRlZCBhbmQgaW5zZXJ0IHRoZSBhY3R1YWwKICAgICAgICBTb3VyY2VNYXBSZXNvdXJjZVRyZWVFbGVtZW50IGluc2lkZSB0aGUgZGVlcGVzdCBmb2xkZXIuIENhY2hlCiAgICAgICAgZm9sZGVycyBhbG9uZyB0aGUgd2F5IHNvIHdlIGRvbid0IHJlLWNyZWF0ZSBmb2xkZXJzLCBhbmQgc28gdGhhdAogICAgICAgIHdlIGNhbiBsb29rIHRoZW0gdXAgYWdhaW4gbGF0ZXIgaWYgbmVlZGVkLgoKMjAxMy0wMy0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIENvbWJpbmUgYW5kIG1pbmlmeSBDb2RlTWlycm9yIHNjcmlwdHMgYW5kIHN0eWxlcyBpbiBQcm9kdWN0aW9uIGJ1aWxkcy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNDQ2OTE4PgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogU2NyaXB0cy9jb21iaW5lLXJlc291cmNlcy5wbDoKICAgICAgICAqIFNjcmlwdHMvY29weS11c2VyLWludGVyZmFjZS1yZXNvdXJjZXMuc2g6CgoyMDEzLTAzLTI4ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIFVucmV2aWV3ZWQuIE1pc3Npbmcgc2VtaWNvbG9uIGNhdXNpbmcgd2FybmluZyB3aGVuIHN0cmlwcGluZyBhc3NlcnRzLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnVwZGF0ZUJyZWFrcG9pbnRMaW5lQW5kQ29sdW1uKToKCjIwMTMtMDMtMjggIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNDEyOTY5PiBSZXZlYWwgbGluZSBjZW50ZXJlZCBoaXRzIGEgY29kZSBtaXJyb3IgZXhjZXB0aW9uIHVubGVzcyBwdXQgaW4gc2V0VGltZW91dAoKICAgICAgICBDb2RlTWlycm9yIGlzc3VlIGhhcyBiZWVuIGZpeGVkLiBSZW1vdmUgdGhlICJkZWxheSIgZm9ybSBwYXRocyB0aGF0CiAgICAgICAgd291bGQgaGF2ZSBoaXQgdGhlIGV4Y2VwdGlvbiBiZWZvcmUuIFRoZXkgbm8gbG9uZ2VyIGRvLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUucmV2ZWFsQW5kSGlnaGxpZ2h0TGluZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5yZXZlYWxMaW5lKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9yZXZlYWxQZW5kaW5nTGluZUlmUG9zc2libGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3Njcm9sbEludG9WaWV3Q2VudGVyZWQpOgoKMjAxMy0wMy0yOCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM0MTI5Njk+IFJldmVhbCBsaW5lIGNlbnRlcmVkIGhpdHMgYSBjb2RlIG1pcnJvciBleGNlcHRpb24gdW5sZXNzIHB1dCBpbiBzZXRUaW1lb3V0CiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNTEyNDMwPiBJZGxlIEluc3BlY3RvciByZWNhbGN1bGF0ZXMgc3R5bGVzIGEgZmV3IHRpbWVzIGEgc2Vjb25kIGJlY2F1c2Ugb2YgQ29kZU1pcnJvcgoKICAgICAgICBVcGRhdGUgQ29kZU1pcnJvciB0byB0cnVuayB0byBnZXQgYSBmZXcgcmVjZW50IGZpeGVzLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZGVtaXJyb3IuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3Ivc2Fzcy5qczoKCjIwMTMtMDMtMjggIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIGEgc21hbGwgc2NyaXB0IHRvIHVwZGF0ZSBDb2RlTWlycm9yIHJlc291cmNlcy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQ29keSBLcmllZ2VyLgoKICAgICAgICAqIFNjcmlwdHMvdXBkYXRlLWNvZGVtaXJyb3ItcmVzb3VyY2VzLnJiOiBBZGRlZC4KCjIwMTMtMDMtMjggIEplc3NpZSBCZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KCiAgICAgICAgUmFuIHVwZGF0ZS1zYWZhcmktbG9jYWxpemFibGUtc3RyaW5ncy4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6CgoyMDEzLTAzLTI4ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzUwNTQ4NT4gUkVHUkVTU0lPTjogQ2FuJ3QgY29weSBsaW5rcyBmcm9tIHRoZSBjb25zb2xlIHZpYSB0aGUgY29udGV4dCBtZW51CgogICAgICAgIExldCB0aGUgZGVmYXVsdCBjb250ZXh0IG1lbnUgc2hvdyBpZiB0aGUgdXNlciB0YXJnZXRlZCBhbgogICAgICAgIDxhPiBlbGVtZW50IHRoYXQgaXMgbm90IGEgY29uc29sZSBtZXNzYWdlIFVSTC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX2hhbmRsZUNvbnRleHRNZW51RXZlbnQpOgoKMjAxMy0wMy0yOCAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM1MjYyMDM+IFJlY29yZGluZyBwcm9maWxlcyBpbiB0aGUgSW5zdHJ1bWVudHMgc2lkZWJhciBzaG91bGQgc2hvdyBhIHNwaW5uZXIKCiAgICAgICAgUmVtb3ZlIHRoZSAiUmVjb3JkaW5nIiBwcmVmaXggZm9yIHByb2ZpbGVzIHRoYXQgYXJlIHJlY29yZGluZyBhbmQKICAgICAgICBpbnN0ZWFkIHVzZSBhbiBpbmRldGVybWluYXRlIHNwaW5uZXIgdG8gaW5kaWNhdGUgdGhlIHByb2ZpbGUgaXMKICAgICAgICByZWNvcmRpbmcuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6CiAgICAgICAgUmVtb3ZlIHVudXNlZCBzdHJpbmcgIlJlY29yZGluZyBKYXZhU2NyaXB0IFByb2ZpbGUgJXNcdTIwMjYiLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkluc3RydW1lbnRTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9wcm9maWxpbmdFbmRlZCk6CiAgICAgICAgUmVtb3ZlIHRoZSBpbmRldGVybWluYXRlIHNwaW5uZXIgZnJvbSB0aGUgdHJlZSBlbGVtZW50IHJlcHJlc2VudGluZwogICAgICAgIHRoZSBwcm9maWxlIHRoYXQgZmluaXNoZWQgcmVjb3JkaW5nLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkluc3RydW1lbnRTaWRlYmFyUGFuZWwucHJvdG90eXBlLl90aXRsZUZvclByb2ZpbGUpOgogICAgICAgIEZvciBwcm9maWxlcyB0aGF0IGFyZSBwcmVzZW50bHkgcmVjb3JkaW5nLCBzaW11bGF0ZSB0aGUgcGVuZGluZwogICAgICAgIGFkZGl0aW9uIG9mIHRoZSB0cmVlIGVsZW1lbnQgYnkgYWRkaW5nIDEgdG8gdGhlIGdlbmVyYXRlZCBudW1iZXIuCiAgICAgICAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGdlbmVyYXRlZCB0aXRsZSBtYXRjaGVzIHRoZSBvbmUgdGhhdCB3aWxsCiAgICAgICAgYXBwZWFyIGFzIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhZ2FpbiB1cG9uIHJlY29yZGluZyBjb21wbGV0aW9uLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkluc3RydW1lbnRTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9wcm9maWxlV2FzQWRkZWQpOgogICAgICAgIEFkZCBhbiBpbmRldGVybWluYXRlIHNwaW5uZXIgdG8gdGhlIHRyZWUgZWxlbWVudCByZXByZXNlbnRpbmcKICAgICAgICB0aGUgbmV3bHktYWRkZWQgcHJvZmlsZS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Byb2ZpbGVNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZU1hbmFnZXIucHJvdG90eXBlLnN0YXJ0UHJvZmlsaW5nQ1NTU2VsZWN0b3JzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVNYW5hZ2VyLnByb3RvdHlwZS5zdG9wUHJvZmlsaW5nQ1NTU2VsZWN0b3JzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVNYW5hZ2VyLnByb3RvdHlwZS5wcm9maWxlV2FzU3RhcnRlZEZyb21Db25zb2xlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVNYW5hZ2VyLnByb3RvdHlwZS5zZXRSZWNvcmRpbmdKYXZhU2NyaXB0UHJvZmlsZSk6CiAgICAgICAgVXNlIHRoZSBmaW5hbCB0aXRsZSBkaXJlY3RseSBzaW5jZSB3ZSdyZSBub3cgdXNpbmcgYW4gaW5kZXRlcm1pbmF0ZQogICAgICAgIHNwaW5uZXIgdG8gaW5kaWNhdGUgYSBwcm9maWxlIGlzIHJlY29yZGluZy4KCjIwMTMtMDMtMjggIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNTI1OTg0PiBQcm9maWxlIG5hbWUgaW4gbmF2aWdhdGlvbiBiYXIgYnJlYWRjcnVtYnMgZG9lc24ndCB1cGRhdGUgd2hlbiByZWNvcmRpbmcgY29tcGxldGVzCgogICAgICAgIFByb3BhZ2F0ZSBhbiBldmVudCB3aGVuIGEgR2VuZXJhbFRyZWVFbGVtZW50J3MgIm1haW5UaXRsZSIKICAgICAgICBwcm9wZXJ0eSBjaGFuZ2VzIHN1Y2ggdGhhdCB0aGUgTmF2aWdhdGlvbkJhciBtYXkgZXZlbnR1YWxseQogICAgICAgIHBpY2sgaXQgdXAgYW5kIHVwZGF0ZSBpdHNlbGYuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0dlbmVyYWxUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkdlbmVyYWxUcmVlRWxlbWVudC5wcm90b3R5cGUuc2V0IG1haW5UaXRsZSk6CiAgICAgICAgRGlzcGF0Y2ggdGhlIG5ldyBNYWluVGl0bGVEaWRDaGFuZ2UgZXZlbnQuCgogICAgICAgICogVXNlckludGVyZmFjZS9HZW5lcmFsVHJlZUVsZW1lbnRQYXRoQ29tcG9uZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuR2VuZXJhbFRyZWVFbGVtZW50UGF0aENvbXBvbmVudCk6CiAgICAgICAgUmVnaXN0ZXIgYSBsaXN0ZW5lciBmb3IgdGhlIE1haW5UaXRsZURpZENoYW5nZSBldmVudCBvbiB0aGUKICAgICAgICBwcm92aWRlZCBHZW5lcmFsVHJlZUVsZW1lbnQuCgogICAgICAgIChXZWJJbnNwZWN0b3IuR2VuZXJhbFRyZWVFbGVtZW50UGF0aENvbXBvbmVudC5wcm90b3R5cGUuX21haW5UaXRsZURpZENoYW5nZSk6CiAgICAgICAgVXBkYXRlIHRoZSAiZGlzcGxheU5hbWUiIHByb3BlcnR5IHRvIG1hdGNoIHRoZSBHZW5lcmFsVHJlZUVsZW1lbnQncwogICAgICAgIHVwZGF0ZWQgIm1haW5UaXRsZSIgcHJvcGVydHkuCgogICAgICAgICogVXNlckludGVyZmFjZS9UcmVlT3V0bGluZS5qczoKICAgICAgICAoVHJlZU91dGxpbmUpOgogICAgICAgIChUcmVlRWxlbWVudCk6CiAgICAgICAgTWFrZSBib3RoIFRyZWVPdXRsaW5lIGFuZCBUcmVlRWxlbWVudCBzdWJjbGFzc2VzIG9mCiAgICAgICAgV2ViSW5zcGVjdG9yLk9iamVjdCBzdWNoIHRoYXQgdGhleSBtYXkgZGlzcGF0Y2ggZXZlbnRzLgoKMjAxMy0wMy0yOCAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMxMDU3NzU+IEhhbmRsZSBjdXJyZW50bHkgcmVjb3JkaW5nIHByb2ZpbGVzIGluIGEgbW9yZSBncmFjZWZ1bCBtYW5uZXIKCiAgICAgICAgV2Ugbm93IHByZXNlbnQgYSBuaWNlLWxvb2tpbmcgIlJlY29yZGluZ8kiIG1lc3NhZ2Ugd2hlbiBhIHJlY29yZGluZwogICAgICAgIHByb2ZpbGUgaXMgc2VsZWN0ZWQgaW4gdGhlIGluc3RydW1lbnRzIHNpZGViYXIuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6CiAgICAgICAgTmV3ICJSZWNvcmRpbmfJIiBzdHJpbmcgdXNlZCB0byBwcmVzZW50IHdoZW4gd2UncmUgcmVjb3JkaW5nIGEgcHJvZmlsZQogICAgICAgIG9mIGFuIHVua25vd24gdHlwZSAoZnV0dXJlLXByb29maW5nKS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1NlbGVjdG9yUHJvZmlsZVZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTZWxlY3RvclByb2ZpbGVWaWV3KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1NlbGVjdG9yUHJvZmlsZVZpZXcucHJvdG90eXBlLnJlY29yZGluZ1RpdGxlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1NlbGVjdG9yUHJvZmlsZVZpZXcucHJvdG90eXBlLmRpc3BsYXlQcm9maWxlKToKICAgICAgICBJbXBsZW1lbnQgdGhlIG5ldyBQcm9maWxlVmlldyBwcm90b2NvbCB0byBkaXNwbGF5IHRoZSBwcm9maWxlCiAgICAgICAgZGF0YSBvbmx5IHdoZW4gaXQncyBhdmFpbGFibGUuCgogICAgICAgICogVXNlckludGVyZmFjZS9KYXZhU2NyaXB0UHJvZmlsZVZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0UHJvZmlsZVZpZXcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFByb2ZpbGVWaWV3LnByb3RvdHlwZS5yZWNvcmRpbmdUaXRsZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0UHJvZmlsZVZpZXcucHJvdG90eXBlLmRpc3BsYXlQcm9maWxlLnByb2ZpbGVDYWxsYmFjayk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0UHJvZmlsZVZpZXcucHJvdG90eXBlLmRpc3BsYXlQcm9maWxlKToKICAgICAgICBJbXBsZW1lbnQgdGhlIG5ldyBQcm9maWxlVmlldyBwcm90b2NvbCB0byBkaXNwbGF5IHRoZSBwcm9maWxlCiAgICAgICAgZGF0YSBvbmx5IHdoZW4gaXQncyBhdmFpbGFibGUuCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CiAgICAgICAgQWRkIHRoZSBuZXcgUHJvZmlsZVZpZXcuY3NzIGZpbGUuCgogICAgICAgICogVXNlckludGVyZmFjZS9Qcm9maWxlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVNYW5hZ2VyLnByb3RvdHlwZS5zdG9wUHJvZmlsaW5nQ1NTU2VsZWN0b3JzKToKICAgICAgICBFbnN1cmUgd2Ugc2V0IHRoZSAicmVjb3JkaW5nIiBwcm9wZXJ0eSBsYXN0IGFzIGl0IHdvdWxkIGZpcmUgdGhlCiAgICAgICAgbmV3IFdlYkluc3BlY3Rvci5Qcm9maWxlT2JqZWN0LkV2ZW50LkZpbnNoZWRSZWNvcmRpbmcgZXZlbnQgYmVmb3JlIAogICAgICAgIHRoZSBwcm9maWxlIGRhdGEgaGFzIGJlZW4gc2V0IG9uIHRoZSBvYmplY3QuCgogICAgICAgICogVXNlckludGVyZmFjZS9Qcm9maWxlT2JqZWN0LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZU9iamVjdC5wcm90b3R5cGUuc2V0IHJlY29yZGluZyk6CiAgICAgICAgRGlzcGF0Y2ggYSBuZXcgV2ViSW5zcGVjdG9yLlByb2ZpbGVPYmplY3QuRXZlbnQuRmluc2hlZFJlY29yZGluZwogICAgICAgIGV2ZW50IHdoZW4gdGhlIHByb2ZpbGUgaGFzIGZpbmlzaGVkIHJlY29yZGluZy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Byb2ZpbGVWaWV3LmNzczogQWRkZWQuCiAgICAgICAgKC5yZWNvcmRpbmctcHJvZmlsZS12aWV3KToKICAgICAgICAoLnJlY29yZGluZy1wcm9maWxlLXZpZXcgPiAuaW5kZXRlcm1pbmF0ZS1wcm9ncmVzcy1zcGlubmVyKToKICAgICAgICAoLnJlY29yZGluZy1wcm9maWxlLXZpZXcgPiBzcGFuKToKICAgICAgICBOZXcgQ1NTIHN1cHBvcnQgZm9yIHRoZSBuZXcgcmVjb3JkaW5nIG1lc3NhZ2UgaW4gUHJvZmlsZVZpZXcsCiAgICAgICAgdXNpbmcgQ1NTIGZsZXhib3ggdG8gdmVydGljYWxseSBhbmQgaG9yaXpvbnRhbGx5IGNlbnRlciB0aGUKICAgICAgICBpbmRldGVybWluYXRlIHNwaW5uZXIgYW5kIHRleHQuCgogICAgICAgICogVXNlckludGVyZmFjZS9Qcm9maWxlVmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVWaWV3KToKICAgICAgICBJbiBjYXNlIHRoZSBwcm9maWxlIGZvciB0aGlzIFByb2ZpbGVWaWV3IGlzIHN0aWxsIHJlY29yZGluZywKICAgICAgICByZWdpc3RlciBmb3IgdGhlIFdlYkluc3BlY3Rvci5Qcm9maWxlT2JqZWN0LkV2ZW50LkZpbnNoZWRSZWNvcmRpbmcKICAgICAgICBldmVudCB0byBiZSBub3RpZmllZCBvZiB3aGVuIHRoZSBwcm9maWxlIGlzIGRvbmUgcmVjb3JkaW5nCiAgICAgICAgYW5kIHNob3cgYSAiUmVjb3JkaW5nySIgbWVzc2FnZSB1bnRpbCB0aGVuLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVWaWV3LnByb3RvdHlwZS5kaXNwbGF5UHJvZmlsZSk6CiAgICAgICAgTmV3IG1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgcHJvZmlsZSBoYXMgZmluaXNoZWQgcmVjb3JkaW5nIGFuZAogICAgICAgIHdlJ3ZlIHJlbW92ZWQgdGhlICJSZWNvcmRpbmfJIiBtZXNzYWdlIGZyb20gZGlzcGxheS4gTWVhbnQgdG8KICAgICAgICBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVWaWV3LnByb3RvdHlwZS5yZWNvcmRpbmdUaXRsZSk6CiAgICAgICAgTmV3IG1ldGhvZCBjYWxsZWQgd2hlbiBwb3B1bGF0aW5nIHRoZSAiUmVjb3JkaW5nySIgbWVzc2FnZSBhbGxvd2luZwogICAgICAgIHN1YmNsYXNzZXMgdG8gcmV0dXJuIGEgY2xlYXJlciBtZXNzYWdlLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVWaWV3LnByb3RvdHlwZS5fcHJvZmlsZUZpbmlzaGVkUmVjb3JkaW5nKToKICAgICAgICBFdmVudCBoYW5kbGVyIGZvciB0aGUgV2ViSW5zcGVjdG9yLlByb2ZpbGVPYmplY3QuRXZlbnQuRmluc2hlZFJlY29yZGluZwogICAgICAgIGV2ZW50IHdoaWNoIHJlbW92ZXMgdGhlICJSZWNvcmRpbmfJIiBtZXNzYWdlIGFuZCBjYWxscwogICAgICAgIGRpc3BsYXlQcm9maWxlKCkuCgogICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZVZpZXcucHJvdG90eXBlLl9zaG93UmVjb3JkaW5nTWVzc2FnZSk6CiAgICAgICAgRGlzcGxheSB0aGUgIlJlY29yZGluZ8kiIG1lc3NhZ2UuCgogICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZVZpZXcucHJvdG90eXBlLl9oaWRlUmVjb3JkaW5nTWVzc2FnZSk6CiAgICAgICAgUmVtb3ZlcyB0aGUgIlJlY29yZGluZ8kiIG1lc3NhZ2UsIGlmIGFueS4KCjIwMTMtMDMtMjggIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNDgzOTYzPiBjb3B5aW5nIHRleHQgZnJvbSB0aGUgd2ViIGluc3BlY3RvciBpbmNsdWRlcyBbTE9HXSB3aGVuIHlvdSBwYXN0ZQoKICAgICAgICBEb24ndCBhZGQgW0xvZ10gcHJlZml4IGZvciBsb2ctbGV2ZWwgbWVzc2FnZXMuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnNvbGVNZXNzYWdlSW1wbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUudG9DbGlwYm9hcmRTdHJpbmcpOgoKMjAxMy0wMy0yNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFN1cHBvcnQgZm9yIGRvY2stdG8tcmlnaHQgaW4gdGhlIFdlYiBJbnNwZWN0b3IuCgogICAgICAgIHJkYXI6Ly9wcm9ibGVtLzEwMzY4MTUyCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3BlY3RvckZyb250ZW5kQVBJLmpzOgogICAgICAgIChJbnNwZWN0b3JGcm9udGVuZEFQSS5zZXREb2NrU2lkZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uY3NzOgogICAgICAgIChib2R5LmRvY2tlZC5ib3R0b20pOgogICAgICAgIChib2R5LmRvY2tlZC5yaWdodCk6CiAgICAgICAgKCNkb2NrZWQtcmVzaXplcik6CiAgICAgICAgKGJvZHkuZG9ja2VkICNkb2NrZWQtcmVzaXplcik6CiAgICAgICAgKGJvZHkuZG9ja2VkLmJvdHRvbSAjZG9ja2VkLXJlc2l6ZXIpOgogICAgICAgIChib2R5LmRvY2tlZC5yaWdodCAjZG9ja2VkLXJlc2l6ZXIpOgogICAgICAgIChib2R5LmRvY2tlZC5ib3R0b20gI3Rvb2xiYXIpOgogICAgICAgIChib2R5LmRvY2tlZC5ib3R0b20gI3Rvb2xiYXIgLml0ZW06bm90KC5mbGV4aWJsZS1zcGFjZSkpOgogICAgICAgIChib2R5LmRvY2tlZC5yaWdodCAjbmF2aWdhdGlvbi1zaWRlYmFyLmNvbGxhcHNlZCA+IC5yZXNpemVyKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmxvYWRlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLnVwZGF0ZURvY2tlZFN0YXRlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLl90b29sYmFyRGlzcGxheU1vZGVEaWRDaGFuZ2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuX3Rvb2xiYXJTaXplTW9kZURpZENoYW5nZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5fdG9vbGJhck1vdXNlRG93bik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5fZG9ja2VkUmVzaXplck1vdXNlRG93bi5kb2NrZWRSZXNpemVyRHJhZyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5fZG9ja2VkUmVzaXplck1vdXNlRG93bik6CgoyMDEzLTAzLTI3ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzEwNTc3ND4gUmVjb3JkaW5nIGEgcHJvZmlsZSB3aXRoIHRoZSBpbnNwZWN0b3IgVUkgc2hvdWxkIGF1dG9tYXRpY2FsbHkgc2VsZWN0IHRoZSBuZXcgcHJvZmlsZSB1cG9uIGNvbXBsZXRpb24KCiAgICAgICAgQXV0b21hdGljYWxseSBzZWxlY3QgcHJvZmlsZXMgdGhhdCBjb21wbGV0ZWQgYXMgYSByZXN1bHQgb2YgdGhlIHVzZXIKICAgICAgICBwcmVzc2luZyB0aGUgcmVjb3JkIGJ1dHRvbiBpbiB0aGUgaW5zdHJ1bWVudHMgc2lkZWJhciBwYW5lbC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkluc3RydW1lbnRTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9wcm9maWxpbmdFbmRlZCk6CiAgICAgICAgQ2hlY2sgdGhlICJmcm9tQ29uc29sZSIgcHJvcGVydHkgb24gdGhlIFByb2ZpbGluZ0VuZGVkIGV2ZW50IHRvCiAgICAgICAgc2VlIHdoZXRoZXIgdGhpcyBwcm9maWxlIHNob3VsZCBiZSBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUHJvZmlsZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlTWFuYWdlci5wcm90b3R5cGUuc2V0UmVjb3JkaW5nSmF2YVNjcmlwdFByb2ZpbGUpOgogICAgICAgIEFsc28gaW5kaWNhdGUgd2hldGhlciB0aGUgUHJvZmlsaW5nRW5kZWQgZXZlbnQgaXMgY3JlYXRlZCBhcyBhCiAgICAgICAgcmVzdWx0IG9mIGEgcHJvZmlsZSBmaW5pc2hpbmcgcmVjb3JkaW5nIGFzIGEgcmVzdWx0IG9mIGNhbGxpbmcKICAgICAgICBvbmUgb2YgdGhlIGNvbnNvbGUgQVBJcy4KCjIwMTMtMDMtMjcgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMTkwMDA5PiBQcm9maWxlIHJlY29yZGVkIHByaW9yIHRvIHRoZSBjdXJyZW50IHBhZ2UgbG9hZCBtYXkgc2hvdyBlbXB0eSBjb250ZW50IHZpZXcKCiAgICAgICAgV2Ugbm93IGNyZWF0ZSB0aGUgY29udGVudCB2aWV3IGZvciBhIHByb2ZpbGUgdGhhdCBmaW5pc2hlZCByZWNvcmRpbmcgaW5zdGFudGx5CiAgICAgICAgcmF0aGVyIHRoYW4gZGVsYXkgaXQgdW50aWwgc2VsZWN0aW9uLiBUaGlzIGVuc3VyZXMgdGhhdCBhbGwgcmVjb3JkZWQgcHJvZmlsZXMKICAgICAgICBhcmUgYXZhaWxhYmxlIGFjcm9zcyBwYWdlIGxvYWRzLCB1bnRpbCB3ZSBuYXZpZ2F0ZSBhd2F5LgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Db25zb2xlT2JzZXJ2ZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlT2JzZXJ2ZXIucHJvdG90eXBlLm1lc3NhZ2VBZGRlZCk6CiAgICAgICAgRml4IGFuIG92ZXJzaWdodCBmcm9tIHRoZSBwcmV2aW91cyBjb21taXQgd2hlcmUgd2Ugd291bGRuJ3QgZGlzdGluZ3Vpc2gKICAgICAgICBjYWxscyB0byBjb25zb2xlLnByb2ZpbGUoKSBhbmQgY29uc29sZS5wcm9maWxlRW5kKCkgbWFkZSBhcyBhIHJlc3VsdAogICAgICAgIG9mIHN0YXJ0aW5nIGEgcHJvZmlsZSBmcm9tIHRoZSBVSSBvciBzdGFydGluZyBhIHByb2ZpbGUgYnkgYWN0dWFsbHkKICAgICAgICBjYWxsaW5nIHRoZXNlIG1ldGhvZHMuCgogICAgICAgICogVXNlckludGVyZmFjZS9JbnN0cnVtZW50U2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3Byb2ZpbGluZ0VuZGVkKToKICAgICAgICBGb3JjZSB0aGUgY3JlYXRpb24gb2YgdGhlIGNvbnRlbnQgdmlldyBmb3IgdGhlIHByb3ZpZGVkIHByb2ZpbGUgc28gdGhhdAogICAgICAgIHRoZSBwcm9maWxlIGlzIGltbWVkaWF0ZWx5IHJldHJpZXZlZCBmcm9tIHRoZSBiYWNrZW5kIGFuZCBhdmFpbGFibGUKICAgICAgICBhY3Jvc3MgcGFnZSBsb2Fkcy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Byb2ZpbGVNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZU1hbmFnZXIucHJvdG90eXBlLnN0b3BQcm9maWxpbmdDU1NTZWxlY3RvcnMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZU1hbmFnZXIucHJvdG90eXBlLmFkZEphdmFTY3JpcHRQcm9maWxlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVNYW5hZ2VyLnByb3RvdHlwZS5zZXRSZWNvcmRpbmdKYXZhU2NyaXB0UHJvZmlsZSk6CiAgICAgICAgUGFzcyB0aGUgY3VycmVudGx5IHJlY29yZGluZyBwcm9maWxlIGFzIGRhdGEgdG8gdGhlIFByb2ZpbGluZ0VuZGVkCiAgICAgICAgZXZlbnQgZGlzcGF0Y2hlZC4KCjIwMTMtMDMtMjcgIEplc3NpZSBCZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KCiAgICAgICAgUmFuIHVwZGF0ZS1zYWZhcmktbG9jYWxpemFibGUtc3RyaW5ncy4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6CgoyMDEzLTAzLTI3ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzUxNTM4MT4gUHJvZmlsZXMgc3RhcnRlZCBmcm9tIGNvbnNvbGUgQVBJIGRvbid0IGFwcGVhciB1bnRpbCBkb25lCgogICAgICAgIFdlIG5vdyBpbnRlcmNlcHQgY29uc29sZS5wcm9maWxlKCkgYW5kIGNvbnNvbGUucHJvZmlsZUVuZCgpIG1lc3NhZ2VzCiAgICAgICAgYXBwZWFyaW5nIHRocm91Z2ggdGhlIENvbnNvbGVPYnNlcnZlciBzbyB0aGF0IHdlIGNhbiBzaW11bGF0ZQogICAgICAgIHNldFJlY29yZGluZ0phdmFTY3JpcHRQcm9maWxlIHByb3RvY29sIGV2ZW50cyBpbiB0aGUgQ29uc29sZU1hbmFnZXIuCiAgICAgICAgVGhpcyBhbGxvd3MgdXMgdG8gZGVhbCB3aXRoIGNvbnNvbGUgcHJvZmlsZXMgaW4gYSBtb3JlIHVuaWZpZWQgbWFubmVyLgogICAgICAgIFRoZSByZWNvcmRpbmcgYnV0dG9uLCBob3dldmVyLCBkb2VzIG5vdCBnbyByZWQgd2hlbiBhIHByb2ZpbGUgaXMKICAgICAgICByZWNvcmRpbmcgZnJvbSB0aGUgY29uc29sZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKICAgICAgICBDaGFuZ2VkIHN0cmluZyBmb3IgIlJlY29yZGluZyBKYXZhU2NyaXB0IFByb2ZpbGXJIiB0byBhbGxvdyBmb3IKICAgICAgICBhIHByb2ZpbGUgdGl0bGUgYXMgd2VsbCwgc2luY2UgaXQgbWlnaHQgYmUga25vd24gZm9ybSB0aGUKICAgICAgICBjb25zb2xlLnByb2ZpbGUoKSBjYWxsIHRoYXQgaW5pdGlhdGVkIGl0LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29uc29sZU9ic2VydmVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU9ic2VydmVyLnByb3RvdHlwZS5tZXNzYWdlQWRkZWQpOgogICAgICAgIENoZWNrIGZvciBjb25zb2xlLnByb2ZpbGUoKSBhbmQgY29uc29sZS5wcm9maWxlRW5kKCkgY2FsbHMgYW5kCiAgICAgICAgaW5mb3JtIHRoZSBQcm9maWxlTWFuYWdlciB0aGF0IGEgcHJvZmlsZSBzdGFydGVkIG9yIGVuZGVkIGZyb20KICAgICAgICB0aGUgY29uc29sZSBBUEkuCgogICAgICAgICogVXNlckludGVyZmFjZS9Qcm9maWxlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVNYW5hZ2VyLnByb3RvdHlwZS5wcm9maWxlV2FzU3RhcnRlZEZyb21Db25zb2xlKToKICAgICAgICBTaW11bGF0ZSBhIHNldFJlY29yZGluZ0phdmFTY3JpcHRQcm9maWxlIHByb3RvY29sIGV2ZW50IGFuZCBzZXQgdXAKICAgICAgICB0aGUgcHJvZmlsZSdzIHRpdGxlIGlmIHByb3ZpZGVkLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVNYW5hZ2VyLnByb3RvdHlwZS5wcm9maWxlV2FzRW5kZWRGcm9tQ29uc29sZSk6CiAgICAgICAgU2ltdWxhdGUgYSBzZXRSZWNvcmRpbmdKYXZhU2NyaXB0UHJvZmlsZSBwcm90b2NvbCBldmVudC4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlTWFuYWdlci5wcm90b3R5cGUuYWRkSmF2YVNjcmlwdFByb2ZpbGUpOgogICAgICAgIFJlbW92ZSBjdXN0b20gbG9naWMgdG8gZGVhbCB3aXRoIHRoZSBiZWxhdGVkIGNyZWF0aW9uIG9mIGEKICAgICAgICBKYXZhU2NyaXB0UHJvZmlsZU9iamVjdCBmb3IgYSBwcm9maWxlIHRoYXQgd291bGQgaGF2ZSBiZWVuIHN0YXJ0ZWQKICAgICAgICBmcm9tIHRoZSBjb25zb2xlIEFQSSBzaW5jZSB3ZSBub3cgZ2V0IHRoZSBub3RpZmljYXRpb24gdmlhIHRoZSBzaW11bGF0ZWQKICAgICAgICBzZXRSZWNvcmRpbmdKYXZhU2NyaXB0UHJvZmlsZSBwcm90b2NvbCBldmVudC4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlTWFuYWdlci5wcm90b3R5cGUuc2V0UmVjb3JkaW5nSmF2YVNjcmlwdFByb2ZpbGUpOgogICAgICAgIE9ubHkgZGlzcGF0Y2ggdGhlIFByb2ZpbGluZ1N0YXJ0ZWQgZXZlbnQgaWYgdGhlIHByb2ZpbGUgd2FzIGluaXRpYXRlZAogICAgICAgIGZyb20gdGhlIHVzZXIgaW50ZXJmYWNlLgoKMjAxMy0wMy0yNiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBDaGVjay1pbiBzb21lIGRvY3VtZW50YXRpb24gZmlsZXMgb24gdGhlIFJXSSBwcm90b2NvbHMuCgogICAgICAgIEJldHRlciB0aGVzZSBiZSBjaGVja2VkIGluIHRoZW4gZmxvYXRpbmcgb24gbXkgbWFjaGluZS4KCiAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIERvY3VtZW50YXRpb24vUldJLU1lc3NhZ2VzLmdyYWZmbGU6IEFkZGVkLgogICAgICAgICogRG9jdW1lbnRhdGlvbi9SV0ktTWVzc2FnZXMucGRmOiBBZGRlZC4KCjIwMTMtMDMtMjYgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMDk2NjUwPiBEZWJ1Z2dlciBwb3BvdmVyIGRvZXMgbm90IGFwcGVhciBzb21ldGltZXMgKG9yIGlzIHRvbyBzbG93IHRvIGFwcGVhcikKCiAgICAgICAgV2Ugbm93IGRpc21pc3MgdGhlIGRlYnVnZ2VyIHBvcG92ZXIgd2hlbiB0aGUgaG92ZXJlZCB0b2tlbiAob3IgdGhlCiAgICAgICAgcG9wb3ZlciBmb3IgaXQpIGlzIG5vIGxvbmdlciBob3ZlcmVkIGZvciBhIHdob2xlIHNlY29uZC4gQWRkaXRpb25hbGx5LAogICAgICAgIGlmIHRoZXJlIGlzIG1hcmtlZCB0ZXh0LCB3ZSBpbW1lZGlhdGVseSBzaG93IGEgcG9wb3ZlciBmb3IgYSBuZXdseQogICAgICAgIGhvdmVyZWQgdG9rZW4gaW5zdGVhZCBvZiB3YWl0aW5nIDUwMG1zIHNvIHRoYXQncyBlYXNpZXIgdG8gZ28gZnJvbQogICAgICAgIHRva2VuIHRvIHRva2VuIHRvIGdldCB0aGVpciBpbmZvcm1hdGlvbi4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUG9wb3Zlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlBvcG92ZXIucHJvdG90eXBlLmdldCBlbGVtZW50KToKICAgICAgICBOZXdseSBwdWJsaWMgcHJvcGVydHksIHVzZWQgdG8gY2hlY2sgaW4gaG92ZXJlZEVsZW1lbnRDYW5SZWxlYXNlSG92ZXJlZFRva2VuKCkgaW4KICAgICAgICB0aGUgU291cmNlQ29kZVRleHRFZGl0b3Igd2hldGhlciB0aGUgbmV3bHkgaG92ZXJlZCBlbGVtZW50IGlzIGNvbnRhaW5lZCB3aXRoaW4KICAgICAgICBhIHBvcG92ZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5ob3ZlcmVkRWxlbWVudENhblJlbGVhc2VIb3ZlcmVkVG9rZW4pOgogICAgICAgIENoZWNrIHdoZXRoZXIgdGhlIG5ld2x5IGhvdmVyZWQgZWxlbWVudCBpcyBjb250YWluZWQgd2l0aGluIHRoZSBwcmVzZW50ZWQKICAgICAgICBwb3BvdmVyIG9yIHdoZXRoZXIgdGV4dCBpbiB0aGUgcG9wb3ZlciBpcyBzZWxlY3RlZC4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuaG92ZXJlZFRva2VuV2FzUmVsZWFzZWQpOgogICAgICAgIERpc21pc3MgdGhlIHBvcG92ZXIgc2luY2UgdGhlIHVzZXIgaGFzIG1vdXNlZCBvdXQgb2YgdGhlIGhvdmVyZWQgdG9rZW4gbG9uZwogICAgICAgIGVub3VnaCB0aGF0IGl0IHNob3VsZG4ndCBiZSBjb25zaWRlcmVkIGhvdmVyZWQgYW55bW9yZS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zdG9wVHJhY2tpbmdUb2tlbkhvdmVyaW5nKToKICAgICAgICBSZW1vdmUgdGhlIHdpbmRvdy13aWRlIG1vdXNlbW92ZSBldmVudCBsaXN0ZW5lci4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5oYW5kbGVFdmVudCk6CiAgICAgICAgUm91dGUgbW91c2Vtb3ZlIGV2ZW50cyB0byB0aGUgX21vdXNlTW92ZWRXaXRoTWFya2VkVGV4dCgpIG1ldGhvZAogICAgICAgIGlmIGl0J3MgdGhlIHdpbmRvdy13aWRlIG1vdXNlbW92ZSBldmVudCBsaXN0ZW5lci4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5oaWdobGlnaHRIb3ZlcmVkRXhwcmVzc2lvbik6CiAgICAgICAgU3RhcnQgdHJhY2tpbmcgbW91c2Vtb3ZlIGV2ZW50cyBhdCB0aGUgd2luZG93IGxldmVsIHNvIHRoYXQgd2UgY2FuCiAgICAgICAgZGV0ZWN0IGFueSBlbGVtZW50LCBldmVuIG91dHNpZGUgb2YgdGhlIHRleHQgZWRpdG9yLCB0aGF0IG1pZ2h0IGJlCiAgICAgICAgaG92ZXJlZCBsb25nIGVub3VnaCB0byByZWxlYXNlIHRoZSBob3ZlcmVkIHRva2VuLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnJlbW92ZUhpZ2hsaWdodE9uSG92ZXJlZEV4cHJlc3Npb24pOgogICAgICAgIFJlbW92ZSB0aGUgZG9jdW1lbnQtd2lkZSBtb3VzZW1vdmUgZXZlbnQgbGlzdGVuZXIgYW5kIGRlbGV0ZSB0aGUKICAgICAgICBfdG9rZW5IaWdobGlnaHRNYXJrZWRUZXh0IHByb3BlcnR5IHNvIHRoYXQgd2UgY2FuIHVzZSBpdHMgYWJzZW5jZQogICAgICAgIHRvIGdhdGhlciB0aGF0IHRoZXJlIGlzIG5vIG1hcmtlZCB0ZXh0IHdoZW4gY2hlY2tpbmcgZm9yIGEgbmV3bHkKICAgICAgICBob3ZlcmVkIHRva2VuIGluIF9tb3VzZU1vdmVkT3ZlckVkaXRvcigpLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLmhvdmVyZWRFbGVtZW50Q2FuUmVsZWFzZUhvdmVyZWRUb2tlbik6CiAgICAgICAgUHVibGljIG1ldGhvZCB1c2VkIHRvIGlkZW50aWZ5IHdoZXRoZXIgdGhlIGhvdmVyZWQgZWxlbWVudCBxdWFsaWZpZXMKICAgICAgICB0byByZWxlYXNlIHRoZSBob3ZlcmVkIHRva2VuLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzaW1wbHkgY2hlY2tzCiAgICAgICAgdGhhdCB0aGUgaG92ZXJlZCBlbGVtZW50IGlzIHRoZSBtYXJrZWQgdGV4dCBmb3IgdGhlIGhvdmVyZWQgdG9rZW4uIAoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLmhvdmVyZWRUb2tlbldhc1JlbGVhc2VkKToKICAgICAgICBQdWJsaWMgbWV0aG9kIG1lYW50IHRvIGJlIHN1YmNsYXNzZWQsIGNhbGxlZCB3aGVuIHdlJ3ZlIGlkZW50aWZpZWQgdGhhdAogICAgICAgIHRoZSBob3ZlcmVkIHRva2VuIGhhcyBiZWVuIG1vdXNlZCBvdXQgb2YgZm9yIG1vcmUgdGhhbiBhIHNlY29uZC4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fbW91c2VNb3ZlZE92ZXJFZGl0b3IpOgogICAgICAgIEltbWVkaWF0ZWx5IGNoZWNrIHRoZSBuZXdseSBob3ZlcmVkIHRva2VuIGlmIHRoZXJlIGFscmVhZHkgaXMKICAgICAgICBob3ZlcmVkIHRva2VuLCBhbGxvd2luZyBmb3IgYSBxdWljayBpbnNwZWN0aW9uIG9mIGhvdmVyZWQgdG9rZW5zLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9tb3VzZU1vdmVkV2l0aE1hcmtlZFRleHQpOgogICAgICAgIENoZWNrIHRoZSBob3ZlcmVkIGVsZW1lbnQgcXVhbGlmaWVzIHRvIHJlbGVhc2UgdGhlIGhvdmVyIHRva2VuLCBhbmQgaWYgaXQgc28sCiAgICAgICAgc3RhcnQgYSBvbmUtc2Vjb25kIHRpbWVyIHRvIHJlbGVhc2UgaXQuCgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX2NoZWNrSG92ZXJlZFRva2VuKToKICAgICAgICBTdG9wIHRoZSB0aW1lciBzdGFydGVkIGluIF9tb3VzZU1vdmVkV2l0aE1hcmtlZFRleHQoKSB0byBjaGVjayB3aGV0aGVyCiAgICAgICAgdGhlIGN1cnJlbnRseSBob3ZlcmVkIGVsZW1lbnQgY291bGQgcXVhbGlmeSB0byByZWxlYXNlIHRoZSBob3ZlcmVkIHRva2VuLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9tYXJrZWRUZXh0SXNOb0xvbmdlckhvdmVyZWQpOgogICAgICAgIE1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgdGltZXIgc3RhcnRlZCBpbiBfbW91c2VNb3ZlZFdpdGhNYXJrZWRUZXh0KCkgdG8KICAgICAgICBjaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50bHkgaG92ZXJlZCBlbGVtZW50IGNvdWxkIHF1YWxpZnkgdG8gcmVsYXNlIHRoZQogICAgICAgIGhvdmVyZWQgdG9rZW4gaGFzIGZpcmVkLgoKMjAxMy0wMy0yNiAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM1MDU4MTc+IERlYnVnZ2VyIHBvcG92ZXJzIGRvbid0IGFwcGVhciBmb3IgdW5kZWZpbmVkIHZhbHVlcwoKICAgICAgICBIYW5kbGUgdGhlIFJlbW90ZU9iamVjdCB0eXBlICJ1bmRlZmluZWQiIGFuZCBhbHNvIGltcGxlbWVudCBiZXR0ZXIKICAgICAgICBoYW5kbGluZyBvZiBudWxsIE9iamVjdCB2YWx1ZXMgYXMgd2VsbC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlQ29kZVRleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUudG9rZW5XYXNIb3ZlcmVkLnBvcHVsYXRlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS50b2tlbldhc0hvdmVyZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9zaG93UG9wb3ZlckZvck9iamVjdCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3Nob3dQb3BvdmVyRm9yTnVsbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3Nob3dQb3BvdmVyRm9yVW5kZWZpbmVkKToKCjIwMTMtMDMtMjYgIEplc3NpZSBCZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KCiAgICAgICAgUmFuIHVwZGF0ZS1zYWZhcmktbG9jYWxpemFibGUtc3RyaW5ncy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQ29ucmFkIFNodWx0ei4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6CgoyMDEzLTAzLTI2ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzQzOTg1ND4gUkVHUkVTU0lPTjogQ29weWluZyBhcnJheSBvciBvYmplY3Qgb3V0cHV0IGRvZXMgbm90IGNvbnRhaW4gdmFsdWVzCgogICAgICAgIFdlIG5vdyBzaW1wbHkgdXNlIHRoZSBfZm9ybWF0dGVkTWVzc2FnZSBET00gbm9kZSBpZiBhdmFpbGFibGUgYW5kCiAgICAgICAgaWYgdGhlIG1lc3NhZ2UgaXNuJ3QgYSBzdGFjayB0cmFjZS4gVGhlbiwgd2UgaW5zZXJ0IHRoZSBVUkwgbGluZSwKICAgICAgICB3aXRoIHJlcGVhdCBjb3VudCBpZiBzZXQsIGFmdGVyIHRoZSBmaXJzdCBsaW5lLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Db25zb2xlTWVzc2FnZUltcGwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZUltcGwucHJvdG90eXBlLnRvQ2xpcGJvYXJkU3RyaW5nKToKCjIwMTMtMDMtMjYgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMzQ1MDIzPiBMb2dnaW5nIGFuIEFycmF5IGFmdGVyIGl0IGhhcyBiZWVuIHNvcnRlZCByZXN1bHRzIGluIGl0cyB1bmRlZmluZWQgZWxlbWVudHMgbm90IGJlaW5nIHNob3duCgogICAgICAgIE1lcmdpbmcgY29kZSBmcm9tIE9wZW5Tb3VyY2UgdG8gbWF0Y2ggdGhlIGhhbmRsaW5nIG9mIGFycmF5cyBpbiB0aGUgQ29uc29sZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29uc29sZU1lc3NhZ2VJbXBsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS5fZm9ybWF0UGFyYW1ldGVyQXNBcnJheSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZUltcGwucHJvdG90eXBlLmFwcGVuZFVuZGVmaW5lZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZUltcGwucHJvdG90eXBlLl9wcmludEFycmF5KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVtb3RlT2JqZWN0LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LnByb3RvdHlwZS5yZWxlYXNlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5wcm90b3R5cGUuYXJyYXlMZW5ndGgpOgoKMjAxMy0wMy0yNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIERvbid0IGluY2x1ZGUgdGhlIG1haW4gZnJhbWUgZG9jdW1lbnQgYXMgYSBzZXBhcmF0ZSByZXNvdXJjZSBpbiB0aGUgc2lkZWJhci4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNDg0ODA1PiBSRUdSRVNTSU9OOiBNYWluIGZyYW1lIGlzIGluY2x1ZGVkIHR3aWNlIGluIHRoZSBSZXNvdXJjZXMgc2lkZWJhcgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9GcmFtZVJlc291cmNlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5fYWRkRnJhbWVUcmVlRnJvbUZyYW1lUmVzb3VyY2VUcmVlUGF5bG9hZCk6CiAgICAgICAgU2tpcCByZXNvdXJjZXMgd2l0aCB0eXBlICJEb2N1bWVudCIgYW5kIHdpdGggdGhlIHNhbWUgdXJsIGFzIHRoZSBmcmFtZS4KCjIwMTMtMDMtMjUgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBGaXggbGFyZ2UgaW1hZ2Ugc2NhbGluZyBhZnRlciB0aGUgc3dpdGNoIHRvIHRoZSBuZXcgZmxleCBtb2RlbAoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM0OTM3MTI+IFJFR1JFU1NJT046IFZlcnkgcG9vciBpbWFnZSBzcXVpc2hpbmcgd2hlbiBjb250ZW50CiAgICAgICAgd2luZG93IGlzIG5hcnJvdyAvIGltYWdlIGlzIGxhcmdlICgxMTMyMjIpCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlUmVzb3VyY2VDb250ZW50Vmlldy5jc3M6CiAgICAgICAgKC5jb250ZW50LXZpZXcucmVzb3VyY2UuaW1hZ2UpOgogICAgICAgICguY29udGVudC12aWV3LnJlc291cmNlLmltYWdlIGltZyk6CiAgICAgICAgVXNlIG1pbi13aWR0aDogMCBzbyB0aGUgaW1hZ2UgY2FuIHNocmluay4KCjIwMTMtMDMtMjQgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgVHVybiBvbiBzdXBwb3J0IGZvciBicmVha3BvaW50cyBpbiBwcmV0dHkgcHJpbnRlZCByZXNvdXJjZXMgYW5kIFNvdXJjZU1hcHMKCiAgICAgICAgV2UgYXJlIG5vdyBnZXR0aW5nIGV4cGVjdGVkIGNvbHVtbiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBiYWNrZW5kIGFuZAogICAgICAgIGhpdHRpbmcgYnJlYWtwb2ludHMgb24gY29sdW1ucyBhcyBleHBlY3RlZC4gVGhpcyB3YXMgdGhlIGxhc3QgY2hhbmdlCiAgICAgICAgbmVlZGVkIHRvIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgdGFza3MgY29tcGxldGU6CiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExMjE5NzcxPiBSRUdSRVNTSU9OIChTYWZhcmkgNik6IENhbid0IHByZXR0eS1wcmludCBKYXZhU2NyaXB0CiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExNzM1MTE2PiBQQVJJVFkgKFdlYktpdCBXZWIgSW5zcGVjdG9yKTogTWlzc2luZyBTb3VyY2UgTWFwIHN1cHBvcnQKCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGVidWdnZXJTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3RyZWVFbGVtZW50U2VsZWN0ZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fY29udGVudERpZFBvcHVsYXRlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fYWN0aXZlQ2FsbEZyYW1lRGlkQ2hhbmdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS50ZXh0RWRpdG9yQnJlYWtwb2ludEFkZGVkKToKCjIwMTMtMDMtMjQgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgV29ya2Fyb3VuZCB3aGlsZSBzdGlsbCBpbnZlc3RpZ2F0aW5nIDxyZGFyOi8vcHJvYmxlbS8xMzQxMjk2OT4uCgogICAgICAgIEp1bXAgdG8gbGluZSBjZW50ZXJlZCBjYW4gc3RpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIHdoZW4gcmV2ZWFsaW5nIGEKICAgICAgICB3aGVuIHRoZSBjb250ZW50IGZpcnN0IGxvYWRzIChyZXZlYWwgcGVuZGluZyBsaW5lKS4gU28gZGVsYXkgaW4KICAgICAgICBqdXN0IHRoYXQgY2FzZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnJldmVhbEFuZEhpZ2hsaWdodExpbmUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUucmV2ZWFsTGluZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fcmV2ZWFsUGVuZGluZ0xpbmVJZlBvc3NpYmxlKToKCjIwMTMtMDMtMjUgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNDk1MDg2PiBDb21tYW5kcyBhbmQgdGhlaXIgcmVzdWx0IHNob3VsZCBub3QgYmUgc3ViamVjdCB0byBzZWFyY2ggZmlsdGVyaW5nCgogICAgICAgIE5vIGxvbmdlciBmaWx0ZXIgb3V0IGNvbW1hbmRzIGFuZCB0aGVpciByZXN1bHRzIGJhc2VkIG9uIHNlYXJjaCB0ZXJtcy4KICAgICAgICBXZSBhbHNvIGNoYW5nZSB0aGUgQ1NTIGNsYXNzIG5hbWUgd2UgdXNlIHRvIGhpZGUgbWVzc2FnZXMgdGhhdCBtYXkgYmUKICAgICAgICBmaWx0ZXJlZCBvdXQgZHVlIHRvIHRoZSBzZWFyY2ggdGVybXMgdG8gYmUgZXhjbHVzaXZlIHJhdGhlciB0aGFuCiAgICAgICAgaW5jbHVzaXZlLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dDb250ZW50Vmlldy5jc3M6CiAgICAgICAgKC5zZWFyY2gtaW4tcHJvZ3Jlc3MgLmNvbnNvbGUtaXRlbS5maWx0ZXJlZC1vdXQtYnktc2VhcmNoKToKICAgICAgICAoLnNlYXJjaC1pbi1wcm9ncmVzcyAuY29uc29sZS1pdGVtOm5vdCguZmlsdGVyZWQtb3V0LWJ5LXNlYXJjaCkgLmhpZ2hsaWdodGVkKToKICAgICAgICAoLnNlYXJjaC1pbi1wcm9ncmVzcyAuY29uc29sZS1pdGVtOm5vdCguZmlsdGVyZWQtb3V0LWJ5LXNlYXJjaCkgLmhpZ2hsaWdodGVkLnNlbGVjdGVkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX2lzTWVzc2FnZVZpc2libGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl92aXNpYmxlTWVzc2FnZXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9wZXJmb3JtU2VhcmNoKToKCjIwMTMtMDMtMjUgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNDk0NzQ4PiBFeHBhbmRhYmxlIGNvbnNvbGUgaXRlbXMgc2hvdWxkIG9ubHkgc2VsZWN0IHdoZW4gY2xpY2tpbmcgb3V0c2lkZSBvZiB0aGUgZXhwYW5kYWJsZSBwYXJ0CgogICAgICAgIFdlIG5vIGxvbmdlciBzZWxlY3QgbWVzc2FnZXMgaWYgdGhlIGhpdCBhcmVhIGlzIHBhcnQgb2YgYW4gZXhwYW5kYWJsZSBlbGVtZW50LgogICAgICAgIFRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIGV4cGFuZCBub2RlcyBhbmQgSlMgb2JqZWN0cyB3aXRob3V0IGZpcnN0IGhhdmluZyB0bwogICAgICAgIHNlbGVjdCB0aGUgY29uc29sZSBtZXNzYWdlLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fbW91c2Vkb3duKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fdGFyZ2V0SW5NZXNzYWdlQ2FuQmVTZWxlY3RlZCk6CgoyMDEzLTAzLTI1ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzQ5NTAyMz4gSlMgb2JqZWN0cyBsb2dnZWQgdG8gY29uc29sZSBjYW4ndCBiZSBleHBhbmRlZCB1c2luZyBrZXlib2FyZAoKICAgICAgICBXZSBub3cgYWxzbyBoYW5kbGUgZXhwYW5zaW9uIG9mIEpTIG9iamVjdHMgbG9nZ2VkIHRvIHRoZSBjb25zb2xlLiBUbyBzdXBwb3J0IHRoaXMsCiAgICAgICAgd2UgYWRkIGEgbmV3IFZpc2libGVDb250ZW50RGlkQ2hhbmdlIGV2ZW50IHRvIFdlYkluc3BlY3Rvci5TZWN0aW9uIHN1Y2ggdGhhdCB3ZSBjYW4KICAgICAgICB3aGVuIHRoZSB2aXNpYmxlIGNvbnRlbnQgb2YgYSBnaXZlbiBXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydGllc1NlY3Rpb24gaXMgdXBkYXRlZCwKICAgICAgICBzaW5jZSB0aGVyZSBpcyBubyBvbmV4cGFuZCgpIG1ldGhvZCBhdmFpbGFibGUgYXMgaXMgdGhlIGNhc2Ugd2l0aCBUcmVlT3V0bGluZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX2xlZnRBcnJvd1dhc1ByZXNzZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9yaWdodEFycm93V2FzUHJlc3NlZC5lbHNlLmJpbmQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9yaWdodEFycm93V2FzUHJlc3NlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX3Byb3BlcnRpZXNTZWN0aW9uRGlkVXBkYXRlQ29udGVudCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL09iamVjdFByb3BlcnRpZXNTZWN0aW9uLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlLnVwZGF0ZVByb3BlcnRpZXMpOgogICAgICAgICogVXNlckludGVyZmFjZS9TZWN0aW9uLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2VjdGlvbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TZWN0aW9uLnByb3RvdHlwZS5leHBhbmQpOgoKMjAxMy0wMy0yNSAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM0MTY0NjE+IE1lc3NhZ2UgcmVwZWF0IGNvdW50IGNhdXNlcyBiYWQgbGF5b3V0IGluIHRoZSBDb25zb2xlCgogICAgICAgIFdlIG5vdyBhbHdheXMgZGlzcGxheSB0aGUgd2FybmluZyBvciBlcnJvciBpY29uIGFzIHdlbGwgYXMgdGhlIHJlcGVhdCBjb3VudAogICAgICAgIGZvciB0aGUgbWVzc2FnZSwgYW5kIHdlIGNvcHkgdGhlIHJlcGVhdCBjb3VudCB0byB0aGUgY2xpcGJvYXJkIGFzIHdlbGwuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnNvbGVNZXNzYWdlSW1wbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUudXBkYXRlUmVwZWF0Q291bnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS50b0NsaXBib2FyZFN0cmluZyk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ0NvbnRlbnRWaWV3LmNzczoKICAgICAgICAoLmNvbnNvbGUtbWVzc2FnZSAuYnViYmxlKToKCjIwMTMtMDMtMjUgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNDkzNzc1PiBDb25zb2xlIGxvZyBzaG91bGQgc2Nyb2xsIHRvIHJldmVhbCBtZXNzYWdlcyBmb3IgaGlnaGxpZ2h0ZWQgc2VhcmNoIG1hdGNoCgogICAgICAgIE1ha2Ugc3VyZSB3ZSBzY3JvbGwgdG8gcmV2ZWFsIG1lc3NhZ2VzIHVwb24gaGlnaGxpZ2h0aW5nIGEgbWF0Y2guCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ0NvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9oaWdobGlnaHRTZWFyY2hNYXRjaEF0SW5kZXgpOgoKMjAxMy0wMy0yNCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM0MTgzMTc+IFJFR1JFU1NJT046IERPTSBUcmVlICJFZGl0IGFzIEhUTUwiIGlzIG5vdCBpbnNlcnRpbmcgbmV3bGluZXMgd2l0aCByZXR1cm4KCiAgICAgICAgR2l2ZSBtdWx0aWxpbmUgV2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGluZyBlZGl0IGJveGVzIGhhdmUgYmV0dGVyIHdoaXRlLXNwYWNlIGJlaGF2aW9yLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9FZGl0aW5nLmNzczoKICAgICAgICAoLmVkaXRpbmcubXVsdGlsaW5lKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRWRpdGluZ1N1cHBvcnQuanM6CgoyMDEzLTAzLTI0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzQ5MTkxNj4gU2VhcmNoaW5nIGZvcndhcmQgb3IgYmFjayBpbiBmaW5kIGJhbm5lciBzaG91bGQgcmV2ZWFsIGluIGNlbnRlcgoKICAgICAgICBSZXZpZXdlZCBieSBEZWFuIEphY2tzb24uCgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3JldmVhbFNlYXJjaFJlc3VsdCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5faXNQb3NpdGlvblZpc2libGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3Njcm9sbEludG9WaWV3Q2VudGVyZWQpOgogICAgICAgIFdoZW4gcmV2ZWFsaW5nIGEgc2VhcmNoIHJlc3VsdCwgcmV2ZWFsIHRoZSBsaW5lIGNlbnRlcmVkIGluCiAgICAgICAgdGhlIGVkaXRvciBpZiBuZWVkZWQuIERvbid0IGRvIHRoZSBzZXRUaW1lb3V0LCB0aGUgbGluZXMgaW4KICAgICAgICB0aGUgZWRpdG9yIGRpZCBub3QgY2hhbmdlIHNvIHdlIHNob3VsZG4ndCBuZWVkIHRvIHdvcnJ5IGFib3V0CiAgICAgICAgdGhlIENvZGVNaXJyb3IgZXhjZXB0aW9uLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnJldmVhbEFuZEhpZ2hsaWdodExpbmUpOgogICAgICAgIFNoYXJlIHRoZSBpc1Bvc2l0aW9uVmlzaWJsZSBjb2RlLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9wcmV0dHlQcmludCk6CiAgICAgICAgVGhpcyBpcyB0aGUgb25seSBjYXNlIHdoZXJlIEkga25vdyB3ZSBuZWVkIHRoZSBzZXRUaW1lb3V0IGRlbGF5CiAgICAgICAgdG8gd29ya2Fyb3VuZCBhIENvZGVNaXJyb3IgZXhjZXB0aW9uIHdoZW4gYXV0b2Zvcm1hdHRpbmcuCgoyMDEzLTAzLTIzICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzQ5MTI1Nz4gQ1NTIHByZXR0eSBwcmludGluZyBubyBsb25nZXIgd29ya3MKCiAgICAgICAgRm9yIENTUyB0aGVyZSBpcyBub3cgYSAiY3NzLWJhc2UiIG1vZGUgd2l0aCBhICJ0ZXh0L2NzcyIgdmFyaWFudCwKICAgICAgICBhbmQgYSAidGV4dC94LXNjc3MiIHZhcmlhbnQuIFRoZXJlIGlzIGEgY29udmVuaWVuY2UgbW9kZSAiY3NzIgogICAgICAgIHdoaWNoIGV4cGxpY2l0bHkgZ2V0cyB0aGUgInRleHQvY3NzIiB2YXJpYW50IG9mIHRoZSAiY3NzLWJhc2UiIG1vZGUuCgogICAgICAgIFRoZSBwcmV0dHkgcHJpbnRlciBzaG91bGQgZXh0ZW5kICJjc3MtYmFzZSIuIFdoZXRoZXIgdGhlIGNvbnRlbnQKICAgICAgICBpcyAidGV4dC9jc3MiIG9yICJ0ZXh0L3gtc2NzcyIgdGhlIG1vZGUgb3V0cHV0dGluZyB0aGUgdG9rZW5zIHdpbGwKICAgICAgICBiZSAiY3NzLWJhc2UiLCBhbmQgdGhhdCBtb2RlIG5lZWRzIHRvIGhhdmUgdGhlIHByZXR0eSBwcmludGVyCiAgICAgICAgZXh0ZW5zaW9ucy4KCiAgICAgICAgRXh0ZW5kIHRoZSAiY3NzLWJhc2UiIG1vZGUsIGluc3RlYWQgb2YgdGhlIG92ZXJseSBzcGVjaWZpYyB0ZXh0L2NzcwogICAgICAgIGNzcyBtb2RlIHRvIGhhdmUgZXh0ZW5kZWRUb2tlbiBhbmQgYWx0ZXJuYXRlIG5hbWUgImNzcyIuIFNvLCBhcwogICAgICAgICJjc3MtYmFzZSIgY3JlYXRlcyB0b2tlbnMgZm9yIGVpdGhlciAidGV4dC9jc3MiIG9yICJ0ZXh0L3gtc2NzcyIsCiAgICAgICAgaXQgd2lsbCBhZGRzIG91ciAibS1jc3MiIHN0eWxlIGNsYXNzZXMgYW5kIGdldCBvdXIgc3R5bGVzLgoKICAgICAgICBXZSBzdGlsbCBkZWZpbmUgdGhlICJjc3MtcnVsZSIgbW9kZSB0byBiZSBhbiBhbGlhcyBvZiB0aGUgdGV4dC9jc3MKICAgICAgICBzcGVjaWZpYyBtb2RlLiBUbyB3b3JrYXJvdW5kIGEgbGltaXRhdGlvbiBvZiBDb2RlTWlycm9yLCB3ZSBkb24ndAogICAgICAgIHJlLWV4dGVuZCBhbnkgcHJvcGVydGllcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGV4dGVuZGVkICh0b2tlbiwKICAgICAgICBhbHRlcm5hdGUgbmFtZSkgYW5kIG9ubHkgZXh0ZW5kIG5ldyBwcm9wZXJ0aWVzLiBXZSBnZXQgdGhlIGVhcmxpZXIKICAgICAgICBleHRlbnNpb25zIGJlY2F1c2UgaW50ZXJuYWxseSB3aGVuIGNyZWF0aW5nIGEgImNzcy1ydWxlIiBtb2RlLAogICAgICAgIENvZGVNaXJyb3IgZ2V0IHRoZSB0ZXh0L2NzcyB2YXJpYW50IG9mICJjc3MtYmFzZSIgd2l0aCAiY3NzLWJhc2UiCiAgICAgICAgZXh0ZW5zaW9ucyBhbmQgdGhlbiBhcHBsaWVzIG91ciBleHRlbnNpb25zIG9uIHRvcCBvZiB0aGF0LgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Db2RlTWlycm9yRm9ybWF0dGVycy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLmhhc0Zvcm1hdHRlcik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvZGVNaXJyb3JBZGRpdGlvbnMuanM6CgoyMDEzLTAzLTIzICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzQ5MDc4MD4gRmluZCBiYW5uZXIgc3RhdHVzIGRvZXMgbm90IHVwZGF0ZSBhZnRlciBzd2l0Y2hpbmcgYmV0d2VlbiBzb3VyY2UgZmlsZXMKCiAgICAgICAgV2hlbiBzd2l0Y2hpbmcgY29udGVudCB2aWV3cywgcmVzZXQgdGhlIGZpbmQgYmFubmVyIGFuZCBwZXJmb3JtIGEKICAgICAgICBzZWFyY2ggd2l0aCB0aGUgZmluZCBiYW5uZXIncyBxdWVyeSBpbiB0aGUgbmV3IGNvbnRlbnQgdmlldyBzbyB0aGF0CiAgICAgICAga2V5Ym9hcmQgc2hvcnRjdXRzIHdpbGwgd29yayBpbiB0aGUgbmV3IGNvbnRlbnQgdmlldyBldmVuIHRob3VnaAogICAgICAgIHRoZSBmaW5kIGJhbm5lciBpcyBoaWRkZW4uCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXcucHJvdG90eXBlLmdldCBoYXNQZXJmb3JtZWRTZWFyY2gpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXcucHJvdG90eXBlLnNldCBhdXRvbWF0aWNhbGx5UmV2ZWFsRmlyc3RTZWFyY2hSZXN1bHQpOgogICAgICAgIFByb3BlcnRpZXMgdXNlZCBieSBDb250ZW50QnJvd3NlciB0byB1cGRhdGUgdGhlIGZpbmQgYmFubmVyIHdoZW4KICAgICAgICBzd2l0Y2hpbmcgdG8gdGhlIENvbnRlbnRWaWV3LiBBbGxvdyBhIHNlYXJjaCB0byBiZSBwZXJmb3JtZWQgb24KICAgICAgICBhIENvbnRlbnRWaWV3IHdpdGhvdXQgYXV0b21hdGljYWxseSBqdW1waW5nIHRvIHRoZSBmaXJzdCByZXN1bHQuCgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZW50QnJvd3Nlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyLnByb3RvdHlwZS5fZmluZEJhbm5lckRpZFNob3cpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIucHJvdG90eXBlLl9maW5kQmFubmVyRGlkSGlkZSk6CiAgICAgICAgQWxsb3cgb3IgZGlzYWxsb3cganVtcGluZyB0byB0aGUgZmlyc3Qgc2VhcmNoIHJlc3VsdCBiYXNlZCBvbiBiYW5uZXIgdmlzaWJpbGl0eS4KICAgICAgICBLZXlib2FyZCBzaG9ydGN1dHMgd2lsbCBzdGlsbCB3b3JrLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyLnByb3RvdHlwZS5fdXBkYXRlRmluZEJhbm5lcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuX2N1cnJlbnRDb250ZW50Vmlld0RpZENoYW5nZSk6CiAgICAgICAgV2hlbiB0aGUgY29udGVudCB2aWV3IGNoYW5nZXMsIHVwZGF0ZSB0aGUgYmFubmVyLiBTZWFyY2ggdGhlIG5ldwogICAgICAgIGNvbnRlbnQgdmlldyBzbyB0aGF0IGtleWJvYXJkIHNob3J0Y3V0cyB3b3JrLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRmluZEJhbm5lci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkZpbmRCYW5uZXIucHJvdG90eXBlLnNob3cpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRmluZEJhbm5lci5wcm90b3R5cGUuaGlkZSk6CiAgICAgICAgRW1pdCBldmVudHMgZm9yIHdoZW4gdGhlIGJhbm5lciBzaG93cyBvciBoaWRlcy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NsdXN0ZXJDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNsdXN0ZXJDb250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IGhhc1BlcmZvcm1lZFNlYXJjaCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DbHVzdGVyQ29udGVudFZpZXcucHJvdG90eXBlLnNldCBhdXRvbWF0aWNhbGx5UmV2ZWFsRmlyc3RTZWFyY2hSZXN1bHQpOgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlQ29udGVudFZpZXcucHJvdG90eXBlLmdldCBoYXNQZXJmb3JtZWRTZWFyY2gpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5zZXQgYXV0b21hdGljYWxseVJldmVhbEZpcnN0U2VhcmNoUmVzdWx0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVDb250ZW50Vmlldy5wcm90b3R5cGUucGVyZm9ybVNlYXJjaC5zZWFyY2hSZXN1bHRzUmVhZHkpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5wZXJmb3JtU2VhcmNoKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2NyaXB0Q29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRDb250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IGhhc1BlcmZvcm1lZFNlYXJjaCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRDb250ZW50Vmlldy5wcm90b3R5cGUuc2V0IGF1dG9tYXRpY2FsbHlSZXZlYWxGaXJzdFNlYXJjaFJlc3VsdCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnNldCBhdXRvbWF0aWNhbGx5UmV2ZWFsRmlyc3RTZWFyY2hSZXN1bHQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuYWRkU2VhcmNoUmVzdWx0cy5tYXJrUmFuZ2VzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLmFkZFNlYXJjaFJlc3VsdHMpOgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgaGFzUGVyZm9ybWVkU2VhcmNoKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5zZXQgYXV0b21hdGljYWxseVJldmVhbEZpcnN0U2VhcmNoUmVzdWx0KToKICAgICAgICBJbXBsZW1lbnQgdGhlIG5ldyBDb250ZW50VmlldyBwcm9wZXJ0aWVzLiBSZXNwZWN0IHRoZSAKICAgICAgICBhdXRvbWF0aWNhbGx5UmV2ZWFsRmlyc3RTZWFyY2hSZXN1bHQgcHJvcGVydHkgYnkgbm90IGp1bXBpbmcgdG8gdGhlCiAgICAgICAgZmlyc3QgcmVzdWx0IHVubGVzcyB3ZSBhcmUgYWxsb3dlZCB0b28uCgoyMDEzLTAzLTIzICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIEZpeCBhIHR5cG8gY2F1c2luZyB3YXJuaW5ncyBpbiB0aGUgaW5zcGVjdG9yLgoKICAgICAgICBVbnJldmlld2VkLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgoKMjAxMy0wMy0yMyAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTE2ODI0Njc+IFNob3VsZCBiZSBhYmxlIHRvIGRvIGEgRmluZCBpbiBhIExvZwoKICAgICAgICBBZGQgYSBzZWFyY2ggLyBmaWx0ZXIgYmFyIHRvIHRoZSBuYXZpZ2F0aW9uIGJhciBvZiB0aGUgY29uc29sZSBsb2cuCiAgICAgICAgVGhlIHNlYXJjaCBiYXIgY2FuIGJlIGdpdmVuIGZvY3VzIGJ5IGhpdHRpbmcgQ21kK0YsIGFuZCBpdCBjYW4gcHJvdmlkZQogICAgICAgIGZvY3VzIGJhY2sgdG8gdGhlIGNvbnNvbGUgcHJvbXB0IGJ5IGhpdHRpbmcgRXNjLiBvciBFbnRlciAod2hpY2ggYWxzbwogICAgICAgIGhpZ2hsaWdodHMgdGhlIGZpcnN0IG1hdGNoaW5nIHNlYXJjaCByZXN1bHQpLiBUaGUgQ21kK0cgYW5kIENtZCtTaGlmdCtHCiAgICAgICAga2V5Ym9hcmQgc2hvcnRjdXRzIGFsc28gd29yayBhcyBleHBlY3RlZC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0phdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlLl9wcm9tcHRLZXlEb3duKToKICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdGhlIG5ldyBDbWQrRiwgQ21kK0cgYW5kIENtZCtTaGlmdCtHIGtleWJvYXJkIHNob3J0Y3V0cy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ0NvbnRlbnRWaWV3LmNzczoKICAgICAgICAoLmxvZy1zZWFyY2gtYmFyID4gaW5wdXQpOgogICAgICAgICguc2VhcmNoLWluLXByb2dyZXNzIC5jb25zb2xlLWl0ZW0pOgogICAgICAgICguc2VhcmNoLWluLXByb2dyZXNzIC5jb25zb2xlLWl0ZW0ubWF0Y2hlcy1zZWFyY2g6bm90KC5maWx0ZXJlZC1vdXQpKToKICAgICAgICAoLnNlYXJjaC1pbi1wcm9ncmVzcyAuY29uc29sZS1pdGVtLm1hdGNoZXMtc2VhcmNoIC5oaWdobGlnaHRlZCk6CiAgICAgICAgKC5zZWFyY2gtaW4tcHJvZ3Jlc3MgLmNvbnNvbGUtaXRlbS5tYXRjaGVzLXNlYXJjaCAuaGlnaGxpZ2h0ZWQuc2VsZWN0ZWQpOgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldyk6CiAgICAgICAgQ3JlYXRlIHRoZSBTZWFyY2hCYXIuCgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLmdldCBuYXZpZ2F0aW9uSXRlbXMpOgogICAgICAgIEFkZCB0aGUgU2VhcmNoQmFyIHRvIHRoZSBuYXZpZ2F0aW9uIGJhci4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IHNlYXJjaEluUHJvZ3Jlc3MpOgogICAgICAgIEluaWRpY2F0ZXMgd2hldGhlciBhIHNlYXJjaCBpcyBpbiBwcm9ncmVzcyAoaWUuIHNlYXJjaCB0ZXJtCiAgICAgICAgaXNuJ3QgdGhlIGVtcHR5IHN0cmluZykuCgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLmZvY3VzU2VhcmNoQmFyKToKICAgICAgICBOZXcgQVBJIHRvIGJyaW5nIGZvY3VzIHRvIHRoZSBTZWFyY2hCYXIncyBpbnB1dCBmaWVsZC4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuaGlnaGxpZ2h0UHJldmlvdXNTZWFyY2hNYXRjaCk6CiAgICAgICAgTmV3IEFQSSB0byBoaWdobGlnaHQgdGhlIHByZXZpb3VzIHNlYXJjaCBtYXRjaC4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuaGlnaGxpZ2h0TmV4dFNlYXJjaE1hdGNoKToKICAgICAgICBOZXcgQVBJIHRvIGhpZ2hsaWdodCB0aGUgbmV4dCBzZWFyY2ggbWF0Y2guCgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLnNlYXJjaEJhcldhbnRzVG9Mb3NlRm9jdXMpOgogICAgICAgIFNlYXJjaEJhciBkZWxlZ2F0ZSBtZXRob2Qgd2UgdXNlIHRvIG1vdmUgZm9jdXMgYmFjayB0byB0aGUgcHJvbXB0CiAgICAgICAgYXMgdGhlIHVzZXIgaGl0IHRoZSBFc2MuIGtleSB3aGlsZSB0aGUgc2VhcmNoIGJhciBoYXMgZm9jdXMuCgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLnNlYXJjaEJhckRpZEFjdGl2YXRlKToKICAgICAgICBTZWFyY2hCYXIgZGVsZWdhdGUgbWV0aG9kIHdlIHVzZSB0byBtb3ZlIGZvY3VzIGJhY2sgdG8gdGhlIHByb21wdAogICAgICAgIGFzIHRoZSB1c2VyIGhpdCB0aGUgRW50ZXIga2V5IHdoaWxlIHRoZSBzZWFyY2ggYmFyIGhhcyBmb2N1cy4gV2UKICAgICAgICBhbHNvIHNlbGVjdCB0aGUgZmlyc3Qgc2VhcmNoIG1hdGNoIHRvIG1ha2UgaXQgc3RhbmQgb3V0LgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fdXBkYXRlTWVzc2FnZXNTZWxlY3Rpb24pOgogICAgICAgIFJlZmFjdG9yaW5nOiBfYWxsVmlzaWJsZU1lc3NhZ2VzKCkgaXMgbm93IF92aXNpYmxlTWVzc2FnZXMoKS4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX2lzTWVzc2FnZVZpc2libGUpOgogICAgICAgIFRha2UgaW50byBhY2NvdW50IHdoZXRoZXIgdGhlIG1lc3NhZ2UgbWF0Y2hlcyB0aGUgc2VhcmNoIHRlcm1zCiAgICAgICAgc28gdGhhdCBpdCdzIGZpbHRlcmVkIG90aGVyd2lzZS4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX3NlbGVjdEFsbE1lc3NhZ2VzKToKICAgICAgICBSZWZhY3RvcmluZzogX2FsbFZpc2libGVNZXNzYWdlcygpIGlzIG5vdyBfdmlzaWJsZU1lc3NhZ2VzKCkuCgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl91bmZpbHRlcmVkTWVzc2FnZXMpOgogICAgICAgIE5ldyBtZXRob2QgdG8gcHJvdmlkZSB0aGUgbGlzdCBvZiBtZXNzc2FnZXMgdGhhdCBtYXRjaCB0aGUKICAgICAgICBmaWx0ZXJzIHByb3ZpZGVkIHZpYSB0aGUgc2NvcGUgYmFyLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fdmlzaWJsZU1lc3NhZ2VzKToKICAgICAgICBSZWZhY3RvcmluZzogX2FsbFZpc2libGVNZXNzYWdlcygpIGlzIG5vdyBfdmlzaWJsZU1lc3NhZ2VzKCkuCiAgICAgICAgQWxzbyB0YWtlIGludG8gYWNjb3VudCBhZGRpdGlvbmFsIGZpbHRlcmluZyB2aWEgdGhlIHNlYXJjaCBiYXIuCgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9maWx0ZXJNZXNzYWdlcyk6CiAgICAgICAgUGVyZm9ybSBhIHNlYXJjaCBhZnRlciB0aGUgZmlsdGVycyBoYXZlIGNoYW5nZWQgdG8gZW5zdXJlIHdlCiAgICAgICAgYXJlIHNob3dpbmcgdGhlIGNvcnJlY3Qgc2V0IG9mIG1lc3NhZ2VzLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fa2V5RG93bik6CiAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHRoZSBuZXcgQ21kK0YsIENtZCtHIGFuZCBDbWQrU2hpZnQrRyBrZXlib2FyZCBzaG9ydGN1dHMuCgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9jb21tYW5kRldhc1ByZXNzZWQpOgogICAgICAgIEZvY3VzIHRoZSBzZWFyY2ggYmFyIHVwb24gaGl0dGluZyBDbWQrRi4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX2NvbW1hbmRHV2FzUHJlc3NlZCk6CiAgICAgICAgSGlnaGxpZ2h0IHRoZSBuZXh0IHNlYXJjaCBtYXRjaCB1cG9uIGhpdHRpbmcgQ21kK0cuCgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9jb21tYW5kU2hpZnRHV2FzUHJlc3NlZCk6CiAgICAgICAgSGlnaGxpZ2h0IHRoZSBuZXh0IHNlYXJjaCBtYXRjaCB1cG9uIGhpdHRpbmcgQ21kK1NoaWZ0K0cuCgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl91cEFycm93V2FzUHJlc3NlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX2Rvd25BcnJvd1dhc1ByZXNzZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9wcmV2aW91c01lc3NhZ2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9uZXh0TWVzc2FnZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX2NsZWFyRm9jdXNhYmxlQ2hpbGRyZW4pOgogICAgICAgIFJlZmFjdG9yaW5nOiBfYWxsVmlzaWJsZU1lc3NhZ2VzKCkgaXMgbm93IF92aXNpYmxlTWVzc2FnZXMoKS4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX3NlYXJjaFRleHREaWRDaGFuZ2UpOgogICAgICAgIFJ1biB0aGUgc2VhcmNoIGFzIHRoZSB0ZXJtcyBpbiB0aGUgc2VhcmNoIGJhciBjaGFuZ2VkLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fcGVyZm9ybVNlYXJjaCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX2hpZ2hsaWdodFJhbmdlcyk6CiAgICAgICAgUGVyZm9ybSBhIHNlYXJjaCBiYXNlZCBvbiB0aGUgdGV4dCBpbiB0aGUgc2VhcmNoIGJhciBhbmQgYXBwbHkKICAgICAgICBhICJtYXRjaGVzLXNlYXJjaCIgQ1NTIGNsYXNzIHRvIGFsbCB0ZXh0IHJhbmdlcyBtYXRjaGluZyB0aGUKICAgICAgICBzZWFyY2ggdGVybXMuIFRoaXMgaXMgYWN0dWFsbHkgcGVyZm9ybWVkIGJ5IG1ldGhvZCBtZXJnZWQgZnJvbQogICAgICAgIHRoZSBPcGVuU291cmNlIFdlYiBJbnNwZWN0b3IgY29kZS4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX3Jhbmdlc092ZXJsYXApOgogICAgICAgIENoZWNrcyB3aGV0aGVyIHR3byB0ZXh0IHJhbmdlcyBvdmVybGFwIGF0IGFsbC4gV2UgdXNlIHRoaXMgdG8gaWRlbnRpZnkKICAgICAgICBpZiB0aGUgcHJldmlvdXNseSBzZWxlY3RlZCBzZWFyY2ggdGVybSBpcyBzdGlsbCBwcmVzZW50IGluIHRoZSBuZXcKICAgICAgICBzZXQgb2YgbWF0Y2hpbmcgc2VhcmNoIHJhbmdlcy4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX2hpZ2hsaWdodFNlYXJjaE1hdGNoQXRJbmRleCk6CiAgICAgICAgSGlnaGxpZ2h0cyBhIGdpdmVuIHRlcm0gaW4gdGhlIGFycmF5IG9mIGhpZ2hsaWdodGVkIGVsZW1lbnRzIGNyZWF0ZWQgaW4KICAgICAgICBfcGVyZm9ybVNlYXJjaCgpLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgogICAgICAgIEluY2x1ZGUgdGhlIG5ldyBTZWFyY2hCYXIgZmlsZXMuCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuaGlnaGxpZ2h0UmFuZ2VzV2l0aFN0eWxlQ2xhc3MpOgogICAgICAgIChXZWJJbnNwZWN0b3IucmV2ZXJ0RG9tQ2hhbmdlcyk6CiAgICAgICAgTWV0aG9kcyBtZXJnZWQgYXMtaXMgZnJvbSBPcGVuU291cmNlLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2VhcmNoQmFyLmNzczogQWRkZWQuCiAgICAgICAgKC5zZWFyY2gtYmFyID4gaW5wdXQpOgogICAgICAgICogVXNlckludGVyZmFjZS9TZWFyY2hCYXIuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoQmFyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaEJhci5wcm90b3R5cGUuZ2V0IHRleHQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoQmFyLnByb3RvdHlwZS5zZXQgdGV4dCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hCYXIucHJvdG90eXBlLmZvY3VzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaEJhci5wcm90b3R5cGUuX2hhbmRsZVNlYXJjaEV2ZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaEJhci5wcm90b3R5cGUuX2hhbmRsZUtleWRvd25FdmVudCk6CiAgICAgICAgTmV3IE5hdmlnYXRpb25JdGVtIHN1YmNsYXNzIHRvIHByb3ZpZGUgYSBTZWFyY2hCYXIgd2l0aGluIGEgTmF2aWdhdGlvbkJhci4KCjIwMTMtMDMtMjIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIHRoZSBOZXcgUnVsZSBidXR0b24gMTBweCB0YWxsZXIgZm9yIGEgYmlnZ2VyIGhpdCB0YXJnZXQuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzQ3MDIwMD4gSSBleHBlY3QgdGhlIGNsaWNrYWJsZSBhcmVhIGZvciAiKyBOZXcgUnVsZSIgdG8gYmUgYmlnZ2VyLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9SdWxlc1N0eWxlRGV0YWlsc1BhbmVsLmNzczoKICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuZGV0YWlscy5jc3Mtc3R5bGUgLnJ1bGVzIC5uZXctcnVsZSk6CgoyMDEzLTAzLTIyICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgU2hvdyB0aGUgY29tcHJlc3Npb24gc3RhdHVzIGFuZCB0aGUgY29tcHJlc3Npb24gYW1vdW50IGluIHRoZSBSZXNvdXJjZSBkZXRhaWxzIHNpZGViYXIuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzIwMTA3MD4gU2hvdyBnemlwIHN0YXR1cyBvZiByZXNvdXJjZXMgbW9yZSBwcm9taW5lbnRseQoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiBVcGRhdGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5nZXQgZW5jb2RlZFNpemUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5nZXQgdHJhbnNmZXJTaXplKTogVXNlIGVuY29kZWRTaXplLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLmdldCBjb21wcmVzc2VkKTogQWRkZWQuCgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwpOiBBZGRlZCBjb21wcmVzc2lvbiBncm91cC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3JlZnJlc2hSZXF1ZXN0QW5kUmVzcG9uc2UpOiBDYWxsIF9yZWZyZXNoQ29tcHJlc3NlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3JlZnJlc2hDb21wcmVzc2VkKTogQWRkZWQuCgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVmcmVzaERlY29kZWRTaXplKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3JlZnJlc2hUcmFuc2ZlclNpemUpOgogICAgICAgIENhbGwgX3JlZnJlc2hDb21wcmVzc2VkIGFuZCB1cGRhdGUgZW5jb2RlZCBzaXplIHJvdy4KCjIwMTMtMDMtMjEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgYSBwbGFjZWhvbGRlciBmb3IgZW1wdHkgc3R5bGUgcnVsZXMgaW4gdGhlIFN0eWxlIGRldGFpbHMgc2lkZWJhci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczogVXBkYXRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IuY3NzOgogICAgICAgICguY3NzLXN0eWxlLXRleHQtZWRpdG9yID4gLkNvZGVNaXJyb3IgLkNvZGVNaXJyb3ItcGxhY2Vob2xkZXIpOiBBZGRlZC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLl9yZXNldENvbnRlbnQpOgogICAgICAgIFNldCB0aGUgcGxhY2Vob2xkZXIgb3B0aW9uIGJhc2VkIG9uIHRoZSByZWFkT25seSBzdGF0ZS4KCjIwMTMtMDMtMjEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBFbmFibGUgYXV0byBjbG9zaW5nIGJyYWNrZXRzIGFuZCBxdW90ZXMgYWxvbmcgd2l0aCBtYXRjaGluZyBicmFja2V0IGhpZ2hsaWdodGluZy4KCiAgICAgICAgQWxzbyBzaGFyZSBjb21tb24gQ29kZU1pcnJvciBzdHlsZXMgaW4gQ29kZU1pcnJvck92ZXJyaWRlcy5jc3MuCgogICAgICAgIFJldmlld2VkIGJ5IERlYW4gSmFja3Nvbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLmNzczoKICAgICAgICAoLmNzcy1zdHlsZS10ZXh0LWVkaXRvciA+IC5Db2RlTWlycm9yKToKICAgICAgICAoLmNzcy1zdHlsZS10ZXh0LWVkaXRvciA+IC5Db2RlTWlycm9yLXNjcm9sbCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IpOgogICAgICAgICogVXNlckludGVyZmFjZS9Db2RlTWlycm9yT3ZlcnJpZGVzLmNzczogQWRkZWQuCiAgICAgICAgKC5Db2RlTWlycm9yICopOgogICAgICAgICguQ29kZU1pcnJvciAuQ29kZU1pcnJvci1saW5lcyk6CiAgICAgICAgKC5Db2RlTWlycm9yIHByZSk6CiAgICAgICAgKC5Db2RlTWlycm9yIC5Db2RlTWlycm9yLXNlbGVjdGVkKToKICAgICAgICAoLkNvZGVNaXJyb3IuQ29kZU1pcnJvci1mb2N1c2VkIC5Db2RlTWlycm9yLXNlbGVjdGVkKToKICAgICAgICAoLkNvZGVNaXJyb3IgLkNvZGVNaXJyb3ItY3Vyc29yKToKICAgICAgICAoLkNvZGVNaXJyb3IgLkNvZGVNaXJyb3ItbGluZXMgLkNvZGVNaXJyb3ItbWF0Y2hpbmdicmFja2V0KToKICAgICAgICAoLkNvZGVNaXJyb3IgLkNvZGVNaXJyb3ItbGluZXMgLkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0KToKICAgICAgICAoLkNvZGVNaXJyb3IgLkNvZGVNaXJyb3ItZ3V0dGVycyk6CiAgICAgICAgKC5Db2RlTWlycm9yIC5Db2RlTWlycm9yLWxpbmVudW1iZXIpOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuY3NzOgogICAgICAgICgudGV4dC1lZGl0b3IgPiAuQ29kZU1pcnJvcik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yKToKCjIwMTMtMDMtMjEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBVcGRhdGUgQ29kZU1pcnJvciB0byBUb1QgKHYzLjExKykgd2hpY2ggaW5jbHVkZXMgYSBzY3JvbGwgcGVyZm9ybWFuY2UgZmlsZSBhbmQgb3RoZXIgY2hhbmdlcy4KCiAgICAgICAgSW5jbHVkZSB0aGUgbmV3IHBsYWNlaG9sZGVyIGFuZCBjbG9zZWJyYWNrZXRzIGFkZC1vbnMgc28gd2UgY2FuIHVzZSB0aGVtIGluIG91ciBlZGl0b3JzLgogICAgICAgIEFsc28gaW5jbHVkZXMgbW9yZSBtb2RlcyB0aGF0IGNvdWxkIGJlIGVuY291bnRlcmVkIG9uIHRoZSB3ZWIgdGhhdCB3ZSBzaG91bGQgc3ludGF4IGhpZ2hsaWdodC4KICAgICAgICBJJ3ZlIGluY2x1ZGVkIHRoZSBTUUwgbW9kZSBzaW5jZSBJIHBsYW4gdG8gc3dpdGNoIHRoZSBkYXRhYmFzZSBwcm9tcHQgdG8gdXNlIGl0IHNvb24uCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzQ3MDgxND4gU2Nyb2xsaW5nIGluIHRoZSBTdHlsZSA+IFJ1bGVzIHNpZGViYXIgaXMga2luZCBvZiBzbHVnZ2lzaAoKICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nsb2p1cmUuanM6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nsb3NlYnJhY2tldHMuanM6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZGVtaXJyb3IuY3NzOiBVcGRhdGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZGVtaXJyb3IuanM6IFVwZGF0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29mZmVlc2NyaXB0LmpzOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jc3MuanM6IFVwZGF0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvbGVzcy5qczogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvbGl2ZXNjcmlwdC5qczogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvcGxhY2Vob2xkZXIuanM6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3Nhc3MuanM6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3NlYXJjaGN1cnNvci5qczogVXBkYXRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9zcWwuanM6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3htbC5qczogVXBkYXRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlIGFkZGVkIGZpbGVzLgoKMjAxMy0wMy0yMSAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM0Mzk4Mzc+IFJFR1JFU1NJT046IENvcHlpbmcgdGhlIG91dHB1dCBvZiBjb25zb2xlLmxvZygxLDIsMykgb25seSBjb3BpZXMgIltMb2ddIDEiICAgICAgICAKCiAgICAgICAgVXNlIHRoZSBfbWVzc2FnZSBwcm9wZXJ0eSByYXRoZXIgdGhhbiBfbWVzc2FnZVRleHQgdG8gcHJvdmlkZSB0aGUgYmFzZQogICAgICAgIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgYSBjb25zb2xlIG1lc3NhZ2UsIGFzIGhpbnRlZCBieSB0aGUgX2Zvcm1hdE1lc3NhZ2UKICAgICAgICBtZXRob2Qgd2hpY2ggc2F5cyB0aGF0IF9tZXNzYWdlICJpcyB1c2VkIGZvciBpbmxpbmUgbWVzc2FnZSBidWJibGVzIGluCiAgICAgICAgU291cmNlRnJhbWVzLCBvciBvdGhlciBwbGFpbi10ZXh0IHJlcHJlc2VudGF0aW9ucyIuCgogICAgICAgIFJldmlld2VkIGJ5IFJpY2t5IE1vbmRlbGxvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29uc29sZU1lc3NhZ2VJbXBsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS50b0NsaXBib2FyZFN0cmluZyk6CgoyMDEzLTAzLTIwICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSB0aGUgcmVsYW9kIGJ1dHRvbiBhcHBlYXIgY29ycmVjdGx5IHdoZW4gaW5zcGVjdGluZyB3ZWIgYXJjaGl2ZXMuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzQ1NTg4Mz4gRXh0cmEgbWlzcGxhY2VkIGZvbGRlciBpbiBJbnNwZWN0b3Igc2lkZWJhcgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVRyZWVFbGVtZW50LmNzczoKICAgICAgICAoLml0ZW0ucmVzb3VyY2UgPiAuc3RhdHVzID4gLnJlbG9hZC1idXR0b24pOgogICAgICAgICguaXRlbS5yZXNvdXJjZS5zZWxlY3RlZCA+IC5zdGF0dXMgPiAucmVsb2FkLWJ1dHRvbik6CiAgICAgICAgVXNlIC5yZXNvdXJjZSBpbnN0ZWFkIG9mIC5yZXNvdXJjZS10eXBlLWRvY3VtZW50LiBTaW5jZSB0aGUgYnV0dG9uIGV4aXN0cwogICAgICAgIGZvciB3ZWIgYXJjaGl2ZXMsIGFuZCB0aGV5IGdldCAucmVzb3VyY2UtdHlwZS1vdGhlci4gRml4aW5nIHdlYiBhcmNoaXZlcwogICAgICAgIHRvIGdldCBhIHByb3BlciB0eXBlIGlzIHRyYWNrZWQgYnkgPHJkYXI6Ly9wcm9ibGVtLzY0MjA3ODM+LgoKMjAxMy0wMy0yMCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIENvcnJlY3Qgc29tZSBpbmNvbnNpc3RlbmNpZXMgd2l0aCBvcGVuaW5nIHRoZSBJbnNwZWN0b3IgYW5kIHdoYXQgY29udGVudCB2aWV3cyBhcmUgb3BlbmVkLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI5NDc5MTQ+IE9wZW5pbmcgd2ViIGluc3BlY3RvciB3aXRoIFNob3cgUGFnZSBSZXNvdXJjZXMgY2FuIG9wZW4gaW5zcGVjdG9yIGluIGluY29uc2lzdGVudCBzdGF0ZQoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9JbnNwZWN0b3JGcm9udGVuZEFQSS5qczoKICAgICAgICAoSW5zcGVjdG9yRnJvbnRlbmRBUEkuc2hvd1Jlc291cmNlcyk6CiAgICAgICAgKEluc3BlY3RvckZyb250ZW5kQVBJLnNob3dNYWluUmVzb3VyY2VGb3JGcmFtZSk6CiAgICAgICAgU2V0IGlnbm9yZUxhc3RDb250ZW50Q29va2llIHNvIHRoZSBSZXNvdXJjZVNpZGViYXJQYW5lbCBoYXMgYSBjaGFuY2UgdG8gc2hvdyB0aGUgY29udGVudCB2aWV3IGZvciB0aGUgbWFpbiBmcmFtZQogICAgICAgIG9uY2UgdGhlIG1haW4gZnJhbWUgaXMga25vd24uCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6CiAgICAgICAgU2V0IGNvbGxhcHNlZCBhZnRlciBsb2FkaW5nIHRoZSBwZW5kaW5nIGZyb250ZW5kIGNvbW1hbmRzIGFyZSBkaXNwYXRjaGVkIHNvIG9ubHkgdGhlIGZpbmFsIHNlbGVjdGVkIHNpZGViYXIgcGFuZWwKICAgICAgICBnZXRzIHNob3duIGFuZCBoYXMgYSBzYXkgaW4gd2hhdCBjb250ZW50IHZpZXcgZ2V0cyBzaG93bi4gQWxzbyByZW1vdmVkIGNvZGUgdGhhdCBjb2xsYXBzZWQgdGhlIGRldGFpbHMgc2lkZWJhciwKICAgICAgICBub3cgdGhhdCBzaWRlYmFycyBhcmUgY29sbGFwc2VkIGJ5IGRlZmF1bHQuCgogICAgICAgIChXZWJJbnNwZWN0b3Iuc2lkZWJhclBhbmVsRm9yQ3VycmVudENvbnRlbnRWaWV3KTogQWRkZWQuCgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbC5wcm90b3R5cGUuc2hvd24pOgogICAgICAgIE9ubHkgc2VsZWN0IHRoZSBzZWxlY3RlZCB0cmVlIGVsZW1lbnQgYWdhaW4gaWYgdGhlIGNvbnRlbnQgdmlldyBpcyBmcm9tIGEgZGlmZmVyZW50IHNpZGViYXIuIFRoaXMgd2F5IHNob3dpbmcgdGhlCiAgICAgICAgUmVzb3VyY2VzIHNpZGViYXIgd2hlbiB5b3UgaGF2ZSBnb25lIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gb3RoZXIgcmVzb3VyY2Ugd29udCBqdW1wIHRvIHNvbWUgb2xkIHNlbGVjdGVkIHJlc291cmNlLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX21haW5GcmFtZURpZENoYW5nZSk6CiAgICAgICAgQWxsb3cgb25zZWxlY3QgaWYgd2UgYXJlbid0IHNob3dpbmcgYSBjb250ZW50IHZpZXcgeWV0LiBUaGF0IHdheSB0aGUgbWFpbiBmcmFtZSBpcyBzZWxlY3RlZCBhbmQgc2hvd24gaW4gdGhlIGNvbnRlbnQuCgogICAgICAgICogVXNlckludGVyZmFjZS9TaWRlYmFyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2lkZWJhcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyLnByb3RvdHlwZS5zZXQgd2lkdGgpOgogICAgICAgIE1ha2UgY29sbGFwc2VkIGJ5IGRlZmF1bHQuIE9ubHkgdGVsbCB0aGUgc2lkZWJhciBwYW5lbCBhYm91dCB3aWR0aCBjaGFuZ2VzIGlmIG5vdCBjb2xsYXBzZWQuCgoyMDEzLTAzLTIwICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzQ0MjYwMD4gUGlja2luZyBhIGZyYW1lIGluIHRoZSBjb25zb2xlIGNvbnRleHQgc2VsZWN0b3IgbWVudSBzaG91bGQgcmVmb2N1cyB0aGUgY29uc29sZSBpbnB1dAoKICAgICAgICBEZXRlY3Qgd2hlbiB0aGUgaGlkZGVuIDxzZWxlY3Q+IGluIHRoZSBIaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50IHdhcwogICAgICAgIGludGVyYWN0ZWQgd2l0aCwgZXZlbiBpZiBpdHMgdmFsdWUgZGlkIG5vdCBjaGFuZ2UsIGFuZCB0cmlnZ2VyIGEKICAgICAgICAiQ2xpY2tlZCIgZXZlbnQgZm9yIHRob3NlIGludGVyZXN0ZWQuIFRoZSBDb25zb2xlIHJlZm9jdXNlcyBpdHMgcHJvbXB0CiAgICAgICAgaW4gdGhlc2UgY2FzZXMgd2hlbiB0aGUgZXhlY3V0aW9uIGNvbnRleHQgc2VsZWN0b3IgaXMgaW50ZXJhY3RlZCB3aXRoLgoKICAgICAgICBSZXZpZXdlZCBieSBBbnRvaW5lIFF1aW50LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSGllcmFyY2hpY2FsUGF0aENvbXBvbmVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkhpZXJhcmNoaWNhbFBhdGhDb21wb25lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuSGllcmFyY2hpY2FsUGF0aENvbXBvbmVudC5wcm90b3R5cGUuX3NlbGVjdEVsZW1lbnRNb3VzZVVwKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fY3JlYXRlRXhlY3V0aW9uQ29udGV4dFBhdGhDb21wb25lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fcmVtb3ZlRXhlY3V0aW9uQ29udGV4dFBhdGhDb21wb25lbnRGb3JGcmFtZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLl9wYXRoQ29tcG9uZW50Q2xpY2tlZCk6CgoyMDEzLTAzLTIwICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSBlZGl0aW5nIENTUyByZXNvdXJjZXMgd29yayBjb3JyZWN0bHkgYWdhaW4uCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzQ1NzA1Mz4gU2FmYXJpIFdlYiBJbnNwZWN0b3I6IEVkaXRpbmcgLmNzcyBmaWxlcyBpbiBtYWluIGFyZWEgaXMganVtcHkgKDExMjc1MCkKCiAgICAgICAgUmV2aWV3ZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5cGUuX3Jlc291cmNlQ29udGVudERpZENoYW5nZS5hcHBseVN0eWxlU2hlZXRDaGFuZ2VzLnN0eWxlU2hlZXRGb3VuZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlLl9yZXNvdXJjZUNvbnRlbnREaWRDaGFuZ2UuYXBwbHlTdHlsZVNoZWV0Q2hhbmdlcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlLl9yZXNvdXJjZUNvbnRlbnREaWRDaGFuZ2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3RvdHlwZS5fdXBkYXRlUmVzb3VyY2VDb250ZW50LmZldGNoZWRTdHlsZVNoZWV0Q29udGVudCk6CiAgICAgICAgV2Ugd2VyZSByZWx5aW5nIG9uIFNvdXJjZUNvZGUuRXZlbnQuQ29udGVudERpZENoYW5nZSBub3QgZmlyaW5nIGlmIHRoZSBjb250ZW50IHdhcyBlcXVhbC4gSG93ZXZlciwgc2luY2Ugd2UKICAgICAgICBjb2FsZXNjZSBjaGFuZ2VzIHRoZSBjb250ZW50IG1pZ2h0IGJlIGJyaWVmbHkgb3V0IG9mIHN5bmMgYW5kIHRoZSBldmVudCB3YXMgZmlyaW5nLiBUaGF0IHdvdWxkIGNhdXNlIHVzIHRvCiAgICAgICAgdXBkYXRlIFRleHRFZGl0b3Igd2l0aCBhIHNsaWdodGx5IG9sZGVyIHZlcnNpb24gb2YgdGhlIGNvbnRlbnQgYW5kIG1lc3MgdXAgdGhlIHVzZXIuCgoyMDEzLTAzLTE5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRG9uJ3QgY3JlYXRlIGEgbmV3IGNvbnNvbGUgZ3JvdXAgb24gcmVsb2FkIGlmIHRoZSBjdXJyZW50IG9uZSBpcyBlbXB0eS4KCiAgICAgICAgQWxzbyBtYWtlIHN1cmUgdG8gc2Nyb2xsIHRoZSBuZXcgZ3JvdXAgaW50byB2aWV3IHdoZW4gaXQgaXMgY3JlYXRlIHNvIGl0IGlzIHZpc2libGUgYW5kIHJlYWR5IHRvIHNob3cgbmV3IG1lc3NhZ2VzLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI5NTEyOTk+IFdlYiBJbnNwZWN0b3IgY29uc29sZSBzaG91bGRuJ3QgZHJhdyBhIGxpbmUgb24gcmVmcmVzaCBpZiBub3RoaW5nIHdhcyBwcmludGVkCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMjA5MjEyPiBDb25zb2xlIGRvZXNuJ3Qgc2Nyb2xsIHRvIHRoZSBib3R0b20gd2hlbiBhIHJlbG9hZGVkIHBhZ2UgbG9ncwoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9Db25zb2xlR3JvdXAuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlR3JvdXAucHJvdG90eXBlLmhhc01lc3NhZ2VzKTogQWRkZWQuCgogICAgICAgICogVXNlckludGVyZmFjZS9KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlLnN0YXJ0TmV3U2Vzc2lvbik6CiAgICAgICAgUmV1c2UgdGhlIHByZXZpb3VzIGdyb3VwIGlmIGl0IGRvZXMgbm90IGhhdmUgbWVzc2FnZXMuIEFsc28gc2Nyb2xsIHRoZSBuZXcgc2Vzc2lvbiBpbnRvIHZpZXcgc28gaXQgaXMgcmVhZHkKICAgICAgICB0byBzaG93IG1lc3NhZ2VzLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nQ29udGVudFZpZXcuY3NzOgogICAgICAgICguY29uc29sZS1ncm91cC5uZXctc2Vzc2lvbiAuY29uc29sZS1ncm91cC1tZXNzYWdlcyAuY29uc29sZS1pdGVtOmZpcnN0LWNoaWxkKTogQWRkZWQuCiAgICAgICAgRG9uJ3Qgc2hvdyBhIGJvcmRlciB3aGVuIGl0IGlzIGluIGEgbmV3LXNlc3Npb24gc2luY2UgdGhlcmUgaXMgYWxyZWFkeSBhIGRhc2hlZCBib3JkZXIuCgoyMDEzLTAzLTE5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRG9uJ3Qgc2hvdyBzdG9yYWdlIGlmIHdlIGRvbid0IGhhdmUgYSBzZWN1cml0eSBvcmlnaW4gKGFib3V0OmJsYW5rKS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3RvcmFnZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdG9yYWdlTWFuYWdlci5wcm90b3R5cGUuX3NlY3VyaXR5T3JpZ2luRGlkQ2hhbmdlKToKCjIwMTMtMDMtMTkgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBEb24ndCByZWZyZXNoIHRoZSBtZXRyaWNzIGRpc3BsYXkgaWYgdGhlIHVzZXIgaXMgaW5jcmVtZW50aW5nL2RlY3JlbWVudGluZyB2aWEgdGhlIGFycm93IGtleXMuCgogICAgICAgIFdoZW4gZWRpdGluZyBpcyBjb21taXR0ZWQgb3IgY2FuY2VsZWQgd2UgZG8gYSByZWZyZXNoIHRvIHBpY2sgdXAgYW55IGNoYW5nZXMuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzQ0MTMzOD4gUkVHUkVTU0lPTjogU2FmYXJpIFdlYiBJbnNwZWN0b3I6IFVzaW5nIFVwL0Rvd24gdG8KICAgICAgICBtb2RpZnkgbWFyZ2lucyBsb3NlcyBmb2N1cyAoMTEyNTY2KQoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9Cb3hNb2RlbERldGFpbHNTZWN0aW9uUm93LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQm94TW9kZWxEZXRhaWxzU2VjdGlvblJvdy5wcm90b3R5cGUuX3JlZnJlc2gpOiBSZXR1cm4gZWFybHkgaWYgX2lnbm9yZU5leHRSZWZyZXNoLgogICAgICAgIChXZWJJbnNwZWN0b3IuQm94TW9kZWxEZXRhaWxzU2VjdGlvblJvdy5wcm90b3R5cGUuX2hhbmRsZUtleURvd24pOiBTZXQgX2lnbm9yZU5leHRSZWZyZXNoLgoKMjAxMy0wMy0xOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgTG9jYWwgYW5kIFNlc3Npb24gc3RvcmFnZSB3b3JrIGFnYWluLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMyNjYyNzg+IFJFR1JFU1NJT046IExvY2FsIGFuZCBTZXNzaW9uIHN0b3JhZ2UgcHJvdG9jb2wKICAgICAgICBjaGFuZ2VzIGJyZWFrIGRpc3BsYXlpbmcgdGhlc2UgaXRlbXMKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NU3RvcmFnZU9iamVjdC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VPYmplY3QucHJvdG90eXBlLmdldEVudHJpZXMpOgogICAgICAgIFVzZSBET01TdG9yYWdlQWdlbnQuZ2V0RE9NU3RvcmFnZUVudHJpZXMgb3IgRE9NU3RvcmFnZUFnZW50LmdldERPTVN0b3JhZ2VJdGVtcy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVN0b3JhZ2VPYnNlcnZlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VPYnNlcnZlci5wcm90b3R5cGUuYWRkRE9NU3RvcmFnZSk6CiAgICAgICAgUmV2ZXJ0IGVhcmxpZXIgQ3VyaWUgY29tcGF0aWJpbGl0eSBzdXBwb3J0IHNpbmNlIGl0IGNoYW5nZWQgYWdhaW4hCgogICAgICAgICogVXNlckludGVyZmFjZS9TdG9yYWdlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VNYW5hZ2VyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VNYW5hZ2VyLnByb3RvdHlwZS5fc2VjdXJpdHlPcmlnaW5EaWRDaGFuZ2UpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VNYW5hZ2VyLnByb3RvdHlwZS5fZG9tU3RvcmFnZUZvcklkKToKICAgICAgICBXaGVuIGEgRnJhbWUncyBzZWN1cml0eSBvcmlnaW4gY2hhbmdlcywgYWRkIGxvY2FsIGFuZCBzZXNzaW9uIHN0b3JhZ2UgaWYgdGhleSBkb24ndAogICAgICAgIGFscmVhZHkgZXhpc3QgZm9yIHRoYXQgc2VjdXJpdHkgb3JpZ2luLgoKMjAxMy0wMy0xOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBzZWN1cml0eU9yaWdpbiB0byBXZWJJbnNwZWN0b3IuRnJhbWUuCgogICAgICAgIFRoaXMgd2lsbCBiZSBuZWVkZWQgdG8gZml4IERPTSBTdG9yYWdlIGluc3BlY3Rpb24uCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLmluaXRpYWxpemUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLmdldCBzZWN1cml0eU9yaWdpbik6IEFkZGVkLgogICAgICAgIEFkZGVkIHNlY3VyaXR5T3JpZ2luIHBhcmFtZXRlcnMuIEFsc28gZmlyZSB0aGUgTmFtZURpZENoYW5nZSBhdCB0aGUgZW5kIG9mIGluaXRpYWxpemUKICAgICAgICBzbyB0aGUgRnJhbWUgaXMgaW4gdGhlIGZpbmFsIHN0YXRlIGluc3RlYWQgb2YgYW4gaW50ZXJtZWRpYXRlIHN0YXRlLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWVSZXNvdXJjZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUuZnJhbWVEaWROYXZpZ2F0ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUucmVzb3VyY2VSZXF1ZXN0V2lsbEJlU2VudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUucmVzb3VyY2VSZXF1ZXN0V2FzU2VydmVkRnJvbU1lbW9yeUNhY2hlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5yZXNvdXJjZVJlcXVlc3REaWRSZWNlaXZlUmVzcG9uc2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLl9hZGROZXdSZXNvdXJjZVRvRnJhbWUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLl9jcmVhdGVGcmFtZSk6CiAgICAgICAgUGFzcyBhbG9uZyB0aGUgc2VjdXJpdHlPcmlnaW4gc28gRnJhbWUgY2FuIGJlIGNyZWF0ZWQgb3IgaW5pdGlhbGl6ZWQgd2l0aCBpdC4KICAgICAgICBBbHNvIHBhc3MgYWxvbmcgdGhlIGZyYW1lIG5hbWUgaW4gcGxhY2VzIGl0IHdhcyBtaXNzaW5nLCBub3cgdGhhdCB3ZSBtaWdodCBuZWVkIGl0LgoKMjAxMy0wMy0xOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFVwZGF0ZSBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMgdG8gdGhlIGxhdGVzdC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zcGVjdG9yQmFja2VuZC5qczoKICAgICAgICAoSW5zcGVjdG9yQmFja2VuZENsYXNzLnByb3RvdHlwZS5fZ2V0QWdlbnQpOgogICAgICAgIChJbnNwZWN0b3JCYWNrZW5kQ2xhc3MucHJvdG90eXBlLnJlZ2lzdGVyQ29tbWFuZCk6CiAgICAgICAgKEluc3BlY3RvckJhY2tlbmRDbGFzcy5wcm90b3R5cGUucmVnaXN0ZXJFbnVtKToKICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciByZWdpc3RlckVudW0sIHdoaWNoIGlzIG5ldy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qczoKICAgICAgICBVcGRhdGVkIHRvIHRoZSBsYXRlc3QgZnJvbSBPcGVuIFNvdXJjZSByMTQ2MjAwLgoKMjAxMy0wMy0xOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgY29uc29sZSBtZXNzYWdlcyBib3R0b20gYWxpZ24gaWYgdGhlIGxvZyBoYXNuJ3Qgc2Nyb2xsZWQgeWV0LgoKICAgICAgICBBbHNvIGluY2x1ZGVzOgogICAgICAgICogUmVzdG9yZSBjbGlja2luZyB0aGUgZW1wdHkgc3BhY2UgaW4gdGhlIGxvZyB0byBmb2N1cyB0aGUgcHJvbXB0LgogICAgICAgICogTWFrZSB0aGUgcHJvbXB0IHRvcCBib3JkZXIgbGlnaHRlbiB3aGVuIHRoZSBsb2cgdmlldyBpcyBzaG93aW5nLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM0NDIyMTU+IE1heWJlIGltcHJvdmUgY29uc29sZSB0eXBpbmcgVUkgKDExMjU4OCkKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29uc29sZUdyb3VwLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZUdyb3VwLnByb3RvdHlwZS5hZGRNZXNzYWdlKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nQ29udGVudFZpZXcuY3NzOgogICAgICAgICguY29uc29sZS1tZXNzYWdlcyk6CiAgICAgICAgKC5jb25zb2xlLW1lc3NhZ2VzIDpmaXJzdC1jaGlsZCk6CiAgICAgICAgVXNlIGZsZXggbGF5b3V0IGFuZCBhbiBhdXRvIHRvcCBtYXJnaW4gdG8gcHVzaCBpdGVtcyB0byB0aGUgYm90dG9tIHVudGlsIHNjcm9sbGVkLgoKICAgICAgICAoLmNvbnNvbGUtaXRlbSk6CiAgICAgICAgKC5jb25zb2xlLXVzZXItY29tbWFuZCAuY29uc29sZS1tZXNzYWdlKToKICAgICAgICBNb3ZlIHRoZSBib3JkZXIgdG8gdGhlIHRvcCBzaW5jZSBpdGVtcyBhcmUgYm90dG9tIGFsaWduZWQgbm93LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX21vdXNlZG93bik6CiAgICAgICAgRm9jdXMgdGhlIHByb21wdCBpZiB0aGUgY2xpY2sgd2FzIGluIGVtcHR5IHNwYWNlLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLnNob3dTcGxpdENvbnNvbGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuaGlkZVNwbGl0Q29uc29sZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5zaG93RnVsbEhlaWdodENvbnNvbGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuX2NvbnRlbnRCcm93c2VyQ3VycmVudENvbnRlbnRWaWV3RGlkQ2hhbmdlKToKICAgICAgICBOb3RpZnkgdGhlIFF1aWNrQ29uc29sZSB2aWEgY29uc29sZUxvZ1Zpc2liaWxpdHlDaGFuZ2VkIHdoZW4gdGhlIGxvZyB2aWV3IHNob3dzCiAgICAgICAgb3IgaGlkZXMgaW4gdGhlIG1haW4gY29udGVudCBicm93c2VyIG9yIHNwbGl0IGNvbnRlbnQgYnJvd3Nlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1F1aWNrQ29uc29sZS5jc3M6CiAgICAgICAgKC5xdWljay1jb25zb2xlLnNob3dpbmctbG9nKTogQWRkZWQuIExpZ2h0ZW4gdGhlIGJvcmRlciBjb2xvci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1F1aWNrQ29uc29sZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuY29uc29sZUxvZ1Zpc2liaWxpdHlDaGFuZ2VkKTogQWRkZWQuCiAgICAgICAgQWRkIG9yIHJlbW92ZSB0aGUgc2hvd2luZy1sb2cgc3R5bGUgY2xhc3MuCgoyMDEzLTAzLTE3ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgVHdlYWsgaG93IHRoZSBjb25zb2xlIHZpZXcgYW5kIHNwbGl0IGNvbnNvbGUgd29yay4KCiAgICAgICAgQ2xpY2tpbmcgdGhlIGNvbnNvbGUgYnV0dG9uIHdpbGwgYWx3YXlzIHNob3cgdGhlIGNvbnNvbGUgZnVsbCBoZWlnaHQuIFRoZSBjb25zb2xlIGJ1dHRvbgogICAgICAgIGlzIG9ubHkgYmx1ZSB3aGVuIHRoZSBjb25zb2xlIHZpZXcgaXMgZnVsbCBoZWlnaHQuIFByZXNzaW5nIGVzY2FwZSBhbHdheXMgc2hvd3MgdGhlIHNwbGl0CiAgICAgICAgY29uc29sZS4gQWRkIHN1cHBvcnQgZm9yIGFsbG93aW5nIHRoZSBjb250ZW50IHZpZXcgdG8gZGVjaWRlIGlmIHRoZSBzcGxpdCBjb25zb2xlIGNhbiBiZQogICAgICAgIHNob3duLiBJZiBpdCBjYW4ndCB0aGUgZnVsbCBoZWlnaHQgY29uc29sZSBpcyBzaG93biBpbnN0ZWFkLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9DbHVzdGVyQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DbHVzdGVyQ29udGVudFZpZXcucHJvdG90eXBlLmdldCBzdXBwb3J0c1NwbGl0Q29udGVudEJyb3dzZXIpOgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgc3VwcG9ydHNTcGxpdENvbnRlbnRCcm93c2VyKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudFZpZXdDb250YWluZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlld0NvbnRhaW5lci5wcm90b3R5cGUuX3Nob3dDb250ZW50Vmlldyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlld0NvbnRhaW5lci5wcm90b3R5cGUuX2hpZGVDb250ZW50Vmlldyk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3RydW1lbnRTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5JbnN0cnVtZW50U2lkZWJhclBhbmVsKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuZGlkQXBwZW5kQ29uc29sZU1lc3NhZ2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl90b2dnbGVTcGxpdCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5sb2FkZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5pc1Nob3dpbmdTcGxpdENvbnNvbGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuY3VycmVudFZpZXdTdXBwb3J0c1NwbGl0Q29udGVudEJyb3dzZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IudG9nZ2xlU3BsaXRDb25zb2xlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLnNob3dTcGxpdENvbnNvbGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuaGlkZVNwbGl0Q29uc29sZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5zaG93RnVsbEhlaWdodENvbnNvbGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuaXNTaG93aW5nQ29uc29sZVZpZXcpOgogICAgICAgIChXZWJJbnNwZWN0b3Iuc2hvd0NvbnNvbGVWaWV3KToKICAgICAgICAoV2ViSW5zcGVjdG9yLnRvZ2dsZUNvbnNvbGVWaWV3KToKICAgICAgICAoV2ViSW5zcGVjdG9yLl9jb250ZW50QnJvd3NlckN1cnJlbnRDb250ZW50Vmlld0RpZENoYW5nZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1F1aWNrQ29uc29sZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX3RvZ2dsZU9yRm9jdXMpOgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZXNDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgc3VwcG9ydHNTcGxpdENvbnRlbnRCcm93c2VyKToKCjIwMTMtMDMtMTggIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNDQzODA2PiBTYWZhcmkgV2ViIEluc3BlY3RvcjogUG9pbnQtdG8taW5zcGVjdCBtb2RlIGJyZWFrcyB3aGVuIE5vZGUgZGV0YWlscyBzaWRlYmFyIG9wZW4gKDExMjYwNykKCiAgICAgICAgRml4IHR5cG9zIHRoYXQgY291bGQgY2F1c2UgZXhjZXB0aW9ucy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXZlbnRMaXN0ZW5lclNlY3Rpb25Hcm91cC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJTZWN0aW9uR3JvdXAucHJvdG90eXBlLl9mdW5jdGlvblRleHRPckxpbmspOgoKMjAxMy0wMy0xNyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFN0b3Agc2NhbGluZyB0aGUgTW9yZUNvbHVtbnMucGRmIGFuZCBMZXNzQ29sdW1ucy5wZGYgaW1hZ2VzLgoKICAgICAgICBSZXZpZXdlZCBieSBKb24gSG9uZXljdXR0LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVzQ29udGVudFZpZXcuY3NzOgogICAgICAgICguY29udGVudC12aWV3LnRpbWVsaW5lcyA+IC5kYXRhLWdyaWQgdGguY29sbGFwc2VyID4gLmNvbGxhcHNlci1idXR0b24pOgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZXNDb250ZW50Vmlldy5qczoKCjIwMTMtMDMtMTcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBPbmx5IGNhbGwgU2lkZWJhclBhbmVsJ3Mgc2hvd24gYW5kIGhpZGRlbiB3aGVuIHRoZSB2aXNpYmlsaXR5IGFjdHVhbGx5IGNoYW5nZXMuCgogICAgICAgIFRoaXMgd2FzIGNhdXNpbmcgdGhlIENvbnNvbGUgdmlldyB0byBub3QgYmUgcmVtZW1iZXJlZCBiZXR3ZWVuIHNlc3Npb25zIGJlY2F1c2UgdGhlCiAgICAgICAgSW5zdHJ1bWVudHNQYW5lbCB3YXMgc2VsZWN0aW5nIGEgdHJlZSBlbGVtZW50IGluIHRoZSBzaG93biBmdW5jdGlvbiwgZXZlbiB0aG91Z2gKICAgICAgICB0aGUgc2lkZWJhciBwYW5lbCB3YXMgbm90IHZpc2libGUuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NpZGViYXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyLnByb3RvdHlwZS5zZXQgc2VsZWN0ZWRTaWRlYmFyUGFuZWwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2lkZWJhci5wcm90b3R5cGUuc2V0IGNvbGxhcHNlZCk6CgoyMDEzLTAzLTE3ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgU3BlZWQgdXAgV2ViIEluc3BlY3RvciBpbWFnZSBnZW5lcmF0aW9uIHNvbWUgYnkgdXNpbmcgVWludDMyQXJyYXkuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlVXRpbGl0aWVzLmpzOgogICAgICAgIChnZW5lcmF0ZUNvbG9yZWRJbWFnZSk6CiAgICAgICAgKGdlbmVyYXRlRW1ib3NzZWRJbWFnZXMuX2ludmVydE1hc2tJbWFnZSk6CiAgICAgICAgVXNlIFVpbnQzMkFycmF5IHRvIHByb2Nlc3MgdGhlIHBpeGVscyBmYXN0ZXIuIEFjY291bnQgZm9yIGVuZGlhbm5lc3MgKGV2ZW4gdGhvdWdoIHdlIGRvbid0CiAgICAgICAgcmVhbGx5IG5lZWQgdG8gc2luY2Ugd2UgZG9uJ3Qgc3VwcG9ydCBXaW5kb3dzIG9yIFBvd2VyUEMuKQoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVXRpbGl0aWVzLmpzOgogICAgICAgIChVaW50MzJBcnJheS5pc0xpdHRsZUVuZGlhbik6IEFkZGVkLgoKMjAxMy0wMy0xNyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIENhY2hlIGFuZCByZXN0b3JlIGdlbmVyYXRlZCBpbWFnZXMgdG8gc3BlZWQgdXAgdGhlIGxvYWQgdGltZSBmb3IgdGhlIFdlYiBJbnNwZWN0b3IuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzQzNjMzND4gV2ViIEluc3BlY3RvciB0YWtlcyBhYm91dCAzcyB0byBhY3RpdmF0ZQoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9CdXR0b25OYXZpZ2F0aW9uSXRlbS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkJ1dHRvbk5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5fZ2VuZXJhdGVJbWFnZXMpOgogICAgICAgIFBhc3MgIXRoaXMuX2ltYWdlQ2FjaGVhYmxlIHRvIGdlbmVyYXRlRW1ib3NzZWRJbWFnZXMuCgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZVV0aWxpdGllcy5qczoKICAgICAgICAoZ2VuZXJhdGVDb2xvcmVkSW1hZ2UpOgogICAgICAgIERvbid0IHNldCBnbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gdG8gImNsZWFyIiBiZWZvcmUgdXNpbmcgd2Via2l0UHV0SW1hZ2VEYXRhSEQuCgogICAgICAgIChnZW5lcmF0ZUNvbG9yZWRJbWFnZXNGb3JDU1MpOgogICAgICAgIChnZW5lcmF0ZUNvbG9yZWRJbWFnZXNGb3JDU1MuaW1hZ2VMb2FkZWQpOiBBZGRlZC4KICAgICAgICAoZ2VuZXJhdGVDb2xvcmVkSW1hZ2VzRm9yQ1NTLmVuc3VyZUltYWdlSXNMb2FkZWQpOiBBZGRlZC4KICAgICAgICAoZ2VuZXJhdGVDb2xvcmVkSW1hZ2VzRm9yQ1NTLnJlc3RvcmVJbWFnZXMpOiBBZGRlZC4KICAgICAgICAoZ2VuZXJhdGVDb2xvcmVkSW1hZ2VzRm9yQ1NTLnJlc3RvcmVJbWFnZSk6IEFkZGVkLgogICAgICAgIChnZW5lcmF0ZUNvbG9yZWRJbWFnZXNGb3JDU1MuZGV2aWNlUGl4ZWxSYXRpb0NoYW5nZWQpOiBBZGRlZC4KICAgICAgICAoZ2VuZXJhdGVDb2xvcmVkSW1hZ2VzRm9yQ1NTLmdlbmVyYXRlSW1hZ2VzSWZOZWVkZWQpOiBSZW5hbWVkIGZyb20gZ2VuZXJhdGVJbWFnZXMuCiAgICAgICAgKGdlbmVyYXRlQ29sb3JlZEltYWdlc0ZvckNTUy5nZW5lcmF0ZUltYWdlc0lmTmVlZGVkLmdlbmVyYXRlQWN0aXZlSW1hZ2VzKToKICAgICAgICAoZ2VuZXJhdGVDb2xvcmVkSW1hZ2VzRm9yQ1NTLmdlbmVyYXRlSW1hZ2UpOgogICAgICAgIFRyeSB0byByZXN0b3JlIHRoZSBpbWFnZXMgZmlyc3QuIElmIG5lZWRlZCwgbG9hZCB0aGUgaW1hZ2UgYW5kIHJlZ2VuZXJhdGUgdGhlbS4KCiAgICAgICAgKF9jcmVhdGVJbWFnZUxvY2FsU3RvcmFnZUtleSk6IEFkZGVkLgogICAgICAgIChzYXZlSW1hZ2VUb0xvY2FsU3RvcmFnZSk6IEFkZGVkLgogICAgICAgIChyZXN0b3JlSW1hZ2VGcm9tTG9jYWxTdG9yYWdlKTogQWRkZWQuCiAgICAgICAgKHJlc3RvcmVJbWFnZUZyb21Mb2NhbFN0b3JhZ2UucGFyc2VWZXJzaW9uKTogQWRkZWQuCiAgICAgICAgU2F2ZSBhbmQgcmVzdG9yZSBpbWFnZXMgdmlhIHBpeGVsIGFycmF5cyB3aXRoIGxvY2FsU3RvcmFnZS4gQWJvcnQgdGhlIHJlc3RvcmUKICAgICAgICBpZiB2ZXJzaW9ucyBtaXNtYXRjaCBvciB0aGUgYXJyYXkgc2l6ZSBpc24ndCBjb3JyZWN0LgoKICAgICAgICAoZ2VuZXJhdGVFbWJvc3NlZEltYWdlcyk6CiAgICAgICAgKGdlbmVyYXRlRW1ib3NzZWRJbWFnZXMuaW1hZ2VMb2FkZWQpOiBBZGRlZC4KICAgICAgICAoZ2VuZXJhdGVFbWJvc3NlZEltYWdlcy5lbnN1cmVJbWFnZUlzTG9hZGVkKTogQWRkZWQuCiAgICAgICAgKGdlbmVyYXRlRW1ib3NzZWRJbWFnZXMucmVzdG9yZUltYWdlcyk6IEFkZGVkLgogICAgICAgIChnZW5lcmF0ZUVtYm9zc2VkSW1hZ2VzLnJlc3RvcmVJbWFnZSk6IEFkZGVkLgogICAgICAgIChnZW5lcmF0ZUVtYm9zc2VkSW1hZ2VzLmRldmljZVBpeGVsUmF0aW9DaGFuZ2VkKTogQWRkZWQuCiAgICAgICAgKGdlbmVyYXRlRW1ib3NzZWRJbWFnZXMuZ2VuZXJhdGVJbWFnZXNJZk5lZWRlZCk6IEFkZGVkLgogICAgICAgIChnZW5lcmF0ZUVtYm9zc2VkSW1hZ2VzLmdlbmVyYXRlSW1hZ2VzSWZOZWVkZWQuZ2VuZXJhdGVBY3RpdmVJbWFnZXMpOgogICAgICAgIChnZW5lcmF0ZUVtYm9zc2VkSW1hZ2VzLmdlbmVyYXRlSW1hZ2UpOiBSZW5hbWVkIGZyb20gX2NyZWF0ZUVtYm9zc2VkQ2FudmFzSW1hZ2UuCiAgICAgICAgVHJ5IHRvIHJlc3RvcmUgdGhlIGltYWdlcyBmaXJzdC4gSWYgbmVlZGVkLCBsb2FkIHRoZSBpbWFnZSBhbmQgcmVnZW5lcmF0ZSB0aGVtLgoKICAgICAgICAoZ2VuZXJhdGVFbWJvc3NlZEltYWdlcy5faW52ZXJ0TWFza0ltYWdlKToKICAgICAgICAoZ2VuZXJhdGVFbWJvc3NlZEltYWdlcy5fYXBwbHlJbWFnZU1hc2spOgogICAgICAgIERvbid0IHNldCBnbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gdG8gImNsZWFyIiBiZWZvcmUgdXNpbmcgd2Via2l0UHV0SW1hZ2VEYXRhSEQuCgogICAgICAgICogVXNlckludGVyZmFjZS9Ub2dnbGVCdXR0b25OYXZpZ2F0aW9uSXRlbS5qczoKICAgICAgICBNYXJrIHRoZSBpbWFnZSBhcyBub3QgY2FjaGVhYmxlLiBXZSBuZWVkIHRvIHN3YXAgaW1hZ2VzIHdpdGggdGhlIHNhbWUgaWRlbnRpZmllcnMuCgoyMDEzLTAzLTE3ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSBnZW5lcmF0ZUNvbG9yZWRJbWFnZXNGb3JDU1MgcmVxdWlyZSBwYXNzaW5nIGltYWdlIHdpZHRoIGFuZCBoZWlnaHQuCgogICAgICAgIFRoaXMgd2lsbCBiZSBuZWVkZWQgdG8gY2FjaGUgYW5kIHJlc3RvcmUgZ2VuZXJhdGVkIGltYWdlcyBmb3IgPHJkYXI6Ly9wcm9ibGVtLzEzNDM2MzM0Pi4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZWNsYXJhdGlvblNlY3Rpb24uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uU2VjdGlvbik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFHcmlkLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YUdyaWQucHJvdG90eXBlLl9nZW5lcmF0ZVNvcnRJbmRpY2F0b3JJbWFnZXNJZk5lZWRlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RldGFpbHNTZWN0aW9uLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsc1NlY3Rpb24ucHJvdG90eXBlLl9nZW5lcmF0ZURpc2Nsb3N1cmVUcmlhbmdsZXNJZk5lZWRlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZpbmRCYW5uZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GaW5kQmFubmVyLnByb3RvdHlwZS5fZ2VuZXJhdGVCdXR0b25zR2x5cGhzSWZOZWVkZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZVV0aWxpdGllcy5qczoKICAgICAgICAoZ2VuZXJhdGVDb2xvcmVkSW1hZ2VzRm9yQ1NTKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLl9nZW5lcmF0ZURpc2Nsb3N1cmVUcmlhbmdsZUltYWdlcyk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05hdmlnYXRpb25TaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fZ2VuZXJhdGVEaXNjbG9zdXJlVHJpYW5nbGVzSWZOZWVkZWQpOgoKMjAxMy0wMy0xNyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBTaW1wbGlmeSBnaXZpbmcgRXhlY3V0aW9uQ29udGV4dHMgZm9yIEZyYW1lcyBhIG5hbWUKCiAgICAgICAgUmV2aWV3ZWQgYnkgRGVhbiBKYWNrc29uLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWVSZXNvdXJjZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUuZXhlY3V0aW9uQ29udGV4dENyZWF0ZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9RdWlja0NvbnNvbGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLl9jcmVhdGVFeGVjdXRpb25Db250ZXh0UGF0aENvbXBvbmVudEZyb21GcmFtZSk6CiAgICAgICAgTWFrZSBib3RoIGlPUyA2IGFuZCB0cnVuayB1c2UgdGhlIGZyYW1lJ3MgbWFpbiByZXNvdXJjZSdzIGRpc3BsYXkgbmFtZS4KCjIwMTMtMDMtMTcgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgQ2xlYW4tdXAgV2VpZ2h0LnN2ZyBhIGxpdHRsZSBtb3JlLgoKICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvV2VpZ2h0LnN2ZzoKICAgICAgICBSZW1vdmVkIHRoZSBwYXRoIGlkLCBhbmQgZXh0cmEgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBhdHRyaWJ1dGUuCgoyMDEzLTAzLTE3ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIEFkZCBFeGVjdXRpb24gQ29udGV4dCAvIEZyYW1lIHNlbGVjdG9yIHRvIHRoZSBRdWlja0NvbnNvbGUKCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwODA5MzYzPiBQQVJJVFkgKFdlYktpdCBXZWIgSW5zcGVjdG9yKTogVUkgZm9yIGV2YWx1YXRpbmcgaW4gZGlmZmVyZW50IHdpbmRvd3MgLyBmcmFtZXMgZnJvbSB0aGUgY29uc29sZSBpcyBtaXNzaW5nCgogICAgICAgIFJldmlld2VkIGJ5IERlYW4gSmFja3Nvbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4ZWN1dGlvbkNvbnRleHQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FeGVjdXRpb25Db250ZXh0KToKICAgICAgICBBbGxvdyBhbiBleGVjdXRpb24gY29udGV4dCB3aXRoIHRoZSBzcGVjaWFsIHVuZGVmaW5lZCBpZGVudGlmaWVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvbkJhci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25CYXIucHJvdG90eXBlLmdldCBzaXplc1RvRml0KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlTmF2aWdhdGlvbkJhci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZU5hdmlnYXRpb25CYXIucHJvdG90eXBlLmdldCBzaXplc1RvRml0KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSGllcmFyY2hpY2FsUGF0aE5hdmlnYXRpb25JdGVtLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSGllcmFyY2hpY2FsUGF0aE5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS51cGRhdGVMYXlvdXQpOgogICAgICAgIFRoZSBRdWlja0NvbnNvbGVOYXZpZ2F0aW9uQmFyIHN0cmV0Y2hlcy4gUmVzcGVjdCB0aGF0IGxheWluZyBvdXQgYSBoaWVyYXJjaGljYWwgcGF0aC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0hpZXJhcmNoaWNhbFBhdGhDb21wb25lbnQuY3NzOgogICAgICAgICguaGllcmFyY2hpY2FsLXBhdGgtY29tcG9uZW50ID4gLnNlbGVjdG9yLWFycm93cyk6CiAgICAgICAgKC5oaWVyYXJjaGljYWwtcGF0aC1jb21wb25lbnQudGV4dC1vbmx5KToKICAgICAgICAoLmhpZXJhcmNoaWNhbC1wYXRoLWNvbXBvbmVudC50ZXh0LW9ubHkgPiBzZWxlY3QpOgogICAgICAgICogVXNlckludGVyZmFjZS9IaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSGllcmFyY2hpY2FsUGF0aENvbXBvbmVudCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9VcERvd25BcnJvd3Muc3ZnOiBBZGRlZC4KICAgICAgICBBbGxvdyBjcmVhdGluZyBhIHRleHQgb25seSBIaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50LCBhbmQgb25lIHRoYXQgc2hvd3MKICAgICAgICB1cC9kb3duIHBvcHVwIHNlbGVjdG9yIGFycm93cy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLmNvbW1pdFByb3Zpc2lvbmFsTG9hZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZS5wcm90b3R5cGUuY2xlYXJFeGVjdXRpb25Db250ZXh0cyk6CiAgICAgICAgU2VuZCBhbiBldmVudCB3aGVuIGNsZWFyaW5nIGNvbnRleHRzLiBQcm92aWRlIGEgZmxhZyBmb3Igd2hlbiBpdCBoYXBwZW5zCiAgICAgICAgd2hpbGUgYSBmcmFtZSBpcyBuYXZpZ2F0aW5nLCBpbiB3aGljaCBjYXNlIHdlIHdvdWxkIGV4cGVjdCBhIG5ldyBleGVjdXRpb24KICAgICAgICBjb250ZXh0IHNvb24gZm9yIHRoZSBuZXcgcGFnZS4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1F1aWNrQ29uc29sZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZSk6CiAgICAgICAgUmVnaXN0ZXIgZm9yIGV2ZW50cyBuZWNlc3NhcnkgdG8gZmlsbCBhIHNlbGVjdG9yIHBpY2tlciB3aXRoIGZyYW1lcy4KICAgICAgICBpT1MgNiBuZWVkcyB0byBwcm92aWRlIGZyYW1lIGlkcywgc28gbGlzdGVuIGZvciBhZGRlZCAvIHJlbW92ZWQgZnJhbWVzLgogICAgICAgIFRydW5rIGFuZCBsYXRlciB1c2UgRXhlY3V0aW9uQ29udGV4dHMgd2hpY2ggRnJhbWVzIGJyb2FkY2FzdCBjaGFuZ2VzIGZvci4KICAgICAgICBFeGVjdXRpbmcgaW4gdGhlIG1haW4gZnJhbWUgdXNlcyAidW5kZWZpbmVkIi4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLmdldCBleGVjdXRpb25Db250ZXh0SWRlbnRpZmllcik6CiAgICAgICAgVGhpcyBpcyB0aGUgc2VsZWN0ZWQgaWRlbnRpZmllciAoY29udGV4dElkIG9yIGZyYW1lSWQgb24gaU9TIDYpLiBJZiBubwogICAgICAgIHNlbGVjdG9yIGlzIHNob3duLCB0aGlzIHdpbGwgc3RpbGwgYmUgdGhlIG1haW4gZnJhbWUgZXhlY3V0aW9uIGNvbnRleHQuCgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fZXhlY3V0aW9uQ29udGV4dFBhdGhDb21wb25lbnRzVG9EaXNwbGF5KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX3JlYnVpbGRFeGVjdXRpb25Db250ZXh0UGF0aENvbXBvbmVudHMpOgogICAgICAgIFVwZGF0ZSB0aGUgbmF2IGJhciBjb21wb25lbnRzLiBUaGVyZSBpcyBhIHNpbmdsZSBzZWdtZW50LCB3aXRoIHRoZSBzZWxlY3RlZCBjb21wb25lbnQuCgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fZnJhbWVQYWdlRXhlY3V0aW9uQ29udGV4dHNDbGVhcmVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX2ZyYW1lUGFnZUV4ZWN1dGlvbkNvbnRleHRzQ2hhbmdlZCk6CiAgICAgICAgVHJ1bmssIGV2ZW50IGhhbmRsZXJzIHdoZW4gZnJhbWVzIGdldCBhbmQgY2xlYXIgZXhlY3V0aW9uIGNvbnRleHRzLiBXaGVuIGEgZnJhbWUKICAgICAgICBuYXZpZ2F0ZXMgd2UgaGF2ZSBhIGxpdHRsZSBiaXQgb2YgbG9naWMgdG8gcmVzZWxlY3QgdGhhdCBmcmFtZSB3aGVuIGl0cyBuZXcKICAgICAgICBleGVjdXRpb24gY29udGV4dCBjb21lcyBpbi4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLl9mcmFtZUFkZGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX2ZyYW1lUmVtb3ZlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLl9mcmFtZU1haW5SZXNvdXJjZUNoYW5nZWQpOgogICAgICAgIGlPUyA2IHN1cHBvcnQuIFRyYWNrIGZyYW1lIGFkZHMsIHJlbW92ZXMsIGFuZCByZXNvdXJjZSBjaGFuZ2VzIHRvIHVwZGF0ZSB0aGUgZGlzcGxheS4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLl9jcmVhdGVFeGVjdXRpb25Db250ZXh0UGF0aENvbXBvbmVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLl9jcmVhdGVFeGVjdXRpb25Db250ZXh0UGF0aENvbXBvbmVudEZyb21GcmFtZSk6CiAgICAgICAgSGVscGVycyBmb3IgY3JlYXRpbmcgcGF0aCBjb21wb25lbnRzLiBIYW5kbGVzIGlPUyA2IGFuZCB0cnVuayB0byBnZXQgdGhlIHJpZ2h0IGlkLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX2NvbXBhcmVFeGVjdXRpb25Db250ZXh0UGF0aENvbXBvbmVudHMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5faW5zZXJ0RXhlY3V0aW9uQ29udGV4dFBhdGhDb21wb25lbnRGb3JGcmFtZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLl9yZW1vdmVFeGVjdXRpb25Db250ZXh0UGF0aENvbXBvbmVudEZvckZyYW1lKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX3VwZGF0ZUV4ZWN1dGlvbkNvbnRleHRQYXRoQ29tcG9uZW50Rm9yRnJhbWUpOgogICAgICAgIFBhdGhDb21wb25lbnRzIGFyZSBhIGxpbmtlZCBsaXN0LiBXZSBkaXNwbGF5IHRoZW0gc29ydGVkLiBUaGVzZSBhcmUgaGVscGVycyBmb3IKICAgICAgICBpbnNlcnRpbmcsIHJlbW92aW5nLCBhbmQgdXBkYXRpbmcgYSBwYXRoIGNvbXBvbmVudCBpbiB0aGF0IGxpc3QuCgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fcGF0aENvbXBvbmVudFNlbGVjdGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX2RlYnVnZ2VyQWN0aXZlQ2FsbEZyYW1lRGlkQ2hhbmdlKToKICAgICAgICBDaGFuZ2VzIHRvIHRoZSBzdGF0ZSBvZiB0aGUgaW5zcGVjdG9yIHRoYXQgbWF5IHJlcXVpcmUgdGhlIFVJIHRvIHVwZGF0ZS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0phdmFTY3JpcHRUZXh0UHJvbXB0LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFRleHRQcm9tcHQucHJvdG90eXBlLmV2YWxJbkluc3BlY3RlZFdpbmRvdyk6CiAgICAgICAgRXZhbHVhdGUgaW4gdGhlIGNvbnRleHQgc2VsZWN0ZWQgaW4gdGhlIFF1aWNrQ29uc29sZS4KCjIwMTMtMDMtMTcgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgQ3JlYXRlIGFuIEV4ZWN1dGlvbkNvbnRleHRMaXN0IGNsYXNzLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA4MDkzNjM+IFBBUklUWSAoV2ViS2l0IFdlYiBJbnNwZWN0b3IpOiBVSSBmb3IgZXZhbHVhdGluZyBpbiBkaWZmZXJlbnQgd2luZG93cyAvIGZyYW1lcyBmcm9tIHRoZSBjb25zb2xlIGlzIG1pc3NpbmcKCiAgICAgICAgVGhlcmUgbWF5IGJlIG1hbnkgRXhlY3V0aW9uQ29udGV4dHMgZm9yIGEgcGFnZSwgb25lIGZvciBlYWNoIGlzb2xhdGVkCiAgICAgICAgd29ybGQgaW4gdGhlIGZyYW1lLiBTdG9yZSBlYWNoIGNvbnRleHQgZm9yIGEgZnJhbWUgaW4gYW4gRXhlY3V0aW9uQ29udGV4dAogICAgICAgIGFuZCBwcm92aWRlIGFuIGFjY2Vzc29yIGZvciB0aGUgb25lIHRoYXQgaXMgdGhlIHBhZ2UgY29udGV4dC4KCiAgICAgICAgVGhpcyBhbHNvIGNvbnZlcmdlcyBvbiB0aGUgbmFtZSAicGFnZUV4ZWN1dGlvbkNvbnRleHQiIGluc3RlYWQgb2YKICAgICAgICAibWFpbkV4ZWN1dGlvbkNvbnRleHQiIGZvciB0aGUgc3BlY2lhbCBjb250ZXh0IG9mIHRoZSBwYWdlLgoKICAgICAgICBSZXZpZXdlZCBieSBEZWFuIEphY2tzb24uCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4ZWN1dGlvbkNvbnRleHRMaXN0LmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkV4ZWN1dGlvbkNvbnRleHRMaXN0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkV4ZWN1dGlvbkNvbnRleHRMaXN0LnByb3RvdHlwZS5nZXQgcGFnZUV4ZWN1dGlvbkNvbnRleHQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRXhlY3V0aW9uQ29udGV4dExpc3QucHJvdG90eXBlLmdldCBjb250ZXh0cyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FeGVjdXRpb25Db250ZXh0TGlzdC5wcm90b3R5cGUuYWRkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkV4ZWN1dGlvbkNvbnRleHRMaXN0LnByb3RvdHlwZS5jbGVhcik6CiAgICAgICAgRXhlY3V0aW9uQ29udGV4dExpc3QgaG9sZHMgYSBsaXN0IG9mIGNvbnRleHRzIGFuZCBoYXMgYSBxdWljawogICAgICAgIGFjY2Vzc29yIGZvciB0aGUgcGFnZSBleGVjdXRpb24gY29udGV4dC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLmdldCBwYWdlRXhlY3V0aW9uQ29udGV4dCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZS5wcm90b3R5cGUuZ2V0IGV4ZWN1dGlvbkNvbnRleHRMaXN0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lLnByb3RvdHlwZS5jbGVhckV4ZWN1dGlvbkNvbnRleHRzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lLnByb3RvdHlwZS5hZGRFeGVjdXRpb25Db250ZXh0KToKICAgICAgICBVcGRhdGVkIHRvIHVzZSBhbiBFeGVjdXRpb25Db250ZXh0TGlzdC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWUucHJvdG90eXBlLnJlcXVlc3RSb290RE9NTm9kZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlLnByb3RvdHlwZS5fcmVxdWVzdFJvb3RET01Ob2RlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWUucHJvdG90eXBlLl9mcmFtZVBhZ2VFeGVjdXRpb25Db250ZXh0Q2hhbmdlZCk6CiAgICAgICAgVXBkYXRlZCBmcm9tIG1haW5FeGVjdXRpb25Db250ZXh0IHRvIHBhZ2VFeGVjdXRpb25Db250ZXh0LgoKMjAxMy0wMy0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1vdmUgdGhlIGRlYnVnZ2VyIGNvbnRyb2xzIGZyb20gdGhlIHF1aWNrIGNvbnNvbGUgdG8gdGhlIGRlYnVnZ2VyIHNpZGViYXIuCgogICAgICAgIEFsc28gZHluYW1pY2FsbHkgYWRkIGFuZCByZW1vdmUgdGhlIGNhbGwgc3RhY2sgc2VjdGlvbiBzbyBpdCBpc24ndCBhbiBleWVzb3JlCiAgICAgICAgd2hlbiB5b3UgYXJlIG5vdCBwYXVzZWQuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RlYnVnZ2VyU2lkZWJhclBhbmVsLmNzczogQWRkZWQuCiAgICAgICAgKC5zaWRlYmFyID4gLnBhbmVsLmRlYnVnZ2VyID4gLmNvbnRlbnQpOgogICAgICAgICguc2lkZWJhciA+IC5wYW5lbC5kZWJ1Z2dlciA+IC5uYXZpZ2F0aW9uLWJhcik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RlYnVnZ2VyU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJTaWRlYmFyUGFuZWwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9kZWJ1Z2dlclBhdXNlUmVzdW1lQnV0dG9uQ2xpY2tlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2RlYnVnZ2VyU3RlcE92ZXJCdXR0b25DbGlja2VkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fZGVidWdnZXJTdGVwSW50b0J1dHRvbkNsaWNrZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9kZWJ1Z2dlclN0ZXBPdXRCdXR0b25DbGlja2VkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fZGVidWdnZXJEaWRQYXVzZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2RlYnVnZ2VyRGlkUmVzdW1lKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fZGVidWdnZXJDYWxsRnJhbWVzRGlkQ2hhbmdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyU2lkZWJhclBhbmVsLnByb3RvdHlwZS5kZXNlbGVjdENhbGxTdGFja0NvbnRlbnRUcmVlRWxlbWVudHMpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdHJlZUVsZW1lbnRTZWxlY3RlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX3RvZ2dsZU9yRm9jdXMpOgoKMjAxMy0wMy0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgdGhlIHRvb2xiYXIgbGFiZWxzIGxvb2sgYmV0dGVyIGluIHdpbmRvdyBtb2RlLgoKICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9Ub29sYmFyLmNzczoKICAgICAgICAoYm9keTpub3QoLmRvY2tlZCkgLnRvb2xiYXIgLml0ZW0uYnV0dG9uID4gLmxhYmVsKTogQXBwbHkgYW50aWFsaWFzZWQgb25seSB0byB0aGUgbGFiZWxzCiAgICAgICAgc28gd2UgZG9uJ3QgYWZmZWN0IHRleHQgaW4gdGhlIGRhc2hib2FyZC4gQWxzbyBhZGQgYSBzdHJva2UgdG8gbWFrZSB0aGUgdGV4dCBoZWF2aWVyLgoKMjAxMy0wMy0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgdG9vbGJhciBpdGVtcyBsYXlvdXQgYW5kIGNvbGxhcHNlIGJldHRlciBhdCBuYXJyb3cgd2luZG93IHNpemVzLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMxODkwOTI+IFRvb2xiYXIgaXRlbXMgY2FuIGJlIGxhaWQgb3V0IG9uIHRvcCBvZiBlYWNoIG90aGVyIHdpdGggbmFycm93IHdpbmRvdwoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9CdXR0b25Ub29sYmFySXRlbS5jc3M6CiAgICAgICAgKC50b29sYmFyLmNvbGxhcHNlZCAuaXRlbS5idXR0b24gPiAubGFiZWwpOiBSZW1vdmVkLiBXZSBvbmx5IHVzZSBpY29uLW9ubHkgbm93LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGFzaGJvYXJkVmlldy5jc3M6CiAgICAgICAgKC50b29sYmFyLmNvbGxhcHNlZCAuZGFzaGJvYXJkKTogQWRkZWQuIENvbGxhcHNlcyB3aGVuIHRoZXJlIGlzIG5vIHJvb20uCgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uQmFyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvbkJhci5wcm90b3R5cGUudXBkYXRlTGF5b3V0KTogQ2FsbCBjdXN0b21VcGRhdGVMYXlvdXQoKSBpZiBpdCBleGlzdHMuCgogICAgICAgICogVXNlckludGVyZmFjZS9Ub29sYmFyLmNzczoKICAgICAgICAoLnRvb2xiYXIgLml0ZW0tc2VjdGlvbjpub3QoLmNlbnRlcikpOiBSZW1vdmVkIG1pbi13aWR0aCBhbmQgbWFkZSBmbGV4IGJlIDEuCiAgICAgICAgKC50b29sYmFyIC5pdGVtLXNlY3Rpb24ubGVmdCk6IEFkZGVkIHJpZ2h0IG1hcmdpbiB0byBwcmV2ZW50IHRvdWNoaW5nLgogICAgICAgICgudG9vbGJhciAuaXRlbS1zZWN0aW9uLmNlbnRlcik6IE1ha2UgZmxleCBiZSAyIHNvIGl0IGNhbiBiZSBhIGRpZmZlcmVudCB3aWR0aC4KICAgICAgICAoLnRvb2xiYXIgLml0ZW0tc2VjdGlvbi5yaWdodCk6IEFkZGVkIGEgbGVmdCBtYXJnaW4gdG8gcHJldmVudCB0b3VjaGluZy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Rvb2xiYXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Ub29sYmFyLnByb3RvdHlwZS5zZXQgZGlzcGxheU1vZGUpOiBSZXZlcnQgdGhlIGZvcmNlZCBpY29uLW9ubHkgbW9kZS4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Ub29sYmFyLnByb3RvdHlwZS5jdXN0b21VcGRhdGVMYXlvdXQuY29tcHV0ZUl0ZW1XaWR0aHMpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRvb2xiYXIucHJvdG90eXBlLmN1c3RvbVVwZGF0ZUxheW91dC5jb21wdXRlU2VjdGlvbldpZHRocyk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVG9vbGJhci5wcm90b3R5cGUuY3VzdG9tVXBkYXRlTGF5b3V0KTogQWRkZWQuCiAgICAgICAgQ29tcHV0ZXMgZWFjaCBzZWN0aW9uIGluZGl2aWR1YWxseSBmb3Igb3ZlcmZsb3cuIElmIGFueSBzZWN0aW9uIG92ZXJmbG93IHN3aXRjaCB0byBpY29uLW9ubHkKICAgICAgICBtb2RlIHdoZW4gaW4gaG9yaXpvbnRhbC1sYWJlbCBtb2RlLiBJZiBhbnkgc2VjdGlvbiBvdmVyZmxvd3MgYWZ0ZXIgdGhhdCB0aGVuIGNvbGxhcHNlIHRoZQogICAgICAgIHRvb2xiYXIsIHdoaWNoIG9ubHkgaGlkZXMgdGhlIERhc2hib2FyZCByaWdodCBub3cuCgoyMDEzLTAzLTE2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSB0aGUgbGFiZWxzIGluIHRoZSBJbnN0cnVtZW50cyBzaWRlYmFyIGJlIDExcHggaW5zdGVhZCBvZiAxMHB4LgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLmNzczoKICAgICAgICBSZW1vdmVkIGEgcnVsZSB0aGF0IHdhcyBtYWtpbmcgdGhlIGZvbnQtc2l6ZSAxMHB4LiBPbmx5IHRoZSBJbnN0cnVtZW50cwogICAgICAgIHNpZGViYXIgdHJpZ2dlcmVkIHRoaXMgcnVsZS4KCjIwMTMtMDMtMTYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBCcmVhay11cCB0aGUgZ2VuZXJhdGlvbiBvZiBpbWFnZXMgYW5kIGRlbGF5IHRoZSBnZW5lcmF0aW9uIG9mCiAgICAgICAgYWN0aXZlIGltYWdlcyBzbyB0aGUgaW5pdGlhbCBwYWdlIGxvYWQgaXMgZmFzdGVyLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM0MzYzMzQ+IFdlYiBJbnNwZWN0b3IgdGFrZXMgYWJvdXQgM3MgdG8gYWN0aXZhdGUKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VVdGlsaXRpZXMuanM6CiAgICAgICAgKC5nZW5lcmF0ZUltYWdlcy5nZW5lcmF0ZUFjdGl2ZUltYWdlcyk6IEFkZGVkLgogICAgICAgICguZ2VuZXJhdGVJbWFnZXMpOiBTZXQgYSB0aWVtb3V0IHRvIGNhbGwgZ2VuZXJhdGVBY3RpdmVJbWFnZXMuCiAgICAgICAgKC5fZ2VuZXJhdGVJbWFnZXMuZ2VuZXJhdGVBY3RpdmVJbWFnZXMpOiBBZGRlZC4KICAgICAgICAoLl9nZW5lcmF0ZUltYWdlcyk6IFNldCBhIHRpZW1vdXQgdG8gY2FsbCBnZW5lcmF0ZUFjdGl2ZUltYWdlcy4KCjIwMTMtMDMtMTUgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBTb3J0IHJlc291cmNlcyBieSBkb21haW4gYmVmb3JlIHNvcnRpbmcgYWxwaGFiZXRpY2FsbHkgYnkgbmFtZS4KCiAgICAgICAgVGhpcyB3YXMgc3VnZ2VzdGVkIGJ5IHNvbWVvbmUgb24gVHdpdHRlci4gSXQgYWxsb3dzIGxvY2FsIHJlc291cmNlcyB0byBidWJibGUKICAgICAgICB0byB0aGUgdG9wIGFuZCBleHRlcm5hbCByZXNvdXJjZXMgKGFuYWx5dGljIHNjcmlwdHMsIGV0Yy4pIHRvIGNvbWUgbGF0ZXIuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0dlbmVyYWxUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkdlbmVyYWxUcmVlRWxlbWVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5HZW5lcmFsVHJlZUVsZW1lbnQucHJvdG90eXBlLnNldCBtYWluVGl0bGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuR2VuZXJhbFRyZWVFbGVtZW50LnByb3RvdHlwZS5zZXQgc3VidGl0bGUpOgogICAgICAgIEZhbGxiYWNrIHRvICIiIGZvciBtYWluVGl0bGUgYW5kIHN1YnRpdGxlLgogCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVFbGVtZW50LmNvbXBhcmVSZXNvdXJjZVRyZWVFbGVtZW50cyk6CiAgICAgICAgU29ydCByZXNvdXJjZXMgYnkgZG9tYWluIChzdWJ0aXRsZSkgYmVmb3JlIHNvcnRpbmcgYnkgbmFtZSAobWFpblRpdGxlKS4KCjIwMTMtMDMtMTUgIEplc3NpZSBCZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KCiAgICAgICAgUmFuIHVwZGF0ZS1zYWZhcmktbG9jYWxpemFibGUtc3RyaW5ncy4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6CgoyMDEzLTAzLTE0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRGlzcGxheSBlbS1kYXNoZXMgaW5zdGVhZCBvZiAiMCIgZm9yIHJlc291cmNlcyBzaXplIGFuZCB0aW1lIHRvIG1ha2UgaXQgY2xlYXIKICAgICAgICB0aGUgdmFsdWVzIGFyZSBub3Qga25vd24geWV0LgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9EYXNoYm9hcmRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGFzaGJvYXJkVmlldy5wcm90b3R5cGUuc2V0IHRpbWUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGFzaGJvYXJkVmlldy5wcm90b3R5cGUuc2V0IHJlc291cmNlc1NpemUpOgoKMjAxMy0wMy0xNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFJlbW92ZSByZWZlcmVuY2VzIHRvIGJvdHRvbVVwSGVhZC4gV2UgY2FuIGJ1aWxkIHRoZSBib3R0b20tdXAgdHJlZSBsb2NhbGx5LgoKICAgICAgICBUaGUgYm90dG9tVXBIZWFkIGlzIGJlaW5nIHJlbW92ZWQgZnJvbSB0aGUgcHJvdG9jb2wgYnkgaHR0cHM6Ly93ZWJraXQub3JnL2IvMTEyMzUxLgogICAgICAgIEFsc28gcmVtb3ZlIHJlZmVyZW5jZXMgdG8gVG9wRG93blRyZWVGYWN0b3J5IGFuZCBCb3R0b21VcFRyZWVGYWN0b3J5IHdpdGggaXMgZGVhZCBjb2RlLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9KYXZhU2NyaXB0UHJvZmlsZVZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0UHJvZmlsZVZpZXcucHJvdG90eXBlLmdldCBib3R0b21VcFByb2ZpbGVEYXRhR3JpZFRyZWUpOgoKMjAxMy0wMy0xNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFsd2F5cyBzcGVjaWZ5IG92ZXJmbG93LXggd2hlbiBzcGVjaWZ5aW5nIG92ZXJmbG93LXkuCgogICAgICAgIE5vdCBzcGVjaWZ5aW5nIG92ZXJmbG93LXggY2F1c2VzIGl0IHRvIGJlIGF1dG8gYW5kIGNhbiBzaG93IHNjcm9sbGJhcnMgZm9yIHdpZGUgY29udGVudC4KICAgICAgICBBbHNvIHVzZSBhdXRvIGluc3RlYWQgb2Ygc2Nyb2xsIGluIGEgZmV3IHBsYWNlcyB0byBwcmV2ZW50IHNjcm9sbCBiYXJzIGZyb20gYWx3YXlzIGJlaW5nCiAgICAgICAgdmlzaWJsZSB3aGVuIHRoZSBzeXN0ZW0gcHJlZmVycyBub24tb3ZlcmxheSBzY3JvbGxiYXJzLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwuY3NzOgogICAgICAgICguc2lkZWJhciA+IC5wYW5lbC5kZXRhaWxzLmNzcy1zdHlsZSA+IC5jb250ZW50KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTGF5ZXJUcmVlU2lkZWJhclBhbmVsLmNzczoKICAgICAgICAoLmxheWVyLXRyZWUucGFuZWwgLmRhdGEtY29udGFpbmVyKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nQ29udGVudFZpZXcuY3NzOgogICAgICAgICguY29uc29sZS1tZXNzYWdlcyk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1BvcG92ZXIuY3NzOgogICAgICAgICgucG9wb3ZlciA+IC5jb250YWluZXIpOgoKMjAxMy0wMy0xNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFJlbW92ZSB0aGUgbWVtb3J5IHBsYWNlaG9sZGVyIGluIHRoZSB0b29sYmFyIGRhc2hib2FyZCBub3cgdGhhdCB3ZSBkZWZlcnJlZCB0aGF0IGZlYXR1cmUuCgogICAgICAgIFRoaXMgYWxzbyBldmVubHkgZGlzdHJpYnV0ZXMgdGhlIGl0ZW1zIGZvciBhIGJldHRlciBsYXlvdXQgaW4gYWxsIG1vZGVzLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMyMzc3NDc+IERhc2hib2FyZCBpdGVtcyBhcmUgbm90IGV2ZW5seSBkaXN0cmlidXRlZAoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiBVcGRhdGVkLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGFzaGJvYXJkVmlldy5jc3M6CiAgICAgICAgT3ZlcmhhdWxlZCB0aGUgc3R5bGVzIHRvIHVzZSBmbGV4IGxheW91dCBpbiBhbGwgY2FzZXMuCgogICAgICAgICogVXNlckludGVyZmFjZS9EYXNoYm9hcmRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGFzaGJvYXJkVmlldyk6CiAgICAgICAgUmVtb3ZlZCBtZW1vcnkgYW5kIHNwbGl0IHJlc291cmNlcyBpbnRvIHJlc291cmNlQ291bnQgYW5kIHJlc291cmNlc1NpemUuCgogICAgICAgIChXZWJJbnNwZWN0b3IuRGFzaGJvYXJkVmlldy5wcm90b3R5cGUuc2V0IGxvZ3MpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGFzaGJvYXJkVmlldy5wcm90b3R5cGUuc2V0IGlzc3Vlcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXNoYm9hcmRWaWV3LnByb3RvdHlwZS5zZXQgZXJyb3JzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhc2hib2FyZFZpZXcucHJvdG90eXBlLnNldCByZXNvdXJjZXNDb3VudCk6CiAgICAgICAgQ2FsbCBfZm9ybWF0UG9zc2libGVMYXJnZU51bWJlciBhbmQgc2V0IHRoZSBvdXRsZXQuCgogICAgICAgIChXZWJJbnNwZWN0b3IuRGFzaGJvYXJkVmlldy5wcm90b3R5cGUuc2V0IHJlc291cmNlc1NpemUpOgogICAgICAgIFNldCB0aGUgcmVzb3VyY2VzU2l6ZSBvdXRsZXQgaW5zdGVhZCBvZiBjYWxsaW5nIF91cGRhdGVSZXNvdXJjZXNPdXRsZXQuCgogICAgICAgIChXZWJJbnNwZWN0b3IuRGFzaGJvYXJkVmlldy5wcm90b3R5cGUuX2Zvcm1hdFBvc3NpYmxlTGFyZ2VOdW1iZXIpOgogICAgICAgIEFkZGVkLiBUaGlzIGlzIGEgYmV0dGVyIGFwcHJvYWNoIHRvIGRlYWxpbmcgd2l0aCBsYXJnZSBudW1iZXJzIHRoYW4gZWxsaXBzaXMuCgogICAgICAgIChXZWJJbnNwZWN0b3IuRGFzaGJvYXJkVmlldy5wcm90b3R5cGUuX2FwcGVuZEVsZW1lbnRGb3JOYW1lZEl0ZW0pOgogICAgICAgIFJlbW92ZWQgdGhlIGRvdWJsZSBkaXYuIEl0IGlzIG5vIGxvbmdlciBuZWVkZWQgdG8gdHJ1bmNhdGUgc2luY2UgYWxsIHRoZSBvdXRsZXRzCiAgICAgICAgY2FuJ3QgcmVhbGx5IGdvIGxhcmdlciB0aGFuIDYgY2hhcmFjdGVycyBub3cuCgogICAgICAgIChXZWJJbnNwZWN0b3IuRGFzaGJvYXJkVmlldy5wcm90b3R5cGUuX25ldHdvcmtJdGVtV2FzQ2xpY2tlZCk6CiAgICAgICAgUmVuYW1lZCBmcm9tIF90aW1lV2FzQ2xpY2tlZCBzbyByZXNvdXJjZXNTaXplIGNhbiB1c2UgaXQuCgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvV2VpZ2h0LnN2ZzogQWRkZWQuCgoyMDEzLTAzLTEzICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFyayBET00gbm9kZSBzdHlsZXMgYXMgbmVlZGluZyByZWZyZXNoZWQgd2hlbiBhbiBhbmNlc3RvciBjaGFuZ2VzIHBzZXVkbyBjbGFzc2VzIG9yIGFueSBhdHRyaWJ1dGVzIGNoYW5nZS4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNDEyMjM0PiBSRUdSRVNTSU9OOiBTdHlsZSBkZXRhaWxzIHNpZGViYXIgZG9lcyBub3QgdXBkYXRlIHdoZW4gYW5jZXN0b3Igbm9kZXMgY2hhbmdlCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlcik6IEFkZCBldmVudCBsaXN0ZW5lcnMgZm9yIGFsbCBub2Rlcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5cGUuX25vZGVQc2V1ZG9DbGFzc2VzRGlkQ2hhbmdlKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlLl9ub2RlQXR0cmlidXRlc0RpZENoYW5nZSk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9ET01Ob2RlU3R5bGVzLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcyk6IFJlbW92ZSBldmVudCBsaXN0ZW5lcnMgb24gdGhlIHNpbmdsZSBub2RlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUucHNldWRvQ2xhc3Nlc0RpZENoYW5nZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuYXR0cmlidXRlRGlkQ2hhbmdlKTogQWRkZWQuCgoyMDEzLTAzLTEzICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWx3YXlzIHJlZnJlc2ggdGhlIERPTSBub2RlIHN0eWxlcyB3aGVuIHZpc2liaWxpdHkgY2hhbmdlcyBmb3IgdGhlIHNpZGViYXIgb3Igc2VwYXJhdGUgcGFuZWxzLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM0MTIyMzQ+IFJFR1JFU1NJT046IFN0eWxlIGRldGFpbHMgc2lkZWJhciBkb2VzIG5vdCB1cGRhdGUgd2hlbiBhbmNlc3RvciBub2RlcyBjaGFuZ2UKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS52aXNpYmlsaXR5RGlkQ2hhbmdlKToKICAgICAgICBDYWxsIG1hcmtBc05lZWRzUmVmcmVzaCBpbnN0ZWFkIG9mIHRoZSByZW1vdmVkIHJlZnJlc2hJZk5lZWRlZC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N0eWxlRGV0YWlsc1BhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVEZXRhaWxzUGFuZWwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVEZXRhaWxzUGFuZWwucHJvdG90eXBlLnNob3duKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlRGV0YWlsc1BhbmVsLnByb3RvdHlwZS5tYXJrQXNOZWVkc1JlZnJlc2gpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVEZXRhaWxzUGFuZWwucHJvdG90eXBlLl9yZWZyZXNoTm9kZVN0eWxlcyk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVEZXRhaWxzUGFuZWwucHJvdG90eXBlLl9ub2RlU3R5bGVzUmVmcmVzaGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlRGV0YWlsc1BhbmVsLnByb3RvdHlwZS5fbm9kZVN0eWxlc05lZWRzUmVmcmVzaGVkKToKICAgICAgICBSZW1vdmUgdGhlIGNvbmNlcHQgb2YgaGF2aW5nIGEgc2VwYXJhdGUgbmVlZHMgcmVmcmVzaCBmbGFnLiBJbnN0ZWFkIHdlIGp1c3QgY2FsbCByZWZyZXNoIG9uIHRoZSBET01Ob2RlU3R5bGVzCiAgICAgICAgYW5kIHdhaXQgZm9yIHRoZSBSZWZyZXNoZWQgZXZlbnQuIFRoaXMgd2F5IHdlIGFsd2F5cyBnZXQgdGhlIGxhdGVzdCBzdHlsZXMgd2hlbiBmaXJzdCBzaG93aW5nIHRoZSBwYW5lbC4KCjIwMTMtMDMtMTQgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNDIxNTU1PiBTb3VyY2UgY29kZSBsaW5rcyBzaG91bGQgYWx3YXlzIHNob3cgdGhlIG9yaWdpbmFsIGxvY2F0aW9uCgogICAgICAgIExvY2F0aW9uIGxpbmtzIHdpbGwgbm93IHNob3cgdGhlIG9yaWdpbmFsIGxvY2F0aW9uIG5vcm1hbGx5LCBhbmQKICAgICAgICBkaXNwbGF5IGEgbWFwcGVkIC8gZm9ybWF0dGVkIGRpc3BsYXkgbG9jYXRpb24gaW4gaXRhbGljcyB3aGVuIGhvdmVyZWQsCiAgICAgICAgYnV0IG9ubHkgaWYgc3VjaCBhIGxvY2F0aW9uIGV4aXN0cy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTGF5b3V0VGltZWxpbmVEYXRhR3JpZE5vZGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXlvdXRUaW1lbGluZURhdGFHcmlkTm9kZS5wcm90b3R5cGUuY3JlYXRlQ2VsbENvbnRlbnQpOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY3JlYXRlU291cmNlQ29kZUxvY2F0aW9uTGluayk6CiAgICAgICAgVXNlIHRoZSBTb3VyY2VDb2RlTG9jYXRpb24gaGVscGVycyB0byBrZWVwIHRoZSBjb250ZW50cyBsaXZlLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5jc3M6CiAgICAgICAgKC5kaXNwbGF5LWxvY2F0aW9uKToKICAgICAgICBNYWtlIGRpc3BsYXkgbG9jYXRpb25zIGl0YWxpYy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGVMb2NhdGlvbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVMb2NhdGlvbi5wcm90b3R5cGUudG9vbHRpcFN0cmluZyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlTG9jYXRpb24ucHJvdG90eXBlLnBvcHVsYXRlTGl2ZURpc3BsYXlMb2NhdGlvblRvb2x0aXApOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZUxvY2F0aW9uLnByb3RvdHlwZS5wb3B1bGF0ZUxpdmVEaXNwbGF5TG9jYXRpb25TdHJpbmcpOgogICAgICAgIERpZmZlcmVudCBoYW5kbGVycyB0byBrZWVwIGEgdG9vbHRpcCBvciBlbGVtZW50IHByb3BlcnR5IGxpdmUuCgoyMDEzLTAzLTE0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzQxODMzOD4gU2hvdyAvIEhpZGUgU2hhZG93IERPTSBzaG91bGQgbm90IGNoYW5nZSB0aGUgc2VsZWN0ZWQgbm9kZSwgb3Igc2VsZWN0IHRoZSBlYXJsaWVzdCBhbmNlc3RvcgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlT3V0bGluZS5qczoKCjIwMTMtMDMtMTQgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNDE4MzMyPiBSZW1vdmUgb3Igc2VsZWN0aXZlbHkgc2hvdyAiU2hvdyBTaGFkb3cgRE9NIiBjb250ZXh0IG1lbnUsIHRoZXJlIGlzIGEgbmF2IGJhciBidXR0b24KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZU91dGxpbmUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlT3V0bGluZS5wcm90b3R5cGUucG9wdWxhdGVDb250ZXh0TWVudSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlT3V0bGluZS5wcm90b3R5cGUuX3BvcHVsYXRlQ29udGV4dE1lbnUpOgoKMjAxMy0wMy0xNCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBJbXByb3ZlIEphdmFTY3JpcHQgcHJldHR5IHByaW50aW5nIG9mICJmaW5hbGx5IgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Db2RlTWlycm9yRm9ybWF0dGVycy5qczoKICAgICAgICAqIFRvb2xzL1ByZXR0eVByaW50aW5nL0NvZGVNaXJyb3JGb3JtYXR0ZXJzLmpzOgoKMjAxMy0wMy0xNCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBQcm92aWRlIGEgU291cmNlQ29kZUxvY2F0aW9uIGhlbHBlciB0aGF0IGtlZXBzIGFuIGVsZW1lbnQgdGV4dCB1cCB0byBkYXRlLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9MYXlvdXRUaW1lbGluZURhdGFHcmlkTm9kZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheW91dFRpbWVsaW5lRGF0YUdyaWROb2RlLnByb3RvdHlwZS5jcmVhdGVDZWxsQ29udGVudCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGVMb2NhdGlvbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVMb2NhdGlvbi5wcm90b3R5cGUuc2V0QW5kS2VlcEVsZW1lbnREaXNwbGF5TG9jYXRpb25TdHJpbmdVcFRvRGF0ZSk6CgoyMDEzLTAzLTE0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIExldCBXZWJJbnNwZWN0b3IuY3JlYXRlU291cmNlQ29kZUxvY2F0aW9uTGluayBjcmVhdGUgYSBnb1RvQXJyb3cKCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICBUaGlzIGFsbG93cyBMYXlvdXRUaW1lbGluZURhdGFHcmlkTm9kZSB0byB1c2UgY3JlYXRlU291cmNlQ29kZUxvY2F0aW9uTGluawogICAgICAgIGFuZCBub3QgcmVtb3ZlIGl0cyBjaGlsZHJlbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xheW91dFRpbWVsaW5lRGF0YUdyaWROb2RlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5b3V0VGltZWxpbmVEYXRhR3JpZE5vZGUucHJvdG90eXBlLmNyZWF0ZUNlbGxDb250ZW50KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoLnVwZGF0ZUxpbmtEaXNwbGF5U3RyaW5ncyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jcmVhdGVTb3VyY2VDb2RlTG9jYXRpb25MaW5rKToKCjIwMTMtMDMtMTQgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgV2ViSW5zcGVjdG9yLmNyZWF0ZVNvdXJjZUNvZGVMb2NhdGlvbkxpbmsgdXNlIFNvdXJjZUNvZGVMb2NhdGlvbidzIGZ1bGwgcG93ZXIKCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICBXaGVuIGEgbGluayBpcyBjcmVhdGVkIHdpdGggYSBzb3VyY2UgY29kZSBsb2NhdGlvbiB3ZSBjYW4gc2hvdyB0aGUgcmVhbAogICAgICAgIGxvY2F0aW9uIChtYXBwZWQgbG9jYXRpb24sIGZvcm1hdHRlZCBsb2NhdGlvbiwgb3JpZ2luYWwgbG9jYXRpb24pIGFuZAogICAgICAgIHVwZGF0ZSB0aGUgbGluayBhbmQgdG9vbHRpcCB3aGVuIHRoaW5ncyBjaGFuZ2UuCgogICAgICAgICogVXNlckludGVyZmFjZS9FdmVudExpc3RlbmVyU2VjdGlvbkdyb3VwLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lclNlY3Rpb25Hcm91cC5wcm90b3R5cGUuX2Z1bmN0aW9uVGV4dE9yTGluayk6CiAgICAgICAgU3dpdGNoIHRvIGZyb20gY3JlYXRlU291cmNlQ29kZUxpbmsgdG8gY3JlYXRlU291cmNlQ29kZUxvY2F0aW9uTGluay4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jcmVhdGVTb3VyY2VDb2RlTG9jYXRpb25MaW5rKToKICAgICAgICBVcGRhdGUgbGluayB0ZXh0IGFuZCB0b29sdGlwIHdoZW4gdGhlIGxvY2F0aW9uIGNoYW5nZXMuCgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VDb2RlTG9jYXRpb24uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlTG9jYXRpb24ucHJvdG90eXBlLl9sb2NhdGlvblN0cmluZyk6CiAgICAgICAgVXNlIFNvdXJjZUNvZGUuZGlzcGxheU5hbWUgYW5kIGhhbmRsZSBzb3VyY2UgY29kZXMgd2l0aG91dCBVUkxzIGlmIG5lZWRlZC4KCjIwMTMtMDMtMTQgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMzg2MTQzPiBSRUdSRVNTSU9OIChDb2RlTWlycm9yKTogSnVtcCB0byBsaW5lIC8gcmV2ZWFsIGxpbmUgc2hvdWxkIHJldmVhbCBjbG9zZXIgdG8gdGhlIG1pZGRsZSBvZiB0aGUgZWRpdG9yIG5ldmVyIHRoZSB0b3Agb3IgYm90dG9tIGlmIHBvc3NpYmxlCgogICAgICAgIElmIHJldmVhbExpbmUgaXMgY2FsbGVkIHdpdGggYSBsaW5lIG91dHNpZGUgdGhlIHZpc2libGUgc2V0IG9mIGxpbmVzCiAgICAgICAgaW4gdGhlIGVkaXRvciB0aGVuIHNjcm9sbCB0aGUgZWRpdG9yIHRvIG1ha2UgdGhhdCBsaW5lIHRoZSBjZW50ZXIuCiAgICAgICAgVGhpcyBhbHNvIGJlaGF2ZXMgYXMgZXhwZWN0ZWQgZm9yIGxpbmVzIHRoZSBzdGFydCAvIGVuZCBvZiBhIGRvY3VtZW50LgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuc2hvd24pOgogICAgICAgIEluIG9yZGVyIGZvciBjbS5nZXRTY3JvbGxJbmZvKCkgdmFsdWVzIHRvIGJlIHZhbGlkIGFmdGVyIGFuIGVkaXRvciBpcwogICAgICAgIHJlYXR0YWNoZWQgdG8gdGhlIERPTSBIaWVyYXJjaHkgd2UgaGF2ZSB0byBjYWxsIHJlZnJlc2gsIGFuZCBiZWNhdXNlIG9mCiAgICAgICAgdGhlIHdheSBDb2RlTWlycm9yIHdvcmtzIChjb2FsZXNjaW5nIGNoYW5nZXMgaW4gb3BlcmF0aW9ucykgdGhlCiAgICAgICAgZ2V0U2Nyb2xsSW5mbyBpcyBvbmx5IHZhbGlkIGFmdGVyIHRoZSByZWZyZXNoIG9wZXJhdGlvbi4gU28gcmVtb3ZlIHRoZQogICAgICAgIHdyYXBwaW5nIG9wZXJhdGlvbiBoZXJlLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnNldCBmb3JtYXR0ZWQpOgogICAgICAgIElmIHlvdSBwcmV0dHkgcHJpbnQgYSBkb2N1bWVudCBkbyBub3Qgc2VuZCBhIGNoYW5nZSBldmVudCBhbmQKICAgICAgICBjYXVzZSB0aGUgdmFsdWUgdG8gYmUgc2VudCB0byB0aGUgYmFja2VuZC4gVGhlIGZyb250ZW5kIHN0eWxlCiAgICAgICAgc2lkZWJhciBleHBlY3RzIGxpbmUgYW5kIGNvbHVtbiBudW1iZXJzIGZvciB0aGUgb3JpZ2luYWwKICAgICAgICB1bmZvcm1hdHRlZCBkb2N1bWVudC4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5yZXZlYWxBbmRIaWdobGlnaHRMaW5lKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnJldmVhbExpbmUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3Njcm9sbEludG9WaWV3Q2VudGVyZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3ByZXR0eVByaW50KToKICAgICAgICBJbiByZXZlYWxMaW5lIG9yIHByZXR0eVByaW50IHdoZW4gd2UgbW92ZSB0aGUgc2VsZWN0aW9uIG1ha2UgYSBkZWNpc2lvbgogICAgICAgIHdoZXRoZXIgb3Igbm90IHRvIHNjcm9sbCB0aGUgZWRpdG9yIHRvIHB1dCB0aGF0IGxpbmUgaW4gdGhlIGNlbnRlci4KCjIwMTMtMDMtMTQgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgVXBkYXRlIENvZGVNaXJyb3IgdG8gVG9UICh2My4xKykgd2hpY2ggaW5jbHVkZXMgc29tZSBKYXZhU2NyaXB0IGxhbmd1YWdlIGFuZCBzZWxlY3Rpb24gZml4ZXMKCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMzk2MzMyPiBDb2RlTWlycm9yOiBTZWxlY3Rpb24gb24gbGluZXMgdGhhdCB3cmFwIG1vcmUgdGhhbiBvbmNlIGlzIGluY29ycmVjdAoKICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZGVtaXJyb3IuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvamF2YXNjcmlwdC5qczoKCjIwMTMtMDMtMTQgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNDEwMjM3PiBSRUdSRVNTSU9OOiBFZGl0aW5nIENTUyByZXNvdXJjZXMgbm8gbG9uZ2VyIHdvcmtzIChpdCBpcyByZWFkLW9ubHkpCgogICAgICAgIFJldmlld2VkIGJ5IFJpY2t5IE1vbmRlbGxvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnNldCByZWFkT25seSk6CgoyMDEzLTAzLTE0ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzQxMDI1Nz4gRGlzcGxheSB0aGUgcmVhc29uIHdoeSBhIGxheWVyIGlzIGNvbXBvc2l0ZWQKCiAgICAgICAgUmV0cmlldmUgdGhlIHJlYXNvbiB3aHkgdGhlIHNlbGVjdGVkIGxheWVyIGluIHRoZSBsYXllciB0cmVlIHNpZGViYXIKICAgICAgICBwYW5lbCBpcyBjb21wb3NpdGVkIGFuZCBkaXNwbGF5IHRoZW0gaW4gYSBwb3BvdmVyIGFuY2hvcmVkIHRvIHRoZQogICAgICAgIHNlbGVjdGVkIGRhdGEgZ3JpZCBub2RlLCByZW1vdmluZyB0aGUgcG9wb3ZlciB3aGVuIHRoZSBpbnNwZWN0b3IKICAgICAgICBsb3NlcyBmb2N1cyBvciB0aGUgZGF0YSBncmlkIG5vZGUgaXMgbm8gbG9uZ2VyIHNlbGVjdGVkLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgogICAgICAgIEFkZCBuZXcgc3RyaW5ncyB1c2VkIHRvIGRpc3BsYXkgdGhlIHZhcmlvdXMgY29tcG9zaXRpbmcgcmVhc29ucy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qczoKICAgICAgICBBZGQgbmV3IExheWVyVHJlZS5yZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllcigpIHByb3RvY29sIG1ldGhvZC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xheWVyVHJlZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVNYW5hZ2VyLnByb3RvdHlwZS5yZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllcik6CiAgICAgICAgV3JhcHBlciBmb3IgdGhlIG5ldyBMYXllclRyZWUucmVhc29uc0ZvckNvbXBvc2l0aW5nTGF5ZXIoKSBwcm90b2NvbAogICAgICAgIG1ldGhvZC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xheWVyVHJlZVNpZGViYXJQYW5lbC5jc3M6CiAgICAgICAgKC5sYXllci10cmVlLXBvcG92ZXIpOgogICAgICAgICgubGF5ZXItdHJlZS1wb3BvdmVyIHApOgogICAgICAgICgubGF5ZXItdHJlZS1wb3BvdmVyIHVsKToKICAgICAgICAoLmxheWVyLXRyZWUtcG9wb3ZlciBsaSk6CiAgICAgICAgU3R5bGVzIGZvciB0aGUgY29udGVudCBkaXNwbGF5ZWQgaW4gYSBwb3BvdmVyIHRvIHNob3cgdGhlIGNvbXBvc2l0aW5nCiAgICAgICAgcmVhc29ucyBmb3IgdGhlIHNlbGVjdGVkIGxheWVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTGF5ZXJUcmVlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fc2VsZWN0ZWREYXRhR3JpZE5vZGVDaGFuZ2VkKToKICAgICAgICBPbiB0b3Agb2YgaGlnaGxpZ2h0aW5nIHRoZSBhcHByb3ByaWF0ZSByZWdpb24gaW4gdGhlIGNhbnZhcyBmb3IgdGhlCiAgICAgICAgc2VsZWN0ZWQgbGF5ZXIsIGFsc28gc2hvdyBhIHBvcG92ZXIgd2l0aCB0aGUgcmVhc29ucyB3aHkgaXQgd2FzCiAgICAgICAgY29tcG9zaXRlZCBvciByZW1vdmUgdGhlIHBvcG92ZXIgaWYgdGhlcmUgYXJlIG5vIHNlbGVjdGVkIGxheWVycy4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9kYXRhR3JpZEdhaW5lZEZvY3VzKToKICAgICAgICBTaG93IHRoZSBwb3BvdmVyIGZvciB0aGUgc2VsZWN0ZWQgZGF0YSBncmlkIG5vZGUuCgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fZGF0YUdyaWRMb3N0Rm9jdXMpOgogICAgICAgIEhpZGUgdGhlIHBvcG92ZXIuCgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fc2hvd1BvcG92ZXJGb3JTZWxlY3RlZE5vZGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5faGlkZVBvcG92ZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlU2lkZWJhclBhbmVsLnByb3RvdHlwZS4pOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcG9wdWxhdGVMaXN0T2ZDb21wb3NpdGluZ1JlYXNvbnMpOgogICAgICAgIFNob3cgYSBwb3BvdmVyIGxpc3RpbmcgdGhlIGNvbXBvc2l0aW5nIHJlYXNvbnMgZm9yIHRoZSBzZWxlY3RlZCBsYXllcgogICAgICAgIGFuY2hvcmVkIHRvIHRoZSBzZWxlY3RlZCBkYXRhIGdyaWQgbm9kZS4gVGhlIGNvbnRlbnQgb2YgdGhlIHBvcG92ZXIKICAgICAgICBpcyBwcm92aWRlZCBhZnRlciB0aGUgY2FsbCB0byB0aGUgYWdlbnQgdG8gcmV0cmlldmUgdGhlIHJlYXNvbnMgZm9yCiAgICAgICAgY29tcG9zaXRpbmcgaGFzIHJldHVybmVkLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUG9wb3Zlci5jc3M6CiAgICAgICAgKC5wb3BvdmVyKToKICAgICAgICAoLnBvcG92ZXIuYXJyb3ctdXApOgogICAgICAgICgucG9wb3Zlci5hcnJvdy1yaWdodCk6CiAgICAgICAgKC5wb3BvdmVyLmFycm93LWRvd24pOgogICAgICAgICgucG9wb3Zlci5hcnJvdy1sZWZ0KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUG9wb3Zlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlBvcG92ZXIucHJvdG90eXBlLmFyZWEpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUG9wb3Zlci5wcm90b3R5cGUucHJlc2VudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Qb3BvdmVyLnByb3RvdHlwZS5fYmVzdE1ldHJpY3NGb3JFZGdlKToKICAgICAgICBNaXNjZWxsYW5lb3VzIGVuaGFuY2VtZW50cyBmb3IgYmV0dGVyIHBvcG92ZXIgYmVoYXZpb3Igd2hlcmUgd2UgY29ycmVjdGx5CiAgICAgICAgcm91bmQgdXAgdGhlIG1ldHJpY3MgZm9yIHRoZSBob3N0ZWQgY29udGVudCwgZW5zdXJlIHdlIGludGVycnVwdCBhIGRpc21pc3MKICAgICAgICBhbmltYXRpb24gd2hlbiBwcmVzZW50aW5nIHRoZSBwb3BvdmVyIGFnYWluLCBhbmQgY2hhbmdlIHRoZSBzaXppbmcgYmVoYXZpb3IKICAgICAgICB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgdmFyaW91cyBwYWRkaW5nIG1ldHJpY3MgYXBwbGllZCBhcyBhIHJlc3VsdCBvZgogICAgICAgIHBpY2tpbmcgYSBnaXZlbiBlZGdlLgoKMjAxMy0wMy0xMyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIERvbid0IHdhaXQgdW50aWwgRE9NQ29udGVudExvYWRlZCB0byBkbyBub24tVUkgaW5pdGlhbGl6YXRpb24gd2hlbiBsb2FkaW5nIHRoZSBXZWIgSW5zcGVjdG9yLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTM0MTIyMTk+IFJFR1JFU1NJT046IE9wZW5pbmcgdGhlIFdlYiBJbnNwZWN0b3IgdGFrZXMgNXMKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29kZU1pcnJvckFkZGl0aW9ucy5qczoKICAgICAgICBNb3ZlZCBleHRyYSBNSU1FLXR5cGUgcmVnaXN0cmF0aW9uIGhlcmUuCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CiAgICAgICAgQWRkZWQgYSBpbmxpbmUgc2NyaXB0IHRvIGNhbGwgV2ViSW5zcGVjdG9yLmxvYWRlZCgpLiBUaGlzIG5lZWRzIHRvIGJlIG91dHNpZGUgb2YgTWFpbi5qcyBzbyBpdAogICAgICAgIGNvbWVzIGFmdGVyIHRoZSBzY3JpcHRzIGFkZGVkIHZpYSBkb2N1bWVudC53cml0ZSB3aGVuIE1haW4uanMgaXMgYSBjb21iaW5lZCBmaWxlLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmxvYWRlZCk6IEFkZGVkLiBNb3ZlZCBjb2RlIGZyb20gY29udGVudExvYWRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOiBNb3ZlZCBjb2RlIHRvIGxvYWRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLl93aW5kb3dSZXNpemVkKTogQ2FsbCBfY29udGVudEJyb3dzZXJTaXplRGlkQ2hhbmdlIHRvIGF2b2lkIHJlZ2lzdGVyaW5nIGZvciByZXNpemUgdHdpY2UuCgoyMDEzLTAzLTEzICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIHNlbGVjdGVkIGltYWdlcyBmb3IgVXNlcklucHV0UmVzdWx0LnBkZiBhbmQgVXNlcklucHV0UHJvbXB0UHJldmlvdXMucGRmLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvVXNlcklucHV0UHJvbXB0UHJldmlvdXNTZWxlY3RlZC5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvVXNlcklucHV0UmVzdWx0U2VsZWN0ZWQucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nQ29udGVudFZpZXcuY3NzOgogICAgICAgICguY29uc29sZS1tZXNzYWdlczpmb2N1cyAuY29uc29sZS1pdGVtLnNlbGVjdGVkIC5jb25zb2xlLXVzZXItY29tbWFuZC1yZXN1bHQuY29uc29sZS1sb2ctbGV2ZWw6OmJlZm9yZSk6CiAgICAgICAgKC5jb25zb2xlLW1lc3NhZ2VzOmZvY3VzIC5jb25zb2xlLWl0ZW0uc2VsZWN0ZWQgLmNvbnNvbGUtdXNlci1jb21tYW5kOjpiZWZvcmUpOgoKMjAxMy0wMy0xMyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgY29weSB3b3JrIGluIHRoZSBzcGxpdCBjb25zb2xlLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM0MTE0Mjg+IENvcHkgZG9lcyBub3Qgd29yayBpZiB0aGUgY29uc29sZSBpcyBpbiBzcGxpdCB2aWV3CgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5fZm9jdXNlZENvbnRlbnRWaWV3KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5fYmVmb3JlY29weSk6IFN0cnVjdHVyZSBtb3JlIGxpa2UgX2NvcHkuIFVzZSBfZm9jdXNlZENvbnRlbnRWaWV3LgogICAgICAgIChXZWJJbnNwZWN0b3IuX2NvcHkpOiBVc2UgX2ZvY3VzZWRDb250ZW50Vmlldy4KCjIwMTMtMDMtMTMgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBSZW1vdmUgb2xkIGZvY3VzIHRyYWNraW5nIGNvZGUgaW4gRWRpdGluZ1N1cHBvcnQuanMgYW5kIHN0YXJ0IHRyYWNraW5nIGN1cnJlbnRGb2N1c0VsZW1lbnQKICAgICAgICBhbmQgcHJldmlvdXNGb2N1c0VsZW1lbnQgaW4gTWFpbi5qcydzIF9mb2N1c0NoYW5nZWQgaGFuZGxlci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRWRpdGluZ1N1cHBvcnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5zdGFydEVkaXRpbmcuY2xlYW5VcEFmdGVyRWRpdGluZyk6IFVzZSByZXN0b3JlRm9jdXNGcm9tRWxlbWVudCgpLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSmF2YVNjcmlwdFRleHRQcm9tcHQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0VGV4dFByb21wdC5wcm90b3R5cGUuZm9jdXMpOiBVc2UgZm9jdXMoKS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5yZXN0b3JlRm9jdXNGcm9tRWxlbWVudCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuX2ZvY3VzQ2hhbmdlZCk6IFNldCBjdXJyZW50Rm9jdXNFbGVtZW50IGFuZCBwcmV2aW91c0ZvY3VzRWxlbWVudC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRQcm9tcHQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS5fc3RhcnRFZGl0aW5nKTogVXNlIGZvY3VzKCkuCgoyMDEzLTAzLTEzICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IHNvbWUgdGhpbmdzIHdpdGggdGhlIG5ldyBjb25zb2xlIHNlbGVjdGlvbiBiZWhhdmlvci4KCiAgICAgICAgKiBNYWtlcyBzdXJlIGFsbCBkaXNjbG9zdXJlIHRyaWFuZ2xlcyBhbmQgdGV4dCBhcmUgd2hpdGUgd2hlbiB0aGUgcm93IHNlbGVjdGlvbiBpcyBibHVlLgogICAgICAgICogTWFrZXMgc3VyZSBhbGwgZGlzY2xvc3VyZSB0cmlhbmdsZXMgYW5kIHRleHQgYXJlIG5vcm1hbCB3aGVuIHRoZSByb3cgc2VsZWN0aW9uIGlzIGdyYXkuCiAgICAgICAgKiBGaXhlcyBhIGJ1ZyB3aGVyZSBjbGljayB3b3VsZCBjYXVzZSB0aGUgcm93IHRvIGp1bXAgYmV0d2VlbiB0b3AgYW5kIGJvdHRvbSByZXZlYWwgaW5zdGVhZCBvZgogICAgICAgICAgdG9nZ2xpbmcgYSBjbGlja2VkIGRpc2Nsb3N1cmUgdHJpYW5nbGUuCiAgICAgICAgKiBPbmx5IGV4cGFuZCByZWN1cnNpdmVseSBpZiB0aGUgT3B0aW9uIGtleSBpcyBwcmVzc2VkLiBUaGlzIG1hdGNoZXMgdGhlIFRyZWVPdXRsaW5lIGNvZGUuCiAgICAgICAgKiBDb2xsYXBzZSByZWN1cnNpdmVseSBpZiB0aGUgb3B0aW9uIGtleSBpcyBwcmVzc2VkLgogICAgICAgICogQmV0dGVyIGFsaWducyB0aGUgZGlzY2xvc3VyZSB0cmlhbmdsZXMgd2l0aCBET00gdHJlZSBub2Rlcy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ0NvbnRlbnRWaWV3LmNzczoKICAgICAgICAoLmNvbnNvbGUtbWVzc2FnZXMpOgogICAgICAgICguY29uc29sZS1pdGVtLnNlbGVjdGVkKToKICAgICAgICAoLmNvbnNvbGUtbWVzc2FnZXM6Zm9jdXMgLmNvbnNvbGUtaXRlbS5zZWxlY3RlZCAqKToKICAgICAgICAoLmNvbnNvbGUtZ3JvdXAtdGl0bGU6OmJlZm9yZSk6CiAgICAgICAgKC5jb25zb2xlLW1lc3NhZ2VzOmZvY3VzIC5jb25zb2xlLWl0ZW0uc2VsZWN0ZWQgLmNvbnNvbGUtZ3JvdXAtdGl0bGU6OmJlZm9yZSk6CiAgICAgICAgKC5jb25zb2xlLW1lc3NhZ2VzOmZvY3VzIC5jb25zb2xlLWdyb3VwLmNvbGxhcHNlZCAuY29uc29sZS1pdGVtLnNlbGVjdGVkIC5jb25zb2xlLWdyb3VwLXRpdGxlOjpiZWZvcmUpOgogICAgICAgICguY29uc29sZS1tZXNzYWdlczpmb2N1cyAuY29uc29sZS1pdGVtLnNlbGVjdGVkIC5zZWN0aW9uIC5oZWFkZXIgLnRpdGxlKToKICAgICAgICAoLmNvbnNvbGUtbWVzc2FnZS11cmwpOgogICAgICAgICguY29uc29sZS1tZXNzYWdlczpmb2N1cyAuY29uc29sZS1pdGVtLnNlbGVjdGVkIC5zZWN0aW9uIC5oZWFkZXI6OmJlZm9yZSk6CiAgICAgICAgKC5jb25zb2xlLW1lc3NhZ2VzOmZvY3VzIC5jb25zb2xlLWl0ZW0uc2VsZWN0ZWQgLnNlY3Rpb24uZXhwYW5kZWQgLmhlYWRlcjo6YmVmb3JlKToKICAgICAgICAoLmNvbnNvbGUtbWVzc2FnZXM6Zm9jdXMgLmNvbnNvbGUtaXRlbS5zZWxlY3RlZCAucHJvcGVydGllcy10cmVlIGxpLnBhcmVudDo6YmVmb3JlKToKICAgICAgICAoLmNvbnNvbGUtbWVzc2FnZXM6Zm9jdXMgLmNvbnNvbGUtaXRlbS5zZWxlY3RlZCAucHJvcGVydGllcy10cmVlIGxpLnBhcmVudC5leHBhbmRlZDo6YmVmb3JlKToKICAgICAgICAoLm91dGxpbmUtZGlzY2xvc3VyZSBsaS5wYXJlbnQ6OmJlZm9yZSk6CiAgICAgICAgKC5jb25zb2xlLW1lc3NhZ2VzOmZvY3VzIC5jb25zb2xlLWl0ZW0uc2VsZWN0ZWQgLm91dGxpbmUtZGlzY2xvc3VyZSBsaS5wYXJlbnQ6OmJlZm9yZSk6CiAgICAgICAgKC5jb25zb2xlLW1lc3NhZ2VzOmZvY3VzIC5jb25zb2xlLWl0ZW0uc2VsZWN0ZWQgLm91dGxpbmUtZGlzY2xvc3VyZSBsaS5wYXJlbnQuZXhwYW5kZWQ6OmJlZm9yZSk6CgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fbW91c2Vkb3duKToKICAgICAgICBVc2UgZm9jdXMoKSBpbnN0ZWFkIG9mIHNldEN1cnJlbnRGb2N1c0VsZW1lbnQuIFRoZSBzZXRDdXJyZW50Rm9jdXNFbGVtZW50IGZ1bmN0aW9uIGlzIGxlZ2FjeSBhbmQKICAgICAgICBzaG91bGQgYmUgcmVtb3ZlZCBzb21lZGF5LgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fdXBkYXRlTWVzc2FnZXNTZWxlY3Rpb24pOgogICAgICAgIERvbid0IGNhbGwgX2Vuc3VyZU1lc3NhZ2VJc1Zpc2libGUgaWYgdGhlIG1lc3NhZ2Ugd2FzIGFscmVhZHkgc2VsZWN0ZWQgZnJvbSB0aGUgc3RhcnQuCgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9yaWdodEFycm93V2FzUHJlc3NlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX2xlZnRBcnJvd1dhc1ByZXNzZWQpOgogICAgICAgIE9ubHkgZXhwYW5kIG9yIGNvbGxhcHNlIHJlY3Vyc2l2ZWx5IGlmIHRoZSBPcHRpb24ga2V5IGlzIHByZXNzZWQuCgoyMDEzLTAzLTEzICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgVHdlYWsgdGhlIE5ldyBSdWxlIGJlaGF2aW9yIGluIHRoZSBTdHlsZSBkZXRhaWxzIHNpZGViYXIuCgogICAgICAgIE1ha2VzIHN1cmUgdG8gc2Nyb2xsIHRvIHJldmVhbCB0aGUgc2VjdGlvbiB3aGVuIGl0IGlzIGZvY3VzZWQuIEFsc28gdXNlIGFwcHJvcHJpYXRlU2VsZWN0b3JGb3IKICAgICAgICBpbnN0ZWFkIG9mIGRpc3BsYXlOYW1lRm9yTm9kZSB0byBnZW5lcmF0ZSBiZXR0ZXIgc2VsZWN0b3JzLgoKICAgICAgICBSZXZpZXdlZCBieSBBbnRvaW5lIFF1aW50LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NTm9kZVN0eWxlcy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLmFkZFJ1bGUpOiBVc2UgYXBwcm9wcmlhdGVTZWxlY3RvckZvci4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUnVsZXNTdHlsZURldGFpbHNQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJ1bGVzU3R5bGVEZXRhaWxzUGFuZWwucHJvdG90eXBlLnJlZnJlc2guc2Nyb2xsVG9Gb2N1c2VkU2VjdGlvbik6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuUnVsZXNTdHlsZURldGFpbHNQYW5lbC5wcm90b3R5cGUucmVmcmVzaCk6IENhbGwgc2Nyb2xsVG9Gb2N1c2VkU2VjdGlvbiBvbiBhIHRpbWVvdXQuCgoyMDEzLTAzLTEzICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CgogICAgICAgIE1ha2UgdGhlICJNZW1vcnkiIG91dGxldCBhdCB0aGUgYm90dG9tIG9mIHRoZSBsYXllciB0cmVlCiAgICAgICAgc2lkZWJhciBwYW5lbCBhbGlnbiB0byB0aGUgcmlnaHQgYXMgZXhwZWN0ZWQuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xheWVyVHJlZVNpZGViYXJQYW5lbC5jc3M6CiAgICAgICAgKC5sYXllci10cmVlLnBhbmVsIC5sYXllcnMtbWVtb3J5LWxhYmVsKToKCjIwMTMtMDMtMTMgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNDEwMjAzPiBDb3JyZWN0bHkgaWRlbnRpZnkgbGF5ZXJzIGZvciBnZW5lcmF0ZWQgYW5kIHJlZmxlY3RlZCBjb250ZW50CgogICAgICAgIFdlIG5vdyBjb3JyZWN0bHkgaWRlbnRpZnkgbGF5ZXJzIGFzIHJlZmxlY3RlZCBjb250ZW50IGFuZC9vciBnZW5lcmF0ZWQKICAgICAgICBjb250ZW50IHdpdGggYSBtb3JlIGFwcHJvcHJpYXRlIG5hbWUgaW4gdGhlICJjaGlsZCBsYXllcnMiIGRhdGEgZ3JpZC4KICAgICAgICBBZGRpdGlvbmFsbHksIHdlIGhpZ2hsaWdodCB0aGUgYm91bmRzIG9mIHRoZSBsYXllciBvbiB0aGUgcGFnZSB0bwogICAgICAgIGNsZWFybHkgaWRlbnRpZnkgd2hhdCB0aGlzIHJlZmxlY3Rpb24gb3IgZ2VuZXJhdGVkIGNvbnRlbnQgaXMgb24gdGhlCiAgICAgICAgY2FudmFzLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgogICAgICAgIE5ldyBsb2NhbGl6ZWQgc3RyaW5nIHVzZWQgdG8gaWRlbnRpZnkgcmVmbGVjdGlvbnMgbGF5ZXJzLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUuaGlnaGxpZ2h0UmVjdCk6CiAgICAgICAgTmV3IG1ldGhvZCB3cmFwcGluZyBET01BZ2VudC5oaWdobGlnaHRSZWN0KCkuCgogICAgICAgICogVXNlckludGVyZmFjZS9MYXllclRyZWVEYXRhR3JpZE5vZGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVEYXRhR3JpZE5vZGUucHJvdG90eXBlLnNldCBsYXllcik6CiAgICAgICAgRnVydGhlciBxdWFsaWZ5IHRoZSBsYXllciBieSBhZGRpbmcgZWl0aGVyIHRoZSA6OmJlZm9yZSBvciA6OmFmdGVyCiAgICAgICAgcHNldWRvLWNsYXNzIGZvciBsYXllcnMgdGhhdCBhcmUgYXNzb2NpYXRlZCB0byBnZW5lcmF0ZWQgY29udGVudCBhcwogICAgICAgIHdlbGwgYXMgYSBsb2NhbGl6ZWQgIlJlZmxlY3Rpb24gZm9yIiBwcmVmaXggZm9yIHJlZmxlY3RlZCBsYXllcnMuCgogICAgICAgICogVXNlckludGVyZmFjZS9MYXllclRyZWVTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9oaWdobGlnaHRTZWxlY3RlZE5vZGUpOgogICAgICAgIENoZWNrIHdoYXQgdHlwZSBvZiBsYXllciBpcyBub3cgc2VsZWN0ZWQgYW5kIGNhbGwgdGhlIG5ldwogICAgICAgIERPTVRyZWVNYW5hZ2VyLmhpZ2hsaWdodFJlY3QoKSBtZXRob2QgaW4gY2FzZSB3ZSdyZSBkZWFsaW5nIHdpdGggYQogICAgICAgIHJlZmxlY3Rpb24gb3IgZ2VuZXJhdGVkIGxheWVyLgoKMjAxMy0wMy0xMyAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMyMDk0ODU+IExheWVyIFRyZWUgc2lkZWJhciBzaG91bGQgcmVzcGVjdCAic2hvdy1zaGFkb3ctZG9tIiBzZXR0aW5nCgogICAgICAgIFRoZSBsYXllciB0cmVlIHNpZGViYXIgcGFuZWwgZGF0YSBncmlkIG5vdyByZXNwZWN0cyB0aGUKICAgICAgICAic2hvdy1zaGFkb3ctZG9tIiBzZXR0aW5nLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9MYXllclRyZWVTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVTaWRlYmFyUGFuZWwpOgogICAgICAgIFRyYWNrIGNoYW5nZXMgZm9yIHRoZSAic2hvdy1zaGFkb3ctZG9tIiBzZXR0aW5nLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZVNpZGViYXJQYW5lbC5wcm90b3R5cGUucmVmcmVzaCk6CiAgICAgICAgS2VlcCB0cmFjayBvZiB0aGUgdW5maWx0ZXJlZCBzZXQgb2YgY2hpbGQgbGF5ZXJzIHJldHVybmVkIHdoZW4gY2FsbGluZwogICAgICAgIGludG8gdGhlIExheWVyVHJlZUFnZW50IHN1Y2ggdGhhdCB3ZSBjYW4gcmV1c2UgdGhpcyB1bmZpbHRlcmVkIGxpc3QKICAgICAgICBvZiBjaGlsZCBsYXllcnMgbGF5ZXIgYXMgdGhlICJzaG93LXNoYWRvdy1kb20iIHNldHRpbmcgY2hhbmdlcy4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9zaG93U2hhZG93RE9NU2V0dGluZ0NoYW5nZWQpOgogICAgICAgIFVwZGF0ZSB0aGUgZGlzcGxheSBzdWNoIHRoYXQgdGhlIG5ldyBzZXR0aW5nIGlzIHRha2VuIGludG8gYWNjb3VudC4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLl91cGRhdGVEaXNwbGF5V2l0aExheWVycyk6CiAgICAgICAgRmlsdGVyIHRoZSBsaXN0IG9mIGNoaWxkIGxheWVycyB0byB0YWtlIGludG8gYWNjb3VudCB0aGUKICAgICAgICAic2hvdy1zaGFkb3ctZG9tIiBzZXR0aW5nLiBXZSBhbHNvIGtlZXAgdHJhY2sgb2YgdGhlIGxheWVyIGZvcgogICAgICAgIHRoZSBjdXJyZW50IG5vZGUgaW4gdGhlIG5ldyAiX2xheWVyRm9yTm9kZSIgcHJvcGVydHkgc3VjaCB0aGF0CiAgICAgICAgaXQgbWF5IGJlIHVzZWQgdG8gY2FsbCBpbnRvIHRoaXMgbWV0aG9kIGFnYWluIHdoZW4gd2UgbmVlZCB0bwogICAgICAgIHVwZGF0ZSB0aGUgc2hhZG93IERPTSBmaWx0ZXIgd2l0aG91dCBxdWVyeWluZyB0aGUgYmFja2VuZCBhZ2Fpbi4KCjIwMTMtMDMtMTMgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNDA5NTQzPiBBZG9wdCBuZXcgTGF5ZXJUcmVlQWdlbnQgcHJvdG9jb2wKCiAgICAgICAgV2UgcmVtb3ZlIGFsbCBjb2RlIHJlbGF0ZWQgdG8gdGhlIHByZXZpb3VzIExheWVyVHJlZUFnZW50IHByb3RvY29sIHdoZXJlCiAgICAgICAgd2UnZCB1c2UgdGhlIExheWVyVHJlZS5nZXRMYXllclRyZWUoKSBhbmQgTGF5ZXJUcmVlLm5vZGVJZEZvckxheWVySWQoKQogICAgICAgIG1ldGhvZHMgd2hpY2ggaGF2ZSBub3cgYmVlbiByZXBsYWNlZCBieSBhIHNpbmdsZSBtZXRob2QgdG8gcHJvdmlkZSB0aGUKICAgICAgICBsYXllcnMgaW4gdGhlIHNjb3BlIG9mIGEgZ2l2ZW4gRE9NIHN1YnRyZWUgd2l0aCBMYXllclRyZWUubGF5ZXJzRm9yTm9kZSgpLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgogICAgICAgIFJlbW92ZSB0aGUgc3RyaW5ncyByZWxhdGVkIHRvIGNvbXBvc2l0ZWQgbGF5ZXJzIHNpbmNlIHRoZSBwcm90b2NvbCBub3cKICAgICAgICBvbmx5IHByb3ZpZGVzIGNvbXBvc2l0ZWQgbGF5ZXJzLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzOgogICAgICAgIFJlbW92ZSB0aGUgb2xkIExheWVyVHJlZS5nZXRMYXllclRyZWUoKSBhbmQgTGF5ZXJUcmVlLm5vZGVJZEZvckxheWVySWQoKQogICAgICAgIHByb3RvY29sIG1ldGhvZHMgYW5kIGFkZCB0aGUgbmV3IExheWVyVHJlZS5sYXllcnNGb3JOb2RlKCkgbWV0aG9kLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTGF5ZXJUcmVlRGF0YUdyaWROb2RlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlRGF0YUdyaWROb2RlLnByb3RvdHlwZS5nZXQgbGF5ZXIpOgogICAgICAgIE5ldyBwdWJsaWMgYWNjZXNzb3IgZm9yIHRoZSAiX2xheWVyIiBwcm9wZXJ0eSBzdWNoIHRoYXQgdGhlCiAgICAgICAgTGF5ZXJUcmVlU2lkZWJhclBhbmVsIG1heSBhY2Nlc3MgcHJvcGVydGllcyBvZiB0aGUgc2VsZWN0ZWQgZGF0YSBncmlkCiAgICAgICAgbm9kZSdzIGxheWVyLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZURhdGFHcmlkTm9kZS5wcm90b3R5cGUuc2V0IGxheWVyKToKICAgICAgICBSZW1vdmUgdGhlIGNoZWNrIGZvciBhIHZhbGlkIG5vZGUgc2luY2UgdGhlIHByb3RvY29sIGVuc3VyZXMgdGhhdCBsYXllcnMKICAgICAgICBub3cgaGF2ZSBhIHZhbGlkIG5vZGVJZCBwdXNoZWQgdG8gdGhlIGZyb250LWVuZC4gV2UncmUgYWxzbyByZW1vdmluZyB0aGUKICAgICAgICByZWR1bmRhbnQgImxheWVyRGF0YSIgcHJvcGVydHkgYnkganVzdCBsZXR0aW5nIHRoZSBsYXllciBiZSBhY2Nlc3NpYmxlCiAgICAgICAgdmlhIGEgcHVibGljIGFjY2Vzc29yLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZURhdGFHcmlkTm9kZS5wcm90b3R5cGUuX2dvVG9BcnJvd1dhc0NsaWNrZWQpOgogICAgICAgIFVzZSB0aGUgIl9sYXllciIgcHJvcGVydHkgdG8gZmluZCBvdXQgdGhlIG5vZGVJZCByYXRoZXIgdGhhbiB0aGUgcmVtb3ZlZAogICAgICAgICJsYXllckRhdGEiIHByb3BlcnR5LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTGF5ZXJUcmVlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZU1hbmFnZXIpOgogICAgICAgIFJlbW92ZSB0aGUgaGFyZC1jb2RlZCBkaXNhYmxpbmcgb2YgdGhlIExheWVyVHJlZSBmZWF0dXJlcyBpbiB0aGUgZnJvbnQtZW5kCiAgICAgICAgYW5kIGluc3RlYWQgdXNlIGEgcmVhbCBydW4tdGltZSBjaGVjayBmb3IgYXZhaWxhYmlsaXR5IG9mIHRoZSBMYXllclRyZWVBZ2VudC4KICAgICAgICBXZSBhbHNvIHJlbW92ZSBzb21lIGl2YXJzIHdlIG5vIGxvbmdlciB1c2UuCgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlTWFuYWdlci5wcm90b3R5cGUubGF5ZXJUcmVlTXV0YXRpb25zKToKICAgICAgICBDb21wbGV0ZSByZXdyaXRlIG9mIHRoZSBtZXRob2QgdG8gYWNjb3VudCBmb3IgdGhlIHJpY2hlciBzZXQgb2YKICAgICAgICBpbmZvcm1hdGlvbiBleHBvc2VkIGJ5IHRoZSBuZXcgcHJvdG9jb2wuIFdlIG5vdyBoYXZlIHRvIHRha2UgaW50byBhY2NvdW50CiAgICAgICAgbXVjaCBtb3JlIHRoYW4ganVzdCBsYXllciBpZHMgdG8gaW5kZW50aWZ5IG11dGF0aW9ucywgbm9kZSBpZHMgc2hvdWxkIGFsc28KICAgICAgICBiZSB0YWtlbiBpbnRvIGFjY291bnQgdG8gY2hlY2sgaWYgYSBsYXllciBmb3IgdGhlIHNhbWUgbm9kZSBoYXMgYXBwZWFyZWQKICAgICAgICB3aXRoIGEgbmV3IGxheWVyIGlkIChhcyBpdCBtYXkgaGF2ZSBiZWVuIGRlc3Ryb3llZCBhbmQgcmVjcmVhdGVkIGZvciBhCiAgICAgICAgY29udGVudCB1cGRhdGUpLiBXZSBhbHNvIG5lZWQgdG8gdGFrZSBpbnRvIGFjY291bnQgZ2VuZXJhdGVkIGNvbnRlbnQgYW5kCiAgICAgICAgcmVmbGVjdGlvbnMsIHdoaWNoIG1heSBoYXZlIHBzZXVkbyBlbGVtZW50IGlkcy4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVNYW5hZ2VyLnByb3RvdHlwZS5sYXllcnNGb3JOb2RlKToKICAgICAgICBOZXcgd3JhcHBlciBmb3IgdGhlIG5ldyBMYXllclRyZWVBZ2VudC5sYXllcnNGb3JOb2RlKCkgcHJvdG9jb2wgbWV0aG9kLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZU1hbmFnZXIucHJvdG90eXBlLmxheWVyVHJlZURpZENoYW5nZSk6CiAgICAgICAgV2Ugbm8gbG9uZ2VyIG9idGFpbiB0aGUgbGF5ZXIgdHJlZSB1cG9uIGEgY2hhbmdlLCB3ZSBtZXJlbHkgZGlzcGF0Y2gKICAgICAgICBhbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgdGhlIGxheWVyIHRyZWUgaGFzIGNoYW5nZWQuCgogICAgICAgICogVXNlckludGVyZmFjZS9MYXllclRyZWVTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVTaWRlYmFyUGFuZWwpOgogICAgICAgIFJlbW92ZSB0aGUgc2V0dGluZyB0byBvbmx5IHNob3cgY29tcG9zaXRlZCBsYXllcnMgc2luY2UgdGhlIHByb3RvY29sIG5vdwogICAgICAgIG9ubHkgcmV0dXJucyBjb21wb3NpdGVkIGxheWVycy4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLnJlZnJlc2gpOgogICAgICAgIFJldHJpZXZlIGxheWVycyBmcm9tIHRoZSBhZ2VudCBhbmQgdXBkYXRlIG91ciBkaXNwbGF5IHdpdGggdGhlIHJlc3VsdC4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9sYXllclRyZWVEaWRDaGFuZ2UpOgogICAgICAgIE1hcmsgdGhhdCB3ZSBuZWVkIGEgcmVmcmVzaCBmb2xsb3dpbmcgYSBjaGFuZ2UgaW4gdGhlIGxheWVyIHRyZWUuCgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fYnVpbGRMYXllckluZm9TZWN0aW9uKToKICAgICAgICBObyBsb25nZXIgc2hvdyB0aGUgIkNvbXBvc2l0ZWQiIHJvdyBzaW5jZSBhbGwgbGF5ZXJzIGFyZSBub3cgY29tcG9zaXRlZC4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9idWlsZERhdGFHcmlkU2VjdGlvbik6CiAgICAgICAgTm8gbG9uZ2VyIGJ1aWxkIHRoZSAib25seSBzaG93IGNvbXBvc2l0ZWQgbGF5ZXJzIiBjaGVja2JveC4gICAgICAgIAoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3NvcnREYXRhR3JpZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9oaWdobGlnaHRTZWxlY3RlZE5vZGUpOgogICAgICAgIFVzZSB0aGUgbm93LXB1YmxpYyAibGF5ZXIiIHByb3BlcnR5IG9uIHRoZSBMYXllclRyZWVEYXRhR3JpZE5vZGUgdG8KICAgICAgICBsb29rIHVwIGxheWVyIGluZm9ybWF0aW9uIGZvciBzb3J0aW5nLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3VwZGF0ZURpc3BsYXlXaXRoTGF5ZXJzKToKICAgICAgICBLZWVwIHRyYWNrIG9mIHRoZSBuZXcgY2hpbGQgbGF5ZXJzIGluIGEgIl9jaGlsZExheWVycyIgcHJvcGVydHkuCgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdXBkYXRlTGF5ZXJJbmZvU2VjdGlvbik6CiAgICAgICAgUmVtb3ZlIHRoZSBjaGVja3MgZm9yIGNvbXBvc2l0ZWQgc2luY2UgYWxsIGxheWVycyBhcmUgbm93IGNvbXBvc2l0ZWQuCgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdXBkYXRlRGF0YUdyaWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdXBkYXRlTWV0cmljcyk6CiAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgcHJvcGVydGllcyBvbiBsYXllciBvYmplY3RzIHBlciB0aGUgY2hhbmdlIGluIHByb3RvY29sLgoKMjAxMy0wMy0xMyAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI4ODYyNzU+IFNlbGVjdGluZyBlcnJvcnMgaW4gdGhlIGNvbnNvbGUgZG9lc24ndCBzZWxlY3QgdGhlIGVycm9yIGFuZCB0aGUgZmlsZW5hbWUKCiAgICAgICAgSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwcm92aWRlIGN1c3RvbSBjb250ZW50IHRvIHRoZSBjbGlwYm9hcmQgZm9yIGNvbnNvbGUgbWVzc2FnZXMsCiAgICAgICAgd2UgbXVzdCBhbHNvIGFsbG93IHNlbGVjdGlvbiBvZiBjb25zb2xlIG1lc3NhZ2VzIGluIGEgZGlmZmVyZW50IHdheSB0aGFuIHZpYSB0ZXh0CiAgICAgICAgc2VsZWN0aW9uLiBJbiB0aGlzIHBhdGNoLCB3ZSBtYWtlIHRoZSBsaXN0IG9mIG1lc3NhZ2VzIHNlbGVjdGFibGUsIHN1cHBvcnRpbmcgdGhlCiAgICAgICAgc2VsZWN0aW9uIHR5cGVzIG9uZSB3b3VsZCBleHBlY3QgZnJvbSBhIGRlc2t0b3AgYXBwbGljYXRpb24uIEkgZ28gaW50byB0aGUgZGV0YWlscwogICAgICAgIG9mIHdoYXQgZmVhdHVyZXMgZXhhY3RseSBhcmUgaW1wbGVtZW50ZWQgaW4gdGhlIHBlci1tZXRob2QgZGlzY3Vzc2lvbiBiZWxvdy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29uc29sZUNvbW1hbmQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZC5wcm90b3R5cGUudG9DbGlwYm9hcmRTdHJpbmcpOgogICAgICAgIEFkb3B0IHRoZSBwcm90b2NvbCB0byBwcm92aWRlIGEgY3VzdG9tIGNsaXBib2FyZCBzdHJpbmcgaW4gdGhlIGZvcm0gb2YKICAgICAgICAiPiB0aGVKU0NvbW1hbmQoKTsiLgogICAgICAgIAogICAgICAgICogVXNlckludGVyZmFjZS9Db25zb2xlQ29tbWFuZFJlc3VsdC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0LnByb3RvdHlwZS50b0NsaXBib2FyZFN0cmluZyk6CiAgICAgICAgQWRvcHQgdGhlIHByb3RvY29sIHRvIHByb3ZpZGUgYSBjdXN0b20gY2xpcGJvYXJkIHN0cmluZyBpbiB0aGUgZm9ybSBvZgogICAgICAgICI8IHRoZUNvbW1hbmRSZXN1bHQiLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29uc29sZUdyb3VwLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZUdyb3VwLnByb3RvdHlwZS5hZGRNZXNzYWdlKToKICAgICAgICBXcmFwIGluZGl2aWR1YWwgbWVzc2FnZXMgaW4gYSBncm91cCB3aXRoaW4gYSB3cmFwcGVyIGVsZW1lbnQgd2l0aCBhICJjb25zb2xlLWl0ZW0iCiAgICAgICAgQ1NTIGNsYXNzLiBUaGVzZSBlbGVtZW50cyBhcmUgdXNlZCB0byBhcHBseSBhICJzZWxlY3RlZCIgb3IgImZpbHRlcmVkLW91dCIgY2xhc3MgYW5kCiAgICAgICAgdG8gZHJhdyB0aGUgZnVsbC13aWR0aCBib3JkZXJzIG9uIHRoZSBpdGVtcy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnNvbGVNZXNzYWdlSW1wbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUuX2Zvcm1hdE1lc3NhZ2UpOgogICAgICAgIFJlZmFjdG9yIHRvIHVzZSBuZXcgX3Nob3VsZER1bXBTdGFja1RyYWNlKCkgbWV0aG9kLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUuX3Nob3VsZER1bXBTdGFja1RyYWNlKToKICAgICAgICBOZXcgbWV0aG9kIHRvIHNoYXJlIGxvZ2ljIG9uY2UgdXNlZCBvbmx5IGluIF9mb3JtYXRNZXNzYWdlKCkgd2l0aAogICAgICAgIHRvQ2xpcGJvYXJkU3RyaW5nKCkgYXMgd2VsbC4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZUltcGwucHJvdG90eXBlLnRvU3RyaW5nKToKICAgICAgICBSZWZhY3RvciB0byB1c2UgbmV3ICJsZXZlbFN0cmluZyIgcHJvcGVydHkuCgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS5nZXQgbGV2ZWxTdHJpbmcpOgogICAgICAgIE5ldyBhY2Nlc3NvciB0byBzaGFyZSBsb2dpYyBvbmNlIHVzZWQgb25seSBpbiB0b1N0cmluZygpIHdpdGggdG9DbGlwYm9hcmRTdHJpbmcoKQogICAgICAgIGFzIHdlbGwuCgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS50b0NsaXBib2FyZFN0cmluZyk6CiAgICAgICAgQWRvcHQgdGhlIHByb3RvY29sIHRvIHByb3ZpZGUgYSBjdXN0b20gY2xpcGJvYXJkIHN0cmluZyB3aGVyZSB3ZSBsb2cgdGhlIGxldmVsLAogICAgICAgIG1lc3NhZ2UgdGV4dCwgdXJsLCBsaW5lIG51bWJlciBhbmQgb3B0aW9uYWxseSB0aGUgc3RhY2sgZnJhbWVzLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZS5hcHBlbmRDb25zb2xlTWVzc2FnZSk6CiAgICAgICAgUmV0dXJuIHRoZSBjbG9uZWQgbWVzc2FnZSBzbyB0aGF0IHdlIG1heSBtYW5pcHVsYXRlIGl0IGZyb20gY2FsbCBzaXRlcyAoaWUuIGluCiAgICAgICAgTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9tZXNzYWdlQWRkZWQoKSkuCgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZS5fYXBwZW5kQ29uc29sZU1lc3NhZ2UpOiBGaXggYQogICAgICAgIG1pc3Npbmcgc2VtaS1jb2xvbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ0NvbnRlbnRWaWV3LmNzczoKICAgICAgICAoLmNvbnNvbGUtbWVzc2FnZXMpOgogICAgICAgIFJlbW92ZSB1c2VsZXNzIHByb3BlcnRpZXMuCgogICAgICAgICguY29uc29sZS1pdGVtKToKICAgICAgICBCYXNpYyBzdHlsZSBmb3IgYWxsIGNvbnNvbGUgaXRlbSB3cmFwcGVycywgZHJhdyBhIDFweCBib3R0b20gYm9yZGVyLgoKICAgICAgICAoLmNvbnNvbGUtaXRlbS5zZWxlY3RlZCk6CiAgICAgICAgQmFja2dyb3VuZCBjb2xvciBmb3Igc2VsZWN0ZWQgaXRlbXMgd2hlbiB0aGUgY29udGFpbmVyIGRvZXNuJ3QgaGF2ZSBmb2N1cyAoZ3JheSkuCgogICAgICAgICguY29uc29sZS1tZXNzYWdlczpmb2N1cyAuY29uc29sZS1pdGVtLnNlbGVjdGVkKToKICAgICAgICBCYWNrZ3JvdW5kIGNvbG9yIGZvciBzZWxlY3RlZCBpdGVtcyB3aGVuIHRoZSBjb250YWluZXIgaGFzIGZvY3VzIChibHVlKS4KCiAgICAgICAgKC5jb25zb2xlLW1lc3NhZ2VzOmZvY3VzIC5jb25zb2xlLWl0ZW0uc2VsZWN0ZWQgKik6CiAgICAgICAgTWFrZSBhbGwgdGV4dCBpbiBzZWxlY3RlZCBpdGVtcyB3aGl0ZS4KCiAgICAgICAgKC5jb25zb2xlLWl0ZW0uc2VsZWN0ZWQgLmNvbnNvbGUtZ3JvdXAtdGl0bGU6OmJlZm9yZSk6CiAgICAgICAgVXNlIGEgd2hpdGUgdHJpYW5nbGUgZm9yIHNlbGVjdGVkIGl0ZW1zLgoKICAgICAgICAoLmNvbnNvbGUtZ3JvdXAuY29sbGFwc2VkIC5jb25zb2xlLWl0ZW0uc2VsZWN0ZWQgLmNvbnNvbGUtZ3JvdXAtdGl0bGU6OmJlZm9yZSk6CiAgICAgICAgVXNlIGEgd2hpdGUgdHJpYW5nbGUgZm9yIHNlbGVjdGVkIGl0ZW1zLgoKICAgICAgICAoLmNvbnNvbGUtaXRlbS5zZWxlY3RlZCAuY29uc29sZS1lcnJvci1sZXZlbCAuc2VjdGlvbiAuaGVhZGVyIC50aXRsZSk6CiAgICAgICAgRW5zdXJlIHRleHQgaXMgd2hpdGUgaW4gc2VsZWN0ZWQgaXRlbXMuCgogICAgICAgICguY29uc29sZS1pdGVtLnNlbGVjdGVkIC5jb25zb2xlLWRlYnVnLWxldmVsIC5jb25zb2xlLW1lc3NhZ2UtdGV4dCk6CiAgICAgICAgRW5zdXJlIHRleHQgaXMgd2hpdGUgaW4gc2VsZWN0ZWQgaXRlbXMuCgogICAgICAgICguYXV0by1jb21wbGV0ZS10ZXh0LCAuZWRpdGluZyAuYXV0by1jb21wbGV0ZS10ZXh0KToKICAgICAgICBSZW1vdmUgdXNlbGVzcyBwcm9wZXJ0eS4KCiAgICAgICAgKC5jb25zb2xlLWl0ZW0uc2VsZWN0ZWQgLm91dGxpbmUtZGlzY2xvc3VyZSBsaS5wYXJlbnQ6OmJlZm9yZSk6CiAgICAgICAgVXNlIGEgd2hpdGUgdHJpYW5nbGUgZm9yIHNlbGVjdGVkIGl0ZW1zLgoKICAgICAgICAoLmNvbnNvbGUtaXRlbS5zZWxlY3RlZCAub3V0bGluZS1kaXNjbG9zdXJlIGxpLnBhcmVudC5leHBhbmRlZDo6YmVmb3JlKToKICAgICAgICBVc2UgYSB3aGl0ZSB0cmlhbmdsZSBmb3Igc2VsZWN0ZWQgaXRlbXMuCgogICAgICAgICguY29uc29sZS1pdGVtLmZpbHRlcmVkLW91dCk6CiAgICAgICAgUmVtb3ZlIGFsbCBmaWx0ZXJlZC1vdXQgaXRlbXMgZnJvbSBsYXlvdXQuCgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3KToKICAgICAgICBOZXcgaXZhcnMgdG8gdHJhY2sgdGhlIGN1cnJlbnQgbmVzdGluZyBsZXZlbCBhbmQgdGhlIGxpc3Qgb2YgYWxsIHNlbGVjdGVkIG1lc3NhZ2UKICAgICAgICBlbGVtZW50cy4gV2UgYWxzbyBzdGFydCB0cmFja2luZyBhIHNlcmllcyBvZiBrZXlib2FyZCBhbmQgbW91c2UgZXZlbnRzIG9uIHRoZQogICAgICAgIG1lc3NhZ2VzIGNvbnRhaW5lciB0byBpbXBsZW1lbnQgbXVsdGlwbGUgc2VsZWN0aW9uIG9mIG1lc3NhZ2UgZWxlbWVudHMuCgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLnVwZGF0ZUxheW91dCk6CiAgICAgICAgT3ZlcnJpZGUgdGhpcyBDb250ZW50VmlldyBtZXRob2QgdG8gdHJhY2sgdGhlIGhlaWdodCBvZiB0aGUgbWVzc2FnZXMgY29udGFpbmVyCiAgICAgICAgaW4gb3JkZXIgdG8gdXBkYXRlIHRoZSBzY3JvbGwgcG9zaXRpb24gb2YgdGhlIGNvbnRhaW5lciBhcyB3ZSBlbnN1cmUgdGhlIHZpc2liaWxpdHkKICAgICAgICBvZiBzZWxlY3RlZCBpdGVtcy4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuZGlkQXBwZW5kQ29uc29sZU1lc3NhZ2UpOgogICAgICAgIE1hbnVhbGx5IG5lc3QgdGhlIG1lc3NhZ2VzIGhvc3RlZCBpbiB3cmFwcGVycyBhbmQga2VlcCB0cmFjayBvZiB0aGUgbmVzdGluZyBsZXZlbAogICAgICAgIGFzIGdyb3VwcyBhcmUgb3BlbmVkIGFuZCBjbG9zZWQuIFdlIGFsc28gY2xlYXIgYWxsIGZvY3VzYWJsZSBjaGlsZHJlbiB0aGVyZSBhcyBuZXcKICAgICAgICBjb250ZW50IG1heSBoYXZlIGJlZW4gYWRkZWQgd2l0aCBtYXJrdXAgdXNpbmcgdGhlICJ0YWJpbmRleCIgYXR0cmlidXRlcy4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuaGFuZGxlQ29weUV2ZW50KToKICAgICAgICBQcm92aWRlIGN1c3RvbSBjb250ZW50IHRvIHRoZSBjbGlwYm9hcmQgYmFzZWQgb24gdGhlIGNsaXBib2FyZCB0ZXh0IG9mIGVhY2ggbWVzc2FnZQogICAgICAgIGluIHRoZSBzZWxlY3RlZCBtZXNzYWdlcyBsaXN0IGluIERPTSBvcmRlci4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX21lc3NhZ2VBZGRlZCk6CiAgICAgICAgRW5zdXJlIG5ld2x5IGFkZGVkIG1lc3NhZ2VzIGFyZSBmaWx0ZXJlZCBvdXQgaW4gY2FzZSB0aGV5IGRvbid0IG1hdGNoIHRoZSBzZWxlY3RlZAogICAgICAgIGZpbHRlcnMgaW4gdGhlIHNjb3BlIGJhci4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX21vdXNlZG93bik6CiAgICAgICAgRXZlbnQgaGFuZGxlciBmb3IgdGhlICJtb3VzZWRvd24iIGV2ZW50IG9uIHRoZSBtZXNzYWdlcyBjb250YWluZXIuIFdlIGlnbm9yZSB1c2VyCiAgICAgICAgaW50ZXJhY3Rpb24gaWYgd2Ugd291bGQgb3RoZXJ3aXNlIHNob3cgYSBjb250ZXh0dWFsIG1lbnUsIGFuZCBlbnN1cmUgdGhlIG1lc3NhZ2VzCiAgICAgICAgY29udGFpbmVyIGhhcyBmb2N1cyBvdGhlcndpc2UuIEluIGNhc2Ugd2UncmUgZ2V0dGluZyBmb2N1cyBub3cgYW5kIHdlIGFscmVhZHkgaGFkCiAgICAgICAgc2VsZWN0ZWQgZWxlbWVudHMsIHdlIGdvIG5vIGZ1cnRoZXIuIE90aGVyd2lzZSwgd2UgZmlndXJlIG91dCB3aGljaCBtZXNzYWdlIHdhcwogICAgICAgIHVuZGVyIHRoZSBtb3VzZSBwb2ludGVyIGFuZCB0cmFjayB0aGF0IHdlIHNob3VsZCBwcmV2ZW50IGEgImNsaWNrIiBldmVudCBmcm9tIGJlaW5nCiAgICAgICAgZGlzcGF0Y2hlZCBpbiBjYXNlIHRoZSBtZXNzYWdlIHdhcyBub3QgeWV0IHNlbGVjdGVkLiBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBkb24ndAogICAgICAgIGNvbGxhcHNlL2V4cGFuZCBhbiBvdXRsaW5lIGFuZCBzZWxlY3QgYXQgdGhlIHNhbWUgdGltZS4gV2UgdGhlbiB1cGRhdGUgdGhlIG1lc3NhZ2UKICAgICAgICBzZWxlY3Rpb24gc3RhdGUgYW5kIHRyYWNrIGZ1cnRoZXIgbW91c2UgaW50ZXJhY3Rpb24uIElmIHdlIGRldGVjdCB3ZSBkaWRuJ3QgY2xpY2sgb24KICAgICAgICBhIG1lc3NhZ2UsIGllLiB0aGUgZW1wdHkgYXJlYSBvZiB0aGUgbWVzc2FnZXMgY29udGFpbmVyLCB3ZSBjbGVhciB0aGUgc2VsZWN0aW9uIGxpc3QuCgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9tb3VzZW1vdmUpOgogICAgICAgIEdldCB0aGUgbWVzc2FnZSBlbGVtZW50IHVuZGVyIHRoZSBtb3VzZSBwb2ludGVyLCBpZiBhbnksIGFuZCB1cGRhdGUgdGhlIG1lc3NhZ2VzCiAgICAgICAgc2VsZWN0aW9uIGxpc3Qgc28gdGhhdCB3ZSBzZWxlY3QgbWVzc2FnZXMgZnJvbSB0aGUgZmlyc3QgZWxlbWVudCB3ZSBtb3VzZWQgZG93bgogICAgICAgIG9uIHRvIHRoaXMgb25lLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fbW91c2V1cCk6CiAgICAgICAgU3RvcCB0cmFja2luZyBhbnkgZnVydGhlciAibW91c2Vtb3ZlIiBhbmQgIm1vdXNldXAiIGV2ZW50cyBhcyB0aGUgc2VsZWN0aW9uLWJ5LW1vdXNlCiAgICAgICAgaW50ZXJhY3Rpb24gZHJhd3MgdG8gYW4gZW5kLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fY2xpY2spOgogICAgICAgIFByZXZlbnQgdGhlIHByb3BhZ2F0aW9uIG9mICJjbGljayIgZXZlbnRzIGlmIHdlIGVzdGFibGlzaGVkIGluIHRoZSAibW91c2Vkb3duIiBldmVudAogICAgICAgIGhhbmRsZXIgdGhhdCB3ZSBzaG91bGQgaGF2ZS4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuaGFuZGxlRXZlbnQpOgogICAgICAgIFJvdXRlciBmb3IgbW91c2UgIm1vdXNlbW92ZSIgYW5kICJtb3VzZXVwIiBldmVudHMuCgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl91cGRhdGVNZXNzYWdlc1NlbGVjdGlvbik6CiAgICAgICAgTWV0aG9kIHRoYXQgdXBkYXRlcyB0aGUgc2VsZWN0ZWQgc3RhdGUgb2YgdGhlIHByb3ZpZGVkIG1lc3NhZ2UgYmFzZWQgb24gd2hldGhlcgogICAgICAgIHdlJ3JlIGFsbG93aW5nIG11bHRpcGxlIHNlbGVjdGlvbiAoQ21kK2NsaWNrKSBhbmQgcmFuZ2Ugc2VsZWN0aW9uCiAgICAgICAgKFNoaWZ0K2NsaWNrL2Fycm93LXVwL2Fycm93LWRvd24pLiAKCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX2Vuc3VyZU1lc3NhZ2VJc1Zpc2libGUpOgogICAgICAgIFNjcm9sbHMgdGhlIG1lc3NhZ2VzIGNvbnRhaW5lciBhcyBuZWNlc3NhcnkgdG8gcmV2ZWFsIHRoZSBwcm92aWRlZCBtZXNzYWdlLiBXZSBhdm9pZAogICAgICAgIGdldHRpbmcgbWV0cmljcyBmcm9tIENTUyBhcyBtdWNoIGFzIHBvc3NpYmxlIGJ5IHVzaW5nIHRoZSBwb3NpdGlvbmcgb2YgdGhlIG1lc3NhZ2UKICAgICAgICBkaXJlY3RseSBhZnRlciB0aGUgcHJvdmlkZWQgb25lIHNpbmNlIHdlIGNhbiBnZXQgdGhhdCBpbmZvcm1hdGlvbiB2aWEKICAgICAgICBfcG9zaXRpb25Gb3JNZXNzYWdlKCkgd2l0aG91dCB0cmlnZ2VyaW5nIGEgc3R5bGUgcmVjYWxjLiBJbiB0aGUgY2FzZSB3aGVyZSB3ZSB3YW50IHRvCiAgICAgICAgZW5zdXJlIHRoZSBsYXN0IG1lc3NhZ2UgaXMgdmlzaWJsZSwgd2UgaGF2ZSBubyBvdGhlciByZXNvcnQgYnV0IHRvIHF1ZXJ5IGl0cyBoZWlnaHQuCgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9wb3NpdGlvbkZvck1lc3NhZ2UpOgogICAgICAgIEdldCB0aGUgcG9zaXRpb24gb2YgdGhlIGdpdmVuIG1lc3NhZ2UgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIGVzdGFibGlzaGVkIGJ5IHRoZQogICAgICAgIG1lc3NhZ2VzIGNvbnRhaW5lci4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX2lzTWVzc2FnZVZpc2libGUpOgogICAgICAgIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwcm92aWRlZCBtZXNzYWdlIGlzIHZpc2libGUgKGllLiBub3QgZmlsdGVyZWQtb3V0IG9yIHdpdGhpbiBhCiAgICAgICAgY29sbGFwc2VkIGdyb3VwKS4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX2lzTWVzc2FnZVNlbGVjdGVkKToKICAgICAgICBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcHJvdmlkZWQgbWVzc2FnZSBpcyBzZWxlY3RlZC4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX3NlbGVjdEFsbE1lc3NhZ2VzKToKICAgICAgICBTZWxlY3RzIGFsbCB2aXNpYmxlIG1lc3NhZ2VzLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fYWxsTWVzc2FnZXMpOgogICAgICAgIEFsbCB0aGUgbWVzc2FnZXMgaW4gdGhlIG1lc3NhZ2VzIGNvbnRhaW5lciBhcyBhbiBBcnJheS4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX2FsbFZpc2libGVNZXNzYWdlcyk6CiAgICAgICAgQWxsIHZpc2libGUgbWVzc2FnZXMgaW4gdGhlIG1lc3NhZ2VzIGNvbnRhaW5lciBhcyBhbiBBcnJheS4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX3Njb3BlQmFyU2VsZWN0aW9uRGlkQ2hhbmdlKToKICAgICAgICBGaWx0ZXIgbWVzc2FnZXMgYXMgdGhlIHNlbGVjdGVkIGZpbHRlcnMgaW4gdGhlIHNjb3BlIGJhciBoYXZlIGNoYW5nZWQuCgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9maWx0ZXJNZXNzYWdlcyk6CiAgICAgICAgRmlsdGVyIHRoZSBtZXNzYWdlcyBiYXNlZCBvbiBzY29wZSBiYXIgZmlsdGVycyBzZWxlY3Rpb24uIFdlIGVuc3VyZSBjb21tYW5kcyBhbmQKICAgICAgICByZXN1bHRzIGFyZSBhbHdheXMgdmlzaWJsZSwgbm8gbWF0dGVyIHdoYXQgZmlsdGVycyBhcmUgc2VsZWN0ZWQuCgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9kaWRGb2N1cyk6CiAgICAgICAgVHJhY2sgdGhhdCB0aGUgbWVzc2FnZXMgY29udGFpbmVyIGlzIGZvY3VzZWQuCgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9kaWRCbHVyKToKICAgICAgICBUcmFjayB0aGF0IHRoZSBtZXNzYWdlcyBjb250YWluZXIgaXMgbm90IGZvY3VzZWQuCgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9rZXlEb3duKToKICAgICAgICBFdmVudCBoYW5kbGVyIGZvciB0aGUgImtleWRvd24iIGV2ZW50LCB1c2VkIHRvIHJvdXRlIHRvIHRoZSBtb3JlIHNwZWNpZmljIGhhbmRsZXJzLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fY29tbWFuZEFXYXNQcmVzc2VkKToKICAgICAgICBFdmVudCBoYW5kbGVyIGZvciBDbWQrQSBrZXkgY29tYmluYXRpb24sIHNlbGVjdHMgYWxsIHZpc2libGUgbWVzc2FnZXMuCgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9lc2NhcGVXYXNQcmVzc2VkKToKICAgICAgICBFdmVudCBoYW5kbGVyIGZvciB0aGUgRXNjLiBrZXkgYmVpbmcgcHJlc3NlZCwgY2xlYXJzIHRoZSBzZWxlY3Rpb24gaWYgdGhlcmUgYXJlCiAgICAgICAgYW55IHNlbGVjdGVkIG1lc3NhZ2VzLCBvdGhlcndpc2UgbW92aW5nIGZvY3VzIHRvIHRoZSBjb21tYW5kIHByb21wdC4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX3VwQXJyb3dXYXNQcmVzc2VkKToKICAgICAgICBFdmVudCBoYW5kbGVyIGZvciB0aGUgdXAgYXJyb3cga2V5IGJlaW5nIHByZXNzZWQsIHNlbGVjdHMgdGhlIG1lc3NhZ2UgYWJvdmUsIG9yIGFkZAogICAgICAgIGl0IHRvIHRoZSBzZWxlY3Rpb24gbGlzdCBpZiB0aGUgc2hpZnQga2V5IGlzIHNlbGVjdGVkLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fZG93bkFycm93V2FzUHJlc3NlZCk6CiAgICAgICAgRXZlbnQgaGFuZGxlciBmb3IgdGhlIGRvd24gYXJyb3cga2V5IGJlaW5nIHByZXNzZWQsIHNlbGVjdHMgdGhlIG1lc3NhZ2UgYmVsb3csIG9yIGFkZAogICAgICAgIGl0IHRvIHRoZSBzZWxlY3Rpb24gbGlzdCBpZiB0aGUgc2hpZnQga2V5IGlzIHNlbGVjdGVkLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fbGVmdEFycm93V2FzUHJlc3NlZCk6CiAgICAgICAgRXZlbnQgaGFuZGxlciBmb3IgdGhlIGxlZnQgYXJyb3cga2V5IHZlaW5nIHByZXNzZWQsIGNvbGxhcHNlcyB0aGUgY3VycmVudCBncm91cCBvcgogICAgICAgIG1lc3NhZ2Ugd2l0aCBzdGFjayB0cmFjZS4gT3RoZXJ3aXNlLCBkb2VzIG5vdGhpbmcuCgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9yaWdodEFycm93V2FzUHJlc3NlZCk6CiAgICAgICAgRXZlbnQgaGFuZGxlciBmb3IgdGhlIHJpZ2h0IGFycm93IGtleSB2ZWluZyBwcmVzc2VkLCBleHBhbmRzIHRoZSBjdXJyZW50IGdyb3VwIG9yCiAgICAgICAgbWVzc2FnZSB3aXRoIHN0YWNrIHRyYWNlLiBPdGhlcndpc2UsIGRvZXMgbm90aGluZy4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX3ByZXZpb3VzTWVzc2FnZSk6CiAgICAgICAgVHJhdmVyc2VzIHRoZSBsaXN0IG9mIHZpc2libGUgbWVzc2FnZXMgdW50aWwgd2UgZmluZCBhIG1lc3NhZ2UgbG9jYXRlZCBwcmlvciB0bwogICAgICAgIHRoZSBwcm92aWRlZCBtZXNzYWdlLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fbmV4dE1lc3NhZ2UpOgogICAgICAgIFRyYXZlcnNlcyB0aGUgbGlzdCBvZiB2aXNpYmxlIG1lc3NhZ2VzIHVudGlsIHdlIGZpbmQgYSBtZXNzYWdlIGxvY2F0ZWQgYWZ0ZXIgdG8gdGhlCiAgICAgICAgcHJvdmlkZWQgbWVzc2FnZS4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX2NsZWFyRm9jdXNhYmxlQ2hpbGRyZW4pOgogICAgICAgIFJlbW92ZSB0aGUgInRhYmluZGV4IiBhdHRyaWJ1dGUgb24gYWxsIGVsZW1lbnRzIGxvY2F0ZWQgd2l0aGluIHRoZSBtZXNzYWdlcyBjb250YWluZXIKICAgICAgICB0byBlbnN1cmUgbm8gZWxlbWVudCBjYW4gc3RlYWwgZm9jdXMgYXdheSBmcm9tIHRoZSBtZXNzYWdlcyBjb250YWluZXIgYW5kIG1lc3Mgd2l0aCBvdXIKICAgICAgICBoYW5kbGluZyBvZiBrZXlib2FyZCBldmVudHMuCgoyMDEzLTAzLTEyICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRG9uJ3QgdHJ1bmNhdGUgdGhlIHN1Z2dlc3Rpb25zIG1lbnUgd2hlbiBpdCBnZXRzIGNsb3NlIHRvIHRoZSByaWdodCBlZGdlLgoKICAgICAgICBSZXN0b3JlIGEgbGluZSB0aGF0IHdhcyByZW1vdmVkIHRoYXQgd2UgbmVlZGVkIGFmdGVyIGFsbCB0byBnZXQgdGhlIHJpZ2h0IGJlaGF2aW9yLgoKICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9Db21wbGV0aW9uU3VnZ2VzdGlvbnNWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29tcGxldGlvblN1Z2dlc3Rpb25zVmlldy5wcm90b3R5cGUuc2hvdyk6IFVwZGF0ZSB3aWR0aCBhZnRlciBtYXhpbXVtV2lkdGggY2hhbmdlcy4KCjIwMTMtMDMtMTIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBQcmV2ZW50IHN0eWxlIHRleHQgZnJvbSBzaGlmdGluZyBhcyBwcm9wZXJ0aWVzIGFyZSBtYXJrZWQgd2l0aCBjaGVja2JveGVzLgoKICAgICAgICBUaGlzIG1hcmtzIGJsYW5rcyBsaW5lcyBpbiBlZGl0YWJsZSBzdHlsZXMgd2l0aCBhIHBsYWNlaG9sZGVyIHRoYXQgaXMgdGhlIHNhbWUKICAgICAgICBzaXplIGFzIHRoZSBjaGVja2JveC4gV2hlbiBhIGNoZWNrYm94IGlzIGFkZGVkIHRoZSBwbGFjZWhvbGRlciBpcyByZW1vdmVkLiBUaGF0CiAgICAgICAgc3dpdGNoIGtlZXBzIHRoZSB0ZXh0IGluIHRoZSBzYW1lIHBvc2l0aW9uIGFuZCBsb29rcyBzdXBlcmIhCgogICAgICAgIFRoaXMgYWxzbyBmb3JjZXMgY2hlY2tib3hlcyB0byBiZSB2aXNpYmxlIHdoZW4gdGhlIGVkaXRvciBoYXMgZm9jdXMsIG5vdCBqdXN0IGhvdmVyZWQuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLmNzczoKICAgICAgICAoLmNzcy1zdHlsZS10ZXh0LWVkaXRvciA+IC5Db2RlTWlycm9yIC5Db2RlTWlycm9yLWxpbmVzIC5jaGVja2JveC1wbGFjZWhvbGRlcik6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5fY2xlYXJUZXh0TWFya2Vycyk6IEFkZGVkIGFsbAogICAgICAgIHBhcmFtIHNvIHdlIGRvbid0IGNsZWFyIHBsYWNlaG9sZGVyIGluIGFsbCBjYXNlcywgb25seSB3aGVuIGRvaW5nIGEgcmVzZXQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuX2NyZWF0ZVRleHRNYXJrZXJGb3JQcm9wZXJ0eUlmTmVlZGVkKTogQ2FsbAogICAgICAgIF9yZW1vdmVDaGVja2JveFBsYWNlaG9sZGVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLl9jb250ZW50Q2hhbmdlZCk6IENhbGwKICAgICAgICBfbWFya0JsYW5rTGluZXNXaXRoQ2hlY2tib3hQbGFjZWhvbGRlci4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5fbWFya0JsYW5rTGluZXNXaXRoQ2hlY2tib3hQbGFjZWhvbGRlcik6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLl9yZW1vdmVDaGVja2JveFBsYWNlaG9sZGVyKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuX3Jlc2V0Q29udGVudCk6IENhbGwKICAgICAgICBfbWFya0JsYW5rTGluZXNXaXRoQ2hlY2tib3hQbGFjZWhvbGRlciBhbmQgcGFzcyB0cnVlIGZvciBfY2xlYXJUZXh0TWFya2VycydzIGFsbCBwYXJhbS4KCjIwMTMtMDMtMTIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBJbXByb3ZlIHRoZSBsb2FkIHRpbWUgb2YgdGhlIFdlYiBJbnNwZWN0b3IgYnkgbG9hZGluZyBsb2NhbGl6ZWRTdHJpbmcuanMgc29vbmVyLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2FkTG9jYWxpemVkU3RyaW5ncy5qczogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZSBMb2FkTG9jYWxpemVkU3RyaW5ncy5qcyBiZWZvcmUgTWFpbi5qcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczogRG9uJ3QgZHluYW1pY2FsbHkgbG9hZCBsb2NhbGl6ZWRTdHJpbmcuanMuCgoyMDEzLTAzLTExICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRGlzYWJsZSBhdXRvIGNvbXBsZXRpb24gaW5zaWRlIGNvbW1lbnRzLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMzODczMTc+CgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUuX2NvbXBsZXRlQXRDdXJyZW50UG9zaXRpb24pOiBSZXR1cm4gZWFybHkgaW5zaWRlIGNvbW1lbnRzLgoKMjAxMy0wMy0xMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIERvbid0IGhpZ2hsaWdodCBhdXRvY29tcGxldGlvbiBpdGVtcyBvbiBob3Zlci4gT25seSBoaWdobGlnaHQgdGhlbSB3aGVuIGFjdGl2ZS4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMzg3MzUwPiBDU1MgYXV0b2NvbXBsZXRpb24gY2FuIGJlIGNvbmZ1c2luZyBpZiBtb3VzZSBjdXJzb3IgaXMgaGlkZGVuIGFuZCBob3ZlcmluZyBjb21wbGV0aW9uIG1lbnUKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29tcGxldGlvblN1Z2dlc3Rpb25zVmlldy5jc3M6CiAgICAgICAgKC5jb21wbGV0aW9uLXN1Z2dlc3Rpb25zLWNvbnRhaW5lcjpub3QoOmFjdGl2ZSkgPiAuaXRlbS5zZWxlY3RlZCwKICAgICAgICAgLmNvbXBsZXRpb24tc3VnZ2VzdGlvbnMtY29udGFpbmVyID4gLml0ZW06YWN0aXZlKTogUmVuYW1lZCBmcm9tIGJlaW5nIGhvdmVyIHRvIGFjdGl2ZS4KCjIwMTMtMDMtMTEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBXb3JrYXJvdW5kIDxyZGFyOi8vcHJvYmxlbS8xMzM5MjQ0MT4gc28gSW1hZ2VzIGFuZCBGb250cyBkb24ndCBnZXQgY3V0IG9mZiBhdCB0aGUgdG9wLgoKICAgICAgICBXZSBjYW4gZ2V0IHRoZSBleHBlY3RlZCByZXN1bHQgYnkgdXNpbmcgbWFyZ2luOiAwIGF1dG8gdW50aWwgdGhlIGJlaGF2aW9yIG9mIC13ZWJraXQtYWxpZ24taXRlbXMKICAgICAgICBpcyBoYXNoZWQgb3V0IG1vcmUuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZvbnRSZXNvdXJjZUNvbnRlbnRWaWV3LmNzczoKICAgICAgICAoLmNvbnRlbnQtdmlldy5yZXNvdXJjZS5mb250KTogUmVtb3ZlIC13ZWJraXQtYWxpZ24taXRlbXM6IGNlbnRlciBhbmQgdXNlIG1hcmdpbjogMCBhdXRvLgogICAgICAgICguY29udGVudC12aWV3LnJlc291cmNlLmZvbnQgLnByZXZpZXcpOiBDaGFuZ2UgMTNweCB0byAxNXB4IHRvIGJlIGxlc3MgYXJiaXRyYXJ5LgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZVJlc291cmNlQ29udGVudFZpZXcuY3NzOgogICAgICAgICguY29udGVudC12aWV3LnJlc291cmNlLmltYWdlKTogRGl0dG8uCgoyMDEzLTAzLTExICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSBTVkcgZm9udHMgd29yayBpbiB0aGUgV2ViIEluc3BlY3Rvci4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMzkyMDU2PiBTVkcgZm9udHMgYXJlIG5vdCByZW5kZXJlZCB3aGVuIHNlbGVjdGVkCgogICAgICAgIFJldmlld2VkIGJ5IEpvbiBMZWUuCgogICAgICAgICogVXNlckludGVyZmFjZS9Gb250UmVzb3VyY2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkZvbnRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5jb250ZW50QXZhaWxhYmxlKTogU3VwcGx5IGZvcm1hdCgic3ZnIikgd2hlbiB3ZQogICAgICAgIGtub3cgd2UgYXJlIGxvYWRpbmcgYW4gU1ZHIGZvbnQuIFRoaXMgc2VlbXMgdG8gYmUgcmVxdWlyZWQgZm9yIFNWRyBmb250cy4KCjIwMTMtMDMtMTEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBEb24ndCBhbGxvdyBzZXR0aW5nIGEgcnVsZSdzIHNlbGVjdG9yIHRvIGFuIGVtcHR5IHN0cmluZy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMzg3Mzg0PiBXaGVuIGVkaXRpbmcgYSBzZWxlY3RvciB0byBiZSB0aGUgZW1wdHkgc3RyaW5nLCBub3RoaW5nIGlzIGNvbW1pdHRlZCAtIFVJIHNob3VsZCByZWZsZWN0IHRoYXQKCiAgICAgICAgUmV2aWV3ZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uLmNzczoKICAgICAgICAoLnN0eWxlLWRlY2xhcmF0aW9uLXNlY3Rpb24gPiAuaGVhZGVyID4gLnNlbGVjdG9yOmVtcHR5KTogQWRkZWQuCiAgICAgICAgKC5zdHlsZS1kZWNsYXJhdGlvbi1zZWN0aW9uID4gLmhlYWRlciA+IC5zZWxlY3RvcjplbXB0eTo6YmVmb3JlKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblNlY3Rpb24ucHJvdG90eXBlLl9jb21taXRTZWxlY3Rvcik6IENhbGwgcmVmcmVzaCBpZiB0aGUgc2VsZWN0b3IgaXMgZW1wdHkuCgoyMDEzLTAzLTExICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgSWdub3JlIFNoaWZ0LVRhYiBpbiBDb2RlTWlycm9yIGluc3RhbmNlcyBzaW5jZSBpdCBkb2VzIHVuZXhwZWN0ZWQgdGhpbmdzLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMzODczNzM+IENTUyBlZGl0b3IgdHlwaW5nIFNoaWZ0K1RhYiBhZGRzIHdlaXJkIHByZS1pbmRlbnQKCiAgICAgICAgUmV2aWV3ZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvZGVNaXJyb3JBZGRpdGlvbnMuanM6CiAgICAgICAgKGlnbm9yZUtleSk6IEFkZGVkLgoKMjAxMy0wMy0xMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEltcHJvdmUgdGhlIHdyYXBwaW5nIG9mIHRoZSBwc2V1ZG8gY2xhc3MgY2hlY2tib3hlcy4KCiAgICAgICAgQWxzbyBtYWtlIHN1cmUgdGhlIHNjcm9sbCBsb2dpYyBoYW5kbGVzIHRoZSBkaWZmZXJlbnQgaGVpZ2h0cyBwb3NzaWJsZS4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMzgzNjM1PiBQc2V1ZG8gY2xhc3MgY2hlY2tib3hlcyBzaG91bGQgd3JhcCBiZXR0ZXIgd2l0aCBuYXJyb3cgc2lkZWJhciAobmV2ZXIgM3gxICYgMXgxKQoKICAgICAgICBSZXZpZXdlZCBieSBBbnRvaW5lIFF1aW50LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLmNzczoKICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuZGV0YWlscy5jc3Mtc3R5bGUgPiAuY29udGVudCA+IC5wc2V1ZG8tY2xhc3Nlcyk6IFN3aXRjaCB0byBmbGV4IGxheW91dC4KICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuZGV0YWlscy5jc3Mtc3R5bGUgPiAuY29udGVudCA+IC5wc2V1ZG8tY2xhc3NlcyA+IC5ncm91cCk6IEFkZGVkLgogICAgICAgICguc2lkZWJhciA+IC5wYW5lbC5kZXRhaWxzLmNzcy1zdHlsZSA+IC5jb250ZW50ID4gLnBzZXVkby1jbGFzc2VzID4gLmdyb3VwID4gbGFiZWwpOiBTcGxpdCB0aGUgbWFyZ2luIG9uIGVhY2ggc2lkZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsKTogQ3JlYXRlIGdyb3VwIGVsZW1lbnRzIG9mIHVwIHRvIHR3byBsYWJlbHMgZWFjaC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUudmlzaWJpbGl0eURpZENoYW5nZSk6IENhbGwgX3VwZGF0ZU5vRm9yY2VkUHNldWRvQ2xhc3Nlc1Njcm9sbE9mZnNldC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUud2lkdGhEaWRDaGFuZ2UpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3VwZGF0ZU5vRm9yY2VkUHNldWRvQ2xhc3Nlc1Njcm9sbE9mZnNldCk6IFVwZGF0ZSB0aGUgaGVpZ2h0LgoKMjAxMy0wMy0xMSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTE3MjA4MDg+IFJFR1JFU1NJT04gKFNhZmFyaSA2KTogQ29uZGl0aW9uYWwgYnJlYWtwb2ludHMgVUkgbWlzc2luZwoKICAgICAgICBBZGQgYmFjayBjb25kaXRpb25hbCBicmVha3BvaW50cyBVSS4gVGhlIFVJIGlzIG1vZGVsZWQgYWZ0ZXIgWGNvZGUncwogICAgICAgICJFZGl0IEJyZWFrcG9pbnQiIGNvbnRleHQgbWVudSBhbmQgcG9wb3ZlciBVSS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnJlYWtwb2ludC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUuZ2V0IGNvbmRpdGlvbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZS5zZXQgY29uZGl0aW9uKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlLmdldCBpbmZvKToKICAgICAgICBHaXZlIGEgYnJlYWtwb2ludCBhIGNvbmRpdGlvbiwgbXV0YXRvcnMsIGFuZCBzYXZlIHRoZSBjb25kaXRpb24gaW4KICAgICAgICB0aGUgYnJlYWtwb2ludCBpbmZvLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlLmFwcGVuZENvbnRleHRNZW51SXRlbXMpOgogICAgICAgIEFkZCBhIGNvbnRleHQgbWVudSBpdGVtIGZvciAiRWRpdCBCcmVha3BvaW50Ii4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZS5fcG9wb3ZlclRvZ2dsZUNoZWNrYm94Q2hhbmdlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZS5fcG9wb3ZlckNvbmRpdGlvbklucHV0Q2hhbmdlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZS5fZWRpdEJyZWFrcG9pbnRQb3BvdmVyQ29udGVudEVsZW1lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUuX3Nob3dFZGl0QnJlYWtwb2ludFBvcG92ZXIpOgogICAgICAgIEdlbmVyYXRlIHRoZSBwb3BvdmVyIGNvbnRlbnQgYW5kIHNob3cgdGhlIHBvcG92ZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9CcmVha3BvaW50LmNzczogQWRkZWQuCiAgICAgICAgKC5wb3BvdmVyIC5lZGl0LWJyZWFrcG9pbnQtcG9wb3Zlci1jb250ZW50KToKICAgICAgICAoLnBvcG92ZXIgLmVkaXQtYnJlYWtwb2ludC1wb3BvdmVyLWNvbnRlbnQgPiBsYWJlbC50b2dnbGUpOgogICAgICAgICgucG9wb3ZlciAuZWRpdC1icmVha3BvaW50LXBvcG92ZXItY29udGVudCA+IHRhYmxlKToKICAgICAgICAoLnBvcG92ZXIgLmVkaXQtYnJlYWtwb2ludC1wb3BvdmVyLWNvbnRlbnQgPiB0YWJsZSA+IHRyID4gdGgpOgogICAgICAgICgucG9wb3ZlciAuZWRpdC1icmVha3BvaW50LXBvcG92ZXItY29udGVudCA+IHRhYmxlID4gdHIgPiB0ZCk6CiAgICAgICAgKCNlZGl0LWJyZWFrcG9pbnQtcG9wb3Zlci1jb25kaXRpb24pOgogICAgICAgIFN0eWxlcyBmb3IgdGhlIGVkaXQgYnJlYWtwb2ludCBwb3BvdmVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnJlYWtwb2ludFRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludFRyZWVFbGVtZW50LnByb3RvdHlwZS5vbmNvbnRleHRtZW51KToKICAgICAgICBQYXNzIHRoZSBicmVha3BvaW50IGVsZW1lbnQgaW4gdGhlIGRpc3BsYXkgc28gdGhhdCBpZiBhIHBvcG92ZXIgbmVlZHMKICAgICAgICB0byBiZSBzaG93biwgd2UgaGF2ZSB0aGUgYm91bmRzIG9mIGFuIGVsZW1lbnQgdG8gc2hvdyBpdCBmb3IuCgogICAgICAgICogVXNlckludGVyZmFjZS9EZWJ1Z2dlck1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5pc0JyZWFrcG9pbnRFZGl0YWJsZSk6CiAgICAgICAgTmV2ZXIgYWxsb3cgc2V0dGluZyBhIGNvbmRpdGlvbiBvbiB0aGUgc3BlY2lhbCBicmVha3BvaW50cy4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLl9icmVha3BvaW50Q29uZGl0aW9uRGlkQ2hhbmdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUuX2JyZWFrcG9pbnRDb25kaXRpb25EaWRDaGFuZ2UuYnJlYWtwb2ludFJlbW92ZWQpOgogICAgICAgIFRvIHNldCB0aGUgY29uZGl0aW9uIGRlbGV0ZSB0aGUgb2xkIGJyZWFrcG9pbnQgYW5kIHNldCBhIG5ldyBicmVha3BvaW50CiAgICAgICAgd2l0aCB0aGUgbmV3IGNvbmRpdGlvbi4gVGhlIFdlYkluc3BlY3Rvci5CcmVha3BvaW50IHdpbGwgZ2V0IGFuIHVwZGF0ZWQgaWQuCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6CiAgICAgICAgSW5jbHVkZSBuZXcgZmlsZXMgYW5kIHN0cmluZ3MuCgoyMDEzLTAzLTA5ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIEFkZCBhICJTZWxlY3QgT3V0cHV0IiBidXR0b24gdG8gUHJldHR5UHJpbnRpbmcgdG9vbHMuCgogICAgICAgIFRoZSBuZXcgYnV0dG9uIG1ha2UgY29weWluZyB0aGUgZW50aXJlIG91dHB1dCBlYXNpZXIuIFVzZWZ1bCBmb3Igc2F2aW5nCiAgICAgICAgYmVmb3JlIGFuZCBhZnRlciBjb250ZW50cyB0byBzZWUgY2hhbmdlcy4gQWxzbyB1cGRhdGUgdGhlIGZvcm1hdHRlciBhbmQKICAgICAgICBjbGVhbiB1cCBzb21lIHN0eWxlIGlzc3Vlcy4KCiAgICAgICAgVW5yZXZpZXdlZCB0b29scyBjaGFuZ2UuCgogICAgICAgICogVG9vbHMvUHJldHR5UHJpbnRpbmcvQ29kZU1pcnJvckZvcm1hdHRlcnMuanM6CiAgICAgICAgKiBUb29scy9QcmV0dHlQcmludGluZy9pbmRleC5odG1sOgoKMjAxMy0wMy0wOSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBQcmV0dHkgcHJpbnRpbmc6IERvbid0IHRyeSB0byBiZSBzbWFydCBhYm91dCB1bmFyeSArLy0uCgogICAgICAgIFRoaXMgd2FzIGNhdXNpbmcgc29tZSBzaW1wbGUgZXhwcmVzc2lvbnMgbGlrZSAiMSsxIiBvciAiZm9vKzEiIHRvCiAgICAgICAgYmVjb21lICIxICsxIiBhbmQgImZvbyArMSIgaW5zdGVhZCBvZiB0aGUgZXhwZWN0ZWQgIjEgKyAxIiBhbmQKICAgICAgICAiZm9vICsgMSIuIFRoZSBtb3N0IGNvbW1vbiB1bmFyeSBleHByZXNzaW9ucyBuZWdhdGl2ZSBudW1iZXJzLAogICAgICAgIGFyZSBwYXJzZWQgYXMgYSBzaW5nbGUgdG9rZW4gYnkgQ29kZU1pcnJvciBhbnl3YXlzLCBzbyBkcm9wIHRoZQogICAgICAgIHNwZWNpYWwgY2FzZSBpbiB0aGUgZm9ybWF0dGVyLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Db2RlTWlycm9yRm9ybWF0dGVycy5qczoKICAgICAgICBSZW1vdmUgdGhlIHNwZWNpYWwgY2FzZSB0aGF0IHRyaWVkIHRvIGhhbmRsZSB1bmFyeSArLy0uCgoyMDEzLTAzLTA5ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIFVwZGF0ZSB0aGUgUHJldHR5UHJpbnRpbmcgVG9vbCB3aXRoIG5ldyBmb3JtYXR0ZXIgY2hhbmdlcy4KCiAgICAgICAgVW5yZXZpZXdlZCB0b29scyBjaGFuZ2UuCgogICAgICAgICogVG9vbHMvUHJldHR5UHJpbnRpbmcvQ29kZU1pcnJvckZvcm1hdHRlcnMuanM6CiAgICAgICAgKiBUb29scy9QcmV0dHlQcmludGluZy9Gb3JtYXR0ZXIuanM6CiAgICAgICAgKEZvcm1hdHRlci5wcm90b3R5cGUuX2hhbmRsZVRva2VuKToKICAgICAgICAoRm9ybWF0dGVyLnByb3RvdHlwZS5faGFuZGxlRW1wdHlMaW5lKToKCjIwMTMtMDMtMDkgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgUHJldHR5IFByaW50aW5nOiBzd2l0Y2ggZnJvbSBzdGFydHNXaXRoIHRvIHJlZ2V4IG1hdGNoaW5nIGZvciB0b2tlbnMKCiAgICAgICAgVGhpcyBhZGRyZXNzZXMgYSByZXZpZXcgY29tbWVudCB0aGF0IHVzaW5nIHN0YXJ0c1dpdGggZm9yIGNoZWNraW5nCiAgICAgICAgdG9rZW4gdHlwZXMgaXMgYnJpdHRsZSBhbmQgd2Ugc2hvdWxkIGNoZWNrIHRoZSBlbnRpcmUgc3RyaW5nLiBUaGUKICAgICAgICBwZXJmb3JtYW5jZSBpbXBhY3Qgd2FzIG5lZ2xpZ2libGUgb24gSmF2YVNjcmlwdCBhbmQgbWlub3Igb24gQ1NTLAogICAgICAgIHNvIGl0IGlzIHdvcnRoIG1ha2luZyB0aGUgY2hhbmdlIHRvIG1ha2UgdGhlIGNvZGUgbGVzcyBicml0dGxlLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Db2RlTWlycm9yRm9ybWF0dGVycy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRm9ybWF0dGVyLmpzOgogICAgICAgIChGb3JtYXR0ZXIucHJvdG90eXBlLl9oYW5kbGVUb2tlbik6CiAgICAgICAgKEZvcm1hdHRlci5wcm90b3R5cGUuX2hhbmRsZUVtcHR5TGluZSk6CgoyMDEzLTAzLTA5ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIEFkZCBQcmV0dHkgUHJpbnRpbmcgRGVidWcgUGFnZSB0byBXZWJJbnNwZWN0b3IvVG9vbHMvUHJldHR5UHJpbnRpbmcKCiAgICAgICAgVGhlIHByZXR0eSBwcmludGluZyBmaWxlcyBpbiB0aGUgSW5zcGVjdG9yIGNhbiBiZSBydW4gaW5kZXBlbmRlbnRseSBvZgogICAgICAgIHRoZSBJbnNwZWN0b3IuIFRoZSBvbmx5IHJlcXVpcmVtZW50cyBhcmUgQ29kZU1pcnJvciwgaXRzIG1vZGVzLCBhbmQgYQogICAgICAgIGZldyBVdGlsaXR5IGZ1bmN0aW9ucy4gVGhpcyBwcm92aWRlcyBhIHNlcGFyYXRlIHRvb2wgdGhhdCBtYWtlcyBpdAogICAgICAgIGVhc2llciB0byBkZWJ1ZyBhbmQgYmVuY2htYXJrIHByZXR0eSBwcmludGluZyB3aXRob3V0IG5lZWRpbmcgdG8gcnVuCiAgICAgICAgdGhlIGVudGlyZSBpbnNwZWN0b3IuIEJ5IGRlZmF1bHQgaXQgaW5jbHVkZXMgc29tZSBkZWJ1ZyBpbmZvcm1hdGlvbgogICAgICAgIHRoYXQgd2lsbCBzcGVlZCB1cCBkZWJ1Z2dpbmcgYW5kIG1ha2UgbWFraW5nIGltcHJvdmVtZW50cyBlYXNpZXIuCgogICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBUb29scy9QcmV0dHlQcmludGluZy9Db2RlTWlycm9yRm9ybWF0dGVycy5qczogQWRkZWQuCiAgICAgICAgKiBUb29scy9QcmV0dHlQcmludGluZy9Gb3JtYXR0ZXIuanM6IEFkZGVkLgogICAgICAgICogVG9vbHMvUHJldHR5UHJpbnRpbmcvRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIuanM6IEFkZGVkLgogICAgICAgICogVG9vbHMvUHJldHR5UHJpbnRpbmcvY29kZW1pcnJvci5jc3M6IEFkZGVkLgogICAgICAgICogVG9vbHMvUHJldHR5UHJpbnRpbmcvY29kZW1pcnJvci5qczogQWRkZWQuCiAgICAgICAgKiBUb29scy9QcmV0dHlQcmludGluZy9jc3MuanM6IEFkZGVkLgogICAgICAgICogVG9vbHMvUHJldHR5UHJpbnRpbmcvamF2YXNjcmlwdC5qczogQWRkZWQuCiAgICAgICAgQ29kZU1pcnJvciBhbmQgV2ViSW5zcGVjdG9yIHByZXR0eSBwcmludGluZyBmaWxlcyBjb3BpZWQgd2l0aCBvbmx5CiAgICAgICAgbWlub3IgdHdlYWtzIChkZWJ1Z2dpbmcgY29kZSkuCgogICAgICAgICogVG9vbHMvUHJldHR5UHJpbnRpbmcvcG9wdWxhdGUvYXBwbGUuY3NzOiBBZGRlZC4KICAgICAgICAqIFRvb2xzL1ByZXR0eVByaW50aW5nL3BvcHVsYXRlL2pxdWVyeS5taW4uanM6IEFkZGVkLgogICAgICAgIFVzZWZ1bCBKYXZhU2NyaXB0IGFuZCBDU1MgY29udGVudCB0byBwb3B1bGF0ZSB0aGUgZWRpdG9yIHdpdGguIFRoZQogICAgICAgIGNvbnRlbnRzIGFyZSBkZWNlbnQgc3RyZXNzIHRlc3RzIGZvciBjb3ZlcmFnZSBhbmQgYmVuY2htYXJraW5nLgogICAgICAgIGpRdWVyeSBpcyBhbHJlYWR5IGluIFNhZmFyaSBmb3Igb3RoZXIgdG9vbHMsIGFuZCBhcHBsZS5jb20ncyBDU1MKICAgICAgICBpcyBBcHBsZSBzb3VyY2UuIFRoZXNlIGZpbGVzIGFyZSBqdXN0IGluY2x1ZGVkIGFzIHRlc3QgZGF0YS4KCiAgICAgICAgKiBUb29scy9QcmV0dHlQcmludGluZy9pbmRleC5odG1sOiBBZGRlZC4KICAgICAgICBEcml2ZXIuIEluY2x1ZGVzIGFuIGVkaXRvciwgc29tZSBidXR0b25zLCBhbmQgb3V0cHV0cyByZXN1bHRzLgoKMjAxMy0wMy0wOSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMzNzU5NDI+IFByZXR0eSBwcmludGluZzogU2VhcmNoIHJlc3VsdHMgaGlnaGxpZ2h0IHdyb25nIHRleHQgcmFuZ2UgYW5kIGhpZ2hsaWdodCB3cm9uZyBsaW5lCgogICAgICAgIFByb3ZpZGUgYSBTb3VyY2VDb2RlVGV4dFJhbmdlLiBUaGlzIGNvbnRhaW5zIHN0YXJ0IGFuZCBlbmQgU291cmNlQ29kZUxvY2F0aW9uCiAgICAgICAgb2JqZWN0cyBhbmQgdXNlcyB0aG9zZSB0byBwcm92aWRlIHJhdywgZm9ybWF0dGVkLCBhbmQgbWFwcGVkIChkaXNwbGF5KQogICAgICAgIFdlYkluc3BlY3Rvci5UZXh0UmFuZ2VzIGFuZCBldmVudHMgd2hlbiB0aGUgcmFuZ2UgYm91bmRzIGNoYW5nZS4KCiAgICAgICAgU2VhcmNoIHJlc3VsdHMgY29taW5nIGZyb20gdGhlIGJhY2tlbmQgaGF2ZSB0aGUgb3JpZ2luYWwgY29udGVudCBhbmQgc28KICAgICAgICBpbmNsdWRlIHJhdyB0ZXh0IHJhbmdlIGluZm9ybWF0aW9uLiBXaGVuIHdlIGp1bXAgdG8gdGhlIHNvdXJjZSBjb2RlIHdlCiAgICAgICAgd2lsbCB3YW50IHRvIHJldmVhbCBhbmQgaGlnaGxpZ2h0IHRoZSBmb3JtYXR0ZWQgbGluZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NU2VhcmNoTWF0Y2hPYmplY3QuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01TZWFyY2hNYXRjaE9iamVjdCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01TZWFyY2hNYXRjaE9iamVjdC5wcm90b3R5cGUuZ2V0IHNvdXJjZUNvZGVUZXh0UmFuZ2UpOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlU2VhcmNoTWF0Y2hPYmplY3QuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNlYXJjaE1hdGNoT2JqZWN0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2VhcmNoTWF0Y2hPYmplY3QucHJvdG90eXBlLmdldCBzb3VyY2VDb2RlVGV4dFJhbmdlKToKICAgICAgICBTd2l0Y2ggdGhlc2UgdG8gY3JlYXRlIGFuZCBob2xkIGEgU291cmNlQ29kZVRleHRSYW5nZS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLnNob3dTb3VyY2VDb2RlVGV4dFJhbmdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdHJlZUVsZW1lbnRTZWxlY3RlZCk6CiAgICAgICAgV2hlbiBzZWxlY3RpbmcgYSBTZWFyY2hNYXRjaE9iamVjdCByZXZlYWwgYW5kIHNlbGVjdCB0aGUgZm9ybWF0dGVkIHJhbmdlLgogICAgICAgIEl0IG1heSBiZSBqYXJyaW5nIHRvIHRoZSB1c2VyIHRvIHNlZSBhIHNlYXJjaCByZXN1bHQgZm9yIHNvbWV0aGluZyBhbmQKICAgICAgICBqdW1wIHRvIHRoZSBtYXBwZWQgKGRpc3BsYXkpIGxvY2F0aW9uIHdoaWNoIG1heSBub3QgY29udGFpbiB0aGUgc2VhcmNoIHRlcm0uCgogICAgICAgICogVXNlckludGVyZmFjZS9TZWFyY2hSZXN1bHRUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFJlc3VsdFRyZWVFbGVtZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFJlc3VsdFRyZWVFbGVtZW50LnRydW5jYXRlQW5kSGlnaGxpZ2h0VGl0bGUpOgogICAgICAgIEJlIGF3YXJlIHRoYXQgdGhlIHJlcHJlc2VudGVkIFNlYXJjaE1hdGNoT2JqZWN0IGhhcyBhIHNvdXJjZUNvZGVUZXh0UmFuZ2UKICAgICAgICBub3cuIEJ1dCB3ZSBhcmUgcHJvdmlkZWQgbGluZSBjb250ZW50IGZyb20gdGhlIG9yaWdpbmFsIHJlc291cmNlLCBzbyBpbgogICAgICAgIGhpZ2hsaWdodGluZyB0aGUgc2VhcmNoIHN0cmluZyB1c2UgdGhlIG9yaWdpbmFsIHJlc291cmNlJ3MgdGV4dCByYW5nZS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZS5jcmVhdGVTb3VyY2VDb2RlVGV4dFJhbmdlKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlTWFwUmVzb3VyY2UuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBSZXNvdXJjZS5wcm90b3R5cGUuY3JlYXRlU291cmNlQ29kZVRleHRSYW5nZSk6CiAgICAgICAgSGVscGVycyBmb3IgY3JlYXRpbmcgYSBTb3VyY2VDb2RlVGV4dFJhbmdlIGJ5IHByb3ZpZGluZyBhbiB1bmZvcm1hdHRlZAogICAgICAgIFRleHRSYW5nZSBpbiB0aGUgZ2l2ZW4gcmVzb3VyY2UuIEF1dG9tYXRpY2FsbHkgdGFrZXMgY2FyZSBvZiBTb3VyY2VNYXBzLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlQ29kZVRleHRSYW5nZS5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dFJhbmdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0UmFuZ2UucHJvdG90eXBlLmdldCBzb3VyY2VDb2RlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0UmFuZ2UucHJvdG90eXBlLmdldCB0ZXh0UmFuZ2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRSYW5nZS5wcm90b3R5cGUuZ2V0IGZvcm1hdHRlZFRleHRSYW5nZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dFJhbmdlLnByb3RvdHlwZS5nZXQgZGlzcGxheVNvdXJjZUNvZGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRSYW5nZS5wcm90b3R5cGUuZ2V0IGRpc3BsYXlUZXh0UmFuZ2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRSYW5nZS5wcm90b3R5cGUuX3N0YXJ0QW5kRW5kTG9jYXRpb25zSW5TYW1lTWFwcGVkUmVzb3VyY2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRSYW5nZS5wcm90b3R5cGUuX3NvdXJjZUNvZGVMb2NhdGlvbkNoYW5nZWQpOgogICAgICAgIFNvdXJjZUNvZGVUZXh0UmFuZ2UgbWF0Y2hpbmcgU291cmNlQ29kZUxvY2F0aW9uJ3Mgc2VtYW50aWNzLgoKMjAxMy0wMy0wOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIERvbid0IGZsYXNoIHJlZCBzdHJpa2V0aHJvdWdoIHdoZW4gYWN0aXZlbHkgZWRpdGluZyBhIHN0eWxlLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMzODU3NjI+CgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLmNzczoKICAgICAgICAoLmNzcy1zdHlsZS10ZXh0LWVkaXRvciA+IC5Db2RlTWlycm9yIC5Db2RlTWlycm9yLWxpbmVzIC5lZGl0aW5nLWxpbmUgLmNzcy1zdHlsZS1kZWNsYXJhdGlvbi1wcm9wZXJ0eS5pbnZhbGlkKTogUmVuYW1lZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuX2NsZWFyUmVtb3ZlRWRpdGluZ0xpbmVDbGFzc2VzVGltZW91dCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLl9yZW1vdmVFZGl0aW5nTGluZUNsYXNzZXMpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5fcmVtb3ZlRWRpdGluZ0xpbmVDbGFzc2VzLnJlbW92ZUVkaXRpbmdMaW5lQ2xhc3Nlcyk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLl9yZW1vdmVFZGl0aW5nTGluZUNsYXNzZXNTb29uKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuX2NvbnRlbnRDaGFuZ2VkKTogQWRkIEVkaXRpbmdMaW5lU3R5bGVDbGFzc05hbWUgdG8gdGhlIGNoYW5nZWQgbGluZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5fdXBkYXRlUHJvcGVydGllcyk6IENhbGwgX3JlbW92ZUVkaXRpbmdMaW5lQ2xhc3Nlc1Nvb24uCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuX3Jlc2V0Q29udGVudCk6IENhbGwgX3JlbW92ZUVkaXRpbmdMaW5lQ2xhc3Nlcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5fYXBwbHlDb21wbGV0aW9uSGludCk6IERvbid0IGFkZCBsaW5lIENvbXBsZXRpb25QZW5kaW5nU3R5bGVDbGFzc05hbWUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLl9jb21taXRDb21wbGV0aW9uSGludCk6IFJlbW92ZSBjYWxsIHRvIF9yZW1vdmVQZW5kaW5nQ29tcGxldGlvbkxpbmVTdHlsZUNsYXNzLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5fcmVtb3ZlQ29tcGxldGlvbkhpbnQpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUuX3JlbW92ZVBlbmRpbmdDb21wbGV0aW9uTGluZVN0eWxlQ2xhc3MpOiBSZW1vdmVkLgoKMjAxMy0wMy0wOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFByZXZlbnQgQ1NTIGF1dG9jb21wbGV0aW9uIGZyb20gaW50ZXJmZXJpbmcgd2l0aCB0aGUgdW5kby9yZWRvIGhpc3RvcnkuCgogICAgICAgIFdlIG5vdyByZW1vdmUgYW55IGNoYW5nZXMgd2UgcHJvZ3JhbW1hdGljYWxseSBkbyBmcm9tIHRoZSB1bmRvIGhpc3RvcnkuCiAgICAgICAgQW5kIGJlZm9yZSB1bmRvIG9yIHJlZG8gd2UgbWFrZSBzdXJlIHRvIGhpZGUgdGhlIGNvbXBsZXRpb25zIHNvIHRoZSBlZGl0b3IKICAgICAgICBpcyBiYWNrIHRvIHRoZSBzdGF0ZSB0aGF0IG1hdGNoZXMgdGhlIGhpc3RvcnkuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzM4NDI5Nj4gQ1NTIEF1dG9jb21wbGV0aW9uIGNhdXNlcyB1bmV4cGVjdGVkIFVuZG8gYmVoYXZpb3IKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyKTogSG9vayB1cCBfaGFuZGxlSGlkZUtleSB0byB0aGUgc3RhbmRhcmQKICAgICAgICB1bmRvIGFuZCByZWRvIHNob3J0Y3V0cy4gQWxzbyBob29rIHVwIHNlbGVjdCBhbGwgc28gaXQgZ29lcyB0aHJvdWdoIGluc3RlYWQgb2YgYmVpbmcKICAgICAgICBibG9ja2VkIGJ5IF9oYW5kbGVDdXJzb3JBY3Rpdml0eS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUuZ2V0IF9jdXJyZW50UmVwbGFjZW1lbnRUZXh0KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLl9hcHBseUNvbXBsZXRpb25IaW50LnVwZGF0ZSk6IENhbGwKICAgICAgICBfcmVtb3ZlTGFzdENoYW5nZUZyb21IaXN0b3J5IGFmdGVyIHJlcGxhY2VSYW5nZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUuX2NvbW1pdENvbXBsZXRpb25IaW50LnVwZGF0ZSk6IEFkZGVkLgogICAgICAgIFJlcGxhY2UgdGhlIHByZWZpeCB3aXRoIHRoZSBmdWxsIGNvbXBsZXRpb24gdGV4dC4gRG9uJ3QgY2FsbCBfcmVtb3ZlTGFzdENoYW5nZUZyb21IaXN0b3J5LgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5fY29tbWl0Q29tcGxldGlvbkhpbnQpOiBDYWxsIHVwZGF0ZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUuX3JlbW92ZUxhc3RDaGFuZ2VGcm9tSGlzdG9yeSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5fcmVtb3ZlQ29tcGxldGlvbkhpbnQudXBkYXRlKTogQ2FsbAogICAgICAgIF9yZW1vdmVMYXN0Q2hhbmdlRnJvbUhpc3RvcnkgYWZ0ZXIgZWFjaCByZXBsYWNlUmFuZ2UuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLl9jb21wbGV0ZUF0Q3VycmVudFBvc2l0aW9uKTogQ2FsbAogICAgICAgIF9yZW1vdmVDb21wbGV0aW9uSGludCBiZWZvcmUgZ2V0dGluZyB0aGUgY3Vyc29yIHNvIGFueSBjdXJzb3IgY2hhbmdlcyBhcmUgZG9uZSBmaXJzdC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUuX2hhbmRsZUhpZGVLZXkpOiBBZGRlZC4gSGlkZSB0aGUgY29tcGxldGlvbnMKICAgICAgICBhbmQgcGFzcyB0aHJvdWdoIHRvIG90aGVyIHRoZSBzdGFuZGFyZCBoYW5kbGVycy4KCjIwMTMtMDMtMDggIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyNDYzNjMxPiBSRUdSRVNTSU9OOiBTdWJmcmFtZXMgZG9uJ3Qgc2hvdyB0aGUgRE9NIHRyZWUKCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZS5wcm90b3R5cGUucmVxdWVzdFJvb3RET01Ob2RlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWUucHJvdG90eXBlLl9yZXF1ZXN0Um9vdERPTU5vZGVJbnRlcm5hbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlLnByb3RvdHlwZS5fZnJhbWVNYWluUmVzb3VyY2VEaWRDaGFuZ2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZS5wcm90b3R5cGUuX2ZyYW1lRXhlY3V0aW9uQ29udGV4dENoYW5nZWQpOgogICAgICAgIElmIHdlIGFyZSBhIHN1YmZyYW1lIHdlIG11c3Qgd2FpdCBmb3IgYSBjb250ZXh0IGV4ZWN1dGlvbiBpZGVudGlmaWVyCiAgICAgICAgdG8gZG8gdGhlIFJ1bnRpbWVBZ2VudC5ldmFsdWF0ZSB0byBnZXQgdGhlIGRvY3VtZW50LiBTbyB3ZSBtYXkgbmVlZAogICAgICAgIHRvIHdhaXQgZm9yIGl0LiBTd2l0Y2ggdG8gaW52b2tlIGFuZCBjbGFyaWZ5IHdlIHVzZSBmcmFtZUlkIGZvcgogICAgICAgIGlPUyA2IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXhlY3V0aW9uQ29udGV4dC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5FeGVjdXRpb25Db250ZXh0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkV4ZWN1dGlvbkNvbnRleHQuc3VwcG9ydGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkV4ZWN1dGlvbkNvbnRleHQucHJvdG90eXBlLmdldCBpZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FeGVjdXRpb25Db250ZXh0LnByb3RvdHlwZS5nZXQgbmFtZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FeGVjdXRpb25Db250ZXh0LnByb3RvdHlwZS5nZXQgaXNQYWdlQ29udGV4dCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FeGVjdXRpb25Db250ZXh0LnByb3RvdHlwZS5nZXQgZnJhbWUpOgogICAgICAgIFdlYkluc3BlY3Rvci5PYmplY3QgY2xhc3MgZm9yIFJ1bnRpbWUuRXhlY3V0aW9uQ29udGV4dERlc2NyaXB0aW9uIHR5cGUuCiAgICAgICAgVGhpcyB3YXMgdW5hdmFpbGFibGUgaW4gaU9TIDYsIHNvIGFkZCBhIHN0YXRpYyAic3VwcG9ydGVkIiBmdW5jdGlvbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLmluaXRpYWxpemUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLmNvbW1pdFByb3Zpc2lvbmFsTG9hZCk6CiAgICAgICAgQ2xlYXIgZXhlY3V0aW5vIGNvbnRleHRzIG9uIGluaXRpYWxpemUsIG5hdmlnYXRpbmcsIGFuZCBkZXRhY2hpbmcgKG1hbmFnZXIpLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lLnByb3RvdHlwZS5nZXQgbWFpbkV4ZWN1dGlvbkNvbnRleHQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLmdldCBleGVjdXRpb25Db250ZXh0cyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZS5wcm90b3R5cGUuY2xlYXJFeGVjdXRpb25Db250ZXh0cyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZS5wcm90b3R5cGUuYWRkRXhlY3V0aW9uQ29udGV4dCk6CiAgICAgICAgQSBmcmFtZSBtYXkgaGF2ZSBtdWx0aXBsZSBleGVjdXRpb24gY29udGV4dHMuIE9uZSBmb3IgZWFjaCB3b3JsZC4gV2UgY29uc2lkZXIKICAgICAgICB0aGUgZmlyc3QgZXhlY3V0aW9uIGNvbnRleHQgd2UgcmVjZWl2ZSBmb3IgYSBmcmFtZSB0byBiZSB0aGUgbWFpbiBvbmUuCgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLmdldCBleGVjdXRpb25Db250ZXh0SWRlbnRpZmllcik6CiAgICAgICAgQmFja3dhcmRzIGNvbXBhdGlibGUgZXhlY3V0aW9uIGNvbnRleHQgaWRlbnRpZmllci4gTnVsbCBpZiBub3QgeWV0IHJlc29sdmVkLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWVSZXNvdXJjZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUuZnJhbWVEaWREZXRhY2gpOgogICAgICAgIFdoZW4gZGV0YWNoaW5nIGEgcGFnZSwgY2xlYXIgdGhlIGV4ZWN1dGlvbiBjb250ZXh0cy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5leGVjdXRpb25Db250ZXh0Q3JlYXRlZCk6CiAgICAgICAgU2V0IHRoZSBleGVjdXRpb24gY29udGV4dCBvbiBhIGZyYW1lIGlmIHByb3ZpZGVkLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6CiAgICAgICAgUmVnaXN0ZXIgYSAiUnVudGltZSIgZG9tYWluIG9ic2VydmVyIGFuZCBlbmFibGUgaXQgd2hlbiBpdCBpcyBhdmFpbGFibGUuCgogICAgICAgICogVXNlckludGVyZmFjZS9SdW50aW1lT2JzZXJ2ZXIuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuUnVudGltZU9ic2VydmVyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJ1bnRpbWVPYnNlcnZlci5wcm90b3R5cGUuZXhlY3V0aW9uQ29udGV4dENyZWF0ZWQpOgogICAgICAgIEFkZCBhIG5ldyBPYnNlcnZlciBmb3IgIlJ1bnRpbWUiIGRvbWFpbiBldmVudHMuCgoyMDEzLTAzLTA4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMzgxMDI1PiBSRUdSRVNTSU9OIChTYWZhcmkgNik6IEJvdHRvbS11cCBwcm9maWxpbmcgb3B0aW9uIG1pc3NpbmcKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczogVXBkYXRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0JvdHRvbVVwVHJlZS5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9KYXZhU2NyaXB0UHJvZmlsZVZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0UHJvZmlsZVZpZXcucHJvdG90eXBlLmdldCBuYXZpZ2F0aW9uSXRlbXMpOiBBZGRlZC4gUmV0dXJuIHBlcmNlbnQKICAgICAgICBhbmQgYm90dG9tIHVwIGl0ZW0uCiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0UHJvZmlsZVZpZXcucHJvdG90eXBlLl90b2dnbGVCb3R0b21VcFZpZXcpOiBBZGRlZC4gRmxpcCB0aGUgc2V0dGluZwogICAgICAgIGFuZCBjYWxsIF9jaGFuZ2VWaWV3LgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFByb2ZpbGVWaWV3LnByb3RvdHlwZS5fY2hhbmdlVmlldyk6IENoZWNrIF9zaG93VHJlZUJvdHRvbVVwU2V0dGluZy4KICAgICAgICBSZW1vdmluZyByZWZlcmVuY2UgdG8gb2xkIHZpZXdTZWxlY3RFbGVtZW50IHByb3BlcnR5LgoKMjAxMy0wMy0wOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgdGhlICJIIiBrZXkgdG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBzZWxlY3RlZCBET00gZWxlbWVudC4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMzUyNjc0PiBQQVJJVFkgKFdlYktpdCBXZWIgSW5zcGVjdG9yKTogU2hvcnRjdXQgdG8gaGlkZS9zaG93IERPTSBlbGVtZW50cyB3aGlsZSBpbnNwZWN0aW5nCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVPdXRsaW5lLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZU91dGxpbmUpOiBDcmVhdGUgdGhlIGtleWJvYXJkIHNob3J0Y3V0LgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZU91dGxpbmUucHJvdG90eXBlLl9oaWRlRWxlbWVudC50b2dnbGVQcm9wZXJ0aWVzKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlT3V0bGluZS5wcm90b3R5cGUuX2hpZGVFbGVtZW50KTogQWRkZWQuCgoyMDEzLTAzLTA4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWx3YXlzIGZpcmUgdGhlIFJlZnJlc2hlZCBldmVudCBmb3IgRE9NTm9kZVN0eWxlcy4KCiAgICAgICAgTm90IGZpcmluZyBSZWZyZXNoZWQgbWFkZSBpdCBoYXJkIHRvIGxpc3RlbiBmb3Igd2hlbiBpdCB3YXMgc2FmZSB0byB1c2UgdGhlIHByb3BlcnRpZXMuCiAgICAgICAgSWYgeW91IGNhbGwgcmVmcmVzaCwgeW91IGV4cGVjdCBSZWZyZXNoZWQgdG8gYWx3YXlzIGZpcmUuIEJ1dCBpdCB3b3VsZCBvbmx5IGZpcmUgaWYgdGhlcmUKICAgICAgICB3YXMgYSBzaWduaWZpY2FudCBjaGFuZ2UuIE5vdyBpdCBhbHdheXMgZmlyZXMgYW5kIHBhc3NlcyBhIGZsYWcgd2hldGhlciBpdCB3YXMgc2lnbmlmaWNhbnQuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb24uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZS5wcm9wZXJ0eUZvck5hbWUpOiBEcml2ZSBieTogZG9uJ3QgY29uc2lkZXIKICAgICAgICBwZW5kaW5nIHByb3BlcnRpZXMgaWYgd2UgY2FuJ3QgY3JlYXRlIG9yIGFyZSBub3QgZWRpdGFibGUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGVTdHlsZXMuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5yZWZyZXNoLmZldGNoZWRDb21wdXRlZFN0eWxlKTogS2VlcCB0cmFjayBvbiBpZiB3ZQogICAgICAgIGZvdW5kIGEgc2lnbmlmaWNhbnQgY2hhbmdlIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2UgZmlyZWQgdGhlIFJlZnJlc2hlZCBldmVudC4gT25seSByZWNvbXB1dGUKICAgICAgICBpZiBpdCB3YXMgc2lnbmlmaWNhbnQgaWYgd2UgYXJlbid0IGFscmVhZHkgbWFya2VkIGFzIHNpZ25pZmljYW50LiBQYXNzIHNpZ25pZmljYW50Q2hhbmdlIGFsb25nCiAgICAgICAgd2l0aCB0aGUgUmVmcmVzaGVkIGV2ZW50IGFuZCBhbHdheXMgZmlyZSBpdC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUnVsZXNTdHlsZURldGFpbHNQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJ1bGVzU3R5bGVEZXRhaWxzUGFuZWwucHJvdG90eXBlLnJlZnJlc2gpOiBBZGRlZCBzaWduaWZpY2FudENoYW5nZSBwYXJhbS4gT25seQogICAgICAgIGRvIGEgcmVidWlsZCBpZiBpdCB3YXMgc2lnbmlmaWNhbnQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N0eWxlRGV0YWlsc1BhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVEZXRhaWxzUGFuZWwucHJvdG90eXBlLm1hcmtBc05lZWRzUmVmcmVzaCk6IFNldCBfZm9yY2VTaWduaWZpY2FudENoYW5nZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlRGV0YWlsc1BhbmVsLnByb3RvdHlwZS5yZWZyZXNoKTogQWRkZWQgc2lnbmlmaWNhbnRDaGFuZ2UgcGFyYW0uCiAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZURldGFpbHNQYW5lbC5wcm90b3R5cGUuX3JlZnJlc2hQcmVzZXJ2aW5nU2Nyb2xsUG9zaXRpb24pOiBQYXNzIGFsb25nCiAgICAgICAgc2lnbmlmaWNhbnRDaGFuZ2UgdG8gcmVmcmVzaCwgdGFraW5nIGludG8gY29uc2lkZXJhdGlvbiBfZm9yY2VTaWduaWZpY2FudENoYW5nZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlRGV0YWlsc1BhbmVsLnByb3RvdHlwZS5fbm9kZVN0eWxlc1JlZnJlc2hlZCk6IFBhc3MgYWxvbmcgc2lnbmlmaWNhbnRDaGFuZ2UKICAgICAgICBmcm9tIHRoZSBldmVudCB0byBfcmVmcmVzaFByZXNlcnZpbmdTY3JvbGxQb3NpdGlvbi4KCjIwMTMtMDMtMDggIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMzcyNjE1PiBSRUdSRVNTSU9OOiB0aGV2ZXJnZS5jb20gc2hvd3MgMiBkdXBsaWNhdGUgInJzLmpzIiBFeHRyYSBTY3JpcHQgcmVzb3VyY2VzCgogICAgICAgIFRoZSBVUkxzIHBhc3NlZCBpbiBzY3JpcHRQYXJzZWQgbWVzc2FnZXMgYXBwZWFycyB0byBub3QgbWF0Y2ggdXAgcHJvcGVybHkKICAgICAgICB3aXRoIHRoZSBSZXNvdXJjZSBVUkwuIFRlc3Rpbmcgb24gdGhldmVyZ2UuY29tIHdlIGNhbiBnZXQgc2NyaXB0IFVSTHMKICAgICAgICB0aGF0IGFyZSBlbmNvZGVkIHdoZXJlIHRoZSByZXNvdXJjZSBVUkwgaXMgZGVjb2RlZCwgYW5kIHdlIGNhbiBnZXQgc2NyaXB0CiAgICAgICAgVVJMcyB0aGF0IGhhdmUgYSBoYXNoIHdoZXJlIHRoZSByZXNvdXJjZSBVUkwgZG9lcyBub3QgaGF2ZSBhIGhhc2guIFByb3ZpZGUKICAgICAgICBhIGdlbmVyaWMgcmVzb3VyY2VGb3JTY3JpcHQgbG9va3VwLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9GcmFtZVJlc291cmNlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5yZXNvdXJjZUZvclNjcmlwdCk6CiAgICAgICAgV2FsayB0aGUgZnJhbWUgdHJlZSBsb29raW5nIGZvciBhIHJlc291cmNlIHdpdGggdGhlIHNhbWUgVVJMIGFzCiAgICAgICAgYSBzY3JpcHQuIENoZWNrIHRoZSB3aXRoIGZyYWdtZW50IGVuY29kZWQgYW5kIGRlY29kZWQgc2NyaXB0IFVSTCwKICAgICAgICBhbiB3aXRob3V0IGZyYWdtZW50IGVuY29kZWQgYW5kIGRlY29kZWQgc2NyaXB0IFVSTC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLnNob3dTb3VyY2VDb2RlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fc2NyaXB0V2FzQWRkZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9EZWJ1Z2dlck1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLnNjcmlwdHNGb3JVUkwpOgogICAgICAgICogVXNlckludGVyZmFjZS9EZWJ1Z2dlclNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fc2NyaXB0QWRkZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9TY3JpcHRDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdENvbnRlbnRWaWV3KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlQ29kZVRleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUudGV4dEVkaXRvclVwZGF0ZWRGb3JtYXR0aW5nKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlTWFwTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcE1hbmFnZXIucHJvdG90eXBlLl9sb2FkQW5kUGFyc2VTdWNjZWVkZWQpOgogICAgICAgIFdoZW4gd2UgaGF2ZSBhIHNjcmlwdCwgdXNlIHRoZSByZXNvdXJjZUZvclNjcmlwdCBpbnN0ZWFkIG9mIHJlc291cmNlRm9yVVJMLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVXRpbGl0aWVzLmpzOgogICAgICAgIChyZW1vdmVVUkxGcmFnbWVudCk6IGhlbHBlciBmcm8gcmVtb3ZpbmcgVVJMIGZyYWdtZW50LgoKMjAxMy0wMy0wOCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMzNzEwMTE+IE1pc2NsYXNzaWZpZWQgcmVzb3VyY2VzIGlmIHlvdSBvcGVuIHRoZSBpbnNwZWN0b3Igd2hpbGUgdGhlIHBhZ2UgaXMgbG9hZGluZwoKICAgICAgICBXaGVuIHRoZSBXZWIgSW5zcGVjdG9yIGlzIG9wZW5lZCBkdXJpbmcgYSBwYWdlIGxvYWQgaXQgZ2V0cyBhIGxpc3Qgb2YKICAgICAgICBhbGwgcmVzb3VyY2VzIGZyb20gdGhlIGJhY2tlbmQgdmlhIGdldFJlc291cmNlVHJlZS4gV2UgYXNzdW1lIHRoYXQgdGhlCiAgICAgICAgcmVzb3VyY2VzIGluIHRoYXQgdHJlZSBhcmUgY29tcGxldGVkIGxvYWRzLiBXZSBtYXkgbGF0ZXIgZGlzY292ZXIgdGhhdAogICAgICAgIHNvbWUgb2YgdGhvc2UgcmVzb3VyY2VzIGFyZSBhY3RpdmVseSBsb2FkaW5nLCBhbmQgdGhhdCBvdGhlciBhY3RpdmVseQogICAgICAgIGxvYWRpbmcgcmVzb3VyY2VzIGFyZSBub3QgaW4gdGhhdCBsaXN0LiBXZSBjYW4gZGV0ZWN0IGJvdGggb2YgdGhlc2UKICAgICAgICBjYXNlcyBieSByZWNlaXZpbmcgYSByZWNlaXZlUmVzcG9uc2UgbWVzc2FnZS4gSGFuZGxlIGl0IGFwcHJvcHJpYXRlbHkKICAgICAgICBzbyB0aGF0IGEgV2ViSW5zcGVjdG9yLlNjcmlwdCBjYW4gYWx3YXlzIGZpbmQgYSBXZWJJbnNwZWN0b3IuUmVzb3VyY2UuCiAgICAgICAgT3RoZXJ3aXNlLCB0aGUgU2NyaXB0IHdvdWxkIHNob3cgaXRzIG93biB0cmVlIGVsZW1lbnQgdW5kZXIgIkV4dHJhCiAgICAgICAgU2NyaXB0cyIgaW4gdGhlIHNpZGViYXIuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lUmVzb3VyY2VNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLnJlc291cmNlUmVxdWVzdERpZFJlY2VpdmVSZXNwb25zZSk6CiAgICAgICAgV2hlbiB3ZSBkb24ndCBoYXZlIGFuIGlkZW50aWZpZXIgYnV0IHdlIGZpbmQgYSBSZXNvdXJjZSBieSBVUkwsIHRoZW4gd2Ugc2hvdWxkCiAgICAgICAgdXBkYXRlIHRoZSBSZXNvdXJjZSB0byBzdGlsbCBiZSBsb2FkaW5nLiBJZiB3ZSBkb24ndCBoYXZlIGEgUmVzb3VyY2UgYXQgYWxsIHdlCiAgICAgICAgc2hvdWxkIGNyZWF0ZSBvbmUsIGl0IGlzIGN1cnJlbnRseSBsb2FkaW5nLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5yZXNvdXJjZVJlcXVlc3REaWRGaW5pc2hMb2FkaW5nKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5yZXNvdXJjZVJlcXVlc3REaWRGYWlsTG9hZGluZyk6CiAgICAgICAgV2UgY2FuIGFzc2VydCBhZ2Fpbi4gV2UgYWx3YXlzIGV4cGVjdCB0byBoYXZlIGEgUmVzb3VyY2UgYnkgdGhlIHRpbWUgd2UgZ2V0IGEKICAgICAgICBkaWRGaW5pc2hMb2FkaW5nIG9yIGRpZEZhaWxMb2FkaW5nIG1lc3NhZ2UuIElmIHdlIGRvbid0IHRoZW4gdGhpcyBjb3VsZCBiZQogICAgICAgIGFuIGV4dHJlbWUgZWRnZSBjYXNlIChsaWtlIGEgZGF0YVJlY2VpdmVkIHdpdGhvdXQgYSByZWNlaXZlZFJlc3BvbnNlKS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLnJldmVydE1hcmtBc0ZpbmlzaGVkKToKICAgICAgICBSZXZlcnQgdGhlIGZpbmlzaGVkIGFuZCBmaW5pc2hlZCB0aW1lc3RhbXAgcHJvcGVydGllcy4gV2hlbiBhCiAgICAgICAgZmluaXNoTG9hZGluZyBvciBkaWRGYWlsTG9hZGluZyBtZXNzYWdlIGNvbWVzIGluIHRoZSBzdGF0ZXMgd2lsbAogICAgICAgIGJlIHVwZGF0ZWQgYWdhaW4uCgoyMDEzLTAzLTA4ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIEFTU0VSVDogRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLmZyYW1lRGlkTmF2aWdhdGU6IGNvbnNvbGUuYXNzZXJ0KGZyYW1lKQoKICAgICAgICBGaXggYSB0eXBvLiBBIFdlYkluc3BlY3Rvci5SZXNvdXJjZSBoYXMgYSBwYXJlbnRGcmFtZSwgbm90IGEgZnJhbWUgYWNjZXNzb3IuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lUmVzb3VyY2VNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLmZyYW1lRGlkTmF2aWdhdGUpOgoKMjAxMy0wMy0wOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEZpeCB0aGUgZm9udCBzbW9vdGhpbmcgaW4gdGhlIFdlYiBJbnNwZWN0b3IuCgogICAgICAgIFRoaXMgaXMgbmVlZGVkIGFmdGVyIG1ha2luZyB0aGUgV2ViIEluc3BlY3RvciBXS1ZpZXcgdXNlIHRpbGVkIGRyYXdpbmcgc2luY2Ugb3VyIFdLVmlldyBpcyB0cmFuc3BhcmVudC4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyOTIyMTg1PiBSRUdSRVNTSU9OOiBUZXh0IGluIHRoZSBXZWIgSW5zcGVjdG9yIGlzIG5vdCBzdWItcGl4ZWwgYW50aS1hbGlhc2VkIGFueW1vcmUKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5jc3M6CiAgICAgICAgKGJvZHkpOiBBZGQgLXdlYmtpdC1mb250LXNtb290aGluZzogc3VicGl4ZWwtYW50aWFsaWFzZWQgdG8gZm9yY2Ugc3ViLXBpeGVsIGluIG91ciB0cmFuc3BhcmVudCBXZWJWaWV3LgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLmNzczoKICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwubmF2aWdhdGlvbiA+IC5lbXB0eS1jb250ZW50LXBsYWNlaG9sZGVyID4gLm1lc3NhZ2UpOiBSZW1vdmUgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQuCgoyMDEzLTAzLTA3ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRG9uJ3Qgc2Nyb2xsIHRoZSBTdHlsZSBkZXRhaWxzIHNpZGViYXIgaWYgdGhlIHBzZXVkbyBjbGFzcyBjaGVja2JveGVzIGFyZSBub3QgcHJlc2VudC4KCiAgICAgICAgVGhpcyBhcHBsaWVzIHdoZW4gaW5zcGVjdGluZyBhbiBpT1MgNiBkZXZpY2Ugb3Igc2ltdWxhdG9yLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLmdldCBfaW5pdGlhbFNjcm9sbE9mZnNldCk6IFJldHVybiAwCiAgICAgICAgaWYgd2UgY2FuJ3QgZm9yIHBzZXVkbyBjbGFzc2VzLgogICAgICAgICogVXNlckludGVyZmFjZS9TdHlsZURldGFpbHNQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlRGV0YWlsc1BhbmVsLnByb3RvdHlwZS5nZXQgX2luaXRpYWxTY3JvbGxPZmZzZXQpOiBEaXR0by4KCjIwMTMtMDMtMDcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBEaXNwbGF5IGFwcGxpZWQgbWVkaWEgcXVlcmllcyBpbiB0aGUgbmV3IFN0eWxlIGRldGFpbHMgc2lkZWJhci4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMzc2MTI5PgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiBVcGRhdGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9SdWxlc1N0eWxlRGV0YWlsc1BhbmVsLmNzczoKICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuZGV0YWlscy5jc3Mtc3R5bGUgLnJ1bGVzIC5sYWJlbCk6IFJlbmFtZWQgZnJvbSAuaW5oZXJpdGVkLWxhYmVsLgogICAgICAgICguc2lkZWJhciA+IC5wYW5lbC5kZXRhaWxzLmNzcy1zdHlsZSAucnVsZXMgLmxhYmVsIC5nby10by1saW5rKTogQWRkZWQuCiAgICAgICAgKC5zaWRlYmFyID4gLnBhbmVsLmRldGFpbHMuY3NzLXN0eWxlIC5ydWxlcyAubGFiZWwgKyAuc3R5bGUtZGVjbGFyYXRpb24tc2VjdGlvbik6IEFkZGVkLgogICAgICAgICguc2lkZWJhciA+IC5wYW5lbC5kZXRhaWxzLmNzcy1zdHlsZSAucnVsZXMgLm5ldy1ydWxlKTogVHdlYWtlZCBvcGFjaXR5IHRvIGJldHRlciBtYXRjaCAubGFiZWwuCiAgICAgICAgKC5zaWRlYmFyID4gLnBhbmVsLmRldGFpbHMuY3NzLXN0eWxlIC5ydWxlcyAubmV3LXJ1bGU6aG92ZXIpOiBEaXR0by4KICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuZGV0YWlscy5jc3Mtc3R5bGUgLnJ1bGVzIC5uZXctcnVsZTphY3RpdmUpOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUnVsZXNTdHlsZURldGFpbHNQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJ1bGVzU3R5bGVEZXRhaWxzUGFuZWwucHJvdG90eXBlLnJlZnJlc2gubWVkaWFMaXN0c0VxdWFsKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SdWxlc1N0eWxlRGV0YWlsc1BhbmVsLnByb3RvdHlwZS5yZWZyZXNoLmZpbHRlcmVkTWVkaWFMaXN0KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SdWxlc1N0eWxlRGV0YWlsc1BhbmVsLnByb3RvdHlwZS5yZWZyZXNoKTogT25seSBpbmNsdWRlIHRoZSBtZWRpYSBsaXN0IGlmIGl0IGlzCiAgICAgICAgZGlmZmVyZW50IGZyb20gdGhlIHByZXZpb3VzIG1lZGlhIGxpc3Qgc2hvd24uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGVMb2NhdGlvbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVMb2NhdGlvbi5wcm90b3R5cGUuaXNFcXVhbCk6IEFkZGVkLgoKMjAxMy0wMy0wNyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEZpeCBhIHR5cG8gaW4gdGhlIERhc2hib2FyZCB0b29sdGlwcy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMzY1NjY5PiBbV2ViSW5zcGVjdG9yXSB0eXBvIGluIHNvdXJjZSAtICJjbGljayB0byBzaG93IHRvIHRoZSIgc2hvdWxkIGJlICJjbGljayB0byBzaG93IHRoZSIKCiAgICAgICAgUmV2aWV3ZWQgYnkgUmlja3kgTW9uZGVsbG8uCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiBVcGRhdGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9EYXNoYm9hcmRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGFzaGJvYXJkVmlldyk6IFJlbW92ZWQgInRvIiBmcm9tIHR3byB0b29sdGlwcy4KCjIwMTMtMDMtMDcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBGaXggdGhlIHdvcmQgd3JhcHBpbmcgZm9yIGxvbmcgb3JpZ2lucyB0aGF0IGFyZSBsaW5rcy4KCiAgICAgICAgQWxzbyBmaXhlcyB0aGUgbG9jYXRpb24gYW5kIHdyYXBwaW5nIG9mIHRoZSByZWFkLW9ubHkgbG9jayBpY29uLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMzNjU5MzU+IExvbmcgQ1NTIHJlc291cmNlIG5hbWVzIGNhdXNlcyBwb29yIGxpbmUgd3JhcHBpbmcgaW4gU3R5bGUgc2lkZWJhcgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURlY2xhcmF0aW9uU2VjdGlvbi5jc3M6CiAgICAgICAgKC5zdHlsZS1kZWNsYXJhdGlvbi1zZWN0aW9uLmxvY2tlZCA+IC5oZWFkZXI6OmJlZm9yZSk6IENoYW5nZWQgZnJvbSBhZnRlciBzbyB0aGUgbG9jayBzdGlja3MKICAgICAgICB0byB0aGUgdG9wIG9mIHRoZSBzZWN0aW9uIGFzIGludGVuZGVkIGluc3RlYWQgb2Ygb24gdGhlIGxhc3QgbGluZS4gQWRkIGEgbGVmdCBtYXJnaW4gdG8gcHJldmVudAogICAgICAgIHRoZSBvcmlnaW4gZnJvbSB0b3VjaGluZyB0aGUgaWNvbi4KICAgICAgICAoLnN0eWxlLWRlY2xhcmF0aW9uLXNlY3Rpb24gPiAuaGVhZGVyID4gLm9yaWdpbik6IFJlbW92ZSBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgYW5kIHZlcnRpY2FsLWFsaWduLgogICAgICAgIEFkZGVkIHdvcmQtd3JhcDogYnJlYWstd29yZCBhbmQgd2hpdGUtc3BhY2U6IG5vd3JhcCB0byBwcmV2ZW50IGJyZWFraW5nIHRoZSBidWlsdC1pbiBvcmlnaW5zIGFtb25nCiAgICAgICAgbXVsdGlwbGUgbGluZXMuCiAgICAgICAgKC5zdHlsZS1kZWNsYXJhdGlvbi1zZWN0aW9uID4gLmhlYWRlciA+IC5vcmlnaW4gYSk6IEFkZGVkLiBTZXQgd2hpdGUtc3BhY2UgdG8gbm9ybWFsIHRvIGFsbG93IGl0CiAgICAgICAgdG8gYnJlYWsgYWxvbmcgbXVsdGlwbGUgbGluZXMuCgoyMDEzLTAzLTA3ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgSW5kZW50IHdyYXBwZWQgbGluZXMgYnkgMiBleHRyYSBzcGFjZXMgdG8gYmV0dGVyIGJyZWFrIHVwIGxvbmcgbGluZXMgaW4gdGhlIGRldGFpbHMgc2lkZWJhci4KCiAgICAgICAgQW4gZWFybGllciBjaGFuZ2UgbWFkZSBpdCB3b3JrIGZvciBlZGl0YWJsZSBzdHlsZXMsIHRoaXMgbWFrZXMgaXQgd29yayBmb3IgcmVhZC1vbmx5IHN0eWxlcy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMzEwOTgzPiBMb25nIHN0eWxlcyB0aGF0IHdyYXAgYXJlIGhhcmQgdG8gcmVhZCBpbiBuZXcgU3R5bGUgZGV0YWlscyBzaWRlYmFyLgoKICAgICAgICBSZXZpZXdlZCBieSBSaWNreSBNb25kZWxsby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLmNzczoKICAgICAgICAoLmNzcy1zdHlsZS10ZXh0LWVkaXRvci5yZWFkLW9ubHkgPiAuQ29kZU1pcnJvciBwcmUpOgoKMjAxMy0wMy0wNyAgSmVzc2llIEJlcmxpbiAgPGpiZXJsaW5AYXBwbGUuY29tPgoKICAgICAgICBSYW4gdXBkYXRlLXNhZmFyaS1sb2NhbGl6YWJsZS1zdHJpbmdzLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKCjIwMTMtMDMtMDcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgQXJyYXkubGFzdFZhbHVlIGFuZCBzdGFydCB1c2luZyBpdC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUuX3NjYW5TdHJpbmdGb3JFeHByZXNzaW9uKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29kZU1pcnJvckZvcm1hdHRlcnMuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5nZXQgbGFzdENoaWxkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlRWxlbWVudC5wcm90b3R5cGUuX3VwZGF0ZUNoaWxkcmVuKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVFbGVtZW50LnByb3RvdHlwZS5tb3ZlVG9OZXh0QXR0cmlidXRlSWZOZWVkZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUVsZW1lbnQucHJvdG90eXBlLl9hdHRyaWJ1dGVFZGl0aW5nQ29tbWl0dGVkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YUdyaWQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhR3JpZC5wcm90b3R5cGUuc29ydE5vZGVzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZS5wcm90b3R5cGUudHJhdmVyc2VQcmV2aW91c05vZGUpOgogICAgICAgICogVXNlckludGVyZmFjZS9Gb3JtYXR0ZXJDb250ZW50QnVpbGRlci5qczoKICAgICAgICAoRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIucHJvdG90eXBlLnJlbW92ZUxhc3ROZXdsaW5lKToKICAgICAgICAoRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIucHJvdG90eXBlLl9hZGRGb3JtYXR0ZWRMaW5lRW5kaW5nKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSGllcmFyY2hpY2FsUGF0aE5hdmlnYXRpb25JdGVtLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSGllcmFyY2hpY2FsUGF0aE5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5nZXQgbGFzdENvbXBvbmVudCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3BlY3RvckJhY2tlbmQuanM6CiAgICAgICAgKEluc3BlY3RvckJhY2tlbmRDbGFzcy5wcm90b3R5cGUuX3NlbmRNZXNzYWdlVG9CYWNrZW5kKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dFByb21wdC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlLl9jb21wbGV0aW9uc1JlYWR5KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLnByb3RvdHlwZS5ldmVudFJlY29yZGVkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVPdmVydmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lT3ZlcnZpZXcucHJvdG90eXBlLnVwZGF0ZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1V0aWxpdGllcy5qczoKCjIwMTMtMDMtMDcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBVc2UgQXJyYXkuY29udGFpbnMgaW5zdGVhZCBvZiBpbmRleE9mLgoKICAgICAgICBSZXZpZXdlZCBieSBBbnRvaW5lIFF1aW50LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnJhbmNoLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJhbmNoLnByb3RvdHlwZS5hZGRSZXZpc2lvbik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1J1bGUuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb24uanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblNlY3Rpb24ucHJvdG90eXBlLnJlZnJlc2gpOgogICAgICAgICogVXNlckludGVyZmFjZS9Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLl9nZW5lcmF0ZUNTU0NvbXBsZXRpb25zKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudEJyb3dzZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuX3VwZGF0ZUNvbnRlbnRWaWV3U2VsZWN0aW9uUGF0aE5hdmlnYXRpb25JdGVtKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudFZpZXdDb250YWluZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlld0NvbnRhaW5lci5wcm90b3R5cGUuc2hvd0NvbnRlbnRWaWV3KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NTm9kZS5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NTm9kZVN0eWxlcy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLl9wYXJzZVN0eWxlRGVjbGFyYXRpb25QYXlsb2FkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0dlbmVyYWxUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkdlbmVyYWxUcmVlRWxlbWVudC5wcm90b3R5cGUuYWRkQ2xhc3NOYW1lKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkdlbmVyYWxUcmVlRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlQ2xhc3NOYW1lKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTGF5ZXJUcmVlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZU1hbmFnZXIucHJvdG90eXBlLnZhcik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05hdmlnYXRpb25CYXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uQmFyLnByb3RvdHlwZS5fZmluZE5hdmlnYXRpb25JdGVtKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2lkZWJhci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXIucHJvdG90eXBlLmZpbmRTaWRlYmFyUGFuZWwpOgoKMjAxMy0wMy0wNyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIERvbid0IGlnbm9yZSB1c2VyIGFnZW50IHJ1bGVzIHdoZW4gZm9yY2VkIHBzZXVkbyBjbGFzc2VzIGNoYW5nZS4KCiAgICAgICAgTm9ybWFsbHkgdGhlIFJlZnJlc2hlZCBldmVudCBpcyBub3QgZmlyZWQgb25seSB3aGVuIHVzZXIgYWdlbnQgcnVsZXMgY2hhbmdlLCBkdWUgdG8gYSBidWcKICAgICAgICBpbiBXZWJDb3JlLiBIb3dldmVyLCB3ZSBuZWVkIHRvIGZpcmUgaXQgd2hlbiB0aGUgZm9yY2VkIHBzZXVkbyBjbGFzc2VzIGNoYW5nZSBzaW5jZSB0aGVyZQogICAgICAgIGFyZSBiYXNlIHJ1bGVzIGZvciBtb3N0IG9mIHRoZSBwc2V1ZG8gY2xhc3NlcyB0aGF0IG5lZWQgdG8gc2hvdyB1cCBpbiB0aGUgc2lkZWJhci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGVTdHlsZXMuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5yZWZyZXNoLmZldGNoZWRDb21wdXRlZFN0eWxlKTogRG9uJ3QgY2hlY2sgZm9yCiAgICAgICAgdXNlciBhZ2VudCBydWxlcyBpZiBfaW5jbHVkZVVzZXJBZ2VudFJ1bGVzT25OZXh0UmVmcmVzaCBpcyB0cnVlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuX21hcmtBc05lZWRzUmVmcmVzaCk6IEFkZGVkIGluY2x1ZGVVc2VyQWdlbnRSdWxlcy4KICAgICAgICBTZXQgX2luY2x1ZGVVc2VyQWdlbnRSdWxlc09uTmV4dFJlZnJlc2ggaWYgaW5jbHVkZVVzZXJBZ2VudFJ1bGVzIGlzIHRydWUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5fcHNldWRvQ2xhc3Nlc0RpZENoYW5nZSk6IFBhc3MgdHJ1ZSB0byBfbWFya0FzTmVlZHNSZWZyZXNoLgoKMjAxMy0wMy0wNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBjaGVja2JveGVzIHRoYXQgYWxsb3cgZm9yY2luZyBwc2V1ZG8gY2xhc3NlcyBpbiB0aGUgU3R5bGUgZGV0YWlscyBzaWRlYmFyLgoKICAgICAgICBUaGUgY2hlY2tib3hlcyBhcmUgc2Nyb2xsZWQgb2ZmIHRoZSB0b3AgaWYgdGhlcmUgYXJlIG5vIGZvcmNlZCBwc2V1ZG8gY2xhc3Nlcy4KICAgICAgICBXaGVuIHRoZXJlIGFyZSBmb3JjZWQgY2xhc3NlcyB0aGUgY2hlY2tib3hlcyBhcmUgaW5pdGlhbGx5IHZpc2libGUuIEFsc28gd2UgY2FuCiAgICAgICAgb25seSBzY3JvbGwgdGhlbSBhd2F5IHdoZW4gdGhlcmUgaXMgZW5vdWdoIGNvbnRlbnQgdG8gc2Nyb2xsLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMxNDM1NTU+IEFkZCB0aGUgYWJpbGl0eSB0byB0b2dnbGUgZm9yY2VkIENTUyBwc2V1ZG8tY2xhc3NlcyBmcm9tIHN0eWxlIHNpZGViYXIKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZWNsYXJhdGlvblNlY3Rpb24uY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwuY3NzOgogICAgICAgICguc2lkZWJhciA+IC5wYW5lbC5kZXRhaWxzLmNzcy1zdHlsZSA+IC5jb250ZW50ID4gLnBzZXVkby1jbGFzc2VzKToKICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuZGV0YWlscy5jc3Mtc3R5bGUgPiAuY29udGVudCA+IC5wc2V1ZG8tY2xhc3NlcyA+IGxhYmVsKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUucmVmcmVzaCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXJzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lcnMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5nZXQgX2luaXRpYWxTY3JvbGxPZmZzZXQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fbmF2aWdhdGlvbkl0ZW1TZWxlY3RlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9mb3JjZWRQc2V1ZG9DbGFzc0NoZWNrYm94Q2hhbmdlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl91cGRhdGVQc2V1ZG9DbGFzc0NoZWNrYm94ZXMpOgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlLmNhbkZvcmNlUHNldWRvQ2xhc3Nlcyk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUVsZW1lbnQucHJvdG90eXBlLl9wb3B1bGF0ZVRhZ0NvbnRleHRNZW51KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3R5bGVEZXRhaWxzUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZURldGFpbHNQYW5lbC5wcm90b3R5cGUuZ2V0IF9pbml0aWFsU2Nyb2xsT2Zmc2V0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlRGV0YWlsc1BhbmVsLnByb3RvdHlwZS5fcmVmcmVzaFByZXNlcnZpbmdTY3JvbGxQb3NpdGlvbik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1V0aWxpdGllcy5qczoKICAgICAgICAoQXJyYXkucHJvdG90eXBlLmNvbnRhaW5zKTogQWRkZWQuCgoyMDEzLTAzLTA2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUmVtb3ZlIG1vcmUgZGVhZCBjb2RlIGZyb20gQ1NTU3R5bGVNYW5hZ2VyIHRoYXQgSSBtaXNzZWQuCgogICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wYXJzZVJ1bGVBcnJheVBheWxvYWQpOiBSZW1vdmVkLgoKMjAxMy0wMy0wNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBtaXNzaW5nIGltYWdlIEltYWdlcy9Mb2NrZWQucGRmLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMzNTU4NjI+CgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTG9ja2VkLnBkZjogQWRkZWQuCgoyMDEzLTAzLTA1ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGFkZGluZyBuZXcgcnVsZXMgaW4gdGhlIFN0eWxlIGRldGFpbHMgc2lkZWJhci4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExMzI2MDg2PiBSRUdSRVNTSU9OIChTYWZhcmkgNik6IENhbid0IGFkZCBuZXcgc2VsZWN0b3JzIC8gcnVsZXMKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczogVXBkYXRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZWNsYXJhdGlvblNlY3Rpb24uY3NzOgogICAgICAgIChkaXY6bm90KC5zdHlsZS1kZWNsYXJhdGlvbi1zZWN0aW9uKSArIC5zdHlsZS1kZWNsYXJhdGlvbi1zZWN0aW9uKTogQWRkZWQuIEdlbmVyaWMKICAgICAgICBydWxlIHRvIGFkZCBhIHNoYWRvdyBvbiB0aGUgdG9wIHdoZW4gc29tZXRoaW5nIGlzIGJldHdlZW4gc2VjdGlvbnMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGVTdHlsZXMuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5hZGRSdWxlKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5fY29sbGVjdFN0eWxlc0luQ2FzY2FkZU9yZGVyKTogSW5jbHVkZSBJbnNwZWN0b3IKICAgICAgICBzdHlsZXMuIEFsc28gY29sbGVjdCB1c2VyIGFuZCB1c2VyIGFnZW50IHN0eWxlcyBpbnRvIG9uZSBhcnJheS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1BsdXMucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUnVsZXNTdHlsZURldGFpbHNQYW5lbC5jc3M6CiAgICAgICAgKC5zaWRlYmFyID4gLnBhbmVsLmRldGFpbHMuY3NzLXN0eWxlIC5ydWxlcyAubmV3LXJ1bGUpOiBBZGRlZC4KICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuZGV0YWlscy5jc3Mtc3R5bGUgLnJ1bGVzIC5uZXctcnVsZSBpbWcpOiBBZGRlZC4KICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuZGV0YWlscy5jc3Mtc3R5bGUgLnJ1bGVzIC5uZXctcnVsZTpob3Zlcik6IEFkZGVkLgogICAgICAgICguc2lkZWJhciA+IC5wYW5lbC5kZXRhaWxzLmNzcy1zdHlsZSAucnVsZXMgLm5ldy1ydWxlOmFjdGl2ZSk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9SdWxlc1N0eWxlRGV0YWlsc1BhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUnVsZXNTdHlsZURldGFpbHNQYW5lbC5wcm90b3R5cGUucmVmcmVzaC5hcHBlbmRTdHlsZVNlY3Rpb24pOiBGb2N1cyB0aGUgbmV3CiAgICAgICAgaW5zcGVjdG9yIHJ1bGUgd2hlbiBpdCBpcyBhZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJ1bGVzU3R5bGVEZXRhaWxzUGFuZWwucHJvdG90eXBlLnJlZnJlc2gpOiBDcmVhdGUgYSBOZXcgUnVsZSBidXR0b24uCiAgICAgICAgKFdlYkluc3BlY3Rvci5SdWxlc1N0eWxlRGV0YWlsc1BhbmVsLnByb3RvdHlwZS5fbmV3UnVsZUNsaWNrZWQpOiBBZGRlZC4KCjIwMTMtMDMtMDUgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBSZW1vdmUgZGVhZCBjb2RlIGZyb20gQ1NTU3R5bGVNYW5hZ2VyLgoKICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZU1hbmFnZXIuanM6CiAgICAgICAgUmVtb3ZlIG9sZCBjb2RlIGFuZCB0aGUgY29weXJpZ2h0IHRoYXQgd2VudCB3aXRoIHRoZSBjb2RlLiBOb25lIG9mIHRoZSByZW1haW5pbmcKICAgICAgICBjb2RlIGNhbWUgZnJvbSB0aGUgb3JpZ2luYWwgb3BlbiBzb3VyY2UgZmlsZS4KCjIwMTMtMDMtMDQgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBbHdheXMgaW5zZXJ0IGEgc3BhY2UgYWZ0ZXIgIjoiIHdoZW4gcHJldHR5IHByaW50aW5nIGluIHRoZSBTdHlsZSBkZXRhaWxzIHNpZGViYXIuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1Byb3BlcnR5LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90eXBlLmdldCBzeW50aGVzaXplZFRleHQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5nZXQgdGV4dCk6IEZhY3RvcmVkIGludG8gc3ludGhlc2l6ZWRUZXh0LgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5fcmVzZXRDb250ZW50KTogVXNlIHN5bnRoZXNpemVkVGV4dC4KICAgICAgICBVc2luZyBDU1NQcm9wZXJ0eS50ZXh0IHN0aWxsIHVzZXMgdGhlIG9yaWdpbmFsIHRleHQgd2hpY2ggbWlnaHQgbm90IGhhdmUgYSBzcGFjZSBhZnRlciAiOiIuCgoyMDEzLTAzLTA0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgU2tpcCBpbnZhbGlkIHByb3BlcnRpZXMgd2hlbiBtYXJraW5nIG92ZXJyaWRkZW4gcHJvcGVydGllcy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NTm9kZVN0eWxlcy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLl9tYXJrT3ZlcnJpZGRlblByb3BlcnRpZXMpOiBDaGVjayBmb3Igbm90IHZhbGlkIGFuZCBjb250aW51ZSBlYXJseS4KCjIwMTMtMDMtMDQgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBGbGFnIHByb3BlcnRpZXMgdGhhdCBoYXZlIG90aGVyIHZlbmRvciBrZXl3b3JkcyBpbiB0aGUgdmFsdWUgc28gdGhleSBhcmUgbm90IGNyb3NzZWQgb3V0IGluIHJlZC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTUHJvcGVydHkuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUuaGFzT3RoZXJWZW5kb3JOYW1lT3JLZXl3b3JkKTogQ2hlY2sgcHJvcGVydHlWYWx1ZUhhc090aGVyVmVuZG9yS2V5d29yZCB0b28uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5cGUucHJvcGVydHlWYWx1ZUhhc090aGVyVmVuZG9yS2V5d29yZCk6IEFkZGVkLgoKMjAxMy0wMy0wNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEluZGVudCB3cmFwcGVkIGxpbmVzIGJ5IDIgZXh0cmEgc3BhY2VzIHRvIGJldHRlciBicmVhayB1cCBsb25nIGxpbmVzIGluIHRoZSBkZXRhaWxzIHNpZGViYXIuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzMxMDk4Mz4gTG9uZyBzdHlsZXMgdGhhdCB3cmFwIGFyZSBoYXJkIHRvIHJlYWQgaW4gbmV3IFN0eWxlIGRldGFpbHMgc2lkZWJhci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IuY3NzOgogICAgICAgICguY3NzLXN0eWxlLXRleHQtZWRpdG9yID4gLkNvZGVNaXJyb3IgcHJlKTogVHdlYWsgdGhlIHBhZGRpbmcgYW5kIHRleHQtaW5kZW50LgoKMjAxMy0wMy0wNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBDb2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIgYW5kIHN0YXJ0IHVzaW5nIGl0IGluIENTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLgoKICAgICAgICBUaGlzIHJlc3RvcmVzIGF1dG8gY29tcGxldGUgdG8gdGhlIFN0eWxlIGRldGFpbHMgc2lkZWJhciBhbmQgYWxzbyBwYXZlcyB0aGUgd2F5IGZvciB1c2luZwogICAgICAgIENvZGVNaXJyb3IgZm9yIHRoZSBjb25zb2xlIHByb21wdC4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMzA0OTYyPiBSRUdSRVNTSU9OOiBTdHlsZSBwcm9wZXJ0eSBhdXRvY29tcGxldGUgbWlzc2luZyBmcm9tIHRoZSBTdHlsZSBkZXRhaWxzIHNpZGViYXIKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IuY3NzOgogICAgICAgICguY3NzLXN0eWxlLXRleHQtZWRpdG9yID4gLkNvZGVNaXJyb3IgLkNvZGVNaXJyb3ItbGluZXMgLmNvbXBsZXRpb24tcGVuZGluZyAuY3NzLXN0eWxlLWRlY2xhcmF0aW9uLXByb3BlcnR5LmludmFsaWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5jb21wbGV0aW9uQ29udHJvbGxlckNvbXBsZXRpb25zSGlkZGVuKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5fY29udGVudENoYW5nZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLmNzczogQWRkZWQuCiAgICAgICAgKC5Db2RlTWlycm9yIC5Db2RlTWlycm9yLWxpbmVzIC5jb21wbGV0aW9uLWhpbnQpOgogICAgICAgICogVXNlckludGVyZmFjZS9Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUuZ2V0IGRlbGVnYXRlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUudXBkYXRlQ29tcGxldGlvbnMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5pc0NvbXBsZXRpb25DaGFuZ2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5pc1Nob3dpbmdDb21wbGV0aW9ucyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLmhpZGVDb21wbGV0aW9ucyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLmNsb3NlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUuY29tcGxldGlvblN1Z2dlc3Rpb25zU2VsZWN0ZWRDb21wbGV0aW9uKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUuY29tcGxldGlvblN1Z2dlc3Rpb25zQ2xpY2tlZENvbXBsZXRpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5faGFzUGVuZGluZ0NvbXBsZXRpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5fbm90aWZ5Q29tcGxldGlvbnNIaWRkZW5Tb29uKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUuX2FwcGx5Q29tcGxldGlvbkhpbnQudXBkYXRlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUuX2FwcGx5Q29tcGxldGlvbkhpbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5fY29tbWl0Q29tcGxldGlvbkhpbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZS51cGRhdGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5fcmVtb3ZlQ29tcGxldGlvbkhpbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5fcmVtb3ZlUGVuZGluZ0NvbXBsZXRpb25MaW5lU3R5bGVDbGFzcy5yZW1vdmVQZW5kaW5nU3R5bGVDbGFzcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLl9yZW1vdmVQZW5kaW5nQ29tcGxldGlvbkxpbmVTdHlsZUNsYXNzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUuaXNTdG9wQ2hhcmFjdGVyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUuaXNPcGVuQnJhY2tldENoYXJhY3Rlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLmlzQ2xvc2VCcmFja2V0Q2hhcmFjdGVyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUubWF0Y2hpbmdCcmFja2V0Q2hhcmFjdGVyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUuX3NjYW5TdHJpbmdGb3JFeHByZXNzaW9uKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUuX2NvbXBsZXRlQXRDdXJyZW50UG9zaXRpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5fZ2VuZXJhdGVDU1NDb21wbGV0aW9ucyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLl9nZW5lcmF0ZUphdmFTY3JpcHRDb21wbGV0aW9ucyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLl9oYW5kbGVVcEtleSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLl9oYW5kbGVEb3duS2V5KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUuX2hhbmRsZVJpZ2h0T3JFbnRlcktleSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLl9oYW5kbGVFc2NhcGVLZXkpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5faGFuZGxlVGFiS2V5KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUuX2hhbmRsZUNoYW5nZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLl9oYW5kbGVDdXJzb3JBY3Rpdml0eSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLl9oYW5kbGVIaWRlQWN0aW9uKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29tcGxldGlvblN1Z2dlc3Rpb25zVmlldy5jc3M6IEFkZGVkLgogICAgICAgICguY29tcGxldGlvbi1zdWdnZXN0aW9ucyk6CiAgICAgICAgKC5jb21wbGV0aW9uLXN1Z2dlc3Rpb25zID4gLmNvbXBsZXRpb24tc3VnZ2VzdGlvbnMtY29udGFpbmVyKToKICAgICAgICAoLmNvbXBsZXRpb24tc3VnZ2VzdGlvbnMtY29udGFpbmVyID4gLml0ZW0pOgogICAgICAgICguY29tcGxldGlvbi1zdWdnZXN0aW9ucy1jb250YWluZXIgPiAuaXRlbTpob3Zlcik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbXBsZXRpb25TdWdnZXN0aW9uc1ZpZXcuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29tcGxldGlvblN1Z2dlc3Rpb25zVmlldyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db21wbGV0aW9uU3VnZ2VzdGlvbnNWaWV3LnByb3RvdHlwZS5nZXQgZGVsZWdhdGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29tcGxldGlvblN1Z2dlc3Rpb25zVmlldy5wcm90b3R5cGUuZ2V0IHZpc2libGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29tcGxldGlvblN1Z2dlc3Rpb25zVmlldy5wcm90b3R5cGUuZ2V0IHNlbGVjdGVkSW5kZXgpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29tcGxldGlvblN1Z2dlc3Rpb25zVmlldy5wcm90b3R5cGUuc2V0IHNlbGVjdGVkSW5kZXgpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29tcGxldGlvblN1Z2dlc3Rpb25zVmlldy5wcm90b3R5cGUuc2VsZWN0TmV4dCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db21wbGV0aW9uU3VnZ2VzdGlvbnNWaWV3LnByb3RvdHlwZS5zZWxlY3RQcmV2aW91cyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db21wbGV0aW9uU3VnZ2VzdGlvbnNWaWV3LnByb3RvdHlwZS5pc0hhbmRsaW5nQ2xpY2tFdmVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db21wbGV0aW9uU3VnZ2VzdGlvbnNWaWV3LnByb3RvdHlwZS5zaG93KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbXBsZXRpb25TdWdnZXN0aW9uc1ZpZXcucHJvdG90eXBlLmhpZGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29tcGxldGlvblN1Z2dlc3Rpb25zVmlldy5wcm90b3R5cGUudXBkYXRlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbXBsZXRpb25TdWdnZXN0aW9uc1ZpZXcucHJvdG90eXBlLmdldCBfc2VsZWN0ZWRJdGVtRWxlbWVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db21wbGV0aW9uU3VnZ2VzdGlvbnNWaWV3LnByb3RvdHlwZS5fbW91c2VEb3duKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbXBsZXRpb25TdWdnZXN0aW9uc1ZpZXcucHJvdG90eXBlLl9tb3VzZVVwKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbXBsZXRpb25TdWdnZXN0aW9uc1ZpZXcucHJvdG90eXBlLl9pdGVtQ2xpY2tlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKCjIwMTMtMDMtMDQgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgRGlzYWJsZSBzb21lIGZlYXR1cmVzIHdoaWxlIGNvbHVtbiBkZWJ1Z2dpbmcgaXMgYnJva2VuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTIxOTc3MT4gUkVHUkVTU0lPTiAoU2FmYXJpIDYpOiBDYW4ndCBwcmV0dHktcHJpbnQgSmF2YVNjcmlwdAoKICAgICAgICBUbyBwcmV2ZW50IGJyb2tlbiBiZWhhdmlvciBhbmQgYSBwb29yIGV4cGVyaWVuY2Ugd2l0aCBicmVha3BvaW50cyBhbmQKICAgICAgICBkZWJ1Z2dpbmcgYnV0IHN0aWxsIGFsbG93IGZvciBwcmV0dHktcHJpbnRpbmcgZGlzYWJsZSBzb21lIGZlYXR1cmVzCiAgICAgICAgcmVsYXRlZCB0byBjb2x1bW5zLiBXZSBjYW4gcmV2ZXJ0IHRoaXMgY2hhbmdlIGxhdGVyIGFuZCB0ZXN0IG1vcmUgd2hlbgogICAgICAgIHRoZSB1bmRlcmx5aW5nIGlzc3VlIGlzIGZpeGVkLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9EZWJ1Z2dlclNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdHJlZUVsZW1lbnRTZWxlY3RlZCk6CiAgICAgICAgSW5zdGVhZCBvZiBqdW1waW5nIHRvIHRoZSBkaXNwbGF5IGxvY2F0aW9uLCBqdW1wIHRvIHRoZSBvcmlnaW5hbCBsb2NhdGlvbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9jb250ZW50RGlkUG9wdWxhdGUpOgogICAgICAgIERvbid0IGF1dG9mb3JtYXQgaWYgd2UncmUgYmVpbmcgZGVidWdnZWQuCgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9hY3RpdmVDYWxsRnJhbWVEaWRDaGFuZ2UpOgogICAgICAgIElmIHdlIGFyZSBnb2luZyB0byBiZSBkZWJ1Z2dlZCB1bmZvcm1hdC4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUudGV4dEVkaXRvckJyZWFrcG9pbnRBZGRlZCk6CiAgICAgICAgRGlzYWxsb3cgc2V0dGluZyBicmVha3BvaW50cyBpbiBmb3JtYXR0ZWQgY29udGVudC4KCjIwMTMtMDMtMDQgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgVXBkYXRlIENvZGVNaXJyb3IgdG8gVG9UICh2My4xKykgd2hpY2ggaW5jbHVkZXMgc29tZSBpbXBvcnRhbnQgcGVyZm9ybWFuY2UgZml4ZXMKCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExMjE5NzcxPiBSRUdSRVNTSU9OIChTYWZhcmkgNik6IENhbid0IHByZXR0eS1wcmludCBKYXZhU2NyaXB0CgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29kZW1pcnJvci5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9qYXZhc2NyaXB0LmpzOgoKMjAxMy0wMy0wNCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBTZXQgdGhlIEZvcm1hdHRlclNvdXJjZU1hcCBvbiBib3RoIFJlc291cmNlIGFuZCBTY3JpcHQgbGlrZSBTb3VyY2VNYXBzCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTIxOTc3MT4gUkVHUkVTU0lPTiAoU2FmYXJpIDYpOiBDYW4ndCBwcmV0dHktcHJpbnQgSmF2YVNjcmlwdAoKICAgICAgICBNb3N0IHNvdXJjZSBjb2RlIHRleHQgZWRpdG9ycyBhcmUgZm9yIFJlc291cmNlcywgbGlrZSBleHRlcm5hbCBzY3JpcHRzLgogICAgICAgIEhvd2V2ZXIgdGhlIGJhY2tlbmQgaWRlbnRpZmllcyBjYWxsIGZyYW1lcyB3aXRoIFNjcmlwdCBsaW5lIGFuZCBjb2x1bW4KICAgICAgICBpbmZvcm1hdGlvbi4gU28gdGhlIFNjcmlwdCBuZWVkcyB0byBrbm93IGFib3V0IHRoZSBSZXNvdXJjZSdzIGZvcm1hdHRlci4KCiAgICAgICAgV2UgcmVnaXN0ZXIgZm9yIGV2ZW50cyBpbiBjYXNlIHRoZSBleGVjdXRpb24gbGluZSBjaGFuZ2VzIG9uIHRoZSBmbHkuCiAgICAgICAgVGhpcyBjb3VsZCBoYXBwZW4gaWYgYSBicmVha3BvaW50IGlzIGhpdCBvbiBwYWdlIGxvYWQgb2YgYSBzY3JpcHQgdGhhdAogICAgICAgIGlzIGF1dG8gZm9ybWF0dGVkLiBXaGVuIHRoZSBwYWdlIGxvYWRzLCB0aGUgYnJlYWtwb2ludCBpcyBoaXQgYW5kIHRoZQogICAgICAgIGNhbGwgZnJhbWUgaXMgY3JlYXRlZCB3aXRoIHRoZSBvcmlnaW5hbCBsb2NhdGlvbiBhbmQgbm8gZm9ybWF0dGVyLiBXaGVuCiAgICAgICAgdGhlIHNjcmlwdCBSZXNvdXJjZSBpcyBzaG93biBpdCBnZXRzIGZvcm1hdHRlZCwgdGhlIGFzc29jaWF0ZWQgU2NyaXB0CiAgICAgICAgZ2V0cyB0aGUgZm9ybWF0dGVyIGFuZCB0aGUgYWN0aXZlIGNhbGwgZnJhbWUgbG9jYXRpb24gdXBkYXRlcyBpdHMKICAgICAgICBkaXNwbGF5IGxvY2F0aW9uLiBJbiB0aGF0IGNhc2UgdGhlIHRleHQgZWRpdG9yIGZvciB0aGUgUmVzb3VyY2UgbWF5CiAgICAgICAgbmVlZCB0byB1cGRhdGUgaXRzIGRpc3BsYXkgb2YgdGhlIGV4ZWN1dGlvbiBsaW5lIG51bWJlci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlQ29kZVRleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuY2xvc2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9hY3RpdmVDYWxsRnJhbWVEaWRDaGFuZ2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9hY3RpdmVDYWxsRnJhbWVTb3VyY2VDb2RlTG9jYXRpb25DaGFuZ2VkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS50ZXh0RWRpdG9yVXBkYXRlZEZvcm1hdHRpbmcpOgoKMjAxMy0wMy0wNCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBVcGRhdGUgRGlzcGxheSBTdHJpbmdzIGluIEJyZWFrcG9pbnQgYW5kIENhbGxGcmFtZSBUcmVlRWxlbWVudHMKCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExMjE5NzcxPiBSRUdSRVNTSU9OIChTYWZhcmkgNik6IENhbid0IHByZXR0eS1wcmludCBKYXZhU2NyaXB0CgogICAgICAgIElmIGEgYnJlYWtwb2ludCBpcyBvbiBhIGNvbHVtbiwgc2hvdyBsaW5lOmNvbHVtbi4gSWYgdGhlIGJyZWFrcG9pbnQgaXMKICAgICAgICBpbiBhIGZvcm1hdHRlZCB2aWV3LCBzZXQgdGhlIHN1YnRpdGxlIHRvIHRoZSBvcmlnaW5hbCBsb2NhdGlvbi4gSWYgYQogICAgICAgIGNhbGwgZnJhbWUgaXMgaW4gYSBmb3JtYXR0ZWQgc291cmNlLCBpbmNsdWRlIHRoZSBvcmlnaW5hbCBsb2NhdGlvbiBpbgogICAgICAgIHRoZSB0b29sdGlwLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VDb2RlTG9jYXRpb24uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlTG9jYXRpb24ucHJvdG90eXBlLm9yaWdpbmFsTG9jYXRpb25TdHJpbmcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZUxvY2F0aW9uLnByb3RvdHlwZS5kaXNwbGF5TG9jYXRpb25TdHJpbmcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZUxvY2F0aW9uLnByb3RvdHlwZS5fbG9jYXRpb25TdHJpbmcpOgogICAgICAgIFByb3ZpZGUgZ2VuZXJpYyBmaWxlOmxpbmU6Y29sdW1uIHN0cmluZyBzdXBwb3J0LgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnJlYWtwb2ludFRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludFRyZWVFbGVtZW50LnByb3RvdHlwZS5fdXBkYXRlVGl0bGVzKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ2FsbEZyYW1lVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DYWxsRnJhbWVUcmVlRWxlbWVudCk6CiAgICAgICAgVXBkYXRlIHN0cmluZ3Mgd2hlcmUgYXBwcm9wcmlhdGUuCgoyMDEzLTAzLTA0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIEF1dG9tYXRpY2FsbHkgcHJldHR5IHByaW50IGZpbGVzIHRoYXQgbG9vayBsaWtlIHRoZXkgYXJlIG1pbmlmaWVkLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTEyMTk3NzE+IFJFR1JFU1NJT04gKFNhZmFyaSA2KTogQ2FuJ3QgcHJldHR5LXByaW50IEphdmFTY3JpcHQKCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlQ29kZVRleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX2NvbnRlbnREaWRQb3B1bGF0ZSk6CgoyMDEzLTAzLTA0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIFVwZGF0ZSBicmVha3BvaW50IGhhbmRsaW5nIGZvciBmb3JtYXR0ZWQgY29udGVudAoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTEyMTk3NzE+IFJFR1JFU1NJT04gKFNhZmFyaSA2KTogQ2FuJ3QgcHJldHR5LXByaW50IEphdmFTY3JpcHQKCiAgICAgICAgVGV4dEVkaXRvciBhbmQgU291cmNlQ29kZVRleHRFZGl0b3IgYm90aCBoYXZlIGEgbWFwIHRoYXQgc3RvcmVzIGJyZWFrcG9pbnQKICAgICAgICBpbmZvcm1hdGlvbiBmb3IgZWRpdG9yIGxpbmVOdW1iZXIgYW5kIGNvbHVtbk51bWJlci4gRm9yIGVkaXRvcnMgaXQgbWFrZXMKICAgICAgICB0aGUgbW9zdCBzZW5zZSB0byBrZWVwIHRoZXNlIG1hcHMgY29uc2lzdGVudCB3aXRoIHRoZSBmb3JtYXR0ZWQgc3RhdGUgb2YKICAgICAgICB0aGUgZWRpdG9yLgoKICAgICAgICBUZXJtaW5vbG9neSB3aXRoIHRoaXMgaW4gbWluZCAiZWRpdG9yIGxpbmUgaW5mbyIgaXMgYWx3YXlzIHRoZSBsaW5lIGFuZAogICAgICAgIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGVkaXRvci4gSWYgdGhlIGVkaXRvcgogICAgICAgIGlzIGZvcm1hdHRlZCwgdGhpcyBpcyBhIGZvcm1hdHRlZCBsaW5lIGFuZCBjb2x1bW4gb2YgdGhlIHNvdXJjZUNvZGUuCiAgICAgICAgaWYgdGhlIGVkaXRvciBpcyBub3QgZm9ybWF0dGVkIHRoaXMgaXMgdGhlIG9yaWdpbmFsIGxpbmUgYW5kIGNvbHVtbiBvZgogICAgICAgIHRoZSBzb3VyY2VDb2RlLgoKICAgICAgICBBIHRyaWNreSBwYXJ0IGhlcmUgaXMgdGhhdCB3aXRoIGEgRm9ybWF0dGVyU291cmNlTWFwIGlzIHRoYXQgaXQgbWF5IG1hcAogICAgICAgIGEgc2ltcGxlIGxpbmU6MCB0byBhIG1vcmUgYWNjdXJhdGUgbGluZTojLiBGb3IgZXhhbXBsZSBzZXR0aW5nIHRoZQogICAgICAgIGJyZWFrcG9pbnQgb24gYSBwcmV0dHkgcHJpbnRlZCBzb3VyY2UgY29kZSB3aXRoIGxlYWRpbmcgd2hpdGVzcGFjZSwgdGhlCiAgICAgICAgYWNjdXJhdGUgbG9jYXRpb24gd2lsbCBub3QgYmUgY29sdW1uIDAgYnV0IGluc3RlYWQgYmUgdGhlIGNvbHVtbiAjIG9mCiAgICAgICAgdGhlIGZpcnN0IGNoYXJhY3RlciBvbiB0aGF0IGxpbmUuIFdoZW4gdGhpcyBoYXBwZW5zIHdlIG5lZWQgdG8gbWFrZSBzdXJlCiAgICAgICAgdGhhdCBib3RoIHRoZSBTb3VyY2VDb2RlVGV4dEVkaXRvciBhbmQgVGV4dEVkaXRvciBoYXZlIHN0b3JlZCB0aGUgbW9yZQogICAgICAgIGFjY3VyYXRlIGxvY2F0aW9uIGluIHRoZWlyIG1hcHMuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl91bmZvcm1hdHRlZExpbmVJbmZvRm9yRWRpdG9yTGluZUluZm8pOgogICAgICAgIEdpdmVuIGFuIGVkaXRvciBsaW5lIGluZm8sIHRoaXMgZ2l2ZXMgdXMgdGhlIG9yaWdpbmFsIGxpbmUgaW5mbyBkZXBlbmRpbmcgb24KICAgICAgICBpZiB0aGUgdGV4dCBlZGl0b3IgaXMgZm9ybWF0dGVkIG9yIG5vdC4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX2VkaXRvckxpbmVJbmZvRm9yU291cmNlQ29kZUxvY2F0aW9uKToKICAgICAgICBHaXZlbiBhIFNvdXJjZUNvZGVMb2NhdGlvbiB0aGlzIGdpdmVzIHVzIGEgbGluZSBpbmZvIGZvciB0aGUgdGV4dCBlZGl0b3IgZGVwZW5kaW5nCiAgICAgICAgb24gaWYgdGhlIHRleHQgZWRpdG9yIGlzIGZvcm1hdHRlZCBvciBub3QuIFNvdXJjZUNvZGVMb2NhdGlvbiBhbHJlYWR5IGhhbmRsZXMgdGhpcy4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3VwZGF0ZUJyZWFrcG9pbnRMb2NhdGlvbik6CiAgICAgICAgV2hlbiBhIGJyZWFrcG9pbnQgbW92ZXMsIHdlJ2xsIG5lZWQgdG8gdXBkYXRlIG91ciB0YWJsZXMgcmVtb3ZpbmcgdGhlIG9sZAogICAgICAgIGxvY2F0aW9uIGFuZCBzZXR0aW5nIHRoZSBuZXcgbG9jYXRpb24uIFNvdXJjZUNvZGVMb2NhdGlvbiBnaXZlcyB1cyB0aGUgb2xkCiAgICAgICAgYW5kIG5ldyBmb3JtYXR0ZWQgbG9jYXRpb24gd2hpY2ggaGFuZGxlcyBpZiB0aGUgdGV4dCBlZGl0b3IgaXMgZm9ybWF0dGVkIG9yIG5vdC4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUudGV4dEVkaXRvckJyZWFrcG9pbnRSZW1vdmVkKToKICAgICAgICBJZiB0aGUgdGV4dCBlZGl0b3IgaXMgZm9ybWF0dGVkLCBiZSBzdXJlIHRvIHJlbW92ZSBhIGJyZWFrcG9pbnQgd2l0aCB0aGUKICAgICAgICB1bmZvcm1hdHRlZCwgb3JpZ2luYWwgbG9jYXRpb24gYmVjYXVzZSB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGJhY2tlbmQuCgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLnRleHRFZGl0b3JCcmVha3BvaW50QWRkZWQpOgogICAgICAgIFdoZW4gdGhlIFRleHRFZGl0b3Igc2VuZHMgYSBkZWxlZ2F0ZSB1cCB0byB0aGUgU291cmNlQ29kZVRleHRFZGl0b3IgYWJvdXQKICAgICAgICBhIGJyZWFrcG9pbnQgYmVpbmcgYWRkZWQsIGl0IHdhaXRzIGZvciBhIHJlc3BvbnNlIHRvIHB1dCBpbnRvIGl0cyB0YWJsZS4KICAgICAgICBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBwcm92aWRlIHRoZSBhY2N1cmF0ZSByZXNvbHZlZCBsb2NhdGlvbi4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUudGV4dEVkaXRvckJyZWFrcG9pbnRNb3ZlZCk6CiAgICAgICAgV2hlbiB0aGUgVGV4dEVkaXRvciBzZW5kcyBhIGRlbGVnYXRlIHVwIHRvIHRoZSBTb3VyY2VDb2RlVGV4dEVkaXRvciBhYm91dAogICAgICAgIGEgYnJlYWtwb2ludCBiZWluZyBtb3ZlZCwgaXQgaGFzIGFscmVhZHkgcHV0IGFuIGVudHJ5IGludG8gaXRzIHRhYmxlIGF0CiAgICAgICAgbGluZSArIGNvbHVtbiAwLiBXZSB1cGRhdGUgdGhhdCBlbnRyeSB2aWEgdXBkYXRlQnJlYWtwb2ludExpbmVBbmRDb2x1bW4uCgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLnRleHRFZGl0b3JGb3JtYXR0aW5nRGlkQ2hhbmdlKToKICAgICAgICBBZnRlciBwcmV0dHkgcHJpbnRpbmcgdGhlIGVkaXRvcidzIHZhbHVlIHdhcyBjb21wbGV0ZWx5IGNoYW5nZWQuIFNvbWUKICAgICAgICBicmVha3BvaW50cyBtYXkgaGF2ZSBtb3ZlZCwgc29tZSBtaWdodCBub3QgaGF2ZS4gSWdub3JlIHRoZSBEaXNwbGF5TG9jYXRpb24KICAgICAgICBjaGFuZ2UgZXZlbnRzIHdoZW4gc2V0dGluZyB0aGUgZm9ybWF0dGVyIG9uIHRoZSBTb3VyY2VDb2RlIGFuZCB1cGRhdGUgYWxsCiAgICAgICAgdGhlIGJyZWFrcG9pbnQgbWFwIGxvY2F0aW9ucyBmb3Igb3Vyc2VsZiBhbmQgdGhlIHVuZGVybHlpbmcgVGV4dEVkaXRvci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS51cGRhdGVCcmVha3BvaW50TGluZUFuZENvbHVtbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fZ3V0dGVyTW91c2VEb3duKToKICAgICAgICBVcGRhdGUgb3Igc2V0IGJyZWFrcG9pbnQgaW5mbyBlbnRpcmVzIHdpdGggYWNjdXJhbnRlIGxpbmUgYW5kIGNvbHVtbiBpbmZvLgoKMjAxMy0wMy0wNCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBQcmV0dHkgcHJpbnQgYW5kIGluY29ycG9yYXRlIHRoZSBmb3JtYXR0ZWQgbG9jYXRpb24gaW50byB0aGUgU291cmNlQ29kZUxvY2F0aW9uIGRpc3BsYXkgbG9jYXRpb24KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExMjE5NzcxPiBSRUdSRVNTSU9OIChTYWZhcmkgNik6IENhbid0IHByZXR0eS1wcmludCBKYXZhU2NyaXB0CgogICAgICAgIFdoZW4gYSBTb3VyY2VDb2RlVGV4dEVkaXRvciBmb3JtYXRzIGEgU291cmNlQ29kZSBpdCBwcm9kdWNlcyBhCiAgICAgICAgRm9ybWF0dGVyU291cmNlTWFwIGFuZCBzZXRzIGl0IG9uIHRoZSBTb3VyY2VDb2RlLiBBbGwgU291cmNlQ29kZUxvY2F0aW9ucwogICAgICAgIGFzc29jaWF0ZWQgd2l0aCB0aGF0IFNvdXJjZUNvZGUgY2FuIHVwZGF0ZSB0aGVpciBkaXNwbGF5IGxvY2F0aW9uLgogICAgICAgIElmIGEgbG9jYXRpb24gaXMgYWxyZWFkeSBsaXN0ZW5pbmcgZm9yIERpc3BsYXlMb2NhdGlvbiBjaGFuZ2UgZXZlbnRzCiAgICAgICAgaXQgd2lsbCBqdXN0IHdvcmsgKEJyZWFrUG9pbnRUcmVlRWxlbWVudHMsIENhbGxGcmFtZVRyZWVFbGVtZW50cykuCgogICAgICAgIFNvdXJjZUNvZGVMb2NhdGlvbiBub3cgaGFzIDMgc2V0cyBvZiB2YWx1ZXMgYW5kIGEgZGlzcGxheSB2YWx1ZToKCiAgICAgICAgICAtIFtwdWJsaWNdIHNvdXJjZUNvZGUsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcgogICAgICAgICAgICAtIHJhdyBvcmlnaW5hbCBzb3VyY2VDb2RlIGFuZCB2YWx1ZXMKICAgICAgICAgICAgLSB1c2VmdWwgZm9yIGludGVyYWN0aW9uIHdpdGggdGhlIGJhY2tlbmQKCiAgICAgICAgICAtIFtwdWJsaWNdIGZvcm1hdHRlZExpbmVOdW1iZXIsIGZvcm1hdHRlZENvbHVtbk51bWJlcgogICAgICAgICAgICAtIGZvciB0aGUgb3JpZ2luYWwgc291cmNlQ29kZQogICAgICAgICAgICAtIGlmIHRoZSBzb3VyY2VDb2RlIGhhcyBhIGZvcm1hdHRlciwgdGhlc2UgYXJlIHRoZSBmb3JtYXR0ZWQgdmFsdWVzCiAgICAgICAgICAgIC0gaWYgdGhlIHNvdXJjZUNvZGUgZG9lc24ndCBoYXZlIGEgZm9ybWF0dGVyLCB0aGVzZSBhcmUgdGhlIHNhbWUgYXMgdGhlIHJhdyB2YWx1ZXMKICAgICAgICAgICAgLSB1c2VmdWwgZm9yIFRleHRFZGl0b3JzIHRoYXQgYXJlIHNob3dpbmcgY29udGVudCArIGd1dHRlcnMgZm9yIGZvcm1hdHRlZCBzb3VyY2UKCiAgICAgICAgICAtIFtwcml2YXRlXSBtYXBwZWRSZXNvdXJjZSwgbWFwcGVkTGluZU51bWJlciwgbWFwcGVkQ29sdW1uTnVtYmVyCiAgICAgICAgICAgIC0gaWYgdGhlIHNvdXJjZUNvZGUgaGFzIGEgc291cmNlTWFwLCB0aGlzIGlzIHRoZSBtYXBwZWQgbG9jYXRpb24gb2YgdGhlIHJhdwogICAgICAgICAgICAgIHZhbHVlcyBpbnRvIGEgU291cmNlTWFwUmVzb3VyY2UgbGluZSBhbmQgY29sdW1uCiAgICAgICAgICAgIC0gaWYgdGhlIHNvdXJjZUNvZGUgZG9lc24ndCBoYXZlIGEgc291cmNlTWFwIHRoZXNlIGFyZSBudWxsLCBOYU4sIE5hTgogICAgICAgICAgICAtIHVzZWZ1bCBmb3IgYSBkaXNwbGF5IGxvY2F0aW9uLCBzaW5jZSBpdCBpcyB0aGUgYXV0aG9yJ3Mgb3JpZ2luYWwgcHJlLWdlbmVyYXRlZCBzb3VyY2UKCiAgICAgICAgICAtIFtwdWJsaWNdIGRpc3BsYXlSZXNvdXJjZSwgZGlzcGxheUxpbmVOdW1iZXIsIGRpc3BsYXlDb2x1bW5OdW1iZXIKICAgICAgICAgICAgLSBpZiB0aGVyZSBpcyBhIG1hcHBlZCBsb2NhdGlvbiB1c2UgdGhhdAogICAgICAgICAgICAtIGlmIHRoZXJlIGlzIGEgZm9ybWF0dGVkIGxvY2F0aW9uIHVzZSB0aGF0CiAgICAgICAgICAgIC0gb3RoZXJ3aXNlIHVzZSB0aGUgcmF3IG9yaWdpbmFsIGxvY2F0aW9uCiAgICAgICAgICAgIC0gdXNlZnVsIGZvciBhbnlvbmUgd2hvIHdhbnRzIHRvIGRpc3BsYXkgYSBsb2NhdGlvbgoKICAgICAgICBNb3N0IHVzZXJzIG9mIFNvdXJjZUNvZGVMb2NhdGlvbiBzaG91bGQgb25seSBjYXJlIGFib3V0IHRoZSBkaXNwbGF5CiAgICAgICAgdmFsdWVzIGFuZCBzaG91bGQgcmVnaXN0ZXIgZm9yIERpc3BsYXlMb2NhdGlvbiBjaGFuZ2UgZXZlbnRzIHRvIGtub3cKICAgICAgICB3aGVuIHRvIHVwZGF0ZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuZ2V0IGZvcm1hdHRlclNvdXJjZU1hcCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fcHJldHR5UHJpbnQpOgogICAgICAgIFJ1biB0aGUgZm9ybWF0dGVyLiBVcGRhdGUgc2VsZWN0aW9uLiBVcGRhdGUgc2VhcmNoLiBOb3RpZnkgZGVsZWdhdGUuCgogICAgICAgICogVXNlckludGVyZmFjZS9TY3JpcHRDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdENvbnRlbnRWaWV3KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdENvbnRlbnRWaWV3LnByb3RvdHlwZS5fdGV4dEVkaXRvckZvcm1hdHRpbmdEaWRDaGFuZ2UpOgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fdGV4dEVkaXRvckZvcm1hdHRpbmdEaWRDaGFuZ2UpOgogICAgICAgIFVwZGF0ZSB0aGUgcHJldHR5IHByaW50IGJ1dHRvbidzIGFjdGl2YXRlZCBzdGF0ZSB3aGVuIGZvcm1hdHRpbmcgY2hhbmdlcyB0byBtYXRjaCB0aGUgVGV4dEVkaXRvci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLnRleHRFZGl0b3JVcGRhdGVkRm9ybWF0dGluZyk6CiAgICAgICAgVGhlIFRleHRFZGl0b3IgY2hhbmdlZCBmb3JtYXR0aW5nIGFuZCB1cGRhdGVkIGl0cyBGb3JtYXR0ZXJTb3VyY2VNYXAuIFNldAogICAgICAgIHRoZSBGb3JtYXR0ZXJTb3VyY2VNYXAgb24gdGhlIFNvdXJjZUNvZGUgaXRzZWxmLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlQ29kZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZS5wcm90b3R5cGUuZ2V0IGZvcm1hdHRlclNvdXJjZU1hcCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZS5zZXQgZm9ybWF0dGVyU291cmNlTWFwKToKICAgICAgICBBIFNvdXJjZUNvZGUgbWF5IGhhdmUgYSBmb3JtYXR0ZXIgc291cmNlIG1hcCB3aGVuIHRoZSBUZXh0RWRpdG9yIGZvciBpdAogICAgICAgIHdhcyBwcmV0dHkgcHJpbnRlZC4gU3RvcmUgdGhhdCBvbiB0aGUgU291cmNlQ29kZSBzbyBTb3VyY2VDb2RlTG9jYXRpb24KICAgICAgICBvYmplY3RzIGtub3cgd2hlcmUgdG8gZmluZCBpdCwgYW5kIHNlbmQgYW4gZXZlbnQgd2hlbiBpdCBjaGFuZ2VzLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlQ29kZUxvY2F0aW9uLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZUxvY2F0aW9uLnByb3RvdHlwZS5nZXQgZm9ybWF0dGVkTGluZU51bWJlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlTG9jYXRpb24ucHJvdG90eXBlLmdldCBmb3JtYXR0ZWRDb2x1bW5OdW1iZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZUxvY2F0aW9uLnByb3RvdHlwZS5fcmVzb2x2ZUZvcm1hdHRlZExvY2F0aW9uKToKICAgICAgICBGb3JtYXR0ZWQgbG9jYXRpb24gd2hlbiB0aGUgU291cmNlQ29kZSBpcyBwcmV0dHkgcHJpbnRlZC4gT3JpZ2luYWwgb3RoZXJ3aXNlLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVMb2NhdGlvbi5wcm90b3R5cGUuZ2V0IGRpc3BsYXlMaW5lTnVtYmVyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVMb2NhdGlvbi5wcm90b3R5cGUuZ2V0IGRpc3BsYXlDb2x1bW5OdW1iZXIpOgogICAgICAgIE1hcHBlZCBsb2NhdGlvbiwgZmFsbGJhY2sgdG8gZm9ybWF0dGVkLCBmYWxsYmFjayB0byByYXcgb3JpZ2luYWwuCgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZUxvY2F0aW9uLnByb3RvdHlwZS5oYXNGb3JtYXR0ZWRMb2NhdGlvbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlTG9jYXRpb24ucHJvdG90eXBlLmhhc0RpZmZlcmVudERpc3BsYXlMb2NhdGlvbik6CiAgICAgICAgSGVscGZ1bCBhY2Nlc3NvcnMgZm9yIHRob3NlIHRoYXQgbWlnaHQgYmUgaW50ZXJlc3RlZC4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlTG9jYXRpb24ucHJvdG90eXBlLl9zb3VyY2VDb2RlRm9ybWF0dGVyRGlkQ2hhbmdlKToKICAgICAgICBXaGVuIHRoZSBTb3VyY2VDb2RlJ3MgZm9ybWF0dGVyIHNvdXJjZSBtYXAgY2hhbmdlZCByZXNvbHZlIG91ciByZS1yZXNvbHZlCiAgICAgICAgb3VyIGxvY2F0aW9ucyBhbmQgZmlyZSBhbiBldmVudCBpZiBuZWVkZWQuCgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZUxvY2F0aW9uLnByb3RvdHlwZS5fbWFrZUNoYW5nZUFuZERpc3BhdGNoQ2hhbmdlRXZlbnRJZk5lZWRlZCk6CiAgICAgICAgTWFrZSB0aGUgY29kZSBzaW1wbGVyIGFuZCBoYW5kbGUgZm9ybWF0dGVkIGxvY2F0aW9uIGNoYW5nZXMuCgoyMDEzLTAzLTA0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIEFkZCBhIHByZXR0eSBwcmludCBidXR0b24gdG8gdGV4dCBjb250ZW50IHZpZXdzCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTIxOTc3MT4gUkVHUkVTU0lPTiAoU2FmYXJpIDYpOiBDYW4ndCBwcmV0dHktcHJpbnQgSmF2YVNjcmlwdAoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZW50QnJvd3Nlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyLnByb3RvdHlwZS5fY29udGVudFZpZXdTZWxlY3Rpb25QYXRoQ29tcG9uZW50RGlkQ2hhbmdlKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWVDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lQ29udGVudFZpZXcucHJvdG90eXBlLmdldCBuYXZpZ2F0aW9uSXRlbXMpOgogICAgICAgIEJlIHN1cmUgdG8gdXBkYXRlIG5hdmlnYXRpb24gaXRlbXMgd2hlbiBhIEZyYW1lQ29udGVudFZpZXcgY2hhbmdlcwogICAgICAgIGNvbnRlbnQgdmlld3MgKFNvdXJjZSBDb2RlIGFuZCBET00gVHJlZSksIGJlY2F1c2UgdGhlIGRpZmZlcmVudCB2aWV3cwogICAgICAgIG1pZ2h0IGhhdmUgZGlmZmVyZW50IG5hdmlnYXRpb24gaXRlbXMuCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9TY3JpcHRDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdENvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgbmF2aWdhdGlvbkl0ZW1zKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdENvbnRlbnRWaWV3LnByb3RvdHlwZS5fY29udGVudERpZFBvcHVsYXRlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdENvbnRlbnRWaWV3LnByb3RvdHlwZS5fdG9nZ2xlUHJldHR5UHJpbnQpOgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgbmF2aWdhdGlvbkl0ZW1zKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fY29udGVudERpZFBvcHVsYXRlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fdG9nZ2xlUHJldHR5UHJpbnQpOgogICAgICAgIEFkZCBhIHByZXR0eSBwcmludCBidXR0b24gdG8gU2NyaXB0IGFuZCBUZXh0UmVzb3VyY2UgY29udGVudCB2aWV3cy4KICAgICAgICBEaXNhYmxlZCBpbml0aWFsbHksIGFuZCBlbmFibGVkIHdoZW4gY29udGVudCBwb3B1bGF0ZXMgYW5kIHRoZQogICAgICAgIFRleHRFZGl0b3Igc3VwcG9ydHMgZm9ybWF0dGluZwogICAgICAgIAogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zZXQgcmVhZE9ubHkpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuZ2V0IGZvcm1hdHRlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zZXQgZm9ybWF0dGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl91cGRhdGVDb2RlTWlycm9yUmVhZE9ubHkpOgogICAgICAgIEN1cnJlbnRseSwgbWFyayB0aGUgZWRpdG9yIGFzIHJlYWR5T25seSBpbW1lZGlhdGVseSB3aGVuIGl0IGlzIGZvcm1hdHRlZC4KICAgICAgICBUaGlzIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5oYXNGb3JtYXR0ZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuY2FuQmVGb3JtYXR0ZWQpOgogICAgICAgIEFjY2Vzc29yIGZvciB3aGV0aGVyIHRoZSBUZXh0RWRpdG9yIGNhbiBiZSBmb3JtYXR0ZWQuCgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5jYW5CZUZvcm1hdHRlZCk6CiAgICAgICAgRG9uJ3QgYWxsb3cgU291cmNlTWFwUmVzb3VyY2VzIHRvIGJlIGZvcm1hdHRlZC4gVGhpcyBpcyB0byBzaW1wbGlmeQogICAgICAgIGxhdGVyIGNoYW5nZXMgYSBiaXQuIFdlIGNhbiBkbyB0aGlzIGxhdGVyIGluIHRoZSBmdXR1cmUgaWYgd2Ugd2FudC4KICAgICAgICAKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fY29udGVudERpZFBvcHVsYXRlKToKICAgICAgICBGaXJlIGFuIGV2ZW50IHdoZW4gY29udGVudCBwb3B1bGF0ZXMuCgoyMDEzLTAzLTA0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIEZvcm1hdHRlclNvdXJjZU1hcCB0byBjb252ZXJ0IGJldHdlZW4gb3JpZ2luYWwgYW5kIGZvcm1hdHRlZCBsb2NhdGlvbnMKCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExMjE5NzcxPiBSRUdSRVNTSU9OIChTYWZhcmkgNik6IENhbid0IHByZXR0eS1wcmludCBKYXZhU2NyaXB0CgogICAgICAgIEFkZCBGb3JtYXR0ZXJTb3VyY2VNYXAgY2xhc3MuIFRoaXMgaXMgbmVhcmx5IGlkZW50aWNhbCB0byBPcGVuU291cmNlJ3MKICAgICAgICBGb3JtYXR0ZXJTb3VyY2VNYXBwaW5nLCB3aGljaCBkb2VzIHRoZSBzYW1lIHRoaW5nLiBUaGlzIHByb3ZpZGVzCiAgICAgICAgY29udmVyc2lvbnMgaW4gZWl0aGVyIGRpcmVjdGlvbiBiZXR3ZWVuIGFuIG9yaWdpbmFsIGFuZCBmb3JtYXR0ZWQgbGluZQogICAgICAgIGFuZCBjb2x1bW4gbnVtYmVyLiBJdCByZXF1aXJlcyB0aGUgb3JpZ2luYWwgYW5kIGZvcm1hdHRlZCBsaW5lIGVuZGluZ3MKICAgICAgICBhbmQgYSBtYXBwaW5nLCBhbGwgZGF0YSB0aGUgdGhlIENvbnRlbnRCdWlsZGVyIGhhcy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRm9ybWF0dGVyU291cmNlTWFwLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZvcm1hdHRlclNvdXJjZU1hcCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXAuZnJvbUJ1aWxkZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRm9ybWF0dGVyU291cmNlTWFwLnByb3RvdHlwZS5vcmlnaW5hbFRvRm9ybWF0dGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkZvcm1hdHRlclNvdXJjZU1hcC5wcm90b3R5cGUuZm9ybWF0dGVkVG9PcmlnaW5hbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXAucHJvdG90eXBlLl9sb2NhdGlvblRvUG9zaXRpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuRm9ybWF0dGVyU291cmNlTWFwLnByb3RvdHlwZS5fcG9zaXRpb25Ub0xvY2F0aW9uKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkZvcm1hdHRlclNvdXJjZU1hcC5wcm90b3R5cGUuX2NvbnZlcnRQb3NpdGlvbik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVXRpbGl0aWVzLmpzOgoKMjAxMy0wMy0wNCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBDU1MgUHJldHR5IFByaW50ZXIKCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExMjE5NzcxPiBSRUdSRVNTSU9OIChTYWZhcmkgNik6IENhbid0IHByZXR0eS1wcmludCBKYXZhU2NyaXB0CgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvZGVNaXJyb3JGb3JtYXR0ZXJzLmpzOgogICAgICAgIChDb2RlTWlycm9yWyJjc3MgbW9kZSJdLnNob3VsZEhhdmVTcGFjZUJlZm9yZVRva2VuKToKICAgICAgICAoQ29kZU1pcnJvclsiY3NzIG1vZGUiXS5zaG91bGRIYXZlU3BhY2VBZnRlckxhc3RUb2tlbik6CiAgICAgICAgKENvZGVNaXJyb3JbImNzcyBtb2RlIl0ubmV3bGluZXNBZnRlclRva2VuKToKICAgICAgICAoQ29kZU1pcnJvclsiY3NzIG1vZGUiXS5yZW1vdmVMYXN0TmV3bGluZSk6CiAgICAgICAgKENvZGVNaXJyb3JbImNzcyBtb2RlIl0uaW5kZW50QWZ0ZXJUb2tlbik6CiAgICAgICAgKENvZGVNaXJyb3JbImNzcyBtb2RlIl0ubmV3bGluZUJlZm9yZVRva2VuKToKICAgICAgICAoQ29kZU1pcnJvclsiY3NzIG1vZGUiXS5kZWRlbnRCZWZvcmVUb2tlbik6CiAgICAgICAgKENvZGVNaXJyb3JbImNzcyBtb2RlIl0ubW9kaWZ5U3RhdGVGb3JUb2tlbik6CiAgICAgICAgVGhlIGdlbmVyYWwgZ29hbHMgYXJlOgogICAgICAgICAgLSBzcGFjZXMgYWZ0ZXIgJywnIGluIHNlbGVjdG9yIGxpc3RzCiAgICAgICAgICAtIHNwYWNlcyBhZnRlciAnOicgYmV0d2VlbiBwcm9wZXJ0aWVzIGFuZCB2YWx1ZXMKICAgICAgICAgIC0gbmV3bGluZXMgYWZ0ZXIgJ3snLCAnfScsIGFuZCAnOycsIHdpdGggMiBuZXdsaW5lcyBiZXR3ZWVuIGJsb2NrcwogICAgICAgICAgLSBuZXdsaW5lcyBhZnRlciAnLCcgaW4gbG9uZyBzZWxlY3RvciBsaXN0cyAiYSxiLC4uLHoge30iCiAgICAgICAgICAtIGluZGVudCBhZnRlciAneycgYW5kIGRlZGVudCBiZWZvcmUgJ30nCgoyMDEzLTAzLTA0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIEZvcm1hdHRlciwgQ29udGVudEJ1aWxkZXIsIGFuZCBKYXZhU2NyaXB0IFByZXR0eSBQcmludGVyCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTIxOTc3MT4gUkVHUkVTU0lPTiAoU2FmYXJpIDYpOiBDYW4ndCBwcmV0dHktcHJpbnQgSmF2YVNjcmlwdAoKICAgICAgICBUaGlzIHBhdGNoIGFkZHMgYSBGb3JtYXR0ZXIgZHJpdmVyIGNsYXNzLCBhIENvbnRlbnRCdWlsZGVyIGNsYXNzIHRoYXQKICAgICAgICBidWlsZHMgYm90aCB0aGUgZm9ybWF0dGVkIHN0cmluZyBhbmQgbGluZSBlbmRpbmcgbWFya2VycyBuZWVkZWQgZm9yIGEKICAgICAgICBzb3VyY2UgbWFwcGluZywgYW5kIEphdmFTY3JpcHQgQ29kZU1pcnJvciBleHRlbnNpb25zIGZvciBwcmV0dHkgcHJpbnRpbmcuCgogICAgICAgIFRoZSBGb3JtYXR0ZXIgYW5kIEZvcm1hdHRlckNvbnRlbnRCdWlsZGVyIGNsYXNzZXMgYXJlIG5vdCBXZWJJbnNwZWN0b3IKICAgICAgICBwcmVmaXhlZC4gVGhlaXIgb25seSBkZXBlbmRlbmN5IGlzIENvZGVNaXJyb3IgYW5kIHRoZSBDb2RlTWlycm9yIG1vZGVzLgogICAgICAgIFRoZXkgYXJlIHN0YW5kYWxvbmUsIGFuZCBjb3VsZCBiZSBtb3ZlZCB0byBhIFdvcmtlciBpZiBuZWVkZWQuCgogICAgICAgIFRoZSBGb3JtYXR0ZXIgY2xhc3MgdGFrZXMgYSB0b2tlbml6ZXIgKGluIG91ciBjYXNlIGEgQ29kZU1pcnJvciBvYmplY3QpCiAgICAgICAgYW5kIGEgYnVpbGRlciBvYmplY3QuIENhbGwgZm9ybWF0KCkgb24gYSByYW5nZSB0byB0b2tlbml6ZSBvdmVyIHRoYXQKICAgICAgICByYW5nZSBhbmQgcG9wdWxhdGUgdGhlIGJ1aWxkZXIgZm9yIHRoYXQgcmFuZ2UuIFRoZSBGb3JtYXR0ZXIgYXNzdW1lcwogICAgICAgIHRoZSBDb2RlTWlycm9yIG9iamVjdCBoYXMgdGhlIGFwcHJvcHJpYXRlIHByZXR0eSBwcmludGluZyBleHRlbnNpb25zLgoKICAgICAgICBUaGUgQ29udGVudEJ1aWxkZXIgY2xhc3MgbWFuYWdlcyBsaW5lIGVuZGluZ3MgdGhlIHJlc3VsdGluZyBzdHJpbmcsIGFuZAogICAgICAgIGFsbCB0aGluZ3Mgd2hpdGVzcGFjZSByZWxhdGVkIGluIHRoZSBvdXRwdXQgc3RyaW5nIChzdWNoIGFzIGNvbGxhcHNpbmcKICAgICAgICB3aGl0ZXNwYWNlLCBhbmQgaW5kZW50YXRpb24pLgoKICAgICAgICBUaGUgQ29kZU1pcnJvciBwcmV0dHkgcHJpbnRpbmcgZXh0ZW5zaW9ucyBhcmUgdmVyeSBwcmltaXRpdmUuIEZvciBlYWNoCiAgICAgICAgdG9rZW4gQ29kZU1pcnJvciBvdXRwdXRzIHRoZSBtb2RlIGZvciB0aGF0IHRva2VuIGlzIGFza2VkIGlmIHdlIHNob3VsZAogICAgICAgIGFkZCBhIHNwYWNlIGJlZm9yZSBvciBhZnRlciwgYWRkIG5ld2xpbmVzIGJlZm9yZSBvciBhZnRlciwgaW5kZW50IG9yCiAgICAgICAgZGVkZW50LCByZXRyb2FjdGl2ZWx5IHJlbW92ZSB0aGUgbGFzdCBuZXdsaW5lLCBvciB1cGRhdGluZyBwcml2YXRlIHN0YXRlLgogICAgICAgIE1vc3Qgb2YgdGhlIHRpbWUgd2hpdGVzcGFjZSBpcyBhbHJlYWR5IHJlcXVpcmVkIGxhbmd1YWdlcywgc28gd2hpdGVzcGFjZQogICAgICAgIG9ubHkgcmVhbGx5IG5lZWRzIHRvIGJlIGFkZGVkIHdoZXJlIGl0IGlzIG9wdGlvbmFsIGFuZCB3b3VsZCBiZSBwcmV0dGllci4KICAgICAgICBPbmUgc2ltcGxlIGV4YW1wbGUgaXMgIn1lbHNleyIgdmVyc3VzICJ9IGVsc2UgeyIuIFRoZSBtb2RlIGRvZXNuJ3QgbmVlZAogICAgICAgIHRvIHdvcnJ5IGFib3V0IGNvbGxhcHNpbmcgd2hpdGVzcGFjZS4gSXQganVzdCBzdWdnZXN0cyB3aGVyZSB3aGl0ZXNwYWNlCiAgICAgICAgZ29lcyBhbmQgdGhlIEZvcm1hdHRlciArIENvbnRlbnRCdWlsZGVyIHRha2VzIGNhcmUgb2YgdGhlIHJlc3QuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Zvcm1hdHRlci5qczogQWRkZWQuCiAgICAgICAgKEZvcm1hdHRlcik6CiAgICAgICAgKEZvcm1hdHRlci5wcm90b3R5cGUuZm9ybWF0KToKICAgICAgICBBIFN0cmluZ1N0cmVhbSBpcyBjb25zaWRlcmVkIHRvIGJlIG9uZSBsaW5lLiBTbyBzcGxpdCB0aGUgY29udGVudCBvdmVyCiAgICAgICAgdGhlIGdpdmVuIHJhbmdlIGludG8gbGluZXMsIGFuZCB0b2tlbml6ZSBvdmVyIHRoZSBsaW5lcy4gVGhlcmUgYXJlIGhvb2tzCiAgICAgICAgZm9yIGhhbmRsaW5nIHRva2VucywgZW1wdHkgbGluZXMsIGFuZCBsaW5lIGVuZGluZ3MuCgogICAgICAgIChGb3JtYXR0ZXIucHJvdG90eXBlLl9oYW5kbGVUb2tlbik6CiAgICAgICAgQXNrIHRoZSBtb2RlIGhvdyB0byBwcmV0dHkgcHJpbnQgdGhlIGN1cnJlbnQgdG9rZW4uCgogICAgICAgIChGb3JtYXR0ZXIucHJvdG90eXBlLl9oYW5kbGVFbXB0eUxpbmUpOgogICAgICAgIFByZXNlcnZlIG5ld2xpbmVzIGluIG11bHRpLWxpbmUgY29tbWVudHMuIElmIHRoaXMgaXMgYW4gZW1wdHkgbGluZSBpbgogICAgICAgIGEgY29tbWVudCwgZm9yY2UgdGhlIGJ1aWxkZXIgdG8gYWRkIGEgbmV3IGxpbmUuCgogICAgICAgIChGb3JtYXR0ZXIucHJvdG90eXBlLl9oYW5kbGVMaW5lRW5kaW5nKToKICAgICAgICBOb3RpZnkgdGhlIGJ1aWxkZXIgdGhhdCBvZiBhbiBvcmlnaW5hbCBsaW5lIGVuZGluZy4KCgogICAgICAgICogVXNlckludGVyZmFjZS9Gb3JtYXR0ZXJDb250ZW50QnVpbGRlci5qczogQWRkZWQuCiAgICAgICAgKEZvcm1hdHRlckNvbnRlbnRCdWlsZGVyKToKICAgICAgICAoRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIucHJvdG90eXBlLmdldCBvcmlnaW5hbENvbnRlbnQpOgogICAgICAgIChGb3JtYXR0ZXJDb250ZW50QnVpbGRlci5wcm90b3R5cGUuZ2V0IGZvcm1hdHRlZENvbnRlbnQpOgogICAgICAgIChGb3JtYXR0ZXJDb250ZW50QnVpbGRlci5wcm90b3R5cGUuZ2V0IG1hcHBpbmcpOgogICAgICAgIChGb3JtYXR0ZXJDb250ZW50QnVpbGRlci5wcm90b3R5cGUuZ2V0IG9yaWdpbmFsTGluZUVuZGluZ3MpOgogICAgICAgIChGb3JtYXR0ZXJDb250ZW50QnVpbGRlci5wcm90b3R5cGUuZ2V0IGZvcm1hdHRlZExpbmVFbmRpbmdzKToKICAgICAgICAoRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIucHJvdG90eXBlLnNldE9yaWdpbmFsQ29udGVudCk6CiAgICAgICAgUmVzdWx0cyBvZiBhIGZvcm1hdHRpbmcgcnVuLiBFdmVyeXRoaW5nIG5lZWRlZCBmb3IgYSBTb3VyY2VNYXAuCgogICAgICAgIChGb3JtYXR0ZXJDb250ZW50QnVpbGRlci5wcm90b3R5cGUuYXBwZW5kVG9rZW4pOgogICAgICAgIChGb3JtYXR0ZXJDb250ZW50QnVpbGRlci5wcm90b3R5cGUuYXBwZW5kU3BhY2UpOgogICAgICAgIChGb3JtYXR0ZXJDb250ZW50QnVpbGRlci5wcm90b3R5cGUuYXBwZW5kTmV3bGluZSk6CiAgICAgICAgKEZvcm1hdHRlckNvbnRlbnRCdWlsZGVyLnByb3RvdHlwZS5yZW1vdmVMYXN0TmV3bGluZSk6CiAgICAgICAgKEZvcm1hdHRlckNvbnRlbnRCdWlsZGVyLnByb3RvdHlwZS5pbmRlbnQpOgogICAgICAgIChGb3JtYXR0ZXJDb250ZW50QnVpbGRlci5wcm90b3R5cGUuZGVkZW50KToKICAgICAgICAoRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIucHJvdG90eXBlLmFkZE9yaWdpbmFsTGluZUVuZGluZyk6CiAgICAgICAgKEZvcm1hdHRlckNvbnRlbnRCdWlsZGVyLnByb3RvdHlwZS5maW5pc2gpOgogICAgICAgIFB1YmxpYyBpbnRlcmZhY2UgaXMgc2ltcGxlLgoKICAgICAgICAoRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIucHJvdG90eXBlLl9wb3BOZXdMaW5lKTogICAgICAgIAogICAgICAgIChGb3JtYXR0ZXJDb250ZW50QnVpbGRlci5wcm90b3R5cGUuX2FwcGVuZCk6CiAgICAgICAgSGFuZGxlIGdyb3dpbmcgLyBzaHJpbmtpbmcgdGhlIGNvbnRlbnQgKyBjb250ZW50IGxlbmd0aCBhdCB0aGUgc2FtZSB0aW1lLgoKICAgICAgICAoRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIucHJvdG90eXBlLl9hcHBlbmRJbmRlbnQpOgogICAgICAgIEluZGVudGF0aW9uIGlzIHN0b3JlZCBpbiBhIGNhY2hlIHRvIGF2b2lkIHJlY29tcHV0aW5nIG9mdGVuLiBIb3dldmVyLAogICAgICAgIHRoZSBjYWNoZSBzdG9wcyBhdCAyMCwgaWYgdGhlcmUgaXMgYW4gaW5kZW50YXRpb24gZ3JlYXRlciB0aGFuIDIwIHdlCiAgICAgICAgY29tcG9zZSBpdCBpbiBjaHVua3MuCgogICAgICAgIChGb3JtYXR0ZXJDb250ZW50QnVpbGRlci5wcm90b3R5cGUuX2FkZE1hcHBpbmdJZk5lZWRlZCk6CiAgICAgICAgQWRkIGEgbWFwcGluZyBmb3IgZWFjaCB0b2tlbiBvcmlnaW5hbFBvc2l0aW9uIGFuZCBmb3JtYXR0ZWRQb3NpdGlvbi4KCiAgICAgICAgKEZvcm1hdHRlckNvbnRlbnRCdWlsZGVyLnByb3RvdHlwZS5fYWRkRm9ybWF0dGVkTGluZUVuZGluZyk6CiAgICAgICAgS2VlcCB0cmFjayBvZiBmb3JtYXR0ZWQgY29udGVudCBsaW5lIGVuZGluZ3MuCgogICAgICAgICogVXNlckludGVyZmFjZS9Db2RlTWlycm9yRm9ybWF0dGVycy5qczogQWRkZWQuCiAgICAgICAgKENvZGVNaXJyb3JbImphdmFzY3JpcHQgbW9kZSJdLnNob3VsZEhhdmVTcGFjZUJlZm9yZVRva2VuKToKICAgICAgICAoQ29kZU1pcnJvclsiamF2YXNjcmlwdCBtb2RlIl0uc2hvdWxkSGF2ZVNwYWNlQWZ0ZXJMYXN0VG9rZW4pOgogICAgICAgIChDb2RlTWlycm9yWyJqYXZhc2NyaXB0IG1vZGUiXS5uZXdsaW5lc0FmdGVyVG9rZW4pOgogICAgICAgIChDb2RlTWlycm9yWyJqYXZhc2NyaXB0IG1vZGUiXS5yZW1vdmVMYXN0TmV3bGluZSk6CiAgICAgICAgKENvZGVNaXJyb3JbImphdmFzY3JpcHQgbW9kZSJdLmluZGVudEFmdGVyVG9rZW4pOgogICAgICAgIChDb2RlTWlycm9yWyJqYXZhc2NyaXB0IG1vZGUiXS5uZXdsaW5lQmVmb3JlVG9rZW4pOgogICAgICAgIChDb2RlTWlycm9yWyJqYXZhc2NyaXB0IG1vZGUiXS5kZWRlbnRCZWZvcmVUb2tlbik6CiAgICAgICAgVGhlIGdlbmVyYWwgZ29hbCB3aXRoIHRoZXNlIGhvb2tzIGFyZToKICAgICAgICAgIC0gc3BhY2VzIGJlZm9yZSBhbmQgYWZ0ZXIgbW9zdCBvcGVyYXRvcnMgKG5vdCB1bmFyeSkKICAgICAgICAgIC0gc3BhY2VzIGFyb3VuZCBrZXl3b3JkcwogICAgICAgICAgLSBuZXdsaW5lcyBhZnRlciAneycsICd9JywgYW5kICc7JwogICAgICAgICAgLSBuZXdsaW5lcyBhZnRlciAnLCcgd2hlbiBpbnNpZGUgYW4gb2JqZWN0IGNvbnRleHQKICAgICAgICAgIC0gaW5kZW50IGFmdGVyICd7JyBhbmQgZGVkZW50IGJlZm9yZSAnfScKCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICBBZGQgbmV3IGZpbGVzLgoKMjAxMy0wMy0wNCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMzMzE0NzA+IFJFR1JFU1NJT046IEluc3BlY3RvciBkZWJ1Z2dlciBjb250aW51ZSBidXR0b24gaXMgYSBwYXVzZSBpY29uIHdoZW4gaXQgc2hvdWxkIGJlIGFuIGFycm93CgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0J1dHRvbk5hdmlnYXRpb25JdGVtLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnV0dG9uTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLnNldCBpbWFnZSk6CiAgICAgICAgVGhpcyB3YXMgYXBwZW5kaW5nIGEgbmV3IGNoaWxkIGltYWdlIGVsZW1lbnQgZWFjaCB0aW1lIGluc3RlYWQgb2YKICAgICAgICByZXBsYWNpbmcgdGhlIGV4aXN0aW5nIGltYWdlLiBSZW1vdmUgdGhlIG9sZCBjaGlsZHJlbiBvbiBjaGFuZ2VzLgoKMjAxMy0wMy0wNCAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMzMzE4MTE+IFdlYiBJbnNwZWN0b3I6IHJlbW92ZSBleGlzdGluZyBMYXllclRyZWVBZ2VudCBwcm90b2NvbCBBUElzICgxMTEyNTEpCgogICAgICAgIERlYWN0aXZhdGUgdGhlIGxheWVyIHRyZWUgc2lkZWJhciBwYW5lbCB1bnRpbCB0aGUgbmV3IEFQSQogICAgICAgIGxhbmRzIGluIFdlYkNvcmUgYW5kIHdlIGNhbiB1cGRhdGUgdGhlIEludGVybmFsIGNvZGUgdG8gdXNlCiAgICAgICAgdGhpcyBBUEkuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xheWVyVHJlZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVNYW5hZ2VyKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTGF5ZXJUcmVlT2JzZXJ2ZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVPYnNlcnZlci5wcm90b3R5cGUubGF5ZXJUcmVlRGlkQ2hhbmdlKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTGF5ZXJUcmVlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5zdXBwb3J0c0RPTU5vZGUpOgoKMjAxMy0wMy0wMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFVwZGF0ZSB0aGUgU3R5bGUgZGV0YWlscyBzaWRlYmFyIHdoZW4gd2hlbiBwc2V1ZG8gY2xhc3NlcyBhcmUgZm9yY2VkIG9yIG1lZGlhIHF1ZXJpZXMgY2hhbmdlLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMzMjgyOTg+CgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5cGUubWVkaWFRdWVyeVJlc3VsdENoYW5nZWQpOiBDYWxsIG1lZGlhUXVlcnlSZXN1bHREaWRDaGFuZ2Ugb24gZWFjaCBET01Ob2RlU3R5bGVzLgogICAgICAgIFJlbW92ZWQgdGhlIGV2ZW50IHNpbmNlIGl0IHdhc24ndCB1c2VkIGFueW1vcmUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5zZXRQc2V1ZG9DbGFzc0VuYWJsZWQpOiBGaXJlIHRoZSBldmVudCBhZnRlciB0aGUgYWdlbnQgYWN0dWFsbHkgZG9lcyB0aGUgY2hhbmdlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5wcm90b3R5cGUuc2V0UHNldWRvQ2xhc3NFbmFibGVkLmNoYW5nZWQpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NTm9kZVN0eWxlcy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMpOiBBZGRlZCBsaXN0ZW5lciBmb3IgRW5hYmxlZFBzZXVkb0NsYXNzZXNDaGFuZ2VkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUubWVkaWFRdWVyeVJlc3VsdERpZENoYW5nZSk6IEFkZGVkLiBDYWxsIF9tYXJrQXNOZWVkc1JlZnJlc2guCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5fbWFya0FzTmVlZHNSZWZyZXNoKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5fcHNldWRvQ2xhc3Nlc0RpZENoYW5nZSk6IEFkZGVkLiBDYWxsIF9tYXJrQXNOZWVkc1JlZnJlc2guCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5fYXR0cmlidXRlc0RpZENoYW5nZSk6IFVzZSBfbWFya0FzTmVlZHNSZWZyZXNoLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuX3N0eWxlU2hlZXRDb250ZW50RGlkQ2hhbmdlLmNoZWNrUnVsZXMpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLl9zdHlsZVNoZWV0Q29udGVudERpZENoYW5nZSk6IERpdHRvLgoKMjAxMy0wMy0wMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIENoYW5nZXMgYXJlIGNvbW1pdHRlZCB0byBmcmVxdWVudGx5IHNpbmNlIHVwZGF0aW5nIHRvIENvZGVNaXJyb3IgMy4xLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5fY29udGVudENoYW5nZWQpOiBUaGUgb3JpZ2luIGZvciB1c2VyIGlucHV0CiAgICAgICAgY2hhbmdlZCBmcm9tICJpbnB1dCIgdG8gIitpbnB1dCIuIEFuZCB0aGVyZSBpcyBub3cgIitkZWxldGUiLiBJbnRlcm5hbGx5IENvZGVNaXJyb3IganVzdCBsb29rcyBmb3IKICAgICAgICB0aGUgIisiIHByZWZpeCB0byBkZWNpZGUgaWYgdGhlIGNoYW5nZSBzaG91bGQgY29hbGVzY2UgaW4gdW5kbyBoaXN0b3J5LiBXZSBzaG91bGQgZG8gdGhlIHNhbWUuCgoyMDEzLTAzLTAxICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IHN0eWxlIGVkaXRpbmcgYWZ0ZXIgYW4gSW5zcGVjdG9yIHByb3RvY29sIGNoYW5nZSBmb3IgaG93IFNvdXJjZVJhbmdlIGlzIHNlbnQuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzMyNDAxNT4gU3R5bGUgZWRpdGluZyBpbiB0aGUgbmV3IFN0eWxlIGRldGFpbHMgc2lkZWJhciBpcyBicm9rZW4gYWZ0ZXIgcjE0NDQzNAoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NQcm9wZXJ0eS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5KTogUmVtb3ZlZCBzdGFydFN0eWxlU2hlZXRUZXh0UG9zaXRpb24gYW5kIGVuZFN0eWxlU2hlZXRUZXh0UG9zaXRpb24uCiAgICAgICAgQWRkZWQgc3R5bGVTaGVldFRleHRSYW5nZSBhbmQgc3R5bGVEZWNsYXJhdGlvblRleHRSYW5nZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS51cGRhdGUpOiBEaXR0by4gRGVsZXRlIF9zdHlsZURlY2xhcmF0aW9uVGV4dFJhbmdlIGlmIGl0IGlzbid0CiAgICAgICAgZ2l2ZW4gc28gaXQgY2FuIGJlIHJlY29tcHV0ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUuZ2V0IHN0eWxlU2hlZXRUZXh0UmFuZ2UpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5nZXQgc3R5bGVEZWNsYXJhdGlvblRleHRSYW5nZSk6IEFkZGVkLiBDb21wdXRlIGlmIG1pc3NpbmcuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb24uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uKTogUmVtb3ZlZCBzdGFydFN0eWxlU2hlZXRUZXh0UG9zaXRpb24gYW5kIGVuZFN0eWxlU2hlZXRUZXh0UG9zaXRpb24uCiAgICAgICAgQWRkZWQgc3R5bGVTaGVldFRleHRSYW5nZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLnVwZGF0ZSk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUuZ2V0IHZpc2libGVQcm9wZXJ0aWVzKTogTG9vayBmb3Igc3R5bGVEZWNsYXJhdGlvblRleHRSYW5nZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLmdldCBzdHlsZVNoZWV0VGV4dFJhbmdlKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLl9jcmVhdGVUZXh0TWFya2VyRm9yUHJvcGVydHlJZk5lZWRlZCk6IERvbid0IGFkZAogICAgICAgIGNoZWNrYm94ZXMgZm9yIHByb3BlcnRpZXMgaWYgdGhlIGVkaXRvciBpcyByZWFkLW9ubHkuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuX3VwZGF0ZVRleHRNYXJrZXJzKTogVXNlIHN0eWxlRGVjbGFyYXRpb25UZXh0UmFuZ2UuCiAgICAgICAgRG9uJ3QgYWRkIGNoZWNrYm94ZXMgZm9yIGNvbW1lbnRzIGlmIHRoZSBlZGl0b3IgaXMgcmVhZC1vbmx5LgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLl9yZXNldENvbnRlbnQpOiBVc2Ugc3R5bGVTaGVldFRleHRSYW5nZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NTm9kZVN0eWxlcy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLmNoYW5nZVN0eWxlVGV4dCk6IFVzZSBzdHlsZVNoZWV0VGV4dFJhbmdlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuY2hhbmdlU3R5bGVUZXh0LmZldGNoZWRTdHlsZVNoZWV0Q29udGVudCk6IFVzZSBzdHlsZVNoZWV0VGV4dFJhbmdlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuX2hhbmRsZVByb3BlcnR5Q2hhbmdlKTogVXBkYXRlIGNvbW1lbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5fcGFyc2VTb3VyY2VSYW5nZVBheWxvYWQpOiBBZGRlZC4gSGVscGVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuX3BhcnNlU3R5bGVQcm9wZXJ0eVBheWxvYWQpOiBVc2UgX3BhcnNlU291cmNlUmFuZ2VQYXlsb2FkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuX3BhcnNlU3R5bGVEZWNsYXJhdGlvblBheWxvYWQpOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dFJhbmdlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKTogQWxsb3cgNCBvciAyIGFyZ3VtZW50IGNvbnN0cnVjdGlvbi4gT25lIGZvciBsaW5lcyBhbmQgY29sdW1ucywgdGhlIG90aGVyIGZvciBvZmZzZXRzLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJhbmdlLnByb3RvdHlwZS5nZXQgc3RhcnRMaW5lKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmFuZ2UucHJvdG90eXBlLmdldCBzdGFydENvbHVtbik6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJhbmdlLnByb3RvdHlwZS5nZXQgZW5kTGluZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJhbmdlLnByb3RvdHlwZS5nZXQgZW5kQ29sdW1uKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmFuZ2UucHJvdG90eXBlLmdldCBzdGFydE9mZnNldCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJhbmdlLnByb3RvdHlwZS5nZXQgZW5kT2Zmc2V0KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmFuZ2UucHJvdG90eXBlLnJlc29sdmVMaW5lc0FuZENvbHVtbnMpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSYW5nZS5wcm90b3R5cGUucmVzb2x2ZUxpbmVzQW5kQ29sdW1ucy5jb3VudE5ld0xpbmVDaGFyYWN0ZXJzKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmFuZ2UucHJvdG90eXBlLnJlc29sdmVPZmZzZXRzKTogQWRkZWQuCgoyMDEzLTAyLTI4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgU3dpdGNoIGZyb20gcG9zdC1wcm9jZXNzaW5nIGZvciB0aGUgc3R5bGUgcHJldHR5IHByaW50ZXIgdG8gZnVsbHkgc3ludGhlc2l6ZWQgY29udGVudC4KCiAgICAgICAgSW5zZXJ0aW5nIGEgbmV3bGluZSBiZXR3ZWVuIHRoZSBzZW1pY29sb24gYW5kIHRoZSBuZXh0IHByb3BlcnR5IHdhcyBjYXVzaW5nIHRoZSBuZXdsaW5lCiAgICAgICAgdG8gYmUgaW5zZXJ0ZWQgYmV0d2VlbiB0aGUgbmV4dCBwcm9wZXJ0eSBhbmQgaXRzIGNoZWNrYm94LiBUaGlzIGlzIGNvbnRyb2xsYWJsZSB2aWEgdGhlCiAgICAgICAgaW5zZXJ0TGVmdCBvcHRpb24gb24gYm9va21hcmtzIGluIENvZGVNaXJyb3I7IGhvd2V2ZXIsIHRoYXQgY2F1c2VzIHR5cGVkIHRleHQgdG8gZ28gb24KICAgICAgICB0aGUgbGVmdCBvZiB0aGUgY2hlY2tib3guCgogICAgICAgIFN3aXRjaGluZyB0byB0aGUgc3ludGhlc2l6ZWQgY29kZSBwYXRoIGlzIGNsZWFuZXIgYW5kIHNpbXBsZXIuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzMxNDY4Mj4gU3R5bGVzIG9uIFR3aXR0ZXIuY29tIGhhdmUgY2hlY2tib3hlcyBhdCB0aGUgZW5kIG9mIHRoZSBwcm9wZXJ0eQogICAgICAgIGluc3RlYWQgb2YgYmVnaW5uaW5nCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLl9yZXNldENvbnRlbnQpOiBSZW5hbWVkIGxpbmVDb3VudCgpCiAgICAgICAgdG8gY291bnROZXdMaW5lQ2hhcmFjdGVycygpIHNpbmNlIGl0IGNvbmZsaWN0cyB3aXRoIHRoZSBsaW5lQ291bnQgdmFyaWFibGUuCgoyMDEzLTAyLTI4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRG9uJ3QgZGlzYWJsZSBwcm9wZXJ0eSBjaGVja2JveGVzIGFmdGVyIGNsaWNrIHRvIHByZXZlbnQgYSBzdWJ0bGUgZmxhc2guCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzMwNjUwNj4gQ1NTIHJ1bGUgYm94IGZsYXNoZXMgY2hlY2tib3hlcyBhbmQgY3Jvc3NlZC1vdXQgdGV4dCBkdXJpbmcgZWRpdGluZwoKICAgICAgICBSZXZpZXdlZCBieSBBbnRvaW5lIFF1aW50LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuX3Byb3BlcnR5Q2hlY2tib3hDaGFuZ2VkKTogRG9uJ3Qgc2V0IGRpc2FibGVkLgogICAgICAgIFJlbW92ZSBhc3NlcnQgZm9yIHJhbmdlIHNpbmNlIGl0IG1pZ2h0IGhhdmUgYmVlbiByZW1vdmVkIGFscmVhZHkuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuX3Byb3BlcnR5Q29tbWVudENoZWNrYm94Q2hhbmdlZCk6IERpdHRvLgoKMjAxMy0wMi0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFVzZSBDb2RlTWlycm9yIDMuMSdzIG5ldyBnZXRBbGxNYXJrcygpIGluc3RlYWQgb2YgdHJhY2tpbmcgdGhlbSBvdXJzZWx2ZXMuCgogICAgICAgIEFsc28gZml4IGFuIGFzc2VydCB0aGF0IHdvdWxkIGZpcmUgaWYgd2UgcmV1c2VkIGEgdGV4dCBtYXJrZXIgdGhhdCB3YXMgcmVtb3ZlZC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IpOiBSZW1vdmUgX3RleHRNYXJrZXJzLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLl91cGRhdGVUZXh0TWFya2Vycyk6IFN0b3AgdXNpbmcgX3RleHRNYXJrZXJzLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLl9jcmVhdGVUZXh0TWFya2VyRm9yUHJvcGVydHlJZk5lZWRlZCk6IERpdHRvLgogICAgICAgIEFsc28gb25seSByZXVzZSBhIG1hcmtlciBpZiBpdCBpcyBzdGlsbCBpbiB0aGUgZG9jdW1lbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuX2NyZWF0ZUNvbG9yU3dhdGNoZXMpOiBTdG9wIHVzaW5nIF90ZXh0TWFya2Vycy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5fdXBkYXRlVGV4dE1hcmtlcnMpOiBEaXR0by4KCjIwMTMtMDItMjcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBSZW1vdmUgYSBmbGFzaCBvZiB0aGUgY29sb3Igc3dhdGNoIHdoZW4gdG9nZ2xpbmcgYSBwcm9wZXJ0eS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuX2NyZWF0ZUNvbG9yU3dhdGNoZXMpOiBBZGQgbGluZU51bWJlcgogICAgICAgIHBhcmFtZXRlciB0byB1cGRhdGUgb25seSB0aGF0IGxpbmUuIEFsc28gc2tpcCBjb2xvcnMgdGhhdCBhcmUgYWxyZWFkeSBtYXJrZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuX3Byb3BlcnR5Q2hlY2tib3hDaGFuZ2VkKTogQ2FsbCBfY3JlYXRlQ29sb3JTd2F0Y2hlcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5fcHJvcGVydHlDb21tZW50Q2hlY2tib3hDaGFuZ2VkKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuX2NvbG9yU3dhdGNoQ2xpY2tlZCk6IFNldCBfX21hcmtlZENvbG9yCiAgICAgICAgdG8gdHJ1ZSBzbyB3ZSBrbm93IGl0IGlzIGEgY29sb3IuIFJlbW92ZSBhbiB1bnVzZWQgY2xhc3MgbmFtZS4KCjIwMTMtMDItMjcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBQcmV0dHkgcHJpbnQgdGhlIHN0eWxlIHRleHQgaWYgdGhlcmUgYXJlIG1vcmUgcHJvcGVydGllcyB0aGFuIHRoZXJlIGFyZSBsaW5lcy4KCiAgICAgICAgVGhlcmUgYXJlIGEgZmV3IHN0eWxlIHJ1bGVzIG9uIGFwcGxlLmNvbSB0aGF0IGFyZSBtdWx0aXBsZSBsaW5lcyB3aXRoIDUtMTAKICAgICAgICBwcm9wZXJ0aWVzIHBlciBsaW5lLiBUaGVzZSB3ZXJlIGF2b2lkaW5nIHRoZSBwcmV0dHkgcHJpbnRpbmcgYmVjYXVzZSB0aGUgbGluZQogICAgICAgIGNvdW50IHdhcyBncmVhdGVyIHRoYW4gb25lLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURlY2xhcmF0aW9uLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUudXBkYXRlKTogQ2xlYXIgX3Zpc2libGVQcm9wZXJ0aWVzLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUuZ2V0IHZpc2libGVQcm9wZXJ0aWVzKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLl9pdGVyYXRlT3ZlclByb3BlcnRpZXMpOiBBZGQgYW4KICAgICAgICBvcHRpb24gdG8gb25seSBpdGVyYXRlIG92ZXIgdGhlIHZpc2libGUgcHJvcGVydGllcy4gQWxzbyBwYXNzIGFsb25nIGlmIHRoaXMgaXMgdGhlIGxhc3QKICAgICAgICBwcm9wZXJ0eSB0byB0aGUgY2FsbGJhY2suCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuX3VwZGF0ZVRleHRNYXJrZXJzKTogUGFzcyB0cnVlIHRvCiAgICAgICAgX2l0ZXJhdGVPdmVyUHJvcGVydGllcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5fcmVzZXRDb250ZW50KTogUHJldHR5IHByaW50IGlmIHRoZQogICAgICAgIHZpc2libGUgcHJvcGVydHkgY291bnQgaXMgZ3JlYXRlciB0aGFuIHRoZSBsaW5lIGNvdW50LgoKMjAxMy0wMi0yNyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEZpeCB0aGUgdGV4dCBzZWxlY3Rpb24gY29sb3IgaW4gdGhlIHN0eWxlCgogICAgICAgIFRoaXMgaXMgZmFsbG91dCBmcm9tIHVwZ3JhZGluZyB0byBDb2RlTWlycm9yIDMuMS4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMzA3ODg1PiBSRUdSRVNTSU9OOiBTZWxlY3Rpb24gY29sb3IgaW4gQ29kZU1pcnJvciBlZGl0b3JzIGlzIGFsd2F5cyBzaG93aW5nIGFzIGdyYXkgdW5mb2N1c2VkCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLmNzczoKICAgICAgICAoLmNzcy1zdHlsZS10ZXh0LWVkaXRvciA+IC5Db2RlTWlycm9yLkNvZGVNaXJyb3ItZm9jdXNlZCAuQ29kZU1pcnJvci1zZWxlY3RlZCk6IEZpeGVkIHRoZSBzZWxlY3RvcgogICAgICAgIHRvIGxvb2sgZm9yIENvZGVNaXJyb3ItZm9jdXNlZCBvbiB0aGUgLkNvZGVNaXJyb3IgZWxlbWVudC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5jc3M6CiAgICAgICAgKC50ZXh0LWVkaXRvciA+IC5Db2RlTWlycm9yLkNvZGVNaXJyb3ItZm9jdXNlZCAuQ29kZU1pcnJvci1zZWxlY3RlZCk6IERpdHRvLgoKMjAxMy0wMi0yNyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIERvbid0IGRvIGEgZnVsbCByZWZyZXNoIG9mIHRoZSBTdHlsZSBkZXRhaWxzIHNpZGViYXIgdW5sZXNzIHRoZSBpbmNsdWRlZCBzdHlsZSBkZWNsYXJhdGlvbnMKICAgICAgICBhY3R1YWxseSBkaWQgY2hhbmdlLgoKICAgICAgICBGaXJpbmcgdGhlIERPTU5vZGVTdHlsZXMgcmVmcmVzaGVkIGV2ZW50IGNhdXNlIHRoZSBET00gdG8gYmUgcmVidWlsdCBhbmQgdGhhdCBpbnRlcnJ1cHRzIHR5cGluZwogICAgICAgIGFuZCBjYXVzZXMgdGhlIGNoZWNrYm94ZXMgdG8gZmxhc2guCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzMwNjUwNj4gQ1NTIHJ1bGUgYm94IGZsYXNoZXMgY2hlY2tib3hlcyBhbmQgY3Jvc3NlZC1vdXQgdGV4dCBkdXJpbmcgZWRpdGluZwogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzMwNjgxMz4gVHlwaW5nIHZlcnkgZmFzdCBkcm9wcyBjaGFyYWN0ZXJzIHdoZW4gZWRpdGluZyBpbiB0aGUgU3R5bGUgZGV0YWlscyBzaWRlYmFyCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGVTdHlsZXMuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5yZWZyZXNoKTogUmVtb3ZlZCBkb250RmlyZVJlZnJlc2hlZEV2ZW50IHBhcmFtZXRlci4gV2Ugbm93CiAgICAgICAgc21hcnRseSBkZXRlY3QgaWYgdGhlIGV2ZW50IG5lZWRzIHRvIGZpcmUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5yZWZyZXNoLmZldGNoZWRNYXRjaGVkU3R5bGVzKTogUmVtb3ZlIGRvbnRGaXJlUmVmcmVzaGVkRXZlbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5yZWZyZXNoLmZldGNoZWRDb21wdXRlZFN0eWxlKTogSXRlcmF0ZSBvdmVyIHRoZSBzdHlsZXMgYW5kCiAgICAgICAgY2hlY2sgaWYgYW55IHdlcmUgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIHRoZSBsYXN0IHJlZnJlc2guCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5hdHRyaWJ1dGVDaGFuZ2VkKTogU3RvcCBwYXNzaW5nIHRydWUgdG8gcmVmcmVzaCgpLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuX2hhbmRsZVByb3BlcnR5Q2hhbmdlKTogRGl0dG8uCgoyMDEzLTAyLTI3ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LkV2ZW50Lk92ZXJyaWRkZW5TdGF0dXNDaGFuZ2VkIGlzIGZpcmluZyB0b28gbXVjaC4KCiAgICAgICAgSW4gdGhlIHdvcmthcm91bmQgdGhhdCBsYW5kZWQgaW4gcjQ4ODkwLCB3ZSBkZWxheWVkIHRoZSBmZXRjaCBmb3IgaW5saW5lIGFuZCBjb21wdXRlZCBzdHlsZXMuCiAgICAgICAgVGhpcyBjYXVzZWQgdGhlIE92ZXJyaWRkZW5TdGF0dXNDaGFuZ2VkIGV2ZW50IHRvIGZpcmUgYmVjYXVzZSB0aGUgY29hbGVzY2UgZGVsYXkgdGltZWQgb3V0CiAgICAgICAgd2hpbGUgd2FpdGluZyBmb3IgdGhlIGlubGluZSBzdHlsZSB0byBjb21lIG92ZXIgdGhlIHdpcmUuCgogICAgICAgIE5vdyB3ZSBmZXRjaCB0aGVtIGltbWVkaWF0ZWx5IGFnYWluIGFuZCBpZiBtYXRjaGVkIHN0eWxlcyBmYWlscyB3ZSBtYWtlIHRoZSBpbmxpbmUgYW5kIGNvbXB1dGVkCiAgICAgICAgc3R5bGUgY2FsbGJhY2tzIGJhaWwgYmVmb3JlIHBhcnNpbmcgdGhlaXIgcmVzdWx0cy4gRmFpbGluZyBpcyBhbiBlZGdlIGNhc2UgdGhhdCBtaWdodCBiZSBmaXhlZAogICAgICAgIG9uIHRoZSBiYWNrZW5kIHNvb24sIHNvIHRocm93aW5nIHRoZSByZXN1bHRzIGF3YXkgaXNuJ3QgdGhhdCBleHBlbnNpdmUuIFRoaXMgYWxzbyBpbXByb3ZlcwogICAgICAgIHJlZnJlc2ggcGVyZm9ybWFuY2UgaW4gdGhlIGNvbW1vbiBjYXNlLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01Ob2RlU3R5bGVzLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUucmVmcmVzaCk6IEluaXRpYWxpemUgbWF0Y2hlZFN0eWxlc0ZhaWxlZCB0byBmYWxzZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLmZldGNoZWRNYXRjaGVkU3R5bGVzKTogU2V0IG1hdGNoZWRTdHlsZXNGYWlsZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5mZXRjaGVkSW5saW5lU3R5bGVzKTogUmV0dXJuIGVhcmx5IGlmIG1hdGNoZWRTdHlsZXNGYWlsZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5mZXRjaGVkQ29tcHV0ZWRTdHlsZSk6IERpdHRvLgoKMjAxMy0wMi0yNyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFByb3BlcnRpZXMgYXJlIG5vdCB1cGRhdGVkIHdoZW4gb3ZlcnJpZGRlbiBzdGF0dXMgY2hhbmdlcy4KCiAgICAgICAgVGhpcyBpcyBmYWxsb3V0IGZyb20gdXBncmFkaW5nIHRvIENvZGVNaXJyb3IgMy4xLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5fY3JlYXRlVGV4dE1hcmtlckZvclByb3BlcnR5SWZOZWVkZWQpOgogICAgICAgIFRoZSBjbSBwcm9wZXJ0eSBtb3ZlZCB0byB0aGUgbmV3IGRvYyBwcm9wZXJ0eSBvZiBUZXh0TWFya2VyLgoKMjAxMy0wMi0yNyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFByZXR0eSBwcmludCB0aGUgc3R5bGUgdGV4dCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgcHJvcGVydGllcyBvbiBvbmx5IG9uZSBsaW5lLgoKICAgICAgICBUaGlzIGhlbHBzIGNhc2VzIGxpa2UgYXBwbGUuY29tIGFuZCBueXRpbWVzLmNvbSB3aGVyZSBtaW5pZmllZCBvciBzaW5nbGUgbGluZQogICAgICAgIHJ1bGVzIGFyZSB0aGUgbm9ybS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuX3Jlc2V0Q29udGVudCk6IExvb3Agb3ZlcgogICAgICAgIHRoZSBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBtYXJrZXJzIGFuZCBhZGQgbmV3bGluZXMgYWZ0ZXIgdGhlbS4KCjIwMTMtMDItMjcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIGNvbG9yIHN3YXRjaGVzIHNob3cgdXAgZm9yIHVzZXIgYWdlbnQgc3R5bGVzLCBhbmQgb3RoZXIgc3R5bGVzIHRoYXQgZG9uJ3QgaGF2ZSB0ZXh0LgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5fY29udGVudENoYW5nZWQpOiBSZXR1cm4gZWFybHkgaWYgdGhlIHN0eWxlIGlzbid0CiAgICAgICAgZWRpdGFibGUuIFRoaXMgc3RpbGwgY2FuIGJlIGNhbGxlZCB3aGVuIHJlYWRPbmx5IGlzIHNldCBiZWNhdXNlIGNsaWNraW5nIG9uIGEgY29sb3Igc3dhdGNoIG1vZGlmaWVzIHRoZSB0ZXh0LgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLl91cGRhdGVUZXh0TWFya2Vycyk6IEJyb2tlIGNvbG9yIG1hdGNoaW5nIG91dCBpbnRvCiAgICAgICAgX2NyZWF0ZUNvbG9yU3dhdGNoZXMuIEFkZGVkIG5vbmF0b21pYyBzdXBwb3J0IHRvIGF2b2lkIG5lc3Rpbmcgb3BlcmF0aW9ucy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5fY3JlYXRlQ29sb3JTd2F0Y2hlcyk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLl9yZXNldENvbnRlbnQpOiBDYWxsIF9jcmVhdGVDb2xvclN3YXRjaGVzIGluIHN5bnRoZXNpemVkCiAgICAgICAgY2FzZSB3aGVuIHRoZXJlIGlzbid0IHN0eWxlIHRleHQuCgoyMDEzLTAyLTI3ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzIxODE3Mj4gTWFrZSBob3ZlciBzdGF0ZSBmb3IgZGFzaGJvYXJkIGljb25zIG1vcmUgcHJvbm91bmNlZAoKICAgICAgICBBZGQgYSB0aGluIGJvcmRlciBhcm91bmQgZGFzaGJvYXJkIGl0ZW1zIG9uIGhvdmVyIGFuZCBtYWtlIGl0IHNsaWdodGx5CiAgICAgICAgbW9yZSBwcm9ub3VuY2VkIHdoZW4gdGhlIGl0ZW0gaXMgYWxzbyBiZWluZyBjbGlja2VkLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9EYXNoYm9hcmRWaWV3LmNzczoKICAgICAgICAoLmRhc2hib2FyZCA+IC5pdGVtKToKICAgICAgICAoLmRhc2hib2FyZCA+IC5pdGVtLmVuYWJsZWQ6aG92ZXIpOgogICAgICAgICguZGFzaGJvYXJkID4gLml0ZW0uZW5hYmxlZDphY3RpdmUpOgogICAgICAgICgudG9vbGJhci5ub3JtYWwtc2l6ZS5pY29uLWFuZC1sYWJlbC1ob3Jpem9udGFsID4gLml0ZW0tc2VjdGlvbiA+IC5kYXNoYm9hcmQgPiAuaXRlbSk6CiAgICAgICAgKC50b29sYmFyLnNtYWxsLXNpemUuaWNvbi1hbmQtbGFiZWwtdmVydGljYWwgPiAuaXRlbS1zZWN0aW9uID4gLmRhc2hib2FyZCA+IC5pdGVtKToKICAgICAgICAoLnRvb2xiYXIuc21hbGwtc2l6ZS5pY29uLWFuZC1sYWJlbC12ZXJ0aWNhbCA+IC5pdGVtLXNlY3Rpb24gPiAuZGFzaGJvYXJkID4gLnJlc291cmNlcyk6CiAgICAgICAgKC50b29sYmFyLnNtYWxsLXNpemUuaWNvbi1hbmQtbGFiZWwtdmVydGljYWwgPiAuaXRlbS1zZWN0aW9uID4gLmRhc2hib2FyZCA+IC50aW1lKToKICAgICAgICAoLnRvb2xiYXIuc21hbGwtc2l6ZS5pY29uLWFuZC1sYWJlbC12ZXJ0aWNhbCA+IC5pdGVtLXNlY3Rpb24gPiAuZGFzaGJvYXJkID4gLmxvZ3MpOgogICAgICAgICgudG9vbGJhci5zbWFsbC1zaXplLmljb24tYW5kLWxhYmVsLXZlcnRpY2FsID4gLml0ZW0tc2VjdGlvbiA+IC5kYXNoYm9hcmQgPiAubWVtb3J5KToKICAgICAgICAoLnRvb2xiYXIuc21hbGwtc2l6ZS5pY29uLWFuZC1sYWJlbC12ZXJ0aWNhbCA+IC5pdGVtLXNlY3Rpb24gPiAuZGFzaGJvYXJkID4gLmVycm9ycyk6CiAgICAgICAgKC50b29sYmFyLnNtYWxsLXNpemUuaWNvbi1hbmQtbGFiZWwtdmVydGljYWwgPiAuaXRlbS1zZWN0aW9uID4gLmRhc2hib2FyZCA+IC5pc3N1ZXMpOgogICAgICAgICgudG9vbGJhci5ub3JtYWwtc2l6ZS5pY29uLWFuZC1sYWJlbC12ZXJ0aWNhbCA+IC5pdGVtLXNlY3Rpb24gPiAuZGFzaGJvYXJkID4gLml0ZW0pOgogICAgICAgICgudG9vbGJhci5ub3JtYWwtc2l6ZS5pY29uLWFuZC1sYWJlbC12ZXJ0aWNhbCA+IC5pdGVtLXNlY3Rpb24gPiAuZGFzaGJvYXJkID4gLnJlc291cmNlcyk6CiAgICAgICAgKC50b29sYmFyLm5vcm1hbC1zaXplLmljb24tYW5kLWxhYmVsLXZlcnRpY2FsID4gLml0ZW0tc2VjdGlvbiA+IC5kYXNoYm9hcmQgPiAudGltZSk6CiAgICAgICAgKC50b29sYmFyLm5vcm1hbC1zaXplLmljb24tYW5kLWxhYmVsLXZlcnRpY2FsID4gLml0ZW0tc2VjdGlvbiA+IC5kYXNoYm9hcmQgPiAubG9ncyk6CiAgICAgICAgKC50b29sYmFyLm5vcm1hbC1zaXplLmljb24tYW5kLWxhYmVsLXZlcnRpY2FsID4gLml0ZW0tc2VjdGlvbiA+IC5kYXNoYm9hcmQgPiAubWVtb3J5KToKICAgICAgICAoLnRvb2xiYXIubm9ybWFsLXNpemUuaWNvbi1hbmQtbGFiZWwtdmVydGljYWwgPiAuaXRlbS1zZWN0aW9uID4gLmRhc2hib2FyZCA+IC5lcnJvcnMpOgogICAgICAgICgudG9vbGJhci5ub3JtYWwtc2l6ZS5pY29uLWFuZC1sYWJlbC12ZXJ0aWNhbCA+IC5pdGVtLXNlY3Rpb24gPiAuZGFzaGJvYXJkID4gLmlzc3Vlcyk6CgoyMDEzLTAyLTI3ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgVXBkYXRlIENvZGVNaXJyb3IgZnJvbSAzLjAuMiB0byAzLjEuCgogICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IEplZmYgTWlsbGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuZ2V0IGZvY3VzZWQpOiBVc2UgdGhlIHdyYXBwZXIKICAgICAgICBlbGVtZW50IHNpbmNlIHRoZSBjbGFzc25hbWUgbW92ZWQgZnJvbSB0aGUgc2Nyb2xsZXIgZWxlbWVudC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9yLmNzczogVXBkYXRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9yLmpzOiBVcGRhdGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2h0bWxtaXhlZC5qczogVXBkYXRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9qYXZhc2NyaXB0LmpzOiBVcGRhdGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL21hdGNoYnJhY2tldHMuanM6IFVwZGF0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3Ivc2VhcmNoY3Vyc29yLmpzOiBVcGRhdGVkLgoKMjAxMy0wMi0yNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBzdXBwb3J0IHRvIENvZGVNaXJyb3IgZm9yIGluY3JlbWVudGluZyBhbmQgZGVjcmVtZW50aW5nIG51bWJlcnMuCgogICAgICAgIFRoZSBrZXkgYmluZGluZyBhcmU6CiAgICAgICAgKiBPcHRpb24tVXA6ICsxCiAgICAgICAgKiBTaGlmdC1PcHRpb24tVXA6ICsxMAogICAgICAgICogT3B0aW9uLVBhZ2VVcDogKzEwCiAgICAgICAgKiBTaGlmdC1PcHRpb24tUGFnZVVwOiArMTAwCiAgICAgICAgKiBPcHRpb24tRG93bjogLTEKICAgICAgICAqIFNoaWZ0LU9wdGlvbi1Eb3duOiAtMTAKICAgICAgICAqIE9wdGlvbi1QYWdlRG93bjogLTEwCiAgICAgICAgKiBTaGlmdC1BbHQtUGFnZURvd246IC0xMDAKCiAgICAgICAgV2hlbiBhbHRlcmluZyBieSAxIG9yIC0xIGFueSBudW1iZXJzIGJldHdlZW4gMSBhbmQgLTEgd2lsbCBiZSBhbHRlcmVkCiAgICAgICAgYnkgMC4xIG9yIC0wLjEgaW5zdGVhZC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29kZU1pcnJvckFkZGl0aW9ucy5qczoKICAgICAgICAoYWx0ZXJOdW1iZXIpOiBBZGRlZC4gSG9va2VkIHVwIHZpYSB0aGUgZGVmYXVsdCBrZXkgbWFwIHRoYXQgZXh0ZW5kcyB0aGUKICAgICAgICBNYWMga2V5YmluZGluZ3MuIFRoaXMgbWVhbnMgYWxsIGluc3RhbmNlcyBvZiBDb2RlTWlycm9yIGdldCB0aGlzIHN1cHBvcnQuCgoyMDEzLTAyLTI2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIGNvbG9yIHN3YXRjaGVzIG5leHQgdG8gY29sb3Igc3RyaW5ncy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcyMDYyNzI+CgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6IFVwZGF0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLmNzczoKICAgICAgICAoLmNzcy1zdHlsZS10ZXh0LWVkaXRvciA+IC5Db2RlTWlycm9yIC5Db2RlTWlycm9yLWxpbmVzIC5jb2xvci1zd2F0Y2gpOiBBZGRlZC4KICAgICAgICAoLmNzcy1zdHlsZS10ZXh0LWVkaXRvciA+IC5Db2RlTWlycm9yIC5Db2RlTWlycm9yLWxpbmVzIC5jb2xvci1zd2F0Y2ggPiBzcGFuKTogQWRkZWQuCiAgICAgICAgKC5jc3Mtc3R5bGUtdGV4dC1lZGl0b3IgPiAuQ29kZU1pcnJvciAuQ29kZU1pcnJvci1saW5lcyAuY29sb3Itc3dhdGNoOmhvdmVyID4gc3Bhbik6IEFkZGVkLgogICAgICAgICguY3NzLXN0eWxlLXRleHQtZWRpdG9yID4gLkNvZGVNaXJyb3IgLkNvZGVNaXJyb3ItbGluZXMgLmNvbG9yLXN3YXRjaDphY3RpdmUgPiBzcGFuKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLl91cGRhdGVUZXh0TWFya2Vycyk6IFNlYXJjaCBmb3IgY29sb3JzCiAgICAgICAgYW5kIGFkZCBzd2F0Y2hlcyBuZXh0IHRvIHRoZW0uCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuX2NvbG9yU3dhdGNoQ2xpY2tlZCk6IEFkZGVkLiBSZXBsYWNlIHRoZQogICAgICAgIHRleHQgd2l0aCB0aGUgbmV4dCBjb2xvciBmb3JtYXQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29sb3IucHJvdG90eXBlLm5leHRGb3JtYXQpOiBBZGRlZC4gSGVscGVyIHRvIHBpY2sgdGhlIG5leHQgZm9ybWF0LgoKMjAxMy0wMi0yNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBjaGVja2JveGVzIG5leHQgdG8gcHJvcGVydHkgbmFtZXMgYW5kIGNvbW1lbnRlZCBvdXQgcHJvcGVydGllcy4KCiAgICAgICAgVW5jaGVja2luZyB3aWxsIGNvbW1lbnQgb3V0IHRoZSBwcm9wZXJ0eSBhbmQgY2hlY2tpbmcgdGhlIGJveCBuZXh0IHRvIGEgcHJvcGVydHkgY29tbWVudAogICAgICAgIHdpbGwgdW5jb21tZW50IGl0IGFuZCBtYWtlIGl0IGxpdmUgYWdhaW4uCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MjA2MjcyPgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5jc3M6CiAgICAgICAgKC5jc3Mtc3R5bGUtdGV4dC1lZGl0b3IucmVhZC1vbmx5ID4gLkNvZGVNaXJyb3IgcHJlKTogQWRkZWQuIEluZGVudCB0aGUgdGV4dCB0aGUgc2FtZSBhbW91bnQKICAgICAgICBhcyBpZiB0aGVyZSB3ZXJlIGNoZWNrYm94ZXMuCiAgICAgICAgKC5jc3Mtc3R5bGUtdGV4dC1lZGl0b3IgPiAuQ29kZU1pcnJvciAuQ29kZU1pcnJvci1saW5lcyBpbnB1dFt0eXBlPWNoZWNrYm94XSk6IEFkZGVkLgogICAgICAgICguY3NzLXN0eWxlLXRleHQtZWRpdG9yOmhvdmVyID4gLkNvZGVNaXJyb3IgLkNvZGVNaXJyb3ItbGluZXMgaW5wdXRbdHlwZT1jaGVja2JveF0pOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuX3VwZGF0ZVRleHRNYXJrZXJzKTogTG9vayBmb3IgY29tbWVudHMKICAgICAgICB0aGF0IGxvb2sgbGlrZSBwcm9wZXJ0aWVzIGFuZCBhZGQgY2hlY2tib3hlcyBpbiBmcm9udCBvZiB0aGVtLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLl9jcmVhdGVUZXh0TWFya2VyRm9yUHJvcGVydHlJZk5lZWRlZCk6CiAgICAgICAgQ3JlYXRlIGNoZWNrYm94IG1hcmtlciBmb3IgcHJvcGVydGllcyBvciB1cGRhdGUgdGhlIGV4aXN0aW5nIG9uZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5fY2xlYXJUZXh0TWFya2Vycyk6IERlbGV0ZSBfX2NoZWNrYm94TWFya2VyLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLl9wcm9wZXJ0eUNoZWNrYm94Q2hhbmdlZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLl9wcm9wZXJ0eUNvbW1lbnRDaGVja2JveENoYW5nZWQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5fcmVzZXRDb250ZW50KTogU2V0IHRoZSByZWFkLW9ubHkgc3R5bGUgY2xhc3MKICAgICAgICBzbyB0aGUgdGV4dCBvZiByZWFkLW9ubHkgc3R5bGVzIGlzIGluZGVudGVkIHRoZSBzYW1lIGFtb3VudCBhcyBpZiB0aGVyZSB3ZXJlIGNoZWNrYm94ZXMuCgoyMDEzLTAyLTI1ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgSW1wbGVtZW50IHRoZSBSdWxlcyBkZXRhaWxzIHN0eWxlIHBhbmVsLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzIwNjI3MiYxMjUyNjMxOT4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczogVXBkYXRlZC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uLmNzczogQWRkZWQuCiAgICAgICAgKC5zdHlsZS1kZWNsYXJhdGlvbi1zZWN0aW9uKToKICAgICAgICAoLnN0eWxlLWRlY2xhcmF0aW9uLXNlY3Rpb24gKyAuc3R5bGUtZGVjbGFyYXRpb24tc2VjdGlvbik6CiAgICAgICAgKC5zdHlsZS1kZWNsYXJhdGlvbi1zZWN0aW9uLmxhc3QtaW4tZ3JvdXApOgogICAgICAgICguc3R5bGUtZGVjbGFyYXRpb24tc2VjdGlvbi5sYXN0LWluLWdyb3VwICsgLnN0eWxlLWRlY2xhcmF0aW9uLXNlY3Rpb24pOgogICAgICAgICguc3R5bGUtZGVjbGFyYXRpb24tc2VjdGlvbi5sYXN0LWluLWdyb3VwICsgLnN0eWxlLWRlY2xhcmF0aW9uLXNlY3Rpb246bGFzdC1jaGlsZCk6CiAgICAgICAgKC5zdHlsZS1kZWNsYXJhdGlvbi1zZWN0aW9uOmxhc3QtY2hpbGQpOgogICAgICAgICguc3R5bGUtZGVjbGFyYXRpb24tc2VjdGlvbiA+IC5oZWFkZXIpOgogICAgICAgICguc3R5bGUtZGVjbGFyYXRpb24tc2VjdGlvbiA+IC5oZWFkZXIgPiAuaWNvbik6CiAgICAgICAgKC5zdHlsZS1kZWNsYXJhdGlvbi1zZWN0aW9uID4gLmhlYWRlciA+IC5zZWxlY3Rvcik6CiAgICAgICAgKC5zdHlsZS1kZWNsYXJhdGlvbi1zZWN0aW9uID4gLmhlYWRlciA+IC5zZWxlY3Rvcjpmb2N1cyk6CiAgICAgICAgKC5zdHlsZS1kZWNsYXJhdGlvbi1zZWN0aW9uLnNlbGVjdG9yLWxvY2tlZCA+IC5oZWFkZXIgPiAuc2VsZWN0b3IpOgogICAgICAgICguc3R5bGUtZGVjbGFyYXRpb24tc2VjdGlvbi5sb2NrZWQgPiAuaGVhZGVyOjphZnRlcik6CiAgICAgICAgKC5zdHlsZS1kZWNsYXJhdGlvbi1zZWN0aW9uID4gLmhlYWRlciA+IC5zZWxlY3RvciA+IC5tYXRjaGVkKToKICAgICAgICAoLnN0eWxlLWRlY2xhcmF0aW9uLXNlY3Rpb24gPiAuaGVhZGVyID4gLm9yaWdpbik6CiAgICAgICAgKC5zdHlsZS1kZWNsYXJhdGlvbi1zZWN0aW9uID4gLmhlYWRlciA+IC5vcmlnaW4gPiAuZ28tdG8tbGluayk6CgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURlY2xhcmF0aW9uU2VjdGlvbi5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uU2VjdGlvbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uU2VjdGlvbi5wcm90b3R5cGUuZ2V0IGVsZW1lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblNlY3Rpb24ucHJvdG90eXBlLmdldCBzdHlsZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uU2VjdGlvbi5wcm90b3R5cGUuZ2V0IGxhc3RJbkdyb3VwKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uLnByb3RvdHlwZS5zZXQgbGFzdEluR3JvdXApOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblNlY3Rpb24ucHJvdG90eXBlLmdldCBmb2N1c2VkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uLnByb3RvdHlwZS5mb2N1cyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uU2VjdGlvbi5wcm90b3R5cGUucmVmcmVzaC5hcHBlbmRTZWxlY3Rvcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uU2VjdGlvbi5wcm90b3R5cGUucmVmcmVzaCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uU2VjdGlvbi5wcm90b3R5cGUudXBkYXRlTGF5b3V0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uLnByb3RvdHlwZS5fY29tbWl0U2VsZWN0b3IpOgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1N0eWxlUnVsZUF1dGhvci5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvU3R5bGVSdWxlSW5oZXJpdGVkLnBkZjogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9TdHlsZVJ1bGVJbmhlcml0ZWRFbGVtZW50LnBkZjogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9TdHlsZVJ1bGVJbnNwZWN0b3IucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1N0eWxlUnVsZVVzZXIucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1N0eWxlUnVsZVVzZXJBZ2VudC5wZGY6IEFkZGVkLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlZCBuZXcgZmlsZXMuCgogICAgICAgICogVXNlckludGVyZmFjZS9SdWxlc1N0eWxlRGV0YWlsc1BhbmVsLmNzczogQWRkZWQuCiAgICAgICAgKC5zaWRlYmFyID4gLnBhbmVsLmRldGFpbHMuY3NzLXN0eWxlIC5ydWxlcyAuaW5oZXJpdGVkLWxhYmVsKToKICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuZGV0YWlscy5jc3Mtc3R5bGUgLnJ1bGVzIC5pbmhlcml0ZWQtbGFiZWwgKyAuc3R5bGUtZGVjbGFyYXRpb24tc2VjdGlvbik6CgogICAgICAgICogVXNlckludGVyZmFjZS9SdWxlc1N0eWxlRGV0YWlsc1BhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUnVsZXNTdHlsZURldGFpbHNQYW5lbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SdWxlc1N0eWxlRGV0YWlsc1BhbmVsLnByb3RvdHlwZS5yZWZyZXNoLmFwcGVuZFN0eWxlU2VjdGlvbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SdWxlc1N0eWxlRGV0YWlsc1BhbmVsLnByb3RvdHlwZS5yZWZyZXNoKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJ1bGVzU3R5bGVEZXRhaWxzUGFuZWwucHJvdG90eXBlLnNob3duKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJ1bGVzU3R5bGVEZXRhaWxzUGFuZWwucHJvdG90eXBlLmhpZGRlbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SdWxlc1N0eWxlRGV0YWlsc1BhbmVsLnByb3RvdHlwZS53aWR0aERpZENoYW5nZSk6CgogICAgICAgICogVXNlckludGVyZmFjZS9TdHlsZVJ1bGVJY29ucy5jc3M6IEFkZGVkLgogICAgICAgICguYXV0aG9yLXN0eWxlLXJ1bGUtaWNvbiAuaWNvbik6CiAgICAgICAgKC51c2VyLXN0eWxlLXJ1bGUtaWNvbiAuaWNvbik6CiAgICAgICAgKC51c2VyLWFnZW50LXN0eWxlLXJ1bGUtaWNvbiAuaWNvbik6CiAgICAgICAgKC5pbnNwZWN0b3Itc3R5bGUtcnVsZS1pY29uIC5pY29uKToKICAgICAgICAoLmluaGVyaXRlZC1zdHlsZS1ydWxlLWljb24gLmljb24pOgogICAgICAgICguaW5oZXJpdGVkLWVsZW1lbnQtc3R5bGUtcnVsZS1pY29uIC5pY29uKToKCjIwMTMtMDItMjUgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBJbXBsZW1lbnQgdGhlIENvbXB1dGVkIGRldGFpbHMgc3R5bGUgcGFuZWwuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6IFVwZGF0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbXB1dGVkU3R5bGVEZXRhaWxzUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db21wdXRlZFN0eWxlRGV0YWlsc1BhbmVsKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbXB1dGVkU3R5bGVEZXRhaWxzUGFuZWwucHJvdG90eXBlLnJlZnJlc2gpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29tcHV0ZWRTdHlsZURldGFpbHNQYW5lbC5wcm90b3R5cGUuc2hvd24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29tcHV0ZWRTdHlsZURldGFpbHNQYW5lbC5wcm90b3R5cGUud2lkdGhEaWRDaGFuZ2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29tcHV0ZWRTdHlsZURldGFpbHNQYW5lbC5wcm90b3R5cGUuX2NvbXB1dGVkU3R5bGVTaG93QWxsQ2hlY2tib3hWYWx1ZUNoYW5nZWQpOgoKMjAxMy0wMi0yNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBDU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci4KCiAgICAgICAgVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgcmljaCB0ZXh0IGVkaXRvciBmb3Igc3R5bGUgdGV4dC4gSXQgd2lsbCByZWZsZWN0IHRoZSBhc3NpZ25lZCBDU1NTdHlsZURlY2xhcmF0aW9uLgogICAgICAgIEVkaXRzIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcGFnZSBhbmQgcHJvcGVydHkgcGFyc2UgZXJyb3JzIG9yIG92ZXJyaWRkZW4gc3RhdHVzIHdpbGwgYmUgaGlnaGxpZ2h0ZWQuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLmNzczogQWRkZWQuCiAgICAgICAgKC5jc3Mtc3R5bGUtdGV4dC1lZGl0b3IpOgogICAgICAgICguY3NzLXN0eWxlLXRleHQtZWRpdG9yID4gLkNvZGVNaXJyb3IpOgogICAgICAgICguY3NzLXN0eWxlLXRleHQtZWRpdG9yID4gLkNvZGVNaXJyb3IgKik6CiAgICAgICAgKC5jc3Mtc3R5bGUtdGV4dC1lZGl0b3IgPiAuQ29kZU1pcnJvci1zY3JvbGwpOgogICAgICAgICguY3NzLXN0eWxlLXRleHQtZWRpdG9yID4gLkNvZGVNaXJyb3IgLkNvZGVNaXJyb3ItbGluZXMpOgogICAgICAgICguY3NzLXN0eWxlLXRleHQtZWRpdG9yID4gLkNvZGVNaXJyb3IgcHJlKToKICAgICAgICAoLmNzcy1zdHlsZS10ZXh0LWVkaXRvciA+IC5Db2RlTWlycm9yIC5Db2RlTWlycm9yLXNlbGVjdGVkKToKICAgICAgICAoLmNzcy1zdHlsZS10ZXh0LWVkaXRvciA+IC5Db2RlTWlycm9yIC5Db2RlTWlycm9yLWZvY3VzZWQgLkNvZGVNaXJyb3Itc2VsZWN0ZWQpOgogICAgICAgICguY3NzLXN0eWxlLXRleHQtZWRpdG9yID4gLkNvZGVNaXJyb3IgLkNvZGVNaXJyb3ItY3Vyc29yKToKICAgICAgICAoLmNzcy1zdHlsZS10ZXh0LWVkaXRvciA+IC5Db2RlTWlycm9yIC5Db2RlTWlycm9yLWxpbmVzIC5jc3Mtc3R5bGUtZGVjbGFyYXRpb24tcHJvcGVydHkub3ZlcnJpZGRlbik6CiAgICAgICAgKC5jc3Mtc3R5bGUtdGV4dC1lZGl0b3IgPiAuQ29kZU1pcnJvciAuQ29kZU1pcnJvci1saW5lcyAuY3NzLXN0eWxlLWRlY2xhcmF0aW9uLXByb3BlcnR5LmludmFsaWQpOgogICAgICAgICguY3NzLXN0eWxlLXRleHQtZWRpdG9yID4gLkNvZGVNaXJyb3IgLkNvZGVNaXJyb3ItbGluZXMgLmNzcy1zdHlsZS1kZWNsYXJhdGlvbi1wcm9wZXJ0eS5ub3QtaW5oZXJpdGVkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLmdldCBlbGVtZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5nZXQgZGVsZWdhdGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLnNldCBkZWxlZ2F0ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuZ2V0IHN0eWxlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5zZXQgc3R5bGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLmdldCBmb2N1c2VkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5nZXQgYWx3YXlzU2hvd1Byb3BlcnR5TmFtZXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLnNldCBhbHdheXNTaG93UHJvcGVydHlOYW1lcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuZ2V0IHNob3dzSW1wbGljaXRQcm9wZXJ0aWVzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5zZXQgc2hvd3NJbXBsaWNpdFByb3BlcnRpZXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLmdldCBzb3J0UHJvcGVydGllcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuc2V0IHNvcnRQcm9wZXJ0aWVzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5mb2N1cyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUucmVmcmVzaCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUudXBkYXRlTGF5b3V0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5zaG93bik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuaGlkZGVuKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5fZm9ybWF0ZWRDb250ZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5fY29tbWl0Q2hhbmdlcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuX2NvbnRlbnRDaGFuZ2VkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5fdXBkYXRlVGV4dE1hcmtlcnMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLl91cGRhdGVUZXh0TWFya2VyRm9yUHJvcGVydHlJZk5lZWRlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuX2NyZWF0ZVRleHRNYXJrZXJGb3JQcm9wZXJ0eUlmTmVlZGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5fY2xlYXJUZXh0TWFya2Vycyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuX2l0ZXJhdGVPdmVyUHJvcGVydGllcy5zb3J0UHJvcGVydHkpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLl9pdGVyYXRlT3ZlclByb3BlcnRpZXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLl9wcm9wZXJ0eU92ZXJyaWRkZW5TdGF0dXNDaGFuZ2VkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5fcHJvcGVydGllc0NoYW5nZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLl9zdHlsZU9mZnNldFRvQ29kZU1pcnJvclBvc2l0aW9uKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZS5fcmVzZXRDb250ZW50LnVwZGF0ZS5lbHNlLmxpbmVDb3VudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuX3Jlc2V0Q29udGVudC51cGRhdGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLl9yZXNldENvbnRlbnQpOgogICAgICAgICogVXNlckludGVyZmFjZS9Db2RlTWlycm9yQWRkaXRpb25zLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CgoyMDEzLTAyLTI1ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgSW1wbGVtZW50IHRoZSBNZXRyaWNzIGRldGFpbHMgc3R5bGUgcGFuZWwuCgogICAgICAgIENvbnZlcnRzIEJveE1vZGVsRGV0YWlsc1NlY3Rpb25Sb3cgdG8gdXNlIHRoZSBuZXcgQ1NTIG1vZGVsLiBSZW1vdmVzIGNvZGUgbmVlZGVkIHRvCiAgICAgICAgd29yayB3aXRoIHRoZSBvbGQgQ1NTIG1vZGVsLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiBVcGRhdGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9Cb3hNb2RlbERldGFpbHNTZWN0aW9uUm93LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQm94TW9kZWxEZXRhaWxzU2VjdGlvblJvdyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Cb3hNb2RlbERldGFpbHNTZWN0aW9uUm93LnByb3RvdHlwZS5nZXQgbm9kZVN0eWxlcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Cb3hNb2RlbERldGFpbHNTZWN0aW9uUm93LnByb3RvdHlwZS5zZXQgbm9kZVN0eWxlcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Cb3hNb2RlbERldGFpbHNTZWN0aW9uUm93LnByb3RvdHlwZS5fcmVmcmVzaCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Cb3hNb2RlbERldGFpbHNTZWN0aW9uUm93LnByb3RvdHlwZS5fZ2V0UHJvcGVydHlWYWx1ZUFzUHgpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQm94TW9kZWxEZXRhaWxzU2VjdGlvblJvdy5wcm90b3R5cGUuX2hpZ2hsaWdodERPTU5vZGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQm94TW9kZWxEZXRhaWxzU2VjdGlvblJvdy5wcm90b3R5cGUuX3VwZGF0ZU1ldHJpY3MuY3JlYXRlQm94UGFydEVsZW1lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQm94TW9kZWxEZXRhaWxzU2VjdGlvblJvdy5wcm90b3R5cGUuX3VwZGF0ZU1ldHJpY3MuY3JlYXRlQ29udGVudEFyZWFXaWR0aEVsZW1lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQm94TW9kZWxEZXRhaWxzU2VjdGlvblJvdy5wcm90b3R5cGUuX3VwZGF0ZU1ldHJpY3MuY3JlYXRlQ29udGVudEFyZWFIZWlnaHRFbGVtZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkJveE1vZGVsRGV0YWlsc1NlY3Rpb25Sb3cucHJvdG90eXBlLl91cGRhdGVNZXRyaWNzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkJveE1vZGVsRGV0YWlsc1NlY3Rpb25Sb3cucHJvdG90eXBlLl9zdGFydEVkaXRpbmcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQm94TW9kZWxEZXRhaWxzU2VjdGlvblJvdy5wcm90b3R5cGUuX2FsdGVyZWRGbG9hdE51bWJlcik6IEFkZGVkLiBDb3BpZWQgZnJvbSB0aGUgbm93CiAgICAgICAgcmVtb3ZlZCBDU1NQcm9wZXJ0eVByb21wdCBjbGFzcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkJveE1vZGVsRGV0YWlsc1NlY3Rpb25Sb3cucHJvdG90eXBlLl9oYW5kbGVLZXlEb3duKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkJveE1vZGVsRGV0YWlsc1NlY3Rpb25Sb3cucHJvdG90eXBlLl9lZGl0aW5nQ2FuY2VsbGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkJveE1vZGVsRGV0YWlsc1NlY3Rpb25Sb3cucHJvdG90eXBlLl9hcHBseVVzZXJJbnB1dCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01ldHJpY3NTdHlsZURldGFpbHNQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLk1ldHJpY3NTdHlsZURldGFpbHNQYW5lbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5NZXRyaWNzU3R5bGVEZXRhaWxzUGFuZWwucHJvdG90eXBlLnJlZnJlc2gpOgoKMjAxMy0wMi0yNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFJlbWVtYmVyIHRoZSBzY3JvbGwgcG9zaXRpb24gd2hlbiByZWZyZXNoaW5nIHRoZSBzdHlsZSBkZXRhaWwgcGFuZWxzLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9TdHlsZURldGFpbHNQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlRGV0YWlsc1BhbmVsLnByb3RvdHlwZS5yZWZyZXNoSWZOZWVkZWQpOiBDYWxsIF9yZWZyZXNoUHJlc2VydmluZ1Njcm9sbFBvc2l0aW9uCiAgICAgICAgaW5zdGVhZCByZWZyZXNoLgogICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVEZXRhaWxzUGFuZWwucHJvdG90eXBlLl9yZWZyZXNoUHJlc2VydmluZ1Njcm9sbFBvc2l0aW9uKTogQWRkZWQuIE9ubHkgcmVtZW1iZXIgdGhlCiAgICAgICAgc2Nyb2xsIHBvc2l0aW9uIGlmIHRoZSBwcmV2aW91cyBub2RlIGlzIHRoZSBzYW1lIGFzIHRoaXMgb25lLgogICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVEZXRhaWxzUGFuZWwucHJvdG90eXBlLl9ub2RlU3R5bGVzUmVmcmVzaGVkKTogQ2FsbCBfcmVmcmVzaFByZXNlcnZpbmdTY3JvbGxQb3NpdGlvbgogICAgICAgIGluc3RlYWQgcmVmcmVzaC4KCjIwMTMtMDItMjUgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBUZWxsIFNpZGViYXJQYW5lbCBhbmQgU3R5bGVEZXRhaWxzUGFuZWwgd2hlbiB0aGUgd2lkdGggb2YgdGhlIFNpZGViYXIgY2hhbmdlcy4KCiAgICAgICAgVGhpcyB3aWxsIGJlIG5lZWRlZCB0byB1cGRhdGUgQ29kZU1pcnJvciBvbiB0aGUgc2l6ZSBjaGFuZ2UuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUudmlzaWJpbGl0eURpZENoYW5nZSk6IEFkZGVkLiBUZWxsIHRoZSBzZWxlY3RlZAogICAgICAgIHBhbmVsIHRvIHJlZnJlc2ggaWYgbmVlZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS53aWR0aERpZENoYW5nZSk6IEFkZGVkLiBUZWxsIHRoZSBzZWxlY3RlZCBwYW5lbAogICAgICAgIHRoYXQgdGhlIHdpZHRoIGNoYW5nZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NpZGViYXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyLnByb3RvdHlwZS5zZXQgd2lkdGgpOiBDYWxsIHdpZHRoRGlkQ2hhbmdlIG9uIHRoZSBzaWRlYmFyIHBhbmVsLgogICAgICAgIChXZWJJbnNwZWN0b3IuU2lkZWJhci5wcm90b3R5cGUuc2V0IGNvbGxhcHNlZCk6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9TaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyUGFuZWwucHJvdG90eXBlLndpZHRoRGlkQ2hhbmdlKTogQWRkZWQgc3R1Yi4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3R5bGVEZXRhaWxzUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZURldGFpbHNQYW5lbC5wcm90b3R5cGUud2lkdGhEaWRDaGFuZ2UpOiBBZGRlZCBzdHViLgoKMjAxMy0wMi0yMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBzdGFydCBpbXBsZW1lbnRhdGlvbiBmb3IgZWFjaCBvZiB0aGUgdGhyZWUgU3R5bGUgZGV0YWlsIHBhbmVscy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcyMDYyNzImMTI1MjYzMTk+CgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6IFVwZGF0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5jc3M6CiAgICAgICAgKC5zaWRlYmFyID4gLnBhbmVsLmRldGFpbHMuY3NzLXN0eWxlKToKICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuZGV0YWlscy5jc3Mtc3R5bGUgPiAubmF2aWdhdGlvbi1iYXIpOgogICAgICAgICguc2lkZWJhciA+IC5wYW5lbC5kZXRhaWxzLmNzcy1zdHlsZSA+IC5jb250ZW50KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUucmVmcmVzaCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9uYXZpZ2F0aW9uSXRlbVNlbGVjdGVkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29tcHV0ZWRTdHlsZURldGFpbHNQYW5lbC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db21wdXRlZFN0eWxlRGV0YWlsc1BhbmVsKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NTm9kZVN0eWxlcy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLmdldCBuZWVkc1JlZnJlc2gpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuX3VwZGF0ZVN0aWNreVBvc3Rpb25TdHlsZXMpOgogICAgICAgICogVXNlckludGVyZmFjZS9NZXRyaWNzU3R5bGVEZXRhaWxzUGFuZWwuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuTWV0cmljc1N0eWxlRGV0YWlsc1BhbmVsKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUnVsZXNTdHlsZURldGFpbHNQYW5lbC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SdWxlc1N0eWxlRGV0YWlsc1BhbmVsKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3R5bGVEZXRhaWxzUGFuZWwuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVEZXRhaWxzUGFuZWwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVEZXRhaWxzUGFuZWwucHJvdG90eXBlLmdldCBlbGVtZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlRGV0YWlsc1BhbmVsLnByb3RvdHlwZS5nZXQgbmF2aWdhdGlvbkl0ZW0pOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVEZXRhaWxzUGFuZWwucHJvdG90eXBlLmdldCBub2RlU3R5bGVzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlRGV0YWlsc1BhbmVsLnByb3RvdHlwZS5zaG93bik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZURldGFpbHNQYW5lbC5wcm90b3R5cGUuaGlkZGVuKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlRGV0YWlsc1BhbmVsLnByb3RvdHlwZS5tYXJrQXNOZWVkc1JlZnJlc2gpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVEZXRhaWxzUGFuZWwucHJvdG90eXBlLnJlZnJlc2hJZk5lZWRlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZURldGFpbHNQYW5lbC5wcm90b3R5cGUucmVmcmVzaCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZURldGFpbHNQYW5lbC5wcm90b3R5cGUuX25vZGVTdHlsZXNSZWZyZXNoZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVEZXRhaWxzUGFuZWwucHJvdG90eXBlLl9ub2RlU3R5bGVzTmVlZHNSZWZyZXNoZWQpOgoKMjAxMy0wMi0yMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBzdGFydCBvZiBuZXcgaW1wbGVtZW50YXRpb24gb2YgQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzIwNjI3MiYxMjUyNjMxOT4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLmNzczogQWRkZWQuCiAgICAgICAgKC5zaWRlYmFyID4gLnBhbmVsLmRldGFpbHMuY3NzLXN0eWxlKTogQWRkZWQuIEVtcHR5IGZvciBub3cuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5zdXBwb3J0c0RPTU5vZGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5yZWZyZXNoKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05hdmlnYXRpb25JdGVtQnJ1c2hBbmRSdWxlci5wZGY6IEFkZGVkLgoKMjAxMy0wMi0yMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFJlbW92ZSBDU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwgYW5kIGZyaWVuZHMgaW4gcHJlcGFyYXRpb24gZm9yIGEgbmV3IGltcGxlbWVudGF0aW9uLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzIwNjI3MiYxMjUyNjMxOT4KCiAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTUHJvcGVydHlQcm9tcHQuanM6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5jc3M6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5qczogUmVtb3ZlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29tcHV0ZWRTdHlsZVByb3BlcnRpZXNTZWN0aW9uLmpzOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IFJlbW92ZWQgZmlsZXMgZXhjZXB0IENTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC57anMsY3NzfS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvT2xkQ1NTTWVkaWEuanM6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL09sZENTU1Byb3BlcnR5LmpzOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9PbGRDU1NSdWxlLmpzOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9PbGRDU1NTdHlsZURlY2xhcmF0aW9uLmpzOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9TdHlsZVByb3BlcnRpZXNTZWN0aW9uLmpzOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQuanM6IFJlbW92ZWQuCgoyMDEzLTAyLTIxICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUmVtb3ZlIEFwcGVhcmFuY2VEZXRhaWxzU2lkZWJhclBhbmVsIGluIHByZXBhcmF0aW9uIGZvciBpdCBiZWluZyBtZXJnZWQgd2l0aCBTdHlsZSBkZXRhaWxzLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzIwNjI3MiYxMjUyNjMxOT4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQXBwZWFyYW5jZURldGFpbHNTaWRlYmFyUGFuZWwuanM6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogUmVtb3ZlZCBBcHBlYXJhbmNlRGV0YWlsc1NpZGViYXJQYW5lbC5qcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOiBSZW1vdmVkIEFwcGVhcmFuY2VEZXRhaWxzU2lkZWJhclBhbmVsLgoKMjAxMy0wMi0yMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBzdXBwb3J0IGZvciB0ZXh0IG9ubHkgbmF2aWdhdGlvbiBidXR0b25zLgoKICAgICAgICBUaGlzIHdpbGwgYmUgdXNlZCBieSB0aGUgbmF2aWdhdGlvbiBiYXIgaW4gdGhlIG5ldyBTdHlsZXMgc2lkZWJhci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnV0dG9uTmF2aWdhdGlvbkl0ZW0uY3NzOgogICAgICAgICgubmF2aWdhdGlvbi1iYXIgLml0ZW0uYnV0dG9uLnRleHQtb25seSk6IEFkZGVkLgogICAgICAgICgubmF2aWdhdGlvbi1iYXIgLml0ZW0uYnV0dG9uOm5vdCguZGlzYWJsZWQpOm5vdCgucmFkaW8pOm5vdCguc3VwcHJlc3MtYmV6ZWwpOmFjdGl2ZSk6CiAgICAgICAgVXNlIC13ZWJraXQtY2FsYyBpbiB0aGUgYmFja2dyb3VuZC1wb3NpdGlvbiB0byB3b3JrIHdpdGggdmFyaWFibGUgd2lkdGhzLgogICAgICAgICogVXNlckludGVyZmFjZS9CdXR0b25OYXZpZ2F0aW9uSXRlbS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkJ1dHRvbk5hdmlnYXRpb25JdGVtKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkJ1dHRvbk5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5nZXQgbGFiZWwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnV0dG9uTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLnNldCBsYWJlbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuc2V0IGltYWdlKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmFkaW9CdXR0b25OYXZpZ2F0aW9uSXRlbS5jc3M6CiAgICAgICAgKC5uYXZpZ2F0aW9uLWJhciAuaXRlbS5yYWRpby5idXR0b246bm90KC50ZXh0LW9ubHkpKTogQWRkZWQgOm5vdCgudGV4dC1vbmx5KSB0byBhbGxvdwogICAgICAgIHZhcmlhYmxlIGJhc2VkIG9uIHRleHQgbGVuZ3RoLgogICAgICAgICgubmF2aWdhdGlvbi1iYXIuY29sbGFwc2VkIC5pdGVtLnJhZGlvLmJ1dHRvbjpub3QoLnRleHQtb25seSkpOiBEaXR0by4KICAgICAgICAoLm5hdmlnYXRpb24tYmFyIC5pdGVtLnJhZGlvLmJ1dHRvbi5zZWxlY3RlZCk6IFVzZSAtd2Via2l0LWNhbGMgaW4gdGhlIGJhY2tncm91bmQtcG9zaXRpb24KICAgICAgICB0byB3b3JrIHdpdGggdmFyaWFibGUgd2lkdGhzLgoKMjAxMy0wMi0yNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIERvbid0IHRyeSB0byBjb21taXQgY2hhbmdlcyBiZWZvcmUgd2UgaGF2ZSBuZXcgdGV4dCBwb3NpdGlvbnMuCgogICAgICAgIFdlIG5lZWQgdG8ga2VlcCB0aGUgc3RhcnRTdHlsZVNoZWV0VGV4dFBvc2l0aW9uIGFuZCBlbmRTdHlsZVNoZWV0VGV4dFBvc2l0aW9uIHVwLXRvLWRhdGUuCiAgICAgICAgSWYgd2UgZG9uJ3QgaGF2ZSB0aGUgY29ycmVjdCBwb3NpdGlvbnMgdGhlbiB3ZSBjYW4gY29ycnVwdCB0aGUgc3R5bGVzaGVldCB0aGUgbmV4dCB0aW1lCiAgICAgICAgdGhlIHVzZXIgbWFrZXMgYW4gZWRpdC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NTm9kZVN0eWxlcy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMpOiBJbml0aWFsaXplIF9zdHlsZXNOZWVkaW5nVGV4dENvbW1pdGVkIHRvIFtdLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUucmVmcmVzaCk6IENhbGwgY2hhbmdlU3R5bGVUZXh0IGZvciB0aGUgbmV4dCBzdHlsZQogICAgICAgIG9iamVjdCB0aGF0IG5lZWRzIGNoYW5nZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5jaGFuZ2VSdWxlU2VsZWN0b3IpOiBTZXQgX25lZWRzUmVmcmVzaCB0byB0cnVlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuY2hhbmdlU3R5bGVUZXh0KTogSWYgd2UgbmVlZCBhIHJlZnJlc2ggdGhlbiBpdCBpcyBub3Qgc2FmZQogICAgICAgIHRvIG1ha2UgdGhlIGVkaXRzIG5vdy4gU3RvcmUgdGhlIHRleHQgYW5kIHJlbWVtYmVyIHRoZSBzdHlsZSBzbyB3ZSBjYW4gY29tbWl0IGl0IGFmdGVyIHRoZSBuZXh0IHJlZnJlc2guCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5jaGFuZ2VQcm9wZXJ0eVRleHQpOiBTZXQgX25lZWRzUmVmcmVzaCB0byB0cnVlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuX2hhbmRsZVByb3BlcnR5Q2hhbmdlKTogQ2FsbCByZWZyZXNoIHRvIGdldCB1cGRhdGVkIHBvc2l0aW9ucyBhbmQKICAgICAgICBjb21wdXRlZCBzdHlsZSBpbmZvLgoKMjAxMy0wMi0yNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFsd2F5cyB0cnkgdG8gdXBkYXRlIHRoZSByZXNvdXJjZSB3aGVuIGEgc3R5bGVzaGVldCBjaGFuZ2VzLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlLnN0eWxlU2hlZXRDaGFuZ2VkKTogQWx3YXlzIGNhbGwgX3VwZGF0ZVJlc291cmNlQ29udGVudC4gVGhpcwogICAgICAgIHdhcyBwcmV2ZW50aW5nIHJlc291cmNlIHVwZGF0ZXMgd2hlbiB0aGUgc3R5bGVzaGVldCBjaGFuZ2VkIGJlY2F1c2Ugb2YgYSBzaWRlYmFyIHRleHQgZWRpdC4gQ2hlY2tpbmcgdGhlIHJlc3VsdAogICAgICAgIG9mIG5vdGVDb250ZW50RGlkQ2hhbmdlIHdhcyB0byBwcmV2ZW50IHVwZGF0aW5nIHRoZSByZXNvdXJjZSBjb250ZW50IGlmIHRoZSBjaGFuZ2Ugb3JpZ2luYXRlZCBmcm9tIGEgcmVzb3VyY2UgZWRpdC4KICAgICAgICBIb3dldmVyLCB3ZSB3aWxsIHNvb24gYWxsb3cgdGV4dCBlZGl0cyBmcm9tIHRoZSBzaWRlYmFyIGFuZCB0aGUgY2hlY2sgd2FzIHByZXZlbnRpbmcgcmVzb3VyY2VzIGZyb20gYmVpbmcgdXBkYXRlZC4KICAgICAgICBUaGUgbmV3IGNoZWNrIGluIHRoZSBjb250ZW50IHNldHRlciBvZiBTb3VyY2VDb2RlUmV2aXNpb24gcHJldmVudHMgdXBkYXRpbmcgcmVzb3VyY2VzIHdoZW4gdGhleSBoYXZlbid0IGNoYW5nZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGVSZXZpc2lvbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVSZXZpc2lvbi5wcm90b3R5cGUuc2V0IGNvbnRlbnQpOiBSZXR1cm4gZWFybHkgaWYgdGhlIGNvbnRlbnQgaXMgdGhlIHNhbWUuCgoyMDEzLTAyLTI1ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IHR5cG8gdGhhdCB3YXMgcHJldmVudGluZyByZWZyZXNoIG9mIERPTU5vZGVTdHlsZXMuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGVTdHlsZXMuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5fc3R5bGVTaGVldENvbnRlbnREaWRDaGFuZ2UpOiBUaGUgcHJvcGVydHkgaXMgb3duZXJTdHlsZVNoZWV0LCBub3QgcGFyZW50U3R5bGVTaGVldC4KCjIwMTMtMDItMjUgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBXb3JrYXJvdW5kIGEgYnVnIHdoZXJlIG1hdGNoZWQgcnVsZXMgaXMgZW1wdHkgZm9yIHN0eWxlc2hlZXRzIHdpdGggaW1wb3J0ZWQgc3R5bGVzaGVldHMuCgogICAgICAgIElmIG1hdGNoZWQgcnVsZXMgaXMgZW1wdHkgKHJhcmUgYmVjYXVzZSBvZiB1c2VyIGFnZW50IHN0eWxlc2hlZXQgcnVsZXMpIHRoZW4gV2ViQ29yZSBtaWdodAogICAgICAgIGJlIHdhaXRpbmcgZm9yIGFuIEBpbXBvcnQgcnVsZSB0byBsb2FkLiBDaGVjayBhZ2FpbiBhZnRlciBhIGRlbGF5IHVudGlsIHdlIGdldCBzb21lIHJlc3VsdHMgb3IgdGltZW91dC4KICAgICAgICBXZSBzaG91bGRuJ3QgbmVlZCB0byBwb2xsIGxpa2UgdGhpcywgaHR0cHM6Ly93ZWJraXQub3JnL2IvMTEwNzUwIHRyYWNrcyB0aGlzIHByb2JsZW0uCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGVTdHlsZXMuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5yZWZyZXNoKTogUmVtb3ZlZCBtYXAgY2xlYXJpbmcgYW5kIGNhbGwgdG8gQ1NTQWdlbnQuZ2V0SW5saW5lU3R5bGVzRm9yTm9kZQogICAgICAgIGFuZCBDU1NBZ2VudC5nZXRDb21wdXRlZFN0eWxlRm9yTm9kZS4gV2Ugb25seSB3YW50IHRvIGZldGNoIHRob3NlIGlmIGZldGNoZWRNYXRjaGVkU3R5bGVzIHN1Y2NlZWRzLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUucmVmcmVzaC5mZXRjaGVkTWF0Y2hlZFN0eWxlcyk6IFNjaGVkdWxlIGFub3RoZXIgcmVmcmVzaCBhdHRlbXB0IGFuZAogICAgICAgIHJldHVybiBlYXJseSBpZiB0aGUgbWF0Y2ggaXMgZW1wdHkuIE1vdmVkIHRoZSBtYXAgY2xlYXJpbmcgaGVyZSBhZnRlciB0aGUgZWFybHkgcmV0dXJuLiBDYWxsIENTU0FnZW50LmdldElubGluZVN0eWxlc0Zvck5vZGUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5yZWZyZXNoLmZldGNoZWRJbmxpbmVTdHlsZXMpOiBDYWxsIENTU0FnZW50LmdldENvbXB1dGVkU3R5bGVGb3JOb2RlLgoKMjAxMy0wMi0yNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIERvbid0IHJldXNlIGEgcGVuZGluZyBwcm9wZXJ0eSBpZiBpdCBpcyBhbHJlYWR5IHVzZWQuCgogICAgICAgIFRoaXMgd2FzIGhhcHBlbmluZyB3aGVuIHBhcnNpbmcgYW4gZWRpdCB0aGF0IGhhZCBtdWx0aXBsZSBwcm9wZXJ0aWVzIHdpdGggdGhlIHNhbWUgbmFtZS4KICAgICAgICBUaGUgbGFzdCBwcm9wZXJ0eSB0byBiZSBwYXJzZWQgd2FzIHBpY2tpbmcgdGhlIHNhbWUgcGVuZGluZyBwcm9wZXJ0eSBhbmQgcHJldmVudGluZwogICAgICAgIGFsbCBwcm9wZXJ0aWVzIGZyb20gYmVpbmcgcmVwcmVzZW50ZWQgd2l0aCB0aGUgcmlnaHQgdmFsdWUsIGV0Yy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NTm9kZVN0eWxlcy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLl9wYXJzZVN0eWxlUHJvcGVydHlQYXlsb2FkKTogT25seSBwaWNrIGEgcGVuZGluZyBwcm9wZXJ0eQogICAgICAgIGlmIHRoZSBpbmRleCBpcyBOYU4uCgoyMDEzLTAyLTI1ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUHJldmVudCBmaXJpbmcgY2hhbmdlIGV2ZW50cyBpbiBtb3JlIHBsYWNlcyB3aGVuIG5vdGhpbmcgaGFzIGNoYW5nZWQuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb24uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZS51cGRhdGUuZGVsYXllZCk6IERvbid0IGZpcmUgdGhlIGV2ZW50IGlmIHRoZXJlIGlzIHRleHQgYW5kIGl0IGhhc24ndCBjaGFuZ2VkLgogICAgICAgICogVXNlckludGVyZmFjZS9ET01Ob2RlU3R5bGVzLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUucmVmcmVzaC5mZXRjaGVkQ29tcHV0ZWRTdHlsZSk6IE9ubHkgZmlyZSBSZWZyZXNoZWQgaWYgIWRvbnRGaXJlUmVmcmVzaGVkRXZlbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5jaGFuZ2VTdHlsZVRleHQuYXR0cmlidXRlQ2hhbmdlZCk6IFBhc3MgdHJ1ZSB0byByZWZyZXNoKCkuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5jaGFuZ2VTdHlsZVRleHQuY29udGVudERpZENoYW5nZSk6IEFkZGVkLiBDYWxsIHJlZnJlc2goKS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLmNoYW5nZVN0eWxlVGV4dC5mZXRjaGVkU3R5bGVTaGVldENvbnRlbnQpOiBMaXN0ZW4gZm9yIGNvbnRlbnQgY2hhbmdlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuX2F0dHJpYnV0ZXNEaWRDaGFuZ2UpOiBJZ25vcmUgaWYgX2lnbm9yZU5leHRTdHlsZUF0dHJpYnV0ZURpZENoYW5nZUV2ZW50CiAgICAgICAgaXMgc2V0IGFuZCB0aGUgYXR0cmlidXRlIGlzICJzdHlsZSIuCgoyMDEzLTAyLTIyICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWluaW1pemUgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgT3ZlcnJpZGRlblN0YXR1c0NoYW5nZWQgaXMgZmlyZWQgZm9yIHByb3BlcnRpZXMuCgogICAgICAgIFdoZW4gdXBkYXRpbmcgc3R5bGVzLCBET01Ob2RlU3R5bGVzIHdpbGwgc29tZXRpbWVzIHRlbXBvcmFyaWx5IGNoYW5nZSBvdmVycmlkZGVuCiAgICAgICAgdG8gZmFsc2Ugb25seSB0byBsYXRlciBjaGFuZ2UgaXQgYmFjayB0byB0cnVlIHdoZW4gaXQgZmluZHMgdGhlIGVmZmVjdGl2ZSBwcm9wZXJ0eQogICAgICAgIGluIGEgbGF0ZXIgc3R5bGUgaW4gdGhlIGNhc2NhZGUuIFRvIG1pbmltaXplIGNodXJuIHdlIGNvYWxlc2NlIHRoZXNlIGNoYW5nZXMgYW5kCiAgICAgICAgb25seSBmaXJlIHRoZSBldmVudCBpZiB0aGUgdmFsdWUgaXMgZGlmZmVyZW50IGFmdGVyIGEgZGVsYXkuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1Byb3BlcnR5LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90eXBlLnVwZGF0ZSk6IFVzZSB0aGUgc2V0dGVyIGZvciBvdmVycmlkZGVuCiAgICAgICAgaWYgd2Ugd2FudCB0byBmaXJlIGV2ZW50cy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5zZXQgb3ZlcnJpZGRlbi5kZWxheWVkKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUuc2V0IG92ZXJyaWRkZW4pOiBDb2FsZXNjZSBjaGFuZ2VzIGFuZAogICAgICAgIG9ubHkgZmlyZSB0aGUgZXZlbnQgaWYgdGhlIGVuZCByZXN1bHQgZGlmZmVycy4KCjIwMTMtMDItMjIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBEZWxheSBmaXJpbmcgdGhlIFByb3BlcnRpZXNDaGFuZ2VkIGV2ZW50IHNvIERPTU5vZGVTdHlsZXMgaGFzIGEgY2hhbmNlCiAgICAgICAgdG8gbWFyayBvdmVycmlkZGVuIGFuZCBhc3NvY2lhdGVkIHByb3BlcnRpZXMuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb24uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZS51cGRhdGUuZGVsYXllZCk6IEFkZGVkLiBGaXJlIHRoZSBldmVudCBoZXJlLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUudXBkYXRlKTogU2V0IGEgdGltZW91dCBhbmQgY2FsbCBkZWxheWVkLgoKMjAxMy0wMi0yMiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIENvbnNpZGVyIHRoZSBwcm9wZXJ0aWVzIGFzIGVuYWJsZWQgZm9yIGNvbXB1dGVkIHN0eWxlIGRlY2xhcmF0aW9ucy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTUHJvcGVydHkuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUuZ2V0IGVuYWJsZWQpOiBDaGVjayBmb3IgQ1NTU3R5bGVEZWNsYXJhdGlvbi5UeXBlLkNvbXB1dGVkLgoKMjAxMy0wMi0yMiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBzdXBwb3J0IGZvciBjaGVja2luZyBpZiBhIHByb3BlcnR5IGhhcyBhbm90aGVyIHZlbmRvciBwcmVmaXguCgogICAgICAgIFRoaXMgd2lsbCBiZSB1c2VkIHRvIHN0eWxlIHRob3NlIHByb3BlcnRpZXMgZGlmZmVyZW50bHkgaW5zdGVhZCBvZiBtYXJraW5nCiAgICAgICAgdGhlbSBhcyBjb21wbGV0ZWx5IGludmFsaWQuIEFsc28gZml4IGEgcmVnZXggZXJyb3IgaW4gY2Fub25pY2FsTmFtZUZvclByb3BlcnR5TmFtZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTUHJvcGVydHkuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUudXBkYXRlKTogRGVsZXRlIF9oYXNPdGhlclZlbmRvclByZWZpeC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5oYXNPdGhlclZlbmRvclByZWZpeCk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlLnByb3BlcnR5TmFtZUhhc090aGVyVmVuZG9yUHJlZml4KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlLmNhbm9uaWNhbE5hbWVGb3JQcm9wZXJ0eU5hbWUpOiBGaXggdGhlIHJlZ2V4CiAgICAgICAgdG8gY2hlY2sgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nLgoKMjAxMy0wMi0yNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBlZmZlY3RpdmVQcm9wZXJ0eUZvck5hbWUgdG8gRE9NTm9kZVN0eWxlcy4KCiAgICAgICAgQWxzbyBtYXJrIHRoZSBsb25naGFuZCBwcm9wZXJ0aWVzIGFzIGVmZmVjdGl2ZSBpZiB0aGUgc2hvcnRoYW5kIHByb3BlcnR5IGlzIHRoZSBlZmZlY3RpdmUgcHJvcGVydHkuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGVTdHlsZXMuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5lZmZlY3RpdmVQcm9wZXJ0eUZvck5hbWUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLl91cGRhdGVTdHlsZUNhc2NhZGUpOiBQYXNzIF9wcm9wZXJ0eU5hbWVUb0VmZmVjdGl2ZVByb3BlcnR5TWFwCiAgICAgICAgdG8gX2Fzc29jaWF0ZVJlbGF0ZWRQcm9wZXJ0aWVzLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuX2Fzc29jaWF0ZVJlbGF0ZWRQcm9wZXJ0aWVzKTogU2V0IHByb3BlcnR5TmFtZVRvRWZmZWN0aXZlUHJvcGVydHkKICAgICAgICBmb3IgdGhlIGxvbmdoYW5kIGlmIHRoZSByZWxhdGVkIHNob3J0aGFuZCBpcyBlZmZlY3RpdmUuCgoyMDEzLTAyLTIxICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRG9uJ3QgdHJ5IHRvIGFkZCBvciByZW1vdmUgYSBDU1NQcm9wZXJ0eSBpZiB0aGUgaW5kZXggaXMgd3JvbmcuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1Byb3BlcnR5LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90eXBlLmFkZCk6IFJldHVybiBlYXJseSBpZiBpbmRleCBpcyBub3QgTmFOLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90eXBlLnJlbW92ZSk6IFJldHVybiBlYXJseSBpZiBpbmRleCBpcyBOYU4uCgoyMDEzLTAyLTIyICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFyayBET01Ob2Rlc1N0eWxlcyBhcyBuZWVkaW5nIHJlZnJlc2ggaWYgYXR0cmlidXRlcyBjaGFuZ2Ugb24gdGhlIG5vZGUuCgogICAgICAgIEFsc28gZml4IGEgbGVhayB3aXRoIHRoZSBDU1NTdHlsZVNoZWV0LkV2ZW50LkNvbnRlbnREaWRDaGFuZ2UgbGlzdGVuZXIuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLkV2ZW50LkF0dHJpYnV0ZU1vZGlmaWVkKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLkV2ZW50LkF0dHJpYnV0ZVJlbW92ZWQpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NTm9kZVN0eWxlcy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMpOiBMaXN0ZW4gZm9yIEF0dHJpYnV0ZU1vZGlmaWVkIGFuZCBBdHRyaWJ1dGVSZW1vdmVkIGV2ZW50cy4KICAgICAgICBTdG9wIGxpc3RlbmluZyBmb3IgQ1NTU3R5bGVTaGVldC5FdmVudC5Db250ZW50RGlkQ2hhbmdlIGdsb2JhbGx5IHRvIGF2b2lkIGEgbGVhay4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLl9wYXJzZVN0eWxlRGVjbGFyYXRpb25QYXlsb2FkKTogTGlzdGVuIGZvcgogICAgICAgIENTU1N0eWxlU2hlZXQuRXZlbnQuQ29udGVudERpZENoYW5nZSBvbiB0aGUgc3R5bGVzaGVldCBvYmplY3QgaGVyZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLl9wYXJzZVJ1bGVQYXlsb2FkKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5fYXR0cmlidXRlc0RpZENoYW5nZSk6IEFkZGVkLiBNYXJrIGFzIG5lZWRpbmcKICAgICAgICByZWZyZXNoIGFuZCBmaXJlIHRoZSBOZWVkc1JlZnJlc2ggZXZlbnQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIucHJvdG90eXBlLl9hdHRyaWJ1dGVNb2RpZmllZCk6IEZpcmUgdGhlIGV2ZW50IG9uIERPTU5vZGUgdG9vLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIucHJvdG90eXBlLl9hdHRyaWJ1dGVSZW1vdmVkKTogRGl0dG8uCgoyMDEzLTAyLTIyICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IHNvbWUgZXZlbnQgbGlzdGVuZXIgbGVha3MgcmVsYXRlZCB0byB0aGUgRE9NIGNvbnRlbnQgdmlldy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5jbG9zZWQpOiBDYWxsIGNsb3NlIG9uIHRoZSBET01UcmVlT3V0bGluZS4KICAgICAgICBVc2UgdGhlIG5ldyB2ZXJzaW9uIG9mIHJlbW92ZUV2ZW50TGlzdGVuZXIgYnkgcGFzc2luZyBudWxsIGZvciB0eXBlIGFuZCBsaXN0ZW5lci4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZU91dGxpbmUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlT3V0bGluZS5wcm90b3R5cGUuY2xvc2UpOiBBZGRlZC4gQ2FsbCBjbG9zZSBvbiB0aGUgRE9NVHJlZVVwZGF0ZXIuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVVcGRhdGVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZVVwZGF0ZXIucHJvdG90eXBlLmNsb3NlKTogQWRkZWQuIENhbGwgcmVtb3ZlRXZlbnRMaXN0ZW5lci4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvT2JqZWN0LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuT2JqZWN0LmFkZEV2ZW50TGlzdGVuZXIpOiBQcmV2ZW50IHJlZ2lzdGVyaW5nIG11bHRpcGxlIHRpbWVzLgogICAgICAgIChXZWJJbnNwZWN0b3IuT2JqZWN0LnJlbW92ZUV2ZW50TGlzdGVuZXIpOiBIYW5kbGUgYSBudWxsIGV2ZW50VHlwZSBieSBsb29waW5nIG92ZXIgYWxsCiAgICAgICAgdGhlIHJlZ2lzdGVyZWQgdHlwZXMuIERlbGV0ZSBfbGlzdGVuZXJzIGlmIHRoZSBtYXAgaXMgZW1wdHkuCgoyMDEzLTAyLTIwICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQXZvaWQgYSBjcmFzaCB3aGVuIGNoYW5naW5nIHRoZSB0ZXh0IG9mIGFuIGlubGluZSBzdHlsZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NTm9kZVN0eWxlcy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLmF0dHJpYnV0ZUNoYW5nZWQpOiBTZXQgdGhlIHN0eWxlIGF0dHJpYnV0ZQogICAgICAgIG9uIHRoZSBub2RlIHdoZW4gdGhlIHN0eWxlIGlzIGFuIGlubGluZSBzdHlsZS4KCjIwMTMtMDItMjAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBSZXR1cm4gZWFybHkgaW4gdGhlIENTU1Byb3BlcnR5IGFuZCBDU1NTdHlsZURlY2xhcmF0aW9uIHNldHRlcnMgaWYgdGhlIHZhbHVlIGRvZXMgbm90IGNoYW5nZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTUHJvcGVydHkuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUuc2V0IHRleHQpOiBSZXR1cm4gZWFybHkuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUuc2V0IG5hbWUpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5zZXQgdmFsdWUpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5zZXQgcHJpb3JpdHkpOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZWNsYXJhdGlvbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLnNldCB0ZXh0KTogUmV0dXJuIGVhcmx5LgoKMjAxMy0wMi0yMCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFByb3Blcmx5IHBhcnNlIENTU1Byb3BlcnR5LnN0YXR1cyBhbmQgaGFuZGxlIHdoZW4gaXQgaXMgbWlzc2luZy4KCiAgICAgICAgVGhlIEluc3BlY3Rvci5qc29uIGRvY3VtZW50YXRpb24gd2FzIGluY29ycmVjdCBhYm91dCB0aGlzLCBhbmQgaGFzIGJlZW4KICAgICAgICBmaXhlZCBpbiByMTQzNDY1LgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NQcm9wZXJ0eS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5KTogQWRkZWQgYW5vbnltb3VzIHBhcmFtZXRlci4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS51cGRhdGUpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5nZXQgYW5vbnltb3VzKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGVTdHlsZXMuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5fcGFyc2VTdHlsZVByb3BlcnR5UGF5bG9hZCk6IFNldCBhbm9ueW1vdXMKICAgICAgICB0byB0cnVlIHdoZW4gc3RhdHVzIGlzICJzdHlsZSIuIEFsc28gZGVmYXVsdCB0byAic3R5bGUiIHdoZW4gc3RhdHVzIGlzIG1pc3NpbmcuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5fbWFya092ZXJyaWRkZW5Qcm9wZXJ0aWVzKTogU2tpcCBhbm9ueW1vdXMKICAgICAgICBwcm9wZXJ0aWVzLgoKMjAxMy0wMi0xOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIENvcnJlY3QgYW5kIHNpbXBsaWZ5IG92ZXJyaWRkZW4gcHJvcGVydHkgbWFya2luZy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTUHJvcGVydHkuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUuaXNBY3RpdmUpOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9ET01Ob2RlU3R5bGVzLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuX21hcmtPdmVycmlkZGVuUHJvcGVydGllcyk6IE9ubHkKICAgICAgICB1c2UgdGhlIHByb3BlcnR5TmFtZVRvRWZmZWN0aXZlUHJvcGVydHkgbWFwIHRvIGFjY29tcGxpc2ggd2hhdCB3ZSBuZWVkZWQKICAgICAgICB0aHJlZSBtYXBzIGZvciBiZWZvcmUuIE9ubHkgZW5hYmxlZCBpcyBjaGVja2VkLCBpbnN0ZWFkIG9mIHRoZSBvbGQgaXNBY3RpdmUKICAgICAgICBmdW5jdGlvbi4gVGhlIGlzQWN0aXZlIGZ1bmN0aW9uIHdhcyBza2lwcGluZyBhbHJlYWR5IG92ZXJyaWRkZW4gcHJvcGVydGllcywKICAgICAgICBzbyByZXBlYXQgY2FsbHMgdG8gX21hcmtPdmVycmlkZGVuUHJvcGVydGllcyB3b3VsZCBub3Qgd29yayBjb3JyZWN0bHkuCgoyMDEzLTAyLTE5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgU3RvcmUgYWxsIHByb3BlcnRpZXMgZm9yIGluaGVyaXRlZCBzdHlsZXMuCgogICAgICAgIFdlIG5lZWQgYWxsIHByb3BlcnRpZXMgc28gd2UgY2FuIGFsbG93IGVkaXRpbmcgaW5oZXJpdGVkIHN0eWxlcyB3aGlsZQogICAgICAgIG5vdCByZW1vdmluZyB0aGUgbm9uLWluaGVyaXRlZCBwcm9wZXJ0aWVzIHdoZW4gdGhlIGVkaXRzIGFyZSBhcHBsaWVkLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NQcm9wZXJ0eS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS51cGRhdGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90eXBlLmdldCBpbmhlcml0ZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9ET01Ob2RlU3R5bGVzLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUucmVmcmVzaCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5fcGFyc2VTdHlsZURlY2xhcmF0aW9uUGF5bG9hZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5fcGFyc2VSdWxlUGF5bG9hZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5fbWFya092ZXJyaWRkZW5Qcm9wZXJ0aWVzKToKCjIwMTMtMDItMTkgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBQcm9wZXJseSBoYW5kbGUgcmVwZWF0IG9jY3VycmVuY2VzIG9mIHRoZSBzYW1lIHJ1bGUuCgogICAgICAgIEEgcnVsZSBtaWdodCBtYXRjaCBtdWx0aXBsZSB0aW1lcyBpZiB0aGUgc2VsZWN0b3IgaXMgZ2VuZXJpYyBhbmQgbWF0Y2hlcwogICAgICAgIGFuY2VzdG9ycyBhbmQgaGFzIGluaGVyaXRlZCBwcm9wZXJ0aWVzLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01Ob2RlU3R5bGVzLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUucmVmcmVzaCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5yZWZyZXNoLmZldGNoZWRDb21wdXRlZFN0eWxlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLl9oYW5kbGVQcm9wZXJ0eUNoYW5nZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5fcGFyc2VTdHlsZURlY2xhcmF0aW9uUGF5bG9hZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5fcGFyc2VSdWxlUGF5bG9hZCk6CgoyMDEzLTAyLTE5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIG1hdGNoZWRTZWxlY3RvcnMgYW5kIG1hdGNoZWRTZWxlY3RvclRleHQgdG8gQ1NTUnVsZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTUnVsZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1J1bGUucHJvdG90eXBlLnVwZGF0ZSk6IERlbGV0ZSBfbWF0Y2hlZFNlbGVjdG9ycyBhbmQgX21hdGNoZWRTZWxlY3RvclRleHQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NSdWxlLnByb3RvdHlwZS5nZXQgbWF0Y2hlZFNlbGVjdG9ycyk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUnVsZS5wcm90b3R5cGUuZ2V0IG1hdGNoZWRTZWxlY3RvclRleHQpOiBBZGRlZC4KCjIwMTMtMDItMTkgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgZWRpdGFibGUgZ2V0dGVyIHRvIENTU1J1bGUuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1J1bGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NSdWxlLnByb3RvdHlwZS5nZXQgZWRpdGFibGUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1J1bGUucHJvdG90eXBlLnNldCBzZWxlY3RvclRleHQpOiBSZXR1cm4gZWFybHkgaWYgbm90IGVkaXRhYmxlCiAgICAgICAgb3IgaWYgdGhlIHNlbGVjdG9ycyBhbHJlYWR5IG1hdGNoLgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURlY2xhcmF0aW9uLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUuZ2V0IGVkaXRhYmxlKTogQ2hlY2sgdGhlIHJ1bGUncyBlZGl0YWJsZQogICAgICAgIHByb3BlcnR5IHRvby4KCjIwMTMtMDItMTkgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgb3JkZXJlZFN0eWxlcyB0byBET01Ob2RlU3R5bGVzLgoKICAgICAgICBUaGlzIHdpbGwgYWxsb3cgdGhlIFVJIHRvIGVhc2lseSBkaXNwbGF5IHRoZSBzdHlsZXMgaW4gdGhlIHJpZ2h0IG9yZGVyLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01Ob2RlU3R5bGVzLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcyk6IEFkZGVkIF9vcmRlcmVkU3R5bGVzLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuZ2V0IG9yZGVyZWRTdHlsZXMpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLl91cGRhdGVTdHlsZUNhc2NhZGUpOiBTdG9yZSBvcmRlcmVkU3R5bGVzCiAgICAgICAgb24gdGhlIERPTU5vZGVTdHlsZXMgb2JqZWN0IGFuZCB0aGUgcHNldWRvIGVsZW1lbnQgb2JqZWN0cy4KCjIwMTMtMDItMTkgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBTdG9yZSBtYXRjaGVkIHJ1bGVzIGluIHJldmVyc2Ugb3JkZXIgc28gdGhlIG1vc3Qgc3BlY2lmaWMgcnVsZSBpcyBmaXJzdCwgbm90IGxhc3QuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGVTdHlsZXMuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5yZWZyZXNoLnBhcnNlUnVsZU1hdGNoQXJyYXlQYXlsb2FkKToKICAgICAgICBJdGVyYXRlIGluIHJldmVyc2Ugb3JkZXIgdG8gbWF0Y2ggdGhlIGNhc2NhZGUgb3JkZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5jaGFuZ2VSdWxlU2VsZWN0b3IucnVsZVNlbGVjdG9yQ2hhbmdlZCk6IEZpeCBhIHR5cG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5fcGFyc2VTdHlsZVByb3BlcnR5UGF5bG9hZCk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuX2NvbGxlY3RTdHlsZXNJbkNhc2NhZGVPcmRlcik6CiAgICAgICAgSXRlcmF0ZSBpbiBub3JtYWwgb3JkZXIgbm93IHRoYXQgdGhleSBzdG9yZWQgaW4gcmV2ZXJzZSBvcmRlci4KCjIwMTMtMDItMTkgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBGaXggcGFyc2luZyBvZiBwc2V1ZG8gc3R5bGVzIGFuZCBpbmhlcml0ZWQgaW5saW5lIHN0eWxlcy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NTm9kZVN0eWxlcy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLnJlZnJlc2guZmV0Y2hlZE1hdGNoZWRTdHlsZXMpOiBQcm9wZXJseQogICAgICAgIGl0ZXJhdGUgb2YgdGhlIHBzZXVkb0VsZW1lbnRSdWxlc1BheWxvYWQgYXJyYXkuIEFsc28gZml4IHRoZSBhcmd1bWVudHMgcGFzc2VkCiAgICAgICAgdG8gX3BhcnNlU3R5bGVEZWNsYXJhdGlvblBheWxvYWQuIFRoZSBmaXJzdCBhcmd1bWVudCB3YXMgJ3RoaXMnLCBiYWNrIHdoZW4KICAgICAgICBpdCB3YXMgdXNpbmcgY2FsbCgpLgoKMjAxMy0wMi0xOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFN0b3JlIHRoZSByZWxldmFudCBub2RlIG9uIENTU1N0eWxlRGVjbGFyYXRpb24uCgogICAgICAgIFRoZSBub2RlIGlzIHVzZWZ1bCBmb3IgaW5oZXJpdGVkIHN0eWxlcyBzbyB3ZSBjYW4ganVtcCB0byB0aGUKICAgICAgICBlbGVtZW50IHRoZSBzdHlsZXMgYXJlIGluaGVyaXRlZCBmcm9tLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURlY2xhcmF0aW9uLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZS5nZXQgbm9kZSk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9ET01Ob2RlU3R5bGVzLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUucmVmcmVzaC5wYXJzZVJ1bGVNYXRjaEFycmF5UGF5bG9hZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5yZWZyZXNoLmZldGNoZWRNYXRjaGVkU3R5bGVzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLnJlZnJlc2guZmV0Y2hlZElubGluZVN0eWxlcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5yZWZyZXNoLmZldGNoZWRDb21wdXRlZFN0eWxlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLnJlZnJlc2gpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuX2hhbmRsZVByb3BlcnR5Q2hhbmdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLl9wYXJzZVN0eWxlRGVjbGFyYXRpb25QYXlsb2FkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLl9wYXJzZVJ1bGVQYXlsb2FkKToKCjIwMTMtMDItMjUgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIGNvcHkgd29yayBpZiB0aGVyZSBpcyBhIENvZGVNaXJyb3IgZWRpdG9yIGZvY3VzZWQgaW4gdGhlIHNpZGViYXIuCgogICAgICAgIFRoZSBjb250ZW50IHZpZXcgd2FzIHN0ZWFsaW5nIHRoZSBjb3B5IGV2ZW50IGFuZCBwcmV2ZW50aW5nIHRoZSBlZGl0b3IgZnJvbSBwdXR0aW5nCiAgICAgICAgYW55dGhpbmcgb24gdGhlIHBhc3RlYm9hcmQuIFdlIHdlcmUgYWxzbyBoYXZpbmcgYSBmb2N1cyBpc3N1ZSB3aGVyZSB0aGUgY29uc29sZSBvcgogICAgICAgIG90aGVyIGVkaXRvciB3YXMgc3RheWluZyBmb2N1c2VkIGFmdGVyIGNsaWNraW5nIHRoZSBET00gdHJlZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRWRpdGluZ1N1cHBvcnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5pc0V2ZW50VGFyZ2V0QW5FZGl0YWJsZUZpZWxkKTogQ29ycmVjdCB0aGUgY2hlY2sgdG8gaW5jbHVkZSBDb2RlTWlycm9yCiAgICAgICAgYW5kIGFsc28gb25seSBjb3VudCB0ZXh0IGlucHV0IHR5cGVzLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IEFkZGVkIGZvY3VzIGV2ZW50IGxpc3RlbmVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuX2ZvY3VzQ2hhbmdlZCk6IEFkZGVkLiBNYWtlIGEgY2FyZXQgc2VsZWN0aW9uIGluc2lkZSB0aGUgZm9jdXNlZCBlbGVtZW50LgogICAgICAgIFRoaXMgaXMgbmVlZGVkIChhdCBsZWFzdCkgdG8gcmVtb3ZlIGNhcmV0IGZyb20gY29uc29sZSB3aGVuIGZvY3VzIGlzIG1vdmVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuX2NvcHkpOiBPbmx5IHBhc3MgYWxvbmcgdGhlIGNvcHkgZXZlbnQgaWYgdGhlIHRhcmdldCBpc24ndCBhbiBlZGl0YWJsZSBmaWVsZC4KCjIwMTMtMDItMTkgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBEb24ndCBhbGxvdyB0ZXh0IHNlbGVjdGlvbiBpbiBkYXRhIGdyaWQgcm93cy4KCiAgICAgICAgVGhlIHJvdyBzZWxlY3Rpb24gY29uZmxpY3RzIHdpdGggdGhlIHRleHQgcmFuZ2Ugc2VsZWN0aW9uLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9EYXRhR3JpZC5jc3M6CiAgICAgICAgKC5kYXRhLWdyaWQgdGQpOiBSZW1vdmVkIC13ZWJraXQtdXNlci1zZWxlY3Q6IHRleHQuCgoyMDEzLTAyLTI2ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzI2NTE2Nj4gUmVtb3RlIGluc3BlY3RpbmcgYW4gaU9TIDYuMSBkZXZpY2UgbmV2ZXIgaGFzIHRoZSBkYXNoYm9hcmQgdGltZXIgc3RvcAoKICAgICAgICBQcmV2aW91cyB0byBpT1M3LCB3ZSBkb24ndCBnZXQgYSBmcmFtZUlkIHJlcG9ydGVkIGZvciB0aW1lbGluZSBldmVudHMuIFdlIGZhbGxiYWNrIHRvIHVzaW5nIHRoZQogICAgICAgIHBhZ2UncyBsb2FkRXZlbnRGaXJlZCBldmVudCBhbmQgbWVzc2FnZSB0aGUgdGltZWxpbmVNYW5hZ2VyIHRvIHVzZSB0aGUgcmVwb3J0ZWQgdGltZXN0YW1wCiAgICAgICAgYXMgdGhlIF9sb2FkRXZlbnRUaW1lIGluIGNhc2UgaXQgaGFkbid0IGFscmVhZHkgYmVlbiBzZXQuIAoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9QYWdlT2JzZXJ2ZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5QYWdlT2JzZXJ2ZXIucHJvdG90eXBlLmxvYWRFdmVudEZpcmVkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLnByb3RvdHlwZS5wYWdlRGlkTG9hZCk6CgoyMDEzLTAyLTI2ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTk3ODg0NT4gUHJlc3NpbmcgZGVsZXRlIG9uIGEgZmlsZSBzaG91bGQgZGVsZXRlIGFsbCBicmVha3BvaW50cwoKICAgICAgICBBbGxvdyBUcmVlT3V0bGluZXMgdG8gaGFuZGxlIGtleWJvYXJkIGV2ZW50cyBvbiBUcmVlRWxlbWVudHMgaWYgdGhlCiAgICAgICAgVHJlZUVsZW1lbnQgaGFzbid0IGFscmVhZHkgaGFuZGxlZCB0aGUgZXZlbnQuIFRoaXMgd2lsbCBhbGxvdyB0aGUKICAgICAgICBicmVha3BvaW50IG91dGxpbmUgdG8gaGFuZGxlIGRlbGV0ZSBrZXlzIHByZXNzZWQgb24gcmVzb3VyY2VzLgoKICAgICAgICBMaWtld2lzZSwgYWxsb3cgVHJlZU91dGxpbmVzIHRvIGhhbmRsZSBjb250ZXh0IG1lbnVzIG9uIFRyZWVFbGVtZW50cwogICAgICAgIHRoYXQgZG9uJ3Qgc3BlY2lmaWNhbGx5IGhhdmUgYSBjb250ZXh0IG1lbnUgaGFuZGxlci4gVGhpcyB3aWxsIGFsbG93CiAgICAgICAgdGhlIGJyZWFrcG9pbnQgb3V0bGluZSB0byBzaG93IGEgY29udGV4dCBtZW51IGZvciByZXNvdXJjZXMuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RlYnVnZ2VyU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJTaWRlYmFyUGFuZWwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9icmVha3BvaW50c0JlbmVhdGhUcmVlRWxlbWVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3JlbW92ZUFsbEJyZWFrcG9pbnRzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdG9nZ2xlQWxsQnJlYWtwb2ludHMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9icmVha3BvaW50VHJlZU91dGxpbmVEZWxldGVUcmVlRWxlbWVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclNpZGViYXJQYW5lbC5wcm90b3R5cGUucmVtb3ZlQWxsUmVzb3VyY2VCcmVha3BvaW50cyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclNpZGViYXJQYW5lbC5wcm90b3R5cGUudG9nZ2xlQWxsUmVzb3VyY2VCcmVha3BvaW50cyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2JyZWFrcG9pbnRUcmVlT3V0bGluZUNvbnRleHRNZW51VHJlZUVsZW1lbnQpOgogICAgICAgIFNldHVwIG9uZGVsZXRlIGFuZCBvbmNvbnRleHRtZW51IGhhbmRsZXJzIG9uIHRoZSBicmVha3BvaW50IHRyZWUgb3V0bGluZS4KICAgICAgICBUaGUgZGVsZXRlIGFjdGlvbiBkZWxldGVzIGFsbCBicmVha3BvaW50cyBpbiB0aGF0IHJlc291cmNlLiBUaGUgY29udGVudAogICAgICAgIG1lbnUgYWN0aW9uIHByb3ZpZGVzIGEgY2hvaWNlIHRvIGRlbGV0ZSBvciB0b2dnbGUgYWxsIGJyZWFrcG9pbnRzLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnJlYWtwb2ludC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlLmFwcGVuZENvbnRleHRNZW51SXRlbXMpOgogICAgICAgIFJlb3JkZXIgYW5kIHJlbmFtZSB0aGUgY29udGV4dCBtZW51cyB0byBtb3JlIGNsb3NlbHkgbWF0Y2ggWGNvZGUuCgogICAgICAgICogVXNlckludGVyZmFjZS9UcmVlT3V0bGluZS5qczoKICAgICAgICAoVHJlZU91dGxpbmUucHJvdG90eXBlLl90cmVlS2V5RG93bik6CiAgICAgICAgU2VuZCBjb21tb24ga2V5IGV2ZW50cyB1cCB0byB0aGUgdHJlZSBvdXRsaW5lIGlmIGl0IGltcGxlbWVudHMgdGhlbS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0dlbmVyYWxUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkdlbmVyYWxUcmVlRWxlbWVudC5wcm90b3R5cGUub25hdHRhY2gudGhpcy5fYm91bmRDb250ZXh0TWVudUV2ZW50SGFuZGxlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5HZW5lcmFsVHJlZUVsZW1lbnQucHJvdG90eXBlLm9uYXR0YWNoKToKICAgICAgICBCaW5kIGEgVHJlZU91dGxpbmUgY29udGV4dCBtZW51IHRvIHRoZSBpbmRpdmlkdWFsIEdlbmVyYWxUcmVlRWxlbWVudHMgaWYgdGhlCiAgICAgICAgc3BlY2lmaWMgR2VuZXJhbFRyZWVFbGVtZW50IGRvZXMgbm90IGhhdmUgYSBjb250ZXh0IG1lbnUgaGFuZGxlci4KCjIwMTMtMDItMjYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMjk5MTYzPiBHaXZlIEJyZWFrcG9pbnQgVHJlZSBFbGVtZW50cyBDb250ZXh0IE1lbnVzIHRvIERlbGV0ZSBhbmQgVG9nZ2xlCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0JyZWFrcG9pbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZS5hcHBlbmRDb250ZXh0TWVudUl0ZW1zKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlLmFwcGVuZENvbnRleHRNZW51SXRlbXMucmVtb3ZlQnJlYWtwb2ludCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZS5hcHBlbmRDb250ZXh0TWVudUl0ZW1zLnRvZ2dsZUJyZWFrcG9pbnQpOgogICAgICAgIE9mZmVyIGNvbnRleHQgbWVudSBpdGVtcyB0byByZW1vdmUgYW5kIHRvZ2dsZSB0aGUgYnJlYWtwb2ludCwgaWYgcG9zc2libGUuCgoyMDEzLTAyLTI2ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIFVwZGF0ZSByZW1haW5pbmcgU291cmNlQ29kZUxvY2F0aW9uIGNvbnN0cnVjdG9ycy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExNzM1MTE2PiBQQVJJVFkgKFdlYktpdCBXZWIgSW5zcGVjdG9yKTogTWlzc2luZyBTb3VyY2UgTWFwIHN1cHBvcnQKCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NTm9kZVN0eWxlcy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLl9jcmVhdGVTb3VyY2VDb2RlTG9jYXRpb24pOgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlLl9jYWxsRnJhbWVzRnJvbVBheWxvYWQuY3JlYXRlQ2FsbEZyYW1lKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuX2NhbGxGcmFtZXNGcm9tUGF5bG9hZCk6CgoyMDEzLTAyLTI2ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIFVwZGF0ZSBDYWxsRnJhbWUgZGlzcGxheXMgZm9yIFNvdXJjZU1hcCBkaXNwbGF5IGxvY2F0aW9ucy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExNzM1MTE2PiBQQVJJVFkgKFdlYktpdCBXZWIgSW5zcGVjdG9yKTogTWlzc2luZyBTb3VyY2UgTWFwIHN1cHBvcnQKCiAgICAgICAgVXNlIHRoZSBkaXNwbGF5IChtYXBwZWQpIGxvY2F0aW9uIHdoZW4gYXZhaWxhYmxlLiBNdWx0aXBsZSBlZGl0b3JzCiAgICAgICAgbWF5IHNob3cgdGhlIGV4ZWN1dGlvbiBsaW5lLCB0aGUgb3JpZ2luYWwgYW5kIG1hcHBlZCBlZGl0b3JzLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9DYWxsRnJhbWVUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNhbGxGcmFtZVRyZWVFbGVtZW50KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGVidWdnZXJNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5fc291cmNlQ29kZUxvY2F0aW9uRnJvbVBheWxvYWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9EZWJ1Z2dlclNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdHJlZUVsZW1lbnRTZWxlY3RlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlKToKCjIwMTMtMDItMjYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIGlzRW1wdHlPYmplY3QgaW5zdGVhZCBvZiBkb2luZyBPYmplY3Qua2V5cyhmb28pLmxlbmd0aAoKICAgICAgICBJbiBiZW5jaG1hcmtzIG9mIGVtcHR5LCBzbWFsbCwgYW5kIGxhcmdlIG9iamVjdHMgaXNFbXB0eU9iamVjdAogICAgICAgIHBlcmZvcm1lZCBiZXR0ZXIgdGhlbiBjaGVja2luZyB0aGUgbGVuZ3RoIG9mIE9iamVjdC5rZXlzLiBFc3BlY2lhbGx5CiAgICAgICAgZm9yIGxhcmdlIG9iamVjdHMuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGVTdHlsZXMuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5fYXNzb2NpYXRlUmVsYXRlZFByb3BlcnRpZXMpOgogICAgICAgICogVXNlckludGVyZmFjZS9MYXllclRyZWVTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLl91cGRhdGVEYXRhR3JpZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1JlbW90ZU9iamVjdC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvY2FsSlNPTk9iamVjdC5wcm90b3R5cGUuZ2V0IGhhc0NoaWxkcmVuKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fcmVtb3ZlQnJlYWtwb2ludFdpdGhFZGl0b3JMaW5lSW5mbyk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fcmVtb3ZlQnJlYWtwb2ludEZyb21MaW5lQW5kQ29sdW1uKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVXRpbGl0aWVzLmpzOgogICAgICAgIChpc0VtcHR5T2JqZWN0KToKCjIwMTMtMDItMjYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgR2V0IEJyZWFrcG9pbnRzIFdvcmtpbmcgd2l0aCBTb3VyY2VNYXBzIC0gTGluZSArIENvbHVtbiBCcmVha3BvaW50IFN1cHBvcnQuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTczNTExNj4gUEFSSVRZIChXZWJLaXQgV2ViIEluc3BlY3Rvcik6IE1pc3NpbmcgU291cmNlIE1hcCBzdXBwb3J0CgogICAgICAgIFByZXZpb3VzbHkgYnJlYWtwb2ludHMgY291bGQgb25seSBhcHBlYXIgaW4gYSBzaW5nbGUgU291cmNlQ29kZVRleHRFZGl0b3IsIGFuZAogICAgICAgIG9ubHkgb25lIGNvdWxkIGJlIHBsYWNlZCBvbiBhIGxpbmUuIEFmdGVyIHRoaXMgcGF0Y2g6CgogICAgICAgICAgLSBCcmVha3BvaW50cyBtYXkgc2hvdyB1cCBpbiBtdWx0aXBsZSBlZGl0b3JzIGF0IHRoZSBvcmlnaW5hbCBhbmQgbWFwcGVkIGxvY2F0aW9ucy4KICAgICAgICAgIC0gQnJlYWtwb2ludHMgZWZmZWN0aXZlIGxvY2F0aW9ucyBtYXkgYmUgb24gY29sdW1ucy4gSWYgeW91IHNldCBhIGJyZWFrcG9pbnQgb24KICAgICAgICAgICAgYSBsaW5lIGluIGEgbWFwcGVkIHJlc291cmNlLCBpdCBtYXkgbWFwIGJhY2sgdG8gYSBub24tMCBjb2x1bW4gaW4gdGhlIG9yaWdpbmFsLgogICAgICAgICAgLSBNdWx0aXBsZSBicmVha3BvaW50cyBtYXkgYmUgc2V0IG9uIGEgbGluZS4gSWYgeW91IHNldCBhIGJyZWFrcG9pbnQgb24gYSBmZXcKICAgICAgICAgICAgbGluZXMgaW4gYSBtYXBwZWQgcmVzb3VyY2UsIHRoZXkgbWF5IGFsbCBtYXAgYmFjayB0byB0aGUgc2FtZSBsaW5lIGluIHRoZSBvcmlnaW5hbAogICAgICAgICAgICBidXQganVzdCBoYXZlIGRpZmZlcmVudCBjb2x1bW4gb2Zmc2V0cy4KCiAgICAgICAgQnJlYWtwb2ludHMgYXJlIHN0aWxsIHNldCBhbmQgc2F2ZWQgd2l0aCB0aGVpciBvcmlnaW5hbCBTb3VyY2VNYXBMb2NhdGlvbiBsb2NhdGlvbnMuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RlYnVnZ2VyTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUuYnJlYWtwb2ludHNGb3JTb3VyY2VDb2RlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUuX2Fzc29jaWF0ZUJyZWFrcG9pbnRzV2l0aFNvdXJjZUNvZGUpOgogICAgICAgIFdoZW4gbG9va2luZyB1cCBicmVha3BvaW50cyBmb3IgYSBzb3VyY2UgY29kZSwgYXNzb2NpYXRlIHRoZW0gd2l0aCB0aGUgc291cmNlIGNvZGUKICAgICAgICBhdCB0aGUgc2FtZSB0aW1lIGJ5IHNldHRpbmcgdGhlIEJyZWFrcG9pbnQncyBTb3VyY2VDb2RlTG9jYXRpb24ncyBzb3VyY2VDb2RlLiBUaGUKICAgICAgICBicmVha3BvaW50cyBmb3IgYSBTb3VyY2VNYXBSZXNvdXJjZSBhcmUgb25seSB0aG9zZSBpbiB0aGUgb3JpZ2luYXRvciB0aGF0IGhhdmUKICAgICAgICBhIGRpc3BsYXkgbG9jYXRpb24gaW5zaWRlIHRoZSBtYXBwZWQgcmVzb3VyY2UuCgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXNldCk6CiAgICAgICAgRGlzYXNzb2NpYXRlIGJyZWFrcG9pbnRzIG9uIHJlc2V0LCBieSBjbGVhcmluZyB0aGUgU291cmNlQ29kZUxvY2F0aW9uJ3Mgc291cmNlQ29kZS4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLl9icmVha3BvaW50U291cmNlQ29kZUxvY2F0aW9uRGlkQ2hhbmdlKToKICAgICAgICBEaXNwYXRjaCBhIG5ldyBCcmVha3BvaW50TW92ZWQgZXZlbnQuIFRoZXJlIHdlcmUgYWxyZWFkeSBleGlzdGluZyBldmVudHMgZm9yCiAgICAgICAgQnJlYWtwb2ludEFkZGVkIGFuZCBSZW1vdmVkIGJ1dCBub3QgTW92ZWQuIFdlIGFkZCB0aGlzIGZvciBjb252ZW5pZW5jZSwgdGhlcmUKICAgICAgICBhcmUgY3VycmVudGx5IG5vIHVzZXJzIHRob3VnaCwgdGhleSBhbGwgd2F0Y2ggdGhlIGJyZWFrcG9pbnRzIHNvdXJjZSBjb2RlIGxvY2F0aW9uLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnNldEJyZWFrcG9pbnRJbmZvRm9yTGluZUFuZENvbHVtbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fYWRkQnJlYWtwb2ludFRvTGluZUFuZENvbHVtbldpdGhJbmZvKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9yZW1vdmVCcmVha3BvaW50RnJvbUxpbmVBbmRDb2x1bW4pOgogICAgICAgIFVwZGF0ZSBzZXRCcmVha3BvaW50SW5mbyB0byBpbmNsdWRlIGxpbmUgKyBjb2x1bW4gbnVtYmVycy4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fc2V0QnJlYWtwb2ludFN0eWxlc09uTGluZS51cGRhdGVTdHlsZXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3NldEJyZWFrcG9pbnRTdHlsZXNPbkxpbmUpOgogICAgICAgIFVwZGF0aW5nIGJyZWFrcG9pbnQgc3R5bGUgbm93IGhhbmRsZXMgbXVsdGktYnJlYWtwb2ludHMuIEZvciBtdWx0aS1icmVha3BvaW50cwogICAgICAgIHdlIG9ubHkgc3R5bGUgaXQgYXMgZGlzYWJsZWQgaWYgYWxsIGJyZWFrcG9pbnRzIG9uIHRoYXQgbGluZSBhcmUgZGlzYWJsZWQuCiAgICAgICAgTGlrZXdpc2UgZm9yIHJlc29sdmVkLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9hbGxDb2x1bW5CcmVha3BvaW50SW5mb0ZvckxpbmUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3NldENvbHVtbkJyZWFrcG9pbnRJbmZvRm9yTGluZSk6CiAgICAgICAgTm93IHRoYXQgYSBsaW5lIG1heSBoYXZlIG11bHRpcGxlIGNvbHVtbiBicmVha3BvaW50cywgdGhpcyBpcyBhIGJ1bGsKICAgICAgICBnZXR0ZXIgYW5kIHNldHRlciB1c2VkIGR1cmluZyBicmVha3BvaW50IGRyYWdnaW5nIHRvIHNldCB0aGUgYnJlYWtwb2ludAogICAgICAgIGluZm9zIG9uIGEgbGluZS4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fZ3V0dGVyTW91c2VEb3duKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9kb2N1bWVudE1vdXNlTW92ZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX2RvY3VtZW50TW91c2VVcCk6CiAgICAgICAgRG8gbm90aGluZyBpZiBjbGlja2luZyBvbiBhIG11bHRpLWJyZWFrcG9pbnQuIE90aGVyd2lzZSwgd2hlbiBkcmFnZ2luZwogICAgICAgIHJlbWVtYmVyIHRoZSBvcmlnaW5hbCBicmVha3BvaW50cyBsaW5lIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24uIFdoaWxlIHRoZQogICAgICAgIGRyYWcgaXMgaGFwcGVuaW5nLCB3ZSBhcmUgYWxyZWFkeSB1cGRhdGluZyBvdXIgaW50ZXJuYWwgbGluZSArIGNvbHVtbgogICAgICAgIGluZm9ybWF0aW9uLCBzbyBpbiBtb3VzZSB1cCB3aGVuIG5vdGlmeWluZyBkZWxlZ2F0ZXMgd2UgY2FuIGlnbm9yZSB0aGVpcgogICAgICAgIHNldEJyZWFrcG9pbnRJbmZvIGNhbGxzLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5jc3M6CiAgICAgICAgKC50ZXh0LWVkaXRvciA+IC5Db2RlTWlycm9yIC5oYXMtYnJlYWtwb2ludC5tdWx0aXBsZS1icmVha3BvaW50cyAuQ29kZU1pcnJvci1saW5lbnVtYmVyKToKICAgICAgICAoLnRleHQtZWRpdG9yID4gLkNvZGVNaXJyb3IgLmhhcy1icmVha3BvaW50Lm11bHRpcGxlLWJyZWFrcG9pbnRzIC5Db2RlTWlycm9yLWxpbmVudW1iZXI6OmJlZm9yZSk6CiAgICAgICAgU3R5bGVzIGZvciBhIGxpbmUgd2l0aCBtdWx0aXBsZSBicmVha3BvaW50cy4gV2Ugc2hvdyBhIGNlbnRlcmVkIHdoaXRlCiAgICAgICAgZWxsaXBzaXMgYW5kIGhpZGUgdGhlIGxpbmUgbnVtYmVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlQ29kZVRleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuY2xvc2UpOgogICAgICAgIE5vdyB0aGF0IGJyZWFrcG9pbnRzIGNhbiBiZSBhZGRlZCBpbiBvbmUgZWRpdG9yIGFuZCBhZmZlY3QgYSBkaWZmZXJlbnQgZWRpdG9yCiAgICAgICAgd2UgbXVzdCBsaXN0ZW4gZm9yIGJyZWFrcG9pbnQgYWRkZWQgYW5kIG1vdmUgKHZpYSBpdCdzIHNvdXJjZSBjb2RlIGxvY2F0aW9uKS4KICAgICAgICBSZWdpc3RlciBmb3IgdGhlIGV2ZW50cyBpbiB0aGUgY29uc3RydWN0b3IgYW5kIGNsZWFyIGluIGNsb3NlLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fZWRpdG9yTGluZUluZm9Gb3JTb3VyY2VDb2RlTG9jYXRpb24pOgogICAgICAgIFNvdXJjZUNvZGVUZXh0RWRpdG9ycyBmb3Igb3JpZ2luYWwgcmVzb3VyY2VzIHNob3cgdGhlaXIgY29udGVudCB3aXRoIG9yaWdpbmFsIGxpbmUKICAgICAgICBudW1iZXJzLiBGb3IgbWFwcGVkIHJlc291cmNlcyBzaG93IHRoZWlyIGNvbnRlbnQgd2l0aCBkaXNwbGF5IGxpbmUgbnVtYmVycy4gU28KICAgICAgICB3aGVuZXZlciB3ZSBoYXZlIGEgc291cmNlQ29kZUxvY2F0aW9uLCB3ZSB1c2UgdGhpcyB0byBjb252ZXJ0IGl0IHRvIHRoZSAiZWRpdG9yIgogICAgICAgIGxpbmUgaW5mbywgd2hpY2ggaXMganVzdCB0aGUgbGluZSArIGNvbHVtbiBudW1iZXIgZm9yIHRoaXMgZWRpdG9yICsgVGV4dEVkaXRvci4KICAgICAgICAKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fYnJlYWtwb2ludEZvckVkaXRvckxpbmVJbmZvKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fYWRkQnJlYWtwb2ludFdpdGhFZGl0b3JMaW5lSW5mbyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3JlbW92ZUJyZWFrcG9pbnRXaXRoRWRpdG9yTGluZUluZm8pOgogICAgICAgIFVwZGF0ZSBhZGRCcmVha3BvaW50IGFuZCByZW1vdmVCcmVha3BvaW50IGZvciBsaW5lICsgY29sdW1uLCBpbnN0ZWFkIG9mIGp1c3QgbGluZS4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX2NvbnRlbnRXaWxsUG9wdWxhdGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl91cGRhdGVCcmVha3BvaW50U3RhdHVzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fYnJlYWtwb2ludEFkZGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fYnJlYWtwb2ludFJlbW92ZWQpOgogICAgICAgIFdoZW4gYnJlYWtwb2ludHMgYXJlIGFkZGVkLCByZW1vdmVkIHVwZGF0ZSBvdXIgbWFwLCBhbmQgcGFzcyB0aGF0IGluZm9ybWF0aW9uCiAgICAgICAgb24gdG8gdGhlIHVuZGVybHlpbmcgVGV4dEVkaXRvci4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3VwZGF0ZUJyZWFrcG9pbnRMb2NhdGlvbik6CiAgICAgICAgV2hlbiBhIGJyZWFrcG9pbnQgbW92ZXMsIHdlIG5lZWQgdG8gbG9va3VwIHRoZSBicmVha3BvaW50IGZyb20gaXRzIG9sZCBsb2NhdGlvbi4KICAgICAgICBUaGUgb2xkIGxvY2F0aW9uIGlzIGRpZmZlcmVudCBkZXBlbmRpbmcgb24gaWYgd2UgYXJlIHRoZSBlZGl0b3IgZm9yIHRoZSBvcmlnaW5hbAogICAgICAgIG9yIG1hcHBlZCByZXNvdXJjZS4gU28gd29yayBvdXQgdGhlIGNvcnJlY3Qgb2xkIGxvY2F0aW9uLCBhbmQgcGFzcyB0aGF0CiAgICAgICAgaW5mb3JtYXRpb24gYW5kIHRoZSB1bmRlcmx5aW5nIFRleHRFZGl0b3IuCgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLnRleHRFZGl0b3JCcmVha3BvaW50QWRkZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLnRleHRFZGl0b3JCcmVha3BvaW50UmVtb3ZlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUudGV4dEVkaXRvckJyZWFrcG9pbnRNb3ZlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUudGV4dEVkaXRvckJyZWFrcG9pbnRUb2dnbGVkKToKICAgICAgICBXaGVuIHRoZSBUZXh0RWRpdG9yIG1vZGlmaWVzIGEgYnJlYWtwb2ludCwgd2UgbXVzdCB1cGRhdGUgb3VyIG1hcHMgZm9yIHRoYXQKICAgICAgICBicmVha3BvaW50LiBXaGVuIHdlIHRlbGwgdGhlIERlYnVnZ2VyTWFuYWdlciBhYm91dCB0aGUgdXBkYXRlcywgd2Ugd2lsbAogICAgICAgIGV4cGVjdCBzb21lIGV2ZW50cyB0byBmaXJlIHRvIHVwZGF0ZSBvdGhlciBlZGl0b3JzIHRoYXQgbWlnaHQgYmUgaW50ZXJlc3RlZAogICAgICAgIGluIHRoYXQgYnJlYWtwb2ludC4gV2UgY2FuIGlnbm9yZSB0aG9zZSBldmVudHMgb3Vyc2VsdmVzLCBiZWNhdXNlIHdlCiAgICAgICAganVzdCBtYWRlIHRoZSBjaGFuZ2UuCgoyMDEzLTAyLTI2ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIFNvcnQgQnJlYWtwb2ludHMgaW4gdGhlIERlYnVnZ2VyIFNpZGViYXIKCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExNzM1MTE2PiBQQVJJVFkgKFdlYktpdCBXZWIgSW5zcGVjdG9yKTogTWlzc2luZyBTb3VyY2UgTWFwIHN1cHBvcnQKCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGVidWdnZXJTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2FkZEJyZWFrcG9pbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9jb21wYXJlVG9wTGV2ZWxUcmVlRWxlbWVudHMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9jb21wYXJlQnJlYWtwb2ludFRyZWVFbGVtZW50cyk6CiAgICAgICAgU29ydCBCcmVha3BvaW50c1RyZWVFbGVtZW50cyAoY2hpbGRyZW4gb2YgUmVzb3VyY2VzKSBieSBMaW5lICMuCiAgICAgICAgU29ydCB0b3AgbGV2ZWwgdHJlZSBlbGVtZW50cyBieSB0aXRsZSwgYWx3YXlzIHBsYWNpbmcgdGhlIHNwZWNpYWwgYnJlYWtwb2ludHMgYXQgdGhlIHRvcC4KCjIwMTMtMDItMjYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgR2l2ZSBCcmVha3BvaW50VHJlZUVsZW1lbnRzIGEgQ29udGV4dE1lbnUgdG8gUmV2ZWFsIE9yaWdpbmFsIFJlc291cmNlLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTE3MzUxMTY+IFBBUklUWSAoV2ViS2l0IFdlYiBJbnNwZWN0b3IpOiBNaXNzaW5nIFNvdXJjZSBNYXAgc3VwcG9ydAoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9CcmVha3BvaW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUuYXBwZW5kQ29udGV4dE1lbnVJdGVtcyk6CiAgICAgICAgR2l2ZW4gYSBjb250ZXh0IG1lbnUsIGFkZCBhIHNob3cgb3JpZ2luYWwgcmVzb3VyY2UgbWVudSBpdGVtLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVHJlZU91dGxpbmUuanM6CiAgICAgICAgKFRyZWVFbGVtZW50LnByb3RvdHlwZS5fZGV0YWNoKToKICAgICAgICBBZGQgYW4gb25kZXRhY2ggZXZlbnQgdG8gYmFsYW5jZSBvbmF0dGFjaC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0dlbmVyYWxUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkdlbmVyYWxUcmVlRWxlbWVudC5wcm90b3R5cGUub25hdHRhY2gpOgogICAgICAgIChXZWJJbnNwZWN0b3IuR2VuZXJhbFRyZWVFbGVtZW50LnByb3RvdHlwZS5vbmRldGFjaCk6CiAgICAgICAgTWFuYWdlIGFkZGluZyBhbmQgcmVtb3ZpbmcgYSBjb250ZXh0bWVudSBldmVudCBsaXN0ZW5lciBmb3Igb25jb250ZXh0bWVudS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0JyZWFrcG9pbnRUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRUcmVlRWxlbWVudC5wcm90b3R5cGUub25jb250ZXh0bWVudSk6CiAgICAgICAgU2hvdyBhIENvbnRleHRNZW51IHdpdGggdGhlIEJyZWFrcG9pbnQncyBtZW51IGl0ZW1zLgoKMjAxMy0wMi0yNiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBNYWtlIEJyZWFrcG9pbnQgdG8gdXNlIGEgU291cmNlQ29kZUxvY2F0aW9uLiBVcGRhdGUgaXRzIEJyZWFrcG9pbnRUcmVlRWxlbWVudCBkaXNwbGF5LgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTE3MzUxMTY+IFBBUklUWSAoV2ViS2l0IFdlYiBJbnNwZWN0b3IpOiBNaXNzaW5nIFNvdXJjZSBNYXAgc3VwcG9ydAoKICAgICAgICBUaGlzIGlzIHRoZSBzdGFydCBvZiBtb2RpZnlpbmcgQnJlYWtwb2ludHMgdG8gdXNlIFNvdXJjZUNvZGVMb2NhdGlvbi4KICAgICAgICBUaGVyZSBhcmUgcmVtYWluaW5nIHVzZXJzIChTb3VyY2VDb2RlVGV4dEVkaXRvcikgd2hpY2ggd2lsbCBiZSBhZGRyZXNzZWQKICAgICAgICBpbiBhIGZvbGxvd2luZyBwYXRjaC4gVGhpcyB1cGRhdGVzIEJyZWFrcG9pbnQgYW5kIGl0cyBkaXNwbGF5IGluIHRoZSBzaWRlYmFyLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9CcmVha3BvaW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZS5nZXQgc291cmNlQ29kZUxvY2F0aW9uKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlLmdldCBpbmZvKToKICAgICAgICBVcGRhdGUgdGhlIGNvbnN0cnVjdG9yIGFuZCBzZXJpYWxpemF0aW9uIHRvIHVzZSBTb3VyY2VDb2RlTG9jYXRpb25zLAogICAgICAgIHdoaWNoIGluY2x1ZGVzIGEgbGluZSBudW1iZXIgYW5kIGNvbHVtbiBudW1iZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9CcmVha3BvaW50VHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50VHJlZUVsZW1lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludFRyZWVFbGVtZW50LnByb3RvdHlwZS5fdXBkYXRlVGl0bGVzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRUcmVlRWxlbWVudC5wcm90b3R5cGUuX3VwZGF0ZVN0YXR1cyk6CiAgICAgICAgQnJlYWtwb2ludFRyZWVFbGVtZW50cyBhbHdheXMgZGlzcGxheSB0aGUgZGlzcGxheSBsaW5lICsgY29sdW1uLiBUaGV5CiAgICAgICAgc2hvdyB0aGUgb3JpZ2luYWwgbG9jYXRpb24gYXMgYSBzdWJ0aXRsZS4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50VHJlZUVsZW1lbnQucHJvdG90eXBlLl9icmVha3BvaW50RGlzcGxheUxvY2F0aW9uRGlkQ2hhbmdlKToKICAgICAgICBXaGVuIHRoZSBicmVha3BvaW50J3MgZGlzcGxheSBsb2NhdGlvbiBjaGFuZ2VzIHVwZGF0ZSBvdXIgdGl0bGVzLgogICAgICAgIEhvd2V2ZXIsIGlmIHRoZSBicmVha3BvaW50IGFjdHVhbGx5IGNoYW5nZWQgcmVzb3VyY2VzLCB0aGVuIHByZXBhcmUKICAgICAgICBmb3IgcmVtb3ZhbC4gVGhlIHNpZGViYXIgd2lsbCBkZXRlY3QgdGhpcyBhbmQgY3JlYXRlIGEgbmV3IHRyZWUgZWxlbWVudC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RlYnVnZ2VyTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLmRpZFNldEJyZWFrcG9pbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5fc2V0QnJlYWtwb2ludCk6CiAgICAgICAgU2V0IGJyZWFrcG9pbnRzIHdpdGggdGhlIGJyZWFrcG9pbnRzIGxpbmUgKyBjb2x1bW4gaW5mb3JtYXRpb24uCgogICAgICAgICogVXNlckludGVyZmFjZS9EZWJ1Z2dlclNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyU2lkZWJhclBhbmVsKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fYWRkQnJlYWtwb2ludCk6CiAgICAgICAgU2ltcGxpZnkgbm93IHRoYXQgdGhlIGJyZWFrcG9pbnQncyBTb3VyY2VDb2RlTG9jYXRpb24gYWxyZWFkeSBoYXMgdGhlCiAgICAgICAgb3JpZ2luYWwgU291cmNlQ29kZS4gQWxzbywgY3JlYXRlIFNvdXJjZU1hcFJlc291cmNlVHJlZUVsZW1lbnRzIGFzIG5lZWRlZC4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2JyZWFrcG9pbnRSZW1vdmVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVtb3ZlQnJlYWtwb2ludFRyZWVFbGVtZW50KToKICAgICAgICBSZWZhY3RvciBicmVha3BvaW50IHJlbW92YWwgY29kZSBzbyBpdCBjYW4gYmUgc2hhcmVkLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fYnJlYWtwb2ludERpc3BsYXlMb2NhdGlvbkRpZENoYW5nZSk6CiAgICAgICAgSWYgYSBicmVha3BvaW50IGNoYW5nZXMgcmVzb3VyY2VzIHJlbW92ZSB0aGUgb2xkIGJyZWFrcG9pbnQgdHJlZSBlbGVtZW50CiAgICAgICAgYW5kIGFkZCBhIG5ldyBvbmUgd2l0aCB0aGUgbmV3IGxvY2F0aW9uLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdHJlZUVsZW1lbnRTZWxlY3RlZCk6CiAgICAgICAgU2hvdyB0aGUgZGlzcGxheSBsb2NhdGlvbi4KCjIwMTMtMDItMjYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSBGaW5kIGJhbm5lciB3aGVuIHZpZXdpbmcgYSBTb3VyY2VNYXBSZXNvdXJjZSB3b3JrLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTE3MzUxMTY+IFBBUklUWSAoV2ViS2l0IFdlYiBJbnNwZWN0b3IpOiBNaXNzaW5nIFNvdXJjZSBNYXAgc3VwcG9ydAoKICAgICAgICBBIFNvdXJjZU1hcFJlc291cmNlIGNhbiBkaXNwbGF5IGl0cyBjb250ZW50IGluIGEgU291cmNlQ29kZVRleHRFZGl0b3IganVzdAogICAgICAgIGxpa2UgcmVndWxhciByZXNvdXJjZXMuIEhvd2V2ZXIsIGl0IGRvZXMgbm90IHVzZSB0aGUgYmFja2VuZCB0byBzZWFyY2gKICAgICAgICBpdCdzIGNvbnRlbnRzLCBiZWNhdXNlIGl0cyBjb250ZW50cyBhcmUgYWxsIGxvYWRlZCBieSB0aGUgZnJvbnRlbmQuIEdpdmUKICAgICAgICBjdXN0b21QZXJmb3JtU2VhcmNoIGEgcmV0dXJuIHZhbHVlIHNheWluZyB3aGV0aGVyIG9yIG5vdCBpdCB3YXMgaGFuZGxlZC4KICAgICAgICBJZiBub3QgaGFuZGxlZCwgd2UgZmFsbCBiYWNrIHRvIENvZGVNaXJyb3IncyB0ZXh0IHNlYXJjaCwgd2hpY2ggd29ya3MgZmluZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlQ29kZVRleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuY3VzdG9tUGVyZm9ybVNlYXJjaCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5wZXJmb3JtU2VhcmNoKToKICAgICAgICBJZiB0aGUgY3VzdG9tUGVyZm9ybVNlYXJjaCByZXR1cm5zIGZhbHNlLCB0aGVuIHRoZSBjdXN0b20gc2VhcmNoIGRpZAogICAgICAgIG5vdCBoYW5kbGUgdGhlIHNlYXJjaCwgYW5kIHdlIGZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IENvZGVNaXJyb3Igc2VhcmNoLgoKMjAxMy0wMi0yNiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBNYWtlIFNvdXJjZUNvZGVMb2NhdGlvbiBwcm92aWRlIHJhdyBhbmQgbWFwcGVkIGxvY2F0aW9ucy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExNzM1MTE2PiBQQVJJVFkgKFdlYktpdCBXZWIgSW5zcGVjdG9yKTogTWlzc2luZyBTb3VyY2UgTWFwIHN1cHBvcnQKCiAgICAgICAgU291cmNlQ29kZUxvY2F0aW9uIGF1dG9tYXRpY2FsbHkgcHJvdmlkZSBvcmlnaW5hbCAocmF3KSBhbmQgbWFwcGVkIChkaXNwbGF5KQogICAgICAgIHNvdXJjZSBjb2RlIGxvY2F0aW9ucy4gSXQncyBBUEkgcmVxdWlyZXMgdGhhdCBpdCBiZSBjb25zdHJ1Y3RlZCB3aXRoIHRoZSByYXcKICAgICAgICBzb3VyY2UgY29kZSBhbmQgbG9jYXRpb24gaW5mb3JtYXRpb24sIHdoaWNoIGlzIGF1dG9tYXRlZCBieSB1c2luZwogICAgICAgIFNvdXJjZUNvZGUucHJvdG90eXBlLmNyZWF0ZVNvdXJjZUNvZGVMb2NhdGlvbiwgcGFzc2luZyBhIGxpbmVOdW1iZXIgYW5kCiAgICAgICAgY29sdW1uTnVtYmVyIGZvciB0aGUgc291cmNlIGNvZGUgdGhhdCB5b3UncmUgaW52b2tpbmcgdGhlIG1ldGhvZCBvbi4KCiAgICAgICAgQWxsIHVzZXMgb2YgU291cmNlQ29kZUxvY2F0aW9uIHdpbGwgYmUgYXVkaXRlZCBhbmQgdXBkYXRlZCBpbiBsYXRlciBwYXRjaGVzLAogICAgICAgIHRoaXMgcGF0Y2ggaW5jbHVkZXMganVzdCB0aGUgY29yZSBTb3VyY2VDb2RlTG9jYXRpb24gdXNlcy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuc2hvd1NvdXJjZUNvZGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLnNob3dTb3VyY2VDb2RlTG9jYXRpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLnNob3dPcmlnaW5hbFNvdXJjZUNvZGVMb2NhdGlvbik6CiAgICAgICAgQnkgZGVmYXVsdCwgd2hlbiBzaG93aW5nIGFueSBsb2NhdGlvbiB3ZSB3YW50IHRvIHNob3cgaXQncyBkaXNwbGF5IGxvY2F0aW9uLAogICAgICAgIHdoaWNoIHdpbGwgYmUgdGhlIHNvdXJjZSBtYXAgcmVzb3VyY2UgaWYgdGhlcmUgaXMgb25lLCBvdGhlcndpc2UgdGhlIHJhdyByZXNvdXJjZS4KICAgICAgICBJZiBuZWVkZWQsIHRoZXJlIGlzIGEgd2F5IHRvIGV4cGxpY2l0bHkgc2hvdyB0aGUgb3JpZ2luYWwgc291cmNlIGNvZGUgbG9jYXRpb24uCgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VDb2RlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZS5wcm90b3R5cGUuY3JlYXRlU291cmNlQ29kZUxvY2F0aW9uKToKICAgICAgICBEZWZhdWx0IGltcGxlbWVudGF0aW9uLCBqdXN0IHVzZSB0aGUgZ2l2ZW4gbGluZSBhbmQgY29sdW1uIG51bWJlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZU1hcFJlc291cmNlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwUmVzb3VyY2UucHJvdG90eXBlLmNyZWF0ZVNvdXJjZUNvZGVMb2NhdGlvbik6CiAgICAgICAgTWFwcGVkIHJlc291cmNlLiBSZXZlcnNlIGxvb2t1cCB0aGUgcmF3IGxpbmUgYW5kIGNvbHVtbi4gQWRqdXN0IGlmCiAgICAgICAgbmVlZGVkIGZvciBpbmxpbmUgPHNjcmlwdD4gb2Zmc2V0cy4gQW5kIGNvbnN0cnVjdCB0aGUgU291cmNlQ29kZUxvY2F0aW9uCiAgICAgICAgd2l0aCB0aGUgcmF3IHZhbHVlcy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGVMb2NhdGlvbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVMb2NhdGlvbik6CgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZUxvY2F0aW9uLnByb3RvdHlwZS5nZXQgc291cmNlQ29kZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlTG9jYXRpb24ucHJvdG90eXBlLmdldCBsaW5lTnVtYmVyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVMb2NhdGlvbi5wcm90b3R5cGUuZ2V0IGNvbHVtbk51bWJlcik6CiAgICAgICAgVGhpcyBpcyB0aGUgcmF3IGxvY2F0aW9uIGRhdGEuCgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZUxvY2F0aW9uLnByb3RvdHlwZS5oYXNNYXBwZWRMb2NhdGlvbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlTG9jYXRpb24ucHJvdG90eXBlLmdldCBkaXNwbGF5U291cmNlQ29kZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlTG9jYXRpb24ucHJvdG90eXBlLmdldCBkaXNwbGF5TGluZU51bWJlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlTG9jYXRpb24ucHJvdG90eXBlLmdldCBkaXNwbGF5Q29sdW1uTnVtYmVyKToKICAgICAgICBJZiB3ZSBoYXZlIGEgbWFwcGVkIGxvY2F0aW9uLCB1c2UgdGhhdC4gT3RoZXJ3aXNlIHVzZSB0aGUgcmF3IGxvY2F0aW9uLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVMb2NhdGlvbi5wcm90b3R5cGUudXBkYXRlKToKICAgICAgICBJZiBhIHVzZXIgb2YgYSBTb3VyY2VDb2RlTG9jYXRpb24gd2FudHMgdG8gdXBkYXRlIHRoZSBsb2NhdGlvbiB0aGVyZQogICAgICAgIGFyZSByZXN0cmljdGlvbnMuIFRoZSB1cGRhdGVkIGxvY2F0aW9uIG11c3QgYmUgZWl0aGVyIHRoZSByYXcgcmVzb3VyY2UKICAgICAgICBvciB0aGUgbWFwcGVkIHJlc291cmNlLiBTb3VyY2VDb2RlTG9jYXRpb24gdGhlbiBkb2VzIHRoZSByZXN0LCBhbmQKICAgICAgICB1cGRhdGVzIGl0cyBpbnRlcm5hbCB2YWx1ZXMgYW5kIGRpc3BhdGNoZXMgZXZlbnRzIGFwcHJvcHJpYXRlbHkuCgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZUxvY2F0aW9uLnByb3RvdHlwZS5zZXQgc291cmNlQ29kZSk6CiAgICAgICAgVGhlcmUgYXJlIGNhc2VzIHdoZXJlIHRoZSBpbnNwZWN0b3IgKEJyZWFrcG9pbnRzKSB3aGljaCBtYXkgd2FudCB0byBrZWVwCiAgICAgICAgYXJvdW5kIGEgbGluZS9jb2x1bW4gU291cmNlQ29kZUxvY2F0aW9uIGJ1dCB3aXRob3V0IGFuIGFzc29jaWF0ZWQKICAgICAgICBTb3VyY2VDb2RlLiBTZXR0aW5nIHRoZSBzb3VyY2UgY29kZSB0byBudWxsIHdpbGwgbWFrZSB0aGlzIGEgZHVtYgogICAgICAgIGxvY2F0aW9uLCBhbmQgc2V0dGluZyBpdCB0byBhIHNvdXJjZSBjb2RlIHdpbGwgdXBkYXRlIGFwcHJvcHJpYXRlbHkuCgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZUxvY2F0aW9uLnByb3RvdHlwZS5fcmVzZXRNYXBwZWRMb2NhdGlvbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlTG9jYXRpb24ucHJvdG90eXBlLl9zZXRNYXBwZWRMb2NhdGlvbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlTG9jYXRpb24ucHJvdG90eXBlLl9yZXNvbHZlTWFwcGVkTG9jYXRpb24pOgogICAgICAgIFdlIGxhemlseSByZXNvbHZlIHRoZSBtYXBwZWQgbG9jYXRpb24gd2hlbiBuZWVkZWQuIEluIGNhc2VzIHdoZXJlCiAgICAgICAgYSBTb3VyY2VDb2RlTG9jYXRpb24gaXMgY3JlYXRlZCBmcm9tIGEgU291cmNlTWFwUmVzb3VyY2UgdGhlIG1hcHBlZAogICAgICAgIGxvY2F0aW9uIGlzIGFscmVhZHkga25vd24gYW5kIGNhbiBiZSBzZXQgZGlyZWN0bHkuCgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZUxvY2F0aW9uLnByb3RvdHlwZS5fbWFrZUNoYW5nZUFuZERpc3BhdGNoQ2hhbmdlRXZlbnRJZk5lZWRlZCk6CiAgICAgICAgQ2xpZW50cyBvZiBTb3VyY2VDb2RlTG9jYXRpb24gbWF5IHdhbnQgdG8gdXBkYXRlIHRoZWlyIGRpc3BsYXkgaWYKICAgICAgICBhIHNvdXJjZSBtYXAgd2FzIGFkZGVkIGFuZCBhIG5ldyBiZXR0ZXIgbG9jYXRpb24gaXMgYXZhaWxhYmxlLiBXZQogICAgICAgIHByb3ZpZGUgZXZlbnRzIGZvciBhbnkgY2hhbmdlLCBvciBqdXN0IGRpc3BsYXkgbG9jYXRpb24gY2hhbmdlcy4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlTG9jYXRpb24ucHJvdG90eXBlLl9zb3VyY2VDb2RlU291cmNlTWFwQWRkZWQpOgogICAgICAgIFdoZW5ldmVyIHRoZSByYXcgcmVzb3VyY2UgYWRkcyBhIHNvdXJjZSBtYXAgY2hlY2sgaWYgdGhlcmUgd2FzIGEKICAgICAgICBkaXNwbGF5IGxvY2F0aW9uIGNoYW5nZS4KCjIwMTMtMDItMjYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgU2hvdyBTb3VyY2VNYXBSZXNvdXJjZXMgaW4gdGhlIFJlc291cmNlcyBTaWRlYmFyCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTczNTExNj4gUEFSSVRZIChXZWJLaXQgV2ViIEluc3BlY3Rvcik6IE1pc3NpbmcgU291cmNlIE1hcCBzdXBwb3J0CgogICAgICAgIFNvdXJjZU1hcFJlc291cmNlcyBhcmUgYWRkZWQgdG8gdGhlIFJlc291cmNlcyBTaWRlYmFyIGFzIGNoaWxkcmVuCiAgICAgICAgb2YgdGhlIG9yaWdpbmF0b3IgUmVzb3VyY2UuIFNvIGlmIGEgU2NyaXB0IGhhcyBhIFNvdXJjZU1hcCB3aXRoCiAgICAgICAgbXVsdGlwbGUgaW5wdXRzLCB0aGVyZSB3aWxsIGJlIGEgZGlzY2xvc3VyZSB0cmlhbmdsZSBieSB0aGUgU2NyaXB0CiAgICAgICAgYW5kIHlvdSBjYW4gc2VlIHRoZSBvcmlnaW5hbCByZXNvdXJjZXMgZm9yIHRoYXQgU2NyaXB0LgoKICAgICAgICBTaW5jZSBib3RoIFJlc291cmNlcyBhbmQgU2NyaXB0cyBjYW4gaGF2ZSBTb3VyY2VNYXBDaGlsZHJlbiB0aGlzCiAgICAgICAgcGF0Y2ggcmVmYWN0b3JzIGJvdGggb2YgdGhvc2UgVHJlZUVsZW1lbnQgY2xhc3NlcyB0byBleHRlbmQgZnJvbSBhCiAgICAgICAgY29tbW9uIFNvdXJjZUNvZGVUcmVlRWxlbWVudCBjbGFzcyB0aGF0IG1hbmFnZXMgdGhlIG5ldwogICAgICAgIFNvdXJjZU1hcFJlc291cmNlVHJlZUVsZW1lbnQgY2hpbGRyZW4uCgogICAgICAgIEZyYW1lVHJlZUVsZW1lbnRzLCBzcGVjaWFsIHN1YmNsYXNzZXMgb2YgUmVzb3VyY2VUcmVlRWxlbWVudHMgYW5kCiAgICAgICAgdGh1cyBTb3VyY2VDb2RlVHJlZUVsZW1lbnRzIGhhbmRsZSB0aGVpciBvd24gc291cmNlIG1hcCByZXNvdXJjZQogICAgICAgIGNoaWxkcmVuLiBUaGlzIGlzIHNvIHRoYXQgU291cmNlTWFwUmVzb3VyY2VzIGZvciA8c2NyaXB0PnMgaW4gdGhlCiAgICAgICAgZnJhbWUgYXJlIHBsYWNlZCBhbG9uZyB3aXRoIHRoYXQgZnJhbWUncyBzYW1lIHR5cGVkIHJlc291cmNlcy4KICAgICAgICBTb3VyY2VNYXBSZXNvdXJjZXMgdGhhdCBhcmUgc2NyaXB0cyB3aWxsIGJlIGluIHRoZSBTY3JpcHRzIGZvbGRlciwKICAgICAgICBvciBubyBmb2xkZXIgaWYgdGhlIGZyYW1lIGhhcyBvbmx5IGEgZmV3IHJlc291cmNlcy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbCk6CiAgICAgICAgQSBUcmVlT3V0bGluZSBtdXN0IG9wdC1pbiB0byBkaXNwbGF5aW5nIHNvdXJjZSBtYXAgdHJlZSBlbGVtZW50cwogICAgICAgIGZvciByZXNvdXJjZXMuIFdlIG9ubHkgc2hvdyBzb3VyY2UgbWFwIGNoaWxkcmVuIG9mIHJlc291cmNlcyBpbiB0aGUKICAgICAgICBtYWluIHJlc291cmNlIHRyZWUgb3V0bGluZS4gV2Ugd2lsbCBub3Qgc2hvdyB0aGVtIGluIHRoZSBzZWFyY2gKICAgICAgICByZXN1bHRzIHRyZWUgb3V0bGluZSBvciBicmVha3BvaW50cyB0cmVlIG91dGxpbmUuCgogICAgICAgICogVXNlckludGVyZmFjZS9HZW5lcmFsVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5HZW5lcmFsVHJlZUVsZW1lbnQucHJvdG90eXBlLmNhbGxGaXJzdEFuY2VzdG9yRnVuY3Rpb24pOgogICAgICAgIE1vdmUgdGhpcyBjb2RlIGZyb20gUmVzb3VyY2VUcmVlRWxlbWVudCB0byBHZW5lcmFsLiBJdCBpcyB1c2VmdWwuCgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VDb2RlVHJlZUVsZW1lbnQuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRyZWVFbGVtZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUcmVlRWxlbWVudC5wcm90b3R5cGUudXBkYXRlU291cmNlTWFwUmVzb3VyY2VzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUcmVlRWxlbWVudC5wcm90b3R5cGUub25hdHRhY2gpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRyZWVFbGVtZW50LnByb3RvdHlwZS5vbnBvcHVsYXRlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUcmVlRWxlbWVudC5wcm90b3R5cGUuZGVzY2VuZGFudFJlc291cmNlVHJlZUVsZW1lbnRUeXBlRGlkQ2hhbmdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUcmVlRWxlbWVudC5wcm90b3R5cGUuX3VwZGF0ZVNvdXJjZUNvZGUpOgogICAgICAgIENvbW1vbiBzdXBlcmNsYXNzIGZvciBTY3JpcHQgYW5kIFJlc291cmNlIFRyZWVFbGVtZW50cy4gVGhpcyBtYW5hZ2VzIHRoZQogICAgICAgIGNoaWxkIHNvdXJjZSBtYXAgcmVzb3VyY2VzLiBTb3J0cyB0aGVtLCBhbmQgcmVwbGFjZXMgdGhlbSB3aGVuIHRoZXkgY2hhbmdlLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZUVsZW1lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlRWxlbWVudC5jb21wYXJlUmVzb3VyY2VUcmVlRWxlbWVudHMpOiBDb21tb24gY29tcGFyaXNvbi4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZUVsZW1lbnQucHJvdG90eXBlLl91cGRhdGVSZXNvdXJjZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fdXBkYXRlVGl0bGVzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZUVsZW1lbnQucHJvdG90eXBlLl90eXBlRGlkQ2hhbmdlKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2NyaXB0VHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRUcmVlRWxlbWVudCk6CiAgICAgICAgUmVmYWN0b3IgYXMgc3ViY2xhc3NlcyBvZiBTb3VyY2VDb2RlVHJlZUVsZW1lbnQuCgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VNYXBSZXNvdXJjZVRyZWVFbGVtZW50LmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcFJlc291cmNlVHJlZUVsZW1lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwUmVzb3VyY2VUcmVlRWxlbWVudC5wcm90b3R5cGUub25hdHRhY2gpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwUmVzb3VyY2VUcmVlRWxlbWVudC5wcm90b3R5cGUuX3VwZGF0ZVRpdGxlcyk6CiAgICAgICAgQSBTb3VyY2VNYXBSZXNvdXJjZVRyZWVFbGVtZW50IGlzIHZlcnkgc2ltcGxlLiBJdCBhZGRzIGEgc3R5bGUgY2xhc3MgdG8KICAgICAgICBnZXQgdW5pcXVlIGljb25zLCBsYXp5IGxvYWRzIG9uIGF0dGFjaCwgYW5kIHNpbmNlIGl0IGRvZXNuJ3QgaGF2ZSBhCiAgICAgICAgcGFyZW50IGZyYW1lIGl0IHVzZXMgaXQncyBvcmlnaW5hdG9yJ3MgaG9zdCB0byBkaXNwbGF5IGEgc3VidGl0bGUgaWYKICAgICAgICBpdCBpcyBsb2FkZWQgZnJvbSBhIGRpZmZlcmVudCBvcmlnaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9GcmFtZVRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVUcmVlRWxlbWVudC5wcm90b3R5cGUudXBkYXRlU291cmNlTWFwUmVzb3VyY2VzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lVHJlZUVsZW1lbnQucHJvdG90eXBlLm9uYXR0YWNoKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lVHJlZUVsZW1lbnQucHJvdG90eXBlLm9ucG9wdWxhdGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVUcmVlRWxlbWVudC5wcm90b3R5cGUuX3VwZGF0ZVBhcmVudFN0YXR1cyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fYWRkVHJlZUVsZW1lbnRGb3JSZXByZXNlbnRlZE9iamVjdCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5faW5zZXJ0UmVzb3VyY2VUcmVlRWxlbWVudCk6CiAgICAgICAgSGFuZGxlIG91ciBvd24gU291cmNlTWFwUmVzb3VyY2UgY2hpbGRyZW4gaW4gb25wb3B1bGF0ZSBhbmQgYWRkVHJlZUVsZW1lbnQgcGF0aHMuCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlSWNvbnMuY3NzOgogICAgICAgICguc291cmNlLW1hcC1yZXNvdXJjZS5yZXNvdXJjZS1pY29uIC5pY29uKToKICAgICAgICAoLnNvdXJjZS1tYXAtcmVzb3VyY2UucmVzb3VyY2UtaWNvbi5yZXNvdXJjZS10eXBlLXNjcmlwdCAuaWNvbik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9DbGlwcGluZ0dlbmVyaWMucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0NsaXBwaW5nR2VuZXJpY0AyeC5wbmc6IEFkZGVkLgogICAgICAgIEFkZCBuZXcgZmlsZXMsIGltYWdlcywgYW5kIHN0eWxlcyB0byB0cmlnZ2VyIHRoZSBpbWFnZXMuCgoyMDEzLTAyLTI2ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIERvd25sb2FkIFNvdXJjZU1hcHMgYW5kIGNyZWF0ZSBTb3VyY2VNYXBSZXNvdXJjZXMuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTczNTExNj4gUEFSSVRZIChXZWJLaXQgV2ViIEluc3BlY3Rvcik6IE1pc3NpbmcgU291cmNlIE1hcCBzdXBwb3J0CgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZU1hcC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VNYXAucHJvdG90eXBlLmdldCBvcmlnaW5hbFNvdXJjZUNvZGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwLnByb3RvdHlwZS5nZXQgcmVzb3VyY2VzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5wcm90b3R5cGUuYWRkUmVzb3VyY2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwLnByb3RvdHlwZS5yZXNvdXJjZUZvclVSTCk6CiAgICAgICAgR2l2ZSBhIFNvdXJjZU1hcCByZWZlcmVuY2VzIHRvIHRoZSBTb3VyY2VDb2RlIHRoYXQgb3JpZ2luYWxseSByZXF1ZXN0ZWQKICAgICAgICBpdCwgYW5kIHRoZSBTb3VyY2VNYXBSZXNvdXJjZXMgY3JlYXRlZCBmb3IgdGhlIGlucHV0IHNvdXJjZXMuCgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VNYXBSZXNvdXJjZS5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBSZXNvdXJjZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBSZXNvdXJjZS5wcm90b3R5cGUuZ2V0IHNvdXJjZU1hcCk6CiAgICAgICAgQSBTb3VyY2VNYXBSZXNvdXJjZSBpcyBhIFJlc291cmNlIHN1YmNsYXNzIHdpdGggbm8gbG9hZGluZyBpbmZvcm1hdGlvbi4KICAgICAgICBJdCBoYXMgYSByZWZlcmVuY2UgdG8gdGhlIFNvdXJjZU1hcCB0aGF0IGl0IGJlbG9uZ3MgdG8uCgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwUmVzb3VyY2UucHJvdG90eXBlLmNhblJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwUmVzb3VyY2UucHJvdG90eXBlLnJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQpOgogICAgICAgIFRoZSBjb250ZW50IGlzIGxvYWRlZCBvbiBkZW1hbmQuIE5vcm1hbCByZXF1ZXN0cyBmb3IgU291cmNlQ29kZSBjb250ZW50CiAgICAgICAgZ29lcyB0aHJvdWdoIFNvdXJjZUNvZGUucHJvdG90eXBlLnJlcXVlc3RDb250ZW50LiBTaW5jZSB0aGUgY29udGVudCBpcwogICAgICAgIGxvYWRlZCBvbiBkZW1hbmQsIHRoZSB0eXBlIGFuZCBkYXRhIGFyZSBmaWxsZWQgaW4gYWZ0ZXIgY29udGVudCBpcwogICAgICAgIHJlcXVlc3RlZCwgYW5kIHdlIGZpcmUgbm9ybWFsIFJlc291cmNlIGV2ZW50cywgbGlrZSBUeXBlIGNoYW5nZWQuCgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5tYXJrQXNGaW5pc2hlZCk6CiAgICAgICAgRG9uJ3QgcmVxdWVzdCBjb250ZW50IGlmIHdlIGNhbid0IC8gc2hvdWxkbid0IHJlcXVlc3QgY29udGVudCBmcm9tIHRoZQogICAgICAgIGJhY2tlbmQuIE5vcm1hbGx5IHJlc291cmNlcyBsb2FkIHRoZWlyIGNvbnRlbnQgYXMgc29vbiBhcyB0aGV5IGZpbmlzaAogICAgICAgIGxvYWRpbmcuIEhvd2V2ZXIgU291cmNlTWFwUmVzb3VyY2VzIGxvYWQgdGhlaXIgY29udGVudCBhbmQgdGhlbiBtYXJrCiAgICAgICAgYXMgZmluaXNoZWQuIFdpdGhvdXQgdGhpcyB3ZSB3b3VsZCBnZXQgYSBoYXJtbGVzcyBhc3NlcnQuCgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VDb2RlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZS5nZXQgc291cmNlTWFwcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZS5hZGRTb3VyY2VNYXApOgogICAgICAgIEFueSBTb3VyY2VDb2RlIHJlc291cmNlIGNhbiBoYXZlIGEgc2V0IG9mIHNvdXJjZSBtYXBzLiBJbiB0aGUgY29tbW9uIGNhc2UsCiAgICAgICAgYSBTY3JpcHQgd2lsbCBoYXZlIGEgc2luZ2xlIHNvdXJjZSBtYXAuIEhvd2V2ZXIgYSBEb2N1bWVudCByZXNvdXJjZSBtYXAKICAgICAgICBoYXZlIG11bHRpcGxlIHNvdXJjZU1hcHMgZm9yIGRpZmZlcmVudCBpbmxpbmUgPHNjcmlwdD4gc2VjdGlvbnMuCgogICAgICAgICogVXNlckludGVyZmFjZS9EZWJ1Z2dlck9ic2VydmVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJPYnNlcnZlci5wcm90b3R5cGUuc2NyaXB0UGFyc2VkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGVidWdnZXJNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5zY3JpcHREaWRQYXJzZSk6CiAgICAgICAgVGhlIFNvdXJjZU1hcCByZXNvdXJjZSdzIHVybCBjb21lcyBpbiBmcm9tIHNjcmlwdERpZFBhcnNlLiBQYXNzIGl0IG9uCiAgICAgICAgZXZlbnR1YWxseSB0byB0aGUgU2NyaXB0IGNvbnN0cnVjdG9yLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2NyaXB0LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0KToKICAgICAgICBJZiB3ZSBoYXZlIGEgc291cmNlIG1hcCBVUkwsIGxvYWQgYW5kIHBhcnNlIHRoZSBzb3VyY2UgbWFwLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlTWFwTWFuYWdlci5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBNYW5hZ2VyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcE1hbmFnZXIucHJvdG90eXBlLnNvdXJjZU1hcEZvclVSTCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBNYW5hZ2VyLnByb3RvdHlwZS5kb3dubG9hZFNvdXJjZU1hcCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBNYW5hZ2VyLnByb3RvdHlwZS5fbG9hZEFuZFBhcnNlU291cmNlTWFwKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcE1hbmFnZXIucHJvdG90eXBlLl9sb2FkQW5kUGFyc2VGYWlsZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwTWFuYWdlci5wcm90b3R5cGUuX2xvYWRBbmRQYXJzZVN1Y2NlZWRlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBNYW5hZ2VyLnByb3RvdHlwZS5fbWFpblJlc291cmNlRGlkQ2hhbmdlKToKICAgICAgICBBIGdsb2JhbCBzZXQgb2YgU291cmNlTWFwcyBieSB1cmwuIFRoaXMgcHJldmVudHMgbXVsdGlwbGUgZG93bmxvYWRzIG9mCiAgICAgICAgdGhlIHNhbWUgc291cmNlIG1hcC4gVGhlIG1hcCBpcyBjbGVhcmVkIG9uIG1haW4gcmVzb3VyY2UgY2hhbmdlcy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOgogICAgICAgIEFkZCBuZXcgZmlsZXMgYW5kIGluc3RhbnRpYXRlIHRoZSBuZXcgbWFuYWdlciBzaW5nbGV0b24uCgoyMDEzLTAyLTI2ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIEFkZCBwYXJ0cyBvZiBTb3VyY2VNYXAuanMgZnJvbSBPcGVuU291cmNlLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTE3MzUxMTY+IFBBUklUWSAoV2ViS2l0IFdlYiBJbnNwZWN0b3IpOiBNaXNzaW5nIFNvdXJjZSBNYXAgc3VwcG9ydAoKICAgICAgICBUaGlzIHBhcnNlcyBhIHYzIFNvdXJjZU1hcCBmaWxlLiBUaGUgc3BlYyBpcyBsaW5rZWQgYXQgdGhlIHRvcC4KICAgICAgICBTb3VyY2VNYXAuanMgY29tZXMgZnJvbSBPcGVuU291cmNlJ3MgZnJvbnRlbmQvU291cmNlTWFwLmpzLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZU1hcC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VNYXApOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwLnByb3RvdHlwZS5zb3VyY2VzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5wcm90b3R5cGUuc291cmNlQ29udGVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VNYXAucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdQYXlsb2FkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5wcm90b3R5cGUuX3BhcnNlU2VjdGlvbnMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwLnByb3RvdHlwZS5fcGFyc2VNYXApOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwLnByb3RvdHlwZS5faXNTZXBhcmF0b3IpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwLnByb3RvdHlwZS5fZGVjb2RlVkxRKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5TdHJpbmdDaGFySXRlcmF0b3IpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwLlN0cmluZ0NoYXJJdGVyYXRvci5wcm90b3R5cGUubmV4dCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VNYXAuU3RyaW5nQ2hhckl0ZXJhdG9yLnByb3RvdHlwZS5wZWVrKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5TdHJpbmdDaGFySXRlcmF0b3IucHJvdG90eXBlLmhhc05leHQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUG9zaXRpb25CYXNlZFNvdXJjZU1hcCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Qb3NpdGlvbkJhc2VkU291cmNlTWFwLnByb3RvdHlwZS5maW5kRW50cnkpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUG9zaXRpb25CYXNlZFNvdXJjZU1hcC5wcm90b3R5cGUuZmluZEVudHJ5UmV2ZXJzZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUG9zaXRpb25CYXNlZFNvdXJjZU1hcC5wcm90b3R5cGUuX3BhcnNlTWFwKToKCjIwMTMtMDItMjYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgT25seSBhbGxvdyBsZWZ0IGNsaWNrcyBvbiB0aGUgZ3V0dGVyIC8gZHJhZ2dpbmcgYnJlYWtwb2ludHMuCgogICAgICAgIFJldmlld2VkIGJ5IFJpY2t5IE1vbmRlbGxvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlKToKICAgICAgICBCYWlsIGlmIHRoZSBtb3VzZSBkb3duIGJ1dHRvbiBpcyBub3QgdGhlIGxlZnQgYnV0dG9uLgoKMjAxMy0wMi0yNiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBSZW1vdmUgdW51c2VkIENvbnRleHRNZW51IHNvZnQgbWVudSBjb2RlLgoKICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBSaWNreSBNb25kZWxsby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRleHRNZW51LmpzOgoKMjAxMy0wMi0yMSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBTdGFuZGFyZGl6ZSBvbiAiRXZlbnQiIG5vdCAiRXZlbnRzIi4gVGhlcmUgd2VyZSBhIGZldyBvdXRsaWVycy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YWJhc2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlQ29udGVudFZpZXcucHJvdG90eXBlLl9xdWVyeUZpbmlzaGVkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRQcm9tcHQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS5hcHBseVN1Z2dlc3Rpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuYWNjZXB0U3VnZ2VzdGlvbik6CgoyMDEzLTAyLTE5ICBKZWZmIE1pbGxlciAgPGplZmZtQGFwcGxlLmNvbT4KCiAgICAgICAgUmVnZW5lcmF0ZSBsb2NhbGl6ZWRTdHJpbmdzLmpzIGFmdGVyIHJlY2VudCBjaGFuZ2VzLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKICAgICAgICBSZWdlbmVyYXRlZC4KCjIwMTMtMDItMTggIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMjMyODM5PiBTaG93IEVycm9yIENvbnNvbGUgKE9wdGlvbitDbWQrQykgc2hvdWxkIGFsd2F5cyBwdXQga2V5Ym9hcmQgZm9jdXMgaW4gdGhlIGNvbnNvbGUKCiAgICAgICAgVGhlIGtleWJvYXJkIHNob3J0Y3V0IGFscmVhZHkgZXhpc3RlZCwgYnV0IGlmIHVzZWQgdG8gb3BlbiB0aGUgaW5zcGVjdG9yCiAgICAgICAgdGhlIGZvY3VzIHdhcyBnZXR0aW5nIHN0b2xlbiBhd2F5IGJ5IG90aGVyIGVsZW1lbnRzIHdpdGggdGFiaW5kZXggYW5kCiAgICAgICAgdGhlIERPTSBUcmVlLiBGaXggdGhpcyBzbyBmb2N1cyBpcyBub3Qgc3RvbGVuIGF3YXkuIEFzIGFuIGFkZGVkIGJvbnVzCiAgICAgICAgdGhlIGNvbnNvbGUgbm93IGtlZXBzIGl0cyBmb2N1cyBhY3Jvc3MgcGFnZSByZWxvYWRzIGFuZCBuYXZpZ2F0aW9ucy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3BlY3RvckZyb250ZW5kQVBJLmpzOgogICAgICAgIChJbnNwZWN0b3JGcm9udGVuZEFQSS5zaG93Q29uc29sZSk6CiAgICAgICAgV2hlbiB0aGUga2V5Ym9hcmQgc2hvcnRjdXQgaXMgdHJpZ2dlcmVkLCBmb2N1cyB0aGUgcXVpY2sgY29uc29sZS4gSWYKICAgICAgICB0aGUgcGFnZSBpcyBzdGlsbCBsb2FkaW5nLCB3ZSB3aWxsIG5lZWQgdG8gZm9jdXMgYWdhaW4gYmVjYXVzZSBvdGhlcgogICAgICAgIGVsZW1lbnRzIHdpdGggdGFiaW5kZXggbWF5IHN0ZWFsIGZvY3VzIGF3YXkgZnJvbSB0aGUgY29uc29sZSBwcm9tcHQuCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuaXNDb25zb2xlRm9jdXNlZCk6CiAgICAgICAgR2xvYmFsIGFjY2Vzc29yIGZvciB3aGV0aGVyIG9yIG5vdCB0aGUgY29uc29sZSBpcyBmb2N1c2VkLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5zaG93bik6CiAgICAgICAgV2hlbiBzaG93aW5nIGEgdGhlIERPTVRyZWVPdXRsaW5lLCBuZXZlciBzdGVhbCBmb2N1cyBmcm9tIHRoZSBjb25zb2xlLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVDb250ZW50Vmlldy5wcm90b3R5cGUuX3Jvb3RET01Ob2RlQXZhaWxhYmxlLnNlbGVjdE5vZGUpOgogICAgICAgIFdoZW4gdGhlIHJvb3QgZG9tIG5vZGUgY2hhbmdlcyBhbmQgd2UgcmV2ZWFsIGFuZCBzZWxlY3QgYW4gZWxlbWVudCwKICAgICAgICBuZXZlciBzdGVhbCBmb2N1cyBmcm9tIHRoZSBjb25zb2xlLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZU91dGxpbmUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlT3V0bGluZS5wcm90b3R5cGUuc2V0VmlzaWJsZSk6CiAgICAgICAgUHJvdmlkZSBhbiBvcHRpb25hbCBvbWl0Rm9jdXMgcGFyYW1ldGVyIHRvIHBhc3Mgb24uIEl0IGFscmVhZHkgZXhpc3RzIGJlbG93LgoKMjAxMy0wMi0xOCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBNb3ZlIC5pbmRldGVybWluYXRlLXByb2dyZXNzLXNwaW5uZXIgZnJvbSByZXNvdXJjZXMgb25seSB0byBhbGwgY29udGVudCB2aWV3cy4KCiAgICAgICAgU2NyaXB0Q29udGVudFZpZXdzIGFsc28gdXNlIHNwaW5uZXJzLCBhbmQgdGhleSB3ZXJlIG5vdCBnZXR0aW5nIHRoZQogICAgICAgIHByb3BlciBzdHlsaW5nIGlmIHlvdSB3ZXJlIGZhc3QgZW5vdWdoIHRvIHNlZSBpdCEKCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudFZpZXcuY3NzOiBSZW5hbWVkIGZyb20gV2ViSW5zcGVjdG9yL1VzZXJJbnRlcmZhY2UvUmVzb3VyY2VDb250ZW50Vmlldy5jc3MuCiAgICAgICAgKC5jb250ZW50LXZpZXcgPiAuaW5kZXRlcm1pbmF0ZS1wcm9ncmVzcy1zcGlubmVyKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgoKMjAxMy0wMi0xOCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBIaWRlIHRoZSBJbWFnZSBTaXplIHNlY3Rpb24gZm9yIEltYWdlIHJlc291cmNlcyBpZiB0aGUgbG9hZCBmYWlsZWQuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3JlZnJlc2hJbWFnZVNpemVTZWN0aW9uKToKICAgICAgICBEb24ndCBzaG93IGFuIGVtcHR5IGltYWdlIHNpemUgc2VjdGlvbiBpZiB0aGUgaW1hZ2UgZmFpbGVkIHRvIGxvYWQuCgoyMDEzLTAyLTE2ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIEFjY2lkZW50YWxseSBhZGRlZCBzb21lIGNvZGUgcmVmZXJlbmNpbmcgU291cmNlTWFwUmVzb3VyY2UgYmVmb3JlIGl0IHdhcyBhZGRlZC4KCiAgICAgICAgVW5yZXZpZXdlZCBjbGVhbnVwLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuY29va2llRm9yQ29udGVudFZpZXcpOgoKMjAxMy0wMi0xOCAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMxODAyNjc+IFJFR1JFU1NJT046IFJlbG9hZCBidXR0b24gaXMgbm8gbG9uZ2VyIHZpc2libGUgaW4gdGhlIFdlYiBJbnNwZWN0b3IKCiAgICAgICAgTWFrZSB0aGUgUmVzb3VyY2VUcmVlRWxlbWVudCdzICJzdGF0dXMiIHByb3BlcnR5IGEgcmVsb2FkIGJ1dHRvbiBpbiBjYXNlIHdlJ3JlCiAgICAgICAgZGVhbGluZyB3aXRoIHRoZSBtYWluIHJlc291cmNlIG9mIHRoZSBtYWluIGZyYW1lLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvUmVsb2FkLnBkZjogUmVtb3ZlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1JlbG9hZC5zdmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvUmVsb2FkU2VsZWN0ZWQuc3ZnOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVRyZWVFbGVtZW50LmNzczoKICAgICAgICAoLml0ZW0ucmVzb3VyY2UtdHlwZS1kb2N1bWVudCA+IC5zdGF0dXMgPiAucmVsb2FkLWJ1dHRvbik6CiAgICAgICAgKC5pdGVtLnJlc291cmNlLXR5cGUtZG9jdW1lbnQuc2VsZWN0ZWQgPiAuc3RhdHVzID4gLnJlbG9hZC1idXR0b24pOgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlRWxlbWVudC5wcm90b3R5cGUuZ2V0IHJlbG9hZEJ1dHRvbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fdXBkYXRlUmVzb3VyY2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlRWxlbWVudC5wcm90b3R5cGUuX3VwZGF0ZVN0YXR1cyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fcmVsb2FkUGFnZUNsaWNrZWQpOgoKMjAxMy0wMi0xNSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBEb3VibGUgY2xpY2tpbmcgdGhlIGRpc2Nsb3N1cmUgdHJpYW5nbGUgZm9yIGEgVHJlZUVsZW1lbnQgc2hvdWxkIG5vdAogICAgICAgIHRyaWdnZXIgdGhlIG9uZGJsY2xpY2sgZm9yIHRoZSBlbGVtZW50LgoKICAgICAgICBUaGlzIHdpbGwgYmUgbW9yZSBwb3NzaWJsZSBvbmNlIHdlIGFkZCBTb3VyY2VNYXBzLCBidXQgaXQgaXMgY3VycmVudGx5CiAgICAgICAgcG9zc2libGUgcmlnaHQgbm93IHdpdGggdGhlIE1haW4gUmVzb3VyY2UncyBkaXNjbG9zdXJlIHRyaWFuZ2xlLgoKICAgICAgICBSZXZpZXdlZCBieSBEZWFuIEphY2tzb24uCgogICAgICAgICogVXNlckludGVyZmFjZS9UcmVlT3V0bGluZS5qczoKICAgICAgICAoVHJlZUVsZW1lbnQudHJlZUVsZW1lbnREb3VibGVDbGlja2VkKToKCjIwMTMtMDItMTUgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgV2UgZG9uJ3QgbmVlZCB0byBjaGVjayB0aGUgZW50aXJlIHN0cmluZyB3aGVuIHdlIG1lYW4gdG8gY2hlY2sganVzdCB0aGUKICAgICAgICBmaXJzdCBjaGFyYWN0ZXIuIENvbnZlcnQgYW4gaW5kZXhPZiB0byBjaGFyQXQoMCkuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fc2hvdWxkR3JvdXBJbnRvRm9sZGVycyk6CgoyMDEzLTAyLTE1ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzIyNjM5NT4gTXVsdGlsaW5lIGNvbnNvbGUuYXNzZXJ0cyBpbiBSZXNvdXJjZVNpZGViYXJQYW5lbC5qcyBub3QgZ2V0dGluZyBzdHJpcHBlZAoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogU2NyaXB0cy9yZW1vdmUtY29uc29sZS1hc3NlcnRzLnBsOgogICAgICAgIEZvciBzYWZldHksIGtlZXAgdGhlIHNjcmlwdCByZWFkaW5nIGxpbmUgYnkgbGluZSBhbmQgd2FybiBpZiB0aGVyZSBpcwogICAgICAgIGEgY29uc29sZS5hc3NlcnQgdGhhdCB3YXMgbm90IHN0cmlwcGVkLiBUaGlzIGFsbW9zdCBhbHdheXMgbWVhbnMgdGhlCiAgICAgICAgYXNzZXJ0IHNwYW5uZWQgbXVsdGlwbGUgbGluZXMuCgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVNpZGViYXJQYW5lbC5qczoKICAgICAgICBDb252ZXJ0ZWQgbXVsdGktbGluZSBhc3NlcnRzIHRvIGEgc2luZ2xlIGxpbmUuCgoyMDEzLTAyLTE1ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIE1hbnVhbGx5IHJ1bm5pbmcgcmVtb3ZlLWNvbnNvbGUtYXNzZXJ0cy5wbCB3YXMgZmFpbGluZyBvbiByZW5hbWUuCiAgICAgICAgQ2hhbmdlIGluc3RlYWQgdG8gRmlsZTo6bW92ZSBmcm9tIHRoZSBGaWxlOjpjb3B5IG1vZHVsZSBhbmQKICAgICAgICByZXBvcnQgZXJyb3JzIGlmIHRoZXkgaGFwcGVuLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogU2NyaXB0cy9yZW1vdmUtY29uc29sZS1hc3NlcnRzLnBsOgoKMjAxMy0wMi0xNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEZpeCBleGNlcHRpb25zIGNhdXNlZCBieSBteSBlYXJsaWVyIEluc3BlY3RvckJhY2tlbmRDb21tYW5kcyBjaGFuZ2UuCgogICAgICAgIFVucmV2aWV3ZWQuCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01TdG9yYWdlT2JzZXJ2ZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01TdG9yYWdlT2JzZXJ2ZXIucHJvdG90eXBlLmRvbVN0b3JhZ2VJdGVtc0NsZWFyZWQpOiBDYWxsCiAgICAgICAgdXBkYXRlRE9NU3RvcmFnZSBpbnN0ZWFkIG9mIGRvbVN0b3JhZ2VVcGRhdGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZU9ic2VydmVyLnByb3RvdHlwZS5kb21TdG9yYWdlSXRlbVJlbW92ZWQpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VPYnNlcnZlci5wcm90b3R5cGUuZG9tU3RvcmFnZUl0ZW1BZGRlZCk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZU9ic2VydmVyLnByb3RvdHlwZS5kb21TdG9yYWdlSXRlbVVwZGF0ZWQpOiBEaXR0by4KCjIwMTMtMDItMTUgIEplc3NpZSBCZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KCiAgICAgICAgUmFuIHVwZGF0ZS1zYWZhcmktbG9jYWxpemFibGUtc3RyaW5ncy4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6CgoyMDEzLTAyLTE1ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgVXBkYXRlIEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcyBmb3IgdGhlIGxhdGVzdCBwcm90b2NvbCBjaGFuZ2VzLgoKICAgICAgICBSZXZpZXdlZCBieSBBbnRvaW5lIFF1aW50LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTT2JzZXJ2ZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NPYnNlcnZlci5wcm90b3R5cGUuc3R5bGVTaGVldEFkZGVkKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NPYnNlcnZlci5wcm90b3R5cGUuc3R5bGVTaGVldFJlbW92ZWQpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29va2llU3RvcmFnZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29va2llU3RvcmFnZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fZGVsZXRlQ2FsbGJhY2spOiBQYXNzIGJvdGggZG9tYWluIGFuZCB1cmwuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVN0b3JhZ2VPYnNlcnZlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VPYnNlcnZlci5wcm90b3R5cGUudXBkYXRlRE9NU3RvcmFnZSk6IFJlbmFtZWQgZnJvbSBkb21TdG9yYWdlVXBkYXRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VPYnNlcnZlci5wcm90b3R5cGUuZG9tU3RvcmFnZUl0ZW1zQ2xlYXJlZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZU9ic2VydmVyLnByb3RvdHlwZS5kb21TdG9yYWdlSXRlbVJlbW92ZWQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VPYnNlcnZlci5wcm90b3R5cGUuZG9tU3RvcmFnZUl0ZW1BZGRlZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZU9ic2VydmVyLnByb3RvdHlwZS5kb21TdG9yYWdlSXRlbVVwZGF0ZWQpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUuaGlnaGxpZ2h0RE9NTm9kZSk6IFVzZSBpbnZva2Ugc2luY2UgdGhlIGFyZ3VtZW50CiAgICAgICAgb3JkZXIgY2hhbmdlZCBhbmQgb2JqZWN0SWQgaXMgYW4gb3B0aW9uYWwgYXJndW1lbnQgd2UgZG9uJ3QgdXNlLgogICAgICAgICogVXNlckludGVyZmFjZS9JbnNwZWN0b3JCYWNrZW5kLmpzOgogICAgICAgIChJbnNwZWN0b3JCYWNrZW5kQ2xhc3MucHJvdG90eXBlLnJlcG9ydFByb3RvY29sRXJyb3IpOiBMb2cgdGhlIHdob2xlIGVycm9yLCBub3QganVzdCB0aGUgbWVzc2FnZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzOiBVcGRhdGVkIGZyb20gT3BlblNvdXJjZSByMTQyOTkyLgogICAgICAgICogVXNlckludGVyZmFjZS9JbnNwZWN0b3JPYnNlcnZlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkluc3BlY3Rvck9ic2VydmVyLnByb3RvdHlwZS5kZXRhY2hlZCk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9QYWdlT2JzZXJ2ZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5QYWdlT2JzZXJ2ZXIucHJvdG90eXBlLmphdmFzY3JpcHREaWFsb2dPcGVuaW5nKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5QYWdlT2JzZXJ2ZXIucHJvdG90eXBlLmphdmFzY3JpcHREaWFsb2dDbG9zZWQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlBhZ2VPYnNlcnZlci5wcm90b3R5cGUuc2NyaXB0c0VuYWJsZWQpOiBBZGRlZC4KCjIwMTMtMDItMTUgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMjA3MDA4PiBBbGxvdyB0b2dnbGluZyBzaG93aW5nIHNoYWRvdyB0cmVlcyB3aXRoIGEgYnV0dG9uIGluIHRoZSBET00gVHJlZSBuYXZpZ2F0aW9uIGJhcgoKICAgICAgICBXZSBkbyBhIGZldyB0aGluZ3MgaW4gdGhpcyBwYXRjaDoKCiAgICAgICAgMS4gV2UgbW92ZSB0aGUgZXhpc3RpbmcgY29tcG9zaXRpbmcgYm9yZGVycyBuYXZpZ2F0aW9uIGl0ZW0gZnJvbQogICAgICAgIEZyYW1lQ29udGVudFZpZXcgdG8gRE9NVHJlZUNvbnRlbnRWaWV3LgoKICAgICAgICAyLiBXZSBhZGQgYSBuZXcgbmF2aWdhdGlvbiBpdGVtIG9uIERPTVRyZWVDb250ZW50VmlldyB0byB0b2dnbGUKICAgICAgICBzaGFkb3cgdHJlZSBET00gbm9kZXMuCgogICAgICAgIDMuIFdlIG1ha2UgQ2x1c3RlckNvbnRlbnRWaWV3IHJldHVybiBpdHMgY3VycmVudCBjb250ZW50IHZpZXcncwogICAgICAgIG5hdmlnYXRpb24gaXRlbXMgaW4gdGhlIG5hdmlnYXRpb25JdGVtcyBhY2Nlc3NvciBzaW5jZSBvdGhlcndpc2UKICAgICAgICB0aGUgRE9NVHJlZUNvbnRlbnRWaWV3IG5hdmlnYXRpb24gaXRlbXMgd291bGRuJ3QgZ2V0IHBpY2tlZCB1cC4KCiAgICAgICAgNC4gV2UgYWRkIGEgbmV3IGV2ZW50IHRvIG5vdGlmeSB3aGVuIGEgQ29udGVudFZpZXcncyBuYXZpZ2F0aW9uCiAgICAgICAgaXRlbXMgaGF2ZSBjaGFuZ2VkIHNvIHRoYXQgdGhleSBtYXkgYmUgcGlja2VkIHVwIGJ5IHRoZSBDb250ZW50QnJvd3Nlci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ2x1c3RlckNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ2x1c3RlckNvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgbmF2aWdhdGlvbkl0ZW1zKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNsdXN0ZXJDb250ZW50Vmlldy5wcm90b3R5cGUuX2N1cnJlbnRDb250ZW50Vmlld0RpZENoYW5nZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRCcm93c2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIucHJvdG90eXBlLl9jb250ZW50Vmlld05hdmlnYXRpb25JdGVtc0RpZENoYW5nZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRWaWV3LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlQ29udGVudFZpZXcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgbmF2aWdhdGlvbkl0ZW1zKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVDb250ZW50Vmlldy5wcm90b3R5cGUuc2hvd24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fbW91c2VXYXNDbGlja2VkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVDb250ZW50Vmlldy5wcm90b3R5cGUuX3RvZ2dsZUNvbXBvc2l0aW5nQm9yZGVycyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlQ29udGVudFZpZXcucHJvdG90eXBlLl91cGRhdGVDb21wb3NpdGluZ0JvcmRlcnNCdXR0b25Ub01hdGNoUGFnZVNldHRpbmdzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVDb250ZW50Vmlldy5wcm90b3R5cGUuX3Nob3dTaGFkb3dET01TZXR0aW5nQ2hhbmdlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlQ29udGVudFZpZXcucHJvdG90eXBlLl90b2dnbGVTaG93c1NoYWRvd0RPTVNldHRpbmcpOgogICAgICAgICogVXNlckludGVyZmFjZS9GcmFtZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVDb250ZW50Vmlldy5wcm90b3R5cGUuc2hvd24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVDb250ZW50Vmlldy5wcm90b3R5cGUuX3BhdGhDb21wb25lbnRTZWxlY3RlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9TaGFkb3dET00ucGRmOiBBZGRlZC4KCjIwMTMtMDItMTUgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMDI2Mzc2PiBMYXllcnMgc2lkZWJhciBwYW5lbCBzaG91bGQgc2hvdyBsYXllcnMgYXNzb2NpYXRlZCB3aXRoIGFueSBkZXNjZW5kYW50IG5vZGUKCiAgICAgICAgVXNlIHRoZSBET00gaGllcmFyY2h5IHRvIGNvbXBpbGUgYSBsaXN0IG9mIGxheWVycyBhc3NvY2lhdGVkIHdpdGggYW55CiAgICAgICAgZGVzY2VuZGFudCBvZiB0aGUgbm9kZSBwYXNzZWQgdG8gTGF5ZXJUcmVlTWFuYWdlcidzIGxheWVyc0Zvck5vZGUoKQogICAgICAgIG1ldGhvZC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTGF5ZXJUcmVlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZU1hbmFnZXIucHJvdG90eXBlLmdldCBmbGF0TGF5ZXJUcmVlKTogTmV3IGdldHRlcgogICAgICAgIHRvIG1ha2UgaXQgbXVjaCBlYXNpZXIgdG8gZGVidWcgaXNzdWVzIHdpdGggdGhlIExheWVyVHJlZU1hbmFnZXIgc28gd2UKICAgICAgICBnZXQgdGhlIGZsYXQgbGlzdCBvZiBhbGwga25vd24gbGF5ZXJzIGZyb20gdGhlIGNvbnNvbGUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVNYW5hZ2VyLnByb3RvdHlwZS5sYXllcnNGb3JOb2RlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZU1hbmFnZXIucHJvdG90eXBlLik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVNYW5hZ2VyLnByb3RvdHlwZS5fZmxhdHRlbmVkTGF5ZXJUcmVlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZU1hbmFnZXIucHJvdG90eXBlLl9vYnRhaW5Ob2RlSWRzRm9yTGF5ZXJJZHMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlTWFuYWdlci5wcm90b3R5cGUuX2xheWVyc0ZvckRlc2NlbmRhbnRzT2ZOb2RlKToKCjIwMTMtMDItMTUgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMjIzNTk3PiBEYXNoYm9hcmQgcmVzb3VyY2VzIHNpemUgbWF5IGJlIG9ubHkgcGFydGlhbAoKICAgICAgICBXYWl0IHVudGlsIHdlJ3ZlIGdvdHRlbiBhbiBldmVudCBpbmRpY2F0aW5nIHdlJ3JlIGxvYWRpbmcgdGhlIG1haW4KICAgICAgICByZXNvdXJjZSB0byBzdGFydCB0cmFja2luZyBzaXplcy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGFzaGJvYXJkTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhc2hib2FyZE1hbmFnZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGFzaGJvYXJkTWFuYWdlci5wcm90b3R5cGUuX21haW5SZXNvdXJjZURpZENoYW5nZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXNoYm9hcmRNYW5hZ2VyLnByb3RvdHlwZS5fc3RhcnRVcGRhdGluZ1RpbWUpOgoKMjAxMy0wMi0xNSAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMyMTc4Njk+IERhc2hib2FyZDogTENEIHRpbWVyIGRvZXMgbm90IHVwZGF0ZSB3aGVuIGdvaW5nIGJhY2svZm9yd2FyZAoKICAgICAgICBEb24ndCBmb3JnZXQgdG8ga2lsbCBhbnkgcHJldmlvdXNseSBydW5uaW5nIHRpbWVyIHdoZW4gYSBuZXcgcGFnZSBsb2FkcwogICAgICAgIGFuZCByZXNldCB0aGUgdGltZSByZXBvcnRlZCBpbiB0aGUgZGFzaGJvYXJkIHRvIDAgYmVmb3JlIHN0YXJ0aW5nIHRoZQogICAgICAgIG5ldyB0aW1lci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGFzaGJvYXJkTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhc2hib2FyZE1hbmFnZXIucHJvdG90eXBlLl9tYWluUmVzb3VyY2VEaWRDaGFuZ2UpOgoKMjAxMy0wMi0xNSAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMyMDcwMTc+IE5vZGVzIGhvc3RlZCBpbiBzaGFkb3cgdHJlZXMgc2hvdWxkIG5vdCBiZSBkaXNyZWdhcmRlZCB3aGVuICJzaG93LXNoYWRvdy1kb20iIHNldHRpbmcgaXMgb2ZmCgogICAgICAgIFdlIHVzZWQgdG8gb25seSBkZWFsIHdpdGggdGhlICJzaG93LXNoYWRvdy1kb20iIHNldHRpbmcgYXMgaW1tdXRhYmxlIGFuZAogICAgICAgIHdvdWxkIHNpbXBseSBub3QgY3JlYXRlIERPTU5vZGVzIGZvciBwYXlsb2FkcyB3aXRoIHNoYWRvdyByb290cyBpbiBjYXNlCiAgICAgICAgdGhlIHNldHRpbmcgd2FzIGZhbHNlICh0aGUgZGVmYXVsdCkuIEhvd2V2ZXIsIHdlIHdvdWxkIHJ1biBpbiBhIHNpdHVhdGlvbgogICAgICAgIHdoZXJlIHRoZSBiYWNrZW5kIGNvdWxkIHB1c2ggbm9kZXMgdGhhdCB3ZXJlIHBhcnQgb2YgYSBzaGFkb3cgdHJlZSwKICAgICAgICByZWdhcmRsZXNzIG9mIHRoZSBzZXR0aW5nLCBhbmQgdGhlIHBhcmVudElkIGZvciB0aGUgbm9kZSB3b3VsZCBub3QgYmUKICAgICAgICByZWZlcmVuY2VkIGluIHRoZSBET01UcmVlTWFuYWdlcidzIF9pZFRvRE9NTm9kZSBtYXAgd2hpY2ggd291bGQgZXZlbnR1YWxseQogICAgICAgIHlpZWxkIGFuIGVycm9yIHdoZW4gaGFuZGxpbmcgc2V0Q2hpbGROb2RlcyBwYXlsb2FkcyBhbmQgYnJlYWsgYW55IGZ1cnRoZXIKICAgICAgICBET00gaW50ZXJhY3Rpb24gaW4gdGhlIGluc3BlY3Rvci4gVGhpcyBraW5kIG9mIGNhc2UgaGFwcGVuZWQgcXVpdGUgb2Z0ZW4KICAgICAgICB3aGVuIHRoZSBMYXllclRyZWVNYW5hZ2VyIHdvdWxkIGdldCBjb21wb3N0ZWQgbGF5ZXJzIHRoYXQgd2VyZSBwYXJ0IG9mCiAgICAgICAgYW4gPGlucHV0PiBlbGVtZW50LCA8dmlkZW8+IGVsZW1lbnQsIGV0Yy4gCgogICAgICAgIFdlIG5vdyBzd2l0Y2ggdG8gYSBzeXN0ZW0gd2hlcmUgdGhlICJzaG93LXNoYWRvdy1kb20iIHNldHRpbmcgY2FuIGJlIGNoYW5nZWQKICAgICAgICBhdCBhbnkgdGltZSBhbmQgd2UgcmVmbGVjdCB0aGUgY29ycmVjdCBzdGF0ZSBpbiB0aGUgRE9NVHJlZU91dGxpbmUuIFNpbmNlCiAgICAgICAgdGhlIERPTVRyZWVPdXRsaW5lIGJhc2VzIGl0cyByZXByZXNlbnRhdGlvbiBvbiB0aGUgZGF0YSByZXByZXNlbnRlZCBieQogICAgICAgIERPTU5vZGUgaW5zdGFuY2VzLCB3ZSBtYWtlIHRoZSAiZmlyc3RDaGlsZCIsICJsYXN0Q2hpbGQiLCAicHJldmlvdXNTaWJsaW5nIiwKICAgICAgICAibmV4dFNpYmxpbmciIGFuZCAiY2hpbGRyZW4iIHByb3BlcnRpZXMgZ2V0dGVycyBhbmQgZHluYW1pY2FsbHkgY2hlY2sgd2hldGhlcgogICAgICAgIGNoaWxkIG5vZGVzIGhvc3RlZCBpbiBzaGFkb3cgcm9vdHMgc2hvdWxkIGJlIGlnbm9yZWQuCgogICAgICAgIFdlIG9ubHkgYnVpbGQgdGhlIGZpbHRlcmVkIGNoaWxkcmVuIGxpc3QgaW4gdGhlIGNhc2Ugd2hlcmUgd2Ugc2hvdWxkbid0CiAgICAgICAgc2hvdyBzaGFkb3cgcm9vdHMgYW5kIHdlJ3ZlIGlkZW50aWZpZWQgdGhyb3VnaCBhIGNhbGwgdG8gX3JlbnVtYmVyKCkgdGhhdAogICAgICAgIHRoZSBmaWx0ZXJlZCBsaXN0IG5lZWRlZCB1cGRhdGluZy4gVGhlIGZpbHRlcmVkIGxpc3QgaXMgdGhlbiBjYWNoZWQgdW50aWwKICAgICAgICB0aGUgbmV4dCB0aW1lIGl0IG5lZWRzIHVwZGF0aW5nLgoKICAgICAgICBXZSBhbHNvIG1ha2UgdGhlICJjaGlsZE5vZGVDb3VudCIgcHJvcGVydHkgdXNlIGEgZ2V0dGVyIC8gc2V0dGVyIGFzIGl0IHdhcwogICAgICAgIGJlaW5nIGFjY2Vzc2VkIHVzaW5nIHRoZSBpdmFyIGZyb20gb3V0c2lkZSB0aGUgRE9NTm9kZSBjbGFzcyBhbmQgaXQgd291bGQKICAgICAgICBub3QgcmVmbGVjdCB3aGV0aGVyIHNoYWRvdyByb290cyBzaG91bGQgYmUgcmVwb3J0ZWQgYXMgY2hpbGRyZW4uCgogICAgICAgIFRoZW4sIHdlIG1vdmUgdGhlIHNldHRpbmcgdG8gYmUgYSBzaGFyZWQgc2V0dGluZyBvbiB0aGUgZ2xvYmFsIFdlYkluc3BlY3RvcgogICAgICAgIG9iamVjdCBhbmQgdHJhY2sgY2hhbmdlcyB0byBpdCwgdXBkYXRpbmcgYWxsIG5vZGVzIGluIHRoZSBET01UcmVlT3V0bGluZQogICAgICAgIHdoZW4gdGhlIGNoYW5nZSBoYXBwZW5zLgoKICAgICAgICBGdXJ0aGVyIGZpeGVzIHdpbGwgZW5zdXJlIHdlIHJlZnJlc2ggdGhlIGxheWVyIHRyZWUgd2hlbiB0aGUgc2V0dGluZyBjaGFuZ2VzLAogICAgICAgIGFuZCB0ZWFjaCB0aGUgTGF5ZXJUcmVlTWFuYWdlciB0byBpZ25vcmUgbGF5ZXJzIGF0dGFjaGVkIHRvIG5vZGVzIGluIHNoYWRvdwogICAgICAgIHJvb3RzIHdoZW4gdGhlIHNldHRpbmcgaXMgdG8gaGlkZSBzaGFkb3cgbm9kZXMuIEFub3RoZXIgZml4IHdpbGwgYmUgdG8gcHJvdmlkZQogICAgICAgIGEgYnV0dG9uIHRvIHRvZ2dsZSB0aGF0IHNldHRpbmcgaW4gdGhlIERPTSB0cmVlJ3MgbmF2aWdhdGlvbiBiYXIgaW4gbGlldSBvZgogICAgICAgIGEgY29udGV4dHVhbCBtZW51IGl0ZW0uCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLmdldCBmaXJzdENoaWxkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLmdldCBsYXN0Q2hpbGQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5wcm90b3R5cGUuZ2V0IG5leHRTaWJsaW5nKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLmdldCBwcmV2aW91c1NpYmxpbmcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5wcm90b3R5cGUuZ2V0IGNoaWxkTm9kZUNvdW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLnNldCBjaGlsZE5vZGVDb3VudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5oYXNDaGlsZE5vZGVzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLmhhc1NoYWRvd1Jvb3RzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLl9pbnNlcnRDaGlsZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5fcmVtb3ZlQ2hpbGQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5wcm90b3R5cGUuX3NldENoaWxkcmVuUGF5bG9hZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5fcmVudW1iZXIpOgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVFbGVtZW50LnByb3RvdHlwZS5oYW5kbGVMb2FkQWxsQ2hpbGRyZW4pOgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLnByb3RvdHlwZS5fY2hpbGROb2RlQ291bnRVcGRhdGVkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZU91dGxpbmUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlT3V0bGluZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlT3V0bGluZS5wcm90b3R5cGUucG9wdWxhdGVDb250ZXh0TWVudSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlT3V0bGluZS5wcm90b3R5cGUuX3RvZ2dsZVNob3dTaGFkb3dET00pOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZU91dGxpbmUucHJvdG90eXBlLl9zaG93U2hhZG93RE9NU2V0dGluZ0NoYW5nZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6CgoyMDEzLTAyLTE0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgU3dpdGNoIHRvIHRoZSBuZXcgZmxleGJveCBtb2RlbCBmb3Igc2lnbmlmaWNhbnRseSBmYXN0ZXIgbGF5b3V0IHRpbWVzLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMyMDY5MzA+IFJFR1JFU1NJT046IExheW91dCB0aW1lIGluIHRoZSBXZWIgSW5zcGVjdG9yCiAgICAgICAgaXMgMS4yMXggbG9uZ2VyIGNvbXBhcmVkIHRvIFNhZmFyaSA2CgogICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRQcm9tcHQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LlN1Z2dlc3RCb3gucHJvdG90eXBlLl91cGRhdGVCb3hQb3NpdGlvbik6IE1ha2Ugc3VyZSB0byBhYnNvbHV0ZSBwb3NpdGlvbgogICAgICAgIHRoZSBlbGVtZW50IHdoZW4gbWVhc3VyaW5nIGluIHRoZSBib2R5IHRvIGF2b2lkIGZsZXhib3ggbGF5b3V0LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSGllcmFyY2hpY2FsUGF0aE5hdmlnYXRpb25JdGVtLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSGllcmFyY2hpY2FsUGF0aE5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5zZXQgY29tcG9uZW50cyk6IFVzZSB1cGRhdGVMYXlvdXQgaW5zdGVhZAogICAgICAgIG9mIHVwZGF0ZUxheW91dFNvb24uIERlbGF5aW5nIHRoZSBsYXlvdXQgY2F1c2VzIGEgdmlzdWFsIGZsYXNoIG9mIHdyYXBwZWQgaXRlbXMuCgogICAgICAgICogVXNlckludGVyZmFjZS9CdXR0b25Ub29sYmFySXRlbS5jc3M6IFJlcGxhY2VkIC13ZWJraXQtYm94IHdpdGggLXdlYmtpdC1mbGV4LgogICAgICAgIFJlcGxhY2VkIC13ZWJraXQtYm94LWZsZXggd2l0aCAtd2Via2l0LWZsZXguIFJlcGxhY2VkIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWwKICAgICAgICB3aXRoIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IGNvbHVtbi4gUmVwbGFjZWQgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsIHdpdGgKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiByb3cuIFJlcGxhY2VkIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXIgd2l0aCAtd2Via2l0LWFsaWduLWl0ZW1zOiBjZW50ZXIuCiAgICAgICAgUmVwbGFjZWQgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyIHdpdGggLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlci4gUmVwbGFjZWQKICAgICAgICAtd2Via2l0LWJveC1wYWNrOiBzdGFydCB3aXRoIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0LiBSZXBsYWNlZCAtd2Via2l0LWJveC1wYWNrOiBlbmQKICAgICAgICB3aXRoIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBmbGV4LWVuZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudEJyb3dzZXIuY3NzOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udHJvbFRvb2xiYXJJdGVtLmNzczogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Rhc2hib2FyZFZpZXcuY3NzOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRmlsdGVyQmFyLmNzczogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZsZXhpYmxlU3BhY2VOYXZpZ2F0aW9uSXRlbS5jc3M6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9Gb250UmVzb3VyY2VDb250ZW50Vmlldy5jc3M6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZVJlc291cmNlQ29udGVudFZpZXcuY3NzOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTGF5ZXJUcmVlU2lkZWJhclBhbmVsLmNzczogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uY3NzOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvblNpZGViYXJQYW5lbC5jc3M6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9Qb3BvdmVyLmNzczogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1F1aWNrQ29uc29sZS5jc3M6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVNpZGViYXJQYW5lbC5jc3M6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9Ub29sYmFyLmNzczogRGl0dG8uCgogICAgICAgICogVXNlckludGVyZmFjZS9IaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50LmNzczogRGl0dG8uCiAgICAgICAgUGx1cyBhZGRlZCBtaW4td2lkdGg6IDAgaW4gYSBjb3VwbGUgcGxhY2VzIHRvIGdldCBwcm9wZXIgc2hyaW5raW5nLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvbkJhci5jc3M6IERpdHRvLgogICAgICAgIFBsdXMgYWRkZWQgLXdlYmtpdC1mbGV4LXdyYXA6IHdyYXAgaW4gYSBjb3VwbGUgcGxhY2VzIHRvIGdldCBwcm9wZXIgbWVhc3VyaW5nIGluIEphdmFTY3JpcHQuCgoyMDEzLTAyLTE0ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzIwMDg1OD4gUG9wb3ZlcnMgY2FuIGRyYXcgdGhlaXIgYmFja2dyb3VuZCB0d2ljZQoKICAgICAgICBTaW5jZSB0aGUgY2FudmFzIGNvbnRleHQgbWF5IGJlIHRoZSB2ZXJ5IHNhbWUgY29udGV4dCBhY3Jvc3MKICAgICAgICBwcmVzZW50YXRpb25zIG9mIHRoZSBwb3BvdmVyLCBlbnN1cmUgdGhhdCB3ZSByZXN0b3JlIHRoZSBkZWZhdWx0CiAgICAgICAgc3RhdGUgYWZ0ZXIgd2UncmUgZG9uZSBkcmF3aW5nIHNvIHRoYXQgdGhlIHByZXZpb3VzIGNsaXAgcGF0aAogICAgICAgIGlzIHJlbW92ZWQuCgogICAgICAgIFdlIGFsc28gY2xlYXIgdGhlIGRyYXdpbmcgcmVnaW9uIHNvIHRoYXQgd2UgZG9uJ3QgZ2V0IHJlbW5hbnRzCiAgICAgICAgb2YgdGhlIHByZXZpb3VzbHkgZHJhd24gZnJhbWUgaW4gY2FzZSB0aGUgZnJhbWUgc2l6ZSBpcyB0aGUgc2FtZQogICAgICAgIGFzIGZvciB0aGUgcHJldmlvdXMgcG9wb3ZlciBwcmVzZW50YXRpb24uCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1BvcG92ZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Qb3BvdmVyLnByb3RvdHlwZS5fZHJhd0JhY2tncm91bmQpOgoKMjAxMy0wMi0xNCAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMxOTI5ODI+IERlYnVnZ2VyIHBvcG92ZXJzIHNob3VsZCBsaW5lLXVwIGFycm93IHRvIG1hdGNoIGhvdmVyZWQgdG9rZW4KCiAgICAgICAgVXNlIHRoZSB0b2tlbidzIGJvdW5kcyByYXRoZXIgdGhhbiB0aGUgZXhwcmVzc2lvbidzIGJvdW5kcwogICAgICAgIHRvIHByZXNlbnQgdGhlIHBvcG92ZXIuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fY2hlY2tIb3ZlcmVkVG9rZW4pOgoKMjAxMy0wMi0xNCAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMyMDkxNTk+IERhc2hib2FyZCBsb2FkIHRpbWVyIHN0YXJ0cyBvdmVyIHdoZW4gcmVjb3JkaW5nIGluIHRoZSBUaW1lbGluZSBtYW51YWxseQoKICAgICAgICBJbnN0ZWFkIG9mIHN0YXJ0aW5nIHRoZSB0aW1lciB1cG9uIHN0YXJ0aW5nIHJlY29yZGluZyB0aGUgdGltZWxpbmUsIHVzZSB0aGUKICAgICAgICBXZWJJbnNwZWN0b3IuRnJhbWUuRXZlbnQuTWFpblJlc291cmNlRGlkQ2hhbmdlIGV2ZW50IHRvIHRyYWNrIGxvYWQgb2YgdGhlCiAgICAgICAgbWFpbiBmcmFtZSBvbmx5IHNpbmNlIGl0J3MgdGhlIGxvYWQgb2YgdGhlIG1haW4gZnJhbWUgdGhhdCB3ZSdyZSBzaG93aW5nCiAgICAgICAgdGhlIHRpbWUgZm9yIGluIHRoZSBkYXNoYm9hcmQuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Rhc2hib2FyZE1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXNoYm9hcmRNYW5hZ2VyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhc2hib2FyZE1hbmFnZXIucHJvdG90eXBlLl9tYWluUmVzb3VyY2VEaWRDaGFuZ2UpOgoKMjAxMy0wMi0xMyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIERvbid0IGZpcmUgV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5FdmVudC5EaWRSZXNpemUgaWYgbm90aGluZyBjaGFuZ2VkLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTI3NDU4OTA+IEF1dG9jb21wbGV0ZSBzbG93cyBkb3duIG15IHR5cGluZyBpbiB0aGUgV2ViIEluc3BlY3RvciBjb25zb2xlIHdoaWxlIGRlYnVnZ2luZwoKICAgICAgICBSZXZpZXdlZCBieSBBbnRvaW5lIFF1aW50LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fdXBkYXRlU2l6ZSk6IE9ubHkgY2hhbmdlIHRoZSBzdHlsZSBhbmQgZmlyZSB0aGUgZXZlbnQKICAgICAgICBpZiB0aGUgaGVpZ2h0IG9mIHRoZSB0b29sYmFyIG9yIGVsZW1lbnQgY2hhbmdlZC4KCjIwMTMtMDItMTIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBTcGVlZCB1cCBzZWxlY3Rpb24gb2YgZGVlcGx5IG5lc3RlZCBET00gbm9kZXMuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzIwMTU4ND4gVUkgdXBkYXRlcyBhZnRlciBzZWxlY3RpbmcgZWxlbWVudHMgaXMgdmVyeSBzbG93CgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0hpZXJhcmNoaWNhbFBhdGhOYXZpZ2F0aW9uSXRlbS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkhpZXJhcmNoaWNhbFBhdGhOYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUudXBkYXRlTGF5b3V0KTogUmVtb3ZlIGEgb2Zmc2V0V2lkdGgKICAgICAgICBmcm9tIGEgbG9vcCB0aGF0IGFsc28gc2V0cyBzdHlsZSBpbmZvLgoKMjAxMy0wMi0xMiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFRyZWF0IGFuIGVtcHR5IFVSTCBmb3IgZnJhbWVzIGFzICJhYm91dDpibGFuayIgZm9yIHRoZSBzcGVjaWFsIGVtcHR5IHBhZ2UuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lUmVzb3VyY2VNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLl9jcmVhdGVGcmFtZSk6CgoyMDEzLTAyLTEzICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzE5MzEyNT4gRGVidWdnZXIgcG9wb3ZlcnMgZG9uJ3QgYXBwZWFyIGZvciBib29sZWFuIHZhbHVlcwoKICAgICAgICBEb24ndCBmb3JnZXQgdG8gaGFuZGxlIGJvb2xlYW4gdmFsdWVzIGZvciB0aGUgZGVidWdnZXIgcG9wb3Zlci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlQ29kZVRleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUudG9rZW5XYXNIb3ZlcmVkLnBvcHVsYXRlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS50b2tlbldhc0hvdmVyZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9zaG93UG9wb3ZlckZvckJvb2xlYW4pOgoKMjAxMy0wMi0xMiAgSmVzc2llIEJlcmxpbiAgPGpiZXJsaW5AYXBwbGUuY29tPgoKICAgICAgICBSYW4gdXBkYXRlLXNhZmFyaS1sb2NhbGl6YWJsZS1zdHJpbmdzLgoKICAgICAgICBSZXZpZXdlZCBieSBDb2R5IEtyaWVnZXIuCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgogICAgICAgIFVwZGF0ZWQgYnkgdGhlIHNjcmlwdC4KCjIwMTMtMDItMTEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgc3VwcG9ydCBmb3IgY29tcHV0ZWQgc3R5bGUuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MjA2MjcyJjEyNTI2MzE5PgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NQcm9wZXJ0eS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5zZXQgdGV4dCk6IFJldHVybiBlYXJseSBpZiBub3QgZWRpdGFibGUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUuc2V0IG5hbWUpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5nZXQgY2Fub25pY2FsTmFtZSk6IFVzZSBDU1NTdHlsZU1hbmFnZXIuY2Fub25pY2FsTmFtZUZvclByb3BlcnR5TmFtZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5zZXQgdmFsdWUpOiBSZXR1cm4gZWFybHkgaWYgbm90IGVkaXRhYmxlLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90eXBlLnNldCBwcmlvcml0eSk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90eXBlLnNldCBlbmFibGVkKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUuYWRkKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUucmVtb3ZlKTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb24uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLmdldCBlZGl0YWJsZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUudXBkYXRlKTogU3RvcmUgdGhlIHByb3BlcnR5IGluIGEgbWFwIGlmIHdlIGFyZW4ndCBlZGl0YWJsZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLmFkZFByb3BlcnR5KTogUmV0dXJuIGVhcmx5IGlmIG5vdCBlZGl0YWJsZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLnJlbW92ZVByb3BlcnR5KTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZS5wcm9wZXJ0eUZvck5hbWUpOiBVc2UgcHJvcGVydHkgbWFwIGlmIG5vdCBlZGl0YWJsZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3RvdHlwZS5jYW5vbmljYWxOYW1lRm9yUHJvcGVydHlOYW1lKTogQWRkZWQuIE1vdmVkIGZyb20gQ1NTUHJvcGVydHkuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGVTdHlsZXMuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLnJlZnJlc2guZmV0Y2hlZENvbXB1dGVkU3R5bGUpOiBBZGRlZC4gTW92ZWQgdGhlIGZpbmlzaCBoZXJlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuZ2V0IGNvbXB1dGVkU3R5bGUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLl9wYXJzZVN0eWxlUHJvcGVydHlQYXlsb2FkKTogSGFuZGxlIE5hTiBpbmRleCBiZXR0ZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5fdXBkYXRlU3R5bGVDYXNjYWRlKTogVXNlIGFuIGV4dGVybmFsIGVmZmVjdGl2ZSBwcm9wZXJ0eSBtYXAgZm9yCiAgICAgICAgdGhlIG1haW4gZWxlbWVudCBzdHlsZXMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5fbWFya092ZXJyaWRkZW5Qcm9wZXJ0aWVzKTogVXNlIGFuIGV4dGVybmFsIGVmZmVjdGl2ZSBwcm9wZXJ0eSBtYXAKICAgICAgICBpZiBvbmUgaXMgcGFzc2VkIGluLgoKMjAxMy0wMi0xMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBzdXBwb3J0IGZvciBlZGl0aW5nIHJ1bGVzLCBzdHlsZXMgYW5kIHByb3BlcnRpZXMuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MjA2MjcyJjEyNTI2MzE5PgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NQcm9wZXJ0eS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5zZXQgaW5kZXgpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS51cGRhdGUpOiBEZWxldGUgdGhlIHBlbmRpbmcgcHJvcGVydGllcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5nZXQgdGV4dCk6IFVzZSB0aGUgZ2V0dGVycyB0byBnZXQgdGhlIHBlbmRpbmcgdmFsdWVzLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90eXBlLnNldCB0ZXh0KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUuZ2V0IG5hbWUpOiBSZXR1cm4gX3BlbmRpbmdOYW1lIGlmIGluZGV4IGlzIE5hTi4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5zZXQgbmFtZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90eXBlLmdldCB2YWx1ZSk6IFJldHVybiBfcGVuZGluZ1ZhbHVlIGlmIGluZGV4IGlzIE5hTi4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5zZXQgdmFsdWUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5nZXQgaW1wb3J0YW50KTogVXNlIHByaW9yaXR5IGdldHRlci4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5zZXQgaW1wb3J0YW50KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUuZ2V0IHByaW9yaXR5KTogUmV0dXJuIF9wZW5kaW5nUHJpb3JpdHkgaWYgaW5kZXggaXMgTmFOLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90eXBlLnNldCBwcmlvcml0eSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90eXBlLmdldCBlbmFibGVkKTogQ2hlY2sgb3duZXJTdHlsZSBhbmQgaW5kZXggdG9vLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90eXBlLnNldCBlbmFibGVkKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUuYWRkKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUucmVtb3ZlKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUuX3VwZGF0ZVByb3BlcnR5U29vbik6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90eXBlLl91cGRhdGVQcm9wZXJ0eVNvb24ucGVyZm9ybVVwZGF0ZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90eXBlLl9jYW5jZWxQZW5kaW5nVXBkYXRlKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1J1bGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NSdWxlLnByb3RvdHlwZS5zZXQgc2VsZWN0b3JUZXh0KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NSdWxlLnByb3RvdHlwZS5zZXQgc2VsZWN0b3JzKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb24uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLnVwZGF0ZSk6IERvbid0IHNldCBvd25lclN0eWxlIHRvIG51bGwgYW55bW9yZQogICAgICAgIHNpbmNlIHdlIHJldXNlIHByb3BlcnRpZXMgYW5kIHdhbnQgdGhlbSBhc3NvY2lhdGVkIHN0aWxsLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUuc2V0IHRleHQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLmdldCBwZW5kaW5nUHJvcGVydGllcyk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUucHJvcGVydHlGb3JOYW1lKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZS5wcm9wZXJ0eUZvck5hbWUuZmluZE1hdGNoKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZS5hZGRQcm9wZXJ0eSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUucmVtb3ZlUHJvcGVydHkpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NTm9kZVN0eWxlcy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLnJ1bGVTZWxlY3RvckNoYW5nZWQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLmNoYW5nZVJ1bGVTZWxlY3Rvcik6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuY2hhbmdlU3R5bGVUZXh0KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5jaGFuZ2VTdHlsZVRleHQuZmV0Y2hlZFN0eWxlU2hlZXRDb250ZW50KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5jaGFuZ2VQcm9wZXJ0eSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuY2hhbmdlUHJvcGVydHlUZXh0KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5jaGFuZ2VQcm9wZXJ0eUVuYWJsZWRTdGF0ZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuYWRkUHJvcGVydHkpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLnJlbW92ZVByb3BlcnR5KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5faGFuZGxlUHJvcGVydHlDaGFuZ2UpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLl9wYXJzZVN0eWxlUHJvcGVydHlQYXlsb2FkKTogUmV1c2UgcGVuZGluZyBwcm9wZXJ0aWVzLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuX3N0eWxlU2hlZXRDb250ZW50RGlkQ2hhbmdlKTogSWdub3JlIHN0eWxlc2hlZXRzIHdlIGtub3cKICAgICAgICB3ZSBqdXN0IGNoYW5nZWQuCgoyMDEzLTAyLTExICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFyayBvdmVycmlkZGVuIHByb3BlcnRpZXMgYW5kIGFzc29jaWF0ZSBzaG9ydGhhbmQgdG8gbG9uZ2hhbmQgcHJvcGVydGllcy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcyMDYyNzImMTI1MjYzMTk+CgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1Byb3BlcnR5LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90eXBlLnVwZGF0ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUuZ2V0IGNhbm9uaWNhbE5hbWUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5nZXQgY2Fub25pY2FsTmFtZS5jYW5vbmljYWxQcm9wZXJ0eU5hbWUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5zZXQgb3ZlcnJpZGRlbik6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9ET01Ob2RlU3R5bGVzLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUucmVmcmVzaC5mZXRjaGVkSW5saW5lU3R5bGVzKTogQ2FsbCBfdXBkYXRlU3R5bGVDYXNjYWRlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuX3VwZGF0ZVN0eWxlQ2FzY2FkZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuX2NvbGxlY3RTdHlsZXNJbkNhc2NhZGVPcmRlcik6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuX21hcmtPdmVycmlkZGVuUHJvcGVydGllcyk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuX2Fzc29jaWF0ZVJlbGF0ZWRQcm9wZXJ0aWVzKTogQWRkZWQuCgoyMDEzLTAyLTExICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUGFyc2UgaW5oZXJpdGVkIHJ1bGVzLCBwc2V1ZG8gZWxlbWVudHMsIGlubGluZSBzdHlsZSBhbmQgYXR0cmlidXRlIHN0eWxlcy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcyMDYyNzImMTI1MjYzMTk+CgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGVTdHlsZXMuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzKTogQWRkZWQgbWFwcyBhbmQgcHJvcGVydGllcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLnJlZnJlc2guZmV0Y2hlZE1hdGNoZWRTdHlsZXMpOiBQYXJzZSBwc2V1ZG9FbGVtZW50UnVsZXNQYXlsb2FkCiAgICAgICAgYW5kIGluaGVyaXRlZFJ1bGVzUGF5bG9hZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLnJlZnJlc2guZmV0Y2hlZElubGluZVN0eWxlcyk6IFBhcnNlIGlubGluZVN0eWxlUGF5bG9hZCBhbmQKICAgICAgICBhdHRyaWJ1dGVzU3R5bGVQYXlsb2FkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuZ2V0IGluaGVyaXRlZFJ1bGVzKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5nZXQgaW5saW5lU3R5bGUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLmdldCBhdHRyaWJ1dGVzU3R5bGUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLmdldCBwc2V1ZG9FbGVtZW50cyk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuX3N0eWxlU2hlZXRDb250ZW50RGlkQ2hhbmdlKTogQ2hlY2sgaW5oZXJpdGVkLAogICAgICAgIGlubGluZSwgYXR0cmlidXRlcyBhbmQgcHNldWRvIGVsZW1lbnRzLgoKMjAxMy0wMi0xMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbiBhbmQgV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5IGFuZCBoYXZlIERPTU5vZGVTdHlsZXMgcGFyc2UgYW5kIGNyZWF0ZSB0aGVtLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzIwNjI3MiYxMjUyNjMxOT4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTUHJvcGVydHkuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90eXBlLmdldCBvd25lclN0eWxlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5zZXQgb3duZXJTdHlsZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUuZ2V0IGluZGV4KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS51cGRhdGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90eXBlLmdldCB0ZXh0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5nZXQgbmFtZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUuZ2V0IHZhbHVlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5nZXQgaW1wb3J0YW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5nZXQgcHJpb3JpdHkpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90eXBlLmdldCBlbmFibGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5nZXQgb3ZlcnJpZGRlbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUuZ2V0IGltcGxpY2l0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5nZXQgdmFsaWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90eXBlLmdldCBzdGFydFN0eWxlU2hlZXRUZXh0UG9zaXRpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90eXBlLmdldCBlbmRTdHlsZVNoZWV0VGV4dFBvc2l0aW9uKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5nZXQgcmVsYXRlZFNob3J0aGFuZFByb3BlcnR5KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5zZXQgcmVsYXRlZFNob3J0aGFuZFByb3BlcnR5KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5nZXQgcmVsYXRlZExvbmdoYW5kUHJvcGVydGllcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUuYWRkUmVsYXRlZExvbmdoYW5kUHJvcGVydHkpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90eXBlLmNsZWFyUmVsYXRlZExvbmdoYW5kUHJvcGVydGllcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUuaXNBY3RpdmUpOgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURlY2xhcmF0aW9uLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUuZ2V0IGlkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLmdldCBvd25lclN0eWxlU2hlZXQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUuZ2V0IHR5cGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUuZ2V0IGluaGVyaXRlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZS51cGRhdGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUuZ2V0IG93bmVyUnVsZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZS5zZXQgb3duZXJSdWxlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLmdldCB0ZXh0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLmdldCBwcm9wZXJ0aWVzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLmdldCBzdGFydFN0eWxlU2hlZXRUZXh0UG9zaXRpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUuZ2V0IGVuZFN0eWxlU2hlZXRUZXh0UG9zaXRpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUuZ2V0IG5vZGVTdHlsZXMpOgogICAgICAgICogVXNlckludGVyZmFjZS9ET01Ob2RlU3R5bGVzLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5fcGFyc2VTdHlsZVByb3BlcnR5UGF5bG9hZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5fcGFyc2VTdHlsZURlY2xhcmF0aW9uUGF5bG9hZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5fcGFyc2VSdWxlUGF5bG9hZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKCjIwMTMtMDItMTEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgV2ViSW5zcGVjdG9yLkNTU1J1bGUgYW5kIFdlYkluc3BlY3Rvci5DU1NNZWRpYSBhbmQgaGF2ZSBET01Ob2RlU3R5bGVzIHBhcnNlIGFuZCBjcmVhdGUgdGhlbS4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcyMDYyNzImMTI1MjYzMTk+CgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU01lZGlhLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU01lZGlhKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU01lZGlhLnByb3RvdHlwZS5nZXQgdHlwZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NNZWRpYS5wcm90b3R5cGUuZ2V0IHRleHQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTTWVkaWEucHJvdG90eXBlLmdldCBzb3VyY2VDb2RlTG9jYXRpb24pOgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NSdWxlLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1J1bGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUnVsZS5wcm90b3R5cGUuZ2V0IGlkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1J1bGUucHJvdG90eXBlLmdldCBvd25lclN0eWxlU2hlZXQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUnVsZS5wcm90b3R5cGUudXBkYXRlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1J1bGUucHJvdG90eXBlLmdldCB0eXBlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1J1bGUucHJvdG90eXBlLmdldCBzb3VyY2VDb2RlTG9jYXRpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUnVsZS5wcm90b3R5cGUuZ2V0IHNlbGVjdG9yVGV4dCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NSdWxlLnByb3RvdHlwZS5nZXQgc2VsZWN0b3JzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1J1bGUucHJvdG90eXBlLmdldCBtYXRjaGVkU2VsZWN0b3JJbmRpY2VzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1J1bGUucHJvdG90eXBlLmdldCBzdHlsZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NSdWxlLnByb3RvdHlwZS5nZXQgbWVkaWFMaXN0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1J1bGUucHJvdG90eXBlLmdldCBub2RlU3R5bGVzKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NTm9kZVN0eWxlcy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUucmVmcmVzaC5wYXJzZVJ1bGVNYXRjaEFycmF5UGF5bG9hZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5yZWZyZXNoLmZldGNoZWRNYXRjaGVkU3R5bGVzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLnJlZnJlc2gpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuZ2V0IG1hdGNoZWRSdWxlcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5faWRlbnRpZmllclRvU3RyaW5nKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLl9jcmVhdGVTb3VyY2VDb2RlTG9jYXRpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuX3BhcnNlUnVsZVBheWxvYWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuX3N0eWxlU2hlZXRDb250ZW50RGlkQ2hhbmdlLm1hcmtBc05lZWRzUmVmcmVzaCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5fc3R5bGVTaGVldENvbnRlbnREaWRDaGFuZ2UuY2hlY2tSdWxlcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5fc3R5bGVTaGVldENvbnRlbnREaWRDaGFuZ2UpOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CgoyMDEzLTAyLTExICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLCBhIG5ldyBjbGFzcyB0byBpbnNwZWN0IGFuZCBtYW5hZ2Ugc3R5bGVzIGZvciBhIG5vZGUuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MjA2MjcyJjEyNTI2MzE5PgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIpOiBBZGRlZCBfbm9kZVN0eWxlc01hcC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5cGUuc3R5bGVzRm9yTm9kZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3RvdHlwZS5fbWFpblJlc291cmNlRGlkQ2hhbmdlKTogQ2xlYXIgX25vZGVTdHlsZXNNYXAuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGVTdHlsZXMuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5nZXQgbm9kZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5yZWZyZXNoSWZOZWVkZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUucmVmcmVzaC5mZXRjaGVkTWF0Y2hlZFN0eWxlcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5yZWZyZXNoLmZldGNoZWRJbmxpbmVTdHlsZXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUucmVmcmVzaCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogQWRkZWQgRE9NTm9kZVN0eWxlcy5qcy4KCjIwMTMtMDItMTEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgV2ViSW5zcGVjdG9yLkNTU1N0eWxlU2hlZXQgYW5kIHN0YXJ0IHVzaW5nIGl0LgoKICAgICAgICBUaGlzIHJlcGxhY2VzIGEgY29sbGVjdGlvbiBvZiBtYXBzIGFuZCBjb250ZW50IHVwZGF0aW5nIGZ1bmN0aW9ucyBpbiBDU1NTdHlsZU1hbmFnZXIKICAgICAgICB3aXRoIGEgcHJvcGVyIFNvdXJjZUNvZGUgc3ViY2xhc3MgdGhhdCBtYW5hZ2VzIGl0cyBpbmZvLCBjb250ZW50IGFuZCB3b3JrcyB3aXRoIGJyYW5jaGVzLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzIwNjI3MiYxMjUyNjMxOT4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQm94TW9kZWxEZXRhaWxzU2VjdGlvblJvdy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkJveE1vZGVsRGV0YWlsc1NlY3Rpb25Sb3cpOiBMaXN0ZW4gZm9yIHRoZSBjaGFuZ2UgZXZlbnQgb24gQ1NTU3R5bGVTaGVldC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsKTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlcik6IEFkZGVkIGV2ZW50IGxpc3RlbmVycyBmb3IgcmVzb3VyY2VzLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3RvdHlwZS5zdHlsZVNoZWV0Rm9ySWRlbnRpZmllcik6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3RvdHlwZS5zdHlsZVNoZWV0Q2hhbmdlZCk6IENhbGwgbm90ZUNvbnRlbnREaWRDaGFuZ2UgYW5kCiAgICAgICAgX3VwZGF0ZVJlc291cmNlQ29udGVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5cGUuX21haW5SZXNvdXJjZURpZENoYW5nZSk6IEFkZGVkLiBDbGVhciB0aGUgbWFwcyB3aGVuIHRoZQogICAgICAgIG1haW4gZnJhbWUgbmF2aWdhdGVzLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3RvdHlwZS5fcmVzb3VyY2VBZGRlZCk6IEFkZGVkLiBDYWxsIF9jbGVhclN0eWxlU2hlZXRzRm9yUmVzb3VyY2UuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlLl9yZXNvdXJjZVR5cGVEaWRDaGFuZ2UpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5cGUuX2NsZWFyU3R5bGVTaGVldHNGb3JSZXNvdXJjZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3RvdHlwZS5fZnJhbWVVUkxNYXBLZXkpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5cGUuX2xvb2t1cFN0eWxlU2hlZXRGb3JSZXNvdXJjZS5zeWxlU2hlZXRzRmV0Y2hlZCk6IFVzZQogICAgICAgIF9zdHlsZVNoZWV0RnJhbWVVUkxNYXAgaW5zdGVhZCBvZiBfc3R5bGVTaGVldEluZm9NYXAuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlLl9zZXRDb250ZW50Rm9yU3R5bGVTaGVldElkZW50aWZpZXIpOiBSZW1vdmVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3RvdHlwZS5fbG9va3VwU3R5bGVTaGVldCk6IFVwZGF0ZWQgZnVuY3Rpb24gbmFtZXMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlLl9mZXRjaEluZm9Gb3JBbGxTdHlsZVNoZWV0cyk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3RvdHlwZS5fcmVzb3VyY2VDb250ZW50RGlkQ2hhbmdlLmFwcGx5U3R5bGVTaGVldENoYW5nZXMuc3R5bGVTaGVldEZvdW5kKToKICAgICAgICBVc2UgU291cmNlQ29kZVJldmlzaW9uIHRvIHVwZGF0ZSB0aGUgc3R5bGVzaGVldCBjb250ZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3RvdHlwZS5fdXBkYXRlUmVzb3VyY2VDb250ZW50KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlLl91cGRhdGVSZXNvdXJjZUNvbnRlbnQuZmV0Y2hlZFN0eWxlU2hlZXRDb250ZW50KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlLl91cGRhdGVSZXNvdXJjZUNvbnRlbnQuc3R5bGVTaGVldFJlYWR5KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlLl91cGRhdGVSZXNvdXJjZUNvbnRlbnQuYXBwbHlTdHlsZVNoZWV0Q2hhbmdlcyk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZVNoZWV0LmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlU2hlZXQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVTaGVldC5yZXNldFVuaXF1ZURpc3BsYXlOYW1lTnVtYmVycyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZVNoZWV0LnByb3RvdHlwZS5nZXQgaWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUuZ2V0IHBhcmVudEZyYW1lKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlU2hlZXQucHJvdG90eXBlLmdldCB1cmwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUuZ2V0IHVybENvbXBvbmVudHMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUuZ2V0IGRpc3BsYXlOYW1lKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlU2hlZXQucHJvdG90eXBlLnVwZGF0ZUluZm8pOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUuZ2V0IHJldmlzaW9uRm9yUmVxdWVzdGVkQ29udGVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZVNoZWV0LnByb3RvdHlwZS5oYW5kbGVDdXJyZW50UmV2aXNpb25Db250ZW50Q2hhbmdlLmNvbnRlbnREaWRDaGFuZ2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUuaGFuZGxlQ3VycmVudFJldmlzaW9uQ29udGVudENoYW5nZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZVNoZWV0LnByb3RvdHlwZS5jYW5SZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlU2hlZXQucHJvdG90eXBlLnJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUubm90ZUNvbnRlbnREaWRDaGFuZ2UpOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEFkZGVkIENTU1N0eWxlU2hlZXQuanMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZS5yZXZpc2lvbkNvbnRlbnREaWRDaGFuZ2UpOiBDYWxsIGhhbmRsZUN1cnJlbnRSZXZpc2lvbkNvbnRlbnRDaGFuZ2UuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZS5oYW5kbGVDdXJyZW50UmV2aXNpb25Db250ZW50Q2hhbmdlKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZS5nZXQgcmV2aXNpb25Gb3JSZXF1ZXN0ZWRDb250ZW50KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZS5tYXJrQ29udGVudEFzU3RhbGUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUucHJvdG90eXBlLl9wcm9jZXNzQ29udGVudCk6IFVzZSByZXZpc2lvbkZvclJlcXVlc3RlZENvbnRlbnQuCgoyMDEzLTAyLTExICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUmVtb3ZlIG5vdGVTdHlsZVNoZWV0Q2hhbmdlZCBhbmQgdXNlIHRoZSBzdHlsZVNoZWV0Q2hhbmdlZCBiYWNrZW5kIGV2ZW50LgoKICAgICAgICBUaGUgYmFja2VuZCBhbHJlYWR5IHRlbGxzIHVzIHdoZW4gYSBzdHlsZXNoZWV0IGNoYW5nZXMsIHNvIHdlIHNob3VsZCB1c2UgaXQKICAgICAgICBpbnN0ZWFkIG9mIHRyeWluZyB0byBmaXJlIHRoZSBldmVudCB3aGVuIHdlIHRoaW5rIGl0IHNob3VsZC4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcyMDYyNzImMTI1MjYzMTk+CgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU09ic2VydmVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTT2JzZXJ2ZXIucHJvdG90eXBlLnN0eWxlU2hlZXRDaGFuZ2VkKTogQ2FsbCBDU1NTdHlsZU1hbmFnZXIuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5cGUubWVkaWFRdWVyeVJlc3VsdENoYW5nZWQpOiBNb3ZlZCB0byB0aGUgdG9wLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3RvdHlwZS5zdHlsZVNoZWV0Q2hhbmdlZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3RvdHlwZS5ub3RlU3R5bGVTaGVldENoYW5nZWQpOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9PbGRDU1NQcm9wZXJ0eS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLk9sZENTU1Byb3BlcnR5LnByb3RvdHlwZS5jYWxsYmFjayk6IFJlbW92ZWQgY2FsbCB0byBub3RlU3R5bGVTaGVldENoYW5nZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5PbGRDU1NQcm9wZXJ0eS5wcm90b3R5cGUuc2V0VGV4dCk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuT2xkQ1NTUHJvcGVydHkucHJvdG90eXBlLnNldERpc2FibGVkKTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL09sZENTU1N0eWxlRGVjbGFyYXRpb24uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5PbGRDU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZS5pbnNlcnRQcm9wZXJ0eUF0KTogUmVtb3ZlZCBjYWxsIHRvIG5vdGVTdHlsZVNoZWV0Q2hhbmdlZC4KCjIwMTMtMDItMTEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBDcmVhdGUgbWFwcGluZ3MgYmV0d2VlbiBzaG9ydGhhbmQgYW5kIGxvbmdoYW5kIHByb3BlcnR5IG5hbWVzLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzIwNjI3MiYxMjUyNjMxOT4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTQ29tcGxldGlvbnMuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucyk6IENyZWF0ZSB0aGUgbWFwcGluZ3MuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5wcm90b3R5cGUubG9uZ2hhbmRzRm9yU2hvcnRoYW5kKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5wcm90b3R5cGUuc2hvcnRoYW5kc0ZvckxvbmdoYW5kKTogQWRkZWQuCgoyMDEzLTAyLTExICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUmVuYW1lIGN1cnJlbnQgQ1NTIG1vZGVsIGNsYXNzZXMgdG8gaGF2ZSAiT2xkIiBwcmVmaXhlcy4KCiAgICAgICAgVGhpcyBpcyBpbiBwcmVwYXJhdGlvbiBmb3IgYSBuZXcgYW5kIGltcHJvdmVkIENTUyBtb2RlbCBjbGFzc2VzLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzIwNjI3MiYxMjUyNjMxOT4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnBhcnNlUnVsZUFycmF5UGF5bG9hZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlLik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlLmdldE1hdGNoZWRTdHlsZXNBc3luYyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlLmdldENvbXB1dGVkU3R5bGVBc3luYyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlLmdldElubGluZVN0eWxlc0FzeW5jKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgogICAgICAgICogVXNlckludGVyZmFjZS9PbGRDU1NNZWRpYS5qczogUmVuYW1lZCBmcm9tIFdlYkluc3BlY3Rvci9Vc2VySW50ZXJmYWNlL0NTU01lZGlhLmpzLgogICAgICAgICogVXNlckludGVyZmFjZS9PbGRDU1NQcm9wZXJ0eS5qczogUmVuYW1lZCBmcm9tIFdlYkluc3BlY3Rvci9Vc2VySW50ZXJmYWNlL0NTU1Byb3BlcnR5LmpzLgogICAgICAgICogVXNlckludGVyZmFjZS9PbGRDU1NSdWxlLmpzOiBSZW5hbWVkIGZyb20gV2ViSW5zcGVjdG9yL1VzZXJJbnRlcmZhY2UvQ1NTUnVsZS5qcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvT2xkQ1NTU3R5bGVEZWNsYXJhdGlvbi5qczogUmVuYW1lZCBmcm9tIFdlYkluc3BlY3Rvci9Vc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb24uanMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N0eWxlUHJvcGVydGllc1NlY3Rpb24uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlLm9ucG9wdWxhdGUpOgoKMjAxMy0wMi0xMiAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTEwNTMzMDA+IFByb2ZpbGUgcmVjb3JkaW5nIGJ1dHRvbiBmYWxzZWx5IGluZGljYXRlcyAicmVjb3JkaW5nIiBpZiBzdGFydGVkIGFuZCB0aGVuIHBhZ2UgbmF2aWdhdGVzIG9yIHJlZnJlc2hlcwoKICAgICAgICBXZSBub3cgY29ycmVjdGx5IGtlZXAgdGhlIHJlY29yZGluZyBzdGF0ZSBhY3Jvc3MgYSBwYWdlIHJlbG9hZCwKICAgICAgICBvbmx5IHJlc2V0dGluZyBpdCwgYXMgd2VsbCBhcyByZW1vdmluZyBhbnkgcHJldmlvdXMgcHJvZmlsZSwgd2hlbgogICAgICAgIHdlIG5hdmlnYXRlIGF3YXkgZnJvbSB0aGUgY3VycmVudCBwYWdlLgoKICAgICAgICBUbyBkbyBzbywgd2UgYWxlcnQgdGhlIHNpZGViYXIgcGFuZWwgd2hlbiBhIHByb2ZpbGUgaXMgaW50ZXJydXB0ZWQKICAgICAgICBzdWNoIHRoYXQgYW55IG9sZCB0cmVlIGl0ZW0gZm9yIHRoaXMgcHJvZmlsZSBpcyBwcnVuZWQgYW5kIHRoZQogICAgICAgIHN0YXRlIG9mIHRoZSBwcm9maWxlIHJlY29yZGluZyBidXR0b24gaXMgdXBkYXRlZCB0byBtYXRjaCB0aGF0IG9mCiAgICAgICAgdGhlIHByb2ZpbGVyLiBBZGRpdGlvbmFsbHksIHdoZW4gdGhlIG1haW4gZnJhbWUgaXMgcmVmcmVzaGVkLCB3ZQogICAgICAgIGF0dGVtcHQgdG8gcmVzdW1lIHByb2ZpbGluZyBieSBsb29raW5nIGZvciBleGlzdGluZywgdGhvdWdoIHN0YWxlLAogICAgICAgIHByb2ZpbGUgb2JqZWN0cywgYW5kIGNyZWF0aW5nIGEgbmV3IG9uZSBhcyBuZWVkZWQuIEluIGNhc2VzIHdoZXJlCiAgICAgICAgd2UgbmF2aWdhdGUgdG8gYSBuZXcgZnJhbWUsIHRoZSAiQ2xlYXJlZCIgZXZlbnQgaXMgZGlzcGF0Y2hlZCBhbmQKICAgICAgICB0aGUgc2lkZWJhciBwYW5lbCBlbXB0aWVzIGl0c2VsZi4KCiAgICAgICAgRmluYWxseSwgd2UgZW5zdXJlIHRoYXQgdGhlIG51bWJlciBzZXQgZm9yIHRoZSBwcm9maWxlJ3MgdGl0bGUKICAgICAgICByZWZsZWN0cyB0aGUgY3VycmVudCBsaXN0IG9mIHByb2ZpbGVzIG9mIHRoaXMgdHlwZSBhbmQgdGhhdCBhbnkKICAgICAgICBzZWxlY3RlZCBDU1MgcHJvZmlsZSdzIGNvbnRlbnQgdmlldyBpcyBoaWRkZW4gaWYgdGhlIHByb2ZpbGUgbGlzdAogICAgICAgIGlzIGNsZWFyZWQuCgogICAgICAgIE5vdGUgdGhhdCBwcm9maWxlcyB0aGF0IHdlcmUgcmVjb3JkZWQgcHJpb3IgdG8gdGhlIGN1cnJlbnQgbG9hZAogICAgICAgIHdpbGwgc2hvdyBhbiBlbXB0eSBjb250ZW50IHZpZXcgdW5sZXNzIHRoZXkgaGFkIGFsc28gYmVlbiBzZWxlY3RlZAogICAgICAgIHByaW9yIHRvIGEgc3Vic2VxdWVudCBsb2FkLiBUaGlzIGlzIGEga25vd24gaXNzdWUgYW5kIHdpbGwgYmUgZml4ZWQKICAgICAgICB3aXRoIGEgZm9sbG93dXAgdGFzay4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkluc3RydW1lbnRTaWRlYmFyUGFuZWwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3Byb2ZpbGluZ0ludGVycnVwdGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkluc3RydW1lbnRTaWRlYmFyUGFuZWwucHJvdG90eXBlLl90aXRsZUZvclByb2ZpbGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3Byb2ZpbGVzQ2xlYXJlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Byb2ZpbGVNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZU1hbmFnZXIucHJvdG90eXBlLmluaXRpYWxpemUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZU1hbmFnZXIucHJvdG90eXBlLnNldFJlY29yZGluZ0phdmFTY3JpcHRQcm9maWxlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVNYW5hZ2VyLnByb3RvdHlwZS5fbWFpblJlc291cmNlRGlkQ2hhbmdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVNYW5hZ2VyLnByb3RvdHlwZS5fY2hlY2tGb3JJbnRlcnJ1cHRpb25zKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVNYW5hZ2VyLnByb3RvdHlwZS5fYXR0ZW1wdFRvUmVzdW1lUHJvZmlsaW5nKToKCjIwMTMtMDItMTIgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMTcxOTM0PiBDb250cm9sK2NsaWNrIG9uIHRvb2xiYXIgZG9lc24ndCBicmluZyB1cCB0b29sYmFyIGNvbnRleHQgbWVudSBpdGVtcwoKICAgICAgICBEb24ndCBkbyBhbnkgY3VzdG9tIGhhbmRsaW5nIG9mIG1vdXNlZG93biBldmVudHMgb24gdGhlIHRvb2xiYXIgaWYKICAgICAgICB0aGUgY29udHJvbCBrZXkgd2FzIHByZXNzZWQuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5fdG9vbGJhck1vdXNlRG93bik6CgoyMDEzLTAyLTExICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDg1NDcxMj4gUkVHUkVTU0lPTiAoU2FmYXJpIDYpOiBJdCdzIGhhcmQgdG8gc2VlIGF0IGEgZ2xhbmNlIGlmIGEgcGFnZSBoYXMgYW55IEpTL0hUTUwgZXJyb3JzL3dhcm5pbmdzCgogICAgICAgIFdlIGFkZCBhIG5ldyBEYXNoYm9hcmRNYW5hZ2VyIHNpbmdsZXRvbiB3aGljaCB0YXBzIGludG8gZXZlbnRzIGV4cG9zZWQKICAgICAgICBieSBvdGhlciBtYW5hZ2VycyBhbmQgY2xhc3NlcyBpbiBvcmRlciB0byBtb25pdG9yIHJlc291cmNlcywgdGltZWxpbmUKICAgICAgICByZWNvcmRzIGFuZCBjb25zb2xlIG1lc3NhZ2VzIGFuZCBkaXNwbGF5IHRoZSByZXNwZWN0aXZlIGNvdW50cyBpbiBhCiAgICAgICAgRGFzaGJvYXJkVmlldy4gVGhlIERhc2hib2FyZFZpZXcga25vd3MgaG93IHRvIGxheSBpdHNlbGYgb3V0IGluIHRoZQogICAgICAgIHZhcmlvdXMgdG9vbGJhciBtb2RlcyBhbmQgbGV0cyB0aGUgdXNlciBqdW1wIHRvIHZhcmlvdXMgcGFydHMgb2YgdGhlCiAgICAgICAgaW5zcGVjdG9yIHVwb24gY2xpY2tpbmcgaXRzIG91dGxldHMsIHdoaWxlIHByb3ZpZGluZyB1c2VmdWwgaW5mb3JtYXRpb24KICAgICAgICBhcyB0aGUgdXNlciBob3ZlcnMgb3ZlciB0aGUgaXRlbSB3aXRoIHRoZSBtb3VzZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyIGFuZCBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9EYXNoYm9hcmRNYW5hZ2VyLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRhc2hib2FyZE1hbmFnZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGFzaGJvYXJkTWFuYWdlci5wcm90b3R5cGUuX3Jlc291cmNlV2FzQWRkZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGFzaGJvYXJkTWFuYWdlci5wcm90b3R5cGUuX3Jlc291cmNlc1dlcmVDbGVhcmVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhc2hib2FyZE1hbmFnZXIucHJvdG90eXBlLl9mcmFtZVdhc0FkZGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhc2hib2FyZE1hbmFnZXIucHJvdG90eXBlLl9yZXNvdXJjZVNpemVEaWRDaGFuZ2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGFzaGJvYXJkTWFuYWdlci5wcm90b3R5cGUuX3RpbWVsaW5lUmVjb3JkaW5nU3RhcnRlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXNoYm9hcmRNYW5hZ2VyLnByb3RvdHlwZS5fdXBkYXRlVGltZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXNoYm9hcmRNYW5hZ2VyLnByb3RvdHlwZS5fY29uc29sZU1lc3NhZ2VBZGRlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXNoYm9hcmRNYW5hZ2VyLnByb3RvdHlwZS5fY29uc29sZU1lc3NhZ2VXYXNSZXBlYXRlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXNoYm9hcmRNYW5hZ2VyLnByb3RvdHlwZS5faW5jcmVtZW50Q29uc29sZU1lc3NhZ2VUeXBlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhc2hib2FyZE1hbmFnZXIucHJvdG90eXBlLl9jb25zb2xlV2FzQ2xlYXJlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Rhc2hib2FyZFZpZXcuY3NzOiBBZGRlZC4KICAgICAgICAoLmRhc2hib2FyZCk6CiAgICAgICAgKC5kYXNoYm9hcmQgPiAuaXRlbSk6CiAgICAgICAgKC5kYXNoYm9hcmQgPiAuaXRlbSA+ICopOgogICAgICAgICguZGFzaGJvYXJkID4gLml0ZW0gPiBpbWcpOgogICAgICAgICguZGFzaGJvYXJkID4gLml0ZW0uZW5hYmxlZCA+IGltZyk6CiAgICAgICAgKC5kYXNoYm9hcmQgPiAuaXRlbS5lbmFibGVkOmhvdmVyID4gaW1nKToKICAgICAgICAoLmRhc2hib2FyZCA+IC5pdGVtID4gZGl2KToKICAgICAgICAoLmRhc2hib2FyZCA+IC5pdGVtLmlzc3VlcyA+IGRpdiA+IGRpdik6CiAgICAgICAgKC5kYXNoYm9hcmQgPiAuaXRlbS5lbmFibGVkID4gZGl2KToKICAgICAgICAoLmRhc2hib2FyZCA+IC5pdGVtLmVuYWJsZWQ6aG92ZXIgPiBkaXYpOgogICAgICAgICguZGFzaGJvYXJkID4gLnJlc291cmNlcyA+IGltZyk6CiAgICAgICAgKC5kYXNoYm9hcmQgPiAudGltZSA+IGltZyk6CiAgICAgICAgKC5kYXNoYm9hcmQgPiAubG9ncyA+IGltZyk6CiAgICAgICAgKC5kYXNoYm9hcmQgPiAubWVtb3J5ID4gaW1nKToKICAgICAgICAoLmRhc2hib2FyZCA+IC5lcnJvcnMgPiBpbWcpOgogICAgICAgICguZGFzaGJvYXJkID4gLmVycm9ycy5lbmFibGVkID4gaW1nKToKICAgICAgICAoLmRhc2hib2FyZCA+IC5lcnJvcnMuZW5hYmxlZDpob3ZlciA+IGltZyk6CiAgICAgICAgKC5kYXNoYm9hcmQgPiAuZXJyb3JzLmVuYWJsZWQgPiBkaXYpOgogICAgICAgICguZGFzaGJvYXJkID4gLmVycm9ycy5lbmFibGVkOmhvdmVyID4gZGl2KToKICAgICAgICAoLmRhc2hib2FyZCA+IC5pc3N1ZXMgPiBpbWcpOgogICAgICAgICguZGFzaGJvYXJkID4gLmlzc3Vlcy5lbmFibGVkID4gaW1nKToKICAgICAgICAoLmRhc2hib2FyZCA+IC5pc3N1ZXMuZW5hYmxlZDpob3ZlciA+IGltZyk6CiAgICAgICAgKC5kYXNoYm9hcmQgPiAuaXNzdWVzLmVuYWJsZWQgPiBkaXYpOgogICAgICAgICguZGFzaGJvYXJkID4gLmlzc3Vlcy5lbmFibGVkOmhvdmVyID4gZGl2KToKICAgICAgICAoLnRvb2xiYXIubm9ybWFsLXNpemUuaWNvbi1hbmQtbGFiZWwtaG9yaXpvbnRhbCA+IC5pdGVtLXNlY3Rpb24gPiAuZGFzaGJvYXJkKToKICAgICAgICAoLnRvb2xiYXIuc21hbGwtc2l6ZS5pY29uLWFuZC1sYWJlbC12ZXJ0aWNhbCA+IC5pdGVtLXNlY3Rpb24gPiAuZGFzaGJvYXJkKToKICAgICAgICAoLnRvb2xiYXIuc21hbGwtc2l6ZS5pY29uLWFuZC1sYWJlbC12ZXJ0aWNhbCA+IC5pdGVtLXNlY3Rpb24gPiAuZGFzaGJvYXJkID4gLml0ZW0pOgogICAgICAgICgudG9vbGJhci5zbWFsbC1zaXplLmljb24tYW5kLWxhYmVsLXZlcnRpY2FsID4gLml0ZW0tc2VjdGlvbiA+IC5kYXNoYm9hcmQgPiAucmVzb3VyY2VzKToKICAgICAgICAoLnRvb2xiYXIuc21hbGwtc2l6ZS5pY29uLWFuZC1sYWJlbC12ZXJ0aWNhbCA+IC5pdGVtLXNlY3Rpb24gPiAuZGFzaGJvYXJkID4gLnRpbWUpOgogICAgICAgICgudG9vbGJhci5zbWFsbC1zaXplLmljb24tYW5kLWxhYmVsLXZlcnRpY2FsID4gLml0ZW0tc2VjdGlvbiA+IC5kYXNoYm9hcmQgPiAubG9ncyk6CiAgICAgICAgKC50b29sYmFyLnNtYWxsLXNpemUuaWNvbi1hbmQtbGFiZWwtdmVydGljYWwgPiAuaXRlbS1zZWN0aW9uID4gLmRhc2hib2FyZCA+IC5tZW1vcnkpOgogICAgICAgICgudG9vbGJhci5zbWFsbC1zaXplLmljb24tYW5kLWxhYmVsLXZlcnRpY2FsID4gLml0ZW0tc2VjdGlvbiA+IC5kYXNoYm9hcmQgPiAuZXJyb3JzKToKICAgICAgICAoLnRvb2xiYXIuc21hbGwtc2l6ZS5pY29uLWFuZC1sYWJlbC12ZXJ0aWNhbCA+IC5pdGVtLXNlY3Rpb24gPiAuZGFzaGJvYXJkID4gLmlzc3Vlcyk6CiAgICAgICAgKC50b29sYmFyLm5vcm1hbC1zaXplLmljb24tYW5kLWxhYmVsLXZlcnRpY2FsID4gLml0ZW0tc2VjdGlvbiA+IC5kYXNoYm9hcmQpOgogICAgICAgICgudG9vbGJhci5ub3JtYWwtc2l6ZS5pY29uLWFuZC1sYWJlbC12ZXJ0aWNhbCA+IC5pdGVtLXNlY3Rpb24gPiAuZGFzaGJvYXJkID4gLml0ZW0pOgogICAgICAgICgudG9vbGJhci5ub3JtYWwtc2l6ZS5pY29uLWFuZC1sYWJlbC12ZXJ0aWNhbCA+IC5pdGVtLXNlY3Rpb24gPiAuZGFzaGJvYXJkID4gLnJlc291cmNlcyk6CiAgICAgICAgKC50b29sYmFyLm5vcm1hbC1zaXplLmljb24tYW5kLWxhYmVsLXZlcnRpY2FsID4gLml0ZW0tc2VjdGlvbiA+IC5kYXNoYm9hcmQgPiAudGltZSk6CiAgICAgICAgKC50b29sYmFyLm5vcm1hbC1zaXplLmljb24tYW5kLWxhYmVsLXZlcnRpY2FsID4gLml0ZW0tc2VjdGlvbiA+IC5kYXNoYm9hcmQgPiAubG9ncyk6CiAgICAgICAgKC50b29sYmFyLm5vcm1hbC1zaXplLmljb24tYW5kLWxhYmVsLXZlcnRpY2FsID4gLml0ZW0tc2VjdGlvbiA+IC5kYXNoYm9hcmQgPiAubWVtb3J5KToKICAgICAgICAoLnRvb2xiYXIubm9ybWFsLXNpemUuaWNvbi1hbmQtbGFiZWwtdmVydGljYWwgPiAuaXRlbS1zZWN0aW9uID4gLmRhc2hib2FyZCA+IC5lcnJvcnMpOgogICAgICAgICgudG9vbGJhci5ub3JtYWwtc2l6ZS5pY29uLWFuZC1sYWJlbC12ZXJ0aWNhbCA+IC5pdGVtLXNlY3Rpb24gPiAuZGFzaGJvYXJkID4gLmlzc3Vlcyk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Rhc2hib2FyZFZpZXcuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGFzaGJvYXJkVmlldyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXNoYm9hcmRWaWV3LnByb3RvdHlwZS5nZXQgbG9ncyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXNoYm9hcmRWaWV3LnByb3RvdHlwZS5zZXQgbG9ncyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXNoYm9hcmRWaWV3LnByb3RvdHlwZS5nZXQgaXNzdWVzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhc2hib2FyZFZpZXcucHJvdG90eXBlLnNldCBpc3N1ZXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGFzaGJvYXJkVmlldy5wcm90b3R5cGUuZ2V0IGVycm9ycyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXNoYm9hcmRWaWV3LnByb3RvdHlwZS5zZXQgZXJyb3JzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhc2hib2FyZFZpZXcucHJvdG90eXBlLnNldCBtZW1vcnkpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGFzaGJvYXJkVmlldy5wcm90b3R5cGUuc2V0IHRpbWUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGFzaGJvYXJkVmlldy5wcm90b3R5cGUuZ2V0IHJlc291cmNlc0NvdW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhc2hib2FyZFZpZXcucHJvdG90eXBlLnNldCByZXNvdXJjZXNDb3VudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXNoYm9hcmRWaWV3LnByb3RvdHlwZS5nZXQgcmVzb3VyY2VzU2l6ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXNoYm9hcmRWaWV3LnByb3RvdHlwZS5zZXQgcmVzb3VyY2VzU2l6ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXNoYm9hcmRWaWV3LnByb3RvdHlwZS5fYXBwZW5kRWxlbWVudEZvck5hbWVkSXRlbSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXNoYm9hcmRWaWV3LnByb3RvdHlwZS5faXRlbVdhc0NsaWNrZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGFzaGJvYXJkVmlldy5wcm90b3R5cGUuX3Jlc291cmNlc1dhc0NsaWNrZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGFzaGJvYXJkVmlldy5wcm90b3R5cGUuX3RpbWVXYXNDbGlja2VkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhc2hib2FyZFZpZXcucHJvdG90eXBlLl9jb25zb2xlSXRlbVdhc0NsaWNrZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGFzaGJvYXJkVmlldy5wcm90b3R5cGUuX3VwZGF0ZVJlc291cmNlc091dGxldCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXNoYm9hcmRWaWV3LnByb3RvdHlwZS5fc2V0SXRlbUVuYWJsZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRXJyb3JzLnN2ZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9FcnJvcnNFbmFibGVkLnN2ZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Jc3N1ZXMuc3ZnOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0lzc3Vlc0VuYWJsZWQuc3ZnOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0xvZ3Muc3ZnOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL01lbW9yeS5zdmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvUmVzb3VyY2VzLnN2ZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9UaW1lLnN2ZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5pbmNyZWFzZVNpemUpOgoKMjAxMy0wMi0wOCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMxODQyODg+IFJFR1JFU1NJT046IFVuZG8gLyBSZWRvIG5vIGxvbmdlciB3b3JrcyBpbiBRdWlja0NvbnNvbGUKCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvS2V5Ym9hcmRTaG9ydGN1dC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5faGFuZGxlS2V5RG93bik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LnByb3RvdHlwZS5nZXQgaW1wbGljaXRseVByZXZlbnRzRGVmYXVsdCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LnByb3RvdHlwZS5zZXQgaW1wbGljaXRseVByZXZlbnRzRGVmYXVsdCk6CiAgICAgICAgQnkgZGVmYXVsdCBrZXlib2FyZCBzaG9ydGN1dHMgcHJldmVudCBkZWZhdWx0LiBBbGxvdyB0aGUgS2V5Ym9hcmRTaG9ydGN1dAogICAgICAgIHRvIG9wdCBvdXQgb2YgaW1wbGljaXRseSBwcmV2ZW50aW5nIGRlZmF1bHQuIFRoYXQgd2F5IGEga2V5Ym9hcmQgc2hvcnRjdXQKICAgICAgICBjYW4gYmUgYWRkZWQgdGhhdCBkb2VzIG5vdCBwcmV2ZW50IGRlZmF1bHQuCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6CiAgICAgICAgVGhlIHVuZG8gYW5kIHJlZG8ga2V5Ym9hcmQgc2hvcnRjdXRzIHdpbGwgbm90IGltcGxpY2l0bHkgcHJldmVudCBkZWZhdWx0LgoKICAgICAgICAoV2ViSW5zcGVjdG9yLl91bmRvS2V5Ym9hcmRTaG9ydGN1dCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5fcmVkb0tleWJvYXJkU2hvcnRjdXQpOgogICAgICAgIERvIG5vdCB0cmlnZ2VyIFdlYkluc3BlY3Rvci51bmRvIG9yIHJlZG8gaWYgdGhlIGtleSBldmVudCB0cmlnZ2VyZWQKICAgICAgICB3aGlsZSBpbiBhIHRleHQgZmllbGQuIEluc3RlYWQgbGV0IHRoZSBldmVudCBidWJibGUgdG8gZ2V0IGRlZmF1bHQKICAgICAgICB0ZXh0IGVkaXRpbmcgYmVoYXZpb3IuCgoyMDEzLTAyLTA4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgT25seSByZWNvcmQgdGhlIGxvYWQgZXZlbnQgdGltZSBmb3IgdGhlIG1haW4gZnJhbWUuCgogICAgICAgIFJldmlld2VkIGJ5IEFudG9pbmUgUXVpbnQuCgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlLmV2ZW50UmVjb3JkZWQucHJvY2Vzc1JlY29yZCk6IENoZWNrIHRoZSBmcmFtZUlkIGFnYWluc3QgdGhlCiAgICAgICAgbWFpbkZyYW1lJ3MgaWQgYmVmb3JlIHNldHRpbmcgX2xvYWRFdmVudFRpbWUuCgoyMDEzLTAyLTA3ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSBDU1MgYXV0b2NvbXBsZXRpb24gd29yayBhZ2FpbiB3aGVuIGVkaXRpbmcgYSBwcm9wZXJ0eS4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMDU4NTczPiBSRUdSRVNTSU9OOiBDU1MgYXV0b2NvbXBsZXRpb24gYnJva2VuIGFmdGVyIE9wZW5Tb3VyY2UgcjEyMzYxMgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NDb21wbGV0aW9ucy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU0NvbXBsZXRpb25zKTogU3VwcG9ydCB0aGUgY2hhbmdlIGluIGZvcm1hdCBvZiB2YWx1ZXMuCgoyMDEzLTAyLTA3ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzE2MjE0Mj4gQ29udGV4dHVhbCBtZW51IGl0ZW1zIG9uIHRoZSB0b29sYmFyIGFyZSBtaXNzaW5nCgogICAgICAgIFBhc3MgdGhlIGV2ZW50IHdoZW4gY3JlYXRpbmcgYSBDb250ZXh0TWVudSBvYmplY3QgaW5zdGVhZCBvbiBjYWxsaW5nIHNob3coKS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX2hhbmRsZUNvbnRleHRNZW51RXZlbnQpOgogICAgICAgICogVXNlckludGVyZmFjZS9Ub29sYmFyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVG9vbGJhci5wcm90b3R5cGUuX2hhbmRsZUNvbnRleHRNZW51RXZlbnQpOgoKMjAxMy0wMi0wNyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBNZXJnZSBPcGVuU291cmNlIHIxMTYzMDUgdG8gZml4IFRleHRQcm9tcHQgZXZlbnQgbGlzdGVuZXIgYW5kIHN0eWxlIGxlYWtzLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0UHJvbXB0LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuX2F0dGFjaEludGVybmFsKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlLmRldGFjaCk6CgoyMDEzLTAyLTA1ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTAwNzQ0NT4gUEFSSVRZIChXZWJLaXQgV2ViIEluc3BlY3Rvcik6IFN1cHBvcnQgVW5kby9SZWRvIGZvciBET00gY2hhbmdlcwoKICAgICAgICBXaXJlIHVwIENtZCtaIGFuZCBDbWQrU2hpZnQrWiBrZXlib2FyZCBzaG9ydGN1dHMgdG8gY2FsbCBET01BZ2VudCdzCiAgICAgICAgdW5kbygpIGFuZCByZWRvKCkgbWV0aG9kcyB3aGlsZSBtYXJraW5nIERPTSBhbmQgQ1NTIGVkaXRpbmcgdGFza3MKICAgICAgICBhcyB1bmRvYWJsZSB2aWEgdGhlIERPTUFnZW50J3MgbWFya1VuZG9hYmxlU3RhdGUoKSBtZXRob2QuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1Byb3BlcnR5LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90eXBlLmNhbGxiYWNrKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5zZXRUZXh0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5zZXREaXNhYmxlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5cGUuKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5cGUuX3NldENvbnRlbnRGb3JTdHlsZVNoZWV0SWRlbnRpZmllcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlLmNhbGxiYWNrKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5cGUuc2V0UnVsZVNlbGVjdG9yKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5cGUuYWRkUnVsZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5zZXROb2RlTmFtZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5zZXROb2RlVmFsdWUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5wcm90b3R5cGUuc2V0QXR0cmlidXRlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLnNldEF0dHJpYnV0ZVZhbHVlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5wcm90b3R5cGUuc2V0T3V0ZXJIVE1MKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLnJlbW92ZU5vZGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5wcm90b3R5cGUubW92ZVRvKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLnNldFBzZXVkb0NsYXNzRW5hYmxlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLnVuZG8pOgogICAgICAgIChXZWJJbnNwZWN0b3IucmVkbyk6CgoyMDEzLTAyLTA1ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTEzMzUyNj4gUEFSSVRZIChXZWJLaXQgV2ViIEluc3BlY3Rvcik6IEFiaWxpdHkgdG8gZm9yY2UgcHNldWRvIHN0YXRlIGZvciBhbiBlbGVtZW50IGlzIG1pc3NpbmcKCiAgICAgICAgSW4gb3JkZXIgdG8gc2hvdyBzdWJtZW51IGl0ZW1zIGluIGNvbnRleHR1YWwgbWVudXMgaW4gdGhlIFdlYiBJbnNwZWN0b3IsIHdlIHVwZGF0ZSBDb250ZXh0TWVudS5qcwogICAgICAgIHRvIGJlIHRoZSBsYXRlc3QgZnJvbSBPcGVuU291cmNlIGFuZCB1cGRhdGUgdGhlIHdheSB3ZSB1c2UgdGhpcyBBUEkgaW4gb3VyIGNvZGUgc28gdGhhdCB0aGUgZXZlbnQKICAgICAgICBpcyBwcm92aWRlZCBhdCBjb25zdHJ1Y3Rpb24gdGltZSByYXRoZXIgdGhhbiB3aGVuIGNhbGxpbmcgdGhlIC5zaG93KCkgbWV0aG9kLgoKICAgICAgICBXZSBhbHNvIGhhdmUgdG8gdXBkYXRlIHRoZSBSV0ktc3BlY2lmaWMgZnJvbnQtZW5kIGhvc3QgaW4gb3JkZXIgdG8gcmVjb2duaXplIHRoZSBuZXcgInN1Yk1lbnUiCiAgICAgICAgY29udGV4dHVhbCBtZW51IGl0ZW0gdHlwZSBhbmQgaGFuZGxlIGl0cyBpdGVtcyB0byBzaG93IGFzIGEgc3VibWVudSBpdGVtIGluIHRoZSBOU01lbnUgd2UKICAgICAgICBjcmVhdGUuCgogICAgICAgIFRoZW4sIHdlIGFsbG93IHRoZSBwb3NzaWJpbGl0eSB0byBlbmZvcmNlIGNlcnRhaW4gcHNldWRvLWNsYXNzZXMgb24gYSBET01Ob2RlLCB3aGljaCB0cmlnZ2VycwogICAgICAgIGEgbmV3IGV2ZW50IHRoYXQgdGhlIHN0eWxlIGFuZCBhcHBlYXJhbmNlIHBhbmVscyBsaXN0ZW4gdG8gaW4gb3JkZXIgdG8gcmVmcmVzaCB0aGVpciBkaXNwbGF5CiAgICAgICAgYW5kIGFjY291bnQgZm9yIGFueSBzdHlsZSBjaGFuZ2VzIHRoYXQgbWF5IHJlc3VsdCBmcm9tIGEgcHNldWRvLWNsYXNzIGJlaW5nIGZvcmNlZC4KCiAgICAgICAgRmluYWxseSwgd2UgYWRkIG5ldyBtZW51IGl0ZW1zIHRvIHRoZSBjb250ZXh0dWFsIG1lbnUgb2YgYSBET00gbm9kZSBpbiB0aGUgaW5zcGVjdG9yJ3MgRE9NCiAgICAgICAgdHJlZSB0byBhbGxvdyB0byAiRm9yY2UgQ1NTIFBzZXVkby1DbGFzc2VzIi4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQm94TW9kZWxEZXRhaWxzU2VjdGlvblJvdy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkJveE1vZGVsRGV0YWlsc1NlY3Rpb25Sb3cpOgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwpOgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZXh0TWVudS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRleHRNZW51SXRlbSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZXh0TWVudUl0ZW0ucHJvdG90eXBlLmlkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRleHRNZW51SXRlbS5wcm90b3R5cGUudHlwZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZXh0TWVudUl0ZW0ucHJvdG90eXBlLmlzRW5hYmxlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZXh0TWVudUl0ZW0ucHJvdG90eXBlLnNldEVuYWJsZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnVJdGVtLnByb3RvdHlwZS5fYnVpbGREZXNjcmlwdG9yKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRleHRTdWJNZW51SXRlbSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZXh0U3ViTWVudUl0ZW0ucHJvdG90eXBlLmFwcGVuZEl0ZW0pOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGV4dFN1Yk1lbnVJdGVtLnByb3RvdHlwZS5hcHBlbmRTdWJNZW51SXRlbSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZXh0U3ViTWVudUl0ZW0ucHJvdG90eXBlLmFwcGVuZENoZWNrYm94SXRlbSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZXh0U3ViTWVudUl0ZW0ucHJvdG90eXBlLmFwcGVuZFNlcGFyYXRvcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZXh0U3ViTWVudUl0ZW0ucHJvdG90eXBlLl9wdXNoSXRlbSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZXh0U3ViTWVudUl0ZW0ucHJvdG90eXBlLmlzRW1wdHkpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGV4dFN1Yk1lbnVJdGVtLnByb3RvdHlwZS5fYnVpbGREZXNjcmlwdG9yKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRleHRNZW51KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRleHRNZW51LnByb3RvdHlwZS5uZXh0SWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUucHJvdG90eXBlLnNob3cpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUucHJvdG90eXBlLnNob3dTb2Z0TWVudSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZXh0TWVudS5wcm90b3R5cGUuX3NldEhhbmRsZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUucHJvdG90eXBlLl9idWlsZERlc2NyaXB0b3IpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUucHJvdG90eXBlLl9pdGVtU2VsZWN0ZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUucHJvdG90eXBlLmFwcGVuZEFwcGxpY2FibGVJdGVtcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZXh0TWVudS5Qcm92aWRlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZXh0TWVudS5Qcm92aWRlci5wcm90b3R5cGUuYXBwZW5kQXBwbGljYWJsZUl0ZW1zKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRleHRNZW51LnJlZ2lzdGVyUHJvdmlkZXIpOgogICAgICAgICogVXNlckludGVyZmFjZS9ET01Ob2RlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5pc1hNTE5vZGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5wcm90b3R5cGUuZ2V0IGVuYWJsZWRQc2V1ZG9DbGFzc2VzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLnNldFBzZXVkb0NsYXNzRW5hYmxlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUVsZW1lbnQucHJvdG90eXBlLl9wb3B1bGF0ZVRhZ0NvbnRleHRNZW51KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVFbGVtZW50LnByb3RvdHlwZS5fcG9wdWxhdGVGb3JjZWRQc2V1ZG9TdGF0ZUl0ZW1zLnN0cmluZ19hcHBlYXJlZF9oZXJlLmZvckVhY2gpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUVsZW1lbnQucHJvdG90eXBlLl9wb3B1bGF0ZUZvcmNlZFBzZXVkb1N0YXRlSXRlbXMpOgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlT3V0bGluZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVPdXRsaW5lLnByb3RvdHlwZS5fY29udGV4dE1lbnVFdmVudEZpcmVkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YUdyaWQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhR3JpZC5wcm90b3R5cGUuX2NvbnRleHRNZW51SW5EYXRhVGFibGUpOgogICAgICAgICogVXNlckludGVyZmFjZS9PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlLl9jb250ZXh0TWVudUV2ZW50RmlyZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUuX2Z1bmN0aW9uQ29udGV4dE1lbnVFdmVudEZpcmVkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVXRpbGl0aWVzLmpzOgoKMjAxMy0wMi0wNCAgSmVzc2llIEJlcmxpbiAgPGpiZXJsaW5AYXBwbGUuY29tPgoKICAgICAgICBSYW4gdXBkYXRlLXNhZmFyaS1sb2NhbGl6YWJsZS1zdHJpbmdzLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKCjIwMTMtMDItMDQgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMDQyMjcwPiBEZWJ1Z2dlciBzaG91bGQgYmUgc21hcnRlciBhYm91dCBob3ZlcmVkIHRva2VucwoKICAgICAgICBXaGVuIG5vdGlmeWluZyB0aGF0IHdlJ3JlIGhvdmVyaW5nIGEgbmV3IHRva2VuLCBrZWVwIGdvaW5nIHRocm91Z2gKICAgICAgICBwcmV2aW91cyB0b2tlbnMgb24gdGhlIHNhbWUgbGluZSB0byBmaW5kIG90aGVyIGV4cHJlc3Npb25zIGFuZCAuCiAgICAgICAgc28gdGhhdCBhIGZ1bGwgcHJvcGVydHkgY2hhaW4gY2FuIGJlIHJlc29sdmVkLiBUaGUgcmVzdWx0IGlzIG5vdwogICAgICAgIHN0b3JlZCBpbiBhIG5ldyAiZnVsbEV4cHJlc3Npb24iIHByb3BlcnR5IG9uIHRoZSAiaG92ZXJlZFRva2VuIiBvYmplY3QuCgogICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIGJvdW5kcyBvZiB0aGUgdG9rZW4gYXJlIG5vdyB0aG9zZSBvZiB0aGUgZnVsbCBleHByZXNzaW9uCiAgICAgICAgc3VjaCB0aGF0IGhpZ2hsaWdodCBpcyBjb3JyZWN0IGFuZCB0aGUgaGlnaGxpZ2h0LXJlbGF0ZWQgQVBJcyBoYXZlIGJlZW4KICAgICAgICByZW5hbWVkIHRvIHdvcmsgd2l0aGluIHRoZSBjb250ZXh0IG9mIGFuIGV4cHJlc3Npb24gYW5kIG5vdCBhIHRva2VuLgoKICAgICAgICBXaGlsZSB0aGlzIHBhdGNoIGRvZXNuJ3QgaGFuZGxlIGV4cHJlc3Npb25zIGFjcm9zcyBzZXZlcmFsIGxpbmVzLCBpdCBnZXRzCiAgICAgICAgdXMgdG8gcGFyaXR5IHdpdGggd2hhdCB0aGUgT3BlblNvdXJjZSBXZWIgSW5zcGVjdG9yIGtub3dzIGhvdyB0byBoYW5kbGUuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLnRva2VuV2FzSG92ZXJlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3Nob3dQb3BvdmVyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS53aWxsRGlzbWlzc1BvcG92ZXIpOgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuaGlnaGxpZ2h0SG92ZXJlZEV4cHJlc3Npb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUucmVtb3ZlSGlnaGxpZ2h0T25Ib3ZlcmVkRXhwcmVzc2lvbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fbW91c2VNb3ZlZE92ZXJFZGl0b3IpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX2NoZWNrSG92ZXJlZFRva2VuKToKCjIwMTMtMDItMDEgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMTM3MDEwPiBDb25zb2xlIHRvZ2dsZSBzcGxpdCAvIGZ1bGwtaGVpZ2h0IGJ1dHRvbiBpcyBzaG93aW5nIHRoZSB3cm9uZyBkaXJlY3Rpb24KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuc2hvd24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl90b2dnbGVTcGxpdCk6CiAgICAgICAgQWx3YXlzIHVwZGF0ZSB0aGUgdG9nZ2xlIGJ1dHRvbiB3aGVuZXZlciB0aGUgbG9nIGNvbnRlbnQgdmlldyBpcyBzaG93bi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci50b2dnbGVTcGxpdENvbnNvbGUpOgogICAgICAgIFRoaXMgbm8gbG9uZ2VyIG5lZWRzIHRvIHJldHVybiB0cnVlIG9yIGZhbHNlLCBzbyBjbGVhbiBpdCB1cC4KCjIwMTMtMDItMDEgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMTM3MDUwPiBDbGlja2luZyBDb25zb2xlIGJ1dHRvbiBpbiBtYWluIHRvb2xiYXIgc2hvdWxkIGFsd2F5cyB0b2dnbGUgdGhlIGNvbnNvbGUsIGV2ZW4gaWYgbm8gYmFjayBoaXN0b3J5CgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci50b2dnbGVDb25zb2xlVmlldyk6CiAgICAgICAgV2hlbiB0b2dnbGluZyBhbmQgdGhlcmUgaXMgbm8gaGlzdG9yeSwgb3BlbiB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBtYWluIHJlc291cmNlLgoKMjAxMy0wMi0wMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCB0aGUgYWJpbGl0eSB0byByZXNpemUgdGhlIHNwbGl0IGNvbnNvbGUuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMzExODc3MT4gVW5pZnkgdGhlIHF1aWNrIGNvbnNvbGUgYW5kIGZ1bGwgY29uc29sZQoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmNzczoKICAgICAgICAoI3NwbGl0LWNvbnRlbnQtYnJvd3NlciA+IC5uYXZpZ2F0aW9uLWJhcik6IFVzZSByb3ctcmVzaXplIGN1cnNvci4KICAgICAgICAoI3NwbGl0LWNvbnRlbnQtYnJvd3NlciA+IC5uYXZpZ2F0aW9uLWJhciAuaXRlbTpub3QoLmZsZXhpYmxlLXNwYWNlKSk6IFVzZSBkZWZhdWx0IGN1cnNvci4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOiBBZGRlZCBoZWlnaHQgc2V0dGluZyBhbmQgZXZlbnQgbGlzdGVuZXIuIENhbGwgX3VwZGF0ZVNwbGl0Q29uc29sZUhlaWdodC4KICAgICAgICAoV2ViSW5zcGVjdG9yLl91cGRhdGVTcGxpdENvbnNvbGVIZWlnaHQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLl9jb25zb2xlUmVzaXplck1vdXNlRG93bik6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuX2NvbnNvbGVSZXNpemVyTW91c2VEb3duLmRvY2tlZFJlc2l6ZXJEcmFnKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5fY29uc29sZVJlc2l6ZXJNb3VzZURvd24uZG9ja2VkUmVzaXplckRyYWdFbmQpOiBBZGRlZC4KCjIwMTMtMDEtMzAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBHdXQgdGhlIG9sZCBRdWljayBDb25zb2xlIGV4Y2VwdCB0aGUgcHJvbXB0IGFuZCBtYWtlIHRoZSBDb25zb2xlIHZpZXcgdXNlIHRoZSBRdWljayBDb25zb2xlIHByb21wdC4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEzMTE4NzcxPiBVbmlmeSB0aGUgcXVpY2sgY29uc29sZSBhbmQgZnVsbCBjb25zb2xlCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ0NvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcpOiBVc2UgdGhlIHF1aWNrIGNvbnNvbGUgcHJvbXB0LiBEb24ndCBhcHBlbmQgYSA8YnI+IG5vdyB0aGF0IHRoZSBwcm9tcHQKICAgICAgICBpc24ndCBpbiB0aGUgdmlldy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5kaWRBcHBlbmRDb25zb2xlTWVzc2FnZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLnByb21wdERpZENoYW5nZUhlaWdodCk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9RdWlja0NvbnNvbGUuY3NzOiBSZW1vdmVkIHVudXNlZCBydWxlcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUudXBkYXRlTGF5b3V0KTogSnVzdCBjYWxsIF91cGRhdGVTaXplLgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fdXBkYXRlU2l6ZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fdG9nZ2xlT3JGb2N1cyk6IENhbGwgV2ViSW5zcGVjdG9yLnRvZ2dsZUNvbnNvbGVWaWV3LgoKMjAxMy0wMS0zMCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCB0aGUgYWJpbGl0eSB0byBzaG93IGEgc2Vjb25kIGNvbnRlbnQgYnJvd3NlciBhdCB0aGUgYm90dG9tIGZvciB0aGUgY29uc29sZSB2aWV3LgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTMxMTg3NzE+IFVuaWZ5IHRoZSBxdWljayBjb25zb2xlIGFuZCBmdWxsIGNvbnNvbGUKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczogVXBkYXRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudEJyb3dzZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuZ2V0IGVsZW1lbnQpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1NwbGl0VG9nZ2xlRG93bi5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvU3BsaXRUb2dnbGVVcC5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbnNwZWN0b3JGcm9udGVuZEFQSS5qczoKICAgICAgICAoSW5zcGVjdG9yRnJvbnRlbmRBUEkuc2hvd0NvbnNvbGUpOiBVc2UgdG9nZ2xlQ29uc29sZVZpZXcgaW5zdGVhZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldyk6IENyZWF0ZSBhIG5hdmlnYXRpb24gaXRlbSBmb3IgdG9nZ2xpbmcgdGhlIHNwbGl0LgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLmdldCBuYXZpZ2F0aW9uSXRlbXMpOiBJbmNsdWRlIHRoZSBuZXcgaXRlbS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fdG9nZ2xlU3BsaXQpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5jc3M6CiAgICAgICAgKCNzcGxpdC1jb250ZW50LWJyb3dzZXIpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBBZGRlZCAjc3BsaXQtY29udGVudC1icm93c2VyIGVsZW1lbnQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKTogQ3JlYXRlIHNldHRpbmdzIGFuZCB0aGUgc3BsaXQgY29udGVudCBicm93c2VyLgogICAgICAgIChXZWJJbnNwZWN0b3IucHJlZmVyc1VzaW5nU3BsaXRDb25zb2xlKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5pc1Nob3dpbmdTcGxpdENvbnNvbGUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLnRvZ2dsZVNwbGl0Q29uc29sZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3Iuc2hvd1NwbGl0Q29uc29sZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuaGlkZVNwbGl0Q29uc29sZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3Iuc2hvd0Z1bGxIZWlnaHRDb25zb2xlKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5pc1Nob3dpbmdDb25zb2xlVmlldyk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3Iuc2hvd0NvbnNvbGVWaWV3KTogQ2FsbCBzaG93U3BsaXRDb25zb2xlIG9yIHNob3dGdWxsSGVpZ2h0Q29uc29sZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLnRvZ2dsZUNvbnNvbGVWaWV3KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5fY29udGVudEJyb3dzZXJDdXJyZW50Q29udGVudFZpZXdEaWRDaGFuZ2UpOiBBZGRlZC4gVXBkYXRlIHRoZSBjb25zb2xlCiAgICAgICAgYnV0dG9uIGFjdGl2YXRlZCBzdGF0ZS4KCjIwMTMtMDItMDEgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyODA4Njk0PiBFbnRlciBhbmQgU2hpZnQrRW50ZXIgc2hvdWxkIHNlYXJjaCBmb3J3YXJkIGFuZCBiYWNrd2FyZHMKCiAgICAgICAgUmV2aWV3ZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZpbmRCYW5uZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GaW5kQmFubmVyKToKICAgICAgICBJbml0aWFsaXplIG5ldyBtZW1iZXIgdmFyaWFibGVzLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkZpbmRCYW5uZXIucHJvdG90eXBlLl9pbnB1dEZpZWxkS2V5RG93bik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GaW5kQmFubmVyLnByb3RvdHlwZS5faW5wdXRGaWVsZEtleVVwKToKICAgICAgICBUcmFjayB3aGVuIHRoZSBzaGlmdCBrZXkgaXMgZG93biBpbnNpZGUgdGhlIHNlYXJjaCBmaWVsZC4gQWxzbyB0cmFjawogICAgICAgIHdoZW4gdGhlIGVudGVyIGtleSBpcyBwcmVzc2VkIHRvIHRyaWdnZXIgdGhlIGlucHV0J3MgInNlYXJjaCIgZXZlbnQuCiAgICAgICAgV2Ugb25seSB3YW50IHRvIHJlc3BlY3Qgc2hpZnQgd2hlbiB0aGUgdXNlciBoaXRzIGVudGVyIHRvIHNlYXJjaC4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5GaW5kQmFubmVyLnByb3RvdHlwZS5faW5wdXRGaWVsZFNlYXJjaCk6CiAgICAgICAgSWYgdGhlIHNlYXJjaCB2YWx1ZSBzdGF5ZWQgdGhlIHNhbWUsIGFuZCB0aGVyZSBhcmUgc2VhcmNoIHJlc3VsdHMsCiAgICAgICAgYW5kIHRoZSB1c2VyIGhpdCBlbnRlciwgdGhlbiBzZWFyY2ggZm9yd2FyZHMgb3IgYmFja3dhcmRzLgoKMjAxMy0wMS0zMSAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICBGb2xsb3d1cCBmaXhlcyBhZnRlciA8cmRhcjovL3Byb2JsZW0vMTEyNzkxODY+IFJFR1JFU1NJT04gKFNhZmFyaSA2KTogVGltZWxpbmUKICAgICAgICB2aWV3IG1pc3NpbmcgdHlwZSBmaWx0ZXJzLiBBZGRyZXNzZXMgdGhlIGdvb2QgZmVlZGJhY2sgZnJvbSBKb2VQZWNrLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZURhdGFHcmlkLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVEYXRhR3JpZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZURhdGFHcmlkLnByb3RvdHlwZS5fc2NvcGVCYXJTZWxlY3RlZEl0ZW1zRGlkQ2hhbmdlKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVzQ29udGVudFZpZXcuanM6CgoyMDEzLTAxLTMxICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzA4NTgyNj4gQWRkIHN0dWJzIGZvciBuZXcgUGFnZSBwcm90b2NvbCBldmVudHMgKGZyYW1lU3RhcnRlZExvYWRpbmcsIGV0Yy4pCgogICAgICAgIFdlYkNvcmUgYWRkZWQgYSBidW5jaCBvZiBQYWdlIGV2ZW50cyBpbiBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xNDA2NDkuIFdlJ3JlCiAgICAgICAgcmVnaXN0ZXJpbmcgdGhlbSBhbmQgcHJvdmlkaW5nIHN0dWIgaGFuZGxlcnMgdW50aWwgd2UgYWN0dWFsbHkgZG8gc29tZXRoaW5nIHdpdGggdGhlbS4KICAgICAgICBUaGlzIHJlbW92ZXMgc29tZSBhbm5veWluZyBlcnJvcnMgaW4gdGhlIEluY2VwdGlvbiBjb25zb2xlIG91dHB1dC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9QYWdlT2JzZXJ2ZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5QYWdlT2JzZXJ2ZXIucHJvdG90eXBlLmZyYW1lRGV0YWNoZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUGFnZU9ic2VydmVyLnByb3RvdHlwZS5mcmFtZVN0YXJ0ZWRMb2FkaW5nKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlBhZ2VPYnNlcnZlci5wcm90b3R5cGUuZnJhbWVTdG9wcGVkTG9hZGluZyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5QYWdlT2JzZXJ2ZXIucHJvdG90eXBlLmZyYW1lU2NoZWR1bGVkTmF2aWdhdGlvbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5QYWdlT2JzZXJ2ZXIucHJvdG90eXBlLmZyYW1lQ2xlYXJlZFNjaGVkdWxlZE5hdmlnYXRpb24pOgoKMjAxMy0wMS0zMSAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICBGb2xsb3d1cCBmaXggdG8gPHJkYXI6Ly9wcm9ibGVtLzEwOTgxNjA3PiBSRUdSRVNTSU9OIChTYWZhcmkgNik6IENTUyBhbmQgSmF2YVNjcmlwdCBwcm9maWxlcyBuZWVkIGEgdmlzaWJsZSB3YXkgdG8gdG9nZ2xlIGJldHdlZW4gYWJzb2x1dGUgdGltZXMgYW5kIHBlcmNlbnRhZ2VzLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUHJvZmlsZVZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlVmlldyk6CgoyMDEzLTAxLTMwICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzExNTYzMz4gSmF2YVNjcmlwdCBwcm9maWxlcyBwZXJjZW50YWdlIHZhbHVlcyBkb24ndCBoYXZlIHRoZSAiJSIgc3ltYm9sIGluIHRoZW0KCiAgICAgICAgRW5zdXJlIHdlIGFkZCB0aGUgIiUiIHN5bWJvbCB0byB2YWx1ZXMgcmVwb3J0ZWQgaW4gdGhlIEpTIHByb2ZpbGUgZGF0YQogICAgICAgIGdyaWQgd2hlbiBwZXJjZW50cyBhcmUgdXNlZC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUHJvZmlsZURhdGFHcmlkVHJlZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVEYXRhR3JpZE5vZGUucHJvdG90eXBlLmdldCBkYXRhKToKCjIwMTMtMDEtMzAgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMTAxNTE2PiBSRUdSRVNTSU9OOiBKYXZhU2NyaXB0IHByb2ZpbGUgcmVjb3JkZWQgZnJvbSBXZWIgSW5zcGVjdG9yIFVJIG5ldmVyIGZpbmlzaGVzCgogICAgICAgIFR3byBjaGFuZ2VzIG1hZGUgaW4gV2ViQ29yZSBicm9rZSBvdXIgc3VwcG9ydCBmb3IgSmF2YVNjcmlwdCBwcm9maWxpbmcuIFRoZSBmaXJzdCBpbnRyb2R1Y2VkIGJ5CiAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTI2NTgwIHdhcyB0aGF0IFByb2ZpbGVyQWdlbnQuZ2V0UHJvZmlsZUhlYWRlcnMoKSBuZWVkZWQgdG8gYmUKICAgICAgICBjYWxsZWQgZm9yIGFueSBhZGRQcm9maWxlSGVhZGVyIGV2ZW50IHRvIGJlIGRpc3BhdGNoZWQgdG8gdGhlIGZyb250LWVuZC4gVGhlIHNlY29uZCBpc3N1ZSB3YXMKICAgICAgICBpbnRyb2R1Y2VkIGJ5IGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzEzOTk5OCB3aGljaCBjaGFuZ2VkIHRoZSBiYWNrZW5kIEFQSSBpbiBhIG5vbi0KICAgICAgICBiYWNrd2FyZC1jb21wYXRpYmxlIHdheSBzbyB0aGF0IFByb2ZpbGVyQWdlbnQuZ2V0UHJvZmlsZSgpIHdhcyBzcGxpdCBpbiB0d28gbWV0aG9kczoKICAgICAgICBnZXRDUFVQcm9maWxlKCkgYW5kIGdldEhlYXBTbmFwc2hvdCgpLgoKICAgICAgICBUaGlzIHBhdGNoIHNpbXBseSBhZGRzIGEgY2FsbCB0byBQcm9maWxlckFnZW50LmdldFByb2ZpbGVIZWFkZXJzKCkgYXMgc29vbiBhcyB0aGUgUHJvZmlsZXJBZ2VudAogICAgICAgIGlzIGVuYWJsZWQgYW5kIGFsc28gY2hhbmdlcyB0aGUgYmFja2VuZCB3ZSByZWdpc3RlciBhbmQgY2FsbCB0byBnZXQgdGhlIHByb2ZpbGUgdG8gdXNlIHRoZQogICAgICAgIG1vc3QgY3VycmVudCBXZWJDb3JlIEFQSS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9KYXZhU2NyaXB0UHJvZmlsZVZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0UHJvZmlsZVZpZXcpOgogICAgICAgICogVXNlckludGVyZmFjZS9Qcm9maWxlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVNYW5hZ2VyKToKCjIwMTMtMDEtMjkgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBTdG9wIHNob3dpbmcgInVuZGVmaW5lZCIgYW5kIGVtcHR5IHNjb3BlIGJhciBpdGVtcyBpbiB0aGUgVGltZWxpbmUgdmlldy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMTA5NDY4PgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZXNDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fbWFrZUNvbHVtblNjb3BlQmFyKTogQ2hlY2sgdGhlIHR5cGUgb2YgdGhlIHZhbHVlLAogICAgICAgIG5vdCB0aGUgdHlwZSBvZiB0aGUga2V5LgoKMjAxMy0wMS0yOSAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTEyNzkxODY+IFJFR1JFU1NJT04gKFNhZmFyaSA2KTogVGltZWxpbmUgdmlldyBtaXNzaW5nIHR5cGUgZmlsdGVycwoKICAgICAgICBXZSBub3cgYWRkIGEgU2NvcGVCYXIgYWJvdmUgdGhlIGRhdGEgZ3JpZCBzaG93biBmb3IgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCByZWNvcmQKICAgICAgICB0eXBlIGFzIHRoZSBkYXRhIGdyaWQgaXMgaG92ZXJlZC4gVGhlIGZpbHRlcmVkIHR5cGUgaXMgc2V0IGJ5IGFkZGluZyBhIC5zY29wZUJhcgogICAgICAgIHByb3BlcnR5IG9uIHRoZSBjb2x1bW4gZGVzY3JpcHRvciBhbmQgdGhlIGZpbHRlcmluZyBjb2RlIGlzIHJlYWR5IHRvIGJlIGFibGUgdG8KICAgICAgICBkZWFsIHdpdGggbXVsdGlwbGUgZmlsdGVyYWJsZSB0eXBlcyBwZXIgZGF0YSBncmlkIGlmL3doZW4gd2UgZGVjaWRlIHRvIGRvIHRoaXMuCiAgICAgICAgSG93ZXZlciwgdGhlIFVJIGNvZGUgb25seSBrbm93cyBob3cgdG8gaGFuZGxlIG9uZSBmaWx0ZXJhYmxlIGNvbHVtbiBwZXIgZGF0YSBncmlkCiAgICAgICAgYXMgaXQgc3RhbmRzLiBUaGUgc2NvcGUgYmFyIHNob3dpbmcgYWJvdmUgdGhlIGRhdGEgZ3JpZCBmaXRzIHNudWdnbHkgd2hlcmUgdGhlIHRpbWVsaW5lCiAgICAgICAgd291bGQgdXN1YWxseSBzaG93IGFuZCBoYXMgYSAxMHB4IGludmlzaWJsZSBwYWRkaW5nIGF0IHRoZSB0b3AgdG8gZW5zdXJlIHRoZSB1c2VyCiAgICAgICAgZG9lc24ndCBtb3VzZSBvdXQgb2YgaXQgdG9vIGVhc2lseS4KCiAgICAgICAgVGhlIGhvdCBwYXRoIF91cGRhdGVQZW5kaW5nUmVjb3Jkc1dpdGhOZXdCb3VuZHMgd2FzIHVwZGF0ZWQgdG8gZmlsdGVyIHRoZSBwZW5kaW5nCiAgICAgICAgcmVjb3JkcyB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBjdXJyZW50IGZpbHRlcnMsIGFuZCBhIG5ldyBfcmVmcmVzaEFsbFJlY29yZHNGb3JDdXJyZW50RGF0YUdyaWQKICAgICAgICBtZXRob2Qgd2FzIGFkZGVkIHRvIGRlYWwgd2l0aCBjaGFuZ2VzIG9mIGZpbHRlcnMsIHdoaWNoIHRha2VzIGEgbGVzcyBvcHRpbWl6ZWQgYW5kCiAgICAgICAgbW9yZSBicnV0YWwgcGF0aC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2NvcGVCYXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TY29wZUJhci5wcm90b3R5cGUuZ2V0IGRlZmF1bHRJdGVtKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVEYXRhR3JpZC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lRGF0YUdyaWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVEYXRhR3JpZC5wcm90b3R5cGUuX3Njb3BlQmFyU2VsZWN0ZWRJdGVtc0RpZENoYW5nZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lc0NvbnRlbnRWaWV3LmNzczoKICAgICAgICAoLmNvbnRlbnQtdmlldy50aW1lbGluZXMgPiAuZGF0YS1ncmlkID4gLm5hdmlnYXRpb24tYmFyLWNvbnRhaW5lcik6CiAgICAgICAgKC5jb250ZW50LXZpZXcudGltZWxpbmVzID4gLmRhdGEtZ3JpZDpob3ZlciA+IC5uYXZpZ2F0aW9uLWJhci1jb250YWluZXIpOgogICAgICAgICguY29udGVudC12aWV3LnRpbWVsaW5lcyA+IC5kYXRhLWdyaWQgPiAubmF2aWdhdGlvbi1iYXItY29udGFpbmVyID4gLm5hdmlnYXRpb24tYmFyKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVzQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldy5wcm90b3R5cGUuX3VwZGF0ZVBlbmRpbmdSZWNvcmRzV2l0aE5ld0JvdW5kcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldy5wcm90b3R5cGUuX3NjaGVkdWxlR3JpZE5vZGVGb3JSZWZyZXNoKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fbWFrZUNvbHVtblNjb3BlQmFyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fZGF0YUdyaWRGaWx0ZXJzRGlkQ2hhbmdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fcmVmcmVzaEFsbFJlY29yZHNGb3JDdXJyZW50RGF0YUdyaWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcucHJvdG90eXBlLmZpbHRlcmFibGVWYWx1ZUZvclJlY29yZEFuZElkZW50aWZpZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcucHJvdG90eXBlLl9maWx0ZXJSZWNvcmRzV2l0aFR5cGUpOgoKMjAxMy0wMS0yOSAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA5ODE2MDc+IFJFR1JFU1NJT04gKFNhZmFyaSA2KTogQ1NTIGFuZCBKYXZhU2NyaXB0IHByb2ZpbGVzIG5lZWQgYSB2aXNpYmxlIHdheSB0byB0b2dnbGUgYmV0d2VlbiBhYnNvbHV0ZSB0aW1lcyBhbmQgcGVyY2VudGFnZXMKCiAgICAgICAgUmVmYWN0b3JpbmcgdGhlIENTU1NlbGVjdG9yUHJvZmlsZVZpZXcgYW5kIEphdmFTY3JpcHRQcm9maWxlVmlldyBjbGFzc2VzIHRvIGJvdGgKICAgICAgICBpbmhlcml0IGZyb20gdGhlIG5ldyBQcm9maWxlVmlldyBjbGFzcyB3aGljaCBwcm92aWRlIGEgbmF2aWdhdGlvbiBiYXIgaXRlbSB0bwogICAgICAgIHRvZ2dsZSBob3cgdGltZXMgYXJlIGRpc3BsYXllZCAoYWJzb2x1dGUgdGltZXMgdnMuIGEgcGVyY2VudGFnZSkgdmlhIGEgJSBpY29uLgoKICAgICAgICBUaGlzIHdhcyBhbHNvIHRoZSBjaGFuY2UgdG8gc2ltcGxpZnkgdGhlIHNldHRpbmdzIHVzZWQgaW4gdGhlIEphdmFTY3JpcHRQcm9maWxlVmlldwogICAgICAgIHdoaWNoIHVzZWQgdGhyZWUgZGlmZmVyZW50IHNldHRpbmdzIGZvciB0aGUgc2VsZiwgdG90YWwgYW5kIGF2ZXJhZ2UgY29sdW1ucy4gTm93IHRoZXNlCiAgICAgICAgY29sdW1ucyBzaGFyZWQgdGhlIHNhbWUgc2V0dGluZy4KCiAgICAgICAgTm90ZSB0aGF0IHBhcnQgb2YgdGhpcyBwYXRjaCBpcyBzcGVjdWxhdGl2ZSBkdWUgdG8gPHJkYXI6Ly9wcm9ibGVtLzEzMTAxNTE2PiBSRUdSRVNTSU9OOgogICAgICAgIFByb2ZpbGUgcmVjb3JkZWQgZnJvbSBXZWIgSW5zcGVjdG9yIFVJIG5ldmVyIGZpbmlzaGVzLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTZWxlY3RvclByb2ZpbGVWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU2VsZWN0b3JQcm9maWxlVmlldyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTZWxlY3RvclByb2ZpbGVWaWV3LnByb3RvdHlwZS50b2dnbGVUaW1lRGlzcGxheSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTZWxlY3RvclByb2ZpbGVWaWV3LnByb3RvdHlwZS5fc29ydFByb2ZpbGUpOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvUGVyY2VudC5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9KYXZhU2NyaXB0UHJvZmlsZVZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0UHJvZmlsZVZpZXcucHJvZmlsZUNhbGxiYWNrKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRQcm9maWxlVmlldyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0UHJvZmlsZVZpZXcucHJvdG90eXBlLnRvZ2dsZVRpbWVEaXNwbGF5KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgogICAgICAgICogVXNlckludGVyZmFjZS9Qcm9maWxlRGF0YUdyaWRUcmVlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZURhdGFHcmlkTm9kZS5wcm90b3R5cGUuZ2V0IGRhdGEpOgogICAgICAgICogVXNlckludGVyZmFjZS9Qcm9maWxlVmlldy5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlVmlldyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlVmlldy5wcm90b3R5cGUuZ2V0IG5hdmlnYXRpb25JdGVtcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlVmlldy5wcm90b3R5cGUuZ2V0IHByb2ZpbGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZVZpZXcucHJvdG90eXBlLnNldCBwcm9maWxlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVWaWV3LnByb3RvdHlwZS50b2dnbGVUaW1lRGlzcGxheSk6CgoyMDEzLTAxLTI2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgVXBkYXRlIENvZGVNaXJyb3IgdG8gZnJvbSAzLjAgdG8gMy4wLjIuCgogICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJpam5oL0NvZGVNaXJyb3IvY29tcGFyZS92My4wLi4udjMuMDIKCiAgICAgICAgUmV2aWV3ZWQgYnkgUmlja3kgTW9uZGVsbG8uCgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL0xJQ0VOU0U6IFVwZGF0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29kZW1pcnJvci5jc3M6IFVwZGF0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29kZW1pcnJvci5qczogVXBkYXRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jc3MuanM6IFVwZGF0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvamF2YXNjcmlwdC5qczogVXBkYXRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9ydW5tb2RlLmpzOiBVcGRhdGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3NlYXJjaGN1cnNvci5qczogVXBkYXRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci94bWwuanM6IFVwZGF0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuY3NzOgogICAgICAgICgudGV4dC1lZGl0b3IgPiAuQ29kZU1pcnJvciBwcmUpOiBEcm9wcGVkIHRoZSAiOm5vdCguQ29kZU1pcnJvci1jdXJzb3IpIi4KICAgICAgICBTaW5jZSBDb2RlTWlycm9yLWN1cnNvciBpcyBub3cgYSBkaXYuCgoyMDEzLTAxLTI1ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWNjb3VudCBmb3IgYSBkaWZmZXJlbmNlIGluIGhvdyBmcmFtZXMgbG9hZCBhYm91dDpibGFuay4KCiAgICAgICAgVGhlcmUgd2FzIGEgY2hhbmdlIGluIGhvdyBhYm91dDpibGFuayBmcmFtZSBsb2FkcyBhcmUgcmVwb3J0ZWQgb3ZlciB0aGUgSW5zcGVjdG9yCiAgICAgICAgcHJvdG9jb2wgdGhhdCB3YXMgY2F1c2luZyBhIGZhciByZWFjaGluZyBleGNlcHRpb24gdG8gYnJlYWsgcGFydHMgb2YgdGhlIEluc3BlY3Rvci4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMDY3ODA2PiBSRUdSRVNTSU9OOiBUaW1lbGluZSBmYWlsIHRvIHJlY29yZCBhbnl0aGluZyBpbiBzb21lIGNhc2VzCgogICAgICAgIFJldmlld2VkIGJ5IEFudG9pbmUgUXVpbnQuCgogICAgICAgICogVXNlckludGVyZmFjZS9GcmFtZVJlc291cmNlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5mcmFtZURpZE5hdmlnYXRlKTogSWYgdGhlIGZyYW1lIGlzbid0IGtub3duLCB0aGVuCiAgICAgICAgY3JlYXRlIGEgbmV3IHJlc291cmNlIHdoaWNoIHdpbGwgbWFrZSBhIG5ldyBmcmFtZS4gTWFyayBpcyBhcyBsb2FkZWQgYXQgdGhlIGVuZCB0b28gc2luY2Ugd2UgZG9uJ3QKICAgICAgICBleHBlY3QgYW55IG1vcmUgZXZlbnRzIGFib3V0IHRoZSBsb2FkIGZpbmlzaGluZyBmb3IgdGhlc2UgZnJhbWVzLgoKMjAxMy0wMS0yNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFJlZHVjZSB0aGUgbnVtYmVyIGxheW91dHMgYW5kIHN0eWxlIHJlY2FsY3VsYXRpb25zIHdoZW4gc3dpdGNoaW5nIHZpZXdzIG9yIHVwZGF0aW5nCiAgICAgICAgdGhlIG5hdmlnYXRpb24gYmFyIHdoZW4gdGhlIHNlbGVjdGlvbiBjaGFuZ2VzLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI5NzUxODU+IDMwIHNlY29uZCBoYW5nIGluc3BlY3Rpbmcgc2Nyb2xsaW5nIHBlcmYgcmVzdWx0cyBwYWdlCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExMzQ5MDQ0PiBDaGFuZ2luZyBlbGVtZW50IHNlbGVjdGlvbiBpbiB0aGUgV2ViIEluc3BlY3RvciBoYW5ncwogICAgICAgIGZvciB+MnMgYmVjYXVzZSBKYXZhU2NyaXB0IGZvcmNlcyAyNyBsYXlvdXRzCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0hpZXJhcmNoaWNhbFBhdGhOYXZpZ2F0aW9uSXRlbS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkhpZXJhcmNoaWNhbFBhdGhOYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuc2V0IGNvbXBvbmVudHMpOiBVc2UgdXBkYXRlTGF5b3V0U29vbi4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvbkJhci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25CYXIucHJvdG90eXBlLmluc2VydE5hdmlnYXRpb25JdGVtKTogVXNlIHVwZGF0ZUxheW91dFNvb24uIFJlbW92ZSBleHBsaWNpdAogICAgICAgIGNhbGwgdG8gX3VwZGF0ZVN0eWxlIGFuZCBzZXQgX25lZWRzU3R5bGVVcGRhdGVkIGluc3RlYWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uQmFyLnByb3RvdHlwZS5yZW1vdmVOYXZpZ2F0aW9uSXRlbSk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvbkJhci5wcm90b3R5cGUudXBkYXRlTGF5b3V0U29vbik6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvbkJhci5wcm90b3R5cGUudXBkYXRlTGF5b3V0U29vbi51cGRhdGUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25CYXIucHJvdG90eXBlLnVwZGF0ZUxheW91dCk6IENsZWFyIF9uZWVkc0xheW91dC4gQ2FsbCBfdXBkYXRlU3R5bGUgaWYKICAgICAgICBfbmVlZHNTdHlsZVVwZGF0ZWQgaXMgdHJ1ZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25CYXIucHJvdG90eXBlLl91cGRhdGVTdHlsZSk6IENsZWFyIF9uZWVkc1N0eWxlVXBkYXRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvbkl0ZW0uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuc2V0IGhpZGRlbik6IFVzZSB1cGRhdGVMYXlvdXRTb29uLgoKMjAxMy0wMS0yNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFNob3cgdGhlIHJlc291cmNlIGFuZCBsaW5lIGluZm8gaW4gdGhlIEluaXRpYXRvciBjb2x1bW4sIG5leHQgdG8gdGhlIGZ1bmN0aW9uIG5hbWUuCgogICAgICAgIFRoaXMgaGVscHMgZnVydGhlciBpZGVudGlmeSB3aGljaCBmaWxlIGFuZCBsaW5lIHRoZSBldmVudCBvY2N1cnJlZCBvbiB3aXRob3V0IG5lZWRpbmcKICAgICAgICB0byBob3ZlciBmb3IgdGhlIHRvb2x0aXAuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xheW91dFRpbWVsaW5lRGF0YUdyaWROb2RlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5b3V0VGltZWxpbmVEYXRhR3JpZE5vZGUucHJvdG90eXBlLmNyZWF0ZUNlbGxDb250ZW50KTogQWRkIGEgc3VidGl0bGUKICAgICAgICBlbGVtZW50IHNvIHRoZSByZXNvdXJjZSBuYW1lIGlzIHZpc2libGUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lc0NvbnRlbnRWaWV3LmNzczoKICAgICAgICAoLmNvbnRlbnQtdmlldy50aW1lbGluZXMgPiAuZGF0YS1ncmlkIHRkIC5zdWJ0aXRsZTo6YmVmb3JlKTogQWRkZWQuIFNob3cgYSBlbWRhc2gKICAgICAgICBiZWZvcmUgdGhlIHN1YnRpdGxlLgoKMjAxMy0wMS0yMyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgZWRpdGluZyBDU1MgcmVzb3VyY2VzIHdvcmsgYW5kIHVwZGF0ZSB0aGUgcGFnZSBsaXZlLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzE0MzA5ND4gRWRpdC1tb2RlIGZvciByZXNvdXJjZXMgKGxvY2FsIHN1YnN0YXRpb24gb2YgcmVzb3VyY2VzKSAoMTY0NDApCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlLm5vdGVTdHlsZVNoZWV0Q2hhbmdlZC5nb3RTdHlsZVNoZWV0VGV4dCk6IEltcGxlbWVudCB0aGUgRklYTUUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlLl9sb29rdXBTdHlsZVNoZWV0SWRlbnRpZmllcnNGb3JSZXNvdXJjZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3RvdHlwZS5fbG9va3VwU3R5bGVTaGVldElkZW50aWZpZXJzKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlLl9zZXRDb250ZW50Rm9yU3R5bGVTaGVldElkZW50aWZpZXIpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5cGUuX3Jlc291cmNlQ29udGVudERpZENoYW5nZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3RvdHlwZS5fcmVzb3VyY2VDb250ZW50RGlkQ2hhbmdlLmFwcGx5U3R5bGVTaGVldENoYW5nZXMpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5cGUuX3Jlc291cmNlQ29udGVudERpZENoYW5nZS5hcHBseVN0eWxlU2hlZXRDaGFuZ2VzLnN0eWxlU2hlZXRJZGVudGlmaWVyc0ZvdW5kKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZS5zZXQgY3VycmVudFJldmlzaW9uKTogRmlyZSBDb250ZW50RGlkQ2hhbmdlIGV2ZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZS5wcm90b3R5cGUucmV2aXNpb25Db250ZW50RGlkQ2hhbmdlKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZS5fcHJvY2Vzc0NvbnRlbnQpOiBJZ25vcmUgY29udGVudCBjaGFuZ2UgZXZlbnRzIGZvciBvcmlnaW5hbCBjb250ZW50LgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VDb2RlUmV2aXNpb24uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlUmV2aXNpb24ucHJvdG90eXBlLnNldCBjb250ZW50KTogQ2FsbCByZXZpc2lvbkNvbnRlbnREaWRDaGFuZ2Ugb24gU291cmNlQ29kZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IpOiBMaXN0ZW4gZm9yIGNoYW5nZSBldmVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnNldCBzdHJpbmcpOiBJZ25vcmUgY2hhbmdlIGV2ZW50IHdoZW4gc2V0dGluZyB0aGUgc3RyaW5nLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuZ2V0IHJlYWRPbmx5KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zZXQgcmVhZE9ubHkpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9jb250ZW50Q2hhbmdlZCk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3KTogTGlzdGVuIGZvciBTb3VyY2VDb2RlIENvbnRlbnREaWRDaGFuZ2UgZXZlbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUuY2xvc2VkKTogUmVtb3ZlIENvbnRlbnREaWRDaGFuZ2UgZXZlbnQgbGlzdGVuZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUuX2NvbnRlbnRXaWxsUG9wdWxhdGUpOiBNYWtlIGVkaXRvciB3cml0YWJsZSBmb3IgQ1NTLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLl9zb3VyY2VDb2RlQ29udGVudERpZENoYW5nZSk6IEFkZGVkLiBVcGRhdGUgZWRpdG9yIGNvbnRlbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUuX3RleHRFZGl0b3JDb250ZW50RGlkQ2hhbmdlKTogQWRkZWQuIFVwZGF0ZSBzb3VyY2UgY29kZSBjb250ZW50LgoKMjAxMy0wMS0yMiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIENsZWFuIHVwIGhvdyBDU1NTdHlsZU1hbmFnZXIgdHJhY2tzIHN0eWxlc2hlZXQgY2hhbmdlcy4KCiAgICAgICAgUmVwbGFjZXMgX2ZpcmVTdHlsZVNoZWV0Q2hhbmdlZCB3aXRoIG5vdGVTdHlsZVNoZWV0Q2hhbmdlZCBhbmQgcG9wdWxhdGVzIHN0eWxlc2hlZXQKICAgICAgICBpZGVudGlmaWVycyBmb3IgbGF0ZXIgdXNlLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzE0MzA5ND4gRWRpdC1tb2RlIGZvciByZXNvdXJjZXMgKGxvY2FsIHN1YnN0YXRpb24gb2YgcmVzb3VyY2VzKSAoMTY0NDApCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1Byb3BlcnR5LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90eXBlLmNhbGxiYWNrKTogVXNlIG5vdGVTdHlsZVNoZWV0Q2hhbmdlZCBpbnN0ZWFkIG9mIF9maXJlU3R5bGVTaGVldENoYW5nZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUuc2V0VGV4dCk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90eXBlLnNldERpc2FibGVkKTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGVjbGFyYXRpb24uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZS5pbnNlcnRQcm9wZXJ0eUF0KTogVXNlIG5vdGVTdHlsZVNoZWV0Q2hhbmdlZCBpbnN0ZWFkIG9mIF9maXJlU3R5bGVTaGVldENoYW5nZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlLm5vdGVTdHlsZVNoZWV0Q2hhbmdlZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3RvdHlwZS5ub3RlU3R5bGVTaGVldENoYW5nZWQuZ290U3R5bGVTaGVldFRleHQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5cGUubm90ZVN0eWxlU2hlZXRDaGFuZ2VkLnN5bGVTaGVldHNGZXRjaGVkKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlLl9mZXRjaEluZm9Gb3JBbGxTdHlsZVNoZWV0cyk6IEFkZGVkLiBQb3B1bGF0ZSB0aGUgaWRlbnRpZmllciBtYXBzLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3RvdHlwZS5zZXRSdWxlU2VsZWN0b3IpOiBVc2Ugbm90ZVN0eWxlU2hlZXRDaGFuZ2VkIGluc3RlYWQgb2YgX2ZpcmVTdHlsZVNoZWV0Q2hhbmdlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5cGUuYWRkUnVsZSk6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZVNoZWV0LmpzOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IFJlbW92ZWQgQ1NTU3R5bGVTaGVldC5qcy4KCjIwMTMtMDEtMjIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgYSBCcmFuY2hNYW5hZ2VyIGNsYXNzIGZvciB0cmFja2luZyB2YXJpb3VzIGJyYW5jaGVzLgoKICAgICAgICBUaGVyZSBhcmUgdHdvIGluaXRpYWwgYnJhbmNoZXMgLS0gT3JpZ2luYWwgYW5kIFdvcmtpbmcgQ29weS4gQ3VycmVudGx5CiAgICAgICAgdGhlIFdvcmtpbmcgQ29weSBpcyBhbHdheXMgdGhlIGN1cnJlbnQgYnJhbmNoLCBidXQgdGhpcyB3aWxsIGJlIGNvbnRyb2xsYWJsZQogICAgICAgIGZyb20gdGhlIHVzZXIgaW50ZXJmYWNlIGF0IHNvbWUgcG9pbnQuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMTQzMDk0PiBFZGl0LW1vZGUgZm9yIHJlc291cmNlcyAobG9jYWwgc3Vic3RhdGlvbiBvZiByZXNvdXJjZXMpICgxNjQ0MCkKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczogVXBkYXRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnJhbmNoTWFuYWdlci5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmFuY2hNYW5hZ2VyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyYW5jaE1hbmFnZXIucHJvdG90eXBlLmdldCBicmFuY2hlcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmFuY2hNYW5hZ2VyLnByb3RvdHlwZS5nZXQgY3VycmVudEJyYW5jaCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmFuY2hNYW5hZ2VyLnByb3RvdHlwZS5zZXQgY3VycmVudEJyYW5jaCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmFuY2hNYW5hZ2VyLnByb3RvdHlwZS5jcmVhdGVCcmFuY2gpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJhbmNoTWFuYWdlci5wcm90b3R5cGUuZGVsZXRlQnJhbmNoKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IEluc3RhbnRpYXRlIEJyYW5jaE1hbmFnZXIuCgoyMDEzLTAxLTIyICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIGEgU291cmNlQ29kZVJldmlzaW9uIGNsYXNzIGZvciByZWNvcmRpbmcgY2hhbmdlcyB0byBTb3VyY2VDb2RlIG9iamVjdHMuCgogICAgICAgIE9mZmxvYWRzIHRoZSB0aGUgY29udGVudCBhbmQgY29udGVudElzQmFzZTY0RW5jb2RlZCBwcm9wZXJ0aWVzIHRvIFNvdXJjZUNvZGVSZXZpc2lvbi4KICAgICAgICBTb3VyY2VDb2RlIG5vdyBjcmVhdGVzIGFuIG9yaWdpbmFsIHJldmlzaW9uIHRoYXQgaG9sZHMgdGhlIG9yaWdpbmFsIGNvbnRlbnQuIEluIGFkZGl0aW9uCiAgICAgICAgdG8gdGhlIG9yaWdpbmFsIHJldmlzaW9uLCB0aGVyZSBpcyBhIGN1cnJlbnQgcmV2aXNpb24gdGhhdCBjYW4gYmUgc2V0IHRvIHBvaW50IHRvIGRpZmZlcmVudAogICAgICAgIGNvbnRlbnQgYmFzZWQgb24gdGhlIG9yaWdpbmFsLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzE0MzA5ND4gRWRpdC1tb2RlIGZvciByZXNvdXJjZXMgKGxvY2FsIHN1YnN0YXRpb24gb2YgcmVzb3VyY2VzKSAoMTY0NDApCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0JyYW5jaC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyYW5jaC5wcm90b3R5cGUucmV2aXNpb25Gb3JSZXByZXNlbnRlZE9iamVjdCk6IEFkZGVkLiBIZWxwZXIgZm9yIGZpbmRpbmcgb3IKICAgICAgICBjcmVhdGluZyBhIG5ldyByZXZpc2lvbiBmb3IgYW4gb2JqZWN0LgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUucHJvdG90eXBlLmdldCBvcmlnaW5hbFJldmlzaW9uKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZS5nZXQgY3VycmVudFJldmlzaW9uKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZS5zZXQgY3VycmVudFJldmlzaW9uKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZS5nZXQgY29udGVudCk6IFVzZSBjdXJyZW50UmV2aXNpb24uCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZS5nZXQgY29udGVudElzQmFzZTY0RW5jb2RlZCk6IFVzZSBjdXJyZW50UmV2aXNpb24uCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZS5fcHJvY2Vzc0NvbnRlbnQpOiBTZXQgb3JpZ2luYWxSZXZpc2lvbiBjb250ZW50LgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VDb2RlUmV2aXNpb24uanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVJldmlzaW9uKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVSZXZpc2lvbi5wcm90b3R5cGUuZ2V0IHNvdXJjZUNvZGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVJldmlzaW9uLnByb3RvdHlwZS5nZXQgY29udGVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlUmV2aXNpb24ucHJvdG90eXBlLnNldCBjb250ZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVSZXZpc2lvbi5wcm90b3R5cGUuZ2V0IGNvbnRlbnRJc0Jhc2U2NEVuY29kZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVJldmlzaW9uLnByb3RvdHlwZS5zZXQgY29udGVudElzQmFzZTY0RW5jb2RlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlUmV2aXNpb24ucHJvdG90eXBlLmFwcGx5KTogU2V0IGN1cnJlbnRSZXZpc2lvbiB0byBwb2ludCB0byB0aGlzLgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVJldmlzaW9uLnByb3RvdHlwZS5yZXZlcnQpOiBTZXQgY3VycmVudFJldmlzaW9uIHRvIHBvaW50IHRvIHRoZSBvcmlnaW5hbC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVSZXZpc2lvbi5wcm90b3R5cGUuY29weSk6IENvcHkgdGhlIGNvbnRlbnQgYW5kIGNyZWF0ZSBhIG5ldyBTb3VyY2VDb2RlUmV2aXNpb24uCgoyMDEzLTAxLTIyICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIGEgQnJhbmNoTWFuYWdlciBjbGFzcyBmb3IgdHJhY2tpbmcgdmFyaW91cyBicmFuY2hlcy4KCiAgICAgICAgVGhlcmUgYXJlIHR3byBpbml0aWFsIGJyYW5jaGVzIC0tIE9yaWdpbmFsIGFuZCBXb3JraW5nIENvcHkuIEN1cnJlbnRseQogICAgICAgIHRoZSBXb3JraW5nIENvcHkgaXMgYWx3YXlzIHRoZSBjdXJyZW50IGJyYW5jaCwgYnV0IHRoaXMgd2lsbCBiZSBjb250cm9sbGFibGUKICAgICAgICBmcm9tIHRoZSB1c2VyIGludGVyZmFjZSBhdCBzb21lIHBvaW50LgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzE0MzA5ND4gRWRpdC1tb2RlIGZvciByZXNvdXJjZXMgKGxvY2FsIHN1YnN0YXRpb24gb2YgcmVzb3VyY2VzKSAoMTY0NDApCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6IFVwZGF0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0JyYW5jaE1hbmFnZXIuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJhbmNoTWFuYWdlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmFuY2hNYW5hZ2VyLnByb3RvdHlwZS5nZXQgYnJhbmNoZXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJhbmNoTWFuYWdlci5wcm90b3R5cGUuZ2V0IGN1cnJlbnRCcmFuY2gpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJhbmNoTWFuYWdlci5wcm90b3R5cGUuc2V0IGN1cnJlbnRCcmFuY2gpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJhbmNoTWFuYWdlci5wcm90b3R5cGUuY3JlYXRlQnJhbmNoKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyYW5jaE1hbmFnZXIucHJvdG90eXBlLmRlbGV0ZUJyYW5jaCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOiBJbnN0YW50aWF0ZSBCcmFuY2hNYW5hZ2VyLgoKMjAxMy0wMS0yMiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBhIEJyYW5jaCBhbmQgUmV2aXNpb24gY2xhc3MgZm9yIHRyYWNraW5nIGVkaXRzIGluIHRoZSBJbnNwZWN0b3IuCgogICAgICAgIFRoZXNlIGNsYXNzZXMgYXJlIG5vdCB1c2VkIHlldCBhbmQgd2lsbCBiZSB1c2VkIGluIHN1YnNlcXVlbnQgY2hhbmdlcy4KICAgICAgICBBIGJyYW5jaCBob2xkcyByZXZpc2lvbnMgdGhhdCBhcmUgZGlmZmVyZW5jZXMgZnJvbSB0aGUgb3JpZ2luYWwgcGFnZS4KICAgICAgICBDb25jcmV0ZSByZXZpc2lvbiBzdWJjbGFzc2VzIHdpbGwga25vdyB0aGUgc3BlY2lmaWNzIGFib3V0IHRoZSBlZGl0ZWQKICAgICAgICBwYXJ0IG9mIHRoZSBwYWdlIGFuZCBob3cgdG8gYXBwbHkgb3IgcmV2ZXJ0IHRoZSBjaGFuZ2UuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMTQzMDk0PiBFZGl0LW1vZGUgZm9yIHJlc291cmNlcyAobG9jYWwgc3Vic3RhdGlvbiBvZiByZXNvdXJjZXMpICgxNjQ0MCkKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnJhbmNoLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkJyYW5jaCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmFuY2gucHJvdG90eXBlLmdldCBkaXNwbGF5TmFtZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmFuY2gucHJvdG90eXBlLnNldCBkaXNwbGF5TmFtZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmFuY2gucHJvdG90eXBlLmdldCByZXZpc2lvbnMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJhbmNoLnByb3RvdHlwZS5nZXQgbG9ja2VkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyYW5jaC5wcm90b3R5cGUuYWRkUmV2aXNpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJhbmNoLnByb3RvdHlwZS5yZW1vdmVSZXZpc2lvbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmFuY2gucHJvdG90eXBlLnJlc2V0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyYW5jaC5wcm90b3R5cGUuYXBwbHkpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJhbmNoLnByb3RvdHlwZS5yZXZlcnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJhbmNoLnByb3RvdHlwZS5sb2NrKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyYW5jaC5wcm90b3R5cGUudW5sb2NrKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgogICAgICAgICogVXNlckludGVyZmFjZS9SZXZpc2lvbi5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXZpc2lvbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXZpc2lvbi5wcm90b3R5cGUuYXBwbHkpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmV2aXNpb24ucHJvdG90eXBlLnJldmVydCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXZpc2lvbi5wcm90b3R5cGUuY29weSk6CgoyMDEzLTAxLTIyICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTW92ZSBjb250ZW50VVJMIGZyb20gU291cmNlQ29kZSB0byBSZXNvdXJjZSBzaW5jZSBfbWltZVR5cGUgaXMKICAgICAgICBvbmx5IGF2YWlsYWJsZSBvbiBSZXNvdXJjZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLmdldCBjb250ZW50VVJMKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZS5nZXQgY29udGVudFVSTCk6IFJlbW92ZWQuCgoyMDEzLTAxLTIzICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzA2OTQ0MD4gU3dpdGNoaW5nIGF3YXkgZnJvbSBkZWJ1Z2dlciB1c2luZyBrZXlib2FyZCBzaG9ydGN1dCByZXRhaW5zIHBvcG92ZXIgb24gc2NyZWVuCgogICAgICAgIERpc21pc3MgdGhlIHBvcG92ZXIgdXBvbiBoaWRpbmcgdGhlIGRlYnVnZ2VyLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5oaWRkZW4pOgoKMjAxMy0wMS0yMyAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMwNTk2MzA+IE1vdmUgZGVidWdnZXIgcG9wb3ZlciBkaXNwbGF5IHN1cHBvcnQgdG8gU291cmNlQ29kZVRleHRFZGl0b3IKCiAgICAgICAgU3BsaXQgY29kZSBiZXR3ZWVuIFRleHRFZGl0b3IgYW5kIFNvdXJjZUNvZGVUZXh0RWRpdG9yIHN1Y2ggdGhhdCBUZXh0RWRpdG9yIGhhbmRsZXMgYWxsCiAgICAgICAgdGhlIHVzZXIgaW50ZXJhY3Rpb24gYW5kIHRoZSBpbnRlcmZhY2luZyB3aXRoIENvZGVNaXJyb3IgYW5kIG5vdGlmaWVzIHN1YmNsYXNzZXMgdXNpbmcKICAgICAgICB0aGUgLnRva2VuV2FzSG92ZXJlZCgpIG1ldGhvZCBhbmQga2VlcGluZyB0aGUgY3VycmVudGx5IGhvdmVyZWQgdG9rZW4gaW4gLmhvdmVyZWRUb2tlbi4KICAgICAgICBUaGlzIHRva2VuIGNvbnRhaW5zIHRoZSBib3VuZHMgb2YgdGhlIGhvdmVyZWQgdG9rZW4gYXMgd2VsbCBhcyBpdHMgZXhwcmVzc2lvbiwgdHlwZSwKICAgICAgICBzdGFydCBhbmQgZW5kIGNoYXJhY3RlcnMgaW5mb3JtYXRpb24uCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmNzczoKICAgICAgICAoLnBvcG92ZXIgLmRlYnVnZ2VyLXBvcG92ZXItY29udGVudCk6CiAgICAgICAgKC5wb3BvdmVyIC5leHBhbmRhYmxlKToKICAgICAgICAoLnBvcG92ZXIgLmRlYnVnZ2VyLXBvcG92ZXItY29udGVudCAudGl0bGUpOgogICAgICAgICgucG9wb3ZlciAuZGVidWdnZXItcG9wb3Zlci1jb250ZW50IC5ib2R5KToKICAgICAgICAoLnBvcG92ZXIgLmRlYnVnZ2VyLXBvcG92ZXItY29udGVudC5mdW5jdGlvbiAuYm9keSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9hY3RpdmVDYWxsRnJhbWVEaWRDaGFuZ2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLnRleHRFZGl0b3JCcmVha3BvaW50VG9nZ2xlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX2RlYnVnZ2VyRGlkUGF1c2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9kZWJ1Z2dlckRpZFJlc3VtZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUudG9rZW5XYXNIb3ZlcmVkLnBvcHVsYXRlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS50b2tlbldhc0hvdmVyZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9zaG93UG9wb3Zlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3Nob3dQb3BvdmVyRm9yRnVuY3Rpb24uZGlkR2V0RGV0YWlscyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3Nob3dQb3BvdmVyRm9yRnVuY3Rpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9zaG93UG9wb3ZlckZvck9iamVjdCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3Nob3dQb3BvdmVyRm9yU3RyaW5nKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fc2hvd1BvcG92ZXJGb3JOdW1iZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLndpbGxEaXNtaXNzUG9wb3Zlcik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuY3NzOgogICAgICAgICgudGV4dC1lZGl0b3IgPiAuQ29kZU1pcnJvciAuaG92ZXJlZC10b2tlbi1oaWdobGlnaHQpOgogICAgICAgIChALXdlYmtpdC1rZXlmcmFtZXMgdGV4dC1lZGl0b3ItaG92ZXJlZC10b2tlbi1oaWdobGlnaHQtZmFkZW91dCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnN0YXJ0VHJhY2tpbmdUb2tlbkhvdmVyaW5nKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnN0b3BUcmFja2luZ1Rva2VuSG92ZXJpbmcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuaGFuZGxlRXZlbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuaGlnaGxpZ2h0SG92ZXJlZFRva2VuKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnJlbW92ZUhpZ2hsaWdodE9uSG92ZXJlZFRva2VuKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnRva2VuV2FzSG92ZXJlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fb3BlbkNsaWNrZWRMaW5rcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fbW91c2VNb3ZlZE92ZXJFZGl0b3IpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX21vdXNlTW92ZWRPdXRPZkVkaXRvcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fY2hlY2tIb3ZlcmVkVG9rZW4pOgoKMjAxMy0wMS0yMiAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMwNTk0MjU+IENvbnNvbGUgZmlsdGVycyBzaG91bGQgcGVyc2lzdCBhY3Jvc3Mgc2Vzc2lvbnMKCiAgICAgICAgTWFrZSBTY29wZUJhckl0ZW0gc2F2ZSB0aGVpciBzZWxlY3RlZCBzdGF0ZSBpbiBhIFdlYkluc3BlY3Rvci5TZXR0aW5nIHRoYXQKICAgICAgICB3ZSByZWFkIGZyb20gdG8gc2V0IHRoZSBpbml0aWFsIHN0YXRlLiBUaGlzIGNoYW5nZSByZXF1aXJlcyBjb25zdW1lcnMgb2YgdGhlCiAgICAgICAgU2NvcGVCYXIgY2xhc3MgdG8gZW5zdXJlIHRoZXkgZG9uJ3QganVzdCByZWx5IG9uIHNlbGVjdGlvbiBjaGFuZ2UgZXZlbnRzCiAgICAgICAgYnV0IGFsc28gcnVuIGFuIGluaXRpYWwgdXBkYXRlIHRvIG1hdGNoIHNlbGVjdGVkIFNjb3BlQmFySXRlbXMgdXBvbiBjcmVhdGlvbiwKICAgICAgICBzbyB3ZSB1cGRhdGUgTG9nQ29udGVudFZpZXcgdG8gZG8gdGhpcy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX3Njb3BlQmFyU2VsZWN0aW9uRGlkQ2hhbmdlKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2NvcGVCYXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TY29wZUJhcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TY29wZUJhci5wcm90b3R5cGUuZ2V0IHNlbGVjdGVkSXRlbXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NvcGVCYXIucHJvdG90eXBlLl9wb3B1bGF0ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TY29wZUJhci5wcm90b3R5cGUuX2l0ZW1TZWxlY3Rpb25EaWRDaGFuZ2UpOgogICAgICAgICogVXNlckludGVyZmFjZS9TY29wZUJhckl0ZW0uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TY29wZUJhckl0ZW0pOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NvcGVCYXJJdGVtLnByb3RvdHlwZS5nZXQgc2VsZWN0ZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NvcGVCYXJJdGVtLnByb3RvdHlwZS5zZXRTZWxlY3RlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TY29wZUJhckl0ZW0ucHJvdG90eXBlLl9tYXJrRWxlbWVudFNlbGVjdGVkKToKCjIwMTMtMDEtMjIgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExNjUxOTU3PiBSRUdSRVNTSU9OIChTYWZhcmkgNik6IERvZXMgbm90IHNob3cgdmFyIHZhbHVlIG9uIGhvdmVyIGluIHRoZSBkZWJ1Z2dlcgoKICAgICAgICBEaXNwbGF5IGEgcG9wb3ZlciBmb3IgYW55IHZhcmlhYmxlIG9yIGZ1bmN0aW9uIGRlZmluaXRpb24gaW4gdGhlIHRleHQgZWRpdG9yCiAgICAgICAgaG92ZXJlZCBsb25nIGVub3VnaCAoNTAwbXMpIGR1cmluZyBhIGRlYnVnZ2luZyBzZXNzaW9uLiBUaGUgcG9wb3ZlciBjb250YWlucwogICAgICAgIHRoZSBleHByZXNzaW9uIGFzIGV2YWx1YXRlZCBieSB0aGUgRGVidWdnZXJBZ2VudC4gRWFjaCB2YWx1ZSB0eXBlIGhhcyBhIHNwZWNpYWxpemVkCiAgICAgICAgZGlzcGxheSBhcyBib3Jyb3dlZCBmcm9tIE9wZW5Tb3VyY2UgY29kZSAoZnJvbSBPYmplY3RQb3BvdmVySGVscGVyKSBhbmQgYWRhcHRlZCB0byBmaXQKICAgICAgICBvdXIgY29kaW5nIHN0eWxlLgoKICAgICAgICBXZSBkbyBhIGZhaXIgYml0IG9mIG5pZnR5IHdvcmsgdG8gYXZvaWQgdW53YW50ZWQgYWN0aW9ucy4gRm9yIGluc3RhbmNlLCB3ZSB0cmFjayBtb3VzZW91dAogICAgICAgIGV2ZW50cyB0byBpZGVudGlmeSB3aGVuIHRoZSB1c2VyIG1vdXNlcyBvdXQgb2YgdGhlIGVkaXRvciBzbyB0aGF0IHdlIGNhbiByZXNldCB0aGUgaG92ZXIKICAgICAgICBzdGF0ZSBhbmQgYXZvaWQgaGF2aW5nIHdoYXRldmVyIHdhcyB0aGUgbGFzdCBob3ZlcmVkIHRva2VuIHNob3cgYSBwb3BvdmVyIGV2ZW4gdGhvdWdoIHdlCiAgICAgICAgbWF5IGhhdmUgZXhpdGVkIHRoZSBlZGl0b3IgYWxvbmcgdGhlIHdheS4gQWRkaXRpb25hbGx5LCB3ZSB0cmFjayB0aGUgcHJlc3NlZCBzdGF0ZSBvZiB0aGUKICAgICAgICBtb3VzZSBidXR0b24gdG8gYXZvaWQgaGF2aW5nIHRoZSBwb3BvdmVyIHNob3cgZHVyaW5nIGEgc2VsZWN0aW9uLgoKICAgICAgICBXZSdyZSBhbHNvIG1ha2luZyB2YXJpb3VzIGVuaGFuY2VtZW50cyB0byB0aGUgUG9wb3ZlciBjbGFzcyB0byBzdXBwb3J0IHRoZSBhdHRhY2htZW50IG9mCiAgICAgICAgcG9wb3ZlcnMgdG8gdG9rZW5zIGluIHRoZSBUZXh0RWRpdG9yIGFzIHRoZSBkZWJ1Z2dlciBpcyBwYXVzZWQuIEhlcmUgYXJlIHRoZSBoaWdobGlnaHRzOgoKICAgICAgICAtIGFkb3B0IFVJS2l0LWxpa2UgdGVybWlub2xvZ3kgZm9yIHByZXNlbnQvZGlzbWlzcyBtZXRob2RzLgogICAgICAgIC0gbGV0IGNvbnN1bWVycyBvZiB0aGUgUG9wb3ZlciBBUEkgcHJvdmlkZSBib3VuZHMgaW5zdGVhZCBvZiBhbiBlbGVtZW50IGFzIGEgcmVmZXJlbmNlIHRvCiAgICAgICAgd2hpY2ggdGhlIHBvcG92ZXIgc2hvdWxkIGJlIGF0dGFjaGVkLCByZW1vdmluZyB0aGUgZGVwZW5kZW5jeSBvbiBoYXZpbmcgYW4gZWxlbWVudCB0byB3b3JrIHdpdGguCiAgICAgICAgLSBtYWtlIHRoZSBwb3BvdmVyJ3MgZWxlbWVudCBwcml2YXRlIHNpbmNlIGl0IHJlYWxseSBuZWVkcyBub3QgdG8gYmUgY3VzdG9taXNlZCBhcyBwcmVzZW50YXRpb24KICAgICAgICBpcyBmdWxseSBtYW5hZ2VkIGJ5IHRoZSBwb3BvdmVyIGl0c2VsZiwgaG93ZXZlciBhbGxvdyBhIGBjb250ZW50YCBlbGVtZW50IHRvIGJlIHByb3ZpZGVkIHRvCiAgICAgICAgdGhlIC5wcmVzZW50KCkgbWV0aG9kIGFuZCBsZXR0aW5nIHRoZSBwb3BvdmVyIGhvc3QgaXQgYXMgbmVlZGVkLgogICAgICAgIC0gbm8gbG9uZ2VyIHJlbW92ZSB0aGUgcG9wb3ZlciBvbiB3aW5kb3cgYmx1ciBhcyBPcGVuU291cmNlIGxlYXZlcyBpdCBvbiBkaXNwbGF5IGFuZCBpdCBtYWtlcwogICAgICAgIGRlYnVnZ2luZyBvZiB0aGUgcG9wb3ZlciBkaWZmaWN1bHQuCiAgICAgICAgLSBoYW5kbGUgcGFkZGluZyBvZiB0aGUgcG9wb3ZlciBmcmFtZSBpbiBjb2RlIGZvciBjb21wdXRhdGlvbnMgb2YgdGhlIHRpZ2h0ZXIgYm91bmRpbmcgYm94CiAgICAgICAgYXMgd2UgY2FuJ3QgaGF2ZSBpdCBkb25lIGluIENTUyB1bnRpbCB3ZSBhbHJlYWR5IGtub3cgd2hhdCBlZGdlIHdlIGVuZCB1cCB1c2luZyBmb3IgdGhlIHBvcG92ZXIuCiAgICAgICAgLSBiZWdpbiB0byBvZmZlciBhIGRlbGVnYXRpb24gcHJvdG9jb2wgZm9yIHBvcG92ZXJzLCByaWdodCBub3cgd2lsbERpc21pc3MgLyBkaWREaXNtaXNzLgogICAgICAgIC0gaG9yaXpvbnRhbCBhbmQgdmVydGljYWxseSBhbGlnbiBjb250ZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIHRoZSBtaW5pbWFsIGJvdW5kcyBvZiB0aGUgcG9wb3Zlci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvIGFuZCBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1BvcG92ZXIuY3NzOgogICAgICAgICgucG9wb3Zlcik6CiAgICAgICAgKC5wb3BvdmVyID4gLmNvbnRhaW5lcik6CiAgICAgICAgKC5wb3BvdmVyID4gLmNvbnRhaW5lci5jZW50ZXIpOgogICAgICAgICgucG9wb3Zlci5hcnJvdy11cCA+IC5jb250YWluZXIpOgogICAgICAgICgucG9wb3Zlci5hcnJvdy1yaWdodCA+IC5jb250YWluZXIpOgogICAgICAgICgucG9wb3Zlci5hcnJvdy1kb3duID4gLmNvbnRhaW5lcik6CiAgICAgICAgKC5wb3BvdmVyLmFycm93LWxlZnQgPiAuY29udGFpbmVyKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUG9wb3Zlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlBvcG92ZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUG9wb3Zlci5wcm90b3R5cGUuc2V0IGZyYW1lKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlBvcG92ZXIucHJvdG90eXBlLnByZXNlbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUG9wb3Zlci5wcm90b3R5cGUuZGlzbWlzcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Qb3BvdmVyLnByb3RvdHlwZS5oYW5kbGVFdmVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Qb3BvdmVyLnByb3RvdHlwZS5fY3NzQ2xhc3NOYW1lRm9yRWRnZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Qb3BvdmVyLnByb3RvdHlwZS5fYmVzdEZyYW1lRm9yRWRnZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuY3NzOgogICAgICAgICgudGV4dC1lZGl0b3IgPiAuQ29kZU1pcnJvciAucG9wb3Zlci1oaWdobGlnaHQpOgogICAgICAgIChALXdlYmtpdC1rZXlmcmFtZXMgdGV4dC1lZGl0b3ItcG9wb3Zlci1oaWdobGlnaHQtZmFkZW91dCk6CiAgICAgICAgKHRvKToKICAgICAgICAoLnBvcG92ZXIgLmRlYnVnZ2VyLXBvcG92ZXItY29udGVudCk6CiAgICAgICAgKC5wb3BvdmVyIC5leHBhbmRhYmxlKToKICAgICAgICAoLnBvcG92ZXIgLmRlYnVnZ2VyLXBvcG92ZXItY29udGVudCAudGl0bGUpOgogICAgICAgICgucG9wb3ZlciAuZGVidWdnZXItcG9wb3Zlci1jb250ZW50IC5ib2R5KToKICAgICAgICAoLnBvcG92ZXIgLmRlYnVnZ2VyLXBvcG92ZXItY29udGVudC5mdW5jdGlvbiAuYm9keSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9vcGVuQ2xpY2tlZExpbmtzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9kZWJ1Z2dlckRpZFBhdXNlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9kZWJ1Z2dlckRpZFJlc3VtZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fZGVidWdnZXJBY3RpdmVDYWxsRnJhbWVEaWRDaGFuZ2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuaGFuZGxlRXZlbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX21vdXNlTW92ZWRPdmVyRWRpdG9yKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9tb3VzZU1vdmVkT3V0T2ZFZGl0b3IpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX21vdXNlQnV0dG9uV2FzUHJlc3NlZE92ZXJFZGl0b3IpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX21vdXNlQnV0dG9uV2FzUmVsZWFzZWRPdmVyRWRpdG9yKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl93aW5kb3dMb3N0Rm9jdXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3Rva2VuV2FzSG92ZXJlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fcG9wdWxhdGVDYWxsYmFjayk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fc2hvd1BvcG92ZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3Nob3dQb3BvdmVyRm9yRnVuY3Rpb24uZGlkR2V0RGV0YWlscyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fc2hvd1BvcG92ZXJGb3JGdW5jdGlvbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fc2hvd1BvcG92ZXJGb3JPYmplY3QpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3Nob3dQb3BvdmVyRm9yU3RyaW5nKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9zaG93UG9wb3ZlckZvck51bWJlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS53aWxsRGlzbWlzc1BvcG92ZXIpOgoKMjAxMy0wMS0yMiAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTIyNDM2MzM+IFJFR1JFU1NJT04gKFNhZmFyaSA2KTogQ29uc29sZSBtaXNzaW5nIHR5cGUgZmlsdGVycwoKICAgICAgICBBZGRpbmcgYSBuZXcgU2NvcGVCYXIgc3ViY2xhc3Mgb2YgTmF2aWdhdGlvbkl0ZW0gdG8gYWxsb3cgdGhlIGRpc3BsYXkgb2Ygc2NvcGUKICAgICAgICBvcHRpb25zIGluIGEgbmF2aWdhdGlvbiBiYXIuIFVzZSB0aGlzIG5ldyBjbGFzcyBpbiBMb2dDb250ZW50VmlldyB0byBkaXNwbGF5CiAgICAgICAgQWxsIC8gRXJyb3JzIC8gV2FybmluZ3MgLyBMb2dzIG9wdGlvbnMgaW4gdGhlIHJpZ2h0IHBhcnQgb2YgdGhlIHZpZXcncyBuYXZpZ2F0aW9uIGJhci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudEJyb3dzZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuX3VwZGF0ZUNvbnRlbnRWaWV3TmF2aWdhdGlvbkl0ZW1zKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nQ29udGVudFZpZXcuY3NzOgogICAgICAgICguY29uc29sZS1tZXNzYWdlcy5zdXByZXNzLWxvZ3MgLmNvbnNvbGUtbG9nLWxldmVsKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IG5hdmlnYXRpb25JdGVtcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX2NsZWFyTG9nKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fc2NvcGVCYXJTZWxlY3Rpb25EaWRDaGFuZ2UudG9nZ2xlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fc2NvcGVCYXJTZWxlY3Rpb25EaWRDaGFuZ2UpOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Njb3BlQmFyLmNzczogQWRkZWQuCiAgICAgICAgKC5zY29wZS1iYXIpOgogICAgICAgICguc2NvcGUtYmFyID4gbGkpOgogICAgICAgICguc2NvcGUtYmFyID4gbGk6YWN0aXZlKToKICAgICAgICAoLnNjb3BlLWJhciA+IGxpOmhvdmVyKToKICAgICAgICAoLnNjb3BlLWJhciA+IGxpLnNlbGVjdGVkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2NvcGVCYXIuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NvcGVCYXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NvcGVCYXIucHJvdG90eXBlLml0ZW0pOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NvcGVCYXIucHJvdG90eXBlLl9wb3B1bGF0ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TY29wZUJhci5wcm90b3R5cGUuX2l0ZW1TZWxlY3Rpb25EaWRDaGFuZ2UpOgogICAgICAgICogVXNlckludGVyZmFjZS9TY29wZUJhckl0ZW0uanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NvcGVCYXJJdGVtKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjb3BlQmFySXRlbS5wcm90b3R5cGUuZ2V0IGVsZW1lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NvcGVCYXJJdGVtLnByb3RvdHlwZS5nZXQgc2VsZWN0ZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NvcGVCYXJJdGVtLnByb3RvdHlwZS5zZXQgc2VsZWN0ZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NvcGVCYXJJdGVtLnByb3RvdHlwZS5zZXRTZWxlY3RlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TY29wZUJhckl0ZW0ucHJvdG90eXBlLl9jbGlja2VkKToKCjIwMTMtMDEtMTcgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMDA2ODI0PiBQcm92aWRlIGEgUG9wb3ZlciBjbGFzcwoKICAgICAgICBCYXNpYyBQb3BvdmVyIGNsYXNzIHRvIGFsbG93IHRoZSBkaXNwbGF5IG9mIGFueSBIVE1MIGNvbnRlbnQgd2l0aGluIGEgcG9wb3Zlci4KCiAgICAgICAgVGhlIHB1YmxpYyBBUEkgb2YgdGhpcyBjbGFzcyBpcyB2ZXJ5IHNpbXBsZS4gVXNlIC5zaG93UmVsYXRpdmVUb0VsZW1lbnQoZWxlbWVudCwgcHJlZmVycmVkRWRnZSkKICAgICAgICB0byBkaXNwbGF5IHRoZSBwb3BvdmVyIHBvaW50aW5nIHRvIHRoZSBwcm92aWRlZCB0YXJnZXQgZWxlbWVudCB3aXRoIHRoZSBwcm92aWRlZCBlZGdlIGFzIHRoZQogICAgICAgIHByZWZlcnJlZCBlZGdlIG9mIHRoZSB0YXJnZXQgZWxlbWVudCB0b3dhcmRzIHdoaWNoIHRoZSBwb3BvdmVyJ3MgYXJyb3cgc2hvdWxkIHBvaW50IHRvLgogICAgICAgIFRoZSBtZXRob2Qgd2lsbCBjaGVjayB3aGV0aGVyIGl0IGNhbiBob25vdXIgdGhlIGVkZ2UgcHJlZmVyZW5jZSBiYXNlZCBvbiB0aGUgYXZhaWxhYmxlIHNjcmVlbgogICAgICAgIHJlYWwgZXN0YXRlLiBBcyBpdCBzdGFuZHMsIHRoZSBwb3BvdmVyIHdpbGwgY29uc3RyYWluIGl0cyBkaXNwbGF5IHRvIHRoZSBlbnRpcmUgV2ViIEluc3BlY3RvcgogICAgICAgIHdpbmRvdywgYnV0IGl0IGNvdWxkIGVhc2lseSBiZSBtYWRlIHRvIG1hdGNoIGEgbW9yZSBjb25zdHJhaW5lZCBzcGFjZSB3aXRoIGEgbmV3IFdlYkluc3BlY3Rvci5SZWN0CiAgICAgICAgcGFyYW1ldGVyIG9yIEVsZW1lbnQgcmVmZXJlbmNlLgoKICAgICAgICBZb3UgY2FuIHRoZW4gdXNlIC5jbG9zZSgpIHRvIGRpc21pc3MgdGhlIHBvcG92ZXIgd2l0aCBhbiBhbmltYXRlZCB0cmFuc2l0aW9uLCBhbHRob3VnaCB0aGUgcG9wb3ZlcgogICAgICAgIHdpbGwgYXV0b21hdGljYWxseSBkaXNtaXNzIGl0c2VsZiB1cG9uIHVzZXIgaW50ZXJhY3Rpb24gaW5pdGlhdGVkIG91dHNpZGUgb2YgdGhlIHBvcG92ZXIncyBib3VuZHMKICAgICAgICBvciB3aGVuIHRoZSBXZWIgSW5zcGVjdG9yIHdpbmRvdyBpcyBubyBsb25nZXIgZm9jdXNlZC4KCiAgICAgICAgQWRkaXRpb25hbGx5LCB0aGUgbmVjZXNzYXJ5IGdlb21ldHJ5IGZ1bmN0aW9ucyBmb3IgdGhlIFBvcG92ZXIgY2xhc3MgaXMgdGFrZW4gZnJvbSBpQWQgSlMgYW5kIGFkYXB0ZWQKICAgICAgICBoZXJlIHRvIGZpdCB3aXRoIHRoZSBXZWIgSW5zcGVjdG9yIGNvZGluZyBzdHlsZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvR2VvbWV0cnkuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuUG9pbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUG9pbnQuZnJvbUV2ZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlBvaW50LmZyb21FdmVudEluRWxlbWVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Qb2ludC5wcm90b3R5cGUudG9TdHJpbmcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUG9pbnQucHJvdG90eXBlLmNvcHkpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUG9pbnQucHJvdG90eXBlLmVxdWFscyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TaXplKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNpemUucHJvdG90eXBlLnRvU3RyaW5nKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNpemUucHJvdG90eXBlLmNvcHkpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2l6ZS5wcm90b3R5cGUuZXF1YWxzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlY3QpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVjdC5yZWN0RnJvbUNsaWVudFJlY3QpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVjdC5wcm90b3R5cGUudG9TdHJpbmcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVjdC5wcm90b3R5cGUuY29weSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZWN0LnByb3RvdHlwZS5lcXVhbHMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVjdC5wcm90b3R5cGUuaW5zZXQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVjdC5wcm90b3R5cGUubWluWCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZWN0LnByb3RvdHlwZS5taW5ZKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlY3QucHJvdG90eXBlLm1pZFgpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVjdC5wcm90b3R5cGUubWlkWSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZWN0LnByb3RvdHlwZS5tYXhYKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlY3QucHJvdG90eXBlLm1heFkpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVjdC5wcm90b3R5cGUuaW50ZXJzZWN0aW9uV2l0aFJlY3QpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWRnZUluc2V0cyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FZGdlSW5zZXRzLnByb3RvdHlwZS5lcXVhbHMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWRnZUluc2V0cy5wcm90b3R5cGUuY29weSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1BvcG92ZXIuY3NzOiBBZGRlZC4KICAgICAgICAoLnBvcG92ZXIpOgogICAgICAgICgucG9wb3Zlci5hcnJvdy11cCk6CiAgICAgICAgKC5wb3BvdmVyLmFycm93LXJpZ2h0KToKICAgICAgICAoLnBvcG92ZXIuYXJyb3ctZG93bik6CiAgICAgICAgKC5wb3BvdmVyLmFycm93LWxlZnQpOgogICAgICAgICgucG9wb3Zlci5mYWRlLW91dCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1BvcG92ZXIuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuUG9wb3Zlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Qb3BvdmVyLnByb3RvdHlwZS5nZXQgZWxlbWVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Qb3BvdmVyLnByb3RvdHlwZS5nZXQgZnJhbWUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUG9wb3Zlci5wcm90b3R5cGUuc2V0IGZyYW1lKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlBvcG92ZXIucHJvdG90eXBlLmFyZWEpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUG9wb3Zlci5wcm90b3R5cGUuc2hvd1JlbGF0aXZlVG9FbGVtZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlBvcG92ZXIucHJvdG90eXBlLmNsb3NlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlBvcG92ZXIucHJvdG90eXBlLmhhbmRsZUV2ZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlBvcG92ZXIucHJvdG90eXBlLl9kcmF3QmFja2dyb3VuZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Qb3BvdmVyLnByb3RvdHlwZS5fYmVzdEZyYW1lRm9yRWRnZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Qb3BvdmVyLnByb3RvdHlwZS5fZHJhd0ZyYW1lKToKCjIwMTMtMDEtMTEgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwMDE1Njc0PiBSRUdSRVNTSU9OIChTYWZhcmkgNSk6IE9wdGlvbi1jbGljayBvbiBhIGRpc2Nsb3N1cmUgdHJpYW5nbGUgZG9lcyBub3QgZGVlcC1leHBhbmQgYSBET00gc3VidHJlZSAoNjY4NjgpCgogICAgICAgIFVwIHRvIG5vdywgdGhlIFRyZWVFbGVtZW50LnByb3RvdHlwZS5leHBhbmRSZWN1cnNpdmVseSgpIG1ldGhvZCB3b3VsZCBjb3JyZWN0bHkKICAgICAgICBleHBhbmQgY2hpbGRyZW4gcmVjdXJzaXZlbHkgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGRlcHRoLCBidXQgd291bGQgbm90IHdhaXQgdG8KICAgICAgICBwZXJmb3JtIHRoaXMgdGFzayB1bnRpbCBhbGwgY2hpbGQgbm9kZXMgaGFkIGJlZW4gcG9wdWxhdGVkLCB3aGljaCBtZWFucyB0aGF0IHRoaXMKICAgICAgICB3b3VsZCBvbmx5IHdvcmsgaW5jcmVtZW50YWxseSB3aXRoIG9uZSBhZGRpdGlvbmFsIGxldmVsIG9mIGNoaWxkIG5vZGVzIGJlaW5nIHNob3duCiAgICAgICAgZXhwYW5kZWQgaW4gdGhlIERPTSB0cmVlIHVwb24gYWx0K2NsaWNraW5nIGEgZ2l2ZW4gbm9kZSB3aXRoIGEgZGVlcCBoaWVyYXJjaHkuCiAgICAgICAgCiAgICAgICAgSW4gb3JkZXIgdG8gZml4IHRoaXMsIHdlIHJlbHkgb24gdGhlIG5ld2x5IGFkZGVkIG9wdGlvbmFsIGFyZ3VtZW50IHRvIERPTUFnZW50J3MKICAgICAgICByZXF1ZXN0Q2hpbGROb2RlcygpIG1ldGhvZCB0byBwcm92aWRlIHRoZSBkZXB0aCBhdCB3aGljaCB3ZSB3YW50IHRvIHJldHJpZXZlIGNoaWxkcmVuCiAgICAgICAgb2YgYSBnaXZlbiBub2RlIChzZWUgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTM5NDI5KS4gVGhlIERPTUFnZW50IHByb3ZpZGVzCiAgICAgICAgYSBuZXcgLmdldFN1YnRyZWUoKSBtZXRob2QgdGhhdCBjYWxscyByZXF1ZXN0Q2hpbGROb2RlcygpIHdpdGggdGhlIHByb3ZpZGVkIGRlcHRoLgoKICAgICAgICBUaGVuIGluIERPTVRyZWVFbGVtZW50LCB3ZSBzdWJjbGFzcyAuZXhwYW5kUmVjdXJzaXZlbHkoKSB0byBmaXJzdCBjYWxsIERPTUFnZW50J3MKICAgICAgICBuZXcgLmdldFN1YnRyZWUoKSBtZXRob2QgYW5kIHRoZW4gY2FsbCB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aGVuIGFsbCBub2RlcwogICAgICAgIGhhdmUgYmVlbiByZXRyaWV2ZWQgZnJvbSB0aGUgYmFja2VuZC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NTm9kZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5nZXRTdWJ0cmVlKTogTmV3IG1ldGhvZCBhbGxvd2luZyB0byBzcGVjaWZ5IGF0IHdoYXQKICAgICAgICBkZXB0aCB3ZSB3YW50IHRvIHJldHJpZXZlIGNoaWxkcmVuIG9mIGEgZ2l2ZW4gbm9kZSBmcm9tIHRoZSBiYWNrZW5kLgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVFbGVtZW50LnByb3RvdHlwZS5leHBhbmRSZWN1cnNpdmVseSk6IE92ZXJyaWRlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KICAgICAgICB0byBmaXJzdCBvYnRhaW4gdGhlIGRlZXBlc3Qgc3VidHJlZSBmb3IgdGhlIGN1cnJlbnQgbm9kZSBzbyB0aGF0IGRlZXAgZXhwYW5zaW9uIGhhcHBlbnMKICAgICAgICBhcyBleHBlY3RlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzOiBSZWdpc3RlciB0aGUgbmV3IG9wdGlvbmFsIGBkZXB0aGAgcGFyYW1ldGVyCiAgICAgICAgZm9yIERPTUFnZW50J3MgLnJlcXVlc3RDaGlsZE5vZGVzKCkuCgoyMDEzLTAxLTA3ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIERyaXZlIGJ5IHN0eWxlIGZpeC4gQWRkIHN1cGVyIGNvbnN0cnVjdG9yIGNhbGwgdG8gQ1NTU3R5bGVNYW5hZ2VyLgoKICAgICAgICBSZXZpZXdlZCBieSBBbnRvaW5lIFF1aW50LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyKToKICAgICAgICBObyBmdW5jdGlvbmFsIGRpZmZlcmVuY2UsIGJ1dCBJIGp1c3Qgbm90aWNlZCBhIG1pc3NpbmcgY2FsbC4KCjIwMTMtMDEtMDcgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyOTY3MjMxPiBleHRyYWN0LWxvY2FsaXphYmxlLWpzLXN0cmluZ3Mgc2hvdWxkIHdhcm4gYWJvdXQgaW1wcm9wZXIgV2ViSW5zcGVjdG9yLlVJU3RyaW5nIHVzZXMKCiAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgS2lsemVyLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKICAgICAgICBBZGQgbWlzc2luZyBzdHJpbmdzLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQXBwbGljYXRpb25DYWNoZUZyYW1lQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlRnJhbWVDb250ZW50Vmlldy5wcm90b3R5cGUuX3VwZGF0ZUNhbGxiYWNrKToKICAgICAgICBSZW1vdmUgYSBjb21tZW50IGNvbnRhaW5pbmcgYSBVSVN0cmluZyBjYWxsLiBUaGlzIGlzIG5vdCBuZWVkZWQgZm9yIFNhZmFyaS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFiYXNlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fcXVlcnlFcnJvcik6CiAgICAgICAgVXNlIFdlYkluc3BlY3Rvci5VSVN0cmluZygiLi4uIikuZm9ybWF0IHN5bnRheCBzbyB0aGUgc3RyaW5nIGlzIG5vdCBtaXNzZWQuCgoyMDEzLTAxLTA3ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjk2NDM2Nj4gTGF5ZXJUcmVlU2lkZWJhclBhbmVsLl9idWlsZExheWVySW5mb1NlY3Rpb24gaXMgdG9vIGNsZXZlciBmb3IgdXBkYXRlLXNhZmFyaS1sb2NhbGl6YWJsZS1zdHJpbmcgLyBleHRyYWN0LWxvY2FsaXphYmxlLWpzLXN0cmluZ3MKCiAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgS2lsemVyLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTGF5ZXJUcmVlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fYnVpbGRMYXllckluZm9TZWN0aW9uKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3VwZGF0ZUxheWVySW5mb1NlY3Rpb24pOgogICAgICAgIEVuc3VyZSBhbGwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nIHVzZXMgY29udGFpbiBhIHN0cmluZyBsaXRlcmFsLCB3aGljaAogICAgICAgIGlzIHdoYXQgZXh0cmFjdC1sb2NhbGl6YWJsZS1qcy1zdHJpbmdzIGV4cGVjdHMuCgoyMDEzLTAxLTA0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjk2MTY3ND4gUmVzaXppbmcgUXVpY2tDb25zb2xlIGRyYXdlciBtYXkgbmVlZCB0byByZWZyZXNoIENvZGVNaXJyb3IgZWRpdG9yIGZvciBuZXcgdmlzaWJsZSBzaXplCgogICAgICAgIFRoZSBDb2RlTWlycm9yIFRleHRFZGl0b3Igb25seSBoYXMgRE9NIGVsZW1lbnRzIGZvciB2aXNpYmxlIGxpbmVzLCB3aXRoCiAgICAgICAgc29tZSBidWZmZXIuIEl0IG5lZWRzIHRvIGJlIHVwZGF0ZWQgd2hlbiB0aGUgdmlzaWJsZSAoc2Nyb2xsIGRpbWVuc2lvbnMpCiAgICAgICAgb2YgaXRzIGNvbnRlbnQgYXJlYSBhcmUgdXBkYXRlZC4gVGhlIGNvbnRlbnQgdmlldydzIGRpbWVuc2lvbnMgZmxleCB3aXRoCiAgICAgICAgdGhlIHNpemUgb2YgdGhlIFF1aWNrQ29uc29sZS4gU28sIHdoZW4gdGhlIFF1aWNrQ29uc29sZSByZXNpemVzIHdlCiAgICAgICAgc2hvdWxkIHVwZGF0ZSB0aGUgbGF5b3V0IG9mIHRoZSBjb250ZW50IGJyb3dzZXIuCgogICAgICAgIFJldmlld2VkIGJ5IEFudG9pbmUgUXVpbnQuCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5fcXVpY2tDb25zb2xlRGlkUmVzaXplKToKICAgICAgICBPYnNlcnZlIHdoZW4gdGhlIHF1aWNrIGNvbnNvbGUgcmVzaXplcyBhbmQgdXBkYXRlIHRoZSBsYXlvdXQgb2YgdGhlIGNvbnRlbnQgYnJvd3Nlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1F1aWNrQ29uc29sZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX3VwZGF0ZVZpZXdDb250YWluZXJTaXplQW5kU2Nyb2xsRGl2aWRlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLl9pc1Jlc2l6aW5nKToKICAgICAgICBXaGVuZXZlciB3ZSByZXNpemUgd2UgZ28gdGhyb3VnaCB0aGlzIG1ldGhvZC4gRGlzcGF0Y2ggdGhlIHJlc2l6ZSBldmVudC4KICAgICAgICBXZSBtYXkgdGFrZSB0aGUgZWFybHkgcGF0aCBpZiB3ZSBhcmUgcmVzaXppbmcgbWFudWFsbHksIGluIHRoYXQgY2FzZSB0aGUKICAgICAgICBuZXcgaGVpZ2h0IHdvdWxkIGhhdmUgYmVlbiBzZXQgaW4gdGhlIG1vdXNlIGhhbmRsZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9TY3JpcHRDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdENvbnRlbnRWaWV3LnByb3RvdHlwZS51cGRhdGVMYXlvdXQpOgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS51cGRhdGVMYXlvdXQpOgogICAgICAgIEluIGNvbnRlbnQgdmlld3MgY29udGFpbmluZyB0ZXh0IGVkaXRvcnMgYmUgc3VyZSB0byBwYXNzIHVwZGF0ZSBsYXlvdXQKICAgICAgICBvbiB0byB0aGUgdGV4dCBlZGl0b3IgdG8gcmVmcmVzaCB0aGUgQ29kZU1pcnJvciBlZGl0b3IuCgoyMDEzLTAxLTA0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjk2MTQ1NT4gIk5vIFN0eWxlIFByb3BlcnRpZXMiIHRleHQgaW4gc3R5bGVzIEhUTUwgQXR0cmlidXRlcyBzaWRlYmFyIHNob3VsZCBub3QgYmUgbW9ub3NwYWNlCgogICAgICAgIEFkanVzdCB0aGUgc3R5bGVzIGZvciB0aGUgc2lkZWJhciBzbyB0aGF0IHRoaW5ncyBsb29rIGEgYml0IG5pY2VyLgoKICAgICAgICBSZXZpZXdlZCBieSBBbnRvaW5lIFF1aW50LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLmNzczoKICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuZGV0YWlscy5jc3Mtc3R5bGUgLnN0eWxlcy1zZWN0aW9uKToKICAgICAgICBNYWtlIHRoZSBtaW5pbXVtIHNpemUgMTdweC4gVGhpcyBtYWtlcyB0aGUgSFRNTCBhdHRyaWJ1dGVzIHNlY3Rpb24gbm90CiAgICAgICAgbG9vayBsaWtlIHRoZXJlIGlzIGV4dHJhIHBhZGRpbmcgYXQgdGhlIGJvdHRvbS4gVGhpcyBhbHNvIHJlZHVjZXMgdGhlCiAgICAgICAgaGVpZ2h0IG9mIGVtcHR5IHNlY3Rpb25zIGEgYml0LCBzYXZpbmcgdmVydGljYWwgc3BhY2UuCgogICAgICAgICogVXNlckludGVyZmFjZS9EZXRhaWxzU2VjdGlvbi5jc3M6CiAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24gPiAuY29udGVudCA+IC5ncm91cCA+IC5yb3cuZW1wdHkuc3ludGF4LWhpZ2hsaWdodGVkKToKICAgICAgICBUaGUgSFRNTCBBdHRyaWJ1dGVzIHNlY3Rpb24gaXMgLnN5bnRheC1oaWdobGlnaHRlZC4gSWdub3JlIHRoZSBmb250cyBpdAogICAgICAgIHNldHMgYW5kIHJldmVydCBiYWNrIHRvIHRoZSBub3JtYWwgZGV0YWlscyBzZWN0aW9uIGZvbnQuCgogICAgICAgICguZGV0YWlscy1zZWN0aW9uID4gLmNvbnRlbnQgPiAuZ3JvdXAgPiAucm93LnByb3BlcnRpZXM6bm90KC5lbXB0eSkpOgogICAgICAgIFJlbW92ZSBleHRyYSBwYWRkaW5nIG9uIHByb3BlcnRpZXMgc2VjdGlvbnMgd2hlbiBpdHMgdGhlIGVtcHR5IG1lc3NhZ2UuCgoyMDEzLTAxLTA0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIFNraXAgZG9jdW1lbnQgbm9kZXMgd2hlbiBzZWFyY2hpbmcuCgogICAgICAgIFJldmlld2VkIGJ5IEFudG9pbmUgUXVpbnQuCgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5wZXJmb3JtU2VhcmNoLmRvbVNlYXJjaFJlc3VsdHMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLnBlcmZvcm1TZWFyY2guZG9tQ2FsbGJhY2spOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLnBlcmZvcm1TZWFyY2gpOgoKMjAxMy0wMS0wNCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI5NTYwNTc+IFJFR1JFU1NJT046IENhbm5vdCBkZXZlbG9wIG5vZGVzIGluIHRoZSBET00gdHJlZSBpbnNwZWN0b3IgZm9yIGR5bmFtaWNhbGx5LWdlbmVyYXRlZCBjb250ZW50ICgxMDYwODApCgogICAgICAgIEhhbmRsZSBhIG51bGwgb3duZXJEb2N1bWVudCB0byBhdm9pZCBhbiBlcnJvci4gVGhpcyB3b3JrZWQgcHJldmlvdXNseQogICAgICAgIGJlY2F1c2UgZWFjaCBiYWNrZW5kIG1lc3NhZ2Ugd2FzIGRpc3BhdGNoZWQgaW5kaXZpZHVhbGx5IHZpYSBzZXRJbnRlcnZhbC4KICAgICAgICBOb3cgaG93ZXZlciwgdGhleSBhcmUgYmF0Y2hlZCBhZnRlciBhIHNldFRpbWVvdXQgc28gYW4gZWFybGllciB1bmNhdWdodAogICAgICAgIGV4Y2VwdGlvbiBjYW4gYnJlYWsgLyBwcmV2ZW50IGhhbmRsaW5nIG9mIG90aGVyIG1lc3NhZ2VzIGluIHRoYXQgYmF0Y2guCgogICAgICAgIFJldmlld2VkIGJ5IFJpY2t5IE1vbmRlbGxvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlRWxlbWVudC5wcm90b3R5cGUuX2J1aWxkQXR0cmlidXRlRE9NKToKCjIwMTMtMDEtMDQgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyOTU5OTEwPiBVbmNhdWdodCBFcnJvciBpbiBMYXllclRyZWVTaWRlYmFyIGJyZWFrcyBhbGwgcmlnaHQgc2lkZWJhcnMKCiAgICAgICAgSW4gU2lkZWJhclBhbmVsLnByb3RvdHlwZS5oaWRkZW4gdGhlIHBhcmVudFNpZGViYXIgbWlnaHQgYmUgbnVsbC4gSW4KICAgICAgICB0aG9zZSBjYXNlcywgTGF5ZXJUcmVlU2lkZWJhclBhbmVsIGNvdWxkIGNhdXNlIGFuIGVycm9yIHRoYXQgd291bGQKICAgICAgICBtYWtlIGNoYW5naW5nIHRoZSByaWdodCBzaWRlYmFyIGltcG9zc2libGUuCgogICAgICAgIFRoZSBlcnJvciB3YXMgaGFwcGVuaW5nIGlmIHRoZSBzaWRlYmFyIHBhbmVsIHdhcyByZW1vdmVkIGluc3RlYWQgb2YKICAgICAgICBiZWluZyBoaWRkZW4uIFJlbW92ZWQgbWVhbmluZyB0aGUgY29udGVudCB2aWV3IGNoYW5nZXMgYW5kIHRoZSBzaWRlYmFyCiAgICAgICAgcGFuZWwgaXMgbm8gbG9uZ2VyIHJlbGV2YW50LiBIaWRkZW4gbWVhbmluZyB0aGUgdXNlciBqdXN0IHN3aXRjaGVkCiAgICAgICAgdG8gYSBkaWZmZXJlbnQgc2lkZWJhciBwYW5lbC4KCiAgICAgICAgVGhlIGZpeCBjaGVja3MgaWYgcGFyZW50U2lkZWJhciBleGlzdHMgd2hlbiB0aGUgcGFuZWwgaXMgYmVpbmcgaGlkZGVuLAogICAgICAgIGJ1dCB3ZSBhbHNvIG1ha2Ugc3VyZSB0byByZW1vdmUgb3VyIGV2ZW50IGxpc3RlbmVyIGlmIHRoZSBwYXJlbnRTaWRlYmFyCiAgICAgICAgaXMgYmVpbmcgY2xlYXJlZCB3aXRoIGEgbmV3IHdpbGxSZW1vdmUgbWV0aG9kLgoKICAgICAgICBSZXZpZXdlZCBieSBBbnRvaW5lIFF1aW50LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2lkZWJhci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXIucHJvdG90eXBlLnJlbW92ZVNpZGViYXJQYW5lbCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXJQYW5lbC5wcm90b3R5cGUud2lsbFJlbW92ZSk6CiAgICAgICAgR2l2ZSB0aGUgc2lkZWJhciBwYW5lbCBhbiBvcHBvcnR1bml0eSB0byBoYW5kbGUgdGhlIHBhcmVudFNpZGViYXIgYmVpbmcgY2xlYXJlZC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xheWVyVHJlZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuc2hvd24pOgogICAgICAgIEFzc2VydCB0aGF0IHRoZXJlIGlzIGEgcGFyZW50IHNpZGViYXIgd2hlbiB3ZSBhcmUgc2hvd24uCgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5oaWRkZW4pOgogICAgICAgIElmIHRoZXJlIGlzIGEgcGFyZW50IHNpZGViYXIgYW5kIHdlIGFyZSBoaWRkZW4sIHRoZSB1c2VyIGlzIGp1c3Qgc3dpdGNoaW5nCiAgICAgICAgc2lkZWJhcnMsIGFuZCB3ZSBjYW4gcmVtb3ZlIHRoZSBsaXN0ZW5lci4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLndpbGxSZW1vdmUpOgogICAgICAgIElmIHRoZSBwYXJlbnQgc2lkZWJhciBpcyBiZWluZyBjbGVhcmVkIHJlbW92ZSBvdXIgbGlzdGVuZXIsIGlmIGl0IGV4aXN0ZWQuCgoyMDEzLTAxLTA1ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CgogICAgICAgIFVwZGF0ZWQgbG9jYWxpemFibGUgc3RyaW5ncy4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6IExldCB1cGRhdGUtc2FmYXJpLWxvY2FsaXphYmxlLXN0cmluZwogICAgICAgIHJlbW92ZSBvbmUgZW50cnkgYW5kIG9uZSBlbXB0eSBsaW5lLgoKMjAxMi0xMi0yMCAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICBBZGQgbWlzc2luZyBsb2NhbGl6ZWRTdHJpbmcgdGhhdCBJIGZvcmdvdCBpbiB0aGUgcHJldmlvdXMgcGF0Y2ggZm9yCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyOTA4OTc4PiBMYXllciBUcmVlOiByZXNpemUgZGF0YSBncmlkIHVwb24gd2lkdGggY2hhbmdlLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKCjIwMTItMTItMTkgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyOTA4OTc4PiBMYXllciBUcmVlOiByZXNpemUgZGF0YSBncmlkIHVwb24gd2lkdGggY2hhbmdlCgogICAgICAgIExpc3RlbiB0byB3aWR0aCBjaGFuZ2UgZXZlbnRzIG9uIHRoZSBwYXJlbnQgc2lkZWJhciBhcyB0aGUgbGF5ZXIgdHJlZSBwYW5lbAogICAgICAgIGlzIHNob3duLCBhbmQgZG8gdGhlIG9wcG9zaXRlIG9wZXJhdGlvbiB3aGVuIGl0J3MgaGlkZGVuLiBVcG9uIGEgd2lkdGggY2hhbmdlLAogICAgICAgIGNhbGwgLmF1dG9TaXplQ29sdW1ucygpIG9uIHRoZSBkYXRhIGdyaWQgc28gdGhhdCB0aGUgc2VwYXJhdG9ycyBhcmUgY29ycmVjdGx5CiAgICAgICAgcG9zaXRpb25lZC4KCiAgICAgICAgSW4gdGhpcyBwYXRjaCB3ZSBhbHNvIGNoYW5nZSB0aGUgc3RyaW5nIHVzZWQgdG8gc2hvdyB0aGUgcGFpbnQgY291bnQgZnJvbQogICAgICAgICJQYWludCBDb3VudCIgdG8gIlBhaW50cyIgd2hpY2ggbWFrZXMgdGhlIGRhdGEgZ3JpZCBsb29rIG11Y2ggYmV0dGVyLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9MYXllclRyZWVTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLnNob3duKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuaGlkZGVuKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3dpZHRoRGlkQ2hhbmdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2J1aWxkTGF5ZXJJbmZvU2VjdGlvbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9idWlsZERhdGFHcmlkU2VjdGlvbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLl91cGRhdGVMYXllckluZm9TZWN0aW9uKToKCjIwMTItMTItMTkgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyNjQ2NDI0PiBTaG93IHJlZHJhdyBjb3VudHMgaW4gbGF5ZXIgdHJlZSBpbnNwZWN0b3IKCiAgICAgICAgU2ltcGx5IGFkZCBhIG5ldyAiUGFpbnQgQ291bnQiIGZpZWxkIGluIHRoZSBsYXllciBpbmZvIGFuZCBkYXRhIGdyaWQgdG8gZGlzcGxheQogICAgICAgIHRoZSBjb250ZW50cyBvZiB0aGUgLnBhaW50Q291bnQgcHJvcGVydHkgcHJvdmlkZWQgYnkgdGhlIGJhY2stZW5kLCB3aGljaCBoYWQgYWxyZWFkeQogICAgICAgIGxhbmRlZCBpbiBXZWJDb3JlIHdpdGggPHJkYXI6Ly9wcm9ibGVtLzEyODgyNzYzPi4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTGF5ZXJUcmVlRGF0YUdyaWROb2RlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlRGF0YUdyaWROb2RlLnByb3RvdHlwZS5zZXQgbGF5ZXIpOgogICAgICAgICogVXNlckludGVyZmFjZS9MYXllclRyZWVTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9idWlsZExheWVySW5mb1NlY3Rpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fYnVpbGREYXRhR3JpZFNlY3Rpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdXBkYXRlTGF5ZXJJbmZvU2VjdGlvbik6CgoyMDEyLTEyLTE5ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjAzMTEwND4gU2hvdyB3aGljaCBlbGVtZW50cyBhcmUgbGF5ZXItYmFja2VkCgogICAgICAgIFRoaXMgaXMgdGhlIGZyb250LWVuZCBwYXJ0IG9mIHRoZSB3b3JrIHN0YXJ0ZWQgb24gdGhlIGJhY2tlbmQgd2l0aAogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM1MTMuIFdlIG5vdyBwcm92aWRlIGEKICAgICAgICBuZXcgZGV0YWlscyBzaWRlYmFyIGZvciB0aGUgaW5zcGVjdGVkIGVsZW1lbnQgd2hpY2ggbGlzdHMgdGhlIGNoYXJhY3RlcmlzdGljcwogICAgICAgIG9mIGl0cyBiYWNraW5nIFJlbmRlckxheWVyIChtZXRyaWNzLCBhbW91bnQgb2YgbWVtb3J5IHVzZWQgYW5kIHdoZXRoZXIgaXQgaXMKICAgICAgICBjb21wb3NpdGVkIGluIGhhcmR3YXJlKSBhbmQgYWxsIGNoaWxkIFJlbmRlckxheWVycywgd2l0aCB0aGUgb3B0aW9uIG9mIG9ubHkKICAgICAgICBzaG93aW5nIGxheWVycyBjb21wb3NpdGVkIGluIGhhcmR3YXJlLiBBdCB0aGUgYm90dG9tIG9mIHRoZSBwYW5lLCB3ZSBhbHNvIGhhdmUKICAgICAgICBhIHN0YXR1cyBiYXIgaW5kaWNhdGluZyB0aGUgdG90YWwgbnVtYmVyIG9mIGxheWVycyBmb3IgdGhlIHNlbGVjdGVkIG5vZGUgYW5kCiAgICAgICAgaXRzIGRlc2NlbmRhbnRzIGFzIHdlbGwgYXMgdGhlIHRvdGFsIGFtb3VudCBvZiBtZW1vcnkgdXNlZC4KCiAgICAgICAgVGhlIGxpc3Qgb2YgY2hpbGQgbGF5ZXJzIGFsbG93cyB0aGUgZGV2ZWxvcGVyIHRvIHNlbGVjdCBhIG5vZGUgdG8gc2VlIGl0CiAgICAgICAgaGlnaGxpZ2h0ZWQgb24gdGhlIHBhZ2UsIGFuZCB0byBjbGljayBhbiBhcnJvdyBpY29uIHRvIGp1bXAgdG8gdGhlIGxheWVyJ3MKICAgICAgICBhc3NvY2lhdGVkIG5vZGUgaW4gdGhlIERPTSB0cmVlLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xheWVyVHJlZURhdGFHcmlkTm9kZS5qczogQWRkZWQuIERhdGFHcmlkTm9kZSBjdXN0b20gc3ViY2xhc3MgZm9yIHRoZSB0eXBlIG9mIGRhdGEgZ3JpZCBub2RlcwogICAgICAgIHdlIHNob3cgaW4gdGhlIGNoaWxkIGxheWVycyBkYXRhIGdyaWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVEYXRhR3JpZE5vZGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlRGF0YUdyaWROb2RlLnByb3RvdHlwZS5jcmVhdGVDZWxsQ29udGVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVEYXRhR3JpZE5vZGUucHJvdG90eXBlLnNldCBsYXllcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVEYXRhR3JpZE5vZGUucHJvdG90eXBlLl9jcmVhdGVOb2RlQ2VsbENvbnRlbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlRGF0YUdyaWROb2RlLnByb3RvdHlwZS5fZ29Ub0Fycm93V2FzQ2xpY2tlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xheWVyVHJlZU1hbmFnZXIuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlTWFuYWdlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVNYW5hZ2VyLnByb3RvdHlwZS5nZXQgc3VwcG9ydGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZU1hbmFnZXIucHJvdG90eXBlLmxheWVyVHJlZU11dGF0aW9ucyk6IE9idGFpbiB0aGUgY29tcGxldGUKICAgICAgICBsaXN0IG9mIG11dGF0aW9ucyBiZXR3ZWVuIHR3byBmbGF0dGVuZWQgbGF5ZXIgdHJlZXMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVNYW5hZ2VyLnByb3RvdHlwZS5yZWZyZXNoTGF5ZXJUcmVlKTogUmV0cmlldmUgdGhlIGN1cnJlbnQgbGF5ZXIKICAgICAgICB0cmVlIGZyb20gdGhlIGJhY2tlbmQsIGV2ZW50dWFsbHkgdHJpZ2dlcmluZyBhIGxheWVyVHJlZURpZENoYW5nZSBldmVudCBhcyBhIHJlc3VsdC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZU1hbmFnZXIucHJvdG90eXBlLmZsYXR0ZW5lZExheWVyVHJlZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVNYW5hZ2VyLnByb3RvdHlwZS4pOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlTWFuYWdlci5wcm90b3R5cGUubGF5ZXJzRm9yTm9kZSk6IE9idGFpbiB0aGUgbGF5ZXIgYXNzb2NpYXRlZCB0bwogICAgICAgIHRoZSBwcm92aWRlZCBub2RlLCBpZiBhbnksIGFuZCBhIGxpc3Qgb2YgY2hpbGQgbGF5ZXJzLCBpZiBhbnkuCiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVNYW5hZ2VyLnByb3RvdHlwZS5sYXllclRyZWVEaWRDaGFuZ2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlTWFuYWdlci5wcm90b3R5cGUudmFyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZU1hbmFnZXIucHJvdG90eXBlLl9vYnRhaW5Ob2RlSWRzRm9yTGF5ZXJJZHMpOiBPYnRhaW4gdGhlIG5vZGUgaWRzCiAgICAgICAgZm9yIHRoZSBwcm92aWRlZCBsYXllciBpZHMgZnJvbSB0aGUgYmFja2VuZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTGF5ZXJUcmVlT2JzZXJ2ZXIuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlT2JzZXJ2ZXIpOiBMaXN0ZW4gdG8gImxheWVyVHJlZURpZENoYW5nZSIgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGUKICAgICAgICBMYXllclRyZWVBZ2VudCBleHBvc2VkIGJ5IFdlYkNvcmUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVPYnNlcnZlci5wcm90b3R5cGUubGF5ZXJUcmVlRGlkQ2hhbmdlKTogSW5mb3JtIHRoZSBsYXllciB0cmVlIG1hbmFnZXIKICAgICAgICB0aGF0IHRoZSBsYXllciB0cmVlIGhhcyBjaGFuZ2VkLgogICAgICAgICogVXNlckludGVyZmFjZS9MYXllclRyZWVTaWRlYmFyUGFuZWwuY3NzOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTGF5ZXJUcmVlU2lkZWJhclBhbmVsLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZVNpZGViYXJQYW5lbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLnNob3duKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuaGlkZGVuKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZVNpZGViYXJQYW5lbC5wcm90b3R5cGUucmVmcmVzaCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLnN1cHBvcnRzRE9NTm9kZSk6IEVsZW1lbnQgbm9kZXMgb25seSBhcmUgc3VwcG9ydGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fbGF5ZXJUcmVlRGlkQ2hhbmdlKTogRXZlbnQgaGFuZGxlciBmb3IgdGhlCiAgICAgICAgImxheWVyVHJlZURpZENoYW5nZSIgdHJpZ2dlcmVkIGJ5IHRoZSBsYXllciB0cmVlIG1hbmFnZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9idWlsZENoZWNrYm94KTogQnVpbGQgdGhlIGNoZWNrYm94IGNvbnRyb2xsaW5nCiAgICAgICAgdGhlIG9wdGlvbiB0byBvbmx5IHNob3cgbGF5ZXJzIGNvbXBvc2l0ZWQgaW4gaGFyZHdhcmUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9idWlsZExheWVySW5mb1NlY3Rpb24pOiBCdWlsZCB0aGUgdG9wIHNlY3Rpb24KICAgICAgICBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbnNwZWN0ZWQgbm9kZSdzIGxheWVyLCBpZiBhbnkuCiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9idWlsZERhdGFHcmlkU2VjdGlvbik6IEJ1aWxkIHRoZSBtaWRkbGUgc2VjdGlvbgogICAgICAgIGNvbnRhaW5pbmcgdGhlIGRhdGEgZ3JpZCBzaG93aW5nIHRoZSBsaXN0IG9mIGNoaWxkIGxheWVycywgaWYgYW55LgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fYnVpbGRCb3R0b21CYXIpOiBCdWlsZCB0aGUgc3RhdHVzIGJhciBkaXNwbGF5ZWQKICAgICAgICBhdCB0aGUgYm90dG9tIHNob3dpbmcgdGhlIHRvdGFsIG51bWJlciBvZiBsYXllcnMgZm9yIHRoZSBpbnNwZWN0ZWQgbm9kZSBhbmQgdGhlIGFtb3VudCBvZgogICAgICAgIG1lbW9yeSB1c2VkLgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fc29ydERhdGFHcmlkLmNvbXBhcmF0b3IpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fc29ydERhdGFHcmlkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3NlbGVjdGVkRGF0YUdyaWROb2RlQ2hhbmdlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9kYXRhR3JpZEdhaW5lZEZvY3VzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2RhdGFHcmlkTG9zdEZvY3VzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2RhdGFHcmlkV2FzQ2xpY2tlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXllclRyZWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9oaWdobGlnaHRTZWxlY3RlZE5vZGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdXBkYXRlRGF0YUdyaWRGaWx0ZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdXBkYXRlRGlzcGxheVdpdGhMYXllcnMpOiBDYWxsYmFjayBmb3IgdGhlIGNhbGwKICAgICAgICBtYWRlIHRvIC5sYXllcnNGb3JOb2RlKCkgb24gdGhlIG1hbmFnZXIsIHRyaWdnZXJzIGFuIHVwZGF0ZSBvZiBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIHJlcG9ydGVkCiAgICAgICAgaW4gdGhlIHBhbmVsLgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdXBkYXRlTGF5ZXJJbmZvU2VjdGlvbik6IFVwZGF0ZSBvbmx5IHRoZSB0b3Agc2VjdGlvbi4KICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3VwZGF0ZURhdGFHcmlkKTogVXBkYXRlIG9ubHkgdGhlIGRhdGEgZ3JpZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2RhdGFHcmlkTm9kZUZvckxheWVyKTogR2VuZXJhdGUgYSBub2RlIGZvciB0aGUgZGF0YQogICAgICAgIGdyaWQgZm9yIHRoZSBwcm92aWRlZCBsYXllci4KICAgICAgICAoV2ViSW5zcGVjdG9yLkxheWVyVHJlZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3VwZGF0ZU1ldHJpY3MpOiBVcGRhdGUgb25seSB0aGUgYm90dG9tIHN0YXR1cyBiYXIuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOgoKMjAxMi0xMi0wNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFByZXZlbnQgbGluZXMgZnJvbSBoaWdobGlnaHRpbmcgYWdhaW4gaWYgdGhlIHVzZXIgc2Nyb2xscyB3aXRoIGEgbGluZSBoaWdobGlnaHRlZC4KCiAgICAgICAgVGhpcyBzd2l0Y2hlcyBvZmYgb2YgYSB3ZWJraXRBbmltYXRpb25FbmQgZXZlbnQgbGlzdGVuZXIgYmVjYXVzZSB0aGUgbGluZSBlbGVtZW50IG1pZ2h0CiAgICAgICAgYmUgcmVtb3ZlZCBpZiB0aGUgdXNlciBzY3JvbGxzIGR1cmluZyB0aGUgYW5pbWF0aW9uLiBJbiB0aGF0IGNhc2Ugd2Via2l0QW5pbWF0aW9uRW5kIGlzbid0CiAgICAgICAgZmlyZWQsIGFuZCB0aGUgbGluZSB3b3VsZCBoaWdobGlnaHQgYWdhaW4gdGhlIG5leHQgdGltZSBpdCBzY3JvbGxzIGludG8gdmlldy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgUmlja3kgTW9uZGVsbG8uCgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUucmVtb3ZlU3R5bGVDbGFzcyk6IFJlbW92ZWQgZXZlbnQgbGlzdGVuZXIgY29kZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnJldmVhbEFuZEhpZ2hsaWdodExpbmUpOiBTY2hlZHVsZSBhIHRpbWVvdXQgaW5zdGVhZAogICAgICAgIG9mIGFuIGV2ZW50IGxpc3RlbmVyLgoKMjAxMi0xMi0wNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIERlbGF5IHJldmVhbGluZyBhIGxpbmUgdW50aWwgdmlzaWJsZSBhbmQgdGhlIGxpbmUgZXhpc3RzLgoKICAgICAgICBUaGlzIHJlZ3Jlc3NlZCB3aGVuIHdlIHN3aXRjaGVkIHRvIENvZGVNaXJyb3IuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zZXQgc3RyaW5nLnVwZGF0ZSk6IENhbGwgX3JldmVhbFBlbmRpbmdMaW5lSWZQb3NzaWJsZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnNob3duLnVwZGF0ZSk6IENhbGwgX3JldmVhbFBlbmRpbmdMaW5lSWZQb3NzaWJsZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9yZXZlYWxQZW5kaW5nTGluZUlmUG9zc2libGUpOiBTdG9yZSB0aGUgbGluZSBudW1iZXIKICAgICAgICBhbmQgcmVxdWVzdGVkIHJhbmdlIHVudGlsIHZpc2libGUgYW5kIHRoZSBsaW5lIGV4aXN0cy4KCjIwMTItMTItMDMgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgoKICAgICAgICBGb2xsb3d1cCBvbiA8cmRhcjovL3Byb2JsZW0vMTE0OTI1Njg+IFNob3cgc2hhZG93IERPTSBlbGVtZW50cwoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiBOZXcgc3RyaW5nIGZvciAiU2hhZG93IENvbnRlbnQiLgogICAgICAgICogVXNlckludGVyZmFjZS9ET01Ob2RlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZSk6IE9ubHkgY3JlYXRlIHRoZSBfc2hhZG93Um9vdHMgaWYgbmVjZXNzYXJ5LgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5wcm90b3R5cGUuaGFzQ2hpbGROb2Rlcyk6IFRlc3QgZm9yIGV4aXN0ZW5jZSBvZiBfc2hhZG93Um9vdHMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5oYXNTaGFkb3dSb290cyk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5wcm90b3R5cGUuX2luc2VydENoaWxkKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5fc2V0Q2hpbGRyZW5QYXlsb2FkKTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9ub2RlVHlwZURpc3BsYXlOYW1lKTogSGFuZGxlIERvY3VtZW50IEZyYWdtZW50IGluIHN3aXRjaC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZUVsZW1lbnQuanM6IFVzZSBuZXcgVUlTdHJpbmcuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVFbGVtZW50UGF0aENvbXBvbmVudC5qczogSGFuZGxlIERvY3VtZW50IEZyYWdtZW50IGluIHN3aXRjaC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVFbGVtZW50UGF0aENvbXBvbmVudCk6CgoyMDEyLTEyLTAzICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KCiAgICAgICAgQWxsb3cgaW5zcGVjdGlvbiBvZiBTaGFkb3cgRE9NIGVsZW1lbnRzIGluIFdlYiBJbnNwZWN0b3IKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTE0OTI1Njg+IFNob3cgc2hhZG93IERPTSBlbGVtZW50cwoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgQWRkIHRoZSBTaGFkb3cgRE9NIGZyYWdtZW50cyB0byB0aGUgRE9NIHRyZWUgdmlldy4gVGhpcyBhbGxvd3MKICAgICAgICB1cyB0byBpbnNwZWN0IHRoaW5ncyBsaWtlIEhUTUw1IE1lZGlhIGNhcHRpb25zIGFuZCBjb250cm9scy4KICAgICAgICBFeHBvc2UgdGhlIHNldHRpbmcgdmlhIGEgY2hlY2tib3ggaW4gdGhlIGNvbnRleHQgbWVudSBvbiB0aGUgRE9NCiAgICAgICAgdHJlZSB2aWV3ICh3aGljaCByZXF1aXJlcyBhIHJlbG9hZCBpZiBjaGFuZ2VkKS4gTHVja2lseSB0aGUKICAgICAgICBpbnNwZWN0b3IgcHJvdG9jb2wgYWxyZWFkeSBwcm92aWRlZCBhbGwgdGhlIFNoYWRvdyBET00gZGF0YSBzbwogICAgICAgIHRoaXMgd2FzIHB1cmVseSBhIFVJIGNoYW5nZS4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6IE5ldyBtZW51IGl0ZW0uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlKTogTmV3IHBhcmFtZXRlciB0byBjb25zdHJ1Y3RvcjogImlzSW5TaGFkb3dUcmVlIi4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLmhhc0NoaWxkTm9kZXMpOiBDaGVjayBmb3Igc2hhZG93IGNoaWxkcmVuIHRvby4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLmhhc1NoYWRvd1Jvb3RzKTogTmV3IG1ldGhvZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLmlzSW5TaGFkb3dUcmVlKTogTmV3IG1ldGhvZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLl9pbnNlcnRDaGlsZCk6IEluaGVyaXQgdGhlIHNoYWRvdyBzdGF0ZSBhcyBjb25zdHJ1Y3RpbmcgY2hpbGRyZW4uCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5fc2V0Q2hpbGRyZW5QYXlsb2FkKTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU9ic2VydmVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NT2JzZXJ2ZXIucHJvdG90eXBlLnNoYWRvd1Jvb3RQdXNoZWQpOiBBbnN3ZXIgdGhlIHByb3RvY29sIGNhbGxzLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NT2JzZXJ2ZXIucHJvdG90eXBlLnNoYWRvd1Jvb3RQb3BwZWQpOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlRWxlbWVudC5wcm90b3R5cGUuX2J1aWxkVGFnRE9NKTogRG9jdW1lbnQgRnJhZ21lbnRzIGdldCBhIHNwZWNpYWwgc3R5bGUgaWYgdGhleSBhcmUgc2hhZG93IHJvb3QgZWxlbWVudHMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlRWxlbWVudC5wcm90b3R5cGUuX3NpbmdsZVRleHRDaGlsZCk6IFJldHVybiBlYXJseSBpZiBpbiBzaGFkb3cgRE9NLgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLnByb3RvdHlwZS5fc2V0RG9jdW1lbnQpOiBVc2UgbmV3IHBhcmFtZXRlciB3aGVuIGNvbnN0cnVjdGluZyBET01Ob2RlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIucHJvdG90eXBlLl9zZXREZXRhY2hlZFJvb3QpOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZU91dGxpbmUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlT3V0bGluZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlT3V0bGluZS5wcm90b3R5cGUucG9wdWxhdGVDb250ZXh0TWVudSk6IEFkZCBhIG5ldyBjaGVja2JveCB0byB0b2dnbGUgdGhlIFNoYWRvdyBET00gdmlzaWJpbGl0eS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVPdXRsaW5lLnByb3RvdHlwZS5fcG9wdWxhdGVDb250ZXh0TWVudSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlT3V0bGluZS5wcm90b3R5cGUuX3RvZ2dsZVNob3dTaGFkb3dET00pOgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dDb250ZW50Vmlldy5jc3M6CiAgICAgICAgKC53ZWJraXQtaHRtbC1mcmFnbWVudC5zaGFkb3cpOiBOZXcgc3R5bGUgZm9yIHNoYWRvdyByb290IGZyYWdtZW50cy4KCjIwMTItMTItMDIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBMaW5raWZ5ICJzcmMiIGFuZCAiaHJlZiIgYXR0cmlidXRlcyBpbiBIVE1ML1NWRy9YTUwgcmVzb3VyY2VzLgoKICAgICAgICBUaGlzIGV4dGVuZHMgdGhlIFhNTCB0b2tlbml6ZXIgdG8gY2hhbmdlIHRoZSBzdHlsZSBvZiB0aGUgc3RyaW5nIGZvbGxvd2luZwogICAgICAgICJzcmMiIGFuZCAiaHJlZiIgYXR0cmlidXRlcyBpbnRvIGxpbmtzLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9Db2RlTWlycm9yQWRkaXRpb25zLmpzOgogICAgICAgICh0b2tlbml6ZUxpbmtTdHJpbmcpOiBBZGRlZC4KICAgICAgICAodG9rZW5pemVFbmRPZkxpbmtTdHJpbmcpOiBBZGRlZC4KICAgICAgICAoZXh0ZW5kZWRYTUxUb2tlbik6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9TeW50YXhIaWdobGlnaHRpbmdEZWZhdWx0VGhlbWUuY3NzOgogICAgICAgICguY20tcy1kZWZhdWx0IC5jbS1saW5rKTogQWRkZWQuCiAgICAgICAgKC5jbS1zLWRlZmF1bHQgLmNtLWxpbms6aG92ZXIpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IpOiBBZGRlZCBjbGljayBldmVudCBsaXN0ZW5lciBmb3IgX29wZW5DbGlja2VkTGlua3MuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fb3BlbkNsaWNrZWRMaW5rcyk6IEFkZGVkLgoKMjAxMi0xMS0zMCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFVzZSBDb2RlTWlycm9yIHRvIHN5bnRheCBoaWdobGlnaHQgc3RyaW5ncyB1c2VkIGZvciB0aGUgRE9NIHRyZWUuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N5bnRheEhpZ2hsaWdodGluZ1N1cHBvcnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5zeW50YXhIaWdobGlnaHRTdHJpbmdBc0RvY3VtZW50RnJhZ21lbnQpOiBVc2UgQ29kZU1pcnJvci5ydW5Nb2RlLgogICAgICAgIChXZWJJbnNwZWN0b3Iuc3ludGF4SGlnaGxpZ2h0U3RyaW5nQXNEb2N1bWVudEZyYWdtZW50LmFwcGVuZFRleHQpOiBBZGRlZC4gQ3JlYXRlIG5vZGVzIGJhc2VkIG9uIHRoZSBzdHlsZS4KCjIwMTItMTEtMzAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBVc2UgV2ViSW5zcGVjdG9yLkNTU0tleXdvcmRDb21wbGV0aW9ucyBpbnN0ZWFkIG9mIFdlYkluc3BlY3Rvci5Tb3VyY2VUb2tlbml6ZXIgdG8gZGVjaWRlIHdoYXQKICAgICAgICBpcyBhIGtleXdvcmQgaW4gdGhlIFN0eWxlIGRldGFpbHMgc2lkZWJhci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9uIEhvbmV5Y3V0dC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUudXBkYXRlVGl0bGUpOiBHZXQgdGhlIGtleXdvcmRzLgogICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZS51cGRhdGVUaXRsZS5wcm9jZXNzS2V5d29yZCk6IFVzZSB0aGUga2V5d29yZHMKICAgICAgICBmb3IgdGhlIGN1cnJlbnQgcHJvcGVydHkuCgoyMDEyLTExLTMwICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgSG9vayB1cCBpc3N1ZXMgdXNpbmcgQ29kZU1pcnJvci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlQ29kZVRleHRFZGl0b3IuY3NzOgogICAgICAgICguc291cmNlLWNvZGUudGV4dC1lZGl0b3IgPiAuQ29kZU1pcnJvciAuZXJyb3IpOiBSZW5hbWVkLgogICAgICAgICguc291cmNlLWNvZGUudGV4dC1lZGl0b3IgPiAuQ29kZU1pcnJvciAud2FybmluZyk6IFJlbmFtZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9jb250ZW50V2lsbFBvcHVsYXRlKTogTW92ZWQgaXNzdWUgcG9wdWxhdGlvbiBmcm9tIGhlcmUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX2NvbnRlbnREaWRQb3B1bGF0ZSk6IC4uLiB0byBoZXJlLgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9pc3N1ZVdhc0FkZGVkKTogQ2FsbCBfYWRkSXNzdWUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX2FkZElzc3VlKTogUmVuYW1lZCBmcm9tIF9hZGRJc3N1ZVRvTGluZS4gVXNlCiAgICAgICAgYWRkU3R5bGVDbGFzc1RvTGluZSB0byBhZGQgdGhlIHN0eWxlcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fYWRkSXNzdWVUb0xpbmVOdW1iZXJNYXApOiBNZXJnZWQgd2l0aCBfYWRkSXNzdWUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5hZGRTdHlsZUNsYXNzVG9MaW5lKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5yZW1vdmVTdHlsZUNsYXNzRnJvbUxpbmUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnRvZ2dsZVN0eWxlQ2xhc3NGb3JMaW5lKTogQWRkZWQuCgoyMDEyLTExLTMwICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgSG9vayB1cCBicmVha3BvaW50cyB1c2luZyBDb2RlTWlycm9yLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9Db2RlTWlycm9yQWRkaXRpb25zLmpzOiBBZGRlZCBoYXNMaW5lQ2xhc3MgYW5kIHRvZ2dsZUxpbmVDbGFzcyBleHRlbnNpb25zLgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fY29udGVudFdpbGxQb3B1bGF0ZSk6IENhbGwgc2V0QnJlYWtwb2ludEluZm9Gb3JMaW5lCiAgICAgICAgZm9yIGVhY2ggYnJlYWtwb2ludC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS50ZXh0RWRpdG9yQnJlYWtwb2ludEluZm8pOiBSZW1vdmVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLnRleHRFZGl0b3JCcmVha3BvaW50UmVtb3ZlZCk6IFJlbW92ZWQgZGVsZXRlIGhlcmUKICAgICAgICBzaW5jZSBjYWxsaW5nIHJlbW92ZUJyZWFrcG9pbnQgd2lsbCBmaXJlIGFuIGV2ZW50IHRoYXQgY2F1c2VzIHVzIHRvIGRlbGV0ZSB0aGUgYnJlYWtwb2ludC4KICAgICAgICBEZWxldGluZyBlYXJseSB3YXMgY2F1c2luZyBhbiBhc3NlcnQgaW4gdGhlIGV2ZW50IGhhbmRsZXIuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuY3NzOgogICAgICAgICgudGV4dC1lZGl0b3IgPiAuQ29kZU1pcnJvciAuaGFzLWJyZWFrcG9pbnQ6bm90KC5icmVha3BvaW50LWRpc2FibGVkKSAuQ29kZU1pcnJvci1saW5lbnVtYmVyKTogQWRkZWQuCiAgICAgICAgKC50ZXh0LWVkaXRvciA+IC5Db2RlTWlycm9yIC5oYXMtYnJlYWtwb2ludCAuQ29kZU1pcnJvci1saW5lbnVtYmVyOjpiZWZvcmUpOiBBZGRlZC4KICAgICAgICAoLnRleHQtZWRpdG9yID4gLkNvZGVNaXJyb3IgLmJyZWFrcG9pbnQtcmVzb2x2ZWQgLkNvZGVNaXJyb3ItbGluZW51bWJlcjo6YmVmb3JlKTogQWRkZWQuCiAgICAgICAgKC50ZXh0LWVkaXRvciA+IC5Db2RlTWlycm9yIC5icmVha3BvaW50LWRpc2FibGVkIC5Db2RlTWlycm9yLWxpbmVudW1iZXI6OmJlZm9yZSk6IEFkZGVkLgogICAgICAgICgudGV4dC1lZGl0b3IgPiAuQ29kZU1pcnJvciAuZXhlY3V0aW9uLWxpbmUgLkNvZGVNaXJyb3ItbGluZW51bWJlcjo6YWZ0ZXIpOiBBZGRlZC4KICAgICAgICAoLnRleHQtZWRpdG9yID4gLkNvZGVNaXJyb3IgLmV4ZWN1dGlvbi1saW5lIHByZSk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvcik6IEFkZGVkICJndXR0ZXJDbGljayIgZXZlbnQgbGlzdGVuZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zZXQgc3RyaW5nKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnNldCBzdHJpbmcudXBkYXRlU3R5bGVzKTogVXBkYXRlIHRoZSBleGVjdXRpb24gbGluZSBhbmQgYnJlYWtwb2ludHMKICAgICAgICBub3cgdGhhdCB3ZSBtaWdodCBoYXZlIGNvbnRlbnQgZm9yIHRoYXQgbGluZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLmdldCBleGVjdXRpb25MaW5lTnVtYmVyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnNldCBleGVjdXRpb25MaW5lTnVtYmVyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnNldEJyZWFrcG9pbnRJbmZvRm9yTGluZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fdXBkYXRlRXhlY3V0aW9uTGluZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX2FkZEJyZWFrcG9pbnRUb0xpbmVXaXRoSW5mbyk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3NldEJyZWFrcG9pbnRTdHlsZXNPbkxpbmVXaXRoSW5mbyk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3JlbW92ZUJyZWFrcG9pbnRGcm9tTGluZS51cGRhdGVTdHlsZXMpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9yZW1vdmVCcmVha3BvaW50RnJvbUxpbmUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9ndXR0ZXJNb3VzZURvd24pOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9kb2N1bWVudE1vdXNlTW92ZWQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9kb2N1bWVudE1vdXNlVXApOiBBZGRlZC4KCjIwMTItMTEtMzAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBIb29rIHVwIHNlYXJjaCB1c2luZyBDb2RlTWlycm9yLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5jdXN0b21QZXJmb3JtU2VhcmNoKTogTW92ZSBvZmYgb2YgdGV4dENvbnRlbnQgYW5kIEF0dHJpYnV0ZWRTdHJpbmcuCiAgICAgICAgVXNlIGFkZFNlYXJjaFJlc3VsdHMgaW5zdGVhZCBvZiB0aGUgaW5kaXZpZHVhbCBhZGRTZWFyY2hSZXN1bHRSYW5nZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5jc3M6CiAgICAgICAgKC50ZXh0LWVkaXRvciAuYm91bmN5LWhpZ2hsaWdodCk6IEFkZGVkLgogICAgICAgIChALXdlYmtpdC1rZXlmcmFtZXMgdGV4dC1lZGl0b3ItYm91bmN5KTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5wZXJmb3JtU2VhcmNoKTogQ3JlYXRlIGEgc2VhcmNoIGN1cnNvci4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnBlcmZvcm1TZWFyY2guYmF0Y2hTZWFyY2gpOiBVc2UgdGhlIHNlYXJjaCBjdXJzb3IgdG8gZmluZCBtYXRjaGVzIGluCiAgICAgICAgdGhlIHNsb3cgcGF0aC4gU3RvcCB1c2luZyBfdGV4dENvbnRlbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5hZGRTZWFyY2hSZXN1bHRzKTogUmVuYW1lZCBmcm9tIGFkZFNlYXJjaFJlc3VsdFJhbmdlLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuYWRkU2VhcmNoUmVzdWx0cy5tYXJrUmFuZ2VzKTogQWRkZWQuIE1hcmsgdGhlIHJhbmdlcyBpbiBhIENvZGVNaXJyb3IKICAgICAgICBvcGVyYXRpb24gdG8gZ2V0IGJldHRlciBwZXJmb3JtYW5jZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnNlYXJjaENsZWFyZWQpOiBDbGVhciB0aGUgbWFya2VkIHRleHQgcmFuZ2VzLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUucmV2ZWFsUHJldmlvdXNTZWFyY2hSZXN1bHQpOiBDYWxsIF9yZXZlYWxTZWFyY2hSZXN1bHQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5yZXZlYWxOZXh0U2VhcmNoUmVzdWx0KTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5saW5lKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fcmV2ZWFsU2VhcmNoUmVzdWx0KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fcmV2ZWFsU2VhcmNoUmVzdWx0LmFuaW1hdGlvbkVuZGVkKTogQWRkZWQuCgoyMDEyLTExLTMwICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgSG9vayB1cCB0aGUgYmFzaWNzIG9mIENvZGVNaXJyb3IgaW4gVGV4dEVkaXRvci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlQ29kZVRleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUudGV4dEVkaXRvckxpbmVDb250ZW50VXBkYXRlZCk6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N5bnRheEhpZ2hsaWdodGluZ0RlZmF1bHRUaGVtZS5jc3M6IEFkZGVkIENvZGVNaXJyb3Igc2VsZWN0b3JzLgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0RWRpdG9yLmNzczoKICAgICAgICAoLnRleHQtZWRpdG9yID4gLkNvZGVNaXJyb3IpOiBBZGRlZC4gUmVzZXQgYm94LXNpemluZyB0byBjb250ZW50LWJveC4KICAgICAgICAoLnRleHQtZWRpdG9yID4gLkNvZGVNaXJyb3IgKik6IEFkZGVkLiBEaXR0by4KICAgICAgICAoLnRleHQtZWRpdG9yID4gLkNvZGVNaXJyb3IgLkNvZGVNaXJyb3ItbGluZXMpOiBBZGRlZC4KICAgICAgICAoLnRleHQtZWRpdG9yID4gLkNvZGVNaXJyb3IgcHJlKTogQWRkZWQuCiAgICAgICAgKC50ZXh0LWVkaXRvciA+IC5Db2RlTWlycm9yIC5Db2RlTWlycm9yLXNlbGVjdGVkKTogQWRkZWQuCiAgICAgICAgKC50ZXh0LWVkaXRvciA+IC5Db2RlTWlycm9yIC5Db2RlTWlycm9yLWZvY3VzZWQgLkNvZGVNaXJyb3Itc2VsZWN0ZWQpOiBBZGRlZC4KICAgICAgICAoLnRleHQtZWRpdG9yID4gLkNvZGVNaXJyb3IgdGV4dGFyZWEpOiBBZGRlZC4gUHJldmVudCBwb2ludGVyIGV2ZW50cyB0byBtYWtlIHJpZ2h0CiAgICAgICAgY2xpY2sgSW5zcGVjdCBFbGVtZW50IGhpdCB0aGUgbGluZSBpbnN0ZWFkIG9mIHRoZSBpbnB1dCBhcmVhLgogICAgICAgICgudGV4dC1lZGl0b3IgPiAuQ29kZU1pcnJvciAuQ29kZU1pcnJvci1ndXR0ZXJzKTogQWRkZWQuCiAgICAgICAgKC50ZXh0LWVkaXRvciA+IC5Db2RlTWlycm9yIC5Db2RlTWlycm9yLWxpbmVudW1iZXIpOiBBZGRlZC4KICAgICAgICAoLnRleHQtZWRpdG9yID4gLkNvZGVNaXJyb3IgLmhpZ2hsaWdodGVkKTogQWRkZWQuCiAgICAgICAgKEAtd2Via2l0LWtleWZyYW1lcyB0ZXh0LWVkaXRvci1oaWdobGlnaHQtZmFkZW91dCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLmdldCBzdHJpbmcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuc2V0IHN0cmluZyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5nZXQgc2VsZWN0ZWRUZXh0UmFuZ2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuc2V0IHNlbGVjdGVkVGV4dFJhbmdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLmdldCBtaW1lVHlwZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zZXQgbWltZVR5cGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUucmV2ZWFsTGluZSk6IFNldCB0aGUgY3Vyc29yIHBvc2l0aW9uIGFuZCBoaWdobGlnaHQgdGhlIGxpbmUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS51cGRhdGVMYXlvdXQpOiBDYWxsIHJlZnJlc2ggdG8gbGV0IENvZGVNaXJyb3Iga25vdyB3ZSBtaWdodCBoYXZlIGNoYW5nZWQgc2l6ZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnNob3duKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fdGV4dFJhbmdlRnJvbUNvZGVNaXJyb3JQb3NpdGlvbik6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX2NvZGVNaXJyb3JQb3NpdGlvbkZyb21UZXh0UmFuZ2UpOiBBZGRlZC4KCjIwMTItMTEtMzAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBSZW1vdmUgVGV4dEVkaXRvciBpbXBsZW1lbnRhdGlvbiBhbmQgc3VwcG9ydGluZyBjbGFzc2VzIGZvciBzeW50YXggaGlnaGxpZ2h0aW5nLgoKICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBKb24gSG9uZXljdXR0LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQXR0cmlidXRlZFN0cmluZy5qczogUmVtb3ZlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU291cmNlVG9rZW5pemVyLmpzOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9IVE1MU291cmNlVG9rZW5pemVyLmpzOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9KYXZhU2NyaXB0U291cmNlVG9rZW5pemVyLmpzOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IFJlbW92ZWQgZGVsZXRlZCBmaWxlcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2NyaXB0Q29udGVudFZpZXcuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZVRva2VuaXplci5qczogUmVtb3ZlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3ludGF4SGlnaGxpZ2h0ZXIuanM6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N5bnRheEhpZ2hsaWdodGluZ1N1cHBvcnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5zeW50YXhIaWdobGlnaHRTdHJpbmdBc0RvY3VtZW50RnJhZ21lbnQpOiBDbGVhcmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0Q29udGVudC5qczogUmVtb3ZlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5jc3M6IFJlbW92ZWQgbW9zdCBydWxlcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IpOiBDbGVhcmVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuZ2V0IHN0cmluZyk6IENsZWFyZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zZXQgc3RyaW5nKTogQ2xlYXJlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLmdldCBzZWxlY3RlZFRleHRSYW5nZSk6IENsZWFyZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zZXQgc2VsZWN0ZWRUZXh0UmFuZ2UpOiBDbGVhcmVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuZ2V0IG1pbWVUeXBlKTogQ2xlYXJlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnNldCBtaW1lVHlwZSk6IENsZWFyZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5nZXQgZXhlY3V0aW9uTGluZU51bWJlcik6IENsZWFyZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zZXQgZXhlY3V0aW9uTGluZU51bWJlcik6IENsZWFyZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5wZXJmb3JtU2VhcmNoLmJhdGNoU2VhcmNoKTogQ2xlYXJlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnBlcmZvcm1TZWFyY2gpOiBDbGVhcmVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuYWRkU2VhcmNoUmVzdWx0UmFuZ2UpOiBDbGVhcmVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuc2VhcmNoQ2xlYXJlZCk6IENsZWFyZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5yZXZlYWxQcmV2aW91c1NlYXJjaFJlc3VsdCk6IENsZWFyZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5yZXZlYWxOZXh0U2VhcmNoUmVzdWx0KTogQ2xlYXJlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnJldmVhbExpbmUpOiBDbGVhcmVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUudXBkYXRlTGF5b3V0KTogQ2xlYXJlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnNob3duKTogQ2xlYXJlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLmhpZGRlbik6IENsZWFyZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zZXRCcmVha3BvaW50SW5mb0ZvckxpbmUpOiBDbGVhcmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgc2Nyb2xsYWJsZUVsZW1lbnRzKTogUmVtb3ZlZC4KCjIwMTItMTEtMzAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBFeHRlbmQgQ29kZU1pcnJvciB0byBhbGxvdyBzeW50YXggaGlnaGxpZ2h0aW5nIHN0eWxlcyBiYXNlZCBvbiB0aGUgbW9kZS4KCiAgICAgICAgQnkgZGVmYXVsdCBDb2RlTWlycm9yIGRlZmluZXMgc3ludGF4IGhpZ2hsaWdodGluZyBzdHlsZXMgYmFzZWQgb24gdG9rZW4KICAgICAgICBvbmx5IGFuZCBzaGFyZWQgc3R5bGVzIGJldHdlZW4gbW9kZXMuIFRoaXMgbGltaXRpbmcgYW5kIGRvZXMgbm90IG1hdGNoCiAgICAgICAgd2hhdCB3ZSBoYXZlIGRvbmUgaW4gdGhlIFdlYiBJbnNwZWN0b3IuIFNvIHRoaXMgbW9kaWZpZXMgdGhlIFhNTCwgQ1NTCiAgICAgICAgYW5kIEphdmFTY3JpcHQgbW9kZXMgdG8gc3VwcGx5IHR3byBzdHlsZXMgZm9yIGVhY2ggdG9rZW4uIE9uZSBmb3IgdGhlCiAgICAgICAgdG9rZW4gYW5kIG9uZSB3aXRoIHRoZSBtb2RlIG5hbWUuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvZGVNaXJyb3JBZGRpdGlvbnMuanM6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEluY2x1ZGVkIENvZGVNaXJyb3JBZGRpdGlvbnMuanMuCgoyMDEyLTExLTMwICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRGVmaW5lIGV4dHJhIE1JTUUtdHlwZXMgZm9yIENvZGVNaXJyb3IncyBzeW50YXggaGlnaGxpZ2h0aW5nIG1vZGVzLgoKICAgICAgICBSZXZpZXdlZCBieSBKb24gSG9uZXljdXR0LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOiBEZWZpbmUgZXh0cmEgTUlNRS10eXBlcyBmb3IgWE1MLCBIVE1MLCBTVkcsCiAgICAgICAgSlNPTiBhbmQgSmF2YVNjcmlwdC4KCjIwMTItMTEtMzAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBVcGRhdGUgQ29kZU1pcnJvciBmcm9tIDMuMCBiZXRhIDIgdG8gMy4wIHJlbGVhc2UgY2FuZGlkYXRlIDIuCgogICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IEpvbiBIb25leWN1dHQuCgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZGVtaXJyb3IuY3NzOiBVcGRhdGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZGVtaXJyb3IuanM6IFVwZGF0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvaHRtbG1peGVkLmpzOiBVcGRhdGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2phdmFzY3JpcHQuanM6IFVwZGF0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvbWF0Y2hicmFja2V0cy5qczogVXBkYXRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci94bWwuanM6IFVwZGF0ZWQuCgoyMDEyLTExLTIyICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IGEgcGVybCBzY3JpcHQgZXJyb3IgdGhhdCB3YXMgcHJldmVudGluZyByZXNvdXJjZXMgZnJvbSBiZWluZwogICAgICAgIGNvcGllZCBvbiBwcm9kdWN0aW9uIGJ1aWxkcy4KCiAgICAgICAgUGVybCB0aG91Z2h0IHRoZSBbXHQgXSB0aGF0IGZvbGxvd2VkICR0YWdFeHByZXNzaW9uIG1lYW50IHRoYXQKICAgICAgICB0YWdFeHByZXNzaW9uIHNob3VsZCBiZSBAdGFnRXhwcmVzc2lvbi4KCiAgICAgICAgKiBTY3JpcHRzL2NvbWJpbmUtcmVzb3VyY2VzLnBsOgogICAgICAgIChjb25jYXRpbmF0ZUZpbGVzKTogU3BsaXQgdGhlIHJlcGxhY2VtZW50RXhwcmVzc2lvbiBzdHJpbmcgaW50byBwYXJ0cwogICAgICAgIGFuZCBjb25jYXQgaXQgdG8gcHJldmVudCB0aGlzLiBGaXggYSB0eXBvIHRvby4KCjIwMTItMTEtMTggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBJbmNsdWRlIENvZGVNaXJyb3IgaW4gdGhlIFdlYiBJbnNwZWN0b3IuCgogICAgICAgIFRoaXMgYWxzbyB0ZWFjaGVzIHRoZSBzY3JpcHRzIHdlIHVzZSB0byBjb3B5IHRoZSBDb2RlTWlycm9yIHJlc291cmNlcyBhbmQgc2tpcCB0aGVtCiAgICAgICAgd2hlbiB3ZSBjb25jYXRlbmF0ZSBvdXIgc2NyaXB0cy9zdHlsZXMuCgogICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IEFudG9pbmUgUXVpbnQuCgogICAgICAgICogU2NyaXB0cy9jb21iaW5lLXJlc291cmNlcy5wbDoKICAgICAgICAoY29uY2F0aW5hdGVGaWxlcyk6IFNraXAgRXh0ZXJuYWwgZmlsZXMuIFNtYXJ0bHkgcmVwbGFjZSB0aGUgZmlyc3QgY29uY2F0ZW5hdGVkIGZpbGUncyB0YWcKICAgICAgICBzbyB3ZSBkb24ndCBtaXggdGhlIG9yZGVyIG9mIHN0eWxlIGFuZCBzY3JpcHQgbG9hZGluZy4KICAgICAgICAqIFNjcmlwdHMvY29weS11c2VyLWludGVyZmFjZS1yZXNvdXJjZXMuc2g6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZWQgQ29kZU1pcnJvciBmaWxlcy4KCjIwMTItMTEtMTggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgQ29kZU1pcnJvciB0byB0aGUgV2ViIEluc3BlY3Rvci4KCiAgICAgICAgT3BlbiBTb3VyY2UgU29mdHdhcmUgdXNlIGFwcHJvdmVkIGJ5IEpveWNlIENob3cgb24gMTEvMTYvMjAxMi4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzMxNDMwOTQ+IEVkaXQtbW9kZSBmb3IgcmVzb3VyY2VzIChsb2NhbCBzdWJzdGF0aW9uIG9mIHJlc291cmNlcykgKDE2NDQwKQoKICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBBbnRvaW5lIFF1aW50LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9MSUNFTlNFOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9yLmNzczogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29kZW1pcnJvci5qczogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY3NzLmpzOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9odG1sbWl4ZWQuanM6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2phdmFzY3JpcHQuanM6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL21hdGNoYnJhY2tldHMuanM6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL292ZXJsYXkuanM6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3J1bm1vZGUuanM6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3NlYXJjaGN1cnNvci5qczogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IveG1sLmpzOiBBZGRlZC4KCjIwMTItMTEtMTcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBIaWRlIHRoZSB0b29sYmFyIGxhYmVscyBpZiB0aGVyZSBpc24ndCBlbm91Z2ggcm9vbSB0byBzaG93IHRoZW0uCgogICAgICAgIFJldmlld2VkIGJ5IEJyYWR5IEVpZHNvbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0J1dHRvblRvb2xiYXJJdGVtLmNzczoKICAgICAgICAoLnRvb2xiYXIuY29sbGFwc2VkIC5pdGVtLmJ1dHRvbiA+IC5sYWJlbCk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IEFkZGVkIGV2ZW50IGxpc3RlbmVyIGZvciB3aW5kb3cgcmVzaXplLgogICAgICAgIChXZWJJbnNwZWN0b3IuX3dpbmRvd1Jlc2l6ZWQpOiBBZGRlZC4gVXBkYXRlIHRoZSB0b29sYmFyIGxheW91dC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVG9vbGJhci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRvb2xiYXIucHJvdG90eXBlLnNldCBkaXNwbGF5TW9kZSk6IFVwZGF0ZSB0aGUgdG9vbGJhciBsYXlvdXQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Ub29sYmFyLnByb3RvdHlwZS5zZXQgc2l6ZU1vZGUpOiBEaXR0by4KCjIwMTItMTEtMTcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBLZWVwIHRvb2xiYXIgaXRlbXMgaW4gY29uc3RhbnQgcG9zaXRpb25zIGFzIGl0ZW1zIGFyZSBhZGRlZCBvciByZW1vdmVkLgoKICAgICAgICBUaGlzIGtlZXBzIGNlbnRlcmVkIGl0ZW1zIGluIHRoZSBjZW50ZXIgYW5kIGFkZHMgdGhlIGl0ZW1zIG9uIHRoZSByaWdodCBpbiByZXZlcnNlCiAgICAgICAgb3JkZXIgc2luY2UgcmlnaHQgbW9zdCBpdGVtcyBhcmUgbW9yZSBzdGFibGUgYXMgY29udGV4dCBjaGFuZ2VzLiBBbHNvIHZlcnRpY2FsbHkgc3RhY2sKICAgICAgICB0aGUgY2xvc2UgYW5kIHVuZG9jayBidXR0b24gaWYgdGhlIHRvb2xiYXIgaXMgdGFsbCBlbm91Z2ggdG8gZml0IHRoZW0uCgogICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9sVG9vbGJhckl0ZW0uY3NzOgogICAgICAgICgudG9vbGJhciAuaXRlbS5jb250cm9sKToKICAgICAgICAoLnRvb2xiYXIuc21hbGwtc2l6ZSAuaXRlbS5jb250cm9sKToKICAgICAgICAoLnRvb2xiYXIuaWNvbi1vbmx5IC5pdGVtLmNvbnRyb2wpOgogICAgICAgICgudG9vbGJhciAuaXRlbS5jb250cm9sOmhvdmVyKToKICAgICAgICAoLnRvb2xiYXIgLml0ZW0uY29udHJvbDphY3RpdmUpOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IFVzZSBhZGRUb29sYmFySXRlbSBpbnN0ZWFkIG9mIGFkZE5hdmlnYXRpb25JdGVtLiBBZGQgdGhlCiAgICAgICAgZGV0YWlsIHNpZGViYXIgaXRlbXMgaW4gcmV2ZXJzZSBvcmRlci4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvbkJhci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25CYXIucHJvdG90eXBlLmFkZE5hdmlnYXRpb25JdGVtKTogQWRkZWQgcGFyZW50RWxlbWVudCBhcmd1bWVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25CYXIucHJvdG90eXBlLmluc2VydE5hdmlnYXRpb25JdGVtKTogQWRkZWQgcGFyZW50RWxlbWVudCBhcmd1bWVudC4KICAgICAgICBVc2UgdGhlIG5leHRTaWJsaW5nIG9ubHkgaWYgaXQgaXMgaW4gdGhlIHNhbWUgcGFyZW50IGVsZW1lbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uQmFyLnByb3RvdHlwZS5yZW1vdmVOYXZpZ2F0aW9uSXRlbSk6IFVzZSByZW1vdmUgdG8gcmVtb3ZlIHRoZSBlbGVtZW50LgogICAgICAgICogVXNlckludGVyZmFjZS9Ub29sYmFyLmNzczoKICAgICAgICAoLnRvb2xiYXIgLmNvbnRyb2wtc2VjdGlvbik6IEFkZGVkLgogICAgICAgICgudG9vbGJhci5sYWJlbC1vbmx5IC5jb250cm9sLXNlY3Rpb24pOiBBZGRlZC4KICAgICAgICAoLnRvb2xiYXIgLml0ZW0tc2VjdGlvbik6IEFkZGVkLgogICAgICAgICgudG9vbGJhciAuaXRlbS1zZWN0aW9uOm5vdCguY2VudGVyKSk6IEFkZGVkLgogICAgICAgICgudG9vbGJhciAuaXRlbS1zZWN0aW9uLmxlZnQpOiBBZGRlZC4KICAgICAgICAoLnRvb2xiYXIgLml0ZW0tc2VjdGlvbi5jZW50ZXIpOiBBZGRlZC4KICAgICAgICAoLnRvb2xiYXIgLml0ZW0tc2VjdGlvbi5yaWdodCk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9Ub29sYmFyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVG9vbGJhcik6IENyZWF0ZSB0aGUgZm91ciBzZWN0aW9ucy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRvb2xiYXIucHJvdG90eXBlLmFkZFRvb2xiYXJJdGVtKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1V0aWxpdGllcy5qczoKICAgICAgICAoRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlKTogQWRkZWQgb25seSBpZiB0aGUgZW5naW5lIGRvZXMgbm90IGhhdmUgaXQuIFRoaXMgaXMgbmVlZGVkCiAgICAgICAgZm9yIGlBZCBQcm9kdWNlciwgd2hpY2ggdXNlcyBhbiBvbGRlciBXZWJLaXQuCgoyMDEyLTExLTE3ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQ2hhbmdlICIubmF2aWdhdGlvbi1iYXIgPiAuaXRlbSIgYW5kICIudG9vbGJhciA+IC5pdGVtIiBzZWxlY3RvcnMgaW50byAiLm5hdmlnYXRpb24tYmFyIC5pdGVtIgogICAgICAgIGFuZCAiLnRvb2xiYXIgLml0ZW0iIHNvIHdlIGNhbiBoYXZlIGludGVybWVkaWFyeSBlbGVtZW50cyBiZXR3ZWVuIHRoZSBiYXIgYW5kIGl0ZW0uCgogICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9BY3RpdmF0ZUJ1dHRvbk5hdmlnYXRpb25JdGVtLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQWN0aXZhdGVCdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuZ2VuZXJhdGVTdHlsZVRleHQpOgogICAgICAgICogVXNlckludGVyZmFjZS9CdXR0b25OYXZpZ2F0aW9uSXRlbS5jc3M6CiAgICAgICAgKC5uYXZpZ2F0aW9uLWJhciAuaXRlbS5idXR0b24pOgogICAgICAgICgubmF2aWdhdGlvbi1iYXIgLml0ZW0uYnV0dG9uID4gLmdseXBoKToKICAgICAgICAoYm9keS53aW5kb3ctaW5hY3RpdmUgLm5hdmlnYXRpb24tYmFyIC5pdGVtLmJ1dHRvbjpub3QoLnN1cHByZXNzLWVtYm9zcykgPiAuZ2x5cGgpOgogICAgICAgICgubmF2aWdhdGlvbi1iYXIgLml0ZW0uYnV0dG9uLmRpc2FibGVkID4gLmdseXBoKToKICAgICAgICAoYm9keS53aW5kb3ctaW5hY3RpdmUgLm5hdmlnYXRpb24tYmFyIC5pdGVtLmJ1dHRvbi5kaXNhYmxlZDpub3QoLnN1cHByZXNzLWVtYm9zcykgPiAuZ2x5cGgpOgogICAgICAgICgubmF2aWdhdGlvbi1iYXIgLml0ZW0uYnV0dG9uLnN1cHByZXNzLWVtYm9zcyA+IC5nbHlwaCk6CiAgICAgICAgKC5uYXZpZ2F0aW9uLWJhciAuaXRlbS5idXR0b24uc3VwcHJlc3MtZW1ib3NzOmFjdGl2ZSA+IC5nbHlwaCk6CiAgICAgICAgKC5uYXZpZ2F0aW9uLWJhciAuaXRlbS5idXR0b24uc3VwcHJlc3MtZW1ib3NzLmRpc2FibGVkID4gLmdseXBoKToKICAgICAgICAoLm5hdmlnYXRpb24tYmFyIC5pdGVtLmJ1dHRvbjpub3QoLmRpc2FibGVkKTpub3QoLnJhZGlvKTpub3QoLnN1cHByZXNzLWJlemVsKTphY3RpdmUpOgogICAgICAgICogVXNlckludGVyZmFjZS9CdXR0b25OYXZpZ2F0aW9uSXRlbS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkJ1dHRvbk5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5nZW5lcmF0ZVN0eWxlVGV4dCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0J1dHRvblRvb2xiYXJJdGVtLmNzczoKICAgICAgICAoLnRvb2xiYXIgLml0ZW0uYnV0dG9uKToKICAgICAgICAoLnRvb2xiYXIuaWNvbi1hbmQtbGFiZWwtdmVydGljYWwgLml0ZW0uYnV0dG9uKToKICAgICAgICAoLnRvb2xiYXIuaWNvbi1hbmQtbGFiZWwtaG9yaXpvbnRhbCAuaXRlbS5idXR0b24pOgogICAgICAgICgudG9vbGJhciAuaXRlbS5idXR0b24gPiAuZ2x5cGgpOgogICAgICAgICgudG9vbGJhci5zbWFsbC1zaXplIC5pdGVtLmJ1dHRvbiA+IC5nbHlwaCk6CiAgICAgICAgKC50b29sYmFyLmxhYmVsLW9ubHkgLml0ZW0uYnV0dG9uID4gLmdseXBoKToKICAgICAgICAoLnRvb2xiYXIgLml0ZW0uYnV0dG9uID4gLmxhYmVsKToKICAgICAgICAoLnRvb2xiYXIubGFiZWwtb25seSAuaXRlbS5hY3RpdmF0ZS5idXR0b24uYWN0aXZhdGVkID4gLmxhYmVsKToKICAgICAgICAoLnRvb2xiYXIuaWNvbi1hbmQtbGFiZWwtaG9yaXpvbnRhbCAuaXRlbS5idXR0b24gPiAubGFiZWwpOgogICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9sVG9vbGJhckl0ZW0uY3NzOgogICAgICAgICgudG9vbGJhciAuaXRlbS5jb250cm9sKToKICAgICAgICAoLnRvb2xiYXIgLml0ZW0uY29udHJvbDpob3Zlcik6CiAgICAgICAgKC50b29sYmFyIC5pdGVtLmNvbnRyb2w6YWN0aXZlKToKICAgICAgICAoLnRvb2xiYXIgLml0ZW0uY29udHJvbCA+IC5nbHlwaCk6CiAgICAgICAgKGJvZHkud2luZG93LWluYWN0aXZlIC50b29sYmFyIC5pdGVtLmNvbnRyb2wpOgogICAgICAgIChib2R5LndpbmRvdy1pbmFjdGl2ZSAudG9vbGJhciAuaXRlbS5jb250cm9sLmRpc2FibGVkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGl2aWRlck5hdmlnYXRpb25JdGVtLmNzczoKICAgICAgICAoLm5hdmlnYXRpb24tYmFyIC5pdGVtLmRpdmlkZXIpOgogICAgICAgICogVXNlckludGVyZmFjZS9GbGV4aWJsZVNwYWNlTmF2aWdhdGlvbkl0ZW0uY3NzOgogICAgICAgICgudG9vbGJhciAuaXRlbS5mbGV4aWJsZS1zcGFjZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05hdmlnYXRpb25CYXIuY3NzOgogICAgICAgICgubmF2aWdhdGlvbi1iYXIgLml0ZW0pOgogICAgICAgICogVXNlckludGVyZmFjZS9SYWRpb0J1dHRvbk5hdmlnYXRpb25JdGVtLmNzczoKICAgICAgICAoLm5hdmlnYXRpb24tYmFyIC5pdGVtLnJhZGlvLmJ1dHRvbik6CiAgICAgICAgKC5uYXZpZ2F0aW9uLWJhci5jb2xsYXBzZWQgLml0ZW0ucmFkaW8uYnV0dG9uKToKICAgICAgICAoLm5hdmlnYXRpb24tYmFyIC5pdGVtLnJhZGlvLmJ1dHRvbi5zZWxlY3RlZCk6CiAgICAgICAgKC5uYXZpZ2F0aW9uLWJhci5jb2xsYXBzZWQgLml0ZW0ucmFkaW8uYnV0dG9uLnNlbGVjdGVkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmFkaW9CdXR0b25OYXZpZ2F0aW9uSXRlbS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJhZGlvQnV0dG9uTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLmdlbmVyYXRlU3R5bGVUZXh0KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVG9vbGJhci5jc3M6CiAgICAgICAgKC50b29sYmFyIC5jb250cm9sLXNlY3Rpb24pOgoKMjAxMi0xMS0xNyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgdGhlIGNsb3NlIGFuZCB1bmRvY2sgYnV0dG9ucyBpbiB0aGUgZG9ja2VkIFdlYiBJbnNwZWN0b3IgYmV0dGVyIG1hdGNoCiAgICAgICAgdGhlIHN0eWxlIG9mIHRoZSB1bmRvY2sgYnV0dG9uIGFuZCB0aGUgaVR1bmVzIDExIG1pbmktcGxheWVyIGNvbnRyb2xzLgoKICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udHJvbFRvb2xiYXJJdGVtLmNzczoKICAgICAgICAoLnRvb2xiYXIgPiAuaXRlbS5jb250cm9sKTogNTAlIG9wYWNpdHkuCiAgICAgICAgKC50b29sYmFyID4gLml0ZW0uY29udHJvbDpob3Zlcik6IEFkZGVkLiA5MCUgb3BhY2l0eS4KICAgICAgICAoLnRvb2xiYXIgPiAuaXRlbS5jb250cm9sOmFjdGl2ZSk6IEFkZGVkLiAxMDAlIG9wYWNpdHkuCiAgICAgICAgKGJvZHkud2luZG93LWluYWN0aXZlIC50b29sYmFyID4gLml0ZW0uY29udHJvbCk6IDM1JSBvcGFjaXR5LgogICAgICAgICgudG9vbGJhciA+IC5pdGVtLmNvbnRyb2wuZGlzYWJsZWQpOiAzNSUgb3BhY2l0eS4KICAgICAgICAoYm9keS53aW5kb3ctaW5hY3RpdmUgLnRvb2xiYXIgPiAuaXRlbS5jb250cm9sLmRpc2FibGVkKTogMjAlIG9wYWNpdHkuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9VbmRvY2sucGRmOiBSb3VuZGVkIHRoZSBjb3JuZXJzIGEgYml0LgoKMjAxMi0xMS0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFJlbmFtZWQgdGhlIEJyZWFrcG9pbnQgc2lkZWJhciB0byBEZWJ1Z2dlciBhbmQgZ2l2ZSBpdCBhIG5ldyBpY29uLgoKICAgICAgICBBbHNvIHJlbW92ZWQgdW51c2VkIGltYWdlcyBmcm9tIHByZXZpb3VzIHNpZGViYXIgcGFuZWxzLgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiBVcGRhdGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9EZWJ1Z2dlclNpZGViYXJQYW5lbC5qczogUmVuYW1lZCBmcm9tIFdlYkluc3BlY3Rvci9Vc2VySW50ZXJmYWNlL0JyZWFrcG9pbnRTaWRlYmFyUGFuZWwuanMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclNpZGViYXJQYW5lbCk6IFVwZGF0ZWQgdGhlIGtleWJvYXJkIHNob3J0Y3V0IHRvIGJlIENvbnRyb2wtMy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05hdmlnYXRpb25JdGVtQnJlYWtwb2ludC5wZGY6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OYXZpZ2F0aW9uSXRlbUJ1Zy5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmF2aWdhdGlvbkl0ZW1GdW5jdGlvbi5wZGY6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OYXZpZ2F0aW9uSXRlbVRocmVhZHMucGRmOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbnN0cnVtZW50U2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zdHJ1bWVudFNpZGViYXJQYW5lbCk6IFVwZGF0ZWQgdGhlIGtleWJvYXJkIHNob3J0Y3V0IHRvIGJlIENvbnRyb2wtMi4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBSZW5hbWVkIEJyZWFrcG9pbnRTaWRlYmFyUGFuZWwgdG8gRGVidWdnZXJTaWRlYmFyUGFuZWwuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5fZGVidWdnZXJEaWRQYXVzZSk6IERpdHRvLgoKMjAxMi0xMS0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1lcmdlIHRoZSBEZWJ1ZyBzaWRlYmFyIHBhbmVsIGludG8gQnJlYWtwb2ludHMgc2lkZWJhciBwYW5lbC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnJlYWtwb2ludFNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRTaWRlYmFyUGFuZWwpOiBBZGRlZCBDYWxsRnJhbWVzRGlkQ2hhbmdlIGV2ZW50IGxpc3RlbmVyLiBDcmVhdGUgdGhlIGNvbnRlbnQgdHJlZQogICAgICAgIG91dGxpbmUgYW5kIHNlY3Rpb24gZm9yIHRoZSBDYWxsIFN0YWNrLgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludFNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2RlYnVnZ2VyQ2FsbEZyYW1lc0RpZENoYW5nZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludFNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3RyZWVFbGVtZW50U2VsZWN0ZWQpOiBTdXBwb3J0IENhbGxGcmFtZVRyZWVFbGVtZW50LgogICAgICAgICogVXNlckludGVyZmFjZS9EZWJ1Z1NpZGViYXJQYW5lbC5qczogUmVtb3ZlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBSZW1vdmVkIERlYnVnU2lkZWJhclBhbmVsLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IFJlbW92ZWQgRGVidWdTaWRlYmFyUGFuZWwuCiAgICAgICAgKFdlYkluc3BlY3Rvci5fZGVidWdnZXJEaWRQYXVzZSk6IFNob3cgdGhlIEJyZWFrcG9pbnRTaWRlYmFyUGFuZWwgaW5zdGVhZC4KCjIwMTItMTEtMTYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBQbGFjZSBicmVha3BvaW50cyBpbnRvIGEgc2VjdGlvbiBpbiBwcmVwYXJhdGlvbiBvZiBtZXJnaW5nIHRoZSBEZWJ1ZyBhbmQgQnJlYWtwb2ludHMgc2lkZWJhcnMuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0JyZWFrcG9pbnRTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50U2lkZWJhclBhbmVsKTogU3RvcmUgY29udGVudFRyZWVPdXRsaW5lIGFzIF9icmVha3BvaW50c0NvbnRlbnRUcmVlT3V0bGluZS4KICAgICAgICBNYWtlIGEgRGV0YWlsc1NlY3Rpb24gYW5kIHB1dCB0aGUgY29udGVudCB0cmVlIGluIGl0cyBvbmx5IHJvdy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9hZGRCcmVha3BvaW50KTogVXNlIF9icmVha3BvaW50c0NvbnRlbnRUcmVlT3V0bGluZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9zY3JpcHRzQ2xlYXJlZCk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludFNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2JyZWFrcG9pbnRSZW1vdmVkKTogRGl0dG8uCgoyMDEyLTExLTEzICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSBkcmFnZ2luZyB0aGUgV2ViIEluc3BlY3RvciB3aW5kb3cgaW4gdGhlIHRvb2xiYXIgbW92ZSB0aGUgd2luZG93LgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI2ODg1OTk+IFNob3VsZCBiZSBhYmxlIHRvIGRyYWcgdG8gbW92ZSBXZWIgSW5zcGVjdG9yIHdpbmRvdyBmcm9tIGVtcHR5IHBhcnRzIG9mIHRvb2xiYXIKCiAgICAgICAgUmV2aWV3ZWQgYnkgUmlja3kgTW9uZGVsbG8uCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IENoYW5nZWQgbW91c2Vkb3duIGV2ZW50IGxpc3RlbmVyIHRvIF90b29sYmFyTW91c2VEb3duLgogICAgICAgIChXZWJJbnNwZWN0b3IuX3Rvb2xiYXJNb3VzZURvd24pOiBBZGRlZC4gQ2FsbCBfbW92ZVdpbmRvd01vdXNlRG93biBvciBfZG9ja2VkUmVzaXplck1vdXNlRG93bi4KICAgICAgICAoV2ViSW5zcGVjdG9yLl9tb3ZlV2luZG93TW91c2VEb3duKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5fbW92ZVdpbmRvd01vdXNlRG93bi50b29sYmFyRHJhZyk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuX21vdmVXaW5kb3dNb3VzZURvd24udG9vbGJhckRyYWdFbmQpOiBBZGRlZC4KCjIwMTItMTEtMTMgIEplZmYgTWlsbGVyICA8amVmZm1AYXBwbGUuY29tPgoKICAgICAgICBSZWdlbmVyYXRlZCBsb2NhbGl6ZWRTdHJpbmdzLmpzLCB3aGljaCB3YXMgb3V0LW9mLWRhdGUuCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgoKMjAxMi0xMS0xMyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIERpc2FibGUgc3ViLXBpeGVsIGFudGlhbGlhc2luZyBpbiB0aGUgV2ViIEluc3BlY3RvciB0b29sYmFyIHdoZW4gaW4gd2luZG93IG1vZGUuCgogICAgICAgIFRoaXMgcG9ydGlvbiBvZiB0aGUgd2luZG93IGhhcyBubyBiYWNrZ3JvdW5kIChzaG93aW5nIHRoZSB3aW5kb3cgY2hyb21lKS4gU28gdGV4dCByZW5kZXJlZAogICAgICAgIGhlcmUgZG9lcyBub3QgbG9vayBnb29kIHdoZW4gc3ViLXBpeGVsIGFudGlhbGlhc2VkLgoKICAgICAgICBSZXZpZXdlZCBieSBBbnRvaW5lIFF1aW50LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVG9vbGJhci5jc3M6CiAgICAgICAgKGJvZHk6bm90KC5kb2NrZWQpIC50b29sYmFyKTogQWRkZWQuIFNldCAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZC4KCjIwMTItMTEtMTIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBEb24ndCBzaG93IHRoZSBkb2NrIGJ1dHRvbiBpbiB0aGUgdG9vbGJhciBub3cgdGhhdCBpdCBpcyBpbiB0aGUgd2luZG93IHRpdGxlIGJhci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3BlY3RvckZyb250ZW5kQVBJLmpzOgogICAgICAgIChJbnNwZWN0b3JGcm9udGVuZEFQSS5zZXREb2NraW5nVW5hdmFpbGFibGUpOiBFbXB0eSBzdHViIG5vdy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOiBDaGFuZ2VkIHRoZSBkb2NrIHRvZ2dsZSBpbnRvIGFuIHVuZG9jayBidXR0b24uCiAgICAgICAgKFdlYkluc3BlY3Rvci51cGRhdGVEb2NrZWRTdGF0ZSk6IFJlbW92ZWQgdXNlIG9mIGRvY2tUb2dnbGVCdXR0b25OYXZpZ2F0aW9uSXRlbS4KICAgICAgICBSZW1vdmVkIGNhbGwgdG8gX3VwZGF0ZURvY2tUb2dnbGVCdXR0b25WaXNpYmlsaXR5LgogICAgICAgIChXZWJJbnNwZWN0b3Iuc2V0RG9ja2luZ1VuYXZhaWxhYmxlKTogUmVtb3ZlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLl91cGRhdGVEb2NrVG9nZ2xlQnV0dG9uVmlzaWJpbGl0eSk6IFJlbW92ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5fdW5kb2NrKTogUmVuYW1lZCBmcm9tIF90b2dnbGVEb2NrZWRTdGF0ZS4gT25seSB1bmRvY2sgbm93LgogICAgICAgIChXZWJJbnNwZWN0b3IuX3VwZGF0ZURvY2tOYXZpZ2F0aW9uSXRlbXMpOiBVcGRhdGUgdW5kb2NrQnV0dG9uTmF2aWdhdGlvbkl0ZW0gdG9vLgoKMjAxMi0xMS0xMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEdpdmUgV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyIHRoZSBhYmlsaXR5IHRvIG5vdCBoYXZlIGJhY2sgYW5kIGZvcndhcmQgYnV0dG9ucy4KCiAgICAgICAgVGhpcyB3aWxsIGJlIHVzZWQgZm9yIHRoZSBDb250ZW50QnJvd3NlciBpbiB0aGUgcXVpY2sgY29uc29sZSBhcmVhLgoKICAgICAgICBSZXZpZXdlZCBieSBBbnRvaW5lIFF1aW50LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudEJyb3dzZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlcik6IEFkZGVkIGRpc2FibGVCYWNrRm9yd2FyZCBhcmd1bWVudC4gRG9uJ3QgY3JlYXRlIHRoZSBidXR0b25zCiAgICAgICAgb3Iga2V5Ym9hcmQgc2hvcnRjdXRzIGlmIGRpc2FibGVCYWNrRm9yd2FyZCBpcyB0cnVlLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIucHJvdG90eXBlLl91cGRhdGVCYWNrRm9yd2FyZEJ1dHRvbnMpOiBSZXR1cm4gZWFybHkgaWYgdGhlIGJ1dHRvbnMKICAgICAgICBkb24ndCBleGlzdCBhbmQgdGhlcmUgaXMgbm90aGluZyB0byB1cGRhdGUuCgoyMDEyLTExLTExICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IHNvbWUgZmxhc2hpbmcgd2hpbGUgc2Nyb2xsaW5nIHRoZSBXZWIgSW5zcGVjdG9yIHdoZW4gZG9ja2VkLgoKICAgICAgICBXaGVuIGRvY2tlZCB0aGUgdG9vbGJhciBpc24ndCB0cmFuc3BhcmVudCwgc28gd2UgY2FuIGhhdmUgYSBiYWNrZ3JvdW5kCiAgICAgICAgb24gdGhlIGJvZHkgd2hpY2ggZml4ZXMgdGhlIGZsYXNoaW5nLiBUaGlzIGlzbid0IGFuIGlzc3VlIGluIHdoZW4gdW5kb2NrZWQuCiAgICAgICAgVGhpcyBhbHNvIGlzbid0IGFuIGlzc3VlIHdpdGggYWNjZWxlcmF0ZWQgY29tcG9zdGluZywgd2hpY2ggd2Ugc2hvdWxkIHR1cm4KICAgICAgICBvbiBmb3IgdGhlIEluc3BlY3RvciBpbiA8cmRhcjovL3Byb2JsZW0vMTI2NzYyMjM+LgoKICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmNzczoKICAgICAgICAoYm9keS5kb2NrZWQpOiBTZXQgdGhlIGJhY2tncm91bmQtY29sb3IgdG8gd2hpdGUuCgoyMDEyLTExLTExICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IGFuIGV4Y2VwdGlvbiB0aGF0IHdhcyBjYXVzaW5nIHRoZSBXZWIgSW5zcGVjdG9yIHRvIGZhaWwgd2hlbiB0cnlpbmcgdG8gZGVidWcgYSBzY3JpcHQuCgogICAgICAgIFRoZSBmYWN0IHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCBhIHNjcmlwdCBpbiBhIGNhbGwgZnJhbWUgaXMgcmVhbGx5IGEgZGVlcGVyIGJ1Zy4gQnV0IHRoaXMKICAgICAgICBhdCBsZWFzdCBtYWtlcyB0aGluZ3MgZ3JhY2VmdWxseSBrZWVwIHdvcmtpbmcuIFRoZSBkZWVwZXIgaXNzdWUgaXMgPHJkYXI6Ly9wcm9ibGVtLzEyNjc5NDc1Pi4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyNjc2MzQ0PiBXZWIgSW5zcGVjdG9yIGdldHMgc3R1Y2sgdHJ5aW5nIHRvIGRlYnVnIGFuIGV4Y2VwdGlvbgoKICAgICAgICBSZXZpZXdlZCBieSBEZWFuIEphY2tzb24uCgogICAgICAgICogVXNlckludGVyZmFjZS9EZWJ1Z2dlck1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLmRlYnVnZ2VyRGlkUGF1c2UpOiBDb250aW51ZSBpZiB0aGUgU291cmNlQ29kZUxvY2F0aW9uCiAgICAgICAgZW5kZWQgdXAgYmVpbmcgbnVsbC4gVGhpcyBwcmV2ZW50cyBhbiBleGNlcHRpb24gbGF0ZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLl9zb3VyY2VDb2RlTG9jYXRpb25Gcm9tUGF5bG9hZCk6IFJldHVybiBudWxsIGlmCiAgICAgICAgdGhlIHNjcmlwdCB3YXMgbm90IGZvdW5kLgoKMjAxMi0xMS0xMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFJlbW92ZSB0aGUgTG9nIG5hdmlnYXRpb24gc2lkZWJhci4KCiAgICAgICAgQ3JlYXRlIGEgc2luZ2xlIExvZ0NvbnRlbnRWaWV3IHRvIGJlIHNob3duIGZvciB0aGUgY29uc29sZS4gUHJldmlvdXMgc2Vzc2lvbnMgYXJlIG5vdyBzaG93bgogICAgICAgIGlubGluZSBsaWtlIHRoZSBxdWljayBjb25zb2xlICh3aXRoIGEgZGl2aWRlciBiZXR3ZWVuIHRoZW0pLgoKICAgICAgICBUaGUgdWx0aW1hdGUgZ29hbCBoZXJlIGlzIHRvIG1lcmdlIHRoZSBxdWljayBjb25zb2xlIGFuZCB0aGUgZnVsbCBoZWlnaHQgY29uc29sZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgRGVhbiBKYWNrc29uLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczogVXBkYXRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zcGVjdG9yRnJvbnRlbmRBUEkuanM6CiAgICAgICAgKEluc3BlY3RvckZyb250ZW5kQVBJLnNob3dDb25zb2xlKTogQ2FsbCBXZWJJbnNwZWN0b3Iuc2hvd0NvbnNvbGVWaWV3LgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3KTogQWRkIGV2ZW50IGxpc3RlbmVycyB0aGF0IHdlcmUgaW4gTG9nU2lkZWJhclBhbmVsLgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLnNob3duKTogUmVtb3ZlZCBkaXNhYmxlZCBjaGVjay4KICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fc2Vzc2lvbnNDbGVhcmVkKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX3Nlc3Npb25TdGFydGVkKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX21lc3NhZ2VBZGRlZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9wcmV2aW91c01lc3NhZ2VSZXBlYXRDb3VudFVwZGF0ZWQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5faGFuZGxlQ29udGV4dE1lbnVFdmVudCk6IFJlbW92ZWQgZGlzYWJsZWQgY2hlY2suCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX2FjdGl2ZUxvZ0NsZWFyZWQpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fY2xlYXJMb2cpOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nU2lkZWJhclBhbmVsLmpzOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ1RyZWVFbGVtZW50KTogQ2hhbmdlICJDdXJyZW50IExvZyIgdG8gIkNvbnNvbGUiLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IFJlbW92ZWQgTG9nU2lkZWJhclBhbmVsLmpzLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IFJlbW92ZWQgTG9nU2lkZWJhclBhbmVsIHVzZS4gQ3JlYXRlIGEgQ29uc29sZSB0b29sYmFyIGJ1dHRvbi4KICAgICAgICBIYW5kbGUgdGhlIGxhc3QgY29udGVudCBjb29raWUgZm9yIHRoZSBjb25zb2xlLgogICAgICAgIChXZWJJbnNwZWN0b3Iuc2lkZWJhclBhbmVsRm9yUmVwcmVzZW50ZWRPYmplY3QpOiBSZXR1cm4gbnVsbCBmb3IgdGhlIGNvbnNvbGUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50QnJvd3NlclRyZWVFbGVtZW50Rm9yUmVwcmVzZW50ZWRPYmplY3QpOiBSZXR1cm4gdGhlIHNwZWNpYWwgdHJlZSBlbGVtZW50CiAgICAgICAgZm9yIHRoZSBjb25zb2xlLgogICAgICAgIChXZWJJbnNwZWN0b3Iuc2hvd0NvbnNvbGVWaWV3KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5fdXBkYXRlQ3VycmVudENvbnRlbnRWaWV3Q29va2llKTogU2V0IGEgc3BlY2lhbCBjb29raWUgZm9yIHRoZSBjb25zb2xlIHZpZXcuCgoyMDEyLTExLTExICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIHJlbG9hZCBhbmQgaW5zcGVjdCB0b29sYmFyIGJ1dHRvbnMuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTE4NzkwND4gUkVHUkVTU0lPTiAoU2FmYXJpIDYpOiBJbnNwZWN0IG5vZGUgYnV0dG9uIHNob3VsZCBhbHdheXMgYmUgYXZhaWxhYmxlCgogICAgICAgIFJldmlld2VkIGJ5IERlYW4gSmFja3Nvbi4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6IFVwZGF0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZUNvbnRlbnRWaWV3KTogUmVtb3ZlZCBfaW5zcGVjdE1vZGVCdXR0b25OYXZpZ2F0aW9uSXRlbS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lQ29udGVudFZpZXcucHJvdG90eXBlLmdldCBuYXZpZ2F0aW9uSXRlbXMpOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1JlbG9hZC5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IENyZWF0ZSB0aGUgcmVsb2FkIGFuZCBpbnNwZWN0IHRvb2xiYXIgYnV0dG9ucy4KICAgICAgICAoV2ViSW5zcGVjdG9yLl9pbnNwZWN0TW9kZVN0YXRlQ2hhbmdlZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuX3RvZ2dsZUluc3BlY3RNb2RlKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5fcmVsb2FkUGFnZUNsaWNrZWQpOiBBZGRlZC4KCjIwMTItMTEtMTEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBVc2Ugc3RpY2t5IHBvc2l0aW9uaW5nIGZvciB0aGUgc2VjdGlvbiBoZWFkZXJzIGluIHRoZSBEZXRhaWxzIHNpZGViYXIuCgogICAgICAgIFRvIG1ha2UgdGhpcyB3b3JrIEkgaGFkIHRvIGR5bmFtaWNhbGx5IGdlbmVyYXRlIHN0eWxlIHJ1bGVzIGJhc2VkIG9uIHRoZQogICAgICAgIGN1cnJlbnQgaGVpZ2h0IG9mIHRoZSB0b29sYmFyIChub3cgdGhhdCBpdCBpcyBkeW5hbWljKS4gS2luZCBvZiBncm9zcywgYnV0CiAgICAgICAgdGhlIGVuZCByZXN1bHQgaXMgcmVhbGx5IG5pY2UhCgogICAgICAgIFdoaWxlIEkgd2FzIGF0IGl0IEkgYnVtcGVkIHRoZSBoZWlnaHQgb2YgdGhlIGhlYWRlcnMgdG8gMjNweCB0byBtYXRjaCB0aGUKICAgICAgICBvdGhlciBiYXJzLiBUaGF0IHdheSB3aGVuIHRoZXkgYXJlIGF0IHRoZSB0b3AgZXZlcnl0aGluZyBsaW5lcyB1cCBuaWNlbHkuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjYxMTU0Nz4gQ29uc2lkZXIgdXNpbmcgc3RpY2t5IHBvc2l0aW9uaW5nIGZvciBzaWRlYmFyIHNlY3Rpb24gaGVhZGVycwoKICAgICAgICBSZXZpZXdlZCBieSBEZWFuIEphY2tzb24uCgogICAgICAgICogVXNlckludGVyZmFjZS9EZXRhaWxzU2VjdGlvbi5jc3M6CiAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24gPiAuaGVhZGVyKTogQnVtcCB0aGUgaGVpZ2h0IGFuZCBwYWRkaW5nIHVwLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IudXBkYXRlRG9ja2VkU3RhdGUpOiBDYWxsIF91cGRhdGVTdGlja3lQb3N0aW9uU3R5bGVzLgogICAgICAgIChXZWJJbnNwZWN0b3IuX3VwZGF0ZVN0aWNreVBvc3Rpb25TdHlsZXMpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLl90b29sYmFyRGlzcGxheU1vZGVEaWRDaGFuZ2UpOiBDYWxsIF91cGRhdGVTdGlja3lQb3N0aW9uU3R5bGVzLgogICAgICAgIChXZWJJbnNwZWN0b3IuX3Rvb2xiYXJTaXplTW9kZURpZENoYW5nZSk6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9VdGlsaXRpZXMuanM6CiAgICAgICAgKEVsZW1lbnQucHJvdG90eXBlLnRvdGFsT2Zmc2V0TGVmdCk6IFVzZSBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZm9yIGJldHRlciByZXN1bHRzLgogICAgICAgIChFbGVtZW50LnByb3RvdHlwZS50b3RhbE9mZnNldFRvcCk6IERpdHRvLgoKMjAxMi0xMS0xMCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIERvbid0IGRlc2VsZWN0IHRoZSBzZWxlY3RlZCByb3cgd2hlbiByZWZyZXNoaW5nIHRoZSBOZXR3b3JrIGRhdGEgZ3JpZC4KCiAgICAgICAgVGhpcyBwcmVzZXJ2ZXMgc2VsZWN0aW9uIGR1cmluZyByZWZyZXNoZXMgdGhhdCBoYXBwZW4gd2hpbGUgbG9hZGluZyB0aGUgcGFnZS4KICAgICAgICBJdCBhbHNvIHByZXZlbnRzIG5vdGlmeWluZyB0aGF0IHRoZSBzZWxlY3Rpb25QYXRoQ29tcG9uZW50cyBjaGFuZ2VkIHdoaWNoIGNhdXNlcwogICAgICAgIHRoZSBkZXRhaWxzIHNpZGViYXIgdG8gcmVmcmVzaCBhbmQgaGlkZSBiZWNhdXNlIHRoZXJlIHdhcyBubyBzZWxlY3Rpb24uCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjYwMzc0ND4gRGV0YWlscyBzaWRlYmFyIGF1dG8tY2xvc2VzIHdoaWxlIHRyeWluZyB0byByZWFkIGl0IG9uIGEgbG9hZGluZyBwYWdlCgogICAgICAgIFJldmlld2VkIGJ5IERlYW4gSmFja3Nvbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lc0NvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcucHJvdG90eXBlLl9zZWxlY3RlZE5vZGVDaGFuZ2VkKTogUmV0dXJuIGVhcmx5IGlmIF9pZ25vcmVTZWxlY3Rpb25FdmVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fdXBkYXRlUGVuZGluZ1JlY29yZHNXaXRoTmV3Qm91bmRzKTogU2F2ZSBhbmQgcmVzdG9yZSB0aGUKICAgICAgICBzZWxlY3RlZE5vZGUgaWYgaXQgd2FzIHJlZnJlc2hlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fc29ydEN1cnJlbnREYXRhR3JpZCk6IFNldCBfaWdub3JlU2VsZWN0aW9uRXZlbnQgd2hpbGUKICAgICAgICB1cGRhdGluZyB0aGUgZGF0YSBncmlkLgoKMjAxMi0xMS0xMCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIERvbid0IGNyb3NzZmFkZSB0aGUgaW5kZXRlcm1pbmF0ZSBwcm9ncmVzcyBzcGlubmVyLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI2NzY0MDc+IFdlYiBJbnNwZWN0b3Igc2hvdWxkbid0IGNyb3NzLWZhZGUgaXRzICJkaXNjcmV0ZSIgc3Bpbm5lcgoKICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5kZXRlcm1pbmF0ZVByb2dyZXNzU3Bpbm5lci5jc3M6CiAgICAgICAgKC5pbmRldGVybWluYXRlLXByb2dyZXNzLXNwaW5uZXIpOiBVc2UgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBzdGVwLXN0YXJ0LgoKMjAxMi0xMS0xMCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFByZXZlbnQgdGhlIGRldGFpbHMgc2lkZWJhciBmcm9tIGV2ZXIgYmVpbmcgc2hvd24gZW1wdHkuCgogICAgICAgIFRoaXMgcmVtb3ZlcyB0aGUgc2V0dGluZyB0byBhdXRvIGhpZGUgd2hlbiBlbXB0eSBhbmQgYWx3YXlzIGhpZGVzIHdoZW4gZW1wdHkuCgogICAgICAgIFJldmlld2VkIGJ5IEFudG9pbmUgUXVpbnQuCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IFJlbW92ZWQgX2RldGFpbHNTaWRlYmFyQXV0b0hpZGVXaGVuRW1wdHlTZXR0aW5nIGFuZCBzdGFydCB0aGUKICAgICAgICBkZXRhaWxzIHNpZGViYXIgb3V0IGluIHRoZSBjb2xsYXBzZWQgc3RhdGUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5fc2lkZWJhckNvbGxhcHNlZFN0YXRlRGlkQ2hhbmdlKTogRG9uJ3QgcmVtZW1iZXIgdGhlIGNvbGxhcHNlZCBzdGF0ZSBpZgogICAgICAgIF9pZ25vcmVEZXRhaWxzU2lkZWJhclBhbmVsQ29sbGFwc2VkRXZlbnQgaXMgc2V0LiBUaGlzIGlzIGZvciBpZ25vcmluZyBwcm9ncmFtYXRpYyBjaGFuZ2VzLgogICAgICAgIChXZWJJbnNwZWN0b3IuX2NvbnRlbnRCcm93c2VyUmVwcmVzZW50ZWRPYmplY3RzRGlkQ2hhbmdlKTogUmVtb3ZlZCBfZGV0YWlsc1NpZGViYXJBdXRvSGlkZVdoZW5FbXB0eVNldHRpbmcuCgoyMDEyLTExLTEwICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRG9uJ3QgZHJhdyBhIGJhY2tncm91bmQgb24gdGhlIHRvb2xiYXIgd2hlbiB0aGUgd2luZG93IGlzIGluYWN0aXZlLgoKICAgICAgICBXZSB3YW50IHRvIHNob3cgdGhyb3VnaCB0byB0aGUgd2luZG93IGNocm9tZSBpbiB0aGlzIGNhc2UgdG9vLgoKICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVG9vbGJhci5jc3M6CiAgICAgICAgKGJvZHkud2luZG93LWluYWN0aXZlIC50b29sYmFyKTogUmVtb3ZlZCBiYWNrZ3JvdW5kLWltYWdlLgoKMjAxMi0xMS0xMCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1vdmUgdGhlIHRpbWUgYmFyIHRvIHRoZSBib3R0b20gc28gdGhlIHNpZGViYXIgZWxlbWVudHMgYWxpZ24gd2l0aCB0aGUgdGltZWxpbmVzIGFnYWluLgoKICAgICAgICBOb3cgdGhhdCB0aGUgc2lkZWJhcnMgZG9uJ3QgaGF2ZSBhIG5hdmlnYXRpb24gYmFyLCBldmVyeXRoaW5nIGlzIHNoaWZ0ZWQgaGlnaGVyIGluIHRoZSBzaWRlYmFyLgogICAgICAgIFRoaXMgY2F1c2VkIGEgbWlzYWxpZ25tZW50IGluIHRoZSB0aW1lbGluZSB2aWV3LiBUaGUgYmVzdCBzb2x1dGlvbiBpcyB0byBtb3ZlIHRoZSB0aW1lIGJhciB0byB0aGUKICAgICAgICBib3R0b20gc28gdGhlIHRpbWVsaW5lIG92ZXJ2aWV3cyBsaW5lIHVwIHdpdGggdGhlIHRyZWUgZWxlbWVudHMgaW4gdGhlIHNpZGViYXIgYWdhaW4uIFRoZSBQcm9maWxlcwogICAgICAgIHNpZGViYXIgaGVhZGVyIGRvZXMgbm90IGFsaWduIHdpdGggdGhlIGRhdGEgZ3JpZCBoZWFkZXIgYW55bW9yZSwgYnV0IHRoYXQgZG9lcyBub3QgbWF0dGVyIGFzIG11Y2guCiAgICAgICAgTWF5YmUgbGF0ZXIgd2UgY2FuIGFkZCBhIHN1bW1hcnkgb3Igem9vbSBzbGlkZXIgdG8gc2lkZWJhciwgc2hpZnRpbmcgUHJvZmlsZXMgZG93biBhZ2Fpbi4KCiAgICAgICAgVG8gbWFrZSB0aGUgdGltZSBiYXIgbm90IGJlIGFzIGRpc3RyYWN0aW5nIHRoZSBiYWNrZ3JvdW5kIGlzIG5vdyB3aGl0ZSBhbmQgdGhlIG1hcmtlcnMgZmFkZSBvdXQuCiAgICAgICAgVGhlIGZhZGUgcG9pbnRzIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGdyYXBoLCB1cCBmb3IgdGhlIG92ZXJ2aWV3IGFuZCBkb3duIGZvciB0aGUgbmV0d29yayBncmFwaC4KICAgICAgICBUaGlzIHByZXZlbnRzIHRoZSBsaW5lcyBmcm9tIHRvdWNoaW5nIHNpbmNlIHRoZSB0d28gdGltZSBiYXJzIGFyZSBub3cgbmV4dCB0byBlYWNoIG90aGVyLgoKICAgICAgICBSZXZpZXdlZCBieSBSaWNreSBNb25kZWxsby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05ldHdvcmtEYXRhR3JpZC5jc3M6CiAgICAgICAgKC5uZXR3b3JrLXRpbWVsaW5lLWRlY29yYXRpb25zID4gLmhlYWRlcik6CiAgICAgICAgKC5uZXR3b3JrLXRpbWVsaW5lLWRlY29yYXRpb25zID4gLmhlYWRlciA+IC5kaXZpZGVyKToKICAgICAgICAoLm5ldHdvcmstdGltZWxpbmUtZGVjb3JhdGlvbnM6bm90KC5zb3J0LWFjdGl2ZSkgPiAuaGVhZGVyID4gLmRpdmlkZXI6bGFzdC1jaGlsZCk6CiAgICAgICAgKC5uZXR3b3JrLXRpbWVsaW5lLWRlY29yYXRpb25zID4gLmhlYWRlciA+IC5kaXZpZGVyID4gLmxhYmVsKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVEZWNvcmF0aW9ucy5jc3M6CiAgICAgICAgKC50aW1lbGluZS1kZWNvcmF0aW9ucyA+IC5oZWFkZXIpOgogICAgICAgICgudGltZWxpbmUtZGVjb3JhdGlvbnMgPiAuaGVhZGVyID4gLmRpdmlkZXIpOgogICAgICAgICgudGltZWxpbmUtZGVjb3JhdGlvbnMgPiAuaGVhZGVyID4gLmRpdmlkZXI6bGFzdC1jaGlsZCk6CiAgICAgICAgKC50aW1lbGluZS1kZWNvcmF0aW9ucyA+IC5oZWFkZXIgPiAuZGl2aWRlciA+IC5sYWJlbCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lT3ZlcnZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU92ZXJ2aWV3KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVG9vbGJhci5jc3M6CgoyMDEyLTExLTEwICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWVyZ2UgdGhlIFN0b3JhZ2Ugc2lkZWJhciBpbnRvIHRoZSBSZXNvdXJjZXMgc2lkZWJhci4KCiAgICAgICAgTW9zdCBvZiB0aGlzIGlzIGp1c3QgY29waWVkIGZyb20gU3RvcmFnZVNpZGViYXJQYW5lbCB3aXRoIHRyaXZpYWwgdHdlYWtzIHRvIHdvcmsKICAgICAgICBpbnNpZGUgb2YgUmVzb3VyY2VTaWRlYmFyUGFuZWwuCgogICAgICAgIFJldmlld2VkIGJ5IEFudG9pbmUgUXVpbnQuCgogICAgICAgICogVXNlckludGVyZmFjZS9BcHBsaWNhdGlvbkNhY2hlRnJhbWVUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVGcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS51cGRhdGVUaXRsZXMpOgogICAgICAgICogVXNlckludGVyZmFjZS9JbnNwZWN0b3JPYnNlcnZlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkluc3BlY3Rvck9ic2VydmVyLnByb3RvdHlwZS5pbnNwZWN0KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5zaWRlYmFyUGFuZWxGb3JSZXByZXNlbnRlZE9iamVjdCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLmNvb2tpZUZvckNvbnRlbnRWaWV3KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5zaG93Q29udGVudFZpZXdGb3JDb29raWUuZmluYWxpemVDb29raWVDaGVja2luZyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuc2hvd0NvbnRlbnRWaWV3Rm9yQ29va2llKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS50cmVlRWxlbWVudEZvclJlcHJlc2VudGVkT2JqZWN0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fbWFpbkZyYW1lRGlkQ2hhbmdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fbWFpbkZyYW1lTWFpblJlc291cmNlRGlkQ2hhbmdlLmRlbGF5ZWRXb3JrKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fbWFpbkZyYW1lTWFpblJlc291cmNlRGlkQ2hhbmdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fc2NyaXB0V2FzQWRkZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl90cmVlRWxlbWVudFNlbGVjdGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fZG9tTm9kZVdhc0luc3BlY3RlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2NoZWNrU3RvcmFnZVRyZWVFbGVtZW50QWdhaW5zdFBlbmRpbmdDb250ZW50Vmlld0Nvb2tpZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2RvbVN0b3JhZ2VPYmplY3RXYXNBZGRlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2RvbVN0b3JhZ2VPYmplY3RXYXNJbnNwZWN0ZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9kYXRhYmFzZVdhc0FkZGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fZGF0YWJhc2VXYXNJbnNwZWN0ZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9jb29raWVTdG9yYWdlT2JqZWN0V2FzQWRkZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9mcmFtZU1hbmlmZXN0QWRkZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9mcmFtZU1hbmlmZXN0UmVtb3ZlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2NvbXBhcmVUcmVlRWxlbWVudHMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9hZGRTdG9yYWdlQ2hpbGQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9zdG9yYWdlQ2xlYXJlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N0b3JhZ2VTaWRlYmFyUGFuZWwuanM6IFJlbW92ZWQuCgoyMDEyLTExLTA5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUmVtb3ZlIHRoZSBJc3N1ZXMgc2lkZWJhci4KCiAgICAgICAgSXQgbWlnaHQgY29tZSBiYWNrIGluIHNvbWUgZm9ybSBpbiB0aGUgbmV3IERlYnVnZ2VyIHNpZGViYXIgaWYgdGhlcmUgaXMgZGVtYW5kLgogICAgICAgIEJ1dCBpdCBoYXMgcHJvdmVuIHRvIG5vdCBiZSB0aGF0IGhlbHBmdWwgaW4gaXRzIGN1cnJlbnQgZm9ybS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0lzc3VlSWNvbnMuY3NzOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9Jc3N1ZVNpZGViYXJQYW5lbC5qczogUmVtb3ZlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSXNzdWVUcmVlRWxlbWVudC5qczogUmVtb3ZlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6CgoyMDEyLTExLTA5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIHBsYWNlaG9sZGVycyB0byBhbGwgdGhlIHNlYXJjaCBhbmQgZmlsdGVyIGZpZWxkcyBpbiB0aGUgbmF2aWdhdGlvbiBzaWRlYmFycy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExMTEzNzE3PiBUd28gc2VhcmNoLXJlbGF0ZWQgZmllbGRzIGluIHRoZSBTZWFyY2ggc2lkZWJhciBpcyBjb25mdXNpbmcKCiAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6IFVwZGF0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0JyZWFrcG9pbnRTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50U2lkZWJhclBhbmVsKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGVidWdTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z1NpZGViYXJQYW5lbCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZpbHRlckJhci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkZpbHRlckJhci5wcm90b3R5cGUuZ2V0IHBsYWNlaG9sZGVyKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GaWx0ZXJCYXIucHJvdG90eXBlLnNldCBwbGFjZWhvbGRlcik6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbnN0cnVtZW50U2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zdHJ1bWVudFNpZGViYXJQYW5lbCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ1NpZGViYXJQYW5lbCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwpOgogICAgICAgICogVXNlckludGVyZmFjZS9TdG9yYWdlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZVNpZGViYXJQYW5lbCk6CgoyMDEyLTExLTA5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWVyZ2UgdGhlIFNlYXJjaCBzaWRlYmFyIGludG8gdGhlIFJlc291cmNlcyBzaWRlYmFyLgoKICAgICAgICBNb3N0IG9mIHRoaXMgaXMganVzdCBjb3BpZWQgZnJvbSBTZWFyY2hTaWRlYmFyUGFuZWwgd2l0aCB0cml2aWFsIHR3ZWFrcyB0byB3b3JrCiAgICAgICAgaW5zaWRlIG9mIFJlc291cmNlU2lkZWJhclBhbmVsLgoKICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBBbnRvaW5lIFF1aW50LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlU2lkZWJhclBhbmVsLmNzczogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLmdldCBjb250ZW50VHJlZU91dGxpbmVUb0F1dG9QcnVuZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUudHJlZUVsZW1lbnRGb3JSZXByZXNlbnRlZE9iamVjdCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUucGVyZm9ybVNlYXJjaC51cGRhdGVFbXB0eUNvbnRlbnRQbGFjZWhvbGRlclNvb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLnBlcmZvcm1TZWFyY2gudXBkYXRlRW1wdHlDb250ZW50UGxhY2Vob2xkZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLnBlcmZvcm1TZWFyY2gucmVzb3VyY2VDYWxsYmFjayk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUucGVyZm9ybVNlYXJjaC5yZXNvdXJjZXNDYWxsYmFjayk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUucGVyZm9ybVNlYXJjaC5kb21TZWFyY2hSZXN1bHRzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5wZXJmb3JtU2VhcmNoLmRvbUNhbGxiYWNrKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5wZXJmb3JtU2VhcmNoKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fc2VhcmNoRmllbGRDaGFuZ2VkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fc2VhcmNoVHJlZUVsZW1lbnRGb3JSZXNvdXJjZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2ZvY3VzU2VhcmNoRmllbGQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9tYWluRnJhbWVEaWRDaGFuZ2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9zY3JpcHRXYXNBZGRlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3RyZWVFbGVtZW50U2VsZWN0ZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9TZWFyY2hTaWRlYmFyUGFuZWwuY3NzOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9TZWFyY2hTaWRlYmFyUGFuZWwuanM6IFJlbW92ZWQuCgoyMDEyLTExLTA5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWxsb3cgc2V0dGluZyB0aGUgY29udGVudFRyZWVPdXRsaW5lIG9mIGEgV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25TaWRlYmFyUGFuZWwuCgogICAgICAgIFRoaXMgd2lsbCBhbGxvdyBvbmUgc2lkZWJhciB0byBtYW5hZ2UgbXVsdGlwbGUgY29udGVudCB0cmVlcywgc28gd2UgY2FuIG1lcmdlCiAgICAgICAgUmVzb3VyY2VzIGFuZCBTZWFyY2ggaW50byBvbmUuCgogICAgICAgIFJldmlld2VkIGJ5IEFudG9pbmUgUXVpbnQuCgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbCk6IFVzZSBjcmVhdGVDb250ZW50VHJlZU91dGxpbmUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLnByb3RvdHlwZS5nZXQgY29udGVudFRyZWVPdXRsaW5lRWxlbWVudCk6IFVzZSAuZWxlbWVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25TaWRlYmFyUGFuZWwucHJvdG90eXBlLnNldCBjb250ZW50VHJlZU91dGxpbmUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25TaWRlYmFyUGFuZWwucHJvdG90eXBlLmdldCBjb250ZW50VHJlZU91dGxpbmVUb0F1dG9QcnVuZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbC5wcm90b3R5cGUuY3JlYXRlQ29udGVudFRyZWVPdXRsaW5lKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLnByb3RvdHlwZS5zaG93KTogVXNlIGNvbnRlbnRUcmVlT3V0bGluZUVsZW1lbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fY2hlY2tGb3JPbGRSZXNvdXJjZXMuZGVsYXllZFdvcmspOiBVc2UgdGhlCiAgICAgICAgbmV3IGNvbnRlbnRUcmVlT3V0bGluZVRvQXV0b1BydW5lIHByb3BlcnR5LgogICAgICAgICogVXNlckludGVyZmFjZS9UcmVlT3V0bGluZS5qczoKICAgICAgICAoVHJlZU91dGxpbmUpOiBTZXQgLmVsZW1lbnQgZm9yIHB1YmxpYyB1c2UuCgoyMDEyLTExLTA5ICBOYXRoYW4gZGUgVnJpZXMgIDxuZGV2cmllc0BhcHBsZS5jb20+CgogICAgICAgIEZpeCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzExNDk4NjI4PiBDYW4gaW5hZHZlcnRlbnRseSBjb3B5IHBhcnQgb2YgdGhlIFVJCiAgICAgICAgd2hlbiBhdHRlbXB0aW5nIHRvIGNvcHkgdGhlIEZ1bGwgVVJMIG9mIGEgcmVzb3VyY2UKCiAgICAgICAgRW5zdXJlIHRoYXQgd2hlbiBhIHZhbHVlIGluIHRoZSBkZXRhaWxzIHNpZGUgcGFuZSBpcyB0cmlwbGUtdGFwcGVkIHRvCiAgICAgICAgc2VsZWN0IHRoZSB3aG9sZSB2YWx1ZSwgdGhlIGxhYmVsIGZyb20gdGhlIGZvbGxvd2luZyByb3cgaXMgbm90IGluY2x1ZGVkCiAgICAgICAgaW4gdGhlIHNlbGVjdGlvbi4KCiAgICAgICAgVGhlIHRhYmxlLWNlbGwgc2VsZWN0aW9uIGlzc3VlIHdpbGwgYmUgYWRkcmVzc2VkIHByb3Blcmx5IGluCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyNjY4ODcwPiBUcmlwbGUtY2xpY2tpbmcgdGV4dCB3aXRoaW4gYSA8ZGl2PiBzZXQgdG8KICAgICAgICAiZGlzcGxheTogdGFibGUtY2VsbCIgc2VsZWN0cyB0ZXh0IG91dHNpZGUgdGhlIGNlbGwKCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGV0YWlsc1NlY3Rpb25TaW1wbGVSb3cuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZXRhaWxzU2VjdGlvblNpbXBsZVJvdyk6IEFkZCBhIGNsaWNrIGhhbmRsZXIgdG8gdGhlIHZhbHVlCiAgICAgICAgY2VsbCBhbmQgYWRqdXN0IHRoZSBzZWxlY3Rpb24gcmFuZ2Ugb24gdHJpcGxlLWNsaWNrIGlmIGl0IGV4dGVuZHMgYmV5b25kCiAgICAgICAgdGhlIGNlbGwuCgoyMDEyLTExLTA5ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjUyNjQxMz4gQ29tcG9zaXRpbmcgYm9yZGVycyBidXR0b24gZG9lcyBub3Qgd29yayBmb3IgaU9TIDYgKHNob3VsZCBiZSBzdXBwcmVzc2VkIG9yIGRpbW1lZCkKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9uIEhvbmV5Y3V0dC4KCiAgICAgICAgRGlzYWJsZSB0aGUgdG9nZ2xlIGNvbXBvc2l0aW5nIGJvcmRlcnMgbmF2aWdhdGlvbiBidXR0b24gd2hlbiBkZWJ1Z2dpbmcKICAgICAgICBhbiBpT1MgNiBkZXZpY2UsIHdoaWNoIGRvZXNuJ3QgaGF2ZSBiYWNrZW5kIHN1cHBvcnQgZm9yIGl0LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWVDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lQ29udGVudFZpZXcucHJvdG90eXBlLl90b2dnbGVDb21wb3NpdGluZ0JvcmRlcnMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVDb250ZW50Vmlldy5wcm90b3R5cGUuX3VwZGF0ZUNvbXBvc2l0aW5nQm9yZGVyc0J1dHRvblRvTWF0Y2hQYWdlU2V0dGluZ3MpOgoKMjAxMi0xMS0wOSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI0NjI0Mjg+IE1ha2UgdGhlIFNhZmFyaSBDdXJpZSBXZWIgSW5zcGVjdG9yIGNvbXBhdGlibGUgd2l0aCBpT1MgNgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgIEluIHByb2R1Y3Rpb24gYnVpbGRzIGJlIHN1cmUgdG8gY29weSBvdmVyIHJlc291cmNlcyB0aGF0IGFyZQogICAgICAgIGR5bmFtaWNhbGx5IGxvYWRlZCBpbiB0aGUgZnJvbnRlbmQsIGFuZCBhcmVuJ3QgZXhwbGljaXRseSBsb2FkZWQKICAgICAgICBieSBNYWluLmh0bWwuCgogICAgICAgICogU2NyaXB0cy9jb3B5LXVzZXItaW50ZXJmYWNlLXJlc291cmNlcy5zaDoKCjIwMTItMTEtMDkgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyNDYyNDI4PiBNYWtlIHRoZSBTYWZhcmkgQ3VyaWUgV2ViIEluc3BlY3RvciBjb21wYXRpYmxlIHdpdGggaU9TIDYKCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICBJbiB0aGlzIGNoYW5nZSB0aGUgaW5zcGVjdG9yIGZyb250ZW5kIHdpbGwgbG9hZCBhIGJhY2tlbmQgY29tbWFuZHMgZmlsZQogICAgICAgIHRoYXQgaXMgZXhhY3RseSBjb21wYXRpYmxlIHdpdGggdGhlIGJhY2tlbmQgaXQgaXMgY29tbXVuaWNhdGluZyB3aXRoLgogICAgICAgIFdoZW4gbG9hZGluZyB0aGUgZnJvbnRlbmQgZm9yIGEgcmVtb3RlIHNlc3Npb24gdGhlIFJXSSBmcm9udGVuZCBob3N0CiAgICAgICAgY2FuIHN1Z2dlc3QgYSBtb3JlIHNwZWNpZmljIEluc3BlY3RvckJhY2tlbmRDb21tYW5kcyBmaWxlIHRvIGxvYWQuCiAgICAgICAgRm9yIG5vbi1yZW1vdGUgc2Vzc2lvbiwgb3Igbm9uLWxlZ2FjeSByZW1vdGUgc2Vzc2lvbgogICAgICAgIHRoZSBkZWZhdWx0IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcyBmaWxlIGlzIGxvYWRlZC4KCiAgICAgICAgVGhpcyBhcHByb2FjaCBoYXMgc29tZSBiZW5lZml0czoKCiAgICAgICAgICAtIGxvYWRpbmcgdGhlIGV4YWN0IHNldCBvZiBiYWNrZW5kIGNvbW1hbmRzIGFsbG93cyBiYWNrZW5kIGZlYXR1cmUKICAgICAgICAgICAgZGV0ZWN0aW9uIGJ5IHNpbXBseSBjaGVja2luZyBpZiB0aGUgIkJhY2tlbmRBZ2VudC48bWV0aG9kPiIgZXhpc3RzLgogICAgICAgICAgICBUaGVyZWZvcmUgeW91IGltbWVkaWF0ZWx5IGdldCBlcnJvcnMgaWYgeW91IHVzZSBhIGJhY2tlbmQgYWdlbnQKICAgICAgICAgICAgbWV0aG9kIHdpdGhvdXQgZmVhdHVyZSBkZXRlY3RpbmcgaXQuCgogICAgICAgICAgLSBieSBoYXZpbmcgTGVnYWN5IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcyBmaWxlcyBjaGVja2VkIGluIGl0IGlzCiAgICAgICAgICAgIGVhc2llciB0byBzZWUgZXhhY3RseSB3aGF0IGFuIG9sZGVyIHZlcnNpb24gb2YgaU9TIHN1cHBvcnRlZCBhbmQKICAgICAgICAgICAgd2hlbiBmdW5jdGlvbnMgd2VyZSBhZGRlZCAvIHJlbW92ZWQuCgogICAgICAgIEFuZCBkcmF3YmFja3M6CgogICAgICAgICAgLSBpZiBhIHByb3RvY29sIG1lc3NhZ2UgY2hhbmdlcyBpbiBzb21lIHdheSAocmVuYW1lZCBwYXJhbXMsIGdhaW5zIG9yCiAgICAgICAgICAgIGxvc2VzIHBhcmFtcywgcmVvcmRlcnMgcGFyYW1zLCBjaGFuZ2VzIHRvIG11bHRpcGxlIG1ldGhvZHMsIGV0Yykgd2UKICAgICAgICAgICAgbWF5IG5lZWQgdG8gZG8gZXh0cmEgd29yayB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIGRldmljZXMuCiAgICAgICAgICAgIExpa2Ugd2UndmUgYWxyZWFkeSBzZWVuIHdpdGggRGF0YWJhc2UgU1FMIGhhbmRsaW5nLgoKICAgICAgICBUaW1vdGh5IEhhdGNoZXIgYWxyZWFkeSBhZGRyZXNzZWQgYWxsIG9mIHRoZSBpT1MgNiBwcm90b2NvbCBjaGFuZ2VzIHNvIGZhci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvYWRJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanM6IEFkZGVkLgogICAgICAgIExvYWQgZWl0aGVyIHRoZSBkZWZhdWx0IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcyBvciB0aGUgb25lIGV4cG9zZWQKICAgICAgICBieSBJbnNwZWN0b3JGcm9udGVuZEhvc3QuaW5zcGVjdG9yQmFja2VuZENvbW1hbmRzVVJMKCkgaW4gcmVtb3RlIHNlc3Npb25zLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgogICAgICAgIFJlbW92ZSBJbnNwZWN0b3JCYWNrZW5kTGVnYWN5Q29tbWFuZHMsIGFkZCBpbiBMb2FkSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zcGVjdG9yQmFja2VuZExlZ2FjeUNvbW1hbmRzLmpzOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9MZWdhY3kvNi4wL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qczogQWRkZWQuCiAgICAgICAgVGhpcyBpcyB0aGUgY29tcGxldGUgSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzIHN1cHBvcnRlZCBieSBpT1MgNi4KCjIwMTItMTEtMDggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBGaXggYW4gZXhjZXB0aW9uIHRoYXQgc3RhcnRlZCBoYXBwZW5pbmcgaW4gdGhlIFdlYiBJbnNwZWN0b3IsIHRoYXQgYnJva2UgZXZlcnl0aGluZy4KCiAgICAgICAgUmV2aXNpb24gMTMzODYyIG9mIFdlYkNvcmUgc3RhcnRlZCBsb29raW5nIGZvciBJbnNwZWN0b3JGcm9udGVuZEFQSS5kaXNwYXRjaE1lc3NhZ2VBc3luYy4KICAgICAgICBTbyB3ZSBuZWVkIHRvIGltcGxlbWVudCB0aHRhIG1ldGhvZCB0byBtYWtlIHRoaW5ncyB3b3JrIGFnYWluLiBUaGVyZSBhcmUgYSBmZXcgb3RoZXIKICAgICAgICBtZXRob2RzIHRoYXQgbmVlZGVkIGFkZGVkIHRvIEluc3BlY3RvckZyb250ZW5kQVBJIHRvby4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3BlY3RvckZyb250ZW5kQVBJLmpzOgogICAgICAgIChJbnNwZWN0b3JGcm9udGVuZEFQSS5jb250ZXh0TWVudUl0ZW1TZWxlY3RlZCk6IEFkZGVkLgogICAgICAgIChJbnNwZWN0b3JGcm9udGVuZEFQSS5jb250ZXh0TWVudUNsZWFyZWQpOiBBZGRlZC4KICAgICAgICAoSW5zcGVjdG9yRnJvbnRlbmRBUEkuZGlzcGF0Y2hNZXNzYWdlQXN5bmMpOiBBZGRlZC4KICAgICAgICAoSW5zcGVjdG9yRnJvbnRlbmRBUEkuZGlzcGF0Y2hNZXNzYWdlKTogQWRkZWQuCgoyMDEyLTExLTA4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRGVmYXVsdCB0byBob3Jpem9udGFsIGxhYmVscyBhbmQgc21hbGwgaWNvbnMgZm9yIHRoZSB0b29sYmFyIHdoZW4gZG9ja2VkLgoKICAgICAgICBUaGlzIGFsc28gcmVtZW1iZXJzIHRoZSB0b29sYmFyIG1vZGVzIGZvciBkb2NrZWQgYW5kIHVuZG9ja2VkIGlmIHRoZSB1c2VyIGNoYW5nZXMgdGhlbS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgUmlja3kgTW9uZGVsbG8uCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IExpc3RlbiBmb3IgdGhlIG5ldyB0b29sYmFyIGV2ZW50cyBhbmQgY3JlYXRlIHRoZSBzZXR0aW5ncy4KICAgICAgICAoV2ViSW5zcGVjdG9yLnVwZGF0ZURvY2tlZFN0YXRlKTogQ2hhbmdlIHRoZSBtb2RlcyB1c2luZyB0aGUgc2V0dGluZ3MgYmFzZWQgb24gZG9ja2VkIHN0YXRlLgogICAgICAgIChXZWJJbnNwZWN0b3IuX3Rvb2xiYXJEaXNwbGF5TW9kZURpZENoYW5nZSk6IEFkZGVkLiBTdG9yZSB0aGUgbW9kZSBpbiB0aGUgc2V0dGluZy4KICAgICAgICAoV2ViSW5zcGVjdG9yLl90b29sYmFyU2l6ZU1vZGVEaWRDaGFuZ2UpOiBBZGRlZC4gRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Rvb2xiYXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Ub29sYmFyLnByb3RvdHlwZS5zZXQgZGlzcGxheU1vZGUpOiBGaXJlIHRoZSBEaXNwbGF5TW9kZURpZENoYW5nZSBldmVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRvb2xiYXIucHJvdG90eXBlLnNldCBzaXplTW9kZSk6IEZpcmUgdGhlIFNpemVNb2RlRGlkQ2hhbmdlIGV2ZW50LgoKMjAxMi0xMS0wOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEZpeCBhbiBleGNlcHRpb24gdGhhdCB3YXMgcHJldmVudGluZyBjb25zb2xlIGV4cHJlc3Npb24gZnJvbSBldmFsdWF0aW5nLgoKICAgICAgICBUaGlzIGV4cG9zZWQgYSBkZWVwZXIgaXNzdWUgd2hlcmUgd2Ugd2VyZSBub3QgdXNpbmcgdGhlIG9yaWdpbiBwcm9wZXJ0eSBmb3IgRE9NIHN0b3JhZ2UKICAgICAgICBvYmplY3RzIGFuZCBzdGlsbCBsb29raW5nIGZvciB0aGUgaG9zdCBwcm9wZXJ0eS4KCiAgICAgICAgVGhlcmUgYWxzbyBzZWVtcyB0byBiZSBhIGJhY2tlbmQgaXNzdWUgd2hlcmUgbG9jYWwgc3RvcmFnZSBpcyBzaG93aW5nIHVwIHR3aWNlLgogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE2NDMKCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyNjU2MTg4PiBDYW4ndCBldmFsdWF0ZSBleHByZXNzaW9ucyBpbiB0aGUgY29uc29sZSBvbiB0aGlzIG5wci5vcmcgcGFnZQoKICAgICAgICBSZXZpZXdlZCBieSBSaWNreSBNb25kZWxsby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVN0b3JhZ2VPYnNlcnZlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VPYnNlcnZlci5wcm90b3R5cGUuYWRkRE9NU3RvcmFnZSk6IExvb2sgZm9yIG9yaWdpbiBhbmQgcGFyc2UKICAgICAgICB0aGUgaG9zdCBvdXQgb2YgaXQgc2luY2Ugb3VyIGNvZGUgc3RpbGwgZXhwZWN0cyB0aGUgaG9zdC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3RvcmFnZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9jb21wYXJlVHJlZUVsZW1lbnRzQnlNYWluVGl0bGUpOiBBc3NlcnQKICAgICAgICB0aGF0IHRoZSBtYWluVGl0bGUgaXMgbm90IGVtcHR5L251bGwvdW5kZWZpbmVkLiBIYW5kbGUgaXQgYW55d2F5IGp1c3QgaW4gY2FzZS4KCjIwMTItMTEtMDggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBVcGRhdGUgdGhlIFdlYiBJbnNwZWN0b3Igc3RyaW5ncyBmb3IgYWxsIHRoZSBzdHJpbmcgY2hhbmdlcyBpbiB0aGUgbGFzdCBmZXcgcmV2aXNpb25zLgoKICAgICAgICBQYXJ0IG9mOgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDk0NzU0MT4gTmF2aWdhdGlvbiBiYXIgYnV0dG9ucyBhcmUgdG9vIHNtYWxsCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyMjk0NTc1PiBOYXZpZ2F0aW9uIGJhciBidXR0b24gaWNvbnMgYXJlIGRpZmZpY3VsdCB0byBpZGVudGlmeQogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjU4OTI5MT4gTmF2aWdhdGlvbiBiYXIgYnV0dG9ucyBhcmUgdW5sYWJlbGVkCgogICAgICAgIFJldmlld2VkIGJ5IFJpY2t5IE1vbmRlbGxvLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczogVXBkYXRlZC4KCjIwMTItMTEtMDggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgdGhlIHNpZGViYXIgcGFuZWwgdG9vbGJhciBpdGVtcyBhbmQgZG9jayBjb250cm9scyB0byB0aGUgdG9vbGJhci4KCiAgICAgICAgUGFydCBvZjoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA5NDc1NDE+IE5hdmlnYXRpb24gYmFyIGJ1dHRvbnMgYXJlIHRvbyBzbWFsbAogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjI5NDU3NT4gTmF2aWdhdGlvbiBiYXIgYnV0dG9uIGljb25zIGFyZSBkaWZmaWN1bHQgdG8gaWRlbnRpZnkKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI1ODkyOTE+IE5hdmlnYXRpb24gYmFyIGJ1dHRvbnMgYXJlIHVubGFiZWxlZAoKICAgICAgICBSZXZpZXdlZCBieSBSaWNreSBNb25kZWxsby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLl91cGRhdGVEb2NrVG9nZ2xlQnV0dG9uVmlzaWJpbGl0eSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5fdXBkYXRlRG9ja05hdmlnYXRpb25JdGVtcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5fY29udGVudEJyb3dzZXJSZXByZXNlbnRlZE9iamVjdHNEaWRDaGFuZ2UpOgoKMjAxMi0xMS0wOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFJlbW92ZSB0aGUgdG9nZ2xlIHNpZGViYXIgYnV0dG9ucyBhbmQga2V5Ym9hcmQgc2hvcnRjdXRzLgoKICAgICAgICBQYXJ0IG9mOgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDk0NzU0MT4gTmF2aWdhdGlvbiBiYXIgYnV0dG9ucyBhcmUgdG9vIHNtYWxsCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyMjk0NTc1PiBOYXZpZ2F0aW9uIGJhciBidXR0b24gaWNvbnMgYXJlIGRpZmZpY3VsdCB0byBpZGVudGlmeQogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjU4OTI5MT4gTmF2aWdhdGlvbiBiYXIgYnV0dG9ucyBhcmUgdW5sYWJlbGVkCgogICAgICAgIFJldmlld2VkIGJ5IFJpY2t5IE1vbmRlbGxvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuX25hdmlnYXRpb25TaWRlYmFyUGFuZWxTZWxlY3RlZCk6CgoyMDEyLTExLTA4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRG9uJ3QgaGF2ZSBzaWRlYmFycyBtYW5hZ2UgYW5kIGRpc3BsYXkgYSBOYXZpZ2F0aW9uQmFyIGFueW1vcmUuCgogICAgICAgIFRoaXMgcmVtb3ZlcyB0aGUgbmF2aWdhdGlvbiBiYXIgZnJvbSBTaWRlYmFyIGFuZCBtYWtlcyBlYWNoIFNpZGViYXJQYW5lbCBoYXZlIGEgdG9vbGJhciBpdGVtIGluc3RlYWQuCiAgICAgICAgVG8gd29yayB3aXRoIHRoZSB0b29sYmFyIGl0ZW0gdGhlIGRpc3BsYXkgbmFtZXMgYW5kIHRvb2x0aXBzIGhhdmUgYmVlbiB0d2Vha2VkLiBUaGUgdG9vbGJhciBpdGVtcwogICAgICAgIGFyZSBub3QgdXNlZCBpbiB0aGUgdG9vbGJhciB5ZXQuCgogICAgICAgIFBhcnQgb2Y6CiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwOTQ3NTQxPiBOYXZpZ2F0aW9uIGJhciBidXR0b25zIGFyZSB0b28gc21hbGwKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTIyOTQ1NzU+IE5hdmlnYXRpb24gYmFyIGJ1dHRvbiBpY29ucyBhcmUgZGlmZmljdWx0IHRvIGlkZW50aWZ5CiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyNTg5MjkxPiBOYXZpZ2F0aW9uIGJhciBidXR0b25zIGFyZSB1bmxhYmVsZWQKCiAgICAgICAgUmV2aWV3ZWQgYnkgUmlja3kgTW9uZGVsbG8uCgogICAgICAgICogVXNlckludGVyZmFjZS9BcHBlYXJhbmNlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGVhcmFuY2VEZXRhaWxzU2lkZWJhclBhbmVsKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQXBwbGljYXRpb25DYWNoZURldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlRGV0YWlsc1NpZGViYXJQYW5lbCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0JyZWFrcG9pbnRTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50U2lkZWJhclBhbmVsKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NTm9kZURldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlRGV0YWlsc1NpZGViYXJQYW5lbCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RlYnVnU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdTaWRlYmFyUGFuZWwpOgogICAgICAgICogVXNlckludGVyZmFjZS9EZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsc1NpZGViYXJQYW5lbCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3RydW1lbnRTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5JbnN0cnVtZW50U2lkZWJhclBhbmVsKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSXNzdWVTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Jc3N1ZVNpZGViYXJQYW5lbCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ1NpZGViYXJQYW5lbCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05hdmlnYXRpb25TaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uU2lkZWJhclBhbmVsKToKICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25TaWRlYmFyUGFuZWwucHJvdG90eXBlLnNob3dFbXB0eUNvbnRlbnRQbGFjZWhvbGRlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLnByb3RvdHlwZS5oaWRlRW1wdHlDb250ZW50UGxhY2Vob2xkZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbC5wcm90b3R5cGUudXBkYXRlRW1wdHlDb250ZW50UGxhY2Vob2xkZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbC5wcm90b3R5cGUuc2hvd24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbC5wcm90b3R5cGUuaGlkZGVuKToKICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25TaWRlYmFyUGFuZWwucHJvdG90eXBlLl91cGRhdGVUb29sYmFySXRlbVZpc2liaWxpdHkpOgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwpOgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2NvcGVDaGFpbkRldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TY29wZUNoYWluRGV0YWlsc1NpZGViYXJQYW5lbCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NlYXJjaFNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NpZGViYXIuY3NzOgogICAgICAgICguc2lkZWJhciA+IC5wYW5lbCk6CiAgICAgICAgKC5zaWRlYmFyLnJpZ2h0KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2lkZWJhci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2lkZWJhci5wcm90b3R5cGUuYWRkU2lkZWJhclBhbmVsKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXIucHJvdG90eXBlLnJlbW92ZVNpZGViYXJQYW5lbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyLnByb3RvdHlwZS5zZXQgc2VsZWN0ZWRTaWRlYmFyUGFuZWwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2lkZWJhci5wcm90b3R5cGUuZ2V0IG1pbmltdW1XaWR0aCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyLnByb3RvdHlwZS5zZXQgd2lkdGgpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2lkZWJhci5wcm90b3R5cGUuc2V0IGNvbGxhcHNlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXJQYW5lbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyUGFuZWwucHJvdG90eXBlLmdldCB0b29sYmFySXRlbSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyUGFuZWwucHJvdG90eXBlLmdldCB2aXNpYmxlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXJQYW5lbC5wcm90b3R5cGUuaGlkZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyUGFuZWwucHJvdG90eXBlLnRvZ2dsZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyUGFuZWwucHJvdG90eXBlLmFkZGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXJQYW5lbC5wcm90b3R5cGUucmVtb3ZlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyUGFuZWwucHJvdG90eXBlLmhpZGRlbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyUGFuZWwucHJvdG90eXBlLnZpc2liaWxpdHlEaWRDaGFuZ2UpOgogICAgICAgICogVXNlckludGVyZmFjZS9TdG9yYWdlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZVNpZGViYXJQYW5lbCk6CgoyMDEyLTExLTA4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUmVuYW1lIHRoZSBRdWlja0NvbnNvbGUgdG9vbGJhciBzdHlsZSBjbGFzcyBzbyBpdCBkb2VzIG5vdCBjb25mbGljdCB3aXRoIHRoZSBuZXcgVG9vbGJhciBjbGFzcy4KCiAgICAgICAgUGFydCBvZjoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA5NDc1NDE+IE5hdmlnYXRpb24gYmFyIGJ1dHRvbnMgYXJlIHRvbyBzbWFsbAogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjI5NDU3NT4gTmF2aWdhdGlvbiBiYXIgYnV0dG9uIGljb25zIGFyZSBkaWZmaWN1bHQgdG8gaWRlbnRpZnkKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI1ODkyOTE+IE5hdmlnYXRpb24gYmFyIGJ1dHRvbnMgYXJlIHVubGFiZWxlZAoKICAgICAgICBSZXZpZXdlZCBieSBSaWNreSBNb25kZWxsby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1F1aWNrQ29uc29sZS5jc3M6CiAgICAgICAgKC5xdWljay1jb25zb2xlID4gLnF1aWNrLWNvbnNvbGUtdG9vbGJhcik6CiAgICAgICAgKC5xdWljay1jb25zb2xlID4gLnF1aWNrLWNvbnNvbGUtdG9vbGJhciA+IC50ZXh0LXByb21wdCk6CiAgICAgICAgKC5xdWljay1jb25zb2xlID4gLnF1aWNrLWNvbnNvbGUtdG9vbGJhciA+IC5uYXZpZ2F0aW9uLWJhci1jb250YWluZXIpOgogICAgICAgICgucXVpY2stY29uc29sZSA+IC5xdWljay1jb25zb2xlLXRvb2xiYXIgPiAubmF2aWdhdGlvbi1iYXItY29udGFpbmVyID4gLm5hdmlnYXRpb24tYmFyLXNwYWNlcik6CiAgICAgICAgKC5xdWljay1jb25zb2xlID4gLnF1aWNrLWNvbnNvbGUtdG9vbGJhciA+IC5uYXZpZ2F0aW9uLWJhci1jb250YWluZXIgPiAubmF2aWdhdGlvbi1iYXIpOgogICAgICAgICgucXVpY2stY29uc29sZSA+IC5xdWljay1jb25zb2xlLXRvb2xiYXIuc2Nyb2xsLWRpdmlkZXIpOgogICAgICAgICgucXVpY2stY29uc29sZSA+IC5xdWljay1jb25zb2xlLXRvb2xiYXIgPiAudGV4dC1wcm9tcHQgPiAuamF2YXNjcmlwdC1wcm9tcHQpOgogICAgICAgICogVXNlckludGVyZmFjZS9RdWlja0NvbnNvbGUuanM6CgoyMDEyLTExLTA4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIGEgdG9vbGJhciBjbGFzcyBhbmQgdG9vbGJhciBpdGVtIGNsYXNzZXMgdG8gdGhlIFdlYiBJbnNwZWN0b3IuCgogICAgICAgIFRoZSB0b29sYmFyIGFuZCBpdGVtIGluaGVyaXRzIG1vc3Qgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgZnJvbSB0aGUgZXhpc3RpbmcgTmF2aWdhdGlvbkJhciBhbmQgQnV0dG9uTmF2aWdhdGlvbkl0ZW0uCiAgICAgICAgVGhpcyBhbHNvIG1ha2VzIHRoZSB0b29sYmFyIGJlIHRoZSByZXNpemUgYXJlYSB3aGVuIGRvY2tlZC4gTm8gaXRlbXMgYXJlIGFkZGVkIHRvIHRoZSB0b29sYmFyIHlldC4KCiAgICAgICAgUGFydCBvZjoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA5NDc1NDE+IE5hdmlnYXRpb24gYmFyIGJ1dHRvbnMgYXJlIHRvbyBzbWFsbAogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjI5NDU3NT4gTmF2aWdhdGlvbiBiYXIgYnV0dG9uIGljb25zIGFyZSBkaWZmaWN1bHQgdG8gaWRlbnRpZnkKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI1ODkyOTE+IE5hdmlnYXRpb24gYmFyIGJ1dHRvbnMgYXJlIHVubGFiZWxlZAoKICAgICAgICBSZXZpZXdlZCBieSBSaWNreSBNb25kZWxsby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0FjdGl2YXRlQnV0dG9uVG9vbGJhckl0ZW0uanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQWN0aXZhdGVCdXR0b25Ub29sYmFySXRlbSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5BY3RpdmF0ZUJ1dHRvblRvb2xiYXJJdGVtLnByb3RvdHlwZS5nZXQgbGFiZWwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQWN0aXZhdGVCdXR0b25Ub29sYmFySXRlbS5wcm90b3R5cGUuc2V0IGxhYmVsKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnV0dG9uVG9vbGJhckl0ZW0uY3NzOiBBZGRlZC4KICAgICAgICAoLnRvb2xiYXIgPiAuaXRlbS5idXR0b24pOgogICAgICAgICgudG9vbGJhci5pY29uLWFuZC1sYWJlbC12ZXJ0aWNhbCA+IC5pdGVtLmJ1dHRvbik6CiAgICAgICAgKC50b29sYmFyLmljb24tYW5kLWxhYmVsLWhvcml6b250YWwgPiAuaXRlbS5idXR0b24pOgogICAgICAgICgudG9vbGJhciA+IC5pdGVtLmJ1dHRvbiA+IC5nbHlwaCk6CiAgICAgICAgKC50b29sYmFyLnNtYWxsLXNpemUgPiAuaXRlbS5idXR0b24gPiAuZ2x5cGgpOgogICAgICAgICgudG9vbGJhci5sYWJlbC1vbmx5ID4gLml0ZW0uYnV0dG9uID4gLmdseXBoKToKICAgICAgICAoLnRvb2xiYXIgPiAuaXRlbS5idXR0b24gPiAubGFiZWwpOgogICAgICAgICgudG9vbGJhci5sYWJlbC1vbmx5ID4gLml0ZW0uYWN0aXZhdGUuYnV0dG9uLmFjdGl2YXRlZCA+IC5sYWJlbCk6CiAgICAgICAgKC50b29sYmFyLmljb24tYW5kLWxhYmVsLWhvcml6b250YWwgPiAuaXRlbS5idXR0b24gPiAubGFiZWwpOgogICAgICAgICgudG9vbGJhci5pY29uLW9ubHkgPiAuaXRlbS5idXR0b24gPiAubGFiZWwpOgogICAgICAgIChib2R5LndpbmRvdy1pbmFjdGl2ZSAudG9vbGJhciA+IC5pdGVtLmJ1dHRvbik6CiAgICAgICAgKC50b29sYmFyID4gLml0ZW0uYnV0dG9uLmRpc2FibGVkKToKICAgICAgICAoYm9keS53aW5kb3ctaW5hY3RpdmUgLnRvb2xiYXIgPiAuaXRlbS5idXR0b24uZGlzYWJsZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9CdXR0b25Ub29sYmFySXRlbS5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5CdXR0b25Ub29sYmFySXRlbSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CdXR0b25Ub29sYmFySXRlbS5wcm90b3R5cGUuZ2V0IGxhYmVsKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkJ1dHRvblRvb2xiYXJJdGVtLnByb3RvdHlwZS5zZXQgbGFiZWwpOgogICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9sVG9vbGJhckl0ZW0uY3NzOiBBZGRlZC4KICAgICAgICAoLnRvb2xiYXIgPiAuaXRlbS5jb250cm9sKToKICAgICAgICAoLnRvb2xiYXIuaWNvbi1hbmQtbGFiZWwtdmVydGljYWwgPiAuaXRlbS5jb250cm9sKToKICAgICAgICAoLnRvb2xiYXIgPiAuaXRlbS5jb250cm9sOm5vdCguaGlkZGVuKSArIC5pdGVtLmNvbnRyb2wpOgogICAgICAgICgudG9vbGJhciA+IC5pdGVtLmNvbnRyb2wgPiAuZ2x5cGgpOgogICAgICAgIChib2R5LndpbmRvdy1pbmFjdGl2ZSAudG9vbGJhciA+IC5pdGVtLmNvbnRyb2wgPiAuZ2x5cGgpOgogICAgICAgICgudG9vbGJhciA+IC5pdGVtLmNvbnRyb2wuZGlzYWJsZWQgPiAuZ2x5cGgpOgogICAgICAgIChib2R5LndpbmRvdy1pbmFjdGl2ZSAudG9vbGJhciA+IC5pdGVtLmNvbnRyb2wuZGlzYWJsZWQgPiAuZ2x5cGgpOgogICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9sVG9vbGJhckl0ZW0uanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udHJvbFRvb2xiYXJJdGVtKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5jc3M6CiAgICAgICAgKGJvZHkpOgogICAgICAgICgjdG9vbGJhcik6CiAgICAgICAgKGJvZHkuZG9ja2VkICN0b29sYmFyKToKICAgICAgICAoYm9keS5kb2NrZWQgI3Rvb2xiYXIgLml0ZW06bm90KC5mbGV4aWJsZS1zcGFjZSkpOgogICAgICAgICgjbWFpbik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuX3JlbG9hZFBhZ2VJZ25vcmluZ0NhY2hlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLl9jb3B5KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVG9nZ2xlQ29udHJvbFRvb2xiYXJJdGVtLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRvZ2dsZUNvbnRyb2xUb29sYmFySXRlbSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Rvb2xiYXIuY3NzOiBBZGRlZC4KICAgICAgICAoLnRvb2xiYXIpOgogICAgICAgICgudG9vbGJhci5pY29uLWFuZC1sYWJlbC12ZXJ0aWNhbCk6CiAgICAgICAgKC50b29sYmFyLmljb24tYW5kLWxhYmVsLXZlcnRpY2FsLnNtYWxsLXNpemUpOgogICAgICAgICgudG9vbGJhci5pY29uLW9ubHkpOgogICAgICAgICgudG9vbGJhci5sYWJlbC1vbmx5KToKICAgICAgICAoYm9keS5kb2NrZWQgLnRvb2xiYXIpOgogICAgICAgIChib2R5LndpbmRvdy1pbmFjdGl2ZSAudG9vbGJhcik6CiAgICAgICAgKC50b29sYmFyID4gLml0ZW0pOgogICAgICAgICogVXNlckludGVyZmFjZS9Ub29sYmFyLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRvb2xiYXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVG9vbGJhci5wcm90b3R5cGUuZ2V0IGRpc3BsYXlNb2RlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRvb2xiYXIucHJvdG90eXBlLnNldCBkaXNwbGF5TW9kZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Ub29sYmFyLnByb3RvdHlwZS5nZXQgc2l6ZU1vZGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVG9vbGJhci5wcm90b3R5cGUuc2V0IHNpemVNb2RlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRvb2xiYXIucHJvdG90eXBlLl9oYW5kbGVDb250ZXh0TWVudUV2ZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRvb2xiYXIucHJvdG90eXBlLl9jaGFuZ2VEaXNwbGF5TW9kZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Ub29sYmFyLnByb3RvdHlwZS5fdG9nZ2xlU21hbGxJY29ucyk6CgoyMDEyLTExLTA3ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSB0aGUgV2ViIEluc3BlY3RvciBjb3JyZWN0bHkgcmVmbGVjdCB0aGUgZG9ja2VkIHN0YXRlIGFnYWluLgoKICAgICAgICBUaGUgcXVlcnkgcGFyYW1ldGVyIGNoYW5nZWQgaW4gcjEzMzM5My4gVGhlIGZyb250LWVuZCBuZWVkcyB0byBsb29rIGZvciB0aGUKICAgICAgICBuZXcgZG9ja1NpZGUgcGFyYW1ldGVyIGluc3RlYWQgb2YgZG9ja2VkLgoKICAgICAgICBSZXZpZXdlZCBieSBKb24gSG9uZXljdXR0LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOiBMb29rIGZvciBkb2NrU2lkZSA9PT0gImJvdHRvbSIuCgoyMDEyLTExLTA1ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQ2hhbmdlIHRoZSBwb2ludCB0byBpbnNwZWN0IGJ1dHRvbiBpY29uIGZyb20gYSBoYW5kIHRvIGEgY3Jvc3NoYWlyLgoKICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWVDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lQ29udGVudFZpZXcpOiBVc2UgQ3Jvc3NoYWlyLnBkZiBpbnN0ZWFkIG9mIEhhbmQucGRmLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvQ3Jvc3NoYWlyLnBkZjogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9IYW5kLnBkZjogUmVtb3ZlZC4KCjIwMTItMTEtMDQgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBGaXggdGhlIGxpbmUgbnVtYmVycyBpbiB0aGUgSmF2YVNjcmlwdCAmIEV2ZW50cyB0aW1lbGluZTsgbWFrZSB0aGVtIDAtYmFzZWQuCgogICAgICAgIFRoZSByZXN0IG9mIHRoZSBXZWIgSW5zcGVjdG9yIGV4cGVjdHMgMC1iYXNlZCBsaW5lIG51bWJlcnMuIEJ1dCB0aGUgbGluZSBudW1iZXJzIGluIHRoZQogICAgICAgIEphdmFTY3JpcHQgJiBFdmVudHMgdGltZWxpbmUgY29tZSBpbiAxLWJhc2VkLiBXZSB3ZXJlIGRpc3BsYXlpbmcgdGhlbSBjb3JyZWN0bHkgYmVmb3JlLAogICAgICAgIGJ1dCBjbGlja2luZyB0aGUgZ28tdG8gYXJyb3cgd291bGQgaW5zdGVhZCBoaWdobGlnaHQgdGhlIG5leHQgbGluZSBpbiB0aGUgc291cmNlLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9TY3JpcHRUaW1lbGluZURhdGFHcmlkTm9kZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFRpbWVsaW5lRGF0YUdyaWROb2RlLnByb3RvdHlwZS5jcmVhdGVDZWxsQ29udGVudCk6IENvcnJlY3RseSBkaXNwbGF5IHRoZSBub3cKICAgICAgICAwLWJhc2VkIGxpbmUgbnVtYmVyLiBBbHNvIGFkZCB0aGUgbGluZSBudW1iZXIgdG8gdGhlIHRvb2x0aXAgdG8gbWF0Y2ggd2hhdCB3ZSBkbyBlbHNld2hlcmUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRUaW1lbGluZURhdGFHcmlkTm9kZS5wcm90b3R5cGUuX2dvVG9SZXNvdXJjZSk6IE9ubHkgcGFzcyB0aGUgbGluZU51bWJlciBpZiBpdAogICAgICAgIGlzbid0IHRoZSBmaXJzdCBsaW5lLgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlLmV2ZW50UmVjb3JkZWQucHJvY2Vzc1JlY29yZCk6IFN1YnRyYWN0IDEgZnJvbSB0aGUgbGluZSBudW1iZXJzCiAgICAgICAgY29taW5nIGluIG92ZXIgdGhlIHByb3RvY29sIGJlZm9yZSB1c2luZyB0aGVtIGVsc2V3aGVyZSBpbiB0aGUgSW5zcGVjdG9yLgoKMjAxMi0xMS0wNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFJlbmFtZSBDb250ZW50Vmlldy5rZWVwRWxlbWVudHNTY3JvbGxlZFRvVGhlQm90dG9tIHRvIENvbnRlbnRWaWV3LnNob3VsZEtlZXBFbGVtZW50c1Njcm9sbGVkVG9Cb3R0b20uCgogICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgc2hvdWxkS2VlcEVsZW1lbnRzU2Nyb2xsZWRUb0JvdHRvbSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRWaWV3Q29udGFpbmVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdDb250YWluZXIucHJvdG90eXBlLl9zYXZlU2Nyb2xsUG9zaXRpb25zRm9yQ29udGVudFZpZXcpOgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgc2hvdWxkS2VlcEVsZW1lbnRzU2Nyb2xsZWRUb0JvdHRvbSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lc0NvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcucHJvdG90eXBlLmdldCBzaG91bGRLZWVwRWxlbWVudHNTY3JvbGxlZFRvQm90dG9tKToKCjIwMTItMTEtMDQgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBTYXZlIGFuZCByZXN0b3JlIHRoZSB0aW1lbGluZSBzY3JvbGwgcG9zaXRpb25zIHdoZW4gZ29pbmcgYmFjayBhbmQgZm9ydGggYmV0d2VlbiB2aWV3cy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbiBhbmQgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVzQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldy5wcm90b3R5cGUuc2hvd1RpbWVsaW5lRm9yUmVjb3JkVHlwZSk6IFNhdmUgYW5kIHJlc3RvcmUKICAgICAgICB0aGUgc2Nyb2xsIHBvc2l0aW9uIHdoZW4gc3dhcHBpbmcgdGhlIERhdGFHcmlkcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgc2Nyb2xsYWJsZUVsZW1lbnRzKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IGtlZXBFbGVtZW50c1Njcm9sbGVkVG9UaGVCb3R0b20pOiBBZGRlZC4KCjIwMTItMTEtMDQgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBTaG93IHRoZSBJbml0aWF0b3IgZm9yIHRoZSBsYXlvdXQgYW5kIHN0eWxlIGV2ZW50cyBpbiB0aGUgTGF5b3V0IGFuZCBSZW5kZXJpbmcgdGltZWxpbmUuCgogICAgICAgIFRoaXMgcmVtb3ZlcyB0aGUgQXJlYSBjb2x1bW4gdG8gbWFrZSByb29tLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA5MzU0MDg+IFBBUklUWSAoV2ViS2l0IFdlYiBJbnNwZWN0b3IpOiBBZGQgaW5pdGlhdG9yIGluZm9ybWF0aW9uIHRvIHRoZSB0aW1lbGluZQogICAgICAgIGRhdGEgZ3JpZHMgKGUuZy4gSlMgc3RhY2tzIGZvciBSZWNhbGNTdHlsZSwgTGF5b3V0IGFuZCBQYWludGluZykKCiAgICAgICAgUmV2aWV3ZWQgYnkgUmlja3kgTW9uZGVsbG8gYW5kIEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6IFVwZGF0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NhbGxGcmFtZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNhbGxGcmFtZSk6IEFkZGVkIG5hdGl2ZUNvZGUgcGFyYW1ldGVyLiBBbGxvdyBtb3JlIG51bGwgcGFyYW1ldGVycyBpbiBhc3NlcnRzLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ2FsbEZyYW1lLnByb3RvdHlwZS5nZXQgbmF0aXZlQ29kZSk6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9MYXlvdXRUaW1lbGluZURhdGFHcmlkTm9kZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheW91dFRpbWVsaW5lRGF0YUdyaWROb2RlLnByb3RvdHlwZS5jcmVhdGVDZWxsQ29udGVudCk6IFJlbW92ZWQgImFyZWEiIGFuZCBhZGRlZAogICAgICAgICJpbml0aWF0b3JDYWxsRnJhbWUiIHN1cHBvcnQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xheW91dFRpbWVsaW5lUmVjb3JkLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5b3V0VGltZWxpbmVSZWNvcmQpOiBBZGRlZCBjYWxsRnJhbWVzIHBhcmFtZXRlci4KICAgICAgICAoV2ViSW5zcGVjdG9yLkxheW91dFRpbWVsaW5lUmVjb3JkLnByb3RvdHlwZS5nZXQgY2FsbEZyYW1lcyk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5b3V0VGltZWxpbmVSZWNvcmQucHJvdG90eXBlLmdldCBpbml0aWF0b3JDYWxsRnJhbWUpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNyZWF0ZVNvdXJjZUNvZGVMb2NhdGlvbkxpbmspOiBBZGRlZCBoZWxwZXIuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuZXZlbnRSZWNvcmRlZC5wcm9jZXNzUmVjb3JkKTogQnVpbGQgQ2FsbEZyYW1lcyBmcm9tIHRoZQogICAgICAgIHJlY29yZCBzdGFjayB0cmFjZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuX2NhbGxGcmFtZXNGcm9tUGF5bG9hZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLnByb3RvdHlwZS5fY2FsbEZyYW1lc0Zyb21QYXlsb2FkLmNyZWF0ZUNhbGxGcmFtZSk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZXNDb250ZW50Vmlldy5jc3M6CiAgICAgICAgKC5jb250ZW50LXZpZXcudGltZWxpbmVzID4gLmRhdGEtZ3JpZCB0ZCAuc3VidGl0bGUpOiBBZGRlZC4KICAgICAgICAoLmNvbnRlbnQtdmlldy50aW1lbGluZXMgPiAuZGF0YS1ncmlkOmZvY3VzIHRyLnNlbGVjdGVkIHRkIC5zdWJ0aXRsZSk6IEFkZGVkLgogICAgICAgICguY29udGVudC12aWV3LnRpbWVsaW5lcyA+IC5kYXRhLWdyaWQgdGQgLmljb24pOiBTaW1wbGlmaWVkIHNlbGVjdG9yIHRvIHdvcmsgd2l0aCBhbnkgY29sdW1uLgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZXNDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3KTogQWRkZWQgSW5pdGlhdG9yIGNvbHVtbi4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fc29ydENvbXBhcmF0b3IpOiBBZGRlZCBzdXBwb3J0IGZvciBjb21wYXJpbmcgQ2FsbEZyYW1lLgoKMjAxMi0xMS0wMyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFJlbmFtZSBTY3JpcHRMb2NhdGlvbiB0byBTb3VyY2VDb2RlTG9jYXRpb24gc28gaXQgY2FuIGJlIHJldXNlZCBmb3IgbW9yZSBnZW5lcmljIHN0YWNrIHRyYWNlcy4KCiAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgRGFuIEJlcm5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NhbGxGcmFtZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNhbGxGcmFtZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DYWxsRnJhbWUucHJvdG90eXBlLmdldCBzb3VyY2VDb2RlTG9jYXRpb24pOgogICAgICAgICogVXNlckludGVyZmFjZS9DYWxsRnJhbWVUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNhbGxGcmFtZVRyZWVFbGVtZW50KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGVidWdTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3RyZWVFbGVtZW50U2VsZWN0ZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9EZWJ1Z2dlck1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLmRlYnVnZ2VyRGlkUGF1c2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5fc291cmNlQ29kZUxvY2F0aW9uRnJvbVBheWxvYWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGVMb2NhdGlvbi5qczogUmVuYW1lZCBmcm9tIFdlYkluc3BlY3Rvci9Vc2VySW50ZXJmYWNlL1NjcmlwdExvY2F0aW9uLmpzLgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZUxvY2F0aW9uKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVMb2NhdGlvbi5wcm90b3R5cGUuZ2V0IHNvdXJjZUNvZGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZUxvY2F0aW9uLnByb3RvdHlwZS5nZXQgbGluZU51bWJlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlTG9jYXRpb24ucHJvdG90eXBlLmdldCBjb2x1bW5OdW1iZXIpOgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fYWN0aXZlQ2FsbEZyYW1lRGlkQ2hhbmdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fbWF0Y2hlc1NvdXJjZUNvZGVMb2NhdGlvbik6CgoyMDEyLTExLTAzICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgU3RhcnQgc2hvd2luZyAiSW52YWxpZGF0ZSBTdHlsZXMiIGFuZCAiSW52YWxpZGF0ZSBMYXlvdXQiIGluIHRoZSBMYXlvdXQgYW5kIFJlbmRlcmluZyB0aW1lbGluZS4KCiAgICAgICAgVGhlc2UgcmVjb3JkcyB3aWxsIGJlIHRoZSBvbmUgc2hvd2luZyB0aGUgaW5pdGlhdG9yIChiYWNrIHRyYWNlKSBpbmZvcm1hdGlvbi4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwOTM1NDA4PiBQQVJJVFkgKFdlYktpdCBXZWIgSW5zcGVjdG9yKTogQWRkIGluaXRpYXRvciBpbmZvcm1hdGlvbiB0byB0aGUgdGltZWxpbmUKICAgICAgICBkYXRhIGdyaWRzIChlLmcuIEpTIHN0YWNrcyBmb3IgUmVjYWxjU3R5bGUsIExheW91dCBhbmQgUGFpbnRpbmcpCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6IFVwZGF0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xheW91dFRpbWVsaW5lUmVjb3JkLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5b3V0VGltZWxpbmVSZWNvcmQuRXZlbnRUeXBlLmRpc3BsYXlOYW1lKTogU3VwcG9ydCBJbnZhbGlkYXRlU3R5bGVzIGFuZCBJbnZhbGlkYXRlTGF5b3V0LgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlLmV2ZW50UmVjb3JkZWQucHJvY2Vzc1JlY29yZCk6IEhhbmRsZSAiU2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb24iCiAgICAgICAgYW5kICJJbnZhbGlkYXRlTGF5b3V0IiBhbmQgY3JlYXRlIHJlY29yZHMgZm9yIHRoZW0uCgoyMDEyLTExLTAzICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUm91bmQgd2lkdGggYW5kIGhlaWdodCBpbiB0aGUgbWV0cmljcyBzaWRlYmFyIHRvIHRoZSBuZWFyZXN0IGh1bmRyZWR0aC4KCiAgICAgICAgV2lkdGggYW5kIGhlaWdodCB3ZXJlIG1pc3NlZCB3aGVuIHRoZSBvdGhlciBtZXRyaWNzIHN0YXJ0ZWQgdG8gYmUgcm91bmRlZC4gVGhpcyBhbHNvIGZpeGVzCiAgICAgICAgZWRpdGluZyBieSB1c2luZyB0aGUgdW5yb3VuZGVkIHZhbHVlIGluc3RlYWQgb2Yga2VlcGluZyB0aGUgdGlsZGUuIEFsc28gYXBwZW5kICJweCIgd2hlbgogICAgICAgIHVwZGF0aW5nIHRoZSBzdHlsZSBpZiB0aGVyZSBpcyBhIGRlY2ltYWwgdmFsdWUuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0JveE1vZGVsRGV0YWlsc1NlY3Rpb25Sb3cuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Cb3hNb2RlbERldGFpbHNTZWN0aW9uUm93LnByb3RvdHlwZS5fdXBkYXRlTWV0cmljcy5jcmVhdGVFbGVtZW50KTogQWRkZWQuIE1vdmVkIGZyb20KICAgICAgICB0aGUgY3JlYXRlQm94UGFydEVsZW1lbnQgZnVuY3Rpb24uCiAgICAgICAgKFdlYkluc3BlY3Rvci5Cb3hNb2RlbERldGFpbHNTZWN0aW9uUm93LnByb3RvdHlwZS5fdXBkYXRlTWV0cmljcy5jcmVhdGVCb3hQYXJ0RWxlbWVudCk6IFVzZSBjcmVhdGVFbGVtZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuQm94TW9kZWxEZXRhaWxzU2VjdGlvblJvdy5wcm90b3R5cGUuX3VwZGF0ZU1ldHJpY3MuY3JlYXRlQ29udGVudEFyZWFXaWR0aEVsZW1lbnQpOiBSZW5hbWVkCiAgICAgICAgZnJvbSBnZXRDb250ZW50QXJlYVdpZHRoUHguIFVzZSBjcmVhdGVFbGVtZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuQm94TW9kZWxEZXRhaWxzU2VjdGlvblJvdy5wcm90b3R5cGUuX3VwZGF0ZU1ldHJpY3MuY3JlYXRlQ29udGVudEFyZWFIZWlnaHRFbGVtZW50KTogUmVuYW1lZAogICAgICAgIGZyb20gZ2V0Q29udGVudEFyZWFIZWlnaHRQeC4gVXNlIGNyZWF0ZUVsZW1lbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Cb3hNb2RlbERldGFpbHNTZWN0aW9uUm93LnByb3RvdHlwZS5fdXBkYXRlTWV0cmljcyk6IFVzZSBjcmVhdGVDb250ZW50QXJlYVdpZHRoRWxlbWVudAogICAgICAgIGFuZCBjcmVhdGVDb250ZW50QXJlYUhlaWdodEVsZW1lbnQgaW5zdGVhZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkJveE1vZGVsRGV0YWlsc1NlY3Rpb25Sb3cucHJvdG90eXBlLl9zdGFydEVkaXRpbmcpOiBJZiB0aGUgdGFyZ2V0IGVsZW1lbnQgaGFzIGEgdGl0bGUgdXNlCiAgICAgICAgaXQgYXMgdGhlIGVkaXRpbmcgdmFsdWUgc2luY2UgdGhlIGN1cnJlbnQgdGV4dCBpcyBsaWtlbHkgdHJ1bmNhdGVkL3JvdW5kZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Cb3hNb2RlbERldGFpbHNTZWN0aW9uUm93LnByb3RvdHlwZS5fYXBwbHlVc2VySW5wdXQpOiBBY2NvdW50IGZvciBkZWNpbWFscyB2YWx1ZXMuCgoyMDEyLTExLTAzICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQ2xlYXIgdGhlIHF1aWNrIGNvbnNvbGUgd2hlbiBuYXZpZ2F0aW5nIHRvIGFub3RoZXIgcGFnZS4KCiAgICAgICAgV2hlbiByZWxvYWRpbmcgdGhlIHNhbWUgcGFnZSB3ZSBpbnNlcnQgYSBkaXZpZGVyLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTExOTQ4MTE+IFF1aWNrIENvbnNvbGUgZG9lcyBub3QgY2xlYXIgb24gbmF2aWdhdGlvbi9yZWZyZXNoCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnNvbGVHcm91cC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVHcm91cCk6IEFkZGVkIG5ld1Nlc3Npb24gcGFyYW1ldGVyIGFuZCBzdHlsZSBjbGFzcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyKTogUmVtb3ZlZCBncm91cCBjcmVhdGlvbiBhbmQgY2FsbCBzdGFydE5ld1Nlc3Npb24uCiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlLmNsZWFyKTogQ2FsbCBzdGFydE5ld1Nlc3Npb24gcGFzc2luZyB0cnVlLgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZS5zdGFydE5ld1Nlc3Npb24pOiBBZGRlZC4gTW92ZWQgcGFydHMKICAgICAgICBmcm9tIGNsZWFyIGFuZCB0aGUgY29uc3RydWN0b3IuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ0NvbnRlbnRWaWV3LmNzczoKICAgICAgICAoLmNvbnNvbGUtbWVzc2FnZXMgPiAuY29uc29sZS1ncm91cDpsYXN0LW9mLXR5cGUgLmNvbnNvbGUtdXNlci1jb21tYW5kKTogQWRkZWQuCiAgICAgICAgKC5jb25zb2xlLW1lc3NhZ2UsIC5jb25zb2xlLXVzZXItY29tbWFuZCk6IFJlbW92ZWQgYm9yZGVyLWJvdHRvbS4KICAgICAgICAoLmNvbnNvbGUtbWVzc2FnZTpub3QoOmxhc3QtY2hpbGQpLCAuY29uc29sZS11c2VyLWNvbW1hbmQ6bm90KDpsYXN0LWNoaWxkKSk6IEFkZGVkLgogICAgICAgICguY29uc29sZS1ncm91cDpub3QoOmZpcnN0LWNoaWxkKSk6IEFkZGVkLgogICAgICAgICguY29uc29sZS1ncm91cC5uZXctc2Vzc2lvbik6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fYWN0aXZlTG9nQ2xlYXJlZCk6IENoZWNrIGlzV2FpdGluZ0ZvclJlc3VsdAogICAgICAgIHRvIG1ha2Ugc3VyZSB0aGlzIHdhcyB0aGUgY29uc29sZSB0aGF0IHJlcXVlc3RlZCB0aGUgY2xlYXIuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1F1aWNrQ29uc29sZS5jc3M6CiAgICAgICAgKC5xdWljay1jb25zb2xlID4gLnRvb2xiYXIpOiBBZGRlZCBzaGFkb3cgdG8gbG9vayBsaWtlIGEgYm9yZGVyIG9uIHRoZSB0b29sYmFyLiBUaGlzCiAgICAgICAgaXMgbmVlZGVkIG5vdyB0aGF0IHRoZSBsYXN0IGNvbnNvbGUgbWVzc2FnZSBkb2VzIG5vdCBoYXZlIGEgYm90dG9tLWJvcmRlci4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuZGlkQ2xlYXJNZXNzYWdlcyk6IENsZWFyIF9sYXN0TWVzc2FnZSBhbmQgX2xhc3RNZXNzYWdlSWdub3JlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX2FjdGl2ZUxvZ0NsZWFyZWQpOiBDaGVjayBpc1dhaXRpbmdGb3JSZXN1bHQKICAgICAgICB0byBtYWtlIHN1cmUgdGhpcyB3YXMgdGhlIGNvbnNvbGUgdGhhdCByZXF1ZXN0ZWQgdGhlIGNsZWFyLgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fcHJldmlvdXNNZXNzYWdlUmVwZWF0Q291bnRVcGRhdGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX2xvZ3NDbGVhcmVkKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLl9zZXNzaW9uU3RhcnRlZCk6IEFkZGVkLgoKMjAxMi0xMC0zMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIERvbid0IHNob3cgJ3VuZGVmaW5lZCcgaW4gdGhlIGNvbnNvbGUgYWZ0ZXIgc2VuZGluZyB0aGUgY2xlYXIoKSBjb21tYW5kLgoKICAgICAgICBSZXZpZXdlZCBieSBBZGEgQ2hhbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0phdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlcik6IFNldCBfY2xlYXJlZCB0byB0cnVlLgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZS5jbGVhcik6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZS5wcmludFJlc3VsdCk6IFJldHVybiBlYXJseSBpZiBfY2xlYXJlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUuX2FwcGVuZENvbnNvbGVNZXNzYWdlKTogU2V0IF9jbGVhcmVkIHRvIGZhbHNlLgoKMjAxMi0xMC0zMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFsbG93IGluZGVwZW5kZW50bHkgY2xlYXJpbmcgZWl0aGVyIHRoZSBsb2cgdmlldyBvciB0aGUgcXVpY2sgY29uc29sZS4KCiAgICAgICAgVGhpcyBmaXhlcyB1cCB0aGUgY2xlYXJpbmcgcHJvY2VzcyBhbmQgbW9zdGx5IGRlY291cGxlcyBpdCBmcm9tIExvZ01hbmFnZXIuCiAgICAgICAgVGhlIEFjdGl2ZUxvZ0NsZWFyZWQgZXZlbnQgaXMgbm93IG9ubHkgdXNlZCB0byBob25vciB0aGUgY2xlYXIoKSBjb21tYW5kLgogICAgICAgIFRoaXMgYWxzbyBhZGRzIHRoZSBDbGVhciBMb2cgY29udGV4dCBtZW51IGl0ZW0gdG8gdGhlIFF1aWNrIENvbnNvbGUuCgogICAgICAgIFJldmlld2VkIGJ5IEFudG9pbmUgUXVpbnQuCgogICAgICAgICogVXNlckludGVyZmFjZS9KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlLmNsZWFyKTogRm9jdXMgdGhlIHByb21wdAogICAgICAgIGFuZCBjYWxsIHRoZSBuZXcgZGlkQ2xlYXJNZXNzYWdlcyBkZWxlZ2F0ZSBmdW5jdGlvbi4KICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUuX3JlcXVlc3RDbGVhck1lc3NhZ2VzKTogUmVtb3ZlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUuX3Byb21wdEtleURvd24pOiBDYWxsIGNsZWFyCiAgICAgICAgaW5zdGVhZCBvZiBfcmVxdWVzdENsZWFyTWVzc2FnZXMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ0NvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLmRpZENsZWFyTWVzc2FnZXMpOiBBZGRlZC4gVGVsbCBMb2dNYW5hZ2VyLgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9hY3RpdmVMb2dDbGVhcmVkKTogT25seSBjbGVhciB0aGlzIGxvZyBpZgogICAgICAgIGl0IGlzIGJlaW5nIHVzZWQgYXQgdGhlIHRpbWUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX2NsZWFyTG9nKTogQ2FsbCBjbGVhciBpbnN0ZWFkIG9mIHJlcXVlc3RDbGVhck1lc3NhZ2VzLgogICAgICAgICogVXNlckludGVyZmFjZS9RdWlja0NvbnNvbGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLmRpZENsZWFyTWVzc2FnZXMpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuZGlkQXBwZW5kQ29uc29sZU1lc3NhZ2UpOiBTZXQgX2NsZWFyZWQgdG8gZmFsc2UuCiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLl92aWV3Q29udGFpbmVySGFuZGxlQ29udGV4dE1lbnVFdmVudCk6IEFkZGVkIENsZWFyIExvZwogICAgICAgIGNvbnRleHQgbWVudSBpdGVtLgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fY2xlYXJMb2cpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX2FjdGl2ZUxvZ0NsZWFyZWQpOiBPbmx5IGNsZWFyIHRoaXMgbG9nIGlmIGl0IGlzCiAgICAgICAgYmVpbmcgdXNlZCBhdCB0aGUgdGltZS4gTW92ZSBjb2RlIGZyb20gaGVyZSB0byBkaWRDbGVhck1lc3NhZ2VzLgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fbWVzc2FnZUFkZGVkKTogRXZlbiBpZiB3ZSBzaG93IHRoZSBtZXNzYWdlLAogICAgICAgIHJlbWVtYmVyIGl0IGluIGNhc2Ugd2UgZ2V0IGFuIHVwZGF0ZWQgcmVwZWF0IGNvdW50IGxhdGVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fcHJldmlvdXNNZXNzYWdlUmVwZWF0Q291bnRVcGRhdGVkKToKCjIwMTItMTAtMzEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgYW4gb3B0aW9uIHRvIG1ha2UgdGhlIFF1aWNrIENvbnNvbGUgb25seSBzaG93IG1lc3NhZ2VzIHdoaWxlIGFjdGl2ZWx5IGRlYnVnZ2luZy4KCiAgICAgICAgVGhpcyBhZGRzIGEgY29udGV4dCBtZW51IGl0ZW0gdG8gdG9nZ2xlIHRoZSBvcHRpb24uIFdoZW4gIkFsd2F5cyBTaG93IENvbnNvbGUgTWVzc2FnZXMiCiAgICAgICAgaXMgdW5jaGVja2VkIHRoZW4gY29uc29sZSBtZXNzYWdlcyB3aWxsIG9ubHkgc2hvdyB3aGVuIGV2YWx1YXRpbmcgYW5kIGV4cHJlc3Npb24gb3IKICAgICAgICBzdGVwcGluZyB0aHJvdWdoIGNvZGUgaW4gdGhlIGRlYnVnZ2VyLiBUaGUgZGVmYXVsdCBpcyB0byBhbHdheXMgc2hvdyBtZXNzYWdlcy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExMTk0OTE1PiBSRUdSRVNTSU9OIChTYWZhcmkgNik6IENvbnNvbGUgbWVzc2FnZXMgYXJlIG5vdCBlY2hvZWQgdG8gUXVpY2sgQ29uc29sZQoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiBVcGRhdGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlLmlzV2FpdGluZ0ZvclJlc3VsdCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZS5fYXBwZW5kQ29tbWFuZCk6IFNldCBfd2FpdGluZ0ZvclJlc3VsdC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUuX2FwcGVuZENvbW1hbmQucHJpbnRSZXN1bHQpOiBDbGVhciBfd2FpdGluZ0ZvclJlc3VsdC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlKTogQWRkZWQgZXZlbnQgbGlzdGVuZXJzIGZvciB0aGUgY29udGV4dG1lbnUgZXZlbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLl92aWV3Q29udGFpbmVySGFuZGxlQ29udGV4dE1lbnVFdmVudCk6IEFkZGVkLiBDcmVhdGUgYW5kCiAgICAgICAgc2hvdyB0aGUgY29udGV4dCBtZW51IHdpdGggdGhlIG5ldyBvcHRpb24uCiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLl90b2dnbGVBbHdheXNTaG93Q29uc29sZU1lc3NhZ2VzKTogQWRkZWQuIFRvZ2dsZSB0aGUgc2V0dGluZy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX2FjdGl2ZUxvZ0NsZWFyZWQpOiBDbGVhciB0aGUgaWdub3JlZCBlbXNzYWdlLgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fc2hvdWxkQWRkTmV3TWVzc2FnZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fbWVzc2FnZUFkZGVkKTogQ2hlY2sgX3Nob3VsZEFkZE5ld01lc3NhZ2UgYmVmb3JlIGFwcGVuZGluZy4KICAgICAgICBTcXVpcnJlbCBhd2F5IHRoZSBpZ25vcmVkIG1lc3NhZ2UgaW5jYXNlIHdlIG5lZWQgdG8gc2hvdyBpdCBsYXRlci4KICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX3ByZXZpb3VzTWVzc2FnZVJlcGVhdENvdW50VXBkYXRlZCk6IENoZWNrIF9zaG91bGRBZGROZXdNZXNzYWdlLgogICAgICAgIEFwcGVuZGVkIHRoZSBzcXVpcnJlbGVkIGF3YXkgdGhlIGlnbm9yZWQgbWVzc2FnZSBmaXJzdC4KCjIwMTItMTAtMzAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBSZW1lbWJlciBhbmQgcmVzdG9yZSB0aGUgY29uc29sZSBoaXN0b3J5IGJldHdlZW4gcGFnZSByZWxvYWRzIGFuZCBXZWIgSW5zcGVjdG9yIHNlc3Npb25zLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTEzNDM2NDA+IFJFR1JFU1NJT04gKFNhZmFyaSA2KTogTG9nIHBhbmVsIGNvbnNvbGUgaGlzdG9yeSBvZiBjb21tYW5kcwogICAgICAgICh1cC9kb3duIGFycm93cykgbG9zdCBhZnRlciBwYWdlIG5hdmlnYXRpb24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyKTogQ3JlYXRlIHRoZSBzZXR0aW5nIGFuZCBpbml0aWFsaXplIHRoZSBwcm9tcHQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlLnByaW50UmVzdWx0KTogVXBkYXRlIHRoZSBoaXN0b3J5IHNldHRpbmcKICAgICAgICB3aXRoIHRoZSBsYXN0IDMwIGNvbW1hbmRzLgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3KTogUGFzcyBhIGhpc3Rvcnkgc2V0dGluZyBpZGVudGlmaWVyLgogICAgICAgICogVXNlckludGVyZmFjZS9RdWlja0NvbnNvbGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUpOiBEaXR0by4KCjIwMTItMTAtMzAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBFY2hvIGNvbnNvbGUgbWVzc2FnZXMgdG8gdGhlIFdlYiBJbnNwZWN0b3IncyBxdWljayBjb25zb2xlLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTExOTQ5MTU+IFJFR1JFU1NJT04gKFNhZmFyaSA2KTogQ29uc29sZSBtZXNzYWdlcyBhcmUgbm90IGVjaG9lZCB0byBRdWljayBDb25zb2xlCgogICAgICAgIFJldmlld2VkIGJ5IEFkYSBDaGFuLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlKTogTGlzdGVuIGZvciBNZXNzYWdlQWRkZWQgYW5kIFByZXZpb3VzTWVzc2FnZVJlcGVhdENvdW50VXBkYXRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuZGlkQXBwZW5kQ29uc29sZU1lc3NhZ2UpOiBPbmx5IGF1dG8gZXhwYW5kIGFuZCBzY3JvbGwgZG93bgogICAgICAgIGZvciByZXN1bHQgbWVzc2FnZXMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLl9tZXNzYWdlQWRkZWQpOiBBZGRlZC4gQ2FsbCB0aHJvdWdoLgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fcHJldmlvdXNNZXNzYWdlUmVwZWF0Q291bnRVcGRhdGVkKTogQWRkZWQuIENhbGwgdGhyb3VnaC4KCjIwMTItMTAtMzAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIEphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlciBrZWVwIHRyYWNrIG9mIHRoZSBwcmV2aW91cyBtZXNzYWdlIGFuZCByZXBlYXQgY291bnRzLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTExOTQ5MTU+IFJFR1JFU1NJT04gKFNhZmFyaSA2KTogQ29uc29sZSBtZXNzYWdlcyBhcmUgbm90IGVjaG9lZCB0byBRdWljayBDb25zb2xlCgogICAgICAgIFJldmlld2VkIGJ5IEFkYSBDaGFuLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyKTogRG9uJ3Qgc3RvcmUgX21lc3NhZ2VzLCBpdCB3YXNuJ3QgdXNlZC4gQWRkZWQgX3ByZXZpb3VzTWVzc2FnZQogICAgICAgIGFuZCBfcmVwZWF0Q291bnRXYXNJbnRlcnJ1cHRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUuY2xlYXIpOiBSZXNldCBfcHJldmlvdXNNZXNzYWdlIGFuZCBfcmVwZWF0Q291bnRXYXNJbnRlcnJ1cHRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUuYXBwZW5kQ29uc29sZU1lc3NhZ2UpOiBDbG9uZSB0aGUgbWVzc2FnZSBzaW5jZSB0aGVyZSBtaWdodCBiZQogICAgICAgIG11bHRpcGxlIGNsaWVudHMgdXNpbmcgdGhlIG1lc3NhZ2UsIGFuZCBzaW5jZSB0aGUgbWVzc2FnZSBoYXMgYSBET00gZWxlbWVudCBpdCBjYW4ndCBiZSB0d28gcGxhY2VzIGF0IG9uY2UuCiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlLnVwZGF0ZVByZXZpb3VzTWVzc2FnZVJlcGVhdENvdW50KTogQWRkZWQuIE1vdmVkIGZyb20gTG9nTWFuYWdlci4KICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUuX2FwcGVuZENvbW1hbmQpOiBQYXNzIHRydWUgdG8gX2FwcGVuZENvbnNvbGVNZXNzYWdlIHRvIHNldCB0aGUKICAgICAgICBfcmVwZWF0Q291bnRXYXNJbnRlcnJ1cHRlZCBmbGFnIGFuZCBub3Qgc2V0IF9wcmV2aW91c01lc3NhZ2UuCiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlLl9hcHBlbmRDb21tYW5kLnByaW50UmVzdWx0KTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlLl9hcHBlbmRDb25zb2xlTWVzc2FnZSk6IFNldCBfcmVwZWF0Q291bnRXYXNJbnRlcnJ1cHRlZCBhbmQgb25seQogICAgICAgIHNldCBfcHJldmlvdXNNZXNzYWdlIHdoZW4gcmVwZWF0Q291bnRXYXNJbnRlcnJ1cHRlZCBpcyBmYWxzZS4gRG9uJ3Qgc3RvcmUgX21lc3NhZ2VzLCBpdCB3YXNuJ3QgdXNlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUudXBkYXRlUHJldmlvdXNNZXNzYWdlUmVwZWF0Q291bnQpOiBBZGRlZC4gQ2FsbCB0aHJvdWdoLgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nTWFuYWdlcik6IFJlbW92ZSBpbml0aWFsaXplIGNhbGwuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyLnByb3RvdHlwZS5pbml0aWFsaXplKTogUmVtb3ZlZC4gTm90IG5lZWRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ01hbmFnZXIucHJvdG90eXBlLm1lc3NhZ2VXYXNBZGRlZCk6IERpc3BhdGNoIHRoZSBtZXNzYWdlIGluIGFuIG9iamVjdCwgbm90IGFzIGRhdGEgZGlyZWN0bHkuCiAgICAgICAgQXNzZXJ0IHRoZSBtZXNzYWdlIHdhcyBub3QgdXNlZCBkaXJlY3RseSwgaXQgc2hvdWxkIGJlIGNsb25lZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ01hbmFnZXIucHJvdG90eXBlLm1lc3NhZ2VzQ2xlYXJlZCk6IFJlbW92ZWQgY2FsbCB0byBpbml0aWFsaXplLgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nTWFuYWdlci5wcm90b3R5cGUubWVzc2FnZVJlcGVhdENvdW50VXBkYXRlZCk6IE1PdmVkIHRvIEphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci4KICAgICAgICBGaXJlIFByZXZpb3VzTWVzc2FnZVJlcGVhdENvdW50VXBkYXRlZCBldmVudCBpbnN0ZWFkLgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nTWFuYWdlci5wcm90b3R5cGUuX21haW5SZXNvdXJjZURpZENoYW5nZSk6IFJlbW92ZWQgaW5pdGlhbGl6ZSBjYWxsLgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nTWFuYWdlci5wcm90b3R5cGUuX2FkZE1lc3NhZ2UpOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dTaWRlYmFyUGFuZWwpOiBBZGRlZCBldmVudCBsaXN0ZW5lciBmb3IgUHJldmlvdXNNZXNzYWdlUmVwZWF0Q291bnRVcGRhdGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fbWVzc2FnZUFkZGVkKTogR2V0IG1lc3NhZ2Ugb2ZmIGRhdGEgb2JqZWN0LiBVcGRhdGUgY29tbWVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3ByZXZpb3VzTWVzc2FnZVJlcGVhdENvdW50VXBkYXRlZCk6IEFkZGVkLiBDYWxsIHRocm91Z2ggdG8gY3VycmVudCB2aWV3LgoKMjAxMi0xMC0zMCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIENoYW5nZSB0aGUgaWNvbnMgZm9yIERlYnVnLCBTdG9yYWdlIGFuZCBMb2cgbmF2aWdhdG9ycy4KCiAgICAgICAgVGhpcyBhbHNvIHJlbmFtZWQgRGVidWcgTmF2aWdhdG9yIHRvIENhbGwgU3RhY2sgTmF2aWdhdG9yIGFuZCBtb3ZlZAogICAgICAgIGl0IGFuZCBJc3N1ZSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0IHNpbmNlIHRoZXkgYXJlIG5vdCBhbHdheXMgdmlzaWJsZS4KICAgICAgICBJIHVwZGF0ZWQgdGhlIGtleWJvYXJkIHNob3J0Y3V0IG51bWJlcnMgdG8gbWF0Y2ggdGhlIG5ldyBvcmRlci4KCiAgICAgICAgRm9yIGJldHRlciBiYWxhbmNlLCBJIHVwZGF0ZWQgdGhlIEJyZWFrcG9pbnQgYW5kIElzc3VlIGljb25zLgoKICAgICAgICBUbyBoZWxwIGNsYXJpZnkgdGhlc2UgbmF2aWdhdGlvbiBpdGVtcyBJIGFkZGVkICJOYXZpZ2F0b3IiIG9yICJEZXRhaWxzIgogICAgICAgIHRvIHRoZSB0b29sdGlwcywgc28gdGhleSBhcmUgbm8gbG9uZ2VyIGp1c3Qgc2luZ3VsYXIgd29yZCB0b29sdGlwcy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExOTkxMDIwPiBEZWJ1ZyBpY29uIGlzIHVuaW50dWl0aXZlLCBjb25zaWRlciBhIG5ldyBpY29uCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyNTk4OTM5PiBTdG9yYWdlIGljb24gaXMgdW5pbnR1aXRpdmUsIGNvbnNpZGVyIGEgbmV3IGljb24KICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI1OTY3NTY+IExvZyBpY29uIGlzIHVuaW50dWl0aXZlLCBjb25zaWRlciBhIG5ldyBpY29uCgogICAgICAgIFJldmlld2VkIGJ5IENvbnJhZCBTaHVsdHouCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiBVcGRhdGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9BcHBlYXJhbmNlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGVhcmFuY2VEZXRhaWxzU2lkZWJhclBhbmVsKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQXBwbGljYXRpb25DYWNoZURldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlRGV0YWlsc1NpZGViYXJQYW5lbCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0JyZWFrcG9pbnRTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50U2lkZWJhclBhbmVsKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NTm9kZURldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlRGV0YWlsc1NpZGViYXJQYW5lbCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RlYnVnU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdTaWRlYmFyUGFuZWwpOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmF2aWdhdGlvbkl0ZW1CcmVha3BvaW50LnBkZjogQ2hhbmdlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05hdmlnYXRpb25JdGVtRnVuY3Rpb24ucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05hdmlnYXRpb25JdGVtTG9nLnBkZjogQ2hhbmdlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05hdmlnYXRpb25JdGVtU3RvcmFnZS5wZGY6IENoYW5nZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OYXZpZ2F0aW9uSXRlbVdhcm5pbmcucGRmOiBDaGFuZ2VkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbnN0cnVtZW50U2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zdHJ1bWVudFNpZGViYXJQYW5lbCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0lzc3VlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSXNzdWVTaWRlYmFyUGFuZWwpOgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dTaWRlYmFyUGFuZWwpOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlRGV0YWlsc1NpZGViYXJQYW5lbCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwpOgogICAgICAgICogVXNlckludGVyZmFjZS9TY29wZUNoYWluRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjb3BlQ2hhaW5EZXRhaWxzU2lkZWJhclBhbmVsKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2VhcmNoU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoU2lkZWJhclBhbmVsKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3RvcmFnZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VTaWRlYmFyUGFuZWwpOgoKMjAxMi0xMC0yOCAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgoKICAgICAgICBSZW1vdmUgcmVmZXJlbmNlcyB0byB1bnN1cHBvcnRlZCBPUyBhbmQgWGNvZGUgdmVyc2lvbnMuCgogICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCgogICAgICAgICogQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZzoKICAgICAgICAqIENvbmZpZ3VyYXRpb25zL0NvbXBpbGVyVmVyc2lvbi54Y2NvbmZpZzogUmVtb3ZlZC4KICAgICAgICAqIFdlYkluc3BlY3RvclVJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IFJlbW92ZSByZWZlcmVuY2UgdG8gQ29tcGlsZXJWZXJzaW9uLnhjY29uZmlnLgoKMjAxMi0xMC0yOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgdGhlIFdlYiBJbnNwZWN0b3IncyBjbGVhcigpIGNvbW1hbmQgd29yayBpbiB0aGUgY29uc29sZSBhZ2Fpbi4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExMDA3MzgzPiBSRUdSRVNTSU9OIChTYWZhcmkgNik6IFNob3VsZCBiZSBhYmxlIHRvIGNsZWFyIGN1cnJlbnQgY29uc29sZSBsb2cgdmlhIGNsZWFyKCkgY29tbWFuZAoKICAgICAgICBSZXZpZXdlZCBieSBBZGEgQ2hhbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnNvbGVPYnNlcnZlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVPYnNlcnZlci5wcm90b3R5cGUubWVzc2FnZXNDbGVhcmVkKTogQ2FsbCBMb2dNYW5hZ2VyLm1lc3NhZ2VzQ2xlYXJlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ01hbmFnZXIucHJvdG90eXBlLm1lc3NhZ2VXYXNBZGRlZCk6IEFkZGVkIGNvbW1lbnQgYWJvdXQgQ29uc29sZU9ic2VydmVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nTWFuYWdlci5wcm90b3R5cGUubWVzc2FnZXNDbGVhcmVkKTogQWRkZWQuIE1vdmVkIGZyb20gcmVxdWVzdENsZWFyTWVzc2FnZXMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyLnByb3RvdHlwZS5tZXNzYWdlUmVwZWF0Q291bnRVcGRhdGVkKTogQWRkZWQgY29tbWVudCBhYm91dCBDb25zb2xlT2JzZXJ2ZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyLnByb3RvdHlwZS5yZXF1ZXN0Q2xlYXJNZXNzYWdlcyk6IFJlbW92ZWQgY2xlYXJpbmcgc2luY2UgdGhhdCBoYXBwZW5zCiAgICAgICAgaW4gbWVzc2FnZXNDbGVhcmVkIG5vdyBpbiByZXNwb25zZSB0byB0aGUgcmVxdWVzdC4KCjIwMTItMTAtMjkgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBbGxvdyByZXNpemluZyB0aGUgZG9ja2VkIFdlYiBJbnNwZWN0b3IgZnJvbSBhbnkgZW1wdHkgc3BhY2UgaW4gdGhlIG5hdmlnYXRpb24gYmFycy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExOTY0ODQ5PiBSRUdSRVNTSU9OIChTYWZhcmkgNik6IFJlc2l6aW5nIHRoZSBkb2NrZWQgV2ViIEluc3BlY3RvciBpcyBub3QgZWFzeQoKICAgICAgICBSZXZpZXdlZCBieSBBZGEgQ2hhbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uY3NzOgogICAgICAgIChib2R5LmRvY2tlZCAjZGV0YWlscy1zaWRlYmFyID4gLm5hdmlnYXRpb24tYmFyKTogU2hvdyByb3ctcmVzaXplIGN1cnNvci4KICAgICAgICAoYm9keS5kb2NrZWQgI2RldGFpbHMtc2lkZWJhciA+IC5uYXZpZ2F0aW9uLWJhciAuaXRlbTpub3QoLmZsZXhpYmxlLXNwYWNlKSk6IFJlc2V0IHRoZSBjdXJzb3IgdG8gZGVmYXVsdC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOiBBZGQgZXZlbnQgbGlzdGVuZXJzIHRvIHRoZSBuYXZpZ2F0aW9uIGJhcnMuCgoyMDEyLTEwLTI4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgVXNlIGEgc3BlY2lmaWMgaWNvbiBmb3IgYXBwbGljYXRpb24gY2FjaGUgbWFuaWZlc3RzIGluc3RlYWQgb2YgdGhlIGdlbmVyaWMgZG9jdW1lbnQgaWNvbi4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExNDI3MzgwPiBJbiBTdG9yYWdlIG5hdmlnYXRvciBBcHBsaWNhdGlvbiBDYWNoZSBpY29uIHNob3VsZCBiZSBiZXR0ZXIgdGhhbiBhIGdlbmVyaWMgZG9jdW1lbnQgaWNvbgoKICAgICAgICBSZXZpZXdlZCBieSBSaWNreSBNb25kZWxsby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0FwcGxpY2F0aW9uQ2FjaGVJY29ucy5jc3M6CiAgICAgICAgKC5hcHBsaWNhdGlvbi1jYWNoZS1tYW5pZmVzdCAuaWNvbik6IFVzZSB0aGUgbmV3IGljb25zLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0LnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9BcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RAMngucG5nOiBBZGRlZC4KCjIwMTItMTAtMjggIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSByYWRpbyBuYXZpZ2F0aW9uIGJ1dHRvbnMgb25seSBzd2l0Y2ggZm9yIHRoZSBsZWZ0IG1vdXNlIGJ1dHRvbi4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExNzk1MDgxPiBSaWdodC1jbGlja2luZyBuYXZpZ2F0b3IgaWNvbnMgcHJvZHVjZXMgdW5leHBlY3RlZCByZXN1bHRzCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05hdmlnYXRpb25CYXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uQmFyLnByb3RvdHlwZS5fbW91c2VEb3duKTogUmV0dXJuIGVhcmx5IGlmIGV2ZW50LmJ1dHRvbiAhPT0gMC4KICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25CYXIucHJvdG90eXBlLl9tb3VzZU1vdmVkKTogQXNzZXJ0IGV2ZW50LmJ1dHRvbiAhPT0gMC4KICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25CYXIucHJvdG90eXBlLl9tb3VzZVVwKTogRGl0dG8uCgoyMDEyLTEwLTI3ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSB0aGUgbmV0d29yayB0aW1lbGluZSBiYXJzIGFuZCBjYWxsb3V0cyBIaURQSSBjb21wbGlhbnQuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDY0MzE3NT4gVGltZWxpbmUgcGlsbHMvY2FsbG91dHMgc2hvdWxkIGJlIG1hZGUgSGlEUEkgY29tcGxpYW50CgogICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0JhckJsdWUucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05ldHdvcmtCYXJCbHVlQDJ4LnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrQmFyR3JheS5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0JhckdyYXlAMngucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05ldHdvcmtCYXJHcmVlbi5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0JhckdyZWVuQDJ4LnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrQmFyTGFiZWxDYWxsb3V0TGVmdC5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0JhckxhYmVsQ2FsbG91dFJpZ2h0LnBkZjogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrQmFyTGFiZWxDYWxsb3V0V2hpdGVMZWZ0LnBkZjogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrQmFyTGFiZWxDYWxsb3V0V2hpdGVSaWdodC5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0Jhck9yYW5nZS5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0Jhck9yYW5nZUAyeC5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0JhclB1cnBsZS5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0JhclB1cnBsZUAyeC5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0JhclJlZC5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0JhclJlZEAyeC5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0JhcldoaXRlRmxhdC5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0JhcldoaXRlRmxhdEAyeC5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0JhclllbGxvdy5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0JhclllbGxvd0AyeC5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0hvbGxvd0JhckJsdWUucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05ldHdvcmtIb2xsb3dCYXJCbHVlQDJ4LnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrSG9sbG93QmFyR3JheS5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0hvbGxvd0JhckdyYXlAMngucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05ldHdvcmtIb2xsb3dCYXJHcmVlbi5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0hvbGxvd0JhckdyZWVuQDJ4LnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrSG9sbG93QmFyT3JhbmdlLnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrSG9sbG93QmFyT3JhbmdlQDJ4LnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrSG9sbG93QmFyUHVycGxlLnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrSG9sbG93QmFyUHVycGxlQDJ4LnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrSG9sbG93QmFyUmVkLnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrSG9sbG93QmFyUmVkQDJ4LnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrSG9sbG93QmFyWWVsbG93LnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OZXR3b3JrSG9sbG93QmFyWWVsbG93QDJ4LnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9ncmFwaExhYmVsQ2FsbG91dExlZnQucG5nOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvZ3JhcGhMYWJlbENhbGxvdXRMZWZ0V2hpdGUucG5nOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvZ3JhcGhMYWJlbENhbGxvdXRSaWdodC5wbmc6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9ncmFwaExhYmVsQ2FsbG91dFJpZ2h0V2hpdGUucG5nOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvdGltZWxpbmVIb2xsb3dQaWxsQmx1ZS5wbmc6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy90aW1lbGluZUhvbGxvd1BpbGxHcmF5LnBuZzogUmVtb3ZlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL3RpbWVsaW5lSG9sbG93UGlsbEdyZWVuLnBuZzogUmVtb3ZlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL3RpbWVsaW5lSG9sbG93UGlsbE9yYW5nZS5wbmc6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy90aW1lbGluZUhvbGxvd1BpbGxQdXJwbGUucG5nOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvdGltZWxpbmVIb2xsb3dQaWxsUmVkLnBuZzogUmVtb3ZlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL3RpbWVsaW5lSG9sbG93UGlsbFllbGxvdy5wbmc6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy90aW1lbGluZVBpbGxCbHVlLnBuZzogUmVtb3ZlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL3RpbWVsaW5lUGlsbEdyYXkucG5nOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvdGltZWxpbmVQaWxsR3JlZW4ucG5nOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvdGltZWxpbmVQaWxsT3JhbmdlLnBuZzogUmVtb3ZlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL3RpbWVsaW5lUGlsbFB1cnBsZS5wbmc6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy90aW1lbGluZVBpbGxSZWQucG5nOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvdGltZWxpbmVQaWxsV2hpdGVGbGF0LnBuZzogUmVtb3ZlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL3RpbWVsaW5lUGlsbFllbGxvdy5wbmc6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05ldHdvcmtUaW1lbGluZS5jc3M6CiAgICAgICAgKC5uZXR3b3JrLWdyYXBoLWxhYmVsLmJlZm9yZSk6CiAgICAgICAgKC5uZXR3b3JrLWdyYXBoLWxhYmVsLmJlZm9yZTo6YWZ0ZXIpOgogICAgICAgICgubmV0d29yay1ncmFwaC1sYWJlbC5hZnRlcik6CiAgICAgICAgKC5uZXR3b3JrLWdyYXBoLWxhYmVsLmFmdGVyOjpiZWZvcmUpOgogICAgICAgICgubmV0d29yay1ncmFwaC1iYXIpOgogICAgICAgICgucmVzb3VyY2UtY2FjaGVkIC5uZXR3b3JrLWdyYXBoLWJhcik6CiAgICAgICAgKC5uZXR3b3JrLXJlc291cmNlLXR5cGUtZG9jdW1lbnQgLm5ldHdvcmstZ3JhcGgtYmFyKToKICAgICAgICAoLm5ldHdvcmstcmVzb3VyY2UtdHlwZS1kb2N1bWVudC5yZXNvdXJjZS1jYWNoZWQgLm5ldHdvcmstZ3JhcGgtYmFyKToKICAgICAgICAoLm5ldHdvcmstcmVzb3VyY2UtdHlwZS1zdHlsZXNoZWV0IC5uZXR3b3JrLWdyYXBoLWJhcik6CiAgICAgICAgKC5uZXR3b3JrLXJlc291cmNlLXR5cGUtc3R5bGVzaGVldC5yZXNvdXJjZS1jYWNoZWQgLm5ldHdvcmstZ3JhcGgtYmFyKToKICAgICAgICAoLm5ldHdvcmstcmVzb3VyY2UtdHlwZS1pbWFnZSAubmV0d29yay1ncmFwaC1iYXIpOgogICAgICAgICgubmV0d29yay1yZXNvdXJjZS10eXBlLWltYWdlLnJlc291cmNlLWNhY2hlZCAubmV0d29yay1ncmFwaC1iYXIpOgogICAgICAgICgubmV0d29yay1yZXNvdXJjZS10eXBlLWZvbnQgLm5ldHdvcmstZ3JhcGgtYmFyKToKICAgICAgICAoLm5ldHdvcmstcmVzb3VyY2UtdHlwZS1mb250LnJlc291cmNlLWNhY2hlZCAubmV0d29yay1ncmFwaC1iYXIpOgogICAgICAgICgubmV0d29yay1yZXNvdXJjZS10eXBlLXNjcmlwdCAubmV0d29yay1ncmFwaC1iYXIpOgogICAgICAgICgubmV0d29yay1yZXNvdXJjZS10eXBlLXNjcmlwdC5yZXNvdXJjZS1jYWNoZWQgLm5ldHdvcmstZ3JhcGgtYmFyKToKICAgICAgICAoLm5ldHdvcmstcmVzb3VyY2UtdHlwZS14aHIgLm5ldHdvcmstZ3JhcGgtYmFyKToKICAgICAgICAoLm5ldHdvcmstcmVzb3VyY2UtdHlwZS14aHIucmVzb3VyY2UtY2FjaGVkIC5uZXR3b3JrLWdyYXBoLWJhcik6CiAgICAgICAgKC5uZXR3b3JrLXJlc291cmNlLXR5cGUtb3RoZXIgLm5ldHdvcmstZ3JhcGgtYmFyKToKICAgICAgICAoLm5ldHdvcmstcmVzb3VyY2UtdHlwZS1vdGhlci5yZXNvdXJjZS1jYWNoZWQgLm5ldHdvcmstZ3JhcGgtYmFyKToKICAgICAgICAoLmRhdGEtZ3JpZDpmb2N1cyB0ci5zZWxlY3RlZCAubmV0d29yay1ncmFwaC1iYXIpOgogICAgICAgICguZGF0YS1ncmlkOmZvY3VzIHRyLnNlbGVjdGVkIC5yZXNvdXJjZS1jYWNoZWQgLm5ldHdvcmstZ3JhcGgtYmFyKToKICAgICAgICAoLmRhdGEtZ3JpZDpmb2N1cyB0ci5zZWxlY3RlZCAubmV0d29yay1ncmFwaC1sYWJlbC5iZWZvcmU6OmFmdGVyKToKICAgICAgICAoLmRhdGEtZ3JpZDpmb2N1cyB0ci5zZWxlY3RlZCAubmV0d29yay1ncmFwaC1sYWJlbC5hZnRlcjo6YmVmb3JlKToKCjIwMTItMTAtMjYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBDbGVhciB0aGUgaXNzdWUgbmF2aWdhdG9yIHNpZGViYXIgd2hlbiB0aGUgYWN0aXZlIGxvZyBpcyBjbGVhcmVkLgoKICAgICAgICBSZXZpZXdlZCBieSBBZGEgQ2hhbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0lzc3VlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLklzc3VlTWFuYWdlcik6IExpc3RlbiBmb3IgdGhlIEFjdGl2ZUxvZ0NsZWFyZWQgZXZlbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Jc3N1ZU1hbmFnZXIucHJvdG90eXBlLmluaXRpYWxpemUpOiBEaXNwYXRjaCB0aGUgQ2xlYXJlZCBldmVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLklzc3VlTWFuYWdlci5wcm90b3R5cGUuX2FjdGl2ZUxvZ0NsZWFyZWQpOiBBZGRlZC4gQ2FsbCBpbml0aWFsaXplLgogICAgICAgIChXZWJJbnNwZWN0b3IuSXNzdWVNYW5hZ2VyLnByb3RvdHlwZS5fbWFpblJlc291cmNlRGlkQ2hhbmdlKTogSnVzdCBjYWxsIGluaXRpYWxpemUKICAgICAgICBzaW5jZSBpdCBub3cgZGlzcGF0Y2hlcyB0aGUgQ2xlYXJlZCBldmVudC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOiBDcmVhdGUgbG9nTWFuYWdlciBiZWZvcmUgaXNzdWVNYW5hZ2VyIHNvIElzc3VlTWFuYWdlcgogICAgICAgIGNhbiBsaXN0ZW4gZm9yIHRoZSBBY3RpdmVMb2dDbGVhcmVkIGV2ZW50LgoKMjAxMi0xMC0yNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIENsZWFuIHVwIExvZ0NvbnRlbnRWaWV3IGFuZCBtYWtlIGNsZWFyaW5nIHRoZSBjb25zb2xlIGhhdmUgc3RyYWlnaHRmb3J3YXJkIGNvZGUgcGF0aC4KCiAgICAgICAgVGhlIGljb24gZm9yIHRoZSB0cmFzaGNhbiB3YXMgYWxzbyAxcHggdG9vIGxvdyBhbmQgbm90IGVtYm9zc2VkLgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmF2aWdhdGlvbkl0ZW1UcmFzaC5wZGY6IFVwZGF0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ0NvbnRlbnRWaWV3LmNzczoKICAgICAgICAoLmNvbnNvbGUtbWVzc2FnZXMpOiBDaGFuZ2VkIGZyb20gI2NvbnNvbGUtbWVzc2FnZXMuCiAgICAgICAgKC5jb25zb2xlLW1lc3NhZ2VzIGEpOiBEaXR0by4KICAgICAgICAoLmNvbnNvbGUtbWVzc2FnZXMgYTpob3Zlcik6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3KTogRG9uJ3Qgc2V0IGlkcyBvbiBlbGVtZW50cy4gUmVtb3ZlIHVudXNlZCBjbGFzc05hbWUuCiAgICAgICAgRGlyZWN0bHkgbGlzdGVuIGZvciB0aGUgQWN0aXZlTG9nQ2xlYXJlZCBldmVudC4gUmVtb3ZlIHRydWUgZnJvbSB0aGUgZW5kIG9mIHRoZQogICAgICAgIEJ1dHRvbk5hdmlnYXRpb25JdGVtIGZvciB0aGUgY2xlYXIgYnV0dG9uIHRvIG1ha2UgaXQgZW1ib3NzZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuZGlzYWJsZSk6IFNldCBfZGlzYWJsZWQuIEFsc28gZGlzYWJsZSB0aGUgY2xlYXIKICAgICAgICBidXR0b24gYW5kIGFkZCBhIEZJWE1FLgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLmNvbnNvbGVDbGVhcmVkKTogUmVtb3ZlZC4gUmVwbGFjZWQgYnkgX2FjdGl2ZUxvZ0NsZWFyZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuY2xvc2VkKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuZGlkQXBwZW5kQ29uc29sZU1lc3NhZ2UpOiBSZW1vdmVkLiBTdG9wIGZpcmluZwogICAgICAgIGFuZCBldmVudCBubyBvbmUgbGlzdGVucyBmb3IuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX2hhbmRsZUNvbnRleHRNZW51RXZlbnQpOiBVc2UgX2NsZWFyTG9nLiBEb24ndAogICAgICAgIGFkZCB0aGUgY29udGV4dCBtZW51IGl0ZW0gZm9yIGRpc2FibGVkIGxvZ3MuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX3JlcXVlc3RDbGVhck1lc3NhZ2VzKTogUmVtb3ZlZC4gUmVwbGFjZWQgYnkgX2NsZWFyTG9nLgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9hY3RpdmVMb2dDbGVhcmVkKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX2NsZWFyTG9nKTogQ2FsbCBXZWJJbnNwZWN0b3IubG9nTWFuYWdlci5yZXF1ZXN0Q2xlYXJNZXNzYWdlcwogICAgICAgIGFuZCB3YWl0IGZvciB0aGUgQWN0aXZlTG9nQ2xlYXJlZCBldmVudC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nU2lkZWJhclBhbmVsKTogUmVtb3ZlZCBBY3RpdmVMb2dDbGVhcmVkIGV2ZW50IGxpc3RlbmVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fYWN0aXZlTG9nQ2xlYXJlZCk6IFJlbW92ZWQuCgoyMDEyLTEwLTI2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgVXBkYXRlIGFsbCBvZiB0aGUgZ2VuZXJhdGVkIGljb25zIGluIHRoZSBXZWIgSW5zcGVjdG9yIHdoZW4gdGhlIGRldmljZSBwaXhlbCByYXRpbyBjaGFuZ2VzLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI1NzkwODM+IFVwZGF0ZSBnZW5lcmF0ZWQgaW1hZ2VzIGFzIHRoZSB3aW5kb3cgbW92ZXMgYmV0d2VlbiAxeCBhbmQgMnggc2NyZWVucwoKICAgICAgICBSZXZpZXdlZCBieSBSaWNreSBNb25kZWxsby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlVXRpbGl0aWVzLmpzOgogICAgICAgIChnZW5lcmF0ZUNvbG9yZWRJbWFnZXNGb3JDU1MpOiBBZGRlZCBtYXRjaE1lZGlhIGxpc3RlbmVyLgogICAgICAgIChnZW5lcmF0ZUNvbG9yZWRJbWFnZXNGb3JDU1MuZ2VuZXJhdGVJbWFnZXMpOiBSZW5hbWVkIGZyb20gaW1hZ2VMb2FkZWQuCiAgICAgICAgKGdlbmVyYXRlRW1ib3NzZWRJbWFnZXMpOiBBZGRlZCBtYXRjaE1lZGlhIGxpc3RlbmVyLgogICAgICAgIChnZW5lcmF0ZUVtYm9zc2VkSW1hZ2VzLl9nZW5lcmF0ZUltYWdlcyk6IFJlbmFtZWQgZnJvbSBfaW1hZ2VMb2FkZWQuCgoyMDEyLTEwLTI1ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSBJbWFnZVV0aWxpdGllcy5qcyBpbiBXZWIgSW5zcGVjdG9yIHdlYmtpdEdldEltYWdlRGF0YUhEIGFuZCB3ZWJraXRHZXRJbWFnZURhdGFIRC4KCiAgICAgICAgU2luY2UgdGhlIDJ4IGNhbnZhcyBhcHByb2FjaCB3YXMgbm8gbG9uZ2VyIHdvcmtpbmcgd2Ugbm93IG9ubHkgZ2VuZXJhdGUgb25lIGNhbnZhcyB0aGF0CiAgICAgICAgbWF0Y2hlcyB0aGUgZGV2aWNlIHBpeGVsIHJhdGlvLiBUaGlzIGRvZXMgbm90IHByb3Blcmx5IHVwZGF0ZSBhcyB0aGUgV2ViIEluc3BlY3RvcgogICAgICAgIGNoYW5nZXMgc2NyZWVucywgYW5kIHRoYXQgaXMgdHJhY2tlZCBieSA8cmRhcjovL3Byb2JsZW0vMTI1NzkwODM+LgoKICAgICAgICBUaGUgaWNvbnMgYXJlIHN0aWxsIGJsdXJyeSBpbiBIaURQSSwgYW5kIHRoYXQgaXMgdHJhY2tlZCBieSA8cmRhcjovL3Byb2JsZW0vMTI1NzQxODk+LgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI1NzkwNTY+IFVwZGF0ZSBJbWFnZVV0aWxpdGllcy5qcyB0byBwcm9wZXJseSB3b3JrIGluIEhJRFBJCgogICAgICAgIFJldmlld2VkIGJ5IEFudG9pbmUgUXVpbnQuCgogICAgICAgICogVXNlckludGVyZmFjZS9BY3RpdmF0ZUJ1dHRvbk5hdmlnYXRpb25JdGVtLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQWN0aXZhdGVCdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuZ2VuZXJhdGVTdHlsZVRleHQpOiBSZW1vdmUgMnggc2VsZWN0b3JzLgogICAgICAgICogVXNlckludGVyZmFjZS9CdXR0b25OYXZpZ2F0aW9uSXRlbS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkJ1dHRvbk5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5nZW5lcmF0ZVN0eWxlVGV4dCk6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9SYWRpb0J1dHRvbk5hdmlnYXRpb25JdGVtLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmFkaW9CdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuZ2VuZXJhdGVTdHlsZVRleHQpOiBEaXR0by4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5jc3M6IFJlbW92ZSAyeCBzZWxlY3RvcnMgYW5kIG1lZGlhIHF1ZXJpZXMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVPdXRsaW5lLmNzczogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFHcmlkLmNzczogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RldGFpbHNTZWN0aW9uLmNzczogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ0NvbnRlbnRWaWV3LmNzczogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uY3NzOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvblNpZGViYXJQYW5lbC5jc3M6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9TZWN0aW9uLmNzczogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lc0NvbnRlbnRWaWV3LmNzczogRGl0dG8uCgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZVV0aWxpdGllcy5qczoKICAgICAgICAoZ2VuZXJhdGVDb2xvcmVkSW1hZ2UpOiBVc2Ugd2Via2l0R2V0SW1hZ2VEYXRhSEQgYW5kIHdlYmtpdFB1dEltYWdlRGF0YUhELgogICAgICAgIChnZW5lcmF0ZUNvbG9yZWRJbWFnZXNGb3JDU1MpOiBTdG9wIGdlbmVyYXRpbmcgMnggdmVyc2lvbnMuCiAgICAgICAgKGdlbmVyYXRlRW1ib3NzZWRJbWFnZXMpOiBTdG9wIGdlbmVyYXRpbmcgMnggdmVyc2lvbnMuIFVzZSB3ZWJraXRHZXRJbWFnZURhdGFIRCBhbmQKICAgICAgICB3ZWJraXRQdXRJbWFnZURhdGFIRC4KCjIwMTItMTAtMjUgIEtvcmhhbiBCaXJjYW4gIDxrYmlyY2FuQGFwcGxlLmNvbT4KCiAgICAgICAgRml4IGZvciAiPHJkYXI6Ly9wcm9ibGVtLzEyMTIwMDkyPiBSRUdSRVNTSU9OIChTYWZhcmkgNik6IE5vIGJ1dHRvbiB0byBjbGVhciB0aGUgTG9nIHZpZXcgb3IgUXVpY2sgQ29uc29sZSIuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgVGhlcmUncyBubyAiQ2xlYXIgQ29uc29sZSIgYnV0dG9uIGluIHRoZSBsb2cgY29udGVudCB2aWV3IGFuZCB3ZSBvbmx5IHN1cHBvcnQgQ29tbWFuZC1LIHNob3J0Y3V0CiAgICAgICAgdG8gY2xlYXIgdGhlIGNvbnNvbGUuIFRoaXMgaXMgYSBtaXNzaW5nIGZlYXR1cmUgdGhhdCBoYXMgYmVlbiBtZW50aW9uZWQgYSBmZXcgdGltZXMgb24gVHdpdHRlcgogICAgICAgIGFuZCBTdGFjayBPdmVyZmxvdy4gVGhpcyBwYXRjaCBhZGRzIGEgIkNsZWFyIENvbnNvbGUiIGJ1dHRvbiBpbiB0aGUgbmF2aWdhdGlvbiBiYXIgd2hlcmUgd2UgdGhpbmsKICAgICAgICBpcyBhIGdvb2QgcGxhY2UgZm9yIGRpc2NvdmVyYWJpbGl0eS4KCiAgICAgICAgV2UgY2FuIGxpa2VseSBkbyB0aGUgc2FtZSBmb3IgdGhlIFF1aWNrIENvbnNvbGUgb25jZSB3ZSBkZWNpZGUgd2hlcmUgdGhlIGJlc3QgcGxhY2UgdG8gcHV0IHRoZQogICAgICAgIGJ1dHRvbiBpcy4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6IFJlZ2VuZXJhdGVkIGFmdGVyIGFkZGluZyB0aGUgdG9vbHRpcC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05hdmlnYXRpb25JdGVtVHJhc2gucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nQ29udGVudFZpZXcuanM6CiAgICAgICAgQWRkZWQgYSBuYXZpZ2F0aW9uIGl0ZW0gYnV0dG9uIHdpdGggYSB0cmFzaGNhbiBpY29uIGZvciBjbGVhcmluZyB0aGUgY29uc29sZSBsb2cuCiAgICAgICAgUmVuYW1lZCBjb250ZXh0IG1lbnUgdG9vbHRpcCBmcm9tICJDbGVhciBDb25zb2xlIiB0byAiQ2xlYXIgTG9nIiBmb3IgY29uc2lzdGVuY3kuCgoyMDEyLTEwLTI1ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQ29ycmVjdCB0aGUgYmx1cnJpbmVzcyBvZiB0aGUgQ2xvc2UsIERvY2sgYW5kIFVuZG9jayBuYXZpZ2F0aW9uIGl0ZW1zIGluIHRoZSBXZWIgSW5zcGVjdG9yLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI1NzM4MTY+IENsb3NlLCBEb2NrIGFuZCBVbmRvY2sgbmF2aWdhdGlvbiBpdGVtcyBhcmUgYmx1cnJ5CgogICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9CdXR0b25OYXZpZ2F0aW9uSXRlbS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkJ1dHRvbk5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5fZ2VuZXJhdGVJbWFnZXMpOiBQYXNzIF9pbWFnZUhlaWdodCBpbnN0ZWFkIG9mIF9pbWFnZVdpZHRoIGFnYWluLgoKMjAxMi0xMC0yNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIERhcmtlbiB0aGUgYmx1ZSB1c2VkIGZvciBXZWIgSW5zcGVjdG9yIGFjdGl2ZSBuYXZpZ2F0aW9uIGl0ZW1zIHRvIGhhdmUgYmV0dGVyIGNvbnRyYXN0LgoKICAgICAgICBUaGlzIGFsc28gYWRkcyBhIHNsaWdodCBnbG93IHRvIHNpbXVsYXRlIHRoYXQgdGhlc2UgYnV0dG9ucyBoYXZlIGEgYmx1ZSBsaWdodC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlVXRpbGl0aWVzLmpzOgogICAgICAgICguX2NyZWF0ZUVtYm9zc2VkQ2FudmFzSW1hZ2UpOiBUd2VhayB0aGUgY29sb3JzIGFuZCBhZGQgYSBnbG93LgoKMjAxMi0xMC0yNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEhpZGUgZW1wdHkgbmF2aWdhdGlvbiBzaWRlYmFycyBpbiB0aGUgV2ViIEluc3BlY3RvciB1bnRpbCB0aGV5IGhhdmUgY29udGVudC4KCiAgICAgICAgVGhpcyBoaWRlcyBJc3N1ZXMsIERlYnVnIGFuZCBTdG9yYWdlIGlmIHRoZXkgYXJlIGVtcHR5LiBUaGlzIGZyZWVzIHVwIHRoZSBuYXZpZ2F0aW9uCiAgICAgICAgYmFyIGFuZCBtYWtlcyBpdCBsZXNzIGludGltaWRhdGluZyBpbiBtb3N0IGNhc2VzLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI1NjkzMzk+IEVtcHR5IG5hdmlnYXRpb24gc2lkZWJhcnMgc2hvdWxkIGJlIGhpZGRlbiB1bnRpbCB0aGV5IGhhdmUgY29udGVudC4KCiAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RlYnVnU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9zaG93Tm90UGF1c2VkRW1wdHlDb250ZW50UGxhY2Vob2xkZXIpOiBQYXNzIHRydWUKICAgICAgICB0byBzaG93RW1wdHlDb250ZW50UGxhY2Vob2xkZXIgdG8gaW5kaWNhdGUgdGhlIG5hdmlnYXRpb24gaXRlbSBzaG91bGQgYmUgaGlkZGVuIHRvby4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSXNzdWVTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Jc3N1ZVNpZGViYXJQYW5lbCk6IFBhc3MgdHJ1ZSB0byBOYXZpZ2F0aW9uU2lkZWJhclBhbmVsIGZvciBhdXRvLWhpZGluZy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvbkl0ZW0uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuc2V0IGhpZGRlbik6IFVwZGF0ZSBsYXlvdXQgb3MgaXRlbXMgZXhwYW5kIGFuZCBjb2xsYXBzZQogICAgICAgIGFzIHRoZSBzcGFjZSBhdmFpbGFibGUgY2hhbmdlcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvblNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25TaWRlYmFyUGFuZWwpOiBTdGFydCB0aGUgbmF2aWdhdGlvbiBiYXIgb3V0IGFzIGhpZGRlbiBpZiBhdXRvLWhpZGluZy4KICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25TaWRlYmFyUGFuZWwucHJvdG90eXBlLnNob3dFbXB0eUNvbnRlbnRQbGFjZWhvbGRlcik6IENhbGwKICAgICAgICBfdXBkYXRlTmF2aWdhdGlvbkl0ZW1WaXNpYmlsaXR5IGFmdGVyIHNldHRpbmcgX2hpZGVOYXZpZ2F0aW9uSXRlbVdoZW5FbXB0eS4KICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25TaWRlYmFyUGFuZWwucHJvdG90eXBlLmhpZGVFbXB0eUNvbnRlbnRQbGFjZWhvbGRlcik6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbC5wcm90b3R5cGUudXBkYXRlRW1wdHlDb250ZW50UGxhY2Vob2xkZXIpOiBDYWxsCiAgICAgICAgX3VwZGF0ZU5hdmlnYXRpb25JdGVtVmlzaWJpbGl0eS4KICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25TaWRlYmFyUGFuZWwucHJvdG90eXBlLnNob3duKTogRm9yY2UgbmF2aWdhdGlvbiBpdGVtIHZpc2libGUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLnByb3RvdHlwZS5oaWRkZW4pOiBBZGRlZC4gQ2FsbCBfdXBkYXRlTmF2aWdhdGlvbkl0ZW1WaXNpYmlsaXR5LgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3VwZGF0ZU5hdmlnYXRpb25JdGVtVmlzaWJpbGl0eSk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9TdG9yYWdlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZVNpZGViYXJQYW5lbCk6IFBhc3MgdHJ1ZSB0byBOYXZpZ2F0aW9uU2lkZWJhclBhbmVsIGZvciBhdXRvLWhpZGluZy4KCjIwMTItMTAtMjQgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIENvbW1hbmQtU2hpZnQtQyB0b2dnbGUgdGhlICJwb2ludCB0byBpbnNwZWN0IiBtb2RlLgoKICAgICAgICBUaGlzIHNob3J0Y3V0IG9yaWdpbmF0ZXMgZnJvbSBGaXJlYnVnIGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBpbiBDaHJvbWUuIFRvIG1ha2UgdGhpcyB3b3JrCiAgICAgICAgSSBoYWQgdG8gbWFrZSBET01UcmVlTWFuYWdlciBrZWVwIHRyYWNrIG9mIHRoZSBzdGF0ZSBhbmQgZmlyZSBhbiBldmVudCB3aGVuIGl0IGNoYW5nZWQuCiAgICAgICAgVGhhdCB3YXkgdGhlIGdsb2JhbCBzaG9ydGN1dCBjb3VsZCB0b2dnbGUgdGhlIG1vZGUgZXZlbiBpZiB0aGVyZSBpc24ndCBhIEZyYW1lQ29udGVudFZpZXcuCiAgICAgICAgVGhpcyBhbHNvIGFsbG93cyBhbGwgdGhlIEZyYW1lQ29udGVudFZpZXdzIHRvIGtlZXAgaW4gc3luYyB3aXRoIHRoZSBnbG9iYWwgc3dpdGNoLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjI3NTEzOD4gSW5zcGVjdCBjbGlja2VkIGVsZW1lbnQgbmVlZHMgYSBrZXlib2FyZCBzaG9ydGN1dAoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiBVcGRhdGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLnByb3RvdHlwZS5pbnNwZWN0RWxlbWVudCk6IEZpcmUgSW5zcGVjdE1vZGVTdGF0ZUNoYW5nZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUuZ2V0IGluc3BlY3RNb2RlRW5hYmxlZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIucHJvdG90eXBlLnNldCBpbnNwZWN0TW9kZUVuYWJsZWQuY2FsbGJhY2spOiBBZGRlZC4KICAgICAgICBIYW5kbGUgdGhlIGVycm9yIGNhc2UgYW5kIGZpcmUgSW5zcGVjdE1vZGVTdGF0ZUNoYW5nZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUuc2V0IGluc3BlY3RNb2RlRW5hYmxlZCk6IENoYW5nZWQgZnJvbQogICAgICAgIHNldEluc3BlY3RNb2RlRW5hYmxlZCBpbnRvIGEgc2V0dGVyLiBVc2UgYW4gaW50ZXJuYWwgY2FsbGJhY2suCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgbmF2aWdhdGlvbkl0ZW1zKTogUmVuYW1lZCBfbm9kZVNlYXJjaEFjdGl2YXRlQnV0dG9uTmF2aWdhdGlvbkl0ZW0KICAgICAgICB0byBfaW5zcGVjdE1vZGVCdXR0b25OYXZpZ2F0aW9uSXRlbS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lQ29udGVudFZpZXcucHJvdG90eXBlLnNob3duKTogUmVtb3ZlZCBjYWxsIHRvIF9zZXROb2RlU2VhcmNoRW5hYmxlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lQ29udGVudFZpZXcucHJvdG90eXBlLl9pbnNwZWN0TW9kZVN0YXRlQ2hhbmdlZCk6IFJlbmFtZWQgZnJvbSBfc2V0Tm9kZVNlYXJjaEVuYWJsZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fdG9nZ2xlTm9kZVNlYXJjaCk6IFRvZ2dsZSBXZWJJbnNwZWN0b3IuZG9tVHJlZU1hbmFnZXIuaW5zcGVjdE1vZGVFbmFibGVkCiAgICAgICAgYW5kIGxpc3RlbiBmb3IgdGhlIGV2ZW50IGluc3RlYWQgb2YgYSBjYWxsYmFjay4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOiBDcmVhdGUgYSBzaG9ydGN1dCBmb3IgaW5zcGVjdCBtb2RlLgogICAgICAgIChXZWJJbnNwZWN0b3IuX3RvZ2dsZUluc3BlY3RNb2RlKTogQWRkZWQuCgoyMDEyLTEwLTI0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSBpdCBlYXN5IHRvIGhhdmUgZGlmZmVyZW50IHRvb2x0aXBzIGZvciB0b2dnbGUgYnV0dG9ucyBpbiB0aGUgV2ViIEluc3BlY3Rvci4KCiAgICAgICAgQWxzbyB0d2VhayB0aGUgd29yZGluZyBvZiB0aGUgaGFuZCBidXR0b24gaW4gYW4gYXR0ZW1wdCB0byBrZWVwIGl0IGNsZWFyIGFuZCB0ZXJzZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSmVmZiBNaWxsZXIuCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiBVcGRhdGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9BY3RpdmF0ZUJ1dHRvbk5hdmlnYXRpb25JdGVtLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQWN0aXZhdGVCdXR0b25OYXZpZ2F0aW9uSXRlbSk6IFRha2UgYW4gYWN0aXZhdGVkVG9vbFRpcCBwYXJhbSBpbiBhZGRpdGlvbiB0bwogICAgICAgIGRlZmF1bHRUb29sVGlwIGFuZCBzdG9yZSB0aGVtLgogICAgICAgIChXZWJJbnNwZWN0b3IuQWN0aXZhdGVCdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuZ2V0IGRlZmF1bHRUb29sVGlwKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5BY3RpdmF0ZUJ1dHRvbk5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5nZXQgYWN0aXZhdGVkVG9vbFRpcCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQWN0aXZhdGVCdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuc2V0IGFjdGl2YXRlZCk6IFN3aXRjaCB0aGUgdG9vbHRpcHMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZUNvbnRlbnRWaWV3KTogUGFzcyBpbiBhbHRlcm5hdGUgdG9vbHRpcHMgZm9yIHRoZSBuYXZpZ2F0aW9uIGl0ZW1zLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IFNldHVwIHRoZSB0b29sdGlwcyB3aGVuIHRoZSBuYXZpZ2F0aW9uIGl0ZW1zIGFyZSBjcmVhdGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IudXBkYXRlRG9ja2VkU3RhdGUpOiBSZW1vdmUgdG9vbFRpcCBtYW5pcHVsYXRpb24uCiAgICAgICAgKFdlYkluc3BlY3Rvci5fc2lkZWJhckNvbGxhcHNlZFN0YXRlRGlkQ2hhbmdlKTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1F1aWNrQ29uc29sZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZSk6IFNldHVwIHRoZSB0b29sdGlwcyB3aGVuIHRoZSBuYXZpZ2F0aW9uIGl0ZW1zIGFyZSBjcmVhdGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5zZXQgY29sbGFwc2VkKTogUmVtb3ZlIHRvb2xUaXAgbWFuaXB1bGF0aW9uLgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fZGVidWdnZXJEaWRQYXVzZSk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fZGVidWdnZXJEaWRSZXN1bWUpOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVG9nZ2xlQnV0dG9uTmF2aWdhdGlvbkl0ZW0uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Ub2dnbGVCdXR0b25OYXZpZ2F0aW9uSXRlbSk6VGFrZSBhbiBhbHRlcm5hdGVUb29sVGlwIHBhcmFtIGluIGFkZGl0aW9uIHRvCiAgICAgICAgZGVmYXVsdFRvb2xUaXAgYW5kIHN0b3JlIHRoZW0uCiAgICAgICAgKFdlYkluc3BlY3Rvci5Ub2dnbGVCdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuZ2V0IGRlZmF1bHRUb29sVGlwKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Ub2dnbGVCdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuZ2V0IGFsdGVybmF0ZVRvb2xUaXApOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRvZ2dsZUJ1dHRvbk5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5zZXQgdG9nZ2xlZCk6IFN3aXRjaCB0aGUgdG9vbHRpcHMuCgoyMDEyLTEwLTI1ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CgogICAgICAgIEN1c3RvbWlzZSB0aGUgd29yZC13cmFwcGluZyBiZWhhdmlvdXIgdG8gYnJlYWsgZXZlbiB3aGVuIHRoZXJlIGlzIG5vIHNwYWNlIGluIHRoZSB0ZXh0CiAgICAgICAgdHlwZWQgaW50byB0aGUgY29uc29sZSAoVzNDIHNwZWMgYXQgaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy10ZXh0LyNvdmVyZmxvdy13cmFwKQoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTIzMzE5NDk+IFF1aWNrIGNvbnNvbGUgdGV4dCBvdmVybGFwcyBkZWJ1Z2dpbmcgY29udHJvbHMKCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSmF2YVNjcmlwdFRleHRQcm9tcHQuY3NzOgogICAgICAgICguamF2YXNjcmlwdC1wcm9tcHQpOgoKMjAxMi0xMC0yNCAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICBBZGQgdGhlICJhY3RpdmUtZm9jdXMiIHN0YXRlIGFzIGEgc2hhcmVkIHN0YXRlIGZvciBhbGwgYnV0dG9uIG5hdmlnYXRpb24gaXRlbXMgYW5kIHVzZSB0aGF0IHN0YXRlIGFzIHdlbGwKICAgICAgICBhcyB0aGUgImZvY3VzIiBzdGF0ZSByZWdhcmRsZXNzIG9mIGtleWJvYXJkIGZvY3VzLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTE3NDIwNDk+IFdlYiBJbnNwZWN0b3IgbmF2aWdhdGlvbiBiYXIgYnV0dG9ucyBuZWVkIGEgbW9yZSBub3RpY2VhYmxlIHNlbGVjdGVkIHN0YXRlCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0FjdGl2YXRlQnV0dG9uTmF2aWdhdGlvbkl0ZW0uanM6IFN0b3AgdXNpbmcgY3VzdG9tIHN0YXRlcyBhbmQgdXNlIHRoZSBzaGFyZWQgc3RhdGVzIGRlZmluZWQgaW4KICAgICAgICBCdXR0b25OYXZpZ2F0aW9uSXRlbS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkFjdGl2YXRlQnV0dG9uTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLmdlbmVyYXRlU3R5bGVUZXh0KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnV0dG9uTmF2aWdhdGlvbkl0ZW0uanM6IEFkZCB0aGUgImFjdGl2ZS1mb2N1cyIgZnJvbSBBY3RpdmF0ZUJ1dHRvbk5hdmlnYXRpb25JdGVtLgogICAgICAgICogVXNlckludGVyZmFjZS9SYWRpb0J1dHRvbk5hdmlnYXRpb25JdGVtLmpzOiBVc2UgdGhlICJmb2N1cyIgc3RhdGUgZXZlbiB3aGVuIHdlJ3JlIG5vdCB1c2luZyBrZXlib2FyZCBmb2N1cwogICAgICAgIGFuZCB1c2UgdGhlICJhY3RpdmUtZm9jdXMiIHN0YXRlIHdoZW4gd2UncmUgcHJlc3NpbmcgdGhlIGJ1dHRvbiBhcyB3ZWxsLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmFkaW9CdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuZ2VuZXJhdGVTdHlsZVRleHQpOgoKMjAxMi0xMC0yMyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgIkluc3BlY3QgRWxlbWVudCIgYW5kIHRoZSBpbnNwZWN0KCkgY29uc29sZSBBUEkgc3dpdGNoIHRoZSBzaWRlYmFyIHRvIG1hdGNoIHRoZSBjb250ZW50IHZpZXcuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3BlY3Rvck9ic2VydmVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zcGVjdG9yT2JzZXJ2ZXIucHJvdG90eXBlLmluc3BlY3QpOiBTZWxlY3QgdGhlIHJlc291cmNlU2lkZWJhclBhbmVsIG9yCiAgICAgICAgdGhlIHN0b3JhZ2VTaWRlYmFyUGFuZWwgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIG9iamVjdCBiZWluZyBpbnNwZWN0ZWQuCgoyMDEyLTEwLTIzICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IGV2ZW50IGxpc3RlbmVyIGxpbmtzIGFuZCBtYWtlIHRoZW0gd29yayB3aXRoIGFub255bW91cyBzY3JpcHRzLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI1NTc5Nzg+IFJFR1JFU1NJT046IEV2ZW50IGxpc3RlbmVyIGZ1bmN0aW9uIGxpbmtzIGFyZSBkaXNwbGF5ZWQgYXMKICAgICAgICBudW1iZXJzIGFuZCBkb24ndCB3b3JrCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6IFVwZGF0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RlYnVnZ2VyTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUucmVzZXQpOiBDYWxsIFNjcmlwdC5yZXNldFVuaXF1ZURpc3BsYXlOYW1lTnVtYmVycy4gVGhpcwogICAgICAgIHdheSB0aGUgYW5vbnltb3VzIHNjcmlwdHMgc2NyaXB0cyBzdGFydCBiYWNrIGF0IDEgd2hlbiB5b3UgcmVsb2FkIG9yIGxvYWQgYSBuZXcgcGFnZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXZlbnRMaXN0ZW5lclNlY3Rpb25Hcm91cC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJTZWN0aW9uR3JvdXAucHJvdG90eXBlLl9mdW5jdGlvblRleHRPckxpbmspOiBJbiB0aGUgcGFzdCBzY3JpcHRJZAogICAgICAgIGNvdWxkIGJlIGEgVVJMLiBOb3cgaXQgaXMgYWx3YXlzIGEgc2NyaXB0IGlkZW50aWZpZXIuIFNvIHRyeSBsb29raW5nIHVwIHRoZSByZXNvdXJjZSBieSBVUkwKICAgICAgICBpZiBhIHNjcmlwdCBjYW4ndCBiZSBmb3VuZCBkaXJlY3RseS4gVXNlIFdlYkluc3BlY3Rvci5jcmVhdGVTb3VyY2VDb2RlTGluay4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5jc3M6CiAgICAgICAgKC5nby10by1saW5rKTogQWRkZWQgY3Vyc29yOiBwb2ludGVyIGZvciBjYXNlcyB3aGVuIHRoZSBsaW5rIGhhcyBubyBocmVmLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY3JlYXRlU291cmNlQ29kZUxpbmspOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLmNyZWF0ZVNvdXJjZUNvZGVMaW5rLnNob3dTb3VyY2VDb2RlKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLmdldCBkaXNwbGF5TmFtZSk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9TY3JpcHQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHQucmVzZXRVbmlxdWVEaXNwbGF5TmFtZU51bWJlcnMpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUuZ2V0IGRpc3BsYXlOYW1lKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NjcmlwdFRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0VHJlZUVsZW1lbnQpOiBVc2UgdGhlIGRpc3BsYXlOYW1lIGdldHRlciBmb3IgbWFpblRpdGxlLgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VDb2RlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZS5wcm90b3R5cGUuZ2V0IGRpc3BsYXlOYW1lKTogQWRkZWQuCgoyMDEyLTEwLTIyICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSBkb2NraW5nL3VuZG9ja2luZyB0aGUgV2ViIEluc3BlY3RvciB3b3JrIGFnYWluLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI1NTQ3ODU+IFJFR1JFU1NJT04gKHIxMzIwNDUpOiBEb2NraW5nL3VuZG9ja2luZyBkb2VzIG5vdCB3b3JrCgogICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9JbnNwZWN0b3JGcm9udGVuZEFQSS5qczoKICAgICAgICAoSW5zcGVjdG9yRnJvbnRlbmRBUEkuc2V0QXR0YWNoZWRXaW5kb3cpOiBSZW1vdmVkLgogICAgICAgIChJbnNwZWN0b3JGcm9udGVuZEFQSS5zZXREb2NrU2lkZSk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuX3RvZ2dsZURvY2tlZFN0YXRlKTogVXNlIEluc3BlY3RvckZyb250ZW5kSG9zdC5yZXF1ZXN0U2V0RG9ja1NpZGUuCgoyMDEyLTEwLTIyICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjU0MDUxOT4gU2hvdWxkIGJlIGFibGUgdG8gY29weSB0ZXh0IGZyb20gZGF0YWdyaWQgZWFzaWVyCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgSGF2ZSBhIERhdGFHcmlkIGhhbmRsZSBhIGNvcHkgZXZlbnQgaWYgdGhlIGxhc3Qgc2VsZWN0aW9uIHdhcyBpbiB0aGUKICAgICAgICBEYXRhR3JpZCBhbmQgaXQgaGFzIGEgc2VsZWN0ZWQgcm93LiBBbHNvIGFkZCBhICJDb3B5IFJvdyIgY29udGV4dCBtZW51LgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKICAgICAgICBBZGQgIkNvcHkgUm93IiBjb250ZXh0IG1lbnUgc3RyaW5nLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YUdyaWQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhR3JpZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhR3JpZC5wcm90b3R5cGUuX2NvbnRleHRNZW51SW5EYXRhVGFibGUpOgogICAgICAgIEFkZCAiQ29weSBSb3ciIGNvbnRleHQgbWVudSBpdGVtIGlmIHRoZSBub2RlIGlzIHNlbGVjdGFibGUuCgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YUdyaWQucHJvdG90eXBlLl9jb3B5VGV4dEZvckRhdGFHcmlkTm9kZSk6CiAgICAgICAgUmV0dXJuIGEgdGFiIHNlcGFyYXRlZCBsaXN0IG9mIHZhbHVlcy4gVGhpcyB1c2VzIHRoZSBvcmlnaW5hbCBkYXRhIGZyb20KICAgICAgICB3aGljaCB0aGUgbm9kZSBpcyBjcmVhdGVkLiBJbiBzb21lIGNhc2VzLCBsaWtlIHRoZSBpbnN0cnVtZW50IG5hdmlnYXRvcidzCiAgICAgICAgZGF0YWdyaWRzLCB0aGlzIG1heSBub3QgbWF0Y2ggdGhlIGZpbmFsIERhdGFHcmlkIHJvdydzIGNvbnRlbnQuCgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YUdyaWQucHJvdG90eXBlLl9iZWZvcmVDb3B5KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFHcmlkLnByb3RvdHlwZS5fY29weSk6CiAgICAgICAgQWxsb3cgY29weSB3aGVuIHRoZSBldmVudCBpcyBpbnNpZGUgdGhlIGRhdGFncmlkLCB0aGVyZSBpcyBubyByYW5nZQogICAgICAgIHNlbGVjdGlvbiwgYW5kIHdlIGhhdmUgYSBzZWxlY3RlZCByb3cuCgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YUdyaWQucHJvdG90eXBlLl9jb3B5Um93KToKICAgICAgICBEaXJlY3RseSBjb3B5IGFuIGluZGl2aWR1YWwgcm93LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOgogICAgICAgIFJlbW92ZSB1c2VDYXB0dXJlIGZyb20gdGhlIG1haW4gZG9jdW1lbnQncyBiZWZvcmVjb3B5IGhhbmRsZXIuCgoyMDEyLTEwLTIyICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSB0aGUgV2ViIEluc3BlY3RvciBmYXN0IQoKICAgICAgICBVc2UgYSB0aW1lb3V0IGluc3RlYWQgb2YgYW4gaW50ZXJ2YWwgdG8gcHJldmVudCBiZWluZyBjYXBwZWQgb24gdGhlIHRpbWUgYmV0d2VlbiBwcm90b2NvbCBtZXNzYWdlcy4KICAgICAgICBPbmx5IG9uZSB0aW1lb3V0IGlzIGNyZWF0ZWQgYW5kIHRoZSB3aG9sZSBxdWV1ZSBpcyBkaXNwYXRjaGVkIHdoZW4gdGhlIHRpbWVyIGZpcmVzLiBUaGlzIHByZXZlbnRzCiAgICAgICAgY3JlYXRpbmcgcG90ZW50aWFsbHkgaHVuZHJlZHMgb2YgdGltZXJzIHRoYXQgd2VyZSBhbGwgZmlyaW5nIGF0IHRoZSBzYW1lIHRpbWUuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTc1OTE0NT4gUkVHUkVTU0lPTiAoU2FmYXJpIDYpOiBjb25zb2xlLmxvZygpIGV4aGliaXRzIGV4dHJlbWVseSBsb25nIGRlbGF5IChzbG93KQogICAgICAgIHdoZW4gbWFueSBqYXZhc2NyaXB0IGZpbGVzIGhhdmUganVzdCBiZWVuIGxvYWRlZAoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuZGlzcGF0Y2hOZXh0UXVldWVkTWVzc2FnZUZyb21CYWNrZW5kKTogUmVtb3ZlZCBpbnRlcnZhbCBjb2RlLgogICAgICAgIChXZWJJbnNwZWN0b3IuZGlzcGF0Y2hNZXNzYWdlRnJvbUJhY2tlbmQpOiBVc2Ugc2V0VGltZW91dCBpbnN0ZWFkIG9mIHNldEludGVydmFsLiBVcGRhdGVkIHRoZSBjb21tZW50CiAgICAgICAgYW5kIHJlbW92ZWQgdGhlIHJlZW50cmFuY3kgcGFydCwgd2hpY2ggaXNuJ3QgcG9zc2libGUgc2luY2UgdGhlIGJhY2tlbmQgYWxzbyBoYXMgYSBxdWV1ZSB3aXRoIGEgdGltZXIuCgoyMDEyLTEwLTIyICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyIGJlIHJlc3BvbnNpYmxlIGZvciBzY3JvbGxpbmcgdG8gdGhlIGJvdHRvbSwKICAgICAgICBzaW5jZSBpdCBjYW4gY2hlY2sgYmVmb3JlIG5ldyBtZXNzYWdlcyBhcmUgYWRkZWQgdG8ga25vdyBpZiBhIHNjcm9sbCBpcyBuZWVkZWQuCgogICAgICAgIFRoaXMgZml4ZXMgYSBidWcgd2hlcmUgd2Ugd2VyZSBub3QgYXV0byBzY3JvbGxpbmcgZG93biBpZiB5b3Ugd2VyZSBhdCB0aGUgYm90dG9tLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTIwNDk5ODM+IFJFR1JFU1NJT04gKFNhZmFyaSA2KTogQ29uc29sZSBkb2Vzbid0IGF1dG9zY3JvbGwgd2hlbiBpdCBzaG91bGQKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9obiBTdWxsaXZhbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0phdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlcik6IFN0b3JlIGVsZW1lbnQgYXMgX2VsZW1lbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlLmlzU2Nyb2xsZWRUb0JvdHRvbSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZS5zY3JvbGxUb0JvdHRvbS5kZWxheWVkV29yayk6IEFkZGVkLgogICAgICAgIERvIHRoZSBhY3R1YWwgc2Nyb2xsIGhlcmUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlLnNjcm9sbFRvQm90dG9tKTogQWRkZWQuIERvbid0IHNjcm9sbAogICAgICAgIGltbWVkaWF0ZWx5IHNvIHdlIGFyZSBub3QgY2F1c2luZyBleGNlc3NpdmUgbGF5b3V0cy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUuX2FwcGVuZENvbnNvbGVNZXNzYWdlKTogUmVtZW1iZXIgaWYgd2UKICAgICAgICB3ZXJlIHNjcm9sbGVkIHRvIHRoZSBib3R0b20gYmVmb3JlIGFwcGVuZGluZyB0aGUgbWVzc2FnZS4gVGhpcyB3YXMgdGhlIGJ1ZywgYmVmb3JlIHRoZSBkZWxlZ2F0ZQogICAgICAgIGRpZEFwcGVuZENvbnNvbGVNZXNzYWdlIHdhcyBjaGVja2luZyBhbmQgdGhhdCB3YXMgYWZ0ZXIgdGhlIGNvbnRlbnQgd2FzIGFwcGVuZGVkIGFuZCB3ZSB3ZXJlCiAgICAgICAgbmV2ZXIgc2Nyb2xsZWQgdG8gdGhlIGJvdHRvbSBhdCB0aGF0IHBvaW50LgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5kaWRBcHBlbmRDb25zb2xlTWVzc2FnZSk6IERvbid0IHRyeSB0byBzY3JvbGwsIGl0IGlzCiAgICAgICAgbm93IGhhbmRsZWQgYnkgSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9pc1Njcm9sbEludG9WaWV3U2NoZWR1bGVkKTogUmVtb3ZlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fc2NoZWR1bGVTY3JvbGxJbnRvVmlldyk6IFJlbW92ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX2ltbWVkaWF0ZWx5U2Nyb2xsSW50b1ZpZXcpOiBSZW1vdmVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9jYW5jZWxTY2hlZHVsZWRTY3JvbGxJbnRvVmlldyk6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1F1aWNrQ29uc29sZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX2lzU2Nyb2xsZWRUb0JvdHRvbSk6IENhbGwgdGhyb3VnaCB0byBKYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLl9zY3JvbGxUb0JvdHRvbSk6IERpdHRvLgoKMjAxMi0xMC0yMiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlciBjcmVhdGUgdGhlIHRvcCBXZWJJbnNwZWN0b3IuQ29uc29sZUdyb3VwLgoKICAgICAgICBKYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIgbm93IHRha2VzIHRoZSBwYXJlbnQgZWxlbWVudCBzbyBpdCBjb250cm9scyBtb3JlIG9mIHRoZSBET00uIFRoaXMgd2lsbAogICAgICAgIGJlIG5lZWRlZCB0byBjb250cm9sIHRoZSBzY3JvbGwgc3RhdGUgaW5zdGVhZCBvZiBoYXZpbmcgTG9nQ29udGVudFZpZXcgYW5kIFF1aWNrQ29uc29sZSBkbyBpdC4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEyMDQ5OTgzPiBSRUdSRVNTSU9OIChTYWZhcmkgNik6IENvbnNvbGUgZG9lc24ndCBhdXRvc2Nyb2xsIHdoZW4gaXQgc2hvdWxkCgogICAgICAgIFJldmlld2VkIGJ5IEpvaG4gU3VsbGl2YW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIpOiBEb24ndCB0YWtlIGluIGEgQ29uc29sZUdyb3VwLCBjcmVhdGUgaXQgaW50ZXJuYWxseS4KICAgICAgICBJbnNlcnQgb3IgYXBwZW5kIHRoZSBDb25zb2xlR3JvdXAgaW50byB0aGUgcGFyZW50RWxlbWVudC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldyk6IERvbid0IG1ha2UgdGhlIENvbnNvbGVHcm91cCwganVzdCBnZXQgaXQgZnJvbSBfbG9nVmlld0NvbnRyb2xsZXIuCiAgICAgICAgQ3JlYXRlIGFuZCBhc3NpZ24gdGhpcy5wcm9tcHQgZmlyc3Qgc28gaXQgaXMgaW4gdGhlIERPTSBiZWZvcmUgbWFraW5nIHRoZSBfbG9nVmlld0NvbnRyb2xsZXIuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1F1aWNrQ29uc29sZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZSk6IERvbid0IG1ha2UgdGhlIENvbnNvbGVHcm91cC4KCjIwMTItMTAtMjEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBQcmV2ZW50IHRoZSBzY3JvbGwgcG9zaXRpb24gZnJvbSBjaGFuZ2luZyB3aGVuIHJlYnVpbGRpbmcgdGhlIHN0eWxlcyBzaWRlYmFyLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI1NDQwMDk+IFRoZSBTdHlsZXMgZGV0YWlscyBzaWRlYmFyIHNjcm9sbHMgdG8gdGhlIHRvcCBhZnRlciBlZGl0aW5nIGEgcHJvcGVydHkKCiAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3JlYnVpbGRTZWN0aW9ucyk6IFNhdmUgYW5kIHJlc3RvcmUgc2Nyb2xsVG9wLgoKMjAxMi0xMC0yMCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBhbiAiSW5oZXJpdGVkIFN0eWxlcyIgc2VjdGlvbiB0byB0aGUgU3R5bGUgZGV0YWlscyBzaWRlYmFyLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTE5ODE0Njg+IFJFR1JFU1NJT04gKFNhZmFyaSA2KTogSW5zcGVjdG9yIGRvZXMgbm90IHNob3cgSW5oZXJpdGVkIFN0eWxlIFJ1bGVzCgogICAgICAgIFJldmlld2VkIGJ5IFJpY2t5IE1vbmRlbGxvLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczogVXBkYXRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLmNzczoKICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuZGV0YWlscy5jc3Mtc3R5bGUgLnN0eWxlcy1zZWN0aW9uLmluaGVyaXRlZCAucHJvcGVydGllcyAuaW5oZXJpdGVkKTogQWRkZWQuCiAgICAgICAgSGlkZXMgbm9uLWloZXJpdGVkIHByb3BlcnRpZXMgZm9yIGluaGVyaXRlZCBydWxlcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsKTogQ3JlYXRlIGFuZCBhZGQgdGhlIEluaGVyaXRlZCBTdHlsZXMgc2VjdGlvbi4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3JlYnVpbGRTZWN0aW9ucy5idWlsZFNlY3Rpb25zLmNyZWF0ZVN0eWxlUHJvcGVydGllc1NlY3Rpb24pOgogICAgICAgIFBhc3Mgc3R5bGVSdWxlLmlzSW5oZXJpdGVkIGluc3RlYWQgb2YgYWx3YXlzIHBhc3NpbmcgZmFsc2UuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9yZWJ1aWxkU2VjdGlvbnMuYnVpbGRTZWN0aW9ucy5jcmVhdGVSdWxlR3JvdXBzKTogQWRkZWQuCiAgICAgICAgRmFjdG9yZWQgb3V0IG9mIGNyZWF0ZU1hdGNoZWRSdWxlR3JvdXBzIGZvciByZXVzZSBieSBpbmhlcml0ZWQgcnVsZXMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9yZWJ1aWxkU2VjdGlvbnMuYnVpbGRTZWN0aW9ucy5jcmVhdGVNYXRjaGVkUnVsZUdyb3Vwcyk6CiAgICAgICAgVXNlIHRoZSBmYWN0b3JlZCBvdXQgY3JlYXRlUnVsZUdyb3VwcyBmdW5jdGlvbi4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3JlYnVpbGRTZWN0aW9ucy5idWlsZFNlY3Rpb25zKTogQXBwZW5kIGluaGVyaXRlZCBydWxlcwogICAgICAgIHRvIGluaGVyaXRlZFN0eWxlUnVsZXMgZm9yIGxhdGVyIHVzZS4gV2FsayB0aGUgaW5oZXJpdGVkU3R5bGVSdWxlcyBhbmQgY3JlYXRlIHRoZSBzZWN0aW9ucyBhbmQgZ3JvdXBzLgogICAgICAgICogVXNlckludGVyZmFjZS9EZXRhaWxzU2VjdGlvbi5jc3M6CiAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24gPiAuaGVhZGVyKTogUmVkdWNlIHJpZ2h0IHBhZGRpbmcsIGl0IHdhcyB0b28gd2lkZS4KICAgICAgICAoLmRldGFpbHMtc2VjdGlvbiA+IC5oZWFkZXIgPiAubm9kZS1saW5rLCAuZGV0YWlscy1zZWN0aW9uID4gLmhlYWRlciA+IC5nby10by1hcnJvdyk6IEFkZGVkLgogICAgICAgIEZsb2F0IHJpZ2h0IHRvIHBvc2l0aW9uIHRoZSBhcnJvdyBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgdGl0bGUuCiAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24gPiAuaGVhZGVyIC5nby10by1hcnJvdyk6IEFkZGVkLiBBZGp1c3QgdGhlIHNpemUgYW5kIG1hcmdpbiB0byBiZXR0ZXIgZml0IHRoZSBoZWFkZXIuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N0eWxlUHJvcGVydGllc1NlY3Rpb24uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uKTogQ2hhbmdlZCAic2hvdy1pbmhlcml0ZWQiIHRvIGp1c3QgImluaGVyaXRlZCIuIFRoaXMgcmVkdWNlcyB0aGUKICAgICAgICBjb25mdXNpb24gd2l0aCB0aGUgY29tcHV0ZWQgc3R5bGUgInNob3ctaW5oZXJpdGVkIiBjbGFzcy4KCjIwMTItMTAtMjAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIHRoZSBjb25zb2xlIGxvZyBzdGF5IGFjdGl2ZSB3aGVuIG5hdmlnYXRpbmcgdG8gYSBuZXcgcGFnZSBpZiBvbmUgd2FzIHNob3dpbmcuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjU0MjMwMz4gRE9NIFRyZWUgZm9yY2VzIGl0c2VsZiB2aXNpYmxlIHdoZW4gbmF2aWdhdGluZyB0byBhIG5ldyBwYWdlIHdoaWxlIGxvb2tpbmcgYXQgYSBMb2cKCiAgICAgICAgUmV2aWV3ZWQgYnkgUmlja3kgTW9uZGVsbG8uCgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nTWFuYWdlci5wcm90b3R5cGUuX21haW5SZXNvdXJjZURpZENoYW5nZSk6IE9ubHkgc2VuZCBTZXNzaW9uU3RhcnRlZCBvciBDbGVhcmVkLAogICAgICAgIG5vdCBib3RoLiBUaGlzIHdheSBsaXN0ZW5lcnMgb2YgQ2xlYXJlZCBjYW4gc3RhcnQgdGhlIG5ldyBzZXNzaW9uIHdpdGggc29tZSBjb250ZXh0LgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9zdGFydFNlc3Npb24pOiBBZGRlZC4gRmFjdG9yZWQgb3V0IG9mIF9zZXNzaW9uU3RhcnRlZC4KICAgICAgICBIb25vciB0aGUgZm9yY2VBY3RpdmVDb250ZW50VmlldyBwYXJhbWV0ZXIgd2hlbiBkZWNpZGluZyB0byBzaG93IHRoZSBjb250ZW50IHZpZXcuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9zZXNzaW9uU3RhcnRlZCk6IENhbGwgX3N0YXJ0U2Vzc2lvbi4KICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX2xvZ3NDbGVhcmVkKTogUmVtZW1iZXIgaWYgd2Ugd2VyZSBzaG93aW5nIGEgbG9nIGJlZm9yZQogICAgICAgIGNsb3NpbmcgYWxsIHRoZSBsb2dzLiBDYWxsIF9zdGFydFNlc3Npb24gY2FuIGZvcmNlIHRoZSBjb250ZW50IHZpZXcgdG8gYmUgYWN0aXZlIGlmIHdlIHdlcmUKICAgICAgICBzaG93aW5nIGEgbG9nIGJlZm9yZS4KCjIwMTItMTAtMjAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIEVuY29kZWQgYW5kIFRyYW5zZmVyIFNpemUgdXBkYXRlIHdoZW4gdGhlIHZhbHVlcyBjaGFuZ2UgZHVyaW5nIHBhZ2UgbG9hZC4KCiAgICAgICAgUmVuYW1lZCBFbmNvZGVkIFNpemUgdG8gVHJhbnNmZXIgU2l6ZSB0byBhdm9pZCBjb25mdXNpb24gaW4gY2FzZXMgd2hlcmUgaXQgaXNuJ3QgZW5jb2RlZC4gQWxzbwogICAgICAgIHRoZSB2YWx1ZSBpbmNsdWRlcyB0aGUgcmVzcG9uc2UgaGVhZGVycyBzaXplLCB3aGljaCBpcyB0aGUgb25seSBzaXplIHdoZW4gc2hvd2luZyBhIDMwNC4gVGhpcwogICAgICAgIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgdGl0bGUgb2YgdGhlIFRyYW5zZmVycmVkIGNvbHVtbiBpbiB0aGUgTmV0d29yayBUaW1lbGluZS4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyNTQyMTIyPiBFbmNvZGVkIGFuZCBEZWNvZGVkIFNpemUgZG9lc24ndCB1cGRhdGUgaW4gdGhlIFJlc291cmNlIGRldGFpbHMgc2lkZWJhcgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiBVcGRhdGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5nZXQgdHJhbnNmZXJTaXplKTogTW92ZSB0aGUgMzA0IGNoZWNrIGJlZm9yZSB0aGUgY2FjaGVkCiAgICAgICAgY2hlY2sgc2luY2Ugd2UgbWFyayAzMDQgbG9hZHMgYXMgY2FjaGVkIG5vdywgYnV0IHRoZXJlIHN0aWxsIHdhcyBuZXR3b3JrIHRyYW5zZmVyIG9mIGhlYWRlcnMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUudXBkYXRlRm9yUmVzcG9uc2UpOiBGaXJlIFRyYW5zZmVyU2l6ZURpZENoYW5nZSBmb3IgMzA0IGFuZAogICAgICAgIGlmIHdlIGhhdmUgYSBDb250ZW50LUxlbmd0aC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5pbmNyZWFzZVNpemUpOiBGaXJlIFRyYW5zZmVyU2l6ZURpZENoYW5nZSBpZiB3ZSBkb24ndCBoYXZlCiAgICAgICAgYSBfdHJhbnNmZXJTaXplIGFuZCBpdCBpc24ndCBhIDMwNCBvciBDb250ZW50LUxlbmd0aCBpcyBtaXNzaW5nLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLm1hcmtBc0NhY2hlZCk6IEZpcmUgVHJhbnNmZXJTaXplRGlkQ2hhbmdlIHdoZW4gbm90IGEgMzA0LgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwpOiBSZW5hbWVkICJFbmNvZGVkIFNpemUiIHRvICJUcmFuc2ZlciBTaXplIi4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuc2V0IHJlc291cmNlKTogTGlzdGVuIGZvciBTaXplRGlkQ2hhbmdlIGFuZAogICAgICAgIFRyYW5zZmVyU2l6ZURpZENoYW5nZSBldmVudHMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLnJlZnJlc2gpOiBDYWxsIF9yZWZyZXNoRGVjb2RlZFNpemUgYW5kCiAgICAgICAgX3JlZnJlc2hUcmFuc2ZlclNpemUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9yZWZyZXNoUmVxdWVzdEFuZFJlc3BvbnNlKTogVXNlIGVtRGFzaAogICAgICAgIGluIG1vcmUgcGxhY2VzLiBSZW1vdmVkIHZhbHVlRm9yU2l6ZSBhbmQgdXBkYXRpbmcgb2Ygc2l6ZSByb3dzLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdmFsdWVGb3JTaXplKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9yZWZyZXNoRGVjb2RlZFNpemUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3JlZnJlc2hUcmFuc2ZlclNpemUpOiBBZGRlZC4KCjIwMTItMTAtMTkgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIHRoZSBTY29wZSBDaGFpbiBkZXRhaWxzIHNpZGViYXIgdXBkYXRlIHdoZW4gY29udGludWluZyBpbiBhIGxvb3AuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTgyODY2Nz4gUkVHUkVTU0lPTiAoU2FmYXJpIDYpOiBWYXJpYWJsZXMgZG8gbm90IHVwZGF0ZSB3aGVuIGNvbnRpbnVpbmcgaW4gYSBsb29wCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9hY3RpdmVDYWxsRnJhbWVEaWRDaGFuZ2UpOiBEb24ndCByZXR1cm4gZWFybHkgaWYgdGhlIGxpbmUKICAgICAgICBudW1iZXIgZGlkbid0IGNoYW5nZS4gVGhlIGV4ZWN1dGlvbiBzdGF0ZSBzdGlsbCBjb3VsZCBoYXZlIGNoYW5nZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zZXQgZXhlY3V0aW9uTGluZU51bWJlcik6IE9ubHkgcmV0dXJuIGVhcmx5IGlmIHRoZXJlIGlzbid0IGEgbGluZQogICAgICAgIG51bWJlciBhbmQgdGhhdCBpc24ndCBjaGFuZ2luZy4gU3RpbGwgZGlzcGF0Y2ggdGhlIGV2ZW50IGV2ZW4gaWYgdGhlIG51bWJlciBkaWRuJ3QgY2hhbmdlLiBUaGUgZXhlY3V0aW9uCiAgICAgICAgc3RhdGUgc3RpbGwgY291bGQgaGF2ZSBjaGFuZ2VkLgoKMjAxMi0xMC0xOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEJldHRlciBzdXBwb3J0IGZvciBjb21wbGV4IENvbnRlbnQtVHlwZXMgaW4gdGhlIFBvc3QgRGF0YSBzZWN0aW9uLgoKICAgICAgICBUaGlzIGNoYW5nZSBzcGxpdHMgb3V0IHRoZSBjaGFyc2V0IGFuZCBib3VuZGFyeSBpbmZvIGZyb20gdGhlIENvbnRlbnQtVHlwZSBhbmQKICAgICAgICBkaXNwbGF5cyB0aGF0IGluZm8gb24gc2VwYXJhdGUgcm93cy4gSXQgYWxzbyBoYW5kbGVzIHplcm8gc2l6ZSBkYXRhIHNpbmNlIHRoZQogICAgICAgIGJhY2tlbmQgZG9lcyBub3Qgc2VuZCBkYXRhIGlmIHRoZXJlIGFyZSBhbnkgZmlsZXMgcHJlc2VudC4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzY3MTYwODA+IFJFR1JFU1NJT04gKFNhZmFyaSA2KTogTWlzc2luZyBQT1NUIHJlcXVlc3QgZGF0YQoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiBVcGRhdGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9EZXRhaWxzU2VjdGlvbi5jc3M6CiAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24gPiAuY29udGVudCA+IC5ncm91cCA+IC5yb3cuc2ltcGxlLmRhdGEgPiAudmFsdWUpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGV0YWlsc1NlY3Rpb25TaW1wbGVSb3cuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZXRhaWxzU2VjdGlvblNpbXBsZVJvdy5wcm90b3R5cGUuc2V0IHZhbHVlKTogU2V0IHRoZSBkYXRhIGNsYXNzIG5hbWUKICAgICAgICBpZiB0aGUgdmFsdWUgZG9lcyBub3QgaGF2ZSBhbnkgc3BhY2VzIGZvciBnb29kIHdvcmQgYnJlYWtpbmcuIFRoaXMgd2lsbCBhbGxvdyBicmVha2luZwogICAgICAgIG9uIGV2ZXJ5IGNoYXJhY3Rlciwgd2hpY2ggbG9va3MgYmV0dGVyIGZvciB0aGUgYm91bmRhcnkgcG9zdCBkYXRhIHN0cmluZy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVmcmVzaFBvc3REYXRhU2VjdGlvbik6IFBhcnNlCiAgICAgICAgdGhlIGNvbnRlbnQgdHlwZSBpbnRvIE1JTUUtdHlwZSBhbmQgdGhlIGJvdW5kYXJ5IGFuZC9vciBjaGFyc2V0LgoKMjAxMi0xMC0xOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCB0aGUgZmlyc3QgcGFydCBvZiBzaG93aW5nIFBPU1QgZGF0YTogc2ltcGxlIGRhdGEgaW4gdGhlIFJlc291cmNlIGRldGFpbHMgc2lkZWJhci4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzY3MTYwODA+IFJFR1JFU1NJT04gKFNhZmFyaSA2KTogTWlzc2luZyBQT1NUIHJlcXVlc3QgZGF0YQoKICAgICAgICBSZXZpZXdlZCBieSBEZWFuIEphY2tzb24uCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiBVcGRhdGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9GcmFtZVJlc291cmNlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5mcmFtZURpZE5hdmlnYXRlKTogUmVtb3ZlZCBvcHRpb25hbCBwYXJhbWV0ZXJzCiAgICAgICAgd2hlbiBtYWtpbmcgYSBSZXNvdXJjZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5yZXNvdXJjZVJlcXVlc3RXaWxsQmVTZW50KTogUGFzcyBhbG9uZyBwb3N0RGF0YS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5yZXNvdXJjZVJlcXVlc3RXYXNTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGUpOiBQYXNzIG51bGwgZm9yIHBvc3REYXRhLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLl9hZGROZXdSZXNvdXJjZVRvRnJhbWUpOiBBZGRlZCBwYXJhbWV0ZXIgZm9yIHBvc3REYXRhLgogICAgICAgIFBhc3MgYWxvbmcgcG9zdERhdGEgdG8gUmVzb3VyY2UgY29uc3RydWN0b3IuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUuX2NyZWF0ZUZyYW1lKTogUmVtb3ZlZCBvcHRpb25hbCBwYXJhbWV0ZXJzCiAgICAgICAgd2hlbiBtYWtpbmcgYSBSZXNvdXJjZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5fY3JlYXRlUmVzb3VyY2UpOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2UuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZSk6IEFkZGVkIHBvc3REYXRhIHBhcmFtZXRlci4gU3RvcmUgdGhlIF9wb3N0RGF0YS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5nZXQgcG9zdERhdGEpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5nZXQgcG9zdERhdGFDb250ZW50VHlwZSk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwpOiBDcmVhdGUgX3Bvc3REYXRhU2VjdGlvbi4gRG9uJ3Qgc2hvdyBfcXVlcnlQYXJhbWV0ZXJzU2VjdGlvbgogICAgICAgIGJ5IGRlZmF1bHQsIGl0IGlzIG5vdyBhZGRlZCBvciByZW1vdmVkIGluIF9yZWZyZXNoVVJMLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5yZWZyZXNoKTogQ2FsbCBfcmVmcmVzaFBvc3REYXRhU2VjdGlvbi4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3JlZnJlc2hVUkwpOiBTaG93IGFuZCBoaWRlIHRoZSBxdWVyeQogICAgICAgIHBhcmFtZXRlcnMgc2VjdGlvbiBiYXNlZCBvbiB0aGUgcXVlcnkgc3RyaW5nLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVmcmVzaFBvc3REYXRhU2VjdGlvbik6IEFkZGVkLgoKMjAxMi0xMC0xOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFN1cHBvcnQgdGV4dC94LWphdmFzY3JpcHQgYW5kIG90aGVyIE1JTUUtdHlwZXMgYXMgc2NyaXB0cy4KCiAgICAgICAgVGhlIGNvZGUgd2FzIGFsc28gdGhyb3dpbmcgYW4gZXhjZXB0aW9uIGZvciB1bmtub3duIE1JTUUtdHlwZXMsIHdoaWNoIHdhcyBjYXVzaW5nCiAgICAgICAgdGhlIHZpZXcgZGlzcGxheWluZyB0aGUgUmVzb3VyY2UgdG8gbm90IHNob3cgYW55dGhpbmcuIE5vdyB3ZSBqdXN0IGxvZyBhbiBlcnJvcgogICAgICAgIGFuZCByZXR1cm4gbnVsbCBzbyBwbGFpbiB0ZXh0IHdpbGwgYmUgc2hvd24gZm9yIHVua25vd24gdHlwZXMuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTk2MTQwMz4gUkVHUkVTU0lPTiAoU2FmYXJpIDYpOiBYSFIgcmVzcG9uc2UgaXMgYmxhbmsgZm9yIHNvbWUKICAgICAgICBzaXRlcyAoaW5jbHVkaW5nIHN0b3JlLmFwcGxlLmNvbSkKCiAgICAgICAgUmV2aWV3ZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UuVHlwZS5fbWltZVR5cGVNYXApOiBBZGRlZCBhcHBsaWNhdGlvbi94LWpzb24gYW5kIHZhcmlhbnRzLgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VUb2tlbml6ZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VUb2tlbml6ZXIpOiBBZGRlZCBhcHBsaWNhdGlvbi94LWpzb24gYW5kIHZhcmlhbnRzLiBDaGFuZ2VkIGEgdGhyb3cKICAgICAgICBpbnRvIGEgY29uc29sZS5lcnJvciB3aXRoIGEgcmV0dXJuIG9mIG51bGwuCgoyMDEyLTEwLTE5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUHJvcGVybHkgY2xlYXIgdGhlIHNwZWNpYWwgc2NyaXB0IGZvbGRlcnMgYWZ0ZXIgYSByZWxvYWQgc28gb2xkIHNjcmlwdHMgZG9uJ3Qgc3RheSBhcm91bmQuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTMyOTYwMD4gUkVHUkVTU0lPTiAoU2FmYXJpIDYpOiBTcGVjaWFsIHNjcmlwdHMgZHVwbGljYXRlIGZvciBlYWNoIHJlbG9hZAoKICAgICAgICBSZXZpZXdlZCBieSBBbnRvaW5lIFF1aW50LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3NjcmlwdHNDbGVhcmVkKTogU2V0IGVhY2ggZm9sZGVyIHRvIG51bGwgc28gdGhleSB3aWxsIGJlCiAgICAgICAgcmVjcmVhdGVkIGluc3RlYWQgb2YgcmV1c2VkIHRoZSBuZXh0IHRpbWUgdGhlcmUgaXMgYSBzY3JpcHQgdG8gc2hvdy4KCj0yMDEyLTEwLTE4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IGFuIGlzc3VlIHdoZXJlIHRoZSBJbnNwZWN0b3Igd291bGQgc2hvdyBkdXBsaWNhdGUgYnJva2VuIHJlc291cmNlcyBpZiB5b3Ugb3BlbmVkIGl0CiAgICAgICAgd2hpbGUgdGhlIHBhZ2Ugd2FzIHN0aWxsIGxvYWRpbmcuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTMyODgxOD4gQnJva2VuIHJlc291cmNlcyBpZiB5b3Ugb3BlbiB0aGUgaW5zcGVjdG9yIHdoaWxlIHRoZSBwYWdlIGlzIGxvYWRpbmcKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWVSZXNvdXJjZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUubWFya1Jlc291cmNlUmVxdWVzdEFzU2VydmVkRnJvbU1lbW9yeUNhY2hlKTogQWRkIGEgY29tbWVudAogICAgICAgIGFib3V0IHdoeSB3ZSBtaWdodCBub3QgaGF2ZSBhIHJlc291cmNlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLnJlc291cmNlUmVxdWVzdERpZFJlY2VpdmVSZXNwb25zZSk6IERvbid0IHRyeSB0byBtYWtlIGEKICAgICAgICByZXNvdXJjZSBoZXJlIHNpbmNlIHdlIG1pc3NlZCB0aGUgcmVzb3VyY2VSZXF1ZXN0V2lsbEJlU2VudCBjYWxsLiBJdCBqdXN0IGNhdXNlZCBkdXBsaWNhdGUgcmVzb3VyY2VzCiAgICAgICAgYW5kIGJyb2tlbiBvbmVzIHRvby4gQWRkIGEgY29tbWVudCBhbmQgcmV0dXJuIGVhcmx5LgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLnJlc291cmNlUmVxdWVzdERpZFJlY2VpdmVEYXRhKTogQWRkIGEgY29tbWVudCBhYm91dCB3aHkgd2UKICAgICAgICBtaWdodCBub3QgaGF2ZSBhIHJlc291cmNlLiBSZW1vdmVkIGFuIGFzc2VydC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5yZXNvdXJjZVJlcXVlc3REaWRGaW5pc2hMb2FkaW5nKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUucmVzb3VyY2VSZXF1ZXN0RGlkRmFpbExvYWRpbmcpOiBEaXR0by4KCjIwMTItMTAtMTggIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIG1pc3NpbmcgY29sb3IgYXdhcmUgQ1NTIHByb3BlcnRpZXMuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU0tleXdvcmRDb21wbGV0aW9ucy5qczoKCjIwMTItMTAtMTggIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgSW4gY2FzZXMgd2hlcmUgdGhlIHNlYXJjaCB0ZXJtIGlzIGEgQ1NTIFNlbGVjdG9yIG9yIFhQYXRoIHF1ZXJ5IGFuZAogICAgICAgIG5vdCBhIHRleHR1YWwgbWF0Y2ggd2Ugd2VyZSBub3QgYWRkaW5nIGEgc2lkZWJhciBlbnRyeS4gSW4gc3VjaCBjYXNlcwogICAgICAgIGFkZCBhIHNpZGViYXIgZW50cnkgYW5kIGhpZ2hsaWdodCB0aGUgZW50aXJlIHRpdGxlLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI1MjI0OTQ+IFNlYXJjaGluZyAibGlua1tocmVmXSIgaW4gc2VhcmNoIG5hdmlnYXRvciBoYXMgbWlzc2luZyBzaWRlYmFyIGl0ZW1zCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NlYXJjaFNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbC5wZXJmb3JtU2VhcmNoLmRvbUNhbGxiYWNrLmRvbVNlYXJjaFJlc3VsdHMpOgogICAgICAgIEZpcnN0IGNoZWNrIGZvciBwYXJ0aWFsIGhpZ2hsaWdodHMgaW4gdGV4dHVhbCBtYXRjaGVzLiBJZiBub25lIHdlcmUKICAgICAgICBmb3VuZCwgdGhpcyBpcyBhIFNlbGVjdG9yIG9yIFhQYXRoIG1hdGNoLCBhbmQgd2UgaGlnaGxpZ2h0IGl0IGVudGlyZWx5LgoKMjAxMi0xMC0xOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEhhcmRlbiB0aGUgV2ViIEluc3BlY3RvciBhIGJpdCB3aXRoIGEgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgaGVhZGVyLgoKICAgICAgICBCeSBkZWZhdWx0IG9ubHkgbG9hZCBjb250ZW50IGZyb20gJ3NlbGYnLiBBbGxvdyBleHRlcm5hbCBsb2FkaW5nIG9mIGltYWdlcywgbWVkaWEgYW5kCiAgICAgICAgZm9udHM7IGJlY2F1c2UgbGFyZ2UgcmVzb3VyY2VzIGFyZSBub3Qgc2VudCBvdmVyIHRoZSBpbnNwZWN0b3IgcHJvdG9jb2wuIEFsbG93IGlubGluZQogICAgICAgIHN0eWxlcyBhbmQgZXZhbCBmb3Igc2NyaXB0cy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgoKMjAxMi0xMC0xNyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEltcHJvdmUgZXJyb3IgcmVwb3J0aW5nIGZvciBJbnNwZWN0b3IgcHJvdG9jb2wgZXJyb3JzLgoKICAgICAgICBSZXZpZXdlZCBieSBEZWFuIEphY2tzb24uCgogICAgICAgICogVXNlckludGVyZmFjZS9JbnNwZWN0b3JCYWNrZW5kLmpzOgogICAgICAgIChJbnNwZWN0b3JCYWNrZW5kQ2xhc3MucHJvdG90eXBlLnJlcG9ydFByb3RvY29sRXJyb3IpOiBMb2cgdGhlIG1lc3NhZ2Ugb2YgdGhlIGVycm9yCiAgICAgICAgb2JqZWN0LCBub3QgdGhlIGVycm9yIG9iamVjdCBpdHNlbGYuCgoyMDEyLTEwLTE3ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CgogICAgICAgIFdlIG5vdyBkaXNwbGF5IGEgbmV3IHNlY3Rpb24gaW4gdGhlIHJlc291cmNlIGRldGFpbHMgc2lkZWJhciBwYW5lbCBmb3IgdGhlIGltYWdlIHNpemUgd2hlbiB3ZSdyZSBpbnNwZWN0aW5nCiAgICAgICAgYW4gaW1hZ2UgcmVzb3VyY2UuIFRvIGZhY2lsaXRhdGUgdGhpcywgd2UgYWRkIGEgbmV3IC5nZXRJbWFnZVNpemUoKSBtZXRob2Qgb24gUmVzb3VyY2Ugd2hpY2ggY3JlYXRlcyBhbgogICAgICAgIDxpbWc+IGVsZW1lbnQgdG8gbG9hZCB0aGUgYmFzZTY0IHZlcnNpb24gb2YgdGhlIGltYWdlIGFzIGl0IHdhcyBsb2FkZWQgYW5kIHVzZSB0aGUgbG9hZGVkIGVsZW1lbnQgdG8gcXVlcnkKICAgICAgICB0aGUgaW50cmluc2ljIGltYWdlIG1ldHJpY3MuCiAgICAgICAgCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExMjQ3Mjg4PiBSRUdSRVNTSU9OIChTYWZhcmkgNik6IFdpZHRoIGFuZCBoZWlnaHQgc2l6ZSBpbmZvIGZvciBpbWFnZSByZXNvdXJjZXMgaXMgbWlzc2luZwoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5tYXJrQXNGYWlsZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLmdldEltYWdlU2l6ZS5pbWFnZURpZExvYWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLmdldEltYWdlU2l6ZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlRGV0YWlsc1NpZGViYXJQYW5lbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLnJlZnJlc2gpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fY3JlYXRlTmFtZVZhbHVlRGF0YUdyaWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVmcmVzaEltYWdlU2l6ZVNlY3Rpb24pOgoKMjAxMi0xMC0xNiAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgoKICAgICAgICBBZGQgYSBjb25maWd1cmF0aW9uIHNldHRpbmcgdG8gY29udHJvbCB3aGV0aGVyIHJlc291cmNlcyBpbiB0aGUKICAgICAgICBXZWIgSW5zcGVjdG9yIGZyYW1ld29yayBhcmUgY29tYmluZWQgYW5kIG1pbmlmaWVkLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgIFRoaXMgYWxsb3dzIG5vbi1Qcm9kdWN0aW9uIGJ1aWxkcyB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5IGlmIGRlc2lyZWQuCgogICAgICAgICogQ29uZmlndXJhdGlvbnMvV2ViSW5zcGVjdG9yRnJhbWV3b3JrLnhjY29uZmlnOgogICAgICAgICogU2NyaXB0cy9jb3B5LXVzZXItaW50ZXJmYWNlLXJlc291cmNlcy5zaDoKCjIwMTItMTAtMTYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBGaXggYW4gZXhjZXB0aW9uIGFuZCBwcm9wZXJseSBkZWFjdGl2YXRlIHRoZSBub2RlIHNlYXJjaCBidXR0b24gYWZ0ZXIgYSBub2RlIGlzIGluc3BlY3RlZC4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyNTA3MTgxPiBSZW1uYW50IG1lbnRpb24gb2YgLm5vZGVTZWFyY2hBY3RpdmF0ZUJ1dHRvbk5hdmlnYXRpb25JdGVtIGluIE1haW4uanMKCiAgICAgICAgUmV2aWV3ZWQgYnkgUmlja3kgTW9uZGVsbG8uCgogICAgICAgICogVXNlckludGVyZmFjZS9GcmFtZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVDb250ZW50Vmlldyk6IEFkZGVkIERPTU5vZGVXYXNJbnNwZWN0ZWQgZXZlbnQgbGlzdGVuZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fZG9tTm9kZVdhc0luc3BlY3RlZCk6IEFkZGVkLiBEZWFjdGl2YXRlIHRoZSBub2RlIHNlYXJjaCBidXR0b24uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5fZG9tTm9kZVdhc0luc3BlY3RlZCk6IEFsd2F5cyBjYWxsIEluc3BlY3RvckZyb250ZW5kSG9zdC5icmluZ1RvRnJvbnQoKS4gVGhpcyBpcyBnb29kCiAgICAgICAgZm9yIHRoZSBJbnNwZWN0IEVsZW1lbnQgY29udGV4dCBtZW51IGl0ZW0gaW4gd2luZG93ZWQgbW9kZSB0b28uCgoyMDEyLTEwLTE2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IHRoZSBkb2NrIGJ1dHRvbnMgaW4gdGhlIFdlYiBJbnNwZWN0b3IgbmF2aWdhdGlvbiBiYXIgd2hlbiBvcGVuaW5nIHRoZSBJbnNwZWN0b3Igd2l0aCB0aGUgbGVmdCBzaWRlYmFyIGhpZGRlbi4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyNTA5NTc3PiBSRUdSRVNTSU9OOiBEb2NrIG5hdmlnYXRpb24gaXRlbXMgYXJlIGluIHRoZSB3cm9uZyBwbGFjZSBpZiB0aGUKICAgICAgICBJbnNwZWN0b3IgaXMgb3BlbmVkIHdpdGggdGhlIGxlZnQgc2lkZWJhciBoaWRkZW4KCiAgICAgICAgUmV2aWV3ZWQgYnkgUmlja3kgTW9uZGVsbG8uCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuX3VwZGF0ZURvY2tOYXZpZ2F0aW9uSXRlbXMpOiBPbmx5IGRvIHRoaXMgd29yayBpZiBuZWVkZWQgYnkgY2hlY2tpbmcgaWYgdGhlIGNsb3NlIGJ1dHRvbiBpcyBub3QKICAgICAgICBpbiB0aGUgcmlnaHQgcGxhY2UuIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcywgYW5kIHRoZSBjb25jYXQgY2FuIGNhdXNlIHRoZSBpdGVtcyB0byBiZQogICAgICAgIGluc2VydGVkIGludG8gdGhlIGxlZnROYXZpZ2F0aW9uSXRlbXMgYXJyYXkgbXVsdGlwbGUgdGltZXMuCgoyMDEyLTEwLTE2ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CgogICAgICAgIEFkZGluZyBkZWNvZGVkIGFuZCBlbmNvZGVkIHNpemVzIGFzIGEgbmV3IGdyb3VwIGluIHRoZSBSZXF1ZXN0ICYgUmVzcG9uc2UgcGFuZWwgaW4KICAgICAgICB0aGUgcmVzb3VyY2UgZGV0YWlscyBzaWRlYmFyIHBhbmVsLiBUbyBtYWtlIHRoZSByZXBvcnRlZCBzaXplcyBtb3JlIGxlZ2libGUsIHdlIGFsc28KICAgICAgICBtYWtlIGEgc21hbGwgY2hhbmdlIGluIE51bWJlci5ieXRlc1RvU3RyaW5nKCkgc3VjaCB0aGF0IHdlIGhhdmUgYSBzcGFjZSBiZXR3ZWVuIHRoZQogICAgICAgIHZhbHVlIGFuZCB0aGUgdW5pdCwganVzdCBsaWtlIHdoYXQgdGhlIEdldCBJbmZvIHBhbmVsIGRvZXMgaW4gdGhlIEZpbmRlci4KICAgICAgICAKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI1MDgyMTU+IEFkZCBkZWNvZGVkIGFuZCBlbmNvZGVkIHNpemVzIHRvIFJlcXVlc3QgJiBSZXNwb25zZSBwYW5lbAoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVmcmVzaFJlcXVlc3RBbmRSZXNwb25zZS52YWx1ZUZvclNpemUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVmcmVzaFJlcXVlc3RBbmRSZXNwb25zZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1V0aWxpdGllcy5qczoKICAgICAgICAoTnVtYmVyLnN0cmluZ19hcHBlYXJlZF9oZXJlLnZhbHVlKToKCjIwMTItMTAtMTYgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgV2UgYWRkIGEgbmV3IG1ldGhvZCB0byBzeW5jIHRoZSBzdGF0ZSBvZiB0aGUgY29tcG9zaXRpbmcgYm9yZGVycyBidXR0b24gdG8gdGhlIFdlYkNvcmUgcGFnZSBzZXR0aW5ncwogICAgICAgIHdoZW4gYSBmcmFtZSBjb250ZW50IHZpZXcgaXMgc2hvd24gaW4gdGhlIFdlYiBJbnNwZWN0b3IgVUkuIFdlIGFsc28gYWRkIGEgbmV3IGJhY2tlbmQgY29tbWFuZCB0byBjb21wbGVtZW50CiAgICAgICAgdGhlIE9wZW5Tb3VyY2UgcGF0Y2ggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTQ1OCB3aGljaCBpcyBhbHNvIG91dCBmb3IgcmV2aWV3LgogICAgICAgIAogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjQ5ODE4MT4gIlNob3cgY29tcG9zaXRpbmcgYm9yZGVycyIgYnV0dG9uIGlzIG5vdCBhY3RpdmF0ZWQgd2hlbiBpbnNwZWN0b3IgaXMgcmUtb3BlbmVkCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5zaG93bik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fdG9nZ2xlQ29tcG9zaXRpbmdCb3JkZXJzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lQ29udGVudFZpZXcucHJvdG90eXBlLl91cGRhdGVDb21wb3NpdGluZ0JvcmRlcnNCdXR0b25Ub01hdGNoUGFnZVNldHRpbmdzKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzOgoKMjAxMi0xMC0xNiAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICBBZGQgYSBuZXcgLmhpZ2hsaWdodCgpIG1ldGhvZCBvbiBUZXh0RWRpdG9yQ2h1bmsgd2hpY2ggYXBwbGllcyBhIHNpbXBsZSBDU1MKICAgICAgICBhbmltYXRpb24gdG8gdGhlIEhUTUwgZWxlbWVudCBmb3IgdGhlIHRleHQgY2h1bmssIGFuZCBjYWxsIHRoaXMgbWV0aG9kIGluCiAgICAgICAgVGV4dEVkaXRvcidzIHJldmVhbExpbmUoKSBtZXRob2QuIFNpbmNlIHRoZSBDU1MgY2xhc3Mgd2UncmUgYXBwbHlpbmcgaXMgb25seQogICAgICAgIG1lYW50IHRvIGJlIHRyYW5zaXRvcnksIHdlIHJlbW92ZSB0aGUgQ1NTIGNsYXNzIG5hbWUgdXBvbiBjb21wbGV0aW9uIG9mIHRoZQogICAgICAgIGFuaW1hdGlvbi4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyMzQ5Mjk4PiBSRUdSRVNTSU9OIChTYWZhcmkgNik6IFdoZW4gY2xpY2tpbmcgYSBmaWxlL2xpbmUgbGluawogICAgICAgIGluIHRoZSBjb25zb2xlIHRoZSBsaW5lIGlzIG5vdCBoaWdobGlnaHRlZCBpbiB0aGUgc291cmNlCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuY3NzOgogICAgICAgICgudGV4dC1lZGl0b3ItdGV4dC1jaHVuay5oaWdobGlnaHRlZCk6CiAgICAgICAgKEAtd2Via2l0LWtleWZyYW1lcyBmYWRlb3V0KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnJldmVhbExpbmUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvclRleHRDaHVuay5wcm90b3R5cGUudXBkYXRlQ29udGVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yVGV4dENodW5rLnByb3RvdHlwZS5oaWdobGlnaHQpOgoKMjAxMi0xMC0xNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEZpeCBhbiBleGNlcHRpb24gaW4gQ29udGVudEJyb3dzZXIuX3VwZGF0ZUNvbnRlbnRWaWV3TmF2aWdhdGlvbkl0ZW1zIHRoYXQgd2FzIGNhdXNpbmcgcmVzb3VyY2UgdG8gbm90IGJlIGNsZWFyZWQuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjUwMTI2OT4gUkVHUkVTU0lPTjogUmVsb2FkaW5nIG9yIGxvYWRpbmcgYSBuZXcgcGFnZSBkb2VzIG5vdCBjbGVhciBwcmV2aW91cyByZXNvdXJjZXMKCiAgICAgICAgUmV2aWV3ZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRCcm93c2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIucHJvdG90eXBlLl91cGRhdGVDb250ZW50Vmlld05hdmlnYXRpb25JdGVtcyk6IFRoZSBjdXJyZW50Q29udGVudFZpZXcgY2FuIGJlCiAgICAgICAgbnVsbCB3aGVuIHRoaXMgaXMgY2FsbGVkLiBJbiB0aGF0IGNhc2UganVzdCBjbGVhciBfY3VycmVudENvbnRlbnRWaWV3TmF2aWdhdGlvbkl0ZW1zIGFuZCByZXR1cm4gZWFybHkuCgoyMDEyLTEwLTE1ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUmVtb3ZlIGV4dHJhIGxpbmUgYnJlYWtzIGJlZm9yZSBjb2xvciB2YWx1ZXMgd2hlbiBjb3B5aW5nIGZyb20gdGhlIHN0eWxlIHNpZGViYXIuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjUwNjA5OT4gV2hlbiBjb3B5aW5nIHN0eWxlIHJ1bGUgc2V0cyBmcm9tIHRoZSBzaWRlYmFyLAogICAgICAgIGxpbmUgYnJlYWtzIGFyZSBpbnNlcnRlZCBpbiB0aGUgbWlkZGxlIG9mIGVhY2ggbGluZQoKICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwuY3NzOgogICAgICAgICguc2lkZWJhciA+IC5wYW5lbC5kZXRhaWxzLmNzcy1zdHlsZSAuc3dhdGNoKTogSW1wcm92ZSBzcGFjaW5nIGFuZCBhbGlnbm1lbnQgc2luY2UKICAgICAgICBoYXZpbmcgc3dhdGNoLWlubmVyIGFzIGFuIGlubGluZS1ibG9jayBhZmZlY3RzIGxheW91dCBzbGlnaHRseS4KICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuZGV0YWlscy5jc3Mtc3R5bGUgLnN3YXRjaC1pbm5lcik6IENoYW5nZSBkaXNwbGF5IGZyb20gYmxvY2sgdG8KICAgICAgICBpbmxpbmUtYmxvY2suIFRoaXMgZml4ZXMgdGhlIGJ1ZyBieSBtYWtpbmcgV2ViS2l0IG5vdCBpbnNlcnQgYSBuZXdsaW5lIGZvciB0aGUgYmxvY2suCgoyMDEyLTEwLTE1ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgVHJlYXQgU1ZHIG1haW4gcmVzb3VyY2VzIGFzIGRvY3VtZW50cyBhbmQgc3ludGF4IGhpZ2hsaWdodCB0aGVtIHVzaW5nIHRoZSBIVE1MIHRva2VuaXplci4KCiAgICAgICAgU1ZHIHN1YnJlc291cmNlcyBhcmUgc3RpbGwgdHJlYXRlZCBhcyBpbWFnZXMgYW5kIHByZXZpZXcgYXMgc3VjaC4gVGhpcyBtYXRjaGVzIGhvdyB0aGUKICAgICAgICBXZWJLaXQgV2ViIEluc3BlY3RvciB0cmVhdHMgU1ZHcy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExMzMyNjg4PiBSRUdSRVNTSU9OIChTYWZhcmkgNik6IFNvdXJjZSBjb2RlIHZpZXcgc2hvd3MgU1ZHIGltYWdlIGluc3RlYWQgb2Ygc291cmNlCgogICAgICAgIFJldmlld2VkIGJ5IEFkYSBDaGFuIGFuZCBEYW4gQmVybnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2UuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5UeXBlLl9taW1lVHlwZU1hcCk6IEFkZGVkIGltYWdlL3N2Zyt4bWwKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlVG9rZW5pemVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlVG9rZW5pemVyKTogVXNlIEhUTUxTb3VyY2VUb2tlbml6ZXIgZm9yIGltYWdlL3N2Zyt4bWwuCgoyMDEyLTEwLTE0ICBKZWZmIE1pbGxlciAgPGplZmZtQGFwcGxlLmNvbT4KCiAgICAgICAgUmVnZW5lcmF0ZSBsb2NhbGl6ZWRTdHJpbmdzLmpzIGFmdGVyIHI0NTI2My4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6CiAgICAgICAgUmVnZW5lcmF0ZWQuCgoyMDEyLTEwLTEzICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQXZvaWQgZGlyZWN0IG1hbmlwdWxhdGlvbiBvZiB0aGUgQ29udGVudEJyb3dzZXIgYW5kIFNpZGViYXIgbmF2aWdhdGlvbiBiYXJzIGluIE1haW4uanMuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjQ5NDE5Mz4gTWFpbi5qcyBzaG91bGQgbm90IG1vZGlmeSB0aGUgbmF2aWdhdGlvbkJhcnMgZGlyZWN0bHkKCiAgICAgICAgUmV2aWV3ZWQgYnkgQW50b2luZSBRdWludC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRCcm93c2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIpOiBBZGRlZCBfbGVmdE5hdmlnYXRpb25JdGVtcyBhbmQgX3JpZ2h0TmF2aWdhdGlvbkl0ZW1zLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIucHJvdG90eXBlLmdldCBsZWZ0TmF2aWdhdGlvbkl0ZW1zKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuc2V0IGxlZnROYXZpZ2F0aW9uSXRlbXMpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyLnByb3RvdHlwZS5nZXQgcmlnaHROYXZpZ2F0aW9uSXRlbXMpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyLnByb3RvdHlwZS5zZXQgcmlnaHROYXZpZ2F0aW9uSXRlbXMpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyLnByb3RvdHlwZS5fdXBkYXRlQ29udGVudFZpZXdOYXZpZ2F0aW9uSXRlbXMpOiBGaXggYQogICAgICAgIEZJWE1FIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGluc2VydGlvbkluZGV4IGJ5IHVzaW5nIF9yaWdodE5hdmlnYXRpb25JdGVtcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOiBVc2UgbGVmdE5hdmlnYXRpb25JdGVtcyBhbmQgcmlnaHROYXZpZ2F0aW9uSXRlbXMKICAgICAgICBpbnN0ZWFkIG9mIGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgdGhlIG5hdmlnYXRpb24gYmFyLgogICAgICAgIChXZWJJbnNwZWN0b3IuX3VwZGF0ZURvY2tOYXZpZ2F0aW9uSXRlbXMpOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvbkJhci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25CYXIucHJvdG90eXBlLmluc2VydE5hdmlnYXRpb25JdGVtKTogUmVtb3ZlIHRoZSBpdGVtIGlmIGl0CiAgICAgICAgaXMgYWxyZWFkeSBpbiBhbm90aGVyIE5hdmlnYXRpb25CYXIuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NpZGViYXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyKTogQWRkZWQgX2xlZnROYXZpZ2F0aW9uSXRlbXMgYW5kIF9yaWdodE5hdmlnYXRpb25JdGVtcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXIucHJvdG90eXBlLmluc2VydFNpZGViYXJQYW5lbCk6IERvbid0IHVzZSBhZGROYXZpZ2F0aW9uSXRlbQogICAgICAgIHNpbmNlIHRoYXQgd291bGQgZ28gYWZ0ZXIgdGhlIHJpZ2h0IGl0ZW1zLgogICAgICAgIChXZWJJbnNwZWN0b3IuU2lkZWJhci5wcm90b3R5cGUuZ2V0IGxlZnROYXZpZ2F0aW9uSXRlbXMpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXIucHJvdG90eXBlLnNldCBsZWZ0TmF2aWdhdGlvbkl0ZW1zKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyLnByb3RvdHlwZS5nZXQgcmlnaHROYXZpZ2F0aW9uSXRlbXMpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXIucHJvdG90eXBlLnNldCByaWdodE5hdmlnYXRpb25JdGVtcyk6IEFkZGVkLgoKMjAxMi0xMC0xMyAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgoKICAgICAgICBXZSBhZGQgYSBuZXcgbmF2aWdhdGlvbiBpdGVtIHRvIHRoZSBGcmFtZUNvbnRlbnRWaWV3IHRvIHRvZ2dsZSBjb21wb3NpdGlvbiBkZWJ1ZyBvcHRpb25zIHVzaW5nCiAgICAgICAgdGhlIHBhZ2UncyBzZXR0aW5ncy4gVG8gZmFjaWxpdGF0ZSB0aGF0LCB3ZSBhZGRlZCBhIG5ldyBtZXRob2QgaW4gSW5zcGVjdG9yUGFnZUFnZW50IHRvIGFsbG93CiAgICAgICAgdG8gdGFwIGludG8gV2ViQ29yZSBhbmQgY2hhbmdlIHRob3NlIHNldHRpbmdzLiBUaGF0IHdvcmsgaXMgY292ZXJlZCBieSBhbiBPcGVuU291cmNlIHBhdGNoIGZvcgogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTI1My4KICAgICAgICAKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTAzNTgwMDQ+IFdvdWxkIGxpa2UgYWJpbGl0eSB0byB0dXJuIGxheWVyIGJvcmRlcnMgb24vb2ZmIHZpYSB0aGUgV2ViIEluc3BlY3RvcgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9GcmFtZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVDb250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IG5hdmlnYXRpb25JdGVtcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5zaG93bik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fdG9nZ2xlTm9kZVNlYXJjaCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fdG9nZ2xlQ29tcG9zaXRpbmdCb3JkZXJzKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05hdmlnYXRpb25JdGVtTGF5ZXJzLnBkZjogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qczoKCjIwMTItMTAtMTIgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgV2UgcmVtb3ZlIHRoZSBjb2RlIHRoYXQgbWFuYWdlcyB0aGUgZGlzcGxheSBvZiB0aGUgIm5vZGUgaW5zcGVjdGlvbiBieSBzZWxlY3Rpb24iIHRvZ2dsZSBuYXZpZ2F0aW9uCiAgICAgICAgaXRlbSBmcm9tIE1haW4uanMgYW5kIGxldCB0aGUgQ29udGVudEJyb3dzZXIgYWRkIGFuZCByZW1vdmUgbmF2aWdhdGlvbiBpdGVtcyByZWdpc3RlcmVkIG9uIHRoZSBDb250ZW50VmlldwogICAgICAgIGluc3RhbmNlIG1hZGUgdGhlIGN1cnJlbnQgY29udGVudCB2aWV3LgogICAgICAgIAogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjQ4Nzk1OT4gTGV0IGNvbnRlbnQgdmlld3MgcHJvdmlkZSBuYXZpZ2F0aW9uIGl0ZW1zIHRvIHRoZSBjb250ZW50IGJyb3dzZXIuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRCcm93c2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIucHJvdG90eXBlLl91cGRhdGVDb250ZW50Vmlld05hdmlnYXRpb25JdGVtcy52YXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIucHJvdG90eXBlLl91cGRhdGVDb250ZW50Vmlld05hdmlnYXRpb25JdGVtcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuX2N1cnJlbnRDb250ZW50Vmlld0RpZENoYW5nZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXcucHJvdG90eXBlLmdldCBuYXZpZ2F0aW9uSXRlbXMpOgogICAgICAgICogVXNlckludGVyZmFjZS9GcmFtZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVDb250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IG5hdmlnYXRpb25JdGVtcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5zaG93bik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fcGF0aENvbXBvbmVudFNlbGVjdGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lQ29udGVudFZpZXcucHJvdG90eXBlLl9zZXROb2RlU2VhcmNoRW5hYmxlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fdG9nZ2xlTm9kZVNlYXJjaCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKToKCjIwMTItMTAtMTIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBVcGRhdGUgdGhlIENTU0tleXdvcmRDb21wbGV0aW9ucy5Jbmhlcml0ZWRQcm9wZXJ0aWVzIGxpc3QuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjM3MTc1Nj4gQ29tcHV0ZWQgLXdlYmtpdC1mb250LXNtb290aGluZyBzaG91bGQgYXBwZWFyIGluIEluc3BlY3RvcgoKICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NLZXl3b3JkQ29tcGxldGlvbnMuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NLZXl3b3JkQ29tcGxldGlvbnMuSW5oZXJpdGVkUHJvcGVydGllcyk6IFVwZGF0ZWQgZnJvbSBDU1NQcm9wZXJ0eTo6aXNJbmhlcml0ZWRQcm9wZXJ0eQogICAgICAgIGZyb20gV2ViQ29yZS4gVGhlIG9sZCBsaXN0IHdhcyBmcm9tIGFuIG9sZCBDU1MgMi4xIGxpc3QuCgoyMDEyLTEwLTEyICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRG9uJ3Qgb3ZlcmRyYXcgdGhlIERhdGFHcmlkIHNvcnQgaW5kaWNhdG9yIGVhY2ggdGltZSBhIERhdGFHcmlkIGlzIGNyZWF0ZWQuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjQ4ODY1Mz4gRGF0YUdyaWQgc29ydCBpbmRpY2F0b3Iga2VlcHMgZ2V0dGluZyBkYXJrZXIKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9obiBTdWxsaXZhbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFHcmlkLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YUdyaWQucHJvdG90eXBlLl9nZW5lcmF0ZVNvcnRJbmRpY2F0b3JJbWFnZXNJZk5lZWRlZCk6IFN0b3JlIF9nZW5lcmF0ZWRTb3J0SW5kaWNhdG9ySW1hZ2VzCiAgICAgICAgb24gdGhlIFdlYkluc3BlY3Rvci5EYXRhR3JpZCBjb25zdHJ1Y3RvciBzbyBpdCBvbmx5IGdlbmVyYXRlcyB0aGUgaW1hZ2VzIG9uY2UuIFVzZSBhIHNvbGlkIGNvbG9yIGZvciB0aGUKICAgICAgICBhcnJvd3MuIFRoZSBwcmV2aW91cyBjb2xvciB3YXMgdG9vIGxpZ2h0IG5vdyB0aGF0IGl0IGlzbid0IG92ZXJkcmF3aW5nLgoKMjAxMi0xMC0xMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFNob3cgdGhlIEhUVFAgbWV0aG9kLCBjYWNoZWQgYW5kIEhUVFAgc3RhdHVzIGNvZGUvdGV4dCBpbiB0aGUgUmVzb3VyY2UgZGV0YWlscyBzaWRlYmFyLgoKICAgICAgICBUaGlzIGZpeGVzIHR3byBjYXNlcyB3aGVyZSB0aGUgcmVzb3VyY2Ugd2FzIG5vdCBtYXJrZWQgYXMgY2FjaGVkOyB3aGVuIGxvYWRlZCBmcm9tIHRoZQogICAgICAgIGRpc2sgY2FjaGUgYW5kIHdoZW4gdGhlcmUgaXMgYSAzMDQgcmVzcG9uc2UuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTI1NjY0NT4gUkVHUkVTU0lPTiAoU2FmYXJpIDYpOiBObyBIVFRQIG1ldGhvZCBzaG93bgoKICAgICAgICBSZXZpZXdlZCBieSBSaWNreSBNb25kZWxsby4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6IFVwZGF0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lUmVzb3VyY2VNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLnJlc291cmNlUmVxdWVzdFdpbGxCZVNlbnQpOiBQYXNzIGFsb25nIHRoZSBtZXRob2QuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUucmVzb3VyY2VSZXF1ZXN0V2FzU2VydmVkRnJvbU1lbW9yeUNhY2hlKTogUGFzcyBudWxsCiAgICAgICAgZm9yIHRoZSByZXF1ZXN0IG1ldGhvZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5yZXNvdXJjZVJlcXVlc3REaWRSZWNlaXZlUmVzcG9uc2UpOiBNYXJrIGFzIGNhY2hlZAogICAgICAgIHdoZW4gbG9hZGVkIGZyb20gdGhlIGRpc2sgY2FjaGUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUuX2FkZE5ld1Jlc291cmNlVG9GcmFtZSk6IFBhc3MgYWxvbmcgdGhlIG1ldGhvZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2UuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZSk6IEFkZGVkIHJlcXVlc3RNZXRob2QgYW5kIHN0b3JlIGl0LgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLmdldCByZXF1ZXN0TWV0aG9kKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUudXBkYXRlRm9yUmVzcG9uc2UpOiBSZW5hbWVkIFJlc3BvbnNlSGVhZGVyc0RpZENoYW5nZSBldmVudCB0bwogICAgICAgIFJlc3BvbnNlUmVjZWl2ZWQgc2luY2UgaXQgcmVwcmVzZW50cyBtb3JlIHRoYW4gaGVhZGVycy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5tYXJrQXNDYWNoZWQpOiBGaXJlIENhY2hlU3RhdHVzRGlkQ2hhbmdlIGV2ZW50LgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwpOiBDcmVhdGUgbmV3IHJvd3MgYW5kIHNlY3Rpb24uCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLnNldCByZXNvdXJjZSk6IExpc3RlbiBmb3IgbmV3IGV2ZW50cy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUucmVmcmVzaCk6IENhbGwgX3JlZnJlc2hSZXF1ZXN0QW5kUmVzcG9uc2UKICAgICAgICBpbnN0ZWFkIG9mIF9yZWZyZXNoUmVzcG9uc2VIZWFkZXJzLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVmcmVzaFJlcXVlc3RBbmRSZXNwb25zZSk6IEFkZGVkLgogICAgICAgIFVwZGF0ZSB0aGUgbmV3IHNlY3Rpb24gYW5kIGFsc28gY2FsbCBfcmVmcmVzaFJlc3BvbnNlSGVhZGVycy4KCjIwMTItMTAtMTEgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KCiAgICAgICAgSWRlbnRpZnkgZmxvYXRpbmcgdmFsdWUgYW5kIGRpc3BsYXkgYSByb3VuZGVkIHZhbHVlIHRvIHRoZSAxMDB0aCBpbiB0aGUgYm94IG1vZGVsCiAgICAgICAgc2VjdGlvbiB3aXRoIGEgdGh1bWJuYWlsIHNob3dpbmcgdGhlIGZ1bGwgdmFsdWUuIEhlcmUgYXJlIHNjcmVlbnNob3RzIG9mIGJlZm9yZQogICAgICAgIGFmdGVyIGFwcGx5aW5nIHRoaXMgcGF0Y2ggZm9yIG1hcmdpbnMgd2l0aCBhIGZsb2F0aW5nIHZhbHVlLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI0NzgxNjY+IEJveCBNb2RlbCBzZWN0aW9uIGNhbiBzaG93IHZhbHVlcyBvdmVybGFwcGluZyB0aGVpciBsYWJlbAoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Cb3hNb2RlbERldGFpbHNTZWN0aW9uUm93LmpzCgoyMDEyLTEwLTExICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CgogICAgICAgIE1ha2UgaGVhZGVycyBpbiB0aGUgZGV0YWlscyBzZWN0aW9uIHVzZSBhbiBlbGxpcHNpcyBvdmVyZmxvdyBzdHlsZS4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyNDc4MTUxPiBDbGFzcyBuYW1lcyBpbiB0aGUgbGlzdCBvZiBpbmhlcml0ZWQgY2xhc3NlcyBpbiB0aGUgTm9kZQogICAgICAgIHNpZGViYXIgY2FuIG92ZXJmbG93CgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RldGFpbHNTZWN0aW9uLmNzcwoKMjAxMi0xMC0xMCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFByZXZlbnQgc2VhcmNoZXMgZnJvbSBicmVha2luZyBsaW5rcyBpbiB0aGUgU291cmNlIENvZGUgdmlldyBvZiB0aGUgV2ViIEluc3BlY3Rvci4KCiAgICAgICAgVGhpcyBjaGFuZ2VzIGhvdyB0aGUgc3ludGF4IGhpZ2hsaWdodGVyIGFwcGVuZHMgdG9rZW5zIGFuZCBzZWFyY2ggcmVzdWx0cy4gVGhlIHRva2VuCiAgICAgICAgZWxlbWVudHMgYXJlIG5vdyBjcmVhdGVkIGluIHdob2xlIGJlZm9yZSBwcm9jZXNzaW5nIHRoZSBpbm5lciB0ZXh0IGFuZCBzZWFyY2ggcmVzdWx0cy4KICAgICAgICBCZWZvcmUgdGhlIERPTSB3b3VsZCBlbmQgdXAgYmVpbmcgZmxhdHRlciwgYnV0IGl0IGNhdXNlZCBtdWx0aXBsZSBsaW5rcyB0byBiZSBjcmVhdGVkCiAgICAgICAgaWYgYSBzZWFyY2ggcmVzdWx0IHdhcyBpbiB0aGUgbWlkZGxlLiBUaGUgbGlua3Mgd2VyZSBicm9rZW4gdG9vIGJlY2F1c2UgaXQgb25seSBrbmV3CiAgICAgICAgYWJvdXQgdGhlIGZyYWdtZW50IG9mIHRoZSB0ZXh0IGFuZCBpdCByZXNvbHZlZCB0aGUgYWJzb2x1dGUgVVJMIG9uIHRoYXQuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjQ2MTA4Mj4gU2VhcmNoaW5nIGluIFNhZmFyaSdzIFdlYiBJbnNwZWN0b3IgYnJlYWtzIGxpbmtzIGluIHNvdXJjZQoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9TeW50YXhIaWdobGlnaHRpbmdTdXBwb3J0LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY3JlYXRlU3ludGF4SGlnaGxpZ2h0ZWREb2N1bWVudEZyYWdtZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLmNyZWF0ZVN5bnRheEhpZ2hsaWdodGVkRG9jdW1lbnRGcmFnbWVudC5jcmVhdGVUZXh0Tm9kZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jcmVhdGVTeW50YXhIaWdobGlnaHRlZERvY3VtZW50RnJhZ21lbnQuYXBwZW5kVGV4dCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jcmVhdGVTeW50YXhIaWdobGlnaHRlZERvY3VtZW50RnJhZ21lbnQuYXBwZW5kVG9rZW4pOgoKMjAxMi0xMC0xMCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgRE9NIHN0b3JhZ2UgcmVmcmVzaCBvbiB1cGRhdGUgd2hlbiBpbnNwZWN0aW5nIGlPUyA2IGRldmljZXMuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjQ3MjQ5MT4gUkVHUkVTU0lPTjogRE9NIFN0b3JhZ2UgZG9lcyBub3QgcmVmcmVzaCB3aGVuIGluc3BlY3RpbmcgaU9TIDYKCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NU3RvcmFnZU9ic2VydmVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZU9ic2VydmVyLnByb3RvdHlwZS51cGRhdGVET01TdG9yYWdlKTogQWRkZWQuIENhbGwgZG9tU3RvcmFnZVVwZGF0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3BlY3RvckJhY2tlbmRMZWdhY3lDb21tYW5kcy5qczogUmVnaXN0ZXJlZCBET01TdG9yYWdlLnVwZGF0ZURPTVN0b3JhZ2UgZXZlbnQuCgoyMDEyLTEwLTEwICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSBkYXRhYmFzZSBpbnNwZWN0aW9uIHdvcmsgd2l0aCBDdXJpZSBhbmQga2VlcCBpdCBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIGlPUyA2LgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI0NjM2NzE+IFJFR1JFU1NJT046IERhdGFiYXNlIGluc3BlY3Rpb24gaXMgYnJva2VuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6IFVwZGF0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFiYXNlT2JqZWN0LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YWJhc2VPYmplY3QucHJvdG90eXBlLmV4ZWN1dGVTUUwpOiBTZXQgZXhwZWN0c1Jlc3VsdE9iamVjdCBvbiB0aGUgY2FsbGJhY2suCiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZU9iamVjdC5wcm90b3R5cGUuZXhlY3V0ZVNRTC5xdWVyeUNhbGxiYWNrKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZU9iamVjdC5wcm90b3R5cGUuZXhlY3V0ZVNRTC5jYWxsYmFjayk6IFJld29ya2VkIGZvciBjb21wYXRpYmlsaXR5CiAgICAgICAgYnkgdXNpbmcgdGhlIHJlc3VsdCBvYmplY3QuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFiYXNlT2JzZXJ2ZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZU9ic2VydmVyLnByb3RvdHlwZS5zcWxUcmFuc2FjdGlvblN1Y2NlZWRlZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YWJhc2VPYnNlcnZlci5wcm90b3R5cGUuc3FsVHJhbnNhY3Rpb25GYWlsZWQpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zcGVjdG9yQmFja2VuZC5qczoKICAgICAgICAoSW5zcGVjdG9yQmFja2VuZENsYXNzLnByb3RvdHlwZS5kaXNwYXRjaCk6IFNlZSBpZiB0aGUgY2FsbGJhY2sgbmVlZHMgdGhlIHJlc3VsdAogICAgICAgIG9iamVjdCBieSBjaGVja2luZyBmb3IgZXhwZWN0c1Jlc3VsdE9iamVjdC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zcGVjdG9yQmFja2VuZExlZ2FjeUNvbW1hbmRzLmpzOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlZCBJbnNwZWN0b3JCYWNrZW5kTGVnYWN5Q29tbWFuZHMuanMuCgoyMDEyLTEwLTA5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgV2hlbiB1c2luZyAiSW5zcGVjdCBFbGVtZW50Iiwgc2VsZWN0IHRoZSBTdHlsZSBkZXRhaWxzIHNpZGViYXIgcGFuZWwgaWYgb25lIG9mIHRoZSBET00KICAgICAgICBkZXRhaWxzIHNpZGViYXIgcGFuZWxzIGlzbid0IGFscmVhZHkgc2VsZWN0ZWQuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjIzOTQ0MT4gUkVHUkVTU0lPTiAoU2FmYXJpIDYpOiAiSW5zcGVjdCBFbGVtZW50IiBzaG93cyBSZXNvdXJjZQogICAgICAgIGRldGFpbHMgaW5zdGVhZCBvZiB1c2VmdWwgU3R5bGUgZGV0YWlscwoKICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLl9kb21Ob2RlV2FzSW5zcGVjdGVkKTogU2V0IHRoaXMuZGV0YWlsc1NpZGViYXIuc2VsZWN0ZWRTaWRlYmFyUGFuZWwKICAgICAgICB0byB0aGlzLmNzc1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbCBpZiB0aGUgY3VycmVudCBzaWRlYmFyIGlucyd0IGFuIGluc3RhbmNlIG9mCiAgICAgICAgdGhlIFdlYkluc3BlY3Rvci5ET01EZXRhaWxzU2lkZWJhclBhbmVsIHByb3RvdHlwZS4KCjIwMTItMTAtMDkgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIHRoZSBTdHlsZSBkZXRhaWxzIHNpZGViYXIgd29yayBhZ2FpbiBhZnRlciByZWNlbnQgcHJvdG9jb2wgY2hhbmdlcy4KCiAgICAgICAgVGhpcyBjaGFuZ2UgbWFrZXMgdGhlIFdlYiBJbnNwZWN0b3Igd29yayB3aXRoIEN1cmllJ3MgSW5zcGVjdG9yIHByb3RvY29sIGFzIHdlbGwKICAgICAgICBhcyBtYWludGFpbmluZyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIGlPUyA2LgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTIyODE3MzA+IFJFR1JFU1NJT04gKHIxMjk0NzApOiBOb3RoaW5nIGlzIHNob3dpbmcgaW4gdGhlIFN0eWxlIHNpZGViYXIKCiAgICAgICAgUmV2aWV3ZWQgYnkgUmlja3kgTW9uZGVsbG8uCgogICAgICAgICogVXNlckludGVyZmFjZS9Cb3hNb2RlbERldGFpbHNTZWN0aW9uUm93LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQm94TW9kZWxEZXRhaWxzU2VjdGlvblJvdy5wcm90b3R5cGUuX3JlZnJlc2gpOiBSZW1vdmVkIGZvcmNlZFBzZXVkb0NsYXNzZXMKICAgICAgICBmcm9tIHRoZSBjYWxsIHRvIGdldENvbXB1dGVkU3R5bGVBc3luYywgYmVjYXVzZSBpdCB3YXMgYWx3YXlzIGlnbm9yZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1J1bGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NSdWxlKTogU3VwcG9ydCBzZWxlY3Rvckxpc3QgYW5kIHNlbGVjdG9yVGV4dC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVidWlsZFNlY3Rpb25zKTogUmVtb3ZlZAogICAgICAgIGZvcmNlZFBzZXVkb0NsYXNzZXMgZnJvbSB0aGUgY2FsbHMgdG8gZ2V0Q29tcHV0ZWRTdHlsZUFzeW5jIGFuZCBnZXRNYXRjaGVkU3R5bGVzQXN5bmMuCiAgICAgICAgRmFsbGJhY2sgdG8gZW1wdHkgYXJyYXkgZm9yIG1hdGNoZWRDU1NSdWxlcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnBhcnNlUnVsZUFycmF5UGF5bG9hZCk6IFRoZSBwcm90b2NvbCBoYWQganVzdCBhbiBhcnJheSBvZgogICAgICAgIHJ1bGVzLCBub3cgaXQgaXMgYW4gYXJyYXkgb2YgbWF0Y2hlcyB0aGF0IGhhdmUgYSAncnVsZScgcHJvcGVydHkuIFN1cHBvcnQgYm90aC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5cGUuZm9yY2VkUHNldWRvQ2xhc3Nlcyk6IFJlbW92ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlLmdldE1hdGNoZWRTdHlsZXNBc3luYyk6IFJlbW92ZWQgZm9yY2VkUHNldWRvQ2xhc3NlcwogICAgICAgIHBhcmFtZXRlci4gVGhlIHByb3RvY29sIHVzZWQgJ3J1bGVzJyBhcyBhIHByb3BlcnR5LCBub3cgaXQgaXMgJ21hdGNoZXMnLiBTdXBwb3J0IGJvdGguCiAgICAgICAgVXNlIGludm9rZSgpIHdoZW4gY2FsbGluZyBDU1NBZ2VudC5nZXRNYXRjaGVkU3R5bGVzRm9yTm9kZSBzaW5jZSBmb3JjZWRQc2V1ZG9DbGFzc2VzIHdhcyByZW1vdmVkCiAgICAgICAgYXMgYW4gcGFyYW1ldGVyLCBhbmQgaW52b2tlIHVzZXMgcGFyYW1ldGVyIG5hbWVzIGluc3RlYWQgb2YgcGFyYW1ldGVyIG9yZGVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3RvdHlwZS5nZXRDb21wdXRlZFN0eWxlQXN5bmMpOiBSZW1vdmVkIGZvcmNlZFBzZXVkb0NsYXNzZXMKICAgICAgICBwYXJhbWV0ZXIuIFVzZSBpbnZva2UoKSBoZXJlIHRvby4KCjIwMTItMTAtMDkgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBVcGRhdGUgSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzIHRvIHIxMzA3ODUgb2YgdGhlIEluc3BlY3RvciBwcm90b2NvbC4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyNDYzNzg2PgoKICAgICAgICBTb21lIGZlYXR1cmVzIG5lZWQgdG8gYmUgdXBkYXRlZCB0byB3b3JrIHdpdGggdGhlc2UgY2hhbmdlczoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTIyODE3MzA+IFJFR1JFU1NJT04gKHIxMjk0NzApOiBOb3RoaW5nIGlzIHNob3dpbmcgaW4gdGhlIFN0eWxlIHNpZGViYXIKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI0NjM2NzE+IFJFR1JFU1NJT046IERhdGFiYXNlIGluc3BlY3Rpb24gaXMgYnJva2VuCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyNDYzNjMxPiBSRUdSRVNTSU9OOiBTdWJmcmFtZXMgZG9uJ3Qgc2hvdyB0aGUgY29ycmVjdCBET00gKGFsd2F5cyB0aGUgbWFpbiBmcmFtZSdzIERPTSkKCiAgICAgICAgUmV2aWV3ZWQgYnkgUmlja3kgTW9uZGVsbG8uCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NPYnNlcnZlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU09ic2VydmVyLnByb3RvdHlwZS5uYW1lZEZsb3dDcmVhdGVkKTogQWRkZWQgc3R1Yi4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU09ic2VydmVyLnByb3RvdHlwZS5uYW1lZEZsb3dSZW1vdmVkKTogQWRkZWQgc3R1Yi4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU09ic2VydmVyLnByb3RvdHlwZS5yZWdpb25MYXlvdXRVcGRhdGVkKTogQWRkZWQgc3R1Yi4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NU3RvcmFnZU9ic2VydmVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZU9ic2VydmVyLnByb3RvdHlwZS51cGRhdGVET01TdG9yYWdlKTogUmVtb3ZlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YWJhc2VPYnNlcnZlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlT2JzZXJ2ZXIucHJvdG90eXBlLnNxbFRyYW5zYWN0aW9uU3VjY2VlZGVkKTogUmVtb3ZlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlT2JzZXJ2ZXIucHJvdG90eXBlLnNxbFRyYW5zYWN0aW9uRmFpbGVkKTogUmVtb3ZlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGVidWdnZXJPYnNlcnZlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyT2JzZXJ2ZXIucHJvdG90eXBlLnNjcmlwdFBhcnNlZCk6IEFkZGVkIHNvdXJjZU1hcFVSTCBhbmQgaGFzU291cmNlVVJMIGFyZ3VtZW50cy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzOiBVcGRhdGVkIHRvIHIxMzA3ODUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3BlY3Rvck9ic2VydmVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zcGVjdG9yT2JzZXJ2ZXIucHJvdG90eXBlLmRpZENyZWF0ZVdvcmtlcik6IFJlbW92ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5JbnNwZWN0b3JPYnNlcnZlci5wcm90b3R5cGUuZGlkRGVzdHJveVdvcmtlcik6IFJlbW92ZWQuCgoyMDEyLTEwLTA0ICBNYXJrIFJvd2UgIDxtcm93ZUBhcHBsZS5jb20+CgogICAgICAgIFRha2UgWGNvZGUncyBzdWdnZXN0aW9ucyBmb3IgY2hhbmdlcyB0byBvdXIgaW50ZXJuYWwgWGNvZGUgcHJvamVjdHMuCgogICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IEpvaG4gU3VsbGl2YW4uCgogICAgICAgIFhjb2RlIDQuNSBzdWdnZXN0cyBlbmFibGluZyBzZXZlcmFsIG5ldyB3YXJuaW5ncyBpbiBtb3N0IG9mIG91ciBwcm9qZWN0cy4gV2hpbGUgZG9pbmcgdGhpcwogICAgICAgIEkgYWxzbyBub3RpY2VkIGFuZCByZW1vdmVkIGEgbnVtYmVyIG9mIG9ic29sZXRlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsIGFuZCB1cGdyYWRlZCB0aGUKICAgICAgICBwcm9qZWN0IGZvcm1hdCBmb3IgdGhlIGZldyBwcm9qZWN0cyB0aGF0IHdlcmUgbm90IHVzaW5nIHRoZSBsYXRlc3QgdmVyc2lvbi4KCiAgICAgICAgKiBDb25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnOgogICAgICAgICogV2ViSW5zcGVjdG9yVUkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKCjIwMTItMDktMTMgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBDb2xsYXBzZSB0aGUgQ29tcHV0ZWQgU3R5bGUgc2VjdGlvbiBieSBkZWZhdWx0LgoKICAgICAgICBXZSBkbyByZW1lbWJlciB0aGUgc3RhdGUsIGJ1dCBsZXRzIGhlbHAgcGVvcGxlIGFsb25nIGhlcmUgYW5kIGNvbGxhcHNlIGl0IGJ5IGRlZmF1bHQuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjI5NDQ3OT4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQ29keSBLcmllZ2VyIGFuZCBNYXJrIFJvd2UuCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwpOiBQYXNzIHRydWUgd2hlbiBtYWtpbmcgdGhlIF9jb21wdXRlZFN0eWxlU2VjdGlvbgogICAgICAgIHRvIG1ha2UgaXQgY29sbGFwc2UgYnkgZGVmYXVsdC4KCjIwMTItMDgtMjcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBVc2UgLXdlYmtpdC1pbWFnZS1zZXQgZm9yIGJvcmRlci1pbWFnZSBpbnN0ZWFkIG9mIG1lZGlhIHF1ZXJpZXMgaW4gdGhlIFdlYiBJbnNwZWN0b3IuCgogICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0RWRpdG9yLmNzczoKICAgICAgICAoLnRleHQtZWRpdG9yID4gLmd1dHRlciA+IC5saW5lLW51bWJlciA+IC5icmVha3BvaW50KTogVXNlIC13ZWJraXQtaW1hZ2Utc2V0LgogICAgICAgICgudGV4dC1lZGl0b3IgPiAuZ3V0dGVyID4gLmxpbmUtbnVtYmVyLmJyZWFrcG9pbnQtcmVzb2x2ZWQgPiAuYnJlYWtwb2ludCk6IERpdHRvLgogICAgICAgICgudGV4dC1lZGl0b3IgPiAuZ3V0dGVyID4gLmxpbmUtbnVtYmVyLmV4ZWN1dGlvbi1saW5lOjphZnRlcik6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZU92ZXJ2aWV3LmNzczoKICAgICAgICAoLnRpbWVsaW5lLW92ZXJ2aWV3ID4gLnRpbWVsaW5lIC5iYXIpOiBDb21iaW5lIHR3byBydWxlcyB3aXRoIGlkZW50aWNhbCBzZWxlY3RvcnMuCiAgICAgICAgKC50aW1lbGluZS1vdmVydmlldyA+IC50aW1lbGluZS50aW1lbGluZS1yZWNvcmQtdHlwZS1uZXR3b3JrIC5iYXIpOiBVc2UgLXdlYmtpdC1pbWFnZS1zZXQuCiAgICAgICAgKC50aW1lbGluZS1vdmVydmlldyA+IC50aW1lbGluZS50aW1lbGluZS1yZWNvcmQtdHlwZS1sYXlvdXQgLmJhcik6IERpdHRvLgogICAgICAgICgudGltZWxpbmUtb3ZlcnZpZXcgPiAudGltZWxpbmUudGltZWxpbmUtcmVjb3JkLXR5cGUtc2NyaXB0IC5iYXIpOiBEaXR0by4KCjIwMTItMDgtMjcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIHRoZSBKYXZhU2NyaXB0ICYgRXZlbnRzIHRpbWVsaW5lIHBpbGxzIHJlbmRlciBjb3JyZWN0bHkgaW4gSGlEUEkuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjE4Mzg0OD4gSmF2YVNjcmlwdCB0aW1lbGluZSBwaWxsIGJyb2tlbiBpbiBIaURQSQoKICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVPdmVydmlldy5jc3M6CiAgICAgICAgKC50aW1lbGluZS1vdmVydmlldyA+IC50aW1lbGluZS50aW1lbGluZS1yZWNvcmQtdHlwZS1zY3JpcHQgLmJhcik6IENoYW5nZWQgZnJvbQogICAgICAgIC50aW1lbGluZS1vdmVydmlldyA+IC50aW1lbGluZS50aW1lbGluZS1yZWNvcmQtdHlwZS1zY3JpcHQgPiAuYmFyLgoKMjAxMi0wOC0xNSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBBZGQgaU9TIGluaGVyaXRhYmxlIHByb3BlcnRpZXMgdG8gdGhlIGluc3BlY3RvciB0byBtYXRjaAogICAgICAgIENTU1Byb3BlcnR5Ojppc0luaGVyaXRlZFByb3BlcnR5LgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NLZXl3b3JkQ29tcGxldGlvbnMuanM6CgoyMDEyLTA4LTE2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgU2F2ZSBhbmQgcmVzdG9yZSB0aGUgdGV4dCBzZWxlY3Rpb24gd2hlbiBtb2RpZnlpbmcgdGhlIERPTSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGV4dC4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyMDU5MTk5PiBTZWxlY3Rpb24gaXMgbG9zdCB3aGVuIHNjcm9sbGluZyBpbiB0aGUgc291cmNlIGNvZGUgdmlldwoKICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zZXQgc2VsZWN0ZWRUZXh0UmFuZ2UpOiBSZXR1cm4gZWFybHkgaWYgbnVsbCBpcyBwYXNzZWQuCiAgICAgICAgVGhpcyBhbGxvdyB0aGUgY2FsbGVycyB0byBhdm9pZCBhIG51bGwgY2hlY2suCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fYnJlYWtWaXNpYmxlVGV4dENodW5rc0ludG9TaW5nbGVMaW5lVGV4dENodW5rcyk6CiAgICAgICAgU2F2ZSBhdCB0aGUgYmVnaW5uaW5nIHRoZSB0ZXh0IHNlbGVjdGlvbiwgYW5kIHJlc3RvcmUgaXQgYXQgdGhlIGVuZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9jb25zb2xpZGF0ZUhpZGRlblNpbmdsZUxpbmVUZXh0Q2h1bmtzKTogRGl0dG8uCgoyMDEyLTA4LTE0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSB0aGUgIlNob3cgRXJyb3IgQ29uc29sZSIgYW5kICJTaG93IFBhZ2UgU291cmNlIiBtZW51IGl0ZW1zIGFsc28gY2hhbmdlIHRoZSBzZWxlY3RlZCBuYXZpZ2F0b3IKICAgICAgICB0byBtYXRjaCB0aGUgdmlldyBzaG93aW5nIGluIHRoZSBjb250ZW50IGJyb3dzZXIuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjA1ODc5Nj4gV2ViIEluc3BlY3RvciBjb21lcyB1cCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUsIGFsd2F5cyBzaG93aW5nIHRoZSBjb25zb2xlCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3BlY3RvckZyb250ZW5kQVBJLmpzOgogICAgICAgIChJbnNwZWN0b3JGcm9udGVuZEFQSS5zaG93Q29uc29sZSk6IFNlbGVjdCB0aGUgTG9nIHNpZGViYXIuCiAgICAgICAgKEluc3BlY3RvckZyb250ZW5kQVBJLnNob3dNYWluUmVzb3VyY2VGb3JGcmFtZSk6IFNlbGVjdCB0aGUgUmVzb3VyY2Ugc2lkZWJhci4KCjIwMTItMDgtMDMgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBEaXNhYmxlIHBhdXNlIG9uIGV4Y2VwdGlvbiBieSBkZWZhdWx0LgoKICAgICAgICBEZXZlbG9wZXJzIGFyZSBjb25mdXNlZCB0aGF0IHBhdXNlIG9uIHVuY2F1Z2h0IGV4Y2VwdGlvbnMgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTIwMjU5OTg+CgogICAgICAgIFJldmlld2VkIGJ5IEplc3NpZSBCZXJsaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9EZWJ1Z2dlck1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIpOiBDaGFuZ2UgdHJ1ZSB0byBmYWxzZSBmb3IgdGhlICJicmVhay1vbi1hbGwtdW5jYXVnaHQtZXhjZXB0aW9ucyIKICAgICAgICBzZXR0aW5nIGRlZmF1bHQgdmFsdWUuCgoyMDEyLTA4LTAxICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgVXBkYXRlIENTU0tleXdvcmRDb21wbGV0aW9ucy5qcy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyMDA4NzA5PgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NLZXl3b3JkQ29tcGxldGlvbnMuanM6ICBNZXJnZSByMTI0MDE2IGZyb20gV2ViS2l0LgoKMjAxMi0wOC0wMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIERPTVN0b3JhZ2VPYnNlcnZlci51cGRhdGVET01TdG9yYWdlIHNob3VsZCBiZSBET01TdG9yYWdlT2JzZXJ2ZXIuZG9tU3RvcmFnZVVwZGF0ZWQuCgogICAgICAgICJ1cGRhdGVET01TdG9yYWdlIiB3YXMgcmVuYW1lZCB0byAiZG9tU3RvcmFnZVVwZGF0ZWQiIGluIFdlYktpdCByMTE4MzQ5LiBXZSBuZWVkIHRvIHN1cHBvcnQKICAgICAgICB0aGUgb2xkIGFuZCBuZXcgbmFtZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjAwODQ5MD4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NU3RvcmFnZU9ic2VydmVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZU9ic2VydmVyLnByb3RvdHlwZS51cGRhdGVET01TdG9yYWdlKTogQWRkZWQgY29tbWVudC4gQ2FsbCBkb21TdG9yYWdlVXBkYXRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VPYnNlcnZlci5wcm90b3R5cGUuZG9tU3RvcmFnZVVwZGF0ZWQpOiBBZGRlZC4gRG9lcyB3aGF0IHVwZGF0ZURPTVN0b3JhZ2UgZGlkLgoKMjAxMi0wNy0zMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFNob3cgdGhlIGZpbGUgYW5kIGxpbmUgbnVtYmVyIGluc3RlYWQgb2YgYSBnby10byBhcnJvdyBmb3Igc3R5bGUgcnVsZXMgYW5kIGV2ZW50IGxpc3RlbmVycy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExMzQ3OTQ2PiBSRUdSRVNTSU9OIChOZXcgV2ViIEluc3BlY3Rvcik6IEluc3BlY3RvciBkb2VzIG5vdCBzaG93IGZpbGVuYW1lL2xpbmUgbnVtYmVyIGZvciBDU1MgcnVsZXMKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9obiBTdWxsaXZhbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5jc3M6CiAgICAgICAgKC5zaWRlYmFyID4gLnBhbmVsLmRldGFpbHMuY3NzLXN0eWxlIC5zdHlsZXMtc2VjdGlvbiAuaGVhZGVyIC50aXRsZSAubWVkaWEgYSk6IEFkZGVkICFpbXBvcnRhbnQgdG8gY29sb3IuIFJlbmFtZWQgZnJvbSAuc3VidGl0bGUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RldGFpbHNTZWN0aW9uLmNzczoKICAgICAgICAoLmRldGFpbHMtc2VjdGlvbiA+IC5jb250ZW50ID4gLmdyb3VwID4gLnJvdy5zaW1wbGUgPiAubGFiZWwpOiBSZW1vdmUgZHVwbGljYXRlIHBhZGRpbmcgcHJvcGVydHksIHNldCBwYWRkaW5nLWxlZnQgdG8gYmUgNnB4LgogICAgICAgICguZGV0YWlscy1zZWN0aW9uID4gLmNvbnRlbnQgPiAuZ3JvdXAgPiAucm93LnNpbXBsZSA+IC52YWx1ZSk6IFNldCBwYWRkaW5nLXJpZ2h0IHRvIGJlIDZweC4KICAgICAgICAoLmRldGFpbHMtc2VjdGlvbiA+IC5jb250ZW50ID4gLmdyb3VwID4gLnJvdy5wcm9wZXJ0aWVzKTogTWFrZSBsZWZ0IGFuZCByaWdodCBwYWRkaW5nIGVxdWFsLgogICAgICAgICogVXNlckludGVyZmFjZS9FdmVudExpc3RlbmVyU2VjdGlvbkdyb3VwLmNzczoKICAgICAgICAoLmV2ZW50LWxpc3RlbmVyLXNlY3Rpb24gPiAuY29udGVudCA+IC5ncm91cCA+IC5yb3cuc2ltcGxlID4gLnZhbHVlIC5nby10by1hcnJvdyk6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V2ZW50TGlzdGVuZXJTZWN0aW9uR3JvdXAuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyU2VjdGlvbkdyb3VwLnByb3RvdHlwZS5fZnVuY3Rpb25UZXh0T3JMaW5rKTogVXNlIFdlYkluc3BlY3Rvci5jcmVhdGVSZXNvdXJjZUxpbmsuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uY3NzOgogICAgICAgICguZ28tdG8tbGluayk6IEFkZGVkLgogICAgICAgICguZ28tdG8tbGluazpub3QoLmRvbnQtZmxvYXQpKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jcmVhdGVSZXNvdXJjZUxpbmspOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24pOiBVc2UgV2ViSW5zcGVjdG9yLmNyZWF0ZVJlc291cmNlTGluay4KICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlLl9saW5raWZ5KTogUmVtb3ZlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlLl9jcmVhdGVSdWxlT3JpZ2luTm9kZSk6IFVzZSBXZWJJbnNwZWN0b3IuY3JlYXRlUmVzb3VyY2VMaW5rLgoKMjAxMi0wNy0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgcmVsb2FkaW5nIHdoaWxlIHZpZXdpbmcgYSByZXNvdXJjZSBpbiB0aGUgV2ViIEluc3BlY3RvciBzaG93IHRoZSBtYWluIHJlc291cmNlLgoKICAgICAgICBUaGlzIGtlZXBzIHlvdSBsb29raW5nIGF0IHJlc291cmNlcyBpbnN0ZWFkIG9mIGR1bXBpbmcgeW91IGludG8gYSBsb2cgb3IgdGltZWxpbmUgdmlldy4KICAgICAgICBUaGlzIHdhcyBvbmx5IGFuIGlzc3VlIGlmIHlvdSBoYWQgdmlld2VkIGEgbG9nIG9yIHRpbWVsaW5lIGJlZm9yZSB2aWV3aW5nIGEgcmVzb3VyY2UuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTk4MTU0MD4gUmVsb2FkaW5nIHdoaWxlIHZpZXdpbmcgYSByZXNvdXJjZSBzb21ldGltZXMgc3dpdGNoZXMgdG8gdGhlIExvZyBvciBUaW1lbGluZQoKICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX21haW5GcmFtZU1haW5SZXNvdXJjZURpZENoYW5nZSk6IFJlbWVtYmVyIGlmIHRoZSBjdXJyZW50IHZpZXcgd2FzIG9uZQogICAgICAgIHRoYXQgd2UgY2FyZSBhYm91dCBiZWZvcmUgY2xvc2luZyB0aGVtLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9tYWluRnJhbWVNYWluUmVzb3VyY2VEaWRDaGFuZ2UuZGVsYXllZFdvcmspOiBTaG93IHRoZSBtYWluIGZyYW1lIHNpbmNlCiAgICAgICAgdGhlcmUgaXMgbm8gY29udGVudCB2aWV3IHNob3dpbmcgb3Igd2Ugd2VyZSBzaG93aW5nIGEgcmVzb3VyY2UgYmVmb3JlLgoKMjAxMi0wNy0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2Ugc2VsZWN0aW9uIG9mIGEgbmF2aWdhdG9yIGluIHRoZSBXZWIgSW5zcGVjdG9yIHNob3cgdGhlIGxhc3Qgc2VsZWN0ZWQgY29udGVudCB2aWV3IGZyb20gdGhhdCBuYXZpZ2F0b3IuCgogICAgICAgIFRoaXMgbWFrZXMgc3dpdGNoaW5nIGJldHdlZW4gZGlmZmVyZW50IGNvbnRlbnQgcXVpY2tlciwgZXNwZWNpYWxseSBmb3IgdGhlIFJlc291cmNlLCBJbnN0cnVtZW50IGFuZCBMb2cKICAgICAgICBuYXZpZ2F0b3JzIHdoaWNoIGhhdmUgZGVmYXVsdCBpbml0aWFsIHNlbGVjdGlvbnMuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDg1NDcyNz4gU2VsZWN0aW5nIHRoZSBMb2cgc2lkZWJhciBzaG91bGQgc2VsZWN0IGEgbG9nIGJ5IGRlZmF1bHQKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9obiBTdWxsaXZhbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3RydW1lbnRTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5JbnN0cnVtZW50U2lkZWJhclBhbmVsKTogTWFrZSB0aGUgTmV0d29yayBSZXF1ZXN0cyB0aW1lbGluZSBzZWxlY3RlZCBieSBkZWZhdWx0LgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5wcm90b3R5cGUuc2hvd24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3RpbWVsaW5lc1RyZWVFbGVtZW50U2VsZWN0ZWQpOiBEZXNlbGVjdCBhbnkgdHJlZSBlbGVtZW50CiAgICAgICAgaW4gdGhlIG1haW4gY29udGVudCB0cmVlIG91dGxpbmUgdG8gcHJldmVudCB0d28gc2VsZWN0aW9ucyBpbiB0aGUgc2lkZWJhci4KICAgICAgICAoV2ViSW5zcGVjdG9yLkluc3RydW1lbnRTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9wcm9maWxlU2VsZWN0ZWQpOiBEZXNlbGVjdCBhbnkgdHJlZSBlbGVtZW50IGluIHRoZSB0aW1lbGluZXMKICAgICAgICB0cmVlIG91dGxpbmUgdG8gcHJldmVudCB0d28gc2VsZWN0aW9ucyBpbiB0aGUgc2lkZWJhci4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fc2Vzc2lvblN0YXJ0ZWQpOiBTZWxlY3QgdGhlIEN1cnJlbnQgTG9nIHRyZWUgZWxlbWVudCBieSBkZWZhdWx0IHRoZSBmaXJzdCB0aW1lLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IE1vdmUgc29tZSBzZXR0aW5ncyBhYm92ZSB0aGlzLm5hdmlnYXRpb25TaWRlYmFyLnNlbGVjdGVkU2lkZWJhclBhbmVsIHRvIHByZXZlbnQKICAgICAgICBhbiBleGNlcHRpb24gZnJvbSBhY2Nlc3NpbmcgdGhlbSBiZWZvcmUgdGhleSBhcmUgc2V0LiBUaGlzIHdhcyB0cmlnZ2VyZWQgYnkgdGhlIG5ldyBjb2RlIGluIE5hdmlnYXRpb25TaWRlYmFyUGFuZWwuc2hvd24uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05hdmlnYXRpb25TaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLnByb3RvdHlwZS5zaG93bik6IFJlc2VsZWN0IHRoZSBzZWxlY3RlZCB0cmVlIGVsZW1lbnQgdG8gY2F1c2UgdGhlIGNvbnRlbnQgdmlldwogICAgICAgIHRvIGJlIHNob3duIGFzIHdlbGwuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9tYWluRnJhbWVEaWRDaGFuZ2UpOiBTZWxlY3QgdGhlIG1haW4gZnJhbWUgdHJlZSBlbGVtZW50IGJ5IGRlZmF1bHQuCgoyMDEyLTA3LTI2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSBzZWFyY2hpbmcgc291cmNlIGNvZGUgdmlhIHRoZSBmaW5kIGJhbm5lciBmYXN0IGFnYWluLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTE5NTUwODE+IFJFR1JFU1NJT04gKE5ldyBXZWIgSW5zcGVjdG9yKTogU2VhcmNoaW5nIGxhcmdlIHJlc291cmNlcyB2aWEgRmluZCBCYW5uZXIgaXMgZHJhbWF0aWNhbGx5IHNsb3dlciB0aGFuIFNhZmFyaSA1CgogICAgICAgIFJldmlld2VkIGJ5IEpvaG4gU3VsbGl2YW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5jdXN0b21QZXJmb3JtU2VhcmNoKTogQWRkZWQuIFVzZXMgdGhlIGJhY2tlbmQgYWdlbnRzIHRvIGRvIGEgcXVpY2sgc2VhcmNoIHBhc3MgYmVmb3JlIGRvaW5nCiAgICAgICAgdGhlIGlubmVyLWxpbmUgbWF0Y2hlcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuZ2V0IGN1cnJlbnRTZWFyY2hRdWVyeSk6IEFkZGVkLiBOZWVkZWQgYnkgU291cmNlQ29kZVRleHRFZGl0b3IuY3VzdG9tUGVyZm9ybVNlYXJjaC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnBlcmZvcm1TZWFyY2gpOiBVc2Ugc2VhcmNoQ2xlYXJlZCB0byBmdWxseSBjbGVhciB0aGUgcHJldmlvdXMgcmVzdWx0cy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnBlcmZvcm1TZWFyY2guYmF0Y2hTZWFyY2gpOiBVc2UgYWRkU2VhcmNoUmVzdWx0UmFuZ2UgZm9yIGFkZGluZyBhIG5ldyByZXN1bHQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5hZGRTZWFyY2hSZXN1bHRSYW5nZSk6IEFkZGVkLiBGYWN0b3JlZCBvdXQgb2YgcGVyZm9ybVNlYXJjaC5iYXRjaFNlYXJjaC4gQ2FsbHMgX3VwZGF0ZUxpbmVGb3JTZWFyY2hSZXN1bHRNYXRjaFNvb24uCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zZWFyY2hDbGVhcmVkKTogQ2xlYXIgX3BlbmRpbmdTZWFyY2hSZXN1bHRMaW5lTnVtYmVycy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl91cGRhdGVMaW5lRm9yU2VhcmNoUmVzdWx0TWF0Y2hTb29uKTogQWRkZWQuIEhlbHBlciBmb3IgYmF0Y2hpbmcgbGluZSB1cGRhdGVzLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3VwZGF0ZUxpbmVGb3JTZWFyY2hSZXN1bHRNYXRjaFNvb24uZGVsYXllZFdvcmspOiBBZGRlZC4gRmFjdG9yZWQgb3V0IG9mIHBlcmZvcm1TZWFyY2guYmF0Y2hTZWFyY2guCgoyMDEyLTA3LTExICBNYXJrIFJvd2UgIDxtcm93ZUBhcHBsZS5jb20+CgogICAgICAgIEJ1aWxkIGFnYWluc3QgdGhlIGxhdGVzdCBTREsgd2hlbiB0YXJnZXRpbmcgb2xkZXIgT1MgWCB2ZXJzaW9ucy4KCiAgICAgICAgVGhlIGRlcGxveW1lbnQgdGFyZ2V0IGlzIGFscmVhZHkgc2V0IHRvIHRoZSB2ZXJzaW9uIHRoYXQgd2UncmUgdGFyZ2V0aW5nLCBhbmQgaXQncyB0aGF0IHNldHRpbmcKICAgICAgICB3aGljaCBkZXRlcm1pbmVzIHdoaWNoIGZ1bmN0aW9uYWxpdHkgZnJvbSB0aGUgU0RLIGlzIGF2YWlsYWJsZSB0byB1cy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KCiAgICAgICAgKiBDb25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnOgoKMjAxMi0wNi0xOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEZpeCBhbiBleGNlcHRpb24gd2hlbiB2aWV3aW5nIGEgSmF2YVNjcmlwdCBwcm9maWxlIHdpdGggbWlsbGlzZWNvbmRzIGluc3RlYWQgb2YgcGVyY2VudGFnZXMuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTY5MTY2Mz4gUkVHUkVTU0lPTiAoTmV3IFdlYiBJbnNwZWN0b3IpOiBFeGNlcHRpb24gd2hlbiB2aWV3aW5nIEphdmFTY3JpcHQgUHJvZmlsZSwgbWFraW5nIHByb2ZpbGVzIHVudXNhYmxlCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Byb2ZpbGVEYXRhR3JpZFRyZWUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlRGF0YUdyaWROb2RlLnByb3RvdHlwZS5nZXQgZGF0YS5mb3JtYXRNaWxsaXNlY29uZHMpOiBQYXNzIHRydWUgZm9yIHRoZSBsYXN0IGFyZ3VtZW50IG9mIE51bWJlci5zZWNvbmRzVG9TdHJpbmcuCgoyMDEyLTA2LTE2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgU2hvdyBSZXNvdXJjZSBkZXRhaWxzIGZvciB0aGUgc2VsZWN0ZWQgcm93IGluIE5ldHdvcmsgcmVxdWVzdHMuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTY4Mzc1Nz4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YUdyaWQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUucHJvdG90eXBlLnNlbGVjdCk6IEZpcmUgdGhlIFdlYkluc3BlY3Rvci5EYXRhR3JpZC5FdmVudC5TZWxlY3RlZE5vZGVDaGFuZ2VkIGV2ZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YUdyaWROb2RlLnByb3RvdHlwZS5kZXNlbGVjdCk6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEluY2x1ZGUgUmVzb3VyY2VUaW1lbGluZURhdGFHcmlkTm9kZVBhdGhDb21wb25lbnQuanMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlVGltZWxpbmVEYXRhR3JpZE5vZGVQYXRoQ29tcG9uZW50LmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVGltZWxpbmVEYXRhR3JpZE5vZGVQYXRoQ29tcG9uZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVGltZWxpbmVEYXRhR3JpZE5vZGVQYXRoQ29tcG9uZW50LnByb3RvdHlwLmdldCByZXNvdXJjZVRpbWVsaW5lRGF0YUdyaWROb2RlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVGltZWxpbmVEYXRhR3JpZE5vZGVQYXRoQ29tcG9uZW50LnByb3RvdHlwZS5nZXQgcHJldmlvdXNTaWJsaW5nKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVGltZWxpbmVEYXRhR3JpZE5vZGVQYXRoQ29tcG9uZW50LnByb3RvdHlwZS5nZXQgbmV4dFNpYmxpbmcpOgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZXNDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3KTogQWRkIFdlYkluc3BlY3Rvci5EYXRhR3JpZC5FdmVudC5TZWxlY3RlZE5vZGVDaGFuZ2VkIGxpc3RlbmVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcucHJvdG90eXBlLmdldCBzZWxlY3Rpb25QYXRoQ29tcG9uZW50cyk6IEluY2x1ZGUgYSBSZXNvdXJjZVRpbWVsaW5lRGF0YUdyaWROb2RlUGF0aENvbXBvbmVudAogICAgICAgIGlmIHRoZSBzZWxlY3RlZCBub2RlIGlzIGEgUmVzb3VyY2VUaW1lbGluZURhdGFHcmlkTm9kZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fZGF0YUdyaWROb2RlUGF0aENvbXBvbmVudFNlbGVjdGVkKTogQWRkZWQuIFJldmVhbCBhbmQgc2VsZWN0IHRoZSBub2RlLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcucHJvdG90eXBlLl9zZWxlY3RlZE5vZGVDaGFuZ2VkKTogRGlzcGF0Y2ggV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3LkV2ZW50LlNlbGVjdGlvblBhdGhDb21wb25lbnRzRGlkQ2hhbmdlLgoKMjAxMi0wNi0wOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFN3aXRjaCB0aGUgV2ViIEluc3BlY3RvciBvdmVyIHRvIHVzZSB0YWItc2l6ZSBmb3IgdGhlIHNvdXJjZSBjb2RlIHZpZXcuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTYzMzI5MT4gVXNlIHRhYi1zaXplIENTUyBwcm9wZXJ0eSBpbiB0aGUgV2ViIEluc3BlY3RvciBpbnN0ZWFkIG9mIGFuIGlubGluZS1ibG9jawoKICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3ludGF4SGlnaGxpZ2h0ZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TeW50YXhIaWdobGlnaHRlci5DaGFyYWN0ZXJUb2tlbnMpOiBSZW1vdmVkIFx0LgogICAgICAgICogVXNlckludGVyZmFjZS9TeW50YXhIaWdobGlnaHRpbmdEZWZhdWx0VGhlbWUuY3NzOgogICAgICAgICguc3ludGF4LWhpZ2hsaWdodGVkKTogQWRkZWQgdGFiLXNpemU6IDQuCiAgICAgICAgKC5zeW50YXgtaGlnaGxpZ2h0ZWQgLnRhYik6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N5bnRheEhpZ2hsaWdodGluZ1N1cHBvcnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jcmVhdGVTeW50YXhIaWdobGlnaHRlZERvY3VtZW50RnJhZ21lbnQpOiBSZW1vdmVkIHRhYiB0b2tlbiBzdXBwb3J0LgoKMjAxMi0wNi0wNyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTE2MTM5NDA+IERhdGFHcmlkIGNvbHVtbiBjb2xsYXBzZXIgYnV0dG9uIHNob3VsZCBoYXZlIGEgdG9vbHRpcAoKICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlciBhbmQgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YUdyaWQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhR3JpZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhR3JpZC5wcm90b3R5cGUuX2NvbGxhcHNlQ29sdW1uR3JvdXBXaXRoQ2VsbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhR3JpZC5wcm90b3R5cGUuX2NvbGxhcHNlckJ1dHRvbkNvbGxhcHNlQ29sdW1uc1Rvb2xUaXApOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YUdyaWQucHJvdG90eXBlLl9jb2xsYXBzZXJCdXR0b25FeHBhbmRDb2x1bW5zVG9vbFRpcCk6CgoyMDEyLTA1LTMwICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIFdvcmthcm91bmQgZm9yOiA8cmRhcjovL3Byb2JsZW0vMTE1MzY4MzI+IENhbm5vdCBhY2Nlc3MgY29udGVudCB2aWV3IGZyb20gSW5zdHJ1bWVudHMgbmF2aWdhdG9yIGlmIG5hbWUgb2YgZmlsZSBpcyB0cnVuY2F0ZWQKCiAgICAgICAgSW1wbGVtZW50IGEgd29ya2Fyb3VuZCBzbyB0aGF0IGdvLXRvIGFycm93cyBzdGlsbCB3b3JrIGluIHNpdHVhdGlvbnMKICAgICAgICB3aGVyZSB0ZXh0IGJveGVzIGluY29ycmVjdGx5IHByZXZlbnQgdGhlbSBmcm9tIGJlaW5nIGNsaWNrYWJsZS4KICAgICAgICBHaXZpbmcgdGhlIGFycm93cyBhIHotaW5kZXggYWx3YXlzIG1ha2VzIHRoZW0gd29yay4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBoYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5jc3M6CiAgICAgICAgKC5nby10by1hcnJvdyk6CgoyMDEyLTA1LTI1ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTUzODk2NT4gQnJlYWtwb2ludCBjYWxsZnJhbWUgdG9vbHRpcHMgc2hvdyB3cm9uZyBsaW5lIG51bWJlcgoKICAgICAgICBTY3JpcHRMb2NhdGlvbiBsaW5lTnVtYmVyIGlzIDAtYmFzZWQuIENvbnZlcnQgdG8gMS1iYXNlZCBmb3IgZGlzcGxheS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ2FsbEZyYW1lVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DYWxsRnJhbWVUcmVlRWxlbWVudCk6CgoyMDEyLTA1LTI0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSB0aGUgV2ViSW5zcGVjdG9yLmZyYW1ld29yayBidWlsZCAzMi82NC1iaXQgdW5pdmVyc2FsIHRvIG1hdGNoIFdlYktpdC4KCiAgICAgICAgU2luY2UgV2ViS2l0IGxpbmtzIGFnYWluc3QgdGhlIFdlYkluc3BlY3RvciBmcmFtZXdvcmssIHRoZXkgbmVlZCB0byBzdXBwb3J0CiAgICAgICAgdGhlIHNhbWUgYXJjaGl0ZWN0dXJlcy4gT3RoZXJ3aXNlLCB0aGUgZnJhbWV3b3JrIGZhaWxzIHRvIGxvYWQgd2hlbiBzb2Z0CiAgICAgICAgbGlua2luZyBhbmQgdGhlIHJlc291cmNlcyBhcmVuJ3QgZm91bmQsIHdoaWNoIGNhdXNlcyBhbiBleGNlcHRpb24vY3Jhc2guCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTM3Mzk0OD4gQ3Jhc2ggb3BlbmluZyB0aGUgV2ViIEluc3BlY3RvciBpbiAzMi1iaXQgYXBwcwoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZzogU2V0IFZBTElEX0FSQ0hTIHRvIEFSQ0hTX1NUQU5EQVJEXzMyXzY0X0JJVC4KICAgICAgICAqIENvbmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2NvbmZpZzogU2V0IEFSQ0hTIHRvIEFSQ0hTX1NUQU5EQVJEXzMyXzY0X0JJVC4KCjIwMTItMDUtMjMgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBGaXggc29tZSBvY2Nhc2lvbmFsIGFzc2VydGlvbnMgYW5kIGFuIGV4Y2VwdGlvbiB0aGF0IGhhcHBlbnMgaW4gQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLgoKICAgICAgICBUaGVzZSBjYW4gaGFwcGVuIGlmIHRoZXJlIGlzIGFuIGVycm9yIGZyb20gdGhlIHByb3RvY29sIHdoZW4gZmV0Y2hpbmcgdGhlIENTUyBydWxlcy4gTm93IHdoZW4KICAgICAgICB0aGlzIGhhcHBlbnMgdGhlIHNpZGViYXIgd2lsbCBub3Qgc2hvdyBzdGFsZSBkYXRhLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTE1MTY0MTY+CgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3JlYnVpbGRTZWN0aW9ucy5tYXRjaGVkU3R5bGVzQ2FsbGJhY2spOiBBZGRlZCBmYWxsYmFjayB2YWx1ZXMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9yZWJ1aWxkU2VjdGlvbnMuYnVpbGRTZWN0aW9ucyk6IERpdHRvLgoKMjAxMi0wNS0yMiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEZpeCBhIHJlZ3Jlc3Npb24gdGhhdCB3b3VsZCBjYXVzZSByZXNvdXJjZSBjb250ZW50IHRvIG92ZXJsYXAgd2hlbiByZWxvYWRpbmcuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTUwOTYyMD4gUkVHUkVTU0lPTiAocjQyOTk0KTogT3ZlcmxhcHBpbmcgY29udGVudCB2aWV3cyB3aGVuIG5hdmlnYXRpbmcKCiAgICAgICAgUmV2aWV3ZWQgYnkgS2V2aW4gRGVja2VyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudFZpZXdDb250YWluZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlld0NvbnRhaW5lci5wcm90b3R5cGUuY2xvc2VBbGxDb250ZW50Vmlld3NPZlByb3RvdHlwZSk6IFVzZSBvbGRDdXJyZW50Q29udGVudFZpZXcKICAgICAgICBpbiB0aGUgbG9vcC4gVGhlIGN1cnJlbnRDb250ZW50VmlldyB2YXJpYWJsZSBpcyBub3QgZGVjbGFyZWQgdW50aWwgYWZ0ZXIgdGhlIGxvb3AsIHNvIHVzaW5nIGN1cnJlbnRDb250ZW50VmlldwogICAgICAgIGlzIGp1c3QgY29tcGFyaW5nIHRvIHVuZGVmaW5lZCBhdCB0aGlzIHBvaW50LgoKMjAxMi0wNS0yMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEZpeGVzIGFuIHVuY2F1Z2h0IGV4Y2VwdGlvbiBpbiBXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIuX2N1cnJlbnRDb250ZW50Vmlld0RpZENoYW5nZS4KCiAgICAgICAgVGhpcyBldmVudCBmaXJlcyB3aGVuIGFsbCBjb250ZW50IHZpZXdzIGFyZSBjbG9zZWQgYW5kIHRoZXJlIGlzIG5vIGxvbmdlciBhIGN1cnJlbnQgdmlldy4KICAgICAgICBUaGUgY29kZSB1bmRlciB0aGlzIGxpc3RlbmVyIHdhcyBub3QgcHJvcGVybHkgbnVsbCBjaGVja2luZyB0aGUgY29udGVudCB2aWV3LgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTE0NjcwODU+IENvbnRlbnRCcm93c2VyIGhhcyB1bmNhdWdodCBleGNlcHRpb24gb24gcmVsb2FkIG5lZWRzIHRvIGhhbmRsZSBudWxsIGN1cnJlbnRDb250ZW50VmlldwoKICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRCcm93c2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIucHJvdG90eXBlLl91cGRhdGVIaWVyYXJjaGljYWxQYXRoTmF2aWdhdGlvbkl0ZW0pOiBBZGRlZCBudWxsIGNoZWNrIGZvciByZXByZXNlbnRlZE9iamVjdC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyLnByb3RvdHlwZS5fdXBkYXRlQ29udGVudFZpZXdTZWxlY3Rpb25QYXRoTmF2aWdhdGlvbkl0ZW0pOiBBZGRlZCBudWxsIGNoZWNrIGZvciBjb250ZW50Vmlldy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyLnByb3RvdHlwZS5fY3VycmVudENvbnRlbnRWaWV3RGlkQ2hhbmdlKTogQWRkZWQgbnVsbCBjaGVjayBmb3IgY3VycmVudENvbnRlbnRWaWV3LgoKMjAxMi0wNS0xNiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTE0NjgwMDM+IFJFR1JFU1NJT046IEVycm9yIGxvZyBtZXNzYWdlcyBjb250YWlucyB3cm9uZyBsaW5lIG51bWJlciBpbiBqdW1wIGxpbmsKCiAgICAgICAgVGhlIExvZyBtZXNzYWdlcyBjb21pbmcgZnJvbSB0aGUgYmFja2VuZCBjb250YWluIHRoZSBleHBlY3RlZCwgZmlsZSBhbmQgMS1iYXNlZAogICAgICAgIGxpbmUgbnVtYmVyLiBJbiB0aGUgU2FmYXJpIGluc3BlY3RvciBfbGlua2lmeUxvY2F0aW9uIHdhcyBhZGp1c3RpbmcgdGhpcyB0byAwLWJhc2VkCiAgICAgICAgYW5kIHVzaW5nIHRoZSAwLWJhc2VkIGxpbmUgbnVtYmVyIGFzIHRoZSBkaXNwbGF5IHRleHQuIFRoZSBPcGVuU291cmNlIGluc3BlY3RvcidzCiAgICAgICAgbGlua2lmaWVyIHVzZXMgV2ViSW5zcGVjdG9yLmZvcm1hdExpbmtUZXh0IGZvciBkaXNwbGF5IHRleHQgd2hpY2ggYWRkcyBiYWNrIHRoZSAxLgogICAgICAgIFRoZSBTYWZhcmkgaW5zcGVjdG9yIGRvZXMgbm90IGhhdmUgdGhhdC4gV2UgY2FuIGp1c3QgZGlzcGxheSB0aGUgY29ycmVjdCBsaW5lIG51bWJlci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29uc29sZU1lc3NhZ2VJbXBsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS5fbGlua2lmeUxvY2F0aW9uKToKCjIwMTItMDUtMTEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBGaXggYW4gaXNzdWUgd2hlcmUgdGhlIERPTSBUcmVlIGFuZCBTb3VyY2UgQ29kZSB3b3VsZCBvdmVybGFwLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTEzMjkxMjE+IFJFR1JFU1NJT04gKHI0MjU2Nyk6IE92ZXJsYXBwaW5nIGRpc3BsYXkgRE9NIFRyZWUgYW5kIFNvdXJjZSBDb2RlCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRWaWV3Q29udGFpbmVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdDb250YWluZXIucHJvdG90eXBlLnNob3dDb250ZW50Vmlldyk6IFJlbW92ZSBhc3NlcnQgYW5kIGNhbGwgdG8gX3JlbW92ZUNvbnRlbnRWaWV3RWxlbWVudC4KICAgICAgICBUaGUgY29udGVudCB2aWV3IGlzIGFscmVhZHkgZ3VhcmFudGVlZCB0byBiZSByZW1vdmVkLiBUaGUgX2Rpc2Fzc29jaWF0ZUZyb21Db250ZW50VmlldyBmdW5jdGlvbiBub3cgZG9lcyB0aGUgYXNzZXJ0LgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdDb250YWluZXIucHJvdG90eXBlLnNob3dCYWNrRm9yd2FyZEVudHJ5KTogUmV0dXJuIGVhcmx5IGlmIGl0IGlzIHRoZSBzYW1lIGluZGV4LiBGaXJlIHRoZQogICAgICAgIEN1cnJlbnRDb250ZW50Vmlld0RpZENoYW5nZSBldmVudCBoZXJlIHNpbmNlIF9zaG93Q29udGVudFZpZXcgbm8gbG9uZ2VyIGZpcmVzIGl0LgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdDb250YWluZXIucHJvdG90eXBlLmNsb3NlQWxsQ29udGVudFZpZXdzT2ZQcm90b3R5cGUpOiBSZW1vdmUgY2FsbCB0byBfcmVtb3ZlQ29udGVudFZpZXdFbGVtZW50LgogICAgICAgIE9ubHkgY2FsbCBfc2hvd0NvbnRlbnRWaWV3IGFuZCBmaXJlIHRoZSBDdXJyZW50Q29udGVudFZpZXdEaWRDaGFuZ2UgZXZlbnQgaWYgdGhlIGNvbnRlbnQgdmlldyBhY3R1YWxseSBjaGFuZ2VkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdDb250YWluZXIucHJvdG90eXBlLmNsb3NlQWxsQ29udGVudFZpZXdzKTogUmVtb3ZlIGNhbGwgdG8gX3JlbW92ZUNvbnRlbnRWaWV3RWxlbWVudC4KICAgICAgICBGaXJlIHRoZSBDdXJyZW50Q29udGVudFZpZXdEaWRDaGFuZ2UgZXZlbnQgaGVyZSBzaW5jZSBfc2hvd0NvbnRlbnRWaWV3IG5vIGxvbmdlciBmaXJlcyBpdC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3Q29udGFpbmVyLnByb3RvdHlwZS5zaG93bik6IENhbGwgX3Nob3dDb250ZW50VmlldyBpbnN0ZWFkIG9mIF9wcmVwYXJlQ29udGVudFZpZXdUb1Nob3cuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlld0NvbnRhaW5lci5wcm90b3R5cGUuaGlkZGVuKTogQ2FsbCBfaGlkZUNvbnRlbnRWaWV3IGluc3RlYWQgb2YgX3ByZXBhcmVDb250ZW50Vmlld1RvU2hvdy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3Q29udGFpbmVyLnByb3RvdHlwZS5fZGlzYXNzb2NpYXRlRnJvbUNvbnRlbnRWaWV3KTogQWRkZWQgYXNzZXJ0IGZvciB2aXNpYmxlLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdDb250YWluZXIucHJvdG90eXBlLl9zaG93Q29udGVudFZpZXcpOiBBZGRlZCBhc3NlcnQgZm9yIHZpc2libGUuIFJlbW92ZWQgZXZlbnQgZGlzcGF0Y2guCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlld0NvbnRhaW5lci5wcm90b3R5cGUuX2hpZGVDb250ZW50Vmlldyk6IEFkZGVkIGFzc2VydCBmb3IgdmlzaWJsZS4KCjIwMTItMDUtMTAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBUaW1lciBldmVudHMgaW4gdGhlIFdlYkluc3BlY3RvciBzaG91bGQgc2hvdyB3aGVyZSB0aGV5IHdlcmUgc2NoZWR1bGVkIGZyb20uCgogICAgICAgIERlcGVuZHMgb246IGh0dHBzOi8vd2Via2l0Lm9yZy9iLzg2MTczCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTQyNzQ2Mz4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9obiBTdWxsaXZhbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuZXZlbnRSZWNvcmRlZC5wcm9jZXNzUmVjb3JkKTogUHJvY2VzcyBUaW1lckZpcmUgd2hlbiB0aGUgY29ycmVzcG9uZGluZwogICAgICAgIEV2YWx1YXRlU2NyaXB0IG9yIEZ1bmN0aW9uQ2FsbCByZWNvcmQgaXMgZW5jb3VudGVyZWQgc28gd2UgY2FuIGdhdGhlciB0aGUgcmVzb3VyY2UgYW5kIGxpbmUgbnVtYmVyLgoKMjAxMi0wNS0xMCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFVzZSBhIHN0YXRpYyBjb3B5IG9mIEluc3BlY3RvckJhY2tlbmQuanMgYW5kIEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy4KCiAgICAgICAgVGhpcyBmaXhlcyBhIGJ1aWxkIGZhaWx1cmUgc2luY2UgV2ViQ29yZSByZW5hbWVkIHRoZSBmaWxlIHdlIHdlcmUgY29waW5nLgoKICAgICAgICBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zIHdlIHNob3VsZCB1c2UgYSBzdGF0aWMgY29weSBvZiB0aGUgSW5zcGVjdG9yQmFja2VuZCBpbnN0ZWFkCiAgICAgICAgb2YgY29weWluZyB0aGUgbGF0ZXN0IHZlcnNpb24gZnJvbSBXZWJDb3JlIGR1cmluZyB0aGUgYnVpbGQuIFVzaW5nIGEgc3RhYmxlIHZlcnNpb24gb2YKICAgICAgICB0aGUgSW5zcGVjdG9yQmFja2VuZCBndWFyYW50ZWVzIGEgY29uc3RhbnQgQVBJIGZvciB0aGUgZnJvbnQtZW5kIGFuZCBwcm90b2NvbCBsZXZlbAogICAgICAgIGNoYW5nZXMgaW4gV2ViQ29yZSBhcmUgY29tcGF0aWJsZSB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIHRoZSBJbnNwZWN0b3JCYWNrZW5kLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTE0MjY5MTI+CgogICAgICAgICogU2NyaXB0cy9jb3B5LXVzZXItaW50ZXJmYWNlLXJlc291cmNlcy5zaDogUmVtb3ZlZCBjb3B5IGNvbW1hbmRzIGZyb20gZGVyaXZlZCBzb3VyY2VzLgogICAgICAgICogVXNlckludGVyZmFjZS9JbnNwZWN0b3JCYWNrZW5kLmpzOiBDb3BpZWQgZnJvbSBPcGVuU291cmNlIHIxMTY0NDkuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qczogRGl0dG8uCiAgICAgICAgKiBXZWJJbnNwZWN0b3JVSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBSZW1vdmVkIGJ1aWxkIHBoYXNlIHRvIGNvcHkgZnJvbSBXZWJDb3JlLgoKMjAxMi0wNC0yNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFVwZGF0ZSB0aGUgV2ViIEluc3BlY3RvciB0byB3b3JrIHdpdGggcmVjZW50IHByb3RvY29sIGNoYW5nZXMuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTMyOTgzNT4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NTm9kZURldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3JlZnJlc2hQcm9wZXJ0aWVzLm5vZGVSZXNvbHZlZCk6IFBhc3MgdW5kZWZpbmVkIGZvciB0aGUgYXJncyBwYXJhbWV0ZXIgb2YgY2FsbEZ1bmN0aW9uLgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVFbGVtZW50LnByb3RvdHlwZS5fY3JlYXRlVG9vbHRpcEZvck5vZGUucmVzb2x2ZWROb2RlKTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0phdmFTY3JpcHRUZXh0UHJvbXB0LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFRleHRQcm9tcHQucHJvdG90eXBlLmV2YWxJbkluc3BlY3RlZFdpbmRvdyk6IFJlbmFtZWQgZG9Ob3RQYXVzZU9uRXhjZXB0aW9ucyB0byBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUuCiAgICAgICAgUGFzcyBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUgdG8gZXZhbHVhdGVPbkNhbGxGcmFtZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRUZXh0UHJvbXB0LnByb3RvdHlwZS5fY29tcGxldGlvbnMuZXZhbHVhdGVkKTogUGFzcyB1bmRlZmluZWQgZm9yIHRoZSBhcmdzIHBhcmFtZXRlciBvZiBjYWxsRnVuY3Rpb25KU09OLgogICAgICAgICogVXNlckludGVyZmFjZS9OZXR3b3JrT2JzZXJ2ZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrT2JzZXJ2ZXIucHJvdG90eXBlLnJlcXVlc3RXaWxsQmVTZW50KTogUmVtb3ZlZCBzdGFja1RyYWNlIHBhcmFtZXRlci4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVtb3RlT2JqZWN0LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LnByb3RvdHlwZS5zZXRQcm9wZXJ0eVZhbHVlKTogUmVuYW1lZCBkb05vdFBhdXNlT25FeGNlcHRpb25zIHRvIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZS4KICAgICAgICBQYXNzIHRydWUgZm9yIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSBpbiBSdW50aW1lQWdlbnQuY2FsbEZ1bmN0aW9uT24uCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QucHJvdG90eXBlLmNhbGxGdW5jdGlvbik6IEFkZGVkIGFyZ3MgcGFyYW1ldGVyIGFuZCBwYXNzIGl0IGFsb25nLiBQYXNzIHRydWUgZm9yIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5wcm90b3R5cGUuY2FsbEZ1bmN0aW9uSlNPTik6IERpdHRvLgoKMjAxMi0wNC0yMCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTEyODcwNTM+IEFwcGxpY2F0aW9uQ2FjaGUgc29ydGluZyBSZXNvdXJjZSBjb2x1bW4gaXMgYnJva2VuCgogICAgICAgIFRoZSBpdGVtcyBiZWluZyBzb3J0ZWQgaW4gdGhlIGRhdGEgZ3JpZCBhcmUgQXBwbGljYXRpb25DYWNoZVJlc291cmNlcwogICAgICAgIGZyb20gdGhlIEluc3BlY3RvciBwcm90b2NvbC4gVGhvc2UgcmVzb3VyY2VzIGRvIG5vdCBoYXZlIGEgIm5hbWUiCiAgICAgICAgcHJvcGVydHkuIE9ubHkgInVybCIsICJzaXplIiwgYW5kICJ0eXBlIi4gICAgICAgIAoKICAgICAgICBSZXZpZXdlZCBieSBKb24gSG9uZXljdXR0LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQXBwbGljYXRpb25DYWNoZUZyYW1lQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlRnJhbWVDb250ZW50Vmlldy5wcm90b3R5cGUuX3BvcHVsYXRlRGF0YUdyaWQpOgoKMjAxMi0wNC0yMCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTEyODcxMjE+IFJFR1JFU1NJT046IEluc3BlY3RvciB3aW5kb3cgc2hvdWxkIG1vdmUgdG8gZnJvbnQgd2hlbiB5b3UgaGl0IGEgYnJlYWtwb2ludAoKICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLl9kZWJ1Z2dlckRpZFBhdXNlKToKCjIwMTItMDQtMTggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBGaXggYW4gcmVncmVzc2lvbiB3aGVyZSBpc3N1ZXMgd2VyZSByZXBsYWNpbmcgdGhlIGNvbnRlbnQgdmlldyB3aGVuIHRoZXkgc2hvdWxkIGJlIGlubGluZS4KCiAgICAgICAgVGhpcyBhbHNvIGZpeGVzIGFuIHJlZ3Jlc3Npb24gd2hlcmUgaXNzdWUgbGluZXMgd2VyZSBub3QgaGlnaGxpZ2h0aW5nIGJlY2F1c2UgdGhlIHN0eWxlIGNsYXNzCiAgICAgICAgd2FzIG5vdCBiZWluZyBhcHBsaWVkLCAndW5kZWZpbmVkJyB3YXMuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTE4MDUyNj4gUkVHUkVTU0lPTiAocjQxOTMyLXI0MTk0Myk6IFJlc291cmNlQ29udGVudFZpZXcgd2FzIG9ubHkgc2hvd2luZwogICAgICAgIGFuIGVycm9yIG1lc3NhZ2UgYW5kIG5vdCBjb250ZW50CgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZUNvbnRlbnRWaWV3KTogT25seSBhZGQgaXNzdWUgZXZlbnQgbGlzdGVuZXIgYW5kIGlzc3VlcyBpZiAhbWFuYWdlc093bklzc3Vlcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLmNsb3NlZCk6IFJlbW92ZSBpc3N1ZSBldmVudCBsaXN0ZW5lciBvbmx5IGlmICFtYW5hZ2VzT3duSXNzdWVzLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUuX2lzc3VlV2FzQWRkZWQpOiBBc3NlcnQgIW1hbmFnZXNPd25Jc3N1ZXMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9hZGRJc3N1ZVRvTGluZSk6IFVzZSB0aGUgY29ubmVjdCBvYmplY3QgZm9yIHRoZSBzdHlsZSBjbGFzc2VzLgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LmdldCBtYW5hZ2VzT3duSXNzdWVzKTogQWRkZWQuIFJldHVybiB0cnVlLgoKMjAxMi0wNC0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFNhdmUgYW5kIHJlc3RvcmUgdGhlIHNjcm9sbCBwb3NpdGlvbiBmb3IgY29udGVudCB2aWV3cyB3aGVuIGhpZGluZyBhbmQgc2hvd2luZy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExMTg0MjQxPiBSRUdSRVNTSU9OIChOZXcgV2ViIEluc3BlY3Rvcik6IENvbnNvbGUgbG9nIHZpZXcgc2Nyb2xsIG9mZnNldAogICAgICAgIGRvZXMgbm90IGZvbGxvdyBtb3N0IHJlY2VudCBtZXNzYWdlcwoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9BcHBsaWNhdGlvbkNhY2hlRnJhbWVDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVGcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgc2Nyb2xsYWJsZUVsZW1lbnRzKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NsdXN0ZXJDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNsdXN0ZXJDb250ZW50Vmlldy5wcm90b3R5cGUuc2hvd24pOiBDYWxsIHNob3duIGRpcmVjdGx5IG9uIHRoZSBfY29udGVudFZpZXdDb250YWluZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DbHVzdGVyQ29udGVudFZpZXcucHJvdG90eXBlLmhpZGRlbik6IERpdHRvIGZvciBoaWRkZW4uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXcucHJvdG90eXBlLmdldCB2aXNpYmxlKTogVXNlIGEgc2ltcGxlIGJvb2xlYW4uCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlldy5wcm90b3R5cGUuc2V0IHZpc2libGUpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgc2Nyb2xsYWJsZUVsZW1lbnRzKTogQWRkZWQgc3R1Yi4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQga2VlcEVsZW1lbnRzU2Nyb2xsZWRUb1RoZUJvdHRvbSk6IEFkZGVkIHN0dWIuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRWaWV3Q29udGFpbmVyLmNzczoKICAgICAgICAoLmNvbnRlbnQtdmlldy1jb250YWluZXIgPiAuY29udGVudC12aWV3KTogUmVtb3ZlZC4gVXNpbmcgZGlzcGxheTogbm9uZSB3YXMgcG9pbnRsZXNzIHNpbmNlIHRoZQogICAgICAgIGVsZW1lbnQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBET00uIFRoaXMgcHJldmVudGVkIHNhdmluZyBzY3JvbGwgcG9zaXRpb25zLgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZW50Vmlld0NvbnRhaW5lci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3Q29udGFpbmVyLnByb3RvdHlwZS5zaG93bik6IEFkZGVkLiBDYWxscyBfcHJlcGFyZUNvbnRlbnRWaWV3VG9TaG93LgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdDb250YWluZXIucHJvdG90eXBlLmhpZGRlbik6IEFkZGVkLiBDYWxscyBfcHJlcGFyZUNvbnRlbnRWaWV3VG9IaWRlLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdDb250YWluZXIucHJvdG90eXBlLl9zYXZlU2Nyb2xsUG9zaXRpb25zRm9yQ29udGVudFZpZXcpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3Q29udGFpbmVyLnByb3RvdHlwZS5fcmVzdG9yZVNjcm9sbFBvc2l0aW9uc0ZvckNvbnRlbnRWaWV3KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlld0NvbnRhaW5lci5wcm90b3R5cGUuX3Nob3dDb250ZW50Vmlldyk6IENhbGxzIF9wcmVwYXJlQ29udGVudFZpZXdUb1Nob3cuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlld0NvbnRhaW5lci5wcm90b3R5cGUuX3ByZXBhcmVDb250ZW50Vmlld1RvU2hvdyk6IEFkZGVkLiBDYWxscwogICAgICAgIF9yZXN0b3JlU2Nyb2xsUG9zaXRpb25zRm9yQ29udGVudFZpZXcgaW4gYWRkaXRpb24gdG8gdGhlIHdvcmsgX3Nob3dDb250ZW50VmlldyBkaWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlld0NvbnRhaW5lci5wcm90b3R5cGUuX2hpZGVDb250ZW50Vmlldyk6IENhbGxzIF9wcmVwYXJlQ29udGVudFZpZXdUb0hpZGUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlld0NvbnRhaW5lci5wcm90b3R5cGUuX3ByZXBhcmVDb250ZW50Vmlld1RvSGlkZSk6IEFkZGVkLiBDYWxscwogICAgICAgIF9zYXZlU2Nyb2xsUG9zaXRpb25zRm9yQ29udGVudFZpZXcgaW4gYWRkaXRpb24gdG8gdGhlIHdvcmsgX2hpZGVDb250ZW50VmlldyBkaWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Nvb2tpZVN0b3JhZ2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvb2tpZVN0b3JhZ2VDb250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IHNjcm9sbGFibGVFbGVtZW50cyk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9ET01TdG9yYWdlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01TdG9yYWdlQ29udGVudFZpZXcucHJvdG90eXBlLmdldCBzY3JvbGxhYmxlRWxlbWVudHMpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgc2Nyb2xsYWJsZUVsZW1lbnRzKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFiYXNlVGFibGVDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlVGFibGVDb250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IHNjcm9sbGFibGVFbGVtZW50cyk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3KTogUmVtb3ZlZCBfc2Nyb2xsZWRUb0JvdHRvbS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5jb25zb2xlQ2xlYXJlZCk6IFJlbW92ZWQgX3Njcm9sbGVkVG9Cb3R0b20uCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuaGlkZGVuKTogUmVtb3ZlZCBjYWxsIHRvIHN0b3JlU2Nyb2xsUG9zaXRpb25zLgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLmdldCBzY3JvbGxhYmxlRWxlbWVudHMpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQga2VlcEVsZW1lbnRzU2Nyb2xsZWRUb1RoZUJvdHRvbSk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9TY3JpcHRDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdENvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgc2Nyb2xsYWJsZUVsZW1lbnRzKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5nZXQgY29udGVudENvbnRhaW5lckVsZW1lbnQpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dFJlc291cmNlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IHNjcm9sbGFibGVFbGVtZW50cyk6IEFkZGVkLgoKMjAxMi0wNC0xNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBzdXBwb3J0IGZvciBzZWFyY2hpbmcgdGhlIERPTSB0cmVlIHdpdGggdGhlIEZpbmQgQmFubmVyLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTEwMzk2NDI+IFJFR1JFU1NJT04gKE5ldyBXZWIgSW5zcGVjdG9yKTogQ2FuJ3Qgc2VhcmNoIGluIHRoZSBET00gdHJlZSBhbmQgc291cmNlCiAgICAgICAgY29kZSB2aWV3IChubyBGaW5kIGJhbm5lciBpcyBwcmVzZW50KQoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlQ29udGVudFZpZXcucHJvdG90eXBlLmdldCBzdXBwb3J0c1NlYXJjaCk6IEFkZGVkLiBSZXR1cm4gdHJ1ZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVDb250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IG51bWJlck9mU2VhcmNoUmVzdWx0cyk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5wZXJmb3JtU2VhcmNoKTogQWRkZWQuIENsZWFyIHByZXZpb3VzIHJlc3VsdHMgYW5kIGNhbGwKICAgICAgICBET01BZ2VudC5wZXJmb3JtU2VhcmNoLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5wZXJmb3JtU2VhcmNoLnNlYXJjaFJlc3VsdHNSZWFkeSk6IFN0b3JlIHRoZSBpZGVudGlmaWVyIGFuZAogICAgICAgIGZpcmUgdGhlIE51bWJlck9mU2VhcmNoUmVzdWx0c0RpZENoYW5nZSBldmVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVDb250ZW50Vmlldy5wcm90b3R5cGUuc2VhcmNoQ2xlYXJlZCk6IEFkZGVkLiBDbGVhciB0aGUgcmVzdWx0IGFuZCBzdGF0ZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVDb250ZW50Vmlldy5wcm90b3R5cGUucmV2ZWFsUHJldmlvdXNTZWFyY2hSZXN1bHQpOiBBZGRlZC4gQ2FsbCBfcmV2ZWFsU2VhcmNoUmVzdWx0LgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5yZXZlYWxOZXh0U2VhcmNoUmVzdWx0KTogQWRkZWQuIERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fcmV2ZWFsU2VhcmNoUmVzdWx0KTogQWRkZWQuIENhbGwgRE9NQWdlbnQuZ2V0U2VhcmNoUmVzdWx0cy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVDb250ZW50Vmlldy5wcm90b3R5cGUuX3JldmVhbFNlYXJjaFJlc3VsdC5yZXZlYWxSZXN1bHQpOiBTZWxlY3QgdGhlIERPTSBub2RlLgoKMjAxMi0wNC0xNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFNob3cgdGhlIHllbGxvdyBib3VuY3kgd2hlbiBoaWdobGlnaHRpbmcgdGhlIGN1cnJlbnQgc2VhcmNoIHJlc3VsdC4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzExMDM5NjQyPiBSRUdSRVNTSU9OIChOZXcgV2ViIEluc3BlY3Rvcik6IENhbid0IHNlYXJjaCBpbiB0aGUgRE9NIHRyZWUgYW5kIHNvdXJjZQogICAgICAgIGNvZGUgdmlldyAobm8gRmluZCBiYW5uZXIgaXMgcHJlc2VudCkKCiAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuY3NzOgogICAgICAgICgudGV4dC1lZGl0b3IgLmJvdW5jeS1oaWdobGlnaHQpOiBBZGRlZC4KICAgICAgICAoQC13ZWJraXQta2V5ZnJhbWVzIGJvdW5jeSk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3JldmVhbFNlYXJjaFJlc3VsdFRleHRSYW5nZSk6IENyZWF0ZSBhbmQgYWRkIHRoZSBib3VuY3kgZWxlbWVudCwKICAgICAgICBwb3NpdGlvbmVkIHRvIGxpbmUgdXAgd2l0aCB0aGUgc2VhcmNoIHJlc3VsdCBlbGVtZW50LgoKMjAxMi0wNC0xMyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFN1cHBvcnQgc2VhcmNoaW5nIHZpYSB0aGUgZmluZCBiYW5uZXIgb24gdGV4dCByZXNvdXJjZXMgYW5kIHNjcmlwdHMuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMTAzOTY0Mj4gUkVHUkVTU0lPTiAoTmV3IFdlYiBJbnNwZWN0b3IpOiBDYW4ndCBzZWFyY2ggaW4gdGhlIERPTSB0cmVlIGFuZCBzb3VyY2UKICAgICAgICBjb2RlIHZpZXcgKG5vIEZpbmQgYmFubmVyIGlzIHByZXNlbnQpCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NjcmlwdENvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0Q29udGVudFZpZXcpOiBBZGQgZXZlbnQgbGlzdGVuZXIgZm9yIFRleHRFZGl0b3IuRXZlbnQuTnVtYmVyT2ZTZWFyY2hSZXN1bHRzRGlkQ2hhbmdlLgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0Q29udGVudFZpZXcucHJvdG90eXBlLmdldCBzdXBwb3J0c1NlYXJjaCk6IFJldHVybiB0cnVlLgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0Q29udGVudFZpZXcucHJvdG90eXBlLmdldCBudW1iZXJPZlNlYXJjaFJlc3VsdHMpOiBGb3J3YXJkIHRvIF90ZXh0RWRpdG9yLgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0Q29udGVudFZpZXcucHJvdG90eXBlLnBlcmZvcm1TZWFyY2gpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdENvbnRlbnRWaWV3LnByb3RvdHlwZS5zZWFyY2hDbGVhcmVkKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRDb250ZW50Vmlldy5wcm90b3R5cGUucmV2ZWFsUHJldmlvdXNTZWFyY2hSZXN1bHQpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdENvbnRlbnRWaWV3LnByb3RvdHlwZS5yZXZlYWxOZXh0U2VhcmNoUmVzdWx0KTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRDb250ZW50Vmlldy5wcm90b3R5cGUuX251bWJlck9mU2VhcmNoUmVzdWx0c0RpZENoYW5nZSk6IEFkZGVkLiBGaXJlIENvbnRlbnRWaWV3LkV2ZW50Lk51bWJlck9mU2VhcmNoUmVzdWx0c0RpZENoYW5nZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3ludGF4SGlnaGxpZ2h0ZXIuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N5bnRheEhpZ2hsaWdodGluZ0RlZmF1bHRUaGVtZS5jc3M6CiAgICAgICAgKC5zdXBwb3J0cy1maW5kLWJhbm5lci5zaG93aW5nLWZpbmQtYmFubmVyIC5zeW50YXgtaGlnaGxpZ2h0ZWQgLnNlYXJjaC1yZXN1bHQpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3ludGF4SGlnaGxpZ2h0aW5nU3VwcG9ydC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNyZWF0ZVN5bnRheEhpZ2hsaWdodGVkRG9jdW1lbnRGcmFnbWVudC5jcmVhdGVUb2tlbkVsZW1lbnQpOiBBZGRlZCBwYXJhbWV0ZXIgZm9yIHNlYXJjaCByZXN1bHQuIEFwcGVuZCB0aGUgc2VhcmNoLXJlc3VsdAogICAgICAgIGNsYXNzIHdoZW4gbmVlZGVkLiBGaXhlcyB0aGUgcXVvdGluZyBmb3IgbGlua3Mgbm93IHRoYXQgdGhlIGF0dHJpYnV0ZSByYW5nZSBjYW4gYmUgc3BsaXQgYnkgYSBzZWFyY2ggcmVzdWx0LgogICAgICAgIChXZWJJbnNwZWN0b3IuY3JlYXRlU3ludGF4SGlnaGxpZ2h0ZWREb2N1bWVudEZyYWdtZW50LmFwcGVuZFRleHQpOiBDaGFuZ2VkIHRvIHdvcmsgd2l0aCBlbnVtZXJhdGVBdHRyaWJ1dGVzIGluc3RlYWQgb2YgZW51bWVyYXRlQXR0cmlidXRlLgogICAgICAgIENoZWNrIGZvciB0aGUgc2VhcmNoIHJlc3VsdCBhdHRyaWJ1dGUuIENhbGwgY3JlYXRlVG9rZW5FbGVtZW50IGZvciBzZWFyY2ggcmVzdWx0cy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLmdldCBudW1iZXJPZlNlYXJjaFJlc3VsdHMpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnBlcmZvcm1TZWFyY2gpOiBBZGRlZC4gSXRlcmF0ZSBvdmVyIHRoZSBsaW5lcyBpbiBiYXRjaGVzIHRvIHByZXZlbnQgYmxvY2tpbmcgdG9vIGxvbmcuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5wZXJmb3JtU2VhcmNoLnJlcG9ydE51bWJlck9mU2VhcmNoUmVzdWx0c0RpZENoYW5nZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5wZXJmb3JtU2VhcmNoLmJhdGNoU2VhcmNoKTogTG9vcCBvdmVyIGxpbmVzIGFuZCBwZXJmb3JtIGEgcmVnZXggdG8gZmluZCBtYXRjaGVzLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuc2VhcmNoQ2xlYXJlZCk6IEFkZGVkLiBDbGVhciB0aGUgcmVzdWx0cyBhbmQgcmVtb3ZlIHRoZSBhdHRyaWJ1dGUgZnJvbSB0aGUgbGluZXMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5yZXZlYWxQcmV2aW91c1NlYXJjaFJlc3VsdCk6IEFkZGVkLiBEZWNyZW1lbnQgdGhlIGluZGV4IGFuZCBjYWxsIF9yZXZlYWxTZWFyY2hSZXN1bHRUZXh0UmFuZ2UuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5yZXZlYWxOZXh0U2VhcmNoUmVzdWx0KTogQWRkZWQuIEluY3JlbWVudCB0aGUgaW5kZXggYW5kIGNhbGwgX3JldmVhbFNlYXJjaFJlc3VsdFRleHRSYW5nZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9yZXZlYWxTZWFyY2hSZXN1bHRUZXh0UmFuZ2UpOiBBZGRlZC4gSGVscGVyIGZvciByZXZlYWxQcmV2aW91c1NlYXJjaFJlc3VsdCBhbmQgcmV2ZWFsTmV4dFNlYXJjaFJlc3VsdC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9yZW1vdmVTZWFyY2hSZXN1bHRTdHlsZXMpOiBBZGRlZC4gUXVlcnkgZm9yIGFsbCB0aGUgc2VhcmNoIHJlc3VsdHMgYW5kIHJlbW92ZSB0aGUgc3R5bGUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRSZXNvdXJjZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcpOiBBZGQgZXZlbnQgbGlzdGVuZXIgZm9yIFRleHRFZGl0b3IuRXZlbnQuTnVtYmVyT2ZTZWFyY2hSZXN1bHRzRGlkQ2hhbmdlLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLmdldCBzdXBwb3J0c1NlYXJjaCk6IFJldHVybiB0cnVlLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLmdldCBudW1iZXJPZlNlYXJjaFJlc3VsdHMpOiBGb3J3YXJkIHRvIF90ZXh0RWRpdG9yLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLnBlcmZvcm1TZWFyY2gpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5zZWFyY2hDbGVhcmVkKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUucmV2ZWFsUHJldmlvdXNTZWFyY2hSZXN1bHQpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5yZXZlYWxOZXh0U2VhcmNoUmVzdWx0KTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUuX251bWJlck9mU2VhcmNoUmVzdWx0c0RpZENoYW5nZSk6IEFkZGVkLiBGaXJlIENvbnRlbnRWaWV3LkV2ZW50Lk51bWJlck9mU2VhcmNoUmVzdWx0c0RpZENoYW5nZS4KCjIwMTItMDQtMTMgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQga2V5Ym9hcmQgc2hvcnRjdXRzIGZvciBuZXh0IGFuZCBwcmV2aW91cyBzZWFyY2ggcmVzdWx0cy4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzExMDM5NjQyPiBSRUdSRVNTSU9OIChOZXcgV2ViIEluc3BlY3Rvcik6IENhbid0IHNlYXJjaCBpbiB0aGUgRE9NIHRyZWUKICAgICAgICBhbmQgc291cmNlIGNvZGUgdmlldyAobm8gRmluZCBiYW5uZXIgaXMgcHJlc2VudCkKCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRmluZEJhbm5lci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkZpbmRCYW5uZXIpOiBBZGRlZCBrZXlib2FyZCBzaG9ydGN1dHMgZm9yIENvbW1hbmQtRyBhbmQgQ29tbWFuZC1TaGlmdC1HLgoKMjAxMi0wNC0wNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBzdXBwb3J0IHRvIFdlYkluc3BlY3Rvci5Db250ZW50VmlldyBmb3IgZGVhbGluZyB3aXRoIHRoZSBmaW5kIGJhbm5lci4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzExMDM5NjQyPiBSRUdSRVNTSU9OIChOZXcgV2ViIEluc3BlY3Rvcik6IENhbid0IHNlYXJjaCBpbiB0aGUgRE9NIHRyZWUgYW5kCiAgICAgICAgc291cmNlIGNvZGUgdmlldyAobm8gRmluZCBiYW5uZXIgaXMgcHJlc2VudCkKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ2x1c3RlckNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ2x1c3RlckNvbnRlbnRWaWV3KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNsdXN0ZXJDb250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IHN1cHBvcnRzU2VhcmNoKTogQWRkZWQuIEFsd2F5cyByZXR1cm4gdHJ1ZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNsdXN0ZXJDb250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IG51bWJlck9mU2VhcmNoUmVzdWx0cyk6IEFkZGVkLiBGb3J3YXJkIHRvIHRoZSBjdXJyZW50IGNvbnRlbnQgdmlldy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNsdXN0ZXJDb250ZW50Vmlldy5wcm90b3R5cGUucGVyZm9ybVNlYXJjaCk6IEFkZGVkLiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNsdXN0ZXJDb250ZW50Vmlldy5wcm90b3R5cGUuc2VhcmNoQ2xlYXJlZCk6IEFkZGVkLiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNsdXN0ZXJDb250ZW50Vmlldy5wcm90b3R5cGUucmV2ZWFsUHJldmlvdXNTZWFyY2hSZXN1bHQpOiBBZGRlZC4gRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5DbHVzdGVyQ29udGVudFZpZXcucHJvdG90eXBlLnJldmVhbE5leHRTZWFyY2hSZXN1bHQpOiBBZGRlZC4gRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5DbHVzdGVyQ29udGVudFZpZXcucHJvdG90eXBlLl9jdXJyZW50Q29udGVudFZpZXdEaWRDaGFuZ2UpOiBEaXNwYXRjaCB0aGUKICAgICAgICBOdW1iZXJPZlNlYXJjaFJlc3VsdHNEaWRDaGFuZ2UgZXZlbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DbHVzdGVyQ29udGVudFZpZXcucHJvdG90eXBlLl9jb250ZW50Vmlld051bWJlck9mU2VhcmNoUmVzdWx0c0RpZENoYW5nZSk6IFJlLWRpc3BhdGNoCiAgICAgICAgdGhlIE51bWJlck9mU2VhcmNoUmVzdWx0c0RpZENoYW5nZSBldmVudCB3aXRoIHRoaXMgY29udGVudCB2aWV3IGFzIHRoZSB0YXJnZXQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRCcm93c2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIucHJvdG90eXBlLmZpbmRCYW5uZXJQZXJmb3JtU2VhcmNoKTogQWRkZWQuIEZvcndhcmQgdG8gdGhlIGN1cnJlbnQgY29udGVudCB2aWV3LgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIucHJvdG90eXBlLmZpbmRCYW5uZXJTZWFyY2hDbGVhcmVkKTogQWRkZWQuIERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIucHJvdG90eXBlLmZpbmRCYW5uZXJSZXZlYWxQcmV2aW91c1Jlc3VsdCk6IEFkZGVkLiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyLnByb3RvdHlwZS5maW5kQmFubmVyUmV2ZWFsTmV4dFJlc3VsdCk6IEFkZGVkLiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyLnByb3RvdHlwZS5fc2hvd0ZpbmRCYW5uZXIpOiBEb24ndCBzaG93IGlmIHRoZSBjdXJyZW50IGNvbnRlbnQgdmlldyBkb2VzIG5vdCBzdXBwb3J0IHNlYXJjaC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyLnByb3RvdHlwZS5fY29udGVudFZpZXdOdW1iZXJPZlNlYXJjaFJlc3VsdHNEaWRDaGFuZ2UpOiBBZGRlZC4gVXBkYXRlIHRoZSBmaW5kIGJhbm5lci4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IHN1cHBvcnRzU2VhcmNoKTogQWRkZWQgc3R1Yi4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgbnVtYmVyT2ZTZWFyY2hSZXN1bHRzKTogQWRkZWQgc3R1Yi4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3LnByb3RvdHlwZS5wZXJmb3JtU2VhcmNoKTogQWRkZWQgc3R1Yi4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3LnByb3RvdHlwZS5zZWFyY2hDbGVhcmVkKTogQWRkZWQgc3R1Yi4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3LnByb3RvdHlwZS5yZXZlYWxQcmV2aW91c1NlYXJjaFJlc3VsdCk6IEFkZGVkIHN0dWIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlldy5wcm90b3R5cGUucmV2ZWFsTmV4dFNlYXJjaFJlc3VsdCk6IEFkZGVkIHN0dWIuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZpbmRCYW5uZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GaW5kQmFubmVyKTogQWRkZWQgZXZlbnQgbGlzdGVuZXJzLgogICAgICAgIChXZWJJbnNwZWN0b3IuRmluZEJhbm5lci5wcm90b3R5cGUuX2lucHV0RmllbGRDaGFuZ2VkKTogQWRkZWQuIENhbGwgdGhlIGRlbGVnYXRlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRmluZEJhbm5lci5wcm90b3R5cGUuX3ByZXZpb3VzUmVzdWx0QnV0dG9uQ2xpY2tlZCk6IEFkZGVkLiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZpbmRCYW5uZXIucHJvdG90eXBlLl9uZXh0UmVzdWx0QnV0dG9uQ2xpY2tlZCk6IEFkZGVkLiBEaXR0by4KCjIwMTItMDQtMDIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgV2ViSW5zcGVjdG9yLkZpbmRCYW5uZXIgd2hpY2ggaW1wbGVtZW50cyB0aGUgdXNlciBpbnRlcmZhY2UgZm9yIHNlYXJjaGluZyBpbiBjb250ZW50IHZpZXdzLgoKICAgICAgICBUaGUgYmFubmVyIHNob3dzIHZpYSBDb21tYW5kLUYgYW5kIGhpZGVzIHdpdGggRXNjYXBlLiBTZWFyY2hpbmcgaXMgbm90IGhvb2tlZCB1cCB5ZXQuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMTAzOTY0Mj4gUkVHUkVTU0lPTiAoTmV3IFdlYiBJbnNwZWN0b3IpOiBDYW4ndCBzZWFyY2ggaW4gdGhlCiAgICAgICAgRE9NIHRyZWUgYW5kIHNvdXJjZSBjb2RlIHZpZXcgKG5vIEZpbmQgYmFubmVyIGlzIHByZXNlbnQpCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6IFVwZGF0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRCcm93c2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIpOiBDcmVhdGUgYSBGaW5kQmFubmVyIGFuZCBrZXlib2FyZCBzaG9ydGN1dCBmb3IgQ29tbWFuZC1GLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIucHJvdG90eXBlLl9zaG93RmluZEJhbm5lcik6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIucHJvdG90eXBlLl9jdXJyZW50Q29udGVudFZpZXdEaWRDaGFuZ2UpOiBDaGFuZ2UgdGhlIHRhcmdldCBlbGVtZW50CiAgICAgICAgb2YgdGhlIGZpbmQgYmFubmVyIHRvIHRoZSBuZXcgY29udGVudCB2aWV3LgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZW50Vmlld0NvbnRhaW5lci5jc3M6CiAgICAgICAgKC5jb250ZW50LXZpZXctY29udGFpbmVyKTogQWRkZWQgb3ZlcmZsb3cgaGlkZGVuIHNvIHRoZSBmaW5kLWJhbm5lciBkb2VzIG5vdCBzaG93IHdoZW4gaGlkZGVuLgogICAgICAgICguY29udGVudC12aWV3LWNvbnRhaW5lciA+IC5jb250ZW50LXZpZXcpOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRmluZEJhbm5lci5jc3M6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9GaW5kQmFubmVyLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZpbmRCYW5uZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRmluZEJhbm5lci5wcm90b3R5cGUuZ2V0IGRlbGVnYXRlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkZpbmRCYW5uZXIucHJvdG90eXBlLnNldCBkZWxlZ2F0ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GaW5kQmFubmVyLnByb3RvdHlwZS5nZXQgZWxlbWVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GaW5kQmFubmVyLnByb3RvdHlwZS5nZXQgaW5wdXRGaWVsZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GaW5kQmFubmVyLnByb3RvdHlwZS5nZXQgc2VhcmNoUXVlcnkpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRmluZEJhbm5lci5wcm90b3R5cGUuc2V0IHNlYXJjaFF1ZXJ5KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkZpbmRCYW5uZXIucHJvdG90eXBlLmdldCBudW1iZXJPZlJlc3VsdHMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRmluZEJhbm5lci5wcm90b3R5cGUuc2V0IG51bWJlck9mUmVzdWx0cyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GaW5kQmFubmVyLnByb3RvdHlwZS5nZXQgdGFyZ2V0RWxlbWVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GaW5kQmFubmVyLnByb3RvdHlwZS5zZXQgdGFyZ2V0RWxlbWVudC5kZWxheWVkV29yayk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GaW5kQmFubmVyLnByb3RvdHlwZS5zZXQgdGFyZ2V0RWxlbWVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GaW5kQmFubmVyLnByb3RvdHlwZS5zaG93LmRlbGF5ZWRXb3JrKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkZpbmRCYW5uZXIucHJvdG90eXBlLnNob3cpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRmluZEJhbm5lci5wcm90b3R5cGUuaGlkZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GaW5kQmFubmVyLnByb3RvdHlwZS5fZG9uZUJ1dHRvbkNsaWNrZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRmluZEJhbm5lci5wcm90b3R5cGUuX2dlbmVyYXRlQnV0dG9uc0dseXBoc0lmTmVlZGVkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlZCBGaW5kQmFubmVyLmNzcyBhbmQgRmluZEJhbm5lci5qcy4KCjIwMTItMDQtMTMgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBVc2Ugc2VhcmNoUmVnZXgubGFzdEluZGV4IGluc3RlYWQgb2YgbGluZU1hdGNoLmluZGV4ICsgc2VhcmNoVGVybS5sZW5ndGguCgogICAgICAgIFdoZW4gY3JlYXRpbmcgVGV4dFJhbmdlcyBpbiBTZWFyY2hTaWRlYmFyUGFuZWwgaXQgaXMgYmV0dGVyIHRvIHVzZSBsYXN0SW5kZXggaW5zdGVhZCBvZiB0aGUgc2VhcmNoIHRlcm0gbGVuZ3RoLgogICAgICAgIFRoaXMgaXNuJ3QgYSBidWcgbm93LCBidXQgaXQgY291bGQgYmUgbGF0ZXIgd2hlbiB3ZSBzdXBwb3J0IHJlZ2V4IHNlYXJjaCBxdWVyaWVzIGluIGFkZGl0aW9uIG9mIHBsYW4gdGV4dCBzZWFyY2hlcy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2VhcmNoU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoU2lkZWJhclBhbmVsLnByb3RvdHlwZS5wZXJmb3JtU2VhcmNoLnJlc291cmNlc0NhbGxiYWNrLnJlc291cmNlQ2FsbGJhY2spOiBVc2Ugc2VhcmNoUmVnZXgubGFzdEluZGV4LgogICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoU2lkZWJhclBhbmVsLnByb3RvdHlwZS5wZXJmb3JtU2VhcmNoLmRvbUNhbGxiYWNrLmRvbVNlYXJjaFJlc3VsdHMpOiBEaXR0by4KCjIwMTItMDQtMDUgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgYmV0dGVyIHN1cHBvcnQgZm9yIGdldHRpbmcgYW5kIHNldHRpbmcgdGhlIHRleHQgc2VsZWN0aW9uIGluIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLgoKICAgICAgICBUaGlzIHdpbGwgYmUgbmVlZGVkIGZvciB0aGUgZmluZCBiYW5uZXIgc3VwcG9ydC4gPHJkYXI6Ly9wcm9ibGVtLzExMTkzMjgyPgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuZ2V0IHNlbGVjdGVkVGV4dFJhbmdlKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zZXQgc2VsZWN0ZWRUZXh0UmFuZ2UpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnJldmVhbExpbmUpOiBVc2UgdGhlIHNlbGVjdGVkVGV4dFJhbmdlIHNldHRlci4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl90ZXh0UmFuZ2VUb0RPTVJhbmdlKTogQWRkZWQuIFVzZSBfdGV4dFBvc2l0aW9uVG9ET01Mb2NhdGlvbgogICAgICAgIHRvIGdldCB0aGUgc3RhcnQgYW5kIGVuZCBhbmQgbWFrZSBhIG5ldyBSYW5nZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9kb21SYW5nZVRvVGV4dFJhbmdlKTogQWRkZWQuIFVzZSBfZG9tTG9jYXRpb25Ub1RleHRQb3NpdGlvbgogICAgICAgIHRvIGdldCB0aGUgc3RhcnQgYW5kIGVuZCBhbmQgbWFrZSBhIG5ldyBUZXh0UmFuZ2UuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fZG9tTG9jYXRpb25Ub1RleHRQb3NpdGlvbik6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3RleHRQb3NpdGlvblRvRE9NTG9jYXRpb24pOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JUZXh0Q2h1bmspOiBTZXQgX3RleHRDaHVuayBvbiB0aGUgZWxlbWVudC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVXRpbGl0aWVzLmpzOgogICAgICAgIChOb2RlLnByb3RvdHlwZS50cmF2ZXJzZU5leHRUZXh0Tm9kZSk6IEFkZGVkLiBDb3BpZWQgZnJvbSBPcGVuU291cmNlIHV0aWxpdGllcy5qcy4KICAgICAgICAoTm9kZS5wcm90b3R5cGUucmFuZ2VCb3VuZGFyeUZvck9mZnNldCk6IEFkZGVkLiBEaXR0by4KCjIwMTItMDQtMDIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgc3VwcG9ydCBmb3IgZGlzYWJsaW5nIGtleWJvYXJkIHNob3J0Y3V0cyBhbmQgdW5iaW5kaW5nIHRoZW0gYWx0b2dldGhlci4KCiAgICAgICAgWW91IG1pZ2h0IGRpc2FibGUgYSBzaG9ydGN1dCB0byBtYWtlIGl0IG9ubHkgYXBwbHkgd2hlbiBhIGNvbnRlbnQgdmlldyBpcyBzaG93aW5nLCBidXQgc3RpbGwKICAgICAgICBoYXZlIHRoZSBzaG9ydGN1dCBiZSBnbG9iYWwuIEFsc28gYWRkZWQgc3VwcG9ydCBmb3IgdW5iaW5kaW5nIGEgc2hvcnRjdXQgaWYgeW91IG5lZWQgdG8gcmVtb3ZlCiAgICAgICAgaXQgYWx0b2dldGhlciBmcm9tIHRoZSBkb2N1bWVudC4KCiAgICAgICAgVGhpcyBpcyBsaWtlbHkgdG8gYmUgcmVxdWlyZWQgZm9yIGZpbmQgYmFubmVyIHN1cHBvcnQuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0tleWJvYXJkU2hvcnRjdXQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQucHJvdG90eXBlLmdldCBkaXNhYmxlZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5wcm90b3R5cGUuc2V0IGRpc2FibGVkKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LnByb3RvdHlwZS51bmJpbmQpOiBBZGRlZC4gUmVtb3ZlcyB0aGUgc2hvcnRjdXQgZnJvbSB0aGUgdGFyZ2V0LgogICAgICAgIChXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5wcm90b3R5cGUubWF0Y2hlc0V2ZW50KTogUmV0dXJuIGVhcmx5IGlmIGRpc2FibGVkLgoKMjAxMi0wNC0wMiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgaXQgcG9zc2libGUgdG8gZ2VuZXJhdGUgY29sb3JlZCBpbWFnZXMgYXQgZGlmZmVyZW50IHNpemVzIHRoYW4gdGhlIGludHJpbnNpYyBpbWFnZSBzaXplLgoKICAgICAgICBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRoZSBpbnB1dCBpbWFnZSBpcyBhIFBERiBhbmQgYSBkaWZmZXJlbnQgc2l6ZSBpcyBuZWVkZWQuIFRoaXMgc3VwcG9ydAogICAgICAgIGlzIG5lZWRlZCBmb3IgdGhlIGZpbmQgYmFubmVyIGJhY2svZm9yd2FyZCBhcnJvd3MuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlVXRpbGl0aWVzLmpzOgogICAgICAgIChnZW5lcmF0ZUNvbG9yZWRJbWFnZSk6IEFkZGVkIG9wdGlvbmFsIHdpZHRoIGFuZCBoZWlnaHQgcGFyYW1ldGVycy4gVXNlIHRoZSBpbnRyaW5zaWMgd2lkdGggYW5kCiAgICAgICAgaGVpZ2h0IGFzIGZhbGxiYWNrLgogICAgICAgIChnZW5lcmF0ZUNvbG9yZWRJbWFnZXNGb3JDU1MuZ2VuZXJhdGVJbWFnZSk6IFB1bGwgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb3V0IG9mIHRoZSBzcGVjaWZpY2F0aW9uLgogICAgICAgIFVzZSB0aGUgaW50cmluc2ljIHdpZHRoIGFuZCBoZWlnaHQgYXMgZmFsbGJhY2suIFBhc3MgdGhlIHdpZHRoIGFuZCBoZWlnaHQgdG8gZ2VuZXJhdGVDb2xvcmVkSW1hZ2UKICAgICAgICB3aXRoIGEgc2NhbGUgb2YgMSBub3cgdGhhdCB0aGUgcGl4ZWxSYXRpbyBpcyBub3cgcHJlbXVsdGlwbGllZCBpbiB0aGUgd2lkdGggYW5kIGhlaWdodC4KCjIwMTItMDQtMDIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBUd2VhayB0aGUgY29sb3JzIGFuZCBncmFkaWVudHMgdXNlZCBieSB0aGUgc2VhcmNoIHNpZGViYXIgdG8gbWF0Y2ggb3RoZXIgYmFycyBpbiB0aGUgV2ViIEluc3BlY3Rvci4KCiAgICAgICAgSWYgb25seSB3ZSBoYWQgdmFyaWFibGVzIGluIENTUy4uLgoKICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2VhcmNoU2lkZWJhclBhbmVsLmNzczoKICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuc2VhcmNoID4gLnNlYXJjaC1iYXIpOiBUd2Vha2VkIHRoZSBjb2xvcnMgdG8gbWF0Y2ggdGhlIG9uZXMgaW4gVGltZWxpbmVzQ29udGVudFZpZXcuY3NzCiAgICAgICAgdGhlIHVwY29taW5nIEZpbmRCYW5uZXIuY3NzLgoKMjAxMi0wNC0xMiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIENyZWF0ZSBhIGZ1bm5lbCBwb2ludCBmb3IgZGlzcGxheSBuYW1lcyBvZiBVUkxzIGFuZCBob3N0cywgYW5kIHByb3Blcmx5IGRlY29kZSBsYXN0UGF0aENvbXBvbmVudC4KCiAgICAgICAgVGhpcyBkZWNvZGVzIGxhc3RQYXRoQ29tcG9uZW50IGFzIGEgVVJMIGVzY2FwZWQgc3RyaW5nLiBUaGUgaG9zdCBuZWVkcyB0byBiZSBkZWNvZGVkIGFzIGEgcHVueWNvZGUgc3RyaW5nLAogICAgICAgIGJ1dCB0aGF0IGlzbid0IGVhc2lseSBkb25lIGluIEphdmFTY3JpcHQgc28gPHJkYXI6Ly9wcm9ibGVtLzExMjM3NDEzPiB0cmFja3MgdGhhdC4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExMjM2OTMzPiBIaWdoLWFzY2lpIHdlYiBhZGRyZXNzZXMgc2hvdyBjb3JydXB0ZWQgaW4gV2ViIEluc3BlY3RvcgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9BcHBsaWNhdGlvbkNhY2hlRnJhbWVDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVGcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fdXBkYXRlQ2FsbGJhY2spOiBSZW1vdmUgdW51c2VkIGxhc3RQYXRoQ29tcG9uZW50IHZhci4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQXBwbGljYXRpb25DYWNoZUZyYW1lVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlRnJhbWVUcmVlRWxlbWVudC5wcm90b3R5cGUudXBkYXRlVGl0bGVzKTogVXNlIGRpc3BsYXlOYW1lRm9yVVJMIGFuZCBkaXNwbGF5TmFtZUZvckhvc3QuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0FwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0VHJlZUVsZW1lbnQucHJvdG90eXBlLl9nZW5lcmF0ZVRpdGxlcyk6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9DYWxsRnJhbWVUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNhbGxGcmFtZVRyZWVFbGVtZW50KTogVXNlIGRpc3BsYXlOYW1lRm9yVVJMLgogICAgICAgICogVXNlckludGVyZmFjZS9Db25zb2xlTWVzc2FnZUltcGwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZUltcGwucHJvdG90eXBlLl9saW5raWZ5TG9jYXRpb24pOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29va2llU3RvcmFnZVRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29va2llU3RvcmFnZVRyZWVFbGVtZW50KTogVXNlIGRpc3BsYXlOYW1lRm9ySG9zdC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NU3RvcmFnZVRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZVRyZWVFbGVtZW50KTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01TdG9yYWdlVHJlZUVsZW1lbnQucHJvdG90eXBlLmdldCBuYW1lKTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFiYXNlSG9zdFRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YWJhc2VIb3N0VHJlZUVsZW1lbnQpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlSG9zdFRyZWVFbGVtZW50LnByb3RvdHlwZS5nZXQgbmFtZSk6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9FdmVudExpc3RlbmVyU2VjdGlvbkdyb3VwLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lclNlY3Rpb25Hcm91cC5wcm90b3R5cGUuX2Z1bmN0aW9uVGV4dE9yTGluayk6IFVzZSBkaXNwbGF5TmFtZUZvclVSTC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmRpc3BsYXlOYW1lRm9yVVJMKTogQWRkZWQuIFVzZSBkZWNvZGVVUklDb21wb25lbnQgZm9yIGxhc3RQYXRoQ29tcG9uZW50IGFuZCBkaXNwbGF5TmFtZUZvckhvc3QgZm9yIGhvc3QuCiAgICAgICAgKFdlYkluc3BlY3Rvci5kaXNwbGF5TmFtZUZvckhvc3QpOiBBZGRlZC4gUmV0dXJucyB0aGUgaW5wdXQsIHdpdGggYSBjb21tZW50IGFib3V0IGRlY29kaW5nIHB1bnljb2RlLgogICAgICAgIChXZWJJbnNwZWN0b3IudXBkYXRlV2luZG93VGl0bGUpOiBVc2UgZGVjb2RlVVJJQ29tcG9uZW50IGZvciBsYXN0UGF0aENvbXBvbmVudCBhbmQgZGlzcGxheU5hbWVGb3JIb3N0IGZvciBob3N0LgogICAgICAgICogVXNlckludGVyZmFjZS9Qcm9maWxlRGF0YUdyaWRUcmVlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZURhdGFHcmlkTm9kZS5wcm90b3R5cGUuX2xpbmtpZnlMb2NhdGlvbik6IFVzZSBkaXNwbGF5TmFtZUZvclVSTC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VUaW1lbGluZURhdGFHcmlkTm9kZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVGltZWxpbmVEYXRhR3JpZE5vZGUucHJvdG90eXBlLmdldCBkYXRhKTogVXNlIGRpc3BsYXlOYW1lRm9yVVJMIGFuZCBkaXNwbGF5TmFtZUZvckhvc3QuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fdXBkYXRlVGl0bGVzKTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NjcmlwdFRpbWVsaW5lRGF0YUdyaWROb2RlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0VGltZWxpbmVEYXRhR3JpZE5vZGUucHJvdG90eXBlLmNyZWF0ZUNlbGxDb250ZW50KTogVXNlIGRpc3BsYXlOYW1lRm9yVVJMLgogICAgICAgICogVXNlckludGVyZmFjZS9TY3JpcHRUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFRyZWVFbGVtZW50KTogVXNlIGRpc3BsYXlOYW1lRm9yVVJMIGFuZCBkaXNwbGF5TmFtZUZvckhvc3QuCgoyMDEyLTA0LTExICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgU3RyaXAgY29tbW9uIGVycm9yIG1lc3NhZ2UgcHJlZml4ZXMgZnJvbSB0aGUgbWVzc2FnZSBsaW5lIGluIHRoZSBJc3N1ZSBzaWRlYmFyLgoKICAgICAgICBUaGUgcHJlZml4IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSB0aXRsZSBsaW5lLCBzbyBpdCByZWR1bmRhbnQgdG8gaW5jbHVkZSBpdCBpbiB0aGUgbWVzc2FnZS4KICAgICAgICBBbmQgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgbWVzc2FnZSBnaXZlcyBtb3JlIHJvb20gZm9yIHRoZSBpbXBvcnRhbnQgaW5mbyBvZiB0aGUgbWVzc2FnZS4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExMjE5NzEyPiBDYW4ndCBzZWUgZW50aXJlIGNvbnRlbnQgb2YgZXJyb3JzIGluIHRoZSBJc3N1ZSBzaWRlYmFyCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6IFVwZGF0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0lzc3VlTWVzc2FnZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLklzc3VlTWVzc2FnZSk6IERldGVybWluZSB0aGUgdHlwZSBiYXNlZCBvbiBzb3VyY2UgYW5kIHRleHQgcHJlZml4IG1hdGNoaW5nLgogICAgICAgIFJlbW92ZWQgX3NvdXJjZSBwcm9wZXJ0eSwgYW5kIGFkZGVkIF90eXBlIHRvIHJlcGxhY2UgaXQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Jc3N1ZU1lc3NhZ2UuVHlwZS5kaXNwbGF5TmFtZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuSXNzdWVNZXNzYWdlLnByb3RvdHlwZS5nZXQgdHlwZSk6IFJlbmFtZWQgZnJvbSBzb3VyY2UgYW5kIHJldHVybiBfdHlwZSBpbnN0ZWFkLgogICAgICAgICogVXNlckludGVyZmFjZS9Jc3N1ZVRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSXNzdWVUcmVlRWxlbWVudCk6IFVzZSBhIHN3aXRjaCBmb3IgdGhlIGxldmVsIGluc3RlYWQgb2YgcmF3IHN0cmluZyBjb21wYXJpc29uLgogICAgICAgIFVzZSBXZWJJbnNwZWN0b3IuSXNzdWVNZXNzYWdlLlR5cGUuZGlzcGxheU5hbWUgdG8gZ2V0IHRoZSB0aXRsZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLklzc3VlVHJlZUVsZW1lbnQudGl0bGVGb3JJc3N1ZSk6IFJlbW92ZWQuCgoyMDEyLTA0LTA5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIGtleWJvYXJkIHNob3J0Y3V0cyBmb3IgcGF1c2UvY29udGludWUsIHN0ZXAgb3Zlciwgc3RlcCBpbnRvIGFuZCBzdGVwIG91dC4KCiAgICAgICAgVGhpcyBtYXRjaGVzIFhjb2RlJ3Mga2V5Ym9hcmQgc2hvcnRjdXRzIGFuZCBhbHNvIHN1cHBvcnRzIHRoZSBvcmlnaW5hbCBXZWIgSW5zcGVjdG9yCiAgICAgICAga2V5Ym9hcmQgc2hvcnRjdXRzIGZvciBjb21wYXRpYmlsaXR5LgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTEyMDU2NzU+IERlYnVnZ2VyIGtleWJvYXJkIHNob3J0Y3V0cyBhcmUgYnJva2VuIChzdGVwIGludG8sIHN0ZXAgb3ZlciwgZXRjKQoKICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczogVXBkYXRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlKTogQ3JlYXRlIHRoZSBLZXlib2FyZFNob3J0Y3V0cyBhbmQgc2hvdyB0aGVtIGluIHRoZSB0b29sdGlwcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuc2V0IGNvbGxhcHNlZCk6IEFkZCB0aGUga2V5Ym9hcmQgc2hvcnRjdXQgdG8gdGhlIHRvb2x0aXBzLgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fZGVidWdnZXJEaWRQYXVzZSk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fZGVidWdnZXJEaWRSZXN1bWUpOiBEaXR0by4KCjIwMTItMDQtMDcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIHRoZSBjb21wbGV0aW9uIHBvcHVwIGxvb2sgbGlrZSB0aGUgb25lIGluIFhjb2RlLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTEyMDE4MjQ+IENvbnNvbGU6IEF1dG9jb21wbGV0ZSBzdWdnZXN0aW9uIGxpc3QgaXMgdWdseSAoaGFzIHdyb25nIHR5cGVmYWNlKQoKICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dFByb21wdC5jc3M6CiAgICAgICAgKC5zdWdnZXN0LWJveCk6CiAgICAgICAgKC5zdWdnZXN0LWJveCAuY29udGFpbmVyKToKICAgICAgICAoLnN1Z2dlc3QtYm94LWNvbnRlbnQtaXRlbSk6CiAgICAgICAgKC5zdWdnZXN0LWJveC1jb250ZW50LWl0ZW0uc2VsZWN0ZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0UHJvbXB0LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5TdWdnZXN0Qm94LnByb3RvdHlwZS5fdXBkYXRlQm94UG9zaXRpb24pOiBBZGp1c3RlZCBwYWRkaW5nLiBJbXBvc2UgYSBtYXgKICAgICAgICBoZWlnaHQgb2YgMTYwLCB3aGljaCB0dXJucyBvdXQgdG8gYmUgMTAgaXRlbXMuCgoyMDEyLTA0LTA3ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSB0aGUgY29tcGxldGlvbiBwb3B1cCB3b3JrIHdoZW4gdGhlIGNvbnNvbGUgaXMgc2Nyb2xsZWQuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTE4NDUwND4gIkN1cnJlbnQgTG9nIiBjb25zb2xlIGlucHV0IGlzIHdheSBicm9rZW4gd2hlbiB1c2luZyBpbmxpbmUgY29tcGxldGlvbiBwb3B1cAoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9VdGlsaXRpZXMuanM6CiAgICAgICAgKEVsZW1lbnQucHJvdG90eXBlLm9mZnNldFJlbGF0aXZlVG9XaW5kb3cpOiBSZW1vdmVkLiBib3hJbldpbmRvdyB3YXMgdGhlIG9ubHkgY2xpZW50LgogICAgICAgIChFbGVtZW50LnByb3RvdHlwZS5ib3hJbldpbmRvdyk6IFJlbW92ZWQgdGFyZ2V0V2luZG93IHBhcmFtZXRlciwgdGhlIG9ubHkgY2xpZW50IGFsd2F5cyBwYXNzZWQgJ3dpbmRvdycuCiAgICAgICAgVXNlIGdldENsaWVudFJlY3RzIGluc3RlYWQgb2YgdGhlIGJyb2tlbiBvZmZzZXRSZWxhdGl2ZVRvV2luZG93LgoKMjAxMi0wNC0wNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgY29uc29sZSBjb21wbGV0aW9uIGJlaGF2ZSBtb3JlIGxpa2UgWGNvZGUncyBhdXRvIGNvbXBsZXRpb24uCgogICAgICAgIFRoaXMgbWFrZXMgdGhlIHN1Z2dlc3Rpb24gcG9wdXAgYXBwZWFyIGZvciBzaW5nbGUgaXRlbXMgYW5kIGNvbXBsZXRpb25zIGFyZSBhbHdheXMgc2hvd24KICAgICAgICBhcyB1bnNlbGVjdGVkIGdyZXkgdGV4dCwgbm90IGEgc2VsZWN0ZWQgcmFuZ2UuIFRoZSB0YWIga2V5IG5vdyBhbHNvIGFjY2VwdHMgdGhlIGNvbXBsZXRpb24uCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTIwMTc1MT4gQ29uc29sZTogVGFiIHRvIGF1dG9jb21wbGV0ZSBkb2VzIG5vdCB3b3JrCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRQcm9tcHQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS5fY29tcGxldGlvbnNSZWFkeSk6IEFsd2F5cyBwYXNzIHRydWUgZm9yIGNhblNob3dGb3JTaW5nbGVJdGVtIHdoZW4gY2FsbAogICAgICAgIF9zdWdnZXN0Qm94LnVwZGF0ZVN1Z2dlc3Rpb25zLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuX2NvbXBsZXRpb25zUmVhZHkpOiBSZW1vdmUgdGhlIGF1dG8gY29tcGxldGlvbiBwYXRoLiBUaGVyZSBpcyBub3cgb25seQogICAgICAgIG9uZSBjb21wbGV0aW9uIHN0eWxlLCBoYW5kbGVkIGJ5IGFwcGx5U3VnZ2VzdGlvbi4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlLmFwcGx5U3VnZ2VzdGlvbik6IERvbid0IHNlbGVjdCB0aGUgY29tcGxldGlvbiwgZG8gdGhlIHdoYXQgX2NvbXBsZXRpb25zUmVhZHkKICAgICAgICBkaWQgZm9yIHRoZSBhdXRvIGNvbXBsZXRlIHBhdGggLS0gY3JlYXRlIGFuIGF1dG8gY29tcGxldGUgZWxlbWVudCBmb3IgdGhlIGdyZXkgdGV4dC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlLnRhYktleVByZXNzZWQpOiBDYWxsIHRhYktleVByZXNzZWQgb24gX3N1Z2dlc3RCb3ggdG8gYWNjZXB0IHRoZSBjb21wbGV0aW9uCiAgICAgICAgaW5zdGVhZCBvZiBkb2luZyBub3RoaW5nLgoKMjAxMi0wNC0wNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgdGhlIHJlbG9hZCBrZXlib2FyZCBzaG9ydGN1dCB3b3JrIHdoZW4gYW4gaW5wdXQgZmllbGQgaXMgZm9jdXNlZC4KCiAgICAgICAgVGhpcyBtYWtlcyB0aGUgcmVsb2FkIHNob3J0Y3V0cyBhbmQgcXVpY2sgY29uc29sZSB0b2dnbGUgdXNlIHRoZSBLZXlib2FyZFNob3J0Y3V0IGNsYXNzLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTExODcwMDg+IFdlYiBJbnNwZWN0b3IgaXMgdmVyeSBwaWNreSBhYm91dCB3aGF0IGhhcyB0byBiZSBmb2N1c2VkIGluIG9yZGVyIHRvIHJlbG9hZCB0aGUgcGFnZQoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IFJlbW92ZSBrZXlkb3duIGV2ZW50IGxpc3RlbmVyLiBBZGRlZCByZWxvYWQga2V5Ym9hcmQgc2hvcnRjdXRzLgogICAgICAgIChXZWJJbnNwZWN0b3IuX3JlbG9hZFBhZ2UpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLl9yZWxvYWRQYWdlSWdub3JpbmdDYWNoZSk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9RdWlja0NvbnNvbGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUpOiBBZGRlZCB0b2dnbGUgb3IgZm9jdXMga2V5Ym9hcmQgc2hvcnRjdXQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLl90b2dnbGVPckZvY3VzKTogQWRkZWQuCgoyMDEyLTA0LTAyICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgU2VsZWN0IHRoZSBjb250ZW50cyBvZiB0aGUgc2VhcmNoIGZpZWxkIHdoZW4gcHJlc3NpbmcgdGhlIENvbW1hbmQtU2hpZnQtRiBrZXlib2FyZCBzaG9ydGN1dC4KCiAgICAgICAgSW4gYWRkaXRpb24gdG8gZm9jdXNpbmcgdGhlIGZpZWxkLCB3ZSBub3cgc2VsZWN0IHRoZSBjb250ZW50cy4gVGhpcyBtYXRjaGVzIGJlaGF2aW9yIG9mIGFsbAogICAgICAgIHNlYXJjaCBmaWVsZHMgdGllZCB0byBrZXlib2FyZCBzaG9ydGN1dHMuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTE2OTEwMT4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2VhcmNoU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fZm9jdXNTZWFyY2hGaWVsZCk6IENhbGwgc2VsZWN0KCkgb24gdGhlIGZpZWxkLgoKMjAxMi0wNC0wNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgY2xpY2tpbmcgc2VhcmNoIHJlc3VsdHMgc2VsZWN0IHRoZSB0ZXh0IHJhbmdlIGFnYWluLgoKICAgICAgICBUaGlzIGJyb2tlIHdoZW4gdGhlIFRleHRFZGl0b3IgY29udGVudCBlbGVtZW50IHdhcyBtYWRlIHVzZXIgbW9kaWZpYWJsZS4gV2hlbiBhIHVzZXIgbW9kaWZpYWJsZSByZWdpb24gaXMgYmx1cnJlZAogICAgICAgIGl0IGxvc2VzIGl0cyBzZWxlY3Rpb24uIFRvIHByZXZlbnQgdGhpcyB3ZSBtYWtlIGl0IHVzZXIgbW9kaWZpYWJsZSBvbmx5IHdoZW4gZm9jdXNlZC4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExMTkzMjgyPiBSRUdSRVNTSU9OIChyNDIwNjIpOiBTZWFyY2ggcmVzdWx0cyBhcmUgbm90IHNlbGVjdGVkIHdoZW4gY2xpY2tlZCBpbiB0aGUgU2VhcmNoIHNpZGViYXIKCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5jc3M6CiAgICAgICAgKC50ZXh0LWVkaXRvciA+IC5jb250ZW50LWNvbnRhaW5lciA+IC5jb250ZW50KTogUmVtb3ZlZCAtd2Via2l0LXVzZXItbW9kaWZ5LgogICAgICAgICgudGV4dC1lZGl0b3IgPiAuY29udGVudC1jb250YWluZXIgPiAuY29udGVudDpmb2N1cyk6IEFkZGVkLiBTZXQgLXdlYmtpdC11c2VyLW1vZGlmeSBoZXJlIHdoZW4gZm9jdXNlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IpOiBTZXQgYSB0YWJJbmRleCBzbyB0aGUgY29udGVudCBjYW4gYmUgZm9jdXNlZCB3aGVuIG5vdCB1c2VyIG1vZGlmaWFibGUuCgoyMDEyLTAzLTMxICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTE2MDE4OD4gSGVhZGVycyBpbiByZXNvdXJjZSBkZXRhaWxzIHNpZGViYXIgcGFuZWwgc2hvdWxkIGJlIHNvcnRhYmxlCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX2NyZWF0ZU5hbWVWYWx1ZURhdGFHcmlkLnNvcnREYXRhR3JpZC5jb21wYXJhdG9yKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX2NyZWF0ZU5hbWVWYWx1ZURhdGFHcmlkLnNvcnREYXRhR3JpZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9jcmVhdGVOYW1lVmFsdWVEYXRhR3JpZCk6CgoyMDEyLTAzLTMwICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUHJldmVudCBkcmFnZ2luZyBhbmQgZHJvcHBpbmcgZXZlcnl3aGVyZSBleGNlcHQgZWRpdGFibGUgZmllbGRzIGluIHRoZSBXZWIgSW5zcGVjdG9yLgoKICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOiBBZGRlZCBkcmFnb3ZlciBldmVudCBsaXN0ZW5lci4KICAgICAgICAoV2ViSW5zcGVjdG9yLl9kcmFnT3Zlcik6IEFkZGVkLiBQcmV2ZW50IHRoZSBkcm9wIGZyb20gYmVpbmcgYWNjZXB0ZWQgdW5sZXNzIHRoZSB0YXJnZXQKICAgICAgICBpcyBhbiBlZGl0YWJsZSBmaWVsZC4KCjIwMTItMDMtMzAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIHJldmVhbGluZyBsaW5lIG51bWJlcnMgaW4gdGhlIFdlYiBJbnNwZWN0b3Igd29yayBhZ2FpbiBpbiBhbGwgY2FzZXMuCgogICAgICAgIFRoaXMgcmVtb3ZlcyBsaW5lIG51bWJlciByZXZlYWxpbmcgZnJvbSBTb3VyY2VDb2RlVGV4dEVkaXRvciBhbmQgbWVyZ2VzIHRoZSBleHRyYSBsb2dpYyB0aGF0CiAgICAgICAgU291cmNlQ29kZVRleHRFZGl0b3IgaGFkIGRvd24gaW50byBUZXh0RWRpdG9yLiBUaGUgcHJvYmxlbSB3YXMgaW4gV2ViSW5zcGVjdG9yLlRleHRFZGl0b3Iuc2hvd24sCiAgICAgICAgd2hlcmUgX2xpbmVOdW1iZXJUb1JldmVhbCB3YXMgYmVpbmcgZGVsZXRlZCBiZWZvcmUgU291cmNlQ29kZVRleHRFZGl0b3IgY291bGQgdXNlIGl0LgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTExNDg5ODM+IFJFR1JFU1NJT046IERlYnVnZ2VyIGRvZXMgbm90IHNjcm9sbCBleGVjdXRpb24gbGluZSBpbnRvIHZpZXcgd2hlbgogICAgICAgIHBhdXNpbmcgaW4gdGhlIGRlYnVnZ2VyCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9jb250ZW50RGlkUG9wdWxhdGUpOiBSZW1vdmUgY2FsbCB0bwogICAgICAgIF9yZXZlYWxQZW5kaW5nTGluZUlmUG9zc2libGUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zaG93bik6IENhbGwgX3JldmVhbFBlbmRpbmdMaW5lSWZQb3NzaWJsZSBpbnN0ZWFkIG9mIHJldmVhbExpbmUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5yZXZlYWxMaW5lKTogRGVsZXRlIF9saW5lTnVtYmVyVG9SZXZlYWwgbm93IHRoYXQgdGhlIHJldmVhbAogICAgICAgIGlzIGxpa2VseSB0byBoYXBwZW4uCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fcmV2ZWFsUGVuZGluZ0xpbmVJZlBvc3NpYmxlKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fcmVzZXQpOiBDYWxsIF9yZXZlYWxQZW5kaW5nTGluZUlmUG9zc2libGUuCgoyMDEyLTAzLTI5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgU3dpdGNoIHRvIHRoZSBuZXcgY3VycmVudCBsb2cgd2hlbiByZWxvYWRpbmcgdGhlIHBhZ2Ugd2hpbGUgdmlld2luZyB0aGUgY3VycmVudCBsb2cuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTE0NTcyND4gUmVsb2FkaW5nIHRoZSBwYWdlIHNob3VsZCBzd2l0Y2ggdG8gQ3VycmVudCBMb2cKCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fc2Vzc2lvblN0YXJ0ZWQpOiBTZWxlY3QgdGhlIG5ldyBDdXJyZW50IExvZwogICAgICAgIGlmIHRoZSBjdXJyZW50IHZpZXcgaXMgdGhlIHByZXZpb3VzbHkgYWN0aXZlIGNvbnRlbnQgdmlldy4KCjIwMTItMDMtMjkgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwNjU3NzgxPiBSZW1vdGUgSW5zcGVjdG9yOiBJbXByb3ZlIEdlbmVyaWMgU2VhcmNoaW5nIGZvciBOb2RlICJJbnNwZWN0IEVsZW1lbnQgRXllZ2xhc3MiCgogICAgICAgIE1hdGNoIE9wZW4gU291cmNlIGFuZCBhZGQgdGhlIHR3byBzZWNvbmQgaGlnaGxpZ2h0IGZvciBpbnNwZWN0ZWQKICAgICAgICBub2Rlcy4gVGhpcyBpcyB2ZXJ5IHVzZWZ1bCBmb3IgdGhlIFJlbW90ZSBJbnNwZWN0b3Igd2hlbiB1c2luZwogICAgICAgIG5vZGUgc2VhcmNoaW5nLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuX2RvbU5vZGVXYXNJbnNwZWN0ZWQpOgoKMjAxMi0wMy0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBrZXlib2FyZCBzaG9ydGN1dHMgZm9yIGJhY2sgYW5kIGZvcndhcmQgaW4gdGhlIGNvbnRlbnQgYnJvd3Nlci4KCiAgICAgICAgVGhlIHNob3J0Y3V0cyBhcmUgQ29tbWFuZC1Db250cm9sLUxlZnQgYW5kIENvbW1hbmQtQ29udHJvbC1SaWdodC4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwOTQ3NzQ2PiBBZGQga2V5Ym9hcmQgc2hvcnRjdXRzIGZvciBjb21tb24gYWN0aW9ucyBpbiB0aGUgbmV3IFdlYiBJbnNwZWN0b3IKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczogVXBkYXRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudEJyb3dzZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlcik6IENyZWF0ZSB0aGUgS2V5Ym9hcmRTaG9ydGN1dHMgYW5kIGFkZCB0aGUgc2hvcnRjdXQgdG8gdGhlIGJ1dHRvbiB0b29sdGlwcy4KCjIwMTItMDMtMjggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQga2V5Ym9hcmQgc2hvcnRjdXRzIGZvciB0b2dnbGluZyB0aGUgbmF2aWdhdGlvbiBhbmQgZGV0YWlscyBzaWRlYmFycy4KCiAgICAgICAgVGhlIHNob3J0Y3V0cyBhcmUgQ29udHJvbC0wIGFuZCBDb250cm9sLVNoaWZ0LTAuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDk0Nzc0Nj4gQWRkIGtleWJvYXJkIHNob3J0Y3V0cyBmb3IgY29tbW9uIGFjdGlvbnMgaW4gdGhlIG5ldyBXZWIgSW5zcGVjdG9yCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6IFVwZGF0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKTogQ3JlYXRlIHRoZSBLZXlib2FyZFNob3J0Y3V0cy4KICAgICAgICAoV2ViSW5zcGVjdG9yLl9sZWZ0U2lkZWJhclRvZ2dsZUJ1dHRvblRvb2xUaXApOiBJbmNsdWRlIHRoZSBrZXlib2FyZCBzaG9ydGN1dC4KICAgICAgICAoV2ViSW5zcGVjdG9yLl9yaWdodFNpZGViYXJUb2dnbGVCdXR0b25Ub29sVGlwKTogRGl0dG8uCgoyMDEyLTAzLTI4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIGtleWJvYXJkIHNob3J0Y3V0cyBmb3IgdGhlIGRldGFpbHMgc2lkZWJhciBwYW5lbHMuCgogICAgICAgIFRoZSBzaG9ydGN1dHMgYXJlIENvbnRyb2wtU2hpZnQtMSwgQ29udHJvbC1TaGlmdC0yLCBldGMuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDk0Nzc0Nj4gQWRkIGtleWJvYXJkIHNob3J0Y3V0cyBmb3IgY29tbW9uIGFjdGlvbnMgaW4gdGhlIG5ldyBXZWIgSW5zcGVjdG9yCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0FwcGVhcmFuY2VEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwZWFyYW5jZURldGFpbHNTaWRlYmFyUGFuZWwpOiBQYXNzICI0IiBhcyB0aGUga2V5Ym9hcmQgc2hvcnRjdXQga2V5LgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwpOiBQYXNzICIzIiBhcyB0aGUga2V5Ym9hcmQgc2hvcnRjdXQga2V5LgogICAgICAgICogVXNlckludGVyZmFjZS9ET01EZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NRGV0YWlsc1NpZGViYXJQYW5lbCk6IFBhc3MgdGhlIGtleWJvYXJkIHNob3J0Y3V0IGtleSB0aHJvdWdoLgogICAgICAgICogVXNlckludGVyZmFjZS9ET01Ob2RlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVEZXRhaWxzU2lkZWJhclBhbmVsKTogUGFzcyAiMiIgYXMgdGhlIGtleWJvYXJkIHNob3J0Y3V0IGtleS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRldGFpbHNTaWRlYmFyUGFuZWwpOiBDcmVhdGUgYSBLZXlib2FyZFNob3J0Y3V0IGFuZCBhZGQgaXQgdG8gdGhlIGRpc3BsYXlOYW1lLgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwpOiBQYXNzICIxIiBhcyB0aGUga2V5Ym9hcmQgc2hvcnRjdXQga2V5LgogICAgICAgICogVXNlckludGVyZmFjZS9TY29wZUNoYWluRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjb3BlQ2hhaW5EZXRhaWxzU2lkZWJhclBhbmVsKTogUGFzcyAiNSIgYXMgdGhlIGtleWJvYXJkIHNob3J0Y3V0IGtleS4KCjIwMTItMDMtMjggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQga2V5Ym9hcmQgc2hvcnRjdXRzIGZvciB0aGUgbmF2aWdhdGlvbiBzaWRlYmFyIHBhbmVscy4KCiAgICAgICAgVGhlIHNob3J0Y3V0cyBhcmUgQ29udHJvbC0xLCBDb250cm9sLTIsIGV0Yy4gV2UgZG9uJ3QgdXNlIENvbW1hbmQgdG8gcHJldmVudCBjb25mbGljdGluZyB3aXRoCiAgICAgICAgU2FmYXJpJ3MgZXhpc3RpbmcgYm9va21hcmtzIGJhciBjb21tYW5kcy4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwOTQ3NzQ2PiBBZGQga2V5Ym9hcmQgc2hvcnRjdXRzIGZvciBjb21tb24gYWN0aW9ucyBpbiB0aGUgbmV3IFdlYiBJbnNwZWN0b3IKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczogVXBkYXRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnJlYWtwb2ludFNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRTaWRlYmFyUGFuZWwpOiBQYXNzICI3IiBhcyB0aGUga2V5Ym9hcmQgc2hvcnRjdXQga2V5LgogICAgICAgICogVXNlckludGVyZmFjZS9EZWJ1Z1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnU2lkZWJhclBhbmVsKTogUGFzcyAiNiIgYXMgdGhlIGtleWJvYXJkIHNob3J0Y3V0IGtleS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkluc3RydW1lbnRTaWRlYmFyUGFuZWwpOiBQYXNzICIzIiBhcyB0aGUga2V5Ym9hcmQgc2hvcnRjdXQga2V5LgogICAgICAgICogVXNlckludGVyZmFjZS9Jc3N1ZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLklzc3VlU2lkZWJhclBhbmVsKTogUGFzcyAiNSIgYXMgdGhlIGtleWJvYXJkIHNob3J0Y3V0IGtleS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nU2lkZWJhclBhbmVsKTogUGFzcyAiOCIgYXMgdGhlIGtleWJvYXJkIHNob3J0Y3V0IGtleS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvblNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25TaWRlYmFyUGFuZWwpOiBDcmVhdGUgYSBLZXlib2FyZFNob3J0Y3V0IGFuZCBhZGQgaXQgdG8gdGhlIGRpc3BsYXlOYW1lLgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsKTogUGFzcyAiMSIgYXMgdGhlIGtleWJvYXJkIHNob3J0Y3V0IGtleS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2VhcmNoU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoU2lkZWJhclBhbmVsKTogUGFzcyAiNCIgYXMgdGhlIGtleWJvYXJkIHNob3J0Y3V0IGtleS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3RvcmFnZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VTaWRlYmFyUGFuZWwpOiBQYXNzICIyIiBhcyB0aGUga2V5Ym9hcmQgc2hvcnRjdXQga2V5LgoKMjAxMi0wMy0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgaXQgZWFzaWVyIHRvIHByb3Blcmx5IHNob3cgYSBzaWRlYmFyIHBhbmVsIGluIHRoZSBXZWIgSW5zcGVjdG9yLgoKICAgICAgICBUaGlzIGFkZHMgYSBzaG93IGZ1bmN0aW9uIHRvIFNpZGViYXJQYW5lbCB0aGF0IHJldmVhbHMgdGhlIFNpZGViYXIgaWYgbmVlZGVkIGFuZCBzZWxlY3RzCiAgICAgICAgdGhlIHNpZGViYXIgcGFuZWwuIEZvciBuYXZpZ2F0aW9uIHNpZGViYXIgcGFuZWxzIGl0IGFsc28gZm9jdXNlcyB0aGUgVHJlZU91dGxpbmUuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3BlY3RvckZyb250ZW5kQVBJLmpzOgogICAgICAgIChJbnNwZWN0b3JGcm9udGVuZEFQSS5zdG9wUHJvZmlsaW5nSmF2YVNjcmlwdCk6IFVzZSBzaG93KCkuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5fZGVidWdnZXJEaWRQYXVzZSk6IFVzZSBzaG93KCkuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05hdmlnYXRpb25TaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLnByb3RvdHlwZS5zaG93KTogQWRkZWQuIENhbGwgdGhlIHN1cGVyY2xhc3Mgc2hvdyBhbmQgZm9jdXMgdGhlIHRyZWUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NlYXJjaFNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2ZvY3VzU2VhcmNoRmllbGQpOiBVc2Ugc2hvdygpLgogICAgICAgICogVXNlckludGVyZmFjZS9TaWRlYmFyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2lkZWJhci5wcm90b3R5cGUuYWRkU2lkZWJhclBhbmVsKTogVXNlIGluc2VydFNpZGViYXJQYW5lbC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXIucHJvdG90eXBlLmluc2VydFNpZGViYXJQYW5lbCk6IFNldCB0aGUgX3BhcmVudFNpZGViYXIgdG8gdGhpcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXIucHJvdG90eXBlLnJlbW92ZVNpZGViYXJQYW5lbCk6IFNldCB0aGUgX3BhcmVudFNpZGViYXIgdG8gbnVsbC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2lkZWJhclBhbmVsLnByb3RvdHlwZS5nZXQgcGFyZW50U2lkZWJhcik6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuU2lkZWJhclBhbmVsLnByb3RvdHlwZS5zaG93KTogQWRkZWQuCgoyMDEyLTAzLTI4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIHN1cHBvcnQgdG8gV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQgZm9yIHNwZWNpZnlpbmcgYSB0YXJnZXQgZWxlbWVudCBhbmQgY2FsbGJhY2suCgogICAgICAgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBDb21tYW5kLVNoaWZ0LUYgdG8gZm9jdXMgdGhlIHNlYXJjaCBmaWVsZCBhcyB0aGUgZmlyc3Qgc2hvcnRjdXQuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDk0Nzc0Nj4gQWRkIGtleWJvYXJkIHNob3J0Y3V0cyBmb3IgY29tbW9uIGFjdGlvbnMgaW4gdGhlIG5ldyBXZWIgSW5zcGVjdG9yCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0tleWJvYXJkU2hvcnRjdXQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0KTogQWRkZWQgdGFyZ2V0RWxlbWVudCBhbmQgY2FsbGJhY2sgcGFyYW1ldGVycy4gUmVnaXN0ZXIgYSBrZXlkb3duIGxpc3RlbmVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5faGFuZGxlS2V5RG93bik6IEFkZGVkLiBXYWxrIHRoZSB0cmVlIGZyb20gdGhlIHRhcmdldCBhbmQgY2hlY2sgZm9yIG1hdGNoaW5nCiAgICAgICAga2V5Ym9hcmQgc2hvcnRjdXRzLgogICAgICAgIChXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5wcm90b3R5cGUuZ2V0IGNhbGxiYWNrKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NlYXJjaFNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbCk6IENyZWF0ZSBhIEtleWJvYXJkU2hvcnRjdXQgZm9yIENvbW1hbmQtU2hpZnQtRiB0byBmb2N1cyB0aGUgc2VhcmNoIGZpZWxkLgogICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fZm9jdXNTZWFyY2hGaWxlZCk6IEFkZGVkLgoKMjAxMi0wMy0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFJlaW50cm9kdWNlIFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0IGFzIGEgcHJvcGVyIGNsYXNzLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTA5NDc3NDY+IEFkZCBrZXlib2FyZCBzaG9ydGN1dHMgZm9yIGNvbW1vbiBhY3Rpb25zIGluIHRoZSBuZXcgV2ViIEluc3BlY3RvcgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9FZGl0aW5nU3VwcG9ydC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGluZy5kZWZhdWx0RmluaXNoSGFuZGxlcik6IFVzZSBLZXlib2FyZFNob3J0Y3V0LktleS5Fc2NhcGUua2V5Q29kZSBpbnN0ZWFkIG9mCiAgICAgICAgS2V5Ym9hcmRTaG9ydGN1dC5LZXlzLkVzYy5jb2RlLgogICAgICAgICogVXNlckludGVyZmFjZS9KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIpOiBSZW1vdmUgdGhlIF9zaG9ydGN1dHMgb2JqZWN0IGFuZCBhc3NpZ24gaW5kaXZpZHVhbCBzaG9ydGN1dHMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlLl9wcm9tcHRLZXlEb3duKTogQ2FsbCBtYXRjaGVzRXZlbnQgb24gZWFjaCBzaG9ydGN1dC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvS2V5Ym9hcmRTaG9ydGN1dC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLktleSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5LZXkucHJvdG90eXBlLmdldCBrZXlDb2RlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLktleS5wcm90b3R5cGUuZ2V0IGRpc3BsYXlOYW1lKToKICAgICAgICAoV2ViSW5zcGVjdG9yLktleS5wcm90b3R5cGUudG9TdHJpbmcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5wcm90b3R5cGUuZ2V0IG1vZGlmaWVycyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LnByb3RvdHlwZS5nZXQga2V5KToKICAgICAgICAoV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQucHJvdG90eXBlLmdldCBkaXNwbGF5TmFtZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LnByb3RvdHlwZS5tYXRjaGVzRXZlbnQpOgogICAgICAgICogVXNlckludGVyZmFjZS9TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlLmVkaXRpbmdOYW1lVmFsdWVLZXlEb3duKTogVXNlIEtleWJvYXJkU2hvcnRjdXQuS2V5CiAgICAgICAgaW5zdGVhZCBvZiBLZXlib2FyZFNob3J0Y3V0LktleXMuCgoyMDEyLTAzLTI4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUmVtb3ZlIFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LCBzb29uIHRvIGJlIHJlcGxhY2VkIGJ5IGEgYmV0dGVyIHZlcnNpb24uCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDk0Nzc0Nj4gQWRkIGtleWJvYXJkIHNob3J0Y3V0cyBmb3IgY29tbW9uIGFjdGlvbnMgaW4gdGhlIG5ldyBXZWIgSW5zcGVjdG9yCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0tleWJvYXJkU2hvcnRjdXQuanM6IFJlbW92ZWQuCgoyMDEyLTAzLTI2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IGFuIGlzc3VlIHdoZXJlIEluc3BlY3QgRWxlbWVudCB3b3VsZCBzb21ldGltZXMgbm90IHN0aWNrIGFuZCB0aGUgRE9NIG5vZGUgc2VsZWN0aW9uIHdvdWxkIHJldmVydCB0bwogICAgICAgIHRoZSBwcmV2aW91cyBzZWxlY3RlZCBET00gbm9kZS4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExMTIyMzI2PiBVc2luZyB0aGUgSW5zcGVjdCBFbGVtZW50IGNvbnRlbnQgbWVudSBzb21ldGltZXMgZmFpbHMgdG8gc2VsZWN0IHRoZSByaWdodCBET00gbm9kZQoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlQ29udGVudFZpZXcucHJvdG90eXBlLl9yb290RE9NTm9kZUF2YWlsYWJsZS5zZWxlY3ROb2RlKTogUmV0dXJuIGVhcmx5IGlmIHRoZSBET00gdHJlZQogICAgICAgIGhhcyBhIHNlbGVjdGlvbiBhbHJlYWR5LiBBIHNlbGVjdGlvbiBjYW4gYmUgbWFkZSB3aGlsZSB3YWl0aW5nIGZvciB0aGUgYXN5bmMgcmVwbHkuCgoyMDEyLTAzLTI2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIHNvbWUgbWlzc2luZyBjaGVja3MgdG8gdGhlIERPTU5vZGVEZXRhaWxzU2lkZWJhclBhbmVsLgoKICAgICAgICBUaGlzIHByZXZlbnRzIHVwZGF0aW5nIHRoZSBpbnRlcmZhY2UgaWYgdGhlIERPTSBub2RlIHNlbGVjdGlvbiBjaGFuZ2VkIHdoaWxlIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgYWJvdXQKICAgICAgICB0aGUgcHJldmlvdXMgbm9kZSBmcm9tIHRoZSBiYWNrZW5kLgoKICAgICAgICBSZXZpZXdlZCBieSBBZGEgQ2hhbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9yZWZyZXNoUHJvcGVydGllcy5ub2RlUHJvdG90eXBlc1JlYWR5KTogUmV0dXJuIGVhcmx5IGlmIHRoZQogICAgICAgIERPTSBub2RlIGRvZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50IERPTSBub2RlLiBUaGUgRE9NIG5vZGUgY2hhbmdlZCB3aGlsZSB3ZSB3ZXJlIHdhaXRpbmcgZm9yIHRoZSBhc3luYyByZXNwb25zZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVmcmVzaFByb3BlcnRpZXMuZmlsbFNlY3Rpb24pOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVmcmVzaEV2ZW50TGlzdGVuZXJzLmV2ZW50TGlzdGVuZXJzQ2FsbGJhY2spOiBEaXR0by4KCjIwMTItMDMtMjUgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBVc2UgRGV0YWlsc1NlY3Rpb25Qcm9wZXJ0aWVzUm93IGZvciB0aGUgRE9NIG5vZGUgUHJvcGVydGllcyBzZWN0aW9uLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01Ob2RlRGV0YWlsc1NpZGViYXJQYW5lbC5jc3M6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9yZWZyZXNoUHJvcGVydGllcy5maWxsU2VjdGlvbik6IENyZWF0ZSBhCiAgICAgICAgRGV0YWlsc1NlY3Rpb24gYW5kIERldGFpbHNTZWN0aW9uUHJvcGVydGllc1JvdyBmb3IgZWFjaCBwcm90b3R5cGUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RldGFpbHNTZWN0aW9uLmNzczogU2V0IG1hcmdpbi1ib3R0b20gdG8gLTFweCBzbyBuZXN0ZWQgc2VjdGlvbiBib3JkZXJzCiAgICAgICAgY29sbGFwc2UgaW50byBhIHNpbmdsZSBib3JkZXIuCiAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24pOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IFJlbW92ZWQgRE9NTm9kZURldGFpbHNTaWRlYmFyUGFuZWwuY3NzLgoKMjAxMi0wMy0yNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgU2VsZWN0IEFsbCBvbmx5IHNlbGVjdCB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSByZXNvdXJjZS4KCiAgICAgICAgVG8gZG8gdGhpcyBjb250ZW50IGVsZW1lbnQgbmVlZHMgdG8gZWl0aGVyIGJlIGluIGFuIGlmcmFtZSBvciBlZGl0YWJsZS4gV29ya2luZyB3aXRoIGZyYW1lcyBpcwogICAgICAgIHByZXR0eSBhbm5veWluZywgc28gbWFraW5nIHRoZSBjb250ZW50IGVkaXRhYmxlIHdhcyB0aGUgYmVzdCBvcHRpb24uIEJ1dCBzaW5jZSB3ZSBkb24ndCBzdXBwb3J0CiAgICAgICAgZWRpdGluZyByZXNvdXJjZXMgeWV0LCB3ZSBuZWVkIHRvIHByZXZlbnQgdGhlIGVkaXRpbmcgZnJvbSBvY2N1cnJpbmcuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTAzOTU5Nj4gUkVHUkVTU0lPTiAoTmV3IFdlYiBJbnNwZWN0b3IpOiBTZWxlY3QgYWxsIHdoaWxlIHZpZXdpbmcgc291cmNlIHNlbGVjdHMKICAgICAgICBpbmZvIGluIERldGFpbHMgc2lkZWJhcgoKICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5jc3M6CiAgICAgICAgKC50ZXh0LWVkaXRvciA+IC5jb250ZW50LWNvbnRhaW5lciA+IC5jb250ZW50KTogQWRkZWQgLXdlYmtpdC11c2VyLW1vZGlmeTogcmVhZC13cml0ZS1wbGFpbnRleHQtb25seS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IpOiBBZGRlZCBldmVudCBsaXN0ZW5lcnMgZm9yIGtleWRvd24sIHRleHRJbnB1dCBhbmQgd2Via2l0RWRpdGFibGVDb250ZW50Q2hhbmdlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9wcmV2ZW50S2V5RG93bik6IEFkZGVkLiBBbGxvdyBjb21tYW5kIGtleXMgYW5kIHBhZ2UgdXAsIHBhZ2UgZG93biwKICAgICAgICBob21lLCBlbmQsIHVwLCBkb3duLCBsZWZ0LCByaWdodC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9wcmV2ZW50VGV4dElucHV0KTogQWRkZWQuIFByZXZlbnQgcGFzdGUgYW5kIG90aGVyIGlucHV0LgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX2VkaXRhYmxlQ29udGVudENoYW5nZWQpOiBBZGRlZC4gRG8gYSByZXNldCBpZiB0aGlzIGhhcHBlbnMuCgoyMDEyLTAzLTI0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUmVtb3ZlIFdlYkluc3BlY3Rvci5pc01hYygpIGFuZCB0aGUgZGVhZCBjb2RlIHRoYXQgY2FtZSB3aXRoIGl0LgoKICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBEYW4gQmVybnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRWRpdGluZ1N1cHBvcnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5zdGFydEVkaXRpbmcuZGVmYXVsdEZpbmlzaEhhbmRsZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3Iuc2V0Q3VycmVudEZvY3VzRWxlbWVudCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0tleWJvYXJkU2hvcnRjdXQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Ll9tb2RpZmllcnNUb1N0cmluZyk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRQcm9tcHQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0V2l0aEhpc3RvcnkucHJvdG90eXBlLmRlZmF1bHRLZXlIYW5kbGVyKToKCjIwMTItMDMtMjIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIHRoZSBXZWIgSW5zcGVjdG9yIERhdGFHcmlkIHNvcnQgaW5kaWNhdG9yIGJlIEhpRFBJIGNvbXBsaWFudC4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwNjQzMTc1PiBEYXRhR3JpZCBzb3J0IGluZGljYXRvciBhcnJvdyBhbmQgVGltZWxpbmUgcGlsbHMvY2FsbG91dHMgc2hvdWxkIGJlIG1hZGUgSGlEUEkgY29tcGxpYW50CgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFHcmlkLmNzczoKICAgICAgICAoLmRhdGEtZ3JpZCB0aC5zb3J0LWFzY2VuZGluZyA+IGRpdjpmaXJzdC1jaGlsZDo6YWZ0ZXIpOiBVc2UgdGhlIGNhbnZhcyBiYXNlZCBpbWFnZS4KICAgICAgICAoLmRhdGEtZ3JpZCB0aC5zb3J0LWRlc2NlbmRpbmcgPiBkaXY6Zmlyc3QtY2hpbGQ6OmFmdGVyKTogRGl0dG8uCgogICAgICAgICogVXNlckludGVyZmFjZS9EYXRhR3JpZC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFHcmlkKTogQ2FsbCBfZ2VuZXJhdGVTb3J0SW5kaWNhdG9ySW1hZ2VzSWZOZWVkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhR3JpZC5wcm90b3R5cGUuX2dlbmVyYXRlU29ydEluZGljYXRvckltYWdlc0lmTmVlZGVkKTogQWRkZWQuCgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvU29ydEluZGljYXRvckRvd25BcnJvdy5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvU29ydEluZGljYXRvclVwQXJyb3cucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL3RyZWVEb3duVHJpYW5nbGVCbGFjay5wbmc6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy90cmVlVXBUcmlhbmdsZUJsYWNrLnBuZzogUmVtb3ZlZC4KCjIwMTItMDMtMjIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIHRoZSByZXN0IG9mIHRoZSBkaXNjbG9zdXJlIHRyaWFuZ2xlcyBpbiB0aGUgV2ViIEluc3BlY3RvciBIaURQSSBjb21wbGlhbnQuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDY0MzE3NT4gU29tZSBkaXNjbG9zdXJlIHRyaWFuZ2xlcyBhbmQgVGltZWxpbmUgcGlsbHMgc2hvdWxkIGJlIG1hZGUgSGlEUEkgY29tcGxpYW50CgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9EaXNjbG9zdXJlVHJpYW5nbGVUaW55Q2xvc2VkLnBkZjogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9EaXNjbG9zdXJlVHJpYW5nbGVUaW55T3Blbi5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvZGlzY2xvc3VyZVRyaWFuZ2xlU21hbGxEb3duLnBuZzogUmVtb3ZlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL2Rpc2Nsb3N1cmVUcmlhbmdsZVNtYWxsUmlnaHQucG5nOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvdHJlZURvd25UcmlhbmdsZVdoaXRlLnBuZzogUmVtb3ZlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL3RyZWVSaWdodFRyaWFuZ2xlQmxhY2sucG5nOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvdHJlZVJpZ2h0VHJpYW5nbGVXaGl0ZS5wbmc6IFJlbW92ZWQuCgogICAgICAgICogVXNlckludGVyZmFjZS9Db25zb2xlR3JvdXAuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlR3JvdXApOiBEZWxldGUgYnJhY2tldCBlbGVtZW50LiBJdCB3YXMgdWdseSBhbmQgc29vbyBXaW5kb3dzLi4uCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IENhbGwgX2dlbmVyYXRlRGlzY2xvc3VyZVRyaWFuZ2xlSW1hZ2VzLgogICAgICAgIChXZWJJbnNwZWN0b3IuX2dlbmVyYXRlRGlzY2xvc3VyZVRyaWFuZ2xlSW1hZ2VzKTogQWRkZWQuIEdlbmVyYXRlIGltYWdlcyBmb3Igc21hbGwgYW5kIHRpbnkuCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwuY3NzOiBVc2UgdGhlIGNhbnZhcyBiYXNlZCBkaXNjbG9zdXJlIHRyaWFuZ2xlcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZU91dGxpbmUuY3NzOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YUdyaWQuY3NzOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2VjdGlvbi5jc3M6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dDb250ZW50Vmlldy5jc3M6IERpdHRvLiBBbHNvIGRlbGV0ZSB0aGUgYnJhY2tldCBzdHlsZSBydWxlcy4KCjIwMTItMDMtMjIgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwMzkxOTY5PiBSZW1vdGUgSW5zcGVjdG9yOiBBZGQgQ1NTIENvbXBsZXRpb24gZm9yIGlPUyBQcm9wZXJ0aWVzCgogICAgICAgIEFkZCBDU1MgYXV0by1jb21wbGV0aW9uIGtleXdvcmRzIGZvciBpT1MgcHJvcGVydGllcy4KICAgICAgICBBZGQgInRvdWNoIiB0byB0aGUgbGlzdCBvZiBzeW50YXggaGlnaGxpZ2h0ZWQgdmFsdWUga2V5d29yZHMuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU0tleXdvcmRDb21wbGV0aW9ucy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU291cmNlVG9rZW5pemVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU291cmNlVG9rZW5pemVyKToKCgoyMDEyLTAzLTIxICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgVXNlIC13ZWJraXQtaW1hZ2Utc2V0IGluc3RlYWQgb2YgbWVkaWEgcXVlcmllcyBpbiB0aGUgV2ViIEluc3BlY3Rvci4KCiAgICAgICAgVGhpcyBwYXRjaCBhbHNvIHVzZXMgc2VwYXJhdGUgYm9yZGVyLWltYWdlLXNsaWNlIGFuZCBib3JkZXItaW1hZ2Utc291cmNlIHByb3BlcnRpZXMgdG8KICAgICAgICBhdm9pZCBkdXBsaWNhdGUgc2xpY2UgbnVtYmVycyBpbiBlYWNoIHJ1bGUuCgogICAgICAgIEkgZGlkbid0IHVzZSBpbWFnZS1zZXQgZm9yIHRoZSBib3JkZXItaW1hZ2UgY2FzZXMgc2luY2UgeW91IHN0aWxsIG5lZWQgYSBtZWRpYSBxdWVyeQogICAgICAgIGZvciB0aGUgMnggc2xpY2UgbnVtYmVycy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9uIEhvbmV5Y3V0dC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0FwcGxpY2F0aW9uQ2FjaGVJY29ucy5jc3M6CiAgICAgICAgKC5hcHBsaWNhdGlvbi1jYWNoZS1tYW5pZmVzdCAuaWNvbik6IFVzZSAtd2Via2l0LWltYWdlLXNldC4KICAgICAgICAoLmFwcGxpY2F0aW9uLWNhY2hlLWZyYW1lIC5pY29uKTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Nvb2tpZUljb24uY3NzOgogICAgICAgICguY29va2llLWljb24gLmljb24pOiBVc2UgLXdlYmtpdC1pbWFnZS1zZXQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVN0b3JhZ2VJY29ucy5jc3M6CiAgICAgICAgKC5sb2NhbC1zdG9yYWdlLWljb24gLmljb24pOiBVc2UgLXdlYmtpdC1pbWFnZS1zZXQuCiAgICAgICAgKC5zZXNzaW9uLXN0b3JhZ2UtaWNvbiAuaWNvbik6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9EYXRhYmFzZUljb24uY3NzOgogICAgICAgICguZGF0YWJhc2UtaWNvbiAuaWNvbik6IFVzZSAtd2Via2l0LWltYWdlLXNldC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YWJhc2VUYWJsZUljb24uY3NzOgogICAgICAgICguZGF0YWJhc2UtdGFibGUtaWNvbiAuaWNvbik6IFVzZSAtd2Via2l0LWltYWdlLXNldC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRm9sZGVySWNvbi5jc3M6CiAgICAgICAgKC5mb2xkZXItaWNvbiAuaWNvbik6IFVzZSAtd2Via2l0LWltYWdlLXNldC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zdHJ1bWVudEljb25zLmNzczoKICAgICAgICAoLm5ldHdvcmstaWNvbiAuaWNvbik6IFVzZSAtd2Via2l0LWltYWdlLXNldC4KICAgICAgICAoLmNvbG9ycy1pY29uIC5pY29uKTogRGl0dG8uCiAgICAgICAgKC5zY3JpcHQtaWNvbiAuaWNvbik6IERpdHRvLgogICAgICAgICguc3RvcHdhdGNoLWljb24gLmljb24pOgogICAgICAgICgucHJvZmlsZS1pY29uIC5pY29uKTogVXNlIC13ZWJraXQtaW1hZ2Utc2V0LgogICAgICAgICogVXNlckludGVyZmFjZS9JbnN0cnVtZW50U2lkZWJhclBhbmVsLmNzczoKICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuaW5zdHJ1bWVudCA+IC50aXRsZS1iYXIgPiAucmVjb3JkLWdseXBoKTogVXNlIC13ZWJraXQtaW1hZ2Utc2V0LgogICAgICAgICguc2lkZWJhciA+IC5wYW5lbC5pbnN0cnVtZW50ID4gLnRpdGxlLWJhciA+IC5yZWNvcmQtZ2x5cGgucmVjb3JkaW5nKTogRGl0dG8uCiAgICAgICAgKC5zaWRlYmFyID4gLnBhbmVsLmluc3RydW1lbnQgPiAudGl0bGUtYmFyID4gLnJlY29yZC1nbHlwaDpob3Zlcik6IERpdHRvLgogICAgICAgICguc2lkZWJhciA+IC5wYW5lbC5pbnN0cnVtZW50ID4gLnRpdGxlLWJhciA+IC5yZWNvcmQtZ2x5cGgucmVjb3JkaW5nOmhvdmVyKTogRGl0dG8uCiAgICAgICAgKC5zaWRlYmFyID4gLnBhbmVsLmluc3RydW1lbnQgPiAudGl0bGUtYmFyID4gLnJlY29yZC1nbHlwaC5mb3JjZWQpOiBEaXR0by4KICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuaW5zdHJ1bWVudCA+IC50aXRsZS1iYXIgPiAucmVjb3JkLWdseXBoLnJlY29yZGluZy5mb3JjZWQpOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nSWNvbi5jc3M6CiAgICAgICAgKC5sb2ctaWNvbiAuaWNvbik6IFVzZSAtd2Via2l0LWltYWdlLXNldC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VJY29ucy5jc3M6CiAgICAgICAgKC5yZXNvdXJjZS1pY29uIC5pY29uKTogVXNlIC13ZWJraXQtaW1hZ2Utc2V0LgogICAgICAgICgucmVzb3VyY2UtaWNvbi5yZXNvdXJjZS10eXBlLWRvY3VtZW50IC5pY29uKTogRGl0dG8uCiAgICAgICAgKC5yZXNvdXJjZS1pY29uLnJlc291cmNlLXR5cGUtaW1hZ2UgLmljb24pOiBEaXR0by4KICAgICAgICAoLnJlc291cmNlLWljb24ucmVzb3VyY2UtdHlwZS1mb250IC5pY29uKTogRGl0dG8uCiAgICAgICAgKC5yZXNvdXJjZS1pY29uLnJlc291cmNlLXR5cGUtc3R5bGVzaGVldCAuaWNvbik6IERpdHRvLgogICAgICAgICgucmVzb3VyY2UtaWNvbi5yZXNvdXJjZS10eXBlLXNjcmlwdCAuaWNvbik6IERpdHRvLgogICAgICAgICguYW5vbnltb3VzLXNjcmlwdC1pY29uIC5pY29uKTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuY3NzOgogICAgICAgICgudGV4dC1lZGl0b3IgPiAuZ3V0dGVyID4gLmxpbmUtbnVtYmVyLmJyZWFrcG9pbnQtcmVzb2x2ZWQgPiAuYnJlYWtwb2ludCk6IFVzZSBib3JkZXItaW1hZ2Utc291cmNlLgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZU92ZXJ2aWV3LmNzczoKICAgICAgICAoLnRpbWVsaW5lLW92ZXJ2aWV3ID4gLnRpbWVsaW5lIC5iYXIpOiBVc2UgYm9yZGVyLWltYWdlLXNsaWNlLgogICAgICAgICgudGltZWxpbmUtb3ZlcnZpZXcgPiAudGltZWxpbmUudGltZWxpbmUtcmVjb3JkLXR5cGUtbmV0d29yayAuYmFyKTogVXNlIGJvcmRlci1pbWFnZS1zb3VyY2UuCiAgICAgICAgKC50aW1lbGluZS1vdmVydmlldyA+IC50aW1lbGluZS50aW1lbGluZS1yZWNvcmQtdHlwZS1sYXlvdXQgLmJhcik6IERpdHRvLgogICAgICAgICgudGltZWxpbmUtb3ZlcnZpZXcgPiAudGltZWxpbmUudGltZWxpbmUtcmVjb3JkLXR5cGUtc2NyaXB0IC5iYXIpOiBEaXR0by4KCjIwMTItMDMtMjEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIHRoZSBXZWIgSW5zcGVjdG9yIG5hdmlnYXRpb24gYmFyIGFuZCBzb21lIGRpc2Nsb3N1cmUgdHJpYW5nbGVzIEhpRFBJIGF3YXJlIGFnYWluLgoKICAgICAgICBUaGlzIHJlZ3Jlc3NlZCB3aGVuIEhpRFBJIGNhbnZhcyB3YXMgdHVybmVkIG9mZiBieSA8cmRhcjovL3Byb2JsZW0vMTA4ODc4ODE+LiBUaGlzIGNoYW5nZSBhbHNvIHVzZXMKICAgICAgICBtZWRpYSBxdWVyaWVzLCBzbyBkcmFnZ2luZyB0aGUgV2ViIEluc3BlY3RvciBiZXR3ZWVuIGRpZmZlcmVudCBEUEkgbW9uaXRvcnMgd2lsbCBjb3JyZWN0bHkgc3dpdGNoLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTEwOTE1NTU+IEhpRFBJOiBNYW55IHNtYWxsIGljb25zIGluIG5ldyBXZWIgSW5zcGVjdG9yIGFyZSBibHVycnkgaW4gSGlEUEkKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQWN0aXZhdGVCdXR0b25OYXZpZ2F0aW9uSXRlbS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkFjdGl2YXRlQnV0dG9uTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLmdlbmVyYXRlU3R5bGVUZXh0KTogQWRkZWQgbWVkaWEgcXVlcnkgYW5kIDJ4IHZlcnNpb25zLgogICAgICAgICogVXNlckludGVyZmFjZS9CdXR0b25OYXZpZ2F0aW9uSXRlbS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkJ1dHRvbk5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5nZW5lcmF0ZVN0eWxlVGV4dCk6IEFkZGVkIG1lZGlhIHF1ZXJ5IGFuZCAyeCB2ZXJzaW9ucy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGV0YWlsc1NlY3Rpb24uY3NzOgogICAgICAgICguZGV0YWlscy1zZWN0aW9uID4gLmhlYWRlcjo6YmVmb3JlKTogU2V0IGJhY2tncm91bmQtc2l6ZS4KICAgICAgICAoLmRldGFpbHMtc2VjdGlvbiA+IC5oZWFkZXI6bm90KC5tb3VzZS1vdmVyLW9wdGlvbnMtZWxlbWVudCk6YWN0aXZlOjpiZWZvcmUpOiBBZGRlZCAyeCB2ZXJzaW9uLgogICAgICAgICguZGV0YWlscy1zZWN0aW9uLmNvbGxhcHNlZCA+IC5oZWFkZXI6OmJlZm9yZSk6IERpdHRvLgogICAgICAgICguZGV0YWlscy1zZWN0aW9uLmNvbGxhcHNlZCA+IC5oZWFkZXI6bm90KC5tb3VzZS1vdmVyLW9wdGlvbnMtZWxlbWVudCk6YWN0aXZlOjpiZWZvcmUpOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VVdGlsaXRpZXMuanM6CiAgICAgICAgKGdlbmVyYXRlQ29sb3JlZEltYWdlKTogQWRkZWQgc2NhbGUgcGFyYW1ldGVyLiBNdWx0aXBseSB3aWR0aCBhbmQgaGVpZ2h0IGJ5IHNjYWxlLgogICAgICAgIChnZW5lcmF0ZUNvbG9yZWRJbWFnZXNGb3JDU1MuaW1hZ2VMb2FkZWQpOiBDYWxsIGdlbmVyYXRlSW1hZ2UgZm9yIGVhY2ggcGl4ZWwgcmF0aW8uCiAgICAgICAgKGdlbmVyYXRlQ29sb3JlZEltYWdlc0ZvckNTUy5nZW5lcmF0ZUltYWdlKTogQWRkZWQgcGl4ZWxSYXRpbyBwYXJhbWV0ZXIuIE11bHRpcGx5IHRoZSBzaGFkb3cgdmFsdWVzIGJ5IHBpeGVsUmF0aW8uCiAgICAgICAgUGFzcyB0aGUgcGl4ZWxSYXRpb24gdG8gZ2VuZXJhdGVDb2xvcmVkSW1hZ2UuCiAgICAgICAgKGdlbmVyYXRlQ29sb3JlZEltYWdlc0ZvckNTUyk6IFJlbW92ZSBkZXB0aCBhbmQgc2NhbGUuCiAgICAgICAgKGdlbmVyYXRlRW1ib3NzZWRJbWFnZXMuX2ltYWdlTG9hZGVkKTogQ2FsbCBfY3JlYXRlRW1ib3NzZWRDYW52YXNJbWFnZSBmb3IgZWFjaCBwaXhlbCByYXRpby4KICAgICAgICAoZ2VuZXJhdGVFbWJvc3NlZEltYWdlcy5fY3JlYXRlRW1ib3NzZWRDYW52YXNJbWFnZSk6IEFkZGVkIHBpeGVsUmF0aW8gcGFyYW1ldGVyLiBEZWZpbmUgdGhlIGRlcHRoLiBNdWx0aXBseSB0aGUKICAgICAgICB3aWR0aCBhbmQgaGVpZ2h0IGJ5IHBpeGVsUmF0aW8uIFVzZSB3aWR0aCBhbmQgaGVpZ2h0IGluc3RlYWQgb2YgaW1hZ2Uud2lkdGggYW5kIGltYWdlLmhlaWdodCB0aHJvdWdoIG91dC4KICAgICAgICAoZ2VuZXJhdGVFbWJvc3NlZEltYWdlcy5faW52ZXJ0TWFza0ltYWdlKTogQWRkZWQgd2lkdGggYW5kIGhlaWdodCBwYXJhbWV0ZXJzLiBVc2UgaW5zdGVhZCBvZiBpbWFnZS53aWR0aCBhbmQgaW1hZ2UuaGVpZ2h0LgogICAgICAgIChnZW5lcmF0ZUVtYm9zc2VkSW1hZ2VzLl9hcHBseUltYWdlTWFzayk6IFJlbW92ZSB1bnVzZWQgSFRNTENhbnZhc0VsZW1lbnQgYXMgaW5wdXQgY29kZSBwYXRoLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmNzczoKICAgICAgICAoLmdvLXRvLWFycm93OmFjdGl2ZSk6IEFkZGVkIDJ4IHZlcnNpb24uCiAgICAgICAgKDpmb2N1cyAuc2VsZWN0ZWQgLmdvLXRvLWFycm93KTogQWRkZWQgMnggdmVyc2lvbi4KICAgICAgICAoOmZvY3VzIC5zZWxlY3RlZCAuZ28tdG8tYXJyb3c6YWN0aXZlKTogQWRkZWQgMnggdmVyc2lvbi4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvblNpZGViYXJQYW5lbC5jc3M6CiAgICAgICAgKC5uYXZpZ2F0aW9uLXNpZGViYXItcGFuZWwtY29udGVudC10cmVlLW91dGxpbmUgLml0ZW0gLmRpc2Nsb3N1cmUtYnV0dG9uKTogU2V0IGJhY2tncm91bmQtc2l6ZS4KICAgICAgICAoLm5hdmlnYXRpb24tc2lkZWJhci1wYW5lbC1jb250ZW50LXRyZWUtb3V0bGluZSAuaXRlbS5zZWxlY3RlZCAuZGlzY2xvc3VyZS1idXR0b24pOiBBZGRlZCAyeCB2ZXJzaW9uLgogICAgICAgICgubmF2aWdhdGlvbi1zaWRlYmFyLXBhbmVsLWNvbnRlbnQtdHJlZS1vdXRsaW5lIC5pdGVtLmV4cGFuZGVkIC5kaXNjbG9zdXJlLWJ1dHRvbik6IEFkZGVkIDJ4IHZlcnNpb24uCiAgICAgICAgKC5uYXZpZ2F0aW9uLXNpZGViYXItcGFuZWwtY29udGVudC10cmVlLW91dGxpbmUgLml0ZW0uc2VsZWN0ZWQuZXhwYW5kZWQgLmRpc2Nsb3N1cmUtYnV0dG9uKTogQWRkZWQgMnggdmVyc2lvbi4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmFkaW9CdXR0b25OYXZpZ2F0aW9uSXRlbS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJhZGlvQnV0dG9uTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLmdlbmVyYXRlU3R5bGVUZXh0KTogQWRkZWQgbWVkaWEgcXVlcnkgYW5kIDJ4IHZlcnNpb25zLgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZXNDb250ZW50Vmlldy5jc3M6CiAgICAgICAgKC5jb250ZW50LXZpZXcudGltZWxpbmVzID4gLmRhdGEtZ3JpZCB0aC5jb2xsYXBzZXIgPiAuY29sbGFwc2VyLWJ1dHRvbik6IFNldCBiYWNrZ3JvdW5kLXNpemUuCiAgICAgICAgKC5jb250ZW50LXZpZXcudGltZWxpbmVzID4gLmRhdGEtZ3JpZCB0aC5jb2xsYXBzZXIgPiAuY29sbGFwc2VyLWJ1dHRvbjphY3RpdmUpOiBBZGRlZCAyeCB2ZXJzaW9uLgogICAgICAgICguY29udGVudC12aWV3LnRpbWVsaW5lcyA+IC5kYXRhLWdyaWQgdGguY29sbGFwc2VyLmNvbGxhcHNlZCA+IC5jb2xsYXBzZXItYnV0dG9uKTogQWRkZWQgMnggdmVyc2lvbi4KICAgICAgICAoLmNvbnRlbnQtdmlldy50aW1lbGluZXMgPiAuZGF0YS1ncmlkIHRoLmNvbGxhcHNlci5jb2xsYXBzZWQgPiAuY29sbGFwc2VyLWJ1dHRvbjphY3RpdmUpOiBBZGRlZCAyeCB2ZXJzaW9uLgoKMjAxMi0wMy0yMCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIERvbid0IGFsbG93IHNldHRpbmcgYnJlYWtwb2ludHMgZm9yIHJlc291cmNlIHR5cGVzIHRoYXQgYXJlIG5vdCBTY3JpcHQgb3IgRG9jdW1lbnQuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTA0NDQxMD4gU2hvdWxkIG5vdCBiZSBhbGxvd2VkIHRvIHNldCBicmVha3BvaW50cyBvbiBDU1MgcmVzb3VyY2VzCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IpOiBEb24ndCBhZGQgZXZlbnQgbGlzdGVuZXJzIHVubGVzcyBfc3VwcG9ydHNEZWJ1Z2dpbmcgaXMgdHJ1ZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5jbG9zZSk6IFJlbW92ZSBldmVudCBsaXN0ZW5lcnMgaW5zaWRlIGlmIF9zdXBwb3J0c0RlYnVnZ2luZyBibG9jay4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fY29udGVudFdpbGxQb3B1bGF0ZSk6IERvbid0IGFkZCBicmVha3BvaW50cyB1bmxlc3MgX3N1cHBvcnRzRGVidWdnaW5nLgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl91cGRhdGVCcmVha3BvaW50U3RhdHVzKTogQXNzZXJ0IF9zdXBwb3J0c0RlYnVnZ2luZy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fYnJlYWtwb2ludFJlbW92ZWQpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fYWN0aXZlQ2FsbEZyYW1lRGlkQ2hhbmdlKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX21hdGNoZXNCcmVha3BvaW50KTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuZ2V0IF9zdXBwb3J0c0RlYnVnZ2luZyk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLnRleHRFZGl0b3JCcmVha3BvaW50SW5mbyk6IFJldHVybiBlYXJseSBpZiAhX3N1cHBvcnRzRGVidWdnaW5nLgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLnRleHRFZGl0b3JCcmVha3BvaW50QWRkZWQpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS50ZXh0RWRpdG9yQnJlYWtwb2ludFJlbW92ZWQpOiBBc3NlcnQgYW5kIHJldHVybiBlYXJseSBpZiAhX3N1cHBvcnRzRGVidWdnaW5nLgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLnRleHRFZGl0b3JCcmVha3BvaW50TW92ZWQpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS50ZXh0RWRpdG9yQnJlYWtwb2ludFRvZ2dsZWQpOiBEaXR0by4KCjIwMTItMDMtMjAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgYW5kIHJlbW92ZSB0aGUgd2luZG93LWluYWN0aXZlIHN0eWxlIGNsYXNzIHNvIGNvbnRyb2xzLCByb3cgc2VsZWN0aW9ucywgYW5kIGJhY2tncm91bmRzIHVzZSB0aGVpciBpbmFjdGl2ZSBjb2xvcnMuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTA2NDM2ND4gSW5zcGVjdG9yIGNvbnRyb2xzIChiYXJzIGFuZCBidXR0b25zKSBoYXZlIGFjdGl2ZSBhcHBlYXJhbmNlIGluIGluYWN0aXZlIHdpbmRvd3MKCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnV0dG9uTmF2aWdhdGlvbkl0ZW0uY3NzOgogICAgICAgIChib2R5LndpbmRvdy1pbmFjdGl2ZSAubmF2aWdhdGlvbi1iYXIgPiAuaXRlbS5idXR0b246bm90KC5zdXBwcmVzcy1lbWJvc3MpID4gLmdseXBoKToKICAgICAgICAoLm5hdmlnYXRpb24tYmFyID4gLml0ZW0uYnV0dG9uLmRpc2FibGVkID4gLmdseXBoKToKICAgICAgICAoYm9keS53aW5kb3ctaW5hY3RpdmUgLm5hdmlnYXRpb24tYmFyID4gLml0ZW0uYnV0dG9uLmRpc2FibGVkOm5vdCguc3VwcHJlc3MtZW1ib3NzKSA+IC5nbHlwaCk6CiAgICAgICAgKC5uYXZpZ2F0aW9uLWJhciA+IC5pdGVtLmJ1dHRvbi5zdXBwcmVzcy1lbWJvc3MgPiAuZ2x5cGgpOgogICAgICAgICgubmF2aWdhdGlvbi1iYXIgPiAuaXRlbS5idXR0b24uc3VwcHJlc3MtZW1ib3NzOmFjdGl2ZSA+IC5nbHlwaCk6CiAgICAgICAgKC5uYXZpZ2F0aW9uLWJhciA+IC5pdGVtLmJ1dHRvbi5zdXBwcmVzcy1lbWJvc3MuZGlzYWJsZWQgPiAuZ2x5cGgpOiBNb3ZlZCBmcm9tIFF1aWNrQ29uc29sZS5jc3MuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFHcmlkLmNzczoKICAgICAgICAoYm9keS53aW5kb3ctaW5hY3RpdmUgLmRhdGEtZ3JpZCB0aC5zb3J0LWRlc2NlbmRpbmcpOiBGaXhlZCB0aGUgc2VsZWN0b3IgdG8gdXNlIHdpbmRvdy1pbmFjdGl2ZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOiBBZGRlZCB3aW5kb3cgZXZlbnQgbGlzdGVuZXJzIGZvciBibHVyIGFuZCBmb2N1cy4KICAgICAgICAoV2ViSW5zcGVjdG9yLnVwZGF0ZURvY2tlZFN0YXRlKTogUmVtb3ZlIHRoZSB3aW5kb3ctaW5hY3RpdmUgY2xhc3Mgd2hlbiBkb2NraW5nLCBqdXN0IGluIGNhc2UuCiAgICAgICAgKFdlYkluc3BlY3Rvci5fd2luZG93Rm9jdXNlZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuX3dpbmRvd0JsdXJyZWQpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlLmNzczogTW92ZWQgdGhlIGRpc2FibGVkIGJ1dHRvbiBzdHlsZSB0byBCdXR0b25OYXZpZ2F0aW9uSXRlbS5jc3MuCgoyMDEyLTAzLTE5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgU3VwcG9ydCBzaG93aW5nIGFuZCB3b3JraW5nIHdpdGggU2NyaXB0IGJyZWFrcG9pbnRzIGZyb20gdGhlIEJyZWFrcG9pbnQgc2lkZWJhci4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzExMDc1NTY1PiBSRUdSRVNTSU9OIChOZXcgV2ViIEluc3BlY3Rvcik6IEluamVjdGVkIGV4dGVuc2lvbiBjb250ZW50IHNjcmlwdHMgYXJlIG5vdCBzaG93bgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9CcmVha3BvaW50U2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludFNpZGViYXJQYW5lbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50U2lkZWJhclBhbmVsLnByb3RvdHlwZS5fYWRkQnJlYWtwb2ludCk6IFJlZmFjdG9yIGNvZGUgdG8gd29yayBpbiB0ZXJtcyBvbiBib3RoIFJlc291cmNlIGFuZCBTY3JpcHQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50U2lkZWJhclBhbmVsLnByb3RvdHlwZS5fYWRkQnJlYWtwb2ludHNGb3JTb3VyY2VDb2RlKTogUmVuYW1lZCBmcm9tIF9hZGRCcmVha3BvaW50c0ZvclJlc291cmNlLgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludFNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3Jlc291cmNlQWRkZWQpOiBVc2UgX2FkZEJyZWFrcG9pbnRzRm9yU291cmNlQ29kZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9tYWluUmVzb3VyY2VDaGFuZ2VkKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50U2lkZWJhclBhbmVsLnByb3RvdHlwZS5fc2NyaXB0QWRkZWQpOiBBZGRlZC4gQ2FsbCBfYWRkQnJlYWtwb2ludHNGb3JTb3VyY2VDb2RlIGlmIHRoaXMgc2NyaXB0IGlzbid0CiAgICAgICAgYmFja2VkIGJ5IGEgUmVzb3VyY2UuCiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50U2lkZWJhclBhbmVsLnByb3RvdHlwZS5fc2NyaXB0c0NsZWFyZWQpOiBBZGRlZC4gUmVtb3ZlIGFsbCBTY3JpcHRUcmVlRWxlbWVudHMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50U2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdHJlZUVsZW1lbnRTZWxlY3RlZCk6IFJlZmFjdG9yZWQgdG8gd29yayB3aXRoIGVpdGhlciBSZXNvdXJjZSBvciBTY3JpcHQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RlYnVnZ2VyTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUuc2NyaXB0Rm9ySWRlbnRpZmllcik6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5zY3JpcHRzRm9yVVJMKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLl9zZXRCcmVha3BvaW50KTogU2V0IHRoZSBicmVha3BvaW50IGNvcnJlY3RseSBmb3IgU2NyaXB0J3Mgd2l0aG91dCBVUkxzLgoKMjAxMi0wMy0xOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFNob3cgU2NyaXB0cyBpbiB0aGUgUmVzb3VyY2Ugc2lkZWJhciBhdCB0aGUgdG9wIGxldmVsLgoKICAgICAgICBUaGVzZSBzY3JpcHRzIGFyZSBncm91cGVkIGludG8gMyBmb2xkZXJzOiBFeHRlbnNpb24gU2NyaXB0cywgRXh0cmEgU2NyaXB0cyBhbmQgQW5vbnltb3VzIFNjcmlwdHMuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTA3NTU2NT4gUkVHUkVTU0lPTiAoTmV3IFdlYiBJbnNwZWN0b3IpOiBJbmplY3RlZCBleHRlbnNpb24gY29udGVudCBzY3JpcHRzIGFyZSBub3Qgc2hvd24KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczogVXBkYXRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGVidWdnZXJNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXNldCk6IEZpcmUgU2NyaXB0c0NsZWFyZWQgZXZlbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLnNjcmlwdERpZFBhcnNlKTogRmlyZSBTY3JpcHRBZGRlZCBldmVudC4gUGFzcyBpc0NvbnRlbnRTY3JpcHQKICAgICAgICB0byB0aGUgU2NyaXB0IGNvbnN0cnVjdG9yLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvQ2xpcHBpbmdKUy5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvQ2xpcHBpbmdKU0AyeC5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEluY2x1ZGVkIFNjcmlwdFRyZWVFbGVtZW50LmpzLgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZUljb25zLmNzczoKICAgICAgICAoLmFub255bW91cy1zY3JpcHQtaWNvbiAuaWNvbik6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsKTogQWRkZWQgZXZlbnQgbGlzdGVuZXJzIGZvciBTY3JpcHRBZGRlZCBhbmQgU2NyaXB0c0NsZWFyZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUudHJlZUVsZW1lbnRGb3JSZXByZXNlbnRlZE9iamVjdCk6IENyZWF0ZSBhIHRyZWUgZWxlbWVudCBmb3IKICAgICAgICB0aGUgYW5vbnltb3VzIHNjcmlwdC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fc2NyaXB0V2FzQWRkZWQpOiBDcmVhdGUgYSB0cmVlIGVsZW1lbnQgZm9yIHNjcmlwdHMgd2l0aCBVUkxzLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9zY3JpcHRzQ2xlYXJlZCk6IFJlbW92ZSB0aGUgc2NyaXB0IGZvbGRlcnMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3RyZWVFbGVtZW50U2VsZWN0ZWQpOiBTdXBwb3J0IFNjcmlwdFRyZWVFbGVtZW50LgogICAgICAgICogVXNlckludGVyZmFjZS9TY3JpcHQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHQpOiBBZGRlZCBpbmplY3RlZCBwYXJhbWV0ZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHQucHJvdG90eXBlLmdldCBpbmplY3RlZCk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9TY3JpcHRUcmVlRWxlbWVudC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRUcmVlRWxlbWVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRUcmVlRWxlbWVudC5wcm90b3R5cGUuZ2V0IHNjcmlwdCk6CgoyMDEyLTAzLTE5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIFdlYkluc3BlY3Rvci5TY3JpcHRDb250ZW50VmlldyBmb3Igc2hvd2luZyBjb250ZW50IG9mIFNjcmlwdCBvYmplY3RzLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTEwNDc5ODI+IFJFR1JFU1NJT04gKE5ldyBXZWIgSW5zcGVjdG9yKTogUGFnZSBzb3VyY2UgZG9lcyBub3Qgc2hvdyB3aGVuIGEKICAgICAgICBicmVha3BvaW50IGlzIGhpdCB3aGlsZSBsb2FkaW5nIHRoZSBwYWdlCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXcpOiBBZGRlZCBjYXNlIGZvciBTY3JpcHQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlldy5pc1ZpZXdhYmxlKTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RlYnVnU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdTaWRlYmFyUGFuZWwucHJvdG90eXBlLl90cmVlRWxlbWVudFNlbGVjdGVkKTogU2ltcGxpZnkgYW5kIHVzZSBSZXNvdXJjZVNpZGViYXJQYW5lbC5zaG93U291cmNlQ29kZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3Iuc2lkZWJhclBhbmVsRm9yUmVwcmVzZW50ZWRPYmplY3QpOgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5jb29raWVGb3JDb250ZW50Vmlldyk6IFVwZGF0ZSBhc3NlcnQgZm9yIFNjcmlwdENvbnRlbnRWaWV3LgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLnNob3dDb250ZW50Vmlld0ZvckNvb2tpZSk6IE1vdmUgYSB2YXJpYWJsZSBkb3duIGJlbG93IGFuIGVhcmx5IHJldHVybi4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5zaG93U291cmNlQ29kZSk6IFVwZGF0ZWQgdG8gd29yayB3aXRoIFNjcmlwdHMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX21haW5GcmFtZURpZENoYW5nZSk6IENsb3NlIGFsbCBTY3JpcHRDb250ZW50Vmlld3MuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NjcmlwdENvbnRlbnRWaWV3LmNzczogQWRkZWQuCiAgICAgICAgKC5jb250ZW50LXZpZXcuc2NyaXB0ID4gLnRleHQtZWRpdG9yKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2NyaXB0Q29udGVudFZpZXcuanM6IEFkZGVkLiBDb3BpZWQgbW9zdGx5IGZyb20gVGV4dFJlc291cmNlQ29udGVudFZpZXcuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRDb250ZW50Vmlldyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRDb250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IHNjcmlwdCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRDb250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IHRleHRFZGl0b3IpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0Q29udGVudFZpZXcucHJvdG90eXBlLmdldCBzdXBwbGVtZW50YWxSZXByZXNlbnRlZE9iamVjdHMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0Q29udGVudFZpZXcucHJvdG90eXBlLnJldmVhbExpbmUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0Q29udGVudFZpZXcucHJvdG90eXBlLnNob3duKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdENvbnRlbnRWaWV3LnByb3RvdHlwZS5oaWRkZW4pOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0Q29udGVudFZpZXcucHJvdG90eXBlLmNsb3NlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRDb250ZW50Vmlldy5wcm90b3R5cGUuX2NvbnRlbnRXaWxsUG9wdWxhdGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0Q29udGVudFZpZXcucHJvdG90eXBlLl9leGVjdXRpb25MaW5lTnVtYmVyRGlkQ2hhbmdlKToKCjIwMTItMDMtMTggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBIaWRlIGxpbmUgbnVtYmVycyBmb3IgYmxhbmsgbGluZXMgd2hlbiBzaG93aW5nIGlubGluZSBzY3JpcHRzIHdoaWxlIHRoZSBkZWJ1Z2dlciBpcyBwYXVzZWQuCgogICAgICAgIFdoZW4gcGF1c2VkIGluIHRoZSBkZWJ1Z2dlciB3ZSBzb21ldGltZXMgY2FuIG9ubHkgc2hvdyB0aGUgc2NyaXB0cyBmb3IgdGhlIEhUTUwgZmlsZS4gV2hlbgogICAgICAgIHRoaXMgaGFwcGVucyB0aGUgc2NyaXB0cyBhcmUgdGhlIG9ubHkgdGhpbmcgdmlzaWJsZSAoaW4gdGhlaXIgZmluYWwgcG9zaXRpb24pIHdpdGggYmxhbmsKICAgICAgICBsaW5lcyBmb3IgdGhlIGVhcmxpZXIgSFRNTCBjb250ZW50LiBUaGlzIGhpZGVzIHRoZSBsaW5lIG51bWJlcnMgZm9yIHRob3NlIGJsYW5rIGxpbmVzCiAgICAgICAgdG8gcHJvdmlkZSBhIGNsdWUgdG8gdGhlIHVzZXIgdGhhdCB0aGV5IHNob3VsZG4ndCBleHBlY3QgY29udGVudCB0aGVyZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlQ29kZVRleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvcik6IFN0YXJ0IHdpdGggdGhlIGZpcnN0IGxpbmUgYXMgaW52YWxpZCwgYmVmb3JlIGEgcG9wdWxhdGUgdGhlcmUKICAgICAgICBpcyBhbHdheXMgYSBibGFuayBmaXJzdCBsaW5lLgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9jb250ZW50QXZhaWxhYmxlKTogQ2xlYXIgdGhlIGludmFsaWQgbGluZSBudW1iZXJzLgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9wb3B1bGF0ZVdpdGhJbmxpbmVTY3JpcHRDb250ZW50LnNjcmlwdENvbnRlbnRBdmFpbGFibGUpOgogICAgICAgIEFkZCBibGFuayBsaW5lcyB0byB0aGUgaW52YWxpZCBsaW5lIG51bWJlcnMgbWFwLgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLnRleHRFZGl0b3JTaG91bGRIaWRlTGluZU51bWJlcik6IEFkZGVkLiBDaGVjayB0aGUgaW52YWxpZAogICAgICAgIGxpbmUgbnVtYmVycyBtYXAuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS51cGRhdGVMYXlvdXQpOiBBZGRlZCBmb3JjZSBwYXJhbWV0ZXIgYW5kIHBhc3MgaXQgdG8gX3VwZGF0ZUxpbmVOdW1iZXJzLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3Jlc2V0KTogUGFzcyB0cnVlIHRvIHVwZGF0ZUxheW91dC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl91cGRhdGVMaW5lTnVtYmVycyk6IEFkZGVkIGZvcmNlIHBhcmFtZXRlci4gQWx3YXlzIHJlYnVpbGQgdGhlIGxpbmUgbnVtYmVycwogICAgICAgIHdoZW4gdGhpcyBpcyB0cnVlLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX2xpbmVOdW1iZXJUZXh0Q29udGVudCk6IEFkZGVkLiBIZWxwZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fYWRkQnJlYWtwb2ludEVsZW1lbnRUb0xpbmVFbGVtZW50V2l0aEluZm8pOiBVc2UgX2xpbmVOdW1iZXJUZXh0Q29udGVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9yZW1vdmVQb3NzaWJsZUJyZWFrcG9pbnRFbGVtZW50RnJvbUxpbmVFbGVtZW50KTogRGl0dG8uCgoyMDEyLTAzLTE4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUmVtb3ZlIGR1cGxpY2F0ZSBjb3BpZXMgb2YgX2NoZWNrRm9yT2xkUmVzb3VyY2VzIGFuZCBwdXQgaXQgaW4gdGhlIE5hdmlnYXRpb25TaWRlYmFyUGFuZWwgYmFzZSBjbGFzcy4KCiAgICAgICAgTm93IHRoYXQgdGhlIGluZGl2aWR1YWwgX2NoZWNrRm9yT2xkUmVzb3VyY2VzIGZ1bmN0aW9ucyBkb24ndCBhY2Nlc3MgZGlmZmVyZW50IFVSTCBtYXBzLCB0aGlzIGNvZGUKICAgICAgICBjYW4gbm93IGJlIHNoYXJlZCBkb3duIGluIE5hdmlnYXRpb25TaWRlYmFyUGFuZWwuCgogICAgICAgIFJldmlld2VkIGJ5IEpvaG4gU3VsbGl2YW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9CcmVha3BvaW50U2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludFNpZGViYXJQYW5lbCk6IFJlbW92ZWQgZXZlbnQgbGlzdGVuZXJzIGZvciBfY2hlY2tGb3JPbGRSZXNvdXJjZXMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50U2lkZWJhclBhbmVsLnByb3RvdHlwZS5fbWFpblJlc291cmNlQ2hhbmdlZCk6IFJlbW92ZSBjYWxsIHRvIF9jaGVja0Zvck9sZFJlc291cmNlcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9jaGVja0Zvck9sZFJlc291cmNlcyk6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0lzc3VlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSXNzdWVTaWRlYmFyUGFuZWwpOiBSZW1vdmVkIGV2ZW50IGxpc3RlbmVycyBmb3IgX2NoZWNrRm9yT2xkUmVzb3VyY2VzLgogICAgICAgIChXZWJJbnNwZWN0b3IuSXNzdWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9jaGVja0Zvck9sZFJlc291cmNlcyk6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05hdmlnYXRpb25TaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uU2lkZWJhclBhbmVsKTogQWRkZWQgZXZlbnQgbGlzdGVuZXJzIGZvciBfY2hlY2tGb3JPbGRSZXNvdXJjZXMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fY2hlY2tGb3JPbGRSZXNvdXJjZXMpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25TaWRlYmFyUGFuZWwucHJvdG90eXBlLl9jaGVja0Zvck9sZFJlc291cmNlcy5kZWxheWVkV29yayk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9TZWFyY2hTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hTaWRlYmFyUGFuZWwpOiBSZW1vdmVkIGV2ZW50IGxpc3RlbmVycyBmb3IgX2NoZWNrRm9yT2xkUmVzb3VyY2VzLgogICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fY2hlY2tGb3JPbGRSZXNvdXJjZXMpOiBSZW1vdmVkLgoKMjAxMi0wMy0xOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFNpbXBsaWZ5IElzc3VlU2lkZWJhclBhbmVsIGFuZCBTZWFyY2hTaWRlYmFyUGFuZWwgYnkgdXNpbmcgVHJlZU91dGxpbmUuZ2V0Q2FjaGVkVHJlZUVsZW1lbnQgdG8KICAgICAgICBmaW5kIGV4aXN0aW5nIFJlc291cmNlVHJlZUVsZW1lbnRzLgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9Jc3N1ZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLklzc3VlU2lkZWJhclBhbmVsKTogUmVtb3ZlZCBfaXNzdWVSb290RWxlbWVudHMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Jc3N1ZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2lzc3VlV2FzQWRkZWQpOiBVc2UgZ2V0Q2FjaGVkVHJlZUVsZW1lbnQgdG8gZmluZAogICAgICAgIHRoZSBleGlzdGluZyBSZXNvdXJjZVRyZWVFbGVtZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuSXNzdWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9pc3N1ZXNDbGVhcmVkKTogUmVtb3ZlZCBfaXNzdWVSb290RWxlbWVudHMgcmVmZXJlbmNlLgogICAgICAgIChXZWJJbnNwZWN0b3IuSXNzdWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9jaGVja0Zvck9sZFJlc291cmNlcy5kZWxheWVkV29yayk6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9TZWFyY2hTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hTaWRlYmFyUGFuZWwpOiBSZW1vdmVkIF9yZXNvdXJjZVNlYXJjaFJlc3VsdE1hcC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3RyZWVFbGVtZW50Rm9yUmVzb3VyY2UpOiBSZW1vdmVkIF9yZXNvdXJjZVNlYXJjaFJlc3VsdE1hcAogICAgICAgIHJlZmVyZW5jZS4gVXNlIGdldENhY2hlZFRyZWVFbGVtZW50IHRvIGZpbmQgdGhlIGV4aXN0aW5nIFJlc291cmNlVHJlZUVsZW1lbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9jaGVja0Zvck9sZFJlc291cmNlcy5kZWxheWVkV29yayk6CiAgICAgICAgUmVtb3ZlZCBfcmVzb3VyY2VTZWFyY2hSZXN1bHRNYXAgcmVmZXJlbmNlLgoKMjAxMi0wMy0xOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFNpbXBsaWZ5IEJyZWFrcG9pbnRTaWRlYmFyUGFuZWwgYnkgdXNpbmcgVHJlZU91dGxpbmUuZ2V0Q2FjaGVkVHJlZUVsZW1lbnQgdG8gZmluZCBleGlzdGluZwogICAgICAgIHRoZSBCcmVha3BvaW50VHJlZUVsZW1lbnRzIGFuZCBSZXNvdXJjZVRyZWVFbGVtZW50cy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnJlYWtwb2ludFNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRTaWRlYmFyUGFuZWwpOiBSZW1vdmVkIF9yZXNvdXJjZVRyZWVFbGVtZW50VVJMTWFwLgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludFNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2FkZEJyZWFrcG9pbnQpOiBVc2UgZ2V0Q2FjaGVkVHJlZUVsZW1lbnQgdG8KICAgICAgICBmaW5kIHRoZSBleGlzdGluZyBSZXNvdXJjZVRyZWVFbGVtZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludFNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2JyZWFrcG9pbnRSZW1vdmVkKTogVXNlIGdldENhY2hlZFRyZWVFbGVtZW50IHRvCiAgICAgICAgZmluZCB0aGUgQnJlYWtwb2ludFRyZWVFbGVtZW50IHRvIHJlbW92ZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9jaGVja0Zvck9sZFJlc291cmNlcy5kZWxheWVkV29yayk6IFJlbW92ZWQKICAgICAgICBfcmVzb3VyY2VUcmVlRWxlbWVudFVSTE1hcCByZWZlcmVuY2UuCgoyMDEyLTAzLTE4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IHNvbWUgZXhjZXB0aW9ucyBJIGhpdCB3aGlsZSBhZGRpbmcgU2NyaXB0Q29udGVudFZpZXcuCgogICAgICAgIEFkZCBzb21lIG51bGwgY2hlY2tzIGF0IHRoZSBjYWxsZXJzIG9mIHNpZGViYXJQYW5lbEZvclJlcHJlc2VudGVkT2JqZWN0LCBzaW5jZSBzaWRlYmFyUGFuZWxGb3JSZXByZXNlbnRlZE9iamVjdAogICAgICAgIGNhbiByZXR1cm4gbnVsbCB3aGVuIHRoZSByZXByZXNlbnRlZE9iamVjdCBpcyB1bmtub3duLiBUaGUgc2lkZWJhclBhbmVsRm9yUmVwcmVzZW50ZWRPYmplY3QgZnVuY3Rpb24gbG9ncyBhbgogICAgICAgIGVycm9yIHRvIHRoZSBjb25zb2xlIHdoZW4gaXQgcmV0dXJucyBudWxsLiBTbyB0aGUgZXhjZXB0aW9ucyB3ZXJlIGp1c3QgbW9yZSBub2lzZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9obiBTdWxsaXZhbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50QnJvd3NlclRyZWVFbGVtZW50Rm9yUmVwcmVzZW50ZWRPYmplY3QpOiBOdWxsIGNoZWNrIHRoZSByZXN1bHQgb2Ygc2lkZWJhclBhbmVsRm9yUmVwcmVzZW50ZWRPYmplY3QuCiAgICAgICAgKFdlYkluc3BlY3Rvci5fdXBkYXRlQ3VycmVudENvbnRlbnRWaWV3Q29va2llKTogRGl0dG8uCgoyMDEyLTAzLTE4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IGFuIGlzc3VlIHdoZXJlIHRoZSBleGVjdXRpb24gbGluZSB3YXMgbm90IGhpZ2hsaWdodGVkIGZvciBzaW5nbGUgbGluZSBzY3JpcHRzLgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3Jlc2V0KTogQWRkIEV4ZWN1dGlvbkxpbmVTdHlsZUNsYXNzTmFtZSB0byB0aGUgdGV4dCBjaHVuayBlbGVtZW50CiAgICAgICAgaWYgdGhlIGNodW5rIGlzIG9uZSBsaW5lIGFuZCBpdCBpcyB0aGUgZXhlY3V0aW9uIGxpbmUuCgoyMDEyLTAzLTE4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUmVuYW1lIFJlc291cmNlU2lkZWJhclBhbmVsLnNob3dSZXNvdXJjZVNvdXJjZUNvZGUgdG8gUmVzb3VyY2VTaWRlYmFyUGFuZWwuc2hvd1NvdXJjZUNvZGUuCgogICAgICAgIFRoaXMgaXMgcHJlcCBmb3IgbWFraW5nIFJlc291cmNlU2lkZWJhclBhbmVsIGJlIHJlc3BvbnNpYmxlIGZvciBzaG93aW5nIFNjcmlwdHMuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMTA0Nzk4Mj4gUkVHUkVTU0lPTiAoTmV3IFdlYiBJbnNwZWN0b3IpOiBQYWdlIHNvdXJjZSBkb2VzIG5vdCBzaG93IHdoZW4gYQogICAgICAgIGJyZWFrcG9pbnQgaXMgaGl0IHdoaWxlIGxvYWRpbmcgdGhlIHBhZ2UKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnJlYWtwb2ludFNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRTaWRlYmFyUGFuZWwucHJvdG90eXBlLl90cmVlRWxlbWVudFNlbGVjdGVkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGVidWdTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0lzc3VlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSXNzdWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLl90cmVlRWxlbWVudFNlbGVjdGVkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLm9wZW5VUkwpOgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5zaG93U291cmNlQ29kZSk6IFJlbmFtZWQgZnJvbSBzaG93UmVzb3VyY2VTb3VyY2VDb2RlLiBDaGFuZ2VkCiAgICAgICAgdG8gbm90IGFzc3VtZSB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgUmVzb3VyY2UuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlVGltZWxpbmVEYXRhR3JpZE5vZGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRpbWVsaW5lRGF0YUdyaWROb2RlLnByb3RvdHlwZS5fZ29Ub1Jlc291cmNlKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2NyaXB0VGltZWxpbmVEYXRhR3JpZE5vZGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRUaW1lbGluZURhdGFHcmlkTm9kZS5wcm90b3R5cGUuX2dvVG9SZXNvdXJjZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NlYXJjaFNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3RyZWVFbGVtZW50U2VsZWN0ZWQpOgoKMjAxMi0wMy0xOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFByZXZlbnQgZG91YmxlIGRpdmlkZXJzIGluIHRoZSBuYXZpZ2F0aW9uIGJhciB3aGVuIHZpZXdpbmcgYSBub24tZnJhbWUgY29udGVudCB2aWV3LgoKICAgICAgICBUaGUgbm9kZSBzZWFyY2ggbmF2aWdhdGlvbiBpdGVtIGlzIGhpZGRlbiB3aGVuIG5vdCBvbiBhIGZyYW1lIGNvbnRlbnQgdmlldywgYnV0IHRoYXQgY2F1c2VzCiAgICAgICAgdGhlIGFkamFjZW50IGRpdmlkZXJzIHRvIGNvbWUgdG9nZXRoZXIuIFdlIG5lZWQgdG8gaGlkZSBvbmUgZGl2aWRlciBpbiB0aGlzIGNhc2UuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKTogUmVtZW1iZXIgdGhlIGRpdmlkZXIgdG8gdGhlIGxlZnQgb2YgdGhlIG5vZGUgc2VhcmNoIGl0ZW0uCiAgICAgICAgKFdlYkluc3BlY3Rvci5fY3VycmVudENvbnRlbnRWaWV3RGlkQ2hhbmdlKTogSGlkZSB0aGUgZGl2aWRlciB0b28uCgoyMDEyLTAzLTE4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgU2hvdyBzY3JpcHQgY29udGVudCB3aGVuIHRoZSBkZWJ1Z2dlciBwYXVzZXMgb24gYSByZXNvdXJjZSB0aGF0IGhhc24ndCBwb3B1bGF0ZWQgaXRzIGZ1bGwgY29udGVudCB5ZXQuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMTA0Nzk4Mj4gUkVHUkVTU0lPTiAoTmV3IFdlYiBJbnNwZWN0b3IpOiBQYWdlIHNvdXJjZSBkb2VzIG5vdCBzaG93IHdoZW4gYQogICAgICAgIGJyZWFrcG9pbnQgaXMgaGl0IHdoaWxlIGxvYWRpbmcgdGhlIHBhZ2UKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGVidWdnZXJNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUuc2NyaXB0c0ZvclJlc291cmNlKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLnJlc2V0KTogQ2xlYXIgX3NjcmlwdFVSTE1hcC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUuc2NyaXB0RGlkUGFyc2UpOiBEb24ndCBhZGQgdGhlIHNjcmlwdCBhZ2FpbiBpZiBpdCBpcyBhbHJlYWR5IGtub3duLgogICAgICAgIEFkZCBzY3JpcHRzIHdpdGggVVJMcyB0byBfc2NyaXB0VVJMTWFwLgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yKTogQ2FsbCBfYWN0aXZlQ2FsbEZyYW1lRGlkQ2hhbmdlIHRvIHVwZGF0ZSB0aGUgZXhlY3V0aW9uIGxpbmUgYW5kIHJlcXVlc3QKICAgICAgICBzY3JpcHQgY29udGVudCBpZiBuZWVkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUucmV2ZWFsTGluZSk6IFN0b3JlIHRoZSBsaW5lIG51bWJlciBpZiB3ZSBkb24ndCBoYXZlIHRoZSBsaW5lIG5lZWRlZAogICAgICAgIHRvIHNob3cgeWV0LiBEZWxldGUgdGhlIHN0b3JlZCB2YWx1ZXMgaWYgd2UgY2FsbCB0aHJvdWdoIHRvIFRleHRFZGl0b3IuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3JldmVhbFBlbmRpbmdMaW5lSWZQb3NzaWJsZSk6IERvbid0IGRlbGV0ZSB0aGUgc3RvcmVkIHZhbHVlcyBoZXJlLgogICAgICAgIFJldHVybiBlYXJseSBpZiB3ZSBkb24ndCBoYXZlIHRoZSBsaW5lIG5lZWRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fY29udGVudFdpbGxQb3B1bGF0ZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9jb250ZW50RGlkUG9wdWxhdGUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fcG9wdWxhdGVXaXRoQ29udGVudCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9jb250ZW50QXZhaWxhYmxlKTogU2V0IF9mdWxsQ29udGVudFBvcHVsYXRlZCBhbmQgY2FsbCBfcG9wdWxhdGVXaXRoQ29udGVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fYWN0aXZlQ2FsbEZyYW1lRGlkQ2hhbmdlKTogQ2FsbCBfcG9wdWxhdGVXaXRoSW5saW5lU2NyaXB0Q29udGVudCBvcgogICAgICAgIF9wb3B1bGF0ZVdpdGhTY3JpcHRDb250ZW50IGZvciBSZXNvdXJjZSBzb3VyY2UgY29kZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fcG9wdWxhdGVXaXRoSW5saW5lU2NyaXB0Q29udGVudCk6IEFkZGVkLiBSZXF1ZXN0IHRoZSBjb250ZW50IGZvciBhbGwKICAgICAgICB0aGUgc2NyaXB0cyBmb3IgdGhpcyBVUkwuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3BvcHVsYXRlV2l0aElubGluZVNjcmlwdENvbnRlbnQuc2NyaXB0Q29udGVudEF2YWlsYWJsZSk6IENvbmNhdCB0aGUgc2NyaXB0cwogICAgICAgIHRvZ2V0aGVyLCBhZGRpbmcgdGhlIHNjcmlwdCB0YWdzLgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9wb3B1bGF0ZVdpdGhTY3JpcHRDb250ZW50KTogQWRkZWQuIFJlcXVlc3QgdGhlIHNpbmdsZSBzY3JpcHQgY29udGVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fcG9wdWxhdGVXaXRoU2NyaXB0Q29udGVudC5zY3JpcHRDb250ZW50QXZhaWxhYmxlKTogU2V0IF9mdWxsQ29udGVudFBvcHVsYXRlZAogICAgICAgIGFuZCBjYWxsIF9wb3B1bGF0ZVdpdGhDb250ZW50LgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3KTogTGlzdGVuIGZvciB0aGUgQ29udGVudFdpbGxQb3B1bGF0ZSBldmVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fY29udGVudFdpbGxQb3B1bGF0ZSk6IFJlbmFtZWQgZnJvbSBjb250ZW50QXZhaWxhYmxlLiBEbyBub3RoaW5nIGlmIHRoZSB0ZXh0CiAgICAgICAgZWRpdG9yIGlzIGFscmVhZHkgYWRkZWQuCgoyMDEyLTAzLTE2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRmFjdG9yIG1vc3Qgb2YgVGV4dFJlc291cmNlQ29udGVudFZpZXcgb3V0IGludG8gU291cmNlQ29kZVRleHRFZGl0b3IsIGEgbmV3IFRleHRFZGl0b3Igc3ViY2xhc3MuCgogICAgICAgIFRoaXMgaXMgcHJlcCB3b3JrIGZvciBtYWtpbmcgYSBTY3JpcHRDb250ZW50VmlldyB0byBzaG93IFNjcmlwdHMgYmVmb3JlIHRoZSByZXNvdXJjZSBsb2Fkcy4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzExMDQ3OTgyPiBSRUdSRVNTSU9OIChOZXcgV2ViIEluc3BlY3Rvcik6IFBhZ2Ugc291cmNlIGRvZXMgbm90CiAgICAgICAgc2hvdyB3aGVuIGEgYnJlYWtwb2ludCBpcyBoaXQgd2hpbGUgbG9hZGluZyB0aGUgcGFnZQoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9Jc3N1ZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Jc3N1ZU1hbmFnZXIucHJvdG90eXBlLmlzc3Vlc0ZvclNvdXJjZUNvZGUpOiBSZW5hbWVkIGZyb20gaXNzdWVzRm9yUmVzb3VyY2UuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZWQgU291cmNlQ29kZVRleHRFZGl0b3IuanMgYW5kIFNvdXJjZUNvZGVUZXh0RWRpdG9yLmNzcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlQ29udGVudFZpZXcpOiBVc2UgaXNzdWVzRm9yU291cmNlQ29kZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlQ29kZVRleHRFZGl0b3IuY3NzOiBDb3BpZWQgZnJvbSBUZXh0UmVzb3VyY2VDb250ZW50Vmlldy5jc3MuCiAgICAgICAgKC5zb3VyY2UtY29kZS50ZXh0LWVkaXRvciAudGV4dC1lZGl0b3ItdGV4dC1jaHVuay5lcnJvcik6CiAgICAgICAgKC5zb3VyY2UtY29kZS50ZXh0LWVkaXRvciAudGV4dC1lZGl0b3ItdGV4dC1jaHVuay53YXJuaW5nKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlQ29kZVRleHRFZGl0b3IuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLmdldCBzb3VyY2VDb2RlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5yZXZlYWxMaW5lKTogQ29waWVkIGZyb20gVGV4dFJlc291cmNlQ29udGVudFZpZXcuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuc2hvd24pOiBDYWxsIF9yZXZlYWxQZW5kaW5nTGluZUlmUG9zc2libGUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuY2xvc2UpOiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzLgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9yZXZlYWxQZW5kaW5nTGluZUlmUG9zc2libGUpOiBIZWxwZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX2NvbnRlbnRBdmFpbGFibGUpOiBDb3BpZWQgZnJvbSBUZXh0UmVzb3VyY2VDb250ZW50Vmlldy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fdXBkYXRlQnJlYWtwb2ludFN0YXR1cyk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9icmVha3BvaW50UmVtb3ZlZCk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9hY3RpdmVDYWxsRnJhbWVEaWRDaGFuZ2UpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fbWF0Y2hlc1NjcmlwdExvY2F0aW9uKTogSGVscGVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9tYXRjaGVzQnJlYWtwb2ludCk6IEhlbHBlci4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fbWF0Y2hlc0lzc3VlKTogSGVscGVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9pc3N1ZVdhc0FkZGVkKTogQ29waWVkIGZyb20gVGV4dFJlc291cmNlQ29udGVudFZpZXcuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX2FkZElzc3VlVG9MaW5lTnVtYmVyTWFwKTogSGVscGVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9hZGRJc3N1ZVRvTGluZSk6IENvcGllZCBmcm9tIFRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9icmVha3BvaW50SW5mb0ZvckJyZWFrcG9pbnQpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS50ZXh0RWRpdG9yQmFzZVVSTCk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLnRleHRFZGl0b3JMaW5lQ29udGVudFVwZGF0ZWQpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS50ZXh0RWRpdG9yQnJlYWtwb2ludEluZm8pOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS50ZXh0RWRpdG9yQnJlYWtwb2ludEFkZGVkKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUudGV4dEVkaXRvckJyZWFrcG9pbnRSZW1vdmVkKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUudGV4dEVkaXRvckJyZWFrcG9pbnRNb3ZlZCk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLnRleHRFZGl0b3JCcmVha3BvaW50VG9nZ2xlZCk6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvcik6IENhbGwgdGhlIE9iamVjdCBjb25zdHJ1Y3Rvci4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnNldCBleGVjdXRpb25MaW5lTnVtYmVyKTogRmlyZSB0aGUgRXhlY3V0aW9uTGluZU51bWJlckRpZENoYW5nZSBldmVudC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dFJlc291cmNlQ29udGVudFZpZXcuY3NzOgogICAgICAgICgudGV4dC1lZGl0b3IgLnRleHQtZWRpdG9yLXRleHQtY2h1bmsuZXJyb3IpOiBSZW1vdmVkLgogICAgICAgICgudGV4dC1lZGl0b3IgLnRleHQtZWRpdG9yLXRleHQtY2h1bmsud2FybmluZyk6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRSZXNvdXJjZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcpOiBMaXN0ZW4gZm9yIHRoZSBFeGVjdXRpb25MaW5lTnVtYmVyRGlkQ2hhbmdlIGV2ZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLmdldCBzdXBwbGVtZW50YWxSZXByZXNlbnRlZE9iamVjdHMpOiBJZiB0aGUgU291cmNlQ29kZVRleHRFZGl0b3IKICAgICAgICBoYXMgYW4gZXhlY3V0aW9uTGluZU51bWJlciwgd2UgY2FuIGFzc3VtZSBpdCBpcyBhbHdheXMgdGhlIGFjdGl2ZSBjYWxsIGZyYW1lLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLmNvbnRlbnRBdmFpbGFibGUpOiBKdXN0IHJlbW92ZSB0aGUgc3Bpbm5lciBvciBlcnJvciBtZXNzYWdlCiAgICAgICAgYW5kIGFwcGVuZCB0aGUgdGV4dCBlZGl0b3IuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUucmV2ZWFsTGluZSk6IEp1c3QgY2FsbCByZXZlYWxMaW5lIG9uIHRoZSB0ZXh0IGVkaXRvci4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5jbG9zZWQpOiBDYWxsIGNsb3NlIG9uIHRoZSB0ZXh0IGVkaXRvci4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fZXhlY3V0aW9uTGluZU51bWJlckRpZENoYW5nZSk6IEFkZGVkLgoKMjAxMi0wMy0xNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFsbG93IGJyZWFrcG9pbnRzIHRvIGJlIHNldCBmb3IgYSBSZXNvdXJjZSBvciBhIFNjcmlwdC4KCiAgICAgICAgVGhpcyBpcyBwcmVwIGZvciBtYWtpbmcgYSBUZXh0RWRpdG9yIHN1YmNsYXNzIHRoYXQgd29ya3Mgd2l0aCBlaXRoZXIgYSBTY3JpcHQgb3IgYSBSZXNvdXJjZS4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzExMDQ3OTgyPiBSRUdSRVNTSU9OIChOZXcgV2ViIEluc3BlY3Rvcik6IFBhZ2Ugc291cmNlIGRvZXMgbm90CiAgICAgICAgc2hvdyB3aGVuIGEgYnJlYWtwb2ludCBpcyBoaXQgd2hpbGUgbG9hZGluZyB0aGUgcGFnZQoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9CcmVha3BvaW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCk6IE1ha2UgdGhlIGNvbnN0cnVjdG9yIHRha2UgYSBTb3VyY2VDb2RlIG9iamVjdCBpbnN0ZWFkIG9mIGEgVVJMLgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUuZ2V0IHNjcmlwdElkZW50aWZpZXIpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlLmdldCBpbmZvKTogVXBkYXRlZCB0aGUgY29tbWVudC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnJlYWtwb2ludFNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9hZGRCcmVha3BvaW50c0ZvclJlc291cmNlKTogVXNlIGJyZWFrcG9pbnRzRm9yU291cmNlQ29kZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGVidWdnZXJNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUuYnJlYWtwb2ludHNGb3JTb3VyY2VDb2RlKTogUmVuYW1lZCBmcm9tIGJyZWFrcG9pbnRzRm9yVVJMLiBUYWtlcwogICAgICAgIGEgU291cmNlQ29kZSBvYmplY3QgYW5kIGxvb2tzIHVwIGJ5IHVybCBvciBpZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUuYWRkQnJlYWtwb2ludCk6IERvbid0IGFzc3VtZSB0aGVyZSBpcyBhIHVybC4gQWRkcyB0aGUgYnJlYWtwb2ludAogICAgICAgIHRvIHRoZSBVUkwgbWFwIGFuZC9vciB0aGUgc2NyaXB0IGlkZW50aWZpZXIgbWFwLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5yZW1vdmVCcmVha3BvaW50KTogRGl0dG8gZm9yIHJlbW92YWwuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLl9zYXZlQnJlYWtwb2ludHMpOiBTa2lwcyBicmVha3BvaW50cyB3aXRob3V0IFVSTHMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRSZXNvdXJjZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLmNvbnRlbnRBdmFpbGFibGUpOiBVc2UgYnJlYWtwb2ludHNGb3JTb3VyY2VDb2RlLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLnRleHRFZGl0b3JCcmVha3BvaW50QWRkZWQpOiBQYXNzIHRoZSByZXNvdXJjZSB0byB0aGUKICAgICAgICBCcmVha3BvaW50IGNvbnN0cnVjdG9yIGluc3RlYWQgb2YgdGhlIFVSTC4KCjIwMTItMDMtMTcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBVc2UgRGF0ZS50b0xvY2FsZVN0cmluZygpIHRvIGZvcm1hdCB0aGUgZGF0ZSBpbiB0aGUgRXhwcmlyZXMgY29sdW1uIG9mIHRoZSBDb29raWVzIHZpZXcuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS85NjI4NjU5PiBFeHBpcmVzIGRhdGUgaW4gdGhlIENvb2tpZXMgdmlldyBzaG91bGQgYmUgbG9jYWxpemVkCgogICAgICAgIFJldmlld2VkIGJ5IEFkYSBDaGFuLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29va2llU3RvcmFnZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29va2llU3RvcmFnZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fcmVidWlsZFRhYmxlKTogVXNlIHRvTG9jYWxlU3RyaW5nKCkuCgoyMDEyLTAzLTE2ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIEdpdmUgZWFjaCBUaW1lbGluZSBEYXRhR3JpZCBhIGNoYW5jZSB0byByZWFjdCB0byBFdmVudE1hcmtlcnMuCgogICAgICAgIElmIGFub3RoZXIgdGltZWxpbmUgZGF0YSBncmlkIHdhcyBhY3RpdmUgd2hlbiBldmVudCBtYXJrZXJzIGFycml2ZWQsCiAgICAgICAgdGhlbiBzd2l0Y2hpbmcgdG8gdGhlIE5ldHdvcmsgZGF0YSBncmlkIHdhcyBub3Qgc2hvd2luZyB0aG9zZSBldmVudAogICAgICAgIG1hcmtlcnMuIEdpdmUgZWFjaCBUaW1lbGluZSBkYXRhIGdyaWQgYSBjaGFuY2UgdG8gcmVhY3QgdG8gdGhlCiAgICAgICAgZXZlbnQgbWFya2VyLCBub3QganVzdCB0aGUgYWN0aXZlIGRhdGEgZ3JpZC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVzQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldy5wcm90b3R5cGUuX3JlY29yZGluZ1N0YXJ0ZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcucHJvdG90eXBlLl9yZWNvcmRlZEV2ZW50TWFya2VyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fdXBkYXRlQ2FsY3VsYXRvckJvdW5kc0ZvclBlbmRpbmdSZWNvcmRzQW5kRXZlbnRNYXJrZXJzKToKCjIwMTItMDMtMTYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgV29ya2Fyb3VuZCBzcG9yYXRpYyBkb3VibGUgdGhpY2sgYm9yZGVyIGFwcGVhcmluZyBpbiBjb2xsYXBzZWQgY29sdW1ucy4KCiAgICAgICAgT2NjYXNpb25hbGx5IHRoZSBOZXR3b3JrcyBkYXRhIGdyaWQgd2lsbCBzaG93IGEgZG91YmxlIHRoaWNrIGJvcmRlciB3aGVyZQogICAgICAgIHRoZSBjb2xsYXBzZWQsIDAtd2lkdGgsIGNvbHVtbnMgd2VyZS4gV29ya2Fyb3VuZCB0aGlzIGJ5IGp1c3QgaGlkaW5nIHRoZQogICAgICAgIGJvcmRlciBmb3IgY29sbGFwc2VkIGNvbHVtbnMuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lc0NvbnRlbnRWaWV3LmNzczoKICAgICAgICAoLmNvbnRlbnQtdmlldy50aW1lbGluZXMgPiAuZGF0YS1ncmlkLmNvbGxhcHNlZC1kZXRhaWxzIHRkLmNvbHVtbi1ncm91cC1kZXRhaWxzOm5vdCg6bGFzdC1jaGlsZCkpOgogICAgICAgICogVXNlckludGVyZmFjZS9OZXR3b3JrRGF0YUdyaWQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrRGF0YUdyaWQucHJvdG90eXBlLmRpZFRvZ2dsZUNvbHVtbkdyb3VwKToKCjIwMTItMDMtMTUgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIHRoZSBRdWljayBDb25zb2xlIHRvb2xiYXIgYnV0dG9ucyBwaW4gdG8gdGhlIGJvdHRvbSB3aGVuIGRvaW5nIG11bHRpLWxpbmUgaW5wdXQuCgogICAgICAgIEFsc28gbWFrZSB0aGUgc2Nyb2xsYmFycyBub3QgaW50ZXJmZXJlIGlmIHRoZSB1c2VyIGhhcyBvbGQtc2Nob29sIHNjcm9sbGJhcnMuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1F1aWNrQ29uc29sZS5jc3M6CiAgICAgICAgKC5xdWljay1jb25zb2xlKTogU3BlY2lmeSBvdmVyZmxvdy14IGFuZCBvdmVyZmxvdy15IHNlcGFyYXRlbHkuIFVzZSBhdXRvIGluc3RlYWQgb2Ygc2Nyb2xsLgogICAgICAgICgucXVpY2stY29uc29sZSA+IC52aWV3LWNvbnRhaW5lcik6IFVzZSBhdXRvIGluc3RlYWQgb2Ygc2Nyb2xsLgogICAgICAgICgucXVpY2stY29uc29sZSA+IC50b29sYmFyID4gLm5hdmlnYXRpb24tYmFyLWNvbnRhaW5lcik6IEFkZGVkLgogICAgICAgICgucXVpY2stY29uc29sZSA+IC50b29sYmFyID4gLm5hdmlnYXRpb24tYmFyLWNvbnRhaW5lciA+IC5uYXZpZ2F0aW9uLWJhci1zcGFjZXIpOiBBZGRlZC4KICAgICAgICAoLnF1aWNrLWNvbnNvbGUgPiAudG9vbGJhciA+IC5uYXZpZ2F0aW9uLWJhci1jb250YWluZXIgPiAubmF2aWdhdGlvbi1iYXIpOiBVcGRhdGVkIHRoZSBzZWxlY3Rvci4KICAgICAgICAoLnF1aWNrLWNvbnNvbGUgPiAudG9vbGJhciA+IC5uYXZpZ2F0aW9uLWJhci1jb250YWluZXIgPiAubmF2aWdhdGlvbi1iYXIgPiAuaXRlbS5idXR0b24uZGlzYWJsZWQgPiAuZ2x5cGgpOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlKTogQ3JlYXRlIG5hdmlnYXRpb24gYmFyIGNvbnRhaW5lciBhbmQgc3BhY2VyLgoKMjAxMi0wMy0xNSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTEwNDk2NzI+IERlbGV0ZSBrZXkgc2hvdWxkIGRlbGV0ZSBzZWxlY3RlZCBicmVha3BvaW50IGluIHNpZGViYXIKCiAgICAgICAgLSBEZWxldGUga2V5IHJlbW92ZXMgdGhlIGJyZWFrcG9pbnQuCiAgICAgICAgLSBFbnRlciAvIFNwYWNlIHRvZ2dsZXMgdGhlIGJyZWFrcG9pbnQuCiAgICAgICAgLSBBbGwgRXhjZXB0aW9ucyBhbmQgVW5jYXVnaHQgRXhjZXB0aW9ucyBicmVha3BvaW50cyBjYW5ub3QgYmUgcmVtb3ZlZAogICAgICAgICAgYW5kIHdpbGwgYmVlcCBpZiB0aGUgdXNlciBhdHRlbXB0cyB0byBkZWxldGUgdGhlbS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVHJlZU91dGxpbmUuanM6CiAgICAgICAgKFRyZWVPdXRsaW5lLnByb3RvdHlwZS5fdHJlZUtleURvd24pOgogICAgICAgIEV4cG9zZSBvbnNwYWNlIGxpa2Ugb25lbnRlciBhbmQgb25kZWxldGUuCgogICAgICAgICogVXNlckludGVyZmFjZS9CcmVha3BvaW50VHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50VHJlZUVsZW1lbnQucHJvdG90eXBlLm9uZGVsZXRlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRUcmVlRWxlbWVudC5wcm90b3R5cGUub25lbnRlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50VHJlZUVsZW1lbnQucHJvdG90eXBlLm9uc3BhY2UpOgogICAgICAgIEltcGxlbWVudCBkZWZhdWx0IFRyZWVFbGVtZW50IGhhbmRsZXJzIGZvciBrZXlzLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGVidWdnZXJNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5yZW1vdmVCcmVha3BvaW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUuaXNCcmVha3BvaW50UmVtb3ZhYmxlKToKICAgICAgICBFbnN1cmUgd2UgbmV2ZXIgdHJ5IHRvIHJlbW92ZSB0aGUgY3VzdG9tIGJyZWFrcG9pbnRzLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dFJlc291cmNlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUuX2JyZWFrcG9pbnRSZW1vdmVkKToKICAgICAgICBXaGVuIGEgYnJlYWtwb2ludCBpcyByZW1vdmVkIHVwZGF0ZSB0aGUgQ29udGVudFZpZXcgYW5kIFRleHRFZGl0b3IuCgoyMDEyLTAzLTE1ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTA1MDY3MD4gUkVHUkVTU0lPTiAoTmV3IFdlYiBJbnNwZWN0b3IpOiBBZGQgSW5zcGVjdCBFbGVtZW50IGJ1dHRvbiAobWFnbmlmeWluZyBnbGFzcyBidXR0b24pCgogICAgICAgIE9ubHkgc2hvdyB0aGUgYnV0dG9uIHdoZW4gYSBGcmFtZVZpZXcgKERPTSBUcmVlIC8gU291cmNlIENvZGUpIGlzIGF2YWlsYWJsZS4KICAgICAgICBXaGVuIHN3aXRjaGluZyBhd2F5IGZyb20gYSBGcmFtZVZpZXcgbWFrZSBzdXJlIHRvIGRpc2FibGUgbm9kZSBzZWFyY2hpbmcKICAgICAgICBpZiBpdCB3YXMgYWN0aXZlLiBBbHNvIHNpbmNlIHRoZSBuYXYgYmFyIG1heSBoYXZlIGNoYW5nZWQgc2l6ZSBoYXZlIHRoZQogICAgICAgIGNvbnRlbnQgYnJvd3NlciB1cGRhdGUgaXRzIG5hdmlnYXRpb24gYmFyIGxheW91dC4KCiAgICAgICAgSWYgdGhpcyBoYXBwZW5zIG1vcmUgaW4gdGhlIGZ1dHVyZSB0aGUgYnV0dG9ucyBzaG91bGQgYmUgb3duZWQgYnkgdGhlCiAgICAgICAgaW5kaXZpZHVhbCBDb250ZW50Vmlld3MgaW5zdGVhZCBvZiBXZWJJbnNwZWN0b3IuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLl9jdXJyZW50Q29udGVudFZpZXdEaWRDaGFuZ2UpOgoKMjAxMi0wMy0xNSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTEwNTA2NzA+IFJFR1JFU1NJT04gKE5ldyBXZWIgSW5zcGVjdG9yKTogQWRkIEluc3BlY3QgRWxlbWVudCBidXR0b24gKG1hZ25pZnlpbmcgZ2xhc3MgYnV0dG9uKQoKICAgICAgICBBZGQgYW4gb24vb2ZmIGJ1dHRvbiBmb3Igbm9kZSBzZWFyY2hpbmcuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0FjdGl2YXRlQnV0dG9uTmF2aWdhdGlvbkl0ZW0uanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQWN0aXZhdGVCdXR0b25OYXZpZ2F0aW9uSXRlbSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5BY3RpdmF0ZUJ1dHRvbk5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5nZXQgYWN0aXZhdGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkFjdGl2YXRlQnV0dG9uTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLnNldCBhY3RpdmF0ZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQWN0aXZhdGVCdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuZ2VuZXJhdGVTdHlsZVRleHQpOgogICAgICAgIEFjdGl2YXRlQnV0dG9uIHVzZXMgdGhlIG5vcm1hbCAiRm9jdXMiIHN0eWxlIHdoZW4gIkFjdGl2YXRlZCIuIEl0CiAgICAgICAgdGhlbiBpbmNsdWRlcyBhIGRhcmtlciB2ZXJzaW9uIG9mICJGb2N1cyIgZm9yICJBY3RpdmF0ZWQ6YWN0aXZlIi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0J1dHRvbk5hdmlnYXRpb25JdGVtLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnV0dG9uTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLl9nZW5lcmF0ZUltYWdlcyk6CiAgICAgICAgQWxsb3cgZm9yIG1vcmUgZmxleGlibGUgc3ViY2xhc3NpbmcuCgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZVV0aWxpdGllcy5qczoKICAgICAgICAoZ2VuZXJhdGVFbWJvc3NlZEltYWdlcy5faW1hZ2VMb2FkZWQpOgogICAgICAgIChnZW5lcmF0ZUVtYm9zc2VkSW1hZ2VzLl9jcmVhdGVFbWJvc3NlZENhbnZhc0ltYWdlKToKICAgICAgICBDcmVhdGUgYSBGb2N1c0Rhcmsgc3R5bGUgaWYgcmVxdWVzdGVkLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0hhbmQucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5fZG9tTm9kZVdhc0luc3BlY3RlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5fdG9nZ2xlTm9kZVNlYXJjaC5jYWxsYmFjayk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5fdG9nZ2xlTm9kZVNlYXJjaCk6CiAgICAgICAgQWRkIHRoZSBidXR0b24gdG8gdGhlIHJpZ2h0LgoKMjAxMi0wMy0xNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEZpeCB0eXBvIG9mIHRoZSBzZXJ2aWNlUGVuZGluZ0NvbnRlbnRSZXF1ZXN0cyBmdW5jdGlvbiB3YXMgbWVudGlvbmVkIGluIHJldmlldyBidXQgSSBmb3Jnb3QgdG8gc2F2ZSB0aGUgZmlsZS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLm1hcmtBc0ZhaWxlZCk6IEZpeCB0eXBvIG9mIHNlcnZpY2VQZW5kaW5nQ29udGVudFJlcXVlc3RzLgoKMjAxMi0wMy0xNCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA5MzUzOTQ+IFJFR1JFU1NJT04gKE5ldyBXZWIgSW5zcGVjdG9yKTogbG9hZCBhbmQgRE9NQ29udGVudExvYWRlZCBldmVudCBsaW5lcyBhcmUgbm90IHNob3duIGluIHRoZSBUaW1lbGluZSBvdmVydmlldwogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDkzNTQxNz4gUkVHUkVTU0lPTiAoTmV3IFdlYiBJbnNwZWN0b3IpOiBkZXZlbG9wZXIgZ2VuZXJhdGVkIHRpbWVzdGFtcHMgYXJlIG5vdCBzaG93biBpbiB0aGUgVGltZWxpbmUgb3ZlcnZpZXcKCiAgICAgICAgQWRkIGV2ZW50IG1hcmtlciBkZWNvcmF0aW9ucyB0byB0aGUgVGltZWxpbmVPdmVydmlldy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVEZWNvcmF0aW9ucy5jc3M6CiAgICAgICAgKC50aW1lbGluZS1kZWNvcmF0aW9ucyA+IC5ldmVudC1tYXJrZXJzID4gLmV2ZW50LW1hcmtlci50aW1lc3RhbXApOgogICAgICAgIE1ha2UgbWFya1RpbWVsaW5lL3RpbWVTdGFtcCBncmVlbiBpbnN0ZWFkIG9mIHllbGxvdy4gRWFzaWVyIHRvIHNlZS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lRGVjb3JhdGlvbnMuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZURlY29yYXRpb25zLnByb3RvdHlwZS5jbGVhcik6CiAgICAgICAgQ2xlYXJpbmcgc2hvdWxkIGFsc28gcmVtb3ZlIHZpc2libGUgRXZlbnRNYXJrZXJzLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVPdmVydmlldy5jc3M6CiAgICAgICAgKC50aW1lbGluZS1vdmVydmlldyAudGltZWxpbmUtZGVjb3JhdGlvbnMgPiAuZXZlbnQtbWFya2Vycyk6CiAgICAgICAgKC50aW1lbGluZS1vdmVydmlldyAudGltZWxpbmUtZGVjb3JhdGlvbnMgPiAuZXZlbnQtbWFya2VycyA+IC5ldmVudC1tYXJrZXItdG9vbHRpcCk6CgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZXNDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fcmVjb3JkZWRFdmVudE1hcmtlcik6CiAgICAgICAgUGFzcyBldmVudCBtYXJrZXJzIG9uIHRvIHRoZSBUaW1lbGluZU92ZXJ2aWV3LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVPdmVydmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lT3ZlcnZpZXcucHJvdG90eXBlLnVwZGF0ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU92ZXJ2aWV3LnByb3RvdHlwZS5hZGRUaW1lbGluZUV2ZW50TWFya2VyKToKICAgICAgICBIYXZlIHRoZSBkZWNvcmF0b3IgZHJhdyBldmVudCBtYXJrZXJzLgoKMjAxMi0wMy0xNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFByb3ZpZGUgYSB3YXkgdG8gcmVxdWVzdCBjb250ZW50IGZyb20gYSBTY3JpcHQuCgogICAgICAgIEZhY3RvciBvdXQgdGhlIGNvbnRlbnQgcmVxdWVzdGluZyBwYXJ0cyBvZiBSZXNvdXJjZSBkb3duIGludG8gYSBTb3VyY2VDb2RlIGNsYXNzIHRoYXQKICAgICAgICBib3RoIFJlc291cmNlIGFuZCBTY3JpcHQgbm93IGluaGVyaXQgZnJvbS4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzExMDQ3OTgyPiBSRUdSRVNTSU9OOiBQYWdlIHNvdXJjZSBkb2VzIG5vdCBzaG93IHdoZW4gYSBicmVha3BvaW50CiAgICAgICAgaXMgaGl0IHdoaWxlIGxvYWRpbmcgdGhlIHBhZ2UKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlZCBTb3VyY2VDb2RlLmpzLgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5jYW5SZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUucmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLm1hcmtBc0ZpbmlzaGVkKTogQ2FsbCByZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kSWZOZWVkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUubWFya0FzRmFpbGVkKTogQ2FsbCBzZXJ2aWNlUGVuZGluZ0NvbnRlbnRSZXF1ZXN0cyB3aXRoIGZvcmNlLgogICAgICAgICogVXNlckludGVyZmFjZS9TY3JpcHQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlwZS5jYW5SZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHQucHJvdG90eXBlLnJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlQ29kZS5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUucHJvdG90eXBlLmdldCBjb250ZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUucHJvdG90eXBlLmdldCBjb250ZW50SXNCYXNlNjRFbmNvZGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUucHJvdG90eXBlLmdldCBjb250ZW50VVJMKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUucHJvdG90eXBlLnJlcXVlc3RDb250ZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUucHJvdG90eXBlLmNhblJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZS5wcm90b3R5cGUucmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZS5yZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kSWZOZWVkZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZS5wcm90b3R5cGUuc2VydmljZVBlbmRpbmdDb250ZW50UmVxdWVzdHMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZS5wcm90b3R5cGUuX3Byb2Nlc3NDb250ZW50KToKCjIwMTItMDMtMTMgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExMDQ0MTM1PiBRdWljayBDb25zb2xlIHNob3VsZCBoYW5kbGUgbXVsdGlsaW5lIGlucHV0IGJldHRlcgoKICAgICAgICBUaGUgUXVpY2tDb25zb2xlIGNvbnNpc3RzIG9mIHR3byBwaWVjZXMgaW4gYSBmaXhlZCBoZWlnaHQuIFRoZSB0b29sYmFyIHdpdGgKICAgICAgICBKYXZhU2NyaXB0IHByb21wdCwgYW5kIHRoZSBvdXRwdXQgY29udGVudCB2aWV3IGNvbnRhaW5lci4gVGhlIGNvbnNvbGUgaXRzZWxmCiAgICAgICAgZ3Jvd3MgdG8gYSBtYXhpbXVtIHNpemUgKDc1JSBvZiB0aGUgdG90YWwgd2luZG93IHNpemUgb3IgdXNlciBzcGVjaWZpZWQgYnkKICAgICAgICByZXNpemluZykuIFdoZW4gaGFuZGxpbmcgbXVsdGlsaW5lIGlucHV0IHRoZSB0b29sYmFyIGNvbnRhaW5pbmcgdGhlIHByb21wdAogICAgICAgIGlzIGFsbG93ZWQgdG8gZ3JvdywgcHVzaGluZyB1cCB0aGUgY29udGVudC4gV2hlbiB0aGUgbWF4aW11bSBpcyByZWFjaGVkIHRoZQogICAgICAgIGNvbnRlbnQgd2lsbCBzY3JvbGwgdW5kZXIgaXQsIGFuZCBsaWtld2lzZSB0aGUgbXVsdGlsaW5lIEphdmFTY3JpcHQgcHJvbXB0CiAgICAgICAgd2lsbCBldmVudHVhbGx5IHNjcm9sbCB1bmRlciBpdC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUuX3Byb21wdEtleURvd24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZS5fcHJvbXB0SGlzdG9yeUNoYW5nZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlLl9wcm9tcHRQYXN0ZWJvYXJkRXZlbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZS5fZGV0ZWN0UHJvbXB0SGVpZ2h0Q2hhbmdlcy5hZnRlckV2ZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUuX2RldGVjdFByb21wdEhlaWdodENoYW5nZXMpOgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0UHJvbXB0LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0V2l0aEhpc3RvcnkucHJvdG90eXBlLmRlZmF1bHRLZXlIYW5kbGVyKToKICAgICAgICBJbiBvcmRlciB0byBkZXRlY3Qgd2l0aCB0aGUgaW5wdXQgcHJvbXB0IGNoYW5nZXMgaGVpZ2h0LCB3ZSBob29rIGludG8KICAgICAgICBhIG51bWJlciBvZiBldmVudHMuIEtleWRvd24sIGN1dC9wYXN0ZSwgYW5kIFRleHRQcm9tcHQgaGlzdG9yeSBjaGFuZ2VzLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlLmNzczoKICAgICAgICAoLnF1aWNrLWNvbnNvbGUpOgogICAgICAgICgucXVpY2stY29uc29sZS5jb2xsYXBzZWQpOgogICAgICAgIExldCB0aGUgY29uc29sZSBzY3JvbGwgd2hlbiBtdWx0aWxpbmUgaW5wdXQgZmlsbHMgdGhlIGVudGlyZSBjb25zb2xlLgogICAgICAgIFRvIGFsbG93IG11bHRpbGluZSBpbnB1dCB3aGVuIGNvbGxhcHNlZCByZW1vdmUgIWltcG9ydGFudCBmcm9tIGhlaWdodC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1F1aWNrQ29uc29sZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLnNldCBjb2xsYXBzZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5nZXQgbXVsdGlsaW5lKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuZ2V0IGNvbGxhcHNlZEhlaWdodCk6CiAgICAgICAgVXNlIGNvbnN0YW50cyB3aGVyZSBwb3NzaWJsZSBmb3IgaGVpZ2h0IHZhbHVlcy4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLmRpZEFwcGVuZENvbnNvbGVNZXNzYWdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUucHJvbXB0RGlkQ2hhbmdlSGVpZ2h0KToKICAgICAgICBSZXNwb25kcyB0byBhY3Rpb25zIHRoYXQgd2lsbCBtb3N0IGxpa2UgcmVxdWlyZSByZXNpemVzLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX3VwZGF0ZVRvb2xiYXJTaXplKToKICAgICAgICBVcGRhdGUgdGhlIHRvb2xiYXIgc2l6ZSBpZiB0aGUgcHJvbXB0IHNpemUgY2hhbmdlZC4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLl91cGRhdGVWaWV3Q29udGFpbmVyU2l6ZUFuZFNjcm9sbERpdmlkZXIpOgogICAgICAgIFVwZGF0ZSB0aGUgdmlldyBjb250YWluZXIncyBzaXplIHdoZW4gc2luZ2xlIGxpbmUgb3IgbXVsdGlsaW5lLgoKMjAxMi0wMy0xMyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBUd2VhayBxdWljayBjb25zb2xlIGZvY3VzaW5nLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9RdWlja0NvbnNvbGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLl92aWV3Q29udGFpbmVyQ2xpY2suYWZ0ZXJEaXNwYXRjaGVzKToKICAgICAgICBUaGlzIGRpZG4ndCBhcHBlYXIgdG8gd29yayBmb3IgYWxsIGFjdGlvbnMuIElnbm9yZSB0aGUgY2FyZXQgY2hlY2tpbmcsCiAgICAgICAgYW5kIG1vcmUgcHJvYWN0aXZlbHkgZm9jdXMgYXMgbG9uZyBhcyB0aGVyZSBpcyBubyBzZWxlY3Rpb24uCgoyMDEyLTAzLTEzICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIE1pbm9yIHF1aWNrIGNvbnNvbGUgbW91c2UgaW1wcm92ZW1lbnRzLgoKICAgICAgICBBbGxvdyBzZWxlY3Rpb24gaW4gdGhlIG1lc3NhZ2VzIG91dHB1dC4KCiAgICAgICAgQ2xpY2tpbmcgaW4gdGhlIG1lc3NhZ2VzIG91dHB1dCBmb2N1c2VzIHRoZSBwcm9tcHQgaWYgdGhlcmUgaXMgbm8KICAgICAgICBzZWxlY3Rpb24uIFRoaXMgbWF0Y2hlcyBMb2dDb250ZW50Vmlldy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlLmNzczoKICAgICAgICAoLnF1aWNrLWNvbnNvbGUgPiAudmlldy1jb250YWluZXIpOgogICAgICAgICogVXNlckludGVyZmFjZS9RdWlja0NvbnNvbGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fdmlld0NvbnRhaW5lckNsaWNrLmFmdGVyRGlzcGF0Y2hlcyk6CgoyMDEyLTAzLTEzICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIEV2ZW50IG1hcmtlciBsaW5lcyBzaG91bGQgbm90IG92ZXJsYXAgdGhlIHF1aWNrIGNvbnNvbGUuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lRGVjb3JhdGlvbnMuY3NzOgogICAgICAgICgudGltZWxpbmUtZGVjb3JhdGlvbnMgPiAuZXZlbnQtbWFya2Vycyk6CgoyMDEyLTAzLTEzICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIFJlbmFtZWQgaXNGb2N1c2VkKCkgdG8gYSBmb2N1c2VkIGdldHRlciBiYXNlZCBvbiBlYXJsaWVyIHJldmlldyBmZWVkYmFjay4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSmF2YVNjcmlwdFRleHRQcm9tcHQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0VGV4dFByb21wdC5wcm90b3R5cGUuZ2V0IGZvY3VzZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5jb25zb2xlQ2xlYXJlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5fa2V5ZG93bik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1F1aWNrQ29uc29sZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX2FjdGl2ZUxvZ0NsZWFyZWQpOgoKMjAxMi0wMy0xMyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBDb252ZXJnZSB0byBhIHNpbmdsZSBSZWNvcmRlZEV2ZW50TWFya2VyIGV2ZW50IGJhc2VkIG9uIGVhcmxpZXIgcmV2aWV3IGZlZWRiYWNrLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLnByb3RvdHlwZS5zdGFydFJlY29yZGluZyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlLmV2ZW50UmVjb3JkZWQucHJvY2Vzc1JlY29yZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlLmV2ZW50UmVjb3JkZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZXNDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3KToKCjIwMTItMDMtMTMgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIHByb2ZpbGVzIHdvcmsgYWdhaW4gd2hpbGUgcmV0YWluaW5nIHRoZSBjb3JyZWN0IGluc2VydGlvbiBvcmRlciBpbiB0aGUgVGltZWxpbmUgRGF0YUdyaWRzLgoKICAgICAgICBUaGlzIHJldmVydHMgbW9zdCBvZiByNDExNzIgYW5kIGZpeGVzIHRoZSBzaW5nbGUgaXNzdWUgZnJvbSB0aGUgb3BlbiBzb3VyY2UgdmVyc2lvbiBvZiB0aGUgY29kZS4KICAgICAgICBXaGVuIHRoZXJlIGlzbid0IGEgcHJldmlvdXNHcmlkTm9kZSB0aGF0IG1lYW5zIHdlIG5lZWQgdG8gaW5zZXJ0IGF0IHRoZSB0b3Agb2YgdGhlIERhdGFHcmlkLgogICAgICAgIEJ1dCB0aGUgb3BlbiBzb3VyY2UgY29kZSB3YXMgbWlzc2luZyB0aGUgIXByZXZpb3VzR3JpZE5vZGUgY2hlY2ssIGNhdXNpbmcgZWxlbWVudHMgdG8gYXBwZW5kCiAgICAgICAgYXQgdGhlIGVuZCBpbnN0ZWFkLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA5NjA1Nzg+IFJFR1JFU1NJT04gKHI0MTE3Mik6IERPTSBleGNlcHRpb25zIHdoZW4gc2hvd2luZyBwcm9maWxlIGRhdGEgZ3JpZAoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9EYXRhR3JpZC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZS5wcm90b3R5cGUuX2F0dGFjaCk6IFJldmVydCByNDExNzIgYW5kIGFkZCBhIGNoZWNrIGZvciAhcHJldmlvdXNHcmlkTm9kZS4KCjIwMTItMDMtMTMgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBEb24ndCBmb2xsb3cgbGlua3Mgd2hlbiB0aGV5IGFyZSBiZWluZyBlZGl0ZWQgYnkgdGhlIHVzZXIuCgogICAgICAgIEluc3BpcmVkIGJ5IHRoZSBmaXggZm9yIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzYwODE0LgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlQ29udGVudFZpZXcucHJvdG90eXBlLl9tb3VzZVdhc0NsaWNrZWQpOiBDYWxsIGlzQmVpbmdFZGl0ZWQgYW5kIHJldHVybiBlYXJseSBpZiB0cnVlLgogICAgICAgICogVXNlckludGVyZmFjZS9FZGl0aW5nU3VwcG9ydC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmlzQmVpbmdFZGl0ZWQpOiBDaGVjayBhbmNlc3RvciBlbGVtZW50cyB0b28uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5oYW5kbGVQb3NzaWJsZUxpbmtDbGljayk6IENhbGwgaXNCZWluZ0VkaXRlZCBhbmQgcmV0dXJuIGVhcmx5IGlmIHRydWUuCgoyMDEyLTAzLTEzICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUmVtb3ZlIGR1cGxpY2F0ZSBjb2RlIGZvciB0aGUgaGFuZGxpbmcgY2xpY2tlZCBsaW5rcy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU2VsZWN0b3JQcm9maWxlVmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1NlbGVjdG9yUHJvZmlsZVZpZXcpOiBSZW1vdmVkIGNsaWNrIGV2ZW50IGxpc3RlbmVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU2VsZWN0b3JQcm9maWxlVmlldy5wcm90b3R5cGUuX21vdXNlV2FzQ2xpY2tlZCk6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTURldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01EZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fbW91c2VXYXNDbGlja2VkKTogVXNlIGhhbmRsZVBvc3NpYmxlTGlua0NsaWNrLgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlQ29udGVudFZpZXcucHJvdG90eXBlLl9tb3VzZVdhc0NsaWNrZWQuZm9sbG93TGluayk6IFBhc3MgYWxvbmcgdGhlIGxpbmVOdW1iZXIuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0phdmFTY3JpcHRQcm9maWxlVmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRQcm9maWxlVmlldyk6IFJlbW92ZWQgY2xpY2sgZXZlbnQgbGlzdGVuZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0UHJvZmlsZVZpZXcucHJvdG90eXBlLl9tb3VzZVdhc0NsaWNrZWQpOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3KTogUmVtb3ZlZCBjbGljayBldmVudCBsaXN0ZW5lci4KICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fbWVzc2FnZXNDbGlja2VkKTogUmVtb3ZlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmhhbmRsZVBvc3NpYmxlTGlua0NsaWNrKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5fbW91c2VXYXNDbGlja2VkKTogQ2FsbCBoYW5kbGVQb3NzaWJsZUxpbmtDbGljay4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlKTogUmVtb3ZlZCBjbGljayBldmVudCBsaXN0ZW5lci4KICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX21lc3NhZ2VzQ2xpY2tlZCk6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fbW91c2VXYXNDbGlja2VkKTogVXNlIGhhbmRsZVBvc3NpYmxlTGlua0NsaWNrLgoKMjAxMi0wMy0xMyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFByb3Blcmx5IGJpbmQgYW5kIHVuYmluZCBldmVyeSBET01Ob2RlIHRvIERPTVRyZWVNYW5hZ2VyLgoKICAgICAgICBNZXJnZXMgdGhlIGZpeCBmb3IgaHR0cHM6Ly93ZWJraXQub3JnL2IvNzgxMTYgZnJvbSBvcGVuIHNvdXJjZSAocjEwNzA5MykuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlKTogSW5zZXJ0cyB0aGUgbm9kZSBpbnRvIHRoZSBET01UcmVlTWFuYWdlciBtYXAgaGVyZS4gU28gYWxsCiAgICAgICAgdGhlIGNhbGxlcnMgZG9uJ3QgbmVlZCB0byBkbyBpdC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUuX3NldERvY3VtZW50KTogUmVtb3ZlZCBiaW5kaW5nIGNvZGUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUuX3NldERldGFjaGVkUm9vdCk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIucHJvdG90eXBlLl9zZXRDaGlsZE5vZGVzKTogUmVtb3ZlZCBjYWxsIHRvIF9iaW5kTm9kZXMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUuX2JpbmROb2Rlcyk6IFJlbW92ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUuX2NoaWxkTm9kZVJlbW92ZWQpOiBDYWxsIF91bmJpbmQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUuX3VuYmluZCk6IEFkZGVkLiBSZWN1cnNpdmVseSB1bmJpbmQuCgoyMDEyLTAzLTEzICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IGFuIGlzc3VlIHdoZXJlIHJlbW92aW5nIGEgVHJlZUVsZW1lbnQgZnJvbSBhIFRyZWVPdXRsaW5lIHdvdWxkIGNhdXNlIHRoZSBUcmVlT3V0bGluZQogICAgICAgIHRvIGZvcmdldCBhbGwgVHJlZUVsZW1lbnRzIHRoYXQgY2FtZSBhZnRlciB0aGUgVHJlZUVsZW1lbnQgdGhhdCB3YXMgcmVtb3ZlZC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVHJlZU91dGxpbmUuanM6CiAgICAgICAgKFRyZWVPdXRsaW5lLnByb3RvdHlwZS5fZm9yZ2V0Q2hpbGRyZW5SZWN1cnNpdmUpOiBQYXNzIHBhcmVudEVsZW1lbnQgaW5zdGVhZCBvZiB0aGlzIHRvCiAgICAgICAgdHJhdmVyc2VOZXh0VHJlZUVsZW1lbnQsIGZvcmNpbmcgaXQgdG8gc3RvcCB3aGVuIGl0IHJlYWNoZXMgdGhlIGxhc3QgZGVzY2VuZGFudCBvZiBwYXJlbnRFbGVtZW50LgoKMjAxMi0wMy0xMiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEtlZXAgdGhlIFF1aWNrQ29uc29sZSBzY3JvbGwgcG9zaXRpb24gcGlubmVkIHRvIHRoZSBib3R0b20gd2hlbiBjaGFuZ2luZyB0aGUgaGVpZ2h0LgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9RdWlja0NvbnNvbGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLnVwZGF0ZUxheW91dCk6IFNjcm9sbCB0byB0aGUgYm90dG9tIGlmIHdlIHdlcmUgYmVmb3JlIHRoZSBwb3NzaWJsZSBoZWlnaHQgY2hhbmdlLgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5faXNTY3JvbGxlZFRvQm90dG9tKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLl9zY3JvbGxUb0JvdHRvbSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fcmVzaXplck1vdXNlRG93bik6IFJlbWVtYmVyIGlmIHRoZSB2aWV3IHdhcyBzY3JvbGxlZCB0byB0aGUgYm90dG9tIGJlZm9yZSByZXNpemUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLl9yZXNpemVyTW91c2VNb3ZlZCk6IFNjcm9sbCB0byB0aGUgYm90dG9tIGlmIHdlIHdlcmUgYmVmb3JlIHJlc2l6ZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX3Jlc2l6ZXJNb3VzZVVwKTogRGVsZXRlIHRoZSBmbGFnLgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fdmlld0NvbnRhaW5lckNsaWNrLmFmdGVyRGlzcGF0Y2hlcyk6IFNjcm9sbCB0aGUgY29uc29sZSBlbGVtZW50IGludG8gdmlldyB0aGF0CiAgICAgICAgd2FzIGNsaWNrZWQgb3Igc2Nyb2xsIHRvIHRoZSBib3R0b20gaWYgd2Ugd2VyZSBiZWZvcmUuCgoyMDEyLTAzLTEyICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWxsb3cgdGhlIFF1aWNrQ29uc29sZSB0byBzaHJpbmsgaW4gaGVpZ2h0IHdoZW4gaXQgYXV0byBncmV3IGluIGhlaWdodC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5zZXQgY29sbGFwc2VkKTogUmVzZXQgX3VzZXJQcmVmZXJyZWRNYXhpbXVtSGVpZ2h0V2FzU2V0U2luY2VMYXN0VG9nZ2xlIGJhY2sgdG8gZmFsc2UuCiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLnNldCB1c2VyUHJlZmVycmVkTWF4aW11bUhlaWdodCk6IFNldCBfdXNlclByZWZlcnJlZE1heGltdW1IZWlnaHRXYXNTZXRTaW5jZUxhc3RUb2dnbGUgdG8gdHJ1ZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX3VwZGF0ZVZpZXdDb250YWluZXJTaXplQW5kU2Nyb2xsRGl2aWRlcik6IFJldHVybiBlYXJseSBpZiBfdXNlclByZWZlcnJlZE1heGltdW1IZWlnaHRXYXNTZXRTaW5jZUxhc3RUb2dnbGUKICAgICAgICBpcyBzZXQgYWZ0ZXIgY2FsbGluZyBfdXBkYXRlU2Nyb2xsRGl2aWRlci4gQWRkZWQgYW4gYWxsb3dTaHJpbmtpbmcgcGFyYW1ldGVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fdmlld0NvbnRhaW5lckNsaWNrKTogVXBkYXRlIGNvbW1lbnQuIEFuZCBjYWxsIF91cGRhdGVWaWV3Q29udGFpbmVyU2l6ZUFuZFNjcm9sbERpdmlkZXIsCiAgICAgICAgcGFzc2luZyB0cnVlIHRvIGFsbG93IHNocmlua2luZy4KCjIwMTItMDMtMTIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBRdWljayBmaXhlcyB0byB0aGUgUXVpY2tDb25zb2xlIHN0eWxlcy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlLmNzczoKICAgICAgICAoLnF1aWNrLWNvbnNvbGUpOiBTZXQgb3ZlcmZsb3cgdG8gaGlkZGVuIHNvIHRoZSB0b29sYmFyIGJveC1zaGFkb3cgZG9lcyBub3Qgc3BpbGwgb3V0IHRoZSBzaWRlcy4gQWxzbwogICAgICAgIHJlbW92ZXMgYSBib3gtc2hhZG93IHRoYXQgd2FzIG5vdCBkb2luZyBhbnl0aGluZyB1c2VmdWwuCiAgICAgICAgKC5xdWljay1jb25zb2xlID4gLnZpZXctY29udGFpbmVyKTogU2V0IG92ZXJmbG93LXggdG8gaGlkZGVuIHNvIHRoZSBob3Jpem9udGFsIHNjcm9sbGJhciBuZXZlciBzaG93cy4KICAgICAgICAoLnF1aWNrLWNvbnNvbGUgPiAudG9vbGJhcik6IFNldCBhIHRyYW5zaXRpb24gb24gYm94LXNoYWRvdyBzbyB0aGUgc2hhZG93IGFuaW1hdGVzLiBBZGQgYSBiYXNlIGJveC1zaGFkb3cKICAgICAgICB0aGF0IGhhcyAwIGZvciBibHVyIHNvIGl0IGFuaW1hdGVzIG5pY2VseS4KICAgICAgICAoLnF1aWNrLWNvbnNvbGUgPiAudG9vbGJhci5zY3JvbGwtZGl2aWRlcik6IFR3ZWFrIHRoZSBzaGFkb3cgc28gaXQgaXMgcmdiYSgpIGFuZCBhIGxhcmdlciBibHVyLgoKMjAxMi0wMy0xMiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBEaXNhYmxlIHRoZSBUb2dnbGUgYnV0dG9uIHdoZW4gdGhlcmUgaXMgbm8gUXVpY2sgQ29uc29sZSBjb250ZW50LgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuX2tleWRvd24pOgogICAgICAgICogVXNlckludGVyZmFjZS9RdWlja0NvbnNvbGUuY3NzOgogICAgICAgICgucXVpY2stY29uc29sZSA+IC50b29sYmFyID4gLm5hdmlnYXRpb24tYmFyID4gLml0ZW0uYnV0dG9uLmRpc2FibGVkID4gLmdseXBoKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUudG9nZ2xlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuZGlkQXBwZW5kQ29uc29sZU1lc3NhZ2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fdG9nZ2xlQnV0dG9uQ2xpY2tlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLl9yZXNpemVyRG91YmxlQ2xpY2tlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLl9hY3RpdmVMb2dDbGVhcmVkKToKCjIwMTItMDMtMTIgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExMDM0ODA4PiBFc2Mgc2hvdWxkIGZvY3VzIG9yIHRvZ2dsZSB0aGUgUXVpY2tDb25zb2xlCgogICAgICAgIEVzYyB3aWxsIGZvY3VzIHRoZSBxdWljayBjb25zb2xlIGlmIG5vdGhpbmcgZWxzZSBpcyBmb2N1c2VkIGFuZCBhY2NlcHRpbmcKICAgICAgICBpbnB1dC4gV2hlbiBmb2N1c2VkLCBFc2Mgd2lsbCB0b2dnbGUgdGhlIGNvbnNvbGUncyBkcmF3ZXIuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5fa2V5ZG93bik6CiAgICAgICAgSGFuZGxlIHRoZSBFc2Mga2V5LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fdG9nZ2xlQnV0dG9uQ2xpY2tlZCk6CiAgICAgICAgV2hlbiB0aGUgcXVpY2sgY29uc29sZSBpcyBmb2N1c2VkIGFuZCBhIHVzZXIgY2xpY2tzIHRoZSB0b2dnbGUgYnV0dG9uLAogICAgICAgIHRoZSBxdWljayBjb25zb2xlIGVtaXRzIGEgImJsdXIiIGV2ZW50IGV2ZW4gdGhvdWdoIHRoZSBjYXJldCBpcyBzdGlsbAogICAgICAgIGluc2lkZSBpdCBhbmQgY29tbWFuZHMgY2FuIGJlIHJ1bi4gVGhpcyBicmVha3MgdGhlICJpc0ZvY3VzZWQoKSIgc3RhdGUKICAgICAgICBvZiB0aGUgZmllbGQgYW5kIHRodXMgdGhlIEVzYyBrZXkgdG9nZ2xpbmcgdGhlIGZpZWxkLiBTbywgbGV0cyBqdXN0CiAgICAgICAgYXV0by1mb2N1cyB0aGUgVGV4dFByb21wdCB3aGVuIHRoZSB0b2dnbGUgYnV0dG9uIGlzIGNsaWNrZWQuCgoyMDEyLTAzLTEyICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTAzNDY5OT4gUXVpY2sgQ29uc29sZSBzaG91bGQgcmVzcGVjdCBjbGVhciBrZXlib2FyZCBzaG9ydGN1dHMKCiAgICAgICAgUmVhY3QgdG8gdGhlIGNsZWFyIGFjdGl2ZSBsb2cgZXZlbnQgYnV0IG9ubHkgb24gdGhlIGN1cnJlbnRseSBhY3RpdmUgY29uc29sZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSmF2YVNjcmlwdFRleHRQcm9tcHQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0VGV4dFByb21wdCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0VGV4dFByb21wdC5wcm90b3R5cGUuaXNGb2N1c2VkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRUZXh0UHJvbXB0LnByb3RvdHlwZS5fZm9jdXNlZFByb21wdCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0VGV4dFByb21wdC5wcm90b3R5cGUuX2JsdXJyZWRQcm9tcHQpOgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5jb25zb2xlQ2xlYXJlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1F1aWNrQ29uc29sZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLl9hY3RpdmVMb2dDbGVhcmVkKToKCjIwMTItMDMtMTIgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgSW1wcm92ZSBRdWlja0NvbnNvbGUgY29udGVudCBzaXppbmcuCgogICAgICAgIE1ha2UgdGhlIHF1aWNrIGNvbnNvbGUgd29yayBsaWtlIGEgY2FsY3VsYXRvci4gVGhlIG1vc3QgcmVjZW50CiAgICAgICAgcmVzdWx0IGlzIGNsb3Nlc3QgdG8gdGhlIGNvbnNvbGUgcHJvbXB0LiBPbGRlciByZXN1bHRzIHNjcm9sbAogICAgICAgIHVwIG9mZiB0aGUgdG9wLiBOb3cgd2hlbiByZXNpemluZywgdGhlIHVzZXIgaXMgc2V0dGluZyB0aGVpcgogICAgICAgIHByZWZlcnJlZCBtYXhpbXVtIHNpemUgb2YgdGhlIGRyYXdlci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuc2V0IGNvbGxhcHNlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLmdldCBjb2xsYXBzZWRIZWlnaHQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5nZXQgbWluaW11bVVuY29sbGFwc2VkSGVpZ2h0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuZ2V0IG1heGltdW1VbmNvbGxhcHNlZEhlaWdodCk6CiAgICAgICAgR2l2ZSBjb21tZW50cyBkZXNjcmliaW5nIHRoZSBib3VuZGFyeSBoZWlnaHRzLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuZ2V0IHVzZXJQcmVmZXJyZWRNYXhpbXVtSGVpZ2h0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuc2V0IHVzZXJQcmVmZXJyZWRNYXhpbXVtSGVpZ2h0KToKICAgICAgICBBZGQgYSBjb252ZW5pZW50IGZ1bmN0aW9uIGZvciBnZXR0aW5nIHRoZSB1c2VyIHByZWZlcnJlZCBzaXplcy4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLnNldCBoZWlnaHQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fZXhwYW5kVmlld0NvbnRhaW5lclNpemUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fdXBkYXRlVmlld0NvbnRhaW5lclNpemVBbmRTY3JvbGxEaXZpZGVyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX3VwZGF0ZVNjcm9sbERpdmlkZXIpOgogICAgICAgIFdoZW4gc2V0dGluZyB0aGUgaGVpZ2h0LCB3ZSB0eXBpY2FsbHkgZHJvcCB0aHJvdWdoIHRvIHVwZGF0aW5nIHRoZQogICAgICAgIGNvbnRhaW5lciBzaXplIHRvIGdldCB0aGUgc2l6ZSB0byBmaXQsIGFuZCB1cGRhdGUgdGhlIHNjcm9sbCBkaXZpZGVyCiAgICAgICAgaWYgbmVlZGVkLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX3Jlc2l6ZXJNb3VzZU1vdmVkKToKICAgICAgICBXaGVuIHRoZSB1c2VyIHJlc2l6ZWQsIHNhdmUgdGhlIGhlaWdodCBpbnRvIFNldHRpbmdzLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUudXBkYXRlTGF5b3V0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuZGlkQXBwZW5kQ29uc29sZU1lc3NhZ2UpOgogICAgICAgIFRpbWVzIHdoZW4gd2UgbmVlZCB0byBhZGp1c3Qgc2l6ZXMuCgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fdmlld0NvbnRhaW5lclNjcm9sbCk6CiAgICAgICAgRG9uJ3QgYWRqdXN0IHRoZSBzaXplLCBqdXN0IHNob3cvaGlkZSB0aGUgZGl2aWRlci4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLl92aWV3Q29udGFpbmVyQ2xpY2suYWZ0ZXJEaXNwYXRjaGVzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX3ZpZXdDb250YWluZXJDbGljay5hZnRlckNsaWNrSGFuZGxpbmcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fdmlld0NvbnRhaW5lckNsaWNrKToKICAgICAgICBBZGp1c3QgdGhlIHNpemUsIGJ1dCBvbmx5IGFmdGVyIGFueSBwb3NzaWJsZSB3b3JrLgoKMjAxMi0wMy0xMiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIERvbid0IGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyIHdoZW4gZXZhbHVhdGluZyBhbiBleHByZXNzaW9uIGluIHRoZSBjb25zb2xlIHRoYXQgdHJpZ2dlcnMgYW4gZXhjZXB0aW9uLgoKICAgICAgICBUaGUgZXhjZXB0aW9uIHdpbGwgc3RpbGwgYmUgbG9nZ2VkIGFzIHRoZSByZXN1bHQgaW4gdGhlIGNvbnNvbGUuIFdlIG1pZ2h0IHR3ZWFrIGhvdyB0aGlzIHdvcmtzIGxhdGVyLAogICAgICAgIGJ1dCByaWdodCBub3cgYnJlYWtpbmcgaW50byB0aGUgZGVidWdnZXIgZm9yIHRoaXMgaXMgYW5ub3lpbmcuIFRoaXMgY2hhbmdlIG1hdGNoZXMgb3BlbiBzb3VyY2UuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0phdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUuX2FwcGVuZENvbW1hbmQpOiBQYXNzIHRydWUgZm9yIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnMgcGFyYW1ldGVyLgoKMjAxMi0wMy0xMiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFJlbW92ZSBhbiBvdmVyemVhbG91cyBhc3NlcnQgaW4gRGVidWdnZXJNYW5hZ2VyLgoKICAgICAgICBUaGUgc2NyaXB0IGlkZW50aWZpZXIgY2FuIGJlIHJldXNlZCwgc28ganVzdCBtYWtlIGEgbmV3IFNjcmlwdCBhbmQgaW5zZXJ0IGl0IGludG8gdGhlIG1hcCBhZ2Fpbi4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGVidWdnZXJNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5zY3JpcHREaWRQYXJzZSk6IFJlbW92ZWQgY29uc29sZS5hc3NlcnQuCgoyMDEyLTAzLTEyICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQ2xlYW4gdXAgdGhlIHN0eWxlcyBmb3IgdGhlIGNvbnNvbGUgYW5kIGxvZyB2aWV3cy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSmF2YVNjcmlwdFRleHRQcm9tcHQuY3NzOgogICAgICAgICguamF2YXNjcmlwdC1wcm9tcHQpOiBBZGp1c3QgdGhlIHBhZGRpbmcgYW5kIHJlbW92ZSB0aGUgbWFyZ2luLgogICAgICAgICogVXNlckludGVyZmFjZS9KYXZhU2NyaXB0VGV4dFByb21wdC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRUZXh0UHJvbXB0KTogU2V0IHRoZSB0ZXh0IHRvICIiIHNvIGEgIjxicj4iIGlzIGluc2VydGVkIGludG8gdGhlIHByb21wdC4gVGhpcyBsZXRzIHRoZSBpbnNlcnRpb24KICAgICAgICBjYXJldCB0byBwb3NpdGlvbiBjb3JyZWN0bHkuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ0NvbnRlbnRWaWV3LmNzczoKICAgICAgICAoLmNvbnNvbGUtbWVzc2FnZSwgLmNvbnNvbGUtdXNlci1jb21tYW5kKTogQWRqdXN0IHRoZSBwYWRkaW5nIGFuZCByZW1vdmUgdGhlIG1hcmdpbi4KICAgICAgICAoLmNvbnNvbGUtbWVzc2FnZTo6YmVmb3JlLCAuY29uc29sZS11c2VyLWNvbW1hbmQ6OmJlZm9yZSwgLmphdmFzY3JpcHQtcHJvbXB0OjpiZWZvcmUsIC5jb25zb2xlLWdyb3VwLXRpdGxlOjpiZWZvcmUpOgogICAgICAgIERvbid0IHVzZSBhIG5lZ2F0aXZlIG1hcmdpbiwgbWFrZSBpdCBhIHBvc2l0aXZlIG9uZS4gVGhlIHBhZGRpbmcgYWJvdmUgbWFrZXMgcm9vbS4KICAgICAgICAoLmNvbnNvbGUtZ3JvdXAtbWVzc2FnZXMgLnNlY3Rpb24gLmhlYWRlcjo6YmVmb3JlKTogQnVtcCB1cCB0aGUgZGlzY2xvc3VyZSB0cmlhbmdsZSwgaXQgd2FzIDFweCB0b28gbG93LgogICAgICAgICguY29uc29sZS1ncm91cC1tZXNzYWdlcyAuc2VjdGlvbiAuaGVhZGVyIC50aXRsZSk6IFJlc2V0IHRoZSBsaW5lLWhlaWdodCB0byBtYWtlIHRoZSBsb2dnZWQgb2JqZWN0IG5vdCB0YWtlIHVwIGV4dHJhIHNwYWNlLgogICAgICAgICogVXNlckludGVyZmFjZS9RdWlja0NvbnNvbGUuY3NzOgogICAgICAgICgucXVpY2stY29uc29sZSA+IC50b29sYmFyID4gLnRleHQtcHJvbXB0ID4gLmphdmFzY3JpcHQtcHJvbXB0KTogUmVkdWNlIHRvcCBwb3NpdGlvbiB0byBiZXR0ZXIgY2VudGVyIHRoZSBwcm9tcHQuCgoyMDEyLTAzLTEyICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IGFuIGlzc3VlIHdoZXJlIHRoZSB3aG9sZSBXZWIgSW5zcGVjdG9yIFVpIHdvdWxkIGp1c3QgMXB4IGFmdGVyIHR5cGluZyBpbiB0aGUgcXVpY2sgY29uc29sZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlLmNzczoKICAgICAgICAoLnF1aWNrLWNvbnNvbGUgPiAudG9vbGJhcik6IFJlbW92ZWQgLXdlYmtpdC1ib3gtc2l6aW5nLgogICAgICAgICgucXVpY2stY29uc29sZSA+IC50b29sYmFyID4gLm5hdmlnYXRpb24tYmFyKTogU2V0IHRoZSBoZWlnaHQgdG8gMjFweCBzbyBpdCBkb2VzIG5vdCBleHRlbmQgb3V0IG9mIC50b29sYmFyLgoKMjAxMi0wMy0xMSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTAzMTk1ODY+IEltcGxlbWVudCB0aGUgUXVpY2sgQ29uc29sZSBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBHaXZlIHRoZSBRdWlja0NvbnNvbGUgYSBMb2dWaWV3Q29udHJvbGxlci4gVGhlIEphdmFTY3JpcHRUZXh0UHJvbXB0IHdpbGwKICAgICAgICBnbyBpbiB0aGUgdG9vbGJhciwgYW5kIHRoZSBWaWV3Q29udGFpbmVyIHdpbGwgaG9sZCB0aGUgQ29uc29sZUdyb3VwIG91dHB1dC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlLmNzczoKICAgICAgICAoLnF1aWNrLWNvbnNvbGUpOgogICAgICAgICgucXVpY2stY29uc29sZSA+IC50b29sYmFyID4gLnRleHQtcHJvbXB0KToKICAgICAgICAoLnF1aWNrLWNvbnNvbGUgPiAudG9vbGJhciA+IC50ZXh0LXByb21wdCA+IC5qYXZhc2NyaXB0LXByb21wdCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1F1aWNrQ29uc29sZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLmRpZEFwcGVuZENvbnNvbGVNZXNzYWdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX21vdXNlV2FzQ2xpY2tlZCk6CgoyMDEyLTAzLTExICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDMxOTU4Nj4gSW1wbGVtZW50IHRoZSBRdWljayBDb25zb2xlIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIEFkZCBhIHNjcm9sbCBkaXZpZGVyIGJveCBzaGFkb3cgd2hlbiB0aGUgUXVpY2sgQ29uc29sZSdzIHZpZXcKICAgICAgICBjb250YWlucyBzY3JvbGxhYmxlIGNvbnRlbnQuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1F1aWNrQ29uc29sZS5jc3M6CiAgICAgICAgKC5xdWljay1jb25zb2xlID4gLnZpZXctY29udGFpbmVyKToKICAgICAgICAoLnF1aWNrLWNvbnNvbGUgPiAudG9vbGJhci5zY3JvbGwtZGl2aWRlcik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1F1aWNrQ29uc29sZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLnNldCBjb2xsYXBzZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5zZXQgaGVpZ2h0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX3Jlc2l6ZXJNb3VzZVVwKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX3VwZGF0ZVNjcm9sbERpdmlkZXIpOgoKMjAxMi0wMy0xMSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTAzMTk1ODY+IEltcGxlbWVudCB0aGUgUXVpY2sgQ29uc29sZSBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBBZGQgSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyIGNsYXNzLiBUaGlzIGhvbGRzIGEgSmF2YVNjcmlwdFRleHRQcm9tcHQKICAgICAgICBmb3IgaW5wdXQgYW5kIGEgQ29uc29sZUdyb3VwIHRvIHB1dCB0aGUgb3V0cHV0IG9mIEphdmFTY3JpcHQgY29tbWFuZHMuCiAgICAgICAgVGhlIGlkZWEgYmVpbmcgdGhhdCB5b3UgY291bGQgc3dhcCBvdXQgZWl0aGVyIHRoZSBpbnB1dCBzb3VyY2Ugb3Igb3V0cHV0CiAgICAgICAgZGVzdGluYXRpb24uIEN1cnJlbnRseSB0aGlzIGNsYXNzIGp1c3Qga25vd3MgaG93IHRvIGRlYWwgd2l0aCBKYXZhU2NyaXB0LgoKICAgICAgICBUaGlzIG1vdmVzIG91dCBtb3N0IG9mIHRoZSByZW1haW5pbmcgSmF2YVNjcmlwdCBrbm93bGVkZ2UgZnJvbQogICAgICAgIExvZ0NvbnRlbnRWaWV3IGFuZCBwdXRzIGl0IGludG8gdGhpcyBuZXcgY29udHJvbGxlci4gVGhlcmUgaXMganVzdCBvbmUKICAgICAgICBkZWxlZ2F0ZSBtZXNzYWdlIGJhY2suCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0phdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLmdldCBwcm9tcHQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZS5nZXQgdG9wQ29uc29sZUdyb3VwKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUuZ2V0IGN1cnJlbnRDb25zb2xlR3JvdXApOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZS5jbGVhcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlLmFwcGVuZENvbnNvbGVNZXNzYWdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUuX3JlcXVlc3RDbGVhck1lc3NhZ2VzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUuX3Byb21wdEtleURvd24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZS5fZW50ZXJLZXlQcmVzc2VkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUuX2FwcGVuZENvbW1hbmQucHJpbnRSZXN1bHQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZS5fYXBwZW5kQ29tbWFuZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlLl9hcHBlbmRDb25zb2xlTWVzc2FnZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ0NvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5tZXNzYWdlQWRkZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLmNvbnNvbGVDbGVhcmVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5kaWRBcHBlbmRDb25zb2xlTWVzc2FnZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX21lc3NhZ2VzQ2xpY2tlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKCjIwMTItMDMtMTEgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTg2PiBJbXBsZW1lbnQgdGhlIFF1aWNrIENvbnNvbGUgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmVtb3ZlIHVudXNlZCBPcGVuU291cmNlIGNvZGUgZnJvbSBMb2dDb250ZW50Vmlldy4KICAgICAgICBBbHNvIHNpbXBsaWZ5IGtleWJvYXJkIHNob3J0Y3V0IHJlZ2lzdHJhdGlvbnMuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnNvbGVDb21tYW5kUmVzdWx0LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1bHQpOgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fYXBwZW5kQ29tbWFuZC5wcmludFJlc3VsdCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX2FwcGVuZENvbW1hbmQpOgoKMjAxMi0wMy0xMSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTAzMTk1ODY+IEltcGxlbWVudCB0aGUgUXVpY2sgQ29uc29sZSBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBBZGQgT3BlblNvdXJjZSdzIENvbnNvbGVWaWV3IGNvcHlyaWdodCBoZWFkZXJzIHRvIEpTVGV4dFByb21wdCwgQ29uc29sZUdyb3VwLCBhbmQgQ29tbWFuZCBmaWxlcy4KICAgICAgICBBZGQgT3BlblNvdXJjZSdzIENvbnNvbGVNZXNzYWdlKiBjb3B5cmlnaHQgaGVhZGVycyB0byBDb25zb2xlTWVzc2FnZSogZmlsZXMuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnNvbGVDb21tYW5kLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9Db25zb2xlQ29tbWFuZFJlc3VsdC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29uc29sZUdyb3VwLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9Db25zb2xlTWVzc2FnZS5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29uc29sZU1lc3NhZ2VJbXBsLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9KYXZhU2NyaXB0VGV4dFByb21wdC5qczoKCjIwMTItMDMtMTEgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTg2PiBJbXBsZW1lbnQgdGhlIFF1aWNrIENvbnNvbGUgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgU3BsaXQgQ29uc29sZUdyb3VwLCBDb25zb2xlQ29tbWFuZCwgYW5kIENvbnNvbGVDb21tYW5kUmVzdWx0IGludG8KICAgICAgICBzZXBhcmF0ZSBmaWxlcyBhbmQgZG8gYSB0aW55IGJpdCBvZiBjbGVhbnVwIHRvIG1hdGNoIHRoZSBTYWZhcmkKICAgICAgICBmcm9udGVuZCBzdHlsZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29uc29sZUNvbW1hbmQuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmQucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZC5jbGVhckhpZ2hsaWdodCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZC5wcm90b3R5cGUuaGlnaGxpZ2h0U2VhcmNoUmVzdWx0cyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZC5wcm90b3R5cGUubWF0Y2hlc1JlZ2V4KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kLnByb3RvdHlwZS50b01lc3NhZ2VFbGVtZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kLnByb3RvdHlwZS5fZm9ybWF0Q29tbWFuZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnNvbGVDb21tYW5kUmVzdWx0LmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1bHQudG9NZXNzYWdlRWxlbWVudCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnNvbGVHcm91cC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlR3JvdXApOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZUdyb3VwLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuQ29uc29sZUdyb3VwLmFkZE1lc3NhZ2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZUdyb3VwLnByb3RvdHlwZS5fdGl0bGVDbGlja2VkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29uc29sZU1lc3NhZ2UuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5jcmVhdGUpOgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dDb250ZW50Vmlldy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgoKMjAxMi0wMy0xMSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTAzMTk1ODY+IEltcGxlbWVudCB0aGUgUXVpY2sgQ29uc29sZSBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBFeHRyYWN0IHRoZSBKYXZhU2NyaXB0IFRleHRQcm9tcHQgZGV0YWlscyBpbnRvIGEgbmV3IGNsYXNzLAogICAgICAgIEphdmFTY3JpcHRUZXh0UHJvbXB0LCB3aGljaCBpcyBhIFRleHRQcm9tcHQgd2l0aCBKYXZhU2NyaXB0CiAgICAgICAgY29tcGxldGlvbiBsb2dpYy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSmF2YVNjcmlwdFRleHRQcm9tcHQuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFRleHRQcm9tcHQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFRleHRQcm9tcHQucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5KYXZhU2NyaXB0VGV4dFByb21wdC5nZXQgcHJvbXB0RWxlbWVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0VGV4dFByb21wdC5wcm90b3R5cGUuY29tcGxldGlvbnMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFRleHRQcm9tcHQucHJvdG90eXBlLl9jb21wbGV0aW9ucy5ldmFsdWF0ZWQuZ2V0Q29tcGxldGlvbnMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFRleHRQcm9tcHQucHJvdG90eXBlLl9jb21wbGV0aW9ucy5ldmFsdWF0ZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFRleHRQcm9tcHQucHJvdG90eXBlLl9jb21wbGV0aW9ucy5yZWNlaXZlZFByb3BlcnR5TmFtZXNGcm9tRXZhbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0VGV4dFByb21wdC5wcm90b3R5cGUuX2NvbXBsZXRpb25zLnJlY2VpdmVkUHJvcGVydHlOYW1lcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0VGV4dFByb21wdC5wcm90b3R5cGUuX2NvbXBsZXRpb25zKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRUZXh0UHJvbXB0LnByb3RvdHlwZS5fcmVwb3J0Q29tcGxldGlvbnMpOgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5kaXNhYmxlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5zaG93bik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX3NjaGVkdWxlU2Nyb2xsSW50b1ZpZXcuc2Nyb2xsSW50b1ZpZXcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9zY2hlZHVsZVNjcm9sbEludG9WaWV3KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5faW1tZWRpYXRlbHlTY3JvbGxJbnRvVmlldyk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKCjIwMTItMDMtMTAgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExMDI1MDM5PiBDb25zb2xlIGVycm9yIHdoZW4gcmlnaHQgY2xpY2tpbmcgaW4gQ29uc29sZTogbWlzc2luZyBXZWJJbnNwZWN0b3IucG9wdWxhdGVIcmVmQ29udGV4dE1lbnUKCiAgICAgICAgUmVtb3ZlIHVubmVjZXNzYXJ5IG9yIHVuc3VwcG9ydGVkIENvbnNvbGUgY29udGV4dG1lbnUgb3B0aW9ucyB0aGF0CiAgICAgICAgY2FtZSBmcm9tIE9wZW5Tb3VyY2UuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ0NvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9oYW5kbGVDb250ZXh0TWVudUV2ZW50KToKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKCjIwMTItMDMtMTEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBEb24ndCBoaWdobGlnaHQgbm9uLWVudW1lcmFibGUgcHJvcGVydGllcyBhdCB0aGUgdG9wIGxldmVsIGZvciBMb2NhbCwgQ2xvc3VyZSwgYW5kIENhdGNoIHNjb3Blcy4KCiAgICAgICAgVGhvc2Ugc2NvcGVzIGFyZSBzeW50aGVzaXplZCBzY29wZSBvYmplY3RzLCB1bmxpa2UgR2xvYmFsIGFuZCBXaXRoIHNjb3Blcy4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4NzcwPgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlLnVwZGF0ZSk6IENoZWNrIGZvciBkb250SGlnaGxpZ2h0Tm9uRW51bWVyYWJsZVByb3BlcnRpZXNBdFRvcExldmVsLgogICAgICAgICogVXNlckludGVyZmFjZS9TY29wZUNoYWluRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjb3BlQ2hhaW5EZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5yZWZyZXNoKTogU2V0IGRvbnRIaWdobGlnaHROb25FbnVtZXJhYmxlUHJvcGVydGllc0F0VG9wTGV2ZWwKICAgICAgICBmb3IgdGhlIExvY2FsLCBDbG9zdXJlLCBhbmQgQ2F0Y2ggc2NvcGVzLgoKMjAxMi0wMy0xMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFNlbGVjdCBhbmQgc2hvdyB0aGUgU2NvcGUgQ2hhaW4gZGV0YWlscyBzaWRlYmFyIHBhbmVsIHdoZW4gcGF1c2VkLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3NzA+CgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5fZGVidWdnZXJEaWRQYXVzZSk6IFNldCBhIGZsYWcgdG8gc2hvdyBpdCB3aGVuIGF2YWlsYWJsZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLl9jb250ZW50QnJvd3NlclJlcHJlc2VudGVkT2JqZWN0c0RpZENoYW5nZSk6IENoZWNrIGZvciB0aGUgZmxhZyBhbmQgc2hvdyB0aGUgcGFuZWwuCgoyMDEyLTAzLTExICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUG9wdWxhdGUgdGhlIFNjb3BlIENoYWluIGRldGFpbHMgc2lkZWJhciBwYW5lbC4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4NzcwPgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiBVcGRhdGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEluY2x1ZGVkIFNjb3BlVmFyaWFibGVUcmVlRWxlbWVudC5qcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2NvcGVDaGFpbkRldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TY29wZUNoYWluRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUucmVmcmVzaCk6IEJ1aWxkIE9iamVjdFByb3BlcnRpZXNTZWN0aW9ucyBhbmQgRGV0YWlsc1NlY3Rpb25zCiAgICAgICAgZm9yIGVhY2ggU2NvcGVDaGFpbk5vZGUgaW4gdGhlIHNjb3BlIGNoYWluLgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NvcGVDaGFpbkRldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLnJlZnJlc2guZGVsYXllZFdvcmspOiBBZGRlZC4gQXBwZW5kIHRoZSBEZXRhaWxzU2VjdGlvbnMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Njb3BlVmFyaWFibGVUcmVlRWxlbWVudC5qczogQ29waWVkIGZyb20gT3BlblNvdXJjZS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Njb3BlQ2hhaW5TaWRlYmFyUGFuZS5qcy4KICAgICAgICBTb21lIGNvZGUgc3R5bGUgY2xlYW4gdXAgYW5kIG1vZGlmaWNhdGlvbnMgdG8gaG93IF9leHBhbmRlZFByb3BlcnRpZXMgYW5kIHRoZSBfcHJvcGVydHlJZGVudGlmaWVyIHByZWZpeCBhcmUgYWNjZXNzZWQuCgoyMDEyLTAzLTExICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQ2xlYW4gdXAgdGhlIHN0eWxlcyBmb3IgcHJvcGVydGllcyBzZWN0aW9ucyBhbmQgc3VwcG9ydCBjcmVhdGlvbiB3aXRob3V0IHRoZSBoZWFkZXIgZWxlbWVudC4KCiAgICAgICAgVGhpcyBpcyBuZWVkZWQgZm9yIHRoZSBTY29wZSBDaGFpbiBzaWRlYmFyIHBhbmVsLgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwuY3NzOgogICAgICAgICguc2lkZWJhciA+IC5wYW5lbC5kZXRhaWxzLmNzcy1zdHlsZSAuc3R5bGVzLXNlY3Rpb24pOiBSZW1vdmVkIHBhZGRpbmcgYW5kIGJhY2tncm91bmQgcHJvcGVydGllcy4KICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuZGV0YWlscy5jc3Mtc3R5bGUgLnN0eWxlcy1zZWN0aW9uIC5oZWFkZXIpOiBSZW1vdmVkIGJhY2tncm91bmQgcHJvcGVydGllcy4KICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuZGV0YWlscy5jc3Mtc3R5bGUgLnN0eWxlcy1zZWN0aW9uLm5vLWhlYWRlciAucHJvcGVydGllcyk6IEFkZGVkLiBSZXNldCBwYWRkaW5nLgogICAgICAgICogVXNlckludGVyZmFjZS9Db21wdXRlZFN0eWxlUHJvcGVydGllc1NlY3Rpb24uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db21wdXRlZFN0eWxlUHJvcGVydGllc1NlY3Rpb24pOiBDYWxsIHRoZSBQcm9wZXJ0aWVzU2VjdGlvbiBjb25zdHJ1Y3RvciBhZnRlcgogICAgICAgIHNvbWUgaW5pdGlhbCBzZXR1cCBzaW5jZSBTZWN0aW9uIHdpbGwgbm93IGNhbGwgZXhwYW5kKCkgd2hlbiB0aGVyZSBpcyBubyBoZWFkZXIuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVPdXRsaW5lLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZU91dGxpbmUpOiBVc2UgdGhlIHN5bnRheC1oaWdobGlnaHRlZCBjbGFzcyBuYW1lIGNvbnN0YW50LgogICAgICAgICogVXNlckludGVyZmFjZS9EZXRhaWxzU2VjdGlvbi5jc3M6CiAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24gPiAuY29udGVudCA+IC5ncm91cCA+IC5yb3cucHJvcGVydGllcyk6IEFkZGVkLiBTcGVjaWZ5IHBhZGRpbmcuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RldGFpbHNTZWN0aW9uUHJvcGVydGllc1Jvdy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRldGFpbHNTZWN0aW9uUHJvcGVydGllc1Jvdyk6IEFkZCB0aGUgc3ludGF4LWhpZ2hsaWdodGVkIGNsYXNzIG5hbWUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Byb3BlcnRpZXNTZWN0aW9uLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUHJvcGVydGllc1NlY3Rpb24pOiBDYWxsIHRoZSBTZWN0aW9uIGNvbnN0cnVjdG9yIGFmdGVyIHNvbWUgaW5pdGlhbCBzZXR1cCBzaW5jZQogICAgICAgIFNlY3Rpb24gd2lsbCBub3cgY2FsbCBleHBhbmQoKSB3aGVuIHRoZXJlIGlzIG5vIGhlYWRlci4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2VjdGlvbi5jc3M6CiAgICAgICAgKC5zZWN0aW9uLmV4cGFuZGVkLm5vLWhlYWRlciAucHJvcGVydGllcyk6IEFkZGVkLiBSZXNldCBwYWRkaW5nLWxlZnQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NlY3Rpb24uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TZWN0aW9uKTogRG9uJ3QgY3JlYXRlIHRoZSBoZWFkZXIgZWxlbWVudCBpZiB0aGVyZSBpZiB0aXRsZSBhbmQgc3VidGl0bGUgYXJlIG5vdAogICAgICAgIHN0cmluZ3Mgb3IgTm9kZXMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N0eWxlUHJvcGVydGllc1NlY3Rpb24uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uKTogUmVtb3ZlZCBzeW50YXgtaGlnaGxpZ2h0ZWQgY2xhc3MgbmFtZSBzaW5jZSBpdCBpcyBhZGRlZAogICAgICAgIGJ5IERldGFpbHNTZWN0aW9uUHJvcGVydGllc1JvdyBub3cuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N5bnRheEhpZ2hsaWdodGluZ0RlZmF1bHRUaGVtZS5jc3M6IFJlbW92ZWQgYmFja2dyb3VuZC1jb2xvciBzbyB0aGlzIGRvZXMgbm90IGNhdXNlCiAgICAgICAgc2lkZWJhciB0byBiZSB3aGl0ZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3ludGF4SGlnaGxpZ2h0aW5nU3VwcG9ydC5qczogQWRkZWQgc3ludGF4LWhpZ2hsaWdodGVkIGNsYXNzIG5hbWUgY29uc3RhbnQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yKTogVXNlIGNvbnN0YW50IGZyb20gU3ludGF4SGlnaGxpZ2h0aW5nU3VwcG9ydC5qcy4KCjIwMTItMDMtMTAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgdGhlIHN0YXJ0IG9mIHRoZSBTY29wZSBDaGFpbiBkZXRhaWxzIHNpZGViYXIgcGFuZWwgd2hpY2ggd2lsbCBzaG93IGFsbCB0aGUgdmFyaWFibGVzCiAgICAgICAgYXZhaWxhYmxlIHdoZW4gcGF1c2VkIGluIHRoZSBkZWJ1Z2dlci4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4NzcwPgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiBVcGRhdGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmF2aWdhdGlvbkl0ZW1WYXJpYWJsZS5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEluY2x1ZGVkIFNjb3BlQ2hhaW5EZXRhaWxzU2lkZWJhclBhbmVsLmpzLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IENyZWF0ZSBhIFNjb3BlQ2hhaW5EZXRhaWxzU2lkZWJhclBhbmVsIGFuZCBpbmNsdWRlIGl0LgogICAgICAgICogVXNlckludGVyZmFjZS9TY29wZUNoYWluRGV0YWlsc1NpZGViYXJQYW5lbC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TY29wZUNoYWluRGV0YWlsc1NpZGViYXJQYW5lbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TY29wZUNoYWluRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuaW5zcGVjdCk6IExvb2sgZm9yIENhbGxGcmFtZSBvYmplY3RzLgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NvcGVDaGFpbkRldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLmdldCBjYWxsRnJhbWUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NvcGVDaGFpbkRldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLnNldCBjYWxsRnJhbWUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NvcGVDaGFpbkRldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLnJlZnJlc2gpOiBOZWVkcyBpbXBsZW1lbnRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dFJlc291cmNlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IHN1cHBsZW1lbnRhbFJlcHJlc2VudGVkT2JqZWN0cyk6IEluY2x1ZGUgX2NhbGxGcmFtZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fdXBkYXRlRXhlY3V0aW9uTGluZU51bWJlcik6IFN0b3JlIHRoZSBhY3RpdmVDYWxsRnJhbWUgd2hlbgogICAgICAgIGl0IGFwcGxpZXMgdG8gdGhpcyByZXNvdXJjZSB0byB3ZSBjYW4gcmV0dXJuIGl0IGluIHN1cHBsZW1lbnRhbFJlcHJlc2VudGVkT2JqZWN0cy4KCjIwMTItMDMtMTAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgc3VwcG9ydCB0byBDb250ZW50VmlldyBmb3Igc3VwcGxlbWVudGFsIHJlcHJlc2VudGVkIG9iamVjdHMuCgogICAgICAgIFN1cHBsZW1lbnRhbCByZXByZXNlbnRlZCBvYmplY3RzIGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUgbW9yZSBtYXRjaGluZyBjaG9pY2VzIHRvIHRoZSBkZXRhaWxzCiAgICAgICAgc2lkZWJhciBwYW5lbHMgZm9yIHRoaW5ncyB0aGF0IGFyZSBhcmUgbm90IHJlcHJlc2VudGVkIGFzIHBhdGggY29tcG9uZW50cyBpbiB0aGUgbmF2aWdhdGlvbiBiYXIuCiAgICAgICAgVGhpcyBzdXBwb3J0IHdpbGwgYmUgdXNlZCB0byBzdXBwbHkgdGhlIGNhbGwgZnJhbWUgdGhhdCBpcyBhY3RpdmUgaW4gYSBUZXh0UmVzb3VyY2VDb250ZW50VmlldywKICAgICAgICBmb3IgdGhlIHB1cnBvc2VzIG9mIHNob3dpbmcgYSBkZXRhaWxzIHNpZGViYXIgcGFuZWwgd2l0aCBzY29wZSBjaGFpbiBpbmZvcm1hdGlvbi4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ2x1c3RlckNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ2x1c3RlckNvbnRlbnRWaWV3KTogTGlzdGVuIGZvciB0aGUgU3VwcGxlbWVudGFsUmVwcmVzZW50ZWRPYmplY3RzRGlkQ2hhbmdlIGV2ZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuQ2x1c3RlckNvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgc3VwcGxlbWVudGFsUmVwcmVzZW50ZWRPYmplY3RzKTogQWRkZWQuIFBhc3MgdGhyb3VnaAogICAgICAgIHRoZSBjdXJyZW50IGNvbnRlbnQgdmlldydzIHN1cHBsZW1lbnRhbFJlcHJlc2VudGVkT2JqZWN0cy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNsdXN0ZXJDb250ZW50Vmlldy5wcm90b3R5cGUuX2NvbnRlbnRWaWV3U3VwcGxlbWVudGFsUmVwcmVzZW50ZWRPYmplY3RzRGlkQ2hhbmdlKTogQWRkZWQuCiAgICAgICAgRmlyZSB0aGUgU3VwcGxlbWVudGFsUmVwcmVzZW50ZWRPYmplY3RzRGlkQ2hhbmdlIG9uIGJlaGFsZiBvZiB0aGUgY3VycmVudCBjb250ZW50IHZpZXcuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRCcm93c2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIpOiBMaXN0ZW4gZm9yIHRoZSBTdXBwbGVtZW50YWxSZXByZXNlbnRlZE9iamVjdHNEaWRDaGFuZ2UgZXZlbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuZ2V0IGN1cnJlbnRSZXByZXNlbnRlZE9iamVjdHMpOiBJbmNsdWRlIHRoZSBjdXJyZW50IGNvbnRlbnQgdmlldydzCiAgICAgICAgc3VwcGxlbWVudGFsUmVwcmVzZW50ZWRPYmplY3RzIGlmIHRoZXkgYXJlIG5vdCBudWxsIGFuZCBub3QgZW1wdHkuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuX2NvbnRlbnRWaWV3U3VwcGxlbWVudGFsUmVwcmVzZW50ZWRPYmplY3RzRGlkQ2hhbmdlKTogQWRkZWQuCiAgICAgICAgRGlzcGF0Y2ggdGhlIEN1cnJlbnRSZXByZXNlbnRlZE9iamVjdHNEaWRDaGFuZ2UgZXZlbnQgc29vbi4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IHN1cHBsZW1lbnRhbFJlcHJlc2VudGVkT2JqZWN0cyk6IEFkZGVkIHN0dWIuCgoyMDEyLTAzLTEwICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgSW5jbHVkZSBzY29wZSB2YXJpYWJsZXMgd2hlbiBkb2luZyBhdXRvY29tcGxldGlvbiBpbiB0aGUgY29uc29sZS4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4NzcwPgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9DYWxsRnJhbWUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DYWxsRnJhbWUucHJvdG90eXBlLmNvbGxlY3RTY29wZUNoYWluVmFyaWFibGVOYW1lcyk6IEFkZGVkLiBXYWxrIHRoZSBzY29wZSBjaGFpbiBhbmQKICAgICAgICByZXF1ZXN0IGFsbCB0aGUgcHJvcGVydGllcyBmb3IgZWFjaCBzY29wZSBub2RlIG9iamVjdC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNhbGxGcmFtZS5wcm90b3R5cGUuY29sbGVjdFNjb3BlQ2hhaW5WYXJpYWJsZU5hbWVzLnByb3BlcnRpZXNDb2xsZWN0ZWQpOiBBZGRlZC4gQWRkIHRoZSBwcm9wZXJ0eQogICAgICAgIG5hbWVzIHRvIHRoZSByZXN1bHQgYW5kIGNhbGwgdGhlIGNhbGxiYWNrIHdoZW4gcGVuZGluZ1JlcXVlc3RzIGlzIDAuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ0NvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9jb21wbGV0aW9ucyk6IFVzZSBDYWxsRnJhbWUuY29sbGVjdFNjb3BlQ2hhaW5WYXJpYWJsZU5hbWVzLgoKMjAxMi0wMy0xMCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFN1cHBvcnQgZXZhbHVhdGluZyBhZ2FpbnN0IHRoZSBsb2NhbCBzY29wZSB3aGVuIHBhdXNlZCBpbiB0aGUgZGVidWdnZXIuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxODc3MD4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuZXZhbEluSW5zcGVjdGVkV2luZG93KTogVXNlIERlYnVnZ2VyQWdlbnQuZXZhbHVhdGVPbkNhbGxGcmFtZQogICAgICAgIHdoZW4gdGhlcmUgaXMgYW4gYWN0aXZlIGNhbGwgZnJhbWUuCgoyMDEyLTAzLTEwICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTW92ZSB0aGUgZmxhc2hpbmcgcHJldmVudGlvbiBjb2RlIGZyb20gRGVidWdTaWRlYmFyUGFuZWwgdG8gRGVidWdnZXJNYW5hZ2VyLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3NzA+CgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RlYnVnU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdTaWRlYmFyUGFuZWwpOiBMaXN0ZW4gZm9yIHRoZSBuZXcgQ2FsbEZyYW1lc0RpZENoYW5nZSBldmVudCBpbnN0ZWFkIG9mCiAgICAgICAgdGhlIFBhdXNlZCBhbmQgUmVzdW1lZCBldmVudHMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3Nob3dOb3RQYXVzZWRFbXB0eUNvbnRlbnRQbGFjZWhvbGRlcik6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdTaWRlYmFyUGFuZWwucHJvdG90eXBlLl91cGRhdGVFbXB0eUNvbnRlbnRQbGFjZWhvbGRlcik6IFVwZGF0ZWQgdGhlIG1lc3NhZ2UuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX2RlYnVnZ2VyQ2FsbEZyYW1lc0RpZENoYW5nZSk6IENoZWNrIGZvciBudWxsIGNhbGxGcmFtZXMKICAgICAgICBhbmQgY2FsbCBfc2hvd05vdFBhdXNlZEVtcHR5Q29udGVudFBsYWNlaG9sZGVyLgogICAgICAgICogVXNlckludGVyZmFjZS9EZWJ1Z2dlck1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLmRlYnVnZ2VyRGlkUGF1c2UpOiBSZW1vdmUgYXNzZXJ0LCBzaW5jZSB3ZSBtaWdodCBiZSBwYXVzZWQgc3RpbGwuCiAgICAgICAgQ2xlYXIgdGhlIGRlbGF5ZWQgcmVzdW1lIHRpbWVvdXQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLmRlYnVnZ2VyRGlkUmVzdW1lKTogRGVsYXkgY2xlYXJpbmcgdGhlIHN0YXRlIGFuZCBmaXJpbmcgZXZlbnRzLgoKMjAxMi0wMy0xMCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBkZWJ1Z2dlciBjb250cm9scyBmb3IgcGF1c2UsIHJlc3VtZSwgc3RlcCBvdmVyLCBzdGVwIGluLCBhbmQgc3RlcCBvdXQuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxODc3MD4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1BhdXNlLnBkZjogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9SZXN1bWUucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1N0ZXBJbnRvLnBkZjogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9TdGVwT3V0LnBkZjogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9TdGVwT3Zlci5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9RdWlja0NvbnNvbGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUpOiBDcmVhdGUgdGhlIGJ1dHRvbiBpdGVtcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX2RlYnVnZ2VyUGF1c2VSZXN1bWVCdXR0b25DbGlja2VkKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLl9kZWJ1Z2dlclN0ZXBPdmVyQnV0dG9uQ2xpY2tlZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fZGVidWdnZXJTdGVwSW50b0J1dHRvbkNsaWNrZWQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX2RlYnVnZ2VyU3RlcE91dEJ1dHRvbkNsaWNrZWQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX2RlYnVnZ2VyRGlkUGF1c2UpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX2RlYnVnZ2VyRGlkUmVzdW1lKTogQWRkZWQuCgoyMDEyLTAzLTEwICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgVXNlIFRvZ2dsZUJ1dHRvbk5hdmlnYXRpb25JdGVtIGZvciB0aGUgcXVpY2sgY29uc29sZSB0b2dnbGUgYnV0dG9uLgoKICAgICAgICBBbHNvIHN0YXJ0IHVzaW5nIHRoZSByaWdodCBhcnR3b3JrIGZvciB0aGUgZ2x5cGguCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxOTU4Nj4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1RvZ2dsZUFycm93RG93bi5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvVG9nZ2xlQXJyb3dVcC5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9RdWlja0NvbnNvbGUuY3NzOiBSZW1vdmVkIHN0eWxlcyB0byBmbGlwIHRoZSBhcnJvdyB3aGVuIGNvbGxhcHNlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlKTogVXNlIFRvZ2dsZUJ1dHRvbk5hdmlnYXRpb25JdGVtLiBBZGQgYSBkaXZpZGVyIHRvIHRoZSBsZWZ0IG9mIHRoZSBidXR0b24uCiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLnNldCBjb2xsYXBzZWQpOiBDaGFuZ2UgdGhlIGltYWdlIGZvciB0aGUgdG9nZ2xlIGJ1dHRvbi4KCjIwMTItMDMtMTAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBSZW1vdmUgUXVpY2tDb25zb2xlQnV0dG9uTmF2aWdhdGlvbkl0ZW0gYW5kIG1lcmdlIGl0cyBmdW5jdGlvbmFsaXR5IGRvd24gaW50byBCdXR0b25OYXZpZ2F0aW9uSXRlbS4KCiAgICAgICAgSGF2aW5nIGEgc3BlY2lhbCBzdWJjbGFzcyBwcmV2ZW50IHVzIGZyb20gdXNpbmcgVG9nZ2xlQnV0dG9uTmF2aWdhdGlvbkl0ZW0gd2l0aG91dCBhZGRpbmcgYW5vdGhlcgogICAgICAgIHNwZWNpYWwgUXVpY2tDb25zb2xlVG9nZ2xlQnV0dG9uTmF2aWdhdGlvbkl0ZW0gc3ViY2xhc3MuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxOTU4Nj4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnV0dG9uTmF2aWdhdGlvbkl0ZW0uY3NzOgogICAgICAgICgubmF2aWdhdGlvbi1iYXIgPiAuaXRlbS5zdXBwcmVzcy1lbWJvc3MgPiAuZ2x5cGgpOgogICAgICAgICgubmF2aWdhdGlvbi1iYXIgPiAuaXRlbS5zdXBwcmVzcy1lbWJvc3M6YWN0aXZlID4gLmdseXBoKToKICAgICAgICAoLm5hdmlnYXRpb24tYmFyID4gLml0ZW0uYnV0dG9uLmRpc2FibGVkID4gLmdseXBoKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnV0dG9uTmF2aWdhdGlvbkl0ZW0uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbSk6IENhbGwgX3VwZGF0ZUltYWdlIGFuZCB0aGUgc3VwcHJlc3MtZW1ib3NzIHN0eWxlIGNsYXNzIGlmIG5lZWRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkJ1dHRvbk5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5zZXQgaW1hZ2UpOiBDYWxsIF91cGRhdGVJbWFnZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkJ1dHRvbk5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5nZW5lcmF0ZVN0eWxlVGV4dCk6IEdlbmVyYXRlIGEgYmFja2dyb3VuZC1zaXplIGZvciBfc3VwcHJlc3NFbWJvc3MuCiAgICAgICAgKFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuX2NhbnZhc0lkZW50aWZpZXIpOiBBZGRlZCBhc3NlcnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuX3VwZGF0ZUltYWdlKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuX2dlbmVyYXRlSW1hZ2VzKTogQWRkZWQgYXNzZXJ0LgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IFJlbW92ZWQgUXVpY2tDb25zb2xlQnV0dG9uTmF2aWdhdGlvbkl0ZW0ue2Nzcyxqc30uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1F1aWNrQ29uc29sZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZSk6IFVzZSBCdXR0b25OYXZpZ2F0aW9uSXRlbS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlQnV0dG9uTmF2aWdhdGlvbkl0ZW0uY3NzOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9RdWlja0NvbnNvbGVCdXR0b25OYXZpZ2F0aW9uSXRlbS5qczogUmVtb3ZlZC4KCjIwMTItMDMtMTAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIGxpbmUgbnVtYmVycyBpbiB0aGUgQnJlYWtwb2ludCBzaWRlYmFyIGJlIDEtYmFzZWQuIEFsc28gZml4ZXMgYSBjb3VwbGUgYXNzZXJ0cyB0aGF0IHRoZQogICAgICAgIGJyZWFrcG9pbnQgbGluZU51bWJlciBpcyAwLWJhc2VkLgoKICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnJlYWtwb2ludC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQpOiBGaXggYXNzZXJ0LgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUuc2V0IGxpbmVOdW1iZXIpOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnJlYWtwb2ludFRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludFRyZWVFbGVtZW50LnByb3RvdHlwZS5fdXBkYXRlTWFpblRpdGxlKTogQWRkIDEgdG8gdGhlIHVzZXIgdmlzaWJsZSBudW1iZXIuCgoyMDEyLTAzLTEwICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgU2VsZWN0IHRoZSBEZWJ1ZyBzaWRlYmFyIHBhbmVsIGFuZCBzaG93IHRoZSBuYXZpZ2F0aW9uIHNpZGViYXIgd2hlbiB0aGUgZGVidWdnZXIgcGF1c2VzLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3NzA+CgogICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IEFkZGVkIFBhdXNlZCBldmVudCBsaXN0ZW5lci4KICAgICAgICAoV2ViSW5zcGVjdG9yLl9kZWJ1Z2dlckRpZFBhdXNlKTogQWRkZWQuCgoyMDEyLTAzLTEwICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgSGlnaGxpZ2h0IHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBsaW5lLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3NzA+CgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RlYnVnU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9kZWJ1Z2dlckRpZFBhdXNlKTogU2VsZWN0IHRoZSBhY3RpdmUgY2FsbCBmcmFtZSB0cmVlIGVsZW1lbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3RyZWVFbGVtZW50U2VsZWN0ZWQpOiBTZXQgdGhlIGFjdGl2ZSBjYWxsIGZyYW1lLgogICAgICAgICogVXNlckludGVyZmFjZS9EZWJ1Z2dlck1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLmdldCBhY3RpdmVDYWxsRnJhbWUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUuc2V0IGFjdGl2ZUNhbGxGcmFtZSk6IEFkZGVkLiBGaXJlIEFjdGl2ZUNhbGxGcmFtZURpZENoYW5nZQogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5kZWJ1Z2dlckRpZFBhdXNlKTogU2V0IF9hY3RpdmVDYWxsRnJhbWUgYW5kIGZpcmUgQWN0aXZlQ2FsbEZyYW1lRGlkQ2hhbmdlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5kZWJ1Z2dlckRpZFJlc3VtZSk6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvSW5zdHJ1Y3Rpb25Qb2ludGVyLnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9JbnN0cnVjdGlvblBvaW50ZXJAMngucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5jc3M6CiAgICAgICAgKC50ZXh0LWVkaXRvciA+IC5ndXR0ZXIgPiAubGluZS1udW1iZXIuZXhlY3V0aW9uLWxpbmU6OmFmdGVyKToKICAgICAgICAoLnRleHQtZWRpdG9yIC50ZXh0LWVkaXRvci10ZXh0LWNodW5rLmV4ZWN1dGlvbi1saW5lKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IpOiBJbml0aWFsaXplIF9leGVjdXRpb25MaW5lTnVtYmVyIHRvIE5hTi4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLmdldCBleGVjdXRpb25MaW5lTnVtYmVyKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zZXQgZXhlY3V0aW9uTGluZU51bWJlcik6IEFkZGVkLiBDYWxsIF91cGRhdGVFeGVjdXRpb25MaW5lTnVtYmVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuc2luZ2xlTGluZUVsZW1lbnRGb3JMaW5lKTogSGFuZGxlIGEgbnVsbCByZXN1bHQgZnJvbSBfdGV4dENodW5rRm9yTGluZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl91cGRhdGVFeGVjdXRpb25MaW5lTnVtYmVyKTogQWRkZWQuIFJlbW92ZXMgZnJvbSB0aGUgb2xkIGxpbmUgYW5kIGFkZHMgdG8gdGhlIG5ldy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl91cGRhdGVMaW5lTnVtYmVycyk6IE1ha2UgbGluZU51bWJlciAwLWJhc2VkIGluc3RlYWQgb2YgMS1iYXNlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9hZGRCcmVha3BvaW50RWxlbWVudFRvTGluZUVsZW1lbnRXaXRoSW5mbyk6IEFkZCAxIGZvciB1c2VyIHZpc2libGUgbGluZSBudW1iZXJzLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3JlbW92ZVBvc3NpYmxlQnJlYWtwb2ludEVsZW1lbnRGcm9tTGluZUVsZW1lbnQpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl90ZXh0Q2h1bmtGb3JMaW5lKTogSGFuZGxlIG5lZ2F0aXZlIG51bWJlcnMgYW5kIE5hTi4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9icmVha1RleHRDaHVua0F0SW5kZXhJbnRvU2luZ2xlTGluZVRleHRDaHVua3MpOiBBc3NlcnQgdGhlIHRleHRDaHVuayBpc24ndCBudWxsLgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5jb250ZW50QXZhaWxhYmxlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fdXBkYXRlRXhlY3V0aW9uTGluZU51bWJlcik6CgoyMDEyLTAzLTA5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUG9wdWxhdGUgdGhlIERlYnVnIHNpZGViYXIgd2l0aCBjYWxsIGZyYW1lcyB3aGVuIHRoZSBkZWJ1Z2dlciBwYXVzZXMuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxODc3MD4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczogVXBkYXRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ2FsbEZyYW1lSWNvbnMuY3NzOiBBZGRlZC4KICAgICAgICAoLmZ1bmN0aW9uLWljb24gLmljb24pOgogICAgICAgICguZXZlbnQtbGlzdGVuZXItaWNvbiAuaWNvbik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NhbGxGcmFtZVRyZWVFbGVtZW50LmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNhbGxGcmFtZVRyZWVFbGVtZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNhbGxGcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5nZXQgY2FsbEZyYW1lKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGVidWdTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z1NpZGViYXJQYW5lbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3VwZGF0ZUVtcHR5Q29udGVudFBsYWNlaG9sZGVyKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX2RlYnVnZ2VyRGlkUGF1c2UpOiBBZGRlZC4gQ3JlYXRlIENhbGxGcmFtZVRyZWVFbGVtZW50cy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fZGVidWdnZXJEaWRSZXN1bWUpOiBBZGRlZC4gU2V0IGEgdGltZW91dCBmb3IgZGVsYXllZFdvcmsuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX2RlYnVnZ2VyRGlkUmVzdW1lLmRlbGF5ZWRXb3JrKTogQWRkZWQuIFJlbW92ZSB0aGUgdHJlZSBlbGVtZW50cy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdHJlZUVsZW1lbnRTZWxlY3RlZCk6IEFkZGVkLiBTaG93IHRoZSByZXNvdXJjZSBzb3VyY2UgY29kZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0V2ZW50TGlzdGVuZXIucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0Z1bmN0aW9uLnBkZjogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZWQgQ2FsbEZyYW1lSWNvbnMuY3NzIGFuZCBDYWxsRnJhbWVUcmVlRWxlbWVudC5qcy4KCjIwMTItMDMtMDkgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBQcm9jZXNzIHRoZSBjYWxsIGZyYW1lcyB3aGVuIHRoZSBkZWJ1Z2dlciBwYXVzZXMgYW5kIGNyZWF0ZSBlYXN5IHRvIHVzZSBvYmplY3RzLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3NzA+CgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NhbGxGcmFtZS5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DYWxsRnJhbWUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ2FsbEZyYW1lLnByb3RvdHlwZS5nZXQgaWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ2FsbEZyYW1lLnByb3RvdHlwZS5nZXQgc2NyaXB0TG9jYXRpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ2FsbEZyYW1lLnByb3RvdHlwZS5nZXQgZnVuY3Rpb25OYW1lKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNhbGxGcmFtZS5wcm90b3R5cGUuZ2V0IHRoaXNPYmplY3QpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ2FsbEZyYW1lLnByb3RvdHlwZS5nZXQgc2NvcGVDaGFpbik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RlYnVnZ2VyTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUuZ2V0IGNhbGxGcmFtZXMpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUuZGVidWdnZXJEaWRQYXVzZSk6IFByb2Nlc3MgdGhlIGNhbGxGcmFtZXNQYXlsb2FkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5kZWJ1Z2dlckRpZFJlc3VtZSk6IENsZWFyIHRoZSBfY2FsbEZyYW1lcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUuX3NjcmlwdExvY2F0aW9uRnJvbVBheWxvYWQpOiBBZGRlZC4gSGVscGVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5fc2NvcGVDaGFpbkZyb21QYXlsb2FkKTogQWRkZWQuIEhlbHBlci4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUuX3Njb3BlQ2hhaW5Ob2RlRnJvbVBheWxvYWQpOiBBZGRlZC4gSGVscGVyLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEluY2x1ZGVkIENhbGxGcmFtZS5qcywgU2NvcGVDaGFpbk5vZGUuanMsIGFuZCBTY3JpcHRMb2NhdGlvbi5qcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2NvcGVDaGFpbk5vZGUuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NvcGVDaGFpbk5vZGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NvcGVDaGFpbk5vZGUucHJvdG90eXBlLmdldCB0eXBlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjb3BlQ2hhaW5Ob2RlLnByb3RvdHlwZS5nZXQgb2JqZWN0KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2NyaXB0TG9jYXRpb24uanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0TG9jYXRpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0TG9jYXRpb24ucHJvdG90eXBlLmdldCBzY3JpcHQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0TG9jYXRpb24ucHJvdG90eXBlLmdldCBsaW5lTnVtYmVyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdExvY2F0aW9uLnByb3RvdHlwZS5nZXQgY29sdW1uTnVtYmVyKToKCjIwMTItMDMtMDkgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBUcmFjayB0aGUgcGF1c2VkIHN0YXRlIG9mIHRoZSBkZWJ1Z2dlciBhbmQgYWRkIGZ1bmN0aW9ucyB0byBwYXVzZSwgcmVzdW1lLCBhbmQgc3RlcC4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4NzcwPgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9EZWJ1Z2dlck1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLmdldCBwYXVzZWQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUucGF1c2UpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUucmVzdW1lKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLnN0ZXBPdmVyKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLnN0ZXBJbnRvKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLnJlc2V0KTogUmVzZXQgX3BhdXNlZCBhbmQgZmlyZSB0aGUgUmVzdW1lZCBldmVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUuZGVidWdnZXJEaWRQYXVzZSk6IFNldCBfcGF1c2VkIGFuZCBmaXJlIHRoZSBQYXVzZWQgZXZlbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLmRlYnVnZ2VyRGlkUmVzdW1lKTogU2V0IF9wYXVzZWQgYW5kIGZpcmUgdGhlIFJlc3VtZWQgZXZlbnQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RlYnVnZ2VyT2JzZXJ2ZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck9ic2VydmVyLnByb3RvdHlwZS5wYXVzZWQpOiBDYWxsIERlYnVnZ2VyTWFuYWdlci5kZWJ1Z2dlckRpZFBhdXNlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJPYnNlcnZlci5wcm90b3R5cGUucmVzdW1lZCk6IENhbGwgRGVidWdnZXJNYW5hZ2VyLmRlYnVnZ2VyRGlkUmVzdW1lLgoKMjAxMi0wMy0wOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBXZWJJbnNwZWN0b3IuU2NyaXB0IGFuZCBjcmVhdGUgdGhlbSB3aGVuIHNjcmlwdHMgYXJlIHBhcnNlZC4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4NzcwPgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9EZWJ1Z2dlck1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXNldCk6IENsZWFyIHRoZSBzY3JpcHQgbWFwLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5zY3JpcHREaWRQYXJzZSk6IEFkZGVkLiBDcmVhdGUgYSBTY3JpcHQgaW5zdGFuY2UKICAgICAgICBhbmQgYWRkIGl0IHRvIHRoZSBpZCBtYXAuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RlYnVnZ2VyT2JzZXJ2ZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck9ic2VydmVyLnByb3RvdHlwZS5zY3JpcHRQYXJzZWQpOiBDYWxsIERlYnVnZ2VyTWFuYWdlci5zY3JpcHREaWRQYXJzZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlZCBTY3JpcHQuanMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NjcmlwdC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlwZS5nZXQgaWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlwZS5nZXQgcmFuZ2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlwZS5nZXQgdXJsKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUuZ2V0IHVybENvbXBvbmVudHMpOgoKMjAxMi0wMy0wOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBhIHdheSB0byBicmVhayBvbiBhbGwgZXhjZXB0aW9ucyBhbmQgdW5jYXVnaHQgZXhjZXB0aW9ucy4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4NzcwJjEwMzE4Nzc3PgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4gYW5kIEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6IFVwZGF0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0JyZWFrcG9pbnRJY29ucy5jc3M6CiAgICAgICAgKC5icmVha3BvaW50LWV4Y2VwdGlvbi1pY29uIC5pY29uKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0JyZWFrcG9pbnRTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50U2lkZWJhclBhbmVsKTogQ3JlYXRlIEJyZWFrcG9pbnRUcmVlRWxlbWVudHMgZm9yIHRoZSB0d28gZXhjZXB0aW9uIGJyZWFrcG9pbnRzLgogICAgICAgICogVXNlckludGVyZmFjZS9CcmVha3BvaW50VHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50VHJlZUVsZW1lbnQpOiBBZGQgc3VwcG9ydCBmb3IgYSBjdXN0b20gc3R5bGUgY2xhc3MgYW5kIHRpdGxlLgogICAgICAgICogVXNlckludGVyZmFjZS9EZWJ1Z2dlck1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIpOiBDcmVhdGUgYW4gYWxsIGV4Y2VwdGlvbnMgYW5kIGFuZCBhbGwgdW5jYXVnaHQgZXhjZXB0aW9ucyBicmVha3BvaW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXQgYWxsRXhjZXB0aW9uc0JyZWFrcG9pbnQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUuZ2V0IGFsbFVuY2F1Z2h0RXhjZXB0aW9uc0JyZWFrcG9pbnQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUuYnJlYWtwb2ludFJlc29sdmVkKTogUmVtb3ZlIGFuIG92ZXJ6ZWFsb3VzIGFzc2VydC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUuX2JyZWFrcG9pbnREaXNhYmxlZFN0YXRlRGlkQ2hhbmdlKTogSW50ZXJjZXB0IHRoZSBleGNlcHRpb24gYnJlYWtwb2ludHMKICAgICAgICBhbmQgY2FsbCBfdXBkYXRlQnJlYWtPbkV4Y2VwdGlvbnNTdGF0ZSBhZnRlciB1cGRhdGluZyB0aGUgc2V0dGluZ3MuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLl91cGRhdGVCcmVha09uRXhjZXB0aW9uc1N0YXRlKTogQWRkZWQuIENvbW11bmljYXRlIHRoZSBzdGF0ZSB0byB0aGUKICAgICAgICBiYWNrZW5kIGFuZCB1cGRhdGUgcmVzb2x2ZWQgc3RhdGUuCgoyMDEyLTAzLTEwICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDMxOTU4Nj4gSW1wbGVtZW50IHRoZSBRdWljayBDb25zb2xlIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIEFsbG93IHJlc2l6aW5nIG9mIHRoZSBxdWljayBjb25zb2xlLiBUaGUgcXVpY2sgY29uc29sZSBiZWhhdmVzIGxpa2UKICAgICAgICBzaWRlYmFycy4gSXQgdG9nZ2xlcyBjb2xsYXBzZWQgc3RhdGUgd2hlbiBkb3VibGUgY2xpY2tlZCwgYW5kIG9wZW5zCiAgICAgICAgb3IgY2xvc2VzIHdoZW4gcmVzaXppbmcuIFRoZSBhbGxvd2VkIG1heGltdW0gaGVpZ2h0IGlzIDc1JSBvZiB0aGUKICAgICAgICBzY3JlZW4uIFdoZW4gdGhlIHdpbmRvdyBpcyByZXNpemVkIHNtYWxsZXIsIHdlIG1heSBuZWVkIHRvIHNob3J0ZW4KICAgICAgICB0aGUgY29uc29sZSB0byBiZSB3aXRoaW4gdGhlIDc1JS4KCiAgICAgICAgUmVtZW1iZXIgdGhlIGhlaWdodCBiZWZvcmUgd2UgY29sbGFwc2VkIHNvIHRoYXQgaWYgeW91IHRvZ2dsZQogICAgICAgIGltbWVkaWF0ZWx5IGl0IHdpbGwgcmVzdG9yZSB0aGUgaGVpZ2h0IHRvIHdoYXQgaXQgd2FzLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuX2NvbnRlbnRCcm93c2VyU2l6ZURpZENoYW5nZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1F1aWNrQ29uc29sZS5jc3M6CiAgICAgICAgKC5xdWljay1jb25zb2xlKToKICAgICAgICAoLnF1aWNrLWNvbnNvbGUgPiAucmVzaXplcik6CiAgICAgICAgUG9zaXRpb24gdGhlIHF1aWNrLWNvbnNvbGUgcmVzaXplciBsaWtlIGEgc2lkZWJhciByZXNpemVyLiA1cHgKICAgICAgICB3aWRlLCB3aXRoIGEgY291cGxlIHBpeGVscyBhYm92ZSBhbmQgYmVsb3cgdGhlIGJvcmRlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1F1aWNrQ29uc29sZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLmdldCBjb2xsYXBzZWRIZWlnaHQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5nZXQgbWluaW11bVVuY29sbGFwc2VkSGVpZ2h0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuZ2V0IG1heGltdW1VbmNvbGxhcHNlZEhlaWdodCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLnVwZGF0ZUxheW91dCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLmdldCBoZWlnaHQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5zZXQgaGVpZ2h0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuX3RvZ2dsZUJ1dHRvbkNsaWNrZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fcmVzaXplckRvdWJsZUNsaWNrZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5fcmVzaXplck1vdXNlRG93bik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLl9yZXNpemVyTW91c2VNb3ZlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLl9yZXNpemVyTW91c2VVcCk6CgoyMDEyLTAzLTA5ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDMxOTU4Nj4gSW1wbGVtZW50IHRoZSBRdWljayBDb25zb2xlIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFB1bGwgdGhlIGNvbnNvbGUgb3V0IG9mIENvbnRlbnRCcm93c2VyIGFuZCBpbnN0ZWFkIGp1c3QgcHV0IGl0IHVuZGVybmVhdGguCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRCcm93c2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIpOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmNzczoKICAgICAgICAoI2NvbnRlbnQpOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlLmNzczoKICAgICAgICAoI3F1aWNrLWNvbnNvbGUpOgogICAgICAgICgjcXVpY2stY29uc29sZS5jb2xsYXBzZWQpOgogICAgICAgICgjcXVpY2stY29uc29sZSAubmF2aWdhdGlvbi1iYXIgPiAuY29uc29sZS10b2dnbGUpOgogICAgICAgICgjcXVpY2stY29uc29sZS5jb2xsYXBzZWQgLm5hdmlnYXRpb24tYmFyID4gLmNvbnNvbGUtdG9nZ2xlKToKICAgICAgICAoI3F1aWNrLWNvbnNvbGUgPiAucXVpY2stY29uc29sZS12aWV3LWNvbnRhaW5lcik6CiAgICAgICAgKCNxdWljay1jb25zb2xlID4gLnF1aWNrLWNvbnNvbGUtdG9vbGJhcik6CiAgICAgICAgKCNxdWljay1jb25zb2xlID4gLnF1aWNrLWNvbnNvbGUtdG9vbGJhciA+IC5xdWljay1jb25zb2xlLXRleHQtcHJvbXB0KToKICAgICAgICAoI3F1aWNrLWNvbnNvbGUgPiAucXVpY2stY29uc29sZS10b29sYmFyID4gLm5hdmlnYXRpb24tYmFyKToKCjIwMTItMDMtMDkgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTg2PiBJbXBsZW1lbnQgdGhlIFF1aWNrIENvbnNvbGUgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgQWRkIGEgdG9nZ2xlIGJ1dHRvbiB0byB0aGUgcXVpY2sgY29uc29sZSdzIG5hdmlnYXRpb24gYmFyLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiAgICAgICAgCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICBNaXNjIGNoYW5nZXMuCgogICAgICAgICogVXNlckludGVyZmFjZS9CdXR0b25OYXZpZ2F0aW9uSXRlbS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkJ1dHRvbk5hdmlnYXRpb25JdGVtKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkJ1dHRvbk5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5nZXQgZ2x5cGhFbGVtZW50KToKICAgICAgICBFeHBvc2UgZ2x5cGhFbGVtZW50IGZvciBRdWlja0NvbnNvbGUgYnV0dG9ucyB0byB1c2UuCiAgICAgICAgQWRkIGEgd2F5IHRvIHN1cHByZXNzIGNyZWF0aW5nIGVtYm9zc2VkIGltYWdlcy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1F1aWNrQ29uc29sZUJ1dHRvbk5hdmlnYXRpb25JdGVtLmNzczogQWRkZWQuCiAgICAgICAgKC5uYXZpZ2F0aW9uLWJhciA+IC5pdGVtLnF1aWNrLWNvbnNvbGUtYnV0dG9uKToKICAgICAgICAoLm5hdmlnYXRpb24tYmFyID4gLml0ZW0ucXVpY2stY29uc29sZS1idXR0b246YWN0aXZlKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlQnV0dG9uTmF2aWdhdGlvbkl0ZW0uanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlQnV0dG9uTmF2aWdhdGlvbkl0ZW0pOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlQnV0dG9uTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLmdlbmVyYXRlU3R5bGVUZXh0KToKICAgICAgICBUaGUgUXVpY2tDb25zb2xlIGJ1dHRvbnMgYXJlIGp1c3Qgc3R5bGVkIHdpdGggZGlmZmVyZW50IG9wYWNpdGllcy4gV2UKICAgICAgICBjYW4gcmVtb3ZlIG1vc3Qgb2YgdGhlIGN1c3RvbSBOYXZpZ2F0aW9uSXRlbSBzdHlsZXMgYW5kIHNldCB0aGUgZ2x5cGgKICAgICAgICBpbWFnZSBkaXJlY3RseS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1F1aWNrQ29uc29sZS5jc3M6CiAgICAgICAgKC5xdWljay1jb25zb2xlIC5uYXZpZ2F0aW9uLWJhciA+IC5jb25zb2xlLXRvZ2dsZSk6CiAgICAgICAgKC5xdWljay1jb25zb2xlLmNvbGxhcHNlZCAubmF2aWdhdGlvbi1iYXIgPiAuY29uc29sZS10b2dnbGUpOgogICAgICAgICogVXNlckludGVyZmFjZS9RdWlja0NvbnNvbGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5nZXQgY29sbGFwc2VkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZS5wcm90b3R5cGUuc2V0IGNvbGxhcHNlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUucHJvdG90eXBlLl90b2dnbGVCdXR0b25DbGlja2VkKToKICAgICAgICBHaXZlIHRoZSBjb25zb2xlIGEgdG9nZ2xlIGJ1dHRvbi4KCjIwMTItMDMtMDkgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTg2PiBJbXBsZW1lbnQgdGhlIFF1aWNrIENvbnNvbGUgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgVmlldyBoaWVyYXJjaHkgZm9yIHRoZSBxdWljayBjb25zb2xlOgoKICAgICAgICAgIDxkaXYgY2xhc3M9InF1aWNrLWNvbnNvbGUiPgogICAgICAgICAgICAgIDwhLS0KICAgICAgICAgICAgICAgIENvbnRlbnQgdmlldyBjb250YWluZXIuIFdoZW4gdGhlIGNvbnNvbGUgYWRqdXN0cyBpdHMgaGVpZ2h0IHRoaXMgYmVjb21lcwogICAgICAgICAgICAgICAgdmlzaWJsZS4gVGhpcyBmbGV4IGZpbGxzIHRoZSB2ZXJ0aWNhbCBzcGFjZS4KICAgICAgICAgICAgICAtLT4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2aWV3LWNvbnRhaW5lciI+PC9kaXY+CgogICAgICAgICAgICAgIDwhLS0KICAgICAgICAgICAgICAgIFRvb2xiYXIgZml4ZWQgdG8gdGhlIGJvdHRvbS4gVGV4dFByb21wdCBhbmQgTmF2aWdhdGlvbkJhciB3aXRoIGJ1dHRvbnMuCiAgICAgICAgICAgICAgICBGaXhlZCBoZWlnaHQsIHBvc2l0aW9uOnJlbGF0aXZlIHRvIGFwcGVhciBvbiB0b3AsIGFuZCB0aGUgdGV4dC1wcm9tcHQKICAgICAgICAgICAgICAgIGZsZXggZmlsbHMgaG9yaXpvbnRhbGx5LgogICAgICAgICAgICAgIC0tPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXIiPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXh0LXByb21wdCIgY29udGVudGVkaXRhYmxlPSJ0cnVlIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmF2aWdhdGlvbi1iYXIiPjwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlLmNzczoKICAgICAgICAoLnF1aWNrLWNvbnNvbGUpOgogICAgICAgICgucXVpY2stY29uc29sZS5jb2xsYXBzZWQpOgogICAgICAgICgucXVpY2stY29uc29sZSA+IC52aWV3LWNvbnRhaW5lcik6CiAgICAgICAgKC5xdWljay1jb25zb2xlID4gLnRvb2xiYXIpOgogICAgICAgICgucXVpY2stY29uc29sZSA+IC50b29sYmFyID4gLnRleHQtcHJvbXB0KToKICAgICAgICAoLnF1aWNrLWNvbnNvbGUgPiAudG9vbGJhciA+IC5uYXZpZ2F0aW9uLWJhcik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1F1aWNrQ29uc29sZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUuZ2V0IGVsZW1lbnQpOgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUXVpY2tDb25zb2xlTmF2aWdhdGlvbkJhci5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGVOYXZpZ2F0aW9uQmFyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlF1aWNrQ29uc29sZU5hdmlnYXRpb25CYXIucHJvdG90eXBlLmFkZE5hdmlnYXRpb25JdGVtKToKICAgICAgICBBZGQgbmF2aWdhdGlvbiBpdGVtcyBvbiB0aGUgbGVmdC4gU2luY2Ugd2Ugd2lsbCBhbHdheXMgd2FudCB0aGUgdG9nZ2xlIGJ1dHRvbiBvbiB0aGUgcmlnaHQuCgoyMDEyLTAzLTA5ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDMxOTU4Nj4gSW1wbGVtZW50IHRoZSBRdWljayBDb25zb2xlIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIEFkZCB0aGUgUXVpY2tDb25zb2xlIHRvIHRoZSBib3R0b20gb2YgdGhlIENvbnRlbnRCcm93c2VyLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCiAgICAgICAgCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRCcm93c2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIpOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1F1aWNrQ29uc29sZS5jc3M6IEFkZGVkLgogICAgICAgICgucXVpY2stY29uc29sZSk6CiAgICAgICAgKGJvZHkud2luZG93LWluYWN0aXZlIC5uYXZpZ2F0aW9uLWJhcik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1F1aWNrQ29uc29sZS5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5RdWlja0NvbnNvbGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUXVpY2tDb25zb2xlLnByb3RvdHlwZS5nZXQgZWxlbWVudCk6CgoyMDEyLTAzLTA5ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTAxNzc1Mz4gU29tZXRpbWVzIExvYWQgZXZlbnQtbWFya2VyIGRvZXNuJ3Qgc2hvdyB1cCAoOTklKQoKICAgICAgICBXaGVuIGFuIGV2ZW50LW1hcmtlciBpcyB2ZXJ5IGNsb3NlIHRvLCBidXQgbm90LCB0aGUgbmV3IG1heGltdW0gYm91bmRhcnkKICAgICAgICB0aGUgbWF4aW11bSBib3VuZGFyeSB3YXNuJ3QgYmVpbmcgZXh0ZW5kZWQgdG8gYWxsb3cgZm9yIGEgbmljZSBkaXNwbGF5IG9mCiAgICAgICAgdGhlIGV2ZW50LW1hcmtlci4gTm93LCBpZiB0aGUgZXZlbnQtbWFya2VyIGlzIHdpdGhpbiAzJSBvZiB0aGUgbWF4aW11bQogICAgICAgIGJvdW5kYXJ5LCB0aGVuIGp1c3QgZXh0ZW5kIHRoZSBtYXhpbXVtIGJvdW5kYXJ5IGJ5IDMlLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9OZXR3b3JrR3JhcGhDYWxjdWxhdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya1RpbWVDYWxjdWxhdG9yLnByb3RvdHlwZS51cGRhdGVCb3VuZGFyaWVzRm9yRXZlbnRNYXJrZXIpOgoKMjAxMi0wMy0wOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEZvbGxvdyB1cCB0byBteSBwcmV2aW91cyBmaXggZm9yIHJlbG9hZGluZyB0aGUgcGFnZSBzb21ldGltZXMgcmVtb3ZlcyB0aGUgbWFpbiByZXNvdXJjZSBmcm9tIGJyZWFrcG9pbnRzLgoKICAgICAgICBOb3QgYWxsIGJyZWFrcG9pbnRzIHBhc3MgaW4gdGhlIHJlc291cmNlIHRvIF9hZGRCcmVha3BvaW50LiBJZiByZXNvdXJjZSB3YXMgdW5kZWZpbmVkIGl0IHdvdWxkIGNhdXNlCiAgICAgICAgYSBuZXcgUmVzb3VyY2VUcmVlRWxlbWVudCB0byBiZSBjcmVhdGVkIGZvciBlYWNoIGJyZWFrcG9pbnQuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0JyZWFrcG9pbnRTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50U2lkZWJhclBhbmVsLnByb3RvdHlwZS5fYWRkQnJlYWtwb2ludCk6IExvb2t1cCB0aGUgcmVzb3VyY2UgZmlyc3QsCiAgICAgICAgc28gaXQgY2FuIGFsd2F5cyBiZSBjb21wYXJlZCB0byB0aGUgUmVzb3VyY2VUcmVlRWxlbWVudCdzIHJlc291cmNlLgoKMjAxMi0wMy0wOCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBGb2xsb3ctdXAgcGF0Y2ggdG8gY2xlYW4gdXAgRE9NVHJlZU1hbmFnZXIgZXZlbnRzIGRhdGEuCgogICAgICAgIEFsd2F5cyBwYXNzIHRoZSBub2RlIGFzICJub2RlIiBhbmQgcGFyZW50Tm9kZSBhcyAicGFyZW50Ii4gVGhlcmUgd2FzCiAgICAgICAgb25lIGNhc2UgbG9va2luZyBmb3IgcGFyZW50Tm9kZSB0aGF0IHdhcyB0b3RhbGx5IHdyb25nLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlQ29udGVudFZpZXcucHJvdG90eXBlLl9kb21Ob2RlQ2hhbmdlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIucHJvdG90eXBlLl9jaGFyYWN0ZXJEYXRhTW9kaWZpZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIucHJvdG90eXBlLl9jaGlsZE5vZGVJbnNlcnRlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVVcGRhdGVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZVVwZGF0ZXIucHJvdG90eXBlLl9jaGFyYWN0ZXJEYXRhTW9kaWZpZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZVVwZGF0ZXIucHJvdG90eXBlLl9ub2RlSW5zZXJ0ZWQpOgoKMjAxMi0wMy0wOCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTEwMDUwODI+IEVkaXRpbmcgbm9kZSBhdHRyaWJ1dGUgc2hvdWxkIG9yIEhUTUwgc2hvdWxkIHVwZGF0ZSBQYXRoIENvbXBvbmVudHMKCiAgICAgICAgVXBkYXRlIHBhdGggY29tcG9uZW50cyB3aGVuIHRoZSBzZWxlY3RlZCBub2RlIGhhcyBhbiBhdHRyaWJ1dGUKICAgICAgICBvciBjaGFyYWN0ZXIgZGF0YSBjaGFuZ2UuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVDb250ZW50Vmlldyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlQ29udGVudFZpZXcucHJvdG90eXBlLl9kb21Ob2RlQ2hhbmdlZCk6CiAgICAgICAgSW4gdGhlIGF0dHJpYnV0ZSBldmVudHMgdGhlIGNoYW5nZWQgbm9kZSBpcyBldmVudC5kYXRhLm5vZGUuCiAgICAgICAgSW4gdGhlIGNoYXJhY3RlciBkYXRhIGV2ZW50IHRoZSBjaGFuZ2VkIG5vZGUgaXMgZXZlbnQuZGF0YS4KCjIwMTItMDMtMDggIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExMDE0NjExPiBJbmxpbmUgV2ViIFNRTCBEYXRhYmFzZSBEYXRhR3JpZCByZXNpemVycyBhcmUgbm90IHVwZGF0ZWQgaWYgaW5zcGVjdG9yIHdpbmRvdyByZXNpemVkCgogICAgICAgIFdoZW4gdGhlIHdpbmRvdyByZXNpemVzLCB0aGUgQ29udGVudFZpZXcgZ2V0cyBhbiB1cGRhdGVMYXlvdXQuIFVzZSB0aGlzCiAgICAgICAgb3Bwb3J0dW5pdHkgdG8gdXBkYXRlIHRoZSBsYXlvdXQgb2YgYW55IGlubGluZSBEYXRhR3JpZHMgc28gdGhhdCB0aGVpcgogICAgICAgIHJlc2l6ZXJzIGFyZSBwb3NpdGlvbmVkIGNvcnJlY3RseS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YWJhc2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlQ29udGVudFZpZXcucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5EYXRhYmFzZUNvbnRlbnRWaWV3LnVwZGF0ZUxheW91dCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fYXBwZW5kVmlld1F1ZXJ5UmVzdWx0KToKCjIwMTItMDMtMDggIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgUmVtb3ZlIHVzZXMgb2YgV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2FzZU1lbnVUaXRsZXMuIE9uIHRoZSBTYWZhcmkgZnJvbnRlbmQKICAgICAgICB0aGlzIGlzIGFsd2F5cyB5ZXMgYW5kIHRoZSBmdW5jdGlvbiBkb2Vzbid0IGV2ZW4gZXhpc3QuIFRoaXMgY29kZSBpcyBjdXJyZW50bHkKICAgICAgICB1bnJlYWNoYWJsZSwgdGhlIGNoYW5nZSBpcyB0byBmaXggdXBkYXRlLXNhZmFyaS1sb2NhbGl6YWJsZS1zdHJpbmdzIHVzYWdlLgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dDb250ZW50Vmlldy5qczoKCjIwMTItMDMtMDggIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwOTYwOTAzPiBJbmNsdWRlIE5ldHdvcmsgdGltZWxpbmUgZ3JhcGggaW4gdGhlIG5ldHdvcmsgZGF0YSBncmlkCgogICAgICAgIFR3ZWFrIHRoZSBldmVudC1tYXJrZXJzIHNvIHRoZXkgYXJlIGFsd2F5cyBiZWhpbmQgdGhlIG5ldHdvcmsgZGF0YWdyaWQncwogICAgICAgIHRpbWVsaW5lIHBpbGxzLiBUaGlzIGlzIGRvbmUgYnkgbWFraW5nIHRocmVlIGxheWVyczogZXZlbnQtbWFya2VyIChib3R0b20pLAogICAgICAgIHRpbWVsaW5lIHBpbGxzIChtaWRkbGUpLCBhbmQgdG9vbHRpcCBkaXYgKHRvcCkuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05ldHdvcmtEYXRhR3JpZC5jc3M6CiAgICAgICAgKC5uZXR3b3JrLXRpbWVsaW5lLWRlY29yYXRpb25zID4gLmV2ZW50LW1hcmtlcnMgPiAuZXZlbnQtbWFya2VyKToKICAgICAgICAoLm5ldHdvcmstZGF0YWdyaWQgdHIgPiB0ZC50aW1lbGluZS1jb2x1bW4pOgogICAgICAgICgubmV0d29yay10aW1lbGluZS1kZWNvcmF0aW9ucyA+IC5ldmVudC1tYXJrZXJzID4gLmV2ZW50LW1hcmtlci10b29sdGlwKToKICAgICAgICBTdHlsZSB0aGUgdGhyZWUgbGF5ZXJzLCB6LWluZGV4ZXMuCgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZXNDb250ZW50Vmlldy5jc3M6CiAgICAgICAgUmVtb3ZlIG9sZCB6LWluZGV4LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmV0d29ya0RhdGFHcmlkLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya0RhdGFHcmlkKToKICAgICAgICBSZW5hbWUgdGhlIGNvbnN0YW50cyB0byB1c2UgdGhlIHN0YW5kYXJkICJTdHlsZUNsYXNzTmFtZSIgc3VmZml4IGFuZAogICAgICAgIGdpdmUgdGhlIERhdGFHcmlkIGEgY2xhc3MgbmFtZS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lRGVjb3JhdGlvbnMuY3NzOgogICAgICAgICgudGltZWxpbmUtZGVjb3JhdGlvbnMgPiAuZXZlbnQtbWFya2VycyA+IC5ldmVudC1tYXJrZXItdG9vbHRpcCk6CiAgICAgICAgKC50aW1lbGluZS1kZWNvcmF0aW9ucyA+IC5ldmVudC1tYXJrZXJzID4gLmV2ZW50LW1hcmtlcik6CiAgICAgICAgKC50aW1lbGluZS1kZWNvcmF0aW9ucyA+IC5ldmVudC1tYXJrZXJzID4gLmV2ZW50LW1hcmtlci5sb2FkLWV2ZW50KToKICAgICAgICAoLnRpbWVsaW5lLWRlY29yYXRpb25zID4gLmV2ZW50LW1hcmtlcnMgPiAuZXZlbnQtbWFya2VyLmRvbS1jb250ZW50LWV2ZW50KToKICAgICAgICAoLnRpbWVsaW5lLWRlY29yYXRpb25zID4gLmV2ZW50LW1hcmtlcnMgPiAuZXZlbnQtbWFya2VyLnRpbWVzdGFtcCk6CiAgICAgICAgRHJvcCB0aGUgIndyYXBwZXIiIGVsZW1lbnQuIFRoZSBldmVudC1tYXJrZXIgbm93IGRpc3BsYXlzIHRoZSBzYW1lIGFzIHRoZSB0b29sdGlwIGRpdi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lRGVjb3JhdGlvbnMuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZURlY29yYXRpb25zLnByb3RvdHlwZS51cGRhdGVFdmVudE1hcmtlcnMpOgogICAgICAgIFJlbmFtZSAid3JhcHBlciIgLT4gInRvb2x0aXAiIGFuZCBwb3NpdGlvbiB0aGUgdG9vbHRpcCBhbmQgbWFya2VyIHRoZSBzYW1lLgoKMjAxMi0wMy0wOCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA5NjA5MDM+IEluY2x1ZGUgTmV0d29yayB0aW1lbGluZSBncmFwaCBpbiB0aGUgbmV0d29yayBkYXRhIGdyaWQKCiAgICAgICAgUmVtZW1iZXIgaWYgdGhlIE5ldHdvcmsgRGF0YUdyaWQgY29sdW1uIGdyb3VwIHdhcyBjb2xsYXBzZWQgb3IgZXhwYW5kZWQuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFHcmlkLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YUdyaWQucHJvdG90eXBlLl9jbGlja0luQ29sdW1uQ29sbGFwc2VyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFHcmlkLnByb3RvdHlwZS5jb2xsYXBzZUNvbHVtbkdyb3VwKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFHcmlkLnByb3RvdHlwZS5fY29sbGFwc2VDb2x1bW5Hcm91cFdpdGhDZWxsKToKICAgICAgICBBZGQgY29sbGFwc2VDb2x1bW5Hcm91cChuYW1lKSBBUEkgdG8gRGF0YUdyaWQgYW5kIHNoYXJlIHRoZQogICAgICAgIGNvZGUgd2l0aCB0aGUgb2xkIHBhdGgsIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSBidXR0b24uCgogICAgICAgICogVXNlckludGVyZmFjZS9OZXR3b3JrRGF0YUdyaWQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrRGF0YUdyaWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya0RhdGFHcmlkLnByb3RvdHlwZS5kaWRUb2dnbGVDb2x1bW5Hcm91cCk6CiAgICAgICAgT24gY3JlYXRpb24gbG9hZCB0aGUgc2V0dGluZywgYW5kIHNhdmUgdGhlIHNldHRpbmcgb24gdG9nZ2xlLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVzQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldyk6CiAgICAgICAgR2l2ZSBhbGwgY29sdW1ucyBhIHN0YXJ0aW5nIHdpZHRoIChiYXNlZCBvbiB0aGUgYXV0by1jYWxjdWxhdGVkIHdpZHRocykuCgoyMDEyLTAzLTA4ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTAxNDU3OD4gRE9NIFN0b3JhZ2UgRGF0YUdyaWRzIHNob3VsZCBiZSBzb3J0YWJsZQoKICAgICAgICBBbGxvdyBzb3J0aW5nIG9mIGJvdGggb2YgdGhlIERPTSBTdG9yYWdlIERhdGFHcmlkIGNvbHVtbnMuCiAgICAgICAgQmVmb3JlIHNvcnRpbmcgbm9kZXMsIG1ha2Ugc3VyZSB0byBkZWxldGUgdGhlIGNyZWF0aW9uIG5vZGUKICAgICAgICBhbmQgcmUtYWRkIGl0IGluIHRoZSBlbmQuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVN0b3JhZ2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VDb250ZW50Vmlldy5wcm90b3R5cGUuX3VwZGF0ZURhdGFHcmlkRm9yRE9NU3RvcmFnZUVudHJpZXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fc29ydERhdGFHcmlkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VDb250ZW50Vmlldy5wcm90b3R5cGUuX2luc2VydE5vZGVzSW50b0RhdGFHcmlkV2l0aFNvcnQuY29tcGFyYXRvcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01TdG9yYWdlQ29udGVudFZpZXcucHJvdG90eXBlLl9pbnNlcnROb2Rlc0ludG9EYXRhR3JpZFdpdGhTb3J0KToKICAgICAgICBTaGFyZSBzb3J0IGNvZGUgd2l0aCB0YWJsZSBjcmVhdGlvbiBhbmQgc29ydCBjaGFuZ2VkLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YUdyaWQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhR3JpZC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQpOgogICAgICAgIFdoZW4gdGhlIGNyZWF0aW9uIG5vZGUgaXMgcmVtb3ZlZCwgZGVsZXRlIHRoZSByZWZlcmVuY2UgdG8gaXQuCgoyMDEyLTAzLTA4ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIFJlbmFtZSBEYXRhR3JpZCBtZXRob2RzIGFuZCBldmVudHMuCgogICAgICAgICAgICBEYXRhR3JpZC5wcm90b3R5cGUudXBkYXRlV2lkdGhzIC0+IHVwZGF0ZUxheW91dAogICAgICAgICAgICAic29ydGluZyBjaGFuZ2VkIiBldmVudCAtPiBXZWJJbnNwZWN0b3IuRGF0YUdyaWQuRXZlbnQuU29ydENoYW5nZWQKICAgICAgICAgICAgIndpZHRoIGNoYW5nZWQiIGV2ZW50IC0+IFdlYkluc3BlY3Rvci5EYXRhR3JpZC5FdmVudC5EaWRMYXlvdXQKCiAgICAgICAgVGhpcyB0aGVuIGFsc28gcmVuYW1lcyB0aGUgTmV0d29ya0RhdGFHcmlkIGV2ZW50IGhhbmRsZXJzCiAgICAgICAgYW5kIG1vdmVzIHRoZSBzb3J0aW5nIGRpc3BhdGNoIGZ1bmN0aW9uIGludG8gaXRzIG9ubHkgY2FsbGVyLgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9BcHBsaWNhdGlvbkNhY2hlRnJhbWVDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVGcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS51cGRhdGVMYXlvdXQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZUZyYW1lQ29udGVudFZpZXcucHJvdG90eXBlLl9jcmVhdGVEYXRhR3JpZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1NlbGVjdG9yUHJvZmlsZVZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTZWxlY3RvclByb2ZpbGVWaWV3KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1NlbGVjdG9yUHJvZmlsZVZpZXcucHJvdG90eXBlLnVwZGF0ZUxheW91dCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Nvb2tpZVN0b3JhZ2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvb2tpZVN0b3JhZ2VDb250ZW50Vmlldy5wcm90b3R5cGUudXBkYXRlTGF5b3V0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvb2tpZVN0b3JhZ2VDb250ZW50Vmlldy5wcm90b3R5cGUuX3JlYnVpbGRUYWJsZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVN0b3JhZ2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VDb250ZW50Vmlldy5wcm90b3R5cGUudXBkYXRlTGF5b3V0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VDb250ZW50Vmlldy5wcm90b3R5cGUuX3Nob3dET01TdG9yYWdlRW50cmllcyk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFHcmlkLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YUdyaWQucHJvdG90eXBlLmF1dG9TaXplQ29sdW1ucyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhR3JpZC5wcm90b3R5cGUudXBkYXRlTGF5b3V0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFHcmlkLnByb3RvdHlwZS5hcHBseUNvbHVtbldpZHRoc01hcCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhR3JpZC5wcm90b3R5cGUuX2NsaWNrSW5IZWFkZXJDZWxsKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFHcmlkLnByb3RvdHlwZS5fcmVzaXplckRyYWdnaW5nKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFHcmlkLnByb3RvdHlwZS5fZW5kUmVzaXplckRyYWdnaW5nKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YWJhc2VUYWJsZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YWJhc2VUYWJsZUNvbnRlbnRWaWV3LnByb3RvdHlwZS51cGRhdGVMYXlvdXQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YWJhc2VUYWJsZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fcXVlcnlGaW5pc2hlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0phdmFTY3JpcHRQcm9maWxlVmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRQcm9maWxlVmlldy5wcm90b3R5cGUudXBkYXRlTGF5b3V0KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmV0d29ya0RhdGFHcmlkLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya0RhdGFHcmlkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLk5ldHdvcmtEYXRhR3JpZC5wcm90b3R5cGUuX2RhdGFHcmlkU29ydENoYW5nZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya0RhdGFHcmlkLnByb3RvdHlwZS5fZGF0YUdyaWREaWRMYXlvdXQpOgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZXNDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcuc2hvd1RpbWVsaW5lRm9yUmVjb3JkVHlwZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldy5wcm90b3R5cGUudXBkYXRlTGF5b3V0KToKCjIwMTItMDMtMDggIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgUmVsYXlvdXQgdGhlIHNlbGVjdGVkIG5vZGUgd2hlbiB3aWR0aHMgY2hhbmdlLiBUaGlzIGlzIG9ubHkgbmVlZGVkIGZvcgogICAgICAgIHRoZSBzZWxlY3RlZCBub2RlIGJlY2F1c2UgY3VycmVudGx5IGl0IGlzIHRoZSBvbmx5IG5vZGUgdGhhdCBjYW4gYmUKICAgICAgICBkaXNwbGF5aW5nIGxhYmVscyB3aGVuIHRoZSBkYXRhIGdyaWQncyBjb2x1bW5zIHdpZHRocyBjaGFuZ2UuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFHcmlkLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YUdyaWROb2RlLnByb3RvdHlwZS51cGRhdGVMYXlvdXQpOgogICAgICAgICogVXNlckludGVyZmFjZS9OZXR3b3JrRGF0YUdyaWQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrRGF0YUdyaWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya0RhdGFHcmlkLnByb3RvdHlwZS5fdXBkYXRlTGF5b3V0KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VUaW1lbGluZURhdGFHcmlkTm9kZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVGltZWxpbmVEYXRhR3JpZE5vZGUucHJvdG90eXBlLnVwZGF0ZUxheW91dCk6CgoyMDEyLTAzLTA4ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDk2MDkwMz4gSW5jbHVkZSBOZXR3b3JrIHRpbWVsaW5lIGdyYXBoIGluIHRoZSBuZXR3b3JrIGRhdGEgZ3JpZAoKICAgICAgICBEcmF3IHRoZSBldmVudCBtYXJrZXJzIG92ZXIgdGhlIE5ldHdvcmsgZGF0YWdyaWQuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6CiAgICAgICAgVG9vbHRpcCBzdHJpbmdzIGZvciB0aGUgZXZlbnQtbWFya2VyIGxpbmVzLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmV0d29ya0RhdGFHcmlkLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya0RhdGFHcmlkLnByb3RvdHlwZS51cGRhdGVDYWxjdWxhdG9yQm91bmRhcmllc1dpdGhFdmVudE1hcmtlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrRGF0YUdyaWQucHJvdG90eXBlLl91cGRhdGVEZWNvcmF0aW9ucyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrRGF0YUdyaWQucHJvdG90eXBlLl91cGRhdGVFdmVudE1hcmtlcnMpOgogICAgICAgIExldCB0aGUgY2FsY3VsYXRvciBoYW5kbGUgdXBkYXRpbmcgdGhlIGJvdW5kcyBhbmQgdGhlIGRlY29yYXRvciBkcmF3aW5nIHRoZSBtYXJrZXJzLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmV0d29ya0dyYXBoQ2FsY3VsYXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLk5ldHdvcmtUaW1lQ2FsY3VsYXRvci5wcm90b3R5cGUudXBkYXRlQm91bmRhcmllc0ZvckV2ZW50TWFya2VyKToKICAgICAgICBXaGVuIHVwZGF0aW5nIGJvdW5kYXJpZXMgZm9yIGV2ZW50IG1hcmtlcnMgaXRzIHBvc3NpYmxlIHRoYXQgZXZlbnQgbWFya2VycyB3aWxsCiAgICAgICAgYXJyaXZlIGxhdGVyIHRoZW4gcmVzb3VyY2VzIChvbmxvYWQgb3IgY29uc29sZS50aW1lU3RhbXAoKSBmb3IgZXhhbXBsZSkuIElmIHN1Y2gKICAgICAgICBhbiBldmVudCBpcyBtb3JlIHRoYW4gMTAlIHBhc3QgdGhlIGN1cnJlbnQgYm91bmRzIHdlIGRvbid0IHN0cmV0Y2ggdGhlIGJvdW5kcwogICAgICAgIGJlY2F1c2UgaXQgd291bGQgZGlzdG9ydCB0aGUgZ3JhcGggdG9vIG11Y2guIExpa2V3aXNlLCBpZiBhIHRpbWVzdGFtcCB3aWxsIGJlY29tZQogICAgICAgIHRoZSBuZXcgbWF4aW11bSBleHRlbmQgYW4gZXh0cmEgMyUgdG8gcHJvdmlkZSBzb21lIHdoaXRlLXNwYWNlIHBhc3QgdGhlIG1hcmtlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lRGVjb3JhdGlvbnMuY3NzOgogICAgICAgICgudGltZWxpbmUtZGVjb3JhdGlvbnMgPiAuZXZlbnQtbWFya2Vycyk6CiAgICAgICAgKC50aW1lbGluZS1kZWNvcmF0aW9ucyA+IC5ldmVudC1tYXJrZXJzID4gLmV2ZW50LW1hcmtlci13cmFwcGVyKToKICAgICAgICBUaGlzIHdyYXBwZXIgcHJvdmlkZXMgYSBsYXJnZXIgc3VyZmFjZSBhcmVhIGZvciB0aGUgdG9vbHRpcC4gOXB4IHRvdGFsICg0cHggKyAxcHggKyA0cHgpLgoKICAgICAgICAoLnRpbWVsaW5lLWRlY29yYXRpb25zID4gLmV2ZW50LW1hcmtlcnMgPiAuZXZlbnQtbWFya2VyLXdyYXBwZXIgPiAuZXZlbnQtbWFya2VyKToKICAgICAgICAoLnRpbWVsaW5lLWRlY29yYXRpb25zID4gLmV2ZW50LW1hcmtlcnMgPiAuZXZlbnQtbWFya2VyLXdyYXBwZXIgPiAuZXZlbnQtbWFya2VyLmxvYWQtZXZlbnQpOgogICAgICAgICgudGltZWxpbmUtZGVjb3JhdGlvbnMgPiAuZXZlbnQtbWFya2VycyA+IC5ldmVudC1tYXJrZXItd3JhcHBlciA+IC5ldmVudC1tYXJrZXIuZG9tLWNvbnRlbnQtZXZlbnQpOgogICAgICAgICgudGltZWxpbmUtZGVjb3JhdGlvbnMgPiAuZXZlbnQtbWFya2VycyA+IC5ldmVudC1tYXJrZXItd3JhcHBlciA+IC5ldmVudC1tYXJrZXIudGltZXN0YW1wKToKICAgICAgICBEaWZmZXJlbnQgY29sb3JzIGZvciB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIGV2ZW50LW1hcmtlcnMuCgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZXNDb250ZW50Vmlldy5jc3M6CiAgICAgICAgKC5jb250ZW50LXZpZXcudGltZWxpbmVzID4gLmRhdGEtZ3JpZCB0ci5zZWxlY3RlZCB0ZC50aW1lbGluZS1jb2x1bW4pOgogICAgICAgIE1ha2Ugc3VyZSB0aGUgc2VsZWN0ZWQgdGltZWxpbmUgZGF0YWdyaWQgcm93IGRyYXdzIG92ZXIgdGhlIGV2ZW50LW1hcmtlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lRGVjb3JhdGlvbnMuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZURlY29yYXRpb25zKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lRGVjb3JhdGlvbnMucHJvdG90eXBlLnVwZGF0ZUV2ZW50TWFya2Vycy50b29sVGlwRm9yRXZlbnRNYXJrZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVEZWNvcmF0aW9ucy5wcm90b3R5cGUudXBkYXRlRXZlbnRNYXJrZXJzKToKICAgICAgICBQb3NpdGlvbiBhbmQgc3R5bGUgdGhlIGV2ZW50IG1hcmtlcnMgd2l0aGluIHRoZSBib3VuZHMuCgoyMDEyLTAzLTA4ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDk2MDkwMz4gSW5jbHVkZSBOZXR3b3JrIHRpbWVsaW5lIGdyYXBoIGluIHRoZSBuZXR3b3JrIGRhdGEgZ3JpZAoKICAgICAgICBBZGQgVGltZWxpbmVFdmVudE1hcmtlcnMgdG8gdGhlIE5ldHdvcmsncyBUaW1lbGluZURlY29yYXRpb25zLiBUaGV5IGFyZQogICAgICAgIG5vdCBkaXNwbGF5ZWQgeWV0LCBhbmQgdGhlIFRpbWVsaW5lT3ZlcnZpZXcgd29uJ3Qgc2hvdyBtYXJrZXJzIHlldC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVzQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldy5wcm90b3R5cGUuX3JlY29yZGVkRXZlbnRNYXJrZXIpOgogICAgICAgIFBhc3MgaW5jb21pbmcgZXZlbnQgbWFya2VycyB0byB0aGUgY3VycmVudCBkYXRhZ3JpZC4gT25seSB0aGUgbmV0d29yayBkYXRhIGdyaWQgdXNlcyB0aGVtLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fdXBkYXRlUGVuZGluZ1JlY29yZHMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcucHJvdG90eXBlLl91cGRhdGVDYWxjdWxhdG9yQm91bmRzRm9yUGVuZGluZ1JlY29yZHNBbmRFdmVudE1hcmtlcnMpOgogICAgICAgIFdoZW4gdXBkYXRpbmcgdGhlIGJvdW5kcyBvZiB0aGUgdGltZWxpbmUgZ3JhcGggYWxzbyBwcm92aWRlIHBlbmRpbmcgZXZlbnQgbWFya2VycwogICAgICAgIHNvIHRoYXQgbGF0ZSBldmVudHMgKGxpa2Ugb25sb2FkKSBjYW4gc3RyZXRjaCB0aGUgbWF4aW11bSBib3VuZHMgaWYgbmVjZXNzYXJ5LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVEYXRhR3JpZC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lRGF0YUdyaWQucHJvdG90eXBlLnVwZGF0ZUNhbGN1bGF0b3JCb3VuZGFyaWVzV2l0aEV2ZW50TWFya2VyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lRGF0YUdyaWQucHJvdG90eXBlLmFkZFRpbWVsaW5lRXZlbnRNYXJrZXIpOgogICAgICAgIERlZmF1bHQgZW1wdHkgaW1wbGVtZW50YXRpb25zIGZvciBEYXRhR3JpZHMgdG8gaGFuZGxlIGV2ZW50IG1hcmtlcnMuCgogICAgICAgICogVXNlckludGVyZmFjZS9OZXR3b3JrRGF0YUdyaWQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrRGF0YUdyaWQucHJvdG90eXBlLnJlc2V0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLk5ldHdvcmtEYXRhR3JpZC5wcm90b3R5cGUuYWRkVGltZWxpbmVFdmVudE1hcmtlcik6CiAgICAgICAgUGFzcyBldmVudCBtYXJrZXJzIG9uIHRvIHRoZSBkZWNvcmF0aW9ucyBtYW5hZ2VyLiBXZSBhbHNvIG5lZWQgYSB3YXkgdG8gcmVzZXQgbm93LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVEZWNvcmF0aW9ucy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lRGVjb3JhdGlvbnMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVEZWNvcmF0aW9ucy5wcm90b3R5cGUuYWRkVGltZWxpbmVFdmVudE1hcmtlcik6CiAgICAgICAgS2VlcCB0cmFjayBvZiBldmVudCBtYWtlcnMgd2UgbWF5IG5lZWQgdG8gZGlzcGxheS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lT3ZlcnZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU92ZXJ2aWV3LnByb3RvdHlwZS5jbGVhcik6CiAgICAgICAgQWRkIGNsZWFyLCBqdXN0IGluIGNhc2UgaXQgaXMgbmVlZGVkIGxhdGVyLiBUaGUgb3ZlcnZpZXcgY3VycmVudGx5IGRvZXNuJ3QgaGFuZGxlIGV2ZW50IG1hcmtlcnMuCgoyMDEyLTAzLTA4ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDk2MDkwMz4gSW5jbHVkZSBOZXR3b3JrIHRpbWVsaW5lIGdyYXBoIGluIHRoZSBuZXR3b3JrIGRhdGEgZ3JpZAoKICAgICAgICBBZGQgYSBUaW1lbGluZUV2ZW50TWFya2VyIGNsYXNzIGZvciBtYXJrZWQgdGltZXN0YW1wcy4gQ3VycmVudAogICAgICAgIGV2ZW50IG1hcmtlcnMgdGhhdCB3ZSBhcmUgaW50ZXJlc3RlZCBpbiBhcmUgdGhlIERPTUNvbnRlbnQgZXZlbnQsCiAgICAgICAgTG9hZCBldmVudCwgYW5kIGNvbnNvbGUudGltZVN0YW1wKCkgY2FsbHMuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUGFnZU9ic2VydmVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUGFnZU9ic2VydmVyLmRvbUNvbnRlbnRFdmVudEZpcmVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlBhZ2VPYnNlcnZlci5wcm90b3R5cGUubG9hZEV2ZW50RmlyZWQpOgogICAgICAgIFBvaW50IG91dCB0aGF0IHRoZXNlIGFyZSBub3QgbmVlZGVkLCB0aGV5IGFyZSBjb3ZlcmVkIGJ5IFRpbWVsaW5lQWdlbnQKICAgICAgICBpbiB0aGUgU2FmYXJpIGZyb250ZW5kLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVFdmVudE1hcmtlci5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZUV2ZW50TWFya2VyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lRXZlbnRNYXJrZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5UaW1lbGluZUV2ZW50TWFya2VyLmdldCB0aW1lc3RhbXApOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVFdmVudE1hcmtlci5wcm90b3R5cGUuZ2V0IHR5cGUpOgogICAgICAgIFNpbXBsZSBjbGFzcyBlbmNhcHN1bGF0aW5nIGEgdGltZXN0YW1wIGFuZCB0eXBlLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuZ2V0IHRpbWVsaW5lRXZlbnRNYXJrZXJzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuc3RhcnRSZWNvcmRpbmcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLnByb3RvdHlwZS5ldmVudFJlY29yZGVkLnByb2Nlc3NSZWNvcmQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLnByb3RvdHlwZS5ldmVudFJlY29yZGVkKToKICAgICAgICBLZWVwIGEgcmVjb3JkIG9mIGV2ZW50IG1hcmtlcnMuCgoyMDEyLTAzLTA4ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIFdoZW4gaGlkaW5nIHRoZSBkb2NrIGJ1dHRvbiBhbHNvIGhpZGUgdGhlIGRpdmlkZXIgYmV0d2VlbiB0aGUgZG9jawogICAgICAgIGJ1dHRvbiBhbmQgdGhlIHNpZGViYXIncyBvdGhlciBuYXZpZ2F0aW9uIGl0ZW1zLiAKCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnV0dG9uTmF2aWdhdGlvbkl0ZW0uanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLl91cGRhdGVEb2NrVG9nZ2xlQnV0dG9uVmlzaWJpbGl0eSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05hdmlnYXRpb25JdGVtLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLmdldCBoaWRkZW4pOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLnNldCBoaWRkZW4pOgoKMjAxMi0wMy0wOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFJlbG9hZGluZyB0aGUgcGFnZSBzb21ldGltZXMgcmVtb3ZlcyB0aGUgbWFpbiByZXNvdXJjZSBmcm9tIGJyZWFrcG9pbnRzLgoKICAgICAgICBUaGUgX2NoZWNrRm9yT2xkUmVzb3VyY2VzIGZ1bmN0aW9uIGlzIGRlbGF5ZWQgb24gdGhlIHRpbWVvdXQuIFRoaXMgY2F1c2VkIHRoZQogICAgICAgIGJyZWFrcG9pbnRzIHRvIGJlIGFwcGVuZGVkIHRvIGEgUmVzb3VyY2VUcmVlRWxlbWVudCB0aGF0IHdpbGwgc29vbiBiZSByZW1vdmVkLgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9CcmVha3BvaW50U2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludFNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2FkZEJyZWFrcG9pbnQpOiBDcmVhdGUgYSBuZXcgUmVzb3VyY2VUcmVlRWxlbWVudAogICAgICAgIGlmIHRoZSByZXNvdXJjZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgcHJldmlvdXMgUmVzb3VyY2VUcmVlRWxlbWVudC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSXNzdWVTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Jc3N1ZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2lzc3VlV2FzQWRkZWQpOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2VhcmNoU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdHJlZUVsZW1lbnRGb3JSZXNvdXJjZSk6IERpdHRvLgoKMjAxMi0wMy0wOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIENvbW11bmljYXRlIGJyZWFrcG9pbnRzIHRvIHRoZSBiYWNrZW5kIGFuZCB1cGRhdGUgdGhlIHJlc29sdmVkIHN0YXRlIG9mIHRoZSBicmVha3BvaW50cy4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4NzcwJjEwMzE4Nzc3PgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9CcmVha3BvaW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCk6IEluaXRpYWxpemUgX2lkIHRvIG51bGwuCiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZS5nZXQgaWQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlLnNldCBpZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUuc2V0IGxpbmVOdW1iZXIpOiBSZXBvcnQgb2xkTGluZU51bWJlciBpbiB0aGUgZXZlbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZS5nZXQgaW5mbyk6IFVwZGF0ZWQgY29tbWVudC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnJlYWtwb2ludFNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9hZGRCcmVha3BvaW50KTogTWFyayBkaXNhYmxlZCBicmVha3BvaW50cyBhcyByZXNvbHZlZAogICAgICAgIHdoZW4gdGhleSBhcmUgYWRkZWQgdG8gdGhlIHVzZXIgaW50ZXJmYWNlLgogICAgICAgICogVXNlckludGVyZmFjZS9EZWJ1Z2dlck1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5hZGRCcmVha3BvaW50KTogQ2FsbCBfc2V0QnJlYWtwb2ludC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlQnJlYWtwb2ludCk6IENhbGwgX3JlbW92ZUJyZWFrcG9pbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLmJyZWFrcG9pbnRSZXNvbHZlZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXNldCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5fc2V0QnJlYWtwb2ludCk6IEFkZGVkLiBUYWxrIHRvIHRoZSBEZWJ1Z2dlckFnZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5fc2V0QnJlYWtwb2ludC5kaWRTZXRCcmVha3BvaW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUuX3JlbW92ZUJyZWFrcG9pbnQpOiBBZGRlZC4gVGFsayB0byB0aGUgRGVidWdnZXJBZ2VudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUuX3JlbW92ZUJyZWFrcG9pbnQuZGlkUmVtb3ZlQnJlYWtwb2ludCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLl9icmVha3BvaW50TGluZU51bWJlckRpZENoYW5nZSk6IEFkZGVkLiBDYWxsIF9yZW1vdmVCcmVha3BvaW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5fYnJlYWtwb2ludExpbmVOdW1iZXJEaWRDaGFuZ2UuYnJlYWtwb2ludFJlbW92ZWQpOiBDYWxsIF9zZXRCcmVha3BvaW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5fYnJlYWtwb2ludERpc2FibGVkU3RhdGVEaWRDaGFuZ2UpOiBDYWxsIF9yZW1vdmVCcmVha3BvaW50IG9yIF9zZXRCcmVha3BvaW50LgogICAgICAgICogVXNlckludGVyZmFjZS9EZWJ1Z2dlck9ic2VydmVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJPYnNlcnZlci5wcm90b3R5cGUuZ2xvYmFsT2JqZWN0Q2xlYXJlZCk6IENhbGwgRGVidWdnZXJNYW5hZ2VyLnJlc2V0LgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJPYnNlcnZlci5wcm90b3R5cGUuYnJlYWtwb2ludFJlc29sdmVkKTogQ2FsbCBEZWJ1Z2dlck1hbmFnZXIuYnJlYWtwb2ludFJlc29sdmVkLgoKMjAxMi0wMy0wOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFVzZSAicmVzb2x2ZWQiIHRvIGRlc2NyaWJlIGJyZWFrcG9pbnRzIGluc3RlYWQgb2YgImluYWN0aXZlIi4KCiAgICAgICAgVGhlIHRlcm0gaW5hY3RpdmUgd2FzIGNvbmZ1c2luZyBzaW5jZSB3ZSBhbHNvIGhhdmUgZGlzYWJsZWQuIFVzaW5nIHJlc29sdmVkIGJldHRlcgogICAgICAgIGRlc2NyaWJlcyB0aGUgcHJvcGVydHkuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0JyZWFrcG9pbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlLnNldCBsaW5lTnVtYmVyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlLmdldCByZXNvbHZlZCk6IFJlbmFtZWQgZnJvbSBpbmFjdGl2ZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlLnNldCByZXNvbHZlZCk6IFJlbmFtZWQgZnJvbSBpbmFjdGl2ZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlLmdldCBpbmZvKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnJlYWtwb2ludFRyZWVFbGVtZW50LmNzczoKICAgICAgICAoLml0ZW0uYnJlYWtwb2ludCAuc3RhdHVzID4gLnN0YXR1cy1pbWFnZSk6CiAgICAgICAgKC5pdGVtLmJyZWFrcG9pbnQgLnN0YXR1cyA+IC5zdGF0dXMtaW1hZ2UucmVzb2x2ZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9CcmVha3BvaW50VHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50VHJlZUVsZW1lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludFRyZWVFbGVtZW50LnByb3RvdHlwZS5fdXBkYXRlU3RhdHVzKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5jc3M6CiAgICAgICAgKC50ZXh0LWVkaXRvciA+IC5ndXR0ZXIgPiAubGluZS1udW1iZXIgPiAuYnJlYWtwb2ludCk6CiAgICAgICAgKC50ZXh0LWVkaXRvciA+IC5ndXR0ZXIgPiAubGluZS1udW1iZXIuYnJlYWtwb2ludC1yZXNvbHZlZCA+IC5icmVha3BvaW50KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9hZGRCcmVha3BvaW50RWxlbWVudFRvTGluZUVsZW1lbnRXaXRoSW5mbyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fcmVtb3ZlUG9zc2libGVCcmVha3BvaW50RWxlbWVudEZyb21MaW5lRWxlbWVudCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRSZXNvdXJjZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLmNsb3NlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUuX3VwZGF0ZUJyZWFrcG9pbnRTdGF0dXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLnRleHRFZGl0b3JCcmVha3BvaW50SW5mbyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUudGV4dEVkaXRvckJyZWFrcG9pbnRBZGRlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUudGV4dEVkaXRvckxpbmVDb250ZW50VXBkYXRlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUuX3RleHRFZGl0b3JCcmVha3BvaW50SW5mb0ZvckJyZWFrcG9pbnQpOgoKMjAxMi0wMy0wOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEZpeCBhbiBhc3NlcnRpb24gYW5kIGV4Y2VwdGlvbiB0aGF0IGlzIHNlZW4gc29tZXRpbWVzIHdoZW4gb3BlbmluZyB0aGUgV2ViIEluc3BlY3Rvci4KCiAgICAgICAgVGhlIF9yZWJ1aWxkU2VjdGlvbnMgZnVuY3Rpb24gaXMgd2lyZWQgdXAgdG8gZXZlbnRzLiBUaG9zZSBldmVudHMgY2FuIGZpcmUgd2hlbiB3ZSBkb24ndCBoYXZlCiAgICAgICAgYSBzZWxlY3RlZCBET00gbm9kZS4gU28gd2UgbmVlZCB0byByZXR1cm4gZWFybHkgaW4gdGhhdCBjYXNlIGFuZCBub3QgYXNzZXJ0LgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9yZWJ1aWxkU2VjdGlvbnMpOiBSZXR1cm4gZWFybHkgaWYgZG9tTm9kZSBpcyBudWxsLgoKMjAxMi0wMy0wOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEZpeCBhIG1lcmdlIGlzc3VlIHRoYXQgY2F1c2VkIGJyZWFrcG9pbnQgbGluZXMgdG8gbm90IGhhdmUgYW4gaWNvbi4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4Nzc3PgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9CcmVha3BvaW50VHJlZUVsZW1lbnQuanM6IFJlbW92ZSB0aGUgZHVwbGljYXRlIEdlbmVyaWNMaW5lSWNvblN0eWxlQ2xhc3NOYW1lIHRoYXQKICAgICAgICBoYWQgYSB0eXBvIGluIHRoZSB2YWx1ZS4KCjIwMTItMDMtMDggIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTEwMDczODM+IE5lZWQgYSB3YXkgdG8gY2xlYXIgdGhlIGN1cnJlbnQgY29uc29sZSBsb2cuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldyk6IENhbGwgdGhpcy5fcmVnaXN0ZXJTaG9ydGN1dHMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuY29uc29sZUNsZWFyZWQpOiBSZW5hbWVkIGZyb20gX2NvbnNvbGVDbGVhcmVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9yZWdpc3RlclNob3J0Y3V0cyk6IFJlbW92ZSB0aGUgc2hvcnRjdXQgdG8gZHVtcCBtZW1vcnksIGFuZCByZW1vdmUKICAgICAgICAgICAgdGhlIGNvZGUgdG8gc2V0IHVwIHNob3J0Y3V0cyBzY3JlZW4uCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX3JlcXVlc3RDbGVhck1lc3NhZ2VzKTogQ2FsbCB0byB0aGUgTG9nTWFuYWdlci4KICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fcHJvbXB0S2V5RG93bik6IEFjdHVhbGx5IGxvb2sgdXAgdGhlIHNob3J0Y3V0IGluIHRoZSBzaG9ydGN1dHMKICAgICAgICAgICAgbGlzdC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ01hbmFnZXIucHJvdG90eXBlLnJlcXVlc3RDbGVhck1lc3NhZ2VzKTogQ2FsbCBjbGVhck1lc3NhZ2VzIG9uIHRoZSBDb25zb2xlQWdlbnQsIGFuZCBmaXJlCiAgICAgICAgICAgIGFuIGV2ZW50IHNheWluZyB0aGUgYWN0aXZlIGxvZyB3YXMgY2xlYXJlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nU2lkZWJhclBhbmVsKTogTGlzdGVuIGZvciB0aGUgYWN0aXZlIGxvZyBiZWluZyBjbGVhcmVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fYWN0aXZlTG9nQ2xlYXJlZCk6IENhbGwgY29uc29sZUNsZWFyZWQgb24gdGhlIGFjdGl2ZSBsb2cgY29udGVudCB2aWV3LgoKMjAxMi0wMy0wOCAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTAxMjE2Mj4gTG9nIHJlcGVhdCBjb3VudHMgYXJlIG5vdCB1cGRhdGVkIHdoZW4gdGhlIGNvbnNvbGUgaXMgb3Blbi4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Db25zb2xlT2JzZXJ2ZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlT2JzZXJ2ZXIucHJvdG90eXBlLm1lc3NhZ2VSZXBlYXRDb3VudFVwZGF0ZWQpOiBDYWxsIHRocm91Z2ggdG8gdGhlIExvZ01hbmFnZXIuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ0NvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLl9hcHBlbmRDb21tYW5kKTogQ2FsbCBMb2dNYW5hZ2VyLnJlcGVhdENvdW50V2FzSW50ZXJydXB0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ01hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuTG9nTWFuYWdlci5pbml0aWFsaXplKTogSW5pdGlhbGl6ZSB3aGV0aGVyIG9yCiAgICAgICAgICAgIG5vdCB0aGUgcmVwZWF0IGNvdW50IHdhcyBpbnRlcnJ1cHRlZCAoYnkgdGhlIHVzZXIgZW50ZXJpbmcgYSBjb21tYW5kIGluIHRoZSBsb2cgY29udGVudCB2aWV3KS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ01hbmFnZXIucHJvdG90eXBlLm1lc3NhZ2VXYXNBZGRlZCk6IENyZWF0ZSBhIENvbnNvbGVNZXNzYWdlIGFuZCBjYWxsIF9hZGRNZXNzYWdlLgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nTWFuYWdlci5wcm90b3R5cGUubWVzc2FnZVJlcGVhdENvdW50VXBkYXRlZCk6IElmIHRoZSByZXBlYXQgY291bnQgd2Fzbid0IGludGVycnVwdGVkLAogICAgICAgICAgICB1cGRhdGUgdGhlIGNvdW50LiBJZiBpdCB3YXMsIHRoZW4gY2xvbmUgb3VyIG1lc3NhZ2UgZWxlbWVudCwgYW5kIGNyZWF0ZSBhIG5ldyBvbmUsIGFuZCBzZXQgaXRzIHJlcGVhdAogICAgICAgICAgICBhbmQgaWdub3JlZCBjb3VudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ01hbmFnZXIucHJvdG90eXBlLnJlcGVhdENvdW50V2FzSW50ZXJydXB0ZWQpOiBTZXQgdGhlIGZsYWcgaW5kaWNhdGluZyBvdXIgcmVwZWF0IGNvdW50CiAgICAgICAgICAgIHdhcyBpbnRlcnJ1cHRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ01hbmFnZXIucHJvdG90eXBlLl9hZGRNZXNzYWdlKTogQWRkIHRoZSBtZXNzYWdlIHRvIG91ciBsaXN0IG9mIG1lc3NhZ2VzLCBzZXQgaXQgYXMgb3VyCiAgICAgICAgICAgIHByZXZpb3VzIG1lc3NhZ2UsIGFuZCBmaXJlIG91ciBldmVudC4KCjIwMTItMDMtMDggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBVcGRhdGUgdGhlIGRpc2FibGVkIGFuZCBpbmFjdGl2ZSBzdGF0ZSBvZiBicmVha3BvaW50cyBpbiB0aGUgVGV4dEVkaXRvciBndXR0ZXIgYXMgdGhleSBjaGFuZ2UuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxODc3Nz4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnNldEJyZWFrcG9pbnRJbmZvRm9yTGluZSk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3KTogQWRkZWQgZXZlbnQgbGlzdGVuZXJzIGZvciBEaXNhYmxlZFN0YXRlRGlkQ2hhbmdlIGFuZCBJbmFjdGl2ZVN0YXRlRGlkQ2hhbmdlLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLmNsb3NlZCk6IFJlbW92ZWQgdGhlIGFkZGVkIGV2ZW50IGxpc3RlbmVycy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fdXBkYXRlQnJlYWtwb2ludFN0YXR1cyk6IEFkZGVkLiBDYWxscyBzZXRCcmVha3BvaW50SW5mb0ZvckxpbmUuCgoyMDEyLTAzLTA4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgU2hvdyB0aGUgc3RhdHVzIG9mIGVhY2ggYnJlYWtwb2ludCBpbiB0aGUgQnJlYWtwb2ludCBzaWRlYmFyLiBBbHNvIHVwZGF0ZSB0aGUgdGl0bGUgd2hlbiB0aGUgbGluZSBudW1iZXIgY2hhbmdlcy4KCiAgICAgICAgQ2xpY2tpbmcgdGhlIGJyZWFrcG9pbnQgaW1hZ2Ugd2lsbCB0b2dnbGUgdGhlIGRpc2FibGVkIHN0YXRlLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3Nzc+CgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0JyZWFrcG9pbnQuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0JyZWFrcG9pbnRUcmVlRWxlbWVudC5jc3M6IEFkZGVkLgogICAgICAgICguaXRlbS5icmVha3BvaW50IC5zdGF0dXMgPiAuc3RhdHVzLWltYWdlKToKICAgICAgICAoLml0ZW0uYnJlYWtwb2ludCAuc3RhdHVzID4gLnN0YXR1cy1pbWFnZS5pbmFjdGl2ZSk6CiAgICAgICAgKC5pdGVtLmJyZWFrcG9pbnQgLnN0YXR1cyA+IC5zdGF0dXMtaW1hZ2UuZGlzYWJsZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9CcmVha3BvaW50VHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50VHJlZUVsZW1lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludFRyZWVFbGVtZW50LnByb3RvdHlwZS5fdXBkYXRlTWFpblRpdGxlKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50VHJlZUVsZW1lbnQucHJvdG90eXBlLl91cGRhdGVTdGF0dXMpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRUcmVlRWxlbWVudC5wcm90b3R5cGUuX3N0YXR1c0ltYWdlRWxlbWVudE1vdXNlRG93bik6IEFkZGVkCiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50VHJlZUVsZW1lbnQucHJvdG90eXBlLl9zdGF0dXNJbWFnZUVsZW1lbnRDbGlja2VkKTogQWRkZWQKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0JyZWFrcG9pbnRCdXR0b24ucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0JyZWFrcG9pbnRJbmFjdGl2ZUJ1dHRvbi5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEluY2x1ZGVkIEJyZWFrcG9pbnRUcmVlRWxlbWVudC5jc3MuCgoyMDEyLTAzLTA3ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IHRoZSBBdHRyaWJ1dGVkU3RyaW5nIHByb3RvdHlwZSBjaGFpbi4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQXR0cmlidXRlZFN0cmluZy5qczogU2V0IHRoZSBBdHRyaWJ1dGVkU3RyaW5nIHByb3RvdHlwZSBpbnN0ZWFkIG9mIHRoZSBTb3VyY2VUb2tlbml6ZXIgcHJvdG90eXBlLgoKMjAxMi0wMy0wNyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2Ugc2VsZWN0aW5nIGEgYnJlYWtwb2ludCBpbiB0aGUgc2lkZWJhciBzaG93IHRoZSByZXNvdXJjZSBhbmQgcmV2ZWFsIHRoZSBsaW5lLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3Nzc+CgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbiBhbmQgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnJlYWtwb2ludFNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRTaWRlYmFyUGFuZWwpOiBTZXQgb25zZWxlY3QgdG8gX3RyZWVFbGVtZW50U2VsZWN0ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50U2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdHJlZUVsZW1lbnRTZWxlY3RlZCk6IEFkZGVkLgoKMjAxMi0wMy0wNyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFBvcHVsYXRlIHRoZSBCcmVha3BvaW50IHNpZGViYXIgd2l0aCBicmVha3BvaW50cy4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4Nzc3PgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiBVcGRhdGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9CcmVha3BvaW50SWNvbnMuY3NzOiBBZGRlZC4KICAgICAgICAoLmJyZWFrcG9pbnQtZ2VuZXJpYy1saW5lLWljb24gLmljb24pOgogICAgICAgICogVXNlckludGVyZmFjZS9CcmVha3BvaW50U2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludFNpZGViYXJQYW5lbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50U2lkZWJhclBhbmVsLnByb3RvdHlwZS5fYWRkQnJlYWtwb2ludCk6IEFkZGVkLiBIZWxwZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50U2lkZWJhclBhbmVsLnByb3RvdHlwZS5fYWRkQnJlYWtwb2ludHNGb3JSZXNvdXJjZSk6IEFkZGVkLiBIZWxwZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50U2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVzb3VyY2VBZGRlZCk6IEFkZGVkLiBDYWxsIF9hZGRCcmVha3BvaW50c0ZvclJlc291cmNlLgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludFNpZGViYXJQYW5lbC5wcm90b3R5cGUuX21haW5SZXNvdXJjZUNoYW5nZWQpOiBBZGRlZC4gQ2FsbCBfYWRkQnJlYWtwb2ludHNGb3JSZXNvdXJjZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9icmVha3BvaW50QWRkZWQpOiBBZGRlZC4gQ2FsbCBfYWRkQnJlYWtwb2ludC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9icmVha3BvaW50UmVtb3ZlZCk6IEFkZGVkLiBSZW1vdmUgdGhlIGJyZWFrcG9pbnQsIGFuZCByZXNvdXJjZQogICAgICAgIGlmIHRoYXQgd2FzIHRoZSBsYXN0IGJyZWFrcG9pbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50U2lkZWJhclBhbmVsLnByb3RvdHlwZS5fY2hlY2tGb3JPbGRSZXNvdXJjZXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludFNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2NoZWNrRm9yT2xkUmVzb3VyY2VzLmRlbGF5ZWRXb3JrKTogQ2hlY2sgZm9yIGRldGFjaGVkIHJlc291cmNlcwogICAgICAgIGFuZCByZW1vdmUgdGhlbSBmcm9tIHRoZSB0cmVlLgogICAgICAgICogVXNlckludGVyZmFjZS9CcmVha3BvaW50VHJlZUVsZW1lbnQuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludFRyZWVFbGVtZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRUcmVlRWxlbWVudC5wcm90b3R5cGUuZ2V0IGJyZWFrcG9pbnQpOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEluY2x1ZGVkIEJyZWFrcG9pbnRUcmVlRWxlbWVudC5qcyBhbmQgQnJlYWtwb2ludEljb25zLmNzcy4KCjIwMTItMDMtMDcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBSZW5hbWUgUmVzb3VyY2VTZWFyY2hNYXRjaC5wZGYgdG8gUmVzdWx0TGluZS5wZGYgdG8gYmUgbW9yZSBnZW5lcmljIHNvIGl0IGNhbiBiZSB1c2VkIGJ5IHRoZSBCcmVha3BvaW50IHNpZGViYXIuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxODc3Nz4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1Jlc3VsdExpbmUucGRmOiBSZW5hbWVkIGZyb20gV2ViSW5zcGVjdG9yL1VzZXJJbnRlcmZhY2UvSW1hZ2VzL1Jlc291cmNlU2VhcmNoTWF0Y2gucGRmLgogICAgICAgICogVXNlckludGVyZmFjZS9TZWFyY2hJY29ucy5jc3M6CiAgICAgICAgKC5yZXNvdXJjZS1tYXRjaC1pY29uIC5pY29uKTogVXNlIFJlc3VsdExpbmUucGRmLgoKMjAxMi0wMy0wNyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFBlcnNpc3QgYnJlYWtwb2ludHMgYmV0d2VlbiBzZXNzaW9ucy4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4NzcwJjEwMzE4Nzc3PgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4gYW5kIEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0JyZWFrcG9pbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50KTogU3VwcG9ydCB0YWtpbmcgYW4gaW5mbyBvYmplY3Qgb3IgdXJsLiBNYWtlIGluYWN0aXZlIGRlZmF1bHQgdG8gdHJ1ZS4KICAgICAgICBUaGUgYmFja2VuZCB3aWxsIGxhdGVyIG1hcmsgdGhlbSBhcyBhY3RpdmUgb25jZSB0aGV5IGFyZSByZXNvbHZlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlLmdldCBpbmZvKTogQWRkZWQuIFJldHVybnMgYW4gb2JqZWN0IHRvIHN0b3JlLgogICAgICAgICogVXNlckludGVyZmFjZS9EZWJ1Z2dlck1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIpOiBJdGVyYXRlIG92ZXIgdGhlIGluZm8gb2JqZWN0cyBpbiB0aGUgc2V0dGluZyBhbmQgbWFrZSBicmVha3BvaW50cy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUuYWRkQnJlYWtwb2ludCk6IFJldHVybiBlYXJseSBpZiBudWxsLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5yZW1vdmVCcmVha3BvaW50KTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLl9pbnNwZWN0b3JDbG9zaW5nKTogQWRkZWQuIENhbGwgX3NhdmVCcmVha3BvaW50cy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUuX3NhdmVCcmVha3BvaW50cyk6IEFkZGVkLiBNYWtlIGFuIGFycmF5IG9mIGluZm8gb2JqZWN0cwogICAgICAgIGFuZCBzYXZlIHRoZW0gaW4gdGhlIHNldHRpbmcuCgoyMDEyLTAzLTA3ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDk2MDkwMz4gSW5jbHVkZSBOZXR3b3JrIHRpbWVsaW5lIGdyYXBoIGluIHRoZSBuZXR3b3JrIGRhdGEgZ3JpZAoKICAgICAgICBCcmluZyB0aGUgcGFkZGluZyBkb3duIHRvIDFweCBmb3IgYm90aCBzaWRlcyBvZiB0aGUgdGltZWxpbmUgZ3JhcGguCiAgICAgICAgVGhpcyBtYWtlcyB0aGUgcGVyY2VudCB3aWR0aHMgYSBsaXR0bGUgbW9yZSBhY2N1cmF0ZSBhbmQgbWF0Y2hlcwogICAgICAgIHRoZSBwYWRkaW5nIG9uIHRoZSB0aW1lbGluZSBvdmVydmlldy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVzQ29udGVudFZpZXcuY3NzOgogICAgICAgICguY29udGVudC12aWV3LnRpbWVsaW5lcyA+IC5kYXRhLWdyaWQgdGQudGltZWxpbmUtY29sdW1uKToKCjIwMTItMDMtMDcgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwOTYwOTAzPiBJbmNsdWRlIE5ldHdvcmsgdGltZWxpbmUgZ3JhcGggaW4gdGhlIG5ldHdvcmsgZGF0YSBncmlkCgogICAgICAgIER5bmFtaWNhbGx5IGRldGVybWluZSB0aGUgd2lkdGggb2YgdGhlIGxvY2FsaXplZCBzdHJpbmcKICAgICAgICB3aXRoIHNpbWlsYXIgdGFibGUgaGVhZGluZyBzdHlsZXMuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05ldHdvcmtEYXRhR3JpZC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLk5ldHdvcmtEYXRhR3JpZC5wcm90b3R5cGUuX2xvY2FsaXplZFRpbWVsaW5lSGVhZGVyV2lkdGgpOgoKMjAxMi0wMy0wNyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA5NjA5MDM+IEluY2x1ZGUgTmV0d29yayB0aW1lbGluZSBncmFwaCBpbiB0aGUgbmV0d29yayBkYXRhIGdyaWQKCiAgICAgICAgSW1wcm92ZSB0aGUgaGVhZGVyIGRpc3BsYXkgdG8gb25seSBzaG93IGRpdmlkZXJzIHdpdGhpbiB0aGUgdmlzaWJsZSByYW5nZS4KICAgICAgICBOb3csIHdoZW4gd2Ugc2hvdyBkaXZpZGVycyBpbiB0aGF0IHJhbmdlLCB0aGUgZmlyc3QgZGl2aWRlciBhbHdheXMgaGFzIGEgbGVmdAogICAgICAgIGJvcmRlciwgYW5kIHRoZSBsYXN0IGRpdmlkZXIgb25seSBkb2VzIHdoZW4gdGhhdCBjb2x1bW4gaXMgbm90IHRoZSBhY3RpdmUgc29ydC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmV0d29ya0RhdGFHcmlkLmNzczoKICAgICAgICAoLm5ldHdvcmstdGltZWxpbmUtZGVjb3JhdGlvbnMgPiAuaGVhZGVyID4gLmRpdmlkZXI6bGFzdC1jaGlsZCk6CiAgICAgICAgKC5uZXR3b3JrLXRpbWVsaW5lLWRlY29yYXRpb25zOm5vdCguc29ydC1hY3RpdmUpID4gLmhlYWRlciA+IC5kaXZpZGVyOmxhc3QtY2hpbGQpOgogICAgICAgICogVXNlckludGVyZmFjZS9OZXR3b3JrRGF0YUdyaWQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrRGF0YUdyaWQucHJvdG90eXBlLl91cGRhdGVIZWFkZXJUaW1lcyk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lRGVjb3JhdGlvbnMuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZURlY29yYXRpb25zLnByb3RvdHlwZS51cGRhdGVIZWFkZXJUaW1lcyk6CgoyMDEyLTAzLTA3ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDk2MDkwMz4gSW5jbHVkZSBOZXR3b3JrIHRpbWVsaW5lIGdyYXBoIGluIHRoZSBuZXR3b3JrIGRhdGEgZ3JpZAoKICAgICAgICBDaGFuZ2luZyB0aGUgc29ydCBjb2x1bW4gbWlnaHQgbm90IGJlIGVub3VnaCBvZiBhIHNpemUgZGlmZmVyZW5jZSB0bwogICAgICAgIGNhdXNlIHRoZSBoZWFkZXJzIHRvIHJlZnJlc2guIEZvcmNlIGEgcmVmcmVzaCBpbiB0aGlzIGNhc2UuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05ldHdvcmtEYXRhR3JpZC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLk5ldHdvcmtEYXRhR3JpZC5wcm90b3R5cGUuX3NvcnRDaGFuZ2VkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLk5ldHdvcmtEYXRhR3JpZC5wcm90b3R5cGUuX3VwZGF0ZURlY29yYXRpb25zKToKICAgICAgICAoV2ViSW5zcGVjdG9yLk5ldHdvcmtEYXRhR3JpZC5wcm90b3R5cGUuX3VwZGF0ZUhlYWRlclRpbWVzKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVEZWNvcmF0aW9ucy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lRGVjb3JhdGlvbnMucHJvdG90eXBlLnVwZGF0ZUhlYWRlclRpbWVzKToKCjIwMTItMDMtMDcgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwOTYwOTAzPiBJbmNsdWRlIE5ldHdvcmsgdGltZWxpbmUgZ3JhcGggaW4gdGhlIG5ldHdvcmsgZGF0YSBncmlkCgogICAgICAgIFRoZSBOZXR3b3JrRGF0YUdyaWQncyB0aW1lbGluZSBncmFwaCBzaG91bGQgb25seSBzaG93IGhlYWRlcgogICAgICAgIHZhbHVlcyB3aGVuIGl0cyAiZGV0YWlscyIgY29sdW1ucyBhcmUgY29sbGFwc2VkLiBHaXZlCiAgICAgICAgVGltZWxpbmVEZWNvcmF0aW9ucyBhIHdheSB0byBoaWRlIGhlYWRlciB0aW1lcy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmV0d29ya0RhdGFHcmlkLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya0RhdGFHcmlkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLk5ldHdvcmtEYXRhR3JpZC5wcm90b3R5cGUuZGlkVG9nZ2xlQ29sdW1uR3JvdXApOgogICAgICAgIEhpZGUgLyBzaG93IHRoZSBoZWFkZXIgZGl2aWRlcnMgd2hlbiBjb2x1bW5zIGFyZSBjb2xsYXBzZWQgLyBleHBhbmRlZC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lRGVjb3JhdGlvbnMuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZURlY29yYXRpb25zLnByb3RvdHlwZS51cGRhdGVIZWFkZXJUaW1lcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZURlY29yYXRpb25zLnByb3RvdHlwZS5pc1Nob3dpbmdIZWFkZXJEaXZpZGVycyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZURlY29yYXRpb25zLnByb3RvdHlwZS5zaG93SGVhZGVyRGl2aWRlcnMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVEZWNvcmF0aW9ucy5wcm90b3R5cGUuaGlkZUhlYWRlckRpdmlkZXJzKToKICAgICAgICBIaWRlIC8gc2hvdyB0aGUgaGVhZGVyIGRpdmlkZXJzIGJ5IGFwcGx5aW5nIHRoZSAiaGlkZGVuIiBjbGFzcyB0byB0aGUgaGVhZGVyRWxlbWVudC4KCjIwMTItMDMtMDcgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwOTYwOTAzPiBJbmNsdWRlIE5ldHdvcmsgdGltZWxpbmUgZ3JhcGggaW4gdGhlIG5ldHdvcmsgZGF0YSBncmlkCgogICAgICAgIEdpdmUgdGhlIE5ldHdvcmtEYXRhR3JpZCB0aW1lbGluZSBUaW1lbGluZURlY29yYXRpb25zLiBXZSB3YW50IHRvCiAgICAgICAgbWFrZSBzdXJlIHRoYXQgdGhlIGhlYWRlciBsYWJlbHMgZG9uJ3Qgb3ZlcmxhcCB0aGUgY29sdW1uIGhlYWRlcgogICAgICAgICJUaW1lbGluZSIgb24gdGhlIGxlZnQgb3Igc29ydCAvIGNvbGxhcHNlIGNvbHVtbnMgYnV0dG9uIG9uIHRoZSByaWdodC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YUdyaWQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhR3JpZC5wcm90b3R5cGUuX2NsaWNrSW5IZWFkZXJDZWxsKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFHcmlkLnByb3RvdHlwZS5fc29ydENoYW5nZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YUdyaWQucHJvdG90eXBlLmlzQ29sdW1uU29ydENvbHVtbik6CiAgICAgICAgRXhwb3NlIGEgd2F5IGZvciBhIHN1YmNsYXNzIHRvIGFjdCBvbiBzb3J0IGNoYW5nZXMgYW5kIGNoZWNrCiAgICAgICAgaWYgYSBjb2x1bW4gaXMgdGhlIGFjdGl2ZSBzb3J0IGNvbHVtbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmV0d29ya0RhdGFHcmlkLmNzczogQWRkZWQuCiAgICAgICAgKC5uZXR3b3JrLXRpbWVsaW5lLWRlY29yYXRpb25zKToKICAgICAgICAoLm5ldHdvcmstdGltZWxpbmUtZGVjb3JhdGlvbnMgPiAuaGVhZGVyKToKICAgICAgICBHaXZlIHRoZSBuZXR3b3JrIHRpbWVsaW5lIGRlY29yYXRpb25zIHNvbWUgc3BlY2lmaWMgc3R5bGVzIGJlY2F1c2UKICAgICAgICBKYXZhU2NyaXB0IHdpbGwgaGF2ZSB0byBwb3NpdGlvbiB0aGUgZGVjb3JhdGlvbnMuCgogICAgICAgICogVXNlckludGVyZmFjZS9OZXR3b3JrRGF0YUdyaWQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrRGF0YUdyaWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya0RhdGFHcmlkLnByb3RvdHlwZS5yZXNldCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrRGF0YUdyaWQucHJvdG90eXBlLnVwZGF0ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrRGF0YUdyaWQucHJvdG90eXBlLnVwZGF0ZVdpZHRocyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrRGF0YUdyaWQucHJvdG90eXBlLl9zb3J0Q2hhbmdlZCk6CiAgICAgICAgVXBkYXRlIHRoZSB0aW1lbGluZSBkZWNvcmF0aW9ucyB3aGVuZXZlciB3aWR0aHMgY2hhbmdlIG9yIGNvbnRlbnQgY2hhbmdlcy4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrRGF0YUdyaWQucHJvdG90eXBlLl9sb2NhbGl6ZWRUaW1lbGluZUhlYWRlcldpZHRoKToKICAgICAgICAoV2ViSW5zcGVjdG9yLk5ldHdvcmtEYXRhR3JpZC5wcm90b3R5cGUuX3VwZGF0ZURlY29yYXRpb25zKToKICAgICAgICAoV2ViSW5zcGVjdG9yLk5ldHdvcmtEYXRhR3JpZC5wcm90b3R5cGUuX3VwZGF0ZURlY29yYXRpb25zUG9zaXRpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya0RhdGFHcmlkLnByb3RvdHlwZS5fdXBkYXRlSGVhZGVyVGltZXMpOgogICAgICAgIFBvc2l0aW9uIHRoZSBoZWFkZXIgZGVjb3JhdGlvbnMgb3ZlciB0aGUgdGltZWxpbmUgY29sdW1ucywgYW5kIHVwZGF0ZSB0aGUKICAgICAgICBoZWFkZXIgdGltZXMgdXNpbmcgb3VyIGN1cnJlbnQgY2FsY3VsYXRvcidzIGJvdW5kcy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lRGVjb3JhdGlvbnMuY3NzOgogICAgICAgICgudGltZWxpbmUtZGVjb3JhdGlvbnMpOgogICAgICAgIEFsbG93IGNsaWNraW5nIHRocm91Z2ggYWxsIGRlY29yYXRpb25zLCB0aGV5IGFyZSBzaW1wbHkgb3ZlcmxheXMuCgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZURlY29yYXRpb25zLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVEZWNvcmF0aW9ucy5wcm90b3R5cGUudXBkYXRlSGVhZGVyVGltZXMpOgogICAgICAgIEFkanVzdCBmb3IgYSBsZWZ0IC8gcmlnaHQgcGFkZGluZyBpbiB3aGljaCB3ZSB3b24ndCBsZXQgbGFiZWxzIG92ZXJmbG93IGludG8uCiAgICAgICAgVGhpcyBjYW4gYmUgaW1wcm92ZWQgZnVydGhlciBieSBwYWNraW5nIHRoZSBsYWJlbHMganVzdCBpbnRvIHRoZSB2aXNpYmxlIGFyZWEuCgoyMDEyLTAzLTA3ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDk2MDkwMz4gSW5jbHVkZSBOZXR3b3JrIHRpbWVsaW5lIGdyYXBoIGluIHRoZSBuZXR3b3JrIGRhdGEgZ3JpZAoKICAgICAgICBNYWtlIHRoZSB0aW1lbGluZSBkYXRhIGdyaWRzIHNoYXJlIGEgY29tbW9uIGJhc2UgY2xhc3Mgc28gd2UgZG9uJ3QgbmVlZAogICAgICAgIHRvIGNoZWNrIGZvciBmdW5jdGlvbnMgYmVmb3JlIGNhbGxpbmcgdGhlbS4gT25seSB0aGUgTmV0d29ya0RhdGFHcmlkCiAgICAgICAgaGFzIGEgZ3JhcGggcmlnaHQgbm93IGFuZCBuZWVkcyBleHRyYSBjYWxscywgb3RoZXIgb3RoZXJzIGFyZSBlbXB0eS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVzQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldy5wcm90b3R5cGUuX3JlY29yZGluZ1N0YXJ0ZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcucHJvdG90eXBlLl91cGRhdGVQZW5kaW5nUmVjb3Jkcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldy5wcm90b3R5cGUuX3VwZGF0ZUNhbGN1bGF0b3JCb3VuZHNGb3JQZW5kaW5nUmVjb3Jkcyk6CiAgICAgICAgTm8gbmVlZCB0byBjaGVjayBpZiB0aGUgRGF0YUdyaWQgaW1wbGVtZW50cyBhIGZ1bmN0aW9uIG5vdy4KICAgICAgICBBbHNvIGNhbGwgdXBkYXRlIG9uIHRoZSBkYXRhZ3JpZCBhZnRlciB3ZSB1cGRhdGUgcmVjb3Jkcy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lRGF0YUdyaWQuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVEYXRhR3JpZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZURhdGFHcmlkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuVGltZWxpbmVzRGF0YUdyaWQuZ2V0IGN1cnJlbnRDYWxjdWxhdG9yKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lRGF0YUdyaWQucHJvdG90eXBlLnVwZGF0ZUNhbGN1bGF0b3JCb3VuZGFyaWVzV2l0aFJlY29yZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZURhdGFHcmlkLnByb3RvdHlwZS51cGRhdGVDYWxjdWxhdG9yQm91bmRhcmllc1dpdGhEYXRhR3JpZE5vZGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVEYXRhR3JpZC5wcm90b3R5cGUucmVzZXQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVEYXRhR3JpZC5wcm90b3R5cGUudXBkYXRlKToKICAgICAgICBTaGFyZWQgYmFzZSBjbGFzcyBpbnRlcmZhY2UuCgogICAgICAgICogVXNlckludGVyZmFjZS9OZXR3b3JrRGF0YUdyaWQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrRGF0YUdyaWQpOgogICAgICAgIEV4dGVuZCBmcm9tIFRpbWVsaW5lRGF0YUdyaWQgaW5zdGVhZCBvZiBEYXRhR3JpZCBkaXJlY3RseS4KCjIwMTItMDMtMDcgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwOTYwOTAzPiBJbmNsdWRlIE5ldHdvcmsgdGltZWxpbmUgZ3JhcGggaW4gdGhlIG5ldHdvcmsgZGF0YSBncmlkCgogICAgICAgIFJlZmFjdG9yIHRoZSBkaXNwbGF5IG9mIHRpbWVsaW5lIGhlYWRlcnMgaW50byBhIHNlcGFyYXRlIGZpbGUuCiAgICAgICAgVGhpcyBjdXJyZW50bHkgaGFuZGxlcyBkcmF3aW5nIHRoZSBoZWFkZXIgZGl2aWRlcnMsIGJ1dCB3aWxsCiAgICAgICAgYWxzbyBtYW5hZ2UgZXZlbnQgbWFya2VycyAoRE9NQ29udGVudCBhbmQgb25sb2FkIGV2ZW50cykuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVPdmVydmlldy5jc3M6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lRGVjb3JhdGlvbnMuY3NzOiBBZGRlZC4KICAgICAgICAoLnRpbWVsaW5lLWRlY29yYXRpb25zKToKICAgICAgICAoLnRpbWVsaW5lLWRlY29yYXRpb25zID4gLmhlYWRlcik6CiAgICAgICAgKC50aW1lbGluZS1kZWNvcmF0aW9ucyA+IC5oZWFkZXIgPiAuZGl2aWRlcik6CiAgICAgICAgKC50aW1lbGluZS1kZWNvcmF0aW9ucyA+IC5oZWFkZXIgPiAuZGl2aWRlcjpsYXN0LWNoaWxkKToKICAgICAgICAoLnRpbWVsaW5lLWRlY29yYXRpb25zID4gLmhlYWRlciA+IC5kaXZpZGVyID4gLmxhYmVsKToKICAgICAgICAoLnRpbWVsaW5lLWRlY29yYXRpb25zID4gLmhlYWRlciA+IC5kaXZpZGVyOmZpcnN0LWNoaWxkID4gLmxhYmVsKToKICAgICAgICBNb3ZlIHRpbWVsaW5lLW92ZXJ2aWV3IGhlYWRlciBzdHlsZXMgdG8gdGltZWxpbmUtZGVjb3JhdGlvbnMgaGVhZGVyIHN0eWxlcy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lRGVjb3JhdGlvbnMuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVEZWNvcmF0aW9ucyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZURlY29yYXRpb25zLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuVGltZWxpbmVEZWNvcmF0aW9ucy5nZXQgZWxlbWVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZURlY29yYXRpb25zLnByb3RvdHlwZS5nZXQgaGVhZGVyRWxlbWVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZURlY29yYXRpb25zLnByb3RvdHlwZS51cGRhdGVIZWFkZXJUaW1lcyk6CiAgICAgICAgTWFuYWdlIHRoZSBoZWFkZXIgYW5kIGRpdmlkZXJzLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVPdmVydmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lT3ZlcnZpZXcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVPdmVydmlldy5wcm90b3R5cGUuY2xlYXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVPdmVydmlldy5wcm90b3R5cGUudXBkYXRlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lT3ZlcnZpZXcucHJvdG90eXBlLnVwZGF0ZUxheW91dCk6CiAgICAgICAgVXNlciB0aGUgZGVjb3JhdGlvbnMgY2xhc3MgdG8gZHJhdyBoZWFkZXJzIG92ZXIgdGhlIHRpbWVsaW5lLgoKMjAxMi0wMy0wNyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEluc3RhbGwgdGhlIFdlYiBJbnNwZWN0b3IgdXNlciBpbnRlcmZhY2UgZmlsZXMgaW4gUHJvZHVjdGlvbiBidWlsZHMgYWdhaW4uCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDk1NzY1NT4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFNjcmlwdHMvY29weS11c2VyLWludGVyZmFjZS1yZXNvdXJjZXMuc2g6IFJlbW92ZWQgZWFybHkgZXhpdCBhbmQgRklYTUUgY29tbWVudC4KCjIwMTItMDMtMDcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBJbXBsZW1lbnQgdGhlIFRleHRFZGl0b3IgYnJlYWtwb2ludCBkZWxlZ2F0ZXMgaW4gV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3NzAmMTAzMTg3Nzc+CgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRSZXNvdXJjZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLmNvbnRlbnRBdmFpbGFibGUpOiBQb3B1bGF0ZSB0aGUgYnJlYWtwb2ludAogICAgICAgIG1hcCBieSBhc2tpbmcgdGhlIERlYnVnZ2VyTWFuYWdlciBmb3IgYWxsIHRoZSBicmVha3BvaW50cyBmb3IgdGhpcyBVUkwuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUudGV4dEVkaXRvckJyZWFrcG9pbnRJbmZvKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUudGV4dEVkaXRvckJyZWFrcG9pbnRBZGRlZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLnRleHRFZGl0b3JCcmVha3BvaW50UmVtb3ZlZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLnRleHRFZGl0b3JCcmVha3BvaW50TW92ZWQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS50ZXh0RWRpdG9yQnJlYWtwb2ludFRvZ2dsZWQpOiBBZGRlZC4KCjIwMTItMDMtMDcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgdGhlIHN0YXJ0IG9mIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxODc3MCYxMDMxODc3Nz4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGVidWdnZXJNYW5hZ2VyLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLmdldCBicmVha3BvaW50cyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLmJyZWFrcG9pbnRzRm9yVVJMKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUuYWRkQnJlYWtwb2ludCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUJyZWFrcG9pbnQpOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEluY2xkdWVkIERlYnVnZ2VyTWFuYWdlci5qcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci4KCjIwMTItMDMtMDcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxODc3MCYxMDMxODc3Nz4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnJlYWtwb2ludC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlLmdldCB1cmwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUuZ2V0IGxpbmVOdW1iZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUuc2V0IGxpbmVOdW1iZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUuZ2V0IGluYWN0aXZlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlLnNldCBpbmFjdGl2ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZS5nZXQgZGlzYWJsZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUuc2V0IGRpc2FibGVkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlZCBCcmVha3BvaW50LmpzLgoKMjAxMi0wMy0wNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFN1cHBvcnQgZHJhZ2dpbmcgYnJlYWtwb2ludHMgdG8gbW92ZSB0aGVtIHRvIGEgbmV3IGxpbmUgb3IgdG8gZGVsZXRlIHRoZW0uCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxODc3MCYxMDMxODc3Nz4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX2d1dHRlckVsZW1lbnRNb3VzZURvd24pOiBBZGQgYSBuZXcgYnJlYWtwb2ludAogICAgICAgIGlmIHRoZSB0YXJnZXQgZG9lcyBub3QgYWxyZWFkeSBoYXZlIG9uZS4gT3RoZXJ3aXNlIHN0YXJ0IHRyYWNraW5nIHRoZSBleGlzdGluZwogICAgICAgIGJyZWFrcG9pbnQgZm9yIGRyYWdnaW5nLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX2RvY3VtZW50TW91c2VNb3ZlZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX2RvY3VtZW50TW91c2VVcCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX2d1dHRlckVsZW1lbnRNb3VzZVVwKTogT25seSB0b2dnbGUgb24gbW91c2UgdXAuCgoyMDEyLTAzLTA2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSBjbGlja2luZyBvbiB0aGUgbGluZSBndXR0ZXIgY3JlYXRlIGFuZCB0b2dnbGUgYnJlYWtwb2ludHMuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxODc3MCYxMDMxODc3Nz4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IpOiBBZGRlZCBtb3VzZXVwIGV2ZW50IGxpc3RlbmVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX2d1dHRlckVsZW1lbnRNb3VzZVVwKTogQWRkZWQuIE5vdGlmaWVzIHRoZSBkZWxlZ2F0ZSB0byBhZGQKICAgICAgICBvciB0b2dnbGUgYSBicmVha3BvaW50IHdoZW4gYSBsaW5lIG51bWJlciBpZiBjbGlja2VkLgoKMjAxMi0wMy0wNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIGRpc3BsYXlpbmcgYnJlYWtwb2ludHMuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxODc3MCYxMDMxODc3Nz4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0JyZWFrcG9pbnQucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0JyZWFrcG9pbnRAMngucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0JyZWFrcG9pbnRJbmFjdGl2ZS5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvQnJlYWtwb2ludEluYWN0aXZlQDJ4LnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuY3NzOgogICAgICAgICgudGV4dC1lZGl0b3IgPiAuZ3V0dGVyKToKICAgICAgICAoLnRleHQtZWRpdG9yID4gLmd1dHRlciA+IC5saW5lLW51bWJlci5oYXMtYnJlYWtwb2ludCk6CiAgICAgICAgKC50ZXh0LWVkaXRvciA+IC5ndXR0ZXIgPiAubGluZS1udW1iZXIuaGFzLWJyZWFrcG9pbnQgPiAudGV4dCk6CiAgICAgICAgKC50ZXh0LWVkaXRvciA+IC5ndXR0ZXIgPiAubGluZS1udW1iZXIuaGFzLWJyZWFrcG9pbnQuYnJlYWtwb2ludC1kaXNhYmxlZCA+IC50ZXh0KToKICAgICAgICAoLnRleHQtZWRpdG9yID4gLmd1dHRlciA+IC5saW5lLW51bWJlciA+IC5icmVha3BvaW50KToKICAgICAgICAoLnRleHQtZWRpdG9yID4gLmd1dHRlciA+IC5saW5lLW51bWJlci5icmVha3BvaW50LWluYWN0aXZlID4gLmJyZWFrcG9pbnQpOgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3VwZGF0ZUxpbmVOdW1iZXJzKTogQ2FsbCBfYWRkQnJlYWtwb2ludEVsZW1lbnRUb0xpbmVFbGVtZW50V2l0aEluZm8KICAgICAgICBhbmQgX3JlbW92ZVBvc3NpYmxlQnJlYWtwb2ludEVsZW1lbnRGcm9tTGluZUVsZW1lbnQgZGVwZW5kaW5nIG9uIHRoZSBkZWxlZ2F0ZSByZXN1bHQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fYWRkQnJlYWtwb2ludEVsZW1lbnRUb0xpbmVFbGVtZW50V2l0aEluZm8pOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9yZW1vdmVQb3NzaWJsZUJyZWFrcG9pbnRFbGVtZW50RnJvbUxpbmVFbGVtZW50KTogQWRkZWQuCgoyMDEyLTAzLTA2ICBNYXJrIFJvd2UgIDxtcm93ZUBhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDg3MzI4NT4gTWFrZSBXZWJJbnNwZWN0b3IuZnJhbWV3b3JrIHdvcmsgd2l0aCBzdGFnZWQgZnJhbWV3b3JrcwoKICAgICAgICBJbnN0YWxsIFdlYkluc3BlY3Rvci5mcmFtZXdvcmsgaW4gL1N5c3RlbS9MaWJyYXJ5L1N0YWdlZEZyYW1ld29ya3MvU2FmYXJpIHdoZW4gVVNFX1NUQUdJTkdfSU5TVEFMTF9QQVRIIGlzIHNldCB0byBZRVMuCgogICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCgogICAgICAgICogQ29uZmlndXJhdGlvbnMvV2ViSW5zcGVjdG9yRnJhbWV3b3JrLnhjY29uZmlnOgoKMjAxMi0wMy0wNiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBTaGFyZSBkdXBsaWNhdGVkIGNvZGUgdG8gZ2V0IGEgZGlzcGxheSBuYW1lIGZvciBhIG5vZGUuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVFbGVtZW50UGF0aENvbXBvbmVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVFbGVtZW50UGF0aENvbXBvbmVudCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVV0aWxpdGllcy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmRpc3BsYXlOYW1lRm9yTm9kZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKCjIwMTItMDMtMDYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwOTg5NTUwPiBJbnNwZWN0b3Igc2hvdWxkIGhpZGUgZG9ja2luZyBidXR0b24gd2hlbiB1bmRvY2tlZCBhbmQgbm90IGFsbG93ZWQgdG8gZG9jayAoNzg1NzUpCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0J1dHRvbk5hdmlnYXRpb25JdGVtLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnV0dG9uTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLmdldCBoaWRkZW4pOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnV0dG9uTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLnNldCBoaWRkZW4pOgogICAgICAgIEFsbG93IGEgYnV0dG9uIG5hdmlnYXRpb24gaXRlbSB0byBiZSBoaWRkZW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9JbnNwZWN0b3JGcm9udGVuZEFQSS5qczoKICAgICAgICAoSW5zcGVjdG9yRnJvbnRlbmRBUEkuc2V0RG9ja2luZ0F2YWlsYWJsZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLnVwZGF0ZURvY2tlZFN0YXRlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLnNldERvY2tpbmdBdmFpbGFibGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuX3VwZGF0ZURvY2tUb2dnbGVCdXR0b25WaXNpYmlsaXR5KToKICAgICAgICBVcGRhdGUgdGhlIGRvY2sgdG9nZ2xlIGJ1dHRvbidzIHZpc2liaWxpdHkgd2hlbiBpdCBpcyBjcmVhdGVkLAogICAgICAgIHdoZW4gdGhlIGF0dGFjaGVkIHN0YXRlIGNoYW5nZXMsIG9yIHdoZW4gYXZhaWxhYmlsaXR5IGNoYW5nZXMuCgoyMDEyLTAzLTA1ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIFdlYkluc3BlY3Rvci5CcmVha3BvaW50U2lkZWJhclBhbmVsIGFuZCBXZWJJbnNwZWN0b3IuRGVidWdTaWRlYmFyUGFuZWwuCgogICAgICAgIFN0YXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3NzAmMTAzMTg3Nzc+CgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0JyZWFrcG9pbnRTaWRlYmFyUGFuZWwuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludFNpZGViYXJQYW5lbCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RlYnVnU2lkZWJhclBhbmVsLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnU2lkZWJhclBhbmVsKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlZCBCcmVha3BvaW50U2lkZWJhclBhbmVsLmpzIGFuZCBEZWJ1Z1NpZGViYXJQYW5lbC5qcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOiBVc2UgQnJlYWtwb2ludFNpZGViYXJQYW5lbCBhbmQgRGVidWdTaWRlYmFyUGFuZWwgY2xhc3Nlcy4KCjIwMTItMDMtMDUgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgRm9sbG93LXVwIGFuZCByZW1vdmUgdW5uZWNlc3Nhcnkgb3V0bGluZTpub25lIGZyb20gc3BlY2lmaWMKICAgICAgICBkYXRhLWdyaWRzIG5vdyB0aGF0IHRoaXMgc3R5bGUgaXMgdGhlIGRlZmF1bHQuCgogICAgICAgICogVXNlckludGVyZmFjZS9BcHBsaWNhdGlvbkNhY2hlRnJhbWVDb250ZW50Vmlldy5jc3M6CiAgICAgICAgKC5jb250ZW50LXZpZXcuYXBwbGljYXRpb24tY2FjaGUtZnJhbWUgPiAuZGF0YS1ncmlkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29va2llU3RvcmFnZUNvbnRlbnRWaWV3LmNzczoKICAgICAgICAoLmNvbnRlbnQtdmlldy5jb29raWUtc3RvcmFnZSA+IC5kYXRhLWdyaWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9EYXRhYmFzZVRhYmxlQ29udGVudFZpZXcuY3NzOgogICAgICAgICguY29udGVudC12aWV3LmRhdGFiYXNlLXRhYmxlID4gLmRhdGEtZ3JpZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RldGFpbHNTZWN0aW9uLmNzczoKCjIwMTItMDMtMDQgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgV2ViU1FMIERhdGFiYXNlIGlubGluZSBkYXRhIGdyaWRzIHNob3VsZCBub3QgaGF2ZSBhbiBvdXRsaW5lCiAgICAgICAgd2hlbiBjbGlja2VkIG9uLiBUaGUgZGF0YSBncmlkIGNhbiBrZWVwIGl0cyB0YWJpbmRleCwgYnV0CiAgICAgICAganVzdCByZW1vdmUgdGhlIG91dGxpbmUgd2hlbiBpdHMgZm9jdXNlZC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YUdyaWQuY3NzOgogICAgICAgICguZGF0YS1ncmlkKToKCjIwMTItMDMtMDQgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgRm9ybWF0IHRoZSBDb29raWUgc2l6ZSBjb2x1bW4gdXNpbmcgc3RhbmRhcmQgc2l6ZSByZXByZXNlbnRhdGlvbnMuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Nvb2tpZVN0b3JhZ2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvb2tpZVN0b3JhZ2VDb250ZW50Vmlldy5wcm90b3R5cGUuX3JlYnVpbGRUYWJsZSk6CgoyMDEyLTAzLTA0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDk4MjQyMT4gRXZlbnQgTGlzdGVuZXJzIHNlY3Rpb24gZmxhc2hlcyB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIG5vZGVzCgogICAgICAgIFdlIG5vIGxvbmdlciBuZWVkIHRvIHJlc29sdmUgdGhlIG5vZGUsIHNpbmNlIHRoZSBTYWZhcmkgZnJvbnRlbmQKICAgICAgICBkb2Vzbid0IHNob3cgYW4gT2JqZWN0UHJvcGVydGllcyB0cmVlLiBXZSBhbHJlYWR5IGhhdmUgYWxsIHRoZQogICAgICAgIGluZm9ybWF0aW9uIHdlIG5lZWQgaW4gdGhlIGV2ZW50TGlzdGVuZXIgY2FsbGJhY2suIFJlbW92aW5nIHRoaXMKICAgICAgICBhc3luYyBjYWxsIHJlbW92ZXMgdGhlIGZsYXNoaW5nLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01Ob2RlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXZlbnRMaXN0ZW5lclNlY3Rpb25Hcm91cC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJTZWN0aW9uR3JvdXApOgoKMjAxMi0wMy0wNCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBXZSBzaG91bGQgc2F2ZSBzdGF0ZSB0aGUgZXhwYW5kZWQvY29sbGFwc2VkIHN0YXRlIG9mIGRpZmZlcmVudCBldmVudCB0eXBlcy4KICAgICAgICBKdXN0IGRlZmF1bHQgdG8gaGF2aW5nIHRoZW0gY29sbGFwc2VkIGFuZCBzYXZlIHRoZSBzdGF0ZSB3aGVuIHRoZXkgYXJlIGV4cGFuZGVkLgoKICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9EZXRhaWxzU2VjdGlvbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRldGFpbHNTZWN0aW9uKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXZlbnRMaXN0ZW5lclNlY3Rpb24uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyU2VjdGlvbik6CgoyMDEyLTAzLTA0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIERvbid0IGxpbmtpZnkgRXZlbnRMaXN0ZW5lcnMgd2l0aG91dCBhIFVSTC4KCiAgICAgICAgVGhpcyBjYW4gaGFwcGVuIGZvciBFdmVudExpc3RlbmVycyBhZGRlZCB0aHJvdWdoIHRoZSBJbnNwZWN0b3IncyBjb25zb2xlLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9FdmVudExpc3RlbmVyU2VjdGlvbkdyb3VwLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lclNlY3Rpb25Hcm91cC5wcm90b3R5cGUuX2Z1bmN0aW9uVGV4dE9yTGluayk6CgoyMDEyLTAzLTA0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgSG9vayB1cCB0aGUgU3RhcnQgVGltZWxpbmUgUmVjb3JkaW5nIERldmVsb3AgbWVudSBpdGVtcy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zcGVjdG9yRnJvbnRlbmRBUEkuanM6CiAgICAgICAgKEluc3BlY3RvckZyb250ZW5kQVBJLmlzVGltZWxpbmVQcm9maWxpbmdFbmFibGVkKTogUmV0dXJuIFdlYkluc3BlY3Rvci50aW1lbGluZU1hbmFnZXIucmVjb3JkaW5nLgogICAgICAgIChJbnNwZWN0b3JGcm9udGVuZEFQSS5zZXRUaW1lbGluZVByb2ZpbGluZ0VuYWJsZWQpOiBTaG93IHRoZSBJbnN0cnVtZW50IHBhbmVsIGFuZCB0aW1lbGluZSwgdGhlbiBzdGFydCByZWNvcmRpbmcuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKTogT25seSBsb2FkIHRoZSBsYXN0IGNvbnRlbnQgdmlldyBpZiBJbnNwZWN0b3JGcm9udGVuZEFQSSBkaWRuJ3Qgc2hvdyBvbmUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuX21haW5SZXNvdXJjZURpZENoYW5nZSk6IElnbm9yZSByZXNvdXJjZSBldmVudHMgd2hlbiB0aGVyZSBpc24ndCBhIG1haW4gZnJhbWUgeWV0LgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLnByb3RvdHlwZS5fcmVzb3VyY2VXYXNBZGRlZCk6IERpdHRvLgoKMjAxMi0wMy0wNCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA5ODE5ODY+IEJhY2sgYnV0dG9uIHNob3VsZCBiZSBlbmFibGVkIHdoZW4gbGluayBjYXVzZXMgYSBzd2l0Y2ggYmV0d2VlbiAiRE9NIFRyZWUiIGFuZCAiU291cmNlIENvZGUiCgogICAgICAgIFVwZGF0ZSB0aGUgYmFjay9mb3J3YXJkIGJ1dHRvbnMgd2hlbiB0aGUgcGF0aCBjb21wb25lbnRzIGNoYW5nZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudEJyb3dzZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuX2NvbnRlbnRWaWV3U2VsZWN0aW9uUGF0aENvbXBvbmVudERpZENoYW5nZSk6CgoyMDEyLTAzLTA0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIFJlbmFtZSBXZWJJbnNwZWN0b3IuZG9tQWdlbnQgLT4gV2ViSW5zcGVjdG9yLmRvbVRyZWVNYW5hZ2VyLgogICAgICAgIFRoaXMgY29kZSBpcyBjdXJyZW50bHkgdW5yZWFjaGFibGUuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbiBhbmQgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvT2JqZWN0UHJvcGVydGllc1NlY3Rpb24uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZS5fY29udGV4dE1lbnVFdmVudEZpcmVkKToKCjIwMTItMDMtMDQgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTQ2PiBJbXBsZW1lbnQgdGhlIEV2ZW50IExpc3RlbmVyIGluc3BlY3RvciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBNYWtlIG5vZGUgbmFtZSdzIGluIHRoZSBFdmVudExpc3RlbmVyIHNlY3Rpb24gbGlua3MgdGhhdCBqdW1wIHRvCiAgICAgICAgdGhhdCBub2RlLiBBbHNvLCB3aGVuIGhvdmVyaW5nIHRoZSBub2RlIGl0IGhpZ2hsaWdodHMgb24gdGhlIHBhZ2UuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVV0aWxpdGVzLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLmRpc3BsYXlOYW1lRm9yTm9kZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5saW5raWZ5Tm9kZVJlZmVyZW5jZSk6CiAgICAgICAgQ29waWVkIGZyb20gT3BlblNvdXJjZSdzIERPTVByZXNlbnRhdGlvblV0aWxzLmpzLCB1cGRhdGVkIGZvciB0aGUgbmV3CiAgICAgICAgZnJvbnRlbmQsIGFuZCByZW1vdmUgdW51c2VkIGNvZGUuCgogICAgICAgICogVXNlckludGVyZmFjZS9FdmVudExpc3RlbmVyU2VjdGlvbkdyb3VwLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lclNlY3Rpb25Hcm91cC5wcm90b3R5cGUuX25vZGVUZXh0T3JMaW5rKToKICAgICAgICBVc2UgdGhlIERPTVV0aWxpdGllcyBtZXRob2QgdG8gbGlua2lmeSB0aGUgbm9kZS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5jc3M6CiAgICAgICAgKC5ub2RlLWxpbmspOgoKMjAxMi0wMy0wNCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTAzMTk1NDY+IEltcGxlbWVudCB0aGUgRXZlbnQgTGlzdGVuZXIgaW5zcGVjdG9yIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIEFkZCBldmVudCBsaXN0ZW5lciBpbmZvcm1hdGlvbiB0byB0aGUgRE9NIE5vZGUgRGV0YWlscyBTaWRlYmFyIHBhbmVsLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01Ob2RlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVEZXRhaWxzU2lkZWJhclBhbmVsKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuRE9NTm9kZURldGFpbHNTaWRlYmFyUGFuZWwucmVmcmVzaCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3JlZnJlc2hFdmVudExpc3RlbmVycy5ldmVudExpc3RlbmVyc0NhbGxiYWNrKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVmcmVzaEV2ZW50TGlzdGVuZXJzKToKICAgICAgICBBZGQgYSBuZXcgIkV2ZW50IExpc3RlbmVycyIgU2VjdGlvbiBhbmQgcmVmcmVzaCBpdCB3aGVuIHRoZSBzZWxlY3RlZCBub2RlIGNoYW5nZXMuCiAgICAgICAgRWFjaCByb3cgaW4gdGhpcyBzZWN0aW9uIGlzIGFuIEV2ZW50TGlzdGVuZXJTZWN0aW9uLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGV0YWlsc1NlY3Rpb24uY3NzOgogICAgICAgICguZGV0YWlscy1zZWN0aW9uIC5kZXRhaWxzLXNlY3Rpb24gPiAuaGVhZGVyKToKICAgICAgICBTdHlsZSBhIG5lc3RlZCBkZXRhaWxzIHNlY3Rpb24gdG8gYmUgZ3JheS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RldGFpbHNTZWN0aW9uLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsc1NlY3Rpb24pOgogICAgICAgIFRha2UgYW4gZXh0cmEgcGFyYW1ldGVyIGluIHRoZSBDb25zdHJ1Y3RvciB0byBhdm9pZCBzYXZpbmcgY29sbGFwc2VkIHN0YXRlcy4KICAgICAgICBFdmVudExpc3RlbmVyIGV2ZW50IHR5cGUgc2VjdGlvbnMgd2lsbCBhbHdheXMgc3RhcnQgb3V0IGNvbGxhcHNlZC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V2ZW50TGlzdGVuZXJTZWN0aW9uLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJTZWN0aW9uKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJTZWN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lclNlY3Rpb24uYWRkTGlzdGVuZXIpOgogICAgICAgIEV2ZW50TGlzdGVuZXJTZWN0aW9uIGlzIGEgc3BlY2lmaWMgZXZlbnQgdHlwZSwgYW5kIGNvbnRhaW5zIGEgZ3JvdXAgZm9yIGVhY2ggbGlzdGVuZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9FdmVudExpc3RlbmVyU2VjdGlvbkdyb3VwLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJTZWN0aW9uR3JvdXApOgogICAgICAgIChXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lclNlY3Rpb25Hcm91cC5wcm90b3R5cGUuY29uc3RydWN0b3IuV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJTZWN0aW9uR3JvdXAudXBkYXRlLnVwZGF0ZVdpdGhOb2RlT2JqZWN0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJTZWN0aW9uR3JvdXAucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyU2VjdGlvbkdyb3VwLnVwZGF0ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyU2VjdGlvbkdyb3VwLnByb3RvdHlwZS5fbm9kZVRleHRPckxpbmspOgogICAgICAgIChXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lclNlY3Rpb25Hcm91cC5wcm90b3R5cGUuX3R5cGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lclNlY3Rpb25Hcm91cC5wcm90b3R5cGUuX2Z1bmN0aW9uVGV4dE9yTGluayk6CiAgICAgICAgRWFjaCBsaXN0ZW5lciBkaXNwbGF5cyBhIGZldyByb3dzIG9mIGluZm9ybWF0aW9uIGFib3V0IGl0LiBHby10byBhcnJvdwogICAgICAgIGxpbmtzIGFyZSBwcm92aWRlZCB0byBqdW1wIHRvIHRoZSBmdW5jdGlvbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V2ZW50TGlzdGVuZXJTZWN0aW9uR3JvdXAuY3NzOiBBZGRlZC4KICAgICAgICAoLmV2ZW50LWxpc3RlbmVyLXNlY3Rpb24gPiAuY29udGVudCA+IC5ncm91cCA+IC5yb3cuc2ltcGxlID4gLnZhbHVlIC5nby10by1hcnJvdyk6CiAgICAgICAgKC5ldmVudC1saXN0ZW5lci1zZWN0aW9uID4gLmNvbnRlbnQgPiAuZ3JvdXAgPiAucm93LnNpbXBsZSA+IC52YWx1ZSk6CiAgICAgICAgU3R5bGUgdGhlIHNpbXBsZSByb3cgaW4gdGhlIHNlY3Rpb24gdG8gcGxheSBuaWNlbHkgd2l0aCByZXNpemluZyBhbmQgdGhlIGdvLXRvIGFycm93LgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgogICAgICAgIEFkZCBuZXcgc3RyaW5ncyBhbmQgZmlsZXMuCgoyMDEyLTAzLTA0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDMxOTU0Nj4gSW1wbGVtZW50IHRoZSBFdmVudCBMaXN0ZW5lciBpbnNwZWN0b3IgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmVuYW1lIHRoZSBET00gTm9kZSBzaWRlYmFyJ3MgUHJvcGVydGllcyBvYmplY3QgZ3JvdXAgYW5kIG1ha2Ugc3VyZQogICAgICAgIHRvIHJlbGVhc2UgaXQgd2hlbiBpdHMgbm8gbG9uZ2VyIG5lZWRlZC4gVGhlcmUgd2lsbCBiZSBhIHNlcGFyYXRlCiAgICAgICAgb2JqZWN0IGdyb3VwIGZvciBFdmVudCBMaXN0ZW5lcnMuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZURldGFpbHNTaWRlYmFyUGFuZWwpOgoKMjAxMi0wMy0wNCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBBZGQgbWlzc2luZyBDb3B5cmlnaHQgZW50aXJlcyB0byB0aGUgcHJlLWJ1aWx0IExpY2Vuc2UuCgogICAgICAgIFJldmlld2VkIGJ5IERhbWlhbiBLYWxldGEuCgogICAgICAgICogU2NyaXB0cy9jb3B5LXVzZXItaW50ZXJmYWNlLXJlc291cmNlcy5zaDoKCjIwMTItMDMtMDQgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgRml4IG91dGxpbmUgYXJvdW5kIHByZXZpb3VzbHkgZWRpdGVkIERPTSBlbGVtZW50IGF0dHJpYnV0ZS4KCiAgICAgICAgV2hlbiBlZGl0aW5nLCB0aGUgdGFiSW5kZXggYXR0cmlidXRlIG9mIHRoZSBlbGVtZW50IGlzIHNldAogICAgICAgIHRvIDAgYW5kIHJlc3RvcmVkIHRvIHRoZSBvbGQgdmFsdWUgYWZ0ZXIgZWRpdGluZy4gSW4gbW9zdCBjYXNlcwogICAgICAgIHRoZSBwcmV2aW91cyB2YWx1ZSB3YXMgdW5zZXQsIHdoaWNoIHJldHVybnMgLTEuIFdoZW4gY2xlYW5pbmcKICAgICAgICB1cCBlbGVtLnRhYkluZGV4ID0gLTEgd2FzIGFjdHVhbGx5IGtlZXBpbmcgYXJvdW5kIHRoZSB0YWJJbmRleAogICAgICAgIGF0dHJpYnV0ZSBhbmQgZ2l2aW5nIHRoZSBlbGVtZW50IGFuIG91dGxpbmUgd2hlbiBjbGlja2VkIG9uY2UKICAgICAgICBhbmQgcmVjZWl2aW5nIDpmb2N1cy4KCiAgICAgICAgSW5zdGVhZCBvZiByZXN0b3JpbmcgdGhlIHRhYkluZGV4IHRvIC0xLCBqdXN0IHJlbW92ZSB0aGUKICAgICAgICB0YWJJbmRleCBhdHRyaWJ1dGUgYW5kIGF2b2lkIGl0cyBhc3NvY2lhdGVkIGZvY3VzIGJlaGF2aW9yLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9FZGl0aW5nU3VwcG9ydC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGluZy5jbGVhblVwQWZ0ZXJFZGl0aW5nKToKCjIwMTItMDMtMDQgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBQYXJ0IG9mIDxyZGFyOi8vcHJvYmxlbS8xMDk4MTYwNz4gQ1NTIGFuZCBKYXZhU2NyaXB0IHByb2ZpbGVzIG5lZWQgYSB3YXkgdG8gdG9nZ2xlIGJldHdlZW4gYWJzb2x1dGUgdGltZXMgYW5kIHBlcmNlbnRhZ2VzLgogICAgICAgIAogICAgICAgIFRoZSBDU1Mgc2VsZWN0b3IgcHJvZmlsZSBjb2RlIGhhZCB0aGUgYWJpbGl0eSB0byBzd2l0Y2ggZnJvbSBwZXJjZW50YWdlcyB0byB0aW1lIHdoZW4gdGhlCiAgICAgICAgdXNlciBkb3VibGUgY2xpY2tzIGFuIGVsZW1lbnQgaW4gdGhlICJUb3RhbCIgY29sdW1uLgogICAgICAgIAogICAgICAgIEhvd2V2ZXIsIHdlIHdlcmUgYWNjZXNzaW5nIGEgV2ViSW5zcGVjdG9yIHNldHRpbmcgdGhlIHdyb25nIHdheS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTZWxlY3RvclByb2ZpbGVWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU2VsZWN0b3JQcm9maWxlVmlldy5wcm90b3R5cGUuX21vdXNlRG93bkluRGF0YUdyaWQpOiBBY2Nlc3MgdGhlIFdlYkluc3BlY3RvciBzZXR0aW5nIHRoZSByaWdodCB3YXkuCgoyMDEyLTAzLTA0ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgSGF2ZSBDb25zb2xlTWVzc2FnZUltcGwgYW5kIFByb2ZpbGVEYXRhR3JpZFRyZWUgdXNlIFdlYkluc3BlY3Rvci5saW5raWZ5VVJMQXNOb2RlIGluc3RlYWQgb2YKICAgICAgICB1c2luZyB0aGVpciBvd24gY3VzdG9tIGNvZGUgdG8gZG8gdGhlIHNhbWUgdGhpbmcuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29uc29sZU1lc3NhZ2VJbXBsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS5fbGlua2lmeUxvY2F0aW9uKTogQ2FsbCBXZWJJbnNwZWN0b3IubGlua2lmeVVSTEFzTm9kZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUHJvZmlsZURhdGFHcmlkVHJlZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVEYXRhR3JpZE5vZGUucHJvdG90eXBlLl9saW5raWZ5TG9jYXRpb24pOiBEaXR0by4KCjIwMTItMDMtMDQgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBIb29rIHVwIHRoZSBsaW5rcyBpbiB0aGUgQ1NTIHNlbGVjdG9yIHByb2ZpbGUgdmlldy4KICAgICAgICAKICAgICAgICBSZXN0IG9mIDxyZGFyOi8vcHJvYmxlbS8xMDg5NzQ4OT4gSW1wbGVtZW50IENTUyBwcm9maWxpbmcgaW4gdGhlIG5ldyBXZWIgSW5zcGVjdG9yLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1NlbGVjdG9yUHJvZmlsZVZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTZWxlY3RvckRhdGFHcmlkTm9kZS5wcm90b3R5cGUuY3JlYXRlQ2VsbCk6IFBhc3MgdGhlIGxpbmUgbnVtYmVyIHRvIFdlYkluc3BlY3Rvci5saW5raWZ5VVJMQXNOb2RlLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU2VsZWN0b3JQcm9maWxlVmlldyk6IEFkZCBhIGNsaWNrIGV2ZW50IGxpc3RlbmVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU2VsZWN0b3JQcm9maWxlVmlldy5wcm90b3R5cGUuX21vdXNlV2FzQ2xpY2tlZCk6IENhbGwgV2ViSW5zcGVjdG9yLm9wZW5VUkwgb24gdGhlIGNsaWNrZWQgbGluay4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmxpbmtpZnlVUkxBc05vZGUpOiBTZXQgdGhlIGxpbmsncyBsaW5lTnVtYmVyIHByb3BlcnR5IHRvIGJlIHRoZSBwYXNzZWQgaW4gbGluZSBudW1iZXIuCgoyMDEyLTAzLTA0ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSB0aGUgY29sdW1ucyBpbiBhbGwgRGF0YUdyaWRzIHJlc2l6YWJsZS4KICAgICAgICAKICAgICAgICBUaGlzIGZpeGVzOgogICAgICAgIC0gSmF2YVNjcmlwdCBwcm9maWxlIHZpZXdzCiAgICAgICAgLSBDU1Mgc2VsZWN0b3IgcHJvZmlsZSB2aWV3cwogICAgICAgIC0gQXBwbGljYXRpb24gY2FjaGUgdmlld3MuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQXBwbGljYXRpb25DYWNoZUZyYW1lQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlRnJhbWVDb250ZW50Vmlldy5wcm90b3R5cGUudXBkYXRlTGF5b3V0KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU2VsZWN0b3JQcm9maWxlVmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1NlbGVjdG9yUHJvZmlsZVZpZXcucHJvdG90eXBlLnVwZGF0ZUxheW91dCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0phdmFTY3JpcHRQcm9maWxlVmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRQcm9maWxlVmlldy5wcm90b3R5cGUudXBkYXRlTGF5b3V0KToKCjIwMTItMDMtMDQgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBSZW5hbWUgc29tZSBmdW5jdGlvbnMgdG8gbWFrZSB0aGVtIG1vcmUgY2xlYXIgdGhhdCB0aGV5IGFyZSBmb3IgSmF2YVNjcmlwdC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Qcm9maWxlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVNYW5hZ2VyLnByb3RvdHlwZS5hZGRKYXZhU2NyaXB0UHJvZmlsZSk6IFJlbmFtZWQgZnJvbSBhZGRQcm9maWxlLgogICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZU1hbmFnZXIucHJvdG90eXBlLnNldFJlY29yZGluZ0phdmFTY3JpcHRQcm9maWxlKTogUmVuYW1lZCBmcm9tIHNldFJlY29yZGluZ1Byb2ZpbGUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Byb2ZpbGVyT2JzZXJ2ZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlck9ic2VydmVyLnByb3RvdHlwZS5hZGRQcm9maWxlSGVhZGVyKTogVXBkYXRlIGZvciBuYW1pbmcuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlck9ic2VydmVyLnByb3RvdHlwZS5zZXRSZWNvcmRpbmdQcm9maWxlKTogRGl0dG8uCgoyMDEyLTAzLTA0ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgSW1wbGVtZW50IHRoZSByZWNvcmRpbmcgb2YgQ1NTIHNlbGVjdG9yIHByb2ZpbGVzLCBhbmQgaGF2ZSB0aGVtIHNob3cgdXAgaW4gdGhlIGluc3BlY3RvciBhbmQgYmUKICAgICAgICBzZWxlY3RhYmxlLgogICAgICAgIAogICAgICAgIFRoZXJlIGFyZSBhIGZldyBsb29zZSBlbmRzIHRvIGNsZWFuIHVwIGFmdGVyIHRoaXMgcGF0Y2guCiAgICAgICAgCiAgICAgICAgLSBTb21lIHJlbmFtZXMgaW4gUHJvZmlsZU1hbmFnZXIuCiAgICAgICAgLSBNYWtlIGxpbmsgY2xpY2tpbmcgd29yayBpbiBDU1Mgc2VsZWN0b3IgcHJvZmlsZXMuCgogICAgICAgIE1vcmUgb2YgPHJkYXI6Ly9wcm9ibGVtLzEwODk3NDg5PiBJbXBsZW1lbnQgQ1NTIHByb2ZpbGluZyBpbiB0aGUgbmV3IFdlYiBJbnNwZWN0b3IuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczogVXBkYXRlZCBsb2NhbGl6ZWQgc3RyaW5ncwoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU2VsZWN0b3JQcm9maWxlVHlwZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1NlbGVjdG9yUHJvZmlsZVR5cGUucHJvdG90eXBlLm5leHRQcm9maWxlSWQpOiBSZXR1cm5zIHRoZSBhdmFpbGFibGUgcHJvZmlsZSBJRC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1NlbGVjdG9yUHJvZmlsZVR5cGUucHJvdG90eXBlLnN0YXJ0UmVjb3JkaW5nUHJvZmlsZSk6IERvbid0IGNhbGwgYW55dGhpbmcgaW4gdGhlIHByb2ZpbGVzIHBhbmVsLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU2VsZWN0b3JQcm9maWxlVHlwZS5wcm90b3R5cGUuc3RvcFJlY29yZGluZ1Byb2ZpbGUpOiBSZW1vdmUgdGhlIGNhbGxiYWNrIHRoYXQgY3JlYXRlcyBhIHByb2ZpbGUKICAgICAgICAgICAgaGVhZGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlldyk6IENoYW5nZSBQcm9maWxlT2JqZWN0IHRvIEphdmFTY3JpcHRQcm9maWxlT2JqZWN0IGFuZCBhZGQgYSBjYXNlIGZvciBDU1NTZWxlY3RvclByb2ZpbGVPYmplY3QuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlldy5pc1ZpZXdhYmxlKTogRGl0dG8uCgogICAgICAgICogVXNlckludGVyZmFjZS9JbnN0cnVtZW50U2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3JlY29yZFByb2ZpbGVHbHlwaE1vdXNlZE92ZXIpOiBDaGVjayB0aGUgQ1NTIHNlbGVjdG9yIGNhc2UuCiAgICAgICAgKFdlYkluc3BlY3Rvci5JbnN0cnVtZW50U2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVjb3JkUHJvZmlsZUdseXBoTW91c2VkRG93bik6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3JlY29yZFByb2ZpbGVHbHlwaENsaWNrZWQpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkluc3RydW1lbnRTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9wcm9maWxlVHlwZVdhc1NlbGVjdGVkKTogRGl0dG8uCgogICAgICAgICogVXNlckludGVyZmFjZS9KYXZhU2NyaXB0UHJvZmlsZVZpZXcuanM6IENoYW5nZSB0aGUgYXNzZXJ0LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBBZGQgbmV3IGZpbGVzLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUHJvZmlsZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlTWFuYWdlcik6IENyZWF0ZSBhIENTUyBzZWxlY3RvciBwcm9maWxlIHR5cGUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IuV2ViSW5zcGVjdG9yLlByb2ZpbGVNYW5hZ2VyLmluaXRpYWxpemUpOiBDbGVhciB0aGUgcmVjb3JkaW5nIENTUwogICAgICAgICAgICBzZWxlY3RvciBwcm9maWxlLgogICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZU1hbmFnZXIucHJvdG90eXBlLmlzUHJvZmlsaW5nQ1NTU2VsZWN0b3JzKTogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgcmVjb3JkaW5nIGEgQ1NTIHNlbGVjdG9yCiAgICAgICAgICAgIHByb2ZpbGUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlTWFuYWdlci5wcm90b3R5cGUuc3RhcnRQcm9maWxpbmdDU1NTZWxlY3RvcnMpOiBTdGFydCByZWNvcmRpbmcgYSBDU1Mgc2VsZWN0b3IgcHJvZmlsZSwgYW5kIGNyZWF0ZQogICAgICAgICAgICBhIFdlYkluc3BlY3Rvci5DU1NTZWxlY3RvclByb2ZpbGVPYmplY3QsIGFuZCBzZW5kIGFuIGV2ZW50IHRvIHRlbGwgdGhlIGluc3RydW1lbnQgc2lkZWJhciBwYW5lbCBhYm91dCBpdC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVNYW5hZ2VyLnByb3RvdHlwZS5zdG9wUHJvZmlsaW5nQ1NTU2VsZWN0b3JzKTogU3RvcCByZWNvcmRpbmcgdGhlIENTUyBzZWxlY3RvciBwcm9maWxlLCBhbmQgaW4gdGhlCiAgICAgICAgICAgIGNhbGxiYWNrIGZvciB3aGVuIHRoZSBwcm9maWxlIGZpbmlzaGVkLCB1cGRhdGUgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBDU1Mgc2VsZWN0b3IgcHJvZmlsZSBhbmQgdGVsbCB0aGUgaW5zdHJ1bWVudAogICAgICAgICAgICBzaWRlYmFyIHRoYXQgdGhlIHByb2ZpbGUgd2FzIHVwZGF0ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlTWFuYWdlci5wcm90b3R5cGUuYWRkUHJvZmlsZSk6IENyZWF0ZSBhIEphdmFTY3JpcHRQcm9maWxlT2JqZWN0IGluc3RlYWQgb2YgYSBQcm9maWxlT2JqZWN0LgogICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZU1hbmFnZXIucHJvdG90eXBlLnNldFJlY29yZGluZ1Byb2ZpbGUpOiBEaXR0by4KCjIwMTItMDMtMDQgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBBZGQgc3ViY2xhc3NlcyBvZiBQcm9maWxlT2JqZWN0IGZvciBDU1MgU2VsZWN0b3IgcHJvZmlsZSBhbmQgSmF2YVNjcmlwdCBwcm9maWxlcy4gVGhleSBhcmUgbm90IHVzZWQgYW55d2hlcmUsCiAgICAgICAgYnV0IHRoZXkgd2lsbCBiZSB0byBiZSBhYmxlIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiB0aGUgdHdvIHR5cGVzIG9mIHByb2ZpbGVzLgogICAgICAgIAogICAgICAgIEl0IGFsc28gZ2l2ZXMgdXMgYSB3YXkgdG8gc3RvcmUgdGhlIENTUyBzZWxlY3RvciBwcm9maWxlIGRhdGEgb24gdGhlIENTU1NlbGVjdG9yUHJvZmlsZU9iamVjdC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTZWxlY3RvclByb2ZpbGVPYmplY3QuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU2VsZWN0b3JQcm9maWxlT2JqZWN0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1NlbGVjdG9yUHJvZmlsZU9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IuV2ViSW5zcGVjdG9yLkNTU1NlbGVjdG9yUHJvZmlsZU9iamVjdC5nZXQgZGF0YSk6IFJldHVybnMKICAgICAgICAgICAgdGhlIGRhdGEuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTZWxlY3RvclByb2ZpbGVPYmplY3QucHJvdG90eXBlLnNldCBkYXRhKTogU2V0cyB0aGUgZGF0YS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1NlbGVjdG9yUHJvZmlsZU9iamVjdC5wcm90b3R5cGUuZ2V0IHRvdGFsVGltZSk6IFJldHVybnMgdGhlIHRvdGFsIHRpbWUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTZWxlY3RvclByb2ZpbGVPYmplY3QucHJvdG90eXBlLnNldCB0b3RhbFRpbWUpOiBTZXRzIHRoZSB0b3RhbCB0aW1lLgogICAgICAgICogVXNlckludGVyZmFjZS9KYXZhU2NyaXB0UHJvZmlsZU9iamVjdC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0UHJvZmlsZU9iamVjdCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogQWRkIG5ldyBmaWxlcwoKMjAxMi0wMy0wNCAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIEZpeCBzb21lIGlzc3VlcyBpbiBDU1NTZWxlY3RvclByb2ZpbGVWaWV3LmpzIHRvIGdldCBpdCBydW5uaW5nIHdpdGggdGhlIG5ldyBpbnNwZWN0b3IuCiAgICAgICAgCiAgICAgICAgVGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBzdXBlcmNsYXNzIGZyb20gVmlldyAtPiBDb250ZW50VmlldywgcmVtb3ZlcyBpbnN0YW5jZXMgb2YgdGhlIHBlcmNlbnQgYnV0dG9uLAogICAgICAgIGFuZCBjaGFuZ2VzICpzdHlsZUNsYXNzIC0+IGNsYXNzTGlzdC4qLgoKICAgICAgICBNb3JlIG9mIDxyZGFyOi8vcHJvYmxlbS8xMDg5NzQ4OT4gSW1wbGVtZW50IENTUyBwcm9maWxpbmcgaW4gdGhlIG5ldyBXZWIgSW5zcGVjdG9yLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1NlbGVjdG9yUHJvZmlsZVZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTZWxlY3RvckRhdGFHcmlkTm9kZS5wcm90b3R5cGUuZ2V0IGRhdGEpOiBTd2l0Y2ggdGhlIGZvcm1hdCBvZiBhIHNldHRpbmcuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTZWxlY3RvckRhdGFHcmlkTm9kZS5wcm90b3R5cGUuY3JlYXRlQ2VsbCk6IFVzZSBsaW5raWZ5VVJMQXNOb2RlIGluc3RlYWQgb2YgCiAgICAgICAgICAgIGxpbmtpZnlSZXNvdXJjZUFzTm9kZSAod2hpY2ggd2UgZG9uJ3QgaGF2ZSkuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTZWxlY3RvclByb2ZpbGVWaWV3KTogQWRkIGFuIGFzc2VydCwgY2hhbmdlIG91ciBzdXBlcmNsYXNzIHR5cGUsIHVwZGF0ZSB0aGUKICAgICAgICAgICAgc2V0dGluZyBzeW50YXgsIGFuZCBjYWxsIHVwZGF0ZVdpZHRocyBvbiB0aGUgZGF0YSBncmlkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU2VsZWN0b3JQcm9maWxlVmlldy5wcm90b3R5cGUucmVmcmVzaFNob3dBc1BlcmNlbnRzKTogVXNlIGNsYXNzTGlzdC5jb250YWlucy4KCjIwMTItMDMtMDIgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBCcmluZyBpbiBzb21lIGZpbGVzIGZyb20gb3BlbiBzb3VyY2UuCiAgICAgICAgCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTA4OTc0ODk+IEltcGxlbWVudCBDU1MgcHJvZmlsaW5nIGluIHRoZSBuZXcgV2ViIEluc3BlY3Rvci4KCiAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgSmluZyBKaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTZWxlY3RvclByb2ZpbGVUeXBlLmpzOiBBZGRlZC4gTW92ZWQgZnJvbSBDU1NTZWxlY3RvclByb2ZpbGVWaWV3LmpzIHRvIGl0cyBvd24gZmlsZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU2VsZWN0b3JQcm9maWxlVmlldy5qczogQWRkZWQuIENvcGllZCBmcm9tIG9wZW4gc291cmNlLgoKMjAxMi0wMy0wMiAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIFR1cm4gdGhlIGdseXBoIHRoYXQgc3RhcnRzIHByb2ZpbGVzIGluIHRoZSBpbnNwZWN0b3IgaW50byBhIHNlbGVjdCB3aXRoIHR3byBvcHRpb25zLgogICAgICAgIAogICAgICAgIC0gU3RhcnQgSmF2YVNjcmlwdCBQcm9maWxpbmcKICAgICAgICAtIFN0YXJ0IENTUyBQcm9maWxpbmcKICAgICAgICAKICAgICAgICBKYXZhU2NyaXB0IHByb2ZpbGluZyB1c2VzIHRoZSBzYW1lIGNvZGVwYXRoIGFzIGJlZm9yZSwgYW5kIENTUyBwcm9maWxpbmcgaXNuJ3QgaG9va2VkIHVwCiAgICAgICAgeWV0LCBidXQgd2lsbCBiZSBpbiBmdXR1cmUgcGF0Y2hlcy4KCiAgICAgICAgU3RhcnQgb2YgPHJkYXI6Ly9wcm9ibGVtLzEwODk3NDg5PiBJbXBsZW1lbnQgQ1NTIHByb2ZpbGluZyBpbiB0aGUgbmV3IFdlYiBJbnNwZWN0b3IuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczogVXBkYXRlIGxvY2FsaXplZCBzdHJpbmdzLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5jc3M6CiAgICAgICAgKC5zaWRlYmFyID4gLnBhbmVsLmluc3RydW1lbnQgPiAudGl0bGUtYmFyID4gLnJlY29yZC1nbHlwaCk6IEFkZCBzb21lIGFkZGl0aW9uYWwgcnVsZXMgc28KICAgICAgICAgICAgdGhpcyBzdHlsZSB3b3JrcyBmb3IgYSBzZWxlY3QgYW5kIGEgZGl2LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkluc3RydW1lbnRTaWRlYmFyUGFuZWwpOiBDaGFuZ2UgX3JlY29yZFByb2ZpbGVHbHlwaEVsZW1lbnQgdG8gYSBzZWxlY3QsIGFuZCBhZGQKICAgICAgICAgICAgb3B0aW9ucyB0byBpdC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkluc3RydW1lbnRTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9yZWNvcmRQcm9maWxlR2x5cGhNb3VzZWREb3duKTogQ2xlYXIgYW55IHNlbGVjdGlvbgogICAgICAgICAgICB0aGUgc2VsZWN0IG1pZ2h0IGhhdmUgaGFkLCBhbmQgcHJldmVudCBvcGVuaW5nIHRoZSBzZWxlY3QgaWYgd2UgYXJlIHN0b3BwaW5nIGEgcHJvZmlsZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkluc3RydW1lbnRTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9yZWNvcmRQcm9maWxlR2x5cGhDbGlja2VkKTogUmV0dXJuIGVhcmx5IGlmIHdlIGFyZQogICAgICAgICAgICBpZ25vcmluZyB0aGlzIGNsaWNrLgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3Byb2ZpbGVUeXBlV2FzU2VsZWN0ZWQpOiBTdGFydCBhIEphdmFTY3JpcHQgcHJvZmlsZQogICAgICAgICAgICBpZiB0aGF0IHdhcyB0aGUgdXNlcidzIHNlbGVjdGlvbiwgYW5kIGFkZCBhIEZJWE1FIGZvciBzdGFydGluZyBhIENTUyBwcm9maWxlLgoKMjAxMi0wMy0wNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFN0cmlrZSBvdXQgYWxsIHByb3BlcnRpZXMgdGhhdCBkaWQgbm90IHBhcnNlIGNvcnJlY3RseS4KCiAgICAgICAgVGhlIGJyb2tlbiBjYXNlIGlzIGlmIHlvdSB1c2U6IGJhY2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KC4uLik7CiAgICAgICAgYW5kIGJhY2tncm91bmQ6IC1tb3otbGluZWFyLWdyYWRpZW50KC4uLikgaW4gdGhlIHNhbWUgcnVsZS4gQmVmb3JlIHRoZXkKICAgICAgICB3b3VsZCBib3RoIGJlIHNob3duIG5vcm1hbCAoZXhjZXB0IGZvciB0aGUgd2FybmluZyBpY29uIG9uIHRoZSAtbW96IGxpbmUpLAogICAgICAgIG5vdyB0aGUgLW1veiBwcm9wZXJ0eSBpcyBhbHNvIHN0cmlrZWQgb3V0LgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwuY3NzOiBBZGRlZCBub3QtcGFyc2VkLW9rIHRvIHRoZQogICAgICAgIHJ1bGUgdGhhdCBhZGRzIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoIHRvIHByb3BlcnRpZXMuCgoyMDEyLTAzLTA0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgU3ludGF4IGhpZ2hsaWdodCB2YWx1ZXMgaW4gdGhlIFN0eWxlIGRldGFpbHMgc2lkZWJhci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZS51cGRhdGVUaXRsZS5wcm9jZXNzQ29sb3IpOiBDYWxsIG51bWJlclByb2Nlc3NvciBpbnN0ZWFkCiAgICAgICAgb2YgZGlyZWN0bHkgbWFraW5nIHRleHQgbm9kZXMgZm9yIHVua25vd24gY29sb3JzIGFuZCBjb2xvciB2YWx1ZXMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlLnVwZGF0ZVRpdGxlLnByb2Nlc3NLZXl3b3JkKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlLnVwZGF0ZVRpdGxlLnByb2Nlc3NTaW1wbGVTeW50YXgpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUudXBkYXRlVGl0bGUpOiBBZGQgbmV3IHByb2Nlc3NvcnMgZm9yIHN0cmluZ3MsIG51bWJlcnMsIGFuZCBrZXl3b3Jkcy4KCjIwMTItMDMtMDMgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA5Nzc4Njk+IFByb2ZpbGUgTGluayBpbiBMb2cgVmlldyBkb2Vzbid0IGp1bXAgdG8gUHJvZmlsZSBpbiBJbnN0cnVtZW50cyBWaWV3LgogICAgICAgIAogICAgICAgIEdpdmUgV2ViSW5zcGVjdG9yLm9wZW5VUkwgdGhlIGFiaWxpdHkgdG8gb3BlbiBVUkxzIHdpdGggdGhlIHdlYmtpdC1wcm9maWxlIHNjaGVtZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9JbnN0cnVtZW50U2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5wcm90b3R5cGUuc2hvd1Byb2ZpbGUpOiBMb29rIG92ZXIgdGhlIHRyZWUgZWxlbWVudHMgZm9yIG9uZSB3aXRoCiAgICAgICAgICAgIGEgcHJvZmlsZSB3aXRoIHRoZSBtYXRjaGluZyB0aXRsZSBhbmQgdHlwZSwgYW5kIHNob3cgaXQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5vcGVuVVJMKTogSWYgdGhlIFVSTCBoYXMgdGhlIHdlYmtpdC1wcm9maWxlIHNjaGVtZSwgY2FsbCBJbnN0cnVtZW50U2lkZWJhclBhbmVsLnNob3dQcm9maWxlLgogICAgICAgICogVXNlckludGVyZmFjZS9Qcm9maWxlVHlwZS5qczogQWRkIGEgY29uc3RhbnQgZm9yICJ3ZWJraXQtcHJvZmlsZSIuCgoyMDEyLTAzLTAzICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgSGlkZSB0aGUgRE9NIG5vZGUgaGlnaGxpZ2h0IHdoZW4gdGhlIERPTSB0cmVlIGNvbnRlbnQgdmlldyBpcyBoaWRkZW4uCgogICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlQ29udGVudFZpZXcucHJvdG90eXBlLmhpZGRlbik6IENhbGwgV2ViSW5zcGVjdG9yLmRvbVRyZWVNYW5hZ2VyLmhpZGVET01Ob2RlSGlnaGxpZ2h0KCkuCgoyMDEyLTAzLTAzICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUmVkdWNlIGZsYXNoaW5nIGluIHRoZSBkZXRhaWxzIHNpZGViYXIgd2hlbiBzd2l0Y2hpbmcgY29udGVudCB2aWV3cy4KCiAgICAgICAgVGhpcyBtYWtlcyBzdXJlIHRvIGZpcmUgdGhlIHJlcHJlc2VudGVkIG9iamVjdHMgZGlkIGNoYW5nZSBldmVudCBpbW1lZGlhdGVseSBhZnRlciB0aGUgY29udGVudAogICAgICAgIHZpZXcgY2hhbmdlcyBzbyB0aGUgc2lkZWJhciB1cGRhdGVzIGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIGNvbnRlbnQgdmlldy4gVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudAogICAgICAgIGlmIHRoZSBzaWRlYmFyIGlzIGF1dG8gc2hvd2luZyBvciBoaWRpbmcuCgogICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZW50QnJvd3Nlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyLnByb3RvdHlwZS5fZGlzcGF0Y2hDdXJyZW50UmVwcmVzZW50ZWRPYmplY3RzRGlkQ2hhbmdlRXZlbnRTb29uKToKICAgICAgICBVc2UgX2Rpc3BhdGNoQ3VycmVudFJlcHJlc2VudGVkT2JqZWN0c0RpZENoYW5nZUV2ZW50IGluc3RlYWQgb2YgYSBuZXN0ZWQgZnVuY3Rpb24uCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuX2Rpc3BhdGNoQ3VycmVudFJlcHJlc2VudGVkT2JqZWN0c0RpZENoYW5nZUV2ZW50KTogQWRkZWQuCiAgICAgICAgQ2xlYXJzIHRoZSB0aW1lb3V0IGlmIHRoZXJlIGlzIG9uZSBwZW5kaW5nLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIucHJvdG90eXBlLl9jdXJyZW50Q29udGVudFZpZXdEaWRDaGFuZ2UpOiBDYWxsIF9kaXNwYXRjaEN1cnJlbnRSZXByZXNlbnRlZE9iamVjdHNEaWRDaGFuZ2VFdmVudAogICAgICAgIGluc3RlYWQgb2YgX2Rpc3BhdGNoQ3VycmVudFJlcHJlc2VudGVkT2JqZWN0c0RpZENoYW5nZUV2ZW50U29vbi4KCjIwMTItMDMtMDMgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBdXRvIGhpZGUgdGhlIGRldGFpbHMgc2lkZWJhciB3aGVuIGVtcHR5IGlmIHRoZSB1c2VyIGNsb3NlZCBpdCB3aGVuIGVtcHR5LgoKICAgICAgICBUaGUgZGV0YWlscyBzaWRlYmFyIHdpbGwgc2hvdyBhZ2FpbiB3aGVuIHN3aXRjaGluZyB0byBhIGNvbnRlbnQgdmlldyB0aGF0IGhhcyBzaWRlYmFyIHBhbmVscyB0byBzaG93LgogICAgICAgIElmIHRoZSB1c2VyIHNob3dzIHRoZSBzaWRlYmFyIHdoZW4gZW1wdHkgaXQgd2lsbCBub3QgYXV0byBoaWRlIGFueW1vcmUuIElmIHRoZSB1c2VyIGhpZGVzIHRoZSBzaWRlYmFyCiAgICAgICAgd2hlbiBpdCBpc24ndCBlbXB0eSBpdCB3aWxsIHN0YXkgaGlkZGVuIHVudGlsIG1hbnVhbGx5IHNob3duLgoKICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOiBBZGRlZCBzZXR0aW5nLgogICAgICAgIChXZWJJbnNwZWN0b3IuX3NpZGViYXJDb2xsYXBzZWRTdGF0ZURpZENoYW5nZSk6IFVwZGF0ZSBzZXR0aW5nIGJhc2VkIG9uIGNvbGxhcHNlZCBzdGF0ZSBhbmQgc2lkZWJhciBwYW5lbCBjb3VudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLl9jb250ZW50QnJvd3NlclJlcHJlc2VudGVkT2JqZWN0c0RpZENoYW5nZSk6IFNob3cgb3IgaGlkZSB0aGUgZGV0YWlscyBzaWRlYmFyIHdoZW4gdGhlIHNpZGViYXIKICAgICAgICBwYW5lbCBjb3VudCBjaGFuZ2VzLgoKMjAxMi0wMy0wMyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCB0aGUgIlNob3cgQWxsIiBjaGVja2JveCB0byB0aGUgQ29tcHV0ZWQgU3R5bGUgc2VjdGlvbiBoZWFkZXIuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxOTUyMD4gSW1wbGVtZW50IHRoZSBTdHlsZSBpbnNwZWN0b3IgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczogVXBkYXRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLmNzczoKICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuZGV0YWlscy5jc3Mtc3R5bGUgLnN0eWxlcy1zZWN0aW9uIC5wcm9wZXJ0aWVzIGxpKTogQ2xlYW4gdXAgdG8gYmV0dGVyIGFsaWduIHRoZSB0ZXh0LgogICAgICAgICguc2lkZWJhciA+IC5wYW5lbC5kZXRhaWxzLmNzcy1zdHlsZSAuc3R5bGVzLXNlY3Rpb24ucmVhZC1vbmx5IC5wcm9wZXJ0aWVzID4gbGkpOiBEaXR0by4KICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuZGV0YWlscy5jc3Mtc3R5bGUgLnN0eWxlcy1zZWN0aW9uLmNvbXB1dGVkLXN0eWxlIC5wcm9wZXJ0aWVzIC5pbmhlcml0ZWQpOiBGaXhlZCB0byB3b3JrLgogICAgICAgICguc2lkZWJhciA+IC5wYW5lbC5kZXRhaWxzLmNzcy1zdHlsZSAuZGV0YWlscy1zZWN0aW9uLnNob3ctYWxsIC5zdHlsZXMtc2VjdGlvbi5jb21wdXRlZC1zdHlsZSAucHJvcGVydGllcyAuaW5oZXJpdGVkKTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbCk6IENyZWF0ZSB0aGUgY2hlY2tib3ggYW5kIGxhYmVsLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fY29tcHV0ZWRTdHlsZVNob3dBbGxDaGVja2JveFZhbHVlQ2hhbmdlZCk6IEFkZGVkLiBUb2dnbGUgdGhlIHNldHRpbmcKICAgICAgICBhbmQgc2hvdy1hbGwgY2xhc3Mgb24gdGhlIGNvbXB1dGVkIHN0eWxlIHNlY3Rpb24uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RldGFpbHNTZWN0aW9uLmNzczoKICAgICAgICAoLmRldGFpbHMtc2VjdGlvbiA+IC5oZWFkZXI6bm90KC5tb3VzZS1vdmVyLW9wdGlvbnMtZWxlbWVudCk6YWN0aXZlOjpiZWZvcmUpOiBEb24ndCBzaG93IGFjdGl2ZSBpZiB0aGUgb3B0aW9ucyBlbGVtZW50IGlzLgogICAgICAgICguZGV0YWlscy1zZWN0aW9uLmNvbGxhcHNlZCA+IC5oZWFkZXI6bm90KC5tb3VzZS1vdmVyLW9wdGlvbnMtZWxlbWVudCk6YWN0aXZlOjpiZWZvcmUpOiBEaXR0by4KICAgICAgICAoLmRldGFpbHMtc2VjdGlvbiA+IC5oZWFkZXIgPiBsYWJlbCk6IEFkZGVkLiBHZW5lcmljIHN1cHBvcnQgZm9yIGEgbGFiZWwgYW5kIGNoZWNrYm94LgogICAgICAgICguZGV0YWlscy1zZWN0aW9uLmNvbGxhcHNlZCAgPiAuaGVhZGVyID4gbGFiZWwpOiBEaXR0by4KICAgICAgICAoLmRldGFpbHMtc2VjdGlvbiA+IC5oZWFkZXIgPiBsYWJlbCA+IGlucHV0W3R5cGU9ImNoZWNrYm94Il0pOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGV0YWlsc1NlY3Rpb24uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZXRhaWxzU2VjdGlvbik6IE1ha2UgYSB0aXRsZSBlbGVtZW50IHNwYW4gc28gaXQgY2FuIGJlIHVwZGF0ZWQgc2VwYXJhdGVseS4gQXBwZW5kIHRoZSBvcHRpb25zIGVsZW1lbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EZXRhaWxzU2VjdGlvbi5wcm90b3R5cGUuZ2V0IHRpdGxlKTogVXNlIHRoZSB0aXRsZSBlbGVtZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsc1NlY3Rpb24ucHJvdG90eXBlLnNldCB0aXRsZSk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsc1NlY3Rpb24ucHJvdG90eXBlLl9oZWFkZXJFbGVtZW50Q2xpY2tlZCk6IFJldHVybiBlYXJseSBpZiBpdCBpcyB3aXRoaW4gdGhlIG9wdGlvbnMgZWxlbWVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRldGFpbHNTZWN0aW9uLnByb3RvdHlwZS5fb3B0aW9uc0VsZW1lbnRNb3VzZURvd24pOiBBZGRlZC4gQWRkIHRoZSBtb3VzZS1vdmVyLW9wdGlvbnMtZWxlbWVudCBjbGFzcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRldGFpbHNTZWN0aW9uLnByb3RvdHlwZS5fb3B0aW9uc0VsZW1lbnRNb3VzZVVwKTogQWRkZWQuIFJlbW92ZSB0aGUgbW91c2Utb3Zlci1vcHRpb25zLWVsZW1lbnQgY2xhc3MuCgoyMDEyLTAzLTAzICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwOTc5MzM5PiBMaW5rcyBpbiBMb2cgYW5kIFByb2ZpbGUgY29udGVudCB2aWV3cyBkb24ndCB0YWtlIHlvdSB0byB0aGUgY29ycmVjdCBsaW5lCgogICAgICAgIHI0MTI1OCBhZGRlZCB0aGUgYWJpbGl0eSB0byBqdW1wIHRvIGEgY2VydGFpbiBsaW5lIG51bWJlciB3aGVuIG9wZW5pbmcgYSByZXNvdXJjZQogICAgICAgIGluIHRoZSBpbnNwZWN0b3IgYnkgc2V0dGluZyB0aGUgbGluZU51bWJlciBwcm9wZXJ0eSBvbiB0aGUgbGluayBlbGVtZW50IHRoYXQgd2lsbAogICAgICAgIGJlIGNsaWNrZWQuCiAgICAgICAgCiAgICAgICAgQWRvcHQgdGhpcyBmb3IgSmF2YVNjcmlwdCBwcm9maWxlcyBhbmQgdGhlIExvZyBjb250ZW50IHZpZXcuIAoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnNvbGVNZXNzYWdlSW1wbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUuX2xpbmtpZnlMb2NhdGlvbik6IFNldCB0aGUgbGluZSBudW1iZXIgb2YgdGhlIGxpbmsKICAgICAgICAgICAgZWxlbWVudC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSmF2YVNjcmlwdFByb2ZpbGVWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFByb2ZpbGVWaWV3KTogQWRkIGEgbW91c2UgbGlzdGVuZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0UHJvZmlsZVZpZXcucHJvdG90eXBlLl9tb3VzZVdhc0NsaWNrZWQpOiBDYWxsIFdlYkluc3BlY3Rvci5vcGVuVVJMLgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fbW91c2VXYXNDbGlja2VkKTogR2V0IHRoZSBsaW5lIG51bWJlciBmcm9tIHRoZSBsaW5rCiAgICAgICAgICAgIGVsZW1lbnQgYW5kIHBhc3MgdGhhdCBsaW5lIG51bWJlciB0byBXZWJJbnNwZWN0b3Iub3BlblVSTC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUHJvZmlsZURhdGFHcmlkVHJlZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVEYXRhR3JpZE5vZGUucHJvdG90eXBlLl9saW5raWZ5TG9jYXRpb24pOiBTZXQgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZQogICAgICAgICAgICBsaW5rIGVsZW1lbnQuCgoyMDEyLTAzLTAzICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSAkMC4uJDkgd29yayBpbiB0aGUgbmV3IFdlYiBJbnNwZWN0b3IncyBjb25zb2xlLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlQ29udGVudFZpZXcucHJvdG90eXBlLl9zZWxlY3RlZE5vZGVEaWRDaGFuZ2UpOiBDYWxsIENvbnNvbGVBZ2VudC5hZGRJbnNwZWN0ZWROb2RlCiAgICAgICAgd2hlbiB0aGUgc2VsZWN0ZWQgRE9NIG5vZGUgY2hhbmdlcy4KCjIwMTItMDMtMDMgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwOTYwOTAzPiBJbmNsdWRlIE5ldHdvcmsgdGltZWxpbmUgZ3JhcGggaW4gdGhlIG5ldHdvcmsgZGF0YSBncmlkCgogICAgICAgIFdoZW4gd2UgbmVlZCB0byByZWZyZXNoIGFsbCBvZiB0aGUgcm93cywgd2UgbmVlZCB0byBtYWtlIGEgY29weSBvZiB0aGUKICAgICAgICBjaGlsZHJlbiBhcnJheSwgYmVjYXVzZSB0aGUgY2hpbGRyZW4gYXJyYXkgZ2V0cyByZXNvcnRlZCBhcyB0aGUgcm93cwogICAgICAgIGFyZSB1cGRhdGVkLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZXNDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fdXBkYXRlUGVuZGluZ1JlY29yZHNXaXRoTmV3Qm91bmRzKToKCjIwMTItMDMtMDMgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwOTYwOTAzPiBJbmNsdWRlIE5ldHdvcmsgdGltZWxpbmUgZ3JhcGggaW4gdGhlIG5ldHdvcmsgZGF0YSBncmlkCgogICAgICAgIFR3ZWFrIHRvIHByZXZlbnQgaGlkaW5nIGEgZmV3IG9mIHRoZSByb3dzIG9uIGVpdGhlciBlbmQgb2YgdGhlCiAgICAgICAgdmlzaWJsZSBib3VuZHMuIFRoaXMgbWFrZXMgc2Nyb2xsaW5nIGZlZWwgYSBsaXR0bGUgYml0IG5pY2VyLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZXNDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fdXBkYXRlT2Zmc2NyZWVuUm93cyk6CgoyMDEyLTAzLTAzICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDk2MDkwMz4gSW5jbHVkZSBOZXR3b3JrIHRpbWVsaW5lIGdyYXBoIGluIHRoZSBuZXR3b3JrIGRhdGEgZ3JpZAoKICAgICAgICBTdHlsZSB0aGUgY29sbGFwc2UtYnV0dG9uIGFuZCBkaXZpZGVyLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9EYXRhR3JpZC5jc3M6CiAgICAgICAgKC5kYXRhLWdyaWQgdGguc29ydGFibGU6bm90KC5tb3VzZS1vdmVyLWNvbGxhcHNlcik6YWN0aXZlKToKICAgICAgICAoLmRhdGEtZ3JpZCB0aC5zb3J0YWJsZS5zb3J0LWFzY2VuZGluZzpub3QoLm1vdXNlLW92ZXItY29sbGFwc2VyKTphY3RpdmUsIC5kYXRhLWdyaWQgdGguc29ydGFibGUuc29ydC1kZXNjZW5kaW5nOm5vdCgubW91c2Utb3Zlci1jb2xsYXBzZXIpOmFjdGl2ZSk6CiAgICAgICAgV2hlbiB0aGUgY29sbGFwc2UtYnV0dG9uIGlzIG1vdXNlZCBvdmVyLCB3ZSBzaG91bGRuJ3QgYXBwbHkgdGhlIDphY3RpdmUKICAgICAgICBzdHlsZSB0byB0aGUgZW50aXJlIHRhYmxlIGhlYWRlciBjZWxsIHdoZW4gaXRzIGNsaWNrZWQsIGJlY2F1c2UgdGhlCiAgICAgICAgdXNlciB3aWxsIGJlIGNsaWNraW5nIG9uIHRoZSBjb2xsYXBzZXItYnV0dG9uLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVzQ29udGVudFZpZXcuY3NzOgogICAgICAgICguY29udGVudC12aWV3LnRpbWVsaW5lcyA+IC5kYXRhLWdyaWQgdGguc29ydGFibGU6bm90KC5tb3VzZS1vdmVyLWNvbGxhcHNlcik6YWN0aXZlKToKICAgICAgICAoLmNvbnRlbnQtdmlldy50aW1lbGluZXMgPiAuZGF0YS1ncmlkIHRoLmNvbGxhcHNlcik6CiAgICAgICAgKC5jb250ZW50LXZpZXcudGltZWxpbmVzID4gLmRhdGEtZ3JpZCB0aC5jb2xsYXBzZXIgPiAuZGl2aWRlcik6CiAgICAgICAgKC5jb250ZW50LXZpZXcudGltZWxpbmVzID4gLmRhdGEtZ3JpZCB0aC5jb2xsYXBzZXIgPiAuY29sbGFwc2VyLWJ1dHRvbik6CiAgICAgICAgKC5jb250ZW50LXZpZXcudGltZWxpbmVzID4gLmRhdGEtZ3JpZCB0aC5jb2xsYXBzZXIgPiAuY29sbGFwc2VyLWJ1dHRvbjphY3RpdmUpOgogICAgICAgICguY29udGVudC12aWV3LnRpbWVsaW5lcyA+IC5kYXRhLWdyaWQgdGguY29sbGFwc2VyLmNvbGxhcHNlZCA+IC5jb2xsYXBzZXItYnV0dG9uKToKICAgICAgICAoLmNvbnRlbnQtdmlldy50aW1lbGluZXMgPiAuZGF0YS1ncmlkIHRoLmNvbGxhcHNlci5jb2xsYXBzZWQgPiAuY29sbGFwc2VyLWJ1dHRvbjphY3RpdmUpOgogICAgICAgICguY29udGVudC12aWV3LnRpbWVsaW5lcyA+IC5kYXRhLWdyaWQgdGguc29ydC1kZXNjZW5kaW5nLmNvbGxhcHNlciA+IGRpdjpmaXJzdC1jaGlsZCk6CiAgICAgICAgU3R5bGUgdGhlIGJ1dHRvbiB0byB0aGUgZmFyIHJpZ2h0LiBBZGp1c3QgdGhlIHNvcnQgaW5kaWNhdG9yCiAgICAgICAgdG8gYmUgdGhlIGxlZnQgb2YgdGhlIGNvbGxhcHNlLWJ1dHRvbiBhbmQgZGl2aWRlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lc0NvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcuZ2VuZXJhdGVFbWJvc3NlZENvbGxhcHNlSW1hZ2VzLmNhbnZhc0lkZW50aWZpZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcuZ2VuZXJhdGVFbWJvc3NlZENvbGxhcHNlSW1hZ2VzKToKICAgICAgICBHZW5lcmF0ZSBlbWJvc3NlZCBpbWFnZXMgb25jZSBmb3IgYWxsIFRpbWVsaW5lIERhdGFHcmlkcy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFHcmlkLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YUdyaWQucHJvdG90eXBlLl9tb3VzZW92ZXJDb2x1bW5Db2xsYXBzZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YUdyaWQucHJvdG90eXBlLl9tb3VzZW91dENvbHVtbkNvbGxhcHNlcik6CiAgICAgICAgQWRkIGEgY2xhc3MgdG8gdGhlIDx0aD4gc28gdGhhdCB0aGUgOmFjdGl2ZSBoaWdobGlnaHQgd29uJ3QgdGFrZQogICAgICAgIGFmZmVjdCB3aGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUgY29sbGFwc2VyIGJ1dHRvbiwgYnV0IGRvZXMgd2hlbgogICAgICAgIHRoZSB1c2VyIGNsaWNrcyBvbiB0aGUgdGVzdCBvZiB0aGUgaGVhZGVyIGNlbGwuCgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZVV0aWxpdGllcy5qczoKICAgICAgICAoZ2VuZXJhdGVFbWJvc3NlZEltYWdlcy5faW1hZ2VMb2FkZWQpOgogICAgICAgIE1ha2UgdGhlIEZvY3VzIHN0YXRlIG9wdGlvbmFsLCBhbmQgZG9uJ3QgZ2VuZXJhdGUgaXQgaWYgaXRzIG5vdCBuZWVkZWQuCgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTGVzc0NvbHVtbnMucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL01vcmVDb2x1bW5zLnBkZjogQWRkZWQuCiAgICAgICAgSW1hZ2VzIGFkZGVkIGZvciB0aGUgY29sbGFwc2UgYnV0dG9uLgoKMjAxMi0wMy0wMyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA5NjA5MDM+IEluY2x1ZGUgTmV0d29yayB0aW1lbGluZSBncmFwaCBpbiB0aGUgbmV0d29yayBkYXRhIGdyaWQKCiAgICAgICAgTW92ZSBnZW5lcmF0aW5nIGVtYm9zc2VkIGNhbnZhcyBpbWFnZXMgaW50byBJbWFnZVV0aWxpdGllcyBzbwogICAgICAgIHRoYXQgaXQgY2FuIGJlIHNoYXJlZCB3aXRoIERhdGFHcmlkIGluIHRoZSBuZXh0IHBhcnQuIFRoaXMgdHVybnMKICAgICAgICBhbGwgc2VsZi90aGlzIHJlZmVyZW5jZXMgaW50byBwYXJhbWV0ZXJzLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9CdXR0b25OYXZpZ2F0aW9uSXRlbS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkJ1dHRvbk5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5fZ2VuZXJhdGVJbWFnZXMpOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZVV0aWxpdGllcy5qczoKICAgICAgICAoZ2VuZXJhdGVFbWJvc3NlZEltYWdlcy5faW1hZ2VMb2FkZWQpOgogICAgICAgIChnZW5lcmF0ZUVtYm9zc2VkSW1hZ2VzLl9jcmVhdGVFbWJvc3NlZENhbnZhc0ltYWdlKToKICAgICAgICAoZ2VuZXJhdGVFbWJvc3NlZEltYWdlcy5fZHJhd0ltYWdlU2hhZG93KToKICAgICAgICAoZ2VuZXJhdGVFbWJvc3NlZEltYWdlcy5faW52ZXJ0TWFza0ltYWdlKToKICAgICAgICAoZ2VuZXJhdGVFbWJvc3NlZEltYWdlcy5fYXBwbHlJbWFnZU1hc2spOgogICAgICAgIChnZW5lcmF0ZUVtYm9zc2VkSW1hZ2VzKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgoKMjAxMi0wMy0wMyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA5NjA5MDM+IEluY2x1ZGUgTmV0d29yayB0aW1lbGluZSBncmFwaCBpbiB0aGUgbmV0d29yayBkYXRhIGdyaWQKCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YUdyaWQuY3NzOgogICAgICAgICguZGF0YS1ncmlkIHRoKToKICAgICAgICBXaGVuIGNvbHVtbnMgd2VyZSBjb2xsYXBzZWQgZG93biB0byB3aWR0aDowLCB0aGUgPHRoPiBjb250ZW50IHdhcyBvdmVyZmxvd2luZy4KICAgICAgICA8dGQ+IGFscmVhZHkgaGFkIG92ZXJmbG93OmhpZGRlbiwgc28gdGhpcyBqdXN0IGFkZHMgaXQgdG8gPHRoPi4KCiAgICAgICAgKC5kYXRhLWdyaWQgdGguc29ydC1kZXNjZW5kaW5nID4gZGl2OmZpcnN0LWNoaWxkKToKICAgICAgICAoLmRhdGEtZ3JpZCB0aC5zb3J0LWFzY2VuZGluZyA+IGRpdjpmaXJzdC1jaGlsZDo6YWZ0ZXIpOgogICAgICAgICguZGF0YS1ncmlkIHRoLnNvcnQtZGVzY2VuZGluZyA+IGRpdjpmaXJzdC1jaGlsZDo6YWZ0ZXIpOgogICAgICAgIE5vdyB0aGF0IGEgPHRoPiBtYXkgaGF2ZSBtdWx0aXBsZSBkaXZzLCBzcGVjaWZ5IHRoYXQgd2Ugd2FudCB0aGUKICAgICAgICBzb3J0IGluZGljYXRvciB0byBzaG93IHVwIGFmdGVyIHRoZSBmaXJzdCA8ZGl2PiwgYmVmb3JlIHRoZQogICAgICAgIGRpdmlkZXIgYW5kIGNvbGxhcHNlLWJ1dHRvbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFHcmlkLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YUdyaWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YUdyaWQucHJvdG90eXBlLnVwZGF0ZVdpZHRocyk6CiAgICAgICAgTW92ZSBjb2RlIGludG8gdGhlIGJsb2NrIHRoYXQgd2FzIG9ubHkgdXNlZCBpbiB0aGUgYmxvY2suCgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YUdyaWQucHJvdG90eXBlLmNvbHVtbldpZHRoc01hcCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhR3JpZC5wcm90b3R5cGUuYXBwbHlDb2x1bW5XaWR0aHNNYXApOgogICAgICAgIEEgYnJ1dGUgZm9yY2UgQVBJIHRvIGdldCAvIGFkanVzdCBhbGwgY29sdW1uIHdpZHRocy4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhR3JpZC5wcm90b3R5cGUuX2lzQ29sdW1uVmlzaWJsZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhR3JpZC5wcm90b3R5cGUuX3Nob3dDb2x1bW4pOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YUdyaWQucHJvdG90eXBlLl9oaWRlQ29sdW1uKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFHcmlkLnByb3RvdHlwZS5fcG9zaXRpb25SZXNpemVycyk6CiAgICAgICAgUmV3cml0ZSB0byBhY3R1YWxseSB3b3JrLiBTZXR0aW5nIGEgY29sZ3JvdXAgYXMgaGlkZGVuIG9yIGRpc3BsYXk6bm9uZQogICAgICAgIHdhcyBhY3R1YWxseSBpZ25vcmluZyB0aGUgY29sZ3JvdXAgYWxsdG9nZXRoZXIsIGJyZWFraW5nIHRoZSBub3JtYWwKICAgICAgICBjb2xncm91cFtpXSA9PT0gY29sdW1uW2ldIHJlbGF0aW9uc2hpcC4gU2V0dGluZyB0aGUgd2lkdGggdG8gMCBrZXB0CiAgICAgICAgdGhlIHJlbGF0aW9uc2hpcCwgYW5kIGhpZGVzIHRoZSBjb2x1bW4ncyBjb250ZW50cy4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhR3JpZC5wcm90b3R5cGUuX2NsaWNrSW5IZWFkZXJDZWxsKToKICAgICAgICAoV2ViSW5zcGVjdG9yLk5ldHdvcmtEYXRhR3JpZC5wcm90b3R5cGUud2lsbFRvZ2dsZUNvbHVtbkdyb3VwKToKICAgICAgICAoV2ViSW5zcGVjdG9yLk5ldHdvcmtEYXRhR3JpZC5wcm90b3R5cGUuZGlkVG9nZ2xlQ29sdW1uR3JvdXApOgogICAgICAgIEhhbmRsZSBjbGlja3Mgb24gdGhlIGNvbGxhcHNlciBidXR0b24uIFJ1biBzb21lIG9wdGlvbmFsIHN1YmNsYXNzCiAgICAgICAgbWV0aG9kcyBzbyBzdGF0ZSBjYW4gYmUgc2F2ZWQgYW5kIHNvIHRoZSBjb2x1bW4gd2lkdGhzIGNhbiBiZSBhZGp1c3RlZC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05ldHdvcmtEYXRhR3JpZC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLk5ldHdvcmtEYXRhR3JpZC5wcm90b3R5cGUud2lsbFRvZ2dsZUNvbHVtbkdyb3VwKToKICAgICAgICAoV2ViSW5zcGVjdG9yLk5ldHdvcmtEYXRhR3JpZC5wcm90b3R5cGUuZGlkVG9nZ2xlQ29sdW1uR3JvdXApOgogICAgICAgIEhhbmRsZSB0b2dnbGluZyB0aGUgY29sdW1uIHNpemVzLiBXaGVuIGNvbGxhcHNpbmcsIGtlZXAgdGhlICJOYW1lIgogICAgICAgIGZpZWxkIHRoZSBzYW1lIHdpZHRoIHRoYXQgaXQgd2FzLiBCdXQgd2hlbiBleHBhbmRpbmcsIGp1c3QgcmVsYXlvdXQKICAgICAgICBiYWNrIHRvIHdoYXRldmVyIHRoZSBvcmlnaW5hbCB3aWR0aHMgd2VyZS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lc0NvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcpOgogICAgICAgIEFkZCByb3dzIHRvIGEgImRldGFpbHMiIGNvbHVtbiBncm91cCBhbmQgc3BlY2lmeSBhIGNvbGxhcHNlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lc0NvbnRlbnRWaWV3LmNzczoKICAgICAgICAoLmNvbnRlbnQtdmlldy50aW1lbGluZXMgPiAuZGF0YS1ncmlkIC5jb2x1bW4tZ3JvdXAtZGV0YWlscyk6CiAgICAgICAgU2xpZ2h0bHkgZGltIHRoZSAiZGV0YWlscyIgY29sdW1uIGdyb3VwLgoKMjAxMi0wMy0wMyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBVcGRhdGUgb2Zmc2NyZWVuIHJvd3MgYWZ0ZXIgc29ydGluZy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVzQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldy5wcm90b3R5cGUuX3NvcnRDdXJyZW50RGF0YUdyaWQpOgoKMjAxMi0wMy0wMyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBTb3J0aW5nIHRoZSBOZXR3b3JrIFRpbWVsaW5lIGNvbHVtbiBzaG91bGQgc29ydCBieSByZXNvdXJjZQogICAgICAgIHJlc3BvbnNlIHRpbWUsIGZhbGxpbmcgYmFjayB0byByZXF1ZXN0IHRpbWUuIE1ha2UgdGhpcwogICAgICAgIHRoZSBkZWZhdWx0IHNvcnQgZm9yIHRoZSBEYXRhR3JpZC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VUaW1lbGluZURhdGFHcmlkTm9kZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVGltZWxpbmVEYXRhR3JpZE5vZGUucHJvdG90eXBlLmdldCBkYXRhKToKCjIwMTItMDMtMDMgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgRml4IHRoZSBUaW1lbGluZSBHcmlkIHNpemVzIGZvciB0aGUgUmVtb3RlRGVidWdnZXIuIEl0IGxvb2tzCiAgICAgICAgYXMgaWYgdGhpcyBpc24ndCBuZWVkZWQgYW55bW9yZSBhbmQgYWN0dWFsbHkgZGlzcGxheXMgcG9vcmx5CiAgICAgICAgb24gMTAuNy4zIFdlYktpdC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVzQ29udGVudFZpZXcuY3NzOgoKMjAxMi0wMy0wMyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIERvbid0IG1vdmUgdG8gZWRpdGluZyB0aGUgbmV4dCBwcm9wZXJ0eSB3aGVuIHByZXNzaW5nIHJldHVybi9lbnRlciB3aGlsZSBlZGl0aW5nIGEgcHJvcGVydHkgdmFsdWUuCgogICAgICAgIFByZXNzaW5nIHJldHVybi9lbnRlciBzdGlsbCBtb3ZlcyB0byB0aGUgdmFsdWUgd2hlbiB5b3UgYXJlIGVkaXRpbmcgdGhlIHByb3BlcnR5IG5hbWUuIElmIHlvdSB3YW50CiAgICAgICAgdG8gZWRpdCB0aGUgbmV4dCBwcm9wZXJ0eSwgdGhhdCBpcyB3aGF0IHRhYiBpcyBmb3IhCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxOTUyMD4gSW1wbGVtZW50IHRoZSBTdHlsZSBpbnNwZWN0b3IgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZS5lZGl0aW5nTmFtZVZhbHVlS2V5RG93bik6IFN1cHBvcnQgYSBtb3ZlIGRpcmVjdGlvbiBvZiAibm9uZSIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlLnNlbGVjdEVsZW1lbnQuZWRpdGluZ0NvbW1pdHRlZCk6IERvbid0IGNhbGwgdGhlIG1vdmVUb05leHRDYWxsYmFjawogICAgICAgIGlmIHRoZXJlIGlzIG5vIG1vdmVEaXJlY3Rpb24gb3IgbW92ZURpcmVjdGlvbiBpcyAibm9uZSIuCgoyMDEyLTAzLTAzICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgT3ZlcnJpZGUgVHJlZUVsZW1lbnQub25kYmxjbGljayBpbnN0ZWFkIG9mIGhhdmluZyBhIHNlcGFyYXRlIGRibGNsaWNrIGxpc3RlbmVyIGluIFN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZS5vbmF0dGFjaCk6IFJlbW92ZWQgZGJsY2xpY2sgZXZlbnQgbGlzdGVuZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlLm9uZGJsY2xpY2spOiBSZW5hbWVkIGZyb20gX3N0YXJ0RWRpdGluZy4KCjIwMTItMDMtMDMgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIFVSTHMgdGhhdCBnbyB0byB0aGUgbWFpbiByZXNvdXJjZSBvZiBhIGZyYW1lIG9wZW4gaW4gdGhlIFdlYiBJbnNwZWN0b3IgaW5zdGVhZCBvZiBpbiBhIG5ldyB0YWIuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5vcGVuVVJMKTogQ2hlY2sgZnJhbWUubWFpblJlc291cmNlLnVybCBiZWZvcmUgY2FsbGluZyBmcmFtZS5yZXNvdXJjZUZvclVSTC4KCjIwMTItMDMtMDIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBGaXggYW4gZXJyb3IgdGhhdCB3YXMgc2hvd2luZyBpbiB0aGUgY29uc29sZSBhbmQgcHJldmVudGVkIHJldmFsaWRhdGlvbiBvZiBzdHlsZWQgd2hlbiBET00gYXR0cmlidXRlcyBhcmUgcmVtb3ZlZC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fYXR0cmlidXRlc01vZGlmaWVkKTogUmVuYW1lZCBmcm9tIF9hdHRyaWJ1dGVzUmVtb3ZlZE9yU3R5bGVJbnZhbGlkYXRlZAogICAgICAgIHNpbmNlIF9hdHRyaWJ1dGVzTW9kaWZpZWQgaXMgd2hhdCB3YXMgcmVnaXN0ZXJlZCBhcyB0aGUgZXZlbnQgbGlzdGVuZXIuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL09iamVjdC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLk9iamVjdC5hZGRFdmVudExpc3RlbmVyKTogQXNzZXJ0IHRoZSBldmVudCB0eXBlIGFuZCBsaXN0ZW5lciBhcmUgbm90IG51bGwvdW5kZWZpbmVkL2VtcHR5LgogICAgICAgIChXZWJJbnNwZWN0b3IuT2JqZWN0LnJlbW92ZUV2ZW50TGlzdGVuZXIpOiBEaXR0by4KCjIwMTItMDMtMDMgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBVc2UgYSBnby10byBhcnJvdyB0byBsaW5rIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3R5bGUgcnVsZSBpbiB0aGUgc3R5bGVzaGVldCByZXNvdXJjZS4KCiAgICAgICAgVGhlIHRleHQgbGlua3MgYWRkZWQgYSBsb3Qgb2YgY2x1dHRlciBhbmQgb2Z0ZW4gY29sbGlkZWQgd2l0aCB0aGUgc2VsZWN0b3IgaW4gYmFkIHdheXMuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxOTUyMD4gSW1wbGVtZW50IHRoZSBTdHlsZSBpbnNwZWN0b3IgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLmNzczoKICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuZGV0YWlscy5jc3Mtc3R5bGUgLnN0eWxlcy1zZWN0aW9uIC5nby10by1hcnJvdyk6IFNpemVkIHRvIGZpdCB0aGUgbGluZS4gSGlkZGVuIGJ5IGRlZmF1bHQuCiAgICAgICAgKC5zaWRlYmFyID4gLnBhbmVsLmRldGFpbHMuY3NzLXN0eWxlIC5zdHlsZXMtc2VjdGlvbjpob3ZlciAuZ28tdG8tYXJyb3cpOiBSZXZlYWwgb24gaG92ZXIgb2YgdGhlIHNlY3Rpb24uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N0eWxlUHJvcGVydGllc1NlY3Rpb24uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZS5fbGlua2lmeSk6IENyZWF0ZSB0aGUgZ28tdG8gYXJyb3cgaW5zdGVhZCBvZiBhIHRleHQgbGluay4KCjIwMTItMDMtMDIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBTaG93IHVzZXIgYWdlbnQgcnVsZXMgaW4gYSBzZXBhcmF0ZSBzZWN0aW9uIGNhbGxlZCAiQmFzZSBTdHlsZSBSdWxlcyIuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxOTUyMD4gSW1wbGVtZW50IHRoZSBTdHlsZSBpbnNwZWN0b3IgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczogVXBkYXRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsKTogQ3JlYXRlIHRoZSBCYXNlIFN0eWxlIFJ1bGVzIHNlY3Rpb24uCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9yZWJ1aWxkU2VjdGlvbnMuYnVpbGRTZWN0aW9ucy5jcmVhdGVNYXRjaGVkUnVsZUdyb3Vwcyk6IFRha2UgYW4gYXJyYXkgYW5kCiAgICAgICAgcmV0dXJuIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgYXJyYXkgaW5zdGVhZCBvZiBmaXhlZCBtb2RpZmljYXRpb24gb2YgdGhlIG1hdGNoZWRSdWxlR3JvdXBzIGFycmF5LgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVidWlsZFNlY3Rpb25zLmJ1aWxkU2VjdGlvbnMpOiBVcGRhdGUgdGhlIHVzZXIgYWdlbnQgc2VjdGlvbiBzZXBhcmF0ZWx5LgogICAgICAgICogVXNlckludGVyZmFjZS9TdHlsZVByb3BlcnRpZXNTZWN0aW9uLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUuX2NyZWF0ZVJ1bGVPcmlnaW5Ob2RlKTogRG9uJ3Qgc2hvdyBhbiBvcmlnaW4gZm9yIHVzZXIgYWdlbnQgcnVsZXMsIHNpbmNlIHRoZXkgYXJlCiAgICAgICAgaW4gdGhlaXIgb3duIHNlY3Rpb24gbm93LgoKMjAxMi0wMy0wMiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFN0eWxlIHRoZSBTdHlsZSBkZXRhaWxzIHNpZGViYXIuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxOTUyMD4gSW1wbGVtZW50IHRoZSBTdHlsZSBpbnNwZWN0b3IgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLmNzczogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3JlYnVpbGRTZWN0aW9ucy5idWlsZFNlY3Rpb25zLmNyZWF0ZVN0eWxlUHJvcGVydGllc1NlY3Rpb24pOgogICAgICAgIFN0b3AgcGFzc2luZyBmYWxzZSBmb3IgaXNGaXJzdFNlY3Rpb24gYXJndW1lbnQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbXB1dGVkU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbXB1dGVkU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbik6IFVwZGF0ZSBjbGFzc05hbWUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RldGFpbHNTZWN0aW9uLmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlZCBDU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwuY3NzLgogICAgICAgICogVXNlckludGVyZmFjZS9TdHlsZVByb3BlcnRpZXNTZWN0aW9uLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbik6IFJlbW92ZSBpc0ZpcnN0U2VjdGlvbiBhcmd1bWVudC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZS51cGRhdGVUaXRsZSk6IENyZWF0ZSBhbmQgYXBwZW5kIHRoZSBleHBhbmQgZWxlbWVudCBmb3IgdGhlCiAgICAgICAgZGlzY2xvc3VyZSB0cmlhbmdsZSB1c2UgZm9yIHNob3J0aGFuZHMuIENyZWF0ZSBhbiBpbm5lciBlbGVtZW50IGZvciB0aGUgc3dhdGNoIGZvciB0cmFuc3BhcmVudCBjb2xvcnMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlLnJlc3RvcmVOYW1lRWxlbWVudCk6IFJlbW92ZSAid2Via2l0LSIgY2xhc3MgcHJlZml4LgogICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZS5faXNOYW1lRWxlbWVudCk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZS5faXNWYWx1ZUVsZW1lbnQpOiBEaXR0by4gUmV0dXJuIGVhcmx5IGlmIGl0IGlzIHRoZSBleHBhbmQgZWxlbWVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUuaXNFdmVudFdpdGhpbkRpc2Nsb3N1cmVUcmlhbmdsZSk6IEFkZGVkLgoKMjAxMi0wMy0wMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFNob3cgYW4gZW1wdHkgY29udGVudCBtZXNzYWdlIGluIHRoZSBJc3N1ZSBzaWRlYmFyIHdoZW4gdGhlcmUgYXJlIG5vIGlzc3Vlcy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczogVXBkYXRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSXNzdWVTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Jc3N1ZVNpZGViYXJQYW5lbCk6IENhbGwgX3VwZGF0ZUVtcHR5Q29udGVudFBsYWNlaG9sZGVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuSXNzdWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLl91cGRhdGVFbXB0eUNvbnRlbnRQbGFjZWhvbGRlcik6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuSXNzdWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9pc3N1ZXNDbGVhcmVkKTogQ2FsbCBfdXBkYXRlRW1wdHlDb250ZW50UGxhY2Vob2xkZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Jc3N1ZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2NoZWNrRm9yT2xkUmVzb3VyY2VzLmRlbGF5ZWRXb3JrKTogRGl0dG8uCgoyMDEyLTAzLTAxICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRG9uJ3Qgc2hvdyB0aGUgc2FtZSBub2RlIHR3aWNlIGluIHRoZSBuYXZpZ2F0aW9uIGJhciB3aGVuIHRoZSBjbG9zZSB0YWcgaXMgc2VsZWN0ZWQgaW4gdGhlIERPTSB0cmVlLgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlQ29udGVudFZpZXcucHJvdG90eXBlLmdldCBzZWxlY3Rpb25QYXRoQ29tcG9uZW50cyk6IFNraXAgY2xvc2UgdGFnIHRyZWUgZWxlbWVudHMuCgoyMDEyLTAzLTAxICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgVXBkYXRlIHRoZSBTdHlsZSBkZXRhaWxzIHNpZGViYXIgd2hlbiBzdHlsZXNoZWV0cywgdGhlIG1lZGlhIHF1ZXJ5IHJlc3VsdCwgb3IgdGhlIERPTSBjaGFuZ2VzLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTk1MjA+IEltcGxlbWVudCB0aGUgU3R5bGUgaW5zcGVjdG9yIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbCk6IEFkZGVkIGV2ZW50IGxpc3RlbmVycyBmb3IgdGhlIERPTSBhbmQgQ1NTIGNoYW5nZXMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLmdldCBfdXNlck9wZXJhdGlvbkluUHJvZ3Jlc3MpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3JlYnVpbGRTZWN0aW9uc0lmTm9uVXNlckFjdGlvbik6IEFkZGVkLiBDYWxsIF9yZWJ1aWxkU2VjdGlvbnMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9hdHRyaWJ1dGVzTW9kaWZpZWQpOiBBZGRlZC4gQ2FsbCBfcmVidWlsZFNlY3Rpb25zSWZOb25Vc2VyQWN0aW9uLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fYXR0cmlidXRlc1JlbW92ZWQpOiBBZGRlZC4gRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9zdHlsZUludmFsaWRhdGVkKTogQWRkZWQuIERpdHRvLgoKMjAxMi0wMy0wMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEluY2x1ZGUgcHNldWRvIGVsZW1lbnRzIGluIHRoZSBTdHlsZSBkZXRhaWxzIHNpZGViYXIuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxOTUyMD4gSW1wbGVtZW50IHRoZSBTdHlsZSBpbnNwZWN0b3IgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVidWlsZFNlY3Rpb25zLmJ1aWxkU2VjdGlvbnMpOiBHbyB0aHJvdWdoIHRoZSBwc2V1ZG8gZWxlbWVudHMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9yZWJ1aWxkU2VjdGlvbnMuYnVpbGRTZWN0aW9ucy5jcmVhdGVTdHlsZVByb3BlcnRpZXNTZWN0aW9uKTogQnJva2VuIG91dCBmcm9tCiAgICAgICAgY3JlYXRlU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbkdyb3VwLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVidWlsZFNlY3Rpb25zLmJ1aWxkU2VjdGlvbnMuY3JlYXRlU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbkdyb3VwKTogT25seSBjcmVhdGUKICAgICAgICB0aGUgcm93IGFuZCBncm91cCBub3cuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9yZWJ1aWxkU2VjdGlvbnMuYnVpbGRTZWN0aW9ucy5jcmVhdGVNYXRjaGVkUnVsZUdyb3Vwcyk6IEFkZGVkLiBDcmVhdGVzIHNlY3Rpb25zCiAgICAgICAgYW5kIGdyb3VwcyBmb3IgZWFjaCBwc2V1ZG8gZWxlbWVudCBpZGVudGlmaWVyLgoKMjAxMi0wMy0wMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFVwZGF0ZSB0aGUgY29tcHV0ZWQgc3R5bGUgYW5kIG92ZXJsb2FkZWQgcHJvcGVydGllcyB3aGVuIGVkaXRpbmcgYSBzdHlsZSBwcm9wZXJ0eS4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTIwPiBJbXBsZW1lbnQgdGhlIFN0eWxlIGluc3BlY3RvciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVidWlsZFNlY3Rpb25zLmJ1aWxkU2VjdGlvbnMuY3JlYXRlU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbkdyb3VwKToKICAgICAgICBBZGQgdGhlIFN0eWxlUHJvcGVydGllc1NlY3Rpb24gdG8gdGhlIG1haW5Qcm9wZXJ0eVNlY3Rpb25NYXAuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9yZWJ1aWxkU2VjdGlvbnMuYnVpbGRTZWN0aW9ucyk6IFN0b3JlIGRpcmVjdCByZWZlcmVuY2VzIHRvIHRoZSBpbXBvcnRhbnQKICAgICAgICBwcm9wZXJ0eSBzZWN0aW9ucyBhbmQgYWRkIHRoZW0gdG8gdGhlIG1haW5Qcm9wZXJ0eVNlY3Rpb25zLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVmcmVzaFNlY3Rpb25zKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9yZWZyZXNoU2VjdGlvbnMuY29tcHV0ZWRTdHlsZUNhbGxiYWNrKTogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcHJvcGVydHkgc2VjdGlvbnMKICAgICAgICBhbmQgYnVpbGQgdGhlIHN0eWxlIHJ1bGVzIG5lZWRlZCB0byB1cGRhdGUgb3ZlcmxvYWRlZCBhbmQgdXNlZCBwcm9wZXJ0aWVzLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fbWFya1VzZWRQcm9wZXJ0aWVzKTogQ2xlYW4gdXAuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N0eWxlUHJvcGVydGllc1NlY3Rpb24uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZS5lZGl0aW5nU2VsZWN0b3JDb21taXR0ZWQuc3VjY2Vzc0NhbGxiYWNrKTogQ2FsbCBfcmVmcmVzaFNlY3Rpb25zLgogICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUuZWRpdGluZ1NlbGVjdG9yQ29tbWl0dGVkKTogUmVtb3ZlIHJlZmVyZW5jZSB0byBXZWJJbnNwZWN0b3IucGFuZWxzLmVsZW1lbnRzLgogICAgICAgICogVXNlckludGVyZmFjZS9TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlLl91cGRhdGVQYW5lKTogVXNlIF9yZWZyZXNoU2VjdGlvbnMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlLnRvZ2dsZUVuYWJsZWQpOiBVc2UgX3BhcmVudFBhbmUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlLmFwcGx5U3R5bGVUZXh0KTogRGl0dG8uCgoyMDEyLTAzLTAxICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIEZpeGVkIGxvY2FsaXphdGlvbiB0eXBvLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZXNDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3KToKCjIwMTItMDMtMDEgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwOTYwOTAzPiBJbmNsdWRlIE5ldHdvcmsgdGltZWxpbmUgZ3JhcGggaW4gdGhlIG5ldHdvcmsgZGF0YSBncmlkCgogICAgICAgIEJlZm9yZSB3ZSBtYWtlIG90aGVyIGltcHJvdmVtZW50cyBhdCBsZWFzdCBhZGp1c3QgdGhlIHRpbWVsaW5lIGdyYXBoCiAgICAgICAgc2l6ZXMgdG8gcmVhc29uYWJsZSBzaXplcy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVzQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldyk6CgoyMDEyLTAzLTAxICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDk2MDkwMz4gSW5jbHVkZSBOZXR3b3JrIHRpbWVsaW5lIGdyYXBoIGluIHRoZSBuZXR3b3JrIGRhdGEgZ3JpZAoKICAgICAgICBBZG9wdCBPcGVuU291cmNlJ3MgIm9mZnNjcmVlbiIgcm93IGhpZGluZyBmb3IgcGVyZm9ybWFuY2UuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lc0NvbnRlbnRWaWV3LmNzczoKICAgICAgICAoLmNvbnRlbnQtdmlldy50aW1lbGluZXMgPiAuZGF0YS1ncmlkIHRyLm9mZnNjcmVlbik6CiAgICAgICAgKC5jb250ZW50LXZpZXcudGltZWxpbmVzID4gLmRhdGEtZ3JpZCB0ci5vZmZzY3JlZW4gdGQpOgogICAgICAgIEVuc3VyZSBvZmZzY3JlZW4gdGFibGUgcm93cyBzdGlsbCBoYXZlIGEgaGVpZ2h0LCBhbmQgaGlkZSB0aGVpciBjb250ZW50cy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lc0NvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcucHJvdG90eXBlLnVwZGF0ZUxheW91dCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldy5wcm90b3R5cGUuX3VwZGF0ZVBlbmRpbmdSZWNvcmRzKToKICAgICAgICBVcGRhdGUgb2Zmc2NyZWVuIHJvd3Mgd2hlbiB0aGUgdmlldyByZXNpemVzLCBhbmQgYWZ0ZXIgd2UndmUgc29ydGVkIC8gYWRkZWQgbmV3IHJvd3MuCgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcucHJvdG90eXBlLl91cGRhdGVPZmZzY3JlZW5Sb3dzKToKICAgICAgICBNYXJrIGRhdGEgZ3JpZCB0YWJsZSByb3dzIG91dHNpZGUgdGhlIHZpc2libGUgYm91bmRzIGFzICJvZmZzY3JlZW4iLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VUaW1lbGluZURhdGFHcmlkTm9kZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVGltZWxpbmVEYXRhR3JpZE5vZGUucHJvdG90eXBlLnNlbGVjdCk6CiAgICAgICAgV2hlbiBhIHVzZXIgdXNlcyBrZXlib2FyZCBzaG9ydGN1dHMgYW5kIG1vdmVzIHVwL2Rvd24gdG8gYSByb3cgdGhhdAogICAgICAgIHdhcyBvZmZzY3JlZW4sIHRoZSBzZWxlY3Rpb24gaGFwcGVucyBiZWZvcmUgdGhlIG5vZGUgc2Nyb2xscyBpbnRvIHZpZXcuCiAgICAgICAgSW4gb3JkZXIgZm9yIGl0cyBsYXlvdXQgdG8gd29yayBwcm9wZXJseSBpdCBjYW4ndCBiZSBkaXNwbGF5IG5vbmUsCiAgICAgICAgc28gcmVtb3ZlIHRoZSBvZmZzY3JlZW4gY2xhc3MgcHJlZW1wdGl2ZWx5LgoKMjAxMi0wMy0wMSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA5NjA5MDM+IEluY2x1ZGUgTmV0d29yayB0aW1lbGluZSBncmFwaCBpbiB0aGUgbmV0d29yayBkYXRhIGdyaWQKCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL2dyYXBoTGFiZWxDYWxsb3V0TGVmdC5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvZ3JhcGhMYWJlbENhbGxvdXRMZWZ0V2hpdGUucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL2dyYXBoTGFiZWxDYWxsb3V0UmlnaHQucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL2dyYXBoTGFiZWxDYWxsb3V0UmlnaHRXaGl0ZS5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvdGltZWxpbmVIb2xsb3dQaWxsQmx1ZS5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvdGltZWxpbmVIb2xsb3dQaWxsR3JheS5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvdGltZWxpbmVIb2xsb3dQaWxsR3JlZW4ucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL3RpbWVsaW5lSG9sbG93UGlsbE9yYW5nZS5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvdGltZWxpbmVIb2xsb3dQaWxsUHVycGxlLnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy90aW1lbGluZUhvbGxvd1BpbGxSZWQucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL3RpbWVsaW5lSG9sbG93UGlsbFllbGxvdy5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvdGltZWxpbmVQaWxsQmx1ZS5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvdGltZWxpbmVQaWxsR3JheS5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvdGltZWxpbmVQaWxsR3JlZW4ucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL3RpbWVsaW5lUGlsbE9yYW5nZS5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvdGltZWxpbmVQaWxsUHVycGxlLnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy90aW1lbGluZVBpbGxSZWQucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL3RpbWVsaW5lUGlsbFdoaXRlRmxhdC5wbmc6IEFkZGVkLgogICAgICAgIE9wZW4gU291cmNlIGltYWdlcyBhbmQgbmV3IHdoaXRlIGltYWdlcyBmcm9tIFRpbW90aHkgSGF0Y2hlci4KICAgICAgICBUaGVyZSB3aWxsIG5lZWQgdG8gYmUgSGlEUEkgdmVyc2lvbnMgb2YgdGhlc2UgaW1hZ2VzLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgogICAgICAgIEFkZGVkIG5ldyBmaWxlcy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmV0d29ya1RpbWVsaW5lLmNzczogQWRkZWQuCiAgICAgICAgQmFzaWMgc3R5bGVzIGNvcGllZCBmcm9tIE9wZW4gU291cmNlLiBNaW5vciBhZGp1c3RtZW50cyBmb3IgaW1hZ2Ugc2l6ZXMuCgogICAgICAgICguZGF0YS1ncmlkOmZvY3VzIHRyLnNlbGVjdGVkIC5uZXR3b3JrLWdyYXBoLWJhcik6CiAgICAgICAgKC5kYXRhLWdyaWQ6Zm9jdXMgdHIuc2VsZWN0ZWQgLnJlc291cmNlLWNhY2hlZCAubmV0d29yay1ncmFwaC1iYXIpOgogICAgICAgICguZGF0YS1ncmlkOmZvY3VzIHRyLnNlbGVjdGVkIC5uZXR3b3JrLWdyYXBoLWJhci53YWl0aW5nKToKICAgICAgICAoLmRhdGEtZ3JpZDpmb2N1cyB0ci5zZWxlY3RlZCAubmV0d29yay1ncmFwaC1sYWJlbCk6CiAgICAgICAgKC5kYXRhLWdyaWQ6Zm9jdXMgdHIuc2VsZWN0ZWQgLm5ldHdvcmstZ3JhcGgtbGFiZWwuYWZ0ZXIpOgogICAgICAgICguZGF0YS1ncmlkOmZvY3VzIHRyLnNlbGVjdGVkIC5uZXR3b3JrLWdyYXBoLWxhYmVsLmJlZm9yZTo6YWZ0ZXIpOgogICAgICAgICguZGF0YS1ncmlkOmZvY3VzIHRyLnNlbGVjdGVkIC5uZXR3b3JrLWdyYXBoLWxhYmVsLmFmdGVyOjpiZWZvcmUpOgogICAgICAgIE5ldyBmcm9udGVuZCBzdHlsZXMgZm9yIHRoZSBuZXR3b3JrIGdyYXBoIHdoZW4gdGhlIGRhdGEgZ3JpZCByb3cgaXMgc2VsZWN0ZWQuCiAgICAgICAgVGhpcyBtYWtlcyB0aGUgcGlsbCwgY2FsbG91dHMsIGFuZCB0ZXh0IHdoaXRlIC8gYmx1ZSBtYXRjaGluZyB0aGUgZGF0YSBncmlkCiAgICAgICAgc2VsZWN0ZWQgc3R5bGUuCgogICAgICAgICogVXNlckludGVyZmFjZS9OZXR3b3JrRGF0YUdyaWQuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya0RhdGFHcmlkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLk5ldHdvcmtEYXRhR3JpZC5wcm90b3R5cGUuY29uc3RydWN0b3IuV2ViSW5zcGVjdG9yLk5ldHdvcmtEYXRhR3JpZC5nZXQgY3VycmVudENhbGN1bGF0b3IpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya0RhdGFHcmlkLnByb3RvdHlwZS51cGRhdGVDYWxjdWxhdG9yQm91bmRhcmllc1dpdGhSZWNvcmQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya0RhdGFHcmlkLnByb3RvdHlwZS51cGRhdGVDYWxjdWxhdG9yQm91bmRhcmllc1dpdGhEYXRhR3JpZE5vZGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya0RhdGFHcmlkLnByb3RvdHlwZS5yZXNldCk6CiAgICAgICAgTmV0d29ya0RhdGFHcmlkIGhhcyBhIGp1c3QgYSB0aW1lIGNhbGN1bGF0b3IgcmlnaHQgbm93LCB0aGF0IGFkanVzdHMgaXRzIGJvdW5kcwogICAgICAgIGJhc2VkIG9uIHJlc291cmNlIHN0YXJ0IHRpbWUsIGVuZCB0aW1lcywgYW5kIG9uLWdvaW5nIGxvYWQgdGltZXMuCgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVRpbWVsaW5lRGF0YUdyaWROb2RlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VUaW1lbGluZURhdGFHcmlkTm9kZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRpbWVsaW5lRGF0YUdyaWROb2RlLnByb3RvdHlwZS5jcmVhdGVDZWxsQ29udGVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRpbWVsaW5lRGF0YUdyaWROb2RlLnByb3RvdHlwZS5fY3JlYXRlR3JhcGhFbGVtZW50KToKICAgICAgICBDcmVhdGUgYW5kIHVwZGF0ZSB0aGUgbmV0d29yayBncmFwaCBlbGVtZW50cyBmb3IgdGhlIGNlbGwgY29udGVudC4KCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRpbWVsaW5lRGF0YUdyaWROb2RlLnByb3RvdHlwZS5zZWxlY3QpOgogICAgICAgIFNob3cgdGhlIHBpbGwgbGFiZWxzIHdoZW4gdGhlIHJvdyBpcyBzZWxlY3RlZC4gTm90IGp1c3Qgb25tb3VzZW92ZXIuCgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VUaW1lbGluZURhdGFHcmlkTm9kZS5wcm90b3R5cGUuX3JlZnJlc2hHcmFwaCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRpbWVsaW5lRGF0YUdyaWROb2RlLnByb3RvdHlwZS5fcmVmcmVzaExhYmVsUG9zaXRpb25zKToKICAgICAgICBVc2UgdGhlIHByb3ZpZGVkIG5ldHdvcmsgY2FsY3VsYXRvciBzaGFyZWQgd2l0aCB0aGUgb3RoZXIgZ3JpZCBub2RlcyB0byBjcmVhdGUKICAgICAgICB0aGUgYXBwcm9wcmlhdGUgYmFyIGZvciB0aGlzIHJlc291cmNlLgogICAgICAgIGFwcHJvcHJpYXRlbHkgd2l0aGluIHRoZSBuZXR3b3JrIGNhbGN1bGF0b3JzIGJvdW5kcy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lc0NvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcpOgogICAgICAgIFRpbWVsaW5lIERhdGFHcmlkcyBtYXkgaGF2ZSBlbWJlZGRlZCB0aW1lbGluZSBncmFwaHMgdGhhdCBhZGp1c3QgdGhlaXIgYm91bmRzCiAgICAgICAgYmFzZWQgb24gdGhlIHJlY29yZHMgKHN0YXJ0IHRpbWVzLCBtYXggc2l6ZXMsIGV0YykgdGhlaXIgY29udGVudCBjb250YWlucy4KICAgICAgICBDYWxjdWxhdG9yIG9iamVjdHMgbWFuYWdlIHRob3NlIGJvdW5kcy4gSWYgdGhlIGN1cnJlbnQgZGF0YSBncmlkIGhhcyBhCiAgICAgICAgY2FsY3VsYXRvciB3ZSBkbyBhIGZldyBleHRyYSBhY3Rpb25zIHRvIGVuc3VyZSBuaWNlIHVwZGF0ZXMuCgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcucHJvdG90eXBlLl9yZWNvcmRpbmdTdGFydGVkKToKICAgICAgICBSZXNldCB0aGUgZGF0YSBncmlkJ3MgY2FsY3VsYXRvcnMuCgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcucHJvdG90eXBlLl91cGRhdGVQZW5kaW5nUmVjb3Jkcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldy5wcm90b3R5cGUuX3VwZGF0ZUNhbGN1bGF0b3JCb3VuZHNGb3JQZW5kaW5nUmVjb3Jkcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldy5wcm90b3R5cGUuX3VwZGF0ZVBlbmRpbmdSZWNvcmRzV2l0aE5ld0JvdW5kcyk6CiAgICAgICAgVXBkYXRlIHRoZSBjYWxjdWxhdG9yJ3MgYm91bmRzIGJlZm9yZSB1cGRhdGluZyBwZW5kaW5nIHJlY29yZHMgc28gdGhhdCBhbGwgcmVjb3JkcwogICAgICAgIGFyZSBkcmF3biB3aXRoIHRoZSBzYW1lLCBtb3N0IGFjY3VyYXRlIGJvdW5kcy4KCjIwMTItMDMtMDEgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwOTYwOTAzPiBJbmNsdWRlIE5ldHdvcmsgdGltZWxpbmUgZ3JhcGggaW4gdGhlIG5ldHdvcmsgZGF0YSBncmlkCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6CiAgICAgICAgTmV3IHN0cmluZ3MgZm9yIHRoZSB0b29sdGlwcyBwcm92aWRlZCBieSB0aGUgZ3JhcGggY2FsY3VsYXRvci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmV0d29ya0dyYXBoQ2FsY3VsYXRvci5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrVGltZUNhbGN1bGF0b3IpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya1RpbWVDYWxjdWxhdG9yLnByb3RvdHlwZS5nZXQgYm91bmRhcnlTcGFuKToKICAgICAgICAoV2ViSW5zcGVjdG9yLk5ldHdvcmtUaW1lQ2FsY3VsYXRvci5wcm90b3R5cGUucmVzZXQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya1RpbWVDYWxjdWxhdG9yLnByb3RvdHlwZS5jb21wdXRlQmFyR3JhcGhQZXJjZW50YWdlcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrVGltZUNhbGN1bGF0b3IucHJvdG90eXBlLmNvbXB1dGVCYXJHcmFwaExhYmVscyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrVGltZUNhbGN1bGF0b3IucHJvdG90eXBlLnVwZGF0ZUJvdW5kYXJpZXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya1RpbWVDYWxjdWxhdG9yLnByb3RvdHlwZS5mb3JtYXRWYWx1ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrVGltZUNhbGN1bGF0b3IucHJvdG90eXBlLl9sb3dlckJvdW5kKToKICAgICAgICAoV2ViSW5zcGVjdG9yLk5ldHdvcmtUaW1lQ2FsY3VsYXRvci5wcm90b3R5cGUuX3VwcGVyQm91bmQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya1RyYW5zZmVyVGltZUNhbGN1bGF0b3IpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya1RyYW5zZmVyVGltZUNhbGN1bGF0b3IucHJvdG90eXBlLl9sb3dlckJvdW5kKToKICAgICAgICAoV2ViSW5zcGVjdG9yLk5ldHdvcmtUcmFuc2ZlclRpbWVDYWxjdWxhdG9yLnByb3RvdHlwZS5fdXBwZXJCb3VuZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrVHJhbnNmZXJEdXJhdGlvbkNhbGN1bGF0b3IpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya1RyYW5zZmVyRHVyYXRpb25DYWxjdWxhdG9yLnByb3RvdHlwZS5fdXBwZXJCb3VuZCk6CiAgICAgICAgUG9ydCBmcm9tIE9wZW5Tb3VyY2UgdG8gd29yayB3aXRoIHRoZSBuZXcgZnJvbnRlbmQncyByZXNvdXJjZSBvYmplY3RzLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VUaW1lbGluZVJlY29yZC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVGltZWxpbmVSZWNvcmQucHJvdG90eXBlLmdldCBlbmRUaW1lKToKICAgICAgICBNb3ZlICJlbmRUaW1lIiByZXNvdXJjZSBjYWxjdWxhdGlvbiBmcm9tIGhlcmUgLi4uCgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5nZXQgbGFzdFRpbWVzdGFtcCk6CiAgICAgICAgLi4uIHRvIGhlcmUgYXMgImxhc3RUaW1lc3RhbXAiLgoKMjAxMi0wMy0wMSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBVcGdyYWRlIC5oaWRkZW4gdG8gYSBjb21tb24gY2FzZSB0aGF0IGRvZXMgZGlzcGxheTpub25lLgogICAgICAgIFRoaXMgaXMgdXNlZCB0aHJvdWdob3V0IHRoZSBPcGVuU291cmNlIGZyb250ZW5kIHRvIGhpZGUgZWxlbWVudHMKICAgICAgICBhbmQgc29tZSBleGlzdGluZyBjb2RlIGFscmVhZHkgdXNlcyBpdCBhbmQgbWF5IG5vdCBiZSBnZXR0aW5nCiAgICAgICAgdGhlIHByb3BlciB0cmVhdG1lbnQuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLmNzczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQXBwbGljYXRpb25DYWNoZUZyYW1lQ29udGVudFZpZXcuY3NzOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmNzczoKICAgICAgICAoLmhpZGRlbik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuY3NzOgogICAgICAgIFRoaXMgcmVtb3ZlcyBuZXcgZnJvbnQtZW5kIG9jY3VycmVuY2VzIG9mICJoaWRkZW4iLiBIb3dldmVyCiAgICAgICAgaXQgZGlkIG5vdCByZW1vdmUgdGhlaXIgSmF2YVNjcmlwdCBwcm9wZXJ0eS4KCjIwMTItMDMtMDEgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCiAgICAgICAgUHJldmVudCBhZGRpbmcgYSBub2RlIHRvIHRoZSBwZW5kaW5nIHJlZnJlc2ggbGlzdCBtdWx0aXBsZSB0aW1lcy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVzQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldy5wcm90b3R5cGUuX3VwZGF0ZVBlbmRpbmdSZWNvcmRzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fc2NoZWR1bGVHcmlkTm9kZUZvclJlZnJlc2gpOgogICAgICAgIEZsYWcgb24gdGhlIERhdGFHcmlkTm9kZSBhcyBwZW5kaW5nIGEgcmVmcmVzaCBpZiB3ZSd2ZSBhZGRlZCBpdAogICAgICAgIHRvIHRoZSByZWZyZXNoIGxpc3QgYW5kIHJlbW92ZSB0aGUgZmxhZyBhZnRlciByZWZyZXNoaW5nLgoKMjAxMi0wMy0wMSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA5NTI0NzE+IFBhZ2Ugc2hvdWxkIHJlbG9hZCB3aGVuIHB1c2hpbmcgPGNtZD4rUgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9FZGl0aW5nU3VwcG9ydC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmlzRXZlbnRUYXJnZXRBbkVkaXRhYmxlRmllbGQpOgogICAgICAgIEFkZCBjb2RlLCBzaW1pbGFyIHRvIE9wZW4gU291cmNlIHRvIGRldGVjdCBpZiB0aGUgZXZlbnQgaXMgaW5zaWRlIG9mCiAgICAgICAgYW4gZWRpdGFibGUgZmllbGQuIEFsdGhvdWdoIHNvbWUgVGV4dFByb21wdCdzIG1hcmsgdGhlaXIgZWxlbWVudCBhcwogICAgICAgIGVkaXRpbmcsIHRoZSBDb25zb2xlIGRvZXMgbm90LiBOb3IgZG8gPGlucHV0PnMuCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5fa2V5ZG93bik6CiAgICAgICAgQWRkIGEga2V5ZG93biBsaXN0ZW5lciBvbiB0aGUgZG9jdW1lbnQgY2hlY2tpbmcgZm9yIDxjbWQ+K1IuCgoyMDEyLTAzLTAxICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgRmluaXNoIHVwIEphdmFTY3JpcHQgcHJvZmlsaW5nIGluIHRoZSBuZXcgaW5zcGVjdG9yLgogICAgICAgIAogICAgICAgIFRoaXMgcGF0Y2ggZml4ZXMgc29tZSBsb29zZSBlbmRzLgogICAgICAgIC0gUHJvZmlsZXMgc3RhcnRlZCBieSB0aGUgdXNlciBub3cgaGF2ZSB0aGUgdGl0bGUgIkphdmFTY3JpcHQgUHJvZmlsZSBuIi4KICAgICAgICAtIFByb2ZpbGUgdHJlZSBlbGVtZW50cyBub3cgaGF2ZSBhbiBpY29uLgogICAgICAgIC0gU2VsZWN0aW5nICJTdGFydCBQcm9maWxpbmcgSmF2YVNjcmlwdCIgb3IgIlN0b3AgUHJvZmlsaW5nIEphdmFTY3JpcHQiIGZyb20gdGhlIERldmVsb3AgbWVudQogICAgICAgIG5vdyB0YWtlIHlvdSB0byB0aGUgaW5zdHJ1bWVudCBzaWRlYmFyIHBhbmVsLgogICAgICAgIAogICAgICAgIFJlc3Qgb2YgPHJkYXI6Ly9wcm9ibGVtLzEwODk3NDczPiBJbXBsZW1lbnQgSmF2YVNjcmlwdCBwcm9maWxpbmcgaW4gdGhlIG5ldyBXZWIgSW5zcGVjdG9yLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6IFVwZGF0ZSBsb2NhbGl6ZWQgc3RyaW5ncy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Qcm9maWxlLnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Qcm9maWxlQDJ4LnBuZzogQWRkZWQuCgogICAgICAgICogVXNlckludGVyZmFjZS9JbnNwZWN0b3JGcm9udGVuZEFQSS5qczoKICAgICAgICAoSW5zcGVjdG9yRnJvbnRlbmRBUEkuc3RhcnRQcm9maWxpbmdKYXZhU2NyaXB0KTogU2hvdyB0aGUgaW5zdHJ1bWVudCBzaWRlYmFyIHBhbmVsLgogICAgICAgIChJbnNwZWN0b3JGcm9udGVuZEFQSS5zdG9wUHJvZmlsaW5nSmF2YVNjcmlwdCk6IERpdHRvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zdHJ1bWVudEljb25zLmNzczogQWRkIGljb25zIGZvciBwcm9maWxlIHRyZWUgZWxlbWVudHMuCgogICAgICAgICogVXNlckludGVyZmFjZS9JbnN0cnVtZW50U2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3RpdGxlRm9yUHJvZmlsZSk6IE1ha2UgdGhlIHRpdGxlIGZvciB1c2VyIGdlbmVyYXRlZAogICAgICAgICAgICBwcm9maWxlcyAiSmF2YVNjcmlwdCBQcm9maWxlIG4iLCBpbnN0ZWFkIG9mIGp1c3QgIlByb2ZpbGUgbiIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5JbnN0cnVtZW50U2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcHJvZmlsZVdhc0FkZGVkKTogVXNlIHRoZSBjbGFzcyBuYW1lIGZvciB0aGUgaWNvbi4KCjIwMTItMDMtMDEgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBDbGVhciB0aGUgbGlzdCBvZiBwcm9maWxlcyB3aGVuIHRoZSBwYWdlIG5hdmlnYXRlcy4KCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTA4OTc0NzM+IEltcGxlbWVudCBKYXZhU2NyaXB0IHByb2ZpbGluZyBpbiB0aGUgbmV3IFdlYiBJbnNwZWN0b3IuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkluc3RydW1lbnRTaWRlYmFyUGFuZWwpOiBBZGQgYSBsaXN0ZW5lciBmb3Igd2hlbiB0aGUgcHJvZmlsZSBtYW5hZ2VyIHNheXMgdGhlIHByb2ZpbGVzCiAgICAgICAgICAgIHdlcmUgY2xlYXJlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkluc3RydW1lbnRTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9wcm9maWxlc0NsZWFyZWQpOiBSZW1vdmUgdGhlIHRyZWUgZWxlbWVudHMgZnJvbSB0aGUgc2lkZWJhciwKICAgICAgICAgICAgY2xlYXIgdGhlIG1hcCBmcm9tIHByb2ZpbGUgdGl0bGVzIC0+IHRyZWUgZWxlbWVudHMsIGNsb3NlIGFsbCBwcm9maWxlIGNvbnRlbnQgdmlld3MsIGFuZCB1cGRhdGUgdGhlIGVtcHR5CiAgICAgICAgICAgIGNvbnRlbnQgcGxhY2Vob2xkZXIuIAogICAgICAgICogVXNlckludGVyZmFjZS9Qcm9maWxlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVNYW5hZ2VyKTogQWRkIGEgbGlzdGVuZXIgZm9yIHdoZW4gdGhlIG1haW4gcmVzb3VyY2UgZGlkIGNoYW5nZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuUHJvZmlsZU1hbmFnZXIuaW5pdGlhbGl6ZSk6IFJlbW92ZSBhbiB1bnVzZWQgdmFyaWFibGUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlTWFuYWdlci5wcm90b3R5cGUuX21haW5SZXNvdXJjZURpZENoYW5nZSk6IENhbGwgaW5pdGlhbGl6ZSBhbmQgZmlyZSBhbiBldmVudCBzYXlpbmcgdGhhdCBwcm9maWxlcwogICAgICAgICAgICB3ZXJlIGNsZWFyZWQuCgoyMDEyLTAyLTI5ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIHRoZSBhYmlsaXR5IHRvIHN0YXJ0L3N0b3AgSmF2YVNjcmlwdCBwcm9maWxpbmcgZnJvbSB0aGUgaW5zcGVjdG9yLgogICAgICAgIAogICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIHJlY29yZGluZyBnbHlwaCB0byB0aGUgcHJvZmlsZXMgdGl0bGUgYmFyICh3aGljaCBtYXRjaGVzIHRoZSBvbmUgaW4gdGhlIHRpbWVsaW5lcyB0aXRsZSBiYXIpLgogICAgICAgIFRoZSBidXR0b24gd2lsbCBzdGFydCBhbmQgc3RvcCBKYXZhU2NyaXB0IHByb2ZpbGluZy4KICAgICAgICAKICAgICAgICBNb3JlIG9mIDxyZGFyOi8vcHJvYmxlbS8xMDg5NzQ3Mz4gSW1wbGVtZW50IEphdmFTY3JpcHQgcHJvZmlsaW5nIGluIHRoZSBuZXcgV2ViIEluc3BlY3Rvci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiBVcGRhdGUgbG9jYWxpemVkIHN0cmluZ3MuCgogICAgICAgICogVXNlckludGVyZmFjZS9JbnN0cnVtZW50U2lkZWJhclBhbmVsLmNzczogTWFrZSBhbGwgb2YgdGhlc2UgcnVsZXMgd29yayBmb3IgdGl0bGUgYmFycyBpbiB0aGUgaW5zdHJ1bWVudHMKICAgICAgICAgICAgc2lkZWJhciBwYW5lbCBvdGhlciB0aGFuIHRoZSBUaW1lbGluZXMgdGl0bGUgYmFyLiBXZSBuZWVkIHRoZXNlIHJ1bGVzIGZvciB0aGUgUHJvZmlsZXMgdGl0bGUgYmFyIGFzIHdlbGwuCgogICAgICAgICogVXNlckludGVyZmFjZS9JbnN0cnVtZW50U2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zdHJ1bWVudFNpZGViYXJQYW5lbCk6IEFkZCBhIHJlY29yZCBidXR0b24gYW5kIHN0YXR1cyB0ZXh0IG5leHQgdG8gdGhlIHByb2ZpbGVzIHNpZGViYXIuIEFsc28gc3RhcnQKICAgICAgICAgICAgbGlzdGVuaW5nIGZvciB3aGVuIHRoZSBwcm9maWxlIG1hbmFnZXIgc3RhcnRzIGFuZCBzdG9wcyBwcm9maWxpbmcuCiAgICAgICAgKFdlYkluc3BlY3Rvci5JbnN0cnVtZW50U2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcHJvZmlsaW5nU3RhcnRlZCk6IFN0YXJ0IHRoZSB0ZXh0IG9mIHRoZSBwcm9maWxpbmcgc3RhdHVzIGFuZCBhZGQKICAgICAgICAgICAgYSByZWNvcmRpbmcgc3R5bGUgY2xhc3MgdG8gdGhlIGdseXBoLgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3Byb2ZpbGluZ0VuZGVkKTogQ2xlYXIgdGhlIHRleHQgb2YgdGhlIHByb2ZpbGluZyBzdGF0dXMgYW5kIHJlbW92ZQogICAgICAgICAgICB0aGUgcmVjb3JkaW5nIHN0eWxlIGNsYXNzIGZyb20gdGhlIGdseXBoLgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3Byb2ZpbGVHbHlwaE1vdXNlZE92ZXIpOiBVcGRhdGUgdGhlIHRleHQgb2YgdGhlIHByb2ZpbGluZyBzdGF0dXMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5JbnN0cnVtZW50U2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcHJvZmlsZUdseXBoTW91c2VkT3V0KTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5JbnN0cnVtZW50U2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcHJvZmlsZUdseXBoQ2xpY2tlZCk6IFRvZ2dsZSB0aGUgcHJvZmlsaW5nIHN0YXRlLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUHJvZmlsZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IuV2ViSW5zcGVjdG9yLlByb2ZpbGVNYW5hZ2VyLmluaXRpYWxpemUpOiBBZGQgYSBmbGFnIHRoYXQgcmVwcmVzZW50cwogICAgICAgICAgICB3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgY3VycmVudGx5IHByb2ZpbGluZy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVNYW5hZ2VyLnByb3RvdHlwZS5zZXRSZWNvcmRpbmdQcm9maWxlKTogRmlyZSBldmVudHMgZm9yIHdoZW4gd2Ugc3RhcnQgb3Igc3RvcCBwcm9maWxpbmcuCgoyMDEyLTAyLTI5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUmVtZW1iZXIgdGhlIGxhc3Qgc2VsZWN0ZWQgZGV0YWlscyBzaWRlYmFyIHBhbmVsIGFuZCByZXN0b3JlIGl0IHdoZW4gdGhhdCBwYW5lbCBiZWNvbWVzIGF2YWlsYWJsZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9uIEhvbmV5Y3V0dC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKTogQWRkIGV2ZW50IGxpc3RlbmVyIGZvciBTaWRlYmFyUGFuZWxTZWxlY3RlZCBldmVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLl9kZXRhaWxzU2lkZWJhclBhbmVsU2VsZWN0ZWQpOiBBZGRlZC4gUmVtZW1iZXIgdGhlIGlkZW50aWZpZXIgb2YgdGhlIHNlbGVjdGVkIHNpZGViYXIgcGFuZWwuCiAgICAgICAgKFdlYkluc3BlY3Rvci5fY29udGVudEJyb3dzZXJSZXByZXNlbnRlZE9iamVjdHNEaWRDaGFuZ2UpOiBJZ25vcmUgc2VsZWN0aW9uIGNoYW5nZXMgYW5kIHJlc3RvcmUgdGhlIHNlbGVjdGlvbgogICAgICAgIHdoZW4gdGhlIGxhc3Qgc2VsZWN0ZWQgc2lkZWJhciBwYW5lbCBpcyByZWluc2VydGVkIGludG8gdGhlIHNpZGViYXIuCgoyMDEyLTAyLTI5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUHJldmVudCB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgcmVzb3VyY2VzIGZyb20gaW5zdGFsbGluZyBpbiBwcm9kdWN0aW9uIGJ1aWxkcyBzaW5jZSB3ZSBhcmUKICAgICAgICBub3QgZW5hYmxpbmcgdGhlIEluc3BlY3RvciBpbiBEUDIuCgogICAgICAgIFJldmlld2VkIGJ5IE1hcmsgUm93ZS4KCiAgICAgICAgKiBTY3JpcHRzL2NvcHktdXNlci1pbnRlcmZhY2UtcmVzb3VyY2VzLnNoOiBFeGl0IGVhcmx5IGJlZm9yZSBjb3B5aW5nLgoKMjAxMi0wMi0yOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEluY2x1ZGUgbWlzc2luZyBpbWFnZSBuZWVkZWQgYnkgdGhlIExvZyBhbmQgRGF0YWJhc2UgY29udGVudCB2aWV3cy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwOTUyNDk2PiAidXNlcklucHV0UHJldmlvdXNJY29uLnBuZyIgcmVzb3VyY2UgZmFpbGVkIHRvIGxvYWQgaW4gQ29uc29sZQoKICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YWJhc2VDb250ZW50Vmlldy5jc3M6CiAgICAgICAgKC5kYXRhYmFzZS11c2VyLXF1ZXJ5OjpiZWZvcmUpOiBVc2UgVXNlcklucHV0UHJvbXB0UHJldmlvdXMucGRmLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvVXNlcklucHV0UHJvbXB0UHJldmlvdXMucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nQ29udGVudFZpZXcuY3NzOgogICAgICAgICguY29uc29sZS11c2VyLWNvbW1hbmQ6OmJlZm9yZSk6IFVzZSBVc2VySW5wdXRQcm9tcHRQcmV2aW91cy5wZGYuCgoyMDEyLTAyLTI5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgR28gdGhyb3VnaCB0aGUgc3R5bGUgcnVsZXMgYW5kIG1hcmsgdGhlIHVzZWQgYW5kIG92ZXJsb2FkZWQgcHJvcGVydGllcy4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTIwPiBJbXBsZW1lbnQgdGhlIFN0eWxlIGluc3BlY3RvciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9yZWJ1aWxkU2VjdGlvbnMpOiBDYWxsIF9tYXJrVXNlZFByb3BlcnRpZXMgYW5kCiAgICAgICAgcGFzcyB0aGUgcmVzdWx0IHRvIFdlYkluc3BlY3Rvci5Db21wdXRlZFN0eWxlUHJvcGVydGllc1NlY3Rpb24uCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9tYXJrVXNlZFByb3BlcnRpZXMpOiBBZGRlZC4gQ29waWVkIGZyb20gb3BlbiBzb3VyY2UncwogICAgICAgIFN0eWxlc1NpZGViYXJQYW5lLmpzIGZpbGUuCgoyMDEyLTAyLTI5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUG9wdWxhdGUgdGhlIFN0eWxlIHNpZGViYXIgc2VjdGlvbnMgYWZ0ZXIgZ2V0dGluZyBhbGwgdGhlIHN0eWxlIGluZm8uCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxOTUyMD4gSW1wbGVtZW50IHRoZSBTdHlsZSBpbnNwZWN0b3IgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVidWlsZFNlY3Rpb25zLmJ1aWxkU2VjdGlvbnMpOiBCdWlsZCBhIGxpc3Qgb2Ygc3R5bGUgcnVsZXMKICAgICAgICB0aGF0IG1hdGNoIHRoZSBjYXNjYWRlIG9yZGVyIHNvIHdlIGNhbiBtYXJrIHVzZWQgYW5kIG92ZXJsb2FkZWQgcHJvcGVydGllcy4gUmVidWlsZCB0aGUgc2VjdGlvbnMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5cGUuZ2V0SW5saW5lU3R5bGVzQXN5bmMpOiBNZXJnZSBmcm9tIG9wZW4gc291cmNlIHRvIHdvcmsgd2l0aCBUT1QgcHJvdG9jb2wuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N0eWxlUHJvcGVydGllc1NlY3Rpb24uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uKTogRG9uJ3Qgc2hvdyBhIHNlbGVjdG9yIGlmIHNlbGVjdG9yVGV4dCBpcyBlbXB0eS4KCjIwMTItMDItMjkgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBSZXF1ZXN0IHRoZSBzdHlsZSBpbmZvcm1hdGlvbiBhbmQgc3RvcmUgaXQsIHRoZW4gYnVpbGQgdGhlIHNlY3Rpb25zIGFmdGVyIHRoZSBsYXN0IGNhbGxiYWNrLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTk1MjA+IEltcGxlbWVudCB0aGUgU3R5bGUgaW5zcGVjdG9yIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3JlYnVpbGRTZWN0aW9ucyk6IFJlcXVlc3QgdGhlIHN0eWxlIGluZm8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9yZWJ1aWxkU2VjdGlvbnMuY29tcHV0ZWRTdHlsZUNhbGxiYWNrKTogU3RvcmUgdGhlIHJlc3VsdC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3JlYnVpbGRTZWN0aW9ucy5tYXRjaGVkU3R5bGVzQ2FsbGJhY2spOiBTdG9yZSB0aGUgcmVzdWx0LgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVidWlsZFNlY3Rpb25zLmlubGluZVN0eWxlc0NhbGxiYWNrKTogU3RvcmUgdGhlIHJlc3VsdHMgYW5kCiAgICAgICAgY2FsbCBidWlsZFNlY3Rpb25zLiBTaW5jZSB0aGlzIHdhcyB0aGUgbGFzdCBhc3luYyBjYWxsIHRvIGNzc1N0eWxlTWFuYWdlciwgdGhpcyB3aWxsIGFsd2F5cyBiZSB0aGUgbGFzdCByZXNwb25zZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3JlYnVpbGRTZWN0aW9ucy5idWlsZFNlY3Rpb25zKTogQWRkZWQgc3R1YiB0aGF0IG5lZWRzIGltcGxlbWVudGVkLgoKMjAxMi0wMi0yOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFJlbW92ZSB0aGUgcmVmcmVzaCBjb2RlIGluIHRoZSBTdHlsZSBzaWRlYmFyIHNpbmNlIGl0IG5lZWRzIHJld29ya2VkIHRvIHByb3Blcmx5IHVwZGF0ZSBpbiBvbmUgc3RlcC4KCiAgICAgICAgVGhlIHVwZGF0aW5nIG5lZWRzIHRvIGJlIGRvbmUgaW4gb25lIHN0ZXAgc28gdGhlIGNhc2NhZGUgYW5kIHByb3BlcnR5IHByaW9yaXR5IGFyZSB0YWtlbiBpbnRvIGFjY291bnQuCiAgICAgICAgVGhlIHByZXZpb3VzIHdheSBvZiB1cGRhdGluZyB0aGUgc2VjdGlvbnMgaW4gdGhyZWUgYXN5bmMgc3RlcHMgd2FzIG5vdCBnb2luZyB0byB3b3JrLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTk1MjA+IEltcGxlbWVudCB0aGUgU3R5bGUgaW5zcGVjdG9yIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUucmVmcmVzaCk6IENhbGwgX3JlYnVpbGRTZWN0aW9ucy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3JlZnJlc2hTdHlsZVJ1bGVzKTogUmVtb3ZlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3JlZnJlc2hBdHRyaWJ1dGVTdHlsZXMpOiBSZW1vdmVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVmcmVzaENvbXB1dGVkU3R5bGUpOiBSZW1vdmVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVidWlsZFNlY3Rpb25zKTogQWRkZWQgc3R1YiB0aGF0IG5lZWRzIGltcGxlbWVudGVkLgoKMjAxMi0wMi0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1vcmUgd29yayBmb3IgcmVzb3VyY2UgbGlua3MgaW4gdGhlIFN0eWxlIGRldGFpbHMgc2lkZWJhci4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTIwPiBJbXBsZW1lbnQgdGhlIFN0eWxlIGluc3BlY3RvciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01EZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NRGV0YWlsc1NpZGViYXJQYW5lbCk6IE1ha2UgdGhlIGV2ZW50IGxpc3RlbmVyIGNhcHR1cmUgc2luY2UgYW5vdGhlciBsaXN0ZW5lciBpbnRlcmZlcmVzLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX21vdXNlV2FzQ2xpY2tlZCk6IFBhc3MgYWxvbmcgdGhlIGxpbmUgbnVtYmVyLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3Iub3BlblVSTCk6IEFkZCBzdXBwb3J0IGZvciBvcGVuaW5nIHRvIGEgbGluZSBudW1iZXIuIFVzZSBSZXNvdXJjZVNpZGViYXJQYW5lbCB3aGljaCBkb2VzIGFsbCB0aGUgd29yay4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24pOiBVc2UgX2xpbmtpZnkgaW5zdGVhZCBvZiBsaW5raWZ5UmVzb3VyY2VBc05vZGUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZS5fbGlua2lmeSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUuX2NyZWF0ZVJ1bGVPcmlnaW5Ob2RlKTogVXNlIF9saW5raWZ5IGluc3RlYWQgb2YgbGlua2lmeVJlc291cmNlQXNOb2RlLgoKMjAxMi0wMi0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIENvcHkgb3ZlciBDb2xvci5qcyBmcm9tIG9wZW4gc291cmNlIGFuZCBob29rIGl0IHVwIHRvIHRoZSBTdHlsZSBkZXRhaWxzIHNpZGViYXIuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxOTUyMD4gSW1wbGVtZW50IHRoZSBTdHlsZSBpbnNwZWN0b3IgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyKTogVXNlIFdlYkluc3BlY3Rvci5Db2xvci5Gb3JtYXQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbG9yLmpzOiBDb3BpZWQgZnJvbSBPcGVuU291cmNlL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29sb3IuanMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZWQgQ29sb3IuanMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5qczogVXNlIFdlYkluc3BlY3Rvci5Db2xvci5Gb3JtYXQuCgoyMDEyLTAyLTI4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgR2V0IHN0eWxlIGVkaXRpbmcgd29ya2luZy4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTIwPiBJbXBsZW1lbnQgdGhlIFN0eWxlIGluc3BlY3RvciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9Cb3hNb2RlbERldGFpbHNTZWN0aW9uUm93LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQm94TW9kZWxEZXRhaWxzU2VjdGlvblJvdy5wcm90b3R5cGUuX2hhbmRsZUtleURvd24pOiBVc2UgV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5UHJvbXB0LmFsdGVyZWRGbG9hdE51bWJlci4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTUHJvcGVydHlQcm9tcHQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eVByb21wdCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eVByb21wdC5hbHRlcmVkRmxvYXROdW1iZXIpOiBNb3ZlZCBmcm9tIEJveE1vZGVsRGV0YWlsc1NlY3Rpb25Sb3cuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eVByb21wdC5hbHRlcmVkSGV4TnVtYmVyKTogQWRkZWQgZnJvbSBPcGVuIFNvdXJjZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5UHJvbXB0LnByb3RvdHlwZS5faGFuZGxlVXBPckRvd25WYWx1ZSk6IFVzZSBhbHRlcmVkRmxvYXROdW1iZXIgYW5kIGFsdGVyZWRIZXhOdW1iZXIgb24gdGhpcyBjbGFzcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRWRpdGluZ1N1cHBvcnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5yZXN0b3JlRm9jdXNGcm9tRWxlbWVudCk6IEFkZGVkIGZyb20gT3BlbiBTb3VyY2UuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZWQgQ1NTUHJvcGVydHlQcm9tcHQuanMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUpOiBDcmVhdGUgQ1NTUHJvcGVydHlQcm9tcHQgY29ycmVjdGx5LgoKMjAxMi0wMi0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFJlcGxhY2UgbW9yZSB1c2VzIG9mIHthZGQscmVtb3ZlLGhhc31TdHlsZUNsYXNzIHdpdGggY2xhc3NMaXN0LnthZGQscmVtb3ZlLGNvbnRhaW5zfS4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTIwPiBJbXBsZW1lbnQgdGhlIFN0eWxlIGluc3BlY3RvciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9CbGFua1N0eWxlUHJvcGVydGllc1NlY3Rpb24uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CbGFua1N0eWxlUHJvcGVydGllc1NlY3Rpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuQmxhbmtTdHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZS5lZGl0aW5nU2VsZWN0b3JDb21taXR0ZWQuc3VjY2Vzc0NhbGxiYWNrKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkJsYW5rU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUuZWRpdGluZ1NlbGVjdG9yQ29tbWl0dGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkJsYW5rU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUubWFrZU5vcm1hbCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Byb2ZpbGVEYXRhR3JpZFRyZWUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlRGF0YUdyaWROb2RlLnByb3RvdHlwZS5jcmVhdGVDZWxsKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlLl9oYW5kbGVFbXB0eVNwYWNlRG91YmxlQ2xpY2spOgoKMjAxMi0wMi0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgbGlua3Mgd29yayBpbiB0aGUgU3R5bGUgZGV0YWlscyBzaWRlYmFyLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTk1MjA+IEltcGxlbWVudCB0aGUgU3R5bGUgaW5zcGVjdG9yIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3JlZnJlc2hBdHRyaWJ1dGVTdHlsZXMpOiBQYXNzIHRoZSBkb21Ob2RlLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVmcmVzaENvbXB1dGVkU3R5bGUpOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTURldGFpbHNTaWRlYmFyUGFuZWwpOiBBZGQgY2xpY2sgZXZlbnQgbGlzdGVuZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01EZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fbW91c2VXYXNDbGlja2VkKTogQWRkZWQuIEZpbmQgdGhlIHBhcmVudEZyYW1lIGZvcgogICAgICAgIHRoZSBpbnNwZWN0ZWQgRE9NIG5vZGUgYW5kIHRoZW4gY2FsbCBvcGVuVVJMLgogICAgICAgICogVXNlckludGVyZmFjZS9TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlLnVwZGF0ZVRpdGxlLmxpbmtpZnlVUkwpOiBSZW1vdmUgcmVmZXJlbmNlcyB0bwogICAgICAgIGVsZW1lbnRzIHBhbmVsIGFuZCBmaXggdXAgdGhlIGxpbmlmeWluZyBjb2RlIHRvIHdvcmsgd2l0aCB0aGUgbmV3IEluc3BlY3RvciBjb2RlLgoKMjAxMi0wMi0yOSAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIEdyb3VwIHRvZ2V0aGVyIHByb2ZpbGVzIHdpdGggdGhlIHNhbWUgbmFtZSBpbnRvIGZvbGRlcnMgd2hlbiB0aGVyZSBpcyBtb3JlIHRoYW4KICAgICAgICBvbmUgb2YgdGhlbS4KICAgICAgICAKICAgICAgICBNb3JlIG9mIDxyZGFyOi8vcHJvYmxlbS8xMDg5NzQ3Mz4gSW1wbGVtZW50IEphdmFTY3JpcHQgcHJvZmlsaW5nIGluIHRoZSBuZXcgV2ViIEluc3BlY3Rvci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiBVcGRhdGUgbG9jYWxpemVkIHN0cmluZ3MuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3RydW1lbnRTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5JbnN0cnVtZW50U2lkZWJhclBhbmVsKTogQWRkIGEgbWFwcGluZyBmcm9tIHByb2ZpbGUgdGl0bGUgLT4gcHJvZmlsZSB0cmVlIGVsZW1lbnQgKG9yIGZvbGRlcikuCiAgICAgICAgKFdlYkluc3BlY3Rvci5JbnN0cnVtZW50U2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcHJvZmlsZVdhc0FkZGVkKTogQWRkIG11bHRpcGxlIGNhc2VzIGZvciB3aGVuCiAgICAgICAgICAgIHdlIGFkZCBhIHByb2ZpbGUuIElmIGl0J3MgdGhlIGZpcnN0IHByb2ZpbGUgd2l0aCBhIGdpdmVuIG5hbWUsIGFkZCBpdCB0byB0aGUgc2lkZWJhci4gSWYgdGhlcmUgYWxyZWFkeQogICAgICAgICAgICBpcyBhIGZvbGRlciB0aGF0IHJlcHJlc2VudHMgYWxsIHByb2ZpbGVzIHdpdGggdGhhdCBuYW1lLCB0aGVuIGFkZCB0aGUgcHJvZmlsZSB0byB0aGF0IGZvbGRlci4gSWYgdGhlcmUKICAgICAgICAgICAgaXMgYWxyZWFkeSBhIHByb2ZpbGUgd2l0aCB0aGF0IHNhbWUgbmFtZSwgY3JlYXRlIGEgZm9sZGVyIHRvIHJlcHJlc2VudCBhbGwgcHJvZmlsZXMgd2l0aCB0aGF0IG5hbWUsCiAgICAgICAgICAgIGFuZCBhZGQgYm90aCB0aGUgcHJldmlvdXMgcHJvZmlsZSBhbmQgdGhlIG5ldyBwcm9maWxlIHRvIHRoYXQgZm9sZGVyLgoKMjAxMi0wMi0yOCAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgY29uc29sZS5wcm9maWxlIHdvcmsgYW5kIHNob3cgZW50cmllcyBpbiB0aGUgaW5zdHJ1bWVudCBzaWRlYmFyLgogICAgICAgIAogICAgICAgIFdlIG5vdyBlbmFibGUgcHJvZmlsaW5nIHdoZW4gd2Ugb3BlbiB0aGUgd2ViIGluc3BlY3RvciwgaW5zdGVhZCBvZiB3aGVuIHdlIGFyZSBqdXN0IHRvbGQgdG8gY3JlYXRlCiAgICAgICAgYSBwcm9maWxlLiBUaGlzIGFsbG93cyBjb25zb2xlLnByb2ZpbGUgdG8gd29yayB3aGVuIHRoZSB3ZWIgaW5zcGVjdG9yIGlzIG9wZW4uCiAgICAgICAgCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTA4OTc0NzM+IEltcGxlbWVudCBKYXZhU2NyaXB0IHByb2ZpbGluZyBpbiB0aGUgbmV3IFdlYiBJbnNwZWN0b3IuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUHJvZmlsZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlTWFuYWdlcik6IEVuYWJsZSB0aGUgUHJvZmlsZXJBZ2VudCB3aGVuIHdlIHN0YXJ0IHRoZSBQcm9maWxlTWFuYWdlci4KICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVNYW5hZ2VyLnByb3RvdHlwZS5zdGFydFByb2ZpbGluZ0phdmFTY3JpcHQpOiBDYWxsIHN0YXJ0UmVjb3JkaW5nUHJvZmlsZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVNYW5hZ2VyLnByb3RvdHlwZS5zdG9wUHJvZmlsaW5nSmF2YVNjcmlwdCk6IERvbid0IGRpc2FibGUgdGhlIFByb2ZpbGVyQWdlbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlTWFuYWdlci5wcm90b3R5cGUuYWRkUHJvZmlsZSk6IElmIHdlIGRvbid0IGhhdmUgYSByZWNvcmRpbmcgSmF2YVNjcmlwdCBwcm9maWxlICh3aGljaAogICAgICAgICAgICB3ZSB3b3VsZG4ndCBpZiBhZGRQcm9maWxlIHdhcyBjYWxsZWQgZnJvbSBjb25zb2xlLnByb2ZpbGUpLCB0aGVuIGNyZWF0ZSBhIG5ldyBQcm9maWxlT2JqZWN0IGFuZCBmaXJlIGFuCiAgICAgICAgICAgIGV2ZW50LgoKMjAxMi0wMi0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFN0YXJ0IHNob3dpbmcgQ29tcHV0ZWQgU3R5bGUgaW4gdGhlIFN0eWxlIGRldGFpbHMgc2lkZWJhci4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTIwPiBJbXBsZW1lbnQgdGhlIFN0eWxlIGluc3BlY3RvciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiBVcGRhdGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwpOiBDcmVhdGUgYSBDb21wdXRlZCBTdHlsZSBzZWN0aW9uLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5yZWZyZXNoKTogQ2FsbCBfcmVmcmVzaENvbXB1dGVkU3R5bGUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9yZWZyZXNoQ29tcHV0ZWRTdHlsZSk6IEFkZGVkLiBSZXF1ZXN0IHRoZSBjb21wdXRlZCBzdHlsZXMKICAgICAgICB0aGVuIG1ha2UgYSBDb21wdXRlZFN0eWxlUHJvcGVydGllc1NlY3Rpb24uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU1N0eWxlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlcik6IEFkZGVkIHNldHRpbmcgZm9yIGNvbG9yIGZvcm1hdC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5cGUuZ2V0IHByZWZlcnJlZENvbG9yRm9ybWF0KTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbXB1dGVkU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbXB1dGVkU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbik6IFJlcGxhY2UgYWRkU3R5bGVDbGFzcyB3aXRoIGNsYXNzTGlzdC5hZGQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db21wdXRlZFN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlLnJlYnVpbGRDb21wdXRlZFRyYWNlKTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RldGFpbHNTZWN0aW9uLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsc1NlY3Rpb24pOiBNYWtlIGEgZW1wdHkgZ3JvdXAgYnkgZGVmYXVsdCBpZiBub25lIGFyZSBwYXNzZWQgaW4uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RldGFpbHNTZWN0aW9uUHJvcGVydGllc1Jvdy5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EZXRhaWxzU2VjdGlvblByb3BlcnRpZXNSb3cpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsc1NlY3Rpb25Qcm9wZXJ0aWVzUm93LnByb3RvdHlwZS5nZXQgcHJvcGVydGllc1NlY3Rpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsc1NlY3Rpb25Qcm9wZXJ0aWVzUm93LnByb3RvdHlwZS5zZXQgcHJvcGVydGllc1NlY3Rpb24pOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEluY2x1ZGVkIERldGFpbHNTZWN0aW9uUHJvcGVydGllc1Jvdy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24pOiBSZW1vdmVkIHNpbmdsZS1jbGljayBleHBlcmltZW50LgogICAgICAgICogVXNlckludGVyZmFjZS9TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlLm9uYXR0YWNoKTogUmVtb3ZlZCBzaW5nbGUtY2xpY2sgZXhwZXJpbWVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUudXBkYXRlVGl0bGUpOiBVc2UgQ1NTU3R5bGVNYW5hZ2VyIGZvciB0aGUgY29sb3IgZm9ybWF0LgogICAgICAgIFJlcGxhY2VkIGFkZFN0eWxlQ2xhc3Mgd2l0aCBjbGFzc0xpc3QuYWRkIGFuZCByZW1vdmVTdHlsZUNsYXNzIHdpdGggY2xhc3NMaXN0LnJlbW92ZS4KCjIwMTItMDItMjcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBGaXggc29tZSBleGNlcHRpb25zIHdoZW4gcnVubmluZyBhZ2FpbnN0IHNoaXBwaW5nIFdlYktpdC4KCiAgICAgICAgVGhlcmUgYXJlIG5vIHNldHRlcnMgZm9yIHNvcnRPcmRlciBvciBzb3J0Q29sdW1uSWRlbnRpZmllci4gVHJ5aW5nIHRvIHNldCB0aGVtIHVzZSB0byB0aHJvdyBhbiBleGNlcHRpb24uCiAgICAgICAgVGhleSBqdXN0IGFyZSBzaWxlbnRseSBpZ25vcmVkIGluIFRPVCBXZWJLaXQuIFRoZSBzb3J0IGluZm8gaXMgcHJvcGVybHkgc2V0IGVhcmxpZXIgaW4gdGhlIGZ1bmN0aW9uLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZXNDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3KTogUmVtb3ZlIHNldHMgZm9yIHNvcnRPcmRlciBhbmQgc29ydENvbHVtbklkZW50aWZpZXIuCgoyMDEyLTAyLTI3ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgSGlkZSB0aGUgYXBwZWFyYW5jZSBhbmQgc3R5bGUgZGV0YWlscyBzaWRlYmFycyB3aGVuIHRoZSBub2RlIGlzIG5vdCBhbiBlbGVtZW50LgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTk1MjA+IEltcGxlbWVudCB0aGUgU3R5bGUgaW5zcGVjdG9yIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0FwcGVhcmFuY2VEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwZWFyYW5jZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLnN1cHBvcnRzRE9NTm9kZSk6IEFkZGVkLiBTdXBwb3J0IG9ubHkgRUxFTUVOVF9OT0RFIHR5cGVzLgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLnN1cHBvcnRzRE9NTm9kZSk6IEFkZGVkLiBTdXBwb3J0IG9ubHkgRUxFTUVOVF9OT0RFIHR5cGVzLgogICAgICAgICogVXNlckludGVyZmFjZS9ET01EZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuLmluc3BlY3QpOiBDYWxsIHN1cHBvcnRzRE9NTm9kZSBiZWZvcmUgc2V0dGluZyBkb21Ob2RlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuc3VwcG9ydHNET01Ob2RlKTogQWRkZWQuIEFsd2F5cyByZXR1cm4gdHJ1ZS4KCjIwMTItMDItMjcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNb3ZlIGVtcHR5IG1lc3NhZ2Ugc3VwcG9ydCBmcm9tIERldGFpbHNTZWN0aW9uRGF0YUdyaWRSb3cgZG93biB0byBEZXRhaWxzU2VjdGlvblJvdy4KCiAgICAgICAgVGhpcyBhbGxvd3MgQm94TW9kZWxEZXRhaWxzU2VjdGlvblJvdyB0byBzaG93IGEgcHJvcGVybHkgc3R5bGVkIGVtcHR5IG1lc3NhZ2UuIEl0IHdpbGwKICAgICAgICBhbHNvIGFsbG93IG90aGVyIHJvd3MgaW4gdGhlIFN0eWxlIGRldGFpbHMgc2lkZWJhciB0byBkbyB0aGUgc2FtZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQm94TW9kZWxEZXRhaWxzU2VjdGlvblJvdy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkJveE1vZGVsRGV0YWlsc1NlY3Rpb25Sb3cpOiBQYXNzIHRoZSBlbXB0eU1lc3NhZ2UgdG8gdGhlIERldGFpbHNTZWN0aW9uUm93IGNvbnN0cnVjdG9yLgogICAgICAgIChXZWJJbnNwZWN0b3IuQm94TW9kZWxEZXRhaWxzU2VjdGlvblJvdy5wcm90b3R5cGUuX3JlZnJlc2gpOiBVc2Ugc2hvd0VtcHR5TWVzc2FnZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkJveE1vZGVsRGV0YWlsc1NlY3Rpb25Sb3cucHJvdG90eXBlLl91cGRhdGVNZXRyaWNzKTogVXNlIGhpZGVFbXB0eU1lc3NhZ2UKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGV0YWlsc1NlY3Rpb24uY3NzOgogICAgICAgICguZGV0YWlscy1zZWN0aW9uID4gLmNvbnRlbnQgPiAuZ3JvdXAgPiAucm93LmVtcHR5KTogUmVtb3ZlZCAuZGF0YS1ncmlkIGZyb20gdGhlIHNlbGVjdG9yLgogICAgICAgICogVXNlckludGVyZmFjZS9EZXRhaWxzU2VjdGlvbkRhdGFHcmlkUm93LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsc1NlY3Rpb25EYXRhR3JpZFJvdyk6IFBhc3MgdGhlIGVtcHR5TWVzc2FnZSB0byBEZXRhaWxzU2VjdGlvblJvdyBjb25zdHJ1Y3Rvci4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRldGFpbHNTZWN0aW9uRGF0YUdyaWRSb3cucHJvdG90eXBlLnNldCBkYXRhR3JpZCk6IFVzZSBzaG93RW1wdHlNZXNzYWdlCiAgICAgICAgYW5kIGhpZGVFbXB0eU1lc3NhZ2UuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RldGFpbHNTZWN0aW9uUm93LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsc1NlY3Rpb25Sb3cpOiBJbml0aWFsaXplIHRoZSBfZW1wdHlNZXNzYWdlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsc1NlY3Rpb25Sb3cucHJvdG90eXBlLmdldCBlbXB0eU1lc3NhZ2UpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRldGFpbHNTZWN0aW9uUm93LnByb3RvdHlwZS5zZXQgZW1wdHlNZXNzYWdlKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EZXRhaWxzU2VjdGlvblJvdy5wcm90b3R5cGUuc2hvd0VtcHR5TWVzc2FnZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsc1NlY3Rpb25Sb3cucHJvdG90eXBlLmhpZGVFbXB0eU1lc3NhZ2UpOiBBZGRlZC4KCjIwMTItMDItMjcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbCBhbmQgbWFrZSBpdCBzaG93IHVwIGluIHRoZSBkZXRhaWxzIHNpZGViYXIuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxOTUyMD4gSW1wbGVtZW50IHRoZSBTdHlsZSBpbnNwZWN0b3IgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGV0YWlsc1NpZGViYXJQYW5lbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLnJlZnJlc2gpOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmF2aWdhdGlvbkl0ZW1DdXJsZXlCcmFjZXMucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6CgoyMDEyLTAyLTI3ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIFdlYkluc3BlY3Rvci5DU1NPYnNlcnZlciBhbmQgd2lyZSBpdCB1cCB0byB0aGUgSW5zcGVjdG9yQmFja2VuZC4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTIwPiBJbXBsZW1lbnQgdGhlIFN0eWxlIGluc3BlY3RvciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NPYnNlcnZlci5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NPYnNlcnZlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NPYnNlcnZlci5wcm90b3R5cGUubWVkaWFRdWVyeVJlc3VsdENoYW5nZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTT2JzZXJ2ZXIucHJvdG90eXBlLnN0eWxlU2hlZXRDaGFuZ2VkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlZCBDU1NPYnNlcnZlci5qcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOiBDYWxsIHJlZ2lzdGVyQ1NTRGlzcGF0Y2hlciB3aXRoIGFuIENTU09ic2VydmVyIGluc3RhbmNlLgoKMjAxMi0wMi0yNCAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIEFkZCBhIHNhbmUgbmFtZSBmb3IgdXNlciBnZW5lcmF0ZWQgcHJvZmlsZXMuCgogICAgICAgIE1vcmUgb2YgPHJkYXI6Ly9wcm9ibGVtLzEwODk3NDczPiBJbXBsZW1lbnQgSmF2YVNjcmlwdCBwcm9maWxpbmcgaW4gdGhlIG5ldyBXZWIgSW5zcGVjdG9yLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3RydW1lbnRTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5JbnN0cnVtZW50U2lkZWJhclBhbmVsLnByb3RvdHlwZS5hZGRQcm9maWxlKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUHJvZmlsZU1hbmFnZXIuanM6CgoyMDEyLTAyLTI0ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgQ3JlYXRlIGEgSmF2YVNjcmlwdFByb2ZpbGVWaWV3IHdoZW4gYSBwcm9maWxlIGlzIHNlbGVjdGVkIGFuZCBzaG93IGl0LgoKICAgICAgICBNb3JlIG9mIDxyZGFyOi8vcHJvYmxlbS8xMDg5NzQ3Mz4gSW1wbGVtZW50IEphdmFTY3JpcHQgcHJvZmlsaW5nIGluIHRoZSBuZXcgV2ViIEluc3BlY3Rvci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiBVcGRhdGUgbG9jYWxpemVkIHN0cmluZ3MuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXcpOiBBZGQgYSBjYXNlIGZvciBQcm9maWxlT2JqZWN0LgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXcuaXNWaWV3YWJsZSk6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9JbnN0cnVtZW50U2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zdHJ1bWVudFNpZGViYXJQYW5lbCk6IEFkZCBhIGxpc3RlbmVyIGZvciB3aGVuIGl0ZW1zIGluIHRoZSBjb250ZW50IHRyZWUgb3V0bGluZSBhcmUgc2VsZWN0ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5JbnN0cnVtZW50U2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcHJvZmlsZVNlbGVjdGVkKTogQ2FsbCBzaG93Q29udGVudFZpZXdGb3JSZXByZXNlbnRlZE9iamVjdCBvbgogICAgICAgICAgICB0aGUgc2VsZWN0ZWQgUHJvZmlsZU9iamVjdC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLnNpZGViYXJQYW5lbEZvclJlcHJlc2VudGVkT2JqZWN0KTogQWRkIGEgY2FzZSBmb3IgUHJvZmlsZU9iamVjdC4KCjIwMTItMDItMjQgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBIb29rIHVwIFN0YXJ0L1N0b3AgUHJvZmlsaW5nIEphdmFTY3JpcHQgaW4gdGhlIERldmVsb3AgbWVudSwgYW5kIG1ha2UgZWFjaCBwcm9maWxlIHNob3cKICAgICAgICB1cCBhcyBhIHNpZGViYXIgaXRlbS4KCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTA4OTc0NzM+IEltcGxlbWVudCBKYXZhU2NyaXB0IHByb2ZpbGluZyBpbiB0aGUgbmV3IFdlYiBJbnNwZWN0b3IuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zcGVjdG9yRnJvbnRlbmRBUEkuanM6CiAgICAgICAgKEluc3BlY3RvckZyb250ZW5kQVBJLmlzUHJvZmlsaW5nSmF2YVNjcmlwdCk6IENhbGwgaW50byB0aGUgUHJvZmlsZU1hbmFnZXIuCiAgICAgICAgKEluc3BlY3RvckZyb250ZW5kQVBJLnN0YXJ0UHJvZmlsaW5nSmF2YVNjcmlwdCk6IERpdHRvLgogICAgICAgIChJbnNwZWN0b3JGcm9udGVuZEFQSS5zdG9wUHJvZmlsaW5nSmF2YVNjcmlwdCk6IERpdHRvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkluc3RydW1lbnRTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9wcm9maWxlV2FzQWRkZWQpOiBDcmVhdGUgYSB0cmVlIGVsZW1lbnQgZm9yIHRoZSBhZGRlZCBwcm9maWxlLgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3Byb2ZpbGVXYXNVcGRhdGVkKTogVXBkYXRlIHRoZSB0aXRsZSBvZiB0aGUgdHJlZSBlbGVtZW50IGZvciB0aGUKICAgICAgICAgICAgcHJvZmlsZSB0aGF0IHdhcyB1cGRhdGVkLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSmF2YVNjcmlwdFByb2ZpbGVUeXBlLmpzOiBDaGFuZ2UgdGhlIHZhbHVlIG9mIGEgY29uc3RhbnQgdG8gbWF0Y2ggZGF0YSB3ZSBnZXQgYmFjawogICAgICAgICAgICBmcm9tIHRoZSBQcm9maWxlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Byb2ZpbGVNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5Qcm9maWxlTWFuYWdlci5pbml0aWFsaXplKTogQ2xlYXIgdGhlIGN1cnJlbnQgSmF2YVNjcmlwdAogICAgICAgICAgICBwcm9maWxlIHZhcmlhYmxlLgogICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZU1hbmFnZXIucHJvdG90eXBlLmlzUHJvZmlsaW5nSmF2YVNjcmlwdCk6IFJldHVybiB3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgcHJvZmlsaW5nIEphdmFTY3JpcHQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlTWFuYWdlci5wcm90b3R5cGUuc3RhcnRQcm9maWxpbmdKYXZhU2NyaXB0KTogRW5hYmxlIHRoZSBQcm9maWxlckFnZW50LCB3ZSBraWNrIG9mZiB0aGUgcHJvZmlsZSBpbgogICAgICAgICAgICB0aGUgY2FsbGJhY2suCiAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlTWFuYWdlci5wcm90b3R5cGUuc3RvcFByb2ZpbGluZ0phdmFTY3JpcHQpOiBTdG9wIHJlY29yZGluZyB0aGUgY3VycmVudCBwcm9maWxlIGFuZCBkaXNhYmxlIHRoZQogICAgICAgICAgICBQcm9maWxlckFnZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZU1hbmFnZXIucHJvdG90eXBlLmFkZFByb2ZpbGUpOiBVcGRhdGUgb3VyIHRlbXBvcmFyeSByZWNvcmRpbmcgcHJvZmlsZSB0byBnaXZlIGl0IHRoZSBpbmZvcm1hdGlvbiBhYm91dAogICAgICAgICAgICB0aGUgcHJvZmlsZSB0aGF0IHdhcyBhZGRlZCwgYW5kIGZpcmUgYW4gZXZlbnQgdGhhdCB0aGUgcHJvZmlsZSB3YXMgdSBwZGF0ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlTWFuYWdlci5wcm90b3R5cGUuc2V0UmVjb3JkaW5nUHJvZmlsZSk6IENyZWF0ZSBhIHRlbXBvcmFyeSBwcm9maWxlIGlmIG5lZWRlZCwgYW5kIGZpcmUgYW4gZXZlbnQgdGhhdAogICAgICAgICAgICBpdCB3YXMgY3JlYXRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVNYW5hZ2VyLnByb3RvdHlwZS5fcHJvZmlsZXJXYXNFbmFibGVkKTogQ3JlYXRlIGEgSmF2YVNjcmlwdFByb2ZpbGVUeXBlIGFuZCBzdGFydCByZWNvcmRpbmcuCgogICAgICAgICogVXNlckludGVyZmFjZS9Qcm9maWxlck9ic2VydmVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZXJPYnNlcnZlci5wcm90b3R5cGUuYWRkUHJvZmlsZUhlYWRlcik6IENhbGwgUHJvZmlsZU1hbmFnZXIuYWRkUHJvZmlsZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVyT2JzZXJ2ZXIucHJvdG90eXBlLnNldFJlY29yZGluZ1Byb2ZpbGUpOiBDYWxsIFByb2ZpbGVNYW5hZ2VyLnNldFJlY29yZGluZ1Byb2ZpbGUuCgoyMDEyLTAyLTI0ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIGEgc3R1YiBQcm9maWxlck9ic2VydmVyIGFuZCBob29rIGl0IHVwIGluIE1haW4uanMuCiAgICAgICAgCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTA4OTc0NzM+IEltcGxlbWVudCBKYXZhU2NyaXB0IHByb2ZpbGluZyBpbiB0aGUgbmV3IFdlYiBJbnNwZWN0b3IuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBBZGQgbmV3IGZpbGUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKTogU2V0IHVwIHRoZSBQcm9maWxlck9ic2VydmVyLgogICAgICAgICogVXNlckludGVyZmFjZS9Qcm9maWxlck9ic2VydmVyLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVyT2JzZXJ2ZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZXJPYnNlcnZlci5wcm90b3R5cGUuY29uc3RydWN0b3IuV2ViSW5zcGVjdG9yLlByb2ZpbGVyT2JzZXJ2ZXIucmVzZXRQcm9maWxlcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlck9ic2VydmVyLnByb3RvdHlwZS5hZGRQcm9maWxlSGVhZGVyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVyT2JzZXJ2ZXIucHJvdG90eXBlLmFkZEhlYXBTbmFwc2hvdENodW5rKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVyT2JzZXJ2ZXIucHJvdG90eXBlLmZpbmlzaEhlYXBTbmFwc2hvdCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlck9ic2VydmVyLnByb3RvdHlwZS5zZXRSZWNvcmRpbmdQcm9maWxlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVyT2JzZXJ2ZXIucHJvdG90eXBlLnJlcG9ydEhlYXBTbmFwc2hvdFByb2dyZXNzKToKCjIwMTItMDItMjQgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBBZGQgUHJvZmlsZVR5cGUgYW5kIEphdmFTY3JpcHRQcm9maWxlVHlwZSB0byBNYWluLmh0bWwsIHNpbmNlIGxhdGVyIHBhdGNoZXMgd2lsbCBkZXBlbmQgb24gdGhlbS4KCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTA4OTc0NzM+IEltcGxlbWVudCBKYXZhU2NyaXB0IHByb2ZpbGluZyBpbiB0aGUgbmV3IFdlYiBJbnNwZWN0b3IuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgoKMjAxMi0wMi0yNCAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgUHJvZmlsZURhdGFHcmlkVHJlZSB3b3JrIHdpdGggdGhlIGNoYW5nZXMgdG8gdGhlIG5ldyBpbnNwZWN0b3IuCiAgICAgICAgCiAgICAgICAgLSBVcGRhdGUgdGhlIHdheSBmb3JtYXR0ZWQgc3RyaW5ncyBhcmUgY3JlYXRlZAogICAgICAgIC0gQ2hhbmdlcyB0aGUgc2V0dGluZ3MgdG8gdXNlIHRoZSBuZXcgaW5zcGVjdG9yJ3Mgc3ludGF4CiAgICAgICAgLSBSZW1vdmUgdGhlIGRlcGVkZW5jeSBvbiB0aGUgbGlua2lmaWVyCgogICAgICAgIE1vcmUgb2YgPHJkYXI6Ly9wcm9ibGVtLzEwODk3NDczPiBJbXBsZW1lbnQgSmF2YVNjcmlwdCBwcm9maWxpbmcgaW4gdGhlIG5ldyBXZWIgSW5zcGVjdG9yLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Byb2ZpbGVEYXRhR3JpZFRyZWUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlRGF0YUdyaWROb2RlLnByb3RvdHlwZS5nZXQgZGF0YSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlRGF0YUdyaWROb2RlLnByb3RvdHlwZS5saW5raWZ5TG9jYXRpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZURhdGFHcmlkTm9kZS5wcm90b3R5cGUuY3JlYXRlQ2VsbCk6CgoyMDEyLTAyLTI0ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgQnJpbmcgaW4gc29tZSBzcGVjaWFsaXplZCBwcm9maWxlIGRhdGEgZ3JpZCBjb21wb25lbnRzIGZyb20gb3BlbiBzb3VyY2UuCiAgICAKICAgICAgICBNb3JlIG9mIDxyZGFyOi8vcHJvYmxlbS8xMDg5NzQ3Mz4gSW1wbGVtZW50IEphdmFTY3JpcHQgcHJvZmlsaW5nIGluIHRoZSBuZXcgV2ViIEluc3BlY3Rvci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Cb3R0b21VcFByb2ZpbGVEYXRhR3JpZFRyZWUuanM6IEFkZGVkLiBDb3BpZWQgZnJvbSBvcGVuIHNvdXJjZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUHJvZmlsZURhdGFHcmlkVHJlZS5qczogQWRkZWQuIENvcGllZCBmcm9tIG9wZW4gc291cmNlLgogICAgICAgICogVXNlckludGVyZmFjZS9Ub3BEb3duUHJvZmlsZURhdGFHcmlkVHJlZS5qczogQWRkZWQuIENvcGllZCBmcm9tIG9wZW4gc291cmNlLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEFkZCBuZXcgZmlsZXMuCgoyMDEyLTAyLTI0ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIHJ1bGVzIGZyb20gb3BlbiBzb3VyY2UgZm9yIHRoZSBwcm9maWxlIHZpZXcgdG8gSmF2YVNjcmlwdFByb2ZpbGVWaWV3LmNzcy4KICAgICAgICAKICAgICAgICBNb3JlIG9mIDxyZGFyOi8vcHJvYmxlbS8xMDg5NzQ3Mz4gSW1wbGVtZW50IEphdmFTY3JpcHQgcHJvZmlsaW5nIGluIHRoZSBuZXcgV2ViIEluc3BlY3Rvci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9KYXZhU2NyaXB0UHJvZmlsZVZpZXcuY3NzOiBBZGRlZC4gQ29waWVkIHJ1bGVzIGZyb20gb3BlbiBzb3VyY2UuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogQWRkZWQgZmlsZS4KCjIwMTItMDItMjQgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBDbGVhbiB1cCBKYXZhU2NyaXB0UHJvZmlsZVZpZXcgc28gaXQgY2FuIGJlIHVzZWQgaW4gdGhlIG5ldyBpbnNwZWN0b3IuCiAgICAgICAgCiAgICAgICAgVGhpcyBwYXRjaDoKICAgICAgICAgICAgLSBSZW1vdmVzIHRoZSBzdGF0dXMgYmFyIGJ1dHRvbnMgKGFkZGluZyBhIEZJWE1FIHRvIGJyaW5nIGJhY2sgdGhhdCBmdW5jdGlvbmFsaXR5KQogICAgICAgICAgICAtIE1ha2VzIHRoZSBjbGFzcyBpbmhlcml0IGZyb20gQ29udGVudFZpZXcgaW5zdGVhZCBvZiBqdXN0IFZpZXcKICAgICAgICAgICAgLSBSZXBsYWNlcyAqc3R5bGVDbGFzcyBmdW5jdGlvbnMgd2l0aCBjbGFzc0xpc3QuKgogICAgICAgICAgICAtIENoYW5nZXMgdGhlIHNldHRpbmdzIHRvIHVzZSB0aGUgbmV3IGluc3BlY3RvcidzIHN5bnRheAoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0phdmFTY3JpcHRQcm9maWxlVmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRQcm9maWxlVmlldyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0UHJvZmlsZVZpZXcucHJvdG90eXBlLl9jaGFuZ2VWaWV3KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRQcm9maWxlVmlldy5wcm90b3R5cGUuX3BlcmNlbnRDbGlja2VkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRQcm9maWxlVmlldy5wcm90b3R5cGUuX3VwZGF0ZVBlcmNlbnRCdXR0b24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFByb2ZpbGVWaWV3LnByb3RvdHlwZS5fZm9jdXNDbGlja2VkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRQcm9maWxlVmlldy5wcm90b3R5cGUuX2V4Y2x1ZGVDbGlja2VkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRQcm9maWxlVmlldy5wcm90b3R5cGUuX3Jlc2V0Q2xpY2tlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0UHJvZmlsZVZpZXcucHJvdG90eXBlLl9kYXRhR3JpZE5vZGVTZWxlY3RlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0UHJvZmlsZVZpZXcucHJvdG90eXBlLl9kYXRhR3JpZE5vZGVEZXNlbGVjdGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRQcm9maWxlVmlldy5wcm90b3R5cGUuX21vdXNlRG93bkluRGF0YUdyaWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEFkZCBKYXZhU2NyaXB0UHJvZmlsZVZpZXcuCgoyMDEyLTAyLTI0ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIGEgUHJvZmlsZU9iamVjdCBjbGFzcywgd2hpY2gganVzdCBob2xkcyBzb21lIGRhdGEgYWJvdXQgcHJvZmlsZXMgKHR5cGUsIHRpdGxlLCB1aWQsIGFuZCB3aGV0aGVyIG9yIG5vdAogICAgICAgIGl0IGlzIHRlbXBvcmFyeSkuCgogICAgICAgIE1vcmUgb2YgPHJkYXI6Ly9wcm9ibGVtLzEwODk3NDczPiBJbXBsZW1lbnQgSmF2YVNjcmlwdCBwcm9maWxpbmcgaW4gdGhlIG5ldyBXZWIgSW5zcGVjdG9yLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Byb2ZpbGVPYmplY3QuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZU9iamVjdCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlT2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuUHJvZmlsZU9iamVjdC5nZXQgdHlwZUlkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVPYmplY3QucHJvdG90eXBlLmdldCB0aXRsZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlT2JqZWN0LnByb3RvdHlwZS5nZXQgdWlkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVPYmplY3QucHJvdG90eXBlLmdldCBpc1RlbXBvcmFyeSk6CgoyMDEyLTAyLTIyICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgQ3JlYXRlIGEgc3R1YiBQcm9maWxlTWFuYWdlciBhbmQgYWRkIGFuIGluaXRpYWxpemUgbWV0aG9kLgogICAgICAgIAogICAgICAgIE1vcmUgb2YgPHJkYXI6Ly9wcm9ibGVtLzEwODk3NDczPiBJbXBsZW1lbnQgSmF2YVNjcmlwdCBwcm9maWxpbmcgaW4gdGhlIG5ldyBXZWIgSW5zcGVjdG9yLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogQWRkIG5ldyBmaWxlLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IENyZWF0ZSBhIHByb2ZpbGUgbWFuYWdlci4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUHJvZmlsZU1hbmFnZXIuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZU1hbmFnZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5Qcm9maWxlTWFuYWdlci5pbml0aWFsaXplKToKCjIwMTItMDItMjAgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBSZW5hbWUgQ1BVUHJvZmlsZSB0byBKYXZhU2NyaXB0UHJvZmlsZS4KICAgICAgICAKICAgICAgICBNb3JlIG9mIDxyZGFyOi8vcHJvYmxlbS8xMDg5NzQ3Mz4gSW1wbGVtZW50IEphdmFTY3JpcHQgcHJvZmlsaW5nIGluIHRoZSBuZXcgV2ViIEluc3BlY3Rvci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9KYXZhU2NyaXB0UHJvZmlsZVR5cGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0UHJvZmlsZVR5cGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFByb2ZpbGVUeXBlLnByb3RvdHlwZS5jcmVhdGVWaWV3KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSmF2YVNjcmlwdFByb2ZpbGVWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFByb2ZpbGVWaWV3LnByb3RvdHlwZS5fY2hhbmdlVmlldy5zZXQgZWxzZSk6CgoyMDEyLTAyLTIwICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgQnJpbmcgaW4gc29tZSBmaWxlcyBmcm9tIG9wZW4gc291cmNlLgogICAgICAgIAogICAgICAgIFN0YXJ0IG9mIDxyZGFyOi8vcHJvYmxlbS8xMDg5NzQ3Mz4gSW1wbGVtZW50IEphdmFTY3JpcHQgcHJvZmlsaW5nIGluIHRoZSBuZXcgV2ViIEluc3BlY3Rvci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9KYXZhU2NyaXB0UHJvZmlsZVR5cGUuanM6IEFkZGVkLiBDb3BpZWQgZnJvbSBvcGVuIHNvdXJjZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSmF2YVNjcmlwdFByb2ZpbGVWaWV3LmpzOiBBZGRlZC4gQ29waWVkIGZyb20gb3BlbiBzb3VyY2UuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Byb2ZpbGVUeXBlLmpzOiBBZGRlZC4gQ29waWVkIGZyb20gb3BlbiBzb3VyY2UuCgoyMDEyLTAyLTI2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgVXNlIGluc2VydGlvbkluZGV4Rm9yT2JqZWN0SW5MaXN0U29ydGVkQnlGdW5jdGlvbiB0byBlZmZpY2llbnRseSBidWlsZCB0aGUgdGltZWxpbmUgZGF0YSBncmlkcy4KCiAgICAgICAgQ2FsbGluZyBfc29ydEN1cnJlbnREYXRhR3JpZCBmb3IgZWFjaCB1cGRhdGUgd2FzIGV4cGVuc2l2ZSBzaW5jZSBpdCByZW1vdmVzIGFsbCB0aGUgcm93cyBhbmQgcmVpbnNlcnRzIHRoZW0uCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxOTU1MyYxMDMxOTU2NyYxMDMxOTU3MT4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YUdyaWQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUucHJvdG90eXBlLl9hdHRhY2gpOiBGaXggYSBidWcgdGhhdCBwcmV2ZW50ZWQgaW5zZXJ0aW5nIHRoZSByb3cgaW4gdGhlIHJpZ2h0IHBsYWNlLgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZXNDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fdXBkYXRlUGVuZGluZ1JlY29yZHMpOiBVc2UgaW5zZXJ0aW9uSW5kZXhGb3JPYmplY3RJbkxpc3RTb3J0ZWRCeUZ1bmN0aW9uCiAgICAgICAgd2hlbiB0aGVyZSBpcyBhIHNvcnRDb2x1bW5JZGVudGlmaWVyLiBEb24ndCBjYWxsIF9zb3J0Q3VycmVudERhdGFHcmlkIGFueW1vcmUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldy5wcm90b3R5cGUuX3NvcnRDdXJyZW50RGF0YUdyaWQpOiBVc2UgX3NvcnRDb21wYXJhdG9yLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcucHJvdG90eXBlLl9zb3J0Q29tcGFyYXRvcik6IEFkZGVkLiBGYWN0b3JlZCBvdXQgb2YgX3NvcnRDdXJyZW50RGF0YUdyaWQuCgoyMDEyLTAyLTI2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgU2hvdyByZWNvZGluZyBzdGF0dXMgaW4gdGhlIEluc3RydW1lbnQgc2lkZWJhciBhbmQgYWxsb3cgbWFudWFsbHkgc3RhcnRpbmcgYW5kIHN0b3BwaW5nIHJlY29yZGluZy4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTUzJjEwMzE5NTY3JjEwMzE5NTcxPgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiBVcGRhdGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvUmVjb3JkaW5nLnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9SZWNvcmRpbmdAMngucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1JlY29yZGluZ0hvdmVyZWQucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1JlY29yZGluZ0hvdmVyZWRAMngucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1JlY29yZGluZ1N0b3BwZWQucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1JlY29yZGluZ1N0b3BwZWRAMngucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5jc3M6CiAgICAgICAgKC5zaWRlYmFyID4gLnBhbmVsLmluc3RydW1lbnQgPiAudGl0bGUtYmFyKToKICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuaW5zdHJ1bWVudCA+IC50aXRsZS1iYXIudGltZWxpbmVzID4gLnJlY29yZC1nbHlwaCk6CiAgICAgICAgKC5zaWRlYmFyID4gLnBhbmVsLmluc3RydW1lbnQgPiAudGl0bGUtYmFyLnRpbWVsaW5lcyA+IC5yZWNvcmQtZ2x5cGgucmVjb3JkaW5nKToKICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuaW5zdHJ1bWVudCA+IC50aXRsZS1iYXIudGltZWxpbmVzID4gLnJlY29yZC1nbHlwaDpob3Zlcik6CiAgICAgICAgKC5zaWRlYmFyID4gLnBhbmVsLmluc3RydW1lbnQgPiAudGl0bGUtYmFyLnRpbWVsaW5lcyA+IC5yZWNvcmQtZ2x5cGgucmVjb3JkaW5nOmhvdmVyKToKICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuaW5zdHJ1bWVudCA+IC50aXRsZS1iYXIudGltZWxpbmVzID4gLnJlY29yZC1nbHlwaC5mb3JjZWQpOgogICAgICAgICguc2lkZWJhciA+IC5wYW5lbC5pbnN0cnVtZW50ID4gLnRpdGxlLWJhci50aW1lbGluZXMgPiAucmVjb3JkLWdseXBoLnJlY29yZGluZy5mb3JjZWQpOgogICAgICAgICguc2lkZWJhciA+IC5wYW5lbC5pbnN0cnVtZW50ID4gLnRpdGxlLWJhci50aW1lbGluZXMgPiAucmVjb3JkLXN0YXR1cyk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3RydW1lbnRTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5JbnN0cnVtZW50U2lkZWJhclBhbmVsKTogQ3JlYXRlIGdseXBoIGFuZCBzdGF0dXMgZWxlbWVudHMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5JbnN0cnVtZW50U2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVjb3JkaW5nU3RhcnRlZCk6IEFkZGVkLiBVcGRhdGUgZ2x5cGggYW5kIHN0YXR1cy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkluc3RydW1lbnRTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9yZWNvcmRpbmdTdG9wcGVkKTogQWRkZWQuIERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3JlY29yZEdseXBoTW91c2VkT3Zlcik6IEFkZGVkLiBDbGVhciBmb3JjZWQgY2xhc3MuCiAgICAgICAgVXBkYXRlIHN0YXR1cyB0byByZWZsZWN0IHdoYXQgaXQgd2lsbCBiZSBpZiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5JbnN0cnVtZW50U2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVjb3JkR2x5cGhNb3VzZWRPdXQpOiBBZGRlZC4gUmVzdG9yZSBjdXJyZW50IHN0YXR1cy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkluc3RydW1lbnRTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9yZWNvcmRHbHlwaENsaWNrZWQpOiBBZGRlZC4gQWRkIGZvcmNlZCBjbGFzcyB0byBwcmV2ZW50CiAgICAgICAgdGhlIGdseXBoIGZyb20gc2hvd2luZyBhIGNvbmZ1c2luZyBzdGF0dXMgYWZ0ZXIgY2xpY2suCgoyMDEyLTAyLTI2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRHJhdyB0aGUgb3ZlcnZpZXcgYmFyIGdyYXBoIGF0IHRoZSB0b3Agb2YgdGhlIHRpbWVsaW5lIGNvbnRlbnQgdmlldy4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTUzJjEwMzE5NTY3JjEwMzE5NTcxPgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZU92ZXJ2aWV3LmNzczoKICAgICAgICAoLnRpbWVsaW5lLW92ZXJ2aWV3ID4gLnRpbWVsaW5lID4gLmJhci1jb250YWluZXIpOgogICAgICAgICgudGltZWxpbmUtb3ZlcnZpZXcgPiAudGltZWxpbmUgLmJhcik6CiAgICAgICAgKC50aW1lbGluZS1vdmVydmlldyA+IC50aW1lbGluZSAuYmFyLndhaXRpbmcpOgogICAgICAgICgudGltZWxpbmUtb3ZlcnZpZXcgPiAudGltZWxpbmUudGltZWxpbmUtcmVjb3JkLXR5cGUtbmV0d29yayAuYmFyKToKICAgICAgICAoLnRpbWVsaW5lLW92ZXJ2aWV3ID4gLnRpbWVsaW5lLnRpbWVsaW5lLXJlY29yZC10eXBlLWxheW91dCAuYmFyKToKICAgICAgICAoLnRpbWVsaW5lLW92ZXJ2aWV3ID4gLnRpbWVsaW5lLnRpbWVsaW5lLXJlY29yZC10eXBlLXNjcmlwdCAuYmFyKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVPdmVydmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lT3ZlcnZpZXcpOiBDcmVhdGUgYSBiYXIgY29udGFpbmVyIGluIGVhY2ggdGltZWxpbmUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU92ZXJ2aWV3LnByb3RvdHlwZS51cGRhdGUpOiBDYWxsIF91cGRhdGVUaW1lbGluZUJhcnMgZm9yIGVhY2ggdHlwZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lT3ZlcnZpZXcucHJvdG90eXBlLl91cGRhdGVUaW1lbGluZUJhcnMpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lT3ZlcnZpZXcucHJvdG90eXBlLl91cGRhdGVUaW1lbGluZUJhcnMuY29tcHV0ZVBlcmNlbnRhZ2VzKTogQ29tcHV0ZSBwZXJjZW50YWdlcwogICAgICAgIGZvciBzdGFydFRpbWUgYW5kIGVuZFRpbWUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU92ZXJ2aWV3LnByb3RvdHlwZS5fdXBkYXRlVGltZWxpbmVCYXJzLmNvbXB1dGVBY3RpdmVQZXJjZW50YWdlcyk6IENvbXB1dGUgcGVyY2VudGFnZXMKICAgICAgICBmb3IgZW5kVGltZSBhbmQgdGhlIHN0YXJ0IG9mIGFjdGl2ZUR1cmF0aW9uLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVPdmVydmlldy5wcm90b3R5cGUuX3VwZGF0ZVRpbWVsaW5lQmFycy5hZGRCYXIpOiBDcmVhdGUgYSBiYXIgYW5kIGFwcGVuZCBpdC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lT3ZlcnZpZXcucHJvdG90eXBlLl91cGRhdGVUaW1lbGluZUJhcnMuY3JlYXRlQmFycyk6IEl0ZXJhdGUgb3ZlciB0aGUgcmVjb3JkcyBhbmQgZmluZAogICAgICAgIHRoZSBkaXN0cmlidXRpb24gb24gdGhlIGdyYXBoLgoKMjAxMi0wMi0yNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEltcHJvdmUgYXV0byByZWNvcmRpbmcgb2YgdGltZWxpbmUgZGF0YSBzbyBpdCBzdG9wcyBhdCBhIHJlYXNvbmFibGUgdGltZSBpbnN0ZWFkIG9mIGEgZml4ZWQgMzAgc2Vjb25kcy4KCiAgICAgICAgUmVjb3JkaW5nIHdpbGwgbm93IHN0b3Agd2hlbiB0aGVyZSBoYXMgYmVlbiAxIHNlY29uZCBvZiBkZWFkIHRpbWUgYWZ0ZXIgdGhlIGxvYWQgZXZlbnQgZmlyZXMuIE9yIGFmdGVyIGEKICAgICAgICBtYXhpbXVtIG9mIDEwIHNlY29uZHMgYWZ0ZXIgdGhlIGxvYWQgZXZlbnQgZmlyZXMuIFRoaXMgd29ya3Mgd2VsbCBmb3IgYSBudW1iZXIgb2YgbGFyZ2UgYW5kIHNtYWxsIHNpdGVzLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTk1NTMmMTAzMTk1NjcmMTAzMTk1NzE+CgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlcik6IEluaXRpYWxpemUgX2RvbUNvbnRlbnRMb2FkZWRFdmVudFRpbWUgYW5kIF9sb2FkRXZlbnRUaW1lLiAKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuZ2V0IG1haW5GcmFtZUxvYWRFdmVudFRpbWUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuZ2V0IG1haW5GcmFtZURPTUNvbnRlbnRMb2FkZWRFdmVudFRpbWUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuc3RhcnRSZWNvcmRpbmcpOiBJbml0aWFsaXplIF9kb21Db250ZW50TG9hZGVkRXZlbnRUaW1lIGFuZCBfbG9hZEV2ZW50VGltZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuc3RvcFJlY29yZGluZyk6IENsZWFyIF9kZWFkVGltZVRpbWVvdXQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlLmV2ZW50UmVjb3JkZWQucHJvY2Vzc1JlY29yZCk6IFByb2Nlc3MgdGhlIE1hcmtMb2FkIGFuZCBNYXJrRE9NQ29udGVudCByZWNvcmRzLgogICAgICAgIENhbGwgX3N0b3BBdXRvUmVjb3JkaW5nU29vbiBmb3IgTWFya0xvYWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlLl9hZGRSZWNvcmQpOiBDYWxsIF9yZXNldEF1dG9SZWNvcmRpbmdEZWFkVGltZVRpbWVvdXQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlLl9zdGFydEF1dG9SZWNvcmRpbmcpOiBSZW1vdmVkIHRpbWVvdXQgZm9yIHN0b3BSZWNvcmRpbmcuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlLl9zdG9wQXV0b1JlY29yZGluZ1Nvb24pOiBBZGRlZC4gU3RhcnQgYSB0aW1lb3V0IGZvciB0aGUgbWF4aW11bSB0aW1lLiBBbHNvCiAgICAgICAgY2FsbCBfcmVzZXRBdXRvUmVjb3JkaW5nRGVhZFRpbWVUaW1lb3V0IHRvIHN0YXJ0IHdhdGNoaW5nIGRlYWQgdGltZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuX3Jlc2V0QXV0b1JlY29yZGluZ0RlYWRUaW1lVGltZW91dCk6IEFkZGVkLiBSZXNldCB0aGUgZGVhZCB0aW1lIHRpbWVvdXQuCgoyMDEyLTAyLTI2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRHJhdyB0aGUgdGltZXMgaW4gdGhlIHRpbWVsaW5lIG92ZXJ2aWV3IGhlYWRlci4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTUzJjEwMzE5NTY3JjEwMzE5NTcxPgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9JbnN0cnVtZW50U2lkZWJhclBhbmVsLmNzczoKICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuaW5zdHJ1bWVudCA+IC5uYXZpZ2F0aW9uLXNpZGViYXItcGFuZWwtY29udGVudC10cmVlLW91dGxpbmUudGltZWxpbmVzIC5pdGVtOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCguc2VsZWN0ZWQpKTogUmVkdWNlIGRpdmlkZXIgb3BhY2l0eS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVPdmVydmlldy5jc3M6CiAgICAgICAgKC50aW1lbGluZS1vdmVydmlldyA+IC5oZWFkZXIpOiBBZGRlZC4KICAgICAgICAoLnRpbWVsaW5lLW92ZXJ2aWV3ID4gLmhlYWRlciA+IC5kaXZpZGVyKTogQWRkZWQuCiAgICAgICAgKC50aW1lbGluZS1vdmVydmlldyA+IC5oZWFkZXIgPiAuZGl2aWRlcjpsYXN0LWNoaWxkKTogQWRkZWQuCiAgICAgICAgKC50aW1lbGluZS1vdmVydmlldyA+IC5oZWFkZXIgPiAuZGl2aWRlciA+IC5sYWJlbCk6IEFkZGVkLgogICAgICAgICgudGltZWxpbmUtb3ZlcnZpZXcgPiAuaGVhZGVyID4gLmRpdmlkZXI6Zmlyc3QtY2hpbGQgPiAubGFiZWwpOiBBZGRlZC4KICAgICAgICAoLnRpbWVsaW5lLW92ZXJ2aWV3ID4gLnRpbWVsaW5lKTogQWRkZWQuCiAgICAgICAgKC50aW1lbGluZS1vdmVydmlldyA+IC50aW1lbGluZTpub3QoOmZpcnN0LWNoaWxkKSk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZU92ZXJ2aWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVPdmVydmlldyk6IENyZWF0ZSB0aGUgaGVhZGVyIGVsZW1lbnQgYW5kIHRpbWVsaW5lIHJvd3MuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU92ZXJ2aWV3LnByb3RvdHlwZS5nZXQgcmVjb3JkVHlwZXMpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lT3ZlcnZpZXcucHJvdG90eXBlLmNsZWFyKTogQWRkZWQuIFJlc2V0IHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGJvdW5kYXJpZXMuIENhbGwgX3VwZGF0ZUhlYWRlclRpbWVzLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVPdmVydmlldy5wcm90b3R5cGUudXBkYXRlKTogQWRkZWQuIEZpbmQgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdGltZXMuIENhbGwgX3VwZGF0ZUhlYWRlclRpbWVzLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVPdmVydmlldy5wcm90b3R5cGUudXBkYXRlTGF5b3V0KTogQWRkZWQuIENhbGwgX3VwZGF0ZUhlYWRlclRpbWVzLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVPdmVydmlldy5wcm90b3R5cGUuX3VwZGF0ZUhlYWRlclRpbWVzKTogQWRkZWQuIFVwZGF0ZSB0aGUgZGl2aWRlcnMgYW5kIGxhYmVscy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVzQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldy5wcm90b3R5cGUudXBkYXRlTGF5b3V0KTogQ2FsbCB1cGRhdGVMYXlvdXQgb24gdGhlIHRpbWVsaW5lIG92ZXJ2aWV3LgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcucHJvdG90eXBlLnRpbWVsaW5lT3ZlcnZpZXdSZWNvcmRzV2l0aFR5cGUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fYWRkUmVjb3JkVG9EYXRhR3JpZCk6IERvbid0IHJldHVybiBlYXJseSwgY2FsbCBfdXBkYXRlUGVuZGluZ1JlY29yZHNTb29uLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcucHJvdG90eXBlLl91cGRhdGVQZW5kaW5nUmVjb3Jkc1Nvb24pOiBSZXR1cm4gZWFybHkgaWYgbm90IHZpc2libGUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldy5wcm90b3R5cGUuX3VwZGF0ZVBlbmRpbmdSZWNvcmRzKTogQ2FsbCB1cGRhdGUgb24gdGhlIHRpbWVsaW5lIG92ZXJ2aWV3LiBGaXggaWYgc3RhdGVtZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcucHJvdG90eXBlLl9zY2hlZHVsZUdyaWROb2RlRm9yUmVmcmVzaCk6IERvbid0IHJldHVybiBlYXJseSwgY2FsbCBfdXBkYXRlUGVuZGluZ1JlY29yZHNTb29uLgoKMjAxMi0wMi0yNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCB0aGUgc3RhcnQgb2YgV2ViSW5zcGVjdG9yLlRpbWVsaW5lT3ZlcnZpZXcsIHRoZSBvdmVydmlldyBncmFwaCBhdCB0aGUgdG9wIG9mIHRoZSB0aW1lbGluZSBjb250ZW50IHZpZXcuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxOTU1MyYxMDMxOTU2NyYxMDMxOTU3MT4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZU92ZXJ2aWV3LmNzczogQWRkZWQuCiAgICAgICAgKC50aW1lbGluZS1vdmVydmlldyk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lT3ZlcnZpZXcuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVPdmVydmlldyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU92ZXJ2aWV3LnByb3RvdHlwZS5nZXQgZWxlbWVudCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lc0NvbnRlbnRWaWV3LmNzczoKICAgICAgICAoLmNvbnRlbnQtdmlldy50aW1lbGluZXMgPiAudGltZWxpbmUtb3ZlcnZpZXcpOgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZXNDb250ZW50Vmlldy5qczoKCjIwMTItMDItMjUgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgYSB3YXkgdG8ganVtcCB0byByZXNvdXJjZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBOZXR3b3JrIGFuZCBTY3JpcHQgdGltZWxpbmUgZGF0YSBncmlkLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTk1NTMmMTAzMTk1Njc+CgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFHcmlkLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YUdyaWQpOiBSZW1vdmUgY2FwdHVyZSBvbiB0aGUgY2xpY2sgYW5kIG1vdXNlZG93biBldmVudHMuIFRoaXMgYWxsb3dzIHRoZSBnby10bwogICAgICAgIHRvIHByZXZlbnQgcm93IHNlbGVjdGlvbiBpbiB0aGUgZGF0YSBncmlkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZVV0aWxpdGllcy5qczoKICAgICAgICAoZ2VuZXJhdGVDb2xvcmVkSW1hZ2UpOiBBZGRlZCBzdXBwb3J0IGZvciBhZGp1c3RpbmcgdGhlIGFscGhhIGJ5IG11bHRpcGx5aW5nLgogICAgICAgIChnZW5lcmF0ZUNvbG9yZWRJbWFnZXNGb3JDU1MuZ2VuZXJhdGVJbWFnZSk6IFBhc3MgYWxvbmcgdGhlIGZpbGxDb2xvciBhbHBoYS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5jc3M6CiAgICAgICAgKC5nby10by1hcnJvdyk6IEFkZGVkLgogICAgICAgICguZ28tdG8tYXJyb3c6YWN0aXZlKTogQWRkZWQuCiAgICAgICAgKDpmb2N1cyAuc2VsZWN0ZWQgLmdvLXRvLWFycm93KTogQWRkZWQuCiAgICAgICAgKDpmb2N1cyAuc2VsZWN0ZWQgLmdvLXRvLWFycm93OmFjdGl2ZSk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY3JlYXRlR29Ub0Fycm93QnV0dG9uLnN0b3BQcm9wYWdhdGlvbik6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuY3JlYXRlR29Ub0Fycm93QnV0dG9uKTogQWRkZWQuIEdlbmVyYXRlIHRoZSBpbWFnZXMgYW5kIGJ1dHRvbiBlbGVtZW50LgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVRpbWVsaW5lRGF0YUdyaWROb2RlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VUaW1lbGluZURhdGFHcmlkTm9kZS5wcm90b3R5cGUuY3JlYXRlQ2VsbENvbnRlbnQpOiBBcHBlbmQgYSBnby10byBidXR0b24gdG8gdGhlIG5hbWUgY29sdW1uLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VUaW1lbGluZURhdGFHcmlkTm9kZS5wcm90b3R5cGUuX2dvVG9SZXNvdXJjZSk6IEFkZGVkLiBTaG93IHRoZSByZXNvdXJjZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2NyaXB0VGltZWxpbmVEYXRhR3JpZE5vZGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRUaW1lbGluZURhdGFHcmlkTm9kZS5wcm90b3R5cGUuY3JlYXRlQ2VsbENvbnRlbnQpOiBBcHBlbmQgYSBnby10byBidXR0b24gdG8gdGhlIHJlc291cmNlIGNvbHVtbi4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFRpbWVsaW5lRGF0YUdyaWROb2RlLnByb3RvdHlwZS5fZ29Ub1Jlc291cmNlKTogQWRkZWQuIFNob3cgdGhlIHJlc291cmNlIGFuZCBsaW5lLgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZXNDb250ZW50Vmlldy5jc3M6CiAgICAgICAgKC5jb250ZW50LXZpZXcudGltZWxpbmVzID4gLmRhdGEtZ3JpZCB0ZCAuZ28tdG8tYXJyb3cpOiBBZGRlZC4gRmxvYXQgcmlnaHQsIGhpZGRlbiBieSBkZWZhdWx0CiAgICAgICAgKC5jb250ZW50LXZpZXcudGltZWxpbmVzID4gLmRhdGEtZ3JpZCB0cjpob3ZlciAuZ28tdG8tYXJyb3cpOiBBZGRlZC4gU2hvdyB0aGUgYnV0dG9uLgoKMjAxMi0wMi0yNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEZpeCBzb21lIGV4Y2VwdGlvbnMgdGhhdCBvY2N1cnJlZCB3aGVuIGNsaWNraW5nIG9uIGEgcmVzb3VyY2UgaW4gdGhlIElzc3VlcyBzaWRlYmFyLgoKICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dFJlc291cmNlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldyk6IE1vdmUgX2lzc3VlcyBhbmQgX2NvbnRlbnRQb3B1bGF0ZWQgYWJvdmUgdGhlIGNhbGwgdG8gdGhlIFJlc291cmNlQ29udGVudFZpZXcKICAgICAgICBjb25zdHJ1Y3RvciBzaW5jZSBhZGRJc3N1ZSBuZWVkcyB0aGVtIGFuZCBSZXNvdXJjZUNvbnRlbnRWaWV3IHBvcHVsYXRlcyB0aGUgaXNzdWVzLgoKMjAxMi0wMi0yNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFNoYXJlIGNvZGUgZm9yIGdlbmVyYXRpbmcgZGlzY2xvc3VyZSB0cmlhbmdsZXMgc28gaXQgY2FuIGJlIHVzZWQgaW4gb3RoZXIgcGxhY2VzLgoKICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGV0YWlsc1NlY3Rpb24uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZXRhaWxzU2VjdGlvbi5wcm90b3R5cGUuX2dlbmVyYXRlRGlzY2xvc3VyZVRyaWFuZ2xlc0lmTmVlZGVkKTogVXNlIGdlbmVyYXRlQ29sb3JlZEltYWdlc0ZvckNTUy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VVdGlsaXRpZXMuanM6CiAgICAgICAgKGdlbmVyYXRlQ29sb3JlZEltYWdlc0ZvckNTUyk6IEFkZGVkLiBDb3BpZWQgZnJvbSBOYXZpZ2F0aW9uU2lkZWJhclBhbmVsIGFuZCBtYWRlIGdlbmVyaWMuCiAgICAgICAgKGdlbmVyYXRlQ29sb3JlZEltYWdlc0ZvckNTUy5pbWFnZUxvYWRlZCk6IEFkZGVkLgogICAgICAgIChnZW5lcmF0ZUNvbG9yZWRJbWFnZXNGb3JDU1MuZ2VuZXJhdGVJbWFnZSk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2dlbmVyYXRlRGlzY2xvc3VyZVRyaWFuZ2xlc0lmTmVlZGVkKTogVXNlIGdlbmVyYXRlQ29sb3JlZEltYWdlc0ZvckNTUy4KCjIwMTItMDItMjQgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBQb3B1bGF0ZSB0aGUgU2NyaXB0IGRhdGEgZ3JpZCBpbiB0aGUgdGltZWxpbmUgY29udGVudCB2aWV3LgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTk1Njc+IEltcGxlbWVudCB0aGUgU2NyaXB0IGluc3RydW1lbnQgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczogVXBkYXRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlZCBTY3JpcHRUaW1lbGluZURhdGFHcmlkTm9kZS5qcyBhbmQgU2NyaXB0VGltZWxpbmVSZWNvcmQuanMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NjcmlwdFRpbWVsaW5lRGF0YUdyaWROb2RlLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFRpbWVsaW5lRGF0YUdyaWROb2RlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFRpbWVsaW5lRGF0YUdyaWROb2RlLnByb3RvdHlwZS5nZXQgcmVjb3JkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFRpbWVsaW5lRGF0YUdyaWROb2RlLnByb3RvdHlwZS5nZXQgZGF0YSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRUaW1lbGluZURhdGFHcmlkTm9kZS5wcm90b3R5cGUuY3JlYXRlQ2VsbENvbnRlbnQpOgogICAgICAgICogVXNlckludGVyZmFjZS9TY3JpcHRUaW1lbGluZVJlY29yZC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRUaW1lbGluZVJlY29yZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRUaW1lbGluZVJlY29yZC5FdmVudFR5cGUuZGlzcGxheU5hbWUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0VGltZWxpbmVSZWNvcmQucHJvdG90eXBlLmdldCBldmVudFR5cGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0VGltZWxpbmVSZWNvcmQucHJvdG90eXBlLmdldCBkZXRhaWxzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFRpbWVsaW5lUmVjb3JkLnByb3RvdHlwZS5nZXQgcmVzb3VyY2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0VGltZWxpbmVSZWNvcmQucHJvdG90eXBlLmdldCBsaW5lTnVtYmVyKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLnByb3RvdHlwZS5ldmVudFJlY29yZGVkLnByb2Nlc3NSZWNvcmQpOiBIYW5kbGUgc2NyaXB0IHJlY29yZCB0eXBlcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuZXZlbnRSZWNvcmRlZCk6IFBhc3MgYWxvbmcgdGhlIHBhcmVudCByZWNvcmQgdG8gcHJvY2Vzc1JlY29yZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVzQ29udGVudFZpZXcuY3NzOgogICAgICAgICguY29udGVudC12aWV3LnRpbWVsaW5lcyA+IC5kYXRhLWdyaWQgLnJlc291cmNlLWNvbHVtbiAuaWNvbik6IFVwZGF0ZWQgdGhlIHNlbGVjdG9yIHRvIHdvcmsgd2l0aCBuYW1lLWNvbHVtbiBhbmQgcmVzb3VyY2UtY29sdW1uLgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZXNDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fc29ydEN1cnJlbnREYXRhR3JpZC5jb21wYXJhdG9yKTogSGFuZGxlIFdlYkluc3BlY3Rvci5SZXNvdXJjZSB2YWx1ZXMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldy5wcm90b3R5cGUuX2NyZWF0ZURhdGFHcmlkTm9kZUZvclJlY29yZCk6IENyZWF0ZSBhIFNjcmlwdFRpbWVsaW5lRGF0YUdyaWROb2RlLgoKMjAxMi0wMi0yNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFBvcHVsYXRlIHRoZSBMYXlvdXQgJiBSZW5kZXJpbmcgZGF0YSBncmlkIGluIHRpbWVsaW5lIGNvbnRlbnQgdmlldy4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTcxPiBJbXBsZW1lbnQgdGhlIFJlbmRlcmluZyBpbnN0cnVtZW50IGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6IFVwZGF0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xheW91dFRpbWVsaW5lRGF0YUdyaWROb2RlLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkxheW91dFRpbWVsaW5lRGF0YUdyaWROb2RlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheW91dFRpbWVsaW5lRGF0YUdyaWROb2RlLnByb3RvdHlwZS5nZXQgcmVjb3JkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheW91dFRpbWVsaW5lRGF0YUdyaWROb2RlLnByb3RvdHlwZS5nZXQgZGF0YSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXlvdXRUaW1lbGluZURhdGFHcmlkTm9kZS5wcm90b3R5cGUuY3JlYXRlQ2VsbENvbnRlbnQpOgogICAgICAgICogVXNlckludGVyZmFjZS9MYXlvdXRUaW1lbGluZVJlY29yZC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXlvdXRUaW1lbGluZVJlY29yZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXlvdXRUaW1lbGluZVJlY29yZC5FdmVudFR5cGUuZGlzcGxheU5hbWUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5b3V0VGltZWxpbmVSZWNvcmQucHJvdG90eXBlLmdldCBldmVudFR5cGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTGF5b3V0VGltZWxpbmVSZWNvcmQucHJvdG90eXBlLmdldCB4KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheW91dFRpbWVsaW5lUmVjb3JkLnByb3RvdHlwZS5nZXQgeSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5MYXlvdXRUaW1lbGluZVJlY29yZC5wcm90b3R5cGUuZ2V0IHdpZHRoKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheW91dFRpbWVsaW5lUmVjb3JkLnByb3RvdHlwZS5nZXQgaGVpZ2h0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxheW91dFRpbWVsaW5lUmVjb3JkLnByb3RvdHlwZS5nZXQgYXJlYSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZWQgTGF5b3V0VGltZWxpbmVSZWNvcmQuanMgYW5kIExheW91dFRpbWVsaW5lRGF0YUdyaWROb2RlLmpzLgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlLmV2ZW50UmVjb3JkZWQucHJvY2Vzc1JlY29yZCk6IENyZWF0ZSByZWNvcmQgb2JqZWN0cyBmb3IgZWFjaCB0eXBlLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLnByb3RvdHlwZS5ldmVudFJlY29yZGVkKTogSXRlcmF0ZSBvdmVyIHRoZSByZWNvcmRzLgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZXNDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3KTogQ3JlYXRlIGNvbHVtbnMgZm9yIHRoZSBMYXlvdXQgZGF0YSBncmlkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcucHJvdG90eXBlLl9jcmVhdGVEYXRhR3JpZE5vZGVGb3JSZWNvcmQpOiBDcmVhdGUgYSBMYXlvdXRUaW1lbGluZURhdGFHcmlkTm9kZS4KCjIwMTItMDItMjIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGp1c3QgdGhlIG91dHB1dCBvZiBOdW1iZXIuc2Vjb25kc1RvU3RyaW5nIHRvIGdpdmUgaGlnaGVyIHJlc29sdXRpb24gZm9yIDwgMTAwbXMuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxOTU1Mz4gSW1wbGVtZW50IHRoZSBOZXR3b3JrIGluc3RydW1lbnQgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczogVXBkYXRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVXRpbGl0aWVzLmpzOgogICAgICAgIChOdW1iZXIuc2Vjb25kc1RvU3RyaW5nKTogU2hvdyBtb3JlIGRlY2ltYWwgcG9pbnRzIGZvciA8IDEwMG1zLiBSZWR1Y2UgdGhlIG51bWJlciBvZgogICAgICAgIGRlY2ltYWwgcG9pbnRzIGluIGhpZ2hlciByZXNvbHV0aW9uIG1vZGUgYXMgd2VsbC4KCjIwMTItMDItMjIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBTdXBwb3J0IHNvcnRpbmcgdGhlIGRhdGEgZ3JpZHMgaW4gdGhlIHRpbWVsaW5lIHZpZXcuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxOTU1MyYxMDMxOTU2NyYxMDMxOTU3MT4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YUdyaWQuY3NzOgogICAgICAgICguZGF0YS1ncmlkIHRoLnNvcnQtZGVzY2VuZGluZyA+IGRpdik6IEFkZCBzb21lIHBhZGRpbmcgc28gdGhlIHNvcnQgZGlyZWN0aW9uIGFycm93IGRvZXMgbm90IG92ZXJsYXAgdGhlIHRleHQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UpOiBJbml0aWFsaXplIF9jYWNoZWQgc28gaXQgY2FuIHNvcnQgcHJvcGVybHkuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lc0NvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcpOiBBZGQgZXZlbnQgbGlzdGVuZXJzIGZvciBzb3J0aW5nIGNoYW5nZXMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldy5wcm90b3R5cGUuX3VwZGF0ZVBlbmRpbmdSZWNvcmRzKTogQ2FsbCBfc29ydEN1cnJlbnREYXRhR3JpZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fc29ydEN1cnJlbnREYXRhR3JpZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcucHJvdG90eXBlLl9zb3J0Q3VycmVudERhdGFHcmlkLmNvbXBhcmF0b3IpOiBBZGRlZC4KCjIwMTItMDItMjIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBTZXBhcmF0ZSBkYXRhIGZyb20gcHJlc2VudGF0aW9uIGluIFJlc291cmNlVGltZWxpbmVEYXRhR3JpZE5vZGUgdG8gbWFrZSBpdCBlYXN5IHRvIHNvcnQgdXNpbmcgdGhlIHJhdyBkYXRhLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTk1NTM+IEltcGxlbWVudCB0aGUgTmV0d29yayBpbnN0cnVtZW50IGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFHcmlkLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YUdyaWROb2RlLnByb3RvdHlwZS5jcmVhdGVDZWxsKTogTWFrZSBhIHRleHQgbm9kZSBpZiB0aGUgY29udGVudCBpc24ndCBhIE5vZGUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUucHJvdG90eXBlLmNyZWF0ZUNlbGxDb250ZW50KTogUmV0dXJuIHJhdyBkYXRhLiBUaGUgdGV4dCBub2RlIGlzIG1hZGUgYnkgdGhlIGNhbGxlci4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VUaW1lbGluZURhdGFHcmlkTm9kZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVGltZWxpbmVEYXRhR3JpZE5vZGUucHJvdG90eXBlLmdldCBkYXRhKTogUmV0dXJuIHRoZSByYXcgZGF0YSBpbnN0ZWFkIG9mIGZvcm1hdHRlZCBkYXRhLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VUaW1lbGluZURhdGFHcmlkTm9kZS5wcm90b3R5cGUuY3JlYXRlQ2VsbENvbnRlbnQpOiBGb3JtYXQgdGhlIGRhdGEgYmFzZWQgb24gdGhlIGNvbHVtbi4KCjIwMTItMDItMjIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBDYXVzZSBuZXR3b3JrIHJlY29yZHMgdG8gdXBkYXRlIGluIGJhdGNoZXMgd2l0aCBhbnkgbmV3IHJlY29yZHMgYmVpbmcgYWRkZWQgdG8gcmVkdWNlIGZsYXNoaW5nLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTk1NTM+IEltcGxlbWVudCB0aGUgTmV0d29yayBpbnN0cnVtZW50IGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlVGltZWxpbmVEYXRhR3JpZE5vZGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRpbWVsaW5lRGF0YUdyaWROb2RlKTogVXBkYXRlIGV2ZW50IGxpc3RlbmVycyB0byBjYWxsIF9uZWVkc1JlZnJlc2guCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRpbWVsaW5lRGF0YUdyaWROb2RlLnByb3RvdHlwZS5nZXQgcmVjb3JkKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRpbWVsaW5lRGF0YUdyaWROb2RlLnByb3RvdHlwZS5yZWZyZXNoKTogUmVtb3ZlIHRpbWVvdXQgY2hlY2suCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRpbWVsaW5lRGF0YUdyaWROb2RlLnByb3RvdHlwZS5fbmVlZHNSZWZyZXNoKTogUmVuYW1lZCBmcm9tIF9yZWZyZXNoU29vbi4gRmlyZQogICAgICAgIE5lZWRzUmVmcmVzaCBldmVudC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVzQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldyk6IEFkZCBldmVudCBsaXN0ZW5lciBmb3IgTmVlZHNSZWZyZXNoLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcucHJvdG90eXBlLnNob3dUaW1lbGluZUZvclJlY29yZFR5cGUpOiBDYWxsIF91cGRhdGVQZW5kaW5nUmVjb3Jkcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5zaG93bik6IENhbGwgX3VwZGF0ZVBlbmRpbmdSZWNvcmRzLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcucHJvdG90eXBlLl9hZGRSZWNvcmRUb0RhdGFHcmlkKTogQ2FsbCBfdXBkYXRlUGVuZGluZ1JlY29yZHNTb29uLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcucHJvdG90eXBlLl91cGRhdGVQZW5kaW5nUmVjb3Jkc1Nvb24pOiBSZW5hbWVkIGZyb20gX2FkZFBlbmRpbmdSZWNvcmRzU29vbi4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fdXBkYXRlUGVuZGluZ1JlY29yZHMpOiBSZW5hbWVkIGZyb20gX2FkZFBlbmRpbmdSZWNvcmRzLiBBbHNvCiAgICAgICAgcmVmcmVzaCBwZW5kaW5nIGdyaWQgbm9kZXMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldy5wcm90b3R5cGUuX3NjaGVkdWxlR3JpZE5vZGVGb3JSZWZyZXNoKTogQWRkZWQuIFN0b3JlIHRoZSBncmlkIG5vZGUgYW5kCiAgICAgICAgY2FsbCBfdXBkYXRlUGVuZGluZ1JlY29yZHNTb29uLgoKMjAxMi0wMi0yMiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFByb3Blcmx5IHJlY29yZCBtYWluIHJlc291cmNlcyBmb3IgYWxsIGZyYW1lcyBpbiB0aGUgTmV0d29yayB0aW1lbGluZS4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTUzPiBJbXBsZW1lbnQgdGhlIE5ldHdvcmsgaW5zdHJ1bWVudCBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIpOiBDaGFuZ2UgTWFpbkZyYW1lRGlkQ2hhbmdlIGxpc3RlbmVyIHRvIF9tYWluUmVzb3VyY2VEaWRDaGFuZ2UuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlLl9zdGFydEF1dG9SZWNvcmRpbmcpOiBSZXR1cm4gdHJ1ZSBpZiByZWNvcmRpbmcgc3RhcnRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuX21haW5SZXNvdXJjZURpZENoYW5nZSk6IEFkZGVkLiBDYWxsIF9zdGFydEF1dG9SZWNvcmRpbmcsCiAgICAgICAgcmV0dXJuIGVhcmx5IGlmIHRydWUuIEFkZCB0aGUgbWFpbiByZXNvdXJjZSBhcyBhIHJlY29yZCBpZiBpdCBpc24ndCB0aGUgYXV0byByZWNvcmRpbmcgcmVzb3VyY2UuCgoyMDEyLTAyLTIyICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWx3YXlzIGNsZWFyIHJlY29yZHMgYW5kIHJlc3RhcnQgcmVjb3JkaW5nIHdoZW4gbmF2aWdhdGluZyB0byBhIG5ldyBwYWdlLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTk1NTMmMTAzMTk1NjcmMTAzMTk1NzE+CgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuc3RvcFJlY29yZGluZyk6IENsZWFyIF9hdXRvUmVjb3JkaW5nTWFpblJlc291cmNlUmVxdWVzdElkZW50aWZpZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlLl9zdGFydEF1dG9SZWNvcmRpbmcpOiBTZXQgX2F1dG9SZWNvcmRpbmdNYWluUmVzb3VyY2VSZXF1ZXN0SWRlbnRpZmllci4KICAgICAgICBEb24ndCByZXR1cm4gZWFybHkgaWYgX2F1dG9SZWNvcmRpbmdNYWluUmVzb3VyY2VSZXF1ZXN0SWRlbnRpZmllci4KCjIwMTItMDItMjIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBTaG93IHJlc291cmNlIGljb25zIGFuZCBmYWlsZWQgbG9hZHMgaW4gdGhlIE5ldHdvcmsgZGF0YSBncmlkLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTk1NTM+IEltcGxlbWVudCB0aGUgTmV0d29yayBpbnN0cnVtZW50IGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFHcmlkLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YUdyaWROb2RlLnByb3RvdHlwZS5jcmVhdGVDZWxsKTogQ2FsbCBjcmVhdGVDZWxsQ29udGVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZS5wcm90b3R5cGUuY3JlYXRlQ2VsbENvbnRlbnQpOiBBZGRlZC4gTWFrZSBhIHRleHQgbm9kZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VUaW1lbGluZURhdGFHcmlkTm9kZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVGltZWxpbmVEYXRhR3JpZE5vZGUucHJvdG90eXBlLmNyZWF0ZUNlbGxDb250ZW50KTogQWRkZWQuIENyZWF0ZSBhIGZyYWdtZW50CiAgICAgICAgZm9yIHRoZSBuYW1lIGNvbHVtbiB3aXRoIGFuIGljb24uIEFkZCB0aGUgZXJyb3IgY2xhc3MgdG8gYWxsIGNlbGxzIGZvciBmYWlsZWQgbG9hZHMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lc0NvbnRlbnRWaWV3LmNzczoKICAgICAgICAoLmNvbnRlbnQtdmlldy50aW1lbGluZXMgPiAuZGF0YS1ncmlkIC5uYW1lLWNvbHVtbiAuaWNvbik6IEFkZGVkLgogICAgICAgICguY29udGVudC12aWV3LnRpbWVsaW5lcyA+IC5kYXRhLWdyaWQgdGQuZXJyb3IpOiBBZGRlZC4gQ29sb3IgcmVkLgogICAgICAgICguY29udGVudC12aWV3LnRpbWVsaW5lcyA+IC5kYXRhLWdyaWQgdHIuc2VsZWN0ZWQgdGQuZXJyb3IpOiBBZGRlZC4gQ29sb3Igd2hpdGUuCgoyMDEyLTAyLTIxICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgU3RhcnQgcG9wdWxhdGluZyB0aGUgTmV0d29yayB0aW1lbGluZSBkYXRhIGdyaWQgd2l0aCByZXNvdXJjZSBsb2FkIGluZm9ybWF0aW9uLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTk1NTM+IEltcGxlbWVudCB0aGUgTmV0d29yayBpbnN0cnVtZW50IGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6IFVwZGF0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZWQgUmVzb3VyY2VUaW1lbGluZURhdGFHcmlkTm9kZS5qcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2UuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZSk6IEluaXRpYWxpemUgX3Jlc3BvbnNlSGVhZGVycyB0byBhdm9pZCBhbiBleGNlcHRpb24uCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUuZ2V0IHN0YXR1c0NvZGUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5nZXQgc3RhdHVzVGV4dCk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVRpbWVsaW5lRGF0YUdyaWROb2RlLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVGltZWxpbmVEYXRhR3JpZE5vZGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VUaW1lbGluZURhdGFHcmlkTm9kZS5wcm90b3R5cGUuZ2V0IGRhdGEpOgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVRpbWVsaW5lUmVjb3JkLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VUaW1lbGluZVJlY29yZCk6IEFkZCBldmVudCBsaXN0ZW5lciBmb3IgVGltZXN0YW1wc0RpZENoYW5nZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVGltZWxpbmVSZWNvcmQucHJvdG90eXBlLl9kaXNwYXRjaFVwZGF0ZWRFdmVudCk6IEFkZGVkLiBGaXJlIFVwZGF0ZWQgZXZlbnQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lc0NvbnRlbnRWaWV3LmNzczoKICAgICAgICAoLmNvbnRlbnQtdmlldy50aW1lbGluZXMgPiAuZGF0YS1ncmlkIHRkOmxhc3QtY2hpbGQpOgogICAgICAgICguY29udGVudC12aWV3LnRpbWVsaW5lcyA+IC5kYXRhLWdyaWQgdGQpOgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZXNDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3KTogQ3JlYXRlIHRoZSBOZXR3b3JrIGRhdGEgZ3JpZCBoZWFkZXJzIGFuZCBwb3B1bGF0ZSBfcGVuZGluZ1JlY29yZHMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldy5wcm90b3R5cGUuc2hvd1RpbWVsaW5lRm9yUmVjb3JkVHlwZSk6IENhbGwgdXBkYXRlV2lkdGhzCiAgICAgICAgYW5kIF9hZGRQZW5kaW5nUmVjb3Jkcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS51cGRhdGVMYXlvdXQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5zaG93bik6IENhbGwgX2FkZFBlbmRpbmdSZWNvcmRzLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcucHJvdG90eXBlLl9yZWNvcmRpbmdTdGFydGVkKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldy5wcm90b3R5cGUuX3JlY29yZEFkZGVkKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldy5wcm90b3R5cGUuX2FkZFJlY29yZFRvRGF0YUdyaWQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fYWRkUGVuZGluZ1JlY29yZHNTb29uKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldy5wcm90b3R5cGUuX2FkZFBlbmRpbmdSZWNvcmRzKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldy5wcm90b3R5cGUuX2NyZWF0ZURhdGFHcmlkTm9kZUZvclJlY29yZCk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9VdGlsaXRpZXMuanM6CiAgICAgICAgKE51bWJlci5zZWNvbmRzVG9TdHJpbmcpOiBBZGRlZC4gQ29waWVkIGZyb20gb3BlbiBzb3VyY2UuCgoyMDEyLTAyLTIxICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSBzaG93aW5nIGEgdGltZWxpbmUgc3dpdGNoIHRvIGEgZGlmZmVyZW50IGRhdGEgZ3JpZCBhbmQgcmVmbGVjdCB0aGUgc2VsZWN0ZWQgdGltZWxpbmUKICAgICAgICBpbiB0aGUgc2lkZWJhciBhbmQgdGhlIG5hdmlnYXRpb24gYmFyLgoKICAgICAgICBBbHNvIG1ha2UgdGhlIHRpbWVsaW5lIHNob3cgd2hlbiByZW9wZW5pbmcgdGhlIGluc3BlY3RvciB3aGVuIGl0IHdhcyBzaG93aW5nIGxhc3QgdGltZS4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTUzJjEwMzE5NTY3JjEwMzE5NTcxPgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9JbnN0cnVtZW50U2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zdHJ1bWVudFNpZGViYXJQYW5lbCk6IERvbid0IHN0b3JlIHRoZSB0cmVlIGVsZW1lbnRzIG9uIHRoaXMuIENyZWF0ZSBhIG1hcCBvZiB0cmVlIGVsZW1lbnRzCiAgICAgICAgYmFzZWQgb24gdGhlIHRoZSByZWNvcmQgdHlwZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkluc3RydW1lbnRTaWRlYmFyUGFuZWwucHJvdG90eXBlLnNob3dUaW1lbGluZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5wcm90b3R5cGUuc2hvd1RpbWVsaW5lRm9yUmVjb3JkVHlwZSk6IEFkZGVkLiBTZWxlY3QgdGhlIHRyZWUgZWxlbWVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkluc3RydW1lbnRTaWRlYmFyUGFuZWwucHJvdG90eXBlLmNvb2tpZUZvckNvbnRlbnRWaWV3KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5JbnN0cnVtZW50U2lkZWJhclBhbmVsLnByb3RvdHlwZS5zaG93Q29udGVudFZpZXdGb3JDb29raWUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkluc3RydW1lbnRTaWRlYmFyUGFuZWwucHJvdG90eXBlLl90aW1lbGluZXNUcmVlRWxlbWVudFNlbGVjdGVkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVzQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldy5jcmVhdGVQYXRoQ29tcG9uZW50KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldyk6IENyZWF0ZSB0aGUgcGF0aCBjb21wb25lbnRzIGFuZCB0ZXN0IGRhdGEgZ3JpZHMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldy5wcm90b3R5cGUuc2hvd1RpbWVsaW5lRm9yUmVjb3JkVHlwZSk6IEFkZGVkLiBTaG93IHRoZSBkYXRhIGdyaWQuIFVwZGF0ZQogICAgICAgIHRoZSBwYXRoIGNvbXBvbmVudC4gVGVsbCB0aGUgc2lkZWJhciBwYW5lbCB0byBzZWxlY3QgdGhlIHJpZ2h0IHRyZWUgZWxlbWVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgc2VsZWN0aW9uUGF0aENvbXBvbmVudHMpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lc0NvbnRlbnRWaWV3LnByb3RvdHlwZS5zaG93bik6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcucHJvdG90eXBlLl9wYXRoQ29tcG9uZW50U2VsZWN0ZWQpOiBBZGRlZC4KCjIwMTItMDItMjEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgV2ViSW5zcGVjdG9yLlRpbWVsaW5lUmVjb3JkIGFuZCBXZWJJbnNwZWN0b3IuUmVzb3VyY2VUaW1lbGluZVJlY29yZC4gU3RhcnQgcmVjb3JkaW5nIE5ldHdvcmsgcmVjb3JkcyBvbiBsb2FkLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTk1NTMmMTAzMTk1NjcmMTAzMTk1NzE+CgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VUaW1lbGluZVJlY29yZC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRpbWVsaW5lUmVjb3JkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVGltZWxpbmVSZWNvcmQucHJvdG90eXBlLmdldCByZXNvdXJjZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRpbWVsaW5lUmVjb3JkLnByb3RvdHlwZS5nZXQgc3RhcnRUaW1lKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVGltZWxpbmVSZWNvcmQucHJvdG90eXBlLmdldCBlbmRUaW1lKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVGltZWxpbmVSZWNvcmQucHJvdG90eXBlLmdldCB3YWl0aW5nRHVyYXRpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VUaW1lbGluZVJlY29yZC5wcm90b3R5cGUuZ2V0IGFjdGl2ZUR1cmF0aW9uKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyKTogTGlzdGVuIGZvciBGcmFtZSBldmVudHMuIEluaXRpYWxpemUgcHJvcGVydGllcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuZ2V0IHJlY29yZGluZyk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLnByb3RvdHlwZS5nZXQgcmVjb3Jkcyk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLnByb3RvdHlwZS5nZXQgcmVjb3Jkc1dpdGhUeXBlKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlLnN0YXJ0UmVjb3JkaW5nKTogQ2xlYXIgcmVjb3Jkcy4gRGlzcGF0Y2ggUmVjb3JkaW5nU3RhcnRlZCBldmVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuc3RvcFJlY29yZGluZyk6IENsZWFyIHRpbWVvdXQuIERpc3BhdGNoIFJlY29yZGluZ1N0b3BwZWQgZXZlbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlLl9hZGRSZWNvcmQpOiBBZGRlZC4gQWRkcyByZWNvcmQgYW5kIGRpc3BhdGNoZXMgUmVjb3JkQWRkZWQgZXZlbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlLl9zdGFydEF1dG9SZWNvcmRpbmcpOiBBZGRlZC4gU3RhcnQgcmVjb3JkaW5nIGFuZCAKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuX3Jlc291cmNlV2FzQWRkZWQpOiBBZGRlZC4gQ3JlYXRlIGEgcmVjb3JkLgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZVJlY29yZC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZVJlY29yZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZVJlY29yZC5wcm90b3R5cGUuZ2V0IHN0YXJ0VGltZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZVJlY29yZC5wcm90b3R5cGUuZ2V0IGVuZFRpbWUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVSZWNvcmQucHJvdG90eXBlLmdldCBkdXJhdGlvbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZVJlY29yZC5wcm90b3R5cGUuZ2V0IHdhaXRpbmdEdXJhdGlvbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZVJlY29yZC5wcm90b3R5cGUuZ2V0IGFjdGl2ZUR1cmF0aW9uKToKCjIwMTItMDItMjAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgV2ViSW5zcGVjdG9yLlRpbWVsaW5lT2JzZXJ2ZXIgYW5kIFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxOTU1MyYxMDMxOTU2NyYxMDMxOTU3MT4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlZCBUaW1lbGluZU1hbmFnZXIuanMgYW5kIFRpbWVsaW5lT2JzZXJ2ZXIuanMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6IENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBUaW1lbGluZU1hbmFnZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGltZWxpbmVNYW5hZ2VyLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlLnN0YXJ0UmVjb3JkaW5nKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUuc3RvcFJlY29yZGluZyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlLmV2ZW50UmVjb3JkZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZU9ic2VydmVyLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lT2JzZXJ2ZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVPYnNlcnZlci5wcm90b3R5cGUuZXZlbnRSZWNvcmRlZCk6IENhbGwgVGltZWxpbmVNYW5hZ2VyLgoKMjAxMi0wMi0yMCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIENoYW5nZSB0aGUgbmFtZXMgZm9yIHRoZSBJbnN0cnVtZW50IHRpbWVsaW5lcyBiYXNlZCBvbiBmZWVkYmFjayBmcm9tIEFkYW0uCgogICAgICAgIE5vdzogIk5ldHdvcmsgUmVxdWVzdHMiLCAiTGF5b3V0ICYgUmVuZGVyaW5nIiBhbmQgIkphdmFTY3JpcHQgJiBFdmVudHMiLgoKICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczogVXBkYXRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkluc3RydW1lbnRTaWRlYmFyUGFuZWwpOiBVcGRhdGUgdGhlIHRyZWUgZWxlbWVudCB0aXRsZXMuCgoyMDEyLTAyLTE5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUmVjb3JkIG5ldHdvcmsgdGltZXN0YW1wcyBvbiBXZWJJbnNwZWN0b3IuUmVzb3VyY2UgYWxvbmcgd2l0aCBIVFRQIHJlc3BvbnNlIHN0YXR1cyBhbmQgc2l6ZXMuCgogICAgICAgIE5lZWRlZCBmb3I6IDxyZGFyOi8vcHJvYmxlbS8xMDMxOTU1Mz4gSW1wbGVtZW50IHRoZSBOZXR3b3JrIGluc3RydW1lbnQgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWVSZXNvdXJjZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUucmVzb3VyY2VSZXF1ZXN0V2lsbEJlU2VudCk6IEFkZGVkIHRpbWVzdGFtcCBwYXJhbWV0ZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUubWFya1Jlc291cmNlUmVxdWVzdEFzU2VydmVkRnJvbU1lbW9yeUNhY2hlKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUucmVzb3VyY2VSZXF1ZXN0V2FzU2VydmVkRnJvbU1lbW9yeUNhY2hlKTogQWRkZWQgdGltZXN0YW1wIHBhcmFtZXRlci4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5yZXNvdXJjZVJlcXVlc3REaWRSZWNlaXZlUmVzcG9uc2UpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5yZXNvdXJjZVJlcXVlc3REaWRSZWNlaXZlRGF0YSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLnJlc291cmNlUmVxdWVzdERpZEZpbmlzaExvYWRpbmcpOiBBZGRlZCB0aW1lc3RhbXAgcGFyYW1ldGVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLnJlc291cmNlUmVxdWVzdERpZEZhaWxMb2FkaW5nKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUuX2FkZE5ld1Jlc291cmNlVG9GcmFtZSk6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9OZXR3b3JrT2JzZXJ2ZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrT2JzZXJ2ZXIucHJvdG90eXBlLnJlcXVlc3RXaWxsQmVTZW50KTogUGFzcyBhbG9uZyB0aW1lc3RhbXAuCiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrT2JzZXJ2ZXIucHJvdG90eXBlLnJlcXVlc3RTZXJ2ZWRGcm9tQ2FjaGUpOiBDYWxsIG1hcmtSZXNvdXJjZVJlcXVlc3RBc1NlcnZlZEZyb21NZW1vcnlDYWNoZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLk5ldHdvcmtPYnNlcnZlci5wcm90b3R5cGUucmVzcG9uc2VSZWNlaXZlZCk6IFBhc3MgYWxvbmcgdGltZXN0YW1wLgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya09ic2VydmVyLnByb3RvdHlwZS5kYXRhUmVjZWl2ZWQpOiBDYWxsIHJlc291cmNlUmVxdWVzdERpZFJlY2VpdmVEYXRhLgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya09ic2VydmVyLnByb3RvdHlwZS5sb2FkaW5nRmluaXNoZWQpOiBQYXNzIGFsb25nIHRpbWVzdGFtcC4KICAgICAgICAoV2ViSW5zcGVjdG9yLk5ldHdvcmtPYnNlcnZlci5wcm90b3R5cGUubG9hZGluZ0ZhaWxlZCk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya09ic2VydmVyLnByb3RvdHlwZS5yZXF1ZXN0U2VydmVkRnJvbU1lbW9yeUNhY2hlKTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UpOiBBZGRlZCB0aW1lc3RhbXAgcGFyYW1ldGVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLmdldCByZXF1ZXN0U2VudFRpbWVzdGFtcCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLmdldCBsYXN0UmVkaXJlY3RSZWNlaXZlZFRpbWVzdGFtcCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLmdldCByZXNwb25zZVJlY2VpdmVkVGltZXN0YW1wKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUuZ2V0IGxhc3REYXRhUmVjZWl2ZWRUaW1lc3RhbXApOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5nZXQgZmluaXNoZWRPckZhaWxlZFRpbWVzdGFtcCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLmdldCBkdXJhdGlvbik6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLmdldCBsYXRlbmN5KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUuZ2V0IHJlY2VpdmVEdXJhdGlvbik6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLmdldCBjYWNoZWQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5nZXQgc2l6ZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLmdldCB0cmFuc2ZlclNpemUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS51cGRhdGVGb3JSZWRpcmVjdFJlc3BvbnNlKTogQWRkZWQgdGltZXN0YW1wIHBhcmFtZXRlci4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS51cGRhdGVGb3JSZXNwb25zZSk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLmluY3JlYXNlU2l6ZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLmluY3JlYXNlVHJhbnNmZXJTaXplKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUubWFya0FzQ2FjaGVkKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUubWFya0FzRmluaXNoZWQpOiBBZGRlZCB0aW1lc3RhbXAgcGFyYW1ldGVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLm1hcmtBc0ZhaWxlZCk6IERpdHRvLgoKMjAxMi0wMi0xOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFNob3cgZW1wdHkgY29udGVudCBtZXNzYWdlcyBmb3Igbm8gc2VhcmNoIHJlc3VsdHMsIG5vIHJlY29yZGVkIHByb2ZpbGVzIGFuZCBubyBzdG9yYWdlLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiBVcGRhdGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbnN0cnVtZW50U2lkZWJhclBhbmVsLmNzczoKICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuaW5zdHJ1bWVudCA+IC5lbXB0eS1jb250ZW50LXBsYWNlaG9sZGVyKTogUG9zaXRpb24gd2l0aCB0aGUgY29udGVudC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkluc3RydW1lbnRTaWRlYmFyUGFuZWwpOiBDYWxsIHVwZGF0ZUVtcHR5Q29udGVudFBsYWNlaG9sZGVyLgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLmNzczoKICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwubmF2aWdhdGlvbiA+IC5lbXB0eS1jb250ZW50LXBsYWNlaG9sZGVyKTogVXNlIGEgZmxleCBib3ggdG8gY2VudGVyIHRoZSBtZXNzYWdlLgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbC5wcm90b3R5cGUudXBkYXRlRW1wdHlDb250ZW50UGxhY2Vob2xkZXIpOiBBZGRlZC4gSGVscGVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2NoZWNrRm9yRW1wdHlGaWx0ZXJSZXN1bHRzKTogU2V0IGFuZCB1bnNldCBfZW1wdHlGaWx0ZXJSZXN1bHRzLgogICAgICAgICogVXNlckludGVyZmFjZS9TZWFyY2hTaWRlYmFyUGFuZWwuY3NzOgogICAgICAgICguc2lkZWJhciA+IC5wYW5lbC5zZWFyY2ggPiAuZW1wdHktY29udGVudC1wbGFjZWhvbGRlcik6IFBvc2l0aW9uIHdpdGggdGhlIGNvbnRlbnQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NlYXJjaFNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbC5wcm90b3R5cGUuY29uc3RydWN0b3IuV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbC5wZXJmb3JtU2VhcmNoLnVwZGF0ZUVtcHR5Q29udGVudFBsYWNlaG9sZGVyU29vbik6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoU2lkZWJhclBhbmVsLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuU2VhcmNoU2lkZWJhclBhbmVsLnBlcmZvcm1TZWFyY2gudXBkYXRlRW1wdHlDb250ZW50UGxhY2Vob2xkZXIpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbC5wcm90b3R5cGUuY29uc3RydWN0b3IuV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbC5wZXJmb3JtU2VhcmNoLnJlc291cmNlc0NhbGxiYWNrLnJlc291cmNlQ2FsbGJhY2spOiBDYWxsCiAgICAgICAgdXBkYXRlRW1wdHlDb250ZW50UGxhY2Vob2xkZXJTb29uIGJlZm9yZSBhbnkgcmV0dXJuLgogICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoU2lkZWJhclBhbmVsLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuU2VhcmNoU2lkZWJhclBhbmVsLnBlcmZvcm1TZWFyY2gucmVzb3VyY2VzQ2FsbGJhY2spOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbC5wcm90b3R5cGUuY29uc3RydWN0b3IuV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbC5wZXJmb3JtU2VhcmNoLmRvbUNhbGxiYWNrLmRvbVNlYXJjaFJlc3VsdHMpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbC5wcm90b3R5cGUuY29uc3RydWN0b3IuV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbC5wZXJmb3JtU2VhcmNoLmRvbUNhbGxiYWNrKTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N0b3JhZ2VTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdG9yYWdlU2lkZWJhclBhbmVsKTogQ2FsbCBfdXBkYXRlRW1wdHlDb250ZW50UGxhY2Vob2xkZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TdG9yYWdlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdXBkYXRlRW1wdHlDb250ZW50UGxhY2Vob2xkZXIpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9hZGRDaGlsZCk6IENhbGwgX3VwZGF0ZUVtcHR5Q29udGVudFBsYWNlaG9sZGVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3N0b3JhZ2VDbGVhcmVkKTogQ2FsbCBfdXBkYXRlRW1wdHlDb250ZW50UGxhY2Vob2xkZXIuCgoyMDEyLTAyLTE5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSBEYXRhR3JpZCBoYXZlIGEgY3VzdG9tIHN0eWxlIGluIHRoZSB0aW1lbGluZXMgY29udGVudCB2aWV3LgoKICAgICAgICBMYXJnZXIgaGVhZGVycyB3aXRoIG1hdGNoaW5nIGdyYWRpZW50IHRvIHRoZSBzaWRlYmFyIHBhbmVsLiBBbHNvIGxhcmdlciByb3dzIHdpdGggYSBncmV5IGFsdGVybmF0aW5nIHJvdyBjb2xvci4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTUzJjEwMzE5NTY3JjEwMzE5NTcxPgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lc0NvbnRlbnRWaWV3LmNzczogQWRkZWQuCiAgICAgICAgKC5jb250ZW50LXZpZXcudGltZWxpbmVzID4gLmRhdGEtZ3JpZCk6CiAgICAgICAgKC5jb250ZW50LXZpZXcudGltZWxpbmVzID4gLmRhdGEtZ3JpZCB0aCk6CiAgICAgICAgKC5jb250ZW50LXZpZXcudGltZWxpbmVzID4gLmRhdGEtZ3JpZCB0aDpub3QoOmxhc3QtY2hpbGQpKToKICAgICAgICAoLmNvbnRlbnQtdmlldy50aW1lbGluZXMgPiAuZGF0YS1ncmlkIHRoLnNvcnRhYmxlOmFjdGl2ZSk6CiAgICAgICAgKC5jb250ZW50LXZpZXcudGltZWxpbmVzID4gLmRhdGEtZ3JpZCB0aC5zb3J0LWRlc2NlbmRpbmcpOgogICAgICAgICguY29udGVudC12aWV3LnRpbWVsaW5lcyA+IC5kYXRhLWdyaWQgLmRhdGEtY29udGFpbmVyKToKICAgICAgICAoLmNvbnRlbnQtdmlldy50aW1lbGluZXMgPiAuZGF0YS1ncmlkIHRhYmxlLmRhdGEpOgogICAgICAgICguY29udGVudC12aWV3LnRpbWVsaW5lcyA+IC5kYXRhLWdyaWQgdGQpOgogICAgICAgICguY29udGVudC12aWV3LnRpbWVsaW5lcyA+IC5kYXRhLWdyaWQgdGQ6bm90KDpsYXN0LWNoaWxkKSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lc0NvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVzQ29udGVudFZpZXcpOiBDcmVhdGUgYSBkdW1teSBEYXRhR3JpZCBmb3IgcG9zaXRpb24gYW5kIHN0eWxlIHRlc3RpbmcuCgoyMDEyLTAyLTE5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIGFuIGVtcHR5IGNvbnRlbnQgdmlldyBmb3IgdGhlIEluc3RydW1lbnQgc2lkZWJhciB0aW1lbGluZXMuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxODcyOD4gSW1wbGVtZW50IHRoZSBJbnN0cnVtZW50IHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlldyk6IEFkZGVkIGNoZWNrIGZvciBUaW1lbGluZXNPYmplY3QuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlldy5pc1ZpZXdhYmxlKTogQWRkZWQgY2hlY2sgZm9yIFRpbWVsaW5lc09iamVjdC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1N0b3B3YXRjaC5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvU3RvcHdhdGNoQDJ4LnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3RydW1lbnRJY29ucy5jc3M6CiAgICAgICAgKC5zdG9wd2F0Y2gtaWNvbiAuaWNvbik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3RydW1lbnRTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5JbnN0cnVtZW50U2lkZWJhclBhbmVsKTogQ3JlYXRlIHRoZSBfdGltZWxpbmVzRWxlbWVudCBhbmQgYW4gaW5zdGFuY2Ugb2YgVGltZWxpbmVzT2JqZWN0LgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5wcm90b3R5cGUudHJlZUVsZW1lbnRGb3JSZXByZXNlbnRlZE9iamVjdCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3RpbWVsaW5lc1RyZWVFbGVtZW50U2VsZWN0ZWQpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlZCBUaW1lbGluZXNDb250ZW50Vmlldy5qcyBhbmQgVGltZWxpbmVzT2JqZWN0LmpzLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3Iuc2lkZWJhclBhbmVsRm9yUmVwcmVzZW50ZWRPYmplY3QpOiBBZGRlZCBjaGVjayBmb3IgVGltZWxpbmVzT2JqZWN0LgogICAgICAgICogVXNlckludGVyZmFjZS9UaW1lbGluZXNDb250ZW50Vmlldy5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNDb250ZW50Vmlldyk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RpbWVsaW5lc09iamVjdC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZXNPYmplY3QpOgoKMjAxMi0wMi0xOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFN0YXJ0IGltcGxlbWVudGluZyB0aGUgdXNlciBpbnRlcmZhY2UgZm9yIHRoZSBJbnN0cnVtZW50IHNpZGViYXIgcGFuZWwuCgogICAgICAgIFRoaXMgYWRkcyB0aGUgTG9hZGluZywgUmVuZGVyaW5nIGFuZCBTY3JpcHRpbmcgdHJlZSBlbGVtZW50cyB0byB0aGUgdG9wIG9mIHRoZSBzaWRlYmFyLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3Mjg+IEltcGxlbWVudCB0aGUgSW5zdHJ1bWVudCBzaWRlYmFyIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6IFVwZGF0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Db2xvcnMucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0NvbG9yc0AyeC5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29yay5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmV0d29ya0AyeC5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvU2NyaXB0LnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9TY3JpcHRAMngucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zdHJ1bWVudEljb25zLmNzczogQWRkZWQuCiAgICAgICAgKC5uZXR3b3JrLWljb24gLmljb24pOgogICAgICAgICguY29sb3JzLWljb24gLmljb24pOgogICAgICAgICguc2NyaXB0LWljb24gLmljb24pOgogICAgICAgICogVXNlckludGVyZmFjZS9JbnN0cnVtZW50U2lkZWJhclBhbmVsLmNzczogQWRkZWQuCiAgICAgICAgKC5zaWRlYmFyID4gLnBhbmVsLmluc3RydW1lbnQgPiAudGl0bGUtYmFyKToKICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuaW5zdHJ1bWVudCA+IC50aXRsZS1iYXIudGltZWxpbmVzKToKICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuaW5zdHJ1bWVudCA+IC5uYXZpZ2F0aW9uLXNpZGViYXItcGFuZWwtY29udGVudC10cmVlLW91dGxpbmUudGltZWxpbmVzKToKICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuaW5zdHJ1bWVudCA+IC5uYXZpZ2F0aW9uLXNpZGViYXItcGFuZWwtY29udGVudC10cmVlLW91dGxpbmUudGltZWxpbmVzIC5pdGVtOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCguc2VsZWN0ZWQpKToKICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuaW5zdHJ1bWVudCA+IC5uYXZpZ2F0aW9uLXNpZGViYXItcGFuZWwtY29udGVudC10cmVlLW91dGxpbmUudGltZWxpbmVzIC5pdGVtLnNlbGVjdGVkICsgLml0ZW0pOgogICAgICAgICguc2lkZWJhciA+IC5wYW5lbC5pbnN0cnVtZW50ID4gLnRpdGxlLWJhci5wcm9maWxlcyk6CiAgICAgICAgKC5zaWRlYmFyID4gLnBhbmVsLmluc3RydW1lbnQgPiAuY29udGVudCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3RydW1lbnRTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5JbnN0cnVtZW50U2lkZWJhclBhbmVsKTogQ3JlYXRlIHRoZSB0aXRsZSBhYnJzIGFuZCB0cmVlIG91dGxpbmUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZWQgSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5jc3MgYW5kIEluc3RydW1lbnRJY29ucy5jc3MuCgoyMDEyLTAyLTE4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGhpZGluZyB0aGUgZGlzY2xvc3VyZSB0cmlhbmdsZSBjb2x1bW4gZm9yIHNpZGViYXIgcGFuZWxzIHRoYXQgZG9uJ3QgaGF2ZSBhIGhpZXJhcmNoeS4KCiAgICAgICAgVGhlIG9ubHkgcGFuZWwgd2UgaGF2ZSBsaWtlIHRoaXMgcmlnaHQgbm93IGlzIExvZywgYnV0IEluc3RydW1lbnQgd2lsbCBhbHNvIHVzZSBpdC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nU2lkZWJhclBhbmVsKTogU2V0IEhpZGVEaXNjbG9zdXJlQnV0dG9uc1N0eWxlQ2xhc3NOYW1lIG9uIHRoZSBjb250ZW50VHJlZU91dGxpbmVFbGVtZW50LgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLmNzczoKICAgICAgICAoLm5hdmlnYXRpb24tc2lkZWJhci1wYW5lbC1jb250ZW50LXRyZWUtb3V0bGluZSAuaXRlbSk6IFJlbW92ZSBhIG1hcmdpbi10b3AgdGhhdCB3YXMgcHVzaGluZyBhbGwgaXRlbXMgZG93bgogICAgICAgIGZvciBubyBnb29kIHJlYXNvbi4KICAgICAgICAoLm5hdmlnYXRpb24tc2lkZWJhci1wYW5lbC1jb250ZW50LXRyZWUtb3V0bGluZS5oaWRlLWRpc2Nsb3N1cmUtYnV0dG9ucyA+IC5jaGlsZHJlbik6IEFkZGVkLgogICAgICAgICgubmF2aWdhdGlvbi1zaWRlYmFyLXBhbmVsLWNvbnRlbnQtdHJlZS1vdXRsaW5lID4gLmNoaWxkcmVuLmhpZGUtZGlzY2xvc3VyZS1idXR0b25zID4gLmNoaWxkcmVuKTogQWRkZWQuCiAgICAgICAgKC5uYXZpZ2F0aW9uLXNpZGViYXItcGFuZWwtY29udGVudC10cmVlLW91dGxpbmU6bm90KC5oaWRlLWRpc2Nsb3N1cmUtYnV0dG9ucykgLml0ZW06bm90KC5wYXJlbnQpIC5pY29uKTogQWRkZWQuCiAgICAgICAgKC5uYXZpZ2F0aW9uLXNpZGViYXItcGFuZWwtY29udGVudC10cmVlLW91dGxpbmUuaGlkZS1kaXNjbG9zdXJlLWJ1dHRvbnMgLml0ZW0gLmRpc2Nsb3N1cmUtYnV0dG9uKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05hdmlnYXRpb25TaWRlYmFyUGFuZWwuanM6CgoyMDEyLTAyLTE4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIFdlYkluc3BlY3Rvci5JbnN0cnVtZW50U2lkZWJhclBhbmVsLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3Mjg+IEltcGxlbWVudCB0aGUgSW5zdHJ1bWVudCBzaWRlYmFyIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3RydW1lbnRTaWRlYmFyUGFuZWwuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zdHJ1bWVudFNpZGViYXJQYW5lbCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZWQgSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5qcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgSW5zdHJ1bWVudFNpZGViYXJQYW5lbC4KCjIwMTItMDItMjAgIEplZmYgTWlsbGVyICA8amVmZm1AYXBwbGUuY29tPgoKICAgICAgICBJZ25vcmUgZmlsZXMgZ2VuZXJhdGVkIGJ5IFhjb2RlIGluc2lkZSBXZWJJbnNwZWN0b3JVSS54Y29kZXByb2ouCgogICAgICAgICogV2ViSW5zcGVjdG9yVUkueGNvZGVwcm9qOiBBZGRlZCBwcm9wZXJ0eSBzdm46aWdub3JlLgoKMjAxMi0wMi0xNyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEZpeCBhIGNvdXBsZSBvZiBpc3N1ZXMgd2hlcmUgc2V0dGluZ3Mgd2VyZSBub3QgYmVpbmcgcmV0cmlldmVkIG9yIHN0b3JlZC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9obiBTdWxsaXZhbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NldHRpbmcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TZXR0aW5nLnByb3RvdHlwZS5nZXQgdmFsdWUpOiBNYWtlIGEgY29weSBvZiB0aGUgZGVmYXVsdCB2YWx1ZSBzbyBjaGFuZ2VzIHRvIG9iamVjdCB2YWx1ZXMgZG9uJ3QgbW9kaWZ5IHRoZSBkZWZhdWx0IHZhbHVlLgogICAgICAgIFN3aXRjaCBhIHVzZSBvZiBfbmFtZSB0byBfbG9jYWxTdG9yYWdlS2V5IHdoZW4gY2hlY2tpbmcgaWYgdGhlIGtleSBpbiBpbiBsb2NhbFN0b3JhZ2UuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TZXR0aW5nLnByb3RvdHlwZS5zZXQgdmFsdWUpOiBVc2UgT2JqZWN0LnNoYWxsb3dFcXVhbCB0byBiZXR0ZXIgY2hlY2sgaWYgb2JqZWN0cyBhcmUgZXF1YWwuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1V0aWxpdGllcy5qczoKICAgICAgICAoT2JqZWN0LmRlZmluZVByb3BlcnR5KTogUmV0dXJuIGVhcmx5IGlmIGEgb3IgYiBhcmUgbnVsbC4gbnVsbCBpcyBhbiBvYmplY3QsIGJ1dCBPYmplY3Qua2V5cyB0aHJvd3MgZm9yIG51bGwuCgoyMDEyLTAyLTE3ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IGFuIGV4Y2VwdGlvbiB3aGVuIHVzaW5nIHRoZSBXZWIgSW5zcGVjdG9yIHdpdGggZW1wdHkgc2V0dGluZ3MuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVDb250ZW50Vmlldy5wcm90b3R5cGUuX3Jvb3RET01Ob2RlQXZhaWxhYmxlKTogTnVsbCBjaGVjayB0aGlzLl9sYXN0U2VsZWN0ZWROb2RlUGF0aFNldHRpbmcudmFsdWUKICAgICAgICBhbmQgdGhpcy5fbGFzdFNlbGVjdGVkTm9kZVBhdGhTZXR0aW5nLnZhbHVlLnBhdGguCgoyMDEyLTAyLTE3ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUHJlZml4IHRoZSBzZXR0aW5nIGtleXMgaW4gbG9jYWxTdG9yYWdlIHdpdGggImNvbS5hcHBsZS5XZWJJbnNwZWN0b3IiLgoKICAgICAgICBUaGUgV2ViIEluc3BlY3RvciBpcyBsb2FkZWQgZnJvbSBhIGZpbGUgdXJsIGl0IHNoYXJlIGxvY2FsU3RvcmFnZSB3aXRoIG90aGVyIGxvY2FsIGZpbGVzLgogICAgICAgIFRoaXMgcHJldmVudHMgY29uZmxpY3Rpbmcgd2l0aCBhbm90aGVyIGtleS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2V0dGluZy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNldHRpbmcpOiBTZXQgX2xvY2FsU3RvcmFnZUtleS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNldHRpbmcucHJvdG90eXBlLmdldCB2YWx1ZSk6IFVzZSBfbG9jYWxTdG9yYWdlS2V5LgogICAgICAgIChXZWJJbnNwZWN0b3IuU2V0dGluZy5wcm90b3R5cGUuc2V0IHZhbHVlKTogRGl0dG8uCgoyMDEyLTAyLTE3ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQ2FjaGUgc2V0dGluZyB2YWx1ZXMgbG9jYWxseSB0byBhdm9pZCBKU09OIGFuZCBsb2NhbFN0b3JhZ2Ugd2hlbiB0aGUgdmFsdWUgZG9lc24ndCBjaGFuZ2Ugb2Z0ZW4uCiAgICAgICAgVGhpcyBtaW1pY3MgcjEwNzk1MyBmcm9tIG9wZW4gc291cmNlIHdpdGggc29tZSBzdHlsZSBjbGVhbnVwLgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9TZXR0aW5nLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2V0dGluZy5wcm90b3R5cGUuZ2V0IHZhbHVlKTogUmV0dXJuIHRoaXMuX3ZhbHVlIGlmIGl0IGV4aXN0cy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNldHRpbmcucHJvdG90eXBlLnNldCB2YWx1ZSk6IFNldCBfdmFsdWUuCgoyMDEyLTAyLTE2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRG9uJ3Qgc3RvcmUgc2V0dGluZ3MgaW4gbG9jYWxTdG9yYWdlIHdpdGggdmFsdWVzIGVxdWFsIHRvIHRoZSBkZWZhdWx0IHZhbHVlLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTA4NTQwNDI+IFJlbWVtYmVyIGFzcGVjdHMgb2YgdGhlIHVzZXIgaW50ZXJmYWNlIGN1c3RvbWl6YXRpb24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQWRhIENoYW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9TZXR0aW5nLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2V0dGluZy5wcm90b3R5cGUuc2V0IHZhbHVlKTogQ2FsbCByZW1vdmVJdGVtIGlmIHRoZSB2YWx1ZSBlcXVhbHMgdGhlIGRlZmF1bHQgdmFsdWUuCgoyMDEyLTAyLTE3ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUmVtZW1iZXIgdGhlIGxhc3Qgc2VsZWN0ZWQgRE9NIG5vZGUgYmV0d2VlbiByZWxvYWRzIGFuZCBJbnNwZWN0b3Igc2Vzc2lvbnMuCgogICAgICAgIExhc3QgcGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwODU0MDQyPiBSZW1lbWJlciBhc3BlY3RzIG9mIHRoZSB1c2VyIGludGVyZmFjZSBjdXN0b21pemF0aW9uCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVDb250ZW50Vmlldyk6IENyZWF0ZSB0aGUgc2V0dGluZy4gVXNlIF9yZXF1ZXN0Um9vdERPTU5vZGUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlQ29udGVudFZpZXcucHJvdG90eXBlLl9yb290RE9NTm9kZUF2YWlsYWJsZSk6IFRyeSB0byBzZWxlY3QgdGhlIGxhc3QgRE9NIG5vZGUKICAgICAgICBpZiB0aGUgVVJMIG1hdGNoZXMsIG90aGVyd2lzZSBqdXN0IHNlbGVjdCB0aGUgYm9keSBvciBkb2N1bWVudCBlbGVtZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fcm9vdERPTU5vZGVBdmFpbGFibGUuc2VsZWN0Tm9kZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fcm9vdERPTU5vZGVBdmFpbGFibGUuc2VsZWN0TGFzdFNlbGVjdGVkTm9kZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fcm9vdERPTU5vZGVJbnZhbGlkYXRlZCk6IERvbid0IHNldCByb290RE9NTm9kZSB0byBudWxsLgogICAgICAgIFRoaXMgbWluaW1pemVzIERPTSB0cmVlIGNodXJuIGFuZCBiZXR0ZXIgbWF0Y2hlcyB3aGF0IHRoZSBvcGVuIHNvdXJjZSBpbnNwZWN0b3IgZG9lcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVDb250ZW50Vmlldy5wcm90b3R5cGUuX3JlcXVlc3RSb290RE9NTm9kZSk6IEFkZGVkIGhlbHBlci4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVDb250ZW50Vmlldy5wcm90b3R5cGUuX3NlbGVjdGVkTm9kZURpZENoYW5nZSk6IFJlbWVtYmVyIHRoZSBzZWxlY3RlZCBub2RlIHBhdGguCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVVcGRhdGVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZVVwZGF0ZXIucHJvdG90eXBlLl9yZXNldCk6IERvbid0IHNldCByb290RE9NTm9kZSB0byBudWxsLiBET01UcmVlQ29udGVudFZpZXcgaGFuZGxlcyBpdC4KCjIwMTItMDItMTcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIHRpbWVzIERPTVRyZWUncyBSb290RE9NTm9kZUludmFsaWRhdGVkIGV2ZW50IGZpcmVzLgoKICAgICAgICBUaGlzIHdhcyBjYXVzaW5nIHNvbWUgRE9NIHRyZWUgY2h1cm4gb24gcmVsb2FkLiBUaGVyZSBpcyBzdGlsbCBzb21lIGNodXJuLCBidXQgdGhpcyBoZWxwcy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWUpOiBPbmx5IGFkZCBleHRyYSBldmVudCBsaXN0ZW5lcnMgd2hlbiBub3QgdGhlIG1haW4gZnJhbWUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlLnByb3RvdHlwZS5nZXQgZnJhbWUpOiBBZGRlZCBmb3IgZ29vZCBtZWFzdXJlLCB3aWxsIGJlIG5lZWRlZCBzb29uLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZS5wcm90b3R5cGUucmVxdWVzdFJvb3RET01Ob2RlKTogQnVtcCB0aGUgcmVxdWVzdCBpZGVudGlmaWVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZS5wcm90b3R5cGUucmVxdWVzdFJvb3RET01Ob2RlLnJvb3RPYmplY3RBdmFpbGFibGUpOiBDaGVjayB0aGUgcmVxdWVzdCBpZGVudGlmaWVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZS5wcm90b3R5cGUucmVxdWVzdFJvb3RET01Ob2RlLnJvb3RET01Ob2RlQXZhaWxhYmxlKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlLnByb3RvdHlwZS5yZXF1ZXN0Um9vdERPTU5vZGUuZGlzcGF0Y2hDYWxsYmFja3MpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWUucHJvdG90eXBlLl9ub2RlUmVtb3ZlZCk6IEFzc2VydCBub3QgdGhlIG1haW4gZnJhbWUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlLnByb3RvdHlwZS5fZnJhbWVNYWluUmVzb3VyY2VEaWRDaGFuZ2UpOiBEaXR0by4KCjIwMTItMDItMTYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgc3VwcG9ydCB0byB0aGUgc3RvcmFnZSBzaWRlYmFyIHBhbmVsIHRvIHJlc3RvcmUgdGhlIGxhc3QgY29udGVudCB2aWV3LgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTA4NTQwNDI+IFJlbWVtYmVyIGFzcGVjdHMgb2YgdGhlIHVzZXIgaW50ZXJmYWNlIGN1c3RvbWl6YXRpb24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3RvcmFnZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLmNvb2tpZUZvckNvbnRlbnRWaWV3KTogQWRkZWQuIENyZWF0ZSBhIGNvb2tpZSBiYXNlZCBvbiB0aGUKICAgICAgICB0eXBlIG9mIHRoZSByZXByZXNlbnRlZCBvYmplY3QuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TdG9yYWdlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5zaG93Q29udGVudFZpZXdGb3JDb29raWUuZmluYWxpemVDb29raWVDaGVja2luZyk6IFdhbGsgYWxsIHRoZSB0cmVlCiAgICAgICAgZWxlbWVudHMgYW5kIG1hdGNoIHRoZW0gYmFzZWQgb24gdHlwZSBhbG9uZS4gU28gaWYgeW91IHdlcmUgbG9va2luZyBhdCBjb29raWVzIG9uIG9uZSBzaXRlLCBhbmQgbGF0ZXIgb3BlbiB0aGUKICAgICAgICBpbnNwZWN0b3Igb24gYW5vdGhlciBzaXRlLCB0aGUgbmV3IHNpdGUncyBjb29raWVzIHdpbGwgc2hvdy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLnNob3dDb250ZW50Vmlld0ZvckNvb2tpZSk6IFNldCBhIHRpbWVvdXQgdG8gY2FsbCBmaW5hbGl6ZUNvb2tpZUNoZWNraW5nLgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2NoZWNrVHJlZUVsZW1lbnRBZ2FpbnN0UGVuZGluZ0NvbnRlbnRWaWV3Q29va2llKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TdG9yYWdlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fZG9tU3RvcmFnZU9iamVjdFdhc0FkZGVkKTogQ2FsbCBfY2hlY2tUcmVlRWxlbWVudEFnYWluc3RQZW5kaW5nQ29udGVudFZpZXdDb29raWUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TdG9yYWdlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fZGF0YWJhc2VXYXNBZGRlZCk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2Nvb2tpZVN0b3JhZ2VPYmplY3RXYXNBZGRlZCk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2ZyYW1lTWFuaWZlc3RBZGRlZCk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3RyZWVFbGVtZW50U2VsZWN0ZWQpOiBTdHlsZSBjbGVhbnVwLgoKMjAxMi0wMi0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBzdXBwb3J0IHRvIHRoZSBsb2cgc2lkZWJhciBwYW5lbCB0byByZXN0b3JlIHRoZSBsYXN0IGNvbnRlbnQgdmlldy4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwODU0MDQyPiBSZW1lbWJlciBhc3BlY3RzIG9mIHRoZSB1c2VyIGludGVyZmFjZSBjdXN0b21pemF0aW9uCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ1NpZGViYXJQYW5lbC5wcm90b3R5cGUuY29va2llRm9yQ29udGVudFZpZXcpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ1NpZGViYXJQYW5lbC5wcm90b3R5cGUuc2hvd0NvbnRlbnRWaWV3Rm9yQ29va2llKTogQWRkZWQuCgoyMDEyLTAyLTE2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIHN1cHBvcnQgdG8gdGhlIHJlc291cmNlIHNpZGViYXIgcGFuZWwgdG8gcmVzdG9yZSB0aGUgbGFzdCBjb250ZW50IHZpZXcgYW5kIHNlbGVjdCB0aGUgcmVzb3VyY2UgaW4gdGhlIHNpZGViYXIuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDg1NDA0Mj4gUmVtZW1iZXIgYXNwZWN0cyBvZiB0aGUgdXNlciBpbnRlcmZhY2UgY3VzdG9taXphdGlvbgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5jb29raWVGb3JDb250ZW50Vmlldyk6IEFkZGVkLiBSZXR1cm4gYSBjb29raWUgd2l0aCB0aGUgcmVzb3VyY2UgVVJMLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLnNob3dDb250ZW50Vmlld0ZvckNvb2tpZSk6IEFkZGVkLiBGaW5kIHRoZSByZXNvdXJjZSBieSBVUkwgYW5kIHNob3dzIGl0LgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLnNob3dTb3VyY2VDb2RlRm9yRnJhbWUpOiBDbGVhbmVkIHVwIHRvIG1hdGNoIHNob3dDb250ZW50Vmlld0ZvckNvb2tpZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fbWFpbkZyYW1lRGlkQ2hhbmdlKTogQ2FsbCBzaG93Q29udGVudFZpZXdGb3JDb29raWUgaWYgX2Nvb2tpZVRvU2hvd1doZW5BdmFpbGFibGUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2ZyYW1lV2FzQWRkZWQpOiBSZW1vdmUgY29kZSB0aGF0IG1vdmVkIGludG8gc2hvd1NvdXJjZUNvZGVGb3JGcmFtZS4KCjIwMTItMDItMTYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgc3VwcG9ydCBmb3IgcmVtZW1iZXJpbmcgdGhlIGxhc3QgY29udGVudCB2aWV3IHNvIGl0IGNhbiBwb3RlbnRpYWxseSBiZSByZXN0b3JlZCBuZXh0IHNlc3Npb24uCiAgICAgICAgVGhpcyByZXF1aXJlcyBlYWNoIHNpZGViYXIgdG8gc3VwcGx5IGEgY29va2llIGFuZCByZXN0b3JlIGl0IG9uIGxvYWQuIE5vIHNpZGViYXJzIHN1cHBvcnQgaXQgeWV0LgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTA4NTQwNDI+IFJlbWVtYmVyIGFzcGVjdHMgb2YgdGhlIHVzZXIgaW50ZXJmYWNlIGN1c3RvbWl6YXRpb24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOiBDcmVhdGUgc2V0dGluZyBvYmplY3RzIGZvciB0aGUgcmVzcG9uc2libGUgc2lkZWJhciBwYW5lbCBhbmQgY29va2llLgogICAgICAgIChXZWJJbnNwZWN0b3Iuc2lkZWJhclBhbmVsRm9yUmVwcmVzZW50ZWRPYmplY3QpOiBBZGRlZC4gQnJva2Ugb3V0IG9mIGNvbnRlbnRCcm93c2VyVHJlZUVsZW1lbnRGb3JSZXByZXNlbnRlZE9iamVjdC4KICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRCcm93c2VyVHJlZUVsZW1lbnRGb3JSZXByZXNlbnRlZE9iamVjdCk6IFVzZSBzaWRlYmFyUGFuZWxGb3JSZXByZXNlbnRlZE9iamVjdC4KICAgICAgICAoV2ViSW5zcGVjdG9yLl91cGRhdGVDdXJyZW50Q29udGVudFZpZXdDb29raWUpOiBBZGRlZC4gQXNrcyB0aGUgcmVzcG9uc2libGUgc2lkZWJhciBwYW5lbCBmb3IgYSBjb29raWUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5fY29udGVudEJyb3dzZXJSZXByZXNlbnRlZE9iamVjdHNEaWRDaGFuZ2UpOiBDYWxsIF91cGRhdGVDdXJyZW50Q29udGVudFZpZXdDb29raWUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05hdmlnYXRpb25TaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLnByb3RvdHlwZS5jb29raWVGb3JDb250ZW50Vmlldyk6IEFkZGVkIHN0dWIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLnByb3RvdHlwZS5zaG93Q29udGVudFZpZXdGb3JDb29raWUpOiBBZGRlZC4gRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NpZGViYXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyLnByb3RvdHlwZS5yZW1vdmVTaWRlYmFyUGFuZWwpOiBVc2UgZmluZFNpZGViYXJQYW5lbC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXIucHJvdG90eXBlLnNldCBzZWxlY3RlZFNpZGViYXJQYW5lbCk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuU2lkZWJhci5wcm90b3R5cGUuZmluZFNpZGViYXJQYW5lbCk6IFJlbmFtZWQgZnJvbSBfZmluZFNpZGViYXJQYW5lbC4KCjIwMTItMDItMTYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBSZW1lbWJlciB3aGF0IHZpZXcgd2FzIGxhc3QgdXNlZCBmb3IgZnJhbWVzIChET00gVHJlZSBvciBTb3VyY2UgQ29kZSkuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDg1NDA0Mj4gUmVtZW1iZXIgYXNwZWN0cyBvZiB0aGUgdXNlciBpbnRlcmZhY2UgY3VzdG9taXphdGlvbgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9GcmFtZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVDb250ZW50Vmlldyk6IENyZWF0ZSBhIHNldHRpbmcuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5zaG93bik6IFVzZSB0aGUgc2V0dGluZyB0byBjYWxsIF9zaG93Q29udGVudFZpZXdGb3JJZGVudGlmaWVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVDb250ZW50Vmlldy5wcm90b3R5cGUuX2lkZW50aWZpZXJGb3JDb250ZW50Vmlldyk6IEFkZGVkLiBIZWxwZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fc2hvd0NvbnRlbnRWaWV3Rm9ySWRlbnRpZmllcik6IFNldCB0aGUgc2V0dGluZyB2YWx1ZS4KCjIwMTItMDItMTYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBJZiB0aGUgbGVmdCBzaWRlYmFyIGlzIGNvbGxhcHNlZCwgdGhlbiBzaG93IHRoZSBkb2NrIGJ1dHRvbnMgaW4gdGhlIGNvbnRlbnQgYnJvd3NlciBuYXZpZ2F0aW9uIGJhci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKTogTWFrZSBhIHN0YXRpYyBkb2NrQnV0dG9uRGl2aWRlck5hdmlnYXRpb25JdGVtLiBSZW1vdmUgaW5zZXJ0cyBmb3IgdGhlIGJ1dHRvbnMuCiAgICAgICAgKFdlYkluc3BlY3Rvci51cGRhdGVEb2NrZWRTdGF0ZSk6IENhbGwgX3VwZGF0ZURvY2tOYXZpZ2F0aW9uSXRlbXMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5fdXBkYXRlRG9ja05hdmlnYXRpb25JdGVtcyk6IEFkZGVkLiBTaG93cyB0aGUgYnV0dG9ucyBpbiB0aGUgcmlnaHQgbmF2aWdhdGlvbiBiYXIgYmFzZWQgb24KICAgICAgICBkb2NrZWQgYW5kIGxlZnQgc2lkZWJhciBjb2xsYXBzZWQgc3RhdGUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5fc2lkZWJhckNvbGxhcHNlZFN0YXRlRGlkQ2hhbmdlKTogQ2FsbCBfdXBkYXRlRG9ja05hdmlnYXRpb25JdGVtcy4KCjIwMTItMDItMTYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgYSBudWxsIGNoZWNrIGluIHJlc291cmNlRm9yVVJMLCBzaW5jZSB0aGUgbWFpbkZyYW1lIGNhbiBiZSBudWxsIGlmIGNhbGxlZCBlYXJseSBlbm91Z2guCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lUmVzb3VyY2VNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLnJlc291cmNlRm9yVVJMKTogTnVsbCBjaGVjayBtYWluRnJhbWUuCgoyMDEyLTAyLTE2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5FdmVudC5DdXJyZW50Q29udGVudFZpZXdEaWRDaGFuZ2UuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRCcm93c2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIucHJvdG90eXBlLl9jdXJyZW50Q29udGVudFZpZXdEaWRDaGFuZ2UpOiBGaXJlIHRoZSBDdXJyZW50Q29udGVudFZpZXdEaWRDaGFuZ2UgZXZlbnQuCgoyMDEyLTAyLTE2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUmVtZW1iZXIgdGhlIGV4cGFuZGVkIHN0YXRlIG9mIGZyYW1lcyBhbmQgZm9sZGVycyBpbiB0aGUgcmVzb3VyY2Ugc2lkZWJhciBwYW5lbC4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwODU0MDQyPiBSZW1lbWJlciBhc3BlY3RzIG9mIHRoZSB1c2VyIGludGVyZmFjZSBjdXN0b21pemF0aW9uCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50KTogQ2FsbCBfdXBkYXRlRXhwYW5kZWRTZXR0aW5nLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVUcmVlRWxlbWVudC5wcm90b3R5cGUub25leHBhbmQpOiBBZGRlZC4gU2V0IHRoZSBleHBhbmRlZCBzZXR0aW5nIHZhbHVlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVUcmVlRWxlbWVudC5wcm90b3R5cGUub25jb2xsYXBzZSk6IEFkZGVkLiBTZXQgdGhlIGV4cGFuZGVkIHNldHRpbmcgdmFsdWUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVDaGlsZHJlbik6IERlbGV0ZSB0aGUgZm9sZGVyIHRyZWUgZWxlbWVudHMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fdXBkYXRlRXhwYW5kZWRTZXR0aW5nKTogQWRkZWQuIAogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVUcmVlRWxlbWVudC5wcm90b3R5cGUuX21haW5SZXNvdXJjZURpZENoYW5nZSk6IENoYW5nZSB0aGUgZXhwYW5kZWQgc2V0dGluZyBzaW5jZSB0aGUgZnJhbWUgVVJMIGhhcyBjaGFuZ2VkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVUcmVlRWxlbWVudC5wcm90b3R5cGUuX2FkZENoaWxkRm9yUmVwcmVzZW50ZWRPYmplY3QpOiBSZW1vdmVkIF9zaG91bGRFeHBhbmRXaGVuRmlyc3RDaGlsZElzQWRkZWQgY29kZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lVHJlZUVsZW1lbnQucHJvdG90eXBlLl9wYXJlbnRUcmVlRWxlbWVudEZvclJlcHJlc2VudGVkT2JqZWN0LmNyZWF0ZUZvbGRlclRyZWVFbGVtZW50KTogQWRkZWQuCiAgICAgICAgU2V0cyB1cCB0aGUgb25leHBhbmQgYW5kIG9uY29sbGFwc2UgbGlzdGVuZXJzIGFuZCBjcmVhdGVzIGEgZXhwYW5kZWQgc2V0dGluZy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lVHJlZUVsZW1lbnQucHJvdG90eXBlLl9wYXJlbnRUcmVlRWxlbWVudEZvclJlcHJlc2VudGVkT2JqZWN0KTogVXNlIGNyZWF0ZUZvbGRlclRyZWVFbGVtZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVUcmVlRWxlbWVudC5wcm90b3R5cGUuX2ZvbGRlclRyZWVFbGVtZW50RXhwYW5kZWRTdGF0ZUNoYW5nZSk6IEFkZGVkLiBTZXQgdGhlIGV4cGFuZGVkIHNldHRpbmcgdmFsdWUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9tYWluRnJhbWVEaWRDaGFuZ2UpOiBSZW1vdmUgYSBjYWxsIHRvIGV4cGFuZCwgdGhhdCBpcyBoYW5kbGVkIGJ5IEZyYW1lVHJlZUVsZW1lbnQgbm93LgoKMjAxMi0wMi0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFN1cHBvcnQgZXhwYW5kaW5nIGEgVHJlZUVsZW1lbnQgYmVmb3JlIGl0IGhhcyBjaGlsZHJlbiwgc28gaXQgd2lsbCBleHBhbmQgb25jZSB0aGUgZmlyc3QgY2hpbGQgaXMgYWRkZWQuCgogICAgICAgIE5lZWRlZCBmb3I6IDxyZGFyOi8vcHJvYmxlbS8xMDg1NDA0Mj4gUmVtZW1iZXIgYXNwZWN0cyBvZiB0aGUgdXNlciBpbnRlcmZhY2UgY3VzdG9taXphdGlvbgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9UcmVlT3V0bGluZS5qczoKICAgICAgICAoVHJlZU91dGxpbmUucHJvdG90eXBlLmFwcGVuZENoaWxkKTogQ2FsbCBleHBhbmQgaWYgdGhpcyBpcyB0aGUgZmlyc3QgY2hpbGQuCiAgICAgICAgKFRyZWVPdXRsaW5lLnByb3RvdHlwZS5pbnNlcnRDaGlsZCk6IERpdHRvLgogICAgICAgIChUcmVlRWxlbWVudC5wcm90b3R5cGUuZXhwYW5kKTogU2V0IHRoZSBleHBhbmRlZCBmbGFnIGV2ZW4gaWYgdGhlcmUgYXJlIG5vIGNoaWxkcmVuLgoKMjAxMi0wMi0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFVzZSBhIGhhc2ggb2YgdGhlIFVSTCBpbnN0ZWFkIG9mIHRoZSB3aG9sZSBVUkwgZm9yIHJlbWVtYmVyaW5nIHRoZSBsYXN0IHBhZ2Ugc2VhcmNoZWQuCgogICAgICAgIFRoaXMgd2F5IHRoZSBVUkwgaXNuJ3QgY2x1dHRlcmluZyBsb2NhbFN0b3JhZ2UgZm9yIHNpemUgYW5kIHByaXZhY3kgcmVhc29ucy4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwODU0MDQyPiBSZW1lbWJlciBhc3BlY3RzIG9mIHRoZSB1c2VyIGludGVyZmFjZSBjdXN0b21pemF0aW9uCgogICAgICAgIFJldmlld2VkIGJ5IEFkYW0gUm9iZW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9TZWFyY2hTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hTaWRlYmFyUGFuZWwucHJvdG90eXBlLnBlcmZvcm1TZWFyY2gpOiBVc2UgaGFzaCB3aGVuIHNldHRpbmcKICAgICAgICB0aGUgX2xhc3RTZWFyY2hlZFBhZ2VTZXR0aW5nLnZhbHVlLgogICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fbWFpbkZyYW1lRGlkQ2hhbmdlKTogVXNlIGhhc2ggd2hlbiBjb21wYXJpbmcKICAgICAgICB3aXRoIHRoZSBfbGFzdFNlYXJjaGVkUGFnZVNldHRpbmcudmFsdWUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1V0aWxpdGllcy5qczoKICAgICAgICAoU3RyaW5nLnByb3RvdHlwZS5oYXNoKTogQWRkZWQuIEJhc2VkIG9uIHd0Zi9TdHJpbmdIYXNoZXIuaCAoU3VwZXJGYXN0SGFzaCkgYWxnb3JpdGhtLgoKMjAxMi0wMi0xNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFJlbWVtYmVyIHRoZSBzZWFyY2ggdGVybSBhbmQgcmVydW4gdGhlIHNlYXJjaCB3aGVuIHJlLW9wZW5pbmcgdGhlIGluc3BlY3RvciBvbiB0aGUgc2FtZSBwYWdlLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTA4NTQwNDI+IFJlbWVtYmVyIGFzcGVjdHMgb2YgdGhlIHVzZXIgaW50ZXJmYWNlIGN1c3RvbWl6YXRpb24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2VhcmNoU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoU2lkZWJhclBhbmVsKTogU3RvcmUgdGhlIGlucHV0RWxlbWVudCBvbiB0aGUgb2JqZWN0IGFuZCBhZGQgYW4gZXZlbnQKICAgICAgICBsaXN0ZW5lciBmb3IgdGhlIE1haW5GcmFtZUNoYW5nZWQgZXZlbnQuIENyZWF0ZSB0aGUgc2V0dGluZyBvYmplY3RzIGFuZCByZXN0b3JlIHRoZSBzZWFyY2ggdGVybS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbC5wcm90b3R5cGUucGVyZm9ybVNlYXJjaCk6IEJyb2tlbiBvdXQgZnJvbSBfc2VhcmNoRmllbGRDaGFuZ2VkLgogICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fc2VhcmNoRmllbGRDaGFuZ2VkKTogQ2FsbCBwZXJmb3JtU2VhcmNoLgogICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fbWFpbkZyYW1lRGlkQ2hhbmdlKTogQWRkZWQuIENhbGwgcGVyZm9ybVNlYXJjaAogICAgICAgIGlmIHRoZSBmcmFtZSBjaGFuZ2UgaXMgdGhlIGZpcnN0IGFuZCB0aGUgcGFnZSBpcyB0aGUgc2FtZSBhcyB0aGUgbGFzdCB0aW1lLgoKMjAxMi0wMi0xNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFJlbWVtYmVyIHRoZSBmaWx0ZXIgYmFyIGZpbHRlcnMgZm9yIGVhY2ggbmF2aWdhdGlvbiBzaWRlYmFyIHBhbmVsLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTA4NTQwNDI+IFJlbWVtYmVyIGFzcGVjdHMgb2YgdGhlIHVzZXIgaW50ZXJmYWNlIGN1c3RvbWl6YXRpb24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRmlsdGVyQmFyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRmlsdGVyQmFyLnByb3RvdHlwZS5zZXQgZmlsdGVycyk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbCk6IENyZWF0ZSB0aGUgZmlsdGVycyBzZXR0aW5nLgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3VwZGF0ZUZpbHRlcik6IFNldCB0aGUgZmlsdGVycyBzZXR0aW5nLgoKMjAxMi0wMi0xNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFJlbWVtYmVyIHRoZSBjb2xsYXBzZWQgc3RhdGUgb2Ygc2VjdGlvbnMgaW4gdGhlIGRldGFpbHMgc2lkZWJhci4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwODU0MDQyPiBSZW1lbWJlciBhc3BlY3RzIG9mIHRoZSB1c2VyIGludGVyZmFjZSBjdXN0b21pemF0aW9uCiAgICAgICAgKHNpZGViYXIgc3RhdGUsIGxhc3QgdmlldywgZXRjLikKCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQXBwZWFyYW5jZURldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5BcHBlYXJhbmNlRGV0YWlsc1NpZGViYXJQYW5lbCk6IEdpdmUgaWRlbnRpZmllcnMgdG8gRGV0YWlsc1NlY3Rpb25zLgogICAgICAgICogVXNlckludGVyZmFjZS9BcHBsaWNhdGlvbkNhY2hlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVEZXRhaWxzU2lkZWJhclBhbmVsKTogR2l2ZSBpZGVudGlmaWVycyB0byBEZXRhaWxzU2VjdGlvbnMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZURldGFpbHNTaWRlYmFyUGFuZWwpOiBHaXZlIGlkZW50aWZpZXJzIHRvIERldGFpbHNTZWN0aW9ucy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGV0YWlsc1NlY3Rpb24uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZXRhaWxzU2VjdGlvbik6IENyZWF0ZSBhIGNvbGxhcHNlZCBzZXR0aW5nLiBTZXQgY29sbGFwc2VkIHRvIHRoZSB2YWx1ZSBvZiB0aGUgc2V0dGluZy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRldGFpbHNTZWN0aW9uLnByb3RvdHlwZS5nZXQgaWRlbnRpZmllcik6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsc1NlY3Rpb24ucHJvdG90eXBlLnNldCBjb2xsYXBzZWQpOiBVcGRhdGUgdGhlIGNvbGxhcHNlZCBzZXR0aW5nLgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwpOiBHaXZlIGlkZW50aWZpZXJzIHRvIERldGFpbHNTZWN0aW9ucy4KCjIwMTItMDItMTUgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBSZW1lbWJlciB0aGUgbGFzdCBzZWxlY3RlZCBuYXZpZ2F0aW9uIHNpZGViYXIgcGFuZWwsIHRoZSBzaWRlYmFyIHdpZHRocyBhbmQgdGhlaXIgY29sbGFwc2VkIHN0YXRlLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA4NTQwNDI+IFJlbWVtYmVyIGFzcGVjdHMgb2YgdGhlIHVzZXIgaW50ZXJmYWNlIGN1c3RvbWl6YXRpb24gKHNpZGViYXIgc3RhdGUsIGxhc3QgdmlldywgZXRjLikKCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOiBMaXN0ZWQgZm9yIFNpZGViYXJQYW5lbFNlbGVjdGVkLiBVc2UgX3NpZGViYXJXaWR0aERpZENoYW5nZSBmb3IgV2lkdGhEaWRDaGFuZ2UuCiAgICAgICAgQ3JlYXRlIHNldHRpbmcgb2JqZWN0cyBmb3IgbGFzdCBzZWxlY3RlZCBuYXZpZ2F0aW9uIHNpZGViYXIgcGFuZWwsIHRoZSBzaWRlYmFyIHdpZHRocyBhbmQgdGhlaXIgY29sbGFwc2VkIHN0YXRlLgogICAgICAgIChXZWJJbnNwZWN0b3IuX3NpZGViYXJDb2xsYXBzZWRTdGF0ZURpZENoYW5nZSk6IFVwZGF0ZSB0aGUgY29sbGFwc2VkIHNldHRpbmdzLgogICAgICAgIChXZWJJbnNwZWN0b3IuX25hdmlnYXRpb25TaWRlYmFyUGFuZWxTZWxlY3RlZCk6IEFkZGVkLiBVcGRhdGUgdGhlIGxhc3Qgc2VsZWN0ZWQgbmF2aWdhdGlvbiBzaWRlYmFyIHBhbmVsIHNldHRpbmcuCiAgICAgICAgKFdlYkluc3BlY3Rvci5fc2lkZWJhcldpZHRoRGlkQ2hhbmdlKTogQWRkZWQuIFVwZGF0ZSB0aGUgd2lkdGggc2V0dGluZ3MuIENhbGwgX2NvbnRlbnRCcm93c2VyU2l6ZURpZENoYW5nZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2lkZWJhci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXIucHJvdG90eXBlLnNldCB3aWR0aCk6IFJldHVybiBlYXJseSBpZiB0aGUgd2lkdGggaXMgdGhlIHNhbWUuIFRoaXMgYXZvaWRzIHNlbmRpbmcgZXZlbnRzCiAgICAgICAgaWYgdGhlIHdpZHRoIGRpZG4ndCBjaGFuZ2UuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyLnByb3RvdHlwZS5zZXQgY29sbGFwc2VkKTogUmV0dXJuIGVhcmx5IGlmIHRoZSBjb2xsYXBzZWQgc3RhdGUgaXMgdGhlIHNhbWUuIFRoaXMgYXZvaWRzCiAgICAgICAgc2VuZGluZyBldmVudHMgaWYgdGhlIGNvbGxhcHNlZCBzdGF0ZSBkaWRuJ3QgY2hhbmdlLgoKMjAxMi0wMi0xNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBXZWJJbnNwZWN0b3IuU2V0dGluZyBmcm9tIE9wZW4gU291cmNlLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA4NTQwNDI+IFJlbWVtYmVyIGFzcGVjdHMgb2YgdGhlIHVzZXIgaW50ZXJmYWNlIGN1c3RvbWl6YXRpb24gKHNpZGViYXIgc3RhdGUsIGxhc3QgdmlldywgZXRjLikKCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlZCBTZXR0aW5nLmpzLgogICAgICAgICogVXNlckludGVyZmFjZS9TZXR0aW5nLmpzOiBBZGRlZC4gQ29waWVkIHBhcnRpYWxseSBmcm9tIE9wZW5Tb3VyY2UvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNldHRpbmcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2V0dGluZy5wcm90b3R5cGUuZ2V0IG5hbWUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2V0dGluZy5wcm90b3R5cGUuZ2V0IHZhbHVlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNldHRpbmcucHJvdG90eXBlLnNldCB2YWx1ZSk6CgoyMDEyLTAyLTE0ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwODU3MzA2PiBDb25zaWRlciBwdXR0aW5nICJTaG93IEFjdGl2aXR5IiBtZW51IGl0ZW0gaW4gRGV2ZWxvcCBtZW51IGFzIG1pdGlnYXRpb24gZm9yIHRoZSBvbGQgQWN0aXZpdHkgd2luZG93LgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3BlY3RvckZyb250ZW5kQVBJLmpzOgogICAgICAgIChJbnNwZWN0b3JGcm9udGVuZEFQSS5zaG93UmVzb3VyY2VzKTogTWFrZSB0aGUgcmVzb3VyY2VzIHBhbmVsIHRoZSBzZWxlY3RlZCBwYW5lbCwgYW5kIG1ha2UgaXQgbm90IGNvbGxhcHNlZC4KCjIwMTItMDItMTQgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBUYWlsIHRydW5jYXRlIHRoZSBzZWFyY2ggcmVzdWx0IHRpdGxlIHNvIHRoZSB0b29sdGlwIGRvZXMgbm90IGdldCB0b28gbGFyZ2UuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDg0MzM2OT4gV2ViIEluc3BlY3RvciBzaG91bGQgaW1wb3NlIGxpbWl0IG9uIHRvb2x0aXAgc2l6ZSB0byBhdm9pZCBpbnNhbmVseSBsYXJnZSB0b29sdGlwcwoKICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2VhcmNoUmVzdWx0VHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHRUcmVlRWxlbWVudC50cnVuY2F0ZUFuZEhpZ2hsaWdodFRpdGxlKTogVHJ1bmNhdGUgdGhlIHRpdGxlIGF0IHRoZSBlbmQgdG8gNTAgY2hhcmFjdGVycyBtYXguCiAgICAgICAgVXNlIFx1MjAyNiBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgZWxsaXBzaXMgY2hhcmFjdGVyIHNpbmNlIFVURjggaW4gc291cmNlIGNvZGUgbWFrZXMgbWUgbmVydm91cy4KCjIwMTItMDItMTQgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBTaG93IGZhaWxlZCByZXNvdXJjZXMgd2hlbiBmaXJzdCBvcGVuaW5nIHRoZSBXZWIgSW5zcGVjdG9yLgoKICAgICAgICBUaGlzIGlzIHRoZSBTYWZhcmkgc2lkZSBvZiB0aGUgT3BlbiBTb3VyY2UgcjEwNzcxNS4KCiAgICAgICAgRm9sbG93IHVwIHRvOiA8cmRhcjovL3Byb2JsZW0vMTA4NDM2NTM+CgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lUmVzb3VyY2VNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLl9jcmVhdGVSZXNvdXJjZSk6IFNldCB0aGUgbG9hZGVySWQgZm9yIGdvb2QgbWVhc3VyZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5fYWRkRnJhbWVUcmVlRnJvbUZyYW1lUmVzb3VyY2VUcmVlUGF5bG9hZCk6IENoZWNrIGZvciBmYWlsZWQgYW5kIGNhbmNlbGVkLgoKMjAxMi0wMi0xMyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA4NTQwNTI+IENtZC1DIChhbmQgQ29weSBtZW51IGl0ZW0pIGRvbid0IHdvcmsgZm9yIHNlbGVjdGVkIGxpbmUgaW4gRE9NIFRyZWUKCiAgICAgICAgQWxsb3cgdGhlIGN1cnJlbnQgQ29udGVudFZpZXcgdG8gaGFuZGxlIGEgImNvcHkiIGV2ZW50LgogICAgICAgIElmIHRoZSBDb250ZW50VmlldyBpbXBsZW1lbnRzIGhhbmRsZUNvcHlFdmVudCBhbmQgdGhlcmUgaXMKICAgICAgICBubyB3aW5kb3cgc2VsZWN0aW9uLCB3ZSBzZW5kIHRoZSBjb3B5IGV2ZW50IHRvIHRoZSBDb250ZW50Vmlldy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuX2JlZm9yZWNvcHkpOgogICAgICAgIChXZWJJbnNwZWN0b3IuX2NvcHkpOgogICAgICAgIEFkZCBzdXBwb3J0IGZvciBwYXNzaW5nIGNvcHkgZXZlbnQgdG8gYSBDb250ZW50VmlldyBpbXBsZW1lbnRpbmcgaGFuZGxlQ29weUV2ZW50LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5oYW5kbGVDb3B5RXZlbnQpOgogICAgICAgICogVXNlckludGVyZmFjZS9GcmFtZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVDb250ZW50Vmlldy5wcm90b3R5cGUuaGFuZGxlQ29weUV2ZW50KToKICAgICAgICBBIERPTVRyZWVDb250ZW50VmlldyBhbGxvd3MgY29weWluZyB0aGUgY3VycmVudCBzZWxlY3RlZCBlbGVtZW50LgoKMjAxMi0wMi0xMyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA4NTQwNTI+IENtZC1DIChhbmQgQ29weSBtZW51IGl0ZW0pIGRvbid0IHdvcmsgZm9yIHNlbGVjdGVkIGxpbmUgaW4gRE9NIFRyZWUKCiAgICAgICAgTWVyZ2UgcjEwNTY3OSBmcm9tIE9wZW4gU291cmNlJ3MgZnJvbnRlbmQgdG8gZ2V0IHRoZSAiQ29weSBhcyBIVE1MIgogICAgICAgIGNvbnRleHQgbWVudSB3b3JraW5nLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01Ob2RlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5wcm90b3R5cGUuY29weU5vZGUpOgoKMjAxMi0wMi0xMyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgoKICAgICAgICBNYWtlIFJlbW90ZURlYnVnZ2VyIHdvcmsgb24gMTAuNy4zLgoKICAgICAgICBXaGVuIHRoZSBmcm9udC1lbmQgaXMgcnVuIG9uIGFuIGVhcmxpZXIgTGlvbiBzeXN0ZW0sIHN1Y2ggYXMKICAgICAgICBTVUxpb25EdWNoZXNzIGluIFJlbW90ZURlYnVnZ2VyLmFwcCwgaXQgZmFpbHMgYmVjYXVzZQogICAgICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGlzIHVuYXZhaWxhYmxlLiBTaW5jZSB0aGlzIGFwcGVhcnMgdG8gYmUgdGhlCiAgICAgICAgb25seSBkZWZpY2llbmN5IGF0IHRoZSBtb21lbnQsIGxldHMgZGVmaW5lIGl0IHdoZW4gaXRzIG5vdCBhdmFpbGFibGUuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICBNb3ZlIFV0aWxpdGllcy5qcyBlYXJsaWVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVXRpbGl0aWVzLmpzOgogICAgICAgIFByb3ZpZGUgYSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBpbXBsZW1lbnRhdGlvbiB3aGVuIHVuYXZhaWxhYmxlLgoKMjAxMi0wMi0xMyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgZmFpbGVkIHJlc291cmNlcyBzaG93IHVwIHdpdGggcmVkIHRleHQgaW4gdGhlIHNpZGViYXIgYW5kIHNob3cgYW4gZXJyb3IgbWVzc2FnZSB3aGVuIHNlbGVjdGVkLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA4NDM2NTM+IEZhaWxlZCByZXNvdXJjZXMgaGF2ZSBubyB2aXNpYmxlIGRpc3RpbmN0aW9uIGluIHRoZSBuZXcgV2ViIEluc3BlY3RvcgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiBVcGRhdGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9Gb250UmVzb3VyY2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkZvbnRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5jb250ZW50QXZhaWxhYmxlKTogUmVtb3ZlZCBGSVhNRSBhbmQgcmVzb3VyY2UgcGFyYW1ldGVyLgogICAgICAgICogVXNlckludGVyZmFjZS9HZW5lcmFsVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5HZW5lcmFsVHJlZUVsZW1lbnQucHJvdG90eXBlLmFkZENsYXNzTmFtZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuR2VuZXJhbFRyZWVFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVDbGFzc05hbWUpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VSZXNvdXJjZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSW1hZ2VSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5jb250ZW50QXZhaWxhYmxlKTogUmVtb3ZlZCBGSVhNRSBhbmQgcmVzb3VyY2UgcGFyYW1ldGVyLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmNzczoKICAgICAgICAoLm1lc3NhZ2UtdGV4dC12aWV3KTogUmVkdWNlZCB0aGUgbGluZS1oZWlnaHQgYW5kIGFkZGVkIHNvbWUgcGFkZGluZy4KICAgICAgICAoLm1lc3NhZ2UtdGV4dC12aWV3LmVycm9yKTogQ2hhbmdlZCB0aGUgY29sb3Igb2YgcmVkIHRvIGEgZGRhcmtlciBzaGFkZS4KICAgICAgICAoLm1lc3NhZ2UtdGV4dC12aWV3LmVycm9yOjpiZWZvcmUpOiBBZGRlZC4gU2hvdyBhbiBlcnJvciBpY29uLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZUNvbnRlbnRWaWV3KTogQWRkZWQgaXNzdWUgZXZlbnQgbGlzdGVuZXIgYW5kIGlzc3VlIGNvZGUgZnJvbSBUZXh0UmVzb3VyY2VDb250ZW50Vmlldy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLmNvbnRlbnRBdmFpbGFibGUpOiBSZW1vdmVkIHJlc291cmNlIHBhcmFtZXRlci4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLmFkZElzc3VlKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5jbG9zZWQpOiBSZW1vdmUgaXNzdWUgZXZlbnQgbGlzdGVuZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fY29udGVudEF2YWlsYWJsZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUuX2lzc3VlV2FzQWRkZWQpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VUcmVlRWxlbWVudC5jc3M6IEFkZGVkLgogICAgICAgICguaXRlbS5yZXNvdXJjZS5mYWlsZWQpOiBDb2xvciB0ZXh0IHJlZC4KICAgICAgICAoLml0ZW0ucmVzb3VyY2UuZmFpbGVkIC5zdWJ0aXRsZSk6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlRWxlbWVudCk6IEFkZCB0aGUgcmVzb3VyY2Ugc3R5bGUgY2xhc3MuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fdXBkYXRlTG9hZGluZ1N0YXR1cyk6IEFkZCBvciByZW1vdmUgdGhlIGZhaWxlZCBzdHlsZSBjbGFzcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZUVsZW1lbnQucHJvdG90eXBlLl90eXBlRGlkQ2hhbmdlKTogVXNlIGFkZENsYXNzTmFtZSBhbmQgcmVtb3ZlQ2xhc3NOYW1lLgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3KTogUmVtb3ZlZCB0aGUgaXNzdWUgY29kZSwgaXQgaXMgbm93IGluIFJlc291cmNlQ29udGVudFZpZXcuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUuY29udGVudEF2YWlsYWJsZSk6IFJlbW92ZWQgRklYTUUgYW5kIHJlc291cmNlIHBhcmFtZXRlci4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5hZGRJc3N1ZSk6IFNob3cgYSBmdWxsIGVycm9yIG1lc3NhZ2UgaWYgdGhlcmUgaXMgbm8gY29udGVudCB5ZXQuCgoyMDEyLTAyLTEzICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IGEgYnVnIHdoZXJlIG9wZW5pbmcgdGhlIEluc3BlY3RvciB3aGlsZSBsb2FkaW5nIGEgcGFnZSBjb3VsZCBjYXVzZSBhIHN1YnJlc291cmNlIHRoYXQganVzdCBmaW5pc2hlZCBsb2FkaW5nCiAgICAgICAgdG8gYmUgc2hvd24gaW4gdGhlIEluc3BlY3RvciBhcyB0aGUgbWFpbiByZXNvdXJjZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWVSZXNvdXJjZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUuaW5pdGlhbGl6ZSk6IFNldCBfd2FpdGluZ0Zvck1haW5GcmFtZVJlc291cmNlVHJlZVBheWxvYWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUuZnJhbWVEaWROYXZpZ2F0ZSk6IFJldHVybiBlYXJseSBpZiBfd2FpdGluZ0Zvck1haW5GcmFtZVJlc291cmNlVHJlZVBheWxvYWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUuZnJhbWVEaWREZXRhY2gpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5yZXNvdXJjZVJlcXVlc3RXaWxsQmVTZW50KTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUucmVzb3VyY2VSZXF1ZXN0V2FzU2VydmVkRnJvbU1lbW9yeUNhY2hlKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUucmVzb3VyY2VSZXF1ZXN0RGlkUmVjZWl2ZVJlc3BvbnNlKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUucmVzb3VyY2VSZXF1ZXN0RGlkRmluaXNoTG9hZGluZyk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLnJlc291cmNlUmVxdWVzdERpZEZhaWxMb2FkaW5nKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUuX2FkZE5ld1Jlc291cmNlVG9GcmFtZSk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLl9hZGRSZXNvdXJjZVRvRnJhbWUpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5fcHJvY2Vzc01haW5GcmFtZVJlc291cmNlVHJlZVBheWxvYWQpOiBEZWxldGUgX3dhaXRpbmdGb3JNYWluRnJhbWVSZXNvdXJjZVRyZWVQYXlsb2FkLgogICAgICAgIEFsc28gY2xlYXIgdGhlIF9yZXNvdXJjZVJlcXVlc3RJZGVudGlmaWVyTWFwIGFuZCBfZnJhbWVJZGVudGlmaWVyTWFwIG1hcHMuCgoyMDEyLTAyLTEzICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSBzdXJlIHRoZSBzaWRlYmFyIHRyZWUgaXMgcmVhZHkgYmVmb3JlIHNob3dpbmcgdGhlIHNvdXJjZSBjb2RlIGluIHJlc3BvbnNlIHRvIGEgU2hvdyBQYWdlIFNvdXJjZSB1c2VyIGFjdGlvbi4KICAgICAgICBBbHNvIHJldmVhbCBhbmQgc2VsZWN0IHRoZSBmcmFtZSBpbiB0aGUgUmVzb3VyY2Ugc2lkZWJhciBmb3Igd2hpY2ggdGhlIHNvdXJjZSB3YXMgc2hvd24uCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDg1NTAwND4gRmlsZSBwYXRoIGNvbXBvbmVudHMgYXJlIG1pc3Npbmcgd2hlbiB1c2luZyBTaG93IFBhZ2UgU291cmNlIG1lbnUgaXRlbQoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9JbnNwZWN0b3JGcm9udGVuZEFQSS5qczoKICAgICAgICAoSW5zcGVjdG9yRnJvbnRlbmRBUEkuc2hvd01haW5SZXNvdXJjZUZvckZyYW1lKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuc2hvd1NvdXJjZUNvZGVGb3JGcmFtZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUudHJlZUVsZW1lbnRGb3JSZXByZXNlbnRlZE9iamVjdCk6IEFkZGVkLiBBIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiBpcwogICAgICAgIG5lZWRlZCBmb3IgdGhpcyBzaW5jZSB0aGUgZnJhbWVzIGFyZSBwb3B1bGF0ZWQgbGF6aWx5LgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLnRyZWVFbGVtZW50Rm9yUmVwcmVzZW50ZWRPYmplY3QuZ2V0UGFyZW50KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUudHJlZUVsZW1lbnRGb3JSZXByZXNlbnRlZE9iamVjdC5pc0FuY2VzdG9yKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX21haW5GcmFtZURpZENoYW5nZSk6IENoZWNrIGZvciBfZnJhbWVJZGVudGlmaWVyVG9TaG93U291cmNlQ29kZVdoZW5BdmFpbGFibGUKICAgICAgICBhbmQgY2FsbCBzaG93U291cmNlQ29kZUZvckZyYW1lLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9mcmFtZVdhc0FkZGVkKTogUmV0dXJuIGVhcmx5IGlmIHRoZSBtYWluIGZyYW1lIHRyZWUgZWxlbWVudCBpc24ndAogICAgICAgIGluIHRoZSBzaWRlYmFyIHRyZWUgb3V0bGluZSB5ZXQuCgoyMDEyLTAyLTEzICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUmVtb3ZlIHRoZSAiQ3JlYXRlIFJlbW90ZVdlYkluc3BlY3Rvci5mcmFtZXdvcmsgc3ltbGlua3MiIGJ1aWxkIHBoYXNlIG5vdyB0aGF0IGFsbAogICAgICAgIGNsaWVudHMgYXJlIG9mZiB0aGUgb2xkIGZyYW1ld29yay4KCiAgICAgICAgVGhpcyBhbHNvIGZpeGVzIGEgYnVpbGQgZXJyb3Igc2VlbiBpbiB0aGUgYXJjaGl2ZSBidWlsZGVycy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwODI4MjM2PiBSZW1vdmUgU3ltbGlua3MgZm9yIFJlbW90ZVdlYkluc3BlY3Rvci5mcmFtZXdvcmsKCiAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFdlYkluc3BlY3RvclVJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IFJlbW92ZWQgIkNyZWF0ZSBSZW1vdGVXZWJJbnNwZWN0b3IuZnJhbWV3b3JrIHN5bWxpbmtzIi4KCjIwMTItMDItMTIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBFbmFibGUgbG9jYWxpemF0aW9uIG9mIHRoZSBuZXcgV2ViIEluc3BlY3RvciBhZ2Fpbi4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwNjg4NzIxPgoKICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgoKICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczogVXBkYXRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKTogTG9va3VwIHRoZSBzdHJpbmcgaW4gd2luZG93LmxvY2FsaXplZFN0cmluZ3MgYWdhaW4uCgoyMDEyLTAyLTExICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWluaWZ5IHRoZSBDU1MgYW5kIEphdmFTY3JpcHQgcmVzb3VyY2VzIGluIFByb2R1Y3Rpb24gYnVpbGRzLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA0MDgyOTI+IE1hc3RlciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgcmVzb3VyY2VzIGludG8gYSBzZXBhcmF0ZSBmcmFtZXdvcmsKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFNjcmlwdHMvY3NzbWluLnB5OiBBZGRlZC4KICAgICAgICAqIFNjcmlwdHMvanNtaW4ucHk6IENvcGllZCBmcm9tIFNhZmFyaS9SZWFkZXIvanNtaW4ucHkuCiAgICAgICAgKiBXZWJJbnNwZWN0b3JVSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBDYWxsIGNzc21pbi5weSBvbiBNYWluLmNzcyBhbmQganNtaW4ucHkgb24gTWFpbi5qcy4KCjIwMTItMDItMTEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBSZW1vdmUgY29uc29sZS5hc3NlcnQoKSBjYWxscyBmcm9tIFByb2R1Y3Rpb25zIGJ1aWxkcy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwNDA4MjkyPiBNYXN0ZXIgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIHJlc291cmNlcyBpbnRvIGEgc2VwYXJhdGUgZnJhbWV3b3JrCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBTY3JpcHRzL3JlbW92ZS1jb25zb2xlLWFzc2VydHMucGw6IEFkZGVkLgogICAgICAgICogV2ViSW5zcGVjdG9yVUkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQ2FsbCByZW1vdmUtY29uc29sZS1hc3NlcnRzLnBsIG9uIHRoZSBjb21iaW5lZCBNYWluLmpzIGZpbGUuCgoyMDEyLTAyLTExICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQ29tYmluZSBzY3JpcHRzIGFuZCBzdHlsZXNoZWV0cyBpbnRvIHNpbmdsZSBmaWxlcyBpbiBQcm9kdWN0aW9uIGJ1aWxkcy4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwNDA4MjkyPiBNYXN0ZXIgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIHJlc291cmNlcyBpbnRvIGEgc2VwYXJhdGUgZnJhbWV3b3JrCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBTY3JpcHRzL2NvbWJpbmUtcmVzb3VyY2VzLnBsOiBBZGRlZC4KICAgICAgICAqIFNjcmlwdHMvY29weS11c2VyLWludGVyZmFjZS1yZXNvdXJjZXMuc2g6IENhbGwgY29tYmluZS1yZXNvdXJjZXMucGwgaW4gUHJvZHVjdGlvbiBidWlsZHMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogUmVtb3ZlZCBhIEZJWE1FIGNvbW1lbnQgdGhhdCBnZXRzIGluIHRoZSB3YXkgb2YgY29tYmluZS1yZXNvdXJjZXMucGwuCiAgICAgICAgKiBXZWJJbnNwZWN0b3JVSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGRlZCBjb21iaW5lLXJlc291cmNlcy5wbC4KCjIwMTItMDItMTEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBCdWlsZCB0aGUgdXNlciBpbnRlcmZhY2UgZmlsZXMgaW50byB0aGUgV2ViSW5zcGVjdG9yIGZyYW1ld29yay4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwNDA4MjkyPiBNYXN0ZXIgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIHJlc291cmNlcyBpbnRvIGEgc2VwYXJhdGUgZnJhbWV3b3JrCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBDb25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnOiBBZGRlZCBXRUJLSVRfVU1CUkVMTEFfRlJBTUVXT1JLU19ESVIgYW5kIFdFQkNPUkVfUFJJVkFURV9IRUFERVJTX0RJUi4KICAgICAgICAqIENvbmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2NvbmZpZzogQWRkZWQgV0VCS0lUX1VNQlJFTExBX0ZSQU1FV09SS1NfRElSIGZvciBlbmdpbmVlcmluZyBidWlsZHMuCiAgICAgICAgKiBTY3JpcHRzL2NvcHktdXNlci1pbnRlcmZhY2UtcmVzb3VyY2VzLnNoOiBBZGRlZC4KICAgICAgICAqIFdlYkluc3BlY3RvclVJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGVkIFVzZXJJbnRlcmZhY2UgZm9sZGVyLCBsb2NhbGl6ZWRTdHJpbmdzLmpzLAogICAgICAgIENvcHkgVXNlciBJbnRlcmZhY2UgUmVzb3VyY2VzIGFuZCBDb3B5IFdlYkNvcmUgSW5zcGVjdG9yIFJlc291cmNlcyBidWlsZCBwaGFzZXMuCgoyMDEyLTAyLTExICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTW92ZSBTYWZhcmkvRGV2ZWxvcC9XZWJJbnNwZWN0b3IgdG8gV2ViSW5zcGVjdG9yL1VzZXJJbnRlcmZhY2UuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDQwODI5Mj4gTWFzdGVyIHRoZSBuZXcgV2ViIEluc3BlY3RvciByZXNvdXJjZXMgaW50byBhIHNlcGFyYXRlIGZyYW1ld29yawoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogQ2hhbmdlTG9nOiBDb3BpZWQgb3ZlciB0aGUgU2FmYXJpL0NoYW5nZUxvZyBlbnRyaWVzIHdpdGggY2hhbmdlcyBpbiBTYWZhcmkvRGV2ZWxvcC9XZWJJbnNwZWN0b3IuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlOiBSZW5hbWVkIGZyb20gU2FmYXJpL0RldmVsb3AvV2ViSW5zcGVjdG9yLgoKMjAxMi0wMi0xMCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIENvcHkgb3ZlciBTdHlsZXNTaWRlYmFyUGFuZS5qcyBmcm9tIE9wZW4gU291cmNlIGFuZCBicmVhayBpdCB1cCBpbnRvIG9uZSBjbGFzcyBwZXIgZmlsZS4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTIwPiBJbXBsZW1lbnQgdGhlIFN0eWxlIGluc3BlY3RvciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9CbGFua1N0eWxlUHJvcGVydGllc1NlY3Rpb24uanM6IENvcGllZCBmcm9tIE9wZW5Tb3VyY2UvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTUHJvcGVydHlQcm9tcHQuanM6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9Db21wdXRlZFN0eWxlUHJvcGVydGllc1NlY3Rpb24uanM6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9TdHlsZVByb3BlcnRpZXNTZWN0aW9uLmpzOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LmpzOiBEaXR0by4KCjIwMTItMDItMTAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBDb2xsYXBzZSBicmVhZC1jcnVtYiBjb21wb2VuZW50cyBpbiB0aGUgbWlkZGxlIHdoZW4gdGhlcmUgaW5zJ3QgZW5vdWdoIHJvb20gdG8gc2hvdyB0aGVtIGFsbC4KICAgICAgICBUaGlzIGtlZXBzIHRoZSBpbXBvcnRhbnQgb25lcyAodGhlIGVuZHMpIG9uIHRoZSBzY3JlZW4gd2hpbGUgaGlkaW5nIHRoZSBsZXNzIGltcG9ydGFudCBtaWRkbGUuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0hpZXJhcmNoaWNhbFBhdGhDb21wb25lbnQuY3NzOgogICAgICAgICguaGllcmFyY2hpY2FsLXBhdGgtY29tcG9uZW50LmhpZGRlbik6IEFkZGVkLgogICAgICAgICguaGllcmFyY2hpY2FsLXBhdGgtY29tcG9uZW50LmNvbGxhcHNlZCk6IEFkZGVkLgogICAgICAgICguaGllcmFyY2hpY2FsLXBhdGgtY29tcG9uZW50LmNvbGxhcHNlZCA+IC5pY29uKTogQWRkZWQuCiAgICAgICAgKC5oaWVyYXJjaGljYWwtcGF0aC1jb21wb25lbnQuY29sbGFwc2VkID4gLnRpdGxlKTogQWRkZWQuCiAgICAgICAgKC5oaWVyYXJjaGljYWwtcGF0aC1jb21wb25lbnQuY29sbGFwc2VkID4gc2VsZWN0KTogQWRkZWQuCiAgICAgICAgKC5oaWVyYXJjaGljYWwtcGF0aC1jb21wb25lbnQgPiAuc2VwYXJhdG9yKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0hpZXJhcmNoaWNhbFBhdGhDb21wb25lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5IaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50LnByb3RvdHlwZS5nZXQgaGlkZGVuKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5IaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50LnByb3RvdHlwZS5zZXQgaGlkZGVuKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5IaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50LnByb3RvdHlwZS5nZXQgY29sbGFwc2VkKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5IaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50LnByb3RvdHlwZS5zZXQgY29sbGFwc2VkKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0hpZXJhcmNoaWNhbFBhdGhOYXZpZ2F0aW9uSXRlbS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkhpZXJhcmNoaWNhbFBhdGhOYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuc2V0IGNvbXBvbmVudHMpOiBEZWxldGUgX2NvbGxhcHNlZENvbXBvbmVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkhpZXJhcmNoaWNhbFBhdGhOYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUudXBkYXRlTGF5b3V0KTogTG9vcCB0aHJvdWdoIHRoZSBjb21wb25lbnRzIHN0YXJ0aW5nCiAgICAgICAgYXQgdGhlIG1pZGRsZSBhbmQgZmFubmluZyBvdXQgaW4gZWFjaCBkaXJlY3Rpb24gdG8gY29sbGFwc2UgdW50aWwgd2lkdGhUb1JlbW92ZSBkZXBsZXRlZC4KCjIwMTItMDItMTAgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBTaG93IHBhZ2UgYW5kIGZyYW1lIHNvdXJjZSB1c2luZyB0aGUgbmV3IGluc3BlY3RvciBpZiBpdCBpcyBlbmFibGVkLgoKICAgICAgICBXaGVuIHRoZSB1c2VyIHNlbGVjdHMgU2hvdyBQYWdlIFNvdXJjZSBmcm9tIHRoZSBEZXZlbG9wIG1lbnUgb3IgU2hvdyBQYWdlIFNvdXJjZSBvciBTaG93IEZyYW1lIFNvdXJjZQogICAgICAgIGZyb20gdGhlIGNvbnRleHQgbWVudSwgY2FsbCBuZXcgV0tJbnNwZWN0b3IgQVBJIGlmIHdlIGFyZSB1c2luZyB0aGUgbmV3IGluc3BlY3Rvci4KCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwODMwMDc2PiBTaG93IFBhZ2UgU291cmNlIHNob3VsZCBvcGVuIHRoZSBuZXcgV2ViIEluc3BlY3RvciB0byB0aGUgcGFnZSBzb3VyY2UKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA4NDQ4MzE+IFNob3cgRnJhbWUgU291cmNlIHNob3VsZCBvcGVuIHRoZSBuZXcgV2ViIEluc3BlY3RvciB0byB0aGF0IGZyYW1lJ3Mgc291cmNlCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zcGVjdG9yRnJvbnRlbmRBUEkuanM6CiAgICAgICAgKEluc3BlY3RvckZyb250ZW5kQVBJLnNob3dNYWluUmVzb3VyY2VGb3JGcmFtZSk6IENhbGwgdGhyb3VnaCB0byB0aGUgUmVzb3VyY2VTaWRlYmFyUGFuZWwuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLnNob3dTb3VyY2VDb2RlRm9yRnJhbWUpOiBJZiB3ZSBoYXZlIGEgRnJhbWUgb2JqZWN0IGZvcgogICAgICAgICAgICB0aGUgZnJhbWUgSUQgd2Ugd2VyZSBnaXZlbiwgZmluZCBpdHMgY29udGVudCB2aWV3IGFuZCBzaG93IHRoZSBzb3VyY2UgZm9yIGl0LiBJZiB0aGVyZSBpc24ndCBhIGZyYW1lCiAgICAgICAgICAgIG9iamVjdCB5ZXQsIHN0b3JlIHRoZSBmcmFtZSBJRCBmb3IgdGhlIGZyYW1lIHdlIHdhbnQgdG8gc2hvdy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fbWFpbkZyYW1lRGlkQ2hhbmdlKTogSWYgd2Ugd2FudCB0byBzaG93IGEgZnJhbWUgSUQgd2hlbiBpdCBiZWNvbWVzCiAgICAgICAgICAgIGF2YWlsYWJsZSwgdGhlbiByZXR1cm4gZWFybHkgYmVmb3JlIHNob3dpbmcgdGhlIG1haW4gcmVzb3VyY2UuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2ZyYW1lV2FzQWRkZWQpOiBJZiB3ZSBhcmUgd2FpdGluZyB0byBzaG93IGEgZnJhbWUncyBzb3VyY2UsIGFuZCBpdAogICAgICAgICAgICB3YXMganVzdCBhZGRlZCwgdGhlbiBjYWxsIHNob3dTb3VyY2VDb2RlRm9yRnJhbWUuCgoyMDEyLTAyLTA5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgU2V0IGEgZGVmYXVsdCB0b29sdGlwIGZvciBHZW5lcmFsVHJlZUVsZW1lbnRzIGlmIHRoZXJlIGlzbid0IGEgY3VzdG9tIG9uZSBhbHJlYWR5IGFzc2lnbmVkLgoKICAgICAgICBUaGlzIGdpdmVzIHRoZSB1c2VyIGEgd2F5IHRvIHJlYWQgdHJ1bmNhdGVkIHRpdGxlcyBmb3IgYWxsIHRoZSBzaWRlYmFyIHRyZWUgZWxlbWVudHMuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0dlbmVyYWxUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkdlbmVyYWxUcmVlRWxlbWVudC5wcm90b3R5cGUuX3VwZGF0ZVRpdGxlRWxlbWVudHMpOiBCdWlsZCBhIHRvb2wgdGlwIGJhc2VkIG9uIHRoZQogICAgICAgIG1haW4gdGl0bGUgYW5kIHN1YnRpdGxlLgoKMjAxMi0wMi0wOSAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIENsZWFuIHVwIHRoZSBjb2RlIHRvIHNldCB0aGUgdGl0bGVzIG9mIGFwcGxpY2F0aW9uIGNhY2hlIG1hbmlmZXN0IGFuZCBmcmFtZSB0cmVlIGVsZW1lbnRzLgoKICAgICAgICBUaGlzIHBhdGNoIG1vdmVzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBnZW5lcmF0aW5nIHRpdGxlcyBhbmQgc3VidGl0bGVzIGZvciB0aGUgYXBwbGljYXRpb24gY2FjaGUKICAgICAgICBtYW5pZmVzdHMgYW5kIGZyYW1lcyBmcm9tIHRoZWlyIHJlcHJlc2VudGVkIG9iamVjdHMgdG8gdGhlIHRyZWUgZWxlbWVudHMuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQXBwbGljYXRpb25DYWNoZUZyYW1lLmpzOiBNb3ZlZCBjb2RlIGZyb20gaGVyZS4uLgogICAgICAgICogVXNlckludGVyZmFjZS9BcHBsaWNhdGlvbkNhY2hlRnJhbWVUcmVlRWxlbWVudC5qczogLi4uIHRvIGhlcmUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlRnJhbWVUcmVlRWxlbWVudCk6IFBhc3MgYSBibGFuayB0aXRsZSwgaXQgd2lsbCBiZSBwb3B1bGF0ZWQgYnkgdXBkYXRlVGl0bGVzLCBhbmQgdGhlbiBjYWxsIHVwZGF0ZVRpdGxlcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVGcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZUZyYW1lVHJlZUVsZW1lbnQudXBkYXRlVGl0bGVzKTogU2V0IHRoZQogICAgICAgICAgICBtYWluVGl0bGUgYW5kIHRoZSBzdWJ0aXRsZSBvbiB0aGUgR2VuZXJhbFRyZWVFbGVtZW50LgogICAgICAgICogVXNlckludGVyZmFjZS9BcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3QuanM6IE1vdmVkIGNvZGUgZnJvbSBoZXJlLi4uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0FwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFRyZWVFbGVtZW50LmpzOiAuLi4gdG8gaGVyZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFRyZWVFbGVtZW50KTogUGFzcyBhbiBlbXB0eSB0aXRsZS4gU3RvcmFnZVRyZWVFbGVtZW50IHdpbGwgcG9wdWxhdGUgaXQgd2hlbiB0aGUgZmxhdHRlbmVkIHZhcmlhYmxlCiAgICAgICAgICAgIGlzIHNldC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFRyZWVFbGVtZW50LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0VHJlZUVsZW1lbnQuZ2V0IG5hbWUpOiBDYWxsIF9nZW5lcmF0ZVRpdGxlcwogICAgICAgICAgICBpZiBuZWNlc3NhcnksIGFuZCB0aGVuIHJldHVybiB0aGUgbmFtZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFRyZWVFbGVtZW50LnByb3RvdHlwZS5nZXQgc2Vjb25kYXJ5TmFtZSk6IENhbGwgX2dlbmVyYXRlVGl0bGVzIGlmIG5lY2Vzc2FyeSwgYW5kIHRoZW4KICAgICAgICAgICAgcmV0dXJuIHRoZSBzZWNvbmRhcnkgbmFtZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFRyZWVFbGVtZW50LnByb3RvdHlwZS5fZ2VuZXJhdGVUaXRsZXMpOiBNb3ZlZCBmcm9tIEFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdC5qcy4KCjIwMTItMDItMDkgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBJbXBsZW1lbnQgYSBiZXR0ZXIgdGl0bGluZyBzY2hlbWUgZm9yIGFwcGxpY2F0aW9uIGNhY2hlIG1hbmlmZXN0cyBhbmQgZnJhbWVzLgoKICAgICAgICBUaGlzIHBhdGNoIHJld29ya3MgdGhlIHRpdGxlcyBhbmQgc3VidGl0bGVzIG9mIGFwcGxpY2F0aW9uIGNhY2hlIG1hbmlmZXN0cyBhbmQgZnJhbWVzLgoKICAgICAgICBGb3IgdGhlIG1hbmlmZXN0LCBpZiBpdCBpcyBjb2xsYXBzZWQsIGl0IHdpbGwgc2F5OiBBcHBsaWNhdGlvbiBDYWNoZSAtIE1hbmlmZXN0IE5hbWUuCiAgICAgICAgSWYgaXQgaXNuJ3QgY29sbGFwc2VkICh0aGVyZSBpcyBhIHRvcCBsZXZlbCAiQXBwbGljYXRpb24gQ2FjaGUiIGZvbGRlciksIHRoZW4gaXQgd2lsbCBzYXk6IE1hbmlmZXN0IE5hbWUgLSBIb3N0IE5hbWUuCgogICAgICAgIEZvciB0aGUgZnJhbWUsIHRoZSBtYWluIHRpdGxlIHdpbGwgYmUgdGhlIGxhc3QgcGF0aCBjb21wb25lbnQgb2YgdGhlIGZyYW1lIChpZiBpdCBleGlzdHMpLCBvciB0aGUgaG9zdC4gVGhlIHN1YnRpdGxlCiAgICAgICAgd2lsbCBiZSB0aGUgaG9zdCwgaWYgdGhlIGhvc3QgaXNuJ3QgdGhlIHNhbWUgYXMgdGhlIG1haW4gdGl0bGUgb2YgdGhlIGZyYW1lLCBvciB0aGUgc3VidGl0bGUgb2YgdGhlIGFwcGxpY2F0aW9uIGNhY2hlCiAgICAgICAgbWFuaWZlc3QncyB0cmVlIGVsZW1lbnQuCgogICAgICAgIFJlc3Qgb2YgPHJkYXI6Ly9wcm9ibGVtLzEwNjQyOTUzPiBJbXBsZW1lbnQgQXBwbGljYXRpb24gQ2FjaGUgc2lkZWJhciBpdGVtcyBhbmQgY29udGVudCB2aWV3cyBmb3IgbmV3IHdlYiBpbnNwZWN0b3IuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQXBwbGljYXRpb25DYWNoZUZyYW1lLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZUZyYW1lLnByb3RvdHlwZS5nZXQgdGl0bGUpOiBDYWxsIF9nZW5lcmF0ZVRpdGxlcywgd2hpY2ggZG9lc24ndCByZXR1cm4gYSB0aXRsZSBhbnltb3JlLgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZUZyYW1lLnByb3RvdHlwZS5nZXQgc3VidGl0bGUpOiBDYWxsIF9nZW5lcmF0ZVRpdGxlcyBhbmQgcmV0dXJuIHRoaXMuX3N1YnRpdGxlLgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZUZyYW1lLnByb3RvdHlwZS5jbGVhclRpdGxlcyk6IFNldCB0aGUgc3VidGl0bGUgYW5kIG1haW4gdGl0bGUgdG8gbnVsbCwgYW5kIGNhbGwgX2dlbmVyYXRlVGl0bGVzLgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZUZyYW1lLnByb3RvdHlwZS5fZ2VuZXJhdGVUaXRsZXMpOiBDbGVhbiB1cCB0aGUgY29kZSB0byBnZW5lcmF0ZSBhIG1haW4gdGl0bGUsIGFuZCBnZW5lcmF0ZQogICAgICAgICAgICBhIHN1YnRpdGxlIGFzIHdlbGwuCgogICAgICAgICogVXNlckludGVyZmFjZS9BcHBsaWNhdGlvbkNhY2hlRnJhbWVUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVGcmFtZVRyZWVFbGVtZW50KTogUGFzcyB0aGUgdGl0bGUgYW5kIHRoZSBzdWJ0aXRsZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVGcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZUZyYW1lVHJlZUVsZW1lbnQudXBkYXRlVGl0bGVzKToKICAgICAgICAgICAgQ2xlYXIgdGhlIHRpdGxlcyBvbiB0aGUgcmVwcmVzZW50ZWQgb2JqZWN0LCBhbmQgc2V0IHRoZSBtYWluVGl0bGUgYW5kIHN1YnRpdGxlIG9uIHRoZSB0cmVlIGVsZW1lbnQgdG8gdGhlaXIgbmV3IHZhbHVlcy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0FwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdC5wcm90b3R5cGUuZ2V0IHRpdGxlKTogQ2FsbCBfZ2VuZXJhdGVUaXRsZXMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3QucHJvdG90eXBlLmdldCBzdWJ0aXRsZSk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0LnByb3RvdHlwZS5fZ2VuZXJhdGVUaXRsZXMpOiBDbGVhbiB1cCB0aGUgY29kZSB0byBnZW5lcmF0ZSBhIG1haW4gdGl0bGUgYW5kIGFsc28gZ2VuZXJhdGUKICAgICAgICAgICAgYSBzdWJ0aXRsZS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0FwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0VHJlZUVsZW1lbnQucHJvdG90eXBlLmdldCBzZWNvbmRhcnlOYW1lKTogR2V0IHRoZSByZXByZXNlbnRlZCBvYmplY3QncyBzdWJ0aXRsZS4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N0b3JhZ2VUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VUcmVlRWxlbWVudCk6IFVzZSB0aGUgZmxhdHRlbmVkIHNldHRlciBpbnN0ZWFkIG9mIHNldHRpbmcgdGhlIHZhcmlhYmxlLiBUaGUgc2V0dGVyIGRvZXMgYSBiaXQgbW9yZSB3b3JrCiAgICAgICAgICAgIHRoYXQgd2UgbmVlZCB0byBkby4KICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VUcmVlRWxlbWVudC5wcm90b3R5cGUuc2V0IGZsYXR0ZW5lZCk6IEFkZCB0aGUgYWJpbGl0eSB0byBzZXQgYSBzdWJ0aXRsZSB3aGVuIHdlIGFyZSBub3QgZmxhdHRlbmVkLiBJZiB0aGUKICAgICAgICAgICAgZmxhdHRlbmluZyBjaGFuZ2VzLCBjYWxsIF91cGRhdGVDaGlsZHJlbnNUaXRsZXMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TdG9yYWdlVHJlZUVsZW1lbnQucHJvdG90eXBlLl91cGRhdGVDaGlsZHJlbnNUaXRsZXMpOiBDYWxsIHVwZGF0ZVRpdGxlcyBmb3IgZWFjaCBjaGlsZCB0aGF0IGhhcyB1cGRhdGVUaXRsZXMgaW4gdGhlaXIKICAgICAgICAgICAgcHJvdG90eXBlLgoKMjAxMi0wMi0wOSAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIEhhdmUgQXBwbGljYXRpb25DYWNoZUZyYW1lQ29udGVudFZpZXcgbGlzdGVuIGZvciB3aGVuIGFwcGxpY2F0aW9uIGNhY2hlIHN0YXR1c2VzIGNoYW5nZS4KCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTA2NDI5NTM+IEltcGxlbWVudCBBcHBsaWNhdGlvbiBDYWNoZSBzaWRlYmFyIGl0ZW1zIGFuZCBjb250ZW50IHZpZXdzIGZvciBuZXcgd2ViIGluc3BlY3Rvci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9BcHBsaWNhdGlvbkNhY2hlRnJhbWVDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVGcmFtZUNvbnRlbnRWaWV3KTogQWRkIGFuIGV2ZW50IGxpc3RlbmVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZUZyYW1lQ29udGVudFZpZXcucHJvdG90eXBlLmNsb3NlZCk6IFJlbW92ZSBhbiBldmVudCBsaXN0ZW5lci4KICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVGcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fdXBkYXRlU3RhdHVzKTogQ2FsbCB0aHJvdWdoIHRvIHVwZGF0ZVN0YXR1cy4KCjIwMTItMDItMDkgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBSZW1vdmUgYSBidW5jaCBvZiBkZWFkIGNvZGUgZnJvbSBBcHBsaWNhdGlvbkNhY2hlRnJhbWVDb250ZW50Vmlldy4KCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTA2NDI5NTM+IEltcGxlbWVudCBBcHBsaWNhdGlvbiBDYWNoZSBzaWRlYmFyIGl0ZW1zIGFuZCBjb250ZW50IHZpZXdzIGZvciBuZXcgd2ViIGluc3BlY3Rvci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9BcHBsaWNhdGlvbkNhY2hlRnJhbWVDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVGcmFtZUNvbnRlbnRWaWV3KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVGcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS51cGRhdGVTdGF0dXMpOgoKMjAxMi0wMi0wOSAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIEFkZCBpY29ucyBmb3IgYXBwbGljYXRpb24gY2FjaGUgbWFuaWZlc3QgYW5kIGZyYW1lIHRyZWUgZWxlbWVudHMuCgogICAgICAgIE1vcmUgb2YgPHJkYXI6Ly9wcm9ibGVtLzEwNjQyOTUzPiBJbXBsZW1lbnQgQXBwbGljYXRpb24gQ2FjaGUgc2lkZWJhciBpdGVtcyBhbmQgY29udGVudCB2aWV3cyBmb3IgbmV3IHdlYiBpbnNwZWN0b3IuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQXBwbGljYXRpb25DYWNoZUZyYW1lVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlRnJhbWVUcmVlRWxlbWVudCk6IFNldCBhIGNsYXNzIG5hbWUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0FwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0VHJlZUVsZW1lbnQpOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQXBwbGljYXRpb25DYWNoZUljb25zLmNzczogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9BcHBsaWNhdGlvbkNhY2hlLnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9BcHBsaWNhdGlvbkNhY2hlQDJ4LnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogQWRkIG5ldyBmaWxlLgoKMjAxMi0wMi0wOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEZpeCBhIGZpbGUgbm90IGZvdW5kIGVycm9yIGluIHRoZSBXZWIgSW5zcGVjdG9yLgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9JbmRldGVybWluYXRlUHJvZ3Jlc3NTcGlubmVyLmNzczoKICAgICAgICAoLmluZGV0ZXJtaW5hdGUtcHJvZ3Jlc3Mtc3Bpbm5lcik6IFVzZSBJbmRldGVybWluYXRlUHJvZ3Jlc3NTcGlubmVyMS5wZGYgaW5zdGVhZCBvZiBJbmRldGVybWluYXRlUHJvZ3Jlc3NTcGlubmVyLnBkZi4KCjIwMTItMDItMDkgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBEb24ndCBhZGQgZXZlbnQgbGlzdGVuZXJzIGluIHRoZSBDb250ZW50VmlldyAic2hvd24iIGZ1bmN0aW9ucy4KCiAgICAgICAgVGhpcyB3YXMgbGVhZGluZyB0byBkdXBsaWNhdGUgbGlzdGVuZXJzIGlmIHRoZSBjb250ZW50IHZpZXcgd2FzIGhpZGRlbiBhbmQgc2hvd24gbXVsdGlwbGUgdGltZXMuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NsdXN0ZXJDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNsdXN0ZXJDb250ZW50Vmlldyk6IEFkZCB0aGUgZXZlbnQgbGlzdGVuZXIgaGVyZS4uLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ2x1c3RlckNvbnRlbnRWaWV3LnByb3RvdHlwZS5zaG93bik6IC4uLiBpbnN0ZWFkIG9mIGhlcmUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVDb250ZW50Vmlldyk6IEFkZCB0aGUgZXZlbnQgbGlzdGVuZXIgaGVyZS4uLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5zaG93bik6IC4uLiBpbnN0ZWFkIG9mIGhlcmUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZUNvbnRlbnRWaWV3KTogQWRkIHRoZSBldmVudCBsaXN0ZW5lciBoZXJlLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUuc2hvd24pOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3KTogQWRkIHRoZSBldmVudCBsaXN0ZW5lciBoZXJlLi4uCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUuc2hvd24pOiAuLi4gaW5zdGVhZCBvZiBoZXJlLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLmhpZGRlbik6IERvbid0IHJlbW92ZSB0aGUgZXZlbnQgbGlzdGVuZXIgaGVyZS4uLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLmNsb3NlZCk6IC4uLiByZW1vdmUgaXQgaGVyZSBpbnN0ZWFkLgoKMjAxMi0wMi0wNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIFVwZGF0ZSB0aGUgZGV0YWlscyBzaWRlYmFyIHdoZW4gdGhlIG5ldHdvcmsgc3RhdGUgb3IgdGhlIGZyYW1lIG1hbmlmZXN0IHN0YXRlIGNoYW5nZXMuCgogICAgICAgIE1vcmUgb2YgPHJkYXI6Ly9wcm9ibGVtLzEwNjQyOTUzPiBJbXBsZW1lbnQgQXBwbGljYXRpb24gQ2FjaGUgc2lkZWJhciBpdGVtcyBhbmQgY29udGVudCB2aWV3cyBmb3IgbmV3IHdlYiBpbnNwZWN0b3IuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0FwcGxpY2F0aW9uQ2FjaGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZURldGFpbHNTaWRlYmFyUGFuZWwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLnJlZnJlc2gpOiBDYWxsIF9yZWZyZXNoT25saW5lUm93IGFuZCBfcmVmcmVzaFN0YXR1c1Jvdy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fbmV0d29ya1N0YXRlVXBkYXRlZCk6IENhbGwgX3JlZnJlc2hPbmxpbmVSb3cuCiAgICAgICAgKFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX2ZyYW1lTWFuaWZlc3RTdGF0dXNDaGFuZ2VkKTogSWYgdGhlIGZyYW1lIHRoYXQgY2hhbmdlZAogICAgICAgICAgICBtYXRjaGVzIG91cnMsIGNhbGwgX3JlZnJlc2hTdGF0dXNSb3cuCiAgICAgICAgKFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3JlZnJlc2hPbmxpbmVSb3cpOiBTZXQgdGhlIHRleHQgb2YgdGhlIG9ubGluZSByb3cuCiAgICAgICAgKFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3JlZnJlc2hTdGF0dXNSb3cpOiBTZXQgdGhlIHRleHQgb2YgdGhlIHN0YXR1cyByb3cuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmFnZXIucHJvdG90eXBlLm5ldHdvcmtTdGF0ZVVwZGF0ZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmFnZXIucHJvdG90eXBlLl9mcmFtZU1hbmlmZXN0VXBkYXRlZCk6CgoyMDEyLTAyLTA3ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSBzdXJlIHdlIHVwZGF0ZSB0aGUgc3RhdHVzIG9mIGFuIGV4aXN0aW5nIGNhY2hlIGZyYW1lIGluIF9mcmFtZU1hbmlmZXN0VXBkYXRlZC4KCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTA2NDI5NTM+IEltcGxlbWVudCBBcHBsaWNhdGlvbiBDYWNoZSBzaWRlYmFyIGl0ZW1zIGFuZCBjb250ZW50IHZpZXdzIGZvciBuZXcgd2ViIGluc3BlY3Rvci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQXBwbGljYXRpb25DYWNoZUZyYW1lLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZUZyYW1lLnByb3RvdHlwZS5zZXQgc3RhdHVzKTogQWRkIGEgc2V0dGVyLgogICAgICAgICogVXNlckludGVyZmFjZS9BcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLnByb3RvdHlwZS5fZnJhbWVNYW5pZmVzdFVwZGF0ZWQpOiBJZiB3ZSBhbHJlYWR5IGhhdmUgYW4gQXBwbGljYXRpb25DYWNoZUZyYW1lLAogICAgICAgICAgICBtYWtlIHN1cmUgdG8gc2V0IHRoZSBzdGF0dXMgd2hlbiBpdCBjaGFuZ2VzLgoKMjAxMi0wMi0wNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIEFkZCBhIHN0YXR1cyBzZWN0aW9uIHRvIHRoZSBkZXRhaWxzIHNpZGViYXIgdGhhdCBzaG93cyB0aGUgYXBwbGljYXRpb24gY2FjaGUgc3RhdHVzIGFuZCB3aGV0aGVyIHRoZSB1c2VyIGlzIG9ubGluZQogICAgICAgIG9yIG9mZmxpbmUuCgogICAgICAgIFRoaXMgZG9lc24ndCBsaXN0ZW4gdG8gY2hhbmdlcyBpbiBzdGF0ZSB3aGlsZSB0aGUgc2lkZWJhciBpcyBzaG93aW5nIHlldCwgYnV0IGl0IHdpbGwgaW4gdGhlIG5leHQgcGF0Y2guCgogICAgICAgIE1vcmUgb2YgPHJkYXI6Ly9wcm9ibGVtLzEwNjQyOTUzPiBJbXBsZW1lbnQgQXBwbGljYXRpb24gQ2FjaGUgc2lkZWJhciBpdGVtcyBhbmQgY29udGVudCB2aWV3cyBmb3IgbmV3IHdlYiBpbnNwZWN0b3IuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0FwcGxpY2F0aW9uQ2FjaGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZURldGFpbHNTaWRlYmFyUGFuZWwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLnJlZnJlc2gpOgoKMjAxMi0wMi0wNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIEFkZCB0aGUgbWFuaWZlc3QgVVJMIGFuZCB0aGUgZnJhbWUgVVJMIHRoYXQgbG9hZGVkIHRoZSBtYW5pZmVzdCB0byB0aGUgZGV0YWlscyBzaWRlYmFyLgoKICAgICAgICBNb3JlIG9mIDxyZGFyOi8vcHJvYmxlbS8xMDY0Mjk1Mz4gSW1wbGVtZW50IEFwcGxpY2F0aW9uIENhY2hlIHNpZGViYXIgaXRlbXMgYW5kIGNvbnRlbnQgdmlld3MgZm9yIG5ldyB3ZWIgaW5zcGVjdG9yLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9BcHBsaWNhdGlvbkNhY2hlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVEZXRhaWxzU2lkZWJhclBhbmVsKTogQ3JlYXRlIGEgc3RhcnQgdG8gb3VyIHN0cnVjdHVyZSBvZiBncm91cHMgYW5kIHJvd3MuCiAgICAgICAgKFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuZ2V0IGFwcGxpY2F0aW9uQ2FjaGVGcmFtZSk6IFJldHVybiB0aGUgYXBwbGljYXRpb24gY2FjaGUgZnJhbWUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuc2V0IGFwcGxpY2F0aW9uQ2FjaGVGcmFtZSk6IFNldCB0aGUgYXBwbGljYXRpb24gY2FjaGUgZnJhbWUgYW5kIHNheQogICAgICAgICAgICB3ZSBuZWVkIGEgcmVmcmVzaC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5yZWZyZXNoKTogU2V0IHRoZSBkYXRhIGluIG91ciByb3dzLgoKMjAxMi0wMi0wNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIEFkZCBhIGJhc2ljIEFwcGxpY2F0aW9uQ2FjaGVEZXRhaWxzU2lkZWJhclBhbmVsLCBhbmQgbWFrZSBpdCBiZSBlbmFibGVkIGF0IHRoZSByaWdodCB0aW1lLgoKICAgICAgICBNb3JlIG9mIDxyZGFyOi8vcHJvYmxlbS8xMDY0Mjk1Mz4gSW1wbGVtZW50IEFwcGxpY2F0aW9uIENhY2hlIHNpZGViYXIgaXRlbXMgYW5kIGNvbnRlbnQgdmlld3MgZm9yIG5ldyB3ZWIgaW5zcGVjdG9yLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9BcHBsaWNhdGlvbkNhY2hlRGV0YWlsc1NpZGViYXJQYW5lbC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlRGV0YWlsc1NpZGViYXJQYW5lbCk6IENhbGwgdGhlIERldGFpbHNTaWRlYmFyUGFuZWwgY29uc3RydWN0b3IuCiAgICAgICAgKFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuY29uc3RydWN0b3IuV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVEZXRhaWxzU2lkZWJhclBhbmVsLmluc3BlY3QpOiBEZXRlcm1pbmUKICAgICAgICAgICAgaWYgb25lIG9mIHRoZSBzZWxlY3RlZCBvYmplY3RzIGlzIGFuIEFwcGxpY2F0aW9uQ2FjaGVGcmFtZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5yZWZyZXNoKTogQWRkIGEgRklYTUUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogQWRkIGEgbmV3IGZpbGUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKTogQ3JlYXRlIHRoZSBBcHBsaWNhdGlvbkNhY2hlRGV0YWlsc1NpZGViYXJQYW5lbC4KCjIwMTItMDItMDcgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBDcmVhdGUgYW4gQXBwbGljYXRpb25DYWNoZUZyYW1lQ29udGVudFZpZXcgd2hlbiBhbiBBcHBsaWNhdGlvbkNhY2hlRnJhbWVUcmVlRWxlbWVudCBpcyBzZWxlY3RlZC4KCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTA2NDI5NTM+IEltcGxlbWVudCBBcHBsaWNhdGlvbiBDYWNoZSBzaWRlYmFyIGl0ZW1zIGFuZCBjb250ZW50IHZpZXdzIGZvciBuZXcgd2ViIGluc3BlY3Rvci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlldyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlldy5pc1ZpZXdhYmxlKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRCcm93c2VyVHJlZUVsZW1lbnRGb3JSZXByZXNlbnRlZE9iamVjdCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N0b3JhZ2VTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdG9yYWdlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fc3RvcmFnZUNsZWFyZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3RyZWVFbGVtZW50U2VsZWN0ZWQpOgoKMjAxMi0wMi0wNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIEltcGxlbWVudCBzb21lIG5lZWRlZCBmdW5jdGlvbnMgaW4gQXBwbGljYXRpb25DYWNoZU1hbmFnZXIgdG8gaGFuZGxlIGNhbGxzIGZyb20gQXBwbGljYXRpb25DYWNoZU9ic2VydmVyIGFuZAogICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVGcmFtZUNvbnRlbnRWaWV3LgoKICAgICAgICBNb3JlIG9mIDxyZGFyOi8vcHJvYmxlbS8xMDY0Mjk1Mz4gSW1wbGVtZW50IEFwcGxpY2F0aW9uIENhY2hlIHNpZGViYXIgaXRlbXMgYW5kIGNvbnRlbnQgdmlld3MgZm9yIG5ldyB3ZWIgaW5zcGVjdG9yLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9BcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLnByb3RvdHlwZS5uZXR3b3JrU3RhdGVVcGRhdGVkKTogVXBkYXRlIHRoZSBvbmxpbmUgc3RhdGUsIGFuZCBhZGQgYSBGSVhNRSB0byBmaXJlIGFuIGV2ZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmFnZXIucHJvdG90eXBlLmdldCBvbmxpbmUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmFnZXIucHJvdG90eXBlLmFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNVcGRhdGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLnByb3RvdHlwZS5yZXF1ZXN0QXBwbGljYXRpb25DYWNoZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0FwcGxpY2F0aW9uQ2FjaGVPYnNlcnZlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVPYnNlcnZlci5wcm90b3R5cGUuY29uc3RydWN0b3IuV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVPYnNlcnZlci5hcHBsaWNhdGlvbkNhY2hlU3RhdHVzVXBkYXRlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlT2JzZXJ2ZXIucHJvdG90eXBlLm5ldHdvcmtTdGF0ZVVwZGF0ZWQpOgoKMjAxMi0wMi0wNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIEltcGxlbWVudCBOdW1iZXIuYnl0ZXNUb1N0cmluZy4KCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTA2NDI5NTM+IEltcGxlbWVudCBBcHBsaWNhdGlvbiBDYWNoZSBzaWRlYmFyIGl0ZW1zIGFuZCBjb250ZW50IHZpZXdzIGZvciBuZXcgd2ViIGluc3BlY3Rvci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVXRpbGl0aWVzLmpzOgogICAgICAgIChOdW1iZXIuc3RyaW5nX2FwcGVhcmVkX2hlcmUudmFsdWUpOgoKMjAxMi0wMi0wNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgbW9yZSBvZiBBcHBsaWNhdGlvbkZyYW1lQ29udGVudFZpZXcgd29yay4KCiAgICAgICAgQWRkIHNvbWUgc3R5bGluZywgYW5kIG1ha2Ugc29tZSBvZiB0aGUgY29kZSBpbiBBcHBsaWNhdGlvbkZyYW1lQ29udGVudFZpZXcgbWF0Y2ggb3VyIG1hbm5lcmlzbXMuIFRoZXJlIGFyZSBhIGNvdXBsZQogICAgICAgIHBsYWNlcyB3ZSBhc2sgdGhlIEFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyIGZvciBkYXRhLiBUaGVzZSBmdW5jdGlvbnMgZG9uJ3QgZXhpc3QgeWV0LCBidXQgdGhleSB3aWxsIGluIHRoZSBuZXh0IHBhdGNoLgoKICAgICAgICBNb3JlIG9mIDxyZGFyOi8vcHJvYmxlbS8xMDY0Mjk1Mz4gSW1wbGVtZW50IEFwcGxpY2F0aW9uIENhY2hlIHNpZGViYXIgaXRlbXMgYW5kIGNvbnRlbnQgdmlld3MgZm9yIG5ldyB3ZWIgaW5zcGVjdG9yLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9BcHBsaWNhdGlvbkNhY2hlRnJhbWVDb250ZW50Vmlldy5jc3M6IEFkZGVkLgogICAgICAgICguY29udGVudC12aWV3LmFwcGxpY2F0aW9uLWNhY2hlLWZyYW1lID4gLmRhdGEtZ3JpZCk6CiAgICAgICAgKC5jb250ZW50LXZpZXcuYXBwbGljYXRpb24tY2FjaGUtZnJhbWUgLmhpZGRlbik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0FwcGxpY2F0aW9uQ2FjaGVGcmFtZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZUZyYW1lQ29udGVudFZpZXcpOiBDcmVhdGUgb3VyIHZlcnNpb24gb2YgYW4gZW1wdHkgdmlldyBpbnN0ZWFkIG9mIG9wZW4gc291cmNlJ3MuIEFzayB0aGUgYXBwbGljYXRpb24KICAgICAgICAgICAgY2FjaGUgbWFuYWdlciBmb3IgZGF0YS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVGcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5zaG93bik6IFVzZSBvdXIgY29ycmVjdCBtZXRob2QgbmFtZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVGcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5oaWRkZW4pOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVGcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fbWF5YmVVcGRhdGUpOiBDaGVjayB0aGlzLnZpc2libGUgaW5zdGVhZCBvZiBpc1Zpc2libGUoKS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVGcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS51cGRhdGVTdGF0dXMpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVGcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fdXBkYXRlKTogQXNrIHRoZSBhcHBsaWNhdGlvbiBjYWNoZSBtYW5hZ2VyIGZvciBkYXRhLgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZUZyYW1lQ29udGVudFZpZXcucHJvdG90eXBlLl91cGRhdGVDYWxsYmFjayk6IFVzZSBvdXIgZnVuY3Rpb25zIHRvIGhpZGUgYW5kIHNob3cgdGhlIGVtcHR5IHZpZXdzIC8gZGF0YWdyaWRzLgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZUZyYW1lQ29udGVudFZpZXcucHJvdG90eXBlLl9jcmVhdGVEYXRhR3JpZCk6IERpdHRvLgoKMjAxMi0wMi0wNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIERvIHNvbWUgY2xlYW4tdXAgb2YgQXBwbGljYXRpb25DYWNoZUZyYW1lQ29udGVudFZpZXcuCgogICAgICAgIENoYW5nZSB0aGUgYXJndW1lbnQgaXQgdGFrZXMgdG8gYSByZXByZXNlbnRlZCBvYmplY3QsIGhhdmUgaXQgaW5oZXJpdCBmcm9tIENvbnRlbnRWaWV3LCBhbmQgcmVtb3ZlIGNhbGxzIHRvIGFkZC9yZW1vdmVTdHlsZUNsYXNzLgoKICAgICAgICBNb3JlIG9mIDxyZGFyOi8vcHJvYmxlbS8xMDY0Mjk1Mz4gSW1wbGVtZW50IEFwcGxpY2F0aW9uIENhY2hlIHNpZGViYXIgaXRlbXMgYW5kIGNvbnRlbnQgdmlld3MgZm9yIG5ldyB3ZWIgaW5zcGVjdG9yLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9BcHBsaWNhdGlvbkNhY2hlRnJhbWVDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVGcmFtZUNvbnRlbnRWaWV3KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVGcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fdXBkYXRlQ2FsbGJhY2spOgoKMjAxMi0wMi0wNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIEJyaW5nIGluIEFwcGxpY2F0aW9uQ2FjaGVJdGVtc1ZpZXcgZnJvbSBvcGVuIHNvdXJjZSBhcyBBcHBsaWNhdGlvbkNhY2hlRnJhbWVDb250ZW50Vmlldy4KCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTA2NDI5NTM+IEltcGxlbWVudCBBcHBsaWNhdGlvbiBDYWNoZSBzaWRlYmFyIGl0ZW1zIGFuZCBjb250ZW50IHZpZXdzIGZvciBuZXcgd2ViIGluc3BlY3Rvci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQXBwbGljYXRpb25DYWNoZUZyYW1lQ29udGVudFZpZXcuanM6IEFkZGVkLiBDb3BpZWQgZnJvbSBvcGVuIHNvdXJjZS4KCjIwMTItMDItMDcgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBBZGQgdHJlZSBlbGVtZW50cyBmb3IgYXBwbGljYXRpb24gY2FjaGUgbWFuaWZlc3RzIGFuZCBmcmFtZXMgdGhhdCBoYXZlIGFuIGFwcGxpY2F0aW9uIGNhY2hlLgoKICAgICAgICBXaGVuIHRoZSBkb2N1bWVudCBhZGRzIG9yIHJlbW92ZXMgZnJhbWVzIGZyb20gdGhlIGFwcGxpY2F0aW9uIGNhY2hlLCBBcHBsaWNhdGlvbkNhY2hlTWFuYWdlciBmaXJlcyBldmVudHMuIFRoZSBzdG9yYWdlIHNpZGViYXIKICAgICAgICBwYW5lbCBsaXN0ZW5zIGZvciB0aGVzZSBldmVudHMgYW5kIHVwZGF0ZXMgdGhlIHN0YXRlIG9mIHRoZSB0cmVlIGVsZW1lbnRzIGluIHRoZSBzaWRlYmFyIHBhbmVsLiBDdXJyZW50bHksIHdlIG9ubHkgYWRkCiAgICAgICAgc2lkZWJhciBpdGVtcywgYnV0IHJlbW92aW5nIHRoZW0gd2lsbCBiZSBhZGRlZCBpbiBhIGZ1dHVyZSBwYXRjaC4KCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTA2NDI5NTM+IEltcGxlbWVudCBBcHBsaWNhdGlvbiBDYWNoZSBzaWRlYmFyIGl0ZW1zIGFuZCBjb250ZW50IHZpZXdzIGZvciBuZXcgd2ViIGluc3BlY3Rvci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5wcm90b3R5cGUuX2ZyYW1lTWFuaWZlc3RVcGRhdGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLnByb3RvdHlwZS5fZnJhbWVNYW5pZmVzdFJlbW92ZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9TdG9yYWdlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZVNpZGViYXJQYW5lbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdG9yYWdlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fZnJhbWVNYW5pZmVzdEFkZGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9mcmFtZU1hbmlmZXN0UmVtb3ZlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdG9yYWdlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fc3RvcmFnZUNsZWFyZWQpOgoKMjAxMi0wMi0wNiAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIEFkZCB0cmVlIGVsZW1lbnRzIGZvciBhcHBsaWNhdGlvbiBjYWNoZSBmcmFtZXMgYW5kIGFwcGxpY2F0aW9uIGNhY2hlIG1hbmlmZXN0cy4KCiAgICAgICAgVGhleSBhcmVuJ3QgdXNlZCB5ZXQsIGJ1dCB3aWxsIGJlIHVzZWQgYnkgdGhlIFN0b3JhZ2VTaWRlYmFyUGFuZWwgaW4gYSBsYXRlciBwYXRjaC4KCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTA2NDI5NTM+IEltcGxlbWVudCBBcHBsaWNhdGlvbiBDYWNoZSBzaWRlYmFyIGl0ZW1zIGFuZCBjb250ZW50IHZpZXdzIGZvciBuZXcgd2ViIGluc3BlY3Rvci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQXBwbGljYXRpb25DYWNoZUZyYW1lVHJlZUVsZW1lbnQuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZUZyYW1lVHJlZUVsZW1lbnQpOiBCYXNpYyB0cmVlIGVsZW1lbnQgc3ViY2xhc3Mgd2l0aCBhIEZJWE1FIGZvciBhbiBpY29uLgogICAgICAgICogVXNlckludGVyZmFjZS9BcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3QuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3QucHJvdG90eXBlLmdldCB0aXRsZSk6IENhbGwgX2dlbmVyYXRlVGl0bGUgaWYgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdC5wcm90b3R5cGUuX2dlbmVyYXRlVGl0bGUpOiBUcnkgYW5kIGdldCBhIHRpdGxlIGZyb20gdGhlIG1hbmlmZXN0IFVSTCdzIGxhc3QgcGF0aCBjb21wb25lbnQsIGhvc3QKICAgICAgICAgICAgb3IgdGhlIHdob2xlIFVSTC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0VHJlZUVsZW1lbnQuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0VHJlZUVsZW1lbnQpOiBJbmhlcml0cyBmcm9tIFN0b3JhZ2VUcmVlRWxlbWVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFRyZWVFbGVtZW50LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0VHJlZUVsZW1lbnQuZ2V0IG5hbWUpOiBHZXQgdGhlCiAgICAgICAgICAgIHJlcHJlc2VudGVkIG9iamVjdCdzIHRpdGxlLgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0VHJlZUVsZW1lbnQucHJvdG90eXBlLmdldCBjYXRlZ29yeU5hbWUpOiByZXR1cm4gQXBwbGljYXRpb24gQ2FjaGUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogQWRkIG5ldyBmaWxlcy4KCjIwMTItMDItMDYgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBJbXBsZW1lbnQgdGhlIGNhbGxiYWNrIGZ1bmN0aW9ucyB3aGVuIHdlIGdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYXBwbGljYXRpb24gY2FjaGUuIFdlIGNyZWF0ZSB0aGUgbmVjZXNzYXJ5CiAgICAgICAgYXBwbGljYXRpb24gY2FjaGUgb2JqZWN0cyBub3csIGJ1dCBkb24ndCBjcmVhdGUgdHJlZSBlbGVtZW50cyBvciBub3RpZnkgdGhlIHN0b3JhZ2Ugc2lkZWJhciBwYW5lbCBhYm91dCB0aGVtCiAgICAgICAgeWV0LgoKICAgICAgICBNb3JlIG9mIDxyZGFyOi8vcHJvYmxlbS8xMDY0Mjk1Mz4gSW1wbGVtZW50IEFwcGxpY2F0aW9uIENhY2hlIHNpZGViYXIgaXRlbXMgYW5kIGNvbnRlbnQgdmlld3MgZm9yIG5ldyB3ZWIgaW5zcGVjdG9yLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9BcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyKTogTGlzdGVuIGZvciB3aGVuIGNoaWxkIGZyYW1lcyBhcmUgcmVtb3ZlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuaW5pdGlhbGl6ZSk6IEdldCB0aGUKICAgICAgICAgICAgZnJhbWVzIHdpdGggYXBwbGljYXRpb24gY2FjaGVzIGhlcmUuLgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmFnZXIucHJvdG90eXBlLl9tYWluUmVzb3VyY2VEaWRDaGFuZ2UpOiAuLiBJbnN0ZWFkIG9mIGhlcmUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5wcm90b3R5cGUuX2NoaWxkRnJhbWVXYXNSZW1vdmVkKTogQ2FsbCBfZnJhbWVNYW5pZmVzdFJlbW92ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5wcm90b3R5cGUuX21hbmlmZXN0Rm9yRnJhbWVMb2FkZWQpOiBJZiB0aGUgZnJhbWUgZG9lc24ndCBoYXZlIGEgbWFuaWZlc3QgVVJMLAogICAgICAgICAgICBjYWxsIF9mcmFtZU1hbmlmZXN0UmVtb3ZlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLnByb3RvdHlwZS5fZnJhbWVzV2l0aE1hbmlmZXN0c0xvYWRlZCk6IENhbGwgX2ZyYW1lTWFuaWZlc3RVcGRhdGVkIGZvciBhbGwgZnJhbWVzCiAgICAgICAgICAgIHRoYXQgaGF2ZSBtYW5pZmVzdHMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5wcm90b3R5cGUuX2ZyYW1lTWFuaWZlc3RVcGRhdGVkKTogQ3JlYXRlIGEgZnJhbWUgbWFuaWZlc3Qgb2JqZWN0IGlmIGl0IGlzIG5lY2Vzc2FyeSwKICAgICAgICAgICAgYW5kIGFkZCBGSVhNRXMgdG8gZmlyZSBzb21lIGV2ZW50cyBhYm91dCB0aGUgYXBwbGljYXRpb24gY2FjaGUgc3RhdGUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5wcm90b3R5cGUuX2ZyYW1lTWFuaWZlc3RSZW1vdmVkKTogUmVtb3ZlIHRoZSBtYW5pZmVzdCBvYmplY3QgZm9yIHRoaXMgZnJhbWUuCgoyMDEyLTAyLTA2ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIEFwcGxpY2F0aW9uQ2FjaGVGcmFtZSBhbmQgQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0LiBUaGVzZSBhcmUganVzdCBzaW1wbGUgb2JqZWN0cyB0aGF0IHdyYXAgYSBmZXcgcHJvcGVydGllcy4KCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTA2NDI5NTM+IEltcGxlbWVudCBBcHBsaWNhdGlvbiBDYWNoZSBzaWRlYmFyIGl0ZW1zIGFuZCBjb250ZW50IHZpZXdzIGZvciBuZXcgd2ViIGluc3BlY3Rvci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQXBwbGljYXRpb25DYWNoZUZyYW1lLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVGcmFtZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlRnJhbWUucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlRnJhbWUuZ2V0IGZyYW1lKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVGcmFtZS5wcm90b3R5cGUuZ2V0IG1hbmlmZXN0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVGcmFtZS5wcm90b3R5cGUuZ2V0IHN0YXR1cyk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0FwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3QpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0LmdldCBtYW5pZmVzdFVSTCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKCjIwMTItMDItMDYgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBBZGQgQXBwbGljYXRpb25DYWNoZU1hbmFnZXIsIGFuZCBoYXZlIGl0IGxpc3RlbiBmb3Igd2hlbiBmcmFtZXMgbmF2aWdhdGUsIGFuZCBjYWxsIHNvbWUgQXBwbGljYXRpb25DYWNoZUFnZW50CiAgICAgICAgbWV0aG9kcyB0byBnZXQgZGF0YSBmcm9tIFdlYkNvcmUuCgogICAgICAgIFdlIGRvbid0IGRvIGFueXRoaW5nIHdpdGggdGhpcyBkYXRhIHlldCwgYnV0IHdpbGwgaW4gZm9sbG93LXVwIHBhdGNoZXMuCgogICAgICAgIFBhcnQgb2YgPHJkYXI6Ly9wcm9ibGVtLzEwNjQyOTUzPiBJbXBsZW1lbnQgQXBwbGljYXRpb24gQ2FjaGUgc2lkZWJhciBpdGVtcyBhbmQgY29udGVudCB2aWV3cyBmb3IgbmV3IHdlYiBpbnNwZWN0b3IuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyKTogSW5pdGlhbGl6ZSB0aGUgQXBwbGljYXRpb25DYWNoZUFnZW50LCBhbmQgYWRkIGEgbGlzdGVuZXIgZm9yIHdoZW4gZnJhbWVzIG5hdmlnYXRlLgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5pbml0aWFsaXplKTogQ2xlYXIgb3VyIChhbHdheXMgZW1wdHkpCiAgICAgICAgICAgIGxpc3Qgb2YgYXBwbGljYXRpb24gY2FjaGUgb2JqZWN0cy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLnByb3RvdHlwZS5fbWFpblJlc291cmNlRGlkQ2hhbmdlKTogR2V0IHRoZSBsaXN0IG9mIGZyYW1lcyB3aXRoIGFwcGxpY2F0aW9uIGNhY2hlcyBpZiB0aGUgbWFpbiBmcmFtZQogICAgICAgICAgICBuYXZpZ2F0ZWQuIElmIGl0IHdhcyBhIHN1YmZyYW1lLCBjaGVjayB0aGUgc3RhdHVzIG9mIHRoZSBhcHBsaWNhdGlvbiBjYWNoZSBmb3IgdGhlIHN1YmZyYW1lLgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmFnZXIucHJvdG90eXBlLl9tYW5pZmVzdEZvckZyYW1lTG9hZGVkKTogU3R1Yi4KICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLnByb3RvdHlwZS5fZnJhbWVzV2l0aE1hbmlmZXN0c0xvYWRlZCk6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEFkZCBuZXcgZmlsZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOiBDcmVhdGUgYW4gQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuCgoyMDEyLTAyLTA2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgU2hvdyB0aGUgZnVsbCBVUkwgaW4gdGhlIHRvb2wgdGlwIGZvciByZXNvdXJjZXMgaW4gdGhlIFdlYiBJbnNwZWN0b3IuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDI1OTAyMD4gSW1wcm92ZSBXZWIgSW5zcGVjdG9yJ3MgdmlldyBvZiBwZXItcGFnZSByZXNvdXJjZXMgZW5vdWdoIHRoYXQgQWN0aXZpdHkgd2luZG93IGNhbiBiZSBlbGltaW5hdGVkCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fdXBkYXRlUmVzb3VyY2UpOiBDYWxsIF91cGRhdGVUb29sVGlwLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlRWxlbWVudC5wcm90b3R5cGUuX3VwZGF0ZVRvb2xUaXApOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZUVsZW1lbnQucHJvdG90eXBlLl91cmxEaWRDaGFuZ2UpOiBDYWxsIF91cGRhdGVUb29sVGlwLgoKMjAxMi0wMi0wNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgZG91YmxlLWNsaWNrIGluIHRoZSBXZWIgSW5zcGVjdG9yIFJlc291cmNlIHNpZGViYXIgb3BlbiB0aGUgcmVzb3VyY2UgaW4gYSBuZXcgU2FmYXJpIHRhYi93aW5kb3cuCgogICAgICAgIFRoaXMgaXMgbGlrZSB0aGUgQWN0aXZpdHkgd2luZG93LCB3aGljaCB3ZSB3YW50IHRvIHJlcGxhY2Ugd2l0aCB0aGUgbmV3IFdlYiBJbnNwZWN0b3IuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDI1OTAyMD4gSW1wcm92ZSBXZWIgSW5zcGVjdG9yJ3MgdmlldyBvZiBwZXItcGFnZSByZXNvdXJjZXMgZW5vdWdoIHRoYXQgQWN0aXZpdHkgd2luZG93IGNhbiBiZSBlbGltaW5hdGVkCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVFbGVtZW50LnByb3RvdHlwZS5vbmRibGNsaWNrKTogQWRkZWQuCgoyMDEyLTAyLTA2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IGFuIGVycm9yIG9uIHJlbG9hZCBpbiB0aGUgV2ViIEluc3BlY3RvciB3aGVyZSB0aGUgbWFpbiByZXNvdXJjZSB3b3VsZCBub3QgYmUgbWFya2VkIGFzIGZpbmlzaGVkLCBzbyB0aGUgc291cmNlCiAgICAgICAgd291bGQgbmV2ZXIgZGlzcGxheSBhbmQgdGhlIHNwaW5uZXIgaW4gdGhlIHNpZGViYXIgd291bGQgbmV2ZXIgZ28gYXdheS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWVSZXNvdXJjZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUuX2FkZE5ld1Jlc291cmNlVG9GcmFtZSk6IE9ubHkgcmV1c2UgdGhlIG1haW4gcmVzb3VyY2UKICAgICAgICBvciBwcm92aXNpb25hbCBtYWluIHJlc291cmNlIGlmIHRoZSBsb2FkZXIgaWRlbnRpZmllcnMgbWF0Y2guCgoyMDEyLTAyLTA2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgU2hvdyBhIHNwaW5uZXIgaW4gcmVzb3VyY2UgY29udGVudCB2aWV3cyB3aGlsZSB3YWl0aW5nIGZvciBjb250ZW50IHRvIGJlY29tZSBhdmFpbGFibGUuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDI1OTAyMD4gSW1wcm92ZSBXZWIgSW5zcGVjdG9yJ3MgdmlldyBvZiBwZXItcGFnZSByZXNvdXJjZXMgZW5vdWdoIHRoYXQgQWN0aXZpdHkgd2luZG93IGNhbiBiZSBlbGltaW5hdGVkCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VDb250ZW50Vmlldy5jc3M6IEFkZGVkLgogICAgICAgICguY29udGVudC12aWV3LnJlc291cmNlID4gLmluZGV0ZXJtaW5hdGUtcHJvZ3Jlc3Mtc3Bpbm5lcik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZUNvbnRlbnRWaWV3KTogQXBwZW5kIGEgc3Bpbm5lci4KCjIwMTItMDItMDYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBTaG93IGEgcHJvZ3Jlc3Mgc3Bpbm5lciBpbiB0aGUgUmVzb3VyY2Ugc2lkZWJhciBuZXh0IHRvIHJlc291cmNlcyB0aGF0IGFyZSBzdGlsbCBsb2FkaW5nLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAyNTkwMjA+IEltcHJvdmUgV2ViIEluc3BlY3RvcidzIHZpZXcgb2YgcGVyLXBhZ2UgcmVzb3VyY2VzIGVub3VnaCB0aGF0IEFjdGl2aXR5IHdpbmRvdyBjYW4gYmUgZWxpbWluYXRlZAoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9HZW5lcmFsVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5HZW5lcmFsVHJlZUVsZW1lbnQpOiBJbml0aWFsaXplIHN0YXR1cyB0byAiIi4KICAgICAgICAoV2ViSW5zcGVjdG9yLkdlbmVyYWxUcmVlRWxlbWVudC5wcm90b3R5cGUuZ2V0IHN0YXR1cyk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuR2VuZXJhbFRyZWVFbGVtZW50LnByb3RvdHlwZS5zZXQgc3RhdHVzKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5HZW5lcmFsVHJlZUVsZW1lbnQucHJvdG90eXBlLm9uYXR0YWNoKTogQ2FsbCBfdXBkYXRlU3RhdHVzRWxlbWVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkdlbmVyYWxUcmVlRWxlbWVudC5wcm90b3R5cGUuX2NyZWF0ZUVsZW1lbnRzSWZOZWVkZWQpOiBDcmVhdGUgdGhlIHN0YXR1cyBlbGVtZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuR2VuZXJhbFRyZWVFbGVtZW50LnByb3RvdHlwZS5fdXBkYXRlU3RhdHVzRWxlbWVudCk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvSW5kZXRlcm1pbmF0ZVByb2dyZXNzU3Bpbm5lcjEucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0luZGV0ZXJtaW5hdGVQcm9ncmVzc1NwaW5uZXIxMC5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvSW5kZXRlcm1pbmF0ZVByb2dyZXNzU3Bpbm5lcjExLnBkZjogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9JbmRldGVybWluYXRlUHJvZ3Jlc3NTcGlubmVyMTIucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0luZGV0ZXJtaW5hdGVQcm9ncmVzc1NwaW5uZXIyLnBkZjogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9JbmRldGVybWluYXRlUHJvZ3Jlc3NTcGlubmVyMy5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvSW5kZXRlcm1pbmF0ZVByb2dyZXNzU3Bpbm5lcjQucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0luZGV0ZXJtaW5hdGVQcm9ncmVzc1NwaW5uZXI1LnBkZjogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9JbmRldGVybWluYXRlUHJvZ3Jlc3NTcGlubmVyNi5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvSW5kZXRlcm1pbmF0ZVByb2dyZXNzU3Bpbm5lcjcucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0luZGV0ZXJtaW5hdGVQcm9ncmVzc1NwaW5uZXI4LnBkZjogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9JbmRldGVybWluYXRlUHJvZ3Jlc3NTcGlubmVyOS5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbmRldGVybWluYXRlUHJvZ3Jlc3NTcGlubmVyLmNzczogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luZGV0ZXJtaW5hdGVQcm9ncmVzc1NwaW5uZXIuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5kZXRlcm1pbmF0ZVByb2dyZXNzU3Bpbm5lcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5JbmRldGVybWluYXRlUHJvZ3Jlc3NTcGlubmVyLnByb3RvdHlwZS5nZXQgZWxlbWVudCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvblNpZGViYXJQYW5lbC5jc3M6CiAgICAgICAgKC5uYXZpZ2F0aW9uLXNpZGViYXItcGFuZWwtY29udGVudC10cmVlLW91dGxpbmUgLml0ZW0gLnN0YXR1cyk6CiAgICAgICAgKC5uYXZpZ2F0aW9uLXNpZGViYXItcGFuZWwtY29udGVudC10cmVlLW91dGxpbmUgLml0ZW0gLnN0YXR1czplbXB0eSk6CiAgICAgICAgKC5uYXZpZ2F0aW9uLXNpZGViYXItcGFuZWwtY29udGVudC10cmVlLW91dGxpbmUgLml0ZW0uc21hbGwgLnN0YXR1cyk6CiAgICAgICAgKC5uYXZpZ2F0aW9uLXNpZGViYXItcGFuZWwtY29udGVudC10cmVlLW91dGxpbmUgLml0ZW0uc21hbGwgLnN0YXR1cyAuaW5kZXRlcm1pbmF0ZS1wcm9ncmVzcy1zcGlubmVyKToKICAgICAgICAoLm5hdmlnYXRpb24tc2lkZWJhci1wYW5lbC1jb250ZW50LXRyZWUtb3V0bGluZSAuaXRlbS5zbWFsbC50d28tbGluZSAuc3RhdHVzKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZUVsZW1lbnQucHJvdG90eXBlLl91cGRhdGVSZXNvdXJjZSk6IEFkZCBldmVudCBsaXN0ZW5lcnMgYW5kIGNhbGwgX3VwZGF0ZUxvYWRpbmdTdGF0dXMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fdXBkYXRlTG9hZGluZ1N0YXR1cyk6IEFkZGVkLiBTZXRzIHN0YXR1cyB0byBhIHNwaW5uZXIgd2hlbiBsb2FkaW5nLgoKMjAxMi0wMi0wNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFVzZSBQREZzIGZvciB0aGUgdXNlciBpbnB1dCBwcm9tcHQgYW5kIHJlc3VsdCBpY29ucy4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwNjQzMTc1PiBEYXRhR3JpZCBhbmQgdGhlIERPTSB0cmVlIGFuZCB0aGUgQ29uc29sZSBzaG91bGQgYmUgSGlEUEkgY29tcGxpYW50CgogICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCgogICAgICAgICogVXNlckludGVyZmFjZS9EYXRhYmFzZUNvbnRlbnRWaWV3LmNzczoKICAgICAgICAoLmRhdGFiYXNlLXF1ZXJ5LXByb21wdDo6YmVmb3JlKTogVXNlIFVzZSBVc2VySW5wdXRQcm9tcHQucGRmLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvVXNlcklucHV0UHJvbXB0LnBkZjogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Vc2VySW5wdXRSZXN1bHQucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL3VzZXJJbnB1dEljb24ucG5nOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvdXNlcklucHV0UmVzdWx0SWNvbi5wbmc6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ0NvbnRlbnRWaWV3LmNzczoKICAgICAgICAoI2NvbnNvbGUtcHJvbXB0OjpiZWZvcmUpOiBVc2UgVXNlcklucHV0UHJvbXB0LnBkZi4KICAgICAgICAoLmNvbnNvbGUtdXNlci1jb21tYW5kLXJlc3VsdC5jb25zb2xlLWxvZy1sZXZlbDo6YmVmb3JlKTogVXNlIFVzZXJJbnB1dFJlc3VsdC5wZGYuCgoyMDEyLTAyLTA0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgVXNlIFBERnMgZm9yIHRoZSBlcnJvciBhbmQgd3JuaW5nIGljb25zLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTA2NDMxNzU+IERhdGFHcmlkIGFuZCB0aGUgRE9NIHRyZWUgYW5kIHRoZSBDb25zb2xlIHNob3VsZCBiZSBIaURQSSBjb21wbGlhbnQKCiAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFiYXNlQ29udGVudFZpZXcuY3NzOgogICAgICAgICguZGF0YWJhc2UtcXVlcnktcmVzdWx0LmVycm9yOjpiZWZvcmUpOiBVc2UgRXJyb3JTbWFsbC5wZGYuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9FcnJvclNtYWxsLnBkZjogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9XYXJuaW5nU21hbGwucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL2Vycm9ySWNvbi5wbmc6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy93YXJuaW5nSWNvbi5wbmc6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ0NvbnRlbnRWaWV3LmNzczoKICAgICAgICAoLmNvbnNvbGUtZXJyb3ItbGV2ZWw6OmJlZm9yZSk6IFVzZSBFcnJvclNtYWxsLnBkZi4KICAgICAgICAoLmNvbnNvbGUtd2FybmluZy1sZXZlbDo6YmVmb3JlKTogVXNlIFdhcm5pbmdTbWFsbC5wZGYuCgoyMDEyLTAyLTA0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUmVtb3ZlIHVudXNlZCBjb2RlIGFuZCBpbWFnZXMgZnJvbSB0aGUgbG9nIGNvbnRlbnQgdmlldyBmb3Igc3RhdHVzIGJhciBpdGVtcyBhbmQgZmlsdGVyaW5nLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvZGVsZXRlSWNvbi5wbmc6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9zZWFyY2hTbWFsbEJyaWdodEJsdWUucG5nOiBSZW1vdmVkLgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dDb250ZW50Vmlldy5jc3M6CiAgICAgICAgKC5jb25zb2xlLWRlYnVnLWxldmVsOjpiZWZvcmUpOiBVc2UgYSBiYWNrZ3JvdW5kIGNvbG9yIGluc3RlYWQgb2YgYW4gaW1hZ2UuIFRoZSBkZWJ1ZwogICAgICAgIGxldmVsIGlzIG5vdCB1c2VkIGJ5IHRoZSBuZXcgV2ViIEluc3BlY3Rvci4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldyk6IFJlbW92ZWQgY3JlYXRpb24gY29kZSBmb3Igc3RhdHVzIGJhciBpdGVtcyBhbmQgZmlsdGVyaW5nLgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLmV2YWxJbkluc3BlY3RlZFdpbmRvdyk6IFBhc3MgdW5kZWZpbmVkIGZvciB0aGUgY29udGV4dC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2VjdGlvbi5jc3M6CiAgICAgICAgKC5zZWN0aW9uIC5wcm9wZXJ0aWVzIC5kZWxldGUtYnV0dG9uKTogUmVtb3ZlZC4KICAgICAgICAoLnNlY3Rpb24gLnByb3BlcnRpZXMgbGkuaG92ZXJlZCAuZGVsZXRlLWJ1dHRvbik6IFJlbW92ZWQuCgoyMDEyLTAyLTA0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgVXBkYXRlIExvZ0NvbnRlbnRWaWV3IHRvIHdvcmsgd2l0aCB0aGUgbmV3IFdlYiBJbnNwZWN0b3IncyBDb250ZW50VmlldyBpbnN0ZWFkIG9mIHRoZSBvbGQgVmlldy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuaGlkZGVuKTogUmVuYW1lZCBmcm9tIHdpbGxIaWRlLiBDYWxsIHN0b3JlU2Nyb2xsUG9zaXRpb25zLgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLnNob3duKTogUmVuYW1lZCBmcm9tIHdpbGxTaG93LiBNZXJnZWQgd2l0aCBhZnRlclNob3cuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuc3RvcmVTY3JvbGxQb3NpdGlvbnMpOiBSZW1vdmVkIFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlwZSBjYWxsLgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLnJlc3RvcmVTY3JvbGxQb3NpdGlvbnMpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS51cGRhdGVMYXlvdXQpOiBSZW5hbWVkIGZyb20gb25SZXNpemUuCgoyMDEyLTAyLTA0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSB0aGUgIlNob3cgRXJyb3IgQ29uc29sZSIgZGV2ZWxvcCBtZW51IGl0ZW0gd29yayB3aXRoIHRoZSBuZXcgV2ViIEluc3BlY3Rvci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudEJyb3dzZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuZ2V0IGN1cnJlbnRDb250ZW50Vmlldyk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIucHJvdG90eXBlLmNhbkdvQmFjayk6IFVzZSB0aGlzLmN1cnJlbnRDb250ZW50Vmlldy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyLnByb3RvdHlwZS5jYW5Hb0ZvcndhcmQpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyLnByb3RvdHlwZS5nb0JhY2spOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyLnByb3RvdHlwZS5nb0ZvcndhcmQpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyLnByb3RvdHlwZS5fY29udGVudFZpZXdTZWxlY3Rpb25QYXRoQ29tcG9uZW50RGlkQ2hhbmdlKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuX2N1cnJlbnRDb250ZW50Vmlld0RpZENoYW5nZSk6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9JbnNwZWN0b3JGcm9udGVuZEFQSS5qczoKICAgICAgICAoSW5zcGVjdG9yRnJvbnRlbmRBUEkuc2hvd0NvbnNvbGUpOiBDYWxsIExvZ1NpZGViYXJQYW5lbC5zaG93Q3VycmVudExvZy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nU2lkZWJhclBhbmVsLnByb3RvdHlwZS5zaG93Q3VycmVudExvZyk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9tYWluRnJhbWVEaWRDaGFuZ2UpOiBEb24ndCBzZWxlY3QgdGhlIG1haW4gZnJhbWUKICAgICAgICBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgY29udGVudCB2aWV3IHNob3dpbmcuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX21haW5GcmFtZU1haW5SZXNvdXJjZURpZENoYW5nZS5kZWxheWVkV29yayk6IERpdHRvLgoKMjAxMi0wMi0wNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEZpeCBhbiBpbmZpbml0ZSBsb29wIHdoZW4gZG9pbmcgIlNob3cgRXJyb3IgQ29uc29sZSIgb3IgYW55IG9mIHRoZSBJbnNwZWN0b3IgZGV2ZWxvcCBtZW51IGl0ZW1zLgoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA4MDEzNTk+IEhpdHRpbmcgQ21kLU9wdC1DIChEZXZlbG9wIC0+IFNob3cgRXJyb3IgQ29uc29sZSkgY2F1c2VzIFdlYlByb2Nlc3MKICAgICAgICB0byBmcmVhayBvdXQgKDEwMCUgQ1BVLCBHQnMgb2YgUkFNKQoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9JbnNwZWN0b3JGcm9udGVuZEFQSS5qczoKICAgICAgICAoSW5zcGVjdG9yRnJvbnRlbmRBUEkubG9hZENvbXBsZXRlZCk6IFNldCBfbG9hZGVkIGJlZm9yZSBjYWxsaW5nIGRpc3BhdGNoLCBvdGhlcndpc2UgZGlzcGF0Y2gKICAgICAgICB3aWxsIGtlZXAgYXBwZW5kIGNvbW1hbmRzIHRvIF9wZW5kaW5nQ29tbWFuZHMgYW5kIHRoZSBmb3IgbG9vcCB3aWxsIG5ldmVyIGZpbmlzaC4KCjIwMTItMDItMDIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgdGhlIEJveCBNb2RlbCB0byB0aGUgQXBwZWFyYW5jZSBkZXRhaWxzIHNpZGViYXIgcGFuZWwuCgogICAgICAgIExhc3QgcGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTM2PiBJbXBsZW1lbnQgdGhlIE1ldHJpY3MgaW5zcGVjdG9yIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0FwcGVhcmFuY2VEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwZWFyYW5jZURldGFpbHNTaWRlYmFyUGFuZWwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwZWFyYW5jZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9yZWZyZXNoQm94TW9kZWwpOgogICAgICAgICogVXNlckludGVyZmFjZS9Cb3hNb2RlbERldGFpbHNTZWN0aW9uUm93LmNzczogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0JveE1vZGVsRGV0YWlsc1NlY3Rpb25Sb3cuanM6IENvcGllZCBmcm9tIE9wZW5Tb3VyY2UvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9NZXRyaWNzU2lkZWJhclBhbmUuanMuCiAgICAgICAgTW9kaWZpZWQgdG8gdXNlIERPTVRyZWVNYW5hZ2VyIGFuZCBDU1NTdHlsZU1hbmFnZXIgYW5kIG90aGVyIG1pbm9yIHJlbmFtZXMgdG8gd29yayBpbiB0aGUgbmV3IGluc3BlY3Rvci4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3RvdHlwZS5nZXQgZm9yY2VkUHNldWRvQ2xhc3Nlcyk6IEFkZGVkIHN0dWIgd2l0aCBGSVhNRS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlZCBCb3hNb2RlbERldGFpbHNTZWN0aW9uUm93Lntjc3MsanN9LgoKMjAxMi0wMi0wMiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBXZWJJbnNwZWN0b3IuQXBwZWFyYW5jZURldGFpbHNTaWRlYmFyUGFuZWwsIGZ1dHVyZSBob21lIGZvciB0aGUgYm94LW1vZGVsIGRpYWdyYW0uCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxOTUzNj4gSW1wbGVtZW50IHRoZSBNZXRyaWNzIGluc3BlY3RvciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9BcHBlYXJhbmNlRGV0YWlsc1NpZGViYXJQYW5lbC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5BcHBlYXJhbmNlRGV0YWlsc1NpZGViYXJQYW5lbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5BcHBlYXJhbmNlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUucmVmcmVzaCk6IENhbGwgX3JlZnJlc2hCb3hNb2RlbC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGVhcmFuY2VEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVmcmVzaEJveE1vZGVsKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlZCBBcHBlYXJhbmNlRGV0YWlsc1NpZGViYXJQYW5lbC5qcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXBwZWFyYW5jZURldGFpbHNTaWRlYmFyUGFuZWwuCgoyMDEyLTAyLTAyICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUmVwbGFjZSBXZWJJbnNwZWN0b3IuZG9tQWdlbnQgdXNlIHdpdGggV2ViSW5zcGVjdG9yLmRvbVRyZWVNYW5hZ2VyLgoKICAgICAgICBOZWVkZWQgZm9yOgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDMxOTUyMD4gSW1wbGVtZW50IHRoZSBTdHlsZSBpbnNwZWN0b3IgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTAzMTk1MzY+IEltcGxlbWVudCB0aGUgTWV0cmljcyBpbnNwZWN0b3IgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3RvdHlwZS5zZXRSdWxlU2VsZWN0b3IuY2FsbGJhY2spOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3RvdHlwZS5hZGRSdWxlLmNhbGxiYWNrKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5cGUuX293bmVyRG9jdW1lbnRJZCk6CgoyMDEyLTAyLTAyICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQ3JlYXRlIGEgc2luZ2VsdG9uIFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIgaW5zdGFuY2UuCgogICAgICAgIE5lZWRlZCBmb3I6CiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTIwPiBJbXBsZW1lbnQgdGhlIFN0eWxlIGluc3BlY3RvciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDMxOTUzNj4gSW1wbGVtZW50IHRoZSBNZXRyaWNzIGluc3BlY3RvciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6CgoyMDEyLTAyLTAyICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwgdG8gV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci4KCiAgICAgICAgQWxzbyByZW5hbWUgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwuRXZlbnRzIHRvIFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIuRXZlbnQKICAgICAgICBhbmQgZGVsZXRlIHNvbWUgY2FsbHMgaW4gdGhlIENTU1N0eWxlTWFuYWdlciBjb25zdHJ1Y3RvciB3ZSBkb24ndCBuZWVkLgoKICAgICAgICBOZWVkZWQgZm9yOgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDMxOTUyMD4gSW1wbGVtZW50IHRoZSBTdHlsZSBpbnNwZWN0b3IgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTAzMTk1MzY+IEltcGxlbWVudCB0aGUgTWV0cmljcyBpbnNwZWN0b3IgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wYXJzZVJ1bGVBcnJheVBheWxvYWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3RvdHlwZS5nZXRNYXRjaGVkU3R5bGVzQXN5bmMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3RvdHlwZS5tZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlLl9maXJlU3R5bGVTaGVldENoYW5nZWQuaWYpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3RvdHlwZS5fZmlyZVN0eWxlU2hlZXRDaGFuZ2VkLm15Y2FsbGJhY2spOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3RvdHlwZS5fZmlyZVN0eWxlU2hlZXRDaGFuZ2VkKToKCjIwMTItMDItMDIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBDb3B5IG92ZXIgY2xhc3NlcyBmcm9tIG9wZW4gc291cmNlJ3MgQ1NTU3R5bGVNb2RlbC5qcy4KCiAgICAgICAgTmVlZGVkIGZvcjoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTAzMTk1MjA+IEltcGxlbWVudCB0aGUgU3R5bGUgaW5zcGVjdG9yIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTM2PiBJbXBsZW1lbnQgdGhlIE1ldHJpY3MgaW5zcGVjdG9yIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU01lZGlhLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU01lZGlhKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU01lZGlhLnBhcnNlUGF5bG9hZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NNZWRpYS5wYXJzZU1lZGlhQXJyYXlQYXlsb2FkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTUHJvcGVydHkuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucGFyc2VQYXlsb2FkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5nZXQgcHJvcGVydHlUZXh0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5nZXQgaXNMaXZlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5nZXQgYWN0aXZlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5nZXQgc3R5bGVCYXNlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUuZ2V0IGluYWN0aXZlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5nZXQgZGlzYWJsZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90eXBlLnNldFRleHQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90eXBlLnNldFRleHQuY2FsbGJhY2spOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90eXBlLnNldFZhbHVlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5zZXREaXNhYmxlZC5jYWxsYmFjayk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUuc2V0RGlzYWJsZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NSdWxlLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1J1bGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUnVsZS5wYXJzZVBheWxvYWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUnVsZS5wcm90b3R5cGUuZ2V0IGlzVXNlckFnZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1J1bGUucHJvdG90eXBlLmdldCBpc1VzZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUnVsZS5wcm90b3R5cGUuZ2V0IGlzVmlhSW5zcGVjdG9yKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1J1bGUucHJvdG90eXBlLmdldCBpc1JlZ3VsYXIpOgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZURlY2xhcmF0aW9uLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5idWlsZFNob3J0aGFuZFZhbHVlTWFwKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucGFyc2VQYXlsb2FkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucGFyc2VDb21wdXRlZFN0eWxlUGF5bG9hZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZS5nZXQgYWxsUHJvcGVydGllcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZS5nZXRMaXZlUHJvcGVydHkpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUuZ2V0UHJvcGVydHlWYWx1ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZS5nZXRQcm9wZXJ0eVByaW9yaXR5KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLmdldFByb3BlcnR5U2hvcnRoYW5kKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLmlzUHJvcGVydHlJbXBsaWNpdCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZS5zdHlsZVRleHRXaXRoU2hvcnRoYW5kcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZS5nZXRMb25naGFuZFByb3BlcnRpZXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUuZ2V0U2hvcnRoYW5kVmFsdWUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUuZ2V0U2hvcnRoYW5kUHJpb3JpdHkpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUucHJvcGVydHlBdCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZS5wYXN0TGFzdFNvdXJjZVByb3BlcnR5SW5kZXgpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUubmV3QmxhbmtQcm9wZXJ0eSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZS5pbnNlcnRQcm9wZXJ0eUF0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLmFwcGVuZFByb3BlcnR5KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ1NTU3R5bGVNYW5hZ2VyLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wYXJzZVJ1bGVBcnJheVBheWxvYWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUuZ2V0TWF0Y2hlZFN0eWxlc0FzeW5jKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwucHJvdG90eXBlLmdldENvbXB1dGVkU3R5bGVBc3luYyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlwZS5nZXRJbmxpbmVTdHlsZXNBc3luYyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlwZS5zZXRSdWxlU2VsZWN0b3IpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUuc2V0UnVsZVNlbGVjdG9yLmNhbGxiYWNrKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwucHJvdG90eXBlLmFkZFJ1bGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUuYWRkUnVsZS5jYWxsYmFjayk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlwZS5tZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlwZS5fb3duZXJEb2N1bWVudElkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwucHJvdG90eXBlLl9maXJlU3R5bGVTaGVldENoYW5nZWQuaWYpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUuX2ZpcmVTdHlsZVNoZWV0Q2hhbmdlZC5teWNhbGxiYWNrKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwucHJvdG90eXBlLl9maXJlU3R5bGVTaGVldENoYW5nZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUuc2V0U3R5bGVTaGVldFRleHQpOgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTdHlsZVNoZWV0LmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlU2hlZXQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVTaGVldC5jcmVhdGVGb3JJZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZVNoZWV0LnByb3RvdHlwZS5nZXRUZXh0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlU2hlZXQucHJvdG90eXBlLnNldFRleHQpOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CgoyMDEyLTAyLTAyICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IGFzc2VydHMgaW4gdGhlIFdlYiBJbnNwZWN0b3Igd2hlbiBsb2FkaW5nIGEgbG9vcGluc2lnaHQuY29tIGFydGljbGUuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5GcmFtZS5pbml0aWFsaXplKTogRG9uJ3QgZGlzYXNzb2NpYXRlIGZyb20gdGhlCiAgICAgICAgb2xkIG1haW4gcmVzb3VyY2UgaWYgaXQgZGlkbid0IGNoYW5nZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lLnByb3RvdHlwZS5jb21taXRQcm92aXNpb25hbExvYWQpOiBEaXR0by4KCjIwMTItMDItMDEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBGaXggaXNzdWUgd2hlcmUgbG9nIHZpZXdzIHdvdWxkIGRyYXcgb3ZlciB0aGUgcHJldmlvdXMgbG9nIHZpZXcgb24gcmVsb2FkLgogICAgICAgIFRoaXMgZml4ZXMgYSBidW5jaCBvZiBhc3NlcnRzIHRoYXQgQ29udGVudFZpZXdDb250YWluZXIgd2FzIHNwZXdpbmcuCgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDMxODc4ND4gSW1wbGVtZW50IHRoZSBMb2cgc2lkZWJhciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZW50Vmlld0NvbnRhaW5lci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3Q29udGFpbmVyLnByb3RvdHlwZS5jbG9zZUFsbENvbnRlbnRWaWV3c09mUHJvdG90eXBlKTogRGVjcmVtZW50IHRoZQogICAgICAgIGN1cnJlbnRJbmRleCB3aGVuIGl0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBpLgoKMjAxMi0wMS0zMSAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIEFkZCBEYXRhYmFzZUNvbnRlbnRWaWV3Lntqc3xjc3N9LiBUaGVzZSB3ZXJlIHRha2VuIGZyb20gb3BlbiBzb3VyY2UsIHdpdGggYSBmZXcgbW9kaWZpY2F0aW9ucy4KCiAgICAgICAgUmVzdCBvZiA8cmRhcjovL3Byb2JsZW0vMTA2ODQ2Nzk+IEltcGxlbWVudCBhIGRhdGFiYXNlIHF1ZXJ5IHZpZXcgZm9yIHRoZSBuZXcgSW5zcGVjdG9yLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFiYXNlQ29udGVudFZpZXcuY3NzOiBBZGRlZC4gQ29waWVkIHJ1bGVzIGZyb20gb3BlbiBzb3VyY2UuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFiYXNlQ29udGVudFZpZXcuanM6IEFkZGVkLiBDb3BpZWQgZnJvbSBvcGVuIHNvdXJjZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBBZGRlZCBuZXcgZmlsZXMuCgoyMDEyLTAxLTMxICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgU3R1YiB0aGUgYm9pbGVycGxhdGUgdGhhdCBpcyBuZWVkZWQgdG8gaG9vayB1cCBEYXRhYmFzZUNvbnRlbnRWaWV3LgoKICAgICAgICBEYXRhYmFzZUNvbnRlbnRWaWV3IGRvZXNuJ3QgZXhpc3QgeWV0LCBidXQgd2hlbiBpdCBkb2VzLCBhIG5ldyBEYXRhYmFzZUNvbnRlbnRWaWV3IHdpbGwgYmUKICAgICAgICBjcmVhdGVkIHdoZW4gYSBEYXRhYmFzZVRyZWVFbGVtZW50IGlzIHNlbGVjdGVkLgoKICAgICAgICBXb3JrIHRvd2FyZHMgPHJkYXI6Ly9wcm9ibGVtLzEwNjg0Njc5PiBJbXBsZW1lbnQgYSBkYXRhYmFzZSBxdWVyeSB2aWV3IGZvciB0aGUgbmV3IEluc3BlY3Rvci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3KTogQWRkIGEgbmV3IGNhc2UgZm9yIERhdGFiYXNlQ29udGVudFZpZXcuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlldy5pc1ZpZXdhYmxlKTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50QnJvd3NlclRyZWVFbGVtZW50Rm9yUmVwcmVzZW50ZWRPYmplY3QpOgogICAgICAgICogVXNlckludGVyZmFjZS9TdG9yYWdlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3N0b3JhZ2VDbGVhcmVkKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5TdG9yYWdlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdHJlZUVsZW1lbnRTZWxlY3RlZCk6IERpdHRvLgoKMjAxMi0wMS0zMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEdlbmVyYXRlIGZyaWVuZGxpZXIgdGl0bGVzIGZvciB0aGUgY3VycmVudCBsb2cgYW5kIHByZXZpb3VzIGxvZ3MgaW4gdGhlIExvZyBzaWRlYmFyLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3ODQ+IEltcGxlbWVudCB0aGUgTG9nIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fc2Vzc2lvblN0YXJ0ZWQpOiBTZXQgdGhlIHByZXZpb3VzIGN1cnJlbnQgdHJlZSBlbGVtZW50IHRpdGxlCiAgICAgICAgdG8gIlByZXZpb3VzIExvZyAlZCIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9hY3RpdmVUcmVlRWxlbWVudCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fYWN0aXZlTG9nQ29udGVudFZpZXcpOiBVc2UgX2FjdGl2ZVRyZWVFbGVtZW50KCkuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ1RyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nVHJlZUVsZW1lbnQpOiBTZXQgdGhlIG1haW4gdGl0bGUgdG8gIkN1cnJlbnQgTG9nIiBhbmQgdGhlIHN1YnRpdGxlIHRvIHRoZSB0aW1lLgoKMjAxMi0wMS0zMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBhbiBpY29uIGZvciBsb2dzIGluIHRoZSBXZWIgSW5zcGVjdG9yIExvZyBzaWRlYmFyLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3ODQ+IEltcGxlbWVudCB0aGUgTG9nIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0xvZy5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTG9nQDJ4LnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ0ljb24uY3NzOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nT2JqZWN0LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nT2JqZWN0KTogQWRkZWQgc3RhcnREYXRlIHBhcmFtZXRlciBhbmQgc2V0IF9zdGFydERhdGUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dPYmplY3QucHJvdG90eXBlLmdldCBzdGFydERhdGUpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fc2Vzc2lvblN0YXJ0ZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dUcmVlRWxlbWVudC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dUcmVlRWxlbWVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dUcmVlRWxlbWVudC5wcm90b3R5cGUuZ2V0IGxvZ09iamVjdCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZWQgTG9nVHJlZUVsZW1lbnQuanMgYW5kIExvZ0ljb24uY3NzLgoKMjAxMi0wMS0zMCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEZpeCBkaXNjbG9zdXJlIHRyaWFuZ2xlcyBpbiB0aGUgTG9nIGNvbnRlbnQgdmlldyBhZnRlciB0aGV5IGJyb2tlIGluIHI0MDQzMy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2VjdGlvbi5jc3M6CiAgICAgICAgKC5zZWN0aW9uKTogQWRkZWQuIE1vdmVkIHBvc2l0aW9uOiByZWxhdGl2ZSBoZXJlLgogICAgICAgICguc2VjdGlvbiAuaGVhZGVyKTogUmVtb3ZlZCBwb3NpdGlvbjogcmVsYXRpdmUgZnJvbSBoZXJlLgoKMjAxMi0wMS0zMCAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIENsZWFyIGFsbCBjb250ZW50IHZpZXdzIG9mIHR5cGUgTG9nQ29udGVudFZpZXcgd2hlbiB3ZSBjbGVhciB0aGUgbG9nIHNpZGViYXIgcGFuZWwuCgogICAgICAgIE1vcmUgb2YgPHJkYXI6Ly9wcm9ibGVtLzEwMzE4Nzg0PiBJbXBsZW1lbnQgdGhlIExvZyBzaWRlYmFyIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX2xvZ3NDbGVhcmVkKToKCjIwMTItMDEtMzAgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBNYWtlIHRoZSBsb2cgdmlld3MgZnJvbSBwcmV2aW91cyBsb2FkcyBvZiB0aGUgcGFnZSBub24tZWRpdGFibGUuCgogICAgICAgIE1vcmUgb2YgPHJkYXI6Ly9wcm9ibGVtLzEwMzE4Nzg0PiBJbXBsZW1lbnQgdGhlIExvZyBzaWRlYmFyIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ0NvbnRlbnRWaWV3LmNzczoKICAgICAgICAoI2NvbnNvbGUtcHJvbXB0LmRpc2FibGVkKTogTWFrZSB0aGUgZmllbGQgcmVhZCBvbmx5LgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5zZXREaXNhYmxlZCk6IEFkZCB0aGUgZGlzYWJsZWQgY2xhc3MgdG8gdGhlIGNvbnRlbnQgcHJvbXB0LgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dTaWRlYmFyUGFuZWwucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5Mb2dTaWRlYmFyUGFuZWwuX3Nlc3Npb25TdGFydGVkKTogQ2FsbCBzZXREaXNhYmxlZAogICAgICAgICAgICBvbiB0aGUgcHJldmlvdXNseSBhY3RpdmUgTG9nQ29udGVudFZpZXcuCgoyMDEyLTAxLTMwICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgSGF2ZSB0byBkb3VibGUgY2xpY2sgb24gZGlzY2xvc3VyZSB0cmlhbmdsZXMgZm9yIGxvZyBtZXNzYWdlcyB3aXRoIGJhY2t0cmFjZXMuCgogICAgICAgIE1vcmUgb2YgPHJkYXI6Ly9wcm9ibGVtLzEwMzE4Nzg0PiBJbXBsZW1lbnQgdGhlIExvZyBzaWRlYmFyIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVPdXRsaW5lLmNzczoKICAgICAgICAoLmRvbS10cmVlLW91dGxpbmUgbGkucGFyZW50KTogU3dpdGNoIGZyb20gdGV4dC1pbmRlbnQgdG8gbWFyZ2luLWxlZnQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RyZWVPdXRsaW5lLmpzOgogICAgICAgIChUcmVlRWxlbWVudC5wcm90b3R5cGUuaXNFdmVudFdpdGhpbkRpc2Nsb3N1cmVUcmlhbmdsZSk6IFVwZGF0ZSB0aGlzIHRvIG1hdGNoIG9wZW4gc291cmNlLgoKMjAxMi0wMS0zMCAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgY29uc29sZSBsb2cgbWVzc2FnZXMgd2l0aCBiYWNrdHJhY2VzIGRpc3BsYXkgY29ycmVjdGx5IGluIHRoZSBsb2cgdmlldy4KCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3ODQ+IEltcGxlbWVudCB0aGUgTG9nIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nQ29udGVudFZpZXcuY3NzOiBDb3BpZWQgc29tZSBydWxlcyBhYm91dCBvdXRsaW5lLWRpc2Nsb3N1cmUgZnJvbSBPcGVuIFNvdXJjZS4KCjIwMTItMDEtMzAgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBDcmVhdGUgY29ycmVjdCBsaW5rcyBpbiB0aGUgTG9nIGNvbnRlbnQgdmlldy4KCiAgICAgICAgSW5zdGVhZCBvZiBjYWxsaW5nIHRocm91Z2ggdG8gdGhpcy5fbGlua2lmaWVyICh3aGljaCB3ZSBkb24ndCBoYXZlKSwgY3JlYXRlIGxpbmtzIG91cnNlbHZlcy4KCiAgICAgICAgVGhpcyB3aWxsIHdvcmsgYnkgY2FsbGluZyB0aHJvdWdoIHRvIFdlYkluc3BlY3Rvci5vcGVuVVJMLCB3aGljaCB3aWxsIGVpdGhlciBvcGVuIGEgcmVzb3VyY2UgaW4gYSBuZXcgdGFiLAogICAgICAgIG9yIHNob3cgeW91IHRoZSByZXNvdXJjZSBjb250ZW50IHZpZXcgZm9yIHRoZSBsaW5rIHlvdSBjbGlja2VkLgoKICAgICAgICBNb3JlIG9mIDxyZGFyOi8vcHJvYmxlbS8xMDMxODc4ND4gSW1wbGVtZW50IHRoZSBMb2cgc2lkZWJhciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbi4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Db25zb2xlTWVzc2FnZUltcGwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZUltcGwucHJvdG90eXBlLl9saW5raWZ5TG9jYXRpb24pOiBXZSBkb24ndCBoYXZlIGEgdGhpcy5fbGlua2lmaWVyLCBzbyB1c2Ugb3VyIG93biBmdW5jdGlvbi4KCjIwMTItMDEtMzAgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBXaGVuIHdlIGdldCBhIGNvbnNvbGUgbWVzc2FnZSBmcm9tIHRoZSBDb25zb2xlT2JzZXJ2ZXIsIGFkZCBpdCB0byB0aGUgY29ycmVjdCBMb2dDb250ZW50Vmlldy4KCiAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCB3ZSBzaG93IGNvbnNvbGUgbG9nZ2luZyBmcm9tIHRoZSBwYWdlIGluIHRoZSBjb250ZW50IHZpZXcsIHNvIGl0IGlzIG5vdyBtb3JlIHRoYW4KICAgICAgICBqdXN0IGEgcGxhY2UgdG8gZXZhbHVhdGUgSmF2YVNjcmlwdC4KCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3ODQ+IEltcGxlbWVudCB0aGUgTG9nIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29uc29sZU9ic2VydmVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU9ic2VydmVyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuQ29uc29sZU9ic2VydmVyLm1lc3NhZ2VBZGRlZCk6IFRlbGwgdGhlIExvZ01hbmFnZXIgYWJvdXQgdGhlCiAgICAgICAgICAgIGFkZGVkIG1lc3NhZ2UuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ01hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyLnByb3RvdHlwZS5tZXNzYWdlV2FzQWRkZWQpOiBDcmVhdGUgYSBDb25zb2xlTWVzc2FnZSBvYmplY3QsIGFuZCBmaXJlIGFuIGV2ZW50IHRoYXQgYSBuZXcgbWVzc2FnZQogICAgICAgICAgICB3YXMgYWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ1NpZGViYXJQYW5lbCk6IEFkZCBhIGxpc3RlbmVyIGZvciB3aGVuIG1lc3NhZ2VzIGFyZSBhZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX21lc3NhZ2VBZGRlZCk6IEZpbmQgdGhlIGNvbnRlbnQgdmlldyBmb3IgdGhlIGN1cnJlbnQgbG9nIGl0ZW0sIGFuZCBjYWxsIG1lc3NhZ2VBZGRlZAogICAgICAgICAgICBvbiB0aGUgTG9nQ29udGVudFZpZXcuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ0NvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlLm1lc3NhZ2VBZGRlZCk6IENhbGwgX2NvbnNvbGVNZXNzYWdlQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX2NvbnNvbGVNZXNzYWdlQWRkZWQpOiBUaGlzIG5vdyB0YWtlcyBqdXN0IHRoZSBDb25zb2xlTWVzc2FnZSBpbnN0ZWFkIG9mIGFuIGV2ZW50LgoKMjAxMi0wMS0zMCAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIEVuYWJsZSB0aGUgQ29uc29sZUFnZW50IGFmdGVyIGNyZWF0aW5nIHRoZSBtYW5hZ2Vycy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6CgoyMDEyLTAxLTMwICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIERPTSBwcm9wZXJ0aWVzIHRvIHRoZSBET00gbm9kZSBkZXRhaWxzIHNpZGViYXIgcGFuZWwuCgogICAgICAgIExhc3QgcGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTI3PiBJbXBsZW1lbnQgdGhlIERPTSBBdHRyaWJ1dGVzIGluc3BlY3RvciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01Ob2RlRGV0YWlsc1NpZGViYXJQYW5lbC5jc3M6IEFkZGVkLgogICAgICAgICguc2lkZWJhciA+IC5wYW5lbC5kZXRhaWxzLmRvbS1ub2RlIC5yb3cucHJvcGVydGllcyk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZURldGFpbHNTaWRlYmFyUGFuZWwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLnJlZnJlc2gpOiBDYWxsIF9yZWZyZXNoUHJvcGVydGllcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVmcmVzaFByb3BlcnRpZXMpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVmcmVzaFByb3BlcnRpZXMubm9kZVJlc29sdmVkLmNvbGxlY3RQcm90b3R5cGVzKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3JlZnJlc2hQcm9wZXJ0aWVzLm5vZGVSZXNvbHZlZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9yZWZyZXNoUHJvcGVydGllcy5ub2RlUHJvdG90eXBlc1JlYWR5KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3JlZnJlc2hQcm9wZXJ0aWVzLmZpbGxTZWN0aW9uKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZWQgRE9NTm9kZURldGFpbHNTaWRlYmFyUGFuZWwuY3NzLgogICAgICAgICogVXNlckludGVyZmFjZS9TZWN0aW9uLmNzczoKICAgICAgICAoLnNlY3Rpb24gLmhlYWRlcik6IEFkZGVkIHBvc2l0aW9uOiByZWxhdGl2ZSBzbyB0aGUgZGlzY2xvc3VyZSB0cmlhbmdsZXMgc2hvdyB1cCBjb3JyZWN0bHkuCiAgICAgICAgKC5wcm9wZXJ0aWVzLXRyZWUpOiBBZGRlZCBvdXRsaW5lOiBub25lIHRvIHByZXZlbnQgYSBmb2N1cyByaW5nLgoKMjAxMi0wMS0yOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBhIHNpbXBsZSBET00gbm9kZSBkZXRhaWxzIHNpZGViYXIgcGFuZWwgdGhhdCBzaG93cyB0eXBlLCBuYW1lIGFuZCBhdHRyaWJ1dGVzLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTk1Mjc+IEltcGxlbWVudCB0aGUgRE9NIEF0dHJpYnV0ZXMgaW5zcGVjdG9yIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVEZXRhaWxzU2lkZWJhclBhbmVsKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5yZWZyZXNoKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVmcmVzaEF0dHJpYnV0ZXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9hdHRyaWJ1dGVzQ2hhbmdlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX25vZGVUeXBlRGlzcGxheU5hbWUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9jcmVhdGVBdHRyaWJ1dGVzRGF0YUdyaWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmF2aWdhdGlvbkl0ZW1BbmdsZUJyYWNrZXRzLnBkZjogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZWQgRE9NTm9kZURldGFpbHNTaWRlYmFyUGFuZWwuanMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKTogSW5jbHVkZWQgRE9NTm9kZURldGFpbHNTaWRlYmFyUGFuZWwgaW4gdGhlIGRldGFpbHMgc2lkZWJhciBsaXN0LgoKMjAxMi0wMS0yOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBET01EZXRhaWxzU2lkZWJhclBhbmVsIGFzIGEgYmFzZSBjbGFzcyBmb3IgYWxsIHRoZSBET00gbm9kZSBmb2N1c2VkIGRldGFpbHMgc2lkZWJhciBwYW5lbHMuCgogICAgICAgIE5lZWRlZCBmb3I6CiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTIwPiBJbXBsZW1lbnQgdGhlIFN0eWxlIGluc3BlY3RvciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDMxOTUyNz4gSW1wbGVtZW50IHRoZSBET00gQXR0cmlidXRlcyBpbnNwZWN0b3IgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTAzMTk1MzY+IEltcGxlbWVudCB0aGUgTWV0cmljcyBpbnNwZWN0b3IgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTAzMTk1NDE+IEltcGxlbWVudCB0aGUgUHJvcGVydGllcy9ET00gb2JqZWN0IGluc3BlY3RvciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDMxOTU0Nj4gSW1wbGVtZW50IHRoZSBFdmVudCBMaXN0ZW5lciBpbnNwZWN0b3IgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NRGV0YWlsc1NpZGViYXJQYW5lbC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01EZXRhaWxzU2lkZWJhclBhbmVsKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLmluc3BlY3QpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuZ2V0IGRvbU5vZGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuc2V0IGRvbU5vZGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcnMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lcnMpOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEluY2x1ZGVkIERPTURldGFpbHNTaWRlYmFyUGFuZWwuanMuCgoyMDEyLTAxLTI5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VsZWN0ZWQgcmVzb3VyY2UgaW4gdGhlIHJlc291cmNlIGRldGFpbHMgc2lkZWJhciBwYW5lbC4KCiAgICAgICAgTGFzdCBwYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTk1MTE+IEltcGxlbWVudCB0aGUgRmlsZSBpbnNwZWN0b3IgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsKTogQ3JlYXRlIERldGFpbHNTZWN0aW9ucyBmb3IgdGhlIHZhcmlvdXMgcGFydHMgb2YgaW5mbyB0byBkaXNwbGF5LgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5zZXQgcmVzb3VyY2UpOiBSZW1vdmUgYW5kIGFkZCBldmVudCBsaXN0ZW5lcnMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLnJlZnJlc2gpOiBDYWxsIHRoZSBpbmRpdmlkdWFsIHJlZnJlc2ggZnVuY3Rpb25zLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVmcmVzaFVSTCk6IEFkZGVkLiBVcGRhdGUgdGhlIGFmZmVjdGVkIHJvd3MuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9yZWZyZXNoUmVzb3VyY2VUeXBlKTogQWRkZWQuIERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVmcmVzaE1JTUVUeXBlKTogQWRkZWQuIERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVmcmVzaFJlcXVlc3RIZWFkZXJzKTogQWRkZWQuIERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fcmVmcmVzaFJlc3BvbnNlSGVhZGVycyk6IEFkZGVkLiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX2NyZWF0ZU5hbWVWYWx1ZURhdGFHcmlkKTogQWRkZWQuIEhlbHBlciB0byBjcmVhdGUgYSBzaW1wbGUgZ3JpZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVXRpbGl0aWVzLmpzOgogICAgICAgIChwYXJzZUxvY2F0aW9uUXVlcnlQYXJhbWV0ZXJzKTogVXNlIHRoZSBxdWVyeVN0cmluZyBmdW5jdGlvbiBhZnRlciB0cmltbWluZyB0aGUgIj8iLgogICAgICAgIChxdWVyeVN0cmluZyk6IEFkZGVkLiBGYWN0b3JlZCBvdXQgb2YgcGFyc2VMb2NhdGlvblF1ZXJ5UGFyYW1ldGVycy4KICAgICAgICAocXVlcnlTdHJpbmcuZGVjb2RlKTogQWRkZWQuIFByb3Blcmx5IGRlY29kZSAiKyIgYXMgIiAiLgoKMjAxMi0wMS0yNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCB0aGUgc3RhcnQgb2YgV2ViSW5zcGVjdG9yLlJlc291cmNlRGV0YWlsc1NpZGViYXJQYW5lbC4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTExPiBJbXBsZW1lbnQgdGhlIEZpbGUgaW5zcGVjdG9yIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZWQgUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLmpzLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IENyZWF0ZSBhIFdlYkluc3BlY3Rvci5SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlRGV0YWlsc1NpZGViYXJQYW5lbC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5pbnNwZWN0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuZ2V0IHJlc291cmNlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlRGV0YWlsc1NpZGViYXJQYW5lbC5wcm90b3R5cGUucmVmcmVzaCk6CgoyMDEyLTAxLTI5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIERldGFpbHNTZWN0aW9uIGFuZCBmcmllbmRzIHRvIGJlIHVzZWQgYnkgZGV0YWlscyBzaWRlYmFyIHBhbmVscy4KCiAgICAgICAgTmVlZGVkIGZvcjoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTAzMTk1MTE+IEltcGxlbWVudCB0aGUgRmlsZSBpbnNwZWN0b3IgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTAzMTk1MjA+IEltcGxlbWVudCB0aGUgU3R5bGUgaW5zcGVjdG9yIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTI3PiBJbXBsZW1lbnQgdGhlIERPTSBBdHRyaWJ1dGVzIGluc3BlY3RvciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDMxOTUzNj4gSW1wbGVtZW50IHRoZSBNZXRyaWNzIGluc3BlY3RvciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDMxOTU0MT4gSW1wbGVtZW50IHRoZSBQcm9wZXJ0aWVzL0RPTSBvYmplY3QgaW5zcGVjdG9yIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTQ2PiBJbXBsZW1lbnQgdGhlIEV2ZW50IExpc3RlbmVyIGluc3BlY3RvciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9EZXRhaWxzU2VjdGlvbi5jc3M6IEFkZGVkLgogICAgICAgICguZGV0YWlscy1zZWN0aW9uKToKICAgICAgICAoLmRldGFpbHMtc2VjdGlvbiA+IC5oZWFkZXIpOgogICAgICAgICguZGV0YWlscy1zZWN0aW9uID4gLmhlYWRlcjo6YmVmb3JlKToKICAgICAgICAoLmRldGFpbHMtc2VjdGlvbiA+IC5oZWFkZXI6YWN0aXZlOjpiZWZvcmUpOgogICAgICAgICguZGV0YWlscy1zZWN0aW9uLmNvbGxhcHNlZCA+IC5oZWFkZXI6OmJlZm9yZSk6CiAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24uY29sbGFwc2VkID4gLmhlYWRlcjphY3RpdmU6OmJlZm9yZSk6CiAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24gPiAuY29udGVudCk6CiAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24uY29sbGFwc2VkID4gLmNvbnRlbnQpOgogICAgICAgICguZGV0YWlscy1zZWN0aW9uID4gLmNvbnRlbnQgPiAuZ3JvdXApOgogICAgICAgICguZGV0YWlscy1zZWN0aW9uID4gLmNvbnRlbnQgPiAuZ3JvdXA6bnRoLWNoaWxkKGV2ZW4pKToKICAgICAgICAoLmRldGFpbHMtc2VjdGlvbiA+IC5jb250ZW50ID4gLmdyb3VwOm50aC1jaGlsZChldmVuKSA+IC5yb3c6Zmlyc3QtY2hpbGQgPiAqKToKICAgICAgICAoLmRldGFpbHMtc2VjdGlvbiA+IC5jb250ZW50ID4gLmdyb3VwOm50aC1jaGlsZChldmVuKSA+IC5yb3c6bGFzdC1jaGlsZCA+ICopOgogICAgICAgICguZGV0YWlscy1zZWN0aW9uID4gLmNvbnRlbnQgPiAuZ3JvdXAgPiAucm93KToKICAgICAgICAoLmRldGFpbHMtc2VjdGlvbiA+IC5jb250ZW50ID4gLmdyb3VwID4gLnJvdzpsYXN0LWNoaWxkID4gKik6CiAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24gPiAuY29udGVudCA+IC5ncm91cCA+IC5yb3cuZW1wdHkpOgogICAgICAgICguZGV0YWlscy1zZWN0aW9uID4gLmNvbnRlbnQgPiAuZ3JvdXA6bnRoLWNoaWxkKGV2ZW4pID4gLnJvdy5lbXB0eTpsYXN0LWNoaWxkKToKICAgICAgICAoLmRldGFpbHMtc2VjdGlvbiA+IC5jb250ZW50ID4gLmdyb3VwOm50aC1jaGlsZChldmVuKSA+IC5yb3cuZW1wdHk6bGFzdC1jaGlsZCA+ICopOgogICAgICAgICguZGV0YWlscy1zZWN0aW9uID4gLmNvbnRlbnQgPiAuZ3JvdXA6bnRoLWNoaWxkKGV2ZW4pID4gLnJvdy5lbXB0eTpsYXN0LWNoaWxkID4gKiA+ICopOgogICAgICAgICguZGV0YWlscy1zZWN0aW9uID4gLmNvbnRlbnQgPiAuZ3JvdXAgPiAucm93ID4gKik6CiAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24gPiAuY29udGVudCA+IC5ncm91cCA+IC5yb3cgPiAubGFiZWwpOgogICAgICAgICguZGV0YWlscy1zZWN0aW9uID4gLmNvbnRlbnQgPiAuZ3JvdXAgPiAucm93ID4gLnZhbHVlKToKICAgICAgICAoLmRldGFpbHMtc2VjdGlvbiA+IC5jb250ZW50ID4gLmdyb3VwID4gLmRhdGEtZ3JpZC1yb3cpOgogICAgICAgICguZGV0YWlscy1zZWN0aW9uID4gLmNvbnRlbnQgPiAuZ3JvdXAgPiAuZGF0YS1ncmlkLXJvdy5lbXB0eSk6CiAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24gPiAuY29udGVudCAuZGF0YS1ncmlkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGV0YWlsc1NlY3Rpb24uanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsc1NlY3Rpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsc1NlY3Rpb24ucHJvdG90eXBlLmdldCBlbGVtZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRldGFpbHNTZWN0aW9uLnByb3RvdHlwZS5nZXQgdGl0bGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsc1NlY3Rpb24ucHJvdG90eXBlLnNldCB0aXRsZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZXRhaWxzU2VjdGlvbi5wcm90b3R5cGUuZ2V0IGNvbGxhcHNlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZXRhaWxzU2VjdGlvbi5wcm90b3R5cGUuc2V0IGNvbGxhcHNlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZXRhaWxzU2VjdGlvbi5wcm90b3R5cGUuZ2V0IGdyb3Vwcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZXRhaWxzU2VjdGlvbi5wcm90b3R5cGUuc2V0IGdyb3Vwcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZXRhaWxzU2VjdGlvbi5wcm90b3R5cGUuX2hlYWRlckVsZW1lbnRDbGlja2VkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRldGFpbHNTZWN0aW9uLnByb3RvdHlwZS5fZ2VuZXJhdGVEaXNjbG9zdXJlVHJpYW5nbGVzSWZOZWVkZWQuZGlzY2xvc3VyZUltYWdlTG9hZGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRldGFpbHNTZWN0aW9uLnByb3RvdHlwZS5fZ2VuZXJhdGVEaXNjbG9zdXJlVHJpYW5nbGVzSWZOZWVkZWQuZ2VuZXJhdGVEaXNjbG9zdXJlVHJpYW5nbGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsc1NlY3Rpb24ucHJvdG90eXBlLl9nZW5lcmF0ZURpc2Nsb3N1cmVUcmlhbmdsZXNJZk5lZWRlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RldGFpbHNTZWN0aW9uRGF0YUdyaWRSb3cuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsc1NlY3Rpb25EYXRhR3JpZFJvdyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZXRhaWxzU2VjdGlvbkRhdGFHcmlkUm93LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuRGV0YWlsc1NlY3Rpb25EYXRhR3JpZFJvdy5nZXQgZWxlbWVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZXRhaWxzU2VjdGlvbkRhdGFHcmlkUm93LnByb3RvdHlwZS5nZXQgZW1wdHlNZXNzYWdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRldGFpbHNTZWN0aW9uRGF0YUdyaWRSb3cucHJvdG90eXBlLnNldCBlbXB0eU1lc3NhZ2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsc1NlY3Rpb25EYXRhR3JpZFJvdy5wcm90b3R5cGUuZ2V0IGRhdGFHcmlkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRldGFpbHNTZWN0aW9uRGF0YUdyaWRSb3cucHJvdG90eXBlLnNldCBkYXRhR3JpZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RldGFpbHNTZWN0aW9uR3JvdXAuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsc1NlY3Rpb25Hcm91cCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZXRhaWxzU2VjdGlvbkdyb3VwLnByb3RvdHlwZS5nZXQgZWxlbWVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZXRhaWxzU2VjdGlvbkdyb3VwLnByb3RvdHlwZS5nZXQgcm93cyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZXRhaWxzU2VjdGlvbkdyb3VwLnByb3RvdHlwZS5zZXQgcm93cyk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RldGFpbHNTZWN0aW9uUm93LmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRldGFpbHNTZWN0aW9uUm93KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRldGFpbHNTZWN0aW9uUm93LnByb3RvdHlwZS5nZXQgZWxlbWVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZXRhaWxzU2VjdGlvblJvdy5wcm90b3R5cGUuZ2V0IGxhYmVsKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRldGFpbHNTZWN0aW9uUm93LnByb3RvdHlwZS5zZXQgbGFiZWwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsc1NlY3Rpb25Sb3cucHJvdG90eXBlLmdldCB2YWx1ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZXRhaWxzU2VjdGlvblJvdy5wcm90b3R5cGUuc2V0IHZhbHVlKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlZCBEZXRhaWxzU2VjdGlvbi57Y3NzLGpzfSwgRGV0YWlsc1NlY3Rpb25EYXRhR3JpZFJvdy5qcywKICAgICAgICBEZXRhaWxzU2VjdGlvbkdyb3VwLmpzLCBhbmQgRGV0YWlsc1NlY3Rpb25Sb3cuanMuCgoyMDEyLTAxLTI2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgU2VsZWN0aXZlbHkgc2hvdyBhbmQgaGlkZSBwYW5lbHMgaW4gdGhlIERldGFpbHMgc2lkZWJhciBiYXNlZCBvbiBpZiB0aGV5IGNhbiBpbnNwZWN0IHRoZSBjdXJyZW50CiAgICAgICAgcmVwcmVzZW50ZWQgb2JqZWN0cyBiZWluZyB2aWV3ZWQgaW4gdGhlIGNvbnRlbnQgYnJvd3Nlci4KCiAgICAgICAgTmVlZGVkIGZvcjoKICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTAzMTk1MTE+IEltcGxlbWVudCB0aGUgRmlsZSBpbnNwZWN0b3IgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTAzMTk1MjA+IEltcGxlbWVudCB0aGUgU3R5bGUgaW5zcGVjdG9yIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTI3PiBJbXBsZW1lbnQgdGhlIERPTSBBdHRyaWJ1dGVzIGluc3BlY3RvciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDMxOTUzNj4gSW1wbGVtZW50IHRoZSBNZXRyaWNzIGluc3BlY3RvciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDMxOTU0MT4gSW1wbGVtZW50IHRoZSBQcm9wZXJ0aWVzL0RPTSBvYmplY3QgaW5zcGVjdG9yIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTQ2PiBJbXBsZW1lbnQgdGhlIEV2ZW50IExpc3RlbmVyIGluc3BlY3RvciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IEFkZGVkIGV2ZW50IGxpc3RlbmVyIGZvciBDdXJyZW50UmVwcmVzZW50ZWRPYmplY3RzRGlkQ2hhbmdlIGV2ZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuX2NvbnRlbnRCcm93c2VyUmVwcmVzZW50ZWRPYmplY3RzRGlkQ2hhbmdlKTogQWRkZWQuIENhbGwgaW5zcGVjdCBvbiBlYWNoIGRldGFpbHMKICAgICAgICBzaWRlYmFyIHBhbmVsIGFuZCBzaG93IG9uZXMgdGhhdCByZXR1cm4gdHJ1ZSBhbmQgaGlkZSBvbmVzIHRoYXQgcmV0dXJuIGZhbHNlLgoKMjAxMi0wMS0yNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBXZWJJbnNwZWN0b3IuRGV0YWlsc1NpZGViYXJQYW5lbCBmb3IgdXNlIGJ5IHBhbmVscyBpbiB0aGUgRGV0YWlscyBzaWRlYmFyLgoKICAgICAgICBOZWVkZWQgZm9yOgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDMxOTUxMT4gSW1wbGVtZW50IHRoZSBGaWxlIGluc3BlY3RvciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDMxOTUyMD4gSW1wbGVtZW50IHRoZSBTdHlsZSBpbnNwZWN0b3IgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTAzMTk1Mjc+IEltcGxlbWVudCB0aGUgRE9NIEF0dHJpYnV0ZXMgaW5zcGVjdG9yIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTM2PiBJbXBsZW1lbnQgdGhlIE1ldHJpY3MgaW5zcGVjdG9yIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTQxPiBJbXBsZW1lbnQgdGhlIFByb3BlcnRpZXMvRE9NIG9iamVjdCBpbnNwZWN0b3IgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTAzMTk1NDY+IEltcGxlbWVudCB0aGUgRXZlbnQgTGlzdGVuZXIgaW5zcGVjdG9yIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RldGFpbHNTaWRlYmFyUGFuZWwuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsc1NpZGViYXJQYW5lbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5pbnNwZWN0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLnNob3duKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRldGFpbHNTaWRlYmFyUGFuZWwucHJvdG90eXBlLm5lZWRzUmVmcmVzaCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5yZWZyZXNoKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2lkZWJhci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXIucHJvdG90eXBlLnNldCBzZWxlY3RlZFNpZGViYXJQYW5lbCk6IENhbGwgaGlkZGVuIGFuZCBzaG93biBvbiB0aGUgU2lkZWJhclBhbmVsLgogICAgICAgIChXZWJJbnNwZWN0b3IuU2lkZWJhci5wcm90b3R5cGUuc2V0IGNvbGxhcHNlZCk6IFVwZGF0ZSBsYXlvdXQgb2YgdGhlIG5hdmlnYXRpb24gYmFyIHdoZW4gdW5jb2xsYXBzZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXJQYW5lbC5wcm90b3R5cGUuc2hvd24pOiBBZGRlZCBzdHViLgogICAgICAgIChXZWJJbnNwZWN0b3IuU2lkZWJhclBhbmVsLnByb3RvdHlwZS5oaWRkZW4pOiBBZGRlZCBzdHViLgoKMjAxMi0wMS0yNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBzdXBwb3J0IGZvciByZW1vdmluZyBhbmQgaW5zZXJ0aW5nIFNpZGViYXJQYW5lbHMgdG8gV2ViSW5zcGVjdG9yLlNpZGViYXIuCgogICAgICAgIE5lZWRlZCBmb3I6CiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTExPiBJbXBsZW1lbnQgdGhlIEZpbGUgaW5zcGVjdG9yIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTIwPiBJbXBsZW1lbnQgdGhlIFN0eWxlIGluc3BlY3RvciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDMxOTUyNz4gSW1wbGVtZW50IHRoZSBET00gQXR0cmlidXRlcyBpbnNwZWN0b3IgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTAzMTk1MzY+IEltcGxlbWVudCB0aGUgTWV0cmljcyBpbnNwZWN0b3IgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTAzMTk1NDE+IEltcGxlbWVudCB0aGUgUHJvcGVydGllcy9ET00gb2JqZWN0IGluc3BlY3RvciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDMxOTU0Nj4gSW1wbGVtZW50IHRoZSBFdmVudCBMaXN0ZW5lciBpbnNwZWN0b3IgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvbkJhci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25CYXIucHJvdG90eXBlLnJlbW92ZU5hdmlnYXRpb25JdGVtKTogQ2xlYXIgdGhlIHNlbGVjdGVkIG5hdmlnYXRpb24gaXRlbSBpZiBpdCBpcyB0aGlzLgogICAgICAgICogVXNlckludGVyZmFjZS9TaWRlYmFyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2lkZWJhci5wcm90b3R5cGUuaW5zZXJ0U2lkZWJhclBhbmVsKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyLnByb3RvdHlwZS5yZW1vdmVTaWRlYmFyUGFuZWwpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXIucHJvdG90eXBlLnNldCBzZWxlY3RlZFNpZGViYXJQYW5lbCk6IEFsbG93IHNldHRpbmcgb2YgbnVsbC4gRmFjdG9yZWQgb3V0IGNvZGUgaW50byBfZmluZFNpZGViYXJQYW5lbC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXIucHJvdG90eXBlLl9maW5kU2lkZWJhclBhbmVsKTogQWRkZWQuCgoyMDEyLTAxLTI1ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGdldHRpbmcgdGhlIGN1cnJlbnQgcmVwcmVzZW50ZWQgb2JqZWN0cyBmcm9tIENvbnRlbnRCcm93c2VyLgoKICAgICAgICBOZWVkZWQgZm9yOgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDMxOTUxMT4gSW1wbGVtZW50IHRoZSBGaWxlIGluc3BlY3RvciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDMxOTUyMD4gSW1wbGVtZW50IHRoZSBTdHlsZSBpbnNwZWN0b3IgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTAzMTk1Mjc+IEltcGxlbWVudCB0aGUgRE9NIEF0dHJpYnV0ZXMgaW5zcGVjdG9yIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTM2PiBJbXBsZW1lbnQgdGhlIE1ldHJpY3MgaW5zcGVjdG9yIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwMzE5NTQxPiBJbXBsZW1lbnQgdGhlIFByb3BlcnRpZXMvRE9NIG9iamVjdCBpbnNwZWN0b3IgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTAzMTk1NDY+IEltcGxlbWVudCB0aGUgRXZlbnQgTGlzdGVuZXIgaW5zcGVjdG9yIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRCcm93c2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIucHJvdG90eXBlLmdldCBjdXJyZW50UmVwcmVzZW50ZWRPYmplY3RzKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuX3VwZGF0ZUNvbnRlbnRWaWV3U2VsZWN0aW9uUGF0aE5hdmlnYXRpb25JdGVtKTogTWFrZSBzdXJlIHRvIHNldAogICAgICAgIGNvbXBvbmVudHMgZXZlbiBpZiBpdCBpcyBlbXB0eS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyLnByb3RvdHlwZS5fZGlzcGF0Y2hDdXJyZW50UmVwcmVzZW50ZWRPYmplY3RzRGlkQ2hhbmdlRXZlbnRTb29uKTogU2V0IGEgdGltZW91dC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyLnByb3RvdHlwZS5fZGlzcGF0Y2hDdXJyZW50UmVwcmVzZW50ZWRPYmplY3RzRGlkQ2hhbmdlRXZlbnRTb29uLmRlbGF5ZWQpOiBGaXJlIHRoZSBldmVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyLnByb3RvdHlwZS5fY29udGVudFZpZXdTZWxlY3Rpb25QYXRoQ29tcG9uZW50RGlkQ2hhbmdlKTogQ2FsbAogICAgICAgIF9kaXNwYXRjaEN1cnJlbnRSZXByZXNlbnRlZE9iamVjdHNEaWRDaGFuZ2VFdmVudFNvb24uCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuX2N1cnJlbnRDb250ZW50Vmlld0RpZENoYW5nZSk6IENhbGwKICAgICAgICBfZGlzcGF0Y2hDdXJyZW50UmVwcmVzZW50ZWRPYmplY3RzRGlkQ2hhbmdlRXZlbnRTb29uLgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlRWxlbWVudFBhdGhDb21wb25lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlRWxlbWVudFBhdGhDb21wb25lbnQpOiBTZXQgdGhlIHJlcHJlc2VudGVkT2JqZWN0IHRvIHRoZSB0cmVlRWxlbWVudC5yZXByZXNlbnRlZE9iamVjdCBpZgogICAgICAgIGEgcmVwcmVzZW50ZWRPYmplY3Qgd2Fzbid0IHBhc3NlZCBpbi4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvR2VuZXJhbFRyZWVFbGVtZW50UGF0aENvbXBvbmVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkdlbmVyYWxUcmVlRWxlbWVudFBhdGhDb21wb25lbnQpOiBTZXQgdGhlIHJlcHJlc2VudGVkT2JqZWN0IHRvIHRoZSB0cmVlRWxlbWVudC5yZXByZXNlbnRlZE9iamVjdCBpZgogICAgICAgIGEgcmVwcmVzZW50ZWRPYmplY3Qgd2Fzbid0IHBhc3NlZCBpbi4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSGllcmFyY2hpY2FsUGF0aE5hdmlnYXRpb25JdGVtLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSGllcmFyY2hpY2FsUGF0aE5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5nZXQgbGFzdENvbXBvbmVudCk6IEFkZGVkLgoKMjAxMi0wMS0yNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIENlbnRlciBhbGlnbiBuYXZpZ2F0aW9uIGl0ZW1zIGluIG5hdmlnYXRpb24gYmFycyBieSBkZWZhdWx0LgoKICAgICAgICBZb3UgY2FuIHN0aWxsIGdldCBsZWZ0IGFsaWdubWVudCBieSBhZGRpbmcgYSBmbGV4aWJsZSBzcGFjZSBvbiB0aGUgbGVmdC4gVGhpcyBtYWtlIGl0IGVhc2llciB0aGFuCiAgICAgICAgZmxleGlibGUgc3BhY2VzIG9uIGVhY2ggc2lkZSBmb3IgY2VudGVyIGFsaWdubWVudC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvbkJhci5jc3M6CiAgICAgICAgKC5uYXZpZ2F0aW9uLWJhcik6IFNldCAtd2Via2l0LWJveC1wYWNrIHRvIGNlbnRlci4KCjIwMTItMDEtMjkgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIGRpc3BsYXkgbmFtZXMgb2YgcmVzb3VyY2UgdHlwZXMuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fZm9sZGVyTmFtZUZvclJlc291cmNlVHlwZSk6IFVzZSBXZWJJbnNwZWN0b3IuUmVzb3VyY2UuVHlwZS5kaXNwbGF5TmFtZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2UuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5UeXBlLmRpc3BsYXlOYW1lKTogQWRkZWQuIENhbiByZXR1cm4gcGx1cmFsIG9yIHNpbmd1bGFyIHN0cmluZ3MuCgoyMDEyLTAxLTI5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgVXBkYXRlIHRoZSByZXF1ZXN0IGhlYWRlcnMgd2hlbiByZXNvdXJjZXMgYXJlIHJlZGlyZWN0ZWQuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lUmVzb3VyY2VNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLnJlc291cmNlUmVxdWVzdFdpbGxCZVNlbnQpOiBQYXNzIGFsb25nIHRoZQogICAgICAgIHJlcXVlc3QgaGVhZGVycyB0byB1cGRhdGVGb3JSZWRpcmVjdFJlc3BvbnNlLgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5nZXQgdXBkYXRlRm9yUmVkaXJlY3RSZXNwb25zZSk6IEFkZGVkIHJlcXVlc3RIZWFkZXJzIHBhcmFtZXRlci4KICAgICAgICBTZXQgX3JlcXVlc3RIZWFkZXJzIGFuZCBmaXJlIHRoZSBSZXF1ZXN0SGVhZGVyc0RpZENoYW5nZSBldmVudC4KCjIwMTItMDEtMjkgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBDZW50cmFsaXplIHRoZSBjb2RlIHRoYXQgYWRkcyB6ZXJvLXdpZHRoIHNwYWNlcyB0byBsb25nIHN0cmluZ3Mgc28gaXQgY2FuIGJlIHVzZWQKICAgICAgICBpbiBvdGhlciBwbGFjZXMuCgogICAgICAgIEFsc28gYWRkIGEgY29weSBldmVudCBsaXN0ZW5lciB0aGF0IHN0cmlwcyB0aGUgemVyby13aWR0aCBzcGFjZXMgZnJvbSB0aGUgcGFzdGVib2FyZC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlRWxlbWVudC5wcm90b3R5cGUuX2J1aWxkQXR0cmlidXRlRE9NKTogVXNlIGluc2VydFdvcmRCcmVha0NoYXJhY3RlcnMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKTogQWRkZWQgY29weSBldmVudCBsaXN0ZW5lci4KICAgICAgICAoV2ViSW5zcGVjdG9yLl9zYW5pdGl6ZUNsaXBib2FyZERhdGEpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVXRpbGl0aWVzLmpzOgogICAgICAgIChTdHJpbmcucHJvdG90eXBlLmluc2VydFdvcmRCcmVha0NoYXJhY3RlcnMpOiBBZGRlZC4KICAgICAgICAoU3RyaW5nLnByb3RvdHlwZS5yZW1vdmVXb3JkQnJlYWtDaGFyYWN0ZXJzKTogQWRkZWQuCgoyMDEyLTAxLTI3ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgQ3JlYXRlIGEgbG9nIHNlc3Npb24gd2hlbiB0aGUgaW5zcGVjdG9yIGlzIGZpcnN0IGxvYWRlZC4KCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3ODQ+IEltcGxlbWVudCB0aGUgTG9nIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTG9nU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nU2lkZWJhclBhbmVsKToKCjIwMTItMDEtMjcgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBBZGQgc29tZSBmdW5jdGlvbnMgZm9yIG9wZW4gc291cmNlIG5lZWRlZCB0byBjcmVhdGUgbGlua3MgYW5kIHN0cmluZ3MuCgogICAgICAgIE1vcmUgb2YgPHJkYXI6Ly9wcm9ibGVtLzEwMzE4Nzg0PiBJbXBsZW1lbnQgdGhlIExvZyBzaWRlYmFyIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ0NvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcpOiBBZGQgYSBjbGljayBoYW5kbGVyIHRvIHRoZSBjb250ZW50IHZpZXcuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX21vdXNlV2FzQ2xpY2tlZCk6IEZpbmQgdGhlIDxhPiBlbGVtZW50IHdlIGNsaWNrZWQgb24sCiAgICAgICAgICAgIGFuZCBvcGVuIHRoZSBVUkwuIFRoaXMgZG9lcyB0aGUgcmlnaHQgdGhpbmcgZm9yIGV4dGVybmFsIHJlc291cmNlcyAobG9hZHMgdGhlbSBpbiBTYWZhcmkpLAogICAgICAgICAgICBhbmQgcmVzb3VyY2VzIGZyb20gdGhlIHBhZ2UgKGxvYWRzIHRoZSBSZXNvdXJjZSBpbiB0aGUgaW5zcGVjdG9yKS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmxpbmtpZnlVUkxBc05vZGUpOiBDb3BpZWQgZnJvbSBvcGVuIHNvdXJjZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLmxpbmtpZnlTdHJpbmdBc0ZyYWdtZW50V2l0aEN1c3RvbUxpbmtpZmllcik6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IubGlua2lmeVN0cmluZ0FzRnJhZ21lbnQpOiBEaXR0by4KCjIwMTItMDEtMjcgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBTaG93IHRoZSBET00gdHJlZSBmb3IgYW4gZWxlbWVudCB0aGF0IHRoZSB1c2VyIGVudGVycy4KCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3ODQ+IEltcGxlbWVudCB0aGUgTG9nIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29uc29sZU1lc3NhZ2VJbXBsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS5fZm9ybWF0UGFyYW1ldGVyQXNOb2RlKTogQ3JlYXRlIGEgRE9NVHJlZU91dGxpbmUgaW5zdGVhZAogICAgICAgICAgICBvZiBhbiBFbGVtZW50VHJlZU91dGxpbmUsIGFuZCBnZXQgdGhlIG5vZGUgZnJvbSB0aGUgRE9NVHJlZU1hbmFnZXIuCgoyMDEyLTAxLTI2ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3ODQ+IEltcGxlbWVudCB0aGUgTG9nIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIEFkZCB3b3JraW5nIHZlcnNpb25zIG9mIExvZ0NvbnRlbnRWaWV3LmNzcyBhbmQgTG9nQ29udGVudFZpZXcuanMuCgogICAgICAgIExvZ0NvbnRlbnRWaWV3LmNzcyBjb3BpZWQgcnVsZXMgZm9yIG9wZW4gc291cmNlJ3MKICAgICAgICBpbnNwZWN0b3IuY3NzLCB3aXRoIG9uZSBjaGFuZ2UgdG8gYWRkIG91dGxpbmU6IG5vbmUgdG8gdGhlIHByb21wdCBhbmQgYSBjaGFuZ2UgdG8gdXNlIHRoZSBzYW1lIGZvbnQgdGhhdAogICAgICAgIHdlIHVzZSBpbiB0aGUgdGV4dCBlZGl0b3IuCgogICAgICAgIExvZ0NvbnRlbnRWaWV3LmpzIGNoYW5nZWQgKnN0eWxlQ2xhc3MgdG8gY2xhc3NMaXN0LiosIGFuZCByZW1vdmVkIGNhbGxzIHRvIG9iamVjdHMgdGhhdCB3ZSBkb24ndCBoYXZlIGluCiAgICAgICAgb3VyIGluc3BlY3RvciAoV2ViSW5zcGVjdG9yLnNldHRpbmdzLCBXZWJJbnNwZWN0b3IuZGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbCkuCgogICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgdGhlIGNvbnNvbGUgdmlldyBzaG93IHVwLCBhbmQgeW91IGNhbiB0eXBlIGFuZCBydW4gSmF2YVNjcmlwdC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dDb250ZW50Vmlldy5jc3M6IEFkZGVkLiBDb3BpZWQgc2VsZWN0ZWQgcnVsZXMgZnJvbSBpbnNwZWN0b3IuY3NzIGluIE9wZW4gU291cmNlLgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dDb250ZW50Vmlldy5qczogQWRkZWQuIFRoaXMgZmlsZSB3YXMgY29waWVkIGZyb20gT3BlbiBTb3VyY2UsIGJ1dCBjaGFuZ2VzIGhhdmUgYmVlbgogICAgICAgICAgICBtYWRlIHRvIHJlbW92ZSBjYWxscyB0byBvYmplY3RzIHRoYXQgd2UgZG9uJ3QgaGF2ZSBpbiBvdXIgaW5zcGVjdG9yIChXZWJJbnNwZWN0b3Iuc2V0dGluZ3MsIFdlYkluc3BlY3Rvci5kZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsKSwKICAgICAgICAgICAgYW5kICpzdHlsZUNsYXNzIGhhcyBiZWVuIGNoYW5nZWQgdG8gY2xhc3NMaXN0LiouCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogQWRkZWQgbmV3IGZpbGVzLgoKMjAxMi0wMS0yNiAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIE1vcmUgb2YgPHJkYXI6Ly9wcm9ibGVtLzEwMzE4Nzg0PiBJbXBsZW1lbnQgdGhlIExvZyBzaWRlYmFyIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduLgoKICAgICAgICBBZGQgc29tZSBuZWVkZWQgZnVuY3Rpb25zIHRvIFV0aWxpdGllcy5qcy4gVGhlc2Ugd2VyZSBjb3BpZWQgZnJvbSBPcGVuIFNvdXJjZSwgYnV0IHN3aXRjaGVkIG92ZXIKICAgICAgICB0byB0aGUgT2JqZWN0LmRlZmluZVByb3BlcnR5IHN5bnRheC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9VdGlsaXRpZXMuanM6CgoyMDEyLTAxLTI2ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3ODQ+IEltcGxlbWVudCB0aGUgTG9nIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIEFkZCB0aGUgQ29uc29sZU1lc3NhZ2UgYW5kIENvbnNvbGVNZXNzYWdlSW1wbCBmaWxlcyBmcm9tIE9wZW4gU291cmNlLiBUaGVzZSB3aWxsIGJlIHJlbmFtZWQKICAgICAgICBhbmQgY29tYmluZWQgaW4gYSBmb2xsb3ctdXAgcGF0Y2guCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29uc29sZU1lc3NhZ2UuanM6IEFkZGVkLiBDb3BpZWQgZnJvbSBPcGVuIFNvdXJjZSdzIENvbnNvbGVNb2RlbC5qcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29uc29sZU1lc3NhZ2VJbXBsLmpzOiBBZGRlZC4gQ29waWVkIGZyb20gT3BlbiBTb3VyY2UuIFRoZSBvbmx5IGNoYW5nZXMgYXJlCiAgICAgICAgICAgIGNoYW5naW5nICpzdHlsZUNsYXNzIC0+IGNsYXNzTGlzdC4qLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEFkZGVkIG5ldyBmaWxlcy4KCjIwMTItMDEtMjYgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBNb3JlIG9mIDxyZGFyOi8vcHJvYmxlbS8xMDMxODc4ND4gSW1wbGVtZW50IHRoZSBMb2cgc2lkZWJhciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbi4KCiAgICAgICAgQWRkIHRoZSBUZXh0UHJvbXB0LmpzIGFuZCBUZXh0UHJvbXB0LmNzcyBmaWxlcy4gVGhlc2UgYXJlIG5lZWRlZCBmb3IgYXV0b2NvbXBsZXRpbmcgb2YgdGhlCiAgICAgICAgdXNlcidzIGlucHV0LgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogQWRkIG5ldyBmaWxlcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dFByb21wdC5jc3M6IEFkZGVkLiBDb3BpZWQgZnJvbSBPcGVuIFNvdXJjZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dFByb21wdC5qczogQWRkZWQuIENvcGllZCBmcm9tIE9wZW4gU291cmNlLiBUaGUgb25seSBjaGFuZ2VzIHRoYXQgd2VyZQogICAgICAgICAgICBtYWRlIHdlcmUgY2hhbmdpbmcgKnN0eWxlQ2xhc3MoImNsYXNzIikgLT4gY2xhc3NMaXN0LiooImNsYXNzIikuCgoyMDEyLTAxLTI2ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3ODQ+IEltcGxlbWVudCB0aGUgTG9nIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIEFkZCBzb21lIGltYWdlcyB0aGF0IHdpbGwgYmUgbmVlZGVkIGJ5IHRoZSBsb2cgY29uc29sZSB2aWV3LgoKICAgICAgICBUaGVzZSBuZWVkIHRvIGJlIGluIEhpRFBJLiBJIHVwZGF0ZWQgPHJkYXI6Ly9wcm9ibGVtLzEwNzQ5MjY1PiB0byBzYXkgdGhhdCB0aGUgY29uc29sZSBpbWFnZXMKICAgICAgICBuZWVkIHRvIGJlIEhpRFBJIGFzIHdlbGwuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL2Rpc2Nsb3N1cmVUcmlhbmdsZVNtYWxsRG93bi5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvZGlzY2xvc3VyZVRyaWFuZ2xlU21hbGxSaWdodC5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvZXJyb3JJY29uLnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9zZWFyY2hTbWFsbEJyaWdodEJsdWUucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL3VzZXJJbnB1dEljb24ucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL3VzZXJJbnB1dFJlc3VsdEljb24ucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL3dhcm5pbmdJY29uLnBuZzogQWRkZWQuCgoyMDEyLTAxLTI2ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3ODQ+IEltcGxlbWVudCB0aGUgTG9nIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIEFkZCBzb21lIG5lZWRlZCBmaWxlcyBmcm9tIE9wZW4gU291cmNlLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9kZWxldGVJY29uLnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogQWRkZWQgbmV3IGZpbGVzLgogICAgICAgICogVXNlckludGVyZmFjZS9PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qczogQWRkZWQuIENvcGllZCBmcm9tIE9wZW4gU291cmNlLgogICAgICAgICogVXNlckludGVyZmFjZS9Qcm9wZXJ0aWVzU2VjdGlvbi5qczogQWRkZWQuIENvcGllZCBmcm9tIE9wZW4gU291cmNlLgogICAgICAgICogVXNlckludGVyZmFjZS9TZWN0aW9uLmNzczogQWRkZWQuIENvcGllZCBzZWxlY3RlZCBydWxlcyBhYm91dCAuc2VjdGlvbiBhbmQgLnByb3BlcnRpZXMtdHJlZSBmcm9tIE9wZW4gU291cmNlLgogICAgICAgICogVXNlckludGVyZmFjZS9TZWN0aW9uLmpzOiBBZGRlZC4gQ29waWVkIGZyb20gT3BlbiBTb3VyY2UuCgoyMDEyLTAxLTI2ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3ODQ+IEltcGxlbWVudCB0aGUgTG9nIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIFRoaXMgcGF0Y2ggaG9va3MgdXAgdGhlIHBsdW1iaW5nIHRvIHNob3cgYSBMb2dDb250ZW50VmlldyAod2hpY2ggZG9lc24ndCBleGlzdCksIHdoZW4gYSB0cmVlIGVsZW1lbnQKICAgICAgICBmcm9tIHRoZSBMb2cgc2lkZWJhciBwYW5lbCBpcyBzZWxlY3RlZC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3KTogQWRkIGEgY2FzZSBmb3IgTG9nT2JqZWN0LiBJdCBjcmVhdGVzIGEgTG9nQ29udGVudFZpZXcsIHdoaWNoIGlzbid0IGF2YWlsYWJsZQogICAgICAgICAgICB5ZXQsIGJ1dCB3aWxsIGJlIGluIGEgbGF0ZXIgcGF0Y2guCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlldy5pc1ZpZXdhYmxlKTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ1NpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ1NpZGViYXJQYW5lbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dTaWRlYmFyUGFuZWwucHJvdG90eXBlLl90cmVlRWxlbWVudFNlbGVjdGVkKTogTWFrZSBzdXJlIHRoZSBzZWxlY3RlZCBlbGVtZW50CiAgICAgICAgICAgIGhhcyBhIExvZ09iamVjdCBhcyBpdHMgcmVwcmVzZW50ZWQgb2JqZWN0LCBhbmQgdGhlbiBzaG93IHRoZSBjb3JyZWN0IGNvbnRlbnQgdmlldy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRCcm93c2VyVHJlZUVsZW1lbnRGb3JSZXByZXNlbnRlZE9iamVjdCk6IEFkZCBhIGNhc2UgZm9yIExvZ09iamVjdC4KCgoyMDEyLTAxLTI2ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3ODQ+IEltcGxlbWVudCB0aGUgTG9nIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIEFkZCBhIHN0dWIgTG9nT2JqZWN0IGFuZCB1c2UgdGhhdCBhcyB0aGUgcmVwcmVzZW50ZWQgb2JqZWN0IGZvciB0aGUgbG9ncyBzaWRlYmFyIHBhbmVsLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0xvZ09iamVjdC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dPYmplY3QpOgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9zZXNzaW9uU3RhcnRlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKCjIwMTItMDEtMjYgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBNb3JlIG9mIDxyZGFyOi8vcHJvYmxlbS8xMDMxODc4ND4gSW1wbGVtZW50IHRoZSBMb2cgc2lkZWJhciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbi4KCiAgICAgICAgQWRkIHRyZWUgZWxlbWVudHMgdG8gdGhlIExvZyBTaWRlYmFyLiBFYWNoIHRyZWUgZWxlbWVudCBoYXMgdGhlIFVSTCBhbmQgZGF0ZSBvZiB3aGVuIHRoZSBwYWdlIHN0YXJ0ZWQgbG9hZGluZywKICAgICAgICBhbmQgc2VsZWN0aW5nIGl0IHdpbGwgc2hvdyBhIGNvbnNvbGUgdmlldyBpbiB0aGUgZnV0dXJlLgoKICAgICAgICBJZiB0aGUgc2FtZSBwYWdlIGlzIGxvYWRlZCwgdGhlIGNvbnNvbGUgc2lkZWJhciBpc24ndCBjbGVhcmVkLCBidXQgd2hlbiBhIHBhZ2Ugd2l0aCBhIGRpZmZlcmVudCBVUkwgaXMgbG9hZGVkLAogICAgICAgIHRoZW4gdGhlIHNpZGViYXIgaXMgY2xlYXJlZC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nTWFuYWdlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuTG9nTWFuYWdlci5pbml0aWFsaXplKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ01hbmFnZXIucHJvdG90eXBlLl9tYWluUmVzb3VyY2VEaWRDaGFuZ2UpOgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dTaWRlYmFyUGFuZWwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nU2lkZWJhclBhbmVsLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuTG9nU2lkZWJhclBhbmVsLl9zZXNzaW9uU3RhcnRlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9sb2dzQ2xlYXJlZCk6CgoyMDEyLTAxLTI2ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3ODQ+IEltcGxlbWVudCB0aGUgTG9nIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIEFkZCBhIHN0dWIgTG9nTWFuYWdlciwgYW5kIGNhbGwgaXQgZnJvbSBNYWluLmpzLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnNvbGVPYnNlcnZlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVPYnNlcnZlci5wcm90b3R5cGUuY29uc3RydWN0b3IuV2ViSW5zcGVjdG9yLkNvbnNvbGVPYnNlcnZlci5tZXNzYWdlQWRkZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9Mb2dNYW5hZ2VyLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ01hbmFnZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTG9nTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IuV2ViSW5zcGVjdG9yLkxvZ01hbmFnZXIuaW5pdGlhbGl6ZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOgoKMjAxMi0wMS0yNiAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIFN0YXJ0IG9mIDxyZGFyOi8vcHJvYmxlbS8xMDMxODc4ND4gSW1wbGVtZW50IHRoZSBMb2cgc2lkZWJhciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbi4KCiAgICAgICAgQWRkIGEgc3R1YiBMb2dTaWRlYmFyUGFuZWwgYW5kIGNyZWF0ZSBpdCBpbnN0ZWFkIG9mIGEgZ2VuZXJpYyBzaWRlYmFyIHBhbmVsIGZvciBMb2cuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6CgoyMDEyLTAxLTI1ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3NjE+IEltcGxlbWVudCB0aGUgSXNzdWUgc2lkZWJhciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbi4KCiAgICAgICAgSGlnaGxpZ2h0IGxpbmVzIHRoYXQgaGF2ZSBlcnJvcnMgb3Igd2FybmluZ3MuIFRoaXMgcGF0Y2ggZG9lc24ndCBiZWhhdmUgY29ycmVjdGx5IGZvciBsaW5lcyB0aGF0CiAgICAgICAgaGF2ZSBtdWx0aXBsZSBpc3N1ZXMsIGJ1dCB0aGF0IHdvbid0IGJlIGltcGxlbWVudGVkIHVudGlsIHdlIGFjdHVhbGx5IHNob3cgdGhlIGlzc3VlcyBvbiB0aGUgcGFnZS4KCiAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGEgbmV3IGRlbGVnYXRlIGNhbGwgdG8gVGV4dEVkaXRvciAtIHRleHRFZGl0b3JMaW5lQ29udGVudFVwZGF0ZWQuIFdoZW4gYSBzaW5nbGUgbGluZSdzCiAgICAgICAgY29udGVudCBpcyB1cGRhdGVkLCBpdCBjYWxscyB0byB0aGUgZGVsZWdhdGUsIHdoaWNoIHdpbGwgYWRkIGEgc3R5bGUgY2xhc3MgaWYgdGhlcmUgaXMgYW4gaXNzdWUgb24gdGhhdAogICAgICAgIGxpbmUuIEluIHRoZSBmdXR1cmUsIGl0IHdpbGwgYWxzbyBhZGQgdGhlIGVycm9yIHRleHQsIGJ1dCB0aGF0IHdpbGwgYmUgZG9uZSBsYXRlciBhcyB3ZWxsLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRSZXNvdXJjZUNvbnRlbnRWaWV3LmNzczoKICAgICAgICAoLnRleHQtZWRpdG9yIC50ZXh0LWVkaXRvci10ZXh0LWNodW5rLmVycm9yKTogQWRkIGEgYmFja2dyb3VuZCBjb2xvciBhbmQgYSBib3ggc2hhZG93LgogICAgICAgICgudGV4dC1lZGl0b3IgLnRleHQtZWRpdG9yLXRleHQtY2h1bmsud2FybmluZyk6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuc2luZ2xlTGluZUVsZW1lbnRGb3JMaW5lKTogUmV0dXJucyB0aGUgZWxlbWVudCBvZiB0aGUgbGluZSBpZiBpdCBpcwogICAgICAgICAgICBhIHNpbmdsZSBsaW5lIChpZiBpdCdzIG5vdCwgaXQgaXNuJ3QgdmlzaWJsZSBhbmQgd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBpdCkuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yVGV4dENodW5rLnByb3RvdHlwZS51cGRhdGVDb250ZW50KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dFJlc291cmNlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUuYWRkSXNzdWUpOiBDYWxsIF9hZGRJc3N1ZVRvTGluZSBpZiB3ZSBoYXZlIGFuIGVsZW1lbnQgdG8gdXBkYXRlLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLl9hZGRJc3N1ZVRvTGluZSk6IEFkZCBhIHN0eWxlIGNsYXNzIHRvIHRoZSBsaW5lIGlmIHRoZXJlIGlzIGFuCiAgICAgICAgICAgIGlzc3VlLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLnRleHRFZGl0b3JMaW5lQ29udGVudFVwZGF0ZWQpOiBDYWxsIF9hZGRJc3N1ZVRvTGluZSBpZiB3ZSBoYXZlCiAgICAgICAgICAgIGFueSBpc3N1ZXMgb24gdGhhdCBsaW5lLgogICAgICAgICogVXNlckludGVyZmFjZS9Jc3N1ZU1hbmFnZXIuanMKICAgICAgICAoV2ViSW5zcGVjdG9yLklzc3VlTWFuYWdlci5wcm90b3R5cGUuaXNzdWVXYXNBZGRlZCk6IFdlIGFyZSBnaXZlbiAxLWJhc2VkIGxpbmUgbnVtYmVycyBmcm9tIHRoZSBwcm90b2NvbCwgYnV0IGV2ZXJ5d2hlcmUKICAgICAgICAgICAgaW4gdGhlIGluc3BlY3RvciBkZWFscyB3aXRoIDAgYmFzZWQgbGluZSBudW1iZXJzLiBTdWJ0cmFjdCAxIGZyb20gdGhlIGlzc3VlIGxpbmUgbnVtYmVyIHRoYXQgd2UgYXJlIGdpdmVuIGJlZm9yZQogICAgICAgICAgICBzdG9yaW5nIHRoZSBJc3N1ZU1lc3NhZ2UuCgoyMDEyLTAxLTI0ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3NjE+IEltcGxlbWVudCB0aGUgSXNzdWUgc2lkZWJhciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbi4KCiAgICAgICAgV2hlbiBhIFRleHRSZXNvdXJjZUNvbnRlbnRWaWV3IGlzIGluc3RhbnRpYXRlZCwgZ2V0IGEgbGlzdCBvZiBpc3N1ZXMgZm9yIGl0cyByZXNvdXJjZSwgYW5kIHN0YXJ0IGxpc3RlbmluZyBmb3IgbW9yZS4KCiAgICAgICAgV2hlbiB3ZSBnZXQgYW4gaXNzdWUgZnJvbSB0aGUgbGlzdGVuZXIgb3IgZnJvbSB0aGUgY29uc3RydWN0b3IsIGNhbGwgX2FkZElzc3VlIG9uIHRoZW0sIHdoaWNoIGFkZHMgdGhlIGlzc3VlIHRvCiAgICAgICAgdGhlIGNvbnRlbnQgdmlldydzIGNvbGxlY3Rpb24gb2YgaXNzdWVzLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRSZXNvdXJjZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcpOiBTdGFydCBsaXN0ZW5pbmcgZm9yIGlzc3VlcyBhbmQgYnVpbGQgYSBsaXN0IG9mIGlzc3Vlcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5faXNzdWVXYXNBZGRlZCk6IENhbGwgX2FkZElzc3VlLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLl9hZGRJc3N1ZSk6IEFkZCB0aGUgaXNzdWUgdG8gb3VyIGxpc3Qgb2YgaXNzdWVzLCBhbmQgYWRkIGEgRklYTUUgdG8gZG8gbW9yZQogICAgICAgICAgICB3aXRoIGl0LgoKMjAxMi0wMS0yMyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIFJlbW92ZSBzb21lIHVudXNlZCB2YXJpYWJsZXMuCgogICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CgoyMDEyLTAxLTIzICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgTGFzdCBwYXJ0IG9mIDxyZGFyOi8vcHJvYmxlbS8xMDMxODc1ND4gSW1wbGVtZW50IHRoZSBTZWFyY2ggc2lkZWJhciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbi4KCiAgICAgICAgV2hlbiBhIHJlc291cmNlIG1hdGNoIGlzIHNlbGVjdGVkIGluIHRoZSBzZWFyY2ggc2lkZWJhciwgc2VsZWN0IHRoZSB0ZXh0IHRoYXQgd2FzIHNlYXJjaGVkIGZvciBpbgogICAgICAgIHRoZSBUZXh0Q29udGVudFJlc291cmNlVmlldyBhbmQgc2Nyb2xsIGl0IGludG8gdmlldy4KCiAgICAgICAgVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gZmluZCB0aGUgdGV4dCB0aGF0IHRoZSB1c2VyIHNlYXJjaGVkIGZvciBpbiBsb25nIGxpbmVzLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5zaG93U291cmNlQ29kZSk6IFBhc3MgdGhlIHRleHQgcmFuZ2UgdG8gc2VsZWN0IGFsb25nLgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5zaG93UmVzb3VyY2VTb3VyY2VDb2RlKTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NlYXJjaFNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3RyZWVFbGVtZW50U2VsZWN0ZWQpOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dFJlc291cmNlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUuY29udGVudEF2YWlsYWJsZSk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLnJldmVhbExpbmUpOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnNob3duKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5yZXZlYWxMaW5lKTogQnVpbGQgYSBzZWxlY3Rpb24gcmFuZ2UgKHN0YXJ0IGFuZCBlbmQgbm9kZXMgYW5kIG9mZnNldHMpLCBhbmQgc2V0IG91ciBzZWxlY3Rpb24KICAgICAgICAgICAgYW5kIGJyaW5nIHRoZSBjb250YWluZXIgb2YgdGhlIHNlbGVjdGlvbiBlbmQgaW50byB2aWV3LgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUucmV2ZWFsTGluZS5nZXRUZXh0Tm9kZXMpOiBGaW5kcyBhbGwgb2YgdGhlIHRleHQgbm9kZXMgaW4gYSBwb3NzaWJseSBzeW50YXggaGlnaGxpZ2h0ZWQgbGluZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnJldmVhbExpbmUuZmluZE9mZnNldEluVGV4dE5vZGVzKTogSXRlcmF0ZSBvdmVyIGFsbCBvZiB0aGUgdGV4dCBub2RlcywgYW5kIGZpbmQgdGhlIGNoaWxkCiAgICAgICAgICAgIG5vZGUgYW5kIG9mZnNldCBpbnRvIHRoZSBjaGlsZCBub2RlIHRoYXQgbWF0Y2hlcyB0aGUgb2Zmc2V0IGludG8gdGhlIHdob2xlIGxpbmUuCgoyMDEyLTAxLTIzICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IHNvbWUgZXJyb3JzIHdoZW4gaW5zcGVjdGluZyBmcmFtZXMgbm93IHRoYXQgI2RvY3VtZW50IGlzIGluY2x1ZGVkIGluIHRoZSB0cmVlLgoKICAgICAgICBUaGlzIGdpdmVzIGRvY3VtZW50IG5vZGVzIHRoZWlyIG93biAiRCIgaWNvbiwgd2hpY2ggd2FzIHByZXZpb3VzbHkgbWlzc2luZyBiZWNhdXNlIG9mCiAgICAgICAgYSB0eXBvIGZvciB0aGUgIk4iIGljb24uCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVFbGVtZW50UGF0aENvbXBvbmVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVFbGVtZW50UGF0aENvbXBvbmVudCk6IEFkZCBhIGNhc2UgZm9yIE5vZGUuRE9DVU1FTlRfTk9ERS4gRml4IGEgdHlwbwogICAgICAgIGJ5IHVzaW5nIERPTU5vZGVJY29uU3R5bGVDbGFzc05hbWUgaW5zdGVhZCBvZiBET01Vbmtub3duTm9kZUljb25TdHlsZUNsYXNzTmFtZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RPTURvY3VtZW50LnBkZjogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1BhdGhDb21wb25lbnRJY29ucy5jc3M6CiAgICAgICAgKC5kb20tZG9jdW1lbnQtaWNvbiAuaWNvbik6IEFkZGVkLgoKMjAxMi0wMS0yMyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1lcmdlIHRoZSBET01BZ2VudC5qcyBjaGFuZ2UgaW4gcjEwNTYyMCBzbyB0aGUgSW5zcGVjdCBFbGVtZW50IGNvbnRlbnQgbWVudSB3b3JrcyBpbiBmcmFtZXMuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5fc2V0Q2hpbGRyZW5QYXlsb2FkKTogUmV0dXJuIGVhcmx5IGZvciBmcmFtZSBlbGVtZW50cy4KCjIwMTItMDEtMjMgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIGNvbW1hbmQtY2xpY2tpbmcgbGlua3MgaW4gdGhlIERPTSB0cmVlIGFsd2F5cyBvcGVuIGludG8gYSBuZXcgU2FmYXJpIHdpbmRvdy90YWIuCgogICAgICAgIFNpbmNlIERPTVRyZWVDb250ZW50VmlldyBkZWxheXMgdGhlIGNhbGwgdG8gV2ViSW5zcGVjdG9yLm9wZW5VUkwsIHRoZSBvcGVuVVJMIGZ1bmN0aW9uCiAgICAgICAgY2FuJ3QgbG9vayBhdCB3aW5kb3cuZXZlbnQgdG8gc2VlIGlmIHRoZSBjb21tYW5kIGtleSBpcyBkb3duLiBTbyB3ZSBuZWVkIHRvIGRvIHRoYXQKICAgICAgICBjaGVjayBiZWZvcmUgY2FsbGluZyBvcGVuVVJMLgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlQ29udGVudFZpZXcucHJvdG90eXBlLl9tb3VzZVdhc0NsaWNrZWQuZm9sbG93TGluayk6IENoZWNrIGZvciBtZXRhS2V5CiAgICAgICAgYW5kIHBhc3MgdGhhdCBhcyBhbHdheXNPcGVuRXh0ZXJuYWxseSB0byBXZWJJbnNwZWN0b3Iub3BlblVSTC4KCjIwMTItMDEtMjMgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBVc2UgSW5zcGVjdG9yRnJvbnRlbmRIb3N0Lm9wZW5Jbk5ld1RhYiBpbnN0ZWFkIG9mIFBhZ2VBZ2VudC5vcGVuIG5vdyB0aGF0CiAgICAgICAgaHR0cHM6Ly93ZWJraXQub3JnL2IvNzQ3OTAgaXMgZml4ZWQuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5vcGVuVVJMKTogVXNlIEluc3BlY3RvckZyb250ZW5kSG9zdC5vcGVuSW5OZXdUYWIgaW5zdGVhZCBvZiBQYWdlQWdlbnQub3Blbi4KCjIwMTItMDEtMjMgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBNb3JlIG9mIDxyZGFyOi8vcHJvYmxlbS8xMDMxODc1ND4gSW1wbGVtZW50IHRoZSBTZWFyY2ggc2lkZWJhciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbi4KCiAgICAgICAgU3VwcG9ydCB0aGUgYWJpbGl0eSB0byBoYXZlIG11bHRpcGxlIG1hdGNoZXMgb24gYSBsaW5lIHdoZW4gd2Ugc2VhcmNoIHRoZSBET00uCgogICAgICAgIFdoZW4gd2UgZmluZCBhIERPTSBlbGVtZW50IG1hdGNoZXMgb3VyIHNlYXJjaCB0ZXJtLCB3ZSBnZW5lcmF0ZSBhIHRpdGxlIGZvciBpdCAoYnkgbW92aW5nIHRoZSBfZ2VuZXJhdGVUaXRsZQogICAgICAgIGZ1bmN0aW9uIGZyb20gRE9NU2VhcmNoTWF0Y2hPYmplY3Qgb3V0IG9mIHRoZSBjbGFzcyB0byBhIHN0YXRpYyBtZXRob2QpLCBhbmQgZmluZCBhbGwgb2Ygb3VyIG1hdGNoZXMgaW4gdGhlIHRpdGxlLgoKICAgICAgICBXZSB0aGVuIGdlbmVyYXRlIERPTVNlYXJjaE1hdGNoT2JqZWN0cyBhbmQgU2VhcmNoUmVzdWx0VHJlZUVsZW1lbnRzIGZvciBlYWNoIG9mIHRoZXNlLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVNlYXJjaE1hdGNoT2JqZWN0LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU2VhcmNoTWF0Y2hPYmplY3QpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU2VhcmNoTWF0Y2hPYmplY3QucHJvdG90eXBlLmdldCB0aXRsZSk6IFJldHVybnMgdGhlIHRpdGxlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU2VhcmNoTWF0Y2hPYmplY3QucHJvdG90eXBlLmdldCB0ZXh0UmFuZ2UpOiBSZXR1cm5zIHRoZSB0ZXh0IHJhbmdlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU2VhcmNoTWF0Y2hPYmplY3QudGl0bGVGb3JET01Ob2RlKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2VhcmNoUmVzdWx0VHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHRUcmVlRWxlbWVudC50cnVuY2F0ZUFuZEhpZ2hsaWdodFRpdGxlKTogV2UgYWx3YXlzIGhhdmUgYSB0ZXh0UmFuZ2Ugbm93LCBib3RoIERPTVNlYXJjaE1hdGNoT2JqZWN0IGFuZCBSZXNvdXJjZVNlYXJjaE1hdGNoT2JqZWN0CiAgICAgICAgICAgIGJvdGggaGF2ZSBhIHRleHRSYW5nZSBnZXR0ZXIuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NlYXJjaFNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbC5wcm90b3R5cGUuY29uc3RydWN0b3IuV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbC5fc2VhcmNoRmllbGRDaGFuZ2VkLmRvbUNhbGxiYWNrLmRvbVNlYXJjaFJlc3VsdHMpOiBHZW5lcmF0ZQogICAgICAgICAgICB0aGUgdGV4dCBmb3IgdGhlIERPTSBub2RlIHRoYXQgd2UgZm91bmQgYSByZXN1bHQgZm9yLCBhbmQgZmluZCBhbGwgb2YgdGhlIG1hdGNoaW5nIGluc3RhbmNlcyBpbiB0aGF0IG5vZGUuCgoKMjAxMi0wMS0yMyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIE1vcmUgb2YgPHJkYXI6Ly9wcm9ibGVtLzEwMzE4NzU0PiBJbXBsZW1lbnQgdGhlIFNlYXJjaCBzaWRlYmFyIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduLgoKICAgICAgICBTdXBwb3J0IHRoZSBhYmlsaXR5IHRvIGhhdmUgbXVsdGlwbGUgbWF0Y2hlcyBvbiBhIGxpbmUgZm9yIHdoZW4gd2Ugc2VhcmNoIGluIGEgcmVzb3VyY2UuCgogICAgICAgIFdoZW4gdGhlIFBhZ2VBZ2VudCBnaXZlcyB1cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGluZXMgdGhhdCBtYXRjaCBvdXIgc2VhcmNoIHF1ZXJ5LCBpbnN0ZWFkIG9mIGp1c3QKICAgICAgICBmaW5kaW5nIHRoZSBmaXJzdCBtYXRjaCwgZmluZCBhbGwgb2YgdGhlIG1hdGNoZXMgb24gdGhhdCBsaW5lLiBDcmVhdGUgYSBSZXNvdXJjZVNlYXJjaE1hdGNoT2JqZWN0IGFuZAogICAgICAgIFNlYXJjaFJlc3VsdFRyZWVFbGVtZW50IGZvciBlYWNoIHJlc3VsdCBvbiB0aGUgbGluZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVNlYXJjaE1hdGNoT2JqZWN0LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTZWFyY2hNYXRjaE9iamVjdCk6IFNldCB0aGUgdGV4dFJhbmdlCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNlYXJjaE1hdGNoT2JqZWN0LnByb3RvdHlwZS5nZXQgdGV4dFJhbmdlKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2VhcmNoUmVzdWx0VHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHRUcmVlRWxlbWVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHRUcmVlRWxlbWVudC50cnVuY2F0ZUFuZEhpZ2hsaWdodFRpdGxlKTogSWYgd2Ugd2VyZSBnaXZlbiBhIHRleHQgcmFuZ2UsIHVzZSB0aGF0IGluc3RlYWQgb2YgZmluZGluZyB0aGUgZmlyc3QgbWF0Y2gKICAgICAgICAgICAgaW4gdGhlIHRpdGxlLgogICAgICAgICogVXNlckludGVyZmFjZS9TZWFyY2hTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hTaWRlYmFyUGFuZWwucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5TZWFyY2hTaWRlYmFyUGFuZWwuX3NlYXJjaEZpZWxkQ2hhbmdlZC5yZXNvdXJjZXNDYWxsYmFjay5yZXNvdXJjZUNhbGxiYWNrKTogRmluZAogICAgICAgICAgICBhbGwgb2YgdGhlIG1hdGNoZXMgb24gdGhlIGxpbmUgaW5zdGVhZCBvZiBqdXN0IHRoZSBmaXJzdCBvbmUuCgoyMDEyLTAxLTIzICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3NTQ+IEltcGxlbWVudCB0aGUgU2VhcmNoIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIEJyaW5nIFRleHRSYW5nZSBvdmVyIGZyb20gb3BlbiBzb3VyY2UuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dFJhbmdlLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSYW5nZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmFuZ2UucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5UZXh0UmFuZ2UuaXNFbXB0eSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmFuZ2UucHJvdG90eXBlLmdldCBsaW5lc0NvdW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSYW5nZS5wcm90b3R5cGUuY29sbGFwc2VUb0VuZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmFuZ2UucHJvdG90eXBlLm5vcm1hbGl6ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmFuZ2UucHJvdG90eXBlLmNsb25lKToKCjIwMTItMDEtMjAgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBNb3JlIG9mIDxyZGFyOi8vcHJvYmxlbS8xMDMxODc1ND4gSW1wbGVtZW50IHRoZSBTZWFyY2ggc2lkZWJhciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbi4KCiAgICAgICAgQ2FuY2VsIG9sZCBzZWFyY2hlcyB3aGVuIG5ldyBvbmVzIGFyZSBzdGFydGVkLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NlYXJjaFNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbC5wcm90b3R5cGUuY29uc3RydWN0b3IuV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbC5fc2VhcmNoRmllbGRDaGFuZ2VkLmRvbUNhbGxiYWNrLmRvbVNlYXJjaFJlc3VsdHMpOiBDaGVjawogICAgICAgICAgICB0byBtYWtlIHN1cmUgd2UgYXJlIHN0aWxsIGFwcGVuZGluZyByZXN1bHRzIGZvciB0aGUgcmlnaHQgc2VhcmNoSWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hTaWRlYmFyUGFuZWwucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5TZWFyY2hTaWRlYmFyUGFuZWwuX3NlYXJjaEZpZWxkQ2hhbmdlZC5kb21DYWxsYmFjayk6IFNldCB0aGUgY3VycmVudCBfc2VhcmNoSWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hTaWRlYmFyUGFuZWwucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5TZWFyY2hTaWRlYmFyUGFuZWwuX3NlYXJjaEZpZWxkQ2hhbmdlZCk6IENhbGwgX2NhbmNlbEN1cnJlbnRTZWFyY2guCiAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9jYW5jZWxDdXJyZW50U2VhcmNoKTogSWYgYSBzZWFyY2ggSUQgaXMgc2V0LCBjYWxsIERPTUFnZW50LmRpc2NhcmRTZWFyY2hSZXN1bHRzIG9uIGl0LAogICAgICAgICAgICBhbmQgZGVsZXRlIHRoZSBzZWFyY2hJZC4KCjIwMTItMDEtMjIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBDb2xsYXNwZSBwYXRoIGNvbXBvbmVudHMgaW4gdGhlIG5hdmlnYXRpb24gYmFyIHdoZW4gdGhleSBhcmUgdG9vIHdpZGUgdG8gZml0LgoKICAgICAgICBUaGUgY29tcG9uZW50cyBjb2xsYXBzZSBmcm9tIGxlZnQgdG8gcmlnaHQgd2l0aCB0ZXh0IHRydW5jYXRpb24gYW5kIGV2ZW50dWFsbHkgdG8ganVzdCB0aGUgaWNvbi4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSGllcmFyY2hpY2FsUGF0aENvbXBvbmVudC5jc3M6CiAgICAgICAgKC5oaWVyYXJjaGljYWwtcGF0aC1jb21wb25lbnQpOiBVc2UgLXdlYmtpdC1ib3ggYW5kIHNldCBhIG1pbi13aWR0aC4KICAgICAgICAoLmhpZXJhcmNoaWNhbC1wYXRoLWNvbXBvbmVudCA+IC50aXRsZSk6IFVzZSAtd2Via2l0LWJveCBzbyB0aGUgdGl0bGUgY2FuIGZsZXguCiAgICAgICAgKC5oaWVyYXJjaGljYWwtcGF0aC1jb21wb25lbnQgPiAudGl0bGUgPiAuY29udGVudCk6IEFkZGVkLiBOZWVkZWQgdG8gbWFrZSB0ZXh0LW92ZXJmbG93IHdvcmsuCiAgICAgICAgKC5oaWVyYXJjaGljYWwtcGF0aDpub3QoLmFsd2F5cy1zaG93LWxhc3QtcGF0aC1jb21wb25lbnQtc2VwYXJhdG9yKSA+IC5oaWVyYXJjaGljYWwtcGF0aC1jb21wb25lbnQ6bGFzdC1jaGlsZCk6IEFkZGVkLgogICAgICAgIFVzZSBhIGRpZmZlcmVudCBtaW4td2lkdGggc2luY2UgdGhlIHNlcGFyYXRvciBpcyBoaWRkZW4uCiAgICAgICAgKC5oaWVyYXJjaGljYWwtcGF0aDpub3QoLmFsd2F5cy1zaG93LWxhc3QtcGF0aC1jb21wb25lbnQtc2VwYXJhdG9yKSA+IC5oaWVyYXJjaGljYWwtcGF0aC1jb21wb25lbnQ6bGFzdC1jaGlsZCA+IC5zZXBhcmF0b3IpOgogICAgICAgIFJlbmFtZWQgdG8gdXNlIDpsYXN0LWNoaWxkIGluc3RlYWQgb2YgOmxhc3Qtb2YtdHlwZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSGllcmFyY2hpY2FsUGF0aENvbXBvbmVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkhpZXJhcmNoaWNhbFBhdGhDb21wb25lbnQpOiBDcmVhdGUgYSB0aXRsZSBjb250ZW50IGVsZW1lbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5IaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50LnByb3RvdHlwZS5nZXQgZGlzcGxheU5hbWUpOiBVc2UgdGhlIHRpdGxlIGNvbnRlbnQgZWxlbWVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkhpZXJhcmNoaWNhbFBhdGhDb21wb25lbnQucHJvdG90eXBlLnNldCBkaXNwbGF5TmFtZSk6IERpdHRvLiBBbHNvIHNldCB0aGUgdG9vbCB0aXAuCiAgICAgICAgKFdlYkluc3BlY3Rvci5IaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50LnByb3RvdHlwZS5nZXQgZm9yY2VkV2lkdGgpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkhpZXJhcmNoaWNhbFBhdGhDb21wb25lbnQucHJvdG90eXBlLnNldCBmb3JjZWRXaWR0aCk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9IaWVyYXJjaGljYWxQYXRoTmF2aWdhdGlvbkl0ZW0uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5IaWVyYXJjaGljYWxQYXRoTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLnNldCBjb21wb25lbnRzKTogQ2FsbCB1cGRhdGVMYXlvdXQgb24gdGhlIE5hdmlnYXRpb25CYXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5IaWVyYXJjaGljYWxQYXRoTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLnVwZGF0ZUxheW91dCk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uQmFyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvbkJhci5wcm90b3R5cGUuaW5zZXJ0TmF2aWdhdGlvbkl0ZW0pOiBTZXQgX3BhcmVudE5hdmlnYXRpb25CYXIgdG8gdGhpcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25CYXIucHJvdG90eXBlLnJlbW92ZU5hdmlnYXRpb25JdGVtKTogU2V0IF9wYXJlbnROYXZpZ2F0aW9uQmFyIHRvIG51bGwuCiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uQmFyLnByb3RvdHlwZS51cGRhdGVMYXlvdXQpOiBDYWxsIHVwZGF0ZUxheW91dCBvbiBlYWNoIG5hdmlnYXRpb24gaXRlbS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvbkl0ZW0uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuZ2V0IHBhcmVudE5hdmlnYXRpb25CYXIpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS51cGRhdGVMYXlvdXQpOiBBZGRlZCBzdHViLgoKMjAxMi0wMS0yMiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgaXQgcG9zc2libGUgZm9yIGNvbnRlbnQgdmlld3MgdG8gdXBkYXRlIHRoZWlyIGxheW91dCBhcyB0aGUgc2l6ZSBvZiB0aGUgY29udGVudCBhcmVhIGNoYW5nZXMuCgogICAgICAgIFRoZSBET00gdHJlZSBuZWVkcyB0aGlzIHRvIHVwZGF0ZSB0aGUgc2l6ZSBvZiB0aGUgc2VsZWN0aW9uIHRvIHN0YXkgYWxpZ25lZCB3aXRoIHRoZSByb3cuIERhdGEgZ3JpZAogICAgICAgIGJhc2VkIGNvbnRlbnQgdmlld3MgbmVlZCB0aGlzIHRvIHVwZGF0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIHJlc2l6ZXIgZWxlbWVudHMuIFRoZSBmb250IGNvbnRlbnQgdmlldwogICAgICAgIHVzZXMgdGhpcyB0byB1cGRhdGUgdGhlIHNpemUgb2YgdGhlIGZvbnQgcHJldmlldy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ2x1c3RlckNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ2x1c3RlckNvbnRlbnRWaWV3LnByb3RvdHlwZS51cGRhdGVMYXlvdXQpOiBBZGRlZC4gQ2FsbCB0aHJvdWdoIHRvIHRoZSBjdXJyZW50IGNvbnRlbnQgdmlldy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudEJyb3dzZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUudXBkYXRlTGF5b3V0KTogQWRkZWQuIENhbGwgdXBkYXRlTGF5b3V0IG9uIHRoZSBuYXZpZ2F0aW9uIGJhciBhbmQKICAgICAgICB0aGUgY29udGVudCB2aWV3IGNvbnRhaW5lci4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlldy5wcm90b3R5cGUudXBkYXRlTGF5b3V0KTogQWRkZWQgc3R1Yi4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudFZpZXdDb250YWluZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlld0NvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlTGF5b3V0KTogQWRkZWQuIENhbGwgdGhyb3VnaCB0byB0aGUgY3VycmVudCBjb250ZW50IHZpZXcuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Nvb2tpZVN0b3JhZ2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvb2tpZVN0b3JhZ2VDb250ZW50Vmlldy5wcm90b3R5cGUudXBkYXRlTGF5b3V0KTogQWRkZWQuIENhbGwgdXBkYXRlV2lkdGhzIG9uIHRoZSBEYXRhR3JpZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NU3RvcmFnZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZUNvbnRlbnRWaWV3LnByb3RvdHlwZS51cGRhdGVMYXlvdXQpOiBBZGRlZC4gQ2FsbCB1cGRhdGVXaWR0aHMgb24gdGhlIERhdGFHcmlkLgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlQ29udGVudFZpZXcucHJvdG90eXBlLnVwZGF0ZUxheW91dCk6IEFkZGVkLiBDYWxsIHVwZGF0ZVNlbGVjdGlvbiBvbiB0aGUgRE9NVHJlZU91dGxpbmUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFiYXNlVGFibGVDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlVGFibGVDb250ZW50Vmlldy5wcm90b3R5cGUudXBkYXRlTGF5b3V0KTogQWRkZWQuIENhbGwgdXBkYXRlV2lkdGhzIG9uIHRoZSBEYXRhR3JpZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRm9udFJlc291cmNlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Gb250UmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUudXBkYXRlTGF5b3V0KTogQWRkZWQuIENhbGwgc2l6ZVRvRml0LgogICAgICAgIChXZWJJbnNwZWN0b3IuRm9udFJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLnNob3duKTogUmVtb3ZlZCBjYWxsIHRvIHNpemVUb0ZpdCBzaW5jZSB1cGRhdGVMYXlvdXQgaXMKICAgICAgICBjYWxsZWQgb24gc2hvdyB0b28uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKTogQWRkZWQgZXZlbnQgbGlzdGVuZXJzIGZvciBTaWRlYmFyLkV2ZW50LldpZHRoRGlkQ2hhbmdlIGFuZCB3aW5kb3cgcmVzaXplLgogICAgICAgIChXZWJJbnNwZWN0b3IuX2NvbnRlbnRCcm93c2VyU2l6ZURpZENoYW5nZSk6IEFkZGVkLiBDYWxsIHVwZGF0ZUxheW91dCBvbiBjb250ZW50QnJvd3Nlci4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2lkZWJhci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXIucHJvdG90eXBlLnNldCB3aWR0aCk6IEZpcmUgV2lkdGhEaWRDaGFuZ2UgZXZlbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyLnByb3RvdHlwZS5zZXQgY29sbGFwc2VkKTogRGl0dG8uCgoyMDEyLTAxLTIxICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUmVtb3ZlIHJlc291cmNlcyBmcm9tIHRoZSBTZWFyY2ggYW5kIElzc3VlIHNpZGViYXJzIHdoZW4gdGhlIGZyYW1lcyB0aGV5IGJlbG9uZyB0byBhcmUKICAgICAgICByZW1vdmVkIG9yIG5hdmlnYXRlZCB0byBhIG5ldyBwYWdlLgoKICAgICAgICBQYXJ0IG9mOgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDMxODc1ND4gSW1wbGVtZW50IHRoZSBTZWFyY2ggc2lkZWJhciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDMxODc2MT4gSW1wbGVtZW50IHRoZSBJc3N1ZSBzaWRlYmFyIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLmlzRGV0YWNoZWQpOiBBZGRlZC4gSGVscGVyIGZ1bmN0aW9uLgogICAgICAgICogVXNlckludGVyZmFjZS9Jc3N1ZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLklzc3VlU2lkZWJhclBhbmVsKTogQWRkZWQgZXZlbnQgbGlzdGVuZXJzLgogICAgICAgIChXZWJJbnNwZWN0b3IuSXNzdWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9jaGVja0Zvck9sZFJlc291cmNlcyk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuSXNzdWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9jaGVja0Zvck9sZFJlc291cmNlcy5kZWxheWVkV29yayk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9TZWFyY2hTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hTaWRlYmFyUGFuZWwpOiBBZGRlZCBldmVudCBsaXN0ZW5lcnMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9jaGVja0Zvck9sZFJlc291cmNlcyk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fY2hlY2tGb3JPbGRSZXNvdXJjZXMuZGVsYXllZFdvcmspOiBBZGRlZC4KCjIwMTItMDEtMjEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBEaXNhc3NvY2lhdGUgcmVzb3VyY2VzIGZyb20gdGhlaXIgZnJhbWUgd2hlbiB0aGUgbWFpbiByZXNvdXJjZSBjaGFuZ2VzLgoKICAgICAgICBSZXNvdXJjZXMgd2VyZSBub3QgYmVpbmcgZGlzYXNzb2NpYXRlZCwgc28gdGhleSBhbHdheXMgaGFkIGEgdmFsaWQgcGFyZW50RnJhbWUuIFRoaXMgbWFkZSBpdAogICAgICAgIGhhcmQgdG8gdGVsbCBpZiBhIHJlc291cmNlIHdhcyBzdGlsbCBwYXJ0IG9mIHRoZSBwYWdlIG9yIG5vdC4gVGhpcyBjaGFuZ2UgaXMgbmVlZGVkIHNvIHRoZSBTZWFyY2gKICAgICAgICBhbmQgSXNzdWUgc2lkZWJhcnMga25vd3Mgd2hlbiBpdCBjYW4gcmVtb3ZlIHJlc291cmNlcyBkdXJpbmcgbmF2aWdhdGlvbi4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZS5wcm90b3R5cGUuaW5pdGlhbGl6ZSk6IENhbGwgX2Rpc2Fzc29jaWF0ZVdpdGhSZXNvdXJjZSBmb3IgdGhlIG9sZCBtYWluIHJlc291cmNlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLmNvbW1pdFByb3Zpc2lvbmFsTG9hZCk6IERpdHRvLiBBbHNvIGNhbGwgcmVtb3ZlQWxsUmVzb3VyY2VzIGJlZm9yZQogICAgICAgIGNvbW1pdHRpbmcgdGhlIHByb3Zpc2lvbmFsIHJlc291cmNlcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2UuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUuaXNNYWluUmVzb3VyY2UpOiBOdWxsIGNoZWNrIF9wYXJlbnRGcmFtZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5fcmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZCk6IE51bGwgY2hlY2sgX3BhcmVudEZyYW1lIGFuZCBhZGQgYQogICAgICAgIGZhbGxiYWNrIGJyYW5jaCBzbyBwZW5kaW5nIGNhbGxiYWNrcyBnZXQgbm90aWZpZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fdXBkYXRlVGl0bGVzKTogTnVsbCBjaGVjayBmcmFtZS4KCjIwMTItMDEtMjEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBTaG93IGEgZm9jdXMgcmluZyBhcm91bmQgdGhlIHNlYXJjaCBmaWVsZCBpbiB0aGUgU2VhcmNoIHNpZGViYXIgb2YgdGhlIFdlYiBJbnNwZWN0b3IuCgogICAgICAgIFRoZSBmaWx0ZXIgZmllbGQgZG9lcyBub3Qgc2hvdyBhIGZvY3VzIHJpbmcgKG1hdGNoaW5nIFhjb2RlKSwgYnV0IHRoZSBzZWFyY2ggZmllbGQgc2hvdWxkLgoKICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRmlsdGVyQmFyLmNzczoKICAgICAgICAoLmZpbHRlci1iYXIpOiBSZW1vdmUgb3V0bGluZTogbm9uZS4gTm90IHN1cmUgd2h5IGl0IHdhcyBoZXJlLCBpdCBpcyBzdGlsbCBzZXQgb24KICAgICAgICAuZmlsdGVyLWJhciA+IGlucHV0W3R5cGU9InNlYXJjaCJdLgogICAgICAgICogVXNlckludGVyZmFjZS9TZWFyY2hTaWRlYmFyUGFuZWwuY3NzOgogICAgICAgICguc2lkZWJhciA+IC5wYW5lbC5zZWFyY2ggPiAuc2VhcmNoLWJhcik6IFJlbW92ZSBvdXRsaW5lOiBub25lLgogICAgICAgICguc2lkZWJhciA+IC5wYW5lbC5zZWFyY2ggPiAuc2VhcmNoLWJhciA+IGlucHV0W3R5cGU9InNlYXJjaCJdKTogRGl0dG8uCgoyMDEyLTAxLTIxICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSBmaWx0ZXJpbmcgd29yayBhZ2FpbiBpbiB0aGUgU2VhcmNoIHNpZGViYXIgb2YgdGhlIFdlYiBJbnNwZWN0b3IuCgogICAgICAgIEluIHI0MDIxOCB0aGUgbWFpblRpdGxlIGJlY2FtZSBhIERvY3VtZW50RnJhZ2VtbnQsIGJ1dCB0aGUgZmlsdGVyaW5nIGNvZGUgZXhwZWN0cyBhIHN0cmluZy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NlYXJjaFJlc3VsdFRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoUmVzdWx0VHJlZUVsZW1lbnQucHJvdG90eXBlLmdldCBmaWx0ZXJhYmxlRGF0YSk6IEFkZGVkLiBSZXR1cm4gdGhlIHJhdwogICAgICAgIHRpdGxlIG9mIHRoZSByZXByZXNlbnRlZCBvYmplY3QsIHdoaWNoIGlzIHN0aWxsIGEgc3RyaW5nLgoKMjAxMi0wMS0yMCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFsbG93IHJlc2l6aW5nIHRoZSBXZWIgSW5zcGVjdG9yIHdoZW4gZG9ja2VkLgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmNzczoKICAgICAgICAoI2RvY2tlZC1yZXNpemVyKTogQWRkZWQuCiAgICAgICAgKGJvZHkuZG9ja2VkICNkb2NrZWQtcmVzaXplcik6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEFkZGVkICNkb2NrZWQtcmVzaXplciBlbGVtZW50LgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IEFkZCBtb3VzZWRvd24gbGlzdGVuZXIgb24gI2RvY2tlZC1yZXNpemVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuX2RvY2tlZFJlc2l6ZXJNb3VzZURvd24pOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLl9kb2NrZWRSZXNpemVyTW91c2VEb3duLmRvY2tlZFJlc2l6ZXJEcmFnKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5fZG9ja2VkUmVzaXplck1vdXNlRG93bi5kb2NrZWRSZXNpemVyRHJhZ0VuZCk6IEFkZGVkLgoKMjAxMi0wMS0yMCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBkb2NrIHRvZ2dsZSBhbmQgY2xvc2UgYnV0dG9ucyB0byB0aGUgbmV3IFdlYiBJbnNwZWN0b3IuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0J1dHRvbk5hdmlnYXRpb25JdGVtLmNzczoKICAgICAgICAoLm5hdmlnYXRpb24tYmFyID4gLml0ZW0uYnV0dG9uOm5vdCguZGlzYWJsZWQpOm5vdCgucmFkaW8pOm5vdCguc3VwcHJlc3MtYmV6ZWwpOmFjdGl2ZSk6CiAgICAgICAgQWRkZWQgOm5vdCguc3VwcHJlc3MtYmV6ZWwpLgogICAgICAgICogVXNlckludGVyZmFjZS9CdXR0b25OYXZpZ2F0aW9uSXRlbS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkJ1dHRvbk5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5nZXQgc3VwcHJlc3NCZXplbCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQnV0dG9uTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLnNldCBzdXBwcmVzc0JlemVsKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9DbG9zZS5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRG9jay5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvVW5kb2NrLnBkZjogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3BlY3RvckZyb250ZW5kQVBJLmpzOiBBZGRlZC4KICAgICAgICAoSW5zcGVjdG9yRnJvbnRlbmRBUEkuX2xvYWRlZCk6IEFkZGVkLgogICAgICAgIChJbnNwZWN0b3JGcm9udGVuZEFQSS5fcGVuZGluZ0NvbW1hbmRzKTogQWRkZWQuCiAgICAgICAgKEluc3BlY3RvckZyb250ZW5kQVBJLmlzRGVidWdnaW5nRW5hYmxlZCk6IEFkZGVkIHN0dWIuCiAgICAgICAgKEluc3BlY3RvckZyb250ZW5kQVBJLnNldERlYnVnZ2luZ0VuYWJsZWQpOiBBZGRlZCBzdHViLgogICAgICAgIChJbnNwZWN0b3JGcm9udGVuZEFQSS5pc1RpbWVsaW5lUHJvZmlsaW5nRW5hYmxlZCk6IEFkZGVkIHN0dWIuCiAgICAgICAgKEluc3BlY3RvckZyb250ZW5kQVBJLnNldFRpbWVsaW5lUHJvZmlsaW5nRW5hYmxlZCk6IEFkZGVkIHN0dWIuCiAgICAgICAgKEluc3BlY3RvckZyb250ZW5kQVBJLmlzUHJvZmlsaW5nSmF2YVNjcmlwdCk6IEFkZGVkIHN0dWIuCiAgICAgICAgKEluc3BlY3RvckZyb250ZW5kQVBJLnN0YXJ0UHJvZmlsaW5nSmF2YVNjcmlwdCk6IEFkZGVkIHN0dWIuCiAgICAgICAgKEluc3BlY3RvckZyb250ZW5kQVBJLnN0b3BQcm9maWxpbmdKYXZhU2NyaXB0KTogQWRkZWQgc3R1Yi4KICAgICAgICAoSW5zcGVjdG9yRnJvbnRlbmRBUEkuc2V0QXR0YWNoZWRXaW5kb3cpOiBBZGRlZC4gQ2FsbHMgdXBkYXRlRG9ja2VkU3RhdGUuCiAgICAgICAgKEluc3BlY3RvckZyb250ZW5kQVBJLnNob3dDb25zb2xlKTogQWRkZWQgc3R1Yi4KICAgICAgICAoSW5zcGVjdG9yRnJvbnRlbmRBUEkuZGlzcGF0Y2gpOiBBZGRlZCBzdHViLgogICAgICAgIChJbnNwZWN0b3JGcm9udGVuZEFQSS5sb2FkQ29tcGxldGVkKTogQWRkZWQgc3R1Yi4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5jc3M6CiAgICAgICAgKGJvZHkuZG9ja2VkKTogQWRkZWQuIEFkZHMgYSB0b3AgYm9yZGVyLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEluY2x1ZGVkIEluc3BlY3RvckZyb250ZW5kQVBJLmpzLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IENyZWF0ZSBhbmQgaW5zZXJ0IHRoZSBkb2NrIHRvZ2dsZSBhbmQgY2xvc2UgYnV0dG9ucy4gVGVsbCBJbnNwZWN0b3JGcm9udGVuZEFQSQogICAgICAgIHRoYXQgd2UgYXJlIGxvYWRlZCBzbyBwZW5kaW5nIGNvbW1hbmRzIGFyZSBkaXNwYXRjaGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IudXBkYXRlRG9ja2VkU3RhdGUpOiBBZGRlZC4gVXBkYXRlcyB0aGUgc2F0ZSBvZiB0aGUgbmF2aWdhdGlvbiBiYXIgYnV0dG9ucy4KICAgICAgICAoV2ViSW5zcGVjdG9yLmNsb3NlKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5fZG9ja1RvZ2dsZUJ1dHRvblRvb2xUaXApOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLl90b2dnbGVEb2NrZWRTdGF0ZSk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9VdGlsaXRpZXMuanM6CiAgICAgICAgKHBhcnNlTG9jYXRpb25RdWVyeVBhcmFtZXRlcnMpOiBBZGRlZC4gSGVscGVyIHRvIHBhcnNlIHRoZSBxdWVyeSBzdHJpbmcuCgoyMDEyLTAxLTE5ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3NTQ+IEltcGxlbWVudCB0aGUgU2VhcmNoIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIEluc3RlYWQgb2YgcGFzc2luZyBhIHN0cmluZyBhcyBhIHRpdGxlIHRvIHRoZSBHZW5lcmFsVHJlZUVsZW1lbnQsIHBhc3MgYSBEb2N1bWVudEZyYWdtZW50IHdoaWNoCiAgICAgICAgY29udGFpbnMgb3VyIG5lY2Vzc2FyeSB0ZXh0LCBidXQgaGlnaGxpZ2h0cyB0aGUgc2VhcmNoIHN0cmluZy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9HZW5lcmFsVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5HZW5lcmFsVHJlZUVsZW1lbnQucHJvdG90eXBlLl91cGRhdGVUaXRsZUVsZW1lbnRzKTogQWRkIGEgc3BlY2lhbCBjYXNlIGZvciBfbWFpblRpdGxlCiAgICAgICAgICAgIGJlaW5nIGEgTm9kZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvblNpZGViYXJQYW5lbC5jc3M6CiAgICAgICAgKC5uYXZpZ2F0aW9uLXNpZGViYXItcGFuZWwtY29udGVudC10cmVlLW91dGxpbmUgLml0ZW0gLmhpZ2hsaWdodCk6IFNldCB0aGUgaGlnaGxpZ2h0ZWQgdGV4dCB0byBoYXZlCiAgICAgICAgICAgIGEgeWVsbG93IGJhY2tncm91bmQgd2l0aCBhIGRhcmtlciB5ZWxsb3cgYm90dG9tIGJvcmRlciB0byBtYXRjaCBYY29kZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2VhcmNoUmVzdWx0VHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHRUcmVlRWxlbWVudC50cnVuY2F0ZUFuZEhpZ2hsaWdodFRpdGxlKTogQ3JlYXRlIGEgZG9jdW1lbnQgZnJhZ21lbnQsIGFuZAogICAgICAgICAgICBicmVhayB0aGUgbWF0Y2hpbmcgdGV4dCBpbnRvIHBhcnRzIChiZWZvcmUgbWF0Y2gsIG1hdGNoLCBhZnRlciBtYXRjaCksIGFuZCBhZGQgYSBzcGFuIGFyb3VuZAogICAgICAgICAgICB0aGUgbWF0Y2hpbmcgdGV4dC4KCjIwMTItMDEtMTkgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBNb3JlIG9mIDxyZGFyOi8vcHJvYmxlbS8xMDMxODc1ND4gSW1wbGVtZW50IHRoZSBTZWFyY2ggc2lkZWJhciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbi4KCiAgICAgICAgSW1wbGVtZW50IHByb3BlciB0cnVuY2F0aW9uIG9mIHRoZSBzZWFyY2ggcmVzdWx0cywgc28gdGhlIHNlYXJjaCB0ZXJtIHdpbGwgYWx3YXlzIHNob3cgdXAgaW4gdGhlCiAgICAgICAgdGl0bGUgdGV4dCBvZiB0aGUgc2VhcmNoIHRlcm0KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01TZWFyY2hNYXRjaE9iamVjdC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVNlYXJjaE1hdGNoT2JqZWN0LnByb3RvdHlwZS5nZXQgc2VhcmNoVGVybSk6IFJldHVybiB0aGUgc2VhcmNoIHRlcm0uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlU2VhcmNoTWF0Y2hPYmplY3QuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNlYXJjaE1hdGNoT2JqZWN0LnByb3RvdHlwZS5nZXQgc2VhcmNoVGVybSk6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9TZWFyY2hSZXN1bHRUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFJlc3VsdFRyZWVFbGVtZW50KTogQ2FsbCB0cnVuY2F0ZUFuZEhpZ2hsaWdodFRpdGxlLgogICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoUmVzdWx0VHJlZUVsZW1lbnQudHJ1bmNhdGVBbmRIaWdobGlnaHRUaXRsZSk6IFRydW5jYXRlIHRoZSB0aXRsZSwgYW5kCiAgICAgICAgICAgIGFkZCBhIEZJWE1FIGFib3V0IGhpZ2hsaWdodGluZyBpdC4KCjIwMTItMDEtMTkgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIHNlbGVjdGluZyBhbiBpc3N1ZSBpbiB0aGUgSXNzdWUgc2lkZWJhciBzaG93IHRoZSByZXNvdXJjZSdzIGNvbnRlbnQgdmlldyBhbmQgcmV2ZWFsIHRoZSBsaW5lLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3NjE+IEltcGxlbWVudCB0aGUgSXNzdWUgc2lkZWJhciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9Db25zb2xlT2JzZXJ2ZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlT2JzZXJ2ZXIucHJvdG90eXBlLm1lc3NhZ2VBZGRlZCk6IFBhc3MgbGluZSB0byBJc3N1ZU1hbmFnZXIuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0lzc3VlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLklzc3VlTWFuYWdlci5wcm90b3R5cGUuaXNzdWVXYXNBZGRlZCk6IEFkZGVkIGxpbmVOdW1iZXIgcGFyYW1ldGVyLgogICAgICAgICogVXNlckludGVyZmFjZS9Jc3N1ZU1lc3NhZ2UuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Jc3N1ZU1lc3NhZ2UpOiBBZGRlZCBsaW5lTnVtYmVyIHBhcmFtZXRlci4KICAgICAgICAoV2ViSW5zcGVjdG9yLklzc3VlTWVzc2FnZS5wcm90b3R5cGUuZ2V0IGxpbmVOdW1iZXIpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSXNzdWVTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Jc3N1ZVNpZGViYXJQYW5lbCk6IFNldCBvbnNlbGVjdCB0byBfdHJlZUVsZW1lbnRTZWxlY3RlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLklzc3VlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdHJlZUVsZW1lbnRTZWxlY3RlZCk6IEFkZGVkLiBDYWxsIHNob3dSZXNvdXJjZVNvdXJjZUNvZGUKICAgICAgICBiYXNlZCBvbiB0aGUgdHlwZSBvZiB0cmVlIGVsZW1lbnQgc2VsZWN0ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0lzc3VlVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Jc3N1ZVRyZWVFbGVtZW50KTogQWRkZWQgX2lzc3VlTWVzc2FnZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLklzc3VlVHJlZUVsZW1lbnQucHJvdG90eXBlLmdldCBpc3N1ZU1lc3NhZ2UpOiBBZGRlZC4KCjIwMTItMDEtMTkgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIHNlbGVjdGluZyB0aGUgcmVzb3VyY2UgaW4gdGhlIHNlYXJjaCBzaWRlYmFyIHNob3cgdGhlIHJlc291cmNlLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3NTQ+IEltcGxlbWVudCB0aGUgU2VhcmNoIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuc2hvd1Jlc291cmNlKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NlYXJjaFNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3RyZWVFbGVtZW50U2VsZWN0ZWQpOiBDYWxsIFJlc291cmNlU2lkZWJhclBhbmVsLnNob3dSZXNvdXJjZQogICAgICAgIGlmIHRoZSB0cmVlIGVsZW1lbnQgaXMgYSBSZXNvdXJjZVRyZWVFbGVtZW50LgoKMjAxMi0wMS0xOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2Ugc2VsZWN0aW5nIHRleHQgc2VhcmNoIHJlc3VsdHMgc2hvdyB0aGUgcmVzb3VyY2UncyBjb250ZW50IHZpZXcgYW5kIHJldmVhbCB0aGUgbGluZS4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4NzU0PiBJbXBsZW1lbnQgdGhlIFNlYXJjaCBzaWRlYmFyIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5zaG93U291cmNlQ29kZSk6IEFkZGVkIGxpbmVOdW1iZXJUb1JldmVhbCBwYXJhbWV0ZXIuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlU2VhcmNoTWF0Y2hPYmplY3QuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNlYXJjaE1hdGNoT2JqZWN0LnByb3RvdHlwZS5nZXQgcmVzb3VyY2UpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2VhcmNoTWF0Y2hPYmplY3QucHJvdG90eXBlLmdldCBsaW5lTnVtYmVyKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLnNob3dNYWluRnJhbWVTb3VyY2VDb2RlKTogQWRkZWQgbGluZU51bWJlclRvUmV2ZWFsIHBhcmFtZXRlci4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5zaG93UmVzb3VyY2VTb3VyY2VDb2RlKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NlYXJjaFNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3RyZWVFbGVtZW50U2VsZWN0ZWQpOiBIYW5kbGUgUmVzb3VyY2VTZWFyY2hNYXRjaE9iamVjdC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnJldmVhbExpbmUpOiBBZGRlZC4gRmluZCB0aGUgcmlnaHQgdGV4dCBjaHVuayBmb3IgdGhlIGxpbmUsIHRoZW4KICAgICAgICBicmVhayBpdCBpbnRvIHNpbmdsZSBsaW5lIHRleHQgY2h1bmtzIHRoZW4gY2FsbCBzY3JvbGxJbnRvVmlld0lmTmVlZGVkIG9uIHRoYXQgdGV4dCBjaHVuay4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnNob3duKTogU2V0IF92aXNpYmxlIHRvIHRydWUuIENoZWNrIGlmIHRoZXJlIGlzIGEgbGluZSBudW1iZXIgdGhhdAogICAgICAgIG5lZWRzIHRvIGJlIHJldmVhbGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuaGlkZGVuKTogIFNldCBfdmlzaWJsZSB0byBmYWxzZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dFJlc291cmNlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldyk6IFN0YXJ0IF9jb250ZW50UG9wdWxhdGVkIGFzIGZhbHNlLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLmNvbnRlbnRBdmFpbGFibGUpOiBTZXQgX2NvbnRlbnRQb3B1bGF0ZWQgdG8gdHJ1ZS4gQ2hlY2sgaWYKICAgICAgICB0aGVyZSBpcyBhIGxpbmUgbnVtYmVyIHRoYXQgbmVlZHMgdG8gYmUgcmV2ZWFsZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUucmV2ZWFsTGluZSk6IEFkZGVkLgoKMjAxMi0wMS0xOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEV4cGFuZCB0aGUgcmVzb3VyY2VzIHRyZWUgZWxlbWVudHMgaW4gdGhlIElzc3VlcyBhbmQgU2VhcmNoIHNpZGViYXJzIGJ5IGRlZmF1bHQuCgogICAgICAgIFBhcnQgb2Y6CiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwMzE4NzU0PiBJbXBsZW1lbnQgdGhlIFNlYXJjaCBzaWRlYmFyIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCiAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwMzE4NzYxPiBJbXBsZW1lbnQgdGhlIElzc3VlIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSXNzdWVTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Jc3N1ZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2lzc3VlV2FzQWRkZWQpOiBDYWxsIGV4cGFuZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2VhcmNoU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdHJlZUVsZW1lbnRGb3JSZXNvdXJjZSk6IENhbGwgZXhwYW5kLgoKMjAxMi0wMS0xOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIENhbGwgc2hvd24gYW5kIGhpZGRlbiBvbiB0aGUgY3VycmVudCBjb250ZW50IHZpZXcgaW4gQ2x1c3RlckNvbnRlbnRWaWV3LgoKICAgICAgICBUaGlzIGlzIG5lZWRlZCBmb3IgRE9NVHJlZUNvbnRlbnRWaWV3IHRvIGNvcnJlY3RseSByZXZlYWwgdGhlIHNlbGVjdGVkIERPTSBub2RlIHdoZW4gc2hvd24uCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NsdXN0ZXJDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNsdXN0ZXJDb250ZW50Vmlldy5wcm90b3R5cGUuc2hvd24pOiBDYWxsIHNob3duIG9uIHRoZSBjdXJyZW50Q29udGVudFZpZXcgaWYgdGhlcmUgaXMgb25lLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ2x1c3RlckNvbnRlbnRWaWV3LnByb3RvdHlwZS5oaWRkZW4pOiBDYWxsIGhpZGRlbiBvbiB0aGUgY3VycmVudENvbnRlbnRWaWV3IGlmIHRoZXJlIGlzIG9uZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNsdXN0ZXJDb250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IHNlbGVjdGlvblBhdGhDb21wb25lbnRzKTogUmV0dXJuIFtdIGlmIHRoZXJlIGlzIG5vIGN1cnJlbnRDb250ZW50Vmlldy4KCjIwMTItMDEtMTkgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIHNlbGVjdGluZyBET00gc2VhcmNoIHJlc3VsdHMgcmV2ZWFsIGFuZCBzZWxlY3QgdGhlIG5vZGUgaW4gdGhlIERPTSB0cmVlLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3NTQ+IEltcGxlbWVudCB0aGUgU2VhcmNoIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NU2VhcmNoTWF0Y2hPYmplY3QuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01TZWFyY2hNYXRjaE9iamVjdC5nZXQgZG9tTm9kZSk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9GcmFtZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVDb250ZW50Vmlldy5wcm90b3R5cGUuc2hvd0RPTVRyZWUpOiBBZGRlZCBwcmV2ZW50Rm9jdXNDaGFuZ2UgcGFyYW1ldGVyLgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5zaG93TWFpbkZyYW1lRE9NVHJlZSk6IEFkZGVkIHByZXZlbnRGb2N1c0NoYW5nZSBwYXJhbWV0ZXIuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NlYXJjaFNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbCk6IFNldCBvbnNlbGVjdCB0byBfdHJlZUVsZW1lbnRTZWxlY3RlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3RyZWVFbGVtZW50U2VsZWN0ZWQpOiBBZGRlZC4gQ2FsbCBzaG93TWFpbkZyYW1lRE9NVHJlZSBmb3IKICAgICAgICBET01TZWFyY2hNYXRjaE9iamVjdCByZXN1bHRzLgoKMjAxMi0wMS0xOCAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIFdvcmsgdG93YXJkcyA8cmRhcjovL3Byb2JsZW0vMTAzMTg3NTQ+IEltcGxlbWVudCB0aGUgU2VhcmNoIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIEFkZCBpY29ucyBmb3IgdGhlIHNlYXJjaCBzaWRlYmFyLiBXZSBhcmUgcmV1c2luZyB0aGUgaWNvbnMgZnJvbSB0aGUgcGF0aCBjb21wb25lbnRzIGljb25zLCBhbmQgYWRkZWQKICAgICAgICB0aGUgcmVzb3VyY2UgbWF0Y2ggaWNvbiBmcm9tIFhjb2RlLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVNlYXJjaE1hdGNoT2JqZWN0LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU2VhcmNoTWF0Y2hPYmplY3QucHJvdG90eXBlLmdldCBjbGFzc05hbWUpOiBDYWxsIF9nZW5lcmF0ZUNsYXNzTmFtZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVNlYXJjaE1hdGNoT2JqZWN0LnByb3RvdHlwZS5fZ2VuZXJhdGVDbGFzc05hbWUpOiBHZW5lcmF0ZSB0aGUgY29ycmVjdCBjbGFzcyBuYW1lIGZyb20gdGhlIG5vZGUKICAgICAgICAgICAgdHlwZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1Jlc291cmNlU2VhcmNoTWF0Y2gucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVNlYXJjaE1hdGNoT2JqZWN0LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTZWFyY2hNYXRjaE9iamVjdC5wcm90b3R5cGUuZ2V0IGNsYXNzTmFtZSk6IFJldHVybiB0aGUgcmVzb3VyY2UgbWF0Y2ggY2xhc3MgbmFtZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2VhcmNoSWNvbnMuY3NzOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2VhcmNoUmVzdWx0VHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHRUcmVlRWxlbWVudCk6IEFzayBlaXRoZXIgdGhlIERPTVNlYXJjaE1hdGNoT2JqZWN0IG9yIFJlc291cmNlU2VhcmNoTWF0Y2hPYmplY3QgZm9yIGl0cyBjbGFzc05hbWUuCgoyMDEyLTAxLTE4ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgV29yayB0b3dhcmRzIDxyZGFyOi8vcHJvYmxlbS8xMDMxODc1ND4gSW1wbGVtZW50IHRoZSBTZWFyY2ggc2lkZWJhciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbi4KCiAgICAgICAgQWRkIHNvbWUgbmV3IGNsYXNzZXMsIGFuZCBnZW5lcmF0ZSBwcm9wZXIgdGl0bGVzIGZvciBET00gc2VhcmNoIG1hdGNoZXMuCgogICAgICAgIFRoZSBuZXcgY2xhc3NlcyBhZGRlZCBhcmU6CiAgICAgICAgICAgIC0gRE9NU2VhcmNoTWF0Y2hPYmplY3QsIHdoaWNoIHJlcHJlc2VudHMgYSBtYXRjaCBvZiB0aGUgc2VhcmNoIHRlcm0gaW4gdGhlIERPTS4KICAgICAgICAgICAgLSBSZXNvdXJjZVNlYXJjaE1hdGNoT2JqZWN0LCB3aGljaCByZXByZXNlbnRzIGEgbWF0Y2ggb2YgdGhlIHNlYXJjaCB0ZXJtIGluIGEgcmVzb3VyY2UuCiAgICAgICAgICAgIC0gU2VhcmNoUmVzdWx0VHJlZUVsZW1lbnQsIHdoaWNoIHJlcHJlc2VudHMgdGhlIHRyZWUgZWxlbWVudHMgaW4gdGhlIHNlYXJjaCBzaWRlYmFyLCBhbmQgaXRzIHJlcHJlc2VudGVkCiAgICAgICAgICAgICAgICBvYmplY3QgaXMgZWl0aGVyIGEgRE9NU2VhcmNoTWF0Y2hPYmplY3Qgb3IgYSBSZXNvdXJjZVNlYXJjaE1hdGNoT2JqZWN0LgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVNlYXJjaE1hdGNoT2JqZWN0LmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVNlYXJjaE1hdGNoT2JqZWN0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVNlYXJjaE1hdGNoT2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuRE9NU2VhcmNoTWF0Y2hPYmplY3QuZ2V0IHRpdGxlKTogQ2FsbCBfZ2VuZXJhdGVUaXRsZSBpZiB3ZSBkb24ndAogICAgICAgICAgICBoYXZlIG9uZSB5ZXQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01TZWFyY2hNYXRjaE9iamVjdC5wcm90b3R5cGUuX2dlbmVyYXRlVGl0bGUpOiBHZW5lcmF0ZSBhIHRpdGxlIGZyb20gdGhlIERPTU5vZGUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VTZWFyY2hNYXRjaE9iamVjdC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNlYXJjaE1hdGNoT2JqZWN0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2VhcmNoTWF0Y2hPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5SZXNvdXJjZVNlYXJjaE1hdGNoT2JqZWN0LmdldCB0aXRsZSk6IFJldHVybiB0aGUgbWF0Y2hpbmcgbGluZQogICAgICAgICAgICB0ZXh0IHdpdGggYSBGSVhNRS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2VhcmNoUmVzdWx0VHJlZUVsZW1lbnQuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoUmVzdWx0VHJlZUVsZW1lbnQpOiBBc3NlcnQgb3VyIHJlcHJlc2VudGVkIG9iamVjdCBpcyBlaXRoZXIgYSBET01TZWFyY2hNYXRjaE9iamVjdCBvciBhIFJlc291cmNlU2VhcmNoTWF0Y2hPYmplY3QuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NlYXJjaFNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbC5wcm90b3R5cGUuY29uc3RydWN0b3IuV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbC5fc2VhcmNoRmllbGRDaGFuZ2VkLnJlc291cmNlc0NhbGxiYWNrLnJlc291cmNlQ2FsbGJhY2spOiBDcmVhdGUgYSBTZWFyY2hSZXN1bHRUcmVlRWxlbWVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbC5wcm90b3R5cGUuY29uc3RydWN0b3IuV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbC5fc2VhcmNoRmllbGRDaGFuZ2VkLmRvbUNhbGxiYWNrLmRvbVNlYXJjaFJlc3VsdHMpOiBEaXR0by4KCjIwMTItMDEtMTggIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBXb3JrIHRvd2FyZHMgPHJkYXI6Ly9wcm9ibGVtLzEwMzE4NzU0PiBJbXBsZW1lbnQgdGhlIFNlYXJjaCBzaWRlYmFyIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduLgoKICAgICAgICBJbXBsZW1lbnQgc2VhcmNoaW5nIG9mIHRoZSBET00sIGFuZCBhZGQgdGhlIHJlc3VsdHMgdG8gdGhlIHNlYXJjaCBzaWRlYmFyIGFsb25nc2lkZSBtYXRjaGVzIGluIHJlc291cmNlcy4KCiAgICAgICAgVGhpcyBwYXRjaCBhbHNvIHN0b3JlcyB0aGUgUmVzb3VyY2VUcmVlRWxlbWVudHMgaW4gdGhlIFNlYXJjaFNpZGViYXJQYW5lbCBjbGFzcywgc2luY2UgYm90aCBET00gc2VhcmNoIHJlc3VsdHMKICAgICAgICBhbmQgcmVzb3VyY2Ugc2VhcmNoIHJlc3VsdHMgd2lsbCBuZWVkIHRvIGJlIHVuZGVyIHRoZSBzYW1lIHBhcmVudC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9TZWFyY2hTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hTaWRlYmFyUGFuZWwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoU2lkZWJhclBhbmVsLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuU2VhcmNoU2lkZWJhclBhbmVsLl9zZWFyY2hGaWVsZENoYW5nZWQucmVzb3VyY2VzQ2FsbGJhY2sucmVzb3VyY2VDYWxsYmFjayk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hTaWRlYmFyUGFuZWwucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5TZWFyY2hTaWRlYmFyUGFuZWwuX3NlYXJjaEZpZWxkQ2hhbmdlZC5yZXNvdXJjZXNDYWxsYmFjayk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hTaWRlYmFyUGFuZWwucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5TZWFyY2hTaWRlYmFyUGFuZWwuX3NlYXJjaEZpZWxkQ2hhbmdlZC5kb21DYWxsYmFjay5kb21TZWFyY2hSZXN1bHRzKTogRm9yIGVhY2gKICAgICAgICAgICAgc2VhcmNoIHJlc3VsdCwgZ2V0IHRoZSBET00gTm9kZSBhbmQgb3duZXIgZG9jdW1lbnQncyBVUkwsIGFuZCBhZGQgdGhlIERPTSBub2RlIHVuZGVyIHRoZSBvd25lciBkb2N1bWVudCdzIFJlc291cmNlVHJlZUVsZW1lbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hTaWRlYmFyUGFuZWwucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5TZWFyY2hTaWRlYmFyUGFuZWwuX3NlYXJjaEZpZWxkQ2hhbmdlZC5kb21DYWxsYmFjayk6IENhbGwgRE9NQWdlbnQuZ2V0U2VhcmNoUmVzdWx0cy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbC5wcm90b3R5cGUuY29uc3RydWN0b3IuV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbC5fc2VhcmNoRmllbGRDaGFuZ2VkKTogQ2FsbCBET01BZ2VudC5wZXJmb3JtU2VhcmNoLgoKMjAxMi0wMS0xOCAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIFdvcmsgdG93YXJkcyA8cmRhcjovL3Byb2JsZW0vMTAzMTg3NTQ+IEltcGxlbWVudCB0aGUgU2VhcmNoIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIEltcGxlbWVudCBzZWFyY2hpbmcgb2YgcmVzb3VyY2VzLiBDYWxsIHRoZSBpbnNwZWN0b3IgQVBJIHRvIHNlYXJjaCBpbiBhbGwgcmVzb3VyY2VzIGZvciBvdXIgc2VhcmNoIHRlcm0sCiAgICAgICAgYW5kIHRoZW4gZm9yIGVhY2ggcmVzb3VyY2UgdGhhdCBmb3VuZCBhIG1hdGNoLCBzZWFyY2ggaW4gdGhhdCByZXNvdXJjZSBmb3IgYWxsIG9mIHRoZSBtYXRjaGluZyBsaW5lcy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9TZWFyY2hTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hTaWRlYmFyUGFuZWwucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5TZWFyY2hTaWRlYmFyUGFuZWwuX3NlYXJjaEZpZWxkQ2hhbmdlZC5yZXNvdXJjZXNDYWxsYmFjay5yZXNvdXJjZUNhbGxiYWNrKTogTG9vcAogICAgICAgICAgICBvdmVyIGVhY2ggbWF0Y2hpbmcgbGluZSwgYW5kIGFkZCBhIFJlc291cmNlVHJlZUVsZW1lbnQgZm9yIHRoZSBwYXJlbnQsIGFuZCBhIHRyZWUgZWxlbWVudCBmb3IgZWFjaCBtYXRjaGluZyBzZWFyY2ggcmVzdWx0LgogICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoU2lkZWJhclBhbmVsLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuU2VhcmNoU2lkZWJhclBhbmVsLl9zZWFyY2hGaWVsZENoYW5nZWQucmVzb3VyY2VzQ2FsbGJhY2spOiBGb3IKICAgICAgICAgICAgZWFjaCBtYXRjaGluZyByZXNvdXJjZSwgc2VhcmNoIHRoZSByZXNvdXJjZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbC5wcm90b3R5cGUuY29uc3RydWN0b3IuV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbC5fc2VhcmNoRmllbGRDaGFuZ2VkKTogQ2FsbCBQYWdlQWdlbnQuc2VhcmNoSW5SZXNvdXJjZXMuCgoyMDEyLTAxLTE3ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgV29yayB0b3dhcmRzIDxyZGFyOi8vcHJvYmxlbS8xMDMxODc1ND4gSW1wbGVtZW50IHRoZSBTZWFyY2ggc2lkZWJhciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbi4KCiAgICAgICAgQWRkIGEgc2VhcmNoIGZpZWxkIHRvIHRoZSBzZWFyY2ggc2lkZWJhci4gSXQgaXMgdGhlcmUgYW5kIGxvb2tzIHByZXR0eSwgYnV0IGRvZXNuJ3QgZG8gYW55dGhpbmcgeWV0LgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2VhcmNoU2lkZWJhclBhbmVsLmNzczogQWRkZWQuCiAgICAgICAgKC5zaWRlYmFyID4gLnBhbmVsLnNlYXJjaCA+IC5jb250ZW50KToKICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwuc2VhcmNoID4gLnNlYXJjaC1iYXIpOgogICAgICAgICguc2VhcmNoLWJhcik6CiAgICAgICAgKC5zZWFyY2gtYmFyID4gaW5wdXRbdHlwZT0ic2VhcmNoIl0pOgogICAgICAgICogVXNlckludGVyZmFjZS9TZWFyY2hTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hTaWRlYmFyUGFuZWwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoU2lkZWJhclBhbmVsLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuU2VhcmNoU2lkZWJhclBhbmVsLl9zZWFyY2hGaWVsZENoYW5nZWQpOgoKMjAxMi0wMS0xNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIFN0YXJ0IG9mIDxyZGFyOi8vcHJvYmxlbS8xMDMxODc1ND4gSW1wbGVtZW50IHRoZSBTZWFyY2ggc2lkZWJhciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbi4KCiAgICAgICAgQWRkIGEgc3R1YiBTZWFyY2ggc2lkZWJhciBhbmQgY2FsbCBpdCBmcm9tIE1haW4uanMgaW5zdGVhZCBvZiBjcmVhdGluZyBhIGdlbmVyaWMgc2lkZWJhciBwYW5lbC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2VhcmNoU2lkZWJhclBhbmVsLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFNpZGViYXJQYW5lbCk6CgoyMDEyLTAxLTE4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSB0aGUgSW5zcGVjdCBFbGVtZW50IGNvbnRleHQgbWVudSBpdGVtIHdvcmsgYWxvbmcgd2l0aCB0aGUgaW5zcGVjdCgpIGNvbnNvbGUgZnVuY3Rpb24uCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDY2MzE2Mz4gSW1wbGVtZW50IHRoZSBET00gVHJlZSBjb250ZW50IHZpZXcKCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5zZWxlY3RBbmRSZXZlYWxET01Ob2RlKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlQ29udGVudFZpZXcucHJvdG90eXBlLl9wYXRoQ29tcG9uZW50U2VsZWN0ZWQpOiBVc2Ugc2VsZWN0RE9NTm9kZQogICAgICAgIGluc3RlYWQgb2YgcmV2ZWFsQW5kU2VsZWN0IHNpbmNlIHRoYXQgYWxzbyBmaXJlcyBhbiBldmVudC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUuaW5zcGVjdEVsZW1lbnQpOiBGaXJlIERPTU5vZGVXYXNJbnNwZWN0ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUuaW5zcGVjdE5vZGVPYmplY3QpOiBBZGRlZC4gUmVzb2x2ZXMgYW4gb2JqZWN0IHRvCiAgICAgICAgYSBET01Ob2RlIGFuZCBjYWxscyBpbnNwZWN0RWxlbWVudC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWVDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lQ29udGVudFZpZXcpOiBSZW1vdmUgY2FsbCB0byBfc2hvd0NvbnRlbnRWaWV3Rm9ySWRlbnRpZmllci4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lQ29udGVudFZpZXcucHJvdG90eXBlLmdldCBzZWxlY3Rpb25QYXRoQ29tcG9uZW50cyk6IFJldHVybiBbXSBpZiB0aGVyZQogICAgICAgIGlzIG5vIGN1cnJlbnQgY29udGVudCB2aWV3LgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVDb250ZW50Vmlldy5wcm90b3R5cGUuc2hvd24pOiBBZGRlZC4gU2hvdyB0aGUgRE9NIHRyZWUgaWYgX3Nob3duSW5pdGlhbENvbnRlbnQKICAgICAgICBpcyBub3QgdHJ1ZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lQ29udGVudFZpZXcucHJvdG90eXBlLmNsb3NlZCk6IEFkZGVkLiBSZXNldCBfc2hvd25Jbml0aWFsQ29udGVudCB0byBmYWxzZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lQ29udGVudFZpZXcucHJvdG90eXBlLnNob3dTb3VyY2VDb2RlKTogQWRkZWQuIEhlbHBlciBmdW5jdGlvbi4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lQ29udGVudFZpZXcucHJvdG90eXBlLnNob3dET01UcmVlKTogQWRkZWQuIEhlbHBlciBmdW5jdGlvbi4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lQ29udGVudFZpZXcucHJvdG90eXBlLl9wYXRoQ29tcG9uZW50Rm9yQ29udGVudFZpZXcpOiBSZXR1cm4gbnVsbCBpZiB0aGVyZQogICAgICAgIGlzIG5vIGN1cnJlbnQgY29udGVudCB2aWV3LgogICAgICAgICogVXNlckludGVyZmFjZS9JbnNwZWN0b3JPYnNlcnZlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkluc3BlY3Rvck9ic2VydmVyLnByb3RvdHlwZS5pbnNwZWN0KTogUGFzcyB0aGUgb2JqZWN0IHRvIHRoZSByaWdodCBtYW5hZ2VyLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IEVuYWJsZSB0aGUgSW5zcGVjdG9yQWdlbnQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwpOiBBZGQgRE9NTm9kZVdhc0luc3BlY3RlZCBldmVudCBsaXN0ZW5lci4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5zaG93TWFpbkZyYW1lRE9NVHJlZSk6IEFkZGVkLiBIZWxwZXIgZnVuY3Rpb24uCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuc2hvd01haW5GcmFtZVNvdXJjZUNvZGUpOiBBZGRlZC4gSGVscGVyIGZ1bmN0aW9uLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9kb21Ob2RlV2FzSW5zcGVjdGVkKTogQWRkZWQuIENhbGwgc2hvd01haW5GcmFtZURPTVRyZWUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N0b3JhZ2VNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZU1hbmFnZXIucHJvdG90eXBlLmluc3BlY3REYXRhYmFzZSk6IEFkZGVkLiBGaXJlIERhdGFiYXNlV2FzSW5zcGVjdGVkIGV2ZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZU1hbmFnZXIucHJvdG90eXBlLmluc3BlY3RET01TdG9yYWdlKTogQWRkZWQuIEZpcmUgRE9NU3RvcmFnZU9iamVjdFdhc0luc3BlY3RlZCBldmVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VNYW5hZ2VyLnByb3RvdHlwZS5fZGF0YWJhc2VGb3JJZCk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9TdG9yYWdlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZVNpZGViYXJQYW5lbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdG9yYWdlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fZG9tU3RvcmFnZU9iamVjdFdhc0luc3BlY3RlZCk6IEFkZGVkLiBSZXZlYWwgYW5kIHNlbGVjdCB0aGUgdHJlZSBlbGVtZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2RhdGFiYXNlV2FzSW5zcGVjdGVkKTogQWRkZWQuIERpdHRvLgoKMjAxMi0wMS0xOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBTdHJpbmcucHJvdG90eXBlLmNvbGxhcHNlV2hpdGVzcGFjZSBzaW5jZSBpdCBpcyBuZWVkZWQgYnkgRE9NVHJlZUVsZW1lbnQuanMuCgogICAgICAgIFJldmlld2VkIGJ5IEppbmcgSmluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVXRpbGl0aWVzLmpzOgogICAgICAgIChTdHJpbmcucHJvdG90eXBlLmNvbGxhcHNlV2hpdGVzcGFjZSk6IEFkZGVkLgoKMjAxMi0wMS0xOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE5vdyB0aGF0IHRoZSBkb2N1bWVudCBub2RlIGZvciBjaGlsZCBmcmFtZXMgaXMgaW5jbHVkZWQgaW4gdGhlIERPTSB0cmVlLCB1c2UgaXQgYXMgdGhlIHJvb3QKICAgICAgICBmb3IgY2hpbGQgZnJhbWVzIHRvIGF2b2lkIHNlZWluZyAiI2RvY3VtZW50IiBhbmQgaGF2aW5nIGV2ZXJ5dGhpbmcgbmVzdGVkIHVuZGVyIGl0LgoKICAgICAgICBBbHNvIHVzZSB0aGUgc3RyYWlnaHQgZm9yd2FyZCBhcHByb2FjaCB0byByZXF1ZXN0IHRoZSBkb2N1bWVudCBpZiB0aGUgRE9NVHJlZSBpcyBmb3IgdGhlIG1haW4gZnJhbWUuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDY2MzE2Mz4gSW1wbGVtZW50IHRoZSBET00gVHJlZSBjb250ZW50IHZpZXcKCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWUucHJvdG90eXBlLnJlcXVlc3RSb290RE9NTm9kZS5tYWluRG9jdW1lbnRBdmFpbGFibGUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWUucHJvdG90eXBlLnJlcXVlc3RSb290RE9NTm9kZSk6IEV2YWx1YXRlICJkb2N1bWVudCIgZm9yIGNoaWxkIGZyYW1lcyBpbnN0ZWFkIG9mCiAgICAgICAgIndpbmRvdy5mcmFtZUVsZW1lbnQiLiBBbmQgdXNlIFdlYkluc3BlY3Rvci5kb21UcmVlTWFuYWdlci5yZXF1ZXN0RG9jdW1lbnQgZm9yIHRoZSBtYWluIGZyYW1lLgoKMjAxMi0wMS0xNyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFJlbmFtZSBDb250ZW50QnJvd3Nlci5zaG93Q29udGVudEZvclJlcHJlc2VudGVkT2JqZWN0IHRvIENvbnRlbnRCcm93c2VyLnNob3dDb250ZW50Vmlld0ZvclJlcHJlc2VudGVkT2JqZWN0LgoKICAgICAgICBBbHNvIGFkZHMgQ29udGVudEJyb3dzZXIuc2hvd0NvbnRlbnRWaWV3IGFuZCBDb250ZW50QnJvd3Nlci5jb250ZW50Vmlld0ZvclJlcHJlc2VudGVkT2JqZWN0IHdoaWxlIG1ha2luZwogICAgICAgIHRoZSBzaG93Q29udGVudFZpZXcqIGZ1bmN0aW9ucyByZXR1cm4gdGhlIGNvbnRlbnQgdmlldyB0aGF0IHdhcyBzaG93biBzbyBpdCBjYW4gYmUgdXNlZCBieSB0aGUgY2FsbGVyLgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZW50QnJvd3Nlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyLnByb3RvdHlwZS5zaG93Q29udGVudFZpZXdGb3JSZXByZXNlbnRlZE9iamVjdCk6IFJlbmFtZWQgZnJvbSBzaG93Q29udGVudEZvclJlcHJlc2VudGVkT2JqZWN0LgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIucHJvdG90eXBlLnNob3dDb250ZW50Vmlldyk6IEFkZGVkLiBDYWxsIHRocm91Z2ggdG8gdGhlIGNvbnRlbnRWaWV3Q29udGFpbmVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIucHJvdG90eXBlLmNvbnRlbnRWaWV3Rm9yUmVwcmVzZW50ZWRPYmplY3QpOiBBZGRlZC4gRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuX2hpZXJhcmNoaWNhbFBhdGhDb21wb25lbnRXYXNTZWxlY3RlZCk6IFVzZSBzaG93Q29udGVudFZpZXdGb3JSZXByZXNlbnRlZE9iamVjdC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudFZpZXdDb250YWluZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlld0NvbnRhaW5lci5wcm90b3R5cGUuc2hvd0NvbnRlbnRWaWV3Rm9yUmVwcmVzZW50ZWRPYmplY3QpOiBSZXR1cm4gdGhlIGNvbnRlbnRWaWV3IHNob3duLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdDb250YWluZXIucHJvdG90eXBlLnNob3dDb250ZW50Vmlldyk6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9GcmFtZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVDb250ZW50Vmlldy5wcm90b3R5cGUuX3Nob3dDb250ZW50Vmlld0ZvcklkZW50aWZpZXIpOiBSZXR1cm4gdGhlIGNvbnRlbnRWaWV3IHNob3duLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3Iub3BlblVSTCk6IFVzZSBzaG93Q29udGVudFZpZXdGb3JSZXByZXNlbnRlZE9iamVjdC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3RyZWVFbGVtZW50U2VsZWN0ZWQpOiBVc2Ugc2hvd0NvbnRlbnRWaWV3Rm9yUmVwcmVzZW50ZWRPYmplY3QKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3RvcmFnZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl90cmVlRWxlbWVudFNlbGVjdGVkKTogVXNlIHNob3dDb250ZW50Vmlld0ZvclJlcHJlc2VudGVkT2JqZWN0CgoyMDEyLTAxLTE3ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUHJldmVudCBsZWFraW5nIFdlYiBJbnNwZWN0b3IgY29udGVudCB2aWV3cyBieSB1bnJlZ2lzdGVyaW5nIGV2ZW50IGxpc3RlbmVycyBmcm9tIGV4dGVybmFsIG9iamVjdHMKICAgICAgICB3aGVuIHRoZSBjb250ZW50IHZpZXdzIGFyZSBjbG9zZWQuCgogICAgICAgIFNpbmNlIHNvbWUgY29udGVudCB2aWV3cyB3ZXJlIHJlZ2lzdGVyaW5nIGFzIGV2ZW50IGxpc3RlbmVycyBvbiBleHRlcm5hbCBvYmplY3RzIHRoYXQgaGFkIGluZGVmaW5pdGUgb3IKICAgICAgICBpbmRldGVybWluYXRlIGxpZmV0aW1lcywgdGhhdCBtZWFudCB0aGUgY2xvc2VkIGNvbnRlbnQgdmlld3Mgd2VyZSBzdGlsbCBhcm91bmQgYW5kIHJlc3BvbmRpbmcgdG8gZXZlbnRzCiAgICAgICAgYWZ0ZXIgdGhleSBoYWQgYmVlbiBjbG9zZWQuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NsdXN0ZXJDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNsdXN0ZXJDb250ZW50Vmlldyk6IE1vdmVkIGV2ZW50IGxpc3RuZW5lciB0byBzaG93bi4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNsdXN0ZXJDb250ZW50Vmlldy5wcm90b3R5cGUuc2hvd24pOiBBZGRlZC4gQWRkIGV2ZW50IGxpc3RlbmVyIHRoYXQgd2FzIGluIHRoZSBjb25zdHJ1Y3Rvci4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNsdXN0ZXJDb250ZW50Vmlldy5wcm90b3R5cGUuY2xvc2VkKTogQWRkZWQuIFJlbW92ZSBldmVudCBsaXN0ZW5lciBhbmQgY2xvc2UgYWxsCiAgICAgICAgY29udGVudCB2aWV3cyBzbyB0aGV5IGNhbiBkbyB0aGVpciBvd24gd29yay4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlldy5wcm90b3R5cGUuY2xvc2VkKTogQWRkZWQgc3R1Yi4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudFZpZXdDb250YWluZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlld0NvbnRhaW5lci5wcm90b3R5cGUuX2Rpc2Fzc29jaWF0ZUZyb21Db250ZW50Vmlldyk6IENhbGwgY2xvc2VkIG9uIHRoZSB2aWV3LgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlQ29udGVudFZpZXcpOiBNb3ZlZCBldmVudCBsaXN0bmVuZXIgdG8gc2hvd24uCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlQ29udGVudFZpZXcucHJvdG90eXBlLnNob3duKTogQWRkIGV2ZW50IGxpc3RlbmVyIHRoYXQgd2FzIGluIHRoZSBjb25zdHJ1Y3Rvci4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVDb250ZW50Vmlldy5wcm90b3R5cGUuY2xvc2VkKTogQWRkZWQuIFJlbW92ZSBldmVudCBsaXN0ZW5lci4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlQ29udGVudFZpZXcpOiBNb3ZlZCBldmVudCBsaXN0bmVuZXIgdG8gc2hvd24uCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5zaG93bik6IEFkZGVkLiBBZGQgZXZlbnQgbGlzdGVuZXIgdGhhdCB3YXMgaW4gdGhlIGNvbnN0cnVjdG9yLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUuY2xvc2VkKTogQWRkZWQuIFJlbW92ZSBldmVudCBsaXN0ZW5lci4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX21haW5GcmFtZURpZENoYW5nZSk6IENsb3NlIHRoZSBjb250ZW50IHZpZXdzIHJpZ2h0IGF3YXksIG5vdCBhZnRlcgogICAgICAgIGEgZGVsYXkgdG8gcHJldmVudCB0aGUgY29udGVudCB2aWV3cyBmcm9tIHJlc3BvbmRpbmcgdG8gZXZlbnRzIHdoZW4gdGhleSBhcmUgYWJvdXQgdG8gYmUgY2xvc2VkIGFueXdheS4KCjIwMTItMDEtMTcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNaW5pbWl6ZSBjaHVybiBpbiB0aGUgRE9NIHRyZWUgY29udGVudCB2aWV3IHdoZW4gbmF2aWdhdGluZyBiZXR3ZWVuIHBhZ2VzLgoKICAgICAgICBUaGUgRE9NVHJlZSB3YXMgY2FsbGluZyBjYWxsYmFja3MgbXVsdGlwbGUgdGltZXMgYmVjYXVzZSB0aGUgbGlzdCB3YXNuJ3QgY2xlYXJlZAogICAgICAgIHdoZW4gdGhlIFJvb3RET01Ob2RlRGlkQ2hhbmdlIHdhcyBzZW50LiBBbmQgRE9NVHJlZUNvbnRlbnRWaWV3IHdvdWxkIHJlcXVlc3QKICAgICAgICB0aGUgRE9NIG5vZGUgYWdhaW4gd2hlbiBSb290RE9NTm9kZURpZENoYW5nZSB3YXMgb2JzZXJ2ZWQsIGNhdXNpbmcgdGhlIHNhbWUKICAgICAgICBjYWxsYmFjayB0byBiZSBhZGRlZCBiYWNrIGludG8gdGhlIHBlbmRpbmcgY2FsbGJhY2tzIGFycmF5LgoKICAgICAgICBUaGlzIGNoYW5nZSBjbGVhcnMgdGhlIHBlbmRpbmcgY2FsbGJhY2tzIGFycmF5IGVhY2ggdGltZSB0aGUgRE9NVHJlZSBpcyBpbnZhbGlkYXRlZAogICAgICAgIHNvIGl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2xpZW50IHRvIGxpc3RlbiBmb3IgdGhlIFJvb3RET01Ob2RlSW52YWxpZGF0ZWQKICAgICAgICBldmVudCBhbmQgcmVxdWVzdCB0aGUgcm9vdCBET00gbm9kZSBhZ2FpbiAod2hpY2ggaXMgd2hhdCBoYXBwZW5zIGFscmVhZHkuKQoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTA2NjMxNjM+IEltcGxlbWVudCB0aGUgRE9NIFRyZWUgY29udGVudCB2aWV3CgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlLkV2ZW50LlJvb3RET01Ob2RlSW52YWxpZGF0ZWQpOiBSZW5hbWVkIGZyb20gUm9vdERPTU5vZGVEaWRDaGFuZ2UgdG8gYmV0dGVyCiAgICAgICAgcmVmbGVjdCB3aGF0IGlzIG1lYW5zLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZS5wcm90b3R5cGUuaW52YWxpZGF0ZS5wZXJmb3JtSW52YWxpZGF0ZSk6IEFsd2F5cyBmaXJlIHRoZSBSb290RE9NTm9kZUludmFsaWRhdGVkCiAgICAgICAgZXZlbnQgYW5kIGNsZWFyIHRoZSBwZW5kaW5nIGNhbGxiYWNrcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWUucHJvdG90eXBlLnJlcXVlc3RSb290RE9NTm9kZS5yb290T2JqZWN0QXZhaWxhYmxlKTogQ2hlY2sgaWYgd2Ugd2VyZSBpbnZhbGlkYXRlZAogICAgICAgIGJlZm9yZSBjb250aW51aW5nLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZS5wcm90b3R5cGUucmVxdWVzdFJvb3RET01Ob2RlLnJvb3RET01Ob2RlQXZhaWxhYmxlKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlLnByb3RvdHlwZS5yZXF1ZXN0Um9vdERPTU5vZGUuZGlzcGF0Y2hDYWxsYmFja3MpOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUNvbnRlbnRWaWV3KTogTGlzdGVuIGZvciB0aGUgcmVuYW1lZCBSb290RE9NTm9kZUludmFsaWRhdGVkIGV2ZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fcm9vdERPTU5vZGVJbnZhbGlkYXRlZCk6IFJlbmFtZWQgZnJvbSBfcm9vdERPTU5vZGVEaWRDaGFuZ2UuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVVcGRhdGVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZVVwZGF0ZXIucHJvdG90eXBlLl9kb2N1bWVudFVwZGF0ZWQpOiBEb24ndCBzZXQgcm9vdERPTU5vZGUgc2luY2UgdGhlIG91dGxpbmUKICAgICAgICBtaWdodCBiZSBmb3IgYSBzdWJmcmFtZSwgYW5kIHRoaXMgaXMgYWx3YXlzIHRoZSBtYWluIGRvY3VtZW50LgoKMjAxMi0wMS0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFByb3Blcmx5IGNyZWF0ZSBhIFJlbW90ZU9iamVjdCBpbiBXZWJJbnNwZWN0b3IuRE9NVHJlZSBzbyBpdCBjYW4gYmUgcmVsZWFzZWQgY29ycmVjdGx5LgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTA2NjMxNjM+IEltcGxlbWVudCB0aGUgRE9NIFRyZWUgY29udGVudCB2aWV3CgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlLnByb3RvdHlwZS5yZXF1ZXN0Um9vdERPTU5vZGUucm9vdE9iamVjdEF2YWlsYWJsZSk6IE1ha2UgYSBSZW1vdGVPYmplY3QgdXNpbmcKICAgICAgICBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21QYXlsb2FkIGFuZCBiaW5kIGl0IHRvIHJvb3RET01Ob2RlQXZhaWxhYmxlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZS5wcm90b3R5cGUucmVxdWVzdFJvb3RET01Ob2RlLnJvb3RET01Ob2RlQXZhaWxhYmxlKTogUmVsZWFzZSB0aGUgcmVtb3RlIG9iamVjdC4KCjIwMTItMDEtMTcgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBXb3JrIHRvd2FyZHMgPHJkYXI6Ly9wcm9ibGVtLzEwMzE4NzYxPiBJbXBsZW1lbnQgdGhlIElzc3VlIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIEFkZCBpbWFnZXMgZm9yIGZvciB0aGUgZXJyb3IgYW5kIHdhcm5pbmcgdHJlZSBlbGVtZW50cy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRXJyb3IucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL1dhcm5pbmcucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSXNzdWVJY29ucy5jc3M6IEFkZGVkLgogICAgICAgICguZXJyb3ItaXNzdWUtaWNvbiAuaWNvbik6CiAgICAgICAgKC53YXJuaW5nLWlzc3VlLWljb24gLmljb24pOgogICAgICAgICogVXNlckludGVyZmFjZS9Jc3N1ZVRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSXNzdWVUcmVlRWxlbWVudCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKCjIwMTItMDEtMTYgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBXb3JrIHRvd2FyZHMgPHJkYXI6Ly9wcm9ibGVtLzEwMzE4NzYxPiBJbXBsZW1lbnQgdGhlIElzc3VlIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIE1vdmUgdGhlIGluZm9ybWF0aW9uIGFib3V0IGFuIElzc3VlIHRyZWUgZWxlbWVudCBmcm9tIElzc3VlU2lkZWJhclBhbmVsIHRvIGl0cyBvd24gY2xhc3MgLSBJc3N1ZVRyZWVFbGVtZW50LgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0lzc3VlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSXNzdWVTaWRlYmFyUGFuZWwucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5Jc3N1ZVNpZGViYXJQYW5lbC5faXNzdWVXYXNBZGRlZCk6IENyZWF0ZSBhIG5ldwogICAgICAgICAgICBJc3N1ZVRyZWVFbGVtZW50LCBpbnN0ZWFkIG9mIGEgR2VuZXJhbFRyZWVFbGVtZW50LgogICAgICAgICogVXNlckludGVyZmFjZS9Jc3N1ZVRyZWVFbGVtZW50LmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLklzc3VlVHJlZUVsZW1lbnQpOiBDYWxsIHRocm91Z2ggdG8gR2VuZXJhbFRyZWVFbGVtZW50IGFuZCBzZXQgc29tZSBwcm9wZXJ0aWVzLgogICAgICAgIChXZWJJbnNwZWN0b3IuSXNzdWVUcmVlRWxlbWVudC50aXRsZUZvcklzc3VlKTogTW92ZWQgZnJvbSBJc3N1ZVNpZGViYXJQYW5lbC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBBZGRlZCBuZXcgZmlsZS4KCjIwMTItMDEtMTYgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBXb3JrIHRvd2FyZHMgPHJkYXI6Ly9wcm9ibGVtLzEwMzE4NzYxPiBJbXBsZW1lbnQgdGhlIElzc3VlIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIEltcGxlbWVudCBkaXNwbGF5aW5nIGZvcm1hdHRlZCBjb25zb2xlIG1lc3NhZ2VzIGluIHRoZSBJc3N1ZXMgU2lkZWJhci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Db25zb2xlT2JzZXJ2ZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlT2JzZXJ2ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5Db25zb2xlT2JzZXJ2ZXIubWVzc2FnZUFkZGVkKTogUGFzcyBhbG9uZyB0aGUKICAgICAgICAgICAgcGFyYW1ldGVycy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSXNzdWVNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSXNzdWVNYW5hZ2VyLnByb3RvdHlwZS5pc3N1ZVdhc0FkZGVkKTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0lzc3VlTWVzc2FnZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLklzc3VlTWVzc2FnZSk6IFR1cm4gdGhlIG9iamVjdHMgdGhhdCB3ZSB3ZXJlIHBhc3NlZCBpbiBhcyBwYXJhbWV0ZXJzCiAgICAgICAgICAgIGludG8gV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdHMsIGFuZCBjYWxsIHRoaXMuX2Zvcm1hdFRleHRJZk5lY2Vzc2FyeSB0byBmb3JtYXQKICAgICAgICAgICAgb3VyIHRleHQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Jc3N1ZU1lc3NhZ2UucHJvdG90eXBlLl9mb3JtYXRUZXh0SWZOZWNlc3NhcnkudmFsdWVGb3JtYXR0ZXIpOiBHZXQgdGhlIHZhbHVlIG9mIHRoZSBSZW1vdGVPYmplY3QuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Jc3N1ZU1lc3NhZ2UucHJvdG90eXBlLl9mb3JtYXRUZXh0SWZOZWNlc3NhcnkuYXBwZW5kKTogQXBwZW5kIGIgdG8gYSwgYW5kIHJldHVybiBhLgogICAgICAgIChXZWJJbnNwZWN0b3IuSXNzdWVNZXNzYWdlLnByb3RvdHlwZS5fZm9ybWF0VGV4dElmTmVjZXNzYXJ5KTogRm9ybWF0IG91ciB0ZXh0LCBhbmQgYXBwZW5kIGFueSB1bnVzZWQgc3Vic3RpdHV0aW9ucwogICAgICAgICAgICB0byB0aGUgc3RyaW5nIHdlIGdlbmVyYXRlLiBPbmNlIHdlIGFyZSBkb25lIGdlbmVyYXRpbmcgdGhlIHN0cmluZywgd2Ugc2V0IHRoYXQgYXMgb3VyIHRleHQuCgoyMDEyLTAxLTEzICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgV29yayB0b3dhcmRzIDxyZGFyOi8vcHJvYmxlbS8xMDMxODc2MT4gSW1wbGVtZW50IHRoZSBJc3N1ZSBzaWRlYmFyIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduLgoKICAgICAgICBDbGVhciB0aGUgaXNzdWVzIHNpZGViYXIgd2hlbiB0aGUgcGFnZSBpcyBuYXZpZ2F0ZWQuIEFkZCBhIGxpc3RlbmVyIGluIElzc3VlTWFuYWdlciB0aGF0IGZpcmVzIGFuCiAgICAgICAgZXZlbnQgdGhhdCBJc3N1ZVNpZGViYXJQYW5lbCBsaXN0ZW5zIHRvLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0lzc3VlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLklzc3VlTWFuYWdlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Jc3N1ZU1hbmFnZXIucHJvdG90eXBlLmlzc3VlV2FzQWRkZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuSXNzdWVNYW5hZ2VyLnByb3RvdHlwZS5fbWFpblJlc291cmNlRGlkQ2hhbmdlKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSXNzdWVTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Jc3N1ZVNpZGViYXJQYW5lbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Jc3N1ZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuY29uc3RydWN0b3IuV2ViSW5zcGVjdG9yLklzc3VlU2lkZWJhclBhbmVsLl9pc3N1ZVdhc0FkZGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLklzc3VlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5faXNzdWVzQ2xlYXJlZCk6CgoyMDEyLTAxLTEzICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgV29yayB0b3dhcmRzIDxyZGFyOi8vcHJvYmxlbS8xMDMxODc2MT4gSW1wbGVtZW50IHRoZSBJc3N1ZSBzaWRlYmFyIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduLgoKICAgICAgICBBZGQgdGhpbmdzIHRvIHRoZSBJc3N1ZXMgc2lkZWJhciwgc29ydGVkIGJ5IGZpbGUuIFdlIGN1cnJlbnRseSBvbmx5IHNob3cgaXNzdWVzIHRoYXQgaGF2ZSBhIFVSTCBwcm92aWRlZC4KCiAgICAgICAgRWFjaCBmb2xkZXIgaW4gdGhlIHNpZGViYXIgaXMgYSByZXNvdXJjZSB3aGVyZSB0aGUgZXJyb3IgY2FtZSBmcm9tLiBFYWNoIGlzc3VlIGhhcyBhIG1haW4gdGl0bGUgb2YgdGhlCiAgICAgICAga2luZCBvZiBpc3N1ZSBpdCBpcywgYW5kIGEgc3VidGl0bGUgb2YgdGhlIGlzc3VlIHRleHQuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29uc29sZU9ic2VydmVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU9ic2VydmVyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuQ29uc29sZU9ic2VydmVyLm1lc3NhZ2VBZGRlZCk6IElmIHRoZSBtZXNzYWdlCiAgICAgICAgICAgIHdhcyBhbiBlcnJvciBvciB3YXJuaW5nLCB0ZWxsIHRoZSBJc3N1ZU1hbmFnZXIgYWJvdXQgaXQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0lzc3VlTWFuYWdlci5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Jc3N1ZU1hbmFnZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuSXNzdWVNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuSXNzdWVNYW5hZ2VyLmluaXRpYWxpemUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuSXNzdWVNYW5hZ2VyLnByb3RvdHlwZS5pc3N1ZVdhc0FkZGVkKTogRGlzcGF0Y2ggYSBtZXNzYWdlIHNheWluZyBhbiBpc3N1ZSB3YXMgYWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0lzc3VlTWVzc2FnZS5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Jc3N1ZU1lc3NhZ2UpOgogICAgICAgICogVXNlckludGVyZmFjZS9Jc3N1ZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLklzc3VlU2lkZWJhclBhbmVsKToKICAgICAgICAoV2ViSW5zcGVjdG9yLklzc3VlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuSXNzdWVTaWRlYmFyUGFuZWwuX2lzc3VlV2FzQWRkZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IudGl0bGVGb3JJc3N1ZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogQWRkIG5ldyBmaWxlcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOiBJbml0aWFsaXplIHRoZSBJc3N1ZU1hbmFnZXIuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1V0aWxpdGllcy5qczoKICAgICAgICAoT2JqZWN0LmRlZmluZVByb3BlcnR5KTogQWRkIFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aC4KCjIwMTItMDEtMTMgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBXb3JrIHRvd2FyZHMgPHJkYXI6Ly9wcm9ibGVtLzEwMzE4NzYxPiBJbXBsZW1lbnQgdGhlIElzc3VlIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIEFkZCBhIG5ldyBmbGF2b3Igb2YgdHJlZSBpdGVtIHRvIHRyZWUgZWxlbWVudHMgaW4gYSBOYXZpZ2F0aW9uU2lkZWJhclBhbmVsLiBJZiB5b3Ugc2V0IGJvdGggdGhlIHNtYWxsIGFuZCB0d29MaW5lIHByb3BlcnRpZXMKICAgICAgICBvbiBhIHRyZWUgZWxlbWVudCwgdGhlIHRpdGxlIGFuZCBzdWJ0aXRsZSB3aWxsIGJlIG9uIHR3byBsaW5lcywgYnV0IGl0IHdpbGwgb25seSBiZSBzbGlnaHRseSBiaWdnZXIgdGhhbiB0aGUKICAgICAgICBzbWFsbCBzdHlsZSwgYW5kIHdpbGwgc3RpbGwgdXNlIHRoZSBzYW1lIHNtYWxsIGljb24gc2l6ZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9HZW5lcmFsVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5HZW5lcmFsVHJlZUVsZW1lbnQucHJvdG90eXBlLmdldCB0d29MaW5lKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkdlbmVyYWxUcmVlRWxlbWVudC5wcm90b3R5cGUuc2V0IHR3b0xpbmUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuR2VuZXJhbFRyZWVFbGVtZW50LnByb3RvdHlwZS5vbmF0dGFjaCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05hdmlnYXRpb25TaWRlYmFyUGFuZWwuY3NzOgogICAgICAgICgubmF2aWdhdGlvbi1zaWRlYmFyLXBhbmVsLWNvbnRlbnQtdHJlZS1vdXRsaW5lIC5pdGVtLnNtYWxsLnR3by1saW5lKToKICAgICAgICAoLm5hdmlnYXRpb24tc2lkZWJhci1wYW5lbC1jb250ZW50LXRyZWUtb3V0bGluZSAuaXRlbS5zbWFsbC50d28tbGluZSAudGl0bGVzKToKICAgICAgICAoLm5hdmlnYXRpb24tc2lkZWJhci1wYW5lbC1jb250ZW50LXRyZWUtb3V0bGluZSAuaXRlbS5zbWFsbC50d28tbGluZSAudGl0bGVzLm5vLXN1YnRpdGxlKToKICAgICAgICAoLm5hdmlnYXRpb24tc2lkZWJhci1wYW5lbC1jb250ZW50LXRyZWUtb3V0bGluZSAuaXRlbS5zbWFsbC50d28tbGluZSAuaWNvbik6CiAgICAgICAgKC5uYXZpZ2F0aW9uLXNpZGViYXItcGFuZWwtY29udGVudC10cmVlLW91dGxpbmUgLml0ZW0uc21hbGw6bm90KC50d28tbGluZSkgLnRpdGxlOjphZnRlcik6CiAgICAgICAgKC5uYXZpZ2F0aW9uLXNpZGViYXItcGFuZWwtY29udGVudC10cmVlLW91dGxpbmUgLml0ZW0uc21hbGw6bm90KC50d28tbGluZSkgLnN1YnRpdGxlOjpiZWZvcmUpOgoKMjAxMi0wMS0xMyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIFdvcmsgdG93YXJkcyA8cmRhcjovL3Byb2JsZW0vMTAzMTg3NjE+IEltcGxlbWVudCB0aGUgSXNzdWUgc2lkZWJhciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbi4KCiAgICAgICAgSW1wbGVtZW50IEZyYW1lUmVzb3VyY2VNYW5hZ2VyLnJlc291cmNlRm9yVVJMLiBUaGlzIGNoZWNrcyB0aGUgbWFpbiBmcmFtZSdzIG1haW4gcmVzb3VyY2UgZm9yIHRoZSBwYXNzZWQgaW4gVVJMLAogICAgICAgIGFuZCB0aGVuIGNhbGxzIHRoZSBtYWluIGZyYW1lJ3MgcmVzb3VyY2VGb3JVUkwgZnVuY3Rpb24sIHdoaWNoIGNoZWNrcyBzdWJyZXNvdXJjZXMgYW5kIHJlY3Vyc2l2ZWx5IGNoZWNrcwogICAgICAgIHN1YmZyYW1lcyBmb3IgdGhlIGNvcnJlY3QgVVJMLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lUmVzb3VyY2VNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLnJlc291cmNlRm9yVVJMKToKCjIwMTItMDEtMTIgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBTdGFydCBvZiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3NjE+IEltcGxlbWVudCB0aGUgSXNzdWUgc2lkZWJhciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbi4KCiAgICAgICAgQWRkIGEgc3R1YiBJc3N1ZVNpZGViYXJQYW5lbCBhbmQgY2FsbCBpdCBmcm9tIE1haW4uanMgaW5zdGVhZCBvZiBqdXN0IGNyZWF0aW5nIGEgZ2VuZXJpYyBzaWRlYmFyIHBhbmVsLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0lzc3VlU2lkZWJhclBhbmVsLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLklzc3VlU2lkZWJhclBhbmVsKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBBZGQgbmV3IGZpbGUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKTogQ3JlYXRlIGFuIElzc3VlU2lkZWJhclBhbmVsLgoKMjAxMi0wMS0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgdGhlIERPTSB0cmVlIGNvbnRlbnQgdmlldyBzaG93IHRoZSBjdXJyZW50IERPTSBub2RlIHNlbGVjdGlvbiBwYXRoIGluIHRoZSBxdWljayBuYXZpZ2F0aW9uIGJhci4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwNjYzMTYzPiBJbXBsZW1lbnQgdGhlIERPTSBUcmVlIGNvbnRlbnQgdmlldwoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4gYW5kIEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVDb250ZW50Vmlldyk6IEFkZGVkIGV2ZW50IGxpc3RlbmVyIGZvciBET00gdHJlZSBzZWxlY3Rpb24gY2hhbmdlcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVDb250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IHNlbGVjdGlvblBhdGhDb21wb25lbnRzKTogQWRkZWQuIFJldHVybiBwYXRoIGNvbXBvbmVudHMgZm9yIHRoZSBET00gdHJlZSBzZWxlY3Rpb24uCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlQ29udGVudFZpZXcucHJvdG90eXBlLl9zZWxlY3RlZE5vZGVEaWRDaGFuZ2UpOiBBZGRlZC4gRmlyZSB0aGUgU2VsZWN0aW9uUGF0aENvbXBvbmVudHNEaWRDaGFuZ2UgZXZlbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlQ29udGVudFZpZXcucHJvdG90eXBlLl9wYXRoQ29tcG9uZW50U2VsZWN0ZWQpOiBBZGRlZC4gUmV2ZWFsIGFuZCBzZWxlY3QgdGhlIERPTSB0cmVlIGVsZW1lbnQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUVsZW1lbnQucHJvdG90eXBlLmlzQ2xvc2VUYWcpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZUVsZW1lbnRQYXRoQ29tcG9uZW50LmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVFbGVtZW50UGF0aENvbXBvbmVudCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUVsZW1lbnRQYXRoQ29tcG9uZW50LnByb3RvdHlwZS5nZXQgZG9tVHJlZUVsZW1lbnQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVFbGVtZW50UGF0aENvbXBvbmVudC5wcm90b3R5cGUuZ2V0IHByZXZpb3VzU2libGluZyk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUVsZW1lbnRQYXRoQ29tcG9uZW50LnByb3RvdHlwZS5nZXQgbmV4dFNpYmxpbmcpOiBBZGRlZC4gUmV0dXJuIG51bGwgaWYgaXNDbG9zZVRhZy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RPTUNoYXJhY3RlckRhdGEucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RPTUNvbW1lbnQucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RPTURvY3VtZW50VHlwZS5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRE9NRWxlbWVudC5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRE9NTm9kZS5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRE9NVGV4dE5vZGUucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlZCBET01UcmVlRWxlbWVudFBhdGhDb21wb25lbnQuanMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1BhdGhDb21wb25lbnRJY29ucy5jc3M6CiAgICAgICAgKC5kb20tZWxlbWVudC1pY29uIC5pY29uKTogQWRkZWQuCiAgICAgICAgKC5kb20tdGV4dC1ub2RlLWljb24gLmljb24pOiBBZGRlZC4KICAgICAgICAoLmRvbS1jb21tZW50LWljb24gLmljb24pOiBBZGRlZC4KICAgICAgICAoLmRvbS1kb2N1bWVudC10eXBlLWljb24gLmljb24pOiBBZGRlZC4KICAgICAgICAoLmRvbS1jaGFyYWN0ZXItZGF0YS1pY29uIC5pY29uKTogQWRkZWQuCiAgICAgICAgKC5kb20tbm9kZS1pY29uIC5pY29uKTogQWRkZWQuCgoyMDEyLTAxLTE2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSBsaW5rIG5hdmlnYXRpb24gd29yayBpbiB0aGUgRE9NIHRyZWUuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDY2MzE2Mz4gSW1wbGVtZW50IHRoZSBET00gVHJlZSBjb250ZW50IHZpZXcKCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUNvbnRlbnRWaWV3KTogQWRkIGNsaWNrIGV2ZW50IGxpc3RlbmVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fbW91c2VXYXNDbGlja2VkKTogQWRkZWQuIFN0YXJ0IGEgdGltZW91dCBzaW5jZSB0aGlzIGlzIGEgc2luZ2xlCiAgICAgICAgY2xpY2ssIGlmIHRoZSB0aW1lb3V0IGlzIGNhbmNlbGVkIGJlZm9yZSBpdCBmaXJlcywgdGhlbiBhIGRvdWJsZS1jbGljayBoYXBwZW5lZCBvciBhbm90aGVyIGxpbmsgd2FzIGNsaWNrZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlQ29udGVudFZpZXcucHJvdG90eXBlLl9tb3VzZVdhc0NsaWNrZWQuZm9sbG93TGluayk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVFbGVtZW50LnByb3RvdHlwZS5vbmF0dGFjaCk6IFJlbW92ZWQgY2FsbCB0byBfcHJldmVudEZvbGxvd2luZ0xpbmtzT25Eb3VibGVDbGljay4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVFbGVtZW50LnByb3RvdHlwZS51cGRhdGVUaXRsZSk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUVsZW1lbnQucHJvdG90eXBlLl9wcmV2ZW50Rm9sbG93aW5nTGlua3NPbkRvdWJsZUNsaWNrKTogUmVtb3ZlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVFbGVtZW50LnByb3RvdHlwZS5fYnVpbGRBdHRyaWJ1dGVET00pOiBSZW1vdmVkIGxpbmtpZnkgcGFyYW1ldGVyIGFuZCByZW1vdmUgZGVwZW5kZW5jeSBvbgogICAgICAgIFdlYkluc3BlY3Rvci5yZXNvdXJjZVVSTEZvclJlbGF0ZWROb2RlIGJ5IG1ha2luZyB0aGUgYW5jaG9yIGVsZW1lbnQgZGlyZWN0bHkuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlRWxlbWVudC5wcm90b3R5cGUuX2J1aWxkVGFnRE9NKTogUmVtb3ZlZCBsaW5raWZ5IHBhcmFtZXRlci4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVFbGVtZW50LnByb3RvdHlwZS5fbm9kZVRpdGxlSW5mbyk6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9VdGlsaXRpZXMuanM6CiAgICAgICAgKFN0cmluZy5wcm90b3R5cGUudHJpbU1pZGRsZSk6IEFkZGVkLgogICAgICAgIChTdHJpbmcucHJvdG90eXBlLnRyaW1FbmQpOiBBZGRlZC4KCjIwMTItMDEtMTYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBSZW1vdmUgZGVwZW5kZW5jeSBvbiBXZWJJbnNwZWN0b3IuRE9NU3ludGF4SGlnaGxpZ2h0ZXIgYW5kIG1ha2Ugc3R5bGUgYW5kIHNjcmlwdCBET00gbm9kZXMgc3ludGF4IGhpZ2hsaWdodGVkCiAgICAgICAgYnkgdXNpbmcgV2ViSW5zcGVjdG9yLlN5bnRheEhpZ2hsaWdodGVyLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTA2NjMxNjM+IEltcGxlbWVudCB0aGUgRE9NIFRyZWUgY29udGVudCB2aWV3CgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbiBhbmQgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlRWxlbWVudC5wcm90b3R5cGUuX25vZGVUaXRsZUluZm8pOiBVc2UgV2ViSW5zcGVjdG9yLnN5bnRheEhpZ2hsaWdodFN0cmluZ0FzRG9jdW1lbnRGcmFnbWVudAogICAgICAgIGluc3RlYWQgb2YgV2ViSW5zcGVjdG9yLkRPTVN5bnRheEhpZ2hsaWdodGVyLiBBbHNvIHN5bnRheCBoaWdobGlnaHQgaW5saW5lIHNjcmlwdCBhbmQgc3R5bGUgdGV4dCBub2Rlcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZU91dGxpbmUuY3NzOgogICAgICAgICguZG9tLXRyZWUtb3V0bGluZSAuaHRtbC10ZXh0LW5vZGUubGFyZ2UpOiBBZGRlZC4gVXNlZCBmb3IgbGFyZ2UgdGV4dCBibG9ja3MsIG1ha2luZyB2aWV3aW5nL2VkaXRpbmcgbW9yZSBwbGVhc2FudC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3ludGF4SGlnaGxpZ2h0ZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TeW50YXhIaWdobGlnaHRlci5wcm90b3R5cGUuc3luY2hyb25vdXNIaWdobGlnaHQpOiBBZGRlZCBkb250Q2h1bmsgcGFyYW1ldGVyIGFuZCBmaXggdW5kZWZpbmVkL251bGwgY2hlY2tzLgogICAgICAgIChXZWJJbnNwZWN0b3IuU3ludGF4SGlnaGxpZ2h0ZXIucHJvdG90eXBlLnN0YXJ0SGlnaGxpZ2h0aW5nKTogRml4IHVuZGVmaW5lZC9udWxsIGNoZWNrcwogICAgICAgIChXZWJJbnNwZWN0b3IuU3ludGF4SGlnaGxpZ2h0ZXIucHJvdG90eXBlLl9oaWdobGlnaHROZXh0Q2h1bmspOiBBZGRlZCBkb250Q2h1bmsgcGFyYW1ldGVyIGFuZCBkb24ndCBiYWlsIGVhcmx5IGlmIGl0IGlzIHNldC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3ludGF4SGlnaGxpZ2h0aW5nU3VwcG9ydC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLnN5bnRheEhpZ2hsaWdodFN0cmluZ0FzRG9jdW1lbnRGcmFnbWVudCk6IEFkZGVkLiBDcmVhdGVzIGEgVGV4dENvbnRlbnQgYW5kIHN5bnRheCBoaWdobGlnaHRzIGl0IGFuZCByZXR1cm5zCiAgICAgICAgdGhlIGRvY3VtZW50IGZyYWdtZW50LgoKMjAxMi0wMS0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEJyZWFrIG91dCB0aGUgY29kZSBmb3IgY3JlYXRpbmcgYSBzeW50YXggaGlnaGxpZ2h0ZWQgZG9jdW1lbnQgZnJhZ21lbnQgc28gaXQgY2FuIGJlIHVzZWQKICAgICAgICBieSB0aGUgRE9NIHRyZWUgZm9yIGlubGluZSBDU1MgYW5kIEphdmFTY3JpcHQuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDY2MzE2Mz4gSW1wbGVtZW50IHRoZSBET00gVHJlZSBjb250ZW50IHZpZXcKCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3ludGF4SGlnaGxpZ2h0aW5nU3VwcG9ydC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5jcmVhdGVTeW50YXhIaWdobGlnaHRlZERvY3VtZW50RnJhZ21lbnQpOiBDb3BpZWQgZnJvbSBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvclRleHRDaHVuay5wcm90b3R5cGUudXBkYXRlQ29udGVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLmNyZWF0ZVN5bnRheEhpZ2hsaWdodGVkRG9jdW1lbnRGcmFnbWVudC5hcHBlbmRUZXh0KTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5jcmVhdGVTeW50YXhIaWdobGlnaHRlZERvY3VtZW50RnJhZ21lbnQuY3JlYXRlVG9rZW5FbGVtZW50KTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yVGV4dENodW5rLnByb3RvdHlwZS51cGRhdGVDb250ZW50KTogVXNlIFdlYkluc3BlY3Rvci5jcmVhdGVTeW50YXhIaWdobGlnaHRlZERvY3VtZW50RnJhZ21lbnQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZWQgU3ludGF4SGlnaGxpZ2h0aW5nU3VwcG9ydC5qcy4KCjIwMTItMDEtMTYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBSZW1vdmUgcmVmZXJlbmNlcyB0byB0aGUgRWxlbWVudHMgcGFuZWwgYW5kIG1ha2UgdGhlIGNvbnRleHQgbWVudSB3b3JrIGluIHRoZSBET00gdHJlZS4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwNjYzMTYzPiBJbXBsZW1lbnQgdGhlIERPTSBUcmVlIGNvbnRlbnQgdmlldwoKICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlRWxlbWVudC5wcm90b3R5cGUuc2VsZWN0T25Nb3VzZURvd24pOiBSZW1vdmVkIGVsZW1lbnRzIHBhbmVsIGNvZGUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVPdXRsaW5lLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZU91dGxpbmUpOiBSZW1vdmUgc2hvd0luRWxlbWVudHNQYW5lbEVuYWJsZWQgcGFyYW1ldGVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZU91dGxpbmUucHJvdG90eXBlLl9jb250ZXh0TWVudUV2ZW50RmlyZWQpOiBSZW1vdmVkIGVsZW1lbnRzIHBhbmVsIGNvZGUgYW5kIGNhbGwgcG9wdWxhdGVDb250ZXh0TWVudS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVPdXRsaW5lLnByb3RvdHlwZS5wb3B1bGF0ZUNvbnRleHRNZW51KTogUmVtb3ZlZCBjYWxsIHRvIHBvcHVsYXRlSHJlZkNvbnRleHRNZW51IHdoaWNoIGRvZXNuJ3QgZXhpc3QuCgoyMDEyLTAxLTE2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgU3R5bGUgYW5kIHN5bnRheCBoaWdobGlnaHQgdGhlIERPTSB0cmVlIGVsZW1lbnRzLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTA2NjMxNjM+IEltcGxlbWVudCB0aGUgRE9NIFRyZWUgY29udGVudCB2aWV3CgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbiBhbmQgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZUVsZW1lbnQuanM6IEZvdW5kIGFuZCByZXBsYWNlZCAid2Via2l0LSIgd2l0aCAiIiB0byBmaXggdGhlIHN5bnRheCBoaWdobGlnaHRpbmcgY2xhc3MgbmFtZXMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVPdXRsaW5lLmNzczogQWRkZWQuCiAgICAgICAgKC5kb20tdHJlZS1vdXRsaW5lKToKICAgICAgICAoLmRvbS10cmVlLW91dGxpbmUgbGkuaG92ZXJlZDpub3QoLnNlbGVjdGVkKSAuc2VsZWN0aW9uKToKICAgICAgICAoLmRvbS10cmVlLW91dGxpbmUgbGkgLnNlbGVjdGlvbik6CiAgICAgICAgKC5kb20tdHJlZS1vdXRsaW5lIGxpLnNlbGVjdGVkIC5zZWxlY3Rpb24pOgogICAgICAgICguZG9tLXRyZWUtb3V0bGluZSBsaS5lbGVtZW50cy1kcmFnLW92ZXIgLnNlbGVjdGlvbik6CiAgICAgICAgKC5kb20tdHJlZS1vdXRsaW5lOmZvY3VzIGxpLnNlbGVjdGVkIC5zZWxlY3Rpb24pOgogICAgICAgICguZG9tLXRyZWUtb3V0bGluZSwgLmRvbS10cmVlLW91dGxpbmUgb2wpOgogICAgICAgICguZG9tLXRyZWUtb3V0bGluZSBvbC5jaGlsZHJlbik6CiAgICAgICAgKC5kb20tdHJlZS1vdXRsaW5lIG9sLmNoaWxkcmVuLmV4cGFuZGVkKToKICAgICAgICAoLmRvbS10cmVlLW91dGxpbmUgbGkpOgogICAgICAgICguZG9tLXRyZWUtb3V0bGluZTpmb2N1cyBsaS5zZWxlY3RlZCk6CiAgICAgICAgKC5kb20tdHJlZS1vdXRsaW5lOmZvY3VzIGxpLnNlbGVjdGVkICopOgogICAgICAgICguZG9tLXRyZWUtb3V0bGluZSBsaS5wYXJlbnQpOgogICAgICAgICguZG9tLXRyZWUtb3V0bGluZSBsaSAuaHRtbC10YWcuY2xvc2UpOgogICAgICAgICguZG9tLXRyZWUtb3V0bGluZSBsaS5wYXJlbnQ6OmJlZm9yZSk6CiAgICAgICAgKC5kb20tdHJlZS1vdXRsaW5lOmZvY3VzIGxpLnBhcmVudC5zZWxlY3RlZDo6YmVmb3JlKToKICAgICAgICAoLmRvbS10cmVlLW91dGxpbmUgbGkucGFyZW50LmV4cGFuZGVkOjpiZWZvcmUpOgogICAgICAgICguZG9tLXRyZWUtb3V0bGluZTpmb2N1cyBsaS5wYXJlbnQuZXhwYW5kZWQuc2VsZWN0ZWQ6OmJlZm9yZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVPdXRsaW5lLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZU91dGxpbmUpOiBTZXQgdGhlIGRvbS10cmVlLW91dGxpbmUgYW5kIHN5bnRheC1oaWdobGlnaHRlZCBjbGFzcyBuYW1lcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVPdXRsaW5lLnByb3RvdHlwZS5wb3B1bGF0ZUNvbnRleHRNZW51KTogRm91bmQgYW5kIHJlcGxhY2VkICJ3ZWJraXQtIiB3aXRoICIiIHRvIGZpeCB0aGUKICAgICAgICBzeW50YXggaGlnaGxpZ2h0aW5nIGNsYXNzIG5hbWVzLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEluY2x1ZGVkIERPTVRyZWVPdXRsaW5lLmNzcy4KCjIwMTItMDEtMTYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIGl0IHBvc3NpYmxlIHRvIHNoYXJlIHRoZSBzeW50YXggaGlnaGxpZ2h0aW5nIHN0eWxlcyB3aXRoIHRoZSBET00gdHJlZS4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwNjYzMTYzPiBJbXBsZW1lbnQgdGhlIERPTSBUcmVlIGNvbnRlbnQgdmlldwoKICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgogICAgICAgICogVXNlckludGVyZmFjZS9TeW50YXhIaWdobGlnaHRpbmdEZWZhdWx0VGhlbWUuY3NzOiBSZW5hbWVkIGZyb20gU2FmYXJpL0RldmVsb3AvV2ViSW5zcGVjdG9yL1RleHRFZGl0b3JEZWZhdWx0VGhlbWUuY3NzLgogICAgICAgIEZvdW5kIGFuZCByZXBsYWNlZCAudGV4dC1lZGl0b3Igd2l0aCAuc3ludGF4LWhpZ2hsaWdodGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvcik6IEFkZCB0aGUgc3ludGF4LWhpZ2hsaWdodGVkIGNsYXNzIG5hbWUgdG8gdGhlIGNvbnRlbnQgY29udGFpbmVyLgoKMjAxMi0wMS0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBXZWJJbnNwZWN0b3IuRE9NVHJlZUNvbnRlbnRWaWV3IGFuZCBoYXZlIGl0IGFzIGEgc2Vjb25kIHZpZXcgYXZhaWxhYmxlIGluIFdlYkluc3BlY3Rvci5GcmFtZUNvbnRlbnRWaWV3LgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTA2NjMxNjM+IEltcGxlbWVudCB0aGUgRE9NIFRyZWUgY29udGVudCB2aWV3CgogICAgICAgIFJldmlld2VkIGJ5IEpvaG4gU3VsbGl2YW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3KTogQWRkZWQgc3VwcG9ydCBmb3IgV2ViSW5zcGVjdG9yLkRPTVRyZWUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlldy5pc1ZpZXdhYmxlKTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVDb250ZW50Vmlldy5jc3M6IEFkZGVkLgogICAgICAgICguY29udGVudC12aWV3LmRvbS10cmVlKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZUNvbnRlbnRWaWV3LmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVDb250ZW50Vmlldyk6IENyZWF0ZSB0aGUgRE9NVHJlZU91dGxpbmUgYW5kIHJlcXVlc3QgdGhlIHJvb3QgRE9NTm9kZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVDb250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IGRvbVRyZWUpOiBSZXR1cm4gX2RvbVRyZWUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlQ29udGVudFZpZXcucHJvdG90eXBlLnNob3duKTogQ2FsbCBzZXRWaXNpYmxlIG9uIHRoZSBET01UcmVlT3V0bGluZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVDb250ZW50Vmlldy5wcm90b3R5cGUuaGlkZGVuKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlQ29udGVudFZpZXcucHJvdG90eXBlLl9yb290RE9NTm9kZUF2YWlsYWJsZSk6IFNldCB0aGUgcm9vdERPTU5vZGUgb24gRE9NVHJlZU91dGxpbmUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlQ29udGVudFZpZXcucHJvdG90eXBlLl9yb290RE9NTm9kZURpZENoYW5nZSk6IFJlcXVlc3QgdGhlIHJvb3QgRE9NTm9kZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWVDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lQ29udGVudFZpZXcpOiBDcmVhdGUgdGhlIERPTSB0cmVlIHBhdGggY29tcG9uZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVDb250ZW50Vmlldy5wcm90b3R5cGUuX3BhdGhDb21wb25lbnRGb3JDb250ZW50Vmlldyk6IFJldHVybiB0aGUgRE9NIHRyZWUgcGF0Y2ggY29tcG9uZW50CiAgICAgICAgZm9yIERPTVRyZWUgcmVwcmVzZW50ZWQgb2JqZWN0cy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lQ29udGVudFZpZXcucHJvdG90eXBlLl9zaG93Q29udGVudFZpZXdGb3JJZGVudGlmaWVyKTogVXNlIHRoZSBET01UcmVlIG9mIHRoZSBmcmFtZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RPTVRyZWUucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlZCBET01UcmVlQ29udGVudFZpZXcue2pzLGNzc30uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1BhdGhDb21wb25lbnRJY29ucy5jc3M6CiAgICAgICAgKC5kb20tdHJlZS1pY29uIC5pY29uKTogQWRkZWQuCgoyMDEyLTAxLTE2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGdldHRpbmcgdGhlIERPTSB0cmVlIGZvciBhIHNwZWNpZmljIFdlYkluc3BlY3Rvci5GcmFtZS4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwNjYzMTYzPiBJbXBsZW1lbnQgdGhlIERPTSBUcmVlIGNvbnRlbnQgdmlldwoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4gYW5kIEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWUuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlLnByb3RvdHlwZS5pbnZhbGlkYXRlKTogRGVsYXkgdGhlIGludmFsaWRhdGlvbiBvbiBhIHRpbWVvdXQgdG8gY29hbGVzY2UgbXVsdGlwbGUgY2FsbHMgdG8gaW52YWxpZGF0ZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWUucHJvdG90eXBlLmludmFsaWRhdGUucGVyZm9ybUludmFsaWRhdGUpOiBEbyB0aGUgd29yayB0byBpbnZhbGlkYXRlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZS5wcm90b3R5cGUucmVxdWVzdFJvb3RET01Ob2RlKTogR2V0IHdpbmRvdy5mcmFtZUVsZW1lbnQgb3IgZG9jdW1lbnQgZnJvbSB0aGUgZGVzaXJlZCBmcmFtZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWUucHJvdG90eXBlLnJlcXVlc3RSb290RE9NTm9kZS5yb290T2JqZWN0QXZhaWxhYmxlKTogQ29udmVydCB0aGUgUmVtb3RlT2JqZWN0IHRvIGEgRE9NTm9kZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWUucHJvdG90eXBlLnJlcXVlc3RSb290RE9NTm9kZS5yb290RE9NTm9kZUF2YWlsYWJsZSk6IEdldCB0aGUgY2hpbGQgbm9kZXMgYmVmb3JlIGNhbGxpbmcgdGhlIGNhbGxiYWNrcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWUucHJvdG90eXBlLnJlcXVlc3RSb290RE9NTm9kZS5kaXNwYXRjaENhbGxiYWNrcyk6IEhlbHBlciB0byBkaXNwYXRjaCBwZW5kaW5nIGNhbGxiYWNrcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWUucHJvdG90eXBlLl9ub2RlUmVtb3ZlZCk6IENhbGwgaW52YWxpZGF0ZSBpZiB0aGUgbm9kZSBpcyB0aGUgcm9vdCBub2RlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZS5wcm90b3R5cGUuX2RvY3VtZW50VXBkYXRlZCk6IENhbGwgaW52YWxpZGF0ZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWUucHJvdG90eXBlLl9mcmFtZU1haW5SZXNvdXJjZURpZENoYW5nZSk6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9GcmFtZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lLnByb3RvdHlwZS5nZXQgZG9tVHJlZSk6IEFkZGVkLgoKMjAxMi0wMS0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFJlbW92ZSBkZXBlbmRlbmN5IG9uIFByZWZlcmVuY2VzLm1heElubGluZVRleHRDaGlsZExlbmd0aCBmcm9tIFdlYkluc3BlY3Rvci5ET01UcmVlRWxlbWVudC4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwNjYzMTYzPiBJbXBsZW1lbnQgdGhlIERPTSBUcmVlIGNvbnRlbnQgdmlldwoKICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlRWxlbWVudC5NYXhpbXVtSW5saW5lVGV4dENoaWxkTGVuZ3RoKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlRWxlbWVudC5wcm90b3R5cGUuX25vZGVUaXRsZUluZm8pOiBVc2UgV2ViSW5zcGVjdG9yLkRPTVRyZWVFbGVtZW50Lk1heGltdW1JbmxpbmVUZXh0Q2hpbGRMZW5ndGguCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlRWxlbWVudC5wcm90b3R5cGUuX3Nob3dJbmxpbmVUZXh0KTogRGl0dG8uCgoyMDEyLTAxLTE2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgVXNlIFdlYkluc3BlY3Rvci5ET01Ob2RlIGluc3RlYWQgb2YgV2ViSW5zcGVjdG9yLkRPTURvY3VtZW50IHNpbmNlIHdlIGRvbid0IGhhdmUgRE9NRG9jdW1lbnQKICAgICAgICBpbiB0aGUgbmV3IFdlYiBJbnNwZWN0b3IuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDY2MzE2Mz4gSW1wbGVtZW50IHRoZSBET00gVHJlZSBjb250ZW50IHZpZXcKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9obiBTdWxsaXZhbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTU5vZGUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlKTogU2V0IG93bmVyRG9jdW1lbnQgdG8gdGhpcyB3aGVuIHRoaXMgaXMgYSBkb2N1bWVudCBub2RlLgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLnByb3RvdHlwZS5fc2V0RG9jdW1lbnQpOiBVc2UgRE9NTm9kZSBpbnN0ZWFkIG9mIERPTURvY3VtZW50LgoKMjAxMi0wMS0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFVwZGF0ZSBET01UcmVlRWxlbWVudCB0byBjb3JyZWN0bHkgdXNlIHRoZSBuZXcgbm9uLWZvcm1hdGluZyBXZWJJbnNwZWN0b3IuVUlTdHJpbmcuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDY2MzE2Mz4gSW1wbGVtZW50IHRoZSBET00gVHJlZSBjb250ZW50IHZpZXcKCiAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgSm9obiBTdWxsaXZhbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUVsZW1lbnQucHJvdG90eXBlLl9jcmVhdGVUb29sdGlwRm9yTm9kZS5zZXRUb29sdGlwKTogVXNlIGZvcm1hdCgpIGFmdGVyIFVJU3RyaW5nLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUVsZW1lbnQucHJvdG90eXBlLmFkanVzdENvbGxhcHNlZFJhbmdlKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlRWxlbWVudC5wcm90b3R5cGUuX3BvcHVsYXRlVGFnQ29udGV4dE1lbnUpOiBSZW1vdmVkIFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51VGl0bGVzKCkgdXNlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUVsZW1lbnQucHJvdG90eXBlLl9wb3B1bGF0ZVRleHRDb250ZXh0TWVudSk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUVsZW1lbnQucHJvdG90eXBlLl9wb3B1bGF0ZU5vZGVDb250ZXh0TWVudSk6IERpdHRvLgoKMjAxMi0wMS0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFJlcGxhY2Uge2FkZCxyZW1vdmUsaGFzfVN0eWxlQ2xhc3MgaW4gRE9NVHJlZXtFbGVtZW50LE91dGxpbmV9IHdpdGggY2xhc3NMaXN0LnthZGQscmVtb3ZlLGNvbnRhaW5zfS4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwNjYzMTYzPiBJbXBsZW1lbnQgdGhlIERPTSBUcmVlIGNvbnRlbnQgdmlldwoKICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBKb2huIFN1bGxpdmFuLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5zZXQgaG92ZXJlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5vbmF0dGFjaCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5fdHJpZ2dlckVkaXRBdHRyaWJ1dGUpOgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlT3V0bGluZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUucHJvdG90eXBlLl9vbmRyYWdvdmVyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUucHJvdG90eXBlLl9jbGVhckRyYWdPdmVyVHJlZUVsZW1lbnRNYXJrZXIpOgoKMjAxMi0wMS0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFJlbW92ZSBkZXBlbmRhbmN5IG9uIFdlYkluc3BlY3Rvci5Db2xvciBmcm9tIFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwNjYzMTYzPiBJbXBsZW1lbnQgdGhlIERPTSBUcmVlIGNvbnRlbnQgdmlldwoKICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBKb2huIFN1bGxpdmFuLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUuX2J1aWxkSGlnaGxpZ2h0Q29uZmlnKTogSW5jbHVkZSB0aGUgY29sb3JzIGRpcmVjdGx5LgoKMjAxMi0wMS0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgV2ViSW5zcGVjdG9yLkRPTVRyZWVVcGRhdGVyIGxpc3RlbiBmb3IgZXZlbnRzIG9uIHRoZSBjb3JyZWN0IG9iamVjdC4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwNjYzMTYzPiBJbXBsZW1lbnQgdGhlIERPTSBUcmVlIGNvbnRlbnQgdmlldwoKICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBKb2huIFN1bGxpdmFuLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZVVwZGF0ZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlVXBkYXRlcik6IFVzZSBET01UcmVlTWFuYWdlciBpbnN0ZWFkIG9mIHRoZSBvbGQgRE9NQWdlbnQgbmFtZS4KCjIwMTItMDEtMTYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIFdlYkluc3BlY3Rvci5ET01UcmVlT3V0bGluZSBjb25mb3JtIHRvIHRoZSByaWdodCBzdHlsZSBmb3Igb2JqZWN0cyB3aXRoIGV2ZW50cy4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwNjYzMTYzPiBJbXBsZW1lbnQgdGhlIERPTSBUcmVlIGNvbnRlbnQgdmlldwoKICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZU91dGxpbmUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlT3V0bGluZS5wcm90b3R5cGUuX3NlbGVjdGVkTm9kZUNoYW5nZWQpOgoKMjAxMi0wMS0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyIGV2ZW50cyBjb25mb3JtIHRvIHRoZSBzdHlsZSB3ZSB1c2UgaW4gdGhlIG5ldyBXZWIgSW5zcGVjdG9yLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTA2NjMxNjM+IEltcGxlbWVudCB0aGUgRE9NIFRyZWUgY29udGVudCB2aWV3CgogICAgICAgIFJldmlld2VkIGJ5IEpvaG4gU3VsbGl2YW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLnByb3RvdHlwZS5fYXR0cmlidXRlTW9kaWZpZWQpOiBVc2UgV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLkV2ZW50IGFuZCBzcGVsbCBvdXQgQXR0cmlidXRlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIucHJvdG90eXBlLl9hdHRyaWJ1dGVSZW1vdmVkKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUuX2xvYWROb2RlQXR0cmlidXRlcyk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIucHJvdG90eXBlLl9jaGFyYWN0ZXJEYXRhTW9kaWZpZWQpOiBXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIuRXZlbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUuX3NldERvY3VtZW50KTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUuX2NoaWxkTm9kZUNvdW50VXBkYXRlZCk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIucHJvdG90eXBlLl9jaGlsZE5vZGVJbnNlcnRlZCk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIucHJvdG90eXBlLl9jaGlsZE5vZGVSZW1vdmVkKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUuaW5zcGVjdEVsZW1lbnQpOiBEaXR0by4KCjIwMTItMDEtMTYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBEb24ndCBjYWxsIEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJET01EaXNwYXRjaGVyIGZyb20gV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLgoKICAgICAgICBUaGUgbmV3IFdlYiBJbnNwZWN0b3IgY2FsbHMgSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRPTURpc3BhdGNoZXIgZnJvbSBNYWluLmpzLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTA2NjMxNjM+IEltcGxlbWVudCB0aGUgRE9NIFRyZWUgY29udGVudCB2aWV3CgogICAgICAgIFJldmlld2VkIGJ5IEpvaG4gU3VsbGl2YW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyKTogUmVtb3ZlIGNhbGwgdG8gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRPTURpc3BhdGNoZXIuCgoyMDEyLTAxLTE2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgV2lyZSB1cCBXZWJJbnNwZWN0b3IuRE9NT2JzZXJ2ZXIgdG8gV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTA2NjMxNjM+IEltcGxlbWVudCB0aGUgRE9NIFRyZWUgY29udGVudCB2aWV3CgogICAgICAgIFJldmlld2VkIGJ5IEpvaG4gU3VsbGl2YW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01PYnNlcnZlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU9ic2VydmVyLnByb3RvdHlwZS5kb2N1bWVudFVwZGF0ZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NT2JzZXJ2ZXIucHJvdG90eXBlLnNldENoaWxkTm9kZXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NT2JzZXJ2ZXIucHJvdG90eXBlLmF0dHJpYnV0ZU1vZGlmaWVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU9ic2VydmVyLnByb3RvdHlwZS5hdHRyaWJ1dGVSZW1vdmVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU9ic2VydmVyLnByb3RvdHlwZS5pbmxpbmVTdHlsZUludmFsaWRhdGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU9ic2VydmVyLnByb3RvdHlwZS5jaGFyYWN0ZXJEYXRhTW9kaWZpZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NT2JzZXJ2ZXIucHJvdG90eXBlLmNoaWxkTm9kZUNvdW50VXBkYXRlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01PYnNlcnZlci5wcm90b3R5cGUuY2hpbGROb2RlSW5zZXJ0ZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NT2JzZXJ2ZXIucHJvdG90eXBlLmNoaWxkTm9kZVJlbW92ZWQpOgoKMjAxMi0wMS0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFVzZSBXZWJJbnNwZWN0b3IuZG9tVHJlZU1hbmFnZXIgaW5zdGVhZCBvZiB0aGUgb2xkIFdlYkluc3BlY3Rvci5kb21BZ2VudC4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwNjYzMTYzPiBJbXBsZW1lbnQgdGhlIERPTSBUcmVlIGNvbnRlbnQgdmlldwoKICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBKb2huIFN1bGxpdmFuLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlRWxlbWVudC5wcm90b3R5cGUub25zZWxlY3QpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUVsZW1lbnQucHJvdG90eXBlLl90YWdOYW1lRWRpdGluZ0NvbW1pdHRlZC5jaGFuZ2VUYWdOYW1lQ2FsbGJhY2spOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUVsZW1lbnQucHJvdG90eXBlLl90YWdOYW1lRWRpdGluZ0NvbW1pdHRlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVPdXRsaW5lLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZU91dGxpbmUucHJvdG90eXBlLl9vbm1vdXNlbW92ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlT3V0bGluZS5wcm90b3R5cGUuX29ubW91c2VvdXQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZU91dGxpbmUucHJvdG90eXBlLl9vbmRyYWdzdGFydCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlT3V0bGluZS5wcm90b3R5cGUuX29uZHJvcC5jYWxsYmFjayk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlT3V0bGluZS5wcm90b3R5cGUuX29uZHJvcCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01UcmVlT3V0bGluZS5wcm90b3R5cGUuX2NvbnRleHRNZW51RXZlbnRGaXJlZC5mb2N1c0VsZW1lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZU91dGxpbmUucHJvdG90eXBlLl9jb250ZXh0TWVudUV2ZW50RmlyZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlVXBkYXRlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVRyZWVVcGRhdGVyLnByb3RvdHlwZS5fcmVzZXQpOgogICAgICAgICogVXNlckludGVyZmFjZS9SZW1vdGVPYmplY3QuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QucHJvdG90eXBlLnB1c2hOb2RlVG9Gcm9udGVuZCk6CgoyMDEyLTAxLTE2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQ3JlYXRlIGEgV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyIGluc3RhbmNlLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTA2NjMxNjM+IEltcGxlbWVudCB0aGUgRE9NIFRyZWUgY29udGVudCB2aWV3CgogICAgICAgIFJldmlld2VkIGJ5IEpvaG4gU3VsbGl2YW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IENyZWF0ZSBhIFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlciBpbnN0YW5jZS4KCjIwMTItMDEtMTYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBSZW5hbWUgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZXtPdXRsaW5lLEVsZW1lbnQsVXBkYXRlcn0gdG8gV2ViSW5zcGVjdG9yLkRPTVRyZWV7T3V0bGluZSxFbGVtZW50LFVwZGF0ZXJ9LgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTA2NjMxNjM+IEltcGxlbWVudCB0aGUgRE9NIFRyZWUgY29udGVudCB2aWV3CgogICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IEpvaG4gU3VsbGl2YW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlRWxlbWVudC5qczogRm91bmQgYW5kIHJlcGxhY2VkIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWUgd2l0aCBXZWJJbnNwZWN0b3IuRE9NVHJlZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZU91dGxpbmUuanM6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlVXBkYXRlci5qczogRGl0dG8uCgoyMDEyLTAxLTE2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUmVuYW1lIFdlYkluc3BlY3Rvci5ET01BZ2VudCB0byBXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDY2MzE2Mz4gSW1wbGVtZW50IHRoZSBET00gVHJlZSBjb250ZW50IHZpZXcKCiAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgSm9obiBTdWxsaXZhbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVRyZWVNYW5hZ2VyLmpzOiBGb3VuZCBhbmQgcmVwbGFjZWQgV2ViSW5zcGVjdG9yLkRPTUFnZW50IHdpdGggV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLgoKMjAxMi0wMS0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIENvcHkgb3ZlciBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVle091dGxpbmUsRWxlbWVudCxVcGRhdGVyfSBmcm9tIE9wZW4gU291cmNlLgoKICAgICAgICBDb3BpZWQgaW50byBET01UcmVlRWxlbWVudC5qcywgRE9NVHJlZU91dGxpbmUuanMgYW5kIERPTVRyZWVVcGRhdGVyLmpzIHNpbmNlIHRoZSBjbGFzc2VzIHdpbGwKICAgICAgICBzb29uIGJlIHJlbmFtZWQgdG8gV2ViSW5zcGVjdG9yLkRPTVRyZWV7T3V0bGluZSxFbGVtZW50LFVwZGF0ZXJ9LgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTA2NjMxNjM+IEltcGxlbWVudCB0aGUgRE9NIFRyZWUgY29udGVudCB2aWV3CgogICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IEpvaG4gU3VsbGl2YW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlRWxlbWVudC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLmhpZ2hsaWdodFNlYXJjaFJlc3VsdHMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuaGlkZVNlYXJjaEhpZ2hsaWdodHMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX3VwZGF0ZVNlYXJjaEhpZ2hsaWdodC51cGRhdGVFbnRyeVNob3cpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX3VwZGF0ZVNlYXJjaEhpZ2hsaWdodC51cGRhdGVFbnRyeUhpZGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX3VwZGF0ZVNlYXJjaEhpZ2hsaWdodCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5nZXQgaG92ZXJlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5zZXQgaG92ZXJlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5nZXQgZXhwYW5kZWRDaGlsZHJlbkxpbWl0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLnNldCBleHBhbmRlZENoaWxkcmVuTGltaXQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuZ2V0IGV4cGFuZGVkQ2hpbGRDb3VudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5zaG93Q2hpbGQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX2NyZWF0ZVRvb2x0aXBGb3JOb2RlLnNldFRvb2x0aXApOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX2NyZWF0ZVRvb2x0aXBGb3JOb2RlLnJlc29sdmVkTm9kZS5kaW1lbnNpb25zKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLl9jcmVhdGVUb29sdGlwRm9yTm9kZS5yZXNvbHZlZE5vZGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX2NyZWF0ZVRvb2x0aXBGb3JOb2RlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLnVwZGF0ZVNlbGVjdGlvbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5vbmF0dGFjaCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5fcHJldmVudEZvbGxvd2luZ0xpbmtzT25Eb3VibGVDbGljayk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5vbnBvcHVsYXRlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLnVwZGF0ZUNoaWxkcmVuKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLmluc2VydENoaWxkRWxlbWVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5tb3ZlQ2hpbGQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX3VwZGF0ZUNoaWxkcmVuLnVwZGF0ZUNoaWxkcmVuT2ZOb2RlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLl91cGRhdGVDaGlsZHJlbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5hZGp1c3RDb2xsYXBzZWRSYW5nZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5oYW5kbGVMb2FkQWxsQ2hpbGRyZW4pOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUub25leHBhbmQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUub25jb2xsYXBzZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5vbnJldmVhbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5vbnNlbGVjdCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5vbmRlbGV0ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5vbmVudGVyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLnNlbGVjdE9uTW91c2VEb3duKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLm9uZGJsY2xpY2spOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX2luc2VydEluTGFzdEF0dHJpYnV0ZVBvc2l0aW9uKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLl9zdGFydEVkaXRpbmdUYXJnZXQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX3BvcHVsYXRlVGFnQ29udGV4dE1lbnUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX3BvcHVsYXRlVGV4dENvbnRleHRNZW51KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLl9wb3B1bGF0ZU5vZGVDb250ZXh0TWVudSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5fc3RhcnRFZGl0aW5nKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLl9hZGROZXdBdHRyaWJ1dGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX3RyaWdnZXJFZGl0QXR0cmlidXRlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLl9zdGFydEVkaXRpbmdBdHRyaWJ1dGUucmVtb3ZlWmVyb1dpZHRoU3BhY2VSZWN1cnNpdmUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX3N0YXJ0RWRpdGluZ0F0dHJpYnV0ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5fc3RhcnRFZGl0aW5nVGV4dE5vZGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX3N0YXJ0RWRpdGluZ1RhZ05hbWUua2V5dXBMaXN0ZW5lcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5fc3RhcnRFZGl0aW5nVGFnTmFtZS5lZGl0aW5nQ29taXR0ZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX3N0YXJ0RWRpdGluZ1RhZ05hbWUuZWRpdGluZ0NhbmNlbGxlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5fc3RhcnRFZGl0aW5nVGFnTmFtZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5fc3RhcnRFZGl0aW5nQXNIVE1MLmNvbW1pdCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5fc3RhcnRFZGl0aW5nQXNIVE1MLmRpc3Bvc2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX3N0YXJ0RWRpdGluZ0FzSFRNTCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5fYXR0cmlidXRlRWRpdGluZ0NvbW1pdHRlZC5tb3ZlVG9OZXh0QXR0cmlidXRlSWZOZWVkZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX2F0dHJpYnV0ZUVkaXRpbmdDb21taXR0ZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX3RhZ05hbWVFZGl0aW5nQ29tbWl0dGVkLmNhbmNlbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5fdGFnTmFtZUVkaXRpbmdDb21taXR0ZWQubW92ZVRvTmV4dEF0dHJpYnV0ZUlmTmVlZGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLl90YWdOYW1lRWRpdGluZ0NvbW1pdHRlZC5jaGFuZ2VUYWdOYW1lQ2FsbGJhY2spOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX3RhZ05hbWVFZGl0aW5nQ29tbWl0dGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLl90ZXh0Tm9kZUVkaXRpbmdDb21taXR0ZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX2VkaXRpbmdDYW5jZWxsZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX2Rpc3RpbmN0Q2xvc2luZ1RhZ0VsZW1lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUudXBkYXRlVGl0bGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX2J1aWxkQXR0cmlidXRlRE9NKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZU91dGxpbmUuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlT3V0bGluZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5lLnByb3RvdHlwZS53aXJlVG9Eb21BZ2VudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5lLnByb3RvdHlwZS5zZXRWaXNpYmxlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlT3V0bGluZS5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5lLnByb3RvdHlwZS5nZXQgcm9vdERPTU5vZGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlT3V0bGluZS5wcm90b3R5cGUuc2V0IHJvb3RET01Ob2RlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUucHJvdG90eXBlLmdldCBpc1hNTE1pbWVUeXBlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUucHJvdG90eXBlLnNlbGVjdGVkRE9NTm9kZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5lLnByb3RvdHlwZS5zZWxlY3RET01Ob2RlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUucHJvdG90eXBlLmdldCBlZGl0aW5nKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUucHJvdG90eXBlLnVwZGF0ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5lLnByb3RvdHlwZS51cGRhdGVTZWxlY3Rpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlT3V0bGluZS5wcm90b3R5cGUuX3NlbGVjdGVkTm9kZUNoYW5nZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlT3V0bGluZS5wcm90b3R5cGUuZmluZFRyZWVFbGVtZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUucHJvdG90eXBlLmZpbmRUcmVlRWxlbWVudC5wYXJlbnROb2RlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUucHJvdG90eXBlLmNyZWF0ZVRyZWVFbGVtZW50Rm9yKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUucHJvdG90eXBlLnNldCBzdXBwcmVzc1JldmVhbEFuZFNlbGVjdCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5lLnByb3RvdHlwZS5fcmV2ZWFsQW5kU2VsZWN0Tm9kZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5lLnByb3RvdHlwZS5fdHJlZUVsZW1lbnRGcm9tRXZlbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlT3V0bGluZS5wcm90b3R5cGUuX29ubW91c2Vkb3duKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUucHJvdG90eXBlLl9vbm1vdXNlbW92ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5lLnByb3RvdHlwZS5fb25tb3VzZW91dCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5lLnByb3RvdHlwZS5fb25kcmFnc3RhcnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlT3V0bGluZS5wcm90b3R5cGUuX29uZHJhZ292ZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlT3V0bGluZS5wcm90b3R5cGUuX29uZHJhZ2xlYXZlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUucHJvdG90eXBlLl9pc1ZhbGlkRHJhZ1NvdXJjZU9yVGFyZ2V0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUucHJvdG90eXBlLl9vbmRyb3AuY2FsbGJhY2spOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlT3V0bGluZS5wcm90b3R5cGUuX29uZHJvcCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5lLnByb3RvdHlwZS5fb25kcmFnZW5kKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUucHJvdG90eXBlLl9jbGVhckRyYWdPdmVyVHJlZUVsZW1lbnRNYXJrZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlT3V0bGluZS5wcm90b3R5cGUuX2NvbnRleHRNZW51RXZlbnRGaXJlZC5mb2N1c0VsZW1lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlT3V0bGluZS5wcm90b3R5cGUuX2NvbnRleHRNZW51RXZlbnRGaXJlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5lLnByb3RvdHlwZS5wb3B1bGF0ZUNvbnRleHRNZW51KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUucHJvdG90eXBlLmFkanVzdENvbGxhcHNlZFJhbmdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUucHJvdG90eXBlLl91cGRhdGVNb2RpZmllZE5vZGVzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUucHJvdG90eXBlLl9wb3B1bGF0ZUNvbnRleHRNZW51KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NVHJlZVVwZGF0ZXIuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlVXBkYXRlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVVcGRhdGVyLnByb3RvdHlwZS5fZG9jdW1lbnRVcGRhdGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZVVwZGF0ZXIucHJvdG90eXBlLl9hdHRyaWJ1dGVzVXBkYXRlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVVcGRhdGVyLnByb3RvdHlwZS5fY2hhcmFjdGVyRGF0YU1vZGlmaWVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZVVwZGF0ZXIucHJvdG90eXBlLl9ub2RlSW5zZXJ0ZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlVXBkYXRlci5wcm90b3R5cGUuX25vZGVSZW1vdmVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZVVwZGF0ZXIucHJvdG90eXBlLl9jaGlsZE5vZGVDb3VudFVwZGF0ZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlVXBkYXRlci5wcm90b3R5cGUuX3VwZGF0ZU1vZGlmaWVkTm9kZXNTb29uKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZVVwZGF0ZXIucHJvdG90eXBlLl91cGRhdGVNb2RpZmllZE5vZGVzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZVVwZGF0ZXIucHJvdG90eXBlLl9yZXNldCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZWQgRE9NVHJlZXtPdXRsaW5lLEVsZW1lbnQsVXBkYXRlcn0uanMuCgoyMDEyLTAxLTE2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQ29weSBvdmVyIFdlYkluc3BlY3Rvci5ET01BZ2VudCBmcm9tIE9wZW4gU291cmNlLgoKICAgICAgICBDb3BpZWQgaW50byBET01UcmVlTWFuYWdlci5qcyBzaW5jZSBXZWJJbnNwZWN0b3IuRE9NQWdlbnQgd2lsbCBzb29uIGJlIHJlbmFtZWQgdG8gV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTA2NjMxNjM+IEltcGxlbWVudCB0aGUgRE9NIFRyZWUgY29udGVudCB2aWV3CgogICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IEpvaG4gU3VsbGl2YW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01UcmVlTWFuYWdlci5qczogQ29waWVkIGZyb20gT3BlblNvdXJjZS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NQWdlbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NQWdlbnQucHJvdG90eXBlLnJlcXVlc3REb2N1bWVudC5vbkRvY3VtZW50QXZhaWxhYmxlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTUFnZW50LnByb3RvdHlwZS5yZXF1ZXN0RG9jdW1lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NQWdlbnQucHJvdG90eXBlLnB1c2hOb2RlVG9Gcm9udGVuZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01BZ2VudC5wcm90b3R5cGUucHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTUFnZW50LnByb3RvdHlwZS5fZGlzcGF0Y2hXaGVuRG9jdW1lbnRBdmFpbGFibGUub25Eb2N1bWVudEF2YWlsYWJsZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01BZ2VudC5wcm90b3R5cGUuX2Rpc3BhdGNoV2hlbkRvY3VtZW50QXZhaWxhYmxlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTUFnZW50LnByb3RvdHlwZS5fYXR0cmlidXRlTW9kaWZpZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NQWdlbnQucHJvdG90eXBlLl9hdHRyaWJ1dGVSZW1vdmVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTUFnZW50LnByb3RvdHlwZS5faW5saW5lU3R5bGVJbnZhbGlkYXRlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01BZ2VudC5wcm90b3R5cGUuX2xvYWROb2RlQXR0cmlidXRlcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01BZ2VudC5wcm90b3R5cGUuX2NoYXJhY3RlckRhdGFNb2RpZmllZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01BZ2VudC5wcm90b3R5cGUubm9kZUZvcklkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTUFnZW50LnByb3RvdHlwZS5fZG9jdW1lbnRVcGRhdGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTUFnZW50LnByb3RvdHlwZS5fc2V0RG9jdW1lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NQWdlbnQucHJvdG90eXBlLl9zZXREZXRhY2hlZFJvb3QpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NQWdlbnQucHJvdG90eXBlLl9zZXRDaGlsZE5vZGVzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTUFnZW50LnByb3RvdHlwZS5fYmluZE5vZGVzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTUFnZW50LnByb3RvdHlwZS5fY2hpbGROb2RlQ291bnRVcGRhdGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTUFnZW50LnByb3RvdHlwZS5fY2hpbGROb2RlSW5zZXJ0ZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NQWdlbnQucHJvdG90eXBlLl9jaGlsZE5vZGVSZW1vdmVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTUFnZW50LnByb3RvdHlwZS5pbnNwZWN0RWxlbWVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01BZ2VudC5wcm90b3R5cGUucGVyZm9ybVNlYXJjaC5jYWxsYmFjayk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01BZ2VudC5wcm90b3R5cGUucGVyZm9ybVNlYXJjaCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01BZ2VudC5wcm90b3R5cGUuc2VhcmNoUmVzdWx0Lm15Y2FsbGJhY2spOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NQWdlbnQucHJvdG90eXBlLnNlYXJjaFJlc3VsdCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01BZ2VudC5wcm90b3R5cGUuY2FuY2VsU2VhcmNoKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTUFnZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTUFnZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTUFnZW50LnByb3RvdHlwZS5oaWdobGlnaHRET01Ob2RlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTUFnZW50LnByb3RvdHlwZS5oaWRlRE9NTm9kZUhpZ2hsaWdodCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01BZ2VudC5wcm90b3R5cGUuaGlnaGxpZ2h0RE9NTm9kZUZvclR3b1NlY29uZHMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NQWdlbnQucHJvdG90eXBlLnNldEluc3BlY3RNb2RlRW5hYmxlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01BZ2VudC5wcm90b3R5cGUuX2J1aWxkSGlnaGxpZ2h0Q29uZmlnKToKCjIwMTItMDEtMTYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBDb3B5IG92ZXIgV2ViSW5zcGVjdG9yLkRPTU5vZGUgZnJvbSBPcGVuIFNvdXJjZS4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwNjYzMTYzPiBJbXBsZW1lbnQgdGhlIERPTSBUcmVlIGNvbnRlbnQgdmlldwoKICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBKb2huIFN1bGxpdmFuLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NTm9kZS5qczogQ29waWVkIGZyb20gT3BlblNvdXJjZS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5oYXNBdHRyaWJ1dGVzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLmhhc0NoaWxkTm9kZXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5wcm90b3R5cGUubm9kZVR5cGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5wcm90b3R5cGUubm9kZU5hbWUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5wcm90b3R5cGUubm9kZU5hbWVJbkNvcnJlY3RDYXNlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLnNldE5vZGVOYW1lKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLmxvY2FsTmFtZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5ub2RlVmFsdWUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5wcm90b3R5cGUuc2V0Tm9kZVZhbHVlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLmdldEF0dHJpYnV0ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5wcm90b3R5cGUuc2V0QXR0cmlidXRlVmFsdWUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5wcm90b3R5cGUuYXR0cmlidXRlcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5wcm90b3R5cGUuZ2V0Q2hpbGROb2Rlcy5teWNhbGxiYWNrKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLmdldENoaWxkTm9kZXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5wcm90b3R5cGUuZ2V0T3V0ZXJIVE1MKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLnNldE91dGVySFRNTCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5yZW1vdmVOb2RlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLmNvcHlOb2RlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLmV2ZW50TGlzdGVuZXJzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLnBhdGgpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5wcm90b3R5cGUuYXBwcm9wcmlhdGVTZWxlY3RvckZvcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5pc0FuY2VzdG9yKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLmlzRGVzY2VuZGFudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5fc2V0QXR0cmlidXRlc1BheWxvYWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5wcm90b3R5cGUuX2luc2VydENoaWxkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLl9yZW1vdmVDaGlsZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5fc2V0Q2hpbGRyZW5QYXlsb2FkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLl9yZW51bWJlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5fYWRkQXR0cmlidXRlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLl9zZXRBdHRyaWJ1dGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5wcm90b3R5cGUuX3JlbW92ZUF0dHJpYnV0ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5vd25lckRvY3VtZW50RWxlbWVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5tb3ZlVG8pOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5wcm90b3R5cGUuaXNYTUxOb2RlKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlZCBET01Ob2RlLmpzLgoKMjAxMi0wMS0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIENvcHkgb3ZlciBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0IGZyb20gT3BlbiBTb3VyY2UuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDY2MzE2Mz4gSW1wbGVtZW50IHRoZSBET00gVHJlZSBjb250ZW50IHZpZXcKCiAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgSm9obiBTdWxsaXZhbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZWQgUmVtb3RlT2JqZWN0LmpzLgogICAgICAgICogVXNlckludGVyZmFjZS9SZW1vdGVPYmplY3QuanM6IENvcGllZCBmcm9tIE9wZW5Tb3VyY2UvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZW1vdGVPYmplY3QuanMuCgoyMDEyLTAxLTE2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQ29weSBvdmVyIFdlYkluc3BlY3Rvci5Db250ZXh0TWVudSBmcm9tIE9wZW4gU291cmNlLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTA2NjMxNjM+IEltcGxlbWVudCB0aGUgRE9NIFRyZWUgY29udGVudCB2aWV3CgogICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IEpvaG4gU3VsbGl2YW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZXh0TWVudS5qczogQ29waWVkIGZyb20gT3BlblNvdXJjZS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnRleHRNZW51LmpzLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEluY2x1ZGVkIENvbnRleHRNZW51LmpzLgoKMjAxMi0wMS0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFJlbmFtZSBUcmVlRWxlbWVudEhpZXJhcmNoaWNhbFBhdGhDb21wb25lbnQuanMgdG8gR2VuZXJhbFRyZWVFbGVtZW50UGF0aENvbXBvbmVudC5qcy4KCiAgICAgICAgSXQgYWx3YXlzIGRlYWx0IHdpdGggR2VuZXJhbFRyZWVFbGVtZW50cyBmcm9tIHRoZSBzdGFydCwgbm90IFRyZWVFbGVtZW50cy4gVGhpcyBtYWtlcyBpdCBjbGVhcgogICAgICAgIHRoYXQgaXMgY2FuJ3QgYmUgdXNlZCB3aXRoIG90aGVyIFRyZWVFbGVtZW50IHN1YmNsYXNzZXMgKGxpa2UgRE9NVHJlZUVsZW1lbnQpLgoKICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBKb2huIFN1bGxpdmFuLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudEJyb3dzZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuX3VwZGF0ZUhpZXJhcmNoaWNhbFBhdGhOYXZpZ2F0aW9uSXRlbSk6IFVzZSBHZW5lcmFsVHJlZUVsZW1lbnRQYXRoQ29tcG9uZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIucHJvdG90eXBlLl9oaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50V2FzU2VsZWN0ZWQpOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvR2VuZXJhbFRyZWVFbGVtZW50UGF0aENvbXBvbmVudC5qczogUmVuYW1lZCBmcm9tIFRyZWVFbGVtZW50SGllcmFyY2hpY2FsUGF0aENvbXBvbmVudC5qcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBSZW5hbWVkIFRyZWVFbGVtZW50SGllcmFyY2hpY2FsUGF0aENvbXBvbmVudC5qcyB0byBHZW5lcmFsVHJlZUVsZW1lbnRQYXRoQ29tcG9uZW50LmpzLgoKMjAxMi0wMS0xNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFByZXZlbnQgZGVzZWxlY3Rpb24gb2YgZnJhbWVzIGluIHRoZSBSZXNvdXJjZXMgc2lkZWJhciB3aGVuIHRoZXkgbmF2aWdhdGUsIG9yIHdoZW4gcmVzb3VyY2VzIHJlZGlyZWN0LgoKICAgICAgICBXaGVuIGEgZnJhbWUgbmF2aWdhdGVzIG9yIGEgcmVzb3VyY2UgcmVkaXJlY3RzIHdlIHJlbW92ZSBpdCBmcm9tIHRoZSB0cmVlIGFuZCByZWluc2VydCBpdCBhdCB0aGUgY29ycmVjdAogICAgICAgIHNvcnQgb3JkZXIgYmFzZWQgb24gdGhlIG5ldyBVUkwuIFdoZW4gdGhlIHRyZWUgZWxlbWVudCB3YXMgcmVtb3ZlZCB3ZSB3b3VsZCBhdXRvbWF0aWNhbGx5IHNlbGVjdCBhIHNpYmxpbmcuCiAgICAgICAgVGhpcyB1c2VzIG5ldyBUcmVlT3V0bGluZSBzdXBwb3J0IHRvIHN1cHByZXNzIG5vdGlmeWluZyBzZWxlY3QvZGVzZWxlY3QgbGlzdGVuZXJzIHNvIHRoZSB0ZW1wb3JhcnkgcmVtb3ZhbAogICAgICAgIGlzIG5vdCBub3RpY2VkLCBzbyB0aGUgY29udGVudCB2aWV3IGRvZXMgbm90IGNoYW5nZSBicmllZmx5LgoKICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWVUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lVHJlZUVsZW1lbnQucHJvdG90eXBlLl9hZGRUcmVlRWxlbWVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fcmVtb3ZlVHJlZUVsZW1lbnQpOgoKMjAxMi0wMS0xNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBtb3JlIHN1cHBvcnQgZm9yIHN1cHByZXNzaW5nIHRoZSBzZWxlY3QgYW5kIGRlc2VsZWN0IGV2ZW50cyBpbiBUcmVlT3V0bGluZS4gVGhpcyBhbHNvIGZpeGVzCiAgICAgICAgYSB0eXBvIHdoZXJlIHN1cHByZXNzIHdhcyBwZXJ2YXNpdmVseSBtaXNzcGVsbGVkLgoKICAgICAgICBUaGlzIGlzIG5lZWRlZCB0byBwcmV2ZW50IGNoYW5naW5nIHZpZXdzIHdoZW4gYSB0cmVlIGVsZW1lbnQgaW4gdGhlIFJlc291cmNlcyBzaWRlYmFyIG1vdmVzIHRvIGEgZm9sZGVyLgoKICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVHJlZU91dGxpbmUuanM6CiAgICAgICAgKFRyZWVPdXRsaW5lLnByb3RvdHlwZS5yZW1vdmVDaGlsZEF0SW5kZXgpOiBBZGRlZCBzdXBwcmVzc09uRGVzZWxlY3QgYW5kIHN1cHByZXNzU2VsZWN0U2libGluZy4KICAgICAgICAoVHJlZU91dGxpbmUucHJvdG90eXBlLnJlbW92ZUNoaWxkKTogRGl0dG8uCiAgICAgICAgKFRyZWVPdXRsaW5lLnByb3RvdHlwZS5yZW1vdmVDaGlsZHJlbik6IEFkZGVkIHN1cHByZXNzT25EZXNlbGVjdC4KICAgICAgICAoVHJlZU91dGxpbmUucHJvdG90eXBlLnJlbW92ZUNoaWxkcmVuUmVjdXJzaXZlKTogRGl0dG8uCiAgICAgICAgKFRyZWVFbGVtZW50LnByb3RvdHlwZS5zZWxlY3QpOiBBZGRlZCBzdXBwcmVzc09uU2VsZWN0IGFuZCBzdXBwcmVzc09uRGVzZWxlY3QuCiAgICAgICAgKFRyZWVFbGVtZW50LnByb3RvdHlwZS5yZXZlYWxBbmRTZWxlY3QpOiBBZGRlZCB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHNlbGVjdC4KCjIwMTItMDEtMTEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIERhdGFHcmlkIHVzZSBDU1MgZ3JhZGllbnRzIGZvciBoZWFkZXJzIGluc3RlYWQgb2YgaW1hZ2VzLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTA2NDMxNzU+IERhdGFHcmlkIHNob3VsZCBiZSBIaURQSSBjb21wbGlhbnQKCiAgICAgICAgUmV2aWV3ZWQgYnkgSmluZyBKaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9EYXRhR3JpZC5jc3M6CiAgICAgICAgKC5kYXRhLWdyaWQgdGgpOgogICAgICAgICguZGF0YS1ncmlkIHRoOmZpcnN0LWNoaWxkKToKICAgICAgICAoLmRhdGEtZ3JpZCB0aDphY3RpdmU6Zmlyc3QtY2hpbGQpOgogICAgICAgICguZGF0YS1ncmlkIHRoOmxhc3QtY2hpbGQpOgogICAgICAgICguZGF0YS1ncmlkIHRoOmFjdGl2ZTpsYXN0LWNoaWxkKToKICAgICAgICAoLmRhdGEtZ3JpZCB0YWJsZS5kYXRhKToKICAgICAgICAoLmRhdGEtZ3JpZCB0ZCk6CiAgICAgICAgKC5kYXRhLWdyaWQgdGQ6bGFzdC1jaGlsZCk6CiAgICAgICAgKC5kYXRhLWdyaWQgdGguc29ydGFibGU6YWN0aXZlKToKICAgICAgICAoLmRhdGEtZ3JpZCB0aC5zb3J0LWFzY2VuZGluZywgLmRhdGEtZ3JpZCB0aC5zb3J0LWRlc2NlbmRpbmcpOgogICAgICAgICguZGF0YS1ncmlkIHRoLnNvcnRhYmxlLnNvcnQtYXNjZW5kaW5nOmFjdGl2ZSwgLmRhdGEtZ3JpZCB0aC5zb3J0YWJsZS5zb3J0LWRlc2NlbmRpbmc6YWN0aXZlKToKICAgICAgICAoLmRhdGEtZ3JpZCB0aC5zb3J0LWRlc2NlbmRpbmcgKyB0aCk6CiAgICAgICAgKC5kYXRhLWdyaWQgdGguc29ydC1kZXNjZW5kaW5nICsgdGg6YWN0aXZlKToKICAgICAgICAoLmRhdGEtZ3JpZCB0aC5zb3J0LWRlc2NlbmRpbmc6Zmlyc3QtY2hpbGQpOgogICAgICAgICguZGF0YS1ncmlkIHRoLnNvcnQtZGVzY2VuZGluZzpsYXN0LWNoaWxkKToKICAgICAgICAoYm9keS5pbmFjdGl2ZSAuZGF0YS1ncmlkIHRoLnNvcnQtYXNjZW5kaW5nLCBib2R5LmluYWN0aXZlIC5kYXRhLWdyaWQgdGguc29ydC1kZXNjZW5kaW5nKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL2dsb3NzeUhlYWRlci5wbmc6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9nbG9zc3lIZWFkZXJQcmVzc2VkLnBuZzogUmVtb3ZlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL2dsb3NzeUhlYWRlclNlbGVjdGVkLnBuZzogUmVtb3ZlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL2dsb3NzeUhlYWRlclNlbGVjdGVkUHJlc3NlZC5wbmc6IFJlbW92ZWQuCgoyMDEyLTAxLTEwICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgSW1wcm92ZSBhcHBlYXJhbmNlIG9mIERhdGFHcmlkIGluIHRoZSBuZXcgV2ViIEluc3BlY3Rvci4KCiAgICAgICAgVGhpcyByZW1vdmVzIHRoZSBleHRyYSBib3JkZXIgYW5kIG91dGxpbmUgYXJvdW5kIHRoZSBET00gU3RvcmFnZSBhbmQgQ29va2llIFN0b3JhZ2UgY29udGVudCB2aWV3cy4KICAgICAgICBUaGUgZW1wdHkgZ3V0dGVyIG9uIHRoZSByaWdodCBpcyBhbHNvIHJlbW92ZWQgbm93IHRoYXQgT1MgWCBoYXMgb3ZlcmxheSBzY3JvbGxlcnMuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Nvb2tpZVN0b3JhZ2VDb250ZW50Vmlldy5jc3M6CiAgICAgICAgKC5jb250ZW50LXZpZXcuY29va2llLXN0b3JhZ2UgPiAuZGF0YS1ncmlkKTogU2V0IGJvcmRlciBhbmQgb3V0bGluZSB0byBub25lLgogICAgICAgICogVXNlckludGVyZmFjZS9ET01TdG9yYWdlQ29udGVudFZpZXcuY3NzOgogICAgICAgICguY29udGVudC12aWV3LmRvbS1zdG9yYWdlID4gLmRhdGEtZ3JpZCk6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9EYXRhR3JpZC5jc3M6CiAgICAgICAgKC5kYXRhLWdyaWQgLmRhdGEtY29udGFpbmVyKTogUmVtb3ZlIHBhZGRpbmctcmlnaHQuCiAgICAgICAgKC5kYXRhLWdyaWQgdGg6bGFzdC1jaGlsZCk6IEFkZGVkLiBSZW1vdmUgcmlnaHQgYm9yZGVyIGFuZCBzZXQgcGFkZGluZy1yaWdodCB0byBnaXZlIHJvb20gZm9yIHRoZSBzY3JvbGxlci4KICAgICAgICAoLmRhdGEtZ3JpZCB0ZDpsYXN0LWNoaWxkKTogQWRkZWQuIERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9EYXRhR3JpZC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFHcmlkKTogUmVtb3ZlZCB0aGUgY29yZGVyIGNlbGwgc2luY2UgaXQgaW5zJ3QgbmVlZGVkIHRvIG1ha2Ugcm9vbSBmb3IgdGhlIHNjcm9sbGVyIGFueW1vcmUuCgoyMDEyLTAxLTEwICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIHV0aWxpdHkgZnVuY3Rpb25zIG5lZWRlZCBieSB0aGUgRE9NIHRyZWUgY29kZS4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwNjYzMTYzPiBJbXBsZW1lbnQgdGhlIERPTSBUcmVlIGNvbnRlbnQgdmlldwoKICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVXRpbGl0aWVzLmpzOgogICAgICAgIChOb2RlLnByb3RvdHlwZS5pc0FuY2VzdG9yKTogQ29waWVkIGZyb20gT3BlblNvdXJjZS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcy4KICAgICAgICAoTm9kZS5wcm90b3R5cGUuaXNEZXNjZW5kYW50KTogRGl0dG8uCiAgICAgICAgKEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZUNoaWxkKTogRGl0dG8uCiAgICAgICAgKERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLmNyZWF0ZUNoaWxkKTogRGl0dG8uCgoyMDEyLTAxLTEwICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IGEgY2FzZSB3aGVyZSBFbGVtZW50LnRvdGFsT2Zmc2V0TGVmdCBpcyB1c2VkIGFzIGEgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIHByb3BlcnR5LgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9UcmVlT3V0bGluZS5qczoKICAgICAgICAoVHJlZUVsZW1lbnQucHJvdG90eXBlLmlzRXZlbnRXaXRoaW5EaXNjbG9zdXJlVHJpYW5nbGUpOiBEb24ndCBjYWxsIHRvdGFsT2Zmc2V0TGVmdCBhcyBhIGZ1bmN0aW9uLgoKMjAxMi0wMS0xMCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2UgZXZlbnRzIGRpc3BhdGNoIHRvIGxpc3RlbmVycyBvbiBhbGwgY29uc3RydWN0b3JzIHVwIHRoZSBwcm90b3R5cGUgY2hhaW4sIG5vdCBqdXN0IGltbWVkaWF0ZSBjb25zdHJ1Y3Rvci4KCiAgICAgICAgVGhpcyBpcyBuZWVkZWQgc28gc3ViY2xhc3NlcyBvZiBDb250ZW50VmlldyBjYW4gZGlzcGF0Y2ggZXZlbnRzIHRvIGxpc3RlbmVycyB3aXRob3V0IHRoZSBuZWVkIGZvciB0aGVtIHRvIGxpc3RlbgogICAgICAgIG9uIHRoZSBjb25jcmV0ZSBDb250ZW50VmlldyBzdWJjbGFzc2VzLgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9PYmplY3QuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyk6CgoyMDEyLTAxLTEwICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSBjbGlja2luZyBvZiBsaW5rcyBmb3IgbWFpbiByZXNvdXJjZXMgb2YgZnJhbWVzIG5hdmlnYXRlIHRvIHRob3NlIHJlc291cmNlcy4gQmVmb3JlIHRoaXMgb25seSBzdWJyZXNvdXJjZXMKICAgICAgICB3ZXJlIG5hdmlnYWJsZSBhbmQgY2xpY2tpbmcgYSBtYWluIHJlc291cmNlIGxpbmsgd291bGQgb3BlbiBhIG5ldyBTYWZhcmkgd2luZG93IGluc3RlYWQgb2Ygc2hvd2luZyB0aGUgc291cmNlLgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9GcmFtZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lLnByb3RvdHlwZS5yZXNvdXJjZUZvclVSTCk6IENoZWNrIHRoZSBtYWluIHJlc291cmNlcyBvZiB0aGUgY2hpbGQgZnJhbWVzIGZvciB0aGUgcmVxdWVzdGVkIFVSTC4KCjIwMTItMDEtMTAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBbGxvdyByZXBlYXRlZCBzZWxlY3Rpb24gb2YgdHJlZSBlbGVtZW50cyBpbiB0aGUgU3RvcmFnZSBwYW5lbCAoYW5kIGFsbCBmdXR1cmUgTmF2aWdhdGlvblNpZGViYXJQYW5lbHMuKQoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbCk6IFNldCB0aGlzLl9jb250ZW50VHJlZU91dGxpbmUuYWxsb3dzUmVwZWF0U2VsZWN0aW9uIHRvIHRydWUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwpOiBNb3ZlZCB0aGlzLmNvbnRlbnRUcmVlT3V0bGluZS5hbGxvd3NSZXBlYXRTZWxlY3Rpb24gPSB0cnVlIGZyb20gaGVyZQogICAgICAgIHRvIFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLgoKMjAxMi0wMS0xMiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEV4Y2x1ZGUgV2ViIEluc3BlY3RvciBzdHJpbmdzIGZyb20gbG9jYWxpemVkU3RyaW5ncy5qcyB1bnRpbCB0aGV5IGNhbiBiZSBpbmNsdWRlZAogICAgICAgIGluIFByb2R1Y3Rpb24gYnVpbGRzLgoKICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5VSVN0cmluZyk6IEFsd2F5cyByZXR1cm4gdGhlIHN0cmluZyB1bnRpbCB3ZSBjYW4gYWN0dWFsbHkgZG8gdGhlIGxvb2t1cC4KICAgICAgICAqIEVuZ2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczogVXBkYXRlZCB0byBleGNsdWRlIFdlYiBJbnNwZWN0b3Igc3RyaW5ncy4KCjIwMTItMDEtMTEgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBSZXN0IG9mIDxyZGFyOi8vcHJvYmxlbS8xMDY0MzAxMj4gSW1wbGVtZW50IERhdGFiYXNlIGNvbnRlbnQgdmlld3MgZm9yIG5ldyBpbnNwZWN0b3IgZGVzaWduLgoKICAgICAgICBJbXBsZW1lbnQgY3VzdG9tIHZpZXdzIGZvciB3aGVuIGEgZGF0YWJhc2UgdGFibGUgaXMgZW1wdHksIG9yIHdoZW4gdGhlcmUgd2FzIGFuIGVycm9yCiAgICAgICAgbG9hZGluZyB0aGUgZGF0YS4KCiAgICAgICAgSWYgYSB0YWJsZSBpcyBlbXB0eSwgd2UgZG9uJ3QgZ2V0IGEgbGlzdCBvZiBjb2x1bW4gbmFtZXMsIGFuZCBjYW4ndCBzaG93IGFuIGVtcHR5IGRhdGEgZ3JpZC4KICAgICAgICBJZiB0aGVyZSB3YXMgYW4gZXJyb3IsIHdlIGFsc28gY2FuJ3Qgc2hvdyBhIGRhdGEgZ3JpZCBiZWNhdXNlIHdlIGRvbid0IGtub3cgYW55dGhpbmcgYWJvdXQKICAgICAgICB0aGUgdGFibGUuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YWJhc2VUYWJsZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YWJhc2VUYWJsZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fcXVlcnlGaW5pc2hlZCk6IElmIHdlIHdlcmUgdW5hYmxlIHRvIGNyZWF0ZQogICAgICAgICAgICBhIGRhdGEgZ3JpZCwgdGhlIHRhYmxlIHdhcyBlbXB0eSwgc28gY2FsbCBjcmVhdGVNZXNzYWdlVGV4dFZpZXcuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZVRhYmxlQ29udGVudFZpZXcucHJvdG90eXBlLl9xdWVyeUVycm9yKTogQ2FsbCBjcmVhdGVNZXNzYWdlVGV4dFZpZXcuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uY3NzOgogICAgICAgICgubWVzc2FnZS10ZXh0LXZpZXcsIG1lc3NhZ2UtdGV4dC12aWV3ID4gcCwgbWVzc2FnZS10ZXh0LXZpZXcuZXJyb3IpOiBBZGRlZCBzdHlsZXMgZm9yIGNyZWF0ZU1lc3NhZ2VUZXh0Vmlldy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNyZWF0ZU1lc3NhZ2VUZXh0Vmlldyk6IENyZWF0ZXMgYSB2aWV3IGFuZCByZXR1cm5zIGl0IHRvIHRoZSBjYWxsZXIuCiAgICAgICAgKiBFbmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6CgoyMDEyLTAxLTExICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgQ2xlYXIgZGF0YWJhc2UgdGFibGUgdmlld3Mgd2hlbiB0aGUgcGFnZSBuYXZpZ2F0ZXMuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3RvcmFnZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9zdG9yYWdlQ2xlYXJlZCk6CgoyMDEyLTAxLTExICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgV29yayB0b3dhcmRzIDxyZGFyOi8vcHJvYmxlbS8xMDY0MzAxMj4gSW1wbGVtZW50IERhdGFiYXNlIGNvbnRlbnQgdmlld3MgZm9yIG5ldyBpbnNwZWN0b3IgZGVzaWduLgoKICAgICAgICBJbXBsZW1lbnQgdGhlIERhdGFHcmlkIGZvciBkYXRhYmFzZSB0YWJsZXMuCgogICAgICAgIFRoaXMgcGF0Y2ggYWRkcyB0aGUgYWJpbGl0eSB0byBiZSBhYmxlIHRvIGV4ZWN1dGUgU1FMIHF1ZXJpZXMgb24gYSBEYXRhYmFzZU9iamVjdCwgYW5kIERhdGFiYXNlQ29udGVudFZpZXcKICAgICAgICB1c2VzIHRoYXQgdG8gZ2V0IHRoZSBkYXRhIGZyb20gdGhlIHNlbGVjdGVkIHRhYmxlLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFiYXNlT2JqZWN0LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YWJhc2VPYmplY3QucHJvdG90eXBlLmV4ZWN1dGVTUUwpOiBDYWxsIHRocm91Z2ggdG8gRGF0YWJhc2VBZ2VudC5leGVjdXRlU1FMLgogICAgICAgICogVXNlckludGVyZmFjZS9EYXRhYmFzZU9ic2VydmVyLmpzOiBBZGQgYSBtYXAgZnJvbSB0cmFuc2FjdGlvbiBJRCAtPiBjYWxsYmFja3MgdG8gYmUgYWJsZSB0byBkbyB0aGUgcmlnaHQKICAgICAgICAgICAgdGhpbmcgd2hlbiBzcWxUcmFuc2FjdGlvblN1Y2NlZWRlZCBvciBzcWxUcmFuc2FjdGlvbkZhaWxlZCBpcyBjYWxsZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZU9ic2VydmVyLnByb3RvdHlwZS5zcWxUcmFuc2FjdGlvblN1Y2NlZWRlZCk6IENhbGwgdGhlIG9uU3VjY2VzcyBjYWxsYmFjayBmb3IgdGhhdAogICAgICAgICAgICB0cmFuc2FjdGlvbiBJRC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlT2JzZXJ2ZXIucHJvdG90eXBlLnNxbFRyYW5zYWN0aW9uRmFpbGVkKTogQ2FsbCB0aGUgb25FcnJvciBjYWxsYmFjayBmb3IgdGhhdCB0cmFuc2FjdGlvbgogICAgICAgICAgICBJRC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YWJhc2VUYWJsZUNvbnRlbnRWaWV3LmNzczogQWRkZWQuCiAgICAgICAgKC5jb250ZW50LXZpZXcuZGF0YWJhc2UtdGFibGUgPiAuZGF0YS1ncmlkKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YWJhc2VUYWJsZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YWJhc2VUYWJsZUNvbnRlbnRWaWV3KTogQ2FsbCB1cGRhdGUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZVRhYmxlQ29udGVudFZpZXcucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5EYXRhYmFzZVRhYmxlQ29udGVudFZpZXcudXBkYXRlKTogR2V0IHRoZQogICAgICAgICAgICBkYXRhIGZyb20gdGhlIHRhYmxlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YWJhc2VUYWJsZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fZXNjYXBlVGFibGVOYW1lKTogVGFrZW4gZnJvbSBvcGVuIHNvdXJjZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlVGFibGVDb250ZW50Vmlldy5wcm90b3R5cGUuX3F1ZXJ5RmluaXNoZWQpOiBDcmVhdGUgYSBzb3J0YWJsZSBkYXRhIGdyaWQgd2l0aCB0aGUgY29sdW1uIG5hbWVzCiAgICAgICAgICAgIGFuZCB0aGUgdmFsdWVzIHJldHVybmVkIGZyb20gdGhlIFNRTCBjYWxsLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YWJhc2VUYWJsZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fcXVlcnlFcnJvcik6IEFkZGVkIGEgRklYTUUgdG8gaGFuZGxlIHRoZSBlcnJvci4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgoKMjAxMi0wMS0xMCAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIFdvcmsgdG93YXJkcyA8cmRhcjovL3Byb2JsZW0vMTA2NDMwMTI+IEltcGxlbWVudCBEYXRhYmFzZSBjb250ZW50IHZpZXdzIGZvciBuZXcgaW5zcGVjdG9yIGRlc2lnbi4KCiAgICAgICAgQWRkIGEgY29udGVudCB2aWV3IGZvciBkYXRhYmFzZSB0YWJsZXMuIEl0IGlzIGN1cnJlbnRseSBlbXB0eSwgYnV0IGEgZGF0YWdyaWQgd2lsbCBiZSBhZGRlZCB0aGF0CiAgICAgICAgd2lsbCBzaG93IHRoZSBjb3JyZWN0IGRhdGEuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlldyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlldy5pc1ZpZXdhYmxlKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YWJhc2VUYWJsZUNvbnRlbnRWaWV3LmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlVGFibGVDb250ZW50Vmlldyk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRCcm93c2VyVHJlZUVsZW1lbnRGb3JSZXByZXNlbnRlZE9iamVjdCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N0b3JhZ2VTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdG9yYWdlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdHJlZUVsZW1lbnRTZWxlY3RlZCk6CgoyMDEyLTAxLTEwICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgQ2xlYXIgdGhlIERPTSBhbmQgY29va2llIHN0b3JhZ2UgY29udGVudCB2aWV3cyB3aGVuIHdlIG5hdmlnYXRlLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9TdG9yYWdlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3N0b3JhZ2VDbGVhcmVkKToKCjIwMTItMDEtMTAgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBSZXN0IG9mIDxyZGFyOi8vcHJvYmxlbS8xMDY0Mjk2ND4gSW1wbGVtZW50IENvb2tpZSBjb250ZW50IHZpZXcgZm9yIG5ldyB3ZWIgaW5zcGVjdG9yIGRlc2lnbi4KCiAgICAgICAgSW1wbGVtZW50IGRlbGV0aW5nIG9mIGluZGl2aWR1YWwgY29va2llcy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Db29raWVTdG9yYWdlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db29raWVTdG9yYWdlQ29udGVudFZpZXcucHJvdG90eXBlLl9yZWJ1aWxkVGFibGUpOiBBZGQgYSBkZWxldGUgY2FsbGJhY2suCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db29raWVTdG9yYWdlQ29udGVudFZpZXcucHJvdG90eXBlLl9kZWxldGVDYWxsYmFjayk6IERlbGV0ZSB0aGUgY29va2llLgoKMjAxMi0wMS0xMCAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIFdvcmsgdG93YXJkcyA8cmRhcjovL3Byb2JsZW0vMTA2NDI5NjQ+IEltcGxlbWVudCBDb29raWUgY29udGVudCB2aWV3IGZvciBuZXcgd2ViIGluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIEltcGxlbWVudCB0aGUgc29ydGluZyBvZiBjb2x1bW5zIGluIHRoZSBjb29raWUgZGF0YSBncmlkLgoKICAgICAgICBUaGUgY29kZSB0byBzb3J0IHRoZSBhcnJheSB3YXMgYnJvdWdodCBmcm9tIG9wZW4gc291cmNlLiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggaXMgc29tZSByZWZhY3RvcmluZwogICAgICAgIHdoaWNoIG1ha2VzIHRoZSBjb2RlIG1vcmUgZWZmaWNpZW50LiBXaGVuIHdlIGdldCB0aGUgY29va2llcyBmcm9tIHRoZSBQYWdlQWdlbnQsIHdlIGZpbHRlciB0aGVtLAogICAgICAgIGFuZCBzdG9yZSB0aGUgZmlsdGVyZWQgY29va2llcyBhcyBhIHByb3BlcnR5IGluIHRoZSBjbGFzcy4gV2hlbiB0aGUgc29ydGluZyBvcmRlciBpcyBjaGFuZ2VkLAogICAgICAgIHdlIGp1c3QgcmVidWlsZCB0aGUgdGFibGUgdXNpbmcgdGhlIGZpbHRlcmVkIGNvb2tpZXMgYWxyZWFkeSBzdG9yZWQsIHNvIHdlIGRvbid0IG5lZWQgdG8gcmVmaWx0ZXIKICAgICAgICB0aGVtIHdoZW4gdGhlIHNvcnRpbmcgb3JkZXIgY2hhbmdlZC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Db29raWVTdG9yYWdlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db29raWVTdG9yYWdlQ29udGVudFZpZXcucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5Db29raWVTdG9yYWdlQ29udGVudFZpZXcudXBkYXRlKTogU3RvcmUgdGhlIGZpbHRlcmVkCiAgICAgICAgICAgIGNvb2tpZXMgYXMgYSBwcm9wZXJ0eSwgdGhlbiBjYWxsIHJlYnVpbGRUYWJsZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvb2tpZVN0b3JhZ2VDb250ZW50Vmlldy5wcm90b3R5cGUuX3JlYnVpbGRUYWJsZSk6IERvbid0IHRha2UgY29va2llcyBhcyBhIHBhcmFtZXRlciBhbnkgbW9yZSwgYW5kIGRvbid0CiAgICAgICAgICAgIGZpbHRlciB0aGVtLgoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvb2tpZVN0b3JhZ2VDb250ZW50Vmlldy5wcm90b3R5cGUuX3NvcnRDb29raWVzLmxvY2FsZUNvbXBhcmUpOiBDb3BpZWQgZnJvbSBvcGVuIHNvdXJjZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvb2tpZVN0b3JhZ2VDb250ZW50Vmlldy5wcm90b3R5cGUuX3NvcnRDb29raWVzLm51bWJlckNvbXBhcmUpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvb2tpZVN0b3JhZ2VDb250ZW50Vmlldy5wcm90b3R5cGUuX3NvcnRDb29raWVzLmV4cGlyZXNDb21wYXJlKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db29raWVTdG9yYWdlQ29udGVudFZpZXcucHJvdG90eXBlLl9zb3J0Q29va2llcyk6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9VdGlsaXRpZXMuanM6CiAgICAgICAgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSk6IENvcGllZCBmcm9tIG9wZW4gc291cmNlLgoKMjAxMi0wMS0xMCAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIFdvcmsgdG93YXJkcyA8cmRhcjovL3Byb2JsZW0vMTA2NDI5NjQ+IEltcGxlbWVudCBDb29raWUgY29udGVudCB2aWV3IGZvciBuZXcgd2ViIGluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIEZpbHRlciB0aGUgY29va2llcyB0aGF0IGFyZSBzaG93biBmb3IgZWFjaCBkb21haW4gdGhhdCB0aGUgcGFnZSBoYXMgbG9hZGVkLiBUaGlzIG1lYW5zIHRoYXQgd2hlbgogICAgICAgIHlvdSBzZWUgdGhlIGNvb2tpZXMgZm9yIHR3aXR0ZXIuY29tLCB5b3Ugd2lsbCBvbmx5IHNlZSB0aGUgdHdpdHRlci5jb20gY29va2llcywgYW5kIG5vdCB0aGUgZG91YmxlY2xpY2sKICAgICAgICBjb29raWVzIHRoYXQgdHdpdHRlciBtaWdodCBoYXZlIGxvYWRlZC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Db29raWVTdG9yYWdlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db29raWVTdG9yYWdlQ29udGVudFZpZXcucHJvdG90eXBlLl91cGRhdGVXaXRoQ29va2llcyk6IFVzZSB0aGUgZmlsdGVyZWQgY29va2llcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvb2tpZVN0b3JhZ2VDb250ZW50Vmlldy5wcm90b3R5cGUuX2ZpbHRlckNvb2tpZXMpOiBHZXQgYSBsaXN0IG9mIGFsbCB0aGUgcmVzb3VyY2VzCiAgICAgICAgICAgIHRoYXQgYXJlIGxvYWRlZCB3aXRoIHRoZSBDb29raWVTdG9yYWdlQ29udGVudFZpZXcncyBob3N0LCBhbmQgd2hlbiBsb29raW5nIGF0IHRoZSBkb2N1bWVudCdzIGNvb2tpZXMsCiAgICAgICAgICAgIG9ubHkgYWRkIHRoZSBvbmVzIHRoYXQgbWF0Y2ggdGhlIGhvc3QuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lUmVzb3VyY2VNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLmdldCBmcmFtZXMpOiBHZXQgdGhlIGZyYW1lcyBvZiB0aGUgZG9jdW1lbnQuCgogICAgICAgIChXZWJJbnNwZWN0b3IuY29va2llTWF0Y2hlc1Jlc291cmNlVVJMKTogQnJvdWdodCBvdmVyIGZyb20gb3BlbiBzb3VyY2UuCiAgICAgICAgKFdlYkluc3BlY3Rvci5jb29raWVEb21haW5NYXRjaGVzUmVzb3VyY2VEb21haW4pOiBEaXR0by4KCjIwMTItMDEtMDkgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBXb3JrIHRvd2FyZHMgPHJkYXI6Ly9wcm9ibGVtLzEwNjQyOTY0PiBJbXBsZW1lbnQgQ29va2llIGNvbnRlbnQgdmlldyBmb3IgbmV3IHdlYiBpbnNwZWN0b3IgZGVzaWduLgoKICAgICAgICBTaG93IGEgbGlzdCBvZiBjb29raWVzIG9uIHRoZSBwYWdlLiBJdCBjYW4ndCBiZSBzb3J0ZWQsIGFuZCBpc24ndCBmaWx0ZXJlZCBmb3IgdGhlIGNvb2tpZSBob3N0IHRoYXQKICAgICAgICB5b3Ugc2VsZWN0ZWQsIGJ1dCBjb29raWVzIGRvIHNob3cgdXAuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29va2llU3RvcmFnZUNvbnRlbnRWaWV3LmNzczogQWRkZWQuCiAgICAgICAgKC5jb250ZW50LXZpZXcuY29va2llLXN0b3JhZ2UgPiAuZGF0YS1ncmlkKTogVGhlIGRhdGEgZ3JpZCB0YWtlcyB1cCB0aGUgd2hvbGUgdmlldy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29va2llU3RvcmFnZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29va2llU3RvcmFnZUNvbnRlbnRWaWV3KTogQ2FsbCB1cGRhdGUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db29raWVTdG9yYWdlQ29udGVudFZpZXcucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5Db29raWVTdG9yYWdlQ29udGVudFZpZXcudXBkYXRlKTogR2V0IHRoZSBjb29raWVzCiAgICAgICAgICAgIG9uIHRoZSBwYWdlLCBhbmQgdGhlbiBjYWxsIF91cGRhdGVXaXRoQ29va2llcyBvbiB0aGUgcmVzdWx0LgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29va2llU3RvcmFnZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fdXBkYXRlV2l0aENvb2tpZXMpOiBDcmVhdGUgdGhlIGRhdGEgZ3JpZCBpZiBpdCBoYXNuJ3QgYmVlbiBjcmVhdGVkIHlldCwgYW5kCiAgICAgICAgICAgIHBvcHVsYXRlIGl0LgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEFkZCBuZXcgZmlsZS4KICAgICAgICAqIEVuZ2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczogVXBkYXRlIGxvY2FsaXplZCBzdHJpbmcuCgoyMDEyLTAxLTA5ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgV29yayB0b3dhcmRzIDxyZGFyOi8vcHJvYmxlbS8xMDY0Mjk2ND4gSW1wbGVtZW50IENvb2tpZSBjb250ZW50IHZpZXcgZm9yIG5ldyB3ZWIgaW5zcGVjdG9yIGRlc2lnbi4KCiAgICAgICAgQWRkIGEgY29udGVudCB2aWV3IGZvciBjb29raWUgc3RvcmFnZS4gSXQgaXMgY3VycmVudGx5IGVtcHR5LCBidXQgYSBkYXRhZ3JpZCB3aWxsIGJlIGFkZGVkIHRoYXQKICAgICAgICB3aWxsIHNob3cgdGhlIGNvcnJlY3QgZGF0YS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3KTogQWRkIGEgbmV3IGNhc2UgZm9yIENvb2tpZVN0b3JhZ2VPYmplY3QsCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlldy5pc1ZpZXdhYmxlKTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Nvb2tpZVN0b3JhZ2VDb250ZW50Vmlldy5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db29raWVTdG9yYWdlQ29udGVudFZpZXcpOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEFkZCBuZXcgZmlsZXMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50QnJvd3NlclRyZWVFbGVtZW50Rm9yUmVwcmVzZW50ZWRPYmplY3QpOiBBZGQgYSBuZXcgY2FzZSBmb3IgQ29va2llU3RvcmFnZU9iamVjdC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3RvcmFnZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl90cmVlRWxlbWVudFNlbGVjdGVkKTogRGl0dG8uCgoyMDEyLTAxLTA5ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgV2hlbiB3ZSB3YW50IHRvIHVwZGF0ZSB0aGUgRE9NIHN0b3JhZ2UgZGF0YSBncmlkLCBkb24ndCByZW1vdmUgdGhlIHdob2xlIGRhdGEgZ3JpZCBhbmQgcmUtY3JlYXRlIGl0LAogICAgICAgIGp1c3QgcmVtb3ZlIHRoZSBEYXRhR3JpZE5vZGVzIGFuZCByZWdlbmVyYXRlIHRob3NlLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVN0b3JhZ2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VDb250ZW50Vmlldy5wcm90b3R5cGUuY29uc3RydWN0b3IuV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VDb250ZW50Vmlldy51cGRhdGUpOiBEb24ndCByZW1vdmUgdGhlIGNvbnRlbnQKICAgICAgICAgICAgdmlldydzIGNoaWxkcmVuLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fc2hvd0RPTVN0b3JhZ2VFbnRyaWVzKTogQ2FsbCBfdXBkYXRlRGF0YUdyaWRGb3JET01TdG9yYWdlRW50cmllcyAod2hpY2ggd2FzIHJlbmFtZWQpLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fdXBkYXRlRGF0YUdyaWRGb3JET01TdG9yYWdlRW50cmllcyk6IFJlbmFtZWQuIEl0IGFsc28gbm93IG9ubHkgY3JlYXRlcyB0aGUgZGF0YSBncmlkCiAgICAgICAgICAgIGlmIG5lY2Vzc2FyeSwgYW5kIHJlbW92ZXMgdGhlIGNoaWxkcmVuIGZyb20gdGhlIGRhdGEgZ3JpZCBiZWZvcmUgYWRkaW5nIHRoZSBuZXcgY2hpbGRyZW4uCgoyMDEyLTAxLTA2ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgUmVzdCB0b3dhcmRzIDxyZGFyOi8vcHJvYmxlbS8xMDY0MzAwNT4gSW1wbGVtZW50IERPTSBTdG9yYWdlIGNvbnRlbnQgdmlld3MgZm9yIG5ldyBpbnNwZWN0b3IgZGVzaWduLgoKICAgICAgICBIb29rIHVwIGVkaXRpbmcgb2YgdGhlIERPTSBzdG9yYWdlIGl0ZW1zLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVN0b3JhZ2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VDb250ZW50Vmlldy5wcm90b3R5cGUuX2RhdGFHcmlkRm9yRE9NU3RvcmFnZUVudHJpZXMpOiBBZGQgYW4gZWRpdGluZyBjYWxsYmFjay4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VDb250ZW50Vmlldy5wcm90b3R5cGUuX2VkaXRpbmdDYWxsYmFjayk6IFRlbGwgdGhlIERPTVN0b3JhZ2VPYmplY3QgYWJvdXQgd2hhdAogICAgICAgICAgICBpdGVtIHRvIG1vZGlmeS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NU3RvcmFnZU9iamVjdC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VPYmplY3QucHJvdG90eXBlLnNldEl0ZW0pOiBDYWxsIHRocm91Z2ggdG8gRE9NU3RvcmFnZUFnZW50LgogICAgICAgICogVXNlckludGVyZmFjZS9FZGl0aW5nLmNzczogQWRkZWQuIENvcGllZCBzb21lIHJ1bGVzIGZyb20gaW5zcGVjdG9yLmNzcyBpbiBPcGVuIFNvdXJjZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRWRpdGluZ1N1cHBvcnQuanM6IEFkZGVkLiBDb3BpZWQgc2VsZWN0ZWQgZnVuY3Rpb25zIGZyb20gT3BlbiBTb3VyY2UgVUlVdGlscy5qcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvS2V5Ym9hcmRTaG9ydGN1dC5qczogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogQWRkZWQgbmV3IGZpbGVzLgogICAgICAgICogVXNlckludGVyZmFjZS9VdGlsaXRpZXMuanM6IENvcGllZCBpc0luc2VydGlvbkNhcmV0SW5zaWRlIGZyb20gT3BlbiBTb3VyY2UgdXRpbGl0aWVzLmpzLCBidXQgbWFkZSBpdAogICAgICAgICAgICBhIHByb3BlcnR5LgoKMjAxMi0wMS0wNiAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIFdvcmsgdG93YXJkcyA8cmRhcjovL3Byb2JsZW0vMTA2NDMwMDU+IEltcGxlbWVudCBET00gU3RvcmFnZSBjb250ZW50IHZpZXdzIGZvciBuZXcgaW5zcGVjdG9yIGRlc2lnbi4KCiAgICAgICAgSW1wbGVtZW50IERPTVN0b3JhZ2VPYnNlcnZlci51cGRhdGVET01TdG9yYWdlLCBhbmQgaGF2ZSBpdCBjYWxsIGFsbCB0aGUgd2F5IHRocm91Z2ggdG8gY2FsbGluZwogICAgICAgIHVwZGF0ZSBvbiB0aGUgRE9NU3RvcmFnZUNvbnRlbnRWaWV3LgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVN0b3JhZ2VPYnNlcnZlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VPYnNlcnZlci5wcm90b3R5cGUudXBkYXRlRE9NU3RvcmFnZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N0b3JhZ2VNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZU1hbmFnZXIucHJvdG90eXBlLmRvbVN0b3JhZ2VXYXNVcGRhdGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VNYW5hZ2VyLnByb3RvdHlwZS5fbWFpblJlc291cmNlRGlkQ2hhbmdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VNYW5hZ2VyLnByb3RvdHlwZS5fZG9tU3RvcmFnZUZvcklkKToKCjIwMTItMDEtMDYgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBXb3JrIHRvd2FyZHMgPHJkYXI6Ly9wcm9ibGVtLzEwNjQzMDA1PiBJbXBsZW1lbnQgRE9NIFN0b3JhZ2UgY29udGVudCB2aWV3cyBmb3IgbmV3IGluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIEhvb2sgdXAgdGhlIGRlbGV0ZSBjYWxsYmFjayBmcm9tIHRoZSBkYXRhZ3JpZC4gV2hlbiB0aGUgZGVsZXRlIGtleSBpcyBwcmVzc2VkIGFuZCBhIHJvdyBpcyBzZWxlY3RlZCwKICAgICAgICB0aGF0IERPTSBzdG9yYWdlIGl0ZW0gd2lsbCBiZSBkZWxldGVkLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVN0b3JhZ2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VDb250ZW50Vmlldy5wcm90b3R5cGUuX2RhdGFHcmlkRm9yRE9NU3RvcmFnZUVudHJpZXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fZGVsZXRlQ2FsbGJhY2spOgogICAgICAgICogVXNlckludGVyZmFjZS9ET01TdG9yYWdlT2JqZWN0LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZU9iamVjdC5wcm90b3R5cGUuZ2V0RW50cmllcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01TdG9yYWdlT2JqZWN0LnByb3RvdHlwZS5yZW1vdmVJdGVtKToKCjIwMTItMDEtMDYgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBXb3JrIHRvd2FyZHMgPHJkYXI6Ly9wcm9ibGVtLzEwNjQzMDA1PiBJbXBsZW1lbnQgRE9NIFN0b3JhZ2UgY29udGVudCB2aWV3cyBmb3IgbmV3IGluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIE1ha2UgcmVzaXppbmcgY29sdW1ucyB3b3JrLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFHcmlkLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YUdyaWQucHJvdG90eXBlLl9yZXNpemVyRHJhZ2dpbmcpOiBDaGFuZ2UgdG90YWxPZmZzZXRMZWZ0IHRvIGJlIGEgcHJvcGVydHkgaW5zdGVhZCBvZgogICAgICAgICAgICBhIGZ1bmN0aW9uLiBUaGlzIG1hdGNoZXMgVXRpbGl0aWVzLmpzIGFuZCBjb2RlIHRoYXQgd2UgYWxyZWFkeSBoYXZlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YUdyaWROb2RlLnByb3RvdHlwZS5pc0V2ZW50V2l0aGluRGlzY2xvc3VyZVRyaWFuZ2xlKTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5lbGVtZW50RHJhZ1N0YXJ0KTogQ29waWVkIGZyb20gT3BlbiBTb3VyY2UuCiAgICAgICAgKFdlYkluc3BlY3Rvci5lbGVtZW50RHJhZ0VuZCk6IERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9VdGlsaXRpZXMuanM6CiAgICAgICAgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSk6CgoyMDEyLTAxLTA2ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgV29yayB0b3dhcmRzIDxyZGFyOi8vcHJvYmxlbS8xMDY0MzAwNT4gSW1wbGVtZW50IERPTSBTdG9yYWdlIGNvbnRlbnQgdmlld3MgZm9yIG5ldyBpbnNwZWN0b3IgZGVzaWduLgoKICAgICAgICBXZSBub3cgc2hvdyBhIGRhdGEgZ3JpZCB3aXRoIHRoZSBjb250ZW50cyBvZiB0aGUgbG9jYWwgb3Igc2Vzc2lvbiBzdG9yYWdlLgoKICAgICAgICBJdCdzIG5vdCBlZGl0YWJsZSwgYW5kIHlvdSBjYW4ndCByZXNpemUgdGhlIGNvbHVtbnMgeWV0LCBidXQgdGhhdCB3aWxsIGNvbWUgaW4KICAgICAgICB0aGUgbm90IHRvbyBkaXN0YW50IGZ1dHVyZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01TdG9yYWdlQ29udGVudFZpZXcuY3NzOiBBZGRlZC4KICAgICAgICAoLmNvbnRlbnQtdmlldy5kb20tc3RvcmFnZSA+IC5kYXRhLWdyaWQpOiBNYWtlIHRoZSBkYXRhIGdyaWQgdGFrZSB1cCB0aGUgd2hvbGUgY29udGVudCB2aWV3LgogICAgICAgICogVXNlckludGVyZmFjZS9ET01TdG9yYWdlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01TdG9yYWdlQ29udGVudFZpZXcpOiBDYWxsIHVwZGF0ZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VDb250ZW50Vmlldy5wcm90b3R5cGUuY29uc3RydWN0b3IuV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VDb250ZW50Vmlldy51cGRhdGUpOiBSZW1vdmUgYWxsIGNoaWxkcmVuCiAgICAgICAgICAgIGZyb20gdGhlIGNvbnRlbnQgdmlldywgYW5kIGFzayB0aGUgRE9NIHN0b3JhZ2Ugb2JqZWN0IGZvciBhIGxpc3Qgb2YgZW50cmllcywgYW5kIHBhc3MgX3Nob3dET01TdG9yYWdlRW50cmllcyBhcyBhIGNhbGxiYWNrLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fc2hvd0RPTVN0b3JhZ2VFbnRyaWVzKTogQ2FsbCBfZGF0YUdyaWRGb3JET01TdG9yYWdlRW50cmllcyBhbmQgYWRkIHRoZSBkYXRhIGdyaWQKICAgICAgICAgICAgdG8gdGhlCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01TdG9yYWdlQ29udGVudFZpZXcucHJvdG90eXBlLl9kYXRhR3JpZEZvckRPTVN0b3JhZ2VFbnRyaWVzKTogQ3JlYXRlIHRoZSBkYXRhIGdyaWQgYW5kIHBvcHVsYXRlIGl0LgogICAgICAgICogVXNlckludGVyZmFjZS9ET01TdG9yYWdlT2JqZWN0LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZU9iamVjdC5wcm90b3R5cGUuaXNMb2NhbFN0b3JhZ2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZU9iamVjdC5wcm90b3R5cGUuZ2V0RW50cmllcyk6IEFzayBmb3IgdGhlIGVudHJpZXMgZm9yIHRoZSBET00gc3RvcmFnZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBBZGQgdGhlIG5ldyBDU1MgZmlsZS4KICAgICAgICAqIEVuZ2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczogVXBkYXRlIHRoZSBsb2NhbGl6ZWQgc3RyaW5ncy4KCjIwMTItMDEtMDYgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBXb3JrIHRvd2FyZHMgPHJkYXI6Ly9wcm9ibGVtLzEwNjQzMDA1PiBJbXBsZW1lbnQgRE9NIFN0b3JhZ2UgY29udGVudCB2aWV3cyBmb3IgbmV3IGluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIENsZWFuIHVwIERhdGFHcmlkIGJ5IHJlcGxhY2luZyAoYWRkfHJlbW92ZXxoYXMpU3R5bGVDbGFzcyB3aXRoIGNsYXNzTGlzdC4oYWRkfHJlbW92ZXxjb250YWlucykuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YUdyaWQuanM6CgoyMDEyLTAxLTA2ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgV29yayB0b3dhcmRzIDxyZGFyOi8vcHJvYmxlbS8xMDY0MzAwNT4gSW1wbGVtZW50IERPTSBTdG9yYWdlIGNvbnRlbnQgdmlld3MgZm9yIG5ldyBpbnNwZWN0b3IgZGVzaWduLgoKICAgICAgICBBZGQgYSBjb250ZW50IHZpZXcgZm9yIERPTSBzdG9yYWdlLiBDdXJyZW50bHkgaXQgaXMganVzdCBhIGJsYW5rIHZpZXcsIGJ1dCBhIGRhdGFncmlkIHdpbGwgYmUKICAgICAgICBhZGRlZCB0aGF0IHdpbGwgc2hvdyB0aGUgY29ycmVjdCBkYXRhLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXcpOiBBZGQgYSBuZXcgY2FzZSBmb3IgRE9NU3RvcmFnZU9iamVjdC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3LmlzVmlld2FibGUpOiBEaXR0by4KICAgICAgICAoLmNvbnRlbnQtdmlldy5kb20tc3RvcmFnZSA+IC5jb250ZW50LXZpZXctY29udGFpbmVyKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NU3RvcmFnZUNvbnRlbnRWaWV3LmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VDb250ZW50Vmlldyk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3RvcmFnZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VTaWRlYmFyUGFuZWwpOiBBZGQgYSBsaXN0ZW5lciBmb3Igd2hlbiBhIHRyZWUgZWxlbWVudCBpcyBzZWxlY3RlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9zdG9yYWdlQ2xlYXJlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdG9yYWdlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdHJlZUVsZW1lbnRTZWxlY3RlZCk6IEluc3RhbGwgdGhlIGNvbnRlbnQgdmlldy4KCjIwMTItMDEtMDQgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBXb3JrIHRvd2FyZHMgPHJkYXI6Ly9wcm9ibGVtLzEwNjQzMDA1PiBJbXBsZW1lbnQgRE9NIFN0b3JhZ2UgY29udGVudCB2aWV3cyBmb3IgbmV3IGluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIEFkZCBEYXRhR3JpZCBKYXZhU2NyaXB0LCBDU1MgZmlsZXMsIGFuZCBuZWNlc3NhcnkgaW1hZ2VzIHRvIHRoZSBpbnRlcm5hbCBwcm9qZWN0LgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFHcmlkLmpzOiBBZGRlZC4gVGhpcyB3YXMgY29waWVkIGZyb20gVG9UIE9wZW4gU291cmNlLCBidXQgdGhlIGNoYW5nZXMgZnJvbQogICAgICAgICAgICBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC85ODIyNSBhbmQgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvOTgyMjggd2VyZSByb2xsZWQgb3V0LAogICAgICAgICAgICBiZWNhdXNlIHdlIGRvbid0IHNoYXJlIHRoZSBzYW1lIGNvbmNlcHQgb2YgYSBXZWJJbnNwZWN0b3Igdmlldy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9nbG9zc3lIZWFkZXIucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL2dsb3NzeUhlYWRlclByZXNzZWQucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL2dsb3NzeUhlYWRlclNlbGVjdGVkLnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9nbG9zc3lIZWFkZXJTZWxlY3RlZFByZXNzZWQucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL3RyZWVEb3duVHJpYW5nbGVCbGFjay5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvdHJlZURvd25UcmlhbmdsZVdoaXRlLnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy90cmVlUmlnaHRUcmlhbmdsZUJsYWNrLnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy90cmVlUmlnaHRUcmlhbmdsZVdoaXRlLnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy90cmVlVXBUcmlhbmdsZUJsYWNrLnBuZzogQWRkZWQuCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEFkZGVkIG5ldyBmaWxlcy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL2RhdGFHcmlkLmNzczogQWRkZWQuCgoyMDEyLTAxLTA2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIGEgcGF0aCBjb21wb25lbnQgdG8gV2ViSW5zcGVjdG9yLkZyYW1lQ29udGVudFZpZXcgdGhhdCB3aWxsIGV2ZW50dWFsbHkgbGV0IHlvdSBzd2l0Y2gKICAgICAgICBiZXR3ZWVuIFNvdXJjZSBDb2RlIGFuZCBET00gVHJlZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWVDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lQ29udGVudFZpZXcuY3JlYXRlUGF0aENvbXBvbmVudCk6IEFkZGVkLiBIZWxwZXIgZm9yIG1ha2luZyBIaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50cy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lQ29udGVudFZpZXcpOiBDcmVhdGUgYSBTb3VyY2UgQ29kZSBwYXRoIGNvbXBvbmVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lQ29udGVudFZpZXcucHJvdG90eXBlLmdldCBzZWxlY3Rpb25QYXRoQ29tcG9uZW50cyk6IEFkZGVkLiBBcHBlbmQgdGhlIGN1cnJlbnQgdmlldydzIHBhdGgKICAgICAgICBjb21wb25lbnRzIHRvIHRoZSBwYXRoIGNvbXBvbmVudCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgdmlldy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lQ29udGVudFZpZXcucHJvdG90eXBlLl9wYXRoQ29tcG9uZW50Rm9yQ29udGVudFZpZXcpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lQ29udGVudFZpZXcucHJvdG90eXBlLl9zaG93Q29udGVudFZpZXdGb3JJZGVudGlmaWVyKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fcGF0aENvbXBvbmVudFNlbGVjdGVkKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Tb3VyY2VDb2RlLnBkZjogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZWQgUGF0aENvbXBvbmVudEljb25zLmNzcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUGF0aENvbXBvbmVudEljb25zLmNzczogQWRkZWQuCiAgICAgICAgKC5zb3VyY2UtY29kZS1pY29uIC5pY29uKToKICAgICAgICAqIEVuZ2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczogVXBkYXRlZC4KCjIwMTItMDEtMDYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgc3VwcG9ydCBmb3IgcGF0aCBjb21wb25lbnRzIGluIHRoZSBRdWljayBOYXZpZ2F0aW9uIGJhciB0aGF0IHJlcHJlc2VudCB0aGUgY3VycmVudCBzZWxlY3Rpb24gaW4gYSBjb250ZW50IHZpZXcuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxODc4Nz4gSW1wbGVtZW50IHRoZSBRdWljayBOYXZpZ2F0aW9uIGJhciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9DbHVzdGVyQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5DbHVzdGVyQ29udGVudFZpZXcpOiBMaXN0ZW4gZm9yIEN1cnJlbnRDb250ZW50Vmlld0RpZENoYW5nZSBhbmQgU2VsZWN0aW9uUGF0aENvbXBvbmVudHNEaWRDaGFuZ2UgZXZlbnRzLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ2x1c3RlckNvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgc2VsZWN0aW9uUGF0aENvbXBvbmVudHMpOiBBZGRlZC4gRm9yd2FyZCB0aGUgc2VsZWN0aW9uUGF0aENvbXBvbmVudHMKICAgICAgICBvZiB0aGUgY3VycmVudCB2aWV3LgogICAgICAgIChXZWJJbnNwZWN0b3IuQ2x1c3RlckNvbnRlbnRWaWV3LnByb3RvdHlwZS5fY3VycmVudENvbnRlbnRWaWV3RGlkQ2hhbmdlKTogQWRkZWQuIERpc3BhdGNoIFNlbGVjdGlvblBhdGhDb21wb25lbnRzRGlkQ2hhbmdlIGV2ZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuQ2x1c3RlckNvbnRlbnRWaWV3LnByb3RvdHlwZS5fY29udGVudFZpZXdTZWxlY3Rpb25QYXRoQ29tcG9uZW50RGlkQ2hhbmdlKTogQWRkZWQuIERpc3BhdGNoIHRoZQogICAgICAgIFNlbGVjdGlvblBhdGhDb21wb25lbnRzRGlkQ2hhbmdlIGV2ZW50IGlmIHRoZSBldmVudCB0YXJnZXQgaXMgb3VyIGN1cnJlbnQgY29udGVudCB2aWV3LgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZW50QnJvd3Nlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyKTogQ3JlYXRlIGEgaGllcmFyY2hpY2FsIHBhdGggbmF2aWdhdGlvbiBpdGVtIGZvciB0aGUgY29udGVudCB2aWV3IHBhdGggY29tcG9uZW50cy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyLnByb3RvdHlwZS5fdXBkYXRlQ29udGVudFZpZXdTZWxlY3Rpb25QYXRoTmF2aWdhdGlvbkl0ZW0pOiBBZGRlZC4gUmVtb3ZlIGFuZCBpbnNlcnQgdGhlIG5hdmlnYXRpb24KICAgICAgICBpdGVtIGlmIG5lZWRlZCBhbmQgdXBkYXRlIHRoZSBjb21wb25lbnRzLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIucHJvdG90eXBlLl9jb250ZW50Vmlld1NlbGVjdGlvblBhdGhDb21wb25lbnREaWRDaGFuZ2UpOiBBZGRlZC4gQ2FsbCBfdXBkYXRlQ29udGVudFZpZXdTZWxlY3Rpb25QYXRoTmF2aWdhdGlvbkl0ZW0uCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuX2N1cnJlbnRDb250ZW50Vmlld0RpZENoYW5nZSk6IENhbGwgX3VwZGF0ZUNvbnRlbnRWaWV3U2VsZWN0aW9uUGF0aE5hdmlnYXRpb25JdGVtLgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgc2VsZWN0aW9uUGF0aENvbXBvbmVudHMpOiBBZGRlZCBzdHViLgogICAgICAgICogVXNlckludGVyZmFjZS9IaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50LmNzczoKICAgICAgICAoLmhpZXJhcmNoaWNhbC1wYXRoOm5vdCguYWx3YXlzLXNob3ctbGFzdC1wYXRoLWNvbXBvbmVudC1zZXBhcmF0b3IpID4gLmhpZXJhcmNoaWNhbC1wYXRoLWNvbXBvbmVudDpsYXN0LW9mLXR5cGUgPiAuc2VwYXJhdG9yKTogQWRkZWQKICAgICAgICB0aGUgOm5vdCguYWx3YXlzLXNob3ctbGFzdC1wYXRoLWNvbXBvbmVudC1zZXBhcmF0b3IpIHBhcnQgc28gc28gcHJldmVudCBoaWRpbmcgdGhlIHNlcGFyYXRvciBpbiB0aGF0IGNhc2UuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0hpZXJhcmNoaWNhbFBhdGhOYXZpZ2F0aW9uSXRlbS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkhpZXJhcmNoaWNhbFBhdGhOYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuZ2V0IGFsd2F5c1Nob3dMYXN0UGF0aENvbXBvbmVudFNlcGFyYXRvcik6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuSGllcmFyY2hpY2FsUGF0aE5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5zZXQgYWx3YXlzU2hvd0xhc3RQYXRoQ29tcG9uZW50U2VwYXJhdG9yKTogQWRkZWQuCgoyMDEyLTAxLTA1ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IGEgcmVncmVzc2lvbiBmcm9tIHIzOTc0NiB3aGVyZSBsaW5rIG5hdmlnYXRpb24gYmV0d2VlbiBXZWIgSW5zcGVjdG9yIHJlc291cmNlIGJyb2tlLgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3Iub3BlblVSTCk6IFVzZSBjb250ZW50QnJvd3NlciBpbnN0ZWFkIG9mIHRoZSBub3cgcmVtb3ZlZCBjb250ZW50Vmlld0NvbnRhaW5lci4KICAgICAgICBBbHNvIHNob3cgdGhlIGZyYW1lIGZvciBtYWluIHJlc291cmNlcyBpbnN0ZWFkIG9mIHRoZSByZXNvdXJjZSBpdHNlbGYuCgoyMDEyLTAxLTA1ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRml4IGFuIGlzc3VlIHdoZXJlIGhvc3QgbmFtZXMgZm9yIGZyYW1lcyB3aGVyZSBub3Qgc2hvd24gd2hlbiB0aGV5IGRpZmZlciBmcm9tIHRoZSBmcmFtZSB0aGF0IGluY2x1ZGVzIHRoZW0uCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLmlzTWFpblJlc291cmNlKTogQWRkZWQuIEhlbHBlciBmdW5jdGlvbi4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZUVsZW1lbnQucHJvdG90eXBlLl91cGRhdGVUaXRsZXMpOiBXaGVuIHRoZSByZXNvdXJjZSBpcyBhIG1haW4gcmVzb3VyY2UsIGdldCB0aGUKICAgICAgICBob3N0IGZyb20gdGhlIHBhcmVudCBmcmFtZSBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50IGZyYW1lLgoKMjAxMi0wMS0wNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBzdXBwb3J0IGZvciBpbnRyYS12aWV3IGJhY2svZm9yd2FyZCBuYXZpZ2F0aW9uLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3ODc+IEltcGxlbWVudCB0aGUgUXVpY2sgTmF2aWdhdGlvbiBiYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ2x1c3RlckNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ2x1c3RlckNvbnRlbnRWaWV3LnByb3RvdHlwZS5jYW5Hb0JhY2spOiBBZGRlZC4gQ2FsbCB0aHJvdWdoIHRvIHRoZSBjb250ZW50IHZpZXcgY29udGFpbmVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ2x1c3RlckNvbnRlbnRWaWV3LnByb3RvdHlwZS5jYW5Hb0ZvcndhcmQpOiBBZGRlZC4gRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5DbHVzdGVyQ29udGVudFZpZXcucHJvdG90eXBlLmdvQmFjayk6IEFkZGVkLiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNsdXN0ZXJDb250ZW50Vmlldy5wcm90b3R5cGUuZ29Gb3J3YXJkKTogQWRkZWQuIERpdHRvLgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZW50QnJvd3Nlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyLnByb3RvdHlwZS5jYW5Hb0JhY2spOiBBZGRlZC4gQ2hlY2sgdGhlIGN1cnJlbnQgY29udGVudCB2aWV3IGZpcnN0LgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIucHJvdG90eXBlLmNhbkdvRm9yd2FyZCk6IEFkZGVkLiBDaGVjayB0aGUgY3VycmVudCBjb250ZW50IHZpZXcgZmlyc3QuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuZ29CYWNrKTogQWRkZWQuIFRyeSB0aGUgY3VycmVudCBjb250ZW50IHZpZXcgZmlyc3QuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuZ29Gb3J3YXJkKTogQWRkZWQuIFRyeSB0aGUgY3VycmVudCBjb250ZW50IHZpZXcgZmlyc3QuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuX2JhY2tCdXR0b25DbGlja2VkKTogQ2FsbCBnb0JhY2sgb24gdGhpcyBpbnN0ZWFkIG9mIHRoZSBjb250ZW50CiAgICAgICAgdmlldyBjb250YWluZXIgZGlyZWN0bHkuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuX2ZvcndhcmRCdXR0b25DbGlja2VkKTogQ2FsbCBnb0ZvcndhcmQgb24gdGhpcyBpbnN0ZWFkIG9mIHRoZQogICAgICAgIGNvbnRlbnQgdmlldyBjb250YWluZXIgZGlyZWN0bHkuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuX3VwZGF0ZUJhY2tGb3J3YXJkQnV0dG9ucyk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIucHJvdG90eXBlLl9jdXJyZW50Q29udGVudFZpZXdEaWRDaGFuZ2UpOiBDYWxsIF91ZHBhdGVCYWNrRm9yd2FyZEJ1dHRvbnMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXcucHJvdG90eXBlLmNhbkdvQmFjayk6IEFkZGVkIHN0dWIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlldy5wcm90b3R5cGUuY2FuR29Gb3J3YXJkKTogQWRkZWQgc3R1Yi4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3LnByb3RvdHlwZS5nb0JhY2spOiBBZGRlZCBzdHViLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXcucHJvdG90eXBlLmdvRm9yd2FyZCk6IEFkZGVkIHN0dWIuCgoyMDEyLTAxLTA0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIFdlYkluc3BlY3Rvci5GcmFtZUNvbnRlbnRWaWV3IGFuZCBXZWJJbnNwZWN0b3IuQ2x1c3RlckNvbnRlbnRWaWV3IGluIHByZXBhcmF0aW9uIGZvciBzaG93aW5nCiAgICAgICAgZWl0aGVyIHRoZSBtYWluIHJlc291cmNlIHRleHQgb3IgdGhlIERPTSB0cmVlIGZvciBhIGZyYW1lLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9DbHVzdGVyQ29udGVudFZpZXcuY3NzOiBBZGRlZC4KICAgICAgICAoLmNvbnRlbnQtdmlldy5jbHVzdGVyID4gLmNvbnRlbnQtdmlldy1jb250YWluZXIpOgogICAgICAgICogVXNlckludGVyZmFjZS9DbHVzdGVyQ29udGVudFZpZXcuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ2x1c3RlckNvbnRlbnRWaWV3KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNsdXN0ZXJDb250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IGNvbnRlbnRWaWV3Q29udGFpbmVyKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlldyk6IFJldHVybiBhIEZyYW1lQ29udGVudFZpZXcgZm9yIGEgRnJhbWUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlldy5pc1ZpZXdhYmxlKTogQWRkZWQgRnJhbWUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lQ29udGVudFZpZXcuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVDb250ZW50Vmlldyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgZnJhbWUpOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEluY2x1ZGVkIENsdXN0ZXJDb250ZW50Vmlldy57Y3NzLGpzfSBhbmQgRnJhbWVDb250ZW50Vmlldy5qcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRCcm93c2VyVHJlZUVsZW1lbnRGb3JSZXByZXNlbnRlZE9iamVjdCk6IEFkZGVkIFdlYkluc3BlY3Rvci5GcmFtZSBjaGVjay4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUudHJlZUVsZW1lbnRGb3JSZXByZXNlbnRlZE9iamVjdCk6IFJlbW92ZWQuIFRoZSBiYXNlIGNsYXNzCiAgICAgICAgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uIGlzIGVub3VnaCBub3cuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX21haW5GcmFtZU1haW5SZXNvdXJjZURpZENoYW5nZSk6IENsb3NlIGFsbCBGcmFtZUNvbnRlbnRWaWV3cwogICAgICAgIGFuZCBpbXByb3ZlIGEgY29tbWVudCBhbmQgYWRkIGEgRklYTUUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3RyZWVFbGVtZW50U2VsZWN0ZWQpOiBVc2UgdHJlZUVsZW1lbnQucmVwcmVzZW50ZWRPYmplY3QKICAgICAgICBpbnN0ZWFkIG9mIHRyZWVFbGVtZW50LnJlc291cmNlIHNpbmNlIHdlIHdhbnQgYSBGcmFtZUNvbnRlbnRWaWV3IGZvciBmcmFtZXMuCgoyMDEyLTAxLTA0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUG9wdWxhdGUgdGhlIG9uLWNsaWNrIG1lbnUgZm9yIHBhdGggY29tcG9uZW50cyBiYWNrZWQgYnkgdHJlZSBlbGVtZW50cy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudEJyb3dzZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlcik6IEFkZCBQYXRoQ29tcG9uZW50V2FzU2VsZWN0ZWQgZXZlbnQgbGlzdGVuZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuX3VwZGF0ZUhpZXJhcmNoaWNhbFBhdGhOYXZpZ2F0aW9uSXRlbSk6IFVzZSBUcmVlRWxlbWVudEhpZXJhcmNoaWNhbFBhdGhDb21wb25lbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuX2hpZXJhcmNoaWNhbFBhdGhDb21wb25lbnRXYXNTZWxlY3RlZCk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3KTogQWRkIGFzc2VydGlvbnMgdGhhdCBpc1ZpZXdhYmxlIGlzIGNvcnJlY3QuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlldy5pc1ZpZXdhYmxlKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZWQgVHJlZUVsZW1lbnRIaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50LmpzLgogICAgICAgICogVXNlckludGVyZmFjZS9UcmVlRWxlbWVudEhpZXJhcmNoaWNhbFBhdGhDb21wb25lbnQuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVHJlZUVsZW1lbnRIaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRyZWVFbGVtZW50SGllcmFyY2hpY2FsUGF0aENvbXBvbmVudC5wcm90b3R5cGUuZ2V0IHRyZWVFbGVtZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRyZWVFbGVtZW50SGllcmFyY2hpY2FsUGF0aENvbXBvbmVudC5wcm90b3R5cGUuZ2V0IHByZXZpb3VzU2libGluZyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UcmVlRWxlbWVudEhpZXJhcmNoaWNhbFBhdGhDb21wb25lbnQucHJvdG90eXBlLmdldCBuZXh0U2libGluZyk6CgoyMDEyLTAxLTA0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgU2hvdyBhIHBvcHVwIG1lbnUgb24gY2xpY2sgaW4gSGllcmFyY2hpY2FsUGF0aENvbXBvbmVudCB0aGF0IGNvbnRhaW5zIHNpYmxpbmcgcGF0aCBjb21wb25lbnRzLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3ODc+IEltcGxlbWVudCB0aGUgUXVpY2sgTmF2aWdhdGlvbiBiYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSGllcmFyY2hpY2FsUGF0aENvbXBvbmVudC5jc3M6CiAgICAgICAgKC5oaWVyYXJjaGljYWwtcGF0aC1jb21wb25lbnQpOiBNYWtlIHBvc2l0aW9uaW5nIHJlbGF0aXZlLgogICAgICAgICguaGllcmFyY2hpY2FsLXBhdGgtY29tcG9uZW50ID4gc2VsZWN0KTogQWRkZWQuIFBvc2l0aW9uZWQgc28gdGhlIHRleHQgaW4gdGhlIG1lbnUgYWxpZ25zIHdpdGggdGhlIHRleHQgaW4gLnRpdGxlLgogICAgICAgICogVXNlckludGVyZmFjZS9IaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSGllcmFyY2hpY2FsUGF0aENvbXBvbmVudCk6IENyZWF0ZSB0aGUgc2VsZWN0IGVsZW1lbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5IaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50LnByb3RvdHlwZS5nZXQgcHJldmlvdXNTaWJsaW5nKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5IaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50LnByb3RvdHlwZS5zZXQgcHJldmlvdXNTaWJsaW5nKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5IaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50LnByb3RvdHlwZS5nZXQgbmV4dFNpYmxpbmcpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkhpZXJhcmNoaWNhbFBhdGhDb21wb25lbnQucHJvdG90eXBlLnNldCBuZXh0U2libGluZyk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuSGllcmFyY2hpY2FsUGF0aENvbXBvbmVudC5wcm90b3R5cGUuX3VwZGF0ZVNlbGVjdEVsZW1lbnQpOiBBZGRlZC4gQnVpbGQgdGhlIHNlbGVjdCBtZW51LgogICAgICAgIChXZWJJbnNwZWN0b3IuSGllcmFyY2hpY2FsUGF0aENvbXBvbmVudC5wcm90b3R5cGUuX3VwZGF0ZVNlbGVjdEVsZW1lbnQuY3JlYXRlT3B0aW9uKTogQWRkZWQuIEhlbHBlciB0byBjcmVhdGUKICAgICAgICBhbiBvcHRpb24gZWxlbWVudCBmcm9tIGEgcGF0aCBjb21wb25lbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5IaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50LnByb3RvdHlwZS5fc2VsZWN0RWxlbWVudE1vdXNlRG93bik6IEFkZGVkLiBDYWxsIF91cGRhdGVTZWxlY3RFbGVtZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuSGllcmFyY2hpY2FsUGF0aENvbXBvbmVudC5wcm90b3R5cGUuX3NlbGVjdEVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKTogQWRkZWQuIEZpcmUgdGhlIFNpYmxpbmdXYXNTZWxlY3RlZCBldmVudC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSGllcmFyY2hpY2FsUGF0aE5hdmlnYXRpb25JdGVtLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSGllcmFyY2hpY2FsUGF0aE5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5zZXQgY29tcG9uZW50cyk6IFJlbW92ZSBhbmQgYWRkIGV2ZW50IGxpc3RlbmVycy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkhpZXJhcmNoaWNhbFBhdGhOYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuX3NpYmxpbmdQYXRoQ29tcG9uZW50V2FzU2VsZWN0ZWQpOiBBZGRlZC4gRmlyZSB0aGUgUGF0aENvbXBvbmVudFdhc1NlbGVjdGVkIGV2ZW50LgoKMjAxMi0wMS0wMyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIElmIGEgZGF0YWJhc2UgZG9lc24ndCBoYXZlIGFueSB0YWJsZXMsIGl0cyB0cmVlIGVsZW1lbnQgc2hvdWxkbid0IGhhdmUgYSBkaXNjbG9zdXJlIHRyaWFuZ2xlLgoKICAgICAgICBXaGVuIGNyZWF0aW5nIHRoZSB0cmVlIGVsZW1lbnQgZm9yIGEgZGF0YWJhc2UsIGluaXRpYWxseSBzZXQgaXQgbm90IHRvIGhhdmUgY2hpbGRyZW4sIGJ1dCBtYWtlIHN1cmUKICAgICAgICBpdCBpcyBwb3B1bGF0ZWQgd2hlbiBpdCBpcyBmaXJzdCBjcmVhdGVkLCBzbyBjaGlsZHJlbiB3aWxsIGJlIGFkZGVkIGlmIGl0IGhhcyB0aGVtLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFiYXNlVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZVRyZWVFbGVtZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlVHJlZUVsZW1lbnQucHJvdG90eXBlLm9ucG9wdWxhdGUudGFibGVOYW1lc0NhbGxiYWNrKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlVHJlZUVsZW1lbnQucHJvdG90eXBlLm9ucG9wdWxhdGUpOgoKMjAxMi0wMS0wMiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIExvY2FsaXplIHRoZSBXZWIgSW5zcGVjdG9yIGJ5IGFkZGluZyBXZWJJbnNwZWN0b3IuVUlTdHJpbmcgaW4gcGxhY2VzIHRoYXQgbmVlZCBpdC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSmVzc2llIEJlcmxpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRCcm93c2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIpOgogICAgICAgICogVXNlckludGVyZmFjZS9Db29raWVTdG9yYWdlVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db29raWVTdG9yYWdlVHJlZUVsZW1lbnQucHJvdG90eXBlLmdldCBjYXRlZ29yeU5hbWUpOgogICAgICAgICogVXNlckludGVyZmFjZS9ET01TdG9yYWdlVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01TdG9yYWdlVHJlZUVsZW1lbnQucHJvdG90eXBlLmdldCBjYXRlZ29yeU5hbWUpOgogICAgICAgICogVXNlckludGVyZmFjZS9EYXRhYmFzZUhvc3RUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlSG9zdFRyZWVFbGVtZW50LnByb3RvdHlwZS5nZXQgY2F0ZWdvcnlOYW1lKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YWJhc2VPYmplY3QuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZU9iamVjdCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fZm9sZGVyTmFtZUZvclJlc291cmNlVHlwZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fcGFyZW50VHJlZUVsZW1lbnRGb3JSZXByZXNlbnRlZE9iamVjdCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLl9sZWZ0U2lkZWJhclRvZ2dsZUJ1dHRvblRvb2xUaXApOgogICAgICAgIChXZWJJbnNwZWN0b3IuX3JpZ2h0U2lkZWJhclRvZ2dsZUJ1dHRvblRvb2xUaXApOgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2NoZWNrRm9yRW1wdHlGaWx0ZXJSZXN1bHRzKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N0b3JhZ2VTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdG9yYWdlU2lkZWJhclBhbmVsKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9kb21TdG9yYWdlT2JqZWN0V2FzQWRkZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2RhdGFiYXNlV2FzQWRkZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2Nvb2tpZVN0b3JhZ2VPYmplY3RXYXNBZGRlZCk6CiAgICAgICAgKiBFbmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6IFVwZGF0ZWQgd2l0aCB1cGRhdGUtc2FmYXJpLWxvY2FsaXphYmxlLXN0cmluZ3MuCgoyMDEyLTAxLTAyICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIFdlYkluc3BlY3Rvci5VSVN0cmluZyBhbmQgbG9hZCB0aGUgbG9jYWxpemVkIHN0cmluZ3MgZmlsZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSmVzc2llIEJlcmxpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5sb2FkTG9jYWxpemVkU3RyaW5ncyk6IEFkZGVkLiBMb2FkIHRoZSBsb2NhbGl6ZWQgc3RyaW5ncyBmaWxlIGFuZCBjYWxsCiAgICAgICAgY29udGVudCBsb2FkZWQgd2hlbiBpdCBsb2Fkcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKTogQWRkZWQuCgoyMDEyLTAxLTAyICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIHN0cmluZyBmb3JtYXR0aW5nIGZ1bmN0aW9ucyB0byBXZWIgSW5zcGVjdG9yLgoKICAgICAgICBUaGVzZSB3aWxsIGJlIG5lZWRlZCBmb3IgbG9jYWxpemF0aW9uIGFuZCB0aGUgY29uc29sZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVXRpbGl0aWVzLmpzOgogICAgICAgIChBcnJheS5jb252ZXJ0KTogQ29waWVkIGZyb20gT3BlblNvdXJjZS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcy4KICAgICAgICAoU3RyaW5nLnRva2VuaXplRm9ybWF0U3RyaW5nKTogRGl0dG8uCiAgICAgICAgKFN0cmluZy5zdGFuZGFyZEZvcm1hdHRlcnMpOiBEaXR0by4KICAgICAgICAoU3RyaW5nLmZvcm1hdCk6IERpdHRvLgogICAgICAgIChTdHJpbmcucHJvdG90eXBlLmZvcm1hdCk6IEFkZGVkLgoKMjAxMS0xMi0zMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCB0aGUgdG9nZ2xlIGxlZnQgYW5kIHJpZ2h0IHNpZGViYXIgYnV0dG9ucyB0byB0aGUgUXVpY2sgTmF2aWdhdGlvbiBiYXIuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxODc4Nz4gSW1wbGVtZW50IHRoZSBRdWljayBOYXZpZ2F0aW9uIGJhciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTGVmdFNpZGViYXJDbG9zZS5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTGVmdFNpZGViYXJPcGVuLnBkZjogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9SaWdodFNpZGViYXJDbG9zZS5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvUmlnaHRTaWRlYmFyT3Blbi5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IENyZWF0ZSB0aGUgbGVmdCBhbmQgcmlnaHQgdG9nZ2xlIHNpZGViYXIgYnV0dG9ucyBhbmQgYWRkIGV2ZW50IGxpc3RlbmVycy4KICAgICAgICAoV2ViSW5zcGVjdG9yLl9sZWZ0U2lkZWJhclRvZ2dsZUJ1dHRvblRvb2xUaXApOiBBZGRlZC4gUmV0dXJuIHRoZSBjb3JyZWN0IHRvb2wgdGlwIGJhc2VkIG9uIHdoaWNoIHNpZGViYXIKICAgICAgICBpcyBjdXJyZW50bHkgb24gdGhlIGxlZnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5fcmlnaHRTaWRlYmFyVG9nZ2xlQnV0dG9uVG9vbFRpcCk6IEFkZGVkLiBEaXR0byBmb3IgdGhlIHJpZ2h0LgogICAgICAgIChXZWJJbnNwZWN0b3IuX3RvZ2dsZUxlZnRTaWRlYmFyKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5fdG9nZ2xlUmlnaHRTaWRlYmFyKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5fc2lkZWJhckNvbGxhcHNlZFN0YXRlRGlkQ2hhbmdlKTogQWRkZWQuIFVwZGF0ZSB0aGUgdG9nZ2xlIG5hdmlnYXRpb24gYnV0dG9ucy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2lkZWJhci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXIucHJvdG90eXBlLnNldCBjb2xsYXBzZWQpOiBGaXJlIHRoZSBDb2xsYXBzZWRTdGF0ZURpZENoYW5nZSBldmVudC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5jc3M6CiAgICAgICAgKC50ZXh0LWVkaXRvciA+IC5ndXR0ZXIpOiBNYWRlIHRoZSBtaW4td2lkdGggMXB4IHNtYWxsZXIgdG8gYWxpZ24gd2l0aCB0aGUgZGl2aWRlciBpbiB0aGUgbmF2aWdhdGlvbiBiYXIuCgoyMDExLTEyLTMxICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHJlbW92aW5nIG5hdmlnYXRpb24gaXRlbXMuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxODc4Nz4gSW1wbGVtZW50IHRoZSBRdWljayBOYXZpZ2F0aW9uIGJhciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uQmFyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvbkJhci5wcm90b3R5cGUucmVtb3ZlTmF2aWdhdGlvbkl0ZW0pOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25CYXIucHJvdG90eXBlLnNldCBzZWxlY3RlZE5hdmlnYXRpb25JdGVtKTogTW92ZWQgY29kZSBmcm9tIGhlcmUgaW50byBfZmluZE5hdmlnYXRpb25JdGVtLgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvbkJhci5wcm90b3R5cGUuX2ZpbmROYXZpZ2F0aW9uSXRlbSk6IEFkZGVkLgoKMjAxMS0xMi0zMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBzdXBwb3J0IGZvciBpbnNlcnRpbmcgbmF2aWdhdGlvbiBpdGVtcyBhdCBhIHNwZWNpZmljIGluZGV4LgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3ODc+IEltcGxlbWVudCB0aGUgUXVpY2sgTmF2aWdhdGlvbiBiYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvbkJhci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25CYXIucHJvdG90eXBlLmFkZE5hdmlnYXRpb25JdGVtKTogQ2FsbCBpbnNlcnROYXZpZ2F0aW9uSXRlbS4KICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25CYXIucHJvdG90eXBlLmluc2VydE5hdmlnYXRpb25JdGVtKTogQWRkZWQuCgoyMDExLTEyLTMxICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIFdlYkluc3BlY3Rvci5Ub2dnbGVCdXR0b25OYXZpZ2F0aW9uSXRlbSBmb3IgdGhlIHNpZGViYXIgdG9nZ2xlIGJ1dHRvbnMgaW4gdGhlIFF1aWNrIE5hdmlnYXRpb24gYmFyLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3ODc+IEltcGxlbWVudCB0aGUgUXVpY2sgTmF2aWdhdGlvbiBiYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnV0dG9uTmF2aWdhdGlvbkl0ZW0uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuc2V0IGltYWdlKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuX2dlbmVyYXRlSW1hZ2VzLl9jcmVhdGVFbWJvc3NlZENhbnZhc0ltYWdlKTogQ2FsbCBjbGVhclJlY3QKICAgICAgICBzaW5jZSBfZ2VuZXJhdGVJbWFnZXMgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBub3cuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZWQgVG9nZ2xlQnV0dG9uTmF2aWdhdGlvbkl0ZW0uanMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RvZ2dsZUJ1dHRvbk5hdmlnYXRpb25JdGVtLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRvZ2dsZUJ1dHRvbk5hdmlnYXRpb25JdGVtKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Ub2dnbGVCdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuZ2V0IGRlZmF1bHRJbWFnZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVG9nZ2xlQnV0dG9uTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLmdldCBhbHRlcm5hdGVJbWFnZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVG9nZ2xlQnV0dG9uTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLmdldCB0b2dnbGVkKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Ub2dnbGVCdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuc2V0IHRvZ2dsZWQpOiBBZGRlZC4gU2V0IF90b2dnbGVkIGFuZCBzZXQgdGhlIGNvcnJlY3QgaW1hZ2UuCgoyMDExLTEyLTMxICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWN0dWFsbHkgc2V0IHRoZSBCdXR0b25OYXZpZ2F0aW9uSXRlbSB0b29sIHRpcCBzbyBpdCBzaG93cyB1cCBhcyBleHBlY3RlZC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0J1dHRvbk5hdmlnYXRpb25JdGVtLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnV0dG9uTmF2aWdhdGlvbkl0ZW0pOiBVc2UgdGhlIHRvb2xUaXAgc2V0dGVyIGluc3RlYWQgb2YgX3Rvb2xUaXAuCiAgICAgICAgKFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuZ2V0IHRvb2xUaXApOiBSZXR1cm4gdGhlIHRpdGxlIGluc3RlYWQgb2YgX3Rvb2xUaXAuCiAgICAgICAgKFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuc2V0IHRvb2xUaXApOiBBZGRlZC4gU2V0IHRoZSBlbGVtZW50IHRpdGxlLgoKMjAxMS0xMi0zMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFJlbmFtZSBCdXR0b25OYXZpZ2F0aW9uSXRlbS5kaXNwbGF5TmFtZSB0byB0b29sVGlwLgoKICAgICAgICBJdCB3YXMgYWx3YXlzIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgdGhlIHRvb2wgdGlwLCBzbyB0aGlzIG1ha2VzIGl0IGNsZWFyLgoKICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnV0dG9uTmF2aWdhdGlvbkl0ZW0uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuY29uc3RydWN0b3IuV2ViSW5zcGVjdG9yLkJ1dHRvbk5hdmlnYXRpb25JdGVtLmdldCB0b29sVGlwKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmFkaW9CdXR0b25OYXZpZ2F0aW9uSXRlbS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJhZGlvQnV0dG9uTmF2aWdhdGlvbkl0ZW0pOgoKMjAxMS0xMi0yOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEZpeCBhbiBpc3N1ZSBpbiB0aGUgV2ViIEluc3BlY3RvciB3aGVyZSB0aGUgb2xkIHBhZ2UgY29udGVudCBtaWdodCBhcHBlYXIgd2hlbgogICAgICAgIHByZXNzaW5nIHRoZSBiYWNrIGJ1dHRvbi4KCiAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9tYWluRnJhbWVNYWluUmVzb3VyY2VEaWRDaGFuZ2UpOiBEZWxheSB0aGlzIHdvcmsgYmVjYXVzZQogICAgICAgIG90aGVyIGxpc3RlbmVycyBvZiB0aGlzIGV2ZW50IG1pZ2h0IG5vdCBoYXZlIGZpcmVkIHlldC4gU28gc2VsZWN0aW5nIHRoZSBtYWluIGZyYW1lIGJlZm9yZSB0aG9zZSBsaXN0ZW5lcnMKICAgICAgICBkbyB0aGVpciB3b3JrIG1pZ2h0IGNhdXNlIHRoZSBjb250ZW50IG9mIHRoZSBvbGQgcGFnZSB0byBzaG93IGluc3RlYWQgb2YgdGhlIG5ldyBwYWdlLgoKMjAxMS0xMi0yOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBiYWNrL2ZvcndhcmQgYnV0dG9ucyB0byB0aGUgUXVpY2sgTmF2aWdhdGlvbiBiYXIgYW5kIGhvb2sgdGhlbSB1cC4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4Nzg3PiBJbXBsZW1lbnQgdGhlIFF1aWNrIE5hdmlnYXRpb24gYmFyIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRCcm93c2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIpOiBDcmVhdGUgdGhlIGJhY2sgYW5kIGZvcndhcmQgYnV0dG9uIG5hdmlnYXRpb24gaXRlbXMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuX2JhY2tCdXR0b25DbGlja2VkKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuX2ZvcndhcmRCdXR0b25DbGlja2VkKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuX2N1cnJlbnRDb250ZW50Vmlld0RpZENoYW5nZSk6IFVwZGF0ZSB0aGUgZW5hYmxlZCBzdGF0ZQogICAgICAgIG9mIHRoZSBiYWNrL2ZvcndhcmQgbmF2aWdhdGlvbiBpdGVtcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0JhY2tBcnJvdy5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRm9yd2FyZEFycm93LnBkZjogQWRkZWQuCgoyMDExLTEyLTI5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIFdlYkluc3BlY3Rvci5EaXZpZGVyTmF2aWdhdGlvbkl0ZW0gZm9yIGRpdmlkaW5nIGl0ZW1zIGluIHRoZSBRdWljayBOYXZpZ2F0aW9uIGJhci4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4Nzg3PiBJbXBsZW1lbnQgdGhlIFF1aWNrIE5hdmlnYXRpb24gYmFyIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RpdmlkZXJOYXZpZ2F0aW9uSXRlbS5jc3M6IEFkZGVkLgogICAgICAgICgubmF2aWdhdGlvbi1iYXIgPiAuaXRlbS5kaXZpZGVyKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGl2aWRlck5hdmlnYXRpb25JdGVtLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRpdmlkZXJOYXZpZ2F0aW9uSXRlbSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZWQgRGl2aWRlck5hdmlnYXRpb25JdGVtLmpzIGFuZCBEaXZpZGVyTmF2aWdhdGlvbkl0ZW0uY3NzLgoKMjAxMS0xMi0yOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBkaXNhYmxlZCBzdXBwb3J0IHRvIFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbS4KCiAgICAgICAgVGhpcyBpcyBuZWVkZWQgZm9yIHRoZSBiYWNrL2ZvcndhcmQgYnV0dG9ucy4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4Nzg3PiBJbXBsZW1lbnQgdGhlIFF1aWNrIE5hdmlnYXRpb24gYmFyIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0J1dHRvbk5hdmlnYXRpb25JdGVtLmNzczoKICAgICAgICAoLm5hdmlnYXRpb24tYmFyID4gLml0ZW0uYnV0dG9uLmRpc2FibGVkID4gLmdseXBoKTogQWRkZWQuCiAgICAgICAgKC5uYXZpZ2F0aW9uLWJhciA+IC5pdGVtLmJ1dHRvbjpub3QoLmRpc2FibGVkKTpub3QoLnJhZGlvKTphY3RpdmUpOiBEb24ndCBoaWdobGlnaHQgb24gY2xpY2sgd2hlbiBkaXNhYmxlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnV0dG9uTmF2aWdhdGlvbkl0ZW0uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuZ2V0IGVuYWJsZWQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkJ1dHRvbk5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5zZXQgZW5hYmxlZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQnV0dG9uTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLmdlbmVyYXRlU3R5bGVUZXh0KTogQWRkZWQgOm5vdCguZGlzYWJsZWQpIHRvIHRoZSBmb2N1cyBhbmQgYWN0aXZlIHJ1bGVzLgogICAgICAgIChXZWJJbnNwZWN0b3IuQnV0dG9uTmF2aWdhdGlvbkl0ZW0uU3R5bGVDbGFzc05hbWUuX21vdXNlQ2xpY2tlZCk6IERvbid0IGZpcmUgdGhlIGV2ZW50IHdoZW4gZGlzYWJsZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1JhZGlvQnV0dG9uTmF2aWdhdGlvbkl0ZW0uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SYWRpb0J1dHRvbk5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5nZW5lcmF0ZVN0eWxlVGV4dCk6IEFkZGVkIDpub3QoLmRpc2FibGVkKSB0byB0aGUgZm9jdXMgYW5kIGFjdGl2ZSBydWxlcy4KCjIwMTEtMTItMjkgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgc3VwcG9ydCBmb3IgY2xpY2sgZXZlbnRzIHRvIFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbS4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4Nzg3PiBJbXBsZW1lbnQgdGhlIFF1aWNrIE5hdmlnYXRpb24gYmFyIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0J1dHRvbk5hdmlnYXRpb25JdGVtLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnV0dG9uTmF2aWdhdGlvbkl0ZW0pOiBBZGRlZCBjbGljayBldmVudCBsaXN0ZW5lciB0byB0aGUgZWxlbWVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkJ1dHRvbk5hdmlnYXRpb25JdGVtLlN0eWxlQ2xhc3NOYW1lLl9tb3VzZUNsaWNrZWQpOiBBZGRlZC4gRGlzcGF0Y2ggdGhlIENsaWNrZWQgZXZlbnQuCgoyMDExLTEyLTI5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgU3VwcG9ydCBkaWZmZXJlbnQgc2l6ZSBnbHlwaCBpbWFnZXMgb24gV2ViSW5zcGVjdG9yLkJ1dHRvbk5hdmlnYXRpb25JdGVtLiBBbHNvIGFkZHMgYSBoaWdobGlnaHQgdG8KICAgICAgICBidXR0b25zIHdoZW4gcHJlc3NlZCBhbmQgZ2VuZXJhbCBzdHlsZSBjbGVhbiB1cC4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4Nzg3PiBJbXBsZW1lbnQgdGhlIFF1aWNrIE5hdmlnYXRpb24gYmFyIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0J1dHRvbk5hdmlnYXRpb25JdGVtLmNzczoKICAgICAgICAoLm5hdmlnYXRpb24tYmFyID4gLml0ZW0uYnV0dG9uKTogRGVmYXVsdCBidXR0b25zIHRvIGEgd2lkdGggb2YgMjZweC4gUmVtb3ZlZCBiYWNrZ3JvdW5kIHN0eWxlcy4KICAgICAgICAoLm5hdmlnYXRpb24tYmFyID4gLml0ZW0uYnV0dG9uID4gLmdseXBoKTogU2V0IHdpZHRoIGFuZCBoZWlnaHQgdG8gMTAwJSBhbmQgaGF2ZSB0aGUgYmFja2dyb3VuZAogICAgICAgIGNlbnRlcmVkIGFuZCBub24tcmVwZWF0aW5nLgogICAgICAgICgubmF2aWdhdGlvbi1iYXIgPiAuaXRlbS5idXR0b246bm90KC5yYWRpbyk6YWN0aXZlKTogQWRkZWQuIEhpZ2hsaWdodCB3aGVuIHByZXNzZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0J1dHRvbk5hdmlnYXRpb25JdGVtLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQnV0dG9uTmF2aWdhdGlvbkl0ZW0pOiBBZGRlZCBpbWFnZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZ3VtZW50cy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkJ1dHRvbk5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5nZW5lcmF0ZVN0eWxlVGV4dCk6IEFkZGVkIGJhY2tncm91bmQtc2l6ZSB0byB0aGUgZ2VuZXJhdGVkIHJ1bGVzLgogICAgICAgICogVXNlckludGVyZmFjZS9SYWRpb0J1dHRvbk5hdmlnYXRpb25JdGVtLmNzczoKICAgICAgICAoLm5hdmlnYXRpb24tYmFyID4gLml0ZW0ucmFkaW8uYnV0dG9uKTogQWRkZWQuIE1vdmVkIGZyb20gQnV0dG9uTmF2aWdhdGlvbkl0ZW0uY3NzLgogICAgICAgICgubmF2aWdhdGlvbi1iYXIuY29sbGFwc2VkID4gLml0ZW0ucmFkaW8uYnV0dG9uKTogQWRkZWQuIE1vdmVkIGZyb20gQnV0dG9uTmF2aWdhdGlvbkl0ZW0uY3NzLgogICAgICAgICgubmF2aWdhdGlvbi1iYXIgPiAuaXRlbS5yYWRpby5idXR0b24uc2VsZWN0ZWQpOiBNb3ZlZCBiYWNrZ3JvdW5kLXJlcGVhdCBmcm9tIEJ1dHRvbk5hdmlnYXRpb25JdGVtLmNzcyB0byBoZXJlLgogICAgICAgICgubmF2aWdhdGlvbi1iYXIuY29sbGFwc2VkID4gLml0ZW0ucmFkaW8uYnV0dG9uLnNlbGVjdGVkKTogQWRkZWQuIEFkanVzdCB0aGUgYmFja2dyb3VuZC1zaXplIHRvIGZpdCB0aGUgd2lkdGguCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1JhZGlvQnV0dG9uTmF2aWdhdGlvbkl0ZW0uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SYWRpb0J1dHRvbk5hdmlnYXRpb25JdGVtKTogQWRkZWQgaW1hZ2Ugd2lkdGggYW5kIGhlaWdodCBhcmd1bWVudHMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SYWRpb0J1dHRvbk5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5nZW5lcmF0ZVN0eWxlVGV4dCk6IEFkZGVkIGJhY2tncm91bmQtc2l6ZSB0byB0aGUgZ2VuZXJhdGVkIHJ1bGVzLgoKMjAxMS0xMi0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFBvcHVsYXRlIHRoZSBRdWljayBOYXZpZ2F0aW9uIGJhciB3aXRoIHRoZSBwYXRoIG9mIHRoZSBzZWxlY3RlZCBpdGVtLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3ODc+IEltcGxlbWVudCB0aGUgUXVpY2sgTmF2aWdhdGlvbiBiYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudEJyb3dzZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlcik6IEFkZGVkIGRlbGVnYXRlIGFyZ3VtZW50LiBDcmVhdGUgYSBIaWVyYXJjaGljYWxQYXRoTmF2aWdhdGlvbkl0ZW0gYW5kIGFkZAogICAgICAgIHRvIHRoZSBuYXZpZ2F0aW9uIGJhci4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyLnByb3RvdHlwZS5nZXQgZGVsZWdhdGUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyLnByb3RvdHlwZS5zZXQgZGVsZWdhdGUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyLnByb3RvdHlwZS5fdXBkYXRlSGllcmFyY2hpY2FsUGF0aE5hdmlnYXRpb25JdGVtKTogQWRkZWQuIEJ1aWxkIHBhdGggY29tcG9uZW50cwogICAgICAgIGJhc2VkIG9uIHRoZSB0cmVlIGVsZW1lbnQgZm9yIHRoZSByZXByZXNlbnRlZCBvYmplY3QuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuX2N1cnJlbnRDb250ZW50Vmlld0RpZENoYW5nZSk6IEFkZGVkLiBDYWxsIF91cGRhdGVIaWVyYXJjaGljYWxQYXRoTmF2aWdhdGlvbkl0ZW0uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRWaWV3Q29udGFpbmVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdDb250YWluZXIucHJvdG90eXBlLl9zaG93Q29udGVudFZpZXcpOiBEaXNwYXRjaCB0aGUgQ3VycmVudENvbnRlbnRWaWV3RGlkQ2hhbmdlIGV2ZW50LgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IFBhc3MgdGhpcyBhcyB0aGUgZGVsZWdhdGUgdG8gdGhlIENvbnRlbnRCcm93c2VyLgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudEJyb3dzZXJUcmVlRWxlbWVudEZvclJlcHJlc2VudGVkT2JqZWN0KTogQWRkZWQuIENhbGwgdHJlZUVsZW1lbnRGb3JSZXByZXNlbnRlZE9iamVjdCBvbgogICAgICAgIHRoZSBSZXNvdXJjZVNpZGViYXJQYW5lbCBmb3IgUmVzb3VyY2UgcmVwcmVzZW50ZWQgb2JqZWN0cy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvblNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25TaWRlYmFyUGFuZWwucHJvdG90eXBlLnRyZWVFbGVtZW50Rm9yUmVwcmVzZW50ZWRPYmplY3QpOiBBZGRlZC4gR2VuZXJpYyBpbXBsZW1lbnRhdGlvbgogICAgICAgIHRoYXQgd2lsbCB3b3JrIGZvciBtb3N0IE5hdmlnYXRpb25TaWRlYmFyUGFuZWwgc3ViY2xhc3Nlcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUudHJlZUVsZW1lbnRGb3JSZXByZXNlbnRlZE9iamVjdCk6IEFkZGVkLiBJZiB0aGUgcmVzb3VyY2UgaXMgYQogICAgICAgIG1haW4gcmVzb3VyY2UsIHJldHVybiB0aGUgdHJlZSBlbGVtZW50IGZvciB0aGUgcGFyZW50IGZyYW1lLgoKMjAxMS0xMi0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBIaWVyYXJjaGljYWxQYXRoTmF2aWdhdGlvbkl0ZW0gYW5kIGZyaWVuZHMgZm9yIHRoZSBRdWljayBOYXZpZ2F0aW9uIEJhci4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4Nzg3PiBJbXBsZW1lbnQgdGhlIFF1aWNrIE5hdmlnYXRpb24gYmFyIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0hpZXJhcmNoaWNhbFBhdGhDb21wb25lbnQuY3NzOiBBZGRlZC4KICAgICAgICAoLmhpZXJhcmNoaWNhbC1wYXRoLWNvbXBvbmVudCk6CiAgICAgICAgKC5oaWVyYXJjaGljYWwtcGF0aC1jb21wb25lbnQgPiAuaWNvbik6CiAgICAgICAgKC5oaWVyYXJjaGljYWwtcGF0aC1jb21wb25lbnQgPiAudGl0bGUpOgogICAgICAgICguaGllcmFyY2hpY2FsLXBhdGgtY29tcG9uZW50Omxhc3Qtb2YtdHlwZSA+IC5zZXBhcmF0b3IpOgogICAgICAgICguaGllcmFyY2hpY2FsLXBhdGgtY29tcG9uZW50ID4gLnNlcGFyYXRvcik6CiAgICAgICAgKC5oaWVyYXJjaGljYWwtcGF0aC1jb21wb25lbnQuY29sbGFwc2VkID4gLnRpdGxlKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSGllcmFyY2hpY2FsUGF0aENvbXBvbmVudC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5IaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkhpZXJhcmNoaWNhbFBhdGhDb21wb25lbnQucHJvdG90eXBlLmdldCBlbGVtZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkhpZXJhcmNoaWNhbFBhdGhDb21wb25lbnQucHJvdG90eXBlLmdldCByZXByZXNlbnRlZE9iamVjdCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5IaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50LnByb3RvdHlwZS5nZXQgZGlzcGxheU5hbWUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuSGllcmFyY2hpY2FsUGF0aENvbXBvbmVudC5wcm90b3R5cGUuc2V0IGRpc3BsYXlOYW1lKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSGllcmFyY2hpY2FsUGF0aE5hdmlnYXRpb25JdGVtLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkhpZXJhcmNoaWNhbFBhdGhOYXZpZ2F0aW9uSXRlbSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5IaWVyYXJjaGljYWxQYXRoTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLmdldCBjb21wb25lbnRzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkhpZXJhcmNoaWNhbFBhdGhOYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuc2V0IGNvbXBvbmVudHMpOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvSGllcmFyY2hpY2FsTmF2aWdhdGlvbkl0ZW1DaGV2cm9uLnBkZjogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZWQgSGllcmFyY2hpY2FsUGF0aENvbXBvbmVudC5jc3MsIEhpZXJhcmNoaWNhbFBhdGhOYXZpZ2F0aW9uSXRlbS5qcwogICAgICAgIGFuZCBIaWVyYXJjaGljYWxQYXRoQ29tcG9uZW50LmpzLgoKMjAxMS0xMi0yNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIgdG8gY29vcmRpbmF0ZSBiZXR3ZWVuIHRoZSBRdWljayBOYXZpZ2F0aW9uIGJhciBhbmQgY29udGVudCB2aWV3IGNvbnRhaW5lci4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4Nzg3PiBJbXBsZW1lbnQgdGhlIFF1aWNrIE5hdmlnYXRpb24gYmFyIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFybyBhbmQgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudEJyb3dzZXIuY3NzOiBBZGRlZC4KICAgICAgICAoLmNvbnRlbnQtYnJvd3Nlcik6CiAgICAgICAgKC5jb250ZW50LWJyb3dzZXIgPiAubmF2aWdhdGlvbi1iYXIpOgogICAgICAgICguY29udGVudC1icm93c2VyID4gLmNvbnRlbnQtdmlldy1jb250YWluZXIpOgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZW50QnJvd3Nlci5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuZ2V0IG5hdmlnYXRpb25CYXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIucHJvdG90eXBlLmdldCBjb250ZW50Vmlld0NvbnRhaW5lcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUuc2hvd0NvbnRlbnRGb3JSZXByZXNlbnRlZE9iamVjdCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRWaWV3Q29udGFpbmVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdDb250YWluZXIucHJvdG90eXBlLmdldCBlbGVtZW50KTogQWRkIG1pc3NpbmcgcmV0dXJuLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmNzczoKICAgICAgICAoI2NvbnRlbnQtYnJvd3Nlcik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogUmVuYW1lZCAjY29udGVudCB0byAjY29udGVudC1icm93c2VyLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IENyZWF0ZSBhIENvbnRlbnRCcm93c2VyIGluc3RlYWQgb2YgYSBOYXZpZ2F0aW9uQmFyIGFuZCBDb250ZW50Vmlld0NvbnRhaW5lci4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX21haW5GcmFtZU1haW5SZXNvdXJjZURpZENoYW5nZSk6IFVzZSB0aGUgQ29udGVudEJyb3dzZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3RyZWVFbGVtZW50U2VsZWN0ZWQpOiBEaXR0by4KCjIwMTEtMTItMjggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBIb2xkIHJlZmVyZW5jZXMgdG8gdGhlIG5hdmlnYXRpb24gc2lkZWJhciBwYW5lbHMgZm9yIGVhc3kgYWNjZXNzLgoKICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOiBIb2xkIHJlZmVyZW5jZXMgdG8gdGhlIHNpZGViYXIgcGFuZWxzLgoKMjAxMS0xMi0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFJlbW92ZSB1bnVzZWQgVHJlZUVsZW1lbnQgY2xhc3MgbmFtZXMuCgogICAgICAgIFRoZXNlIGNsYXNzIG5hbWVzIHdlcmUgb3JpZ2luYWxseSB1c2VkIGZvciBpY29ucywgYnV0IHRoZXkgaGF2ZSBiZWVuCiAgICAgICAgcmVwbGFjZWQgYnkgaWNvbiBzcGVjaWZpYyBjbGFzcyBuYW1lcy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29va2llU3RvcmFnZVRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29va2llU3RvcmFnZVRyZWVFbGVtZW50KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NU3RvcmFnZVRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZVRyZWVFbGVtZW50KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YWJhc2VIb3N0VHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZUhvc3RUcmVlRWxlbWVudCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFiYXNlVGFibGVUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlVGFibGVUcmVlRWxlbWVudCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFiYXNlVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZVRyZWVFbGVtZW50KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRm9sZGVyVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Gb2xkZXJUcmVlRWxlbWVudCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZUVsZW1lbnQpOgogICAgICAgICogVXNlckludGVyZmFjZS9TdG9yYWdlVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdG9yYWdlVHJlZUVsZW1lbnQpOgoKMjAxMS0xMi0yNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBpY29ucyBmb3IgbG9jYWwgYW5kIHNlc3Npb24gc3RvcmFnZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NU3RvcmFnZUljb25zLmNzczogQWRkZWQuCiAgICAgICAgKC5sb2NhbC1zdG9yYWdlLWljb24gLmljb24pOgogICAgICAgICguc2Vzc2lvbi1zdG9yYWdlLWljb24gLmljb24pOgogICAgICAgICogVXNlckludGVyZmFjZS9ET01TdG9yYWdlVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01TdG9yYWdlVHJlZUVsZW1lbnQpOiBBZGQgY2xhc3MgbmFtZXMgYmFzZWQgb24gaWYgaXQgaXMgbG9jYWwgc3RvcmFnZSBvciBub3QuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01TdG9yYWdlVHJlZUVsZW1lbnQucHJvdG90eXBlLmdldCBjYXRlZ29yeU5hbWUpOiBSZW1vdmUgYmxhbmsgbGluZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0xvY2FsU3RvcmFnZS5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTG9jYWxTdG9yYWdlQDJ4LnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9TZXNzaW9uU3RvcmFnZS5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvU2Vzc2lvblN0b3JhZ2VAMngucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlZCBET01TdG9yYWdlSWNvbnMuY3NzLgoKMjAxMS0xMi0yNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBpY29ucyBmb3IgZGF0YWJhc2VzIGFuZCBkYXRhYmFzZSB0YWJsZXMuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFiYXNlSG9zdFRyZWVFbGVtZW50LmNzczogUmVtb3ZlZC4gRHVwbGljYXRlcyBGb2xkZXJJY29uLmNzcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YWJhc2VIb3N0VHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZUhvc3RUcmVlRWxlbWVudCk6IFBhc3MgRm9sZGVySWNvblN0eWxlQ2xhc3NOYW1lLgogICAgICAgICogVXNlckludGVyZmFjZS9EYXRhYmFzZUljb24uY3NzOiBBZGRlZC4KICAgICAgICAoLmRhdGFiYXNlLWljb24gLmljb24pOgogICAgICAgICogVXNlckludGVyZmFjZS9EYXRhYmFzZVRhYmxlSWNvbi5jc3M6IEFkZGVkLgogICAgICAgICguZGF0YWJhc2UtdGFibGUtaWNvbiAuaWNvbik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFiYXNlVGFibGVUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlVGFibGVUcmVlRWxlbWVudCk6IFBhc3MgY2xhc3MgbmFtZXMgdG8gV2ViSW5zcGVjdG9yLkdlbmVyYWxUcmVlRWxlbWVudC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YWJhc2VUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlVHJlZUVsZW1lbnQpOiBEb24ndCBpbmhlcml0IGZyb20gRm9sZGVyVHJlZUVsZW1lbnQuIFBhc3MgY2xhc3MgbmFtZXMKICAgICAgICB0byBXZWJJbnNwZWN0b3IuR2VuZXJhbFRyZWVFbGVtZW50LgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRGF0YWJhc2UucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RhdGFiYXNlQDJ4LnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9EYXRhYmFzZVRhYmxlLnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9EYXRhYmFzZVRhYmxlQDJ4LnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZWQgbmV3IGZpbGVzIGFuZCByZW1vdmVkIERhdGFiYXNlSG9zdFRyZWVFbGVtZW50LmNzcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3RvcmFnZVRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZVRyZWVFbGVtZW50KTogUmVtb3ZlIGEgRklYTUUuCgoyMDExLTEyLTI0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIGltYWdlcyBmb3IgdGhlIENvb2tpZSBpY29uLgoKICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29va2llSWNvbi5jc3M6IEFkZGVkLgogICAgICAgICguY29va2llLWljb24gLmljb24pOgogICAgICAgICogVXNlckludGVyZmFjZS9Db29raWVTdG9yYWdlVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db29raWVTdG9yYWdlVHJlZUVsZW1lbnQpOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvQ29va2llLnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Db29raWVAMngucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlZCBDb29raWVJY29uLmNzcy4KCjIwMTEtMTItMjIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBGaXggYSBjb3VwbGUgb2YgaW5kZW50YXRpb24gcHJvYmxlbXMgaW4gdGhlIFdlYiBJbnNwZWN0b3IuCgogICAgICAgIFJldmlld2VkIGJ5IEpvaG4gU3VsbGl2YW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9Db29raWVTdG9yYWdlT2JqZWN0LmpzOiBJbmRlbnQgYmVmb3JlIGNvbnN0cnVjdG9yLgogICAgICAgICogVXNlckludGVyZmFjZS9EYXRhYmFzZUhvc3RUcmVlRWxlbWVudC5qczogRGl0dG8uCgoyMDExLTEyLTIyICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQnJlYWsgb3V0IFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uSXRlbSBhbmQgaXRzIHN1YmNsYXNzZXMgZnJvbSBOYXZpZ2F0aW9uQmFyLmpzIGFuZCBOYXZpZ2F0aW9uQmFyLmNzcyBpbnRvIHNlcGFyYXRlIGZpbGVzLgoKICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBKb2huIFN1bGxpdmFuLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnV0dG9uTmF2aWdhdGlvbkl0ZW0uY3NzOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQnV0dG9uTmF2aWdhdGlvbkl0ZW0uanM6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9GbGV4aWJsZVNwYWNlTmF2aWdhdGlvbkl0ZW0uY3NzOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRmxleGlibGVTcGFjZU5hdmlnYXRpb25JdGVtLmpzOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlZCBuZXcgZmlsZXMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05hdmlnYXRpb25CYXIuY3NzOiBNb3ZlZCAiaXRlbSIgc3ViY2xhc3NlcyB0byBzZXBlcmF0ZSBmaWxlcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvbkJhci5qczogTW92ZWQgTmF2aWdhdGlvbkl0ZW0gYW5kIGl0cyBzdWJjbGFzc2VzIHRvIHNlcGVyYXRlIGZpbGVzLgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uSXRlbS5qczogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1JhZGlvQnV0dG9uTmF2aWdhdGlvbkl0ZW0uY3NzOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmFkaW9CdXR0b25OYXZpZ2F0aW9uSXRlbS5qczogQWRkZWQuCgoyMDExLTEyLTIyICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRHluYW1pY2FsbHkgcmVnaXN0ZXIgdGhlICJtb3VzZW1vdmUiIGFuZCAibW91c2V1cCIgZXZlbnQgbGlzdGVuZXJzIGluIFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uQmFyCiAgICAgICAgc28gdGhleSBhcmUgbm90IGFsbHdheXMgbGlzdGVuaW5nLgoKICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05hdmlnYXRpb25CYXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uQmFyKTogUmVtb3ZlIHRoZSBzdGF0aWMgIm1vdXNlbW92ZSIgYW5kICJtb3VzZXVwIiBldmVudCBsaXN0ZW5lcnMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uQmFyLnByb3RvdHlwZS5fbW91c2VEb3duKTogSW5zdGFsbCB0aGUgIm1vdXNlbW92ZSIgYW5kICJtb3VzZXVwIiBldmVudCBsaXN0ZW5lcnMKICAgICAgICB3aGVuIGEgV2ViSW5zcGVjdG9yLlJhZGlvQnV0dG9uTmF2aWdhdGlvbkl0ZW0gaXMgaGl0LgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvbkJhci5wcm90b3R5cGUuX21vdXNlTW92ZWQpOiBBc3NlcnQgdGhlIG1vdXNlIGlzIGRvd24gbm93IHRoYXQgd2UgcmVnaXN0ZXIgZHluYW1pY2FsbHkuCiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uQmFyLnByb3RvdHlwZS5fbW91c2VVcCk6IERpdHRvLiBSZW1vdmUgdGhlICJtb3VzZW1vdmUiIGFuZCAibW91c2V1cCIgZXZlbnQgbGlzdGVuZXJzLgoKMjAxMS0xMi0yMiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIENoYW5nZSBXZWJJbnNwZWN0b3IuTmF2aWdhdGlvbkJhci5OYXZpZ2F0aW9uSXRlbVNlbGVjdGVkRXZlbnROYW1lIHRvIFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uQmFyLkV2ZW50Lk5hdmlnYXRpb25JdGVtU2VsZWN0ZWQuCgogICAgICAgIFRoaXMgYmVpbmdzIFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uQmFyIGluLWxpbmUgd2l0aCBhbGwgdGhlIG90aGVyIGNsYXNzZXMgaW4gaG93IHRoZSBldmVudCBuYW1lcyBhcmUgZGVmaW5lZC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uQmFyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvbkJhci5wcm90b3R5cGUuc2V0IHNlbGVjdGVkTmF2aWdhdGlvbkl0ZW0pOiBVc2UgV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25CYXIuRXZlbnQuTmF2aWdhdGlvbkl0ZW1TZWxlY3RlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25CYXIucHJvdG90eXBlLl9tb3VzZVVwKTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NpZGViYXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyKTogVXNlIFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uQmFyLkV2ZW50Lk5hdmlnYXRpb25JdGVtU2VsZWN0ZWQuCgoyMDExLTEyLTIyICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUHJvcGVybHkgZGVmaW5lIHRoZSBTaWRlYmFyUGFuZWxTZWxlY3RlZCBldmVudCBpbiBXZWJJbnNwZWN0b3IuU2lkZWJhci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9obiBTdWxsaXZhbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NpZGViYXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyLkV2ZW50KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyLkV2ZW50LlNpZGViYXJQYW5lbFNlbGVjdGVkKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyLnByb3RvdHlwZS5zZXQgc2VsZWN0ZWRTaWRlYmFyUGFuZWwpOiBVc2UgV2ViSW5zcGVjdG9yLlNpZGViYXIuRXZlbnQuU2lkZWJhclBhbmVsU2VsZWN0ZWQKICAgICAgICBpbnN0ZWFkIG9mIHRoZSBuZXZlciBkZWZpbmVkIFdlYkluc3BlY3Rvci5TaWRlYmFyLlNpZGViYXJQYW5lbFNlbGVjdGVkRXZlbnROYW1lLgoKMjAxMS0xMi0yMiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEJyZWFrIG91dCB0aGUgU2lkZWJhclBhbmVsIGNsYXNzIGludG8gYSBzZXBhcmF0ZSBmaWxlIGFuZCBtYWtlIGl0IGNvcnJlY3RseSBpbmhlcml0IGZyb20gV2ViSW5zcGVjdG9yLk9iamVjdC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9obiBTdWxsaXZhbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZWQgU2lkZWJhclBhbmVsLmpzLgogICAgICAgICogVXNlckludGVyZmFjZS9TaWRlYmFyLmpzOiBNb3ZlZCBXZWJJbnNwZWN0b3IuU2lkZWJhclBhbmVsIGFuZCBXZWJJbnNwZWN0b3IuU2lkZWJhclBhbmVsLnByb3RvdHlwZSBmcm9tIGhlcmUuLi4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2lkZWJhclBhbmVsLmpzOiBBZGRlZC4gLi4udG8gaGVyZS4gQWxzbyBmaXhlZCB0aGUgcHJvdG90eXBlIGNoYWluIHRvIG1ha2UgU2lkZWJhclBhbmVsIGluaGVyaXQKICAgICAgICBmcm9tIFdlYkluc3BlY3Rvci5PYmplY3QgbGlrZSBpdCBzaG91bGQgaGF2ZSBiZWVuLgoKMjAxMS0xMi0yMiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEZpeCBhbiBpbmNvcnJlY3QgdXNlIG9mIHR5cGVvZiBpbiB0aGUgV2ViIEluc3BlY3RvciBieSB1c2luZyBpbnN0YW5jZW9mIGluc3RlYWQuCgogICAgICAgIFJldmlld2VkIGJ5IEFkYW0gUm9iZW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbC5wcm90b3R5cGUuYXBwbHlGaWx0ZXJzVG9UcmVlRWxlbWVudC5tYXRjaFRleHRGaWx0ZXIpOiBVc2UgaW5zdGFuY2VvZgogICAgICAgIGluc3RlYWQgb2YgdHlwZW9mIHRvIGNoZWNrIGlmIHRoZSBpbnB1dCBpcyBhbiBhcnJheS4KCjIwMTEtMTItMjIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIHRoZSBDU1MgdXNlZCBmb3IgZm9sZGVyIGFuZCByZXNvdXJjZSBpY29ucyBnZW5lcmljIHNvIGl0IGNhbiBiZSB1c2VkIGJ5IHRoZSBxdWljayBuYXZpZ2F0aW9uIGJhci4KCiAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9Gb2xkZXJJY29uLmNzczogUmVuYW1lZCBmcm9tIFNhZmFyaS9EZXZlbG9wL1dlYkluc3BlY3Rvci9Gb2xkZXJUcmVlRWxlbWVudC5jc3MuCiAgICAgICAgUmVwbGFjZWQgImZvbGRlci10cmVlLWVsZW1lbnQiIHdpdGggImZvbGRlci1pY29uIi4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRm9sZGVyVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Gb2xkZXJUcmVlRWxlbWVudCk6IEFkZCB0aGUgImZvbGRlci1pY29uIiBjbGFzcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZUljb25zLmNzczogUmVuYW1lZCBmcm9tIFNhZmFyaS9EZXZlbG9wL1dlYkluc3BlY3Rvci9SZXNvdXJjZVRyZWVFbGVtZW50LmNzcy4KICAgICAgICBSZXBsYWNlZCAicmVzb3VyY2UtdHJlZS1lbGVtZW50IiB3aXRoICJyZXNvdXJjZS1pY29uIi4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZUVsZW1lbnQpOiBBZGQgdGhlICJyZXNvdXJjZS1pY29uIiBjbGFzcy4KCjIwMTEtMTItMjIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIGlkZW50aWZpZXIgb3B0aW9uYWwgaW4gdGhlIGJhc2UgY2xhc3Mgb2YgV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25JdGVtIGJ1dCByZXF1aXJlZCBmb3IgV2ViSW5zcGVjdG9yLkJ1dHRvbk5hdmlnYXRpb25JdGVtLgoKICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05hdmlnYXRpb25CYXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uSXRlbSk6IFJlbW92ZSBhc3NlcnQgZm9yIGlkZW50aWZpZXIgYW5kIGFkZGVkICJ8fCBudWxsIiB0byB0aGUgYXNzaWdubWVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5nZXQgX2NsYXNzTmFtZXMpOiBOdWxsIGNoZWNrIGlkZW50aWZpZXIgYW5kIGFkZCBpdCBzZXBhcmF0ZWx5LgogICAgICAgIChXZWJJbnNwZWN0b3IuQnV0dG9uTmF2aWdhdGlvbkl0ZW0pOiBBZGRlZCBhc3NlcnQgZm9yIGlkZW50aWZpZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuZ2VuZXJhdGVTdHlsZVRleHQpOiBEb24ndCBwYXNzIHRoZSBpZGVudGlmaWVyIHRvIF9jYW52YXNJZGVudGlmaWVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuQnV0dG9uTmF2aWdhdGlvbkl0ZW0uU3R5bGVDbGFzc05hbWUuX2NhbnZhc0lkZW50aWZpZXIpOiBEb24ndCB0YWtlIHRoZSBpZGVudGlmaWVyIGFzIGFuIGFyZ3VtZW50LCB1c2UgdGhpcy5pZGVudGlmaWVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuQnV0dG9uTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLl9nZW5lcmF0ZUltYWdlcy5fY3JlYXRlRW1ib3NzZWRDYW52YXNJbWFnZSk6IERvbid0IHBhc3MgdGhlIGlkZW50aWZpZXIgdG8gX2NhbnZhc0lkZW50aWZpZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SYWRpb0J1dHRvbk5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5nZW5lcmF0ZVN0eWxlVGV4dCk6IERpdHRvLgoKMjAxMS0xMi0yMCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFNob3cgYSBjb250ZW50IHZpZXcgZm9yIFhIUiByZXNvdXJjZXMgaW4gdGhlIG5ldyBXZWIgSW5zcGVjdG9yLgoKICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlQ29udGVudFZpZXcpOiBBZGQgYSBjYXNlIGZvciBXZWJJbnNwZWN0b3IuUmVzb3VyY2UuVHlwZS5YSFIuCgoyMDExLTEyLTE5ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgTW9yZSBvZiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3NDQ+IEltcGxlbWVudCB0aGUgU3RvcmFnZSBzaWRlYmFyIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduLgoKICAgICAgICBXaGVuIGluc2VydGluZyBpdGVtcyBpbnRvIHRoZSBTdG9yYWdlIHNpZGViYXIsIGluc2VydCB0aGVtIGluIGFscGhhYmV0aWNhbCBvcmRlciBieSBtYWluIHRpdGxlIHNvCiAgICAgICAgaXQgaXMgZWFzaWVyIGZvciB0aGUgdXNlciB0byBuYXZpZ2F0ZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCgogICAgICAgICogVXNlckludGVyZmFjZS9TdG9yYWdlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2NvbXBhcmVUcmVlRWxlbWVudHNCeU1haW5UaXRsZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdG9yYWdlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fYWRkQ2hpbGQpOgoKMjAxMS0xMi0xOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE9ubHkgZmlyZSB0aGUgV2ViSW5zcGVjdG9yLlN5bnRheEhpZ2hsaWdodGVyLkV2ZW50LkhpZ2hsaWdodHNEaWRDaGFuZ2UgZXZlbnQgZm9yIHdob2xlIGxpbmVzLgoKICAgICAgICBGaXJpbmcgdGhlIGV2ZW50IGZvciBwYXJ0aWFsIGxpbmVzIGNhdXNlcyB0b28gbXVjaCBET00gY2h1cm4gb24gbGFyZ2UsIHNpbmdsZS1saW5lIGZpbGVzLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9TeW50YXhIaWdobGlnaHRlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlN5bnRheEhpZ2hsaWdodGVyLnByb3RvdHlwZS5faGlnaGxpZ2h0TmV4dENodW5rKTogVXBkYXRlIGFjdHVhbFN0b3BMaW5lIGFmdGVyIHRoZQogICAgICAgIGN1cnJlbnQgbGluZSBoYXMgY29tcGxldGVseSBmaW5pc2hlZC4gRG9uJ3QgZmlyZSB0aGUgZXZlbnQgaWYgYWN0dWFsU3RvcExpbmUgaXMgc3RpbGwgbnVsbC4KCjIwMTEtMTItMTggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBTdGFydCBhbmQgc3RvcCBzeW50YXggaGlnaGxpZ2h0aW5nIHdoZW4gYSBUZXh0RWRpdG9yIGlzIHNob3duIGFuZCBoaWRkZW4uIFRoaXMgcmVkdWNlcyB0aGUgY2hhbmNlCiAgICAgICAgb2YgbXVsdGlwbGUgVGV4dEVkaXRvcnMgaGlnaGxpZ2h0aW5nIGF0IHRoZSBzYW1lIHRpbWUuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zaG93bik6IEFkZGVkLiBDYWxsIHN0YXJ0SGlnaGxpZ2h0aW5nIGFuZCB1cGRhdGVMYXlvdXQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5oaWRkZW4pOiBBZGRlZC4gQ2FsbCBzdG9wSGlnaGxpZ2h0aW5nLgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5zaG93bik6IENhbGwgVGV4dEVkaXRvci5zaG93biBpbnN0ZWFkIG9mIHVwZGF0ZUxheW91dC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5oaWRkZW4pOiBBZGRlZC4gQ2FsbCBUZXh0RWRpdG9yLmhpZGRlbi4KCjIwMTEtMTItMTggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBVc2UgYSBzeW50aGV0aWMgTUlNRS10eXBlIHRvIHNlbGVjdCB0aGUgc3ludGF4IGhpZ2hsaWdodGVyJ3MgdG9rZW5pemVyLiBSZXNvdXJjZXMgYXJlIG9mdGVuCiAgICAgICAgdHJhbnNmZXJyZWQgd2l0aCBhIE1JTUUtdHlwZSB0aGF0IGRvZXNuJ3QgbWF0Y2ggdGhlIHB1cnBvc2UgdGhlIHJlc291cmNlIHdhcyBsb2FkZWQgZm9yLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5nZXQgc3ludGhldGljTUlNRVR5cGUpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dFJlc291cmNlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUuY29udGVudEF2YWlsYWJsZSk6IFVzZSBzeW50aGV0aWNNSU1FVHlwZS4KCjIwMTEtMTItMTggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBJbnRlcmNlcHQgbGluayBjbGlja3MgaW4gdGhlIFdlYiBJbnNwZWN0b3IgYW5kIHRyeSB0byBzaG93IHRoZSBhcHByb3ByaWF0ZSByZXNvdXJjZSwKICAgICAgICBvdGhlcndpc2UgZmFsbGJhY2sgdG8gb3BlbmluZyB0aGUgVVJMIGluIGEgbmV3IHRhYi93aW5kb3cuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLnJlc291cmNlRm9yVVJMKTogQWRkZWQgYXJndW1lbnQgdG8gcmVjdXJzaXZlbHkgc2VhcmNoIGNoaWxkIGZyYW1lcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOiBBZGQgY2xpY2sgZXZlbnQgbGlzdGVuZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5vcGVuVVJMKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5fbW91c2VXYXNDbGlja2VkKTogQWRkZWQuIENhdGNoIHVuaGFuZGxlZCBsaW5rIGNsaWNrcywgY2FuY2VsIHRoZW0gYW5kIGxvZyBhbmQgZXJyb3IuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZUNvbnRlbnRWaWV3KTogQWRkZWQgY2xpY2sgZXZlbnQgbGlzdGVuZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fbW91c2VXYXNDbGlja2VkKTogQWRkZWQuIENhbGwgV2ViSW5zcGVjdG9yLm9wZW5VUkwuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1V0aWxpdGllcy5qczoKICAgICAgICAoTm9kZS5wcm90b3R5cGUuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhOb2RlTmFtZUluQXJyYXkpOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzLgogICAgICAgIChOb2RlLnByb3RvdHlwZS5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aE5vZGVOYW1lKTogQ29waWVkIGZyb20gV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcy4KCjIwMTEtMTItMTggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYWtlIGxpbmtzIGluIFRleHRFZGl0b3IgYmUgb25seSBhYnNvbHV0ZSBVUkxzLiBPdGhlcndpc2UgcmVsYXRpdmUgVVJMcyBhcmUgcmVzb2x2ZWQKICAgICAgICBhZ2FpbnN0IHRoZSBXZWIgSW5zcGVjdG9yIGFzIGEgYmFzZSBVUkwuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yKTogU2V0IF9kZWxlZ2F0ZSB0byBudWxsLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuZ2V0IGRlbGVnYXRlKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zZXQgZGVsZWdhdGUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9yZXNldCk6IFBhc3MgdGhpcyB3aGVuIG1ha2luZyBhIFRleHRFZGl0b3JUZXh0Q2h1bmsuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fYnJlYWtUZXh0Q2h1bmtBdEluZGV4SW50b1NpbmdsZUxpbmVUZXh0Q2h1bmtzKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fY29uc29saWRhdGVTaW5nbGVMaW5lVGV4dENodW5rcyk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvclRleHRDaHVuayk6IEFkZGVkIHRleHRFZGl0b3IgYXJndW1lbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yVGV4dENodW5rLnByb3RvdHlwZS51cGRhdGVDb250ZW50LmNyZWF0ZVRva2VuRWxlbWVudCk6IEFzayB0aGUgVGV4dEVkaXRvcgogICAgICAgIGRlbGVnYXRlIGZvciB0aGUgYmFzZVVSTCBhbmQgdXNlIGFic29sdXRlVVJMIHdoZW4gYXNzaWduaW5nIHRoZSBocmVmIGZvciBsaW5rcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dFJlc291cmNlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldyk6IFNldCB0aGUgVGV4dEVkaXRvciBkZWxlZ2F0ZSB0byB0aGlzLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLnRleHRFZGl0b3JCYXNlVVJMKTogQWRkZWQuIFJldHVybnMgdGhlIHJlc291cmNlJ3MgVVJMLgogICAgICAgICogVXNlckludGVyZmFjZS9VdGlsaXRpZXMuanM6CiAgICAgICAgKHBhcnNlVVJMKTogVHJpbSB3aGl0ZXNwYWNlIGZyb20gdGhlIFVSTC4KICAgICAgICAoYWJzb2x1dGVVUkwpOiBBZGRlZC4KCjIwMTEtMTItMTggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBXb3JrYXJvdW5kIGEgd2VpcmQgYW5kIHJhbmRvbSBKYXZhU2NyaXB0IGJ1ZyB0aGF0IGNhdXNlcyB0aGUgd3JvbmcgJ3RoaXMnIG9iamVjdCB3aGVuIGZpbHRlcmluZwogICAgICAgIHRoZSByZXNvdXJjZSBzaWRlYmFyIHF1aWNrbHkuCgogICAgICAgIFRoZSBidWcgaXMgdHJhY2tlZCBieTogaHR0cHM6Ly93ZWJraXQub3JnL2IvNzQ4MTEKCiAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RyZWVPdXRsaW5lLmpzOgogICAgICAgIChUcmVlRWxlbWVudC5wcm90b3R5cGUudHJhdmVyc2VOZXh0VHJlZUVsZW1lbnQpOiBVc2UgY2FsbCB0byBhbHdheXMgZ2V0IHRoZSByaWdodCAndGhpcycgb2JqZWN0LgoKMjAxMS0xMi0xOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFJlZHVjZSB0aGUgbnVtYmVyIG9mIHVwZGF0ZXMgd2hlbiBzZXR0aW5nIHRoZSBzdHJpbmcgb2YgYSBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci4KCiAgICAgICAgSW52YWxpZGF0aW5nIHRoZSBzeW50YXggaGlnaGxpZ2h0ZXIgY2F1c2VzIEhpZ2hsaWdodHNEaWRDaGFuZ2UgZXZlbnRzIHRvIGZpcmUgYW5kIHVwZGF0ZSB0aGUgdGV4dAogICAgICAgIGNodW5rcy4gV2UgY2FuIGlnbm9yZSB0aG9zZSBldmVudHMgYmVjYXVzZSBfcmVzZXQgd2lsbCBjb21wbGV0ZWx5IHJlYnVpbGQgdGhlIHRleHQgY2h1bmtzIGFueXdheS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zZXQgdGV4dENvbnRlbnQpOiBTZXQgX2lnbm9yZUhpZ2hsaWdodENoYW5nZXMgdG8gdHJ1ZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnNldCBzdHJpbmcpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9yZXNldCk6IFJlc2V0IF9pZ25vcmVIaWdobGlnaHRDaGFuZ2VzIGJhY2sgdG8gZmFsc2UuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5faGlnaGxpZ2h0c0NoYW5nZWQpOiBSZXR1cm4gZWFybHkgaWYgX2lnbm9yZUhpZ2hsaWdodENoYW5nZXMgaXMgdHJ1ZS4KCjIwMTEtMTItMTggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBJbXByb3ZlIGEgd29ya2Fyb3VuZCBhbmQgZ2V0IHRoZSBjbGllbnRIZWlnaHQgb2YgdGhlIGNvcnJlY3QgZWxlbWVudCBpbiBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci4KCiAgICAgICAgVGhlIGJ1ZyB0aGlzIGlzIHdvcmtpbmcgYXJvdW5kIGlzIHRyYWNrZWQgYnk6IGh0dHBzOi8vd2Via2l0Lm9yZy9iLzc0ODEyCgogICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0RWRpdG9yLmNzczoKICAgICAgICAoLnRleHQtZWRpdG9yID4gLmNvbnRlbnQtY29udGFpbmVyKTogU2V0IGhlaWdodCB0byAxMDAlLiBJdCBpc24ndCBjbGVhciB3aHkgd2Ugc2hvdWxkIG5lZWQgdG8gc2V0CiAgICAgICAgdGhlIGhlaWdodCBoZXJlLCBidXQgd2l0aG91dCB0aGlzIHRoZSBlbGVtZW50IGNvbGxhcHNlcyBzb21ldGltZXMgd2hlbiBpdCBzaG91bGQgaGF2ZSBhIGhlaWdodC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9jb25zb2xpZGF0ZVNpbmdsZUxpbmVUZXh0Q2h1bmtzKTogR2V0IGNsaWVudEhlaWdodCBmcm9tIF9jb250ZW50Q29udGFpbmVyRWxlbWVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9maXJzdFZpc2libGVUZXh0Q2h1bmtJbmRleCk6IERpdHRvLgoKMjAxMS0xMi0xNyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIERvbid0IHNob3cgdmlzaXRlZCBsaW5rcyBpbiB0aGUgV2ViIEluc3BlY3Rvci4KCiAgICAgICAgUmVtb3ZlZCB0aGUgOmxpbmsgcHNldWRvIGNsYXNzIHNvIHZpc2l0ZWQgbGlua3MgYXJlIHN0eWxlZCB0aGUgc2FtZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3JEZWZhdWx0VGhlbWUuY3NzOgogICAgICAgICgudGV4dC1lZGl0b3IgYSk6CiAgICAgICAgKC50ZXh0LWVkaXRvciBhOmhvdmVyKToKCjIwMTEtMTItMTcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBbGxvdyBjbGlja2luZyB0aGUgc2VsZWN0ZWQgcmVzb3VyY2UgYWdhaW4gdG8gc2hvdyB0aGUgY29udGVudCB2aWV3IGlmIGFub3RoZXIgY29udGVudCB2aWV3CiAgICAgICAgaGFzIGJlZW4gc2hvd24gc2luY2UgdGhlIHJlc291cmNlIHdhcyBsYXN0IHNlbGVjdGVkLiBUaGlzIG1hdGNoZXMgWGNvZGUuCgogICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVHJlZU91dGxpbmUuanM6CiAgICAgICAgKFRyZWVPdXRsaW5lKTogU2V0IGFsbG93c1JlcGVhdFNlbGVjdGlvbiB0byBmYWxzZS4KICAgICAgICAoVHJlZUVsZW1lbnQucHJvdG90eXBlLnNlbGVjdCk6IFJlZmFjdG9yZWQgc28gdGhhdCB3aGVuIGFsbG93c1JlcGVhdFNlbGVjdGlvbiBpcyB0cnVlIHRoZQogICAgICAgIG9uc2VsZWN0IGZ1bmN0aW9ucyBhcmUgY2FsbGVkIHN0aWxsLgoKMjAxMS0xMi0xNyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIERvbid0IGF0dGVtcHQgdG8gY3JlYXRlIGEgdG9rZW5pemVyIGZvciAidGV4dC9wbGFpbiIgcmVzb3VyY2VzLgoKICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU291cmNlVG9rZW5pemVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlVG9rZW5pemVyKTogUmV0dXJuIG51bGwgZm9yIGEgTUlNRS10eXBlIG9mICJ0ZXh0L3BsYWluIi4KCjIwMTEtMTItMTcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBDb2xsYXBzZSB0aGUgZGV0YWlscyBzaWRlYmFyIGJ5IGRlZmF1bHQuIEl0IGlzIGVtcHR5IHJpZ2h0IG5vdywgc28gdGhlcmUgaXMgbm8gcmVhc29uCiAgICAgICAgdG8gc2hvdyBpdCB1bnRpbCB3ZSBoYXZlIHNvbWUgc2lkZWJhciBwYW5lbHMgdG8gc2hvdy4KCiAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKTogU2V0IHRoaXMuZGV0YWlsc1NpZGViYXIuY29sbGFwc2VkIHRvIHRydWUuCgoyMDExLTEyLTE2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgU2V0IHRoZSBXZWIgSW5zcGVjdG9yIHdpbmRvdyB0aXRsZSBhbmQgdXBkYXRlIGl0IHdoZW4gdGhlIG1haW4gZnJhbWUgbmF2aWdhdGVzLgoKICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOiBBZGRlZCBldmVudCBsaXN0ZW5lcnMgZm9yIGNoYW5nZXMgb24gdGhlIG1haW4gZnJhbWUuCiAgICAgICAgKFdlYkluc3BlY3Rvci51cGRhdGVXaW5kb3dUaXRsZSk6IEFkZGVkLiBCdWlsZCBhIHRpdGxlIGJhc2VkIG9uIHRoZSBVUkwgY29tcG9uZW50cy4KICAgICAgICAoV2ViSW5zcGVjdG9yLl9tYWluRnJhbWVEaWRDaGFuZ2UpOiBBZGRlZC4gQ2FsbCB1cGRhdGVXaW5kb3dUaXRsZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLl9tYWluUmVzb3VyY2VEaWRDaGFuZ2UpOiBBZGRlZC4gQ2FsbCB1cGRhdGVXaW5kb3dUaXRsZSBpZiB0aGlzIGlzIHRoZSBtYWluIGZyYW1lLgoKMjAxMS0xMi0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEZvcmNlIHRhYnMgdG8gYmUgNCBzcGFjZXMgd2lkZSBpbiB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCA4IHNwYWNlcyB3aWRlLgoKICAgICAgICBUaGlzIGlzIGRvbmUgdmlhIHRoZSBzeW50YXggaGlnaGxpZ2h0ZXIsIHdoaWNoIHRva2VuaXplcyB0aGUgdGFicyB0byBiZSBzdHlsZWQgYXMgaW5saW5lLWJsb2NrcwogICAgICAgIHdpdGggYSB3aWR0aCBlcXVhbCB0byA0IHNwYWNlcyBlYWNoLgoKICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3ludGF4SGlnaGxpZ2h0ZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TeW50YXhIaWdobGlnaHRlci5DaGFyYWN0ZXJUb2tlbnMpOiBBZGRlZCBcdC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JUZXh0Q2h1bmsucHJvdG90eXBlLnVwZGF0ZUNvbnRlbnQuY3JlYXRlVG9rZW5FbGVtZW50KTogSGFuZGxlIHRoZSAidGFiIgogICAgICAgIHRva2VuIHR5cGUgYnkgY3JlYXRpbmcgYSBzcGFuIHBlciB0YWIuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3JEZWZhdWx0VGhlbWUuY3NzOgogICAgICAgICgudGV4dC1lZGl0b3IgLnRhYik6IEFkZGVkLiBJbmxpbmUtYmxvY2sgd2l0aCBhIHdpZHRoIGVxdWFsIHRvIDQgc3BhY2VzLgoKMjAxMS0xMi0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEltcGxlbWVudCBXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcuCgogICAgICAgIENyZWF0ZSBhIFRleHRFZGl0b3IgdGhhdCBmaWxscyB0aGUgdmlldyBhbmQgZGlzcGxheXMgdGhlIHRleHQgY29udGVudCBvZiB0aGUgcmVzb3VyY2UuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDQ4ODQyMj4gSW1wbGVtZW50IFJlc291cmNlIHZpZXdzIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEpvaG4gU3VsbGl2YW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEluY2x1ZGUgVGV4dFJlc291cmNlQ29udGVudFZpZXcuY3NzLgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5jc3M6IEFkZGVkLgogICAgICAgICguY29udGVudC12aWV3LnJlc291cmNlLnRleHQgPiAudGV4dC1lZGl0b3IpOgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3KTogQ3JlYXRlIGEgVGV4dEVkaXRvci4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgdGV4dEVkaXRvcik6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLmNvbnRlbnRBdmFpbGFibGUpOiBBZGRlZC4gUG9wdWxhdGUgdGhlIFRleHRFZGl0b3IKICAgICAgICB3aXRoIGNvbnRlbnQgYW5kIHNldCB0aGUgTUlNRS10eXBlLgoKMjAxMS0xMi0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCB0aGUgbGluZSBudW1iZXIgZ3V0dGVyIHRvIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTA0ODg0MjI+IEltcGxlbWVudCBSZXNvdXJjZSB2aWV3cyBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0RWRpdG9yLmNzczoKICAgICAgICAoLnRleHQtZWRpdG9yID4gLmd1dHRlcik6IEFkZGVkLgogICAgICAgICgudGV4dC1lZGl0b3IgPiAuZ3V0dGVyID4gLmxpbmUtbnVtYmVyKTogQWRkZWQuCiAgICAgICAgKC50ZXh0LWVkaXRvciA+IC5ndXR0ZXIgPiAubGluZS1udW1iZXIubWF4aW11bSk6IEFkZGVkLgogICAgICAgICgudGV4dC1lZGl0b3IgPiAuZ3V0dGVyID4gLmxpbmUtbnVtYmVyLmhpZGRlbik6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0RWRpdG9yLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvcik6IENyZWF0ZSB0aGUgX2d1dHRlckVsZW1lbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fcmVzZXQpOiBDYWxsIF91cGRhdGVMaW5lTnVtYmVycy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9zY3JvbGxQb3NpdGlvbkNoYW5nZWQpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl91cGRhdGVMaW5lTnVtYmVycyk6IEFkZGVkLgoKMjAxMS0xMi0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFN5bnRheCBoaWdobGlnaHQgdGhlIGNvbnRlbnQgb2YgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IuCgogICAgICAgIE9ubHkgc2luZ2xlIGxpbmUgdGV4dCBjaHVua3MgYXJlIHJlbmRlcmVkIHdpdGggc3ludGF4IGhpZ2hsaWdodGluZywgd2hpY2ggYXJlIHRoZSB0aGUgdGV4dCBjaHVua3MKICAgICAgICB0aGF0IGFyZSBuZWFyIHRoZSB2aXNpYmxlIHNjcm9sbCByYW5nZSBvZiB0aGUgdGV4dCBlZGl0b3IuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDQ4ODQyMj4gSW1wbGVtZW50IFJlc291cmNlIHZpZXdzIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N5bnRheEhpZ2hsaWdodGVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3ludGF4SGlnaGxpZ2h0ZXIucHJvdG90eXBlLmludmFsaWRhdGUpOiBEaXNwYXRjaCB0aGUgSGlnaGxpZ2h0c0RpZENoYW5nZSBldmVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlN5bnRheEhpZ2hsaWdodGVyLnByb3RvdHlwZS5faGlnaGxpZ2h0TmV4dENodW5rKTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yKTogQ3JlYXRlIGEgV2ViSW5zcGVjdG9yLlN5bnRheEhpZ2hsaWdodGVyIGFuZCBsaXN0ZW4gZm9yIHRoZSBIaWdobGlnaHRzRGlkQ2hhbmdlIGV2ZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuc2V0IHRleHRDb250ZW50KTogU2V0IHRoZSBTeW50YXhIaWdobGlnaHRlciB0ZXh0Q29udGVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnNldCBzdHJpbmcpOiBJbnZhbGlkYXRlIHRoZSBTeW50YXhIaWdobGlnaHRlci4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLmdldCBtaW1lVHlwZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuc2V0IG1pbWVUeXBlKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fcmVzZXQpOiBTdG9wIGhpZ2hsaWdodGluZyBhbmQgc3RhcnQgYWdhaW4uCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fc2Nyb2xsUG9zaXRpb25DaGFuZ2VkKTogRG8gYSBzeW5jIGhpZ2hsaWdodC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9zY3JvbGxpbmdEaWRTdG9wKTogU3RhcnQgaGlnaGxpZ2h0aW5nLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX2hpZ2hsaWdodHNDaGFuZ2VkKTogVXBkYXRlIHNpbmdsZSBsaW5lIHRleHQgY2h1bmtzLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3RleHRDaHVua0luZGV4Rm9yTGluZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3RleHRDaHVua0ZvckxpbmUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JUZXh0Q2h1bmsucHJvdG90eXBlLnVwZGF0ZUNvbnRlbnQuY3JlYXRlVG9rZW5FbGVtZW50KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yVGV4dENodW5rLnByb3RvdHlwZS51cGRhdGVDb250ZW50LmFwcGVuZFRleHQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JUZXh0Q2h1bmsucHJvdG90eXBlLnVwZGF0ZUNvbnRlbnQpOiBFbnVtZXJhdGUgdGhlIHN5bnRheCBoaWdobGlnaHRpbmcgdG9rZW5zIHdoZW4gdGhlcmUgaXMgb25seSBvbmUgbGluZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvckRlZmF1bHRUaGVtZS5jc3M6IEFkZGVkLgogICAgICAgICgudGV4dC1lZGl0b3IgPiAuY29udGVudC1jb250YWluZXIpOgogICAgICAgICgudGV4dC1lZGl0b3IgLmNzcy1jb21tZW50KToKICAgICAgICAoLnRleHQtZWRpdG9yIC5jc3Mta2V5d29yZCk6CiAgICAgICAgKC50ZXh0LWVkaXRvciAuY3NzLW51bWJlcik6CiAgICAgICAgKC50ZXh0LWVkaXRvciAuY3NzLWF0LXJ1bGUpOgogICAgICAgICgudGV4dC1lZGl0b3IgLmNzcy1zZWxlY3Rvcik6CiAgICAgICAgKC50ZXh0LWVkaXRvciAuY3NzLWltcG9ydGFudCk6CiAgICAgICAgKC50ZXh0LWVkaXRvciAuamF2YXNjcmlwdC1jb21tZW50KToKICAgICAgICAoLnRleHQtZWRpdG9yIC5qYXZhc2NyaXB0LWtleXdvcmQpOgogICAgICAgICgudGV4dC1lZGl0b3IgLmphdmFzY3JpcHQtbnVtYmVyKToKICAgICAgICAoLnRleHQtZWRpdG9yIC5qYXZhc2NyaXB0LXJlZ2V4cCk6CiAgICAgICAgKC50ZXh0LWVkaXRvciAuamF2YXNjcmlwdC1pZGVudCk6CiAgICAgICAgKC50ZXh0LWVkaXRvciAuaHRtbC1jb21tZW50KToKICAgICAgICAoLnRleHQtZWRpdG9yIC5odG1sLXRhZyk6CiAgICAgICAgKC50ZXh0LWVkaXRvciAuaHRtbC1kb2N0eXBlKToKICAgICAgICAoLnRleHQtZWRpdG9yIC5odG1sLWF0dHJpYnV0ZS1uYW1lKToKICAgICAgICAoLnRleHQtZWRpdG9yIC5odG1sLWF0dHJpYnV0ZS12YWx1ZSk6CiAgICAgICAgKC50ZXh0LWVkaXRvciBhOmxpbmspOgogICAgICAgICgudGV4dC1lZGl0b3IgYTpsaW5rOmhvdmVyKToKCjIwMTEtMTItMTYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBCcmVhayB1cCB0ZXh0IGNodW5rcyBpbnRvIHNpbmdsZSBsaW5lcyB3aGVuIHRoZXkgYXJlIHZpc2libGUsIGFuZCBjb25zb2xpZGF0ZSB0aGVtIGFnYWluCiAgICAgICAgd2hlbiB0aGV5IGFyZSBub3QgdmlzaWJsZSBhZnRlciBzY3JvbGxpbmcuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDQ4ODQyMj4gSW1wbGVtZW50IFJlc291cmNlIHZpZXdzIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yKTogQWRkIHNjcm9sbCBldmVudCBsaXN0ZW5lci4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9yZXNldCk6IENhbGwgX2JyZWFrVmlzaWJsZVRleHRDaHVua3NJbnRvU2luZ2xlTGluZVRleHRDaHVua3MuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fc2Nyb2xsUG9zaXRpb25DaGFuZ2VkKTogQWRkZWQuIFNjaGVkdWxlIHRpbWVvdXQgZm9yIF9zY3JvbGxpbmdEaWRTdG9wLgogICAgICAgIENhbGwgX2JyZWFrVmlzaWJsZVRleHRDaHVua3NJbnRvU2luZ2xlTGluZVRleHRDaHVua3MuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fc2Nyb2xsaW5nRGlkU3RvcCk6IEFkZGVkLiBDYWxsIF9jb25zb2xpZGF0ZUhpZGRlblNpbmdsZUxpbmVUZXh0Q2h1bmtzSWZOZWVkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fYnJlYWtUZXh0Q2h1bmtBdEluZGV4SW50b1NpbmdsZUxpbmVUZXh0Q2h1bmtzKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fYnJlYWtWaXNpYmxlVGV4dENodW5rc0ludG9TaW5nbGVMaW5lVGV4dENodW5rcyk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX2NvbnNvbGlkYXRlSGlkZGVuU2luZ2xlTGluZVRleHRDaHVua3NJZk5lZWRlZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX2NvbnNvbGlkYXRlSGlkZGVuU2luZ2xlTGluZVRleHRDaHVua3MpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9jb25zb2xpZGF0ZVNpbmdsZUxpbmVUZXh0Q2h1bmtzKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fZmlyc3RWaXNpYmxlVGV4dENodW5rSW5kZXguY29tcGFyZVRvcE9mZnNldHMpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9maXJzdFZpc2libGVUZXh0Q2h1bmtJbmRleCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3JhbmdlT2ZWaXNpYmxlVGV4dENodW5rcyk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX2xhc3RMaW5lTnVtYmVyT2ZMYXN0VmlzaWJsZVRleHRDaHVuayk6IEFkZGVkLgoKMjAxMS0xMi0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvciB3aGljaCBpcyB0aGUgdmlldyBmb3IgV2ViSW5zcGVjdG9yLlRleHRDb250ZW50LgoKICAgICAgICBSaWdodCBub3cgaXQgb25seSBzaG93cyBwbGFpbi10ZXh0LiBJbiB0aGUgZW5kIGl0IHdpbGwgc3VwcG9ydCBzeW50YXggaGlnaGxpZ2h0aW5nIGFuZCBlZGl0aW5nLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTA0ODg0MjI+IEltcGxlbWVudCBSZXNvdXJjZSB2aWV3cyBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0RWRpdG9yLmNzczogQWRkZWQuCiAgICAgICAgKC50ZXh0LWVkaXRvcik6CiAgICAgICAgKC50ZXh0LWVkaXRvciA+IC5jb250ZW50LWNvbnRhaW5lcik6CiAgICAgICAgKC50ZXh0LWVkaXRvciA+IC5jb250ZW50LWNvbnRhaW5lciA+IC5jb250ZW50KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLmdldCBlbGVtZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLmdldCB0ZXh0Q29udGVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zZXQgdGV4dENvbnRlbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuZ2V0IHN0cmluZyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zZXQgc3RyaW5nKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9yZXNldCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yVGV4dENodW5rKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JUZXh0Q2h1bmsucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmsuZ2V0IGVsZW1lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvclRleHRDaHVuay5wcm90b3R5cGUuZ2V0IGZpcnN0TGluZU51bWJlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yVGV4dENodW5rLnByb3RvdHlwZS5nZXQgbGFzdExpbmVOdW1iZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvclRleHRDaHVuay5wcm90b3R5cGUuZ2V0IG51bWJlck9mTGluZXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvclRleHRDaHVuay5wcm90b3R5cGUuZ2V0IG9mZnNldFRvcCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yVGV4dENodW5rLnByb3RvdHlwZS51cGRhdGVDb250ZW50KToKCjIwMTEtMTItMTYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgV2ViSW5zcGVjdG9yLlN5bnRheEhpZ2hsaWdodGVyIHdoaWNoIHVzZXMgU291cmNlVG9rZW5pemVyLCBUZXh0Q29udGVudCBhbmQgQXR0cmlidXRlZFN0cmluZy4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwNDg4NDIyPiBJbXBsZW1lbnQgUmVzb3VyY2Ugdmlld3MgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3ludGF4SGlnaGxpZ2h0ZXIuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuU3ludGF4SGlnaGxpZ2h0ZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3ludGF4SGlnaGxpZ2h0ZXIucHJvdG90eXBlLmdldCB0ZXh0Q29udGVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TeW50YXhIaWdobGlnaHRlci5wcm90b3R5cGUuc2V0IHRleHRDb250ZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlN5bnRheEhpZ2hsaWdodGVyLnByb3RvdHlwZS5nZXQgbWltZVR5cGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3ludGF4SGlnaGxpZ2h0ZXIucHJvdG90eXBlLnNldCBtaW1lVHlwZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TeW50YXhIaWdobGlnaHRlci5wcm90b3R5cGUuaW52YWxpZGF0ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TeW50YXhIaWdobGlnaHRlci5wcm90b3R5cGUuaXNIaWdobGlnaHRpbmcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3ludGF4SGlnaGxpZ2h0ZXIucHJvdG90eXBlLnN5bmNocm9ub3VzSGlnaGxpZ2h0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlN5bnRheEhpZ2hsaWdodGVyLnByb3RvdHlwZS5zdGFydEhpZ2hsaWdodGluZyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TeW50YXhIaWdobGlnaHRlci5wcm90b3R5cGUuc3RvcEhpZ2hsaWdodGluZyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TeW50YXhIaWdobGlnaHRlci5wcm90b3R5cGUuX2hpZ2hsaWdodE5leHRDaHVuayk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TeW50YXhIaWdobGlnaHRlci5wcm90b3R5cGUuX2hpZ2hsaWdodE5leHRDaHVuay5jb3B5U3RhdGUpOgoKMjAxMS0xMi0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBXZWJJbnNwZWN0b3IuVGV4dENvbnRlbnQgd2hpY2ggd2lsbCBiZSB1c2VkIGZvciBtdWx0aS1saW5lIHRleHQsIGxpa2UgcmVzb3VyY2VzLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTA0ODg0MjI+IEltcGxlbWVudCBSZXNvdXJjZSB2aWV3cyBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9UZXh0Q29udGVudC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Q29udGVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Q29udGVudC5wcm90b3R5cGUudG9TdHJpbmcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dENvbnRlbnQucHJvdG90eXBlLmdldCBzdHJpbmcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dENvbnRlbnQucHJvdG90eXBlLnNldCBzdHJpbmcuY3JlYXRlQXR0cmlidXRlZFN0cmluZyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Q29udGVudC5wcm90b3R5cGUuc2V0IHN0cmluZyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Q29udGVudC5wcm90b3R5cGUuZ2V0IGxlbmd0aCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Q29udGVudC5wcm90b3R5cGUuZ2V0IGxpbmVCcmVha1N0cmluZyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Q29udGVudC5wcm90b3R5cGUuc2V0IGxpbmVCcmVha1N0cmluZyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Q29udGVudC5wcm90b3R5cGUuZ2V0IGxpbmVzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRDb250ZW50LnByb3RvdHlwZS5nZXQgbnVtYmVyT2ZMaW5lcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Q29udGVudC5wcm90b3R5cGUubGluZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Q29udGVudC5wcm90b3R5cGUuYXR0cmlidXRlc0ZvckxpbmUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dENvbnRlbnQucHJvdG90eXBlLmF0dHJpYnV0ZUZvckxpbmUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dENvbnRlbnQucHJvdG90eXBlLnNldEF0dHJpYnV0ZUZvckxpbmUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dENvbnRlbnQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZUZyb21MaW5lKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRDb250ZW50LnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGVzRnJvbUxpbmUpOgoKMjAxMS0xMi0xNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBXZWJJbnNwZWN0b3IuQXR0cmlidXRlZFN0cmluZyB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIHN5bnRheCBoaWdobGlnaHRlZCB0ZXh0LgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTA0ODg0MjI+IEltcGxlbWVudCBSZXNvdXJjZSB2aWV3cyBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9BdHRyaWJ1dGVkU3RyaW5nLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkF0dHJpYnV0ZWRTdHJpbmcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQXR0cmlidXRlZFN0cmluZy5wcm90b3R5cGUudG9TdHJpbmcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQXR0cmlidXRlZFN0cmluZy5wcm90b3R5cGUuZ2V0IHN0cmluZyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5BdHRyaWJ1dGVkU3RyaW5nLnByb3RvdHlwZS5lbnVtZXJhdGVBdHRyaWJ1dGVzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkF0dHJpYnV0ZWRTdHJpbmcucHJvdG90eXBlLmVudW1lcmF0ZUF0dHJpYnV0ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5BdHRyaWJ1dGVkU3RyaW5nLnByb3RvdHlwZS5hdHRyaWJ1dGVzQXRPZmZzZXQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQXR0cmlidXRlZFN0cmluZy5wcm90b3R5cGUuYXR0cmlidXRlQXRPZmZzZXQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQXR0cmlidXRlZFN0cmluZy5wcm90b3R5cGUuc2V0QXR0cmlidXRlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkF0dHJpYnV0ZWRTdHJpbmcucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZS5wcm9jZXNzQXR0cmlidXRlcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5BdHRyaWJ1dGVkU3RyaW5nLnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQXR0cmlidXRlZFN0cmluZy5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlcyk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1V0aWxpdGllcy5qczoKICAgICAgICAoT2JqZWN0LnNoYWxsb3dDb3B5KTogQWRkZWQuIEhlbHBlciBmb3IgbWFraW5nIGEgbmV3IG9iamVjdCB3aXRoIHRoZSBzYW1lIHRvcC1sZXZlbCBwcm9wZXJ0aWVzLgogICAgICAgIChPYmplY3Quc2hhbGxvd0VxdWFsKTogQWRkZWQuIEhlbHBlciBmb3IgY2hlY2tpbmcgaWYgdHdvIG9iamVjdHMgaGF2ZSB0aGUgc2FtZSB0b3AtbGV2ZWwgcHJvcGVydGllcy4KCjIwMTEtMTItMTYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgdG9rZW5pemVycyBhbmQgc3VwcG9ydCBmaWxlcyBuZWVkZWQgZm9yIHN5bnRheCBoaWdobGlnaHRpbmcuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDQ4ODQyMj4gSW1wbGVtZW50IFJlc291cmNlIHZpZXdzIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU0NvbXBsZXRpb25zLmpzOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTQ29tcGxldGlvbnMuanMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NTU0tleXdvcmRDb21wbGV0aW9ucy5qczogQ29waWVkIGZyb20gV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU0NvbXBsZXRpb25zLmpzLgogICAgICAgICogVXNlckludGVyZmFjZS9DU1NTb3VyY2VUb2tlbml6ZXIuanM6IENvcGllZCBmcm9tIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VDU1NUb2tlbml6ZXIuanMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0hUTUxTb3VyY2VUb2tlbml6ZXIuanM6IENvcGllZCBmcm9tIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VIVE1MVG9rZW5pemVyLmpzLgogICAgICAgICogVXNlckludGVyZmFjZS9KYXZhU2NyaXB0U291cmNlVG9rZW5pemVyLmpzOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlSmF2YVNjcmlwdFRva2VuaXplci5qcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVXRpbGl0aWVzLmpzOgogICAgICAgIChBcnJheS5rZXlTZXQpOiBBZGRlZC4KCjIwMTEtMTItMTYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgV2ViSW5zcGVjdG9yLlNvdXJjZVRva2VuaXplciBhYnN0cmFjdCBiYXNlIGNsYXNzLgoKICAgICAgICBUaGlzIGlzIHRoZSBiYXNlIGNsYXNzIGZvciBIVE1MU291cmNlVG9rZW5pemVyLCBKYXZhU2NyaXB0U291cmNlVG9rZW5pemVyIGFuZCBDU1NTb3VyY2VUb2tlbml6ZXIuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDQ4ODQyMj4gSW1wbGVtZW50IFJlc291cmNlIHZpZXdzIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEplc3NpZSBCZXJsaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9Tb3VyY2VUb2tlbml6ZXIuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlVG9rZW5pemVyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZVRva2VuaXplci5wcm90b3R5cGUuaW5pdGlhbGl6ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VUb2tlbml6ZXIucHJvdG90eXBlLnNldCBsaW5lKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZVRva2VuaXplci5wcm90b3R5cGUuZ2V0IGNvbmRpdGlvbik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VUb2tlbml6ZXIucHJvdG90eXBlLnNldCBjb25kaXRpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlVG9rZW5pemVyLnByb3RvdHlwZS5jcmVhdGVJbml0aWFsQ29uZGl0aW9uKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZVRva2VuaXplci5wcm90b3R5cGUubmV4dFRva2VuKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZVRva2VuaXplci5wcm90b3R5cGUuX2NoYXJBdCk6CgoyMDExLTEyLTE2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUmVtb3ZlIHRoZSBjYWNoZWQgQ29udGVudFZpZXcgZnJvbSB0aGUgcmVwcmVzZW50ZWQgb2JqZWN0IHdoZW4gdGhlIENvbnRlbnRWaWV3IGlzIGNsb3NlZC4KCiAgICAgICAgVGhpcyBhbGxvd3MgdGhlIENvbnRlbnRWaWV3IHRvIGJlIGdhcmJhZ2UgY29sbGVjdGVkIGlmIHRoZSByZXByZXNlbnRlZCBvYmplY3Qgc3RheXMgYXJvdW5kLgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3KTogU2V0IF9yZXByZXNlbnRlZE9iamVjdC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgcmVwcmVzZW50ZWRPYmplY3QpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudFZpZXdDb250YWluZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlld0NvbnRhaW5lci5wcm90b3R5cGUuY29udGVudFZpZXdGb3JSZXByZXNlbnRlZE9iamVjdCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlld0NvbnRhaW5lci5wcm90b3R5cGUuc2hvd0NvbnRlbnRWaWV3KTogVXNlIF9kaXNhc3NvY2lhdGVGcm9tQ29udGVudFZpZXcKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3Q29udGFpbmVyLnByb3RvdHlwZS5yZXBsYWNlQ29udGVudFZpZXcpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3Q29udGFpbmVyLnByb3RvdHlwZS5jbG9zZUFsbENvbnRlbnRWaWV3c09mUHJvdG90eXBlKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlld0NvbnRhaW5lci5wcm90b3R5cGUuY2xvc2VBbGxDb250ZW50Vmlld3MpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3Q29udGFpbmVyLnByb3RvdHlwZS5fZGlzYXNzb2NpYXRlRnJvbUNvbnRlbnRWaWV3KTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZUNvbnRlbnRWaWV3KTogUGFzcyByZXNvdXJjZSB0byBDb250ZW50VmlldyBhcyB0aGUgcmVwcmVzZW50ZWRPYmplY3QuCgoyMDExLTEyLTE2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgRG9uJ3Qgc3VwcG9ydCBjcmVhdGluZyBhIFdlYkluc3BlY3Rvci5SZXNvdXJjZUNvbnRlbnRWaWV3IGZyb20gYSBXZWJJbnNwZWN0b3IuRnJhbWUuCgogICAgICAgIFNpbmNlIHRoZSBtYWluIGZyYW1lIHN0YXlzIHRoZSBzYW1lIGJldHdlZW4gbmF2aWdhdGlvbnMgYW5kIENvbnRlbnRWaWV3Q29udGFpbmVyIGNhY2hlcwogICAgICAgIHRoZSBDb250ZW50VmlldyBvbiB0aGUgRnJhbWUsIHRoZSBDb250ZW50VmlldyBpcyBub3QgYmVpbmcgcmVjcmVhdGVkIGZvciB0aGUgbmV3IHBhZ2UuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXcpOiBSZW1vdmUgdGhlIGNoZWNrIGZvciBXZWJJbnNwZWN0b3IuRnJhbWUgYXMgYSByZXByZXNlbnRlZE9iamVjdC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX21haW5GcmFtZU1haW5SZXNvdXJjZURpZENoYW5nZSk6IFNlbGVjdCB0aGUKICAgICAgICBtYWluIHJlc291cmNlIG9mIHRoZSBtYWluIGZyYW1lLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl90cmVlRWxlbWVudFNlbGVjdGVkKTogUGFzcyB0aGUgcmVzb3VyY2UuCgoyMDExLTEyLTE2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFyayB0aGUgbWFpbiByZXNvdXJjZSBvZiBmcmFtZXMgYXMgZmluaXNoZWQgd2hlbiB0aGUgcmVzb3VyY2UgdHJlZSBpcyBwdWxsZWQgdGhlIGZpcnN0IHRpbWUuCiAgICAgICAgQWxzbyBkZWxheSBtYXJraW5nIHJlc291cmNlcyBhcyBmaW5pc2hlZCB1bnRpbCB0aGV5IGhhdmUgYSBwYXJlbnQgZnJhbWUuCgogICAgICAgIFRoaXMgaXMgbmVlZGVkIHRvIHNob3cgY29udGVudCBmb3IgYSBzZWxlY3RlZCBmcmFtZSwgb3RoZXJ3aXNlIHRoZSBjb250ZW50IHZpZXcgaXMgYmxhbmsuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lUmVzb3VyY2VNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLl9jcmVhdGVGcmFtZSk6IENhbGwgbWFya0FzRmluaXNoZWQgb24gdGhlIG1haW5SZXNvdXJjZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5fY3JlYXRlUmVzb3VyY2UpOiBNb3ZlIHRoZSBjYWxsIHRvIG1hcmtBc0ZpbmlzaGVkIGZyb20gaGVyZS4uLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLl9hZGRGcmFtZVRyZWVGcm9tRnJhbWVSZXNvdXJjZVRyZWVQYXlsb2FkKTogLi4udG8gaGVyZS4KCjIwMTEtMTItMTUgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBNb3JlIG9mIDxyZGFyOi8vcHJvYmxlbS8xMDMxODc0ND4gSW1wbGVtZW50IHRoZSBTdG9yYWdlIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIEFkZCBEYXRhYmFzZSB0YWJsZXMgdG8gdGhlIHN0b3JhZ2Ugc2lkZWJhciBwYW5lbC4gV2hlbiBhIGRhdGFiYXNlIG5lZWRzIHRvIGJlIHBvcHVsYXRlZCwgd2UgYXNrCiAgICAgICAgZm9yIHRoZSBkYXRhYmFzZSdzIHRhYmxlIG5hbWVzIGFzeW5jaHJvbm91c2x5LiBJbiB0aGUgY2FsbGJhY2sgd2UgY3JlYXRlIERhdGFiYXNlVGFibGVPYmplY3RzCiAgICAgICAgYW5kIERhdGFiYXNlVGFibGVUcmVlRWxlbWVudHMgZm9yIGFsbCBvZiB0aGUgdGFibGUgbmFtZXMgdGhhdCB0aGUgZGF0YWJhc2UgaGFzLCBhbmQgYWRkIHRoZQogICAgICAgIHRoZSBEYXRhYmFzZVRhYmxlVHJlZUVsZW1lbnRzIGFzIGNoaWxkcmVuIG9mIHRoZSBEYXRhYmFzZVRyZWVFbGVtZW50LgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFiYXNlT2JqZWN0LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YWJhc2VPYmplY3QucHJvdG90eXBlLmdldFRhYmxlTmFtZXMpOiBDYWxscyBpbnRvIFdlYkNvcmUgdG8gZ2V0IHRoZSBkYXRhYmFzZSdzIHRhYmxlIG5hbWVzLAogICAgICAgICAgICBhbmQgc29ydHMgdGhlbS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YWJhc2VUYWJsZU9iamVjdC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZVRhYmxlT2JqZWN0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlVGFibGVPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5EYXRhYmFzZVRhYmxlT2JqZWN0LmdldCBuYW1lKTogUmV0dXJucyB0aGUgbmFtZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlVGFibGVPYmplY3QucHJvdG90eXBlLmdldCBkYXRhYmFzZSk6IFJldHVybnMgdGhlIGRhdGFiYXNlT2JqZWN0LgogICAgICAgICogVXNlckludGVyZmFjZS9EYXRhYmFzZVRhYmxlVHJlZUVsZW1lbnQuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YWJhc2VUYWJsZVRyZWVFbGVtZW50KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YWJhc2VUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlVHJlZUVsZW1lbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5EYXRhYmFzZVRyZWVFbGVtZW50Lm9uY29sbGFwc2UpOiBTZXQgYSBmbGFnIHNvIHRoYXQgd2UKICAgICAgICAgICAgcmVwb3B1bGF0ZSB0aGUgY2hpbGRyZW4gd2hlbiB0aGUgdHJlZSBlbGVtZW50IGlzIHJlLWV4cGFuZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YWJhc2VUcmVlRWxlbWVudC5wcm90b3R5cGUub25wb3B1bGF0ZS50YWJsZU5hbWVzQ2FsbGJhY2spOiBDcmVhdGUgRGF0YWJhc2VUYWJsZU9iamVjdHMgYW5kIERhdGFiYXNlVGFibGVUcmVlRWxlbWVudHMKICAgICAgICAgICAgZm9yIGVhY2ggb2YgdGhlIHRhYmxlIG5hbWVzLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YWJhc2VUcmVlRWxlbWVudC5wcm90b3R5cGUub25wb3B1bGF0ZSk6IEFzayB0aGUgRGF0YWJhc2VPYmplY3QgZm9yIGl0cyBsaXN0IG9mIHRhYmxlIG5hbWVzLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEFkZCBuZXcgZmlsZXMuCgoyMDExLTEyLTE0ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KCiAgICAgICAgU29tZSBjbGVhbnVwIGFmdGVyIHIzOTQ4OC4KCiAgICAgICAgRG9uJ3QgdXNlIEZvbGRlclRyZWVFbGVtZW50J3Mgc3R5bGUgaW4gRGF0YWJhc2VIb3N0VHJlZUVsZW1lbnQgKGJlY2F1c2UgRGF0YWJhc2VIb3N0VHJlZUVsZW1lbnQgaXNuJ3QgYSBGb2xkZXJUcmVlRWxlbWVudCkuCgogICAgICAgIEluc3RlYWQsIGNyZWF0ZSBhIG5ldyBjc3MgZmlsZSBhbmQgY29uZmlndXJlIERhdGFiYXNlSG9zdFRyZWVFbGVtZW50IHRvIHNob3cgYSBmb2xkZXIuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YWJhc2VIb3N0VHJlZUVsZW1lbnQuY3NzOiBBZGRlZC4KICAgICAgICAoLmRhdGFiYXNlLWhvc3QtdHJlZS1lbGVtZW50IC5pY29uKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YWJhc2VIb3N0VHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZUhvc3RUcmVlRWxlbWVudCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKCjIwMTEtMTItMTMgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBNb3JlIG9mIDxyZGFyOi8vcHJvYmxlbS8xMDMxODc0ND4gSW1wbGVtZW50IHRoZSBTdG9yYWdlIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIEFkZCBEYXRhYmFzZXMgdG8gdGhlIHN0b3JhZ2Ugc2lkZWJhciBwYW5lbC4gVGhpcyBwYXRjaCBhZGRzIHR3byBuZXcgY2xhc3NlcyBvZiB0cmVlIGVsZW1lbnRzIC0gYSBEYXRhYmFzZUhvc3RUcmVlRWxlbWVudCwKICAgICAgICB3aGljaCByZXByZXNlbnRzIGEgaG9zdCB0aGF0IGhhcyBhdCBsZWFzdCBvbmUgZGF0YWJhc2UsIGFuZCBhIERhdGFiYXNlVHJlZUVsZW1lbnQsIHdoaWNoIGV2ZW50dWFsbHkgd2lsbCBoYXZlIHRhYmxlcy4KCiAgICAgICAgV2UgdXNlIHRoZSBzYW1lIGNvbGxhcHNpbmcgbG9naWMgZm9yIGRhdGFiYXNlcyB0aGF0IHdlIHVzZSBmb3IgY29va2llcyBhbmQgRE9NIFN0b3JhZ2UuIFdpdGggb25lIGRvbWFpbiwKICAgICAgICBpdCB3aWxsIHNheToKCiAgICAgICAgRGF0YWJhc2UgLSBEb21haW4KICAgICAgICAgICAgTmFtZSAxCiAgICAgICAgICAgIE5hbWUgMgoKICAgICAgICBXaXRoIG11bHRpcGxlIGRvbWFpbnMsIGl0IHdpbGwgc2F5OgoKICAgICAgICBEYXRhYmFzZXMKICAgICAgICAgICAgRG9tYWluIDEKICAgICAgICAgICAgICAgIE5hbWUgMQogICAgICAgICAgICAgICAgTmFtZSAyCiAgICAgICAgICAgIERvbWFpbiAyCiAgICAgICAgICAgICAgICBOYW1lIDMKICAgICAgICAgICAgICAgIE5hbWUgNAoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFiYXNlT2JqZWN0LmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlT2JqZWN0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlT2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuRGF0YWJhc2VPYmplY3QuZ2V0IGlkKTogUmV0dXJucyB0aGUgaWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZU9iamVjdC5wcm90b3R5cGUuZ2V0IGhvc3QpOiBSZXR1cm5zIHRoZSBob3N0LgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YWJhc2VPYmplY3QucHJvdG90eXBlLmdldCBuYW1lKTogUmV0dXJucyB0aGUgbmFtZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlT2JqZWN0LnByb3RvdHlwZS5nZXQgdmVyc2lvbik6IFJldHVybnMgdGhlIHZlcnNpb24uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFiYXNlT2JzZXJ2ZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZU9ic2VydmVyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuRGF0YWJhc2VPYnNlcnZlci5hZGREYXRhYmFzZSk6IFRlbGwgdGhlIFN0b3JhZ2VNYW5hZ2VyCiAgICAgICAgICAgIGEgZGF0YWJhc2Ugd2FzIGFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9EYXRhYmFzZVRyZWVFbGVtZW50LmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlVHJlZUVsZW1lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YWJhc2VUcmVlRWxlbWVudC5wcm90b3R5cGUuY29uc3RydWN0b3IuV2ViSW5zcGVjdG9yLkRhdGFiYXNlVHJlZUVsZW1lbnQuZ2V0IG5hbWUpOiBJbml0aWFsaXplIHRoZSBGb2xkZXJUcmVlRWxlbWVudC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGF0YWJhc2VIb3N0VHJlZUVsZW1lbnQuanM6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N0b3JhZ2VNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZU1hbmFnZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5TdG9yYWdlTWFuYWdlci5pbml0aWFsaXplKTogSW5pdGlhbGl6ZSBhIGxpc3Qgb2YgZGF0YWJhc2VzLgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZU1hbmFnZXIucHJvdG90eXBlLmRhdGFiYXNlV2FzQWRkZWQpOiBDcmVhdGUgYSBEYXRhYmFzZU9iamVjdCBhbmQgdGVsbCB0aGUgU3RvcmFnZVNpZGViYXJQYW5lbCB3ZSBhZGRlZAogICAgICAgICAgICBhIGRhdGFiYXNlLgogICAgICAgICogVXNlckludGVyZmFjZS9TdG9yYWdlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZVNpZGViYXJQYW5lbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdG9yYWdlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fZGF0YWJhc2VXYXNBZGRlZCk6IENyZWF0ZSBhIERhdGFiYXNlVHJlZUVsZW1lbnQgYW5kIGFkZCBpdCB0byB0aGUgc2lkZWJhci4KICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9zdG9yYWdlQ2xlYXJlZCk6IENsZWFyIHRoZSByb290IGRhdGFiYXNlIHRyZWUgZWxlbWVudC4KCjIwMTEtMTItMDkgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBNb3JlIG9mIDxyZGFyOi8vcHJvYmxlbS8xMDMxODc0ND4gSW1wbGVtZW50IHRoZSBTdG9yYWdlIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIEFkZCBDb29raWVzIHRvIHRoZSBTdG9yYWdlIHNpZGViYXIgcGFuZWwuIEFkZCBhIGxpc3RlbmVyIGZvciB3aGVuIGEgY29va2llIHN0b3JhZ2Ugb2JqZWN0IGlzIGFkZGVkLAogICAgICAgIGFuZCBhZGQgaXQgdG8gdGhlIHNpZGViYXIuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU3RvcmFnZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VTaWRlYmFyUGFuZWwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuY29uc3RydWN0b3IuV2ViSW5zcGVjdG9yLlN0b3JhZ2VTaWRlYmFyUGFuZWwuX2RvbVN0b3JhZ2VPYmplY3RXYXNBZGRlZCk6IFJlbW92ZSBzb21lIGRlYWQgY29kZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9jb29raWVTdG9yYWdlT2JqZWN0V2FzQWRkZWQpOiBBZGQgYSBjaGlsZCB0byB0aGUgc3RvcmFnZSBzaWRlYmFyLgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2FkZENoaWxkKTogQ2hhbmdlIHRoZSBjbGFzcyB0aGF0IHdlIGFyZSBleHBlY3RpbmcgdG8gYSBTdG9yYWdlVHJlZUVsZW1lbnQsIGJlY2F1c2UgaXQgY2FuIGJlCiAgICAgICAgICAgIGVpdGhlciBhIERPTVN0b3JhZ2VUcmVlRWxlbWVudCBvciBhIENvb2tpZVN0b3JhZ2VUcmVlRWxlbWVudCwgYnV0IGJvdGggYXJlIFN0b3JhZ2VUcmVlRWxlbWVudHMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TdG9yYWdlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fc3RvcmFnZUNsZWFyZWQpOgoKMjAxMS0xMi0wOSAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIE1vcmUgb2YgPHJkYXI6Ly9wcm9ibGVtLzEwMzE4NzQ0PiBJbXBsZW1lbnQgdGhlIFN0b3JhZ2Ugc2lkZWJhciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbi4KCiAgICAgICAgQWRkIENvb2tpZVN0b3JhZ2VUcmVlRWxlbWVudCwgYW5kIHJlZmFjdG9yIERPTVN0b3JhZ2VUcmVlRWxlbWVudCBpbnRvIFN0b3JhZ2VUcmVlRWxlbWVudCBzbyB0aGUgY29kZSB0byBoYW5kbGUKICAgICAgICBmbGF0dGVuaW5nIG9mIHRoZSBmb2xkZXJzIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBDb29raWVTdG9yYWdlVHJlZUVsZW1lbnQsIERPTVN0b3JhZ2VUcmVlRWxlbWVudCwgYW5kIHRoZSBvdGhlcnMKICAgICAgICB0aGF0IHdlIHdpbGwgYWRkIGluIHRoZSBmdXR1cmUuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29va2llU3RvcmFnZVRyZWVFbGVtZW50LmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvb2tpZVN0b3JhZ2VUcmVlRWxlbWVudCk6IENhbGwKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvb2tpZVN0b3JhZ2VUcmVlRWxlbWVudC5wcm90b3R5cGUuY29uc3RydWN0b3IuV2ViSW5zcGVjdG9yLkNvb2tpZVN0b3JhZ2VUcmVlRWxlbWVudC5uYW1lKTogUmV0dXJuIHRoZSBob3N0IG9mIHRoZSBDb29raWVTdG9yYWdlT2JqZWN0LgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29va2llU3RvcmFnZVRyZWVFbGVtZW50LnByb3RvdHlwZS5jYXRlZ29yeSk6IFJldHVybiAiQ29va2llcyIuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVN0b3JhZ2VUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VUcmVlRWxlbWVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01TdG9yYWdlVHJlZUVsZW1lbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5ET01TdG9yYWdlVHJlZUVsZW1lbnQubmFtZSk6IFJldHVybiB0aGUgaG9zdCBvZiB0aGUgRE9NU3RvcmFnZU9iamVjdC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VUcmVlRWxlbWVudC5wcm90b3R5cGUuY2F0ZWdvcnkpOiBSZXR1cm4gIkxvY2FsIFN0b3JhZ2UiIG9yICJTZXNzaW9uIFN0b3JhZ2UiLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEFkZCBuZXcgZmlsZXMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TdG9yYWdlVHJlZUVsZW1lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZVRyZWVFbGVtZW50LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuU3RvcmFnZVRyZWVFbGVtZW50LmdldCBmbGF0dGVuZWQpOiBNb3ZlZCBmcm9tIERPTVN0b3JhZ2VUcmVlRWxlbWVudAogICAgICAgICAgICBhbmQgcmVmYWN0b3JlZCB0byBiZSBtb3JlIGdlbmVyYWwuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TdG9yYWdlVHJlZUVsZW1lbnQucHJvdG90eXBlLnNldCBmbGF0dGVuZWQpOiBEaXR0by4KCjIwMTEtMTItMDkgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBNb3JlIG9mIDxyZGFyOi8vcHJvYmxlbS8xMDMxODc0ND4gSW1wbGVtZW50IHRoZSBTdG9yYWdlIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIExpc3RlbiBmb3Igd2hlbiB0aGUgbWFpbiByZXNvdXJjZSBvZiBhbnkgZnJhbWUgbmF2aWdhdGVzLCBhbmQgYWRkIGEgY29va2llIHN0b3JhZ2Ugb2JqZWN0IGZvciBldmVyeQogICAgICAgIGZyYW1lIHdpdGggYSB1bmlxdWUgaG9zdC4gQW55IG9mIHRoZXNlIGZyYW1lcyBjb3VsZCBoYXZlIGNvb2tpZXMsIGFuZCB3ZSB3YW50IHRvIHNob3cgdGhlbSBhbGwuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29va2llU3RvcmFnZU9iamVjdC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db29raWVTdG9yYWdlT2JqZWN0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvb2tpZVN0b3JhZ2VPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5Db29raWVTdG9yYWdlT2JqZWN0LmdldCBob3N0KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBBZGQgYSBuZXcgc291cmNlIGZpbGUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N0b3JhZ2VNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5TdG9yYWdlTWFuYWdlci5pbml0aWFsaXplKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VNYW5hZ2VyLnByb3RvdHlwZS5fbWFpblJlc291cmNlRGlkQ2hhbmdlKTogSWYgYW55IGZyYW1lIG5hdmlnYXRlcywgYWRkIGNyZWF0ZSBhIGNvb2tpZQogICAgICAgICAgICBzdG9yYWdlIG9iamVjdCBmb3IgdGhlIGZyYW1lJ3MgaG9zdC4KCjIwMTEtMTItMDggIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBNb3JlIG9mIDxyZGFyOi8vcHJvYmxlbS8xMDMxODc0ND4gSW1wbGVtZW50IHRoZSBTdG9yYWdlIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIEdlbmVyYXRlIHRoZSBsb2NhbCBzdG9yYWdlIGFuZCBzZXNzaW9uIHN0b3JhZ2UgZm9sZGVycyBvbiBkZW1hbmQuIFdlIGRvbid0IHNob3cgdGhlbSBpbiB0aGUgdHJlZSB1bnRpbAogICAgICAgIGEgbG9jYWwgc3RvcmFnZSBvciBzZXNzaW9uIHN0b3JhZ2Ugb2JqZWN0IGhhcyBiZWVuIGFkZGVkLCBhbmQgaWYgdGhlcmUgaXMgb25seSBvbmUgb2JqZWN0LCB3ZSBmbGF0dGVuIHRoZQogICAgICAgIGZvbGRlciBzbyBpdCBzYXlzOgoKICAgICAgICBMb2NhbCBTdG9yYWdlINEgZm9vLmNvbQoKICAgICAgICBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIG9iamVjdCwgd2UgY3JlYXRlIGEgZm9sZGVyLCBhbmQgdGhlIHN0cnVjdHVyZSB3aWxsIGJlOgoKICAgICAgICBMb2NhbCBTdG9yYWdlCiAgICAgICAgICAgIGZvby5jb20KICAgICAgICAgICAgYmFyLmNvbQoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlciBhbmQgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NU3RvcmFnZVRyZWVFbGVtZW50LmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VUcmVlRWxlbWVudCk6IENyZWF0ZSBhIEdlbmVyYWxUcmVlRWxlbWVudCBhbmQgc2V0IGEgZmV3IHByb3BlcnRpZXMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01TdG9yYWdlVHJlZUVsZW1lbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5ET01TdG9yYWdlVHJlZUVsZW1lbnQuc2V0IGZsYXR0ZW5lZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZSBhIG5ldyBzY3JpcHQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N0b3JhZ2VTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdG9yYWdlU2lkZWJhclBhbmVsKTogSW5pdGlhbGl6ZSBfbG9jYWxTdG9yYWdlVHJlZUVsZW1lbnQgYW5kIF9zZXNzaW9uU3RvcmFnZVRyZWVFbGVtZW50IHRvIG51bGwuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TdG9yYWdlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuU3RvcmFnZVNpZGViYXJQYW5lbC5fZG9tU3RvcmFnZU9iamVjdFdhc0FkZGVkKTogQ2FsbCBfYWRkQ2hpbGQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TdG9yYWdlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fYWRkQ2hpbGQpOiBUaGlzIG9iamVjdCBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgaGllcmFyY2h5IGRlc2NyaWJlZCBhYm92ZS4KICAgICAgICAgICAgLSBJZiB0aGVyZSBpcyBubyBjdXJyZW50IGNoaWxkLCBpdCB0ZWxscyB0aGUganVzdCBhZGRlZCBjaGlsZCB0aGF0IGl0IGlzIHRoZSBvbmx5IGNoaWxkLCBhbmQgd2lsbCBiZSBkaXNwbGF5ZWQgZmxhdHRlbmVkLgogICAgICAgICAgICAtIElmIHRoZSBjdXJyZW50IGNoaWxkIGlzIGEgRE9NU3RvcmFnZVRyZWVFbGVtZW50LCB3ZSBjcmVhdGUgYSBmb2xkZXIgYW5kIGFkZCB0aGUgcHJldmlvdXMgb25seSBjaGlsZCBhbmQgdGhlIGp1c3QgYWRkZWQgY2hpbGQKICAgICAgICAgICAgdG8gdGhlIGZvbGRlci4KICAgICAgICAgICAgLSBJZiB0aGUgY3VycmVudCBjaGlsZCBpcyBhIGZvbGRlciwgd2UgYXBwZW5kIHRoZSBqdXN0IGFkZGVkIGNoaWxkIHRvIHRoZSBmb2xkZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TdG9yYWdlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fc3RvcmFnZUNsZWFyZWQpOgoKMjAxMS0xMi0wNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CgogICAgICAgIE1vcmUgb2YgPHJkYXI6Ly9wcm9ibGVtLzEwMzE4NzQ0PiBJbXBsZW1lbnQgdGhlIFN0b3JhZ2Ugc2lkZWJhciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbi4KCiAgICAgICAgQ2xlYXIgdGhlIExvY2FsIFN0b3JhZ2UgYW5kIFNlc3Npb24gU3RvcmFnZSBmb2xkZXJzIHdoZW4gdGhlIG1haW4gcmVzb3VyY2Ugb2YgdGhlIG1haW4gZnJhbWUgY2hhbmdlcy4gVGhpcyBtZWFucwogICAgICAgIHRoYXQgd2UgYXJlIG5hdmlnYXRpbmcgdG8gYSBuZXcgc2l0ZSwgYW5kIHdlIHdhbnQgdG8gY2xlYXIgYWxsIG9mIHRoZSBzdG9yYWdlIGZvbGRlcnMuCgogICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyIGFuZCBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9TdG9yYWdlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VNYW5hZ2VyKTogTGlzdGVuIGZvciBNYWluUmVzb3VyY2VEaWRDaGFuZ2Ugb24gYWxsIGZyYW1lcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VNYW5hZ2VyLnByb3RvdHlwZS5fbWFpblJlc291cmNlRGlkQ2hhbmdlKTogSWYgdGhlIG1haW4gcmVzb3VyY2UgY2hhbmdlZCBmb3IgdGhlIG1haW4gZnJhbWUsIGZpcmUgYW4KICAgICAgICAgICAgZXZlbnQgc2F5aW5nIHN0b3JhZ2Ugd2FzIGNsZWFyZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N0b3JhZ2VTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdG9yYWdlU2lkZWJhclBhbmVsKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5TdG9yYWdlU2lkZWJhclBhbmVsLl9kb21TdG9yYWdlT2JqZWN0V2FzQWRkZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3N0b3JhZ2VDbGVhcmVkKTogUmVtb3ZlIHRoZSBjaGlsZHJlbiBmcm9tIHRoZSBsb2NhbCBzdG9yYWdlIGFuZCBzZXNzaW9uIHN0b3JhZ2UgZm9sZGVycy4KCjIwMTEtMTItMDcgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBNb3JlIG9mIDxyZGFyOi8vcHJvYmxlbS8xMDMxODc0ND4gSW1wbGVtZW50IHRoZSBTdG9yYWdlIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIEFkZCBmb2xkZXJzIGZvciBMb2NhbCBTdG9yYWdlIGFuZCBTZXNzaW9uIFN0b3JhZ2UsIGFuZCBhZGQgY2hpbGRyZW4gd2hlbiBET01TdG9yYWdlT2JzZXJ2ZXIuYWRkRE9NU3RvcmFnZSBpcyBjYWxsZWQuCgogICAgICAgIFRoZXNlIGl0ZW1zIGFyZSBuZXZlciByZW1vdmVkIHlldCwgd2Ugd2lsbCBuZWVkIHRvIGxpc3RlbiBmb3IgbWFpbiBmcmFtZSBuYXZpZ2F0aW9uLCBhbmQgY2xlYXIgdGhlIGZvbGRlcnMsIGJ1dAogICAgICAgIHRoYXQgd2lsbCBiZSBkb25lIGluIGEgZm9sbG93LXVwIHBhdGNoLgoKICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlciBhbmQgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NU3RvcmFnZU9iamVjdC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01TdG9yYWdlT2JqZWN0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VPYmplY3QucHJvdG90eXBlLmdldCBpZCk6IFJldHVybnMgdGhlIGlkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZU9iamVjdC5wcm90b3R5cGUuZ2V0IGRvbWFpbik6IFJldHVybnMgdGhlIGRvbWFpbi4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VPYmplY3QucHJvdG90eXBlLmdldCBpc0xvY2FsU3RvcmFnZSk6IFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIERPTSBzdG9yYWdlIGlzIGxvY2FsIHN0b3JhZ2UKICAgICAgICAgICAgKHZzLiBzZXNzaW9uIHN0b3JhZ2UpLgogICAgICAgICogVXNlckludGVyZmFjZS9ET01TdG9yYWdlT2JzZXJ2ZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01TdG9yYWdlT2JzZXJ2ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yLldlYkluc3BlY3Rvci5ET01TdG9yYWdlT2JzZXJ2ZXIuYWRkRE9NU3RvcmFnZSk6IENyZWF0ZSBhIG5ldyBET01TdG9yYWdlT2JqZWN0CiAgICAgICAgICAgIGFuZCB0ZWxsIHRoZSBTdG9yYWdlTWFuYWdlciBhYm91dCBpdC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IENyZWF0ZSB0aGUgU3RvcmFnZU1hbmFnZXIuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1N0b3JhZ2VNYW5hZ2VyLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VNYW5hZ2VyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuU3RvcmFnZU1hbmFnZXIuaW5pdGlhbGl6ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdG9yYWdlTWFuYWdlci5wcm90b3R5cGUuYWRkRE9NU3RvcmFnZSk6IFRlbGwgdGhlIFN0b3JhZ2VTaWRlYmFyUGFuZWwgd2UgYWRkZWQgYSBET01TdG9yYWdlT2JqZWN0LgogICAgICAgICogVXNlckludGVyZmFjZS9TdG9yYWdlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZVNpZGViYXJQYW5lbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TdG9yYWdlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5XZWJJbnNwZWN0b3IuU3RvcmFnZVNpZGViYXJQYW5lbC5fZG9tU3RvcmFnZU9iamVjdFdhc0FkZGVkKTogQWRkIGEgY2hpbGQgdG8gZWl0aGVyCiAgICAgICAgICAgIGxvY2FsIG9yIHNlc3Npb24gc3RvcmFnZS4KCjIwMTEtMTItMDUgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgoKICAgICAgICBQYXJ0IG9mIDxyZGFyOi8vcHJvYmxlbS8xMDMxODc0ND4gSW1wbGVtZW50IHRoZSBTdG9yYWdlIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24uCgogICAgICAgIEFkZCBTdG9yYWdlU2lkZWJhclBhbmVsLmpzLCBhbmQgaGF2ZSBpdCBjcmVhdGUgYSBuZXcgTmF2aWdhdGlvblNpZGViYXJQYW5lbC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIgYW5kIEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogQWRkIHRoZSBuZXcganMgZmlsZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOiBDYWxsIFdlYkluc3BlY3Rvci5TdG9yYWdlU2lkZWJhclBhbmVsLgogICAgICAgICogVXNlckludGVyZmFjZS9TdG9yYWdlU2lkZWJhclBhbmVsLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VTaWRlYmFyUGFuZWwpOgoKMjAxMS0xMi0wNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIENhbGwgV2ViSW5zcGVjdG9yLk9iamVjdC5hZGRDb25zdHJ1Y3RvckZ1bmN0aW9ucyBvbiBhbGwgdGhlIFdlYiBJbnNwZWN0b3IgY29uc3RydWN0b3JzIHRoYXQgZmlsZSBldmVudHMuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZpbHRlckJhci5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWUuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lUmVzb3VyY2VNYW5hZ2VyLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uQmFyLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZS5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2lkZWJhci5qczoKCjIwMTEtMTItMDUgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgc3VwcG9ydCBmb3IgbGlzdGVuaW5nIGZvciBldmVudHMgb24gY29uc3RydWN0b3JzLCB3aGljaCBnZXRzIG5vdGlmaWVkIG9mIGV2ZW50cyB0aGF0IGZpcmUKICAgICAgICBvbiBhbnkgb2YgdGhlIGluc3RhbmNlcyBvZiB0aGF0IGNvbnN0cnVjdG9yLgoKICAgICAgICBUaGlzIGxldHMgeW91IGRvIHRoaW5ncyBsaWtlIGxpc3RlbiBmb3IgbmF2aWdhdGlvbiBpbiBhbnkgZnJhbWUgYnkgZG9pbmc6CgogICAgICAgIFdlYkluc3BlY3Rvci5GcmFtZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5GcmFtZS5FdmVudC5NYWluUmVzb3VyY2VEaWRDaGFuZ2UsIC4uLikKCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvT2JqZWN0LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuT2JqZWN0LmFkZENvbnN0cnVjdG9yRnVuY3Rpb25zKTogQWRkZWQuIENvcGllcyB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zCiAgICAgICAgdGhlIHN1YmNsYXNzIGNvbnN0cnVjdG9yLgogICAgICAgIChXZWJJbnNwZWN0b3IuT2JqZWN0LmFkZEV2ZW50TGlzdGVuZXIpOiBDb3BpZWQgZnJvbSBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLk9iamVjdC5yZW1vdmVFdmVudExpc3RlbmVyKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5PYmplY3QucmVtb3ZlQWxsTGlzdGVuZXJzKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5PYmplY3QuaGFzRXZlbnRMaXN0ZW5lcnMpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcik6IFNldCB0byBXZWJJbnNwZWN0b3IuT2JqZWN0IHZlcnNpb24uCiAgICAgICAgKFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXIpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlLmhhc0V2ZW50TGlzdGVuZXJzKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyk6IERpc3BhdGNoIHRvIGxpc3RlbmVycyBvZiB0aGlzIHNwZWNpZmljIG9iamVjdCwKICAgICAgICBhbmQgdG8gbGlzdGVuZXJzIGludGVyZXN0ZWQgaW4gYWxsIGluc3RhbmNlcyBvZiB0aGlzIG9iamVjdCdzIGNvbnN0cnVjdG9yLgoKMjAxMS0xMi0wNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFVzZSBPYmplY3QuZGVmaW5lUHJvcGVydHkgZm9yIG91ciBleHRlbnNpb25zIGluIFdlYkluc3BlY3Rvci9VdGlsaXRpZXMuanMgc28gdGhleSBkb24ndCBzaG93CiAgICAgICAgdXAgd2hlbiBlbnVtZXJhdGluZyBpbnN0YW5jZXMuCgogICAgICAgIFRoaXMgcGF0Y2ggaGFzIHdoaXRlc3BhY2UgY2hhbmdlcyBzdHJpcHBlZCwgYnV0IHRoZSBpbmRlbnRhdGlvbiBpcyBjb3JyZWN0LgoKICAgICAgICBSZXZpZXdlZCBieSBBZGEgQ2hhbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1V0aWxpdGllcy5qczoKCjIwMTEtMTItMDUgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBQcm92aWRlIGEgZGlyZWN0IHdheSB0byBhc2sgaWYgYSBXZWJJbnNwZWN0b3IuRnJhbWUgaXMgdGhlIG1haW4gZnJhbWUuCgogICAgICAgIFRoaXMgaXMgb25seSBuZWVkZWQgaW4gb25lIHBsYWNlIHJpZ2h0IG5vdywgYnV0IGluIHRoZSBmdXR1cmUgaXQgd2lsbCBiZSBuZWVkZWQgaW4gbW9yZSBwbGFjZXMuCiAgICAgICAgQW5kIGNoZWNraW5nICFmcmFtZS5wYXJlbnRGcmFtZSBpcyBub3QgYW4gYWNjdXJhdGUgY2hlY2sgaWYgdGhlIGZyYW1lIGlzIGEgZGV0YWNoZWQgc3ViZnJhbWUuCgogICAgICAgIFJldmlld2VkIGJ5IEFkYSBDaGFuLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZS5wcm90b3R5cGUuaXNNYWluRnJhbWUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lLnByb3RvdHlwZS5tYXJrQXNNYWluRnJhbWUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lLnByb3RvdHlwZS51bm1hcmtBc01haW5GcmFtZSk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9GcmFtZVJlc291cmNlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5pbml0aWFsaXplKTogQ2FsbCB0aGUgcmVuYW1lZCBfbWFpbkZyYW1lRGlkQ2hhbmdlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLmZyYW1lRGlkTmF2aWdhdGUpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5mcmFtZURpZERldGFjaCk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLl9hZGROZXdSZXNvdXJjZVRvRnJhbWUpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5fcHJvY2Vzc01haW5GcmFtZVJlc291cmNlVHJlZVBheWxvYWQpOiBQYXNzIHRydWUgZm9yIGlzTWFpbkZyYW1lCiAgICAgICAgd2hlbiBjYWxsaW5nIF9hZGRGcmFtZVRyZWVGcm9tRnJhbWVSZXNvdXJjZVRyZWVQYXlsb2FkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLl9hZGRGcmFtZVRyZWVGcm9tRnJhbWVSZXNvdXJjZVRyZWVQYXlsb2FkKTogQ2FsbCBtYXJrQXNNYWluRnJhbWUoKQogICAgICAgIGlmIGlzTWFpbkZyYW1lIGlzIHRydWUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUuX21haW5GcmFtZURpZENoYW5nZSk6IFJlbmFtZWQgZnJvbSBfZGlzcGF0Y2hNYWluRnJhbWVEaWRDaGFuZ2VFdmVudAogICAgICAgIGFuZCBub3cgY2FsbHMgdW5tYXJrQXNNYWluRnJhbWUgYW5kIG1hcmtBc01haW5GcmFtZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZUVsZW1lbnQucHJvdG90eXBlLl91cGRhdGVUaXRsZXMpOiBVc2UgaXNNYWluRnJhbWUoKS4KCjIwMTEtMTItMDQgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBJbXBsZW1lbnQgV2ViSW5zcGVjdG9yLkZvbnRSZXNvdXJjZUNvbnRlbnRWaWV3LgoKICAgICAgICBUaGUgZm9udCBwcmV2aWV3IGluY2x1ZGVzIGhvcml6b250YWwgbGluZXMgc2hvd2luZyB0aGUgdG9wLCBib3R0b20sIG1pZGRsZSBhbmQgYmFzZWxpbmUgQ1NTIGFsaWdubWVudHMuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDQ4ODQyMj4gSW1wbGVtZW50IFJlc291cmNlIHZpZXdzIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZvbnRSZXNvdXJjZUNvbnRlbnRWaWV3LmNzczogQWRkZWQuCiAgICAgICAgKC5jb250ZW50LXZpZXcucmVzb3VyY2UuZm9udCk6CiAgICAgICAgKC5jb250ZW50LXZpZXcucmVzb3VyY2UuZm9udCAucHJldmlldyk6CiAgICAgICAgKC5jb250ZW50LXZpZXcucmVzb3VyY2UuZm9udCAucHJldmlldyA+IC5saW5lKToKICAgICAgICAoLmNvbnRlbnQtdmlldy5yZXNvdXJjZS5mb250IC5wcmV2aWV3ID4gLmxpbmUgPiAuY29udGVudCk6CiAgICAgICAgKC5jb250ZW50LXZpZXcucmVzb3VyY2UuZm9udCAucHJldmlldyA+IC5saW5lID4gLm1ldHJpYyk6CiAgICAgICAgKC5jb250ZW50LXZpZXcucmVzb3VyY2UuZm9udCAubWV0cmljLnRvcCk6CiAgICAgICAgKC5jb250ZW50LXZpZXcucmVzb3VyY2UuZm9udCAubWV0cmljLmJhc2VsaW5lKToKICAgICAgICAoLmNvbnRlbnQtdmlldy5yZXNvdXJjZS5mb250IC5tZXRyaWMubWlkZGxlKToKICAgICAgICAoLmNvbnRlbnQtdmlldy5yZXNvdXJjZS5mb250IC5tZXRyaWMuYm90dG9tKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRm9udFJlc291cmNlQ29udGVudFZpZXcuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Gb250UmVzb3VyY2VDb250ZW50Vmlldyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Gb250UmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IHByZXZpZXdFbGVtZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkZvbnRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5zaXplVG9GaXQpOiBTdGFydCBhdCB0aGUgbWF4aW11bSBzaXplIGFuZCB0cnkgZWFjaAogICAgICAgIGZvbnQgc2l6ZSB1bnRpbCBtaW5pbXVtIGlzIHJlYWNoZWQuIFN0b3Agd2hlbiB0aGUgcHJldmlldyBlbGVtZW50IGlzIG5vdCBhcyB3aWRlIGFzIHRoZSBtYWluIGVsZW1lbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Gb250UmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUuY29udGVudEF2YWlsYWJsZS5jcmVhdGVNZXRyaWNFbGVtZW50KTogSGVscGVyIGZ1bmN0aW9uLgogICAgICAgIChXZWJJbnNwZWN0b3IuRm9udFJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLmNvbnRlbnRBdmFpbGFibGUpOiBDcmVhdGUgdGhlIGVsZW1lbnRzIGZvciB0aGUgcHJldmlldy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZvbnRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5zaG93bik6IEFkZCB0aGUgc3R5bGUgZWxlbWVudCBzaW5jZSBpdCBpcyByZW1vdmVkIHdoZW4gaGlkZGVuLgogICAgICAgIChXZWJJbnNwZWN0b3IuRm9udFJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLmhpZGRlbik6IFJlbW92ZSB0aGUgc3R5bGUgZWxlbWVudCBzbyBpdCB3aWxsIG5vdCBzdGljayBhcm91bmQKICAgICAgICB3aGVuIHRoaXMgY29udGVudCB2aWV3IGlzIGRlc3Ryb3llZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlZCBGb250UmVzb3VyY2VDb250ZW50Vmlldy5jc3MuCgoyMDExLTEyLTAzICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgSW1wbGVtZW50IFdlYkluc3BlY3Rvci5JbWFnZVJlc291cmNlQ29udGVudFZpZXcuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDQ4ODQyMj4gSW1wbGVtZW50IFJlc291cmNlIHZpZXdzIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlUmVzb3VyY2VDb250ZW50Vmlldy5jc3M6IEFkZGVkLgogICAgICAgICguY29udGVudC12aWV3LnJlc291cmNlLmltYWdlKTogVmVydGljYWxseSBhbmQgaG9yaXpvbnRhbGx5IGNlbnRlciB0aGUgaW1hZ2UuCiAgICAgICAgKC5jb250ZW50LXZpZXcucmVzb3VyY2UuaW1hZ2UgaW1nKTogU2V0IG1heCB3aWR0aCB0byAxMDAlIGFuZCBhbGxvdyBkcmFnZ2luZy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VSZXNvdXJjZUNvbnRlbnRWaWV3LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSW1hZ2VSZXNvdXJjZUNvbnRlbnRWaWV3KTogSW5pdGlhbGl6ZSBfaW1hZ2VFbGVtZW50IHRvIG51bGwuCiAgICAgICAgKFdlYkluc3BlY3Rvci5JbWFnZVJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLmdldCBpbWFnZUVsZW1lbnQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkltYWdlUmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUuY29udGVudEF2YWlsYWJsZSk6IEFkZGVkLiBDcmVhdGUgYW5kIGFwcGVuZCB0aGUgX2ltYWdlRWxlbWVudC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlZCBJbWFnZVJlc291cmNlQ29udGVudFZpZXcuY3NzLgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5nZXQgY29udGVudFVSTCk6IEFkZGVkLiBDcmVhdGUgYSBkYXRhIFVSTCBpZiBwb3NzaWJsZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlQ29udGVudFZpZXcpOiBDYWxsIHJlcXVlc3RDb250ZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUuY29udGVudEF2YWlsYWJsZSk6IEFkZGVkLiBJbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzLgoKMjAxMS0xMi0wNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFNlbGVjdCB0aGUgbWFpbiByZXNvdXJjZSB3aGVuIG9wZW5pbmcgdGhlIFdlYiBJbnNwZWN0b3IgYW5kIHdoZW4gdGhlIGluc3BlY3RlZCBwYWdlIG5hdmlnYXRlcy4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwNDg4NDIyPiBJbXBsZW1lbnQgUmVzb3VyY2Ugdmlld3MgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VTaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX21haW5GcmFtZURpZENoYW5nZSk6IFNlbGVjdCBhbmQgZXhwYW5kIHRoZSBtYWluCiAgICAgICAgcmVzb3VyY2Ugc28gc29tZXRoaW5nIGlzIHNlbGVjdGVkIGJ5IGRlZmF1bHQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX21haW5GcmFtZU1haW5SZXNvdXJjZURpZENoYW5nZSk6IFNlbGVjdCB0aGUgbWFpbgogICAgICAgIHJlc291cmNlIHNpbmNlIHRoZXJlIGFyZSBubyBvdGhlciByZXNvdXJjZXMgbm93LgoKMjAxMS0xMi0wNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIENsb3NlIGFsbCByZXNvdXJjZSBjb250ZW50IHZpZXdzIHdoZW4gdGhlIGluc3BlY3RlZCBwYWdlIG5hdmlnYXRlcyBpbiB0aGUgbWFpbiBmcmFtZS4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwNDg4NDIyPiBJbXBsZW1lbnQgUmVzb3VyY2Ugdmlld3MgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudFZpZXdDb250YWluZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlld0NvbnRhaW5lci5wcm90b3R5cGUuY2xvc2VBbGxDb250ZW50Vmlld3NPZlByb3RvdHlwZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdDb250YWluZXIucHJvdG90eXBlLmNsb3NlQWxsQ29udGVudFZpZXdzKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9tYWluRnJhbWVEaWRDaGFuZ2UpOiBSZW1vdmUgYW4gZXZlbnQgbGlzdGVuZXIgZnJvbQogICAgICAgIHRoZSBvbGQgZnJhbWUgYW5kIGFkZCBhbiBldmVudCBsaXN0ZW5lciBmb3IgTWFpblJlc291cmNlRGlkQ2hhbmdlIG9uIHRoZSBuZXcgZnJhbWUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX21haW5GcmFtZU1haW5SZXNvdXJjZURpZENoYW5nZSk6IEFkZGVkLiBDYWxsCiAgICAgICAgY2xvc2VBbGxDb250ZW50Vmlld3NPZlByb3RvdHlwZSB3aXRoIFdlYkluc3BlY3Rvci5SZXNvdXJjZUNvbnRlbnRWaWV3IG9uIHRoZSBtYWluIGNvbnRlbnQgY29udGFpbmVyLgoKMjAxMS0xMi0wNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIE1ha2Ugc2VsZWN0aW5nIGEgcmVzb3VyY2UgaW4gdGhlIFJlc291cmNlcyBzaWRlYmFyIHNob3cgdGhlIGNvbnRlbnQgdmlldyBmb3IgdGhhdCByZXNvdXJjZS4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwNDg4NDIyPiBJbXBsZW1lbnQgUmVzb3VyY2Ugdmlld3MgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudFZpZXdDb250YWluZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlld0NvbnRhaW5lci5wcm90b3R5cGUuY29udGVudFZpZXdGb3JSZXByZXNlbnRlZE9iamVjdCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdDb250YWluZXIucHJvdG90eXBlLnNob3dDb250ZW50Vmlld0ZvclJlcHJlc2VudGVkT2JqZWN0KTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwpOiBTZXQgb25zZWxlY3QgdG8gX3RyZWVFbGVtZW50U2VsZWN0ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3RyZWVFbGVtZW50U2VsZWN0ZWQpOiBBZGRlZC4gQ2FsbCBzaG93Q29udGVudFZpZXdGb3JSZXByZXNlbnRlZE9iamVjdAogICAgICAgIG9uIHRoZSBtYWluIGNvbnRlbnQgY29udGFpbmVyLgoKMjAxMS0xMi0wNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBzdXBwb3J0IGZvciBrbm93aW5nIHdoZW4gYSBUcmVlRWxlbWVudCBpcyBzZWxlY3RlZC9kZXNlbGVjdGVkIGluIGEgVHJlZU91dGxpbmUuCgogICAgICAgIFRoZXJlIGlzIGFscmVhZHkgVHJlZUVsZW1lbnQub25zZWxlY3Qgd2hpY2ggaGFzIGJlZW4gdXNlZCBpbiB0aGUgcGFzdCwKICAgICAgICBidXQgaGF2aW5nIGEgdHJlZS13aWRlIG5vdGlmaWNhdGlvbiBvZiBzZWxlY3Rpb24gY2hhbmdlcyBtYWtlcyBpdCBlYXNpZXIKICAgICAgICB0byBpbXBsZW1lbnQgY2VydGFpbiB0aGluZ3MuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RyZWVPdXRsaW5lLmpzOgogICAgICAgIChUcmVlRWxlbWVudC5wcm90b3R5cGUuc2VsZWN0KTogQ2FsbCBvbnNlbGVjdCBvbiB0aGUgVHJlZU91dGxpbmUgaWYgaXQgZXhpc3RzLgogICAgICAgIChUcmVlRWxlbWVudC5wcm90b3R5cGUuZGVzZWxlY3QpOiBDYWxsIG9uZGVzZWxlY3Qgb24gdGhlIFRyZWVPdXRsaW5lIGlmIGl0IGV4aXN0cy4KCjIwMTEtMTItMDUgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBTdXBwb3J0IHJlc291cmNlIHR5cGUgY2hhbmdlcyBieSBtYWtpbmcgYSBuZXcgUmVzb3VyY2VDb250ZW50VmlldyBhbmQgcmVwbGFjaW5nIHRoZSBvbGQgb25lLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTA0ODg0MjI+IEltcGxlbWVudCBSZXNvdXJjZSB2aWV3cyBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZW50Vmlld0NvbnRhaW5lci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3Q29udGFpbmVyLnByb3RvdHlwZS5yZXBsYWNlQ29udGVudFZpZXcpOiBBZGRlZC4gRmluZCBhbGwgaW5zdGFuY2VzIG9mIHRoZSBvbGQgb25lCiAgICAgICAgYW5kIHJlcGxhY2UgaXQgd2l0aCB0aGUgbmV3IG9uZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VDb250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlQ29udGVudFZpZXcpOiBBZGQgZXZlbnQgbGlzdGVuZXIgZm9yIFR5cGVEaWRDaGFuZ2UuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fcmVzb3VyY2VUeXBlRGlkQ2hhbmdlKTogQWRkZWQuIE1ha2UgYSBuZXcgUmVzb3VyY2VDb250ZW50VmlldwogICAgICAgIHdoaWNoIHdpbGwgdXNlIHRoZSBuZXcgcmVzb3VyY2UgdHlwZSB0byBtYWtlIHRoZSBjb3JyZWN0IGNvbmNyZXRlIFJlc291cmNlQ29udGVudFZpZXcgc3ViY2xhc3MuCgoyMDExLTEyLTA1ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIHRoZSAiY29uc3RydWN0b3IiIHByb3BlcnR5IHRvIGFsbCBwcm90b3R5cGVzIGluIHRoZSBXZWIgSW5zcGVjdG9yLgoKICAgICAgICBXaGlsZSB3b3JraW5nIG9uIGEgY2hhbmdlIHRoYXQgcmVxdWlyZXMgdGhlIGNvbnN0cnVjdG9yLCBJIGZvdW5kIGl0IHdhcyBhbHdheXMgT2JqZWN0LgogICAgICAgIFRoaXMgaXMgYmVjYXVzZSAodGhhbmtzIEdhdmluKSB0aGUgImNvbnN0cnVjdG9yIiBwcm9wZXJ0eSBpcyBhZGRlZCBhdCBydW50aW1lIGR1cmluZwogICAgICAgIHRoZSBmaXJzdCBsb29rdXAgb2YgdGhlICJwcm90b3R5cGUiIHByb3BlcnR5IHNsb3QuIEJ1dCB3aGVuICJwcm90b3R5cGUiIGlzIGFzc2lnbmVkLAogICAgICAgIGxpa2Ugd2UgZG8gaW4gdGhlIFdlYiBJbnNwZWN0b3IsIHRoZSAiY29uc3RydWN0b3IiIHByb3BlcnR5IGlzbid0IHByZXNlbnQuCgogICAgICAgIFJldmlld2VkIGJ5IEpvaG4gU3VsbGl2YW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9BcHBsaWNhdGlvbkNhY2hlT2JzZXJ2ZXIuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnNvbGVPYnNlcnZlci5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudFZpZXcuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRWaWV3Q29udGFpbmVyLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9ET01PYnNlcnZlci5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRE9NU3RvcmFnZU9ic2VydmVyLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9EYXRhYmFzZU9ic2VydmVyLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9EZWJ1Z2dlck9ic2VydmVyLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9GaWx0ZXJCYXIuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZvbGRlclRyZWVFbGVtZW50LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9Gb250UmVzb3VyY2VDb250ZW50Vmlldy5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWUuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lUmVzb3VyY2VNYW5hZ2VyLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9GcmFtZVRyZWVFbGVtZW50LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9HZW5lcmFsVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0dlbmVyaWNSZXNvdXJjZUNvbnRlbnRWaWV3LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZVJlc291cmNlQ29udGVudFZpZXcuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3BlY3Rvck9ic2VydmVyLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uQmFyLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9OZXR3b3JrT2JzZXJ2ZXIuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL09iamVjdC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUGFnZU9ic2VydmVyLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZS5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VDb2xsZWN0aW9uLmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZUNvbnRlbnRWaWV3LmpzOgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VUcmVlRWxlbWVudC5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2lkZWJhci5qczoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGV4dFJlc291cmNlQ29udGVudFZpZXcuanM6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RyZWVPdXRsaW5lLmpzOgoKMjAxMS0xMi0wNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFuZCBXZWJJbnNwZWN0b3IuUmVzb3VyY2VDb250ZW50VmlldyBhbmQgY29uY3JldGUgc3ViY2xhc3NlcyBmb3IgVGV4dCwgSW1hZ2UgYW5kIEZvbnQgcmVzb3VyY2VzLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTA0ODg0MjI+IEltcGxlbWVudCBSZXNvdXJjZSB2aWV3cyBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZW50Vmlldy5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3KTogQ3JlYXRlIFJlc291cmNlQ29udGVudFZpZXdzIGZvciBSZXNvdXJjZXMgYW5kIEZyYW1lcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRm9udFJlc291cmNlQ29udGVudFZpZXcuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRm9udFJlc291cmNlQ29udGVudFZpZXcpOgogICAgICAgICogVXNlckludGVyZmFjZS9HZW5lcmljUmVzb3VyY2VDb250ZW50Vmlldy5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5HZW5lcmljUmVzb3VyY2VDb250ZW50Vmlldyk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlUmVzb3VyY2VDb250ZW50Vmlldy5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5JbWFnZVJlc291cmNlQ29udGVudFZpZXcpOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEluY2x1ZGVkIG5ldyBmaWxlcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VDb250ZW50Vmlldy5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZUNvbnRlbnRWaWV3KTogV2hlbiBpbnN0YW50aWF0ZWQgZGlyZWN0bHkgcmV0dXJuIGFuIGluc3RhbmNlIG9mIGEgdHlwZS1iYXNlZCBjb25jcmV0ZSBzdWJjbGFzcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLmdldCByZXNvdXJjZSk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1RleHRSZXNvdXJjZUNvbnRlbnRWaWV3LmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3KToKCjIwMTEtMTItMDUgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgYmFjay9mb3J3YXJkIHN1cHBvcnQgdG8gV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3Q29udGFpbmVyLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9Db250ZW50Vmlld0NvbnRhaW5lci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3Q29udGFpbmVyKTogSW5pdGlhbGl6ZSBfYmFja0ZvcndhcmRMaXN0IGFuZCBfY3VycmVudEluZGV4LgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdDb250YWluZXIucHJvdG90eXBlLmdldCBjdXJyZW50SW5kZXgpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3Q29udGFpbmVyLnByb3RvdHlwZS5nZXQgYmFja0ZvcndhcmRMaXN0KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlld0NvbnRhaW5lci5wcm90b3R5cGUuZ2V0IGN1cnJlbnRDb250ZW50Vmlldyk6IFVzZSBfYmFja0ZvcndhcmRMaXN0IGFuZCBfY3VycmVudEluZGV4LgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdDb250YWluZXIucHJvdG90eXBlLnNob3dDb250ZW50Vmlldyk6IEluc2VydCB0aGUgY29udGVudCB2aWV3IGF0IHRoZSBuZXcgY3VycmVudCBpbmRleC4KICAgICAgICBUaGlzIHdpbGwgcmVtb3ZlIGFueSBjb250ZW50IHZpZXdzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgaW5kZXguIENhbGwgc2hvd0JhY2tGb3J3YXJkRW50cnkgZm9yIHRoZSBpbmRleC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3Q29udGFpbmVyLnByb3RvdHlwZS5zaG93QmFja0ZvcndhcmRFbnRyeSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdDb250YWluZXIucHJvdG90eXBlLmNhbkdvQmFjayk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdDb250YWluZXIucHJvdG90eXBlLmNhbkdvRm9yd2FyZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdDb250YWluZXIucHJvdG90eXBlLmdvQmFjayk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdDb250YWluZXIucHJvdG90eXBlLmdvRm9yd2FyZCk6IEFkZGVkLgoKMjAxMS0xMi0wNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBXZWJJbnNwZWN0b3IuQ29udGVudFZpZXcgYW5kIFdlYkluc3BlY3Rvci5Db250ZW50Vmlld0NvbnRhaW5lci4KCiAgICAgICAgVGhlc2UgY2xhc3NlcyB3aWxsIGJlIHVzZWQgdG8gZGlzcGxheSBjb250ZW50IGZvciByZXNvdXJjZXMgYW5kIG90aGVyIGRhdGEuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRlbnRWaWV3LmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgZWxlbWVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IHBhcmVudENvbnRhaW5lcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IHZpc2libGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXcucHJvdG90eXBlLnNldCB2aXNpYmxlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3LnByb3RvdHlwZS5zaG93bik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZW50Vmlldy5wcm90b3R5cGUuaGlkZGVuKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudFZpZXdDb250YWluZXIuY3NzOiBBZGRlZC4KICAgICAgICAoLmNvbnRlbnQtdmlldy1jb250YWluZXIpOiBEaXNwbGF5IHJlbGF0aXZlIHRvIGFsbG93IHBvc2l0aW9uZWQgY29udGVudC4KICAgICAgICAoLmNvbnRlbnQtdmlldy1jb250YWluZXIgPiAuY29udGVudC12aWV3KTogUG9zaXRpb24gdG8gZmlsbCB0aGUgY29udGFpbmVyLgogICAgICAgICguY29udGVudC12aWV3LWNvbnRhaW5lciA+IC5jb250ZW50LXZpZXc6bm90KC52aXNpYmxlKSk6IERpc3BsYXkgbm9uZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGVudFZpZXdDb250YWluZXIuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdDb250YWluZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdDb250YWluZXIucHJvdG90eXBlLmdldCBlbGVtZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3Q29udGFpbmVyLnByb3RvdHlwZS5nZXQgY3VycmVudENvbnRlbnRWaWV3KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3Q29udGFpbmVyLnByb3RvdHlwZS5zaG93Q29udGVudFZpZXcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdDb250YWluZXIucHJvdG90eXBlLl9hZGRDb250ZW50Vmlld0VsZW1lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdDb250YWluZXIucHJvdG90eXBlLl9yZW1vdmVDb250ZW50Vmlld0VsZW1lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdDb250YWluZXIucHJvdG90eXBlLl9zaG93Q29udGVudFZpZXcpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdDb250YWluZXIucHJvdG90eXBlLl9oaWRlQ29udGVudFZpZXcpOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmNzczoKICAgICAgICAoI2NvbnRlbnQtdmlld3MpOiBSZW5hbWVkIGZyb20gI2NvbnRlbnQtcGFuZWxzLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEluY2x1ZGVkIENvbnRlbnRWaWV3Q29udGFpbmVyLmpzIGFuZCBDb250ZW50Vmlld0NvbnRhaW5lci5jc3MuIEFsc28gcmVuYW1lZAogICAgICAgIGNvbnRlbnQtcGFuZWxzIHRvIGNvbnRlbnQtdmlld3MuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKTogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIENvbnRlbnRWaWV3Q29udGFpbmVyIHRoYXQgdXNlcyB0aGUgI2NvbnRlbnQtdmlld3MgZGl2LgoKMjAxMS0xMi0wNSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBzdXBwb3J0IGZvciBnZXR0aW5nIHRoZSBjb250ZW50IG9mIGEgcmVzb3VyY2UgaW4gcHJlcGFyYXRpb24gZm9yIHNob3dpbmcgdGhhdCBjb250ZW50LgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTA0ODg0MjI+IEltcGxlbWVudCBSZXNvdXJjZSB2aWV3cyBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlKTogSW5pdGlhbGl6ZSBfY29udGVudCwgX3BlbmRpbmdDb250ZW50UmVxdWVzdENhbGxiYWNrcyBhbmQgX2NvbnRlbnRJc0Jhc2U2NEVuY29kZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUuZ2V0IGNvbnRlbnQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5nZXQgY29udGVudElzQmFzZTY0RW5jb2RlZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLnJlcXVlc3RDb250ZW50KTogQWRkZWQuIFF1ZXVlcyB0aGUgY2FsbGJhY2sgYW5kIHJlcXVlc3RzIHRoZSBjb250ZW50IGlmIG5lZWRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5tYXJrQXNGaW5pc2hlZCk6IENhbGwgX3JlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQgaWYgdGhlcmUgYXJlIHBlbmRpbmcgcmVxdWVzdHMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUubWFya0FzRmFpbGVkKTogQ2FsbCBfc2VydmljZVBlbmRpbmdDb250ZW50UmVxdWVzdHMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUuX3JlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQpOiBBZGRlZC4gVXNlIHRoZSBOZXR3b3JrUGFnZUFnZW50IGRlcGVuZGluZyBvbiBpZgogICAgICAgIHdlIGhhdmUgYSByZXF1ZXN0SWRlbnRpZmllciBmb3IgdGhpcyBSZXNvdXJjZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5fcHJvY2Vzc0NvbnRlbnQpOiBBZGRlZC4gU3RvcmUgdGhlIGNvbnRlbnQgYW5kIGNhbGwgX3NlcnZpY2VQZW5kaW5nQ29udGVudFJlcXVlc3RzLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLl9zZXJ2aWNlUGVuZGluZ0NvbnRlbnRSZXF1ZXN0cyk6IEFkZGVkLiBDYWxsIGFsbCB0aGUgcGVuZGluZyBjYWxsYmFja3Mgd2l0aCB0aGUgY29udGVudC4KCjIwMTEtMTItMDUgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBNYXJrIHJlc291cmNlcyBsb2FkZWQgZnJvbSB0aGUgbWVtb3J5IGNhY2hlIGFzIGZpbmlzaGVkIGluIHRoZSBXZWIgSW5zcGVjdG9yIHNvIHRoZWlyIGNvbnRlbnQgY2FuIGJlIHJlcXVlc3RlZC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWVSZXNvdXJjZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUucmVzb3VyY2VSZXF1ZXN0V2FzU2VydmVkRnJvbU1lbW9yeUNhY2hlKTogQ2FsbCBtYXJrQXNGaW5pc2hlZC4KCjIwMTEtMTItMDUgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgcmVxdWVzdElkZW50aWZpZXIgdG8gV2ViSW5zcGVjdG9yLlJlc291cmNlLgoKICAgICAgICBUaGUgcmVxdWVzdElkZW50aWZpZXIgd2lsbCBiZSBuZWVkZWQgZm9yIGdldHRpbmcgdGhlIHJlc291cmNlIGNvbnRlbnQgZnJvbSB0aGUgYmFja2VuZC4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWVSZXNvdXJjZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUuZnJhbWVEaWROYXZpZ2F0ZSk6IFBhc3MgbnVsbCBmb3IgdGhlIHJlcXVlc3RJZGVudGlmaWVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLnJlc291cmNlUmVxdWVzdFdpbGxCZVNlbnQpOiBQYXNzIHRoZSByZXF1ZXN0SWRlbnRpZmllci4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5yZXNvdXJjZVJlcXVlc3RXYXNTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGUpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5yZXNvdXJjZVJlcXVlc3REaWRSZWNlaXZlUmVzcG9uc2UpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5fYWRkTmV3UmVzb3VyY2VUb0ZyYW1lKTogQWRkZWQgcmVxdWVzdElkZW50aWZpZXIgcGFyYW1ldGVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLl9jcmVhdGVGcmFtZSk6IFBhc3MgbnVsbCBmb3IgcmVxdWVzdElkZW50aWZpZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUuX2NyZWF0ZVJlc291cmNlKTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UpOiBBZGRlZCByZXF1ZXN0SWRlbnRpZmllciBwYXJhbWV0ZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUuZ2V0IHJlcXVlc3RJZGVudGlmaWVyKTogQWRkZWQuCgoyMDExLTEyLTA1ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgT3ZlcnJpZGUgdGhlIGN1cnNvciB0byBwcmV2ZW50IHRoZSBJLWJlYW0gb3ZlciB2YXJpb3VzIHRleHQgVUkgZWxlbWVudHMgaW4gdGhlIFdlYiBJbnNwZWN0b3IuCgogICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmNzczoKICAgICAgICAoYm9keSk6IFNldCBjdXJzb3IgdG8gZGVmYXVsdC4KCjIwMTEtMTItMDUgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBDYWxsIHByZXZlbnREZWZhdWx0IGFuZCBzdG9wUHJvcGFnYXRpb24gaW4gdmFyaW91cyBldmVudCBsaXN0ZW5lcnMgaW4gdGhlIFdlYiBJbnNwZWN0b3IuCgogICAgICAgIFRoaXMgcHJldmVudHMgdGV4dCBzZWxlY3Rpb24gd2hpbGUgZHJhZ2dpbmcgdGhlIHNpZGViYXIgcmVzaXplciBvciBzY3J1YmJpbmcgYSBuYXZpZ2F0aW9uIGJhci4KICAgICAgICBJdCBhbHNvIHByZXZlbnRzIHRleHQgc2VsZWN0aW9uIHdoZW4gZG91YmxlIGNsaWNraW5nIHRoZSBzaWRlYmFyIHJlc2l6ZXIuCgogICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uQmFyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvbkJhci5wcm90b3R5cGUuX21vdXNlRG93bik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uQmFyLnByb3RvdHlwZS5fbW91c2VNb3ZlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uQmFyLnByb3RvdHlwZS5fbW91c2VVcCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uQmFyLnByb3RvdHlwZS5fa2V5RG93bik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NpZGViYXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyLnByb3RvdHlwZS5fcmVzaXplckRvdWJsZUNsaWNrZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2lkZWJhci5wcm90b3R5cGUuX3Jlc2l6ZXJNb3VzZURvd24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2lkZWJhci5wcm90b3R5cGUuX3Jlc2l6ZXJNb3VzZU1vdmVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXIucHJvdG90eXBlLl9yZXNpemVyTW91c2VVcCk6CgoyMDExLTEyLTA1ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIGEgYnVpbGQgcGhhc2UgY29weSBvZiBJbnNwZWN0b3JCYWNrZW5kLmpzIGZyb20gV2ViQ29yZSBhbmQgcmVuYW1lIHRoZQogICAgICAgIEluc3BlY3RvckJhY2tlbmRTdHViLmpzIGNvcGllZCBmaWxlIHRvIEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy4KCiAgICAgICAgVGhlIEluc3BlY3RvckJhY2tlbmQuanMgZmlsZSBzcGxpdCBvdXQgb2YgdGhlIGdlbmVyYXRlZCBJbnNwZWN0b3JCYWNrZW5kU3R1Yi5qcwogICAgICAgIGluIHIxMDE2NzAsIGFuZCBib3RoIGZpbGVzIGFyZSBuZWVkZWQgdG8gYmUgdXNlZnVsLgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEluY2x1ZGUgSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLgogICAgICAgICogV2ViSW5zcGVjdG9yVUkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogVXBkYXRlIHRoZSBXZWJDb3JlIEluc3BlY3RvciBSZXNvdXJjZXMgYnVpbGQgcGFoc2UuCgoyMDExLTExLTI5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIFdlYkluc3BlY3Rvci5SZXNvdXJjZUNvbGxlY3Rpb24gdG8gc2ltcGxpZnkgcGFydHMgb2YgV2ViSW5zcGVjdG9yLkZyYW1lLgoKICAgICAgICBUaGUgUmVzb3VyY2VDb2xsZWN0aW9uIGNsYXNzIHRyYWNrcyByZXNvdXJjZXMgaXQgaG9sZHMgZm9yIFVSTCBhbmQgdHlwZSBjaGFuZ2VzCiAgICAgICAgYW5kIHVwZGF0ZXMgaW50ZXJuYWwgbWFwcGluZ3MgYWNjb3JkaW5nbHkuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUpOiBDcmVhdGUgYSBSZXNvdXJjZUNvbGxlY3Rpb24gaW5zdGVhZCBvZiBtdWx0aXBsZSBhcnJheXMvbWFwcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lLnByb3RvdHlwZS5pbml0aWFsaXplKTogQ2FsbCBjbGVhclByb3Zpc2lvbmFsTG9hZCBiZWZvcmUgdGhlIG1haW4KICAgICAgICByZXNvdXJjZSBkaWQgY2hhbmdlIGV2ZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLnN0YXJ0UHJvdmlzaW9uYWxMb2FkKTogQ3JlYXRlIGEgcHJvdmlzaW9uYWwgUmVzb3VyY2VDb2xsZWN0aW9uLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLmNvbW1pdFByb3Zpc2lvbmFsTG9hZCk6IENvbW1pdCB0aGUgcHJvdmlzaW9uYWwgUmVzb3VyY2VDb2xsZWN0aW9uLgogICAgICAgIEFkZGVkIGFuIGVhcmx5IHJldHVybiB0byBwcmV2ZW50IGV4Y2VwdGlvbnMgaWYgdGhpcyBpcyBjYWxsZWQgd2hlbiB0aGVyZSBpc24ndCBwcm92aXNpb25hbCBsb2FkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLmNsZWFyUHJvdmlzaW9uYWxMb2FkKTogQWRkZWQgYW4gZWFybHkgcmV0dXJuIGFuZCBjbGVhciB0aGUgUmVzb3VyY2VDb2xsZWN0aW9uLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLmdldCByZXNvdXJjZXMpOiBVc2UgUmVzb3VyY2VDb2xsZWN0aW9uLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLnJlc291cmNlRm9yVVJMKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZS5wcm90b3R5cGUucmVzb3VyY2VzV2l0aFR5cGUpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lLnByb3RvdHlwZS5hZGRSZXNvdXJjZSk6IE1vdmVkIHRoZSBhZGQgY29kZSBmcm9tIF9hc3NvY2lhdGVXaXRoUmVzb3VyY2UgYW5kIHVzZSB0aGUKICAgICAgICBuZXcgX2lzUHJvdmlzaW9uYWxSZXNvdXJjZSBmdW5jdGlvbiB0byBjaGVjayB3aGljaCBSZXNvdXJjZUNvbGxlY3Rpb24gdG8gYWRkIHRoZSByZXNvdXJjZSB0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lLnByb3RvdHlwZS5yZW1vdmVSZXNvdXJjZSk6IFVzZSBSZXNvdXJjZUNvbGxlY3Rpb24uCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZS5wcm90b3R5cGUucmVtb3ZlQWxsUmVzb3VyY2VzKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZS5wcm90b3R5cGUuX2lzUHJvdmlzaW9uYWxSZXNvdXJjZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLl9hc3NvY2lhdGVXaXRoUmVzb3VyY2UpOiBPbmx5IHNldCBfY2hpbGRGcmFtZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lLnByb3RvdHlwZS5fZGlzYXNzb2NpYXRlV2l0aFJlc291cmNlKTogT25seSBjbGVhciBfY2hpbGRGcmFtZS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlZCBSZXNvdXJjZUNvbGxlY3Rpb24uanMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlQ29sbGVjdGlvbi5qczogQWRkZWQuIEJyb2tlbiBvdXQgb2YgRnJhbWUuanMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZUNvbGxlY3Rpb24pOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VDb2xsZWN0aW9uLnByb3RvdHlwZS5nZXQgcmVzb3VyY2VzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlQ29sbGVjdGlvbi5wcm90b3R5cGUucmVzb3VyY2VGb3JVUkwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VDb2xsZWN0aW9uLnByb3RvdHlwZS5yZXNvdXJjZXNXaXRoVHlwZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZUNvbGxlY3Rpb24ucHJvdG90eXBlLmFkZFJlc291cmNlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlQ29sbGVjdGlvbi5wcm90b3R5cGUucmVtb3ZlUmVzb3VyY2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VDb2xsZWN0aW9uLnByb3RvdHlwZS5yZW1vdmVBbGxSZXNvdXJjZXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VDb2xsZWN0aW9uLnByb3RvdHlwZS5fYXNzb2NpYXRlV2l0aFJlc291cmNlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlQ29sbGVjdGlvbi5wcm90b3R5cGUuX2Rpc2Fzc29jaWF0ZVdpdGhSZXNvdXJjZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZUNvbGxlY3Rpb24ucHJvdG90eXBlLl9yZXNvdXJjZVVSTERpZENoYW5nZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZUNvbGxlY3Rpb24ucHJvdG90eXBlLl9yZXNvdXJjZVR5cGVEaWRDaGFuZ2UpOgoKMjAxMS0xMS0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEltcHJvdmUgZ2xvYiBmaWx0ZXJpbmcgaW4gdGhlIFJlc291cmNlcyBzaWRlYmFyIG9mIHRoZSBuZXcgV2ViIEluc3BlY3Rvci4KCiAgICAgICAgTWF0Y2ggZWRnZSBib3VuZGFyaWVzIHdoZW4gdGhlcmUgaXMgYW4gYXN0ZXJpc2sgdG8gYmV0dGVyIG1lZXQgdGhlIGV4cGVjdGF0aW9ucwogICAgICAgIG9mIHRoZSB1c2VyLiBXaGVuIHNvbWVvbmUgdHlwZXMgIiouanMiIHRoZXkgZG9uJ3QgZXhwZWN0ICJmb28uanNvbiIgdG8gbWF0Y2guIFRoZXkKICAgICAgICB3b3VsZCBvbmx5IGV4cGVjdCB0aGF0IGlmIHRoZXkgdHlwZSAiKi5qcyoiLiBXZSB1c2UgXGIgKGluc3RlYWQgb2YgXiBhbmQgJCkgdG8gYWxsb3cKICAgICAgICBtYXRjaGVzIGluc2lkZSBwYXRocyBvciBVUkxzLCBzbyAiYmEqLmpzIiB3aWxsIG1hdGNoICJmb28vYmFyLmpzIiBidXQgbm90ICJib28vYmJhci5qcyIuCiAgICAgICAgV2hlbiB0aGVyZSBpc24ndCBhbiBhc3RlcmlzayB0aGUgcmVnZXhTdHJpbmcgaXMganVzdCBhIHN1YnN0cmluZyBzZWFyY2guIEFsc28gcHJvcGVybHkKICAgICAgICBpZ25vcmUgZXNjYXBlZCBhc3Rlcmlza3MgYW5kIGNvbGxhcHNlIGNvbnNlY3V0aXZlIGFzdGVyaXNrcyBkb3duIHRvIG9uZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVXRpbGl0aWVzLmpzOgogICAgICAgIChzaW1wbGVHbG9iU3RyaW5nVG9SZWdFeHApOgoKMjAxMS0xMS0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFNob3cgYSBtZXNzYWdlIGluIHRoZSBzaWRlYmFyIHdoZW4gaXQgaXMgZW1wdHkgYmVjYXVzZSB0aGVyZSBhcmUgbm8gZmlsdGVyIG1hdGNoZXMuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05hdmlnYXRpb25TaWRlYmFyUGFuZWwuY3NzOgogICAgICAgICguc2lkZWJhciA+IC5wYW5lbC5uYXZpZ2F0aW9uID4gLmNvbnRlbnQuaGlkZGVuKTogQWRkZWQuCiAgICAgICAgKC5zaWRlYmFyID4gLnBhbmVsLm5hdmlnYXRpb24gPiAuZW1wdHktY29udGVudC1wbGFjZWhvbGRlcik6IEFkZGVkLgogICAgICAgICguc2lkZWJhciA+IC5wYW5lbC5uYXZpZ2F0aW9uID4gLmVtcHR5LWNvbnRlbnQtcGxhY2Vob2xkZXIgPiAubWVzc2FnZSk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbCk6IENyZWF0ZSB0aGUgZW1wdHkgY29udGVudCBwbGFjZWhvbGRlciBlbGVtZW50cy4KICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25TaWRlYmFyUGFuZWwucHJvdG90eXBlLnNob3dFbXB0eUNvbnRlbnRQbGFjZWhvbGRlcik6IFNldCB0aGUgbWVzc2FnZSBhbmQgYWRkIHRoZSBlbGVtZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbC5wcm90b3R5cGUuaGlkZUVtcHR5Q29udGVudFBsYWNlaG9sZGVyKTogUmVtb3ZlIHRoZSBlbGVtZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2NoZWNrRm9yRW1wdHlGaWx0ZXJSZXN1bHRzKTogQWRkZWQuIENoZWNrIGZvciBoaWRkZW4gdG9wIGxldmVsIGVsZW1lbnRzLgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3VwZGF0ZUZpbHRlcik6IENhbGwgX2NoZWNrRm9yRW1wdHlGaWx0ZXJSZXN1bHRzLgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3RyZWVFbGVtZW50QWRkZWRPckNoYW5nZWQpOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2lkZWJhci5jc3M6CiAgICAgICAgKC5zaWRlYmFyID4gLnBhbmVsKTogTWFrZSBvdmVyZmxvdyBoaWRkZW4gc28gd2hlbiB0aGUgc2lkZWJhciBpcyBjb2xsYXBzZWQgdGhlIGVtcHR5IHBsYWNlaG9sZGVyIGRvZXNuJ3Qgc3RpY2sgb3V0LgoKMjAxMS0xMS0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCB0ZXh0IGZpbHRlcmluZyBzdXBwb3J0IHRvIFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLgoKICAgICAgICBUaGlzIG1ha2VzIGl0IHNvIHlvdSBjYW4gZmlsdGVyIHRoZSByZXNvdXJjZSBsaXN0LCBtYXRjaGluZyBhZ2FpbnN0IHRoZSBVUkxzLgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9GaWx0ZXJCYXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GaWx0ZXJCYXIpOiBBZGQgYW4gc2VhcmNoIGV2ZW50IGxpc3RlbmVyIGFuZCBzZXQgaW5jcmVtZW50YWwgdG8gdHJ1ZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZpbHRlckJhci5wcm90b3R5cGUuZ2V0IGZpbHRlcnMpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZpbHRlckJhci5wcm90b3R5cGUuaGFzQWN0aXZlRmlsdGVycyk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRmlsdGVyQmFyLnByb3RvdHlwZS5faW5wdXRGaWVsZENoYW5nZWQpOiBBZGRlZC4gRGlzcGF0Y2ggdGhlIFRleHRGaWx0ZXJEaWRDaGFuZ2UgZXZlbnQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0dlbmVyYWxUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkdlbmVyYWxUcmVlRWxlbWVudC5wcm90b3R5cGUuc2V0IG1haW5UaXRsZSk6IENhbGwgZGlkQ2hhbmdlLgogICAgICAgIChXZWJJbnNwZWN0b3IuR2VuZXJhbFRyZWVFbGVtZW50LnByb3RvdHlwZS5zZXQgc3VidGl0bGUpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLkdlbmVyYWxUcmVlRWxlbWVudC5wcm90b3R5cGUuZ2V0IGZpbHRlcmFibGVEYXRhKTogQWRkZWQuIFJldHVybnMgdGhlIFVSTC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvblNpZGViYXJQYW5lbC5jc3M6CiAgICAgICAgKC5uYXZpZ2F0aW9uLXNpZGViYXItcGFuZWwtY29udGVudC10cmVlLW91dGxpbmUgLmhpZGRlbik6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbCk6IFNldCBvbmFkZCBhbmQgb25jaGFuZ2Ugb24gdGhlIFRyZWVPdXRsaW5lLiBMaXN0ZW4gZm9yCiAgICAgICAgdGhlIFRleHRGaWx0ZXJEaWRDaGFuZ2UgZXZlbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLnByb3RvdHlwZS5hcHBseUZpbHRlcnNUb1RyZWVFbGVtZW50KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLnByb3RvdHlwZS5hcHBseUZpbHRlcnNUb1RyZWVFbGVtZW50Lm1hdGNoVGV4dEZpbHRlcik6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbC5wcm90b3R5cGUuYXBwbHlGaWx0ZXJzVG9UcmVlRWxlbWVudC5tYWtlVmlzaWJsZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbC5wcm90b3R5cGUuX3VwZGF0ZUZpbHRlcik6IEFkZGVkLiBDYWxsIGFwcGx5RmlsdGVyc1RvVHJlZUVsZW1lbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdHJlZUVsZW1lbnRBZGRlZE9yQ2hhbmdlZCk6IEFkZGVkLiBDYWxsIGFwcGx5RmlsdGVyc1RvVHJlZUVsZW1lbnQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1V0aWxpdGllcy5qczoKICAgICAgICAoU3RyaW5nLnByb3RvdHlwZS5lc2NhcGVDaGFyYWN0ZXJzKTogQ29waWVkIGZyb20gV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcy4KICAgICAgICAoU3RyaW5nLnByb3RvdHlwZS5lc2NhcGVGb3JSZWdFeHApOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzLgogICAgICAgIChzaW1wbGVHbG9iU3RyaW5nVG9SZWdFeHApOiBBZGRlZC4KCjIwMTEtMTEtMjggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgV2ViSW5zcGVjdG9yLkZpbHRlckJhciB0byBiZSB1c2VkIGluIG5hdmlnYXRpb24gc2lkZWJhciBwYW5lbHMuCgogICAgICAgIFRoZSBmaWx0ZXIgYmFyIG9ubHkgY29udGFpbnMgYSBzcGVjaWFsbHkgc3R5bGVkIHNlYXJjaCBmaWVsZCBpbiB0aGlzIGNoYW5nZS4KICAgICAgICBJdCBkb2VzIG5vdCBhY3R1YWxseSBmaWx0ZXIgdGhlIHNpZGViYXIgeWV0LgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9GaWx0ZXJCYXIuY3NzOiBBZGRlZC4KICAgICAgICAoLmZpbHRlci1iYXIpOiBTdHlsZWQgbGlrZSB0aGUgZmlsdGVyIGJhciBpbiBYY29kZSA0LgogICAgICAgICguZmlsdGVyLWJhciA+IGlucHV0W3R5cGU9InNlYXJjaCJdKTogU2V0IHRoZSBtYXJnaW5zIGFuZCBwcmV2ZW50IGFuIG91dGxpbmUgb24gZm9jdXMuCiAgICAgICAgKC5maWx0ZXItYmFyID4gaW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24pOiBSZXBsYWNlIHRoZSBzZWFyY2gKICAgICAgICBtYWduaWZ5aW5nIGdsYXNzIHdpdGggdGhlIGZpbHRlciBnbHlwaC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRmlsdGVyQmFyLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZpbHRlckJhcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GaWx0ZXJCYXIucHJvdG90eXBlLmdldCBlbGVtZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkZpbHRlckJhci5wcm90b3R5cGUuZ2V0IGlucHV0RmllbGQpOgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRmlsdGVyRmllbGRHbHlwaC5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEluY2x1ZGVkIEZpbHRlckJhci5qcyBhbmQgRmlsdGVyQmFyLmNzcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvblNpZGViYXJQYW5lbC5jc3M6CiAgICAgICAgKC5zaWRlYmFyID4gLnBhbmVsLm5hdmlnYXRpb24gPiAuZmlsdGVyLWJhcik6IFBvc2l0aW9uIGF0IHRoZSBib3R0b20uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05hdmlnYXRpb25TaWRlYmFyUGFuZWwuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uU2lkZWJhclBhbmVsKTogQ3JlYXRlIGEgRmlsdGVyQmFyLgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbC5wcm90b3R5cGUuZ2V0IGZpbHRlckJhcik6IEFkZGVkLgoKMjAxMS0xMS0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEhhbmRsZSBnZXR0aW5nIGEgcmVzb3VyY2UgbG9hZCByZXNwb25jZSB3aXRob3V0IGdldHRpbmcgdGhlIHJlcXVlc3QgZmlyc3QuCgogICAgICAgIElmIHRoZSBXZWIgSW5zcGVjdG9yIGlzIG9wZW5lZCB3aGlsZSBsb2FkaW5nIGEgcGFnZSB3ZSBjYW4gbWlzcyB0aGUgcmVzb3VyY2VSZXF1ZXN0V2lsbEJlU2VudCBjYWxsLgogICAgICAgIEluIHRoYXQgY2FzZSB3ZSBtaWdodCBnZXQgYSByZXNwb3NlIGJ1dCBub3Qga25vdyB0aGUgcmVzb3VyY2UgeWV0LCBzbyBtYWtlIGEgbmV3IHJlc291cmNlIGFuZCBhZGQgaXQuCgogICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lUmVzb3VyY2VNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLnJlc291cmNlUmVxdWVzdERpZFJlY2VpdmVSZXNwb25zZSk6IE1ha2UgYSBuZXcgcmVzb3VyY2UgaWYKICAgICAgICBvbmUgaXNuJ3QgZm91bmQgaW4gdGhlIHJlcXVlc3QgaWRlbnRpZmllciBtYXAuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05ldHdvcmtPYnNlcnZlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLk5ldHdvcmtPYnNlcnZlci5wcm90b3R5cGUucmVzcG9uc2VSZWNlaXZlZCk6IFBhc3MgdGhlIGZyYW1lSWQgYW5kIGxvYWRlcklkIGFsb25nLgoKMjAxMS0xMS0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFN0b3JlIHRoZSByZXF1ZXN0IGFuZCByZXNwb25zZSBoZWFkZXJzIG9uIFdlYkluc3BlY3Rvci5SZXNvdXJjZS4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4NzE4PiBJbXBsZW1lbnQgdGhlIFJlc291cmNlIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWVSZXNvdXJjZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUuZnJhbWVEaWROYXZpZ2F0ZSk6IFBhc3MgbnVsbCBmb3IgdGhlIHJlcXVlc3RIZWFkZXJzIGluIGEgY291cGxlIG9mIHBsYWNlcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5yZXNvdXJjZVJlcXVlc3RXaWxsQmVTZW50KTogUGFzcyB0aGUgcmVxdWVzdEhlYWRlcnMgYWxvbmcuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUucmVzb3VyY2VSZXF1ZXN0V2FzU2VydmVkRnJvbU1lbW9yeUNhY2hlKTogUGFzcyBudWxsIGZvciB0aGUgcmVxdWVzdEhlYWRlcnMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUucmVzb3VyY2VSZXF1ZXN0RGlkUmVjZWl2ZVJlc3BvbnNlKTogUGFzcyB0aGUgcmVzcG9uc2VIZWFkZXJzIGFsb25nIHRvIHVwZGF0ZUZvclJlc3BvbnNlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLl9hZGROZXdSZXNvdXJjZVRvRnJhbWUpOiBBZGRlZCBhbiBhcmd1bWVudCBmb3IgcmVxdWVzdEhlYWRlcnMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUuX2NyZWF0ZUZyYW1lKTogUGFzcyBudWxsIGZvciB0aGUgcmVxdWVzdEhlYWRlcnMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUuX2NyZWF0ZVJlc291cmNlKTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UpOiBBZGRlZCByZXF1ZXN0SGVhZGVycyBhcmd1bWVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5nZXQgcmVxdWVzdEhlYWRlcnMpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5nZXQgcmVzcG9uc2VIZWFkZXJzKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUudXBkYXRlRm9yUmVzcG9uc2UpOiBBZGRlZCByZXNwb25zZUhlYWRlcnMgYXJndW1lbnQgYW5kIGZpcmUgdGhlIFJlc3BvbnNlSGVhZGVyc0RpZENoYW5nZSBldmVudC4KCjIwMTEtMTEtMjggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBLZWVwIHRyYWNrIG9mIGZhaWxlZCwgY2FuY2VsZWQgYW5kIGZpbmlzaGVkIHJlc291cmNlcyBpbiB0aGUgV2ViIEluc3BlY3Rvci4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4NzE4PiBJbXBsZW1lbnQgdGhlIFJlc291cmNlIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWVSZXNvdXJjZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUucmVzb3VyY2VSZXF1ZXN0RGlkRmluaXNoTG9hZGluZyk6IENhbGwgbWFya0FzRmluaXNoZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUucmVzb3VyY2VSZXF1ZXN0RGlkRmFpbExvYWRpbmcpOiBBZGRlZCBjYW5jZWxlZCBhcmd1bWVudCBhbmQgY2FsbCBtYXJrQXNGYWlsZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUuX2NyZWF0ZVJlc291cmNlKTogQ2FsbCBtYXJrQXNGaW5pc2hlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmV0d29ya09ic2VydmVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya09ic2VydmVyLnByb3RvdHlwZS5sb2FkaW5nRmFpbGVkKTogUGFzcyBhbG9uZyB0aGUgY2FuY2VsZWQgYXJndW1lbnQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLmdldCBmaW5pc2hlZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLmdldCBmYWlsZWQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5nZXQgY2FuY2VsZWQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS51cGRhdGVGb3JSZWRpcmVjdFJlc3BvbnNlKTogQWRkZWQgYXNzZXJ0cyB0aGF0IGxvYWRpbmcgaGFzbid0IGZhaWxlZCwgZmluaXNoZWQgb3IgY2FuY2VsZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUudXBkYXRlRm9yUmVzcG9uc2UpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5tYXJrQXNGaW5pc2hlZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLm1hcmtBc0ZhaWxlZCk6IEFkZGVkLgoKMjAxMS0xMS0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFNvcnQgZm9sZGVycyBieSBuYW1lLCByZXNvdXJjZXMgYnkgdHlwZSBhbmQgbmFtZSBpbiB0aGUgV2ViIEluc3BlY3RvciBzaWRlYmFyLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3MTg+IEltcGxlbWVudCB0aGUgUmVzb3VyY2Ugc2lkZWJhciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9GcmFtZVRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVUcmVlRWxlbWVudC5wcm90b3R5cGUuZGVzY2VuZGFudFJlc291cmNlVHJlZUVsZW1lbnRUeXBlRGlkQ2hhbmdlKTogUmVtb3ZlIHRoZSBjaGVjayBmb3IgX2dyb3VwZWRJbnRvRm9sZGVycwogICAgICAgIHNpbmNlIHdlIHNvcnQgYnkgdHlwZSBpbiBub24tZm9sZGVyIG1vZGUgbm93LiBVcGRhdGVkIHRoZSBjb21tZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVUcmVlRWxlbWVudC5wcm90b3R5cGUuZGVzY2VuZGFudFJlc291cmNlVHJlZUVsZW1lbnRNYWluVGl0bGVEaWRDaGFuZ2UpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lVHJlZUVsZW1lbnQucHJvdG90eXBlLl9hZGRUcmVlRWxlbWVudCk6IFVzZSBfaW5zZXJ0Um9vdEZvbGRlclRyZWVFbGVtZW50IGFuZCBfaW5zZXJ0UmVzb3VyY2VUcmVlRWxlbWVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lVHJlZUVsZW1lbnQucHJvdG90eXBlLl9jb21wYXJlVHJlZUVsZW1lbnRzQnlNYWluVGl0bGUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lVHJlZUVsZW1lbnQucHJvdG90eXBlLl9pbnNlcnRGb2xkZXJUcmVlRWxlbWVudCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVUcmVlRWxlbWVudC5wcm90b3R5cGUuX2NvbXBhcmVSZXNvdXJjZVRyZWVFbGVtZW50cyk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVUcmVlRWxlbWVudC5wcm90b3R5cGUuX2luc2VydFJlc291cmNlVHJlZUVsZW1lbnQpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlZCBCaW5hcnlTZWFyY2guanMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fdXBkYXRlVGl0bGVzKTogQ2FsbCBkZXNjZW5kYW50UmVzb3VyY2VUcmVlRWxlbWVudE1haW5UaXRsZURpZENoYW5nZSBvbiB0aGUgZmlyc3QgYW5jZXN0b3IKICAgICAgICBpZiB0aGUgbWFpbiB0aXRsZSBjaGFuZ2VkLgoKMjAxMS0xMS0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFF1ZXVlIG5ldyByZXNvdXJjZXMgYW5kIGZyYW1lcyB0byBhZGQgdGhlbSBpbiBidWxrIGV2ZXJ5IGhhbGYgYSBzZWNvbmQuCgogICAgICAgIFRoaXMgcmVkdWNlcyBmbGFzaGluZyBpbiB0aGUgV2ViIEluc3BlY3RvciBzaWRlYmFyIGFzIHJlc291cmNlcyBsb2FkIGFuZCBjaGFuZ2UgZm9sZGVycyBhcyB0aGVpciB0eXBlIGJlY29tZXMga25vd24uCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxODcxOD4gSW1wbGVtZW50IHRoZSBSZXNvdXJjZSBzaWRlYmFyIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50KTogSW5pdGlhbGl6ZSBfbmV3Q2hpbGRRdWV1ZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lVHJlZUVsZW1lbnQucHJvdG90eXBlLm9ucG9wdWxhdGUpOiBDYWxsIF9jbGVhck5ld0NoaWxkUXVldWUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fbWFpblJlc291cmNlRGlkQ2hhbmdlKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fcmVzb3VyY2VXYXNBZGRlZCk6IFVzZSBfYWRkUmVwcmVzZW50ZWRPYmplY3RUb05ld0NoaWxkUXVldWUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fY2hpbGRGcmFtZVdhc0FkZGVkKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fYWRkUmVwcmVzZW50ZWRPYmplY3RUb05ld0NoaWxkUXVldWUpOiBBZGRlZC4gQWRkcyB0aGUgaXRlbSB0byB0aGUgcXVldWUgYW5kIHN0YXJ0cwogICAgICAgIGEgdGltZXIgaWYgb25lIGlzbid0IGFscmVhZHkgcGVuZGluZy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lVHJlZUVsZW1lbnQucHJvdG90eXBlLl9yZW1vdmVSZXByZXNlbnRlZE9iamVjdEZyb21OZXdDaGlsZFF1ZXVlKTogQWRkZWQuIFJlbW92ZXMgdGhlIGl0ZW0gZnJvbSB0aGUgcXVldWUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fcG9wdWxhdGVGcm9tTmV3Q2hpbGRRdWV1ZSk6IEFkZGVkLiBDYWxsIF9hZGRDaGlsZEZvclJlcHJlc2VudGVkT2JqZWN0CiAgICAgICAgZm9yIGVhY2ggaXRlbSBpbiB0aGUgcXVldWUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fY2xlYXJOZXdDaGlsZFF1ZXVlKTogQWRkZWQuIENsZWFycyB0aGUgcXVldWUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fcmVtb3ZlQ2hpbGRGb3JSZXByZXNlbnRlZE9iamVjdCk6IENhbGwgX3JlbW92ZVJlcHJlc2VudGVkT2JqZWN0RnJvbU5ld0NoaWxkUXVldWUuCgoyMDExLTExLTI4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUmVtZW1iZXIgZXhwYW5kZWQgZnJhbWVzIHdoZW4gdGhlIG1haW4gcmVzb3VyY2UgY2hhbmdlcyBkdXJpbmcgbmF2aWdhdGlvbi4gQWxzbyBhdXRvIGV4cGFuZCB0aGUgbWFpbiBmcmFtZS4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4NzE4PiBJbXBsZW1lbnQgdGhlIFJlc291cmNlIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWVUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lVHJlZUVsZW1lbnQucHJvdG90eXBlLl9tYWluUmVzb3VyY2VEaWRDaGFuZ2UpOiBSZW1lbWJlciBpZiB0aGlzIHRyZWUgZWxlbWVudCB3YXMgZXhwYW5kZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fYWRkQ2hpbGRGb3JSZXByZXNlbnRlZE9iamVjdCk6IEV4cGFuZCBpZiBuZWVkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9tYWluRnJhbWVEaWRDaGFuZ2UpOiBFeHBhbmQgd2hlbiB0aGUgbWFpbiBmcmFtZSBpcyBjcmVhdGVkLgoKMjAxMS0xMS0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEdyb3VwIHJlc291cmNlcyBpbnRvIGZvbGRlcnMgb25jZSBjZXJ0YWluIHJlc291cmNlIGNvdW50IHRocmVzaG9sZHMgYXJlIG1ldC4KCiAgICAgICAgUmVzb3VyY2VzIGFuZCBGcmFtZXMgYXJlIGdyb3VwZWQgaW50byBmb2xkZXJzIGlmIG9uZSBvZiB0d28gdGhyZXNob2xkcyBhcmUgbWV0OgogICAgICAgIDEpIE9uY2UgdGhlIG51bWJlciBvZiBtZWRpdW0gY2F0ZWdvcmllcyBwYXNzZXMgTnVtYmVyT2ZNZWRpdW1DYXRlZ29yaWVzVGhyZXNob2xkLgogICAgICAgIDIpIFdoZW4gdGhlcmUgaXMgYSBjYXRlZ29yeSB0aGF0IHBhc3NlcyBMYXJnZUNoaWxkQ291bnRUaHJlc2hvbGQgYW5kIHRoZXJlIGFyZQogICAgICAgICAgIGFueSByZXNvdXJjZXMgaW4gYW5vdGhlciBjYXRlZ29yeS4KCiAgICAgICAgRm9sZGVycyBhcmUgYXZvaWRlZCB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIGNhdGVnb3J5IG9yIG1vc3QgY2F0ZWdvcmllcyBhcmUgc21hbGwuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxODcxOD4gSW1wbGVtZW50IHRoZSBSZXNvdXJjZSBzaWRlYmFyIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5kZXNjZW5kYW50UmVzb3VyY2VUcmVlRWxlbWVudFR5cGVEaWRDaGFuZ2UpOiBBZGRlZC4gQ2FsbGVkIGJ5IFJlc291cmNlVHJlZUVsZW1lbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5vbnBvcHVsYXRlKTogQ2FsbCBfc2hvdWxkR3JvdXBJbnRvRm9sZGVycyBhbmQgdXNlIF9hZGRUcmVlRWxlbWVudC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lVHJlZUVsZW1lbnQucHJvdG90eXBlLl9tYWluUmVzb3VyY2VEaWRDaGFuZ2UpOiBSZXNldCBfZ3JvdXBlZEludG9Gb2xkZXJzIHRvIGZhbHNlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVUcmVlRWxlbWVudC5wcm90b3R5cGUuX2FkZENoaWxkRm9yUmVwcmVzZW50ZWRPYmplY3QpOiBDYWxsIF9zaG91bGRHcm91cEludG9Gb2xkZXJzIGFuZCB1c2UgX2FkZFRyZWVFbGVtZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVUcmVlRWxlbWVudC5wcm90b3R5cGUuX3JlbW92ZUNoaWxkRm9yUmVwcmVzZW50ZWRPYmplY3QpOiBSZW1vdmUgdGhlIHBhcmVudCBpZiBpdCBpcyBhbiBlbXB0eSBmb2xkZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fYWRkVHJlZUVsZW1lbnQpOiBBZGRlZC4gQWRkcyB0aGUgdHJlZSBlbGVtZW50IHRvIHRoZSByaWdodCBmb2xkZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fcmVtb3ZlVHJlZUVsZW1lbnQpOiBBZGRlZC4gUmVtb3ZlcyB0aGUgdHJlZSBlbGVtZW50IGFuZCBlbXB0eSBmb2xkZXJzLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVUcmVlRWxlbWVudC5wcm90b3R5cGUuX2ZvbGRlck5hbWVGb3JSZXNvdXJjZVR5cGUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lVHJlZUVsZW1lbnQucHJvdG90eXBlLl9wYXJlbnRUcmVlRWxlbWVudEZvclJlcHJlc2VudGVkT2JqZWN0KTogQWRkZWQuIE1ha2UgdGhlIGZvbGRlciB0cmVlIGVsZW1lbnQgaWYgbmVlZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVUcmVlRWxlbWVudC5wcm90b3R5cGUuX3Nob3VsZEdyb3VwSW50b0ZvbGRlcnMpOiBBZGRlZC4gQ2FsY3VsYXRlcyBpZiBmb2xkZXJzIGFyZSBuZWVkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlVHJlZUVsZW1lbnQuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fdHlwZURpZENoYW5nZSk6IFVzZSBfY2FsbEZpcnN0QW5jZXN0b3JGdW5jdGlvbiB0byBjYWxsIGRlc2NlbmRhbnRSZXNvdXJjZVRyZWVFbGVtZW50VHlwZURpZENoYW5nZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZUVsZW1lbnQucHJvdG90eXBlLl9jYWxsRmlyc3RBbmNlc3RvckZ1bmN0aW9uKTogQWRkZWQuIENhbGwgdGhlIGZpcnN0IGFuY2VzdG9yIHRoYXQgaW1wbGVtZW50cyBhIGZ1bmN0aW9uLgoKMjAxMS0xMS0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBXZWJJbnNwZWN0b3IuRm9sZGVyVHJlZUVsZW1lbnQgdG8gYmUgdXNlZCBpbiBuYXZpZ2F0aW9uIHNpZGViYXIgcGFuZWxzLgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9Gb2xkZXJUcmVlRWxlbWVudC5jc3M6IEFkZGVkLgogICAgICAgICguZm9sZGVyLXRyZWUtZWxlbWVudCAuaWNvbik6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZvbGRlclRyZWVFbGVtZW50LmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZvbGRlclRyZWVFbGVtZW50KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0ZvbGRlckdlbmVyaWMucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0ZvbGRlckdlbmVyaWNAMngucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlZCBGb2xkZXJUcmVlRWxlbWVudC5jc3MgYW5kIEZvbGRlclRyZWVFbGVtZW50LmpzLgoKMjAxMS0xMS0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIFJlbWVtYmVyIHJlc291cmNlcyBieSB0eXBlIGZvciBlYWNoIGZyYW1lIGluIHRoZSBXZWIgSW5zcGVjdG9yLgoKICAgICAgICBUaGlzIHdpbGwgYmUgdXNlZCB0byBvcmdhbml6ZSB0aGUgc2lkZWJhciBpbnRvIGZvbGRlcnMgZm9yIGVhY2ggdHlwZSBvZiByZXNvdXJjZS4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4NzE4PiBJbXBsZW1lbnQgdGhlIFJlc291cmNlIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZSk6IEluaXRpYWxpemUgX3Jlc291cmNlc1R5cGVNYXAgYW5kIF9wcm92aXNpb25hbFJlc291cmNlc1R5cGVNYXAuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZS5wcm90b3R5cGUuc3RhcnRQcm92aXNpb25hbExvYWQpOiBJbml0aWFsaXplIF9wcm92aXNpb25hbFJlc291cmNlc1VSTE1hcC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lLnByb3RvdHlwZS5jb21taXRQcm92aXNpb25hbExvYWQpOiBDb21taXQgX3Byb3Zpc2lvbmFsUmVzb3VyY2VzVVJMTWFwIG92ZXIgdG8gX3Jlc291cmNlc1R5cGVNYXAuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZS5wcm90b3R5cGUuY2xlYXJQcm92aXNpb25hbExvYWQpOiBJbml0aWFsaXplIF9wcm92aXNpb25hbFJlc291cmNlc1VSTE1hcC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lLnByb3RvdHlwZS5yZXNvdXJjZXNXaXRoVHlwZSk6IEFkZGVkLiBMb29rdXAgaW4gX3Jlc291cmNlc1R5cGVNYXAuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZS5wcm90b3R5cGUucmVtb3ZlQWxsUmVzb3VyY2VzKTogSW5pdGlhbGl6ZSBfcmVzb3VyY2VzVHlwZU1hcC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lLnByb3RvdHlwZS5fYXNzb2NpYXRlV2l0aFJlc291cmNlKTogQWRkZWQgcmVzb3VyY2UgdG8gdGhlIHR5cGUgbWFwLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLl9kaXNhc3NvY2lhdGVXaXRoUmVzb3VyY2UpOiBSZW1vdmUgdGhlIHJlc291cmNlIGZyb20gdGhlIHR5cGUgbWFwLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLl9yZXNvdXJjZVR5cGVEaWRDaGFuZ2UpOiBVcGRhdGUgdGhlIHJlc291cmNlIHR5cGUgbWFwLgoKMjAxMS0xMS0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBpY29ucyBmb3IgZG9jdW1lbnQsIGltYWdlLCBmb250LCBzdHlsZSwgc2NyaXB0IGFuZCBnZW5lcmljIHJlc291cmNlIHR5cGVzIGluIHRoZSBXZWIgSW5zcGVjdG9yLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3MTg+IEltcGxlbWVudCB0aGUgUmVzb3VyY2Ugc2lkZWJhciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRG9jdW1lbnRDU1MucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RvY3VtZW50Q1NTQDJ4LnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Eb2N1bWVudEZvbnQucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RvY3VtZW50Rm9udEAyeC5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvRG9jdW1lbnRHZW5lcmljLnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Eb2N1bWVudEdlbmVyaWNAMngucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RvY3VtZW50SW1hZ2UucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RvY3VtZW50SW1hZ2VAMngucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RvY3VtZW50SlMucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RvY3VtZW50SlNAMngucG5nOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0RvY3VtZW50TWFya3VwLnBuZzogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9Eb2N1bWVudE1hcmt1cEAyeC5wbmc6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEluY2x1ZGVkIFJlc291cmNlVHJlZUVsZW1lbnQuY3NzLgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVRyZWVFbGVtZW50LmNzczogQWRkZWQuCiAgICAgICAgKC5yZXNvdXJjZS10cmVlLWVsZW1lbnQgLmljb24pOgogICAgICAgICgucmVzb3VyY2UtdHJlZS1lbGVtZW50LnJlc291cmNlLXR5cGUtZG9jdW1lbnQgLmljb24pOgogICAgICAgICgucmVzb3VyY2UtdHJlZS1lbGVtZW50LnJlc291cmNlLXR5cGUtaW1hZ2UgLmljb24pOgogICAgICAgICgucmVzb3VyY2UtdHJlZS1lbGVtZW50LnJlc291cmNlLXR5cGUtc3R5bGVzaGVldCAuaWNvbik6CiAgICAgICAgKC5yZXNvdXJjZS10cmVlLWVsZW1lbnQucmVzb3VyY2UtdHlwZS1zY3JpcHQgLmljb24pOgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVRyZWVFbGVtZW50LmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlRWxlbWVudCk6IFVzZSB0aGUgcmVzb3VyY2UgdHlwZSBhcyBhIGNsYXNzLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlRWxlbWVudC5wcm90b3R5cGUuX3VwZGF0ZVJlc291cmNlKTogQWRkZWQgVHlwZURpZENoYW5nZSBldmVudCBsaXN0ZW5lci4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZUVsZW1lbnQucHJvdG90eXBlLl90eXBlRGlkQ2hhbmdlKTogQWRkZWQuIFVwZGF0ZSB0aGUgY2xhc3NOYW1lcyB3aXRoIHRoZSBuZXcgdHlwZS4KCjIwMTEtMTEtMjggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBEaXNwbGF5IHRoZSBsYXN0IHBhdGggY29tcG9uZW50IGluc3RlYWQgb2YgdGhlIGZ1bGwgVVJMIGluIHRoZSBXZWIgSW5zcGVjdG9yJ3MgUmVzb3VyY2Ugc2lkZWJhciBwYW5lbC4KICAgICAgICBTaG93IHRoZSBob3N0IGFzIHRoZSBzdWJ0aXRsZSBpZiBpdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgbWFpbiByZXNvdXJjZSBvciBpZiB0aGlzIGlzIHRoZSBtYWluIGZyYW1lJ3MgbWFpbiByZXNvdXJjZS4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4NzE4PiBJbXBsZW1lbnQgdGhlIFJlc291cmNlIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2UuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUuZ2V0IHVybENvbXBvbmVudHMpOiBBZGRlZC4gQ2FsbHMgcGFyc2VVUkwgaWYgbmVlZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLnVwZGF0ZUZvclJlZGlyZWN0UmVzcG9uc2UpOiBEZWxldGUgdGhlIFVSTCBjb21wb25lbnRzIHNvIHRoZSBVUkwgaXMgcmUtcGFyc2VkIHRoZQogICAgICAgIG5leHQgdGltZSBpdCBpcyByZXF1ZXN0ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUudXBkYXRlRm9yUmVzcG9uc2UpOiBEaXR0by4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VUcmVlRWxlbWVudC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZUVsZW1lbnQucHJvdG90eXBlLl91cGRhdGVUaXRsZXMpOiBTZXQgdGhlIG1haW5UaXRsZSBhbmQgc3VidGl0bGUgYmFzZWQgb24gdGhlIHVybENvbXBvbmVudHMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1V0aWxpdGllcy5qczoKICAgICAgICAocGFyc2VVUkwpOiBBZGRlZC4gUGFyc2VzIGEgVVJMIGludG8gaXRzIGNvbXBvbmVudHMuCgoyMDExLTExLTI4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgUG9wdWxhdGUgdGhlIFdlYkluc3BlY3RvcidzIFJlc291cmNlIHNpZGViYXIgcGFuZWwgd2l0aCBmcmFtZSBhbmQgcmVzb3VyY2UgdHJlZSBlbGVtZW50cy4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4NzE4PiBJbXBsZW1lbnQgdGhlIFJlc291cmNlIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWVUcmVlRWxlbWVudC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50KTogU2V0IHVwIGV2ZW50IGxpc3RlbmVycy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lVHJlZUVsZW1lbnQucHJvdG90eXBlLmdldCBmcmFtZSk6IFJldHVybnMgX2ZyYW1lLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVUcmVlRWxlbWVudC5wcm90b3R5cGUub25wb3B1bGF0ZSk6IEFkZCBjaGlsZCBmcmFtZXMgYW5kIHJlc291cmNlcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lVHJlZUVsZW1lbnQucHJvdG90eXBlLl91cGRhdGVQYXJlbnRTdGF0dXMpOiBVcGRhdGUgaGFzQ2hpbGRyZW4uCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fbWFpblJlc291cmNlRGlkQ2hhbmdlKTogVXBkYXRlIHRoZSByZXNvdXJjZSBhbmQgcmVtb3ZlIGNoaWxkcmVuLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVUcmVlRWxlbWVudC5wcm90b3R5cGUuX3Jlc291cmNlV2FzQWRkZWQpOiBDYWxsIF9hZGRDaGlsZEZvclJlcHJlc2VudGVkT2JqZWN0LgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVUcmVlRWxlbWVudC5wcm90b3R5cGUuX3Jlc291cmNlV2FzUmVtb3ZlZCk6IENhbGwgX3JlbW92ZUNoaWxkRm9yUmVwcmVzZW50ZWRPYmplY3QuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fY2hpbGRGcmFtZVdhc0FkZGVkKTogQ2FsbCBfYWRkQ2hpbGRGb3JSZXByZXNlbnRlZE9iamVjdC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lVHJlZUVsZW1lbnQucHJvdG90eXBlLl9jaGlsZEZyYW1lV2FzUmVtb3ZlZCk6IENhbGwgX3JlbW92ZUNoaWxkRm9yUmVwcmVzZW50ZWRPYmplY3QuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fYWRkQ2hpbGRGb3JSZXByZXNlbnRlZE9iamVjdCk6IFVwZGF0ZSBwYXJlbnQgc3RhdHVzIGFuZCBhcHBlbmQgdGhlIG5ldyB0cmVlIGVsZW1lbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fcmVtb3ZlQ2hpbGRGb3JSZXByZXNlbnRlZE9iamVjdCk6IFVwZGF0ZSBwYXJlbnQgc3RhdHVzIGFuZCByZW1vdmUgdGhlIHRyZWUgZWxlbWVudC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlIEZyYW1lVHJlZUVsZW1lbnQuanMgYW5kIFJlc291cmNlVHJlZUVsZW1lbnQuanMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Jlc291cmNlU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwpOiBBZGQgTWFpbkZyYW1lRGlkQ2hhbmdlIGV2ZW50IGxpc3RlbmVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9tYWluRnJhbWVEaWRDaGFuZ2UpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VUcmVlRWxlbWVudC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVFbGVtZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZUVsZW1lbnQucHJvdG90eXBlLmdldCByZXNvdXJjZSk6IFJldHVybnMgX3Jlc291cmNlLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlRWxlbWVudC5wcm90b3R5cGUuX3VwZGF0ZVJlc291cmNlKTogU2V0dXAgZXZlbnQgbGlzdGVuZXJzIGFuZCB1cGRhdGUgdGl0bGVzLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlRWxlbWVudC5wcm90b3R5cGUuX3VwZGF0ZVRpdGxlcyk6IFNldCB0aGUgbWFpblRpdGxlIHRvIHRoZSBVUkwgZm9yIG5vdy4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZUVsZW1lbnQucHJvdG90eXBlLl91cmxEaWRDaGFuZ2UpOiBVcGRhdGUgdGhlIHRpdGxlcy4KCjIwMTEtMTEtMjggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgV2ViSW5zcGVjdG9yLkdlbmVyYWxUcmVlRWxlbWVudCB0byBiZSB1c2VkIGluIG5hdmlnYXRpb24gc2lkZWJhciBwYW5lbHMuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0dlbmVyYWxUcmVlRWxlbWVudC5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5HZW5lcmFsVHJlZUVsZW1lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuR2VuZXJhbFRyZWVFbGVtZW50LnByb3RvdHlwZS5nZXQgZWxlbWVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5HZW5lcmFsVHJlZUVsZW1lbnQucHJvdG90eXBlLmdldCBkaXNjbG9zdXJlQnV0dG9uKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkdlbmVyYWxUcmVlRWxlbWVudC5wcm90b3R5cGUuZ2V0IGljb25FbGVtZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLkdlbmVyYWxUcmVlRWxlbWVudC5wcm90b3R5cGUuZ2V0IHRpdGxlc0VsZW1lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuR2VuZXJhbFRyZWVFbGVtZW50LnByb3RvdHlwZS5nZXQgbWFpblRpdGxlRWxlbWVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5HZW5lcmFsVHJlZUVsZW1lbnQucHJvdG90eXBlLmdldCBzdWJ0aXRsZUVsZW1lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuR2VuZXJhbFRyZWVFbGVtZW50LnByb3RvdHlwZS5nZXQgY2xhc3NOYW1lcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5HZW5lcmFsVHJlZUVsZW1lbnQucHJvdG90eXBlLnNldCBjbGFzc05hbWVzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkdlbmVyYWxUcmVlRWxlbWVudC5wcm90b3R5cGUuZ2V0IHNtYWxsKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkdlbmVyYWxUcmVlRWxlbWVudC5wcm90b3R5cGUuc2V0IHNtYWxsKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkdlbmVyYWxUcmVlRWxlbWVudC5wcm90b3R5cGUuZ2V0IG1haW5UaXRsZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5HZW5lcmFsVHJlZUVsZW1lbnQucHJvdG90eXBlLnNldCBtYWluVGl0bGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuR2VuZXJhbFRyZWVFbGVtZW50LnByb3RvdHlwZS5nZXQgc3VidGl0bGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuR2VuZXJhbFRyZWVFbGVtZW50LnByb3RvdHlwZS5zZXQgc3VidGl0bGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuR2VuZXJhbFRyZWVFbGVtZW50LnByb3RvdHlwZS5pc0V2ZW50V2l0aGluRGlzY2xvc3VyZVRyaWFuZ2xlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkdlbmVyYWxUcmVlRWxlbWVudC5wcm90b3R5cGUub25hdHRhY2gpOgogICAgICAgIChXZWJJbnNwZWN0b3IuR2VuZXJhbFRyZWVFbGVtZW50LnByb3RvdHlwZS5vbnJldmVhbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5HZW5lcmFsVHJlZUVsZW1lbnQucHJvdG90eXBlLl9jcmVhdGVFbGVtZW50c0lmTmVlZGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkdlbmVyYWxUcmVlRWxlbWVudC5wcm90b3R5cGUuX2NyZWF0ZVN1YnRpdGxlRWxlbWVudElmTmVlZGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkdlbmVyYWxUcmVlRWxlbWVudC5wcm90b3R5cGUuX3VwZGF0ZVRpdGxlRWxlbWVudHMpOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEFkZCBHZW5lcmFsVHJlZUVsZW1lbnQuanMuCgoyMDExLTExLTI4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgR2VuZXJhdGUgZGlzY2xvc3VyZSB0cmlhbmdsZXMgZnJvbSBQREZzIGZvciB0aGUgV2ViIEluc3BlY3RvcidzIG5hdmlnYXRpb24gc2lkZWJhci4KCiAgICAgICAgVGhlIGRpc2Nsb3N1cmUgdHJpYW5nbGVzIGFyZSBhIHNvbGlkIGNvbG9yIHBsdXMgYSBzaGFkb3cgZm9yIGEgbm9ybWFsIGFuZCBzZWxlY3RlZCBzdGF0ZS4KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VVdGlsaXRpZXMuanM6IEFkZGVkLgogICAgICAgIChnZW5lcmF0ZUNvbG9yZWRJbWFnZSk6IFRha2UgYW4gaW5wdXQgaW1hZ2UgYW5kIGZpbGwgdGhlIGltYWdlIHdpdGggYSBjb2xvciB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBhbHBoYS4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL0Rpc2Nsb3N1cmVUcmlhbmdsZVNtYWxsQ2xvc2VkLnBkZjogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9EaXNjbG9zdXJlVHJpYW5nbGVTbWFsbE9wZW4ucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBBZGRlZCBJbWFnZVV0aWxpdGllcy5qcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvblNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25TaWRlYmFyUGFuZWwpOiBDYWxsIF9nZW5lcmF0ZURpc2Nsb3N1cmVUcmlhbmdsZXNJZk5lZWRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25TaWRlYmFyUGFuZWwucHJvdG90eXBlLl9nZW5lcmF0ZURpc2Nsb3N1cmVUcmlhbmdsZXNJZk5lZWRlZCk6IExvYWQgdGhlIG9wZW4gYW5kIGNsb3NlZCBpbWFnZXMuCiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fZ2VuZXJhdGVEaXNjbG9zdXJlVHJpYW5nbGVzSWZOZWVkZWQuX2Rpc2Nsb3N1cmVJbWFnZUxvYWRlZCk6IENhbGwKICAgICAgICBfZ2VuZXJhdGVEaXNjbG9zdXJlVHJpYW5nbGUgZm9yIHRoZSBub3JtYWwgYW5kIHNlbGVjdGVkIHN0YXRlIHdpdGggZGlmZmVyZW50IGNvbG9ycyBmb3IgZWFjaC4KICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25TaWRlYmFyUGFuZWwucHJvdG90eXBlLl9nZW5lcmF0ZURpc2Nsb3N1cmVUcmlhbmdsZXNJZk5lZWRlZC5fZ2VuZXJhdGVEaXNjbG9zdXJlVHJpYW5nbGUpOgogICAgICAgIEZpbGwgdGhlIGltYWdlIHdpdGggdGhlIGNvbG9yIGFuZCBkcmF3IGl0IHdpdGggdGhlIGRlc2lyZWQgc2hhZG93LgoKMjAxMS0xMS0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIENyZWF0ZSBhIFRyZWVPdXRsaW5lIGZvciBXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbCB0aGF0IGlzIHN0eWxlZCBsaWtlIFhjb2RlIDQncyBQcm9qZWN0IE5hdmlnYXRvci4KCiAgICAgICAgVGhlIGRpc2Nsb3N1cmUgdHJpYW5nbGUgZ2VuZXJhdGlvbiBpcyBub3QgcGFydCBvZiB0aGlzIGNoYW5nZSwgdGhleSB3aWxsIGNvbWUgaW4gYSBsYXRlciBjaGFuZ2UuCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbiBhbmQgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlZCBUcmVlT3V0bGluZS5qcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvblNpZGViYXJQYW5lbC5jc3M6IFN0eWxlIHJ1bGVzIGZvciAubmF2aWdhdGlvbi1zaWRlYmFyLXBhbmVsLWNvbnRlbnQtdHJlZS1vdXRsaW5lCiAgICAgICAgYW5kIGRlY2VkZW50IGVsZW1lbnRzLgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbCk6IENyZWF0ZSB0aGUgVHJlZU91dGxpbmUgYW5kIGl0cyBlbGVtZW50LiBDYWxsIF9nZW5lcmF0ZVN0eWxlUnVsZXNJZk5lZWRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25TaWRlYmFyUGFuZWwucHJvdG90eXBlLmdldCBjb250ZW50RWxlbWVudCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbC5wcm90b3R5cGUuZ2V0IGNvbnRlbnRUcmVlT3V0bGluZUVsZW1lbnQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25TaWRlYmFyUGFuZWwucHJvdG90eXBlLmdldCBjb250ZW50VHJlZU91dGxpbmUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25TaWRlYmFyUGFuZWwucHJvdG90eXBlLl9nZW5lcmF0ZVN0eWxlUnVsZXNJZk5lZWRlZCk6IEFkZGVkLiBNYWtlIHJlcGV0aXRpdmUgc3R5bGUgcnVsZXMgZm9yCiAgICAgICAgMTUgbGV2ZWxzIG9mIGluZGVudGF0aW9uLgoKMjAxMS0xMS0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbCBhcyBhIGJhc2UgY2xhc3MgZm9yIGFsbCBuYXZpZ2F0aW9uCiAgICAgICAgc2lkZWJhciBwYW5lbHMgc28gdGhleSBjYW4gc2hhcmUgY29kZSBmb3IgdGhlIGNvbnRlbnQgZWxlbWVudCBhbmQgZmlsdGVyIGJhci4KCiAgICAgICAgT25seSB0aGUgY29udGVudCBlbGVtZW50IGlzIHRoZXJlIG5vdywgdGhlIGZpbHRlciBiYXIgaXMgY29taW5nIGxhdGVyLgoKICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBBZGQgTmF2aWdhdGlvblNpZGViYXJQYW5lbC5qcyBhbmQgTmF2aWdhdGlvblNpZGViYXJQYW5lbC5jc3MuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05hdmlnYXRpb25TaWRlYmFyUGFuZWwuY3NzOiBBZGRlZC4KICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwubmF2aWdhdGlvbiA+IC5jb250ZW50KTogQWNjb3VudCBmb3IgMjJweCBhdCB0aGUgYm90dG9tIGZvciB0aGUgZnV0dXJlCiAgICAgICAgZmlsdGVyIGJhciBoZWlnaHQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05hdmlnYXRpb25TaWRlYmFyUGFuZWwuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLnByb3RvdHlwZS5nZXQgY29udGVudEVsZW1lbnQpOgogICAgICAgICogVXNlckludGVyZmFjZS9SZXNvdXJjZVNpZGViYXJQYW5lbC5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclBhbmVsKTogSW5oZXJpdCBmcm9tIE5hdmlnYXRpb25TaWRlYmFyUGFuZWwgaW5zdGVhZCBvZiBTaWRlYmFyUGFuZWwuCgoyMDExLTExLTI4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIGV2ZW50cyB0byB0aGUgV2ViIEluc3BlY3RvciBmb3IgZnJhbWUgYW5kIHJlc291cmNlIGNoYW5nZXMuCgogICAgICAgIFRoZXNlIGV2ZW50cyB3aWxsIGJlIHVzZWQgdG8ga2VlcCB0aGUgdXNlciBpbnRlcmZhY2UgdXAtdG8tZGF0ZS4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4NzE4PiBJbXBsZW1lbnQgdGhlIFJlc291cmNlIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZS5wcm90b3R5cGUuaW5pdGlhbGl6ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZS5wcm90b3R5cGUuc3RhcnRQcm92aXNpb25hbExvYWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLmNvbW1pdFByb3Zpc2lvbmFsTG9hZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZS5wcm90b3R5cGUuY2xlYXJQcm92aXNpb25hbExvYWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLmFkZENoaWxkRnJhbWUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLnJlbW92ZUNoaWxkRnJhbWUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLnJlbW92ZUFsbENoaWxkRnJhbWVzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lLnByb3RvdHlwZS5hZGRSZXNvdXJjZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZS5wcm90b3R5cGUucmVtb3ZlUmVzb3VyY2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLnJlbW92ZUFsbFJlc291cmNlcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZS5wcm90b3R5cGUuX3Jlc291cmNlVVJMRGlkQ2hhbmdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lLnByb3RvdHlwZS5fZGlzcGF0Y2hNYWluUmVzb3VyY2VEaWRDaGFuZ2VFdmVudCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lUmVzb3VyY2VNYW5hZ2VyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLmluaXRpYWxpemUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLmZyYW1lRGlkTmF2aWdhdGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLmZyYW1lRGlkRGV0YWNoKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5fYWRkTmV3UmVzb3VyY2VUb0ZyYW1lKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5fcHJvY2Vzc01haW5GcmFtZVJlc291cmNlVHJlZVBheWxvYWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLl9hZGRGcmFtZVRyZWVGcm9tRnJhbWVSZXNvdXJjZVRyZWVQYXlsb2FkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5fZGlzcGF0Y2hGcmFtZVdhc0FkZGVkRXZlbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLl9kaXNwYXRjaE1haW5GcmFtZURpZENoYW5nZUV2ZW50KToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2UuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUudXBkYXRlRm9yUmVzcG9uc2UpOgoKMjAxMS0xMS0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEtlZXAgV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyIHVwLXRvLWRhdGUgZHVyaW5nIHJlc291cmNlIGxvYWRzLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3MTg+IEltcGxlbWVudCB0aGUgUmVzb3VyY2Ugc2lkZWJhciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9GcmFtZS5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lLnByb3RvdHlwZS5pbml0aWFsaXplKTogQWRkIGFuIGFzc2VydC4gU2V0IHRoZSBsb2FkZXJJZGVudGlmaWVyIGFuZCBjYWxsIGNsZWFyUHJvdmlzaW9uYWxMb2FkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLnN0YXJ0UHJvdmlzaW9uYWxMb2FkKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZS5wcm90b3R5cGUuY29tbWl0UHJvdmlzaW9uYWxMb2FkKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZS5wcm90b3R5cGUuY2xlYXJQcm92aXNpb25hbExvYWQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lLnByb3RvdHlwZS5nZXQgbG9hZGVySWRlbnRpZmllcik6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLmdldCBwcm92aXNpb25hbExvYWRlcklkZW50aWZpZXIpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lLnByb3RvdHlwZS5nZXQgcHJvdmlzaW9uYWxNYWluUmVzb3VyY2UpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lLnByb3RvdHlwZS5hZGRSZXNvdXJjZSk6IFVzZSBfYXNzb2NpYXRlV2l0aFJlc291cmNlLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLnJlbW92ZVJlc291cmNlKTogVXNlIF9kaXNhc3NvY2lhdGVXaXRoUmVzb3VyY2UuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZS5wcm90b3R5cGUucmVtb3ZlQWxsUmVzb3VyY2VzKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZS5wcm90b3R5cGUuX2Fzc29jaWF0ZVdpdGhSZXNvdXJjZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLl9kaXNhc3NvY2lhdGVXaXRoUmVzb3VyY2UpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lLnByb3RvdHlwZS5fcmVzb3VyY2VVUkxEaWRDaGFuZ2UpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWVSZXNvdXJjZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlcik6IEVuYWJsZSB0aGUgTmV0d29ya0FnZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLmluaXRpYWxpemUpOiBJbml0aWFsaXplIF9yZXNvdXJjZVJlcXVlc3RJZGVudGlmaWVyTWFwLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLmZyYW1lRGlkTmF2aWdhdGUpOiBDYWxsIGNvbW1pdFByb3Zpc2lvbmFsTG9hZCBpZiB0aGlzIHdhcyB0aGUgcHJvdmlzaW9uYWxMb2FkZXJJZGVudGlmaWVyLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLnJlc291cmNlUmVxdWVzdFdpbGxCZVNlbnQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5yZXNvdXJjZVJlcXVlc3RXYXNTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5yZXNvdXJjZVJlcXVlc3REaWRSZWNlaXZlUmVzcG9uc2UpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5yZXNvdXJjZVJlcXVlc3REaWRGaW5pc2hMb2FkaW5nKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUucmVzb3VyY2VSZXF1ZXN0RGlkRmFpbExvYWRpbmcpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5fYWRkTmV3UmVzb3VyY2VUb0ZyYW1lKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUuX2FkZFJlc291cmNlVG9GcmFtZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLl9jcmVhdGVGcmFtZSk6IFBhc3MgdGhlIGxvYWRlcklkLgogICAgICAgICogVXNlckludGVyZmFjZS9OZXR3b3JrT2JzZXJ2ZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrT2JzZXJ2ZXIucHJvdG90eXBlLnJlcXVlc3RXaWxsQmVTZW50KTogQ2FsbCBGcmFtZVJlc291cmNlTWFuYWdlci4KICAgICAgICAoV2ViSW5zcGVjdG9yLk5ldHdvcmtPYnNlcnZlci5wcm90b3R5cGUucmVzcG9uc2VSZWNlaXZlZCk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya09ic2VydmVyLnByb3RvdHlwZS5sb2FkaW5nRmluaXNoZWQpOiBEaXR0by4KICAgICAgICAoV2ViSW5zcGVjdG9yLk5ldHdvcmtPYnNlcnZlci5wcm90b3R5cGUubG9hZGluZ0ZhaWxlZCk6IERpdHRvLgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya09ic2VydmVyLnByb3RvdHlwZS5yZXF1ZXN0U2VydmVkRnJvbU1lbW9yeUNhY2hlKTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1BhZ2VPYnNlcnZlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLlBhZ2VPYnNlcnZlci5wcm90b3R5cGUuZnJhbWVOYXZpZ2F0ZWQpOiBQYXNzIHRoZSBsb2FkZXJJZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2UuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZSk6IEFkZGVkIGxvYWRlcklkZW50aWZpZXIuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUuZ2V0IGxvYWRlcklkZW50aWZpZXIpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS51cGRhdGVGb3JSZWRpcmVjdFJlc3BvbnNlKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUudXBkYXRlRm9yUmVzcG9uc2UpOiBBZGRlZC4KCjIwMTEtMTEtMjggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgV2ViSW5zcGVjdG9yLlJlc291cmNlIGFuZCBwb3B1bGF0ZSBleGlzdGluZyByZXNvdXJjZXMgZm9yIHBhZ2UgZnJhbWVzLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3MTg+IEltcGxlbWVudCB0aGUgUmVzb3VyY2Ugc2lkZWJhciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWUuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZS5wcm90b3R5cGUuaW5pdGlhbGl6ZSk6IFJlbW92ZSBfdXJsIGFuZCBfbWltZVR5cGUuIEFkZCBfbWFpblJlc291cmNlLCBfcmVzb3VyY2VzIGFuZCBfcmVzb3VyY2VVUkxNYXAuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZS5wcm90b3R5cGUuZ2V0IHVybCk6IEdldCB0aGUgVVJMIGZyb20gdGhlIG1haW5SZXNvdXJjZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lLnByb3RvdHlwZS5nZXQgbWFpblJlc291cmNlKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZS5wcm90b3R5cGUuZ2V0IHJlc291cmNlcyk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLnJlc291cmNlRm9yVVJMKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZS5wcm90b3R5cGUuYWRkUmVzb3VyY2UpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lLnByb3RvdHlwZS5yZW1vdmVSZXNvdXJjZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLnJlbW92ZUFsbFJlc291cmNlcyk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9GcmFtZVJlc291cmNlTWFuYWdlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5fY3JlYXRlUmVzb3VyY2UpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5fYWRkRnJhbWVUcmVlRnJvbUZyYW1lUmVzb3VyY2VUcmVlUGF5bG9hZCk6IENhbGwgX2NyZWF0ZVJlc291cmNlIGZvciBlYWNoCiAgICAgICAgcmVzb3VyY2UgaW4gdGhlIHBheWxvYWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2UuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UuVHlwZS5mcm9tTUlNRVR5cGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLmdldCB1cmwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLmdldCB0eXBlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5nZXQgbWltZVR5cGUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLmdldCBwYXJlbnRGcmFtZSk6CgoyMDExLTExLTI4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgS2VlcCBXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIgdXAtdG8tZGF0ZSBkdXJpbmcgbmF2aWdhdGlvbiwgYWRkaW5nIGFuZCBkZXRhY2hpbmcgZnJhbWVzLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTg3MTg+IEltcGxlbWVudCB0aGUgUmVzb3VyY2Ugc2lkZWJhciBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBBZGEgQ2hhbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUpOiBDYWxsIGluaXRpYWxpemUuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZS5wcm90b3R5cGUuaW5pdGlhbGl6ZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLmdldCBwYXJlbnRGcmFtZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLmNoaWxkRnJhbWVGb3JJZGVudGlmaWVyKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZS5wcm90b3R5cGUuYWRkQ2hpbGRGcmFtZSk6IENhbGwgcmVtb3ZlQ2hpbGRGcmFtZSBvbiB0aGUgcHJldmlvdXMgcGFyZW50RnJhbWUuIFNldCBwYXJlbnRGcmFtZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lLnByb3RvdHlwZS5yZW1vdmVDaGlsZEZyYW1lKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZS5wcm90b3R5cGUucmVtb3ZlQWxsQ2hpbGRGcmFtZXMpOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRnJhbWVSZXNvdXJjZU1hbmFnZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUuZnJhbWVGb3JJZGVudGlmaWVyKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUuZnJhbWVEaWROYXZpZ2F0ZSk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLmZyYW1lRGlkRGV0YWNoKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUuX2NyZWF0ZUZyYW1lKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUuX2FkZEZyYW1lVHJlZUZyb21GcmFtZVJlc291cmNlVHJlZVBheWxvYWQpOiBVc2UgX2NyZWF0ZUZyYW1lLgogICAgICAgICogVXNlckludGVyZmFjZS9QYWdlT2JzZXJ2ZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5QYWdlT2JzZXJ2ZXIucHJvdG90eXBlLmZyYW1lTmF2aWdhdGVkKTogQ2FsbCBXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIuZnJhbWVEaWROYXZpZ2F0ZS4KICAgICAgICAoV2ViSW5zcGVjdG9yLlBhZ2VPYnNlcnZlci5wcm90b3R5cGUuZnJhbWVEZXRhY2hlZCk6IENhbGwgV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLmZyYW1lRGlkRGV0YWNoLgoKMjAxMS0xMS0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIgYW5kIGhhdmUgaXQgYnVpbGQgdXAgdGhlIGJhc2ljIGZyYW1lIHRyZWUgZm9yIHRoZSBpbnNwZWN0ZWQgcGFnZS4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4NzE4PiBJbXBsZW1lbnQgdGhlIFJlc291cmNlIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgSmVzc2llIEJlcmxpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ZyYW1lLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lLnByb3RvdHlwZS5nZXQgaWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLmdldCBuYW1lKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lLnByb3RvdHlwZS5nZXQgdXJsKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lLnByb3RvdHlwZS5nZXQgY2hpbGRGcmFtZXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWUucHJvdG90eXBlLmFkZENoaWxkRnJhbWUpOgogICAgICAgICogVXNlckludGVyZmFjZS9GcmFtZVJlc291cmNlTWFuYWdlci5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUuaW5pdGlhbGl6ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUuZ2V0IG1haW5GcmFtZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUuX3Byb2Nlc3NNYWluRnJhbWVSZXNvdXJjZVRyZWVQYXlsb2FkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZS5fYWRkRnJhbWVUcmVlRnJvbUZyYW1lUmVzb3VyY2VUcmVlUGF5bG9hZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZSBGcmFtZS5qcyBhbmQgRnJhbWVSZXNvdXJjZU1hbmFnZXIuanMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKTogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci4KCjIwMTEtMTEtMjggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBSZW9yZGVyIHRoZSBjYWxscyBpbiBXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCB0byBwdXQgSW5zcGVjdG9yQmFja2VuZCBmaXJzdC4KCiAgICAgICAgVGhpcyBpcyBuZWVkZWQgc28gdGhhdCB0aGUgSW5zcGVjdG9yQmFja2VuZCBpcyByZWFkeSB0byB1c2UgYnkgdGhlIHVzZXIgaW50ZXJmYWNlIGVsZW1lbnRzLgoKICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOgoKMjAxMS0xMS0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBFbGVtZW50LnJlbW92ZUNoaWxkcmVuLCBBcnJheS5yZW1vdmUgYW5kIGlzRW50ZXJLZXkgZm9yIHRoZSBXZWIgSW5zcGVjdG9yLAogICAgICAgIHdoaWNoIGFyZSBuZWVkZWQgYnkgVHJlZU91dGxpbmUuCgogICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9VdGlsaXRpZXMuanM6CiAgICAgICAgKEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZUNoaWxkcmVuKTogQWRkZWQuCiAgICAgICAgKEFycmF5LnByb3RvdHlwZS5yZW1vdmUpOiBBZGRlZC4KICAgICAgICAoaXNFbnRlcktleSk6IEFkZGVkLgoKMjAxMS0xMS0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIENvcHkgdGhlIHRyZWVvdXRsaW5lLmpzIGZpbGUgZnJvbSB0aGUgT3BlblNvdXJjZSB0byB1c2UgaW4gdGhlIG5ldyBXZWIgSW5zcGVjdG9yLgoKICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBEYW4gQmVybnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVHJlZU91dGxpbmUuanM6IENvcGllZCBmcm9tIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90cmVlb3V0bGluZS5qcy4KCjIwMTEtMTEtMjggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBDb3B5IHRoZSBCaW5hcnlTZWFyY2guanMgZmlsZSBmcm9tIHRoZSBPcGVuU291cmNlIHRvIHVzZSBpbiB0aGUgbmV3IFdlYiBJbnNwZWN0b3IuCgogICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IERhbiBCZXJuc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9CaW5hcnlTZWFyY2guanM6IENvcGllZCBmcm9tIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CaW5hcnlTZWFyY2guanMuCgoyMDExLTExLTI4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSBkb3VibGUgY2xpY2tpbmcgYSBzaWRlYmFyIGRpdmlkZXIgdG9nZ2xlIHRoZSBjb2xsYXBzZWQgc3RhdGUgb2YgdGhlIHNpZGViYXIuCgogICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9TaWRlYmFyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2lkZWJhcik6IEFkZCBkYmxjbGljayBldmVudCBsaXN0ZW5lciBvbiB0aGUgcmVzaXplciBlbGVtZW50LgogICAgICAgIChXZWJJbnNwZWN0b3IuU2lkZWJhci5wcm90b3R5cGUuX3Jlc2l6ZXJEb3VibGVDbGlja2VkKTogVG9nZ2xlIHRoZSBjb2xsYXBzZWQgc3RhdGUuCgoyMDExLTExLTI4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgTWFrZSBFbGVtZW50LnRvdGFsT2Zmc2V0TGVmdCBhbmQgRWxlbWVudC50b3RhbE9mZnNldFRvcCBnZXR0ZXJzIGFnYWluLgoKICAgICAgICBIaXN0b3JpY2FsbHkgdGhlc2Ugd2VyZSBnZXR0ZXJzIHVudGlsIGEgR29vZ2xlIGVuZ2luZWVyIGNoYW5nZWQgdGhlbS4KICAgICAgICBJIGRpZG4ndCByZWFsaXplIHRoZXkgd2VyZW4ndCBhbnltb3JlIGFuZCB1c2VkIHRvdGFsT2Zmc2V0VG9wIGFzIGEKICAgICAgICBnZXR0ZXIgd2hlbiBtYWtpbmcgV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25CYXIsIHdoaWNoIGlzIGEgYnVnLgoKICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NpZGViYXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyLnByb3RvdHlwZS5fcmVzaXplck1vdXNlTW92ZWQpOiBSZW1vdmUgdGhlIGZ1bmN0aW9uIGNhbGwKICAgICAgICB3aGVuIHVzaW5nIHRvdGFsT2Zmc2V0TGVmdC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVXRpbGl0aWVzLmpzOgogICAgICAgIChFbGVtZW50LnByb3RvdHlwZS50b3RhbE9mZnNldExlZnQpOiBNYWRlIGEgZ2V0dGVyIHVzaW5nIF9fZGVmaW5lR2V0dGVyX18uCiAgICAgICAgKEVsZW1lbnQucHJvdG90eXBlLnRvdGFsT2Zmc2V0VG9wKTogRGl0dG8uCgoyMDExLTExLTI4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgVXBkYXRlIFdlYiBJbnNwZWN0b3IgZXZlbnQgb2JzZXJ2ZXJzIHRvIHJlZmxlY3QgY2hhbmdlcyBpbiBJbnNwZWN0b3IuanNvbiBmcm9tIE9wZW4gU291cmNlIGFzIG9mIHIxMDExOTQuCgogICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RlYnVnZ2VyT2JzZXJ2ZXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck9ic2VydmVyLnByb3RvdHlwZS5kZWJ1Z2dlcldhc0VuYWJsZWQpOiBSZW1vdmVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJPYnNlcnZlci5wcm90b3R5cGUuZGVidWdnZXJXYXNEaXNhYmxlZCk6IFJlbW92ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck9ic2VydmVyLnByb3RvdHlwZS5nbG9iYWxPYmplY3RDbGVhcmVkKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0luc3BlY3Rvck9ic2VydmVyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zcGVjdG9yT2JzZXJ2ZXIucHJvdG90eXBlLmRpc2Nvbm5lY3RGcm9tQmFja2VuZCk6IFJlbW92ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5JbnNwZWN0b3JPYnNlcnZlci5wcm90b3R5cGUuZGlzY29ubmVjdEZyb21Xb3JrZXIpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkluc3BlY3Rvck9ic2VydmVyLnByb3RvdHlwZS5icmluZ1RvRnJvbnQpOiBSZW1vdmVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zcGVjdG9yT2JzZXJ2ZXIucHJvdG90eXBlLnJlc2V0KTogUmVtb3ZlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkluc3BlY3Rvck9ic2VydmVyLnByb3RvdHlwZS5zaG93UGFuZWwpOiBSZW1vdmVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zcGVjdG9yT2JzZXJ2ZXIucHJvdG90eXBlLnN0YXJ0VXNlckluaXRpYXRlZERlYnVnZ2luZyk6IFJlbW92ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05ldHdvcmtPYnNlcnZlci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLk5ldHdvcmtPYnNlcnZlci5wcm90b3R5cGUucmVzcG9uc2VSZWNlaXZlZCk6IEFkZGVkIGZyYW1lSWQgYW5kIGxvYWRlcklkIGFyZ3VtZW50cy4KCjIwMTEtMTEtMTQgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBGaXggY29weSBhbmQgcGFzdGUgZXJyb3IgdGhhdCBjYWxsZWQgSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbnNvbGVEaXNwYXRjaGVyCiAgICAgICAgZm9yIGFsbCB0aGUgb3RoZXIgZGlzcGF0Y2hlcnMuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKToKCjIwMTEtMTEtMTEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgdGhlIFJlc291cmNlU2lkZWJhclBhbmVsIGNsYXNzIGluIHRoZSBuZXcgV2ViIEluc3BlY3Rvci4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4NzE4PiBJbXBsZW1lbnQgdGhlIFJlc291cmNlIHNpZGViYXIgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgSmVzc2llIEJlcmxpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOiBVc2UgUmVzb3VyY2VTaWRlYmFyUGFuZWwgZm9yIHRoZSBSZXNvdXJjZSBwYW5lbC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUmVzb3VyY2VTaWRlYmFyUGFuZWwuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyUGFuZWwpOgoKMjAxMS0xMS0xNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU9ic2VydmVyIHdpdGggc3R1YnMgZm9yIGV2ZW50cyBkZWZpbmVkIGJ5IHRoZSAiQXBwbGljYXRpb25DYWNoZSIgZG9tYWluLgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9BcHBsaWNhdGlvbkNhY2hlT2JzZXJ2ZXIuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU9ic2VydmVyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVPYnNlcnZlci5wcm90b3R5cGUuYXBwbGljYXRpb25DYWNoZVN0YXR1c1VwZGF0ZWQpOiBOb3QgaW1wbGVtZW50ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlT2JzZXJ2ZXIucHJvdG90eXBlLm5ldHdvcmtTdGF0ZVVwZGF0ZWQpOiBOb3QgaW1wbGVtZW50ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZSBBcHBsaWNhdGlvbkNhY2hlT2JzZXJ2ZXIuanMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKTogUmVnaXN0ZXIgYW4gaW5zdGFuY2Ugb2YgV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVPYnNlcnZlciB3aXRoIEluc3BlY3RvckJhY2tlbmQuCgoyMDExLTExLTE0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIFdlYkluc3BlY3Rvci5ET01TdG9yYWdlT2JzZXJ2ZXIgd2l0aCBzdHVicyBmb3IgZXZlbnRzIGRlZmluZWQgYnkgdGhlICJET01TdG9yYWdlIiBkb21haW4uCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RPTVN0b3JhZ2VPYnNlcnZlci5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01TdG9yYWdlT2JzZXJ2ZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZU9ic2VydmVyLnByb3RvdHlwZS5hZGRET01TdG9yYWdlKTogTm90IGltcGxlbWVudGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZU9ic2VydmVyLnByb3RvdHlwZS51cGRhdGVET01TdG9yYWdlKTogTm90IGltcGxlbWVudGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEluY2x1ZGUgRE9NU3RvcmFnZU9ic2VydmVyLmpzLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IFJlZ2lzdGVyIGFuIGluc3RhbmNlIG9mIFdlYkluc3BlY3Rvci5ET01TdG9yYWdlT2JzZXJ2ZXIgd2l0aCBJbnNwZWN0b3JCYWNrZW5kLgoKMjAxMS0xMS0xNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBXZWJJbnNwZWN0b3IuRGF0YWJhc2VPYnNlcnZlciB3aXRoIHN0dWJzIGZvciBldmVudHMgZGVmaW5lZCBieSB0aGUgIkRhdGFiYXNlIiBkb21haW4uCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0RhdGFiYXNlT2JzZXJ2ZXIuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YWJhc2VPYnNlcnZlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZU9ic2VydmVyLnByb3RvdHlwZS5hZGREYXRhYmFzZSk6IE5vdCBpbXBsZW1lbnRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlT2JzZXJ2ZXIucHJvdG90eXBlLnNxbFRyYW5zYWN0aW9uU3VjY2VlZGVkKTogTm90IGltcGxlbWVudGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YWJhc2VPYnNlcnZlci5wcm90b3R5cGUuc3FsVHJhbnNhY3Rpb25GYWlsZWQpOiBOb3QgaW1wbGVtZW50ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZSBEYXRhYmFzZU9ic2VydmVyLmpzLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IFJlZ2lzdGVyIGFuIGluc3RhbmNlIG9mIFdlYkluc3BlY3Rvci5EYXRhYmFzZU9ic2VydmVyIHdpdGggSW5zcGVjdG9yQmFja2VuZC4KCjIwMTEtMTEtMTQgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyT2JzZXJ2ZXIgd2l0aCBzdHVicyBmb3IgZXZlbnRzIGRlZmluZWQgYnkgdGhlICJEZWJ1Z2dlciIgZG9tYWluLgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9EZWJ1Z2dlck9ic2VydmVyLmpzOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyT2JzZXJ2ZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJPYnNlcnZlci5wcm90b3R5cGUuZGVidWdnZXJXYXNFbmFibGVkKTogTm90IGltcGxlbWVudGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJPYnNlcnZlci5wcm90b3R5cGUuZGVidWdnZXJXYXNEaXNhYmxlZCk6IE5vdCBpbXBsZW1lbnRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyT2JzZXJ2ZXIucHJvdG90eXBlLnNjcmlwdFBhcnNlZCk6IE5vdCBpbXBsZW1lbnRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyT2JzZXJ2ZXIucHJvdG90eXBlLnNjcmlwdEZhaWxlZFRvUGFyc2UpOiBOb3QgaW1wbGVtZW50ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck9ic2VydmVyLnByb3RvdHlwZS5icmVha3BvaW50UmVzb2x2ZWQpOiBOb3QgaW1wbGVtZW50ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck9ic2VydmVyLnByb3RvdHlwZS5wYXVzZWQpOiBOb3QgaW1wbGVtZW50ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck9ic2VydmVyLnByb3RvdHlwZS5yZXN1bWVkKTogTm90IGltcGxlbWVudGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEluY2x1ZGUgRGVidWdnZXJPYnNlcnZlci5qcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOiBSZWdpc3RlciBhbiBpbnN0YW5jZSBvZiBXZWJJbnNwZWN0b3IuRGVidWdnZXJPYnNlcnZlciB3aXRoIEluc3BlY3RvckJhY2tlbmQuCgoyMDExLTExLTE0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIFdlYkluc3BlY3Rvci5ET01PYnNlcnZlciB3aXRoIHN0dWJzIGZvciBldmVudHMgZGVmaW5lZCBieSB0aGUgIkRPTSIgZG9tYWluLgoKICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBXZWluc3RlaW4uCgogICAgICAgICogVXNlckludGVyZmFjZS9ET01PYnNlcnZlci5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01PYnNlcnZlcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01PYnNlcnZlci5wcm90b3R5cGUuZG9jdW1lbnRVcGRhdGVkKTogTm90IGltcGxlbWVudGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NT2JzZXJ2ZXIucHJvdG90eXBlLnNldENoaWxkTm9kZXMpOiBOb3QgaW1wbGVtZW50ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01PYnNlcnZlci5wcm90b3R5cGUuYXR0cmlidXRlTW9kaWZpZWQpOiBOb3QgaW1wbGVtZW50ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01PYnNlcnZlci5wcm90b3R5cGUuYXR0cmlidXRlUmVtb3ZlZCk6IE5vdCBpbXBsZW1lbnRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU9ic2VydmVyLnByb3RvdHlwZS5pbmxpbmVTdHlsZUludmFsaWRhdGVkKTogTm90IGltcGxlbWVudGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuRE9NT2JzZXJ2ZXIucHJvdG90eXBlLmNoYXJhY3RlckRhdGFNb2RpZmllZCk6IE5vdCBpbXBsZW1lbnRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU9ic2VydmVyLnByb3RvdHlwZS5jaGlsZE5vZGVDb3VudFVwZGF0ZWQpOiBOb3QgaW1wbGVtZW50ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01PYnNlcnZlci5wcm90b3R5cGUuY2hpbGROb2RlSW5zZXJ0ZWQpOiBOb3QgaW1wbGVtZW50ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5ET01PYnNlcnZlci5wcm90b3R5cGUuY2hpbGROb2RlUmVtb3ZlZCk6IE5vdCBpbXBsZW1lbnRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlIERPTU9ic2VydmVyLmpzLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IFJlZ2lzdGVyIGFuIGluc3RhbmNlIG9mIFdlYkluc3BlY3Rvci5ET01PYnNlcnZlciB3aXRoIEluc3BlY3RvckJhY2tlbmQuCgoyMDExLTExLTE0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgQWRkIFdlYkluc3BlY3Rvci5OZXR3b3JrT2JzZXJ2ZXIgd2l0aCBzdHVicyBmb3IgZXZlbnRzIGRlZmluZWQgYnkgdGhlICJOZXR3b3JrIiBkb21haW4uCgogICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IEluY2x1ZGUgTmV0d29ya09ic2VydmVyLmpzLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuY29udGVudExvYWRlZCk6IFJlZ2lzdGVyIGFuIGluc3RhbmNlIG9mIFdlYkluc3BlY3Rvci5OZXR3b3JrT2JzZXJ2ZXIgd2l0aCBJbnNwZWN0b3JCYWNrZW5kLgogICAgICAgICogVXNlckludGVyZmFjZS9OZXR3b3JrT2JzZXJ2ZXIuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya09ic2VydmVyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLk5ldHdvcmtPYnNlcnZlci5wcm90b3R5cGUucmVxdWVzdFdpbGxCZVNlbnQpOiBOb3QgaW1wbGVtZW50ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrT2JzZXJ2ZXIucHJvdG90eXBlLnJlcXVlc3RTZXJ2ZWRGcm9tQ2FjaGUpOiBOb3QgaW1wbGVtZW50ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrT2JzZXJ2ZXIucHJvdG90eXBlLnJlc3BvbnNlUmVjZWl2ZWQpOiBOb3QgaW1wbGVtZW50ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrT2JzZXJ2ZXIucHJvdG90eXBlLmRhdGFSZWNlaXZlZCk6IE5vdCBpbXBsZW1lbnRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLk5ldHdvcmtPYnNlcnZlci5wcm90b3R5cGUubG9hZGluZ0ZpbmlzaGVkKTogTm90IGltcGxlbWVudGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya09ic2VydmVyLnByb3RvdHlwZS5sb2FkaW5nRmFpbGVkKTogTm90IGltcGxlbWVudGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya09ic2VydmVyLnByb3RvdHlwZS5yZXF1ZXN0U2VydmVkRnJvbU1lbW9yeUNhY2hlKTogTm90IGltcGxlbWVudGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuTmV0d29ya09ic2VydmVyLnByb3RvdHlwZS53ZWJTb2NrZXRXaWxsU2VuZEhhbmRzaGFrZVJlcXVlc3QpOiBOb3QgaW1wbGVtZW50ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrT2JzZXJ2ZXIucHJvdG90eXBlLndlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlUmVjZWl2ZWQpOiBOb3QgaW1wbGVtZW50ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrT2JzZXJ2ZXIucHJvdG90eXBlLndlYlNvY2tldENyZWF0ZWQpOiBOb3QgaW1wbGVtZW50ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5OZXR3b3JrT2JzZXJ2ZXIucHJvdG90eXBlLndlYlNvY2tldENsb3NlZCk6IE5vdCBpbXBsZW1lbnRlZC4KCjIwMTEtMTEtMTQgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgV2ViSW5zcGVjdG9yLkNvbnNvbGVPYnNlcnZlciB3aXRoIHN0dWJzIGZvciBldmVudHMgZGVmaW5lZCBieSB0aGUgIkNvbnNvbGUiIGRvbWFpbi4KCiAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZSBDb25zb2xlT2JzZXJ2ZXIuanMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKTogUmVnaXN0ZXIgYW4gaW5zdGFuY2Ugb2YgV2ViSW5zcGVjdG9yLkNvbnNvbGVPYnNlcnZlciB3aXRoIEluc3BlY3RvckJhY2tlbmQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnNvbGVPYnNlcnZlci5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlT2JzZXJ2ZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU9ic2VydmVyLnByb3RvdHlwZS5tZXNzYWdlQWRkZWQpOiBOb3QgaW1wbGVtZW50ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlT2JzZXJ2ZXIucHJvdG90eXBlLm1lc3NhZ2VSZXBlYXRDb3VudFVwZGF0ZWQpOiBOb3QgaW1wbGVtZW50ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlT2JzZXJ2ZXIucHJvdG90eXBlLm1lc3NhZ2VzQ2xlYXJlZCk6IE5vdCBpbXBsZW1lbnRlZC4KCjIwMTEtMTEtMTQgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgV2ViSW5zcGVjdG9yLlBhZ2VPYnNlcnZlciB3aXRoIHN0dWJzIGZvciBldmVudHMgZGVmaW5lZCBieSB0aGUgIlBhZ2UiIGRvbWFpbi4KCiAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZSBQYWdlT2JzZXJ2ZXIuanMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKTogUmVnaXN0ZXIgYW4gaW5zdGFuY2Ugb2YgV2ViSW5zcGVjdG9yLlBhZ2VPYnNlcnZlciB3aXRoIEluc3BlY3RvckJhY2tlbmQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1BhZ2VPYnNlcnZlci5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5QYWdlT2JzZXJ2ZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUGFnZU9ic2VydmVyLnByb3RvdHlwZS5kb21Db250ZW50RXZlbnRGaXJlZCk6IE5vdCBpbXBsZW1lbnRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlBhZ2VPYnNlcnZlci5wcm90b3R5cGUubG9hZEV2ZW50RmlyZWQpOiBOb3QgaW1wbGVtZW50ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5QYWdlT2JzZXJ2ZXIucHJvdG90eXBlLmZyYW1lTmF2aWdhdGVkKTogTm90IGltcGxlbWVudGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuUGFnZU9ic2VydmVyLnByb3RvdHlwZS5mcmFtZURldGFjaGVkKTogTm90IGltcGxlbWVudGVkLgoKMjAxMS0xMS0xMyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBXZWJJbnNwZWN0b3IuSW5zcGVjdG9yT2JzZXJ2ZXIgdG8gcmVjZWl2ZSBldmVudHMgZGVmaW5lZCBieSB0aGUgIkluc3BlY3RvciIgZG9tYWluLgogICAgICAgIE1vc3Qgb2YgdGhlIGV2ZW50cyBhcmUgdW5pbXBsZW1lbnRlZCBzdHVicyBhdCB0aGlzIHBvaW50LgoKICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zcGVjdG9yT2JzZXJ2ZXIuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zcGVjdG9yT2JzZXJ2ZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zcGVjdG9yT2JzZXJ2ZXIucHJvdG90eXBlLmZyb250ZW5kUmV1c2VkKTogTm90IGltcGxlbWVudGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zcGVjdG9yT2JzZXJ2ZXIucHJvdG90eXBlLmJyaW5nVG9Gcm9udCk6IENhbGwgdGhyb3VnaCB0byBJbnNwZWN0b3JGcm9udGVuZEhvc3QuCiAgICAgICAgKFdlYkluc3BlY3Rvci5JbnNwZWN0b3JPYnNlcnZlci5wcm90b3R5cGUuZGlzY29ubmVjdEZyb21CYWNrZW5kKTogRGl0dG8uCiAgICAgICAgKFdlYkluc3BlY3Rvci5JbnNwZWN0b3JPYnNlcnZlci5wcm90b3R5cGUucmVzZXQpOiBOb3QgaW1wbGVtZW50ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5JbnNwZWN0b3JPYnNlcnZlci5wcm90b3R5cGUuc2hvd1BhbmVsKTogTm90IGltcGxlbWVudGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zcGVjdG9yT2JzZXJ2ZXIucHJvdG90eXBlLnN0YXJ0VXNlckluaXRpYXRlZERlYnVnZ2luZyk6IE5vdCBpbXBsZW1lbnRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLkluc3BlY3Rvck9ic2VydmVyLnByb3RvdHlwZS5ldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKTogTm90IGltcGxlbWVudGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zcGVjdG9yT2JzZXJ2ZXIucHJvdG90eXBlLmluc3BlY3QpOiBOb3QgaW1wbGVtZW50ZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5JbnNwZWN0b3JPYnNlcnZlci5wcm90b3R5cGUuZGlkQ3JlYXRlV29ya2VyKTogTm90IGltcGxlbWVudGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuSW5zcGVjdG9yT2JzZXJ2ZXIucHJvdG90eXBlLmRpZERlc3Ryb3lXb3JrZXIpOiBOb3QgaW1wbGVtZW50ZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDogSW5jbHVkZSBJbnNwZWN0b3JPYnNlcnZlci5qcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmNvbnRlbnRMb2FkZWQpOiBSZW1vdmVkIHRoZSBsb2FkIGV2ZW50IGxpc3RlbmVyIGFuZCBjYWxsIEluc3BlY3RvckZyb250ZW5kSG9zdC5sb2FkZWQKICAgICAgICBoZXJlLiBSZWdpc3RlciBhbiBpbnN0YW5jZSBvZiBXZWJJbnNwZWN0b3IuSW5zcGVjdG9yT2JzZXJ2ZXIgd2l0aCBJbnNwZWN0b3JCYWNrZW5kLgoKMjAxMS0xMS0xMyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEluY2x1ZGUgSW5zcGVjdG9yQmFja2VuZC5qcyBhbmQgc3RhcnQgYWNjZXB0aW5nIG1lc3NhZ2VzIGZyb20gdGhlIGJhY2tlbmQuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLmRpc3BhdGNoTmV4dFF1ZXVlZE1lc3NhZ2VGcm9tQmFja2VuZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuZGlzcGF0Y2hNZXNzYWdlRnJvbUJhY2tlbmQpOiBBZGRlZC4KCjIwMTEtMTEtMTEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBDb3B5IEluc3BlY3RvckJhY2tlbmRTdHViLmpzIGZyb20gV2ViQ29yZSBzbyBpdCBjYW4gYmUgdXNlZCBieSB0aGUgbmV3IFdlYiBJbnNwZWN0b3IuCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBXZWJJbnNwZWN0b3JVSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGQgbmV3IENvcHkgV2ViQ29yZSBJbnNwZWN0b3IgUmVzb3VyY2VzIGJ1aWxkIHBoYXNlLgogICAgICAgICogQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZzogQWRkIFdFQkNPUkVfUkVTT1VSQ0VTX0RJUi4KCjIwMTEtMTEtMTAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgV2ViSW5zcGVjdG9yLkZsZXhpYmxlU3BhY2VOYXZpZ2F0aW9uSXRlbSBhbmQgbWFrZSB0aGUgbmF2aWdhdGlvbiBiYXIgdXNlIGZsZXggYm94IGxheW91dC4KCiAgICAgICAgVGhpcyBjaGFuZ2Ugd2lsbCBhbGxvdyBmb3IgY29udHJvbHMgdGhhdCBmbG9hdCB0byB0aGUgcmlnaHQgb3IgbGVmdCAobGlrZSBhIGNsb3NlIGJ1dHRvbiB3aGVuIGRvY2tlZC4pCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxODY5OT4gSW1wbGVtZW50IHRoZSBpbnRlcmZhY2Ugc3RydWN0dXJlIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKTogQWRkIGZsZXhpYmxlIHNwYWNlcyBvbiBlYWNoIHNpZGUuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05hdmlnYXRpb25CYXIuY3NzOgogICAgICAgICgubmF2aWdhdGlvbi1iYXIpOiBVc2UgLXdlYmtpdC1ib3guCiAgICAgICAgKC5uYXZpZ2F0aW9uLWJhciA+IC5pdGVtKTogQWRkZWQuCiAgICAgICAgKC5uYXZpZ2F0aW9uLWJhciA+IC5pdGVtLmZsZXhpYmxlLXNwYWNlKTogQWRkZWQuCiAgICAgICAgKC5uYXZpZ2F0aW9uLWJhciA+IC5pdGVtLmJ1dHRvbik6IFJlbW92ZSBzdHlsZXMgdGhhdCBhcmVuJ3QgbmVlZGVkIGFueW1vcmUuCiAgICAgICAgKC5uYXZpZ2F0aW9uLWJhciA+IC5pdGVtLmJ1dHRvbiA+IC5nbHlwaCk6IFVzZSBhdXRvIG1hcmdpbnMgdG8gY2VudGVyIHRoZSBnbHlwaCBzaW5jZSB0ZXh0LWFsaWduIG5vIGxvbmdlciB3b3Jrcy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvbkJhci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25CYXIucHJvdG90eXBlLl9jYWxjdWxhdGVNaW5pbXVtV2lkdGgpOiBTa2lwIGZsZXhpYmxlIHNwYWNlcy4KICAgICAgICAoV2ViSW5zcGVjdG9yLkZsZXhpYmxlU3BhY2VOYXZpZ2F0aW9uSXRlbSk6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9TaWRlYmFyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2lkZWJhci5wcm90b3R5cGUuZ2V0IG5hdmlnYXRpb25CYXIpOiBBZGRlZC4KCjIwMTEtMTEtMTAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBSZW5hbWUgV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25JdGVtIHRvIFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbSBhbmQgbWFrZSBuZXcKICAgICAgICBXZWJJbnNwZWN0b3IuUmFkaW9CdXR0b25OYXZpZ2F0aW9uSXRlbSBhbmQgV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25JdGVtIGNsYXNzZXMuCgogICAgICAgIFRoaXMgY2hhbmdlIGFsbG93cyBmb3IgZnV0dXJlIG5vbi1yYWRpby1idXR0b24gaXRlbXMgdG8gYmUgcGxhY2VkIGluIGEgTmF2aWdhdGlvbkJhci4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4Njk5PiBJbXBsZW1lbnQgdGhlIGludGVyZmFjZSBzdHJ1Y3R1cmUgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvbkJhci5jc3M6CiAgICAgICAgKC5uYXZpZ2F0aW9uLWJhciA+IC5pdGVtLmJ1dHRvbik6CiAgICAgICAgKC5uYXZpZ2F0aW9uLWJhci5jb2xsYXBzZWQgPiAuaXRlbS5idXR0b24pOgogICAgICAgICgubmF2aWdhdGlvbi1iYXIgPiAuaXRlbS5idXR0b24gPiAuZ2x5cGgpOgogICAgICAgICgubmF2aWdhdGlvbi1iYXIgPiAuaXRlbS5idXR0b24uc2VsZWN0ZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uQmFyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvbkJhci5wcm90b3R5cGUuX21vdXNlRG93bik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uQmFyLnByb3RvdHlwZS5fbW91c2VNb3ZlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uSXRlbSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuZ2V0IF9jbGFzc05hbWVzKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkJ1dHRvbk5hdmlnYXRpb25JdGVtKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkJ1dHRvbk5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5nZW5lcmF0ZVN0eWxlVGV4dCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuX2FkZGl0aW9uYWxDbGFzc05hbWVzLldlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbS5TdHlsZUNsYXNzTmFtZS5fY2FudmFzSWRlbnRpZmllcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuX2dlbmVyYXRlSW1hZ2VzLl9pbWFnZUxvYWRlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuX2dlbmVyYXRlSW1hZ2VzLl9jcmVhdGVFbWJvc3NlZENhbnZhc0ltYWdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJhZGlvQnV0dG9uTmF2aWdhdGlvbkl0ZW0pOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmFkaW9CdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuZ2V0IHNlbGVjdGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJhZGlvQnV0dG9uTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLnNldCBzZWxlY3RlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5SYWRpb0J1dHRvbk5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5nZXQgYWN0aXZlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlJhZGlvQnV0dG9uTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLnNldCBhY3RpdmUpOgogICAgICAgIChXZWJJbnNwZWN0b3IuUmFkaW9CdXR0b25OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuZ2VuZXJhdGVTdHlsZVRleHQpOgogICAgICAgICogVXNlckludGVyZmFjZS9TaWRlYmFyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2lkZWJhclBhbmVsKToKCjIwMTEtMTEtMTAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgc3VwcG9ydCBmb3IgcmVzaXppbmcgdGhlIHNpZGViYXJzIGluIHRoZSBuZXcgV2ViIEluc3BlY3Rvci4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4Njk5PiBJbXBsZW1lbnQgdGhlIGludGVyZmFjZSBzdHJ1Y3R1cmUgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9obiBTdWxsaXZhbi4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uY3NzOgogICAgICAgIChib2R5KTogUHJldmVudCBvdmVyZmxvdy4KICAgICAgICAoI25hdmlnYXRpb24tc2lkZWJhcik6IE1vdmVkIGJvcmRlciBhbmQgYmFja2dyb3VuZCBwcm9wZXJ0aWVzIHRvIFNpZGViYXIuY3NzLgogICAgICAgICgjZGV0YWlscy1zaWRlYmFyKTogRGl0dG8uCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKTogU3BlY2lmeSB0aGUgc2lkZSBmb3IgdGhlIHNpZGViYXJzLgogICAgICAgICogVXNlckludGVyZmFjZS9TaWRlYmFyLmNzczoKICAgICAgICAoLnNpZGViYXIuY29sbGFwc2VkKTogQWRkZWQuCiAgICAgICAgKC5zaWRlYmFyID4gLnJlc2l6ZXIpOiBBZGRlZC4KICAgICAgICAoLnNpZGViYXIucmlnaHQgPiAucmVzaXplcik6IEFkZGVkLgogICAgICAgICguc2lkZWJhci5sZWZ0ID4gLnJlc2l6ZXIpOiBBZGRlZC4KICAgICAgICAoLnNpZGViYXIuY29sbGFwc2VkLnJpZ2h0ID4gLnJlc2l6ZXIpOiBBZGRlZC4KICAgICAgICAoLnNpZGViYXIuY29sbGFwc2VkLmxlZnQgPiAucmVzaXplcik6IEFkZGVkLgogICAgICAgICguc2lkZWJhci5sZWZ0KTogQWRkZWQuCiAgICAgICAgKC5zaWRlYmFyLmxlZnQ6bm90KC5jb2xsYXBzZWQpID4gLm5hdmlnYXRpb24tYmFyKTogQWRkZWQuCiAgICAgICAgKGJvZHkud2luZG93LWluYWN0aXZlIC5zaWRlYmFyLmxlZnQgPiAubmF2aWdhdGlvbi1iYXIpOiBBZGRlZC4KICAgICAgICAoLnNpZGViYXIucmlnaHQpOiBBZGRlZC4KICAgICAgICAoLnNpZGViYXIucmlnaHQ6bm90KC5jb2xsYXBzZWQpID4gLm5hdmlnYXRpb24tYmFyKTogQWRkZWQuCiAgICAgICAgKGJvZHkud2luZG93LWluYWN0aXZlIC5zaWRlYmFyLnJpZ2h0ID4gLm5hdmlnYXRpb24tYmFyKTogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NpZGViYXIuanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyKTogQWRkZWQgdGhlIHNpZGUgYXJndW1lbnQuIFNldHVwIHRoZSByZXNpemVyIGVsZW1lbnQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyLnByb3RvdHlwZS5nZXQgbWluaW11bVdpZHRoKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyLnByb3RvdHlwZS5nZXQgbWF4aW11bVdpZHRoKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyLnByb3RvdHlwZS5nZXQgd2lkdGgpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXIucHJvdG90eXBlLnNldCB3aWR0aCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuU2lkZWJhci5wcm90b3R5cGUuZ2V0IGNvbGxhcHNlZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuU2lkZWJhci5wcm90b3R5cGUuc2V0IGNvbGxhcHNlZCk6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuU2lkZWJhci5wcm90b3R5cGUuZ2V0IHNpZGUpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXIucHJvdG90eXBlLl9yZXNpemVyTW91c2VEb3duKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyLnByb3RvdHlwZS5fcmVzaXplck1vdXNlTW92ZWQpOiBBZGRlZC4KICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXIucHJvdG90eXBlLl9yZXNpemVyTW91c2VVcCk6IEFkZGVkLgoKMjAxMS0xMS0xMCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBtaW5pbXVtV2lkdGggYW5kIHN1cHBvcnQgZm9yIGNvbGxhcHNpbmcgb2YgdGhlIG5hdmlnYXRpb24gYmFyIGl0ZW1zIGluIHRoZSBXZWIgSW5zcGVjdG9yLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTg2OTk+IEltcGxlbWVudCB0aGUgaW50ZXJmYWNlIHN0cnVjdHVyZSBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuIGFuZCBKb3NlcGggUGVjb3Jhcm8uCgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uQmFyLmNzczoKICAgICAgICAoLm5hdmlnYXRpb24tYmFyKTogUHJldmVudCBvdmVyZmxvdy4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvbkJhci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25CYXIucHJvdG90eXBlLmFkZE5hdmlnYXRpb25JdGVtKTogU2V0IF9taW5pbXVtV2lkdGhOZWVkc1JlY2FsY3VsYXRlZCB0byB0cnVlLgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvbkJhci5wcm90b3R5cGUudXBkYXRlTGF5b3V0KTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uQmFyLnByb3RvdHlwZS5nZXQgbWluaW11bVdpZHRoKTogQWRkZWQuIENhbGwgX2NhbGN1bGF0ZU1pbmltdW1XaWR0aCBpZiBuZWVkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uQmFyLnByb3RvdHlwZS5fY2FsY3VsYXRlTWluaW11bVdpZHRoKTogQWRkZWQuCgoyMDExLTExLTA5ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KCiAgICAgICAgVXNlIGNoaWxkIENTUyBzZWxlY3RvcnMgZm9yIHRoZSBOYXZpZ2F0aW9uQmFyIGluIHRoZSBuZXcgV2ViIEluc3BlY3Rvci4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4Njk5PiBJbXBsZW1lbnQgdGhlIGludGVyZmFjZSBzdHJ1Y3R1cmUgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9uIEhvbmV5Y3V0dC4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL05hdmlnYXRpb25CYXIuY3NzOgogICAgICAgICgubmF2aWdhdGlvbi1iYXIgPiAuaXRlbSk6CiAgICAgICAgKC5uYXZpZ2F0aW9uLWJhci5jb2xsYXBzZWQgPiAuaXRlbSk6CiAgICAgICAgKC5uYXZpZ2F0aW9uLWJhciA+IC5pdGVtID4gLmdseXBoKToKICAgICAgICAoLm5hdmlnYXRpb24tYmFyID4gLml0ZW0uc2VsZWN0ZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uQmFyLmpzOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLmdlbmVyYXRlU3R5bGVUZXh0KToKCjIwMTEtMTEtMDkgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBJbXByb3ZlIHRoZSB3aW5kb3cgaW5hY3RpdmUgYXBwZWFyYW5jZSBmb3IgdGhlIG5hdmlnYXRpb24gYmFycyBhbmQgc2lkZWJhcnMgaW4gdGhlIG5ldyBXZWIgSW5zcGVjdG9yLgoKICAgICAgICBQYXJ0IG9mOiA8cmRhcjovL3Byb2JsZW0vMTAzMTg2OTk+IEltcGxlbWVudCB0aGUgaW50ZXJmYWNlIHN0cnVjdHVyZSBmb3IgdGhlIG5ldyBXZWIgSW5zcGVjdG9yIGRlc2lnbgoKICAgICAgICBSZXZpZXdlZCBieSBKb24gSG9uZXljdXR0LgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5jc3M6CiAgICAgICAgKGJvZHkud2luZG93LWluYWN0aXZlICNuYXZpZ2F0aW9uLXNpZGViYXIgPiAubmF2aWdhdGlvbi1iYXIpOiBBZGRlZC4gU2V0IGEgZ3JleSBiYWNrZ3JvdW5kIGNvbG9yLgogICAgICAgICgjZGV0YWlscy1zaWRlYmFyID4gLm5hdmlnYXRpb24tYmFyKTogVXNlIGEgZ3JleSBiYWNrZ3JvdW5kIGNvbG9yLgogICAgICAgIChib2R5LndpbmRvdy1pbmFjdGl2ZSAjZGV0YWlscy1zaWRlYmFyID4gLm5hdmlnYXRpb24tYmFyKTogQWRkZWQuIFNldCBhIGdyZXkgYmFja2dyb3VuZCBjb2xvci4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvbkJhci5jc3M6CiAgICAgICAgKGJvZHkud2luZG93LWluYWN0aXZlIC5uYXZpZ2F0aW9uLWJhcik6IFVzZSBhIGdyZXkgYmFja2dyb3VuZCBjb2xvci4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvU2lkZWJhci5jc3M6CiAgICAgICAgKGJvZHkud2luZG93LWluYWN0aXZlIC5zaWRlYmFyKTogU2xpZ2h0IHR3ZWFrIHRvIHRoZSBncmV5IGNvbG9yIHRvIG1hdGNoIFhjb2RlLgoKMjAxMS0xMS0wOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIExheW91dCB0aGUgc2lkZWJhcnMgYW5kIGJhc2ljIHN0cnVjdHVyZSBvZiB0aGUgbmV3IFdlYiBJbnNwZWN0b3IuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxODY5OT4gSW1wbGVtZW50IHRoZSBpbnRlcmZhY2Ugc3RydWN0dXJlIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uY3NzOgogICAgICAgIChib2R5KTogVXNlIGZsZXgtYm94LCBwb3NpdGlvbiB0byBmaWxsIHRoZSB2aWV3cG9ydC4gRGlzYWJsZWQgdXNlciBzZWxlY3QgYW5kIGRyYWcuCiAgICAgICAgKCNuYXZpZ2F0aW9uLXNpZGViYXIpOiBBZGRlZC4KICAgICAgICAoI25hdmlnYXRpb24tc2lkZWJhciA+IC5uYXZpZ2F0aW9uLWJhcik6IEFkZGVkLgogICAgICAgICgjY29udGVudCk6IEFkZGVkLgogICAgICAgICgjY29udGVudC1wYW5lbHMpOiBBZGRlZC4KICAgICAgICAoI3F1aWNrLW5hdmlnYXRpb24tYmFyKTogQWRkZWQuCiAgICAgICAgKCNkZXRhaWxzLXNpZGViYXIpOiBBZGRlZC4KICAgICAgICAoI2RldGFpbHMtc2lkZWJhciA+IC5uYXZpZ2F0aW9uLWJhcik6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6CiAgICAgICAgKFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkKTogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci53aW5kb3dMb2FkZWQpOiBBZGRlZC4KCjIwMTEtMTEtMDggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgYmFzaWMgU2lkZWJhciBzdXBwb3J0IGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IuCgogICAgICAgIFBhcnQgb2Y6IDxyZGFyOi8vcHJvYmxlbS8xMDMxODY5OT4gSW1wbGVtZW50IHRoZSBpbnRlcmZhY2Ugc3RydWN0dXJlIGZvciB0aGUgbmV3IFdlYiBJbnNwZWN0b3IgZGVzaWduCgogICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIFdlaW5zdGVpbiBhbmQgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBJbmNsdWRlIFNpZGViYXIuanMgYW5kIFNpZGViYXIuY3NzLgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgogICAgICAgICh3aW5kb3dMb2FkZWQpOiBDaGFuZ2UgdGVzdCBjb2RlIHRvIHVzZSBTaWRlYmFyIGNsYXNzZXMuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NpZGViYXIuY3NzOiBBZGRlZC4KICAgICAgICAoLnNpZGViYXIpOgogICAgICAgIChib2R5LndpbmRvdy1pbmFjdGl2ZSAuc2lkZWJhcik6CiAgICAgICAgKC5zaWRlYmFyID4gLm5hdmlnYXRpb24tYmFyKToKICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwpOgogICAgICAgICguc2lkZWJhciA+IC5wYW5lbC5zZWxlY3RlZCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1NpZGViYXIuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuU2lkZWJhcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyLnByb3RvdHlwZS5hZGRTaWRlYmFyUGFuZWwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2lkZWJhci5wcm90b3R5cGUuZ2V0IHNlbGVjdGVkU2lkZWJhclBhbmVsKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXIucHJvdG90eXBlLnNldCBzZWxlY3RlZFNpZGViYXJQYW5lbCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyLnByb3RvdHlwZS5nZXQgc2lkZWJhclBhbmVscyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyLnByb3RvdHlwZS5nZXQgZWxlbWVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyLnByb3RvdHlwZS5fbmF2aWdhdGlvbkl0ZW1TZWxlY3RlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyUGFuZWwpOgogICAgICAgIChXZWJJbnNwZWN0b3IuU2lkZWJhclBhbmVsLnByb3RvdHlwZS5nZXQgaWRlbnRpZmllcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyUGFuZWwucHJvdG90eXBlLmdldCBuYXZpZ2F0aW9uSXRlbSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5TaWRlYmFyUGFuZWwucHJvdG90eXBlLmdldCBlbGVtZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXJQYW5lbC5wcm90b3R5cGUuZ2V0IHNlbGVjdGVkKToKICAgICAgICAoV2ViSW5zcGVjdG9yLlNpZGViYXJQYW5lbC5wcm90b3R5cGUuc2V0IHNlbGVjdGVkKToKCjIwMTEtMTEtMDggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBGaXJlIGFuIGV2ZW50IHdoZW4gYSBuYXZpZ2F0aW9uIGl0ZW0gaXMgc2VsZWN0ZWQgaW4gYSBuYXZpZ2F0aW9uIGJhci4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4Njk5PiBJbXBsZW1lbnQgdGhlIGludGVyZmFjZSBzdHJ1Y3R1cmUgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gV2VpbnN0ZWluLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvbkJhci5qczoKICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25CYXIucHJvdG90eXBlLmFkZE5hdmlnYXRpb25JdGVtKTogUmVtb3ZlIHVudXNlZCBhcmd1bWVudHMuIChEcml2ZSBieSBjaGFuZ2UuKQogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvbkJhci5wcm90b3R5cGUuc2V0IHNlbGVjdGVkTmF2aWdhdGlvbkl0ZW0pOiBBdm9pZCBkb2luZyB3b3JrIGlmIHRoZSBpdGVtIGlzIGFscmVhZHkKICAgICAgICBzZWxlY3RlZC4gRmlyZSB0aGUgZXZlbnQgaWYgdGhlIG1vdXNlIGlzbid0IGRvd24uCiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uQmFyLnByb3RvdHlwZS5fbW91c2VEb3duKTogU3RvcmUgdGhlIHByZXZpb3VzIHNlbGVjdGVkIGl0ZW0uCiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uQmFyLnByb3RvdHlwZS5fbW91c2VVcCk6IEZpcmUgdGhlIGV2ZW50IGlmIHRoZSBzZWxlY3RlZCBpdGVtIGlzIGRpZmZlcmVudC4KCjIwMTEtMTAtMzEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKICAgICAgICBBZGQgdGhlIG5hdmlnYXRpb24gYmFyIGZvciB0aGUgbmV3IFdlYiBJbnNlY3Rvci4KCiAgICAgICAgUGFydCBvZjogPHJkYXI6Ly9wcm9ibGVtLzEwMzE4Njk5PiBJbXBsZW1lbnQgdGhlIGludGVyZmFjZSBzdHJ1Y3R1cmUgZm9yIHRoZSBuZXcgV2ViIEluc3BlY3RvciBkZXNpZ24KCiAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05hdmlnYXRpb25JdGVtQnJlYWtwb2ludC5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmF2aWdhdGlvbkl0ZW1GaWxlLnBkZjogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OYXZpZ2F0aW9uSXRlbUxvZy5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmF2aWdhdGlvbkl0ZW1NYWduaWZ5aW5nR2xhc3MucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05hdmlnYXRpb25JdGVtU3RvcHdhdGNoLnBkZjogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL0ltYWdlcy9OYXZpZ2F0aW9uSXRlbVN0b3JhZ2UucGRmOiBBZGRlZC4KICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05hdmlnYXRpb25JdGVtVGhyZWFkcy5wZGY6IEFkZGVkLgogICAgICAgICogVXNlckludGVyZmFjZS9JbWFnZXMvTmF2aWdhdGlvbkl0ZW1XYXJuaW5nLnBkZjogQWRkZWQuCiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uY3NzOiBBZGRlZC4KICAgICAgICAoKik6CiAgICAgICAgKGJvZHkpOgogICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uanM6IEFkZGVkLgogICAgICAgICh3aW5kb3dMb2FkZWQpOgogICAgICAgICogVXNlckludGVyZmFjZS9OYXZpZ2F0aW9uQmFyLmNzczogQWRkZWQuCiAgICAgICAgKC5uYXZpZ2F0aW9uLWJhcik6CiAgICAgICAgKGJvZHkud2luZG93LWluYWN0aXZlIC5uYXZpZ2F0aW9uLWJhcik6CiAgICAgICAgKC5uYXZpZ2F0aW9uLWJhciAuaXRlbSk6CiAgICAgICAgKC5uYXZpZ2F0aW9uLWJhci5jb2xsYXBzZWQgLml0ZW0pOgogICAgICAgICgubmF2aWdhdGlvbi1iYXIgLml0ZW0gLmdseXBoKToKICAgICAgICAoLm5hdmlnYXRpb24tYmFyIC5pdGVtLnNlbGVjdGVkKToKICAgICAgICAoLm5hdmlnYXRpb24tYmFyOmZvY3VzKToKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTmF2aWdhdGlvbkJhci5qczogQWRkZWQuCiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uQmFyKToKICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25CYXIucHJvdG90eXBlLmFkZE5hdmlnYXRpb25JdGVtKToKICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25CYXIucHJvdG90eXBlLmdldCBzZWxlY3RlZE5hdmlnYXRpb25JdGVtKToKICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25CYXIucHJvdG90eXBlLnNldCBzZWxlY3RlZE5hdmlnYXRpb25JdGVtKToKICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25CYXIucHJvdG90eXBlLmdldCBuYXZpZ2F0aW9uSXRlbXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvbkJhci5wcm90b3R5cGUuZ2V0IGVsZW1lbnQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvbkJhci5wcm90b3R5cGUuX21vdXNlRG93bik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uQmFyLnByb3RvdHlwZS5fbW91c2VNb3ZlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uQmFyLnByb3RvdHlwZS5fbW91c2VVcCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uQmFyLnByb3RvdHlwZS5fa2V5RG93bik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uQmFyLnByb3RvdHlwZS5fZm9jdXMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvbkJhci5wcm90b3R5cGUuX2JsdXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvbkJhci5wcm90b3R5cGUuX3VwZGF0ZVN0eWxlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25JdGVtKToKICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5nZXQgaWRlbnRpZmllcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuZ2V0IGRpc3BsYXlOYW1lKToKICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5nZXQgaW1hZ2UpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLmdldCBlbGVtZW50KToKICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5nZXQgc2VsZWN0ZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLnNldCBzZWxlY3RlZCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuZ2V0IGFjdGl2ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuc2V0IGFjdGl2ZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuZ2VuZXJhdGVTdHlsZVRleHQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLmdldCBfY2xhc3NOYW1lcyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuX2NhbnZhc0lkZW5pdGZpZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLl9nZW5lcmF0ZUltYWdlcy5faW1hZ2VMb2FkZWQpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLl9nZW5lcmF0ZUltYWdlcy5fY3JlYXRlRW1ib3NzZWRDYW52YXNJbWFnZSk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5OYXZpZ2F0aW9uSXRlbS5wcm90b3R5cGUuX2dlbmVyYXRlSW1hZ2VzLl9kcmF3SW1hZ2VTaGFkb3cpOgogICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvbkl0ZW0ucHJvdG90eXBlLl9nZW5lcmF0ZUltYWdlcy5faW52ZXJ0TWFza0ltYWdlKToKICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5fZ2VuZXJhdGVJbWFnZXMuX2FwcGx5SW1hZ2VNYXNrKToKICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25JdGVtLnByb3RvdHlwZS5fZ2VuZXJhdGVJbWFnZXMpOgogICAgICAgICogVXNlckludGVyZmFjZS9PYmplY3QuanM6IEFkZGVkLgogICAgICAgIChXZWJJbnNwZWN0b3IuT2JqZWN0KToKICAgICAgICAoV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcik6CiAgICAgICAgKFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXIpOgogICAgICAgIChXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMpOgogICAgICAgIChXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZS5oYXNFdmVudExpc3RlbmVycyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FdmVudCk6CiAgICAgICAgKFdlYkluc3BlY3Rvci5FdmVudC5wcm90b3R5cGUuc3RvcFByb3BhZ2F0aW9uKToKICAgICAgICAoV2ViSW5zcGVjdG9yLkV2ZW50LnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdCk6CiAgICAgICAgKiBVc2VySW50ZXJmYWNlL1V0aWxpdGllcy5qczogQWRkZWQuCiAgICAgICAgKE5vZGUucHJvdG90eXBlLmVuY2xvc2luZ05vZGVPclNlbGZXaXRoQ2xhc3MpOgogICAgICAgIChOb2RlLnByb3RvdHlwZS5lbmNsb3NpbmdOb2RlV2l0aENsYXNzKToKICAgICAgICAoRWxlbWVudC5wcm90b3R5cGUudG90YWxPZmZzZXRMZWZ0KToKICAgICAgICAoRWxlbWVudC5wcm90b3R5cGUudG90YWxPZmZzZXRUb3ApOgogICAgICAgICogVXNlckludGVyZmFjZS9XZWJJbnNwZWN0b3IuanM6IEFkZGVkLgoKMjAxMS0xMC0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CgogICAgICAgIEFkZCBhIGV4cGVyaW1lbnRzIG1lbnUgaXRlbSB0byBlbmFibGVkIHRoZSBuZXcgV2ViIEluc3BlY3Rvci4gVGhlcmUgaXMgb25seSBhIHBsYWNlaG9sZGVyCiAgICAgICAgZm9yIHRoZSBuZXcgaW5zcGVjdG9yIHJpZ2h0IG5vdywgc28gaXQgaXNuJ3QgdXNlZnVsIGZvciBtb3N0IHBlb3BsZSB5ZXQuCgogICAgICAgIFRoaXMgY2huYWdlIGRlcGVuZHMgb246IGh0dHBzOi8vd2Via2l0Lm9yZy9iLzcxMDg5CgogICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDMxODY2NT4gTWFrZSBpdCBwb3NzaWJsZSB0byB1c2UgYSBkaWZmZXJlbnQgZnJvbnQtZW5kIGZvciB0aGUgV2ViIEluc3BlY3RvcgoKICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgoKICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBBZGRlZC4K