LyoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIENvcHlyaWdodCCpIHsxOTk5fSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogICBEYXRlICAgICAgICBOYW1lICAgICAgICBEZXNjcmlwdGlvbgoqICAgMTEvMTcvOTkgICAgYWxpdSAgICAgICAgQ3JlYXRpb24uCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKi8KI2lmbmRlZiBVTklGTFRMR19ICiNkZWZpbmUgVU5JRkxUTEdfSAoKI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCgpjbGFzcyBVbmljb2RlRmlsdGVyOwoKLyoqCiAqIDxjb2RlPlVuaWNvZGVGaWx0ZXJMb2dpYzwvY29kZT4gcHJvdmlkZXMgbG9naWNhbCBvcGVyYXRvcnMgb24KICoge0BsaW5rIFVuaWNvZGVGaWx0ZXJ9IG9iamVjdHMuICBUaGlzIGNsYXNzIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQ7CiAqIGl0IGNvbnNpc3RzIG9ubHkgb2Ygc3RhdGljIG1ldGhvZHMuICBUaGUgc3RhdGljIG1ldGhvZHMgcmV0dXJuCiAqIGZpbHRlciBvYmplY3RzIHRoYXQgcGVyZm9ybSBsb2dpY2FsIGludmVyc2lvbiAoPHR0Pm5vdDwvdHQ+KSwKICogaW50ZXJzZWN0aW9uICg8dHQ+YW5kPC90dD4pLCBvciB1bmlvbiAoPHR0Pm9yPC90dD4pIG9mIHRoZSBnaXZlbgogKiBmaWx0ZXIgb2JqZWN0cy4KICoKICogSWYgYSBVbmljb2RlRmlsdGVyKiBmIGlzIHBhc3NlZCBpbiwgd2hlcmUgZiA9PSBOVUxMLCB0aGVuIHRoYXQKICogaXMgdHJlYXRlZCBhcyBhIGZpbHRlciB0aGF0IGNvbnRhaW5zIGFsbCBVbmljb2RlIGNoYXJhY3RlcnMuCiAqIFRoZXJlZm9yZSwgY3JlYXRlTm90KE5VTEwpIHJldHVybnMgYSBmaWx0ZXIgdGhhdCBjb250YWlucyBubwogKiBVbmljb2RlIGNoYXJhY3RlcnMuICBMaWtld2lzZSwgY3JlYXRlQW5kKGcsIE5VTEwpIHJldHVybnMgZy0+Y2xvbmUoKSwKICogYW5kIGNyZWF0ZUFuZChOVUxMLCBOVUxMKSByZXR1cm5zIE5VTEwuCiAqLwpjbGFzcyBVX0kxOE5fQVBJIFVuaWNvZGVGaWx0ZXJMb2dpYyB7CgpwdWJsaWM6CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgPHR0PlVuaWNvZGVGaWx0ZXI8L3R0PiB0aGF0IGltcGxlbWVudHMgdGhlIGludmVyc2Ugb2YKICAgICAqIHRoZSBnaXZlbiBmaWx0ZXIuCiAgICAgKiBAcGFyYW0gZiBtYXkgYmUgTlVMTAogICAgICogQHJlc3VsdCBhbHdheXMgbm9uLU5VTEwKICAgICAqLwogICAgc3RhdGljIFVuaWNvZGVGaWx0ZXIqIGNyZWF0ZU5vdChjb25zdCBVbmljb2RlRmlsdGVyKiBmKTsKCiAgICAvKioKICAgICAqIFJldHVybnMgYSA8dHQ+VW5pY29kZUZpbHRlcjwvdHQ+IHRoYXQgaW1wbGVtZW50cyBhIHNob3J0CiAgICAgKiBjaXJjdWl0IEFORCBvZiB0aGUgcmVzdWx0IG9mIHRoZSB0d28gZ2l2ZW4gZmlsdGVycy4gIFRoYXQgaXMsCiAgICAgKiBpZiA8dHQ+Zi5jb250YWlucygpPC90dD4gaXMgPHR0PmZhbHNlPC90dD4sIHRoZW4gPHR0PmcuY29udGFpbnMoKTwvdHQ+CiAgICAgKiBpcyBub3QgY2FsbGVkLCBhbmQgPHR0PmNvbnRhaW5zKCk8L3R0PiByZXR1cm5zIDx0dD5mYWxzZTwvdHQ+LgogICAgICogQHBhcmFtIGYgbWF5IGJlIE5VTEwKICAgICAqIEBwYXJhbSBnIG1heSBiZSBOVUxMCiAgICAgKiBAcmVzdWx0IHdpbGwgYmUgTlVMTCBpZiBhbmQgb25seSBpZiBmID09IGcgPT0gTlVMTAogICAgICovCiAgICBzdGF0aWMgVW5pY29kZUZpbHRlciogY3JlYXRlQW5kKGNvbnN0IFVuaWNvZGVGaWx0ZXIqIGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVuaWNvZGVGaWx0ZXIqIGcpOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhIDx0dD5Vbmljb2RlRmlsdGVyPC90dD4gdGhhdCBpbXBsZW1lbnRzIGEgc2hvcnQKICAgICAqIGNpcmN1aXQgT1Igb2YgdGhlIHJlc3VsdCBvZiB0aGUgdHdvIGdpdmVuIGZpbHRlcnMuICBUaGF0IGlzLCBpZgogICAgICogPHR0PmYuY29udGFpbnMoKTwvdHQ+IGlzIDx0dD50cnVlPC90dD4sIHRoZW4gPHR0PmcuY29udGFpbnMoKTwvdHQ+IGlzCiAgICAgKiBub3QgY2FsbGVkLCBhbmQgPHR0PmNvbnRhaW5zKCk8L3R0PiByZXR1cm5zIDx0dD50cnVlPC90dD4uCiAgICAgKiBAcGFyYW0gZiBtYXkgYmUgTlVMTAogICAgICogQHBhcmFtIGcgbWF5IGJlIE5VTEwKICAgICAqIEByZXN1bHQgd2lsbCBiZSBOVUxMIGlmIGFuZCBvbmx5IGlmIGYgPT0gZyA9PSBOVUxMCiAgICAgKi8KICAgIHN0YXRpYyBVbmljb2RlRmlsdGVyKiBjcmVhdGVPcihjb25zdCBVbmljb2RlRmlsdGVyKiBmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVuaWNvZGVGaWx0ZXIqIGcpOwoKcHJpdmF0ZToKICAgIC8vIERpc2FsbG93IGluc3RhbnRpYXRpb24KICAgIFVuaWNvZGVGaWx0ZXJMb2dpYygpOwp9OwoKaW5saW5lIFVuaWNvZGVGaWx0ZXJMb2dpYzo6VW5pY29kZUZpbHRlckxvZ2ljKCkge30KCiNlbmRpZgo=