pdf-to-printer
Version:
A utility for printing PDFs and images from Node.js and Electron.
2 lines • 23.8 kB
JavaScript
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var i in n)("object"==typeof exports?exports:e)[i]=n[i]}}(global,(()=>(()=>{"use strict";var e={n:t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},d:(t,n)=>{for(var i in n)e.o(n,i)&&!e.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:n[i]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{getDefaultPrinter:()=>b,getPrinters:()=>x,print:()=>y});const n=require("path");var i=e.n(n);const r=require("fs");var o=e.n(r);const a=require("child_process"),s=require("util"),c=e.n(s)().promisify(a.execFile),u="electron"in process.versions&&process.mainModule&&process.mainModule.filename.includes("app.asar"),p=require("os");var l=e.n(p);function d(){if("win32"!==l().platform())throw"Operating System not supported"}const f=["odd","even"],h=["portrait","landscape"],m=["noscale","shrink","fit"],v=["duplex","duplexshort","duplexlong","simplex"];function y(e,t={}){return n=this,r=void 0,s=function*(){if(d(),!e)throw"No PDF specified";if(!o().existsSync(e))throw"No such file";let n=t.sumatraPdfPath||i().join(__dirname,"SumatraPDF-3.4.6-32.exe");var r;t.sumatraPdfPath||(r=n,n=u?r.replace("app.asar","app.asar.unpacked"):r);const a=[],{printer:s,silent:p,printDialog:l}=t;l?a.push("-print-dialog"):(s?a.push("-print-to",s):a.push("-print-to-default"),!1!==p&&a.push("-silent"));const y=function(e){const{pages:t,subset:n,orientation:i,scale:r,monochrome:o,side:a,bin:s,paperSize:c,copies:u}=e,p=[];if(t&&p.push(t),n){if(!f.includes(n))throw`Invalid subset provided. Valid names: ${f.join(", ")}`;p.push(n)}if(i){if(!h.includes(i))throw`Invalid orientation provided. Valid names: ${h.join(", ")}`;p.push(i)}if(r){if(!m.includes(r))throw`Invalid scale provided. Valid names: ${m.join(", ")}`;p.push(r)}if(o?p.push("monochrome"):!1===o&&p.push("color"),a){if(!v.includes(a))throw`Invalid side provided. Valid names: ${v.join(", ")}`;p.push(a)}return s&&p.push(`bin=${s}`),c&&p.push(`paper=${c}`),u&&p.push(`${u}x`),p}(t);y.length&&a.push("-print-settings",y.join(",")),a.push(e);try{yield c(n,a)}catch(e){throw e}},new((a=void 0)||(a=Promise))((function(e,t){function i(e){try{c(s.next(e))}catch(e){t(e)}}function o(e){try{c(s.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof a?n:new a((function(e){e(n)}))).then(i,o)}c((s=s.apply(n,r||[])).next())}));var n,r,a,s}const P={DeviceID:"deviceId",Name:"name",PrinterPaperNames:"paperSizes"};function w(e){const t={deviceId:"",name:"",paperSizes:[]};return e.split(/\r?\n/).forEach((e=>{let[n,i]=e.split(":").map((e=>e.trim()));i.match(/^{(.*)(\.{3})}$/)&&(i=i.replace("...}","}"));const r=i.match(/^{(.*)}$/);r&&r[1]&&(i=r[1].split(", "));const o=P[n];void 0!==o&&(t[o]=i)})),{isValid:!(!t.deviceId||!t.name),printerData:t}}const x=function(){return e=this,t=void 0,i=function*(){try{d();const{stdout:e}=yield c("Powershell.exe",["-Command","Get-CimInstance Win32_Printer -Property DeviceID,Name,PrinterPaperNames"]);return function(e){const t=[];return e.split(/(\r?\n){2,}/).map((e=>e.trim())).filter((e=>!!e)).forEach((e=>{const{isValid:n,printerData:i}=w(e);n&&t.push(i)})),t}(e)}catch(e){throw e}},new((n=void 0)||(n=Promise))((function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((i=i.apply(e,t||[])).next())}));var e,t,n,i};const b=function(){return e=this,t=void 0,i=function*(){try{d();const{stdout:e}=yield c("Powershell.exe",["-Command","Get-CimInstance Win32_Printer -Property DeviceID,Name,PrinterPaperNames -Filter Default=true"]),t=e.trim();if(!e)return null;const{isValid:n,printerData:i}=w(t);return n?i:null}catch(e){throw e}},new((n=void 0)||(n=Promise))((function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((i=i.apply(e,t||[])).next())}));var e,t,n,i};return t})()));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVuZGxlLmpzIiwibWFwcGluZ3MiOiJDQUFBLFNBQTJDQSxFQUFNQyxHQUNoRCxHQUFzQixpQkFBWkMsU0FBMEMsaUJBQVhDLE9BQ3hDQSxPQUFPRCxRQUFVRCxTQUNiLEdBQXFCLG1CQUFYRyxRQUF5QkEsT0FBT0MsSUFDOUNELE9BQU8sR0FBSUgsT0FDUCxDQUNKLElBQUlLLEVBQUlMLElBQ1IsSUFBSSxJQUFJTSxLQUFLRCxHQUF1QixpQkFBWkosUUFBdUJBLFFBQVVGLEdBQU1PLEdBQUtELEVBQUVDLEVBQ3ZFLENBQ0EsQ0FURCxDQVNHQyxRQUFRLEksbUJDUlgsSUFBSUMsRUFBc0IsQ0NBMUJBLEVBQXlCTixJQUN4QixJQUFJTyxFQUFTUCxHQUFVQSxFQUFPUSxXQUM3QixJQUFPUixFQUFpQixRQUN4QixJQUFNLEVBRVAsT0FEQU0sRUFBb0JHLEVBQUVGLEVBQVEsQ0FBRUosRUFBR0ksSUFDNUJBLENBQU0sRUNMZEQsRUFBd0IsQ0FBQ1AsRUFBU1csS0FDakMsSUFBSSxJQUFJQyxLQUFPRCxFQUNYSixFQUFvQk0sRUFBRUYsRUFBWUMsS0FBU0wsRUFBb0JNLEVBQUViLEVBQVNZLElBQzVFRSxPQUFPQyxlQUFlZixFQUFTWSxFQUFLLENBQUVJLFlBQVksRUFBTUMsSUFBS04sRUFBV0MsSUFFMUUsRUNOREwsRUFBd0IsQ0FBQ1csRUFBS0MsSUFBVUwsT0FBT00sVUFBVUMsZUFBZUMsS0FBS0osRUFBS0MsR0NDbEZaLEVBQXlCUCxJQUNILG9CQUFYdUIsUUFBMEJBLE9BQU9DLGFBQzFDVixPQUFPQyxlQUFlZixFQUFTdUIsT0FBT0MsWUFBYSxDQUFFQyxNQUFPLFdBRTdEWCxPQUFPQyxlQUFlZixFQUFTLGFBQWMsQ0FBRXlCLE9BQU8sR0FBTyxHLDJFQ0w5RCxNQUFNLEVBQStCQyxRQUFRLFEsYUNBN0MsTUFBTSxFQUErQkEsUUFBUSxNLGFDQTdDLE1BQU0sRUFBK0JBLFFBQVEsaUJDQXZDLEVBQStCQSxRQUFRLFFDSzdDLEUsTUFGc0IsYUFBZSxFQUFBQyxVQ0MvQkMsRUFGYSxhQUFjQyxRQUFRQyxVQUl2Q0QsUUFBUUUsWUFDUkYsUUFBUUUsV0FBV0MsU0FBU0MsU0FBUyxZQ1BqQyxFQUErQlAsUUFBUSxNLGFDRTlCLFNBQVNRLElBQ3RCLEdBQXNCLFVBQWxCLGVBQ0YsS0FBTSxnQ0FFVixDQ2dCQSxNQUFNQyxFQUFlLENBQUMsTUFBTyxRQUN2QkMsRUFBb0IsQ0FBQyxXQUFZLGFBQ2pDQyxFQUFjLENBQUMsVUFBVyxTQUFVLE9BQ3BDQyxFQUFhLENBQUMsU0FBVSxjQUFlLGFBQWMsV0FFNUMsU0FBZUMsRUFDNUJDLEVBQ0FDLEVBQXdCLENBQUMsRyxxQ0FHekIsR0FEQSxLQUNLRCxFQUFLLEtBQU0sbUJBQ2hCLElBQUssZUFBY0EsR0FBTSxLQUFNLGVBRS9CLElBQUlFLEVBQ0ZELEVBQVFFLGdCQUFrQixTQUFVQyxVQUFXLDJCSDNCbkQsSUFBOEJDLEVHNEJ2QkosRUFBUUUsaUJINUJlRSxFRzRCbUNILEVBQWxDQSxFSDNCdEJkLEVBQWNpQixFQUFLQyxRQUFRLFdBQVkscUJBQXVCRCxHRzZCckUsTUFBTUUsRUFBaUIsSUFFakIsUUFBRUMsRUFBTyxPQUFFQyxFQUFNLFlBQUVDLEdBQWdCVCxFQUVyQ1MsRUFDRkgsRUFBS0ksS0FBSyxrQkFFTkgsRUFDRkQsRUFBS0ksS0FBSyxZQUFhSCxHQUV2QkQsRUFBS0ksS0FBSyxzQkFFRyxJQUFYRixHQUNGRixFQUFLSSxLQUFLLFlBSWQsTUFBTUMsRUFlUixTQUEwQlgsR0FDeEIsTUFBTSxNQUNKWSxFQUFLLE9BQ0xDLEVBQU0sWUFDTkMsRUFBVyxNQUNYQyxFQUFLLFdBQ0xDLEVBQVUsS0FDVkMsRUFBSSxJQUNKQyxFQUFHLFVBQ0hDLEVBQVMsT0FDVEMsR0FDRXBCLEVBRUVXLEVBQWdCLEdBTXRCLEdBSklDLEdBQ0ZELEVBQWNELEtBQUtFLEdBR2pCQyxFQUFRLENBQ1YsSUFBSW5CLEVBQWFGLFNBQVNxQixHQUd4QixLQUFNLHlDQUF5Q25CLEVBQWEyQixLQUFLLFFBRmpFVixFQUFjRCxLQUFLRyxFLENBTXZCLEdBQUlDLEVBQWEsQ0FDZixJQUFJbkIsRUFBa0JILFNBQVNzQixHQUc3QixLQUFNLDhDQUE4Q25CLEVBQWtCMEIsS0FDcEUsUUFIRlYsRUFBY0QsS0FBS0ksRSxDQVF2QixHQUFJQyxFQUFPLENBQ1QsSUFBSW5CLEVBQVlKLFNBQVN1QixHQUd2QixLQUFNLHdDQUF3Q25CLEVBQVl5QixLQUFLLFFBRi9EVixFQUFjRCxLQUFLSyxFLENBWXZCLEdBTklDLEVBQ0ZMLEVBQWNELEtBQUssZUFDSyxJQUFmTSxHQUNUTCxFQUFjRCxLQUFLLFNBR2pCTyxFQUFNLENBQ1IsSUFBSXBCLEVBQVdMLFNBQVN5QixHQUd0QixLQUFNLHVDQUF1Q3BCLEVBQVd3QixLQUFLLFFBRjdEVixFQUFjRCxLQUFLTyxFLENBa0J2QixPQVpJQyxHQUNGUCxFQUFjRCxLQUFLLE9BQU9RLEtBR3hCQyxHQUNGUixFQUFjRCxLQUFLLFNBQVNTLEtBRzFCQyxHQUNGVCxFQUFjRCxLQUFLLEdBQUdVLE1BR2pCVCxDQUNULENBdkZ3QlcsQ0FBaUJ0QixHQUVuQ1csRUFBY1ksUUFDaEJqQixFQUFLSSxLQUFLLGtCQUFtQkMsRUFBY1UsS0FBSyxNQUdsRGYsRUFBS0ksS0FBS1gsR0FFVixVQUNRLEVBQVVFLEVBQVlLLEUsQ0FDNUIsTUFBT2tCLEdBQ1AsTUFBTUEsQyxDQUVWLEUsK1JDbEVBLE1BQU1DLEVBQStDLENBQ25EQyxTQUFVLFdBQ1ZDLEtBQU0sT0FDTkMsa0JBQW1CLGNBR04sU0FBU0MsRUFBZXRCLEdBSXJDLE1BQU11QixFQUF1QixDQUMzQkMsU0FBVSxHQUNWQyxLQUFNLEdBQ05DLFdBQVksSUE2QmQsT0ExQkExQixFQUFRMkIsTUFBTSxTQUFTQyxTQUFTQyxJQUM5QixJQUFLQyxFQUFPckQsR0FBU29ELEVBQUtGLE1BQU0sS0FBS0ksS0FBS0MsR0FBT0EsRUFBR0MsU0FHaER4RCxFQUFNeUQsTUFBTSxxQkFDZHpELEVBQVFBLEVBQU1xQixRQUFRLE9BQVEsTUFJaEMsTUFBTXFDLEVBQVUxRCxFQUFNeUQsTUFBTSxZQUV4QkMsR0FBV0EsRUFBUSxLQUVyQjFELEVBQVEwRCxFQUFRLEdBQUdSLE1BQU0sT0FHM0IsTUFBTS9ELEVBQU1zRCxFQUFXWSxRQUVYTSxJQUFSeEUsSUFHSjJELEVBQVkzRCxHQUFPYSxFQUFLLElBS25CLENBQ0w0RCxXQUhpQmQsRUFBWUMsV0FBWUQsRUFBWUUsTUFJckRGLGNBRUosQ0NiQSxRQS9CQSxXLHFDQW1CRSxJQUNFLElBQ0EsTUFBTSxPQUFFZSxTQUFpQixFQUFjLGlCQUFrQixDQUN2RCxXQUNBLDRFQUVGLE9BeEJGLFNBQXVCQSxHQUNyQixNQUFNQyxFQUFzQixHQWM1QixPQVpBRCxFQUNHWCxNQUFNLGVBQ05JLEtBQUsvQixHQUFZQSxFQUFRaUMsU0FDekJPLFFBQVF4QyxLQUFjQSxJQUN0QjRCLFNBQVM1QixJQUNSLE1BQU0sUUFBRXFDLEVBQU8sWUFBRWQsR0FBZ0JELEVBQWV0QixHQUUzQ3FDLEdBRUxFLEVBQVNwQyxLQUFLb0IsRUFBWSxJQUd2QmdCLENBQ1QsQ0FRU0UsQ0FBY0gsRSxDQUNyQixNQUFPckIsR0FDUCxNQUFNQSxDLENBRVYsRSxnU0NKQSxRQXpCQSxXLHFDQUNFLElBQ0UsSUFFQSxNQUFNLE9BQUVxQixTQUFpQixFQUFjLGlCQUFrQixDQUN2RCxXQUNBLGlHQUdJdEMsRUFBVXNDLEVBQU9MLE9BR3ZCLElBQUtLLEVBQVEsT0FBTyxLQUVwQixNQUFNLFFBQUVELEVBQU8sWUFBRWQsR0FBZ0JELEVBQWV0QixHQUdoRCxPQUFLcUMsRUFFRWQsRUFGYyxJLENBR3JCLE1BQU9OLEdBQ1AsTUFBTUEsQyxDQUVWLEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9wZGYtdG8tcHJpbnRlci93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vcGRmLXRvLXByaW50ZXIvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vcGRmLXRvLXByaW50ZXIvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vcGRmLXRvLXByaW50ZXIvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3BkZi10by1wcmludGVyL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vcGRmLXRvLXByaW50ZXIvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9wZGYtdG8tcHJpbnRlci9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwicGF0aFwiIiwid2VicGFjazovL3BkZi10by1wcmludGVyL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJmc1wiIiwid2VicGFjazovL3BkZi10by1wcmludGVyL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJjaGlsZF9wcm9jZXNzXCIiLCJ3ZWJwYWNrOi8vcGRmLXRvLXByaW50ZXIvZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcInV0aWxcIiIsIndlYnBhY2s6Ly9wZGYtdG8tcHJpbnRlci8uL3NyYy91dGlscy9leGVjLWZpbGUtYXN5bmMudHMiLCJ3ZWJwYWNrOi8vcGRmLXRvLXByaW50ZXIvLi9zcmMvdXRpbHMvZWxlY3Ryb24tdXRpbC50cyIsIndlYnBhY2s6Ly9wZGYtdG8tcHJpbnRlci9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwib3NcIiIsIndlYnBhY2s6Ly9wZGYtdG8tcHJpbnRlci8uL3NyYy91dGlscy90aHJvdy1pZi11bnN1cHBvcnRlZC1vcy50cyIsIndlYnBhY2s6Ly9wZGYtdG8tcHJpbnRlci8uL3NyYy9wcmludC9wcmludC50cyIsIndlYnBhY2s6Ly9wZGYtdG8tcHJpbnRlci8uL3NyYy91dGlscy93aW5kb3dzLXByaW50ZXItdmFsaWQudHMiLCJ3ZWJwYWNrOi8vcGRmLXRvLXByaW50ZXIvLi9zcmMvZ2V0LXByaW50ZXJzL2dldC1wcmludGVycy50cyIsIndlYnBhY2s6Ly9wZGYtdG8tcHJpbnRlci8uL3NyYy9nZXQtZGVmYXVsdC1wcmludGVyL2dldC1kZWZhdWx0LXByaW50ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIHtcblx0XHR2YXIgYSA9IGZhY3RvcnkoKTtcblx0XHRmb3IodmFyIGkgaW4gYSkgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyA/IGV4cG9ydHMgOiByb290KVtpXSA9IGFbaV07XG5cdH1cbn0pKGdsb2JhbCwgKCkgPT4ge1xucmV0dXJuICIsIi8vIFRoZSByZXF1aXJlIHNjb3BlXG52YXIgX193ZWJwYWNrX3JlcXVpcmVfXyA9IHt9O1xuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcInBhdGhcIik7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJmc1wiKTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcImNoaWxkX3Byb2Nlc3NcIik7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJ1dGlsXCIpOyIsImltcG9ydCB7IGV4ZWNGaWxlIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB1dGlsIGZyb20gXCJ1dGlsXCI7XG5cbmNvbnN0IGV4ZWNGaWxlQXN5bmMgPSB1dGlsLnByb21pc2lmeShleGVjRmlsZSk7XG5cbmV4cG9ydCBkZWZhdWx0IGV4ZWNGaWxlQXN5bmM7XG4iLCIvLyBUYWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvZWxlY3Ryb24tdXRpbC9ibG9iL21hc3Rlci9ub2RlLmpzXG5cbmNvbnN0IGlzRWxlY3Ryb24gPSBcImVsZWN0cm9uXCIgaW4gcHJvY2Vzcy52ZXJzaW9ucztcblxuY29uc3QgaXNVc2luZ0FzYXIgPVxuICBpc0VsZWN0cm9uICYmXG4gIHByb2Nlc3MubWFpbk1vZHVsZSAmJlxuICBwcm9jZXNzLm1haW5Nb2R1bGUuZmlsZW5hbWUuaW5jbHVkZXMoXCJhcHAuYXNhclwiKTtcblxuZnVuY3Rpb24gZml4UGF0aEZvckFzYXJVbnBhY2socGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGlzVXNpbmdBc2FyID8gcGF0aC5yZXBsYWNlKFwiYXBwLmFzYXJcIiwgXCJhcHAuYXNhci51bnBhY2tlZFwiKSA6IHBhdGg7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZpeFBhdGhGb3JBc2FyVW5wYWNrO1xuIiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJvc1wiKTsiLCJpbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRocm93SWZVbnN1cHBvcnRlZE9zKCkge1xuICBpZiAob3MucGxhdGZvcm0oKSAhPT0gXCJ3aW4zMlwiKSB7XG4gICAgdGhyb3cgXCJPcGVyYXRpbmcgU3lzdGVtIG5vdCBzdXBwb3J0ZWRcIjtcbiAgfVxufVxuIiwiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCBleGVjQXN5bmMgZnJvbSBcIi4uL3V0aWxzL2V4ZWMtZmlsZS1hc3luY1wiO1xuaW1wb3J0IGZpeFBhdGhGb3JBc2FyVW5wYWNrIGZyb20gXCIuLi91dGlscy9lbGVjdHJvbi11dGlsXCI7XG5pbXBvcnQgdGhyb3dJZlVuc3VwcG9ydGVkT3BlcmF0aW5nU3lzdGVtIGZyb20gXCIuLi91dGlscy90aHJvdy1pZi11bnN1cHBvcnRlZC1vc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFByaW50T3B0aW9ucyB7XG4gIHByaW50ZXI/OiBzdHJpbmc7XG4gIHBhZ2VzPzogc3RyaW5nO1xuICBzdWJzZXQ/OiBzdHJpbmc7XG4gIG9yaWVudGF0aW9uPzogc3RyaW5nO1xuICBzY2FsZT86IHN0cmluZztcbiAgbW9ub2Nocm9tZT86IGJvb2xlYW47XG4gIHNpZGU/OiBzdHJpbmc7XG4gIGJpbj86IHN0cmluZztcbiAgcGFwZXJTaXplPzogc3RyaW5nO1xuICBzaWxlbnQ/OiBib29sZWFuO1xuICBwcmludERpYWxvZz86IGJvb2xlYW47XG4gIHN1bWF0cmFQZGZQYXRoPzogc3RyaW5nO1xuICBjb3BpZXM/OiBudW1iZXI7XG59XG5cbmNvbnN0IHZhbGlkU3Vic2V0cyA9IFtcIm9kZFwiLCBcImV2ZW5cIl07XG5jb25zdCB2YWxpZE9yaWVudGF0aW9ucyA9IFtcInBvcnRyYWl0XCIsIFwibGFuZHNjYXBlXCJdO1xuY29uc3QgdmFsaWRTY2FsZXMgPSBbXCJub3NjYWxlXCIsIFwic2hyaW5rXCIsIFwiZml0XCJdO1xuY29uc3QgdmFsaWRTaWRlcyA9IFtcImR1cGxleFwiLCBcImR1cGxleHNob3J0XCIsIFwiZHVwbGV4bG9uZ1wiLCBcInNpbXBsZXhcIl07XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIHByaW50KFxuICBwZGY6IHN0cmluZyxcbiAgb3B0aW9uczogUHJpbnRPcHRpb25zID0ge31cbik6IFByb21pc2U8dm9pZD4ge1xuICB0aHJvd0lmVW5zdXBwb3J0ZWRPcGVyYXRpbmdTeXN0ZW0oKTtcbiAgaWYgKCFwZGYpIHRocm93IFwiTm8gUERGIHNwZWNpZmllZFwiO1xuICBpZiAoIWZzLmV4aXN0c1N5bmMocGRmKSkgdGhyb3cgXCJObyBzdWNoIGZpbGVcIjtcblxuICBsZXQgc3VtYXRyYVBkZiA9XG4gICAgb3B0aW9ucy5zdW1hdHJhUGRmUGF0aCB8fCBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIlN1bWF0cmFQREYtMy40LjYtMzIuZXhlXCIpO1xuICBpZiAoIW9wdGlvbnMuc3VtYXRyYVBkZlBhdGgpIHN1bWF0cmFQZGYgPSBmaXhQYXRoRm9yQXNhclVucGFjayhzdW1hdHJhUGRmKTtcblxuICBjb25zdCBhcmdzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGNvbnN0IHsgcHJpbnRlciwgc2lsZW50LCBwcmludERpYWxvZyB9ID0gb3B0aW9ucztcblxuICBpZiAocHJpbnREaWFsb2cpIHtcbiAgICBhcmdzLnB1c2goXCItcHJpbnQtZGlhbG9nXCIpO1xuICB9IGVsc2Uge1xuICAgIGlmIChwcmludGVyKSB7XG4gICAgICBhcmdzLnB1c2goXCItcHJpbnQtdG9cIiwgcHJpbnRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3MucHVzaChcIi1wcmludC10by1kZWZhdWx0XCIpO1xuICAgIH1cbiAgICBpZiAoc2lsZW50ICE9PSBmYWxzZSkge1xuICAgICAgYXJncy5wdXNoKFwiLXNpbGVudFwiKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBwcmludFNldHRpbmdzID0gZ2V0UHJpbnRTZXR0aW5ncyhvcHRpb25zKTtcblxuICBpZiAocHJpbnRTZXR0aW5ncy5sZW5ndGgpIHtcbiAgICBhcmdzLnB1c2goXCItcHJpbnQtc2V0dGluZ3NcIiwgcHJpbnRTZXR0aW5ncy5qb2luKFwiLFwiKSk7XG4gIH1cblxuICBhcmdzLnB1c2gocGRmKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGV4ZWNBc3luYyhzdW1hdHJhUGRmLCBhcmdzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRQcmludFNldHRpbmdzKG9wdGlvbnM6IFByaW50T3B0aW9ucyk6IHN0cmluZ1tdIHtcbiAgY29uc3Qge1xuICAgIHBhZ2VzLFxuICAgIHN1YnNldCxcbiAgICBvcmllbnRhdGlvbixcbiAgICBzY2FsZSxcbiAgICBtb25vY2hyb21lLFxuICAgIHNpZGUsXG4gICAgYmluLFxuICAgIHBhcGVyU2l6ZSxcbiAgICBjb3BpZXMsXG4gIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IHByaW50U2V0dGluZ3MgPSBbXTtcblxuICBpZiAocGFnZXMpIHtcbiAgICBwcmludFNldHRpbmdzLnB1c2gocGFnZXMpO1xuICB9XG5cbiAgaWYgKHN1YnNldCkge1xuICAgIGlmICh2YWxpZFN1YnNldHMuaW5jbHVkZXMoc3Vic2V0KSkge1xuICAgICAgcHJpbnRTZXR0aW5ncy5wdXNoKHN1YnNldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGBJbnZhbGlkIHN1YnNldCBwcm92aWRlZC4gVmFsaWQgbmFtZXM6ICR7dmFsaWRTdWJzZXRzLmpvaW4oXCIsIFwiKX1gO1xuICAgIH1cbiAgfVxuXG4gIGlmIChvcmllbnRhdGlvbikge1xuICAgIGlmICh2YWxpZE9yaWVudGF0aW9ucy5pbmNsdWRlcyhvcmllbnRhdGlvbikpIHtcbiAgICAgIHByaW50U2V0dGluZ3MucHVzaChvcmllbnRhdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGBJbnZhbGlkIG9yaWVudGF0aW9uIHByb3ZpZGVkLiBWYWxpZCBuYW1lczogJHt2YWxpZE9yaWVudGF0aW9ucy5qb2luKFxuICAgICAgICBcIiwgXCJcbiAgICAgICl9YDtcbiAgICB9XG4gIH1cblxuICBpZiAoc2NhbGUpIHtcbiAgICBpZiAodmFsaWRTY2FsZXMuaW5jbHVkZXMoc2NhbGUpKSB7XG4gICAgICBwcmludFNldHRpbmdzLnB1c2goc2NhbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBgSW52YWxpZCBzY2FsZSBwcm92aWRlZC4gVmFsaWQgbmFtZXM6ICR7dmFsaWRTY2FsZXMuam9pbihcIiwgXCIpfWA7XG4gICAgfVxuICB9XG5cbiAgaWYgKG1vbm9jaHJvbWUpIHtcbiAgICBwcmludFNldHRpbmdzLnB1c2goXCJtb25vY2hyb21lXCIpO1xuICB9IGVsc2UgaWYgKG1vbm9jaHJvbWUgPT09IGZhbHNlKSB7XG4gICAgcHJpbnRTZXR0aW5ncy5wdXNoKFwiY29sb3JcIik7XG4gIH1cblxuICBpZiAoc2lkZSkge1xuICAgIGlmICh2YWxpZFNpZGVzLmluY2x1ZGVzKHNpZGUpKSB7XG4gICAgICBwcmludFNldHRpbmdzLnB1c2goc2lkZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGBJbnZhbGlkIHNpZGUgcHJvdmlkZWQuIFZhbGlkIG5hbWVzOiAke3ZhbGlkU2lkZXMuam9pbihcIiwgXCIpfWA7XG4gICAgfVxuICB9XG5cbiAgaWYgKGJpbikge1xuICAgIHByaW50U2V0dGluZ3MucHVzaChgYmluPSR7YmlufWApO1xuICB9XG5cbiAgaWYgKHBhcGVyU2l6ZSkge1xuICAgIHByaW50U2V0dGluZ3MucHVzaChgcGFwZXI9JHtwYXBlclNpemV9YCk7XG4gIH1cblxuICBpZiAoY29waWVzKSB7XG4gICAgcHJpbnRTZXR0aW5ncy5wdXNoKGAke2NvcGllc314YCk7XG4gIH1cblxuICByZXR1cm4gcHJpbnRTZXR0aW5ncztcbn1cbiIsImltcG9ydCB7IFByaW50ZXIgfSBmcm9tIFwiLi4vaW5kZXhcIjtcblxuLy8gbWFwIHdpbmRvd3MtcHJpbnRlciBrZXkgdG8gZmluYWwgcHJpbnRlckRhdGEga2V5XG5jb25zdCBwcm9wZXJ0aWVzOiB7IFtrZXk6IHN0cmluZ106IGtleW9mIFByaW50ZXIgfSA9IHtcbiAgRGV2aWNlSUQ6IFwiZGV2aWNlSWRcIixcbiAgTmFtZTogXCJuYW1lXCIsXG4gIFByaW50ZXJQYXBlck5hbWVzOiBcInBhcGVyU2l6ZXNcIixcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVmFsaWRQcmludGVyKHByaW50ZXI6IHN0cmluZyk6IHtcbiAgaXNWYWxpZDogYm9vbGVhbjtcbiAgcHJpbnRlckRhdGE6IFByaW50ZXI7XG59IHtcbiAgY29uc3QgcHJpbnRlckRhdGE6IFByaW50ZXIgPSB7XG4gICAgZGV2aWNlSWQ6IFwiXCIsXG4gICAgbmFtZTogXCJcIixcbiAgICBwYXBlclNpemVzOiBbXSxcbiAgfTtcblxuICBwcmludGVyLnNwbGl0KC9cXHI/XFxuLykuZm9yRWFjaCgobGluZSkgPT4ge1xuICAgIGxldCBbbGFiZWwsIHZhbHVlXSA9IGxpbmUuc3BsaXQoXCI6XCIpLm1hcCgoZWwpID0+IGVsLnRyaW0oKSk7XG5cbiAgICAvLyBoYW5kbGUgYXJyYXkgZG90c1xuICAgIGlmICh2YWx1ZS5tYXRjaCgvXnsoLiopKFxcLnszfSl9JC8pKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoXCIuLi59XCIsIFwifVwiKTtcbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgYXJyYXkgcmV0dXJuc1xuICAgIGNvbnN0IG1hdGNoZXMgPSB2YWx1ZS5tYXRjaCgvXnsoLiopfSQvKTtcblxuICAgIGlmIChtYXRjaGVzICYmIG1hdGNoZXNbMV0pIHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHZhbHVlID0gbWF0Y2hlc1sxXS5zcGxpdChcIiwgXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGtleSA9IHByb3BlcnRpZXNbbGFiZWxdO1xuXG4gICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcHJpbnRlckRhdGFba2V5XSA9IHZhbHVlO1xuICB9KTtcblxuICBjb25zdCBpc1ZhbGlkID0gISEocHJpbnRlckRhdGEuZGV2aWNlSWQgJiYgcHJpbnRlckRhdGEubmFtZSk7XG5cbiAgcmV0dXJuIHtcbiAgICBpc1ZhbGlkLFxuICAgIHByaW50ZXJEYXRhLFxuICB9O1xufVxuIiwiaW1wb3J0IGV4ZWNGaWxlQXN5bmMgZnJvbSBcIi4uL3V0aWxzL2V4ZWMtZmlsZS1hc3luY1wiO1xuaW1wb3J0IGlzVmFsaWRQcmludGVyIGZyb20gXCIuLi91dGlscy93aW5kb3dzLXByaW50ZXItdmFsaWRcIjtcbmltcG9ydCB0aHJvd0lmVW5zdXBwb3J0ZWRPcGVyYXRpbmdTeXN0ZW0gZnJvbSBcIi4uL3V0aWxzL3Rocm93LWlmLXVuc3VwcG9ydGVkLW9zXCI7XG5pbXBvcnQgeyBQcmludGVyIH0gZnJvbSBcIi4uXCI7XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFByaW50ZXJzKCk6IFByb21pc2U8UHJpbnRlcltdPiB7XG4gIGZ1bmN0aW9uIHN0ZG91dEhhbmRsZXIoc3Rkb3V0OiBzdHJpbmcpIHtcbiAgICBjb25zdCBwcmludGVyczogUHJpbnRlcltdID0gW107XG5cbiAgICBzdGRvdXRcbiAgICAgIC5zcGxpdCgvKFxccj9cXG4pezIsfS8pXG4gICAgICAubWFwKChwcmludGVyKSA9PiBwcmludGVyLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoKHByaW50ZXIpID0+ICEhcHJpbnRlcilcbiAgICAgIC5mb3JFYWNoKChwcmludGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgaXNWYWxpZCwgcHJpbnRlckRhdGEgfSA9IGlzVmFsaWRQcmludGVyKHByaW50ZXIpO1xuXG4gICAgICAgIGlmICghaXNWYWxpZCkgcmV0dXJuO1xuXG4gICAgICAgIHByaW50ZXJzLnB1c2gocHJpbnRlckRhdGEpO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gcHJpbnRlcnM7XG4gIH1cblxuICB0cnkge1xuICAgIHRocm93SWZVbnN1cHBvcnRlZE9wZXJhdGluZ1N5c3RlbSgpO1xuICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSBhd2FpdCBleGVjRmlsZUFzeW5jKFwiUG93ZXJzaGVsbC5leGVcIiwgW1xuICAgICAgXCItQ29tbWFuZFwiLFxuICAgICAgYEdldC1DaW1JbnN0YW5jZSBXaW4zMl9QcmludGVyIC1Qcm9wZXJ0eSBEZXZpY2VJRCxOYW1lLFByaW50ZXJQYXBlck5hbWVzYCxcbiAgICBdKTtcbiAgICByZXR1cm4gc3Rkb3V0SGFuZGxlcihzdGRvdXQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldFByaW50ZXJzO1xuIiwiaW1wb3J0IGV4ZWNGaWxlQXN5bmMgZnJvbSBcIi4uL3V0aWxzL2V4ZWMtZmlsZS1hc3luY1wiO1xuaW1wb3J0IHRocm93SWZVbnN1cHBvcnRlZE9wZXJhdGluZ1N5c3RlbSBmcm9tIFwiLi4vdXRpbHMvdGhyb3ctaWYtdW5zdXBwb3J0ZWQtb3NcIjtcbmltcG9ydCBpc1ZhbGlkUHJpbnRlciBmcm9tIFwiLi4vdXRpbHMvd2luZG93cy1wcmludGVyLXZhbGlkXCI7XG5pbXBvcnQgeyBQcmludGVyIH0gZnJvbSBcIi4uXCI7XG5cbmFzeW5jIGZ1bmN0aW9uIGdldERlZmF1bHRQcmludGVyKCk6IFByb21pc2U8UHJpbnRlciB8IG51bGw+IHtcbiAgdHJ5IHtcbiAgICB0aHJvd0lmVW5zdXBwb3J0ZWRPcGVyYXRpbmdTeXN0ZW0oKTtcblxuICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSBhd2FpdCBleGVjRmlsZUFzeW5jKFwiUG93ZXJzaGVsbC5leGVcIiwgW1xuICAgICAgXCItQ29tbWFuZFwiLFxuICAgICAgYEdldC1DaW1JbnN0YW5jZSBXaW4zMl9QcmludGVyIC1Qcm9wZXJ0eSBEZXZpY2VJRCxOYW1lLFByaW50ZXJQYXBlck5hbWVzIC1GaWx0ZXIgRGVmYXVsdD10cnVlYCxcbiAgICBdKTtcblxuICAgIGNvbnN0IHByaW50ZXIgPSBzdGRvdXQudHJpbSgpO1xuXG4gICAgLy8gSWYgc3Rkb3V0IGlzIGVtcHR5LCB0aGVyZSBpcyBubyBkZWZhdWx0IHByaW50ZXJcbiAgICBpZiAoIXN0ZG91dCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCB7IGlzVmFsaWQsIHByaW50ZXJEYXRhIH0gPSBpc1ZhbGlkUHJpbnRlcihwcmludGVyKTtcblxuICAgIC8vIERldmljZUlEIG9yIE5hbWUgbm90IGZvdW5kXG4gICAgaWYgKCFpc1ZhbGlkKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiBwcmludGVyRGF0YTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBnZXREZWZhdWx0UHJpbnRlcjtcbiJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJkZWZpbmUiLCJhbWQiLCJhIiwiaSIsImdsb2JhbCIsIl9fd2VicGFja19yZXF1aXJlX18iLCJnZXR0ZXIiLCJfX2VzTW9kdWxlIiwiZCIsImRlZmluaXRpb24iLCJrZXkiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0Iiwib2JqIiwicHJvcCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJyZXF1aXJlIiwiZXhlY0ZpbGUiLCJpc1VzaW5nQXNhciIsInByb2Nlc3MiLCJ2ZXJzaW9ucyIsIm1haW5Nb2R1bGUiLCJmaWxlbmFtZSIsImluY2x1ZGVzIiwidGhyb3dJZlVuc3VwcG9ydGVkT3MiLCJ2YWxpZFN1YnNldHMiLCJ2YWxpZE9yaWVudGF0aW9ucyIsInZhbGlkU2NhbGVzIiwidmFsaWRTaWRlcyIsInByaW50IiwicGRmIiwib3B0aW9ucyIsInN1bWF0cmFQZGYiLCJzdW1hdHJhUGRmUGF0aCIsIl9fZGlybmFtZSIsInBhdGgiLCJyZXBsYWNlIiwiYXJncyIsInByaW50ZXIiLCJzaWxlbnQiLCJwcmludERpYWxvZyIsInB1c2giLCJwcmludFNldHRpbmdzIiwicGFnZXMiLCJzdWJzZXQiLCJvcmllbnRhdGlvbiIsInNjYWxlIiwibW9ub2Nocm9tZSIsInNpZGUiLCJiaW4iLCJwYXBlclNpemUiLCJjb3BpZXMiLCJqb2luIiwiZ2V0UHJpbnRTZXR0aW5ncyIsImxlbmd0aCIsImVycm9yIiwicHJvcGVydGllcyIsIkRldmljZUlEIiwiTmFtZSIsIlByaW50ZXJQYXBlck5hbWVzIiwiaXNWYWxpZFByaW50ZXIiLCJwcmludGVyRGF0YSIsImRldmljZUlkIiwibmFtZSIsInBhcGVyU2l6ZXMiLCJzcGxpdCIsImZvckVhY2giLCJsaW5lIiwibGFiZWwiLCJtYXAiLCJlbCIsInRyaW0iLCJtYXRjaCIsIm1hdGNoZXMiLCJ1bmRlZmluZWQiLCJpc1ZhbGlkIiwic3Rkb3V0IiwicHJpbnRlcnMiLCJmaWx0ZXIiLCJzdGRvdXRIYW5kbGVyIl0sInNvdXJjZVJvb3QiOiIifQ==