UNPKG

@ngx-toolkit/device

Version:

Angular device user-agent detection with Universal support

176 lines 13.3 kB
import { Device, DevicePlatform, DeviceType } from './device.model'; /** * see https://github.com/spring-projects/spring-mobile */ export class DeviceService { static resolveDevice(userAgent) { if (!userAgent) { return new Device(DeviceType.NORMAL, DevicePlatform.UNKNOWN); } userAgent = userAgent.toLowerCase(); /** * Tablet Detection */ // Apple if (userAgent.includes('ipad')) { return new Device(DeviceType.TABLET, DevicePlatform.IOS); } const isMobile = userAgent.includes('mobile') || DeviceService.KNOWN_MOBILE_USER_AGENT_KEYWORDS.some(mobileUserAgent => userAgent.includes(mobileUserAgent)); if (!isMobile) { // Android if (userAgent.includes('android')) { return new Device(DeviceType.TABLET, DevicePlatform.ANDROID); } // Kindle Fire if (userAgent.includes('silk')) { return new Device(DeviceType.TABLET, DevicePlatform.UNKNOWN); } } // From keywords if (DeviceService.KNOWN_TABLET_USER_AGENT_KEYWORDS.some(tabletUserAgent => userAgent.includes(tabletUserAgent))) { return new Device(DeviceType.TABLET, DevicePlatform.UNKNOWN); } /** * Mobile detection */ // From prefix if (userAgent.length >= 4 && DeviceService.KNOWN_MOBILE_USER_AGENT_PREFIXES.indexOf(userAgent.substring(0, 4)) !== -1) { return new Device(DeviceType.MOBILE, DevicePlatform.UNKNOWN); } // Android if (userAgent.includes('android')) { return new Device(DeviceType.MOBILE, DevicePlatform.ANDROID); } // Apple if (userAgent.includes('iphone') || userAgent.includes('ipod') || userAgent.includes('ipad')) { return new Device(DeviceType.MOBILE, DevicePlatform.IOS); } // From keywords if (isMobile) { return new Device(DeviceType.MOBILE, DevicePlatform.UNKNOWN); } /** * => Normal device */ return new Device(DeviceType.NORMAL, DevicePlatform.UNKNOWN); } } DeviceService.KNOWN_MOBILE_USER_AGENT_PREFIXES = [ 'w3c ', 'w3c-', 'acs-', 'alav', 'alca', 'amoi', 'avan', 'benq', 'bird', 'blac', 'blaz', 'brew', 'cell', 'cldc', 'cmd-', 'dang', 'doco', 'eric', 'hipt', 'htc_', 'inno', 'ipaq', 'ipod', 'jigs', 'kddi', 'keji', 'leno', 'lg-c', 'lg-d', 'lg-g', 'lge-', 'lg/u', 'maui', 'maxo', 'midp', 'mits', 'mmef', 'mobi', 'mot-', 'moto', 'mwbp', 'nec-', 'newt', 'noki', 'palm', 'pana', 'pant', 'phil', 'play', 'port', 'prox', 'qwap', 'sage', 'sams', 'sany', 'sch-', 'sec-', 'send', 'seri', 'sgh-', 'shar', 'sie-', 'siem', 'smal', 'smar', 'sony', 'sph-', 'symb', 't-mo', 'teli', 'tim-', 'tosh', 'tsm-', 'upg1', 'upsi', 'vk-v', 'voda', 'wap-', 'wapa', 'wapi', 'wapp', 'wapr', 'webc', 'winw', 'winw', 'xda ', 'xda-' ]; DeviceService.KNOWN_MOBILE_USER_AGENT_KEYWORDS = [ 'blackberry', 'webos', 'ipod', 'lge vx', 'midp', 'maemo', 'mmp', 'mobile', 'netfront', 'hiptop', 'nintendo DS', 'novarra', 'openweb', 'opera mobi', 'opera mini', 'palm', 'psp', 'phone', 'smartphone', 'symbian', 'up.browser', 'up.link', 'wap', 'windows ce' ]; DeviceService.KNOWN_TABLET_USER_AGENT_KEYWORDS = ['ipad', 'playbook', 'hp-tablet', 'kindle']; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXZpY2Uvc3JjL2xpYi9kZXZpY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRTs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBd0h4QixNQUFNLENBQUMsYUFBYSxDQUFDLFNBQWlCO1FBQ3BDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDZCxPQUFPLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzlEO1FBRUQsU0FBUyxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVwQzs7V0FFRztRQUVILFFBQVE7UUFDUixJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDOUIsT0FBTyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMxRDtRQUVELE1BQU0sUUFBUSxHQUNaLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQzVCLGFBQWEsQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFDOUcsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNiLFVBQVU7WUFDVixJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQ2pDLE9BQU8sSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDOUQ7WUFDRCxjQUFjO1lBQ2QsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUM5QixPQUFPLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzlEO1NBQ0Y7UUFDRCxnQkFBZ0I7UUFDaEIsSUFBSSxhQUFhLENBQUMsZ0NBQWdDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFO1lBQy9HLE9BQU8sSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDOUQ7UUFFRDs7V0FFRztRQUNILGNBQWM7UUFDZCxJQUNFLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQztZQUNyQixhQUFhLENBQUMsZ0NBQWdDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ3hGO1lBQ0EsT0FBTyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM5RDtRQUNELFVBQVU7UUFDVixJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDakMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM5RDtRQUNELFFBQVE7UUFDUixJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzVGLE9BQU8sSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDMUQ7UUFDRCxnQkFBZ0I7UUFDaEIsSUFBSSxRQUFRLEVBQUU7WUFDWixPQUFPLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzlEO1FBRUQ7O1dBRUc7UUFDSCxPQUFPLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9ELENBQUM7O0FBcExjLDhDQUFnQyxHQUFhO0lBQzFELE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtDQUNQLENBQUM7QUFFYSw4Q0FBZ0MsR0FBYTtJQUMxRCxZQUFZO0lBQ1osT0FBTztJQUNQLE1BQU07SUFDTixRQUFRO0lBQ1IsTUFBTTtJQUNOLE9BQU87SUFDUCxLQUFLO0lBQ0wsUUFBUTtJQUNSLFVBQVU7SUFDVixRQUFRO0lBQ1IsYUFBYTtJQUNiLFNBQVM7SUFDVCxTQUFTO0lBQ1QsWUFBWTtJQUNaLFlBQVk7SUFDWixNQUFNO0lBQ04sS0FBSztJQUNMLE9BQU87SUFDUCxZQUFZO0lBQ1osU0FBUztJQUNULFlBQVk7SUFDWixTQUFTO0lBQ1QsS0FBSztJQUNMLFlBQVk7Q0FDYixDQUFDO0FBRWEsOENBQWdDLEdBQWEsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGV2aWNlLCBEZXZpY2VQbGF0Zm9ybSwgRGV2aWNlVHlwZX0gZnJvbSAnLi9kZXZpY2UubW9kZWwnO1xuXG4vKipcbiAqIHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3ByaW5nLXByb2plY3RzL3NwcmluZy1tb2JpbGVcbiAqL1xuZXhwb3J0IGNsYXNzIERldmljZVNlcnZpY2Uge1xuICBwcml2YXRlIHN0YXRpYyBLTk9XTl9NT0JJTEVfVVNFUl9BR0VOVF9QUkVGSVhFUzogc3RyaW5nW10gPSBbXG4gICAgJ3czYyAnLFxuICAgICd3M2MtJyxcbiAgICAnYWNzLScsXG4gICAgJ2FsYXYnLFxuICAgICdhbGNhJyxcbiAgICAnYW1vaScsXG4gICAgJ2F2YW4nLFxuICAgICdiZW5xJyxcbiAgICAnYmlyZCcsXG4gICAgJ2JsYWMnLFxuICAgICdibGF6JyxcbiAgICAnYnJldycsXG4gICAgJ2NlbGwnLFxuICAgICdjbGRjJyxcbiAgICAnY21kLScsXG4gICAgJ2RhbmcnLFxuICAgICdkb2NvJyxcbiAgICAnZXJpYycsXG4gICAgJ2hpcHQnLFxuICAgICdodGNfJyxcbiAgICAnaW5ubycsXG4gICAgJ2lwYXEnLFxuICAgICdpcG9kJyxcbiAgICAnamlncycsXG4gICAgJ2tkZGknLFxuICAgICdrZWppJyxcbiAgICAnbGVubycsXG4gICAgJ2xnLWMnLFxuICAgICdsZy1kJyxcbiAgICAnbGctZycsXG4gICAgJ2xnZS0nLFxuICAgICdsZy91JyxcbiAgICAnbWF1aScsXG4gICAgJ21heG8nLFxuICAgICdtaWRwJyxcbiAgICAnbWl0cycsXG4gICAgJ21tZWYnLFxuICAgICdtb2JpJyxcbiAgICAnbW90LScsXG4gICAgJ21vdG8nLFxuICAgICdtd2JwJyxcbiAgICAnbmVjLScsXG4gICAgJ25ld3QnLFxuICAgICdub2tpJyxcbiAgICAncGFsbScsXG4gICAgJ3BhbmEnLFxuICAgICdwYW50JyxcbiAgICAncGhpbCcsXG4gICAgJ3BsYXknLFxuICAgICdwb3J0JyxcbiAgICAncHJveCcsXG4gICAgJ3F3YXAnLFxuICAgICdzYWdlJyxcbiAgICAnc2FtcycsXG4gICAgJ3NhbnknLFxuICAgICdzY2gtJyxcbiAgICAnc2VjLScsXG4gICAgJ3NlbmQnLFxuICAgICdzZXJpJyxcbiAgICAnc2doLScsXG4gICAgJ3NoYXInLFxuICAgICdzaWUtJyxcbiAgICAnc2llbScsXG4gICAgJ3NtYWwnLFxuICAgICdzbWFyJyxcbiAgICAnc29ueScsXG4gICAgJ3NwaC0nLFxuICAgICdzeW1iJyxcbiAgICAndC1tbycsXG4gICAgJ3RlbGknLFxuICAgICd0aW0tJyxcbiAgICAndG9zaCcsXG4gICAgJ3RzbS0nLFxuICAgICd1cGcxJyxcbiAgICAndXBzaScsXG4gICAgJ3ZrLXYnLFxuICAgICd2b2RhJyxcbiAgICAnd2FwLScsXG4gICAgJ3dhcGEnLFxuICAgICd3YXBpJyxcbiAgICAnd2FwcCcsXG4gICAgJ3dhcHInLFxuICAgICd3ZWJjJyxcbiAgICAnd2ludycsXG4gICAgJ3dpbncnLFxuICAgICd4ZGEgJyxcbiAgICAneGRhLSdcbiAgXTtcblxuICBwcml2YXRlIHN0YXRpYyBLTk9XTl9NT0JJTEVfVVNFUl9BR0VOVF9LRVlXT1JEUzogc3RyaW5nW10gPSBbXG4gICAgJ2JsYWNrYmVycnknLFxuICAgICd3ZWJvcycsXG4gICAgJ2lwb2QnLFxuICAgICdsZ2UgdngnLFxuICAgICdtaWRwJyxcbiAgICAnbWFlbW8nLFxuICAgICdtbXAnLFxuICAgICdtb2JpbGUnLFxuICAgICduZXRmcm9udCcsXG4gICAgJ2hpcHRvcCcsXG4gICAgJ25pbnRlbmRvIERTJyxcbiAgICAnbm92YXJyYScsXG4gICAgJ29wZW53ZWInLFxuICAgICdvcGVyYSBtb2JpJyxcbiAgICAnb3BlcmEgbWluaScsXG4gICAgJ3BhbG0nLFxuICAgICdwc3AnLFxuICAgICdwaG9uZScsXG4gICAgJ3NtYXJ0cGhvbmUnLFxuICAgICdzeW1iaWFuJyxcbiAgICAndXAuYnJvd3NlcicsXG4gICAgJ3VwLmxpbmsnLFxuICAgICd3YXAnLFxuICAgICd3aW5kb3dzIGNlJ1xuICBdO1xuXG4gIHByaXZhdGUgc3RhdGljIEtOT1dOX1RBQkxFVF9VU0VSX0FHRU5UX0tFWVdPUkRTOiBzdHJpbmdbXSA9IFsnaXBhZCcsICdwbGF5Ym9vaycsICdocC10YWJsZXQnLCAna2luZGxlJ107XG5cbiAgc3RhdGljIHJlc29sdmVEZXZpY2UodXNlckFnZW50OiBzdHJpbmcpOiBEZXZpY2Uge1xuICAgIGlmICghdXNlckFnZW50KSB7XG4gICAgICByZXR1cm4gbmV3IERldmljZShEZXZpY2VUeXBlLk5PUk1BTCwgRGV2aWNlUGxhdGZvcm0uVU5LTk9XTik7XG4gICAgfVxuXG4gICAgdXNlckFnZW50ID0gdXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvKipcbiAgICAgKiBUYWJsZXQgRGV0ZWN0aW9uXG4gICAgICovXG5cbiAgICAvLyBBcHBsZVxuICAgIGlmICh1c2VyQWdlbnQuaW5jbHVkZXMoJ2lwYWQnKSkge1xuICAgICAgcmV0dXJuIG5ldyBEZXZpY2UoRGV2aWNlVHlwZS5UQUJMRVQsIERldmljZVBsYXRmb3JtLklPUyk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNNb2JpbGU6IGJvb2xlYW4gPVxuICAgICAgdXNlckFnZW50LmluY2x1ZGVzKCdtb2JpbGUnKSB8fFxuICAgICAgRGV2aWNlU2VydmljZS5LTk9XTl9NT0JJTEVfVVNFUl9BR0VOVF9LRVlXT1JEUy5zb21lKG1vYmlsZVVzZXJBZ2VudCA9PiB1c2VyQWdlbnQuaW5jbHVkZXMobW9iaWxlVXNlckFnZW50KSk7XG4gICAgaWYgKCFpc01vYmlsZSkge1xuICAgICAgLy8gQW5kcm9pZFxuICAgICAgaWYgKHVzZXJBZ2VudC5pbmNsdWRlcygnYW5kcm9pZCcpKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGV2aWNlKERldmljZVR5cGUuVEFCTEVULCBEZXZpY2VQbGF0Zm9ybS5BTkRST0lEKTtcbiAgICAgIH1cbiAgICAgIC8vIEtpbmRsZSBGaXJlXG4gICAgICBpZiAodXNlckFnZW50LmluY2x1ZGVzKCdzaWxrJykpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEZXZpY2UoRGV2aWNlVHlwZS5UQUJMRVQsIERldmljZVBsYXRmb3JtLlVOS05PV04pO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBGcm9tIGtleXdvcmRzXG4gICAgaWYgKERldmljZVNlcnZpY2UuS05PV05fVEFCTEVUX1VTRVJfQUdFTlRfS0VZV09SRFMuc29tZSh0YWJsZXRVc2VyQWdlbnQgPT4gdXNlckFnZW50LmluY2x1ZGVzKHRhYmxldFVzZXJBZ2VudCkpKSB7XG4gICAgICByZXR1cm4gbmV3IERldmljZShEZXZpY2VUeXBlLlRBQkxFVCwgRGV2aWNlUGxhdGZvcm0uVU5LTk9XTik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTW9iaWxlIGRldGVjdGlvblxuICAgICAqL1xuICAgIC8vIEZyb20gcHJlZml4XG4gICAgaWYgKFxuICAgICAgdXNlckFnZW50Lmxlbmd0aCA+PSA0ICYmXG4gICAgICBEZXZpY2VTZXJ2aWNlLktOT1dOX01PQklMRV9VU0VSX0FHRU5UX1BSRUZJWEVTLmluZGV4T2YodXNlckFnZW50LnN1YnN0cmluZygwLCA0KSkgIT09IC0xXG4gICAgKSB7XG4gICAgICByZXR1cm4gbmV3IERldmljZShEZXZpY2VUeXBlLk1PQklMRSwgRGV2aWNlUGxhdGZvcm0uVU5LTk9XTik7XG4gICAgfVxuICAgIC8vIEFuZHJvaWRcbiAgICBpZiAodXNlckFnZW50LmluY2x1ZGVzKCdhbmRyb2lkJykpIHtcbiAgICAgIHJldHVybiBuZXcgRGV2aWNlKERldmljZVR5cGUuTU9CSUxFLCBEZXZpY2VQbGF0Zm9ybS5BTkRST0lEKTtcbiAgICB9XG4gICAgLy8gQXBwbGVcbiAgICBpZiAodXNlckFnZW50LmluY2x1ZGVzKCdpcGhvbmUnKSB8fCB1c2VyQWdlbnQuaW5jbHVkZXMoJ2lwb2QnKSB8fCB1c2VyQWdlbnQuaW5jbHVkZXMoJ2lwYWQnKSkge1xuICAgICAgcmV0dXJuIG5ldyBEZXZpY2UoRGV2aWNlVHlwZS5NT0JJTEUsIERldmljZVBsYXRmb3JtLklPUyk7XG4gICAgfVxuICAgIC8vIEZyb20ga2V5d29yZHNcbiAgICBpZiAoaXNNb2JpbGUpIHtcbiAgICAgIHJldHVybiBuZXcgRGV2aWNlKERldmljZVR5cGUuTU9CSUxFLCBEZXZpY2VQbGF0Zm9ybS5VTktOT1dOKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiA9PiBOb3JtYWwgZGV2aWNlXG4gICAgICovXG4gICAgcmV0dXJuIG5ldyBEZXZpY2UoRGV2aWNlVHlwZS5OT1JNQUwsIERldmljZVBsYXRmb3JtLlVOS05PV04pO1xuICB9XG59XG4iXX0=