diff --git a/mixins/linkBEL.js b/mixins/linkBEL.js index 113e949..6c160d7 100644 --- a/mixins/linkBEL.js +++ b/mixins/linkBEL.js @@ -53,7 +53,7 @@ export default { message: '初始化成功' } } - that.webViewToH5(data) + that.webViewToH5Bel(data) that.startBluetoothDevicesDiscovery() }, fail(res) { @@ -66,7 +66,7 @@ export default { message: '初始化失败' } } - that.webViewToH5(data) + that.webViewToH5Bel(data) setTimeout(() => { that.openBluetoothAdapter() }, 5000) @@ -85,7 +85,7 @@ export default { message: '设备搜索中' } } - that.webViewToH5(data) + that.webViewToH5Bel(data) uni.startBluetoothDevicesDiscovery({ success(res) { console.log(res) @@ -123,7 +123,7 @@ export default { message: '已连接' } } - that.webViewToH5(data) + that.webViewToH5Bel(data) that.belStatus() }, fail: function(err) { @@ -136,7 +136,7 @@ export default { message: '连接失败' } } - that.webViewToH5(data) + that.webViewToH5Bel(data) setTimeout(() => { that.openBluetoothAdapter() }, 5000) @@ -167,7 +167,7 @@ export default { message: '连接失败' } } - that.webViewToH5(data) + that.webViewToH5Bel(data) } else { var data = { command: 'belConnectFeedback', @@ -177,7 +177,7 @@ export default { message: '已连接' } } - that.webViewToH5(data) + that.webViewToH5Bel(data) } }, fail(err) { @@ -212,7 +212,7 @@ export default { message: '发送内容成功' } } - that.webViewToH5(data) + that.webViewToH5Bel(data) }, fail: (err) => { console.error('发送内容失败', err) @@ -224,7 +224,7 @@ export default { message: '发送内容失败' } } - that.webViewToH5(data) + that.webViewToH5Bel(data) } }) }, @@ -252,7 +252,7 @@ export default { } clearInterval(that.setInterTimeBEL) uni.stopBluetoothDevicesDiscovery(); - that.webViewToH5(data) + that.webViewToH5Bel(data) }, fail(err) { console.log('关闭蓝牙适配器失败: ', err); @@ -260,10 +260,10 @@ export default { }); }, // uniapp 传参给 vue页面---刘灿测试 - webViewToH5(res) { + webViewToH5Bel(res) { let currentWebview = this.$scope.$getAppWebview(); let wv = currentWebview.children()[0]; - console.log('uniapp 传参给 vue页面'); + console.log('BEL-uniapp 传参给 vue页面'); wv.evalJS(`getVueMessage(${JSON.stringify(res)})`); }, } diff --git a/mixins/linkFTP.js b/mixins/linkFTP.js index 3af3145..cef0a84 100644 --- a/mixins/linkFTP.js +++ b/mixins/linkFTP.js @@ -44,7 +44,7 @@ export default { message: 'FTP已连接' } } - this.webViewToH5(data) + this.webViewToH5Ftp(data) red.data ? this.ftpLoopServerPath() : '' }) : '' } else { @@ -56,7 +56,7 @@ export default { message: 'FTP已掉线' } } - this.webViewToH5(data) + this.webViewToH5Ftp(data) this.connectFtpServer() } }) @@ -84,7 +84,7 @@ export default { message: 'FTP已连接' } } - this.webViewToH5(data) + this.webViewToH5Ftp(data) // 获取FTP服务器目录前调用这个方法---处理闪退现象 FTP.ftpChangeWorkingDirectory("/", red => { @@ -100,7 +100,7 @@ export default { message: 'FTP连接失败' } } - this.webViewToH5(data) + this.webViewToH5Ftp(data) } }) }, @@ -169,7 +169,7 @@ export default { fileName: dataParams.fileName } } - this.webViewToH5(data) + this.webViewToH5Ftp(data) this.readerFileFlag = false }; reader.readAsText(file); // 根据文件类型选择读取方式,例如:readAsText @@ -243,7 +243,7 @@ export default { }) }, // uniapp 传参给 vue页面---刘灿测试 - webViewToH5(res) { + webViewToH5Ftp(res) { let currentWebview = this.$scope.$getAppWebview(); let wv = currentWebview.children()[0]; console.log('uniapp 传参给 vue页面'); diff --git a/mixins/linkUSB.js b/mixins/linkUSB.js index 66ba8a9..ceec9b2 100644 --- a/mixins/linkUSB.js +++ b/mixins/linkUSB.js @@ -35,7 +35,7 @@ export default { message: 'USB已插入' } } - this.webViewToH5(data) + this.webViewToH5USB(data) } else if (res.type == "onUsbDeviceDetached") { //usb断开 console.log('USB已拔出'); var data = { @@ -45,7 +45,7 @@ export default { message: 'USB已拔出' } } - this.webViewToH5(data) + this.webViewToH5USB(data) } else if (res.type === 'startUpdateValue') { console.log('正在接受数据中,请稍等...'); } else if (res.type == "onNewData") { //数据回调 @@ -66,7 +66,7 @@ export default { message: JSON.stringify(this.hexCharCodeToStr(hex)) } } - this.webViewToH5(data) + this.webViewToH5USB(data) } else if (res.type == "onRunError") { //点击关闭USB var data = { @@ -76,7 +76,7 @@ export default { message: 'USBRunError' } } - this.webViewToH5(data) + this.webViewToH5USB(data) } }); //UsbSerial.setReceiveTime(type,time) 参数: @@ -129,7 +129,7 @@ export default { message: 'USB已打开' } } - this.webViewToH5(data) + this.webViewToH5USB(data) } }); } else { @@ -140,7 +140,7 @@ export default { message: 'USB未授权' } } - this.webViewToH5(data) + this.webViewToH5USB(data) } }); }, @@ -156,7 +156,7 @@ export default { message: 'USB已关闭' } } - this.webViewToH5(data) + this.webViewToH5USB(data) // uni.showToast({ // title: "usb已断开" // }) @@ -180,10 +180,10 @@ export default { return resultStr.join("") }, // uniapp 传参给 vue页面---刘灿测试 - webViewToH5(res) { + webViewToH5USB(res) { let currentWebview = this.$scope.$getAppWebview(); let wv = currentWebview.children()[0]; - console.log('uniapp 传参给 vue页面'); + console.log('USB uniapp 传参给 vue页面'); wv.evalJS(`getVueMessage(${JSON.stringify(res)})`); }, } diff --git a/pages/webPage/index.vue b/pages/webPage/index.vue index 7e8dc2a..845565a 100644 --- a/pages/webPage/index.vue +++ b/pages/webPage/index.vue @@ -63,7 +63,7 @@ let cgConfigInfoData = this.cgConfigInfo.data // 初始化USB this.connectUSB('NoOpen', () => { - this.webViewToH5({ + this.webViewToH5WebPage({ command: 'cgConfigQueryFeedback', commandType: this.cgConfigInfo.commandType, data: { @@ -106,7 +106,7 @@ // 连接USB this.connectUSB('open') // 循环检测 - this.usbStatus() + // this.usbStatus() // 断开FTp this.closeFTPConnect() } @@ -120,6 +120,7 @@ this.closeUSB() } }, + // 捕获错误测试 select1() { // 推荐这种方法 this.buglyModule = uni.requireNativePlugin('ZS-Bugly'); @@ -141,6 +142,13 @@ }); } }, + // uniapp 传参给 vue页面---刘灿测试 + webViewToH5WebPage(res) { + let currentWebview = this.$scope.$getAppWebview(); + let wv = currentWebview.children()[0]; + console.log('webPage uniapp 传参给 vue页面'); + wv.evalJS(`getVueMessage(${JSON.stringify(res)})`); + }, } } diff --git a/unpackage/dist/build/app-plus/app-service.js b/unpackage/dist/build/app-plus/app-service.js index 1e59e71..c90e824 100644 --- a/unpackage/dist/build/app-plus/app-service.js +++ b/unpackage/dist/build/app-plus/app-service.js @@ -1 +1 @@ -(this["webpackJsonp"]=this["webpackJsonp"]||[]).push([["app-service"],{"0de9":function(e,t,n){"use strict";function i(e){var t=Object.prototype.toString.call(e);return t.substring(8,t.length-1)}function o(){return"string"===typeof __channelId__&&__channelId__}function a(e,t){switch(i(t)){case"Function":return"function() { [native code] }";default:return t}}function r(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i1){var c=s.pop();l=s.join("---COMMA---"),0===c.indexOf(" at ")?l+=c:l+="---COMMA---"+c}else l=s[0];console[r](l)}n.r(t),n.d(t,"log",(function(){return r})),n.d(t,"default",(function(){return s}))},"16f0":function(e,t,n){"use strict";(function(e){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n={data:function(){return{onBluetoothDeviceFoundcustom:"",deviceId:"",stringToSend:"$D50504010300#",setInterTimeBEL:null}},onLoad:function(){},methods:{checkAndOpenGPS:function(){var t=plus.android.importClass("android.content.Context"),n=plus.android.importClass("android.location.LocationManager"),i=plus.android.runtimeMainActivity(),o=i.getSystemService(t.LOCATION_SERVICE),a=o.isProviderEnabled(n.GPS_PROVIDER),r=o.isProviderEnabled(n.NETWORK_PROVIDER);if(a||r)e("log","\u4f4d\u7f6e\u670d\u52a1\u5df2\u5f00\u542f"," at mixins/linkBEL.js:26"),this.openBluetoothAdapter();else{e("log","\u4f4d\u7f6e\u670d\u52a1\u672a\u5f00\u542f\uff0c\u8df3\u8f6c\u5230\u8bbe\u7f6e\u9875\u9762"," at mixins/linkBEL.js:29");var s=plus.android.importClass("android.content.Intent"),l=plus.android.importClass("android.provider.Settings"),c=new s(l.ACTION_LOCATION_SOURCE_SETTINGS);i.startActivity(c),plus.nativeUI.alert("\u8bf7\u624b\u52a8\u5f00\u542fGPS\uff01")}},openBluetoothAdapter:function(){var t=this;t.closeBluetoothAdapter(),e("log","\u521d\u59cb\u5316\u84dd\u7259"," at mixins/linkBEL.js:44"),uni.openBluetoothAdapter({success:function(n){e("log",n," at mixins/linkBEL.js:47");t.webViewToH5({command:"belConnectFeedback",commandType:"BEL",data:{state:0,message:"\u521d\u59cb\u5316\u6210\u529f"}}),t.startBluetoothDevicesDiscovery()},fail:function(n){e("log","\u521d\u59cb\u5316\u84dd\u7259\u5931\u8d25",n," at mixins/linkBEL.js:60");t.webViewToH5({command:"belConnectFeedback",commandType:"BEL",data:{state:0,message:"\u521d\u59cb\u5316\u5931\u8d25"}}),setTimeout((function(){t.openBluetoothAdapter()}),5e3)}})},startBluetoothDevicesDiscovery:function(){var t=this;e("log","\u5f00\u59cb\u641c\u7d22\u84dd\u7259\u8bbe\u5907"," at mixins/linkBEL.js:79");t.webViewToH5({command:"belConnectFeedback",commandType:"BEL",data:{state:0,message:"\u8bbe\u5907\u641c\u7d22\u4e2d"}}),uni.startBluetoothDevicesDiscovery({success:function(n){e("log",n," at mixins/linkBEL.js:91"),t.onBluetoothDeviceFound()}})},onBluetoothDeviceFound:function(){var t=this;this.onBluetoothDeviceFoundcustom=uni.onBluetoothDeviceFound((function(n){e("log","\u76d1\u542c\u8bbe\u5907\u53d1\u73b0",n.devices[0]," at mixins/linkBEL.js:100"),"ACP60205"===n.devices[0].name&&(e("log","hello\uff0c\u5389\u5bb3\uff0c\u627e\u5230\u5566\uff0c\u5566\u5566\u5566~~~"," at mixins/linkBEL.js:102"),uni.stopBluetoothDevicesDiscovery(),t.deviceId=n.devices[0].deviceId,t.createBLEConnection())}))},createBLEConnection:function(){var t=this;e("log","\u8fde\u63a5\u5230\u8bbe\u5907that.deviceId",t.deviceId," at mixins/linkBEL.js:113"),uni.createBLEConnection({deviceId:t.deviceId,success:function(){e("log","\u8fde\u63a5\u6210\u529f"," at mixins/linkBEL.js:117");t.webViewToH5({command:"belConnectFeedback",commandType:"BEL",data:{state:0,message:"\u5df2\u8fde\u63a5"}}),t.belStatus()},fail:function(n){e("error","\u8fde\u63a5\u5931\u8d25",n," at mixins/linkBEL.js:130");t.webViewToH5({command:"belConnectFeedback",commandType:"BEL",data:{state:0,message:"\u8fde\u63a5\u5931\u8d25"}}),setTimeout((function(){t.openBluetoothAdapter()}),5e3)}})},belStatus:function(){var e=this;clearInterval(this.setInterTimeBEL),this.setInterTimeBEL=setInterval((function(){e.getConnectedBluetoothDevices()}),5e3)},getConnectedBluetoothDevices:function(){var t=this;uni.getConnectedBluetoothDevices({success:function(n){if(e("log","\u5f53\u524d\u5df2\u8fde\u63a5\u7684\u8bbe\u5907:",n.devices," at mixins/linkBEL.js:158"),n.devices.length<=0){t.openBluetoothAdapter(),clearInterval(t.setInterTimeBEL);var i={command:"belConnectFeedback",commandType:"BEL",data:{state:0,message:"\u8fde\u63a5\u5931\u8d25"}};t.webViewToH5(i)}else{i={command:"belConnectFeedback",commandType:"BEL",data:{state:0,message:"\u5df2\u8fde\u63a5"}};t.webViewToH5(i)}},fail:function(n){e("log","\u83b7\u53d6\u5df2\u8fde\u63a5\u8bbe\u5907\u5931\u8d25:",n," at mixins/linkBEL.js:184"),t.openBluetoothAdapter()}})},writeBLECharacteristicValue:function(t){e("log","\u53d1\u9001\u84dd\u7259\u5185\u5bb9",t," at mixins/linkBEL.js:191");var n=this,i=n.stringToByteArray(t);e("log"," dataToSend.buffer",i.buffer," at mixins/linkBEL.js:198"),uni.writeBLECharacteristicValue({deviceId:n.deviceId,serviceId:"0000ffe0-0000-1000-8000-00805f9b34fb",characteristicId:"0000ffe1-0000-1000-8000-00805f9b34fb",value:i.buffer,writeType:"write",success:function(){e("log","\u53d1\u9001\u5185\u5bb9\u6210\u529f"," at mixins/linkBEL.js:206");n.webViewToH5({command:"sendBelDataFeedback",commandType:"BEL",data:{state:0,message:"\u53d1\u9001\u5185\u5bb9\u6210\u529f"}})},fail:function(t){e("error","\u53d1\u9001\u5185\u5bb9\u5931\u8d25",t," at mixins/linkBEL.js:218");n.webViewToH5({command:"sendBelDataFeedback",commandType:"BEL",data:{state:0,message:"\u53d1\u9001\u5185\u5bb9\u5931\u8d25"}})}})},stringToByteArray:function(e){for(var t=new Uint8Array(e.length),n=0;n0){var o=i.data.sort((function(e,t){return new Date(t.time)-new Date(e.time)}));e("log","newData\u65f6\u95f4\u6392\u5e8f",o," at mixins/linkFTP.js:123"),n.ftpChangeWorkingDirectory("/",(function(n){e("log","\u4e0b\u8f7d\u524d\u8c03\u7528\u8fd9\u4e2a\u65b9\u6cd5",n," at mixins/linkFTP.js:126"),n.data&&t.ftpDownloadSingleFile(o[0])}))}else t.readerFileFlag=!1}))},ftpDownloadSingleFile:function(t){var i=this;e("log","androidFileDocPath",this.androidFileDocPath," at mixins/linkFTP.js:140"),n.ftpDownloadSingleFile(this.androidFileDocPath,t.name,(function(n){e("log","\u5355\u4e2a\u6587\u4ef6\u4e0b\u8f7d\u81f3\u5b89\u5353\u673a--\u6210\u529f",n," at mixins/linkFTP.js:143"),"download"===n.type&&n.data.status?i.readerFile(t):i.readerFileFlag=!1}))},readerFile:function(t){var n=this,i=this.androidFileDocPath+t.fileName;e("log","\u83b7\u53d6\u5b89\u5353\u673a\u4e34\u65f6\u6587\u4ef6\u4e2d\u7684\u5185\u5bb9",i," at mixins/linkFTP.js:154"),plus.io.resolveLocalFileSystemURL(i,(function(i){e("log","\u6587\u4ef6\u6761\u76ee:",i," at mixins/linkFTP.js:157"),i.file((function(i){e("log","file",i," at mixins/linkFTP.js:159");var o=new plus.io.FileReader;o.onloadend=function(i){e("log","\u6587\u4ef6\u5185\u5bb9:",i.target.result," at mixins/linkFTP.js:162");var o={command:"examineData",commandType:"FTP",data:{state:0,message:JSON.stringify(i.target.result),fileName:t.fileName}};n.webViewToH5(o),n.readerFileFlag=!1},o.readAsText(i)}),(function(t){e("error","\u8bfb\u53d6\u6587\u4ef6\u5931\u8d25:",t," at mixins/linkFTP.js:177"),n.readerFileFlag=!1}))}),(function(t){e("error","\u83b7\u53d6\u6587\u4ef6\u8def\u5f84\u5931\u8d25:",t," at mixins/linkFTP.js:181"),n.readerFileFlag=!1}))},deleteAppDownLoadFile:function(t){e("log"," \u5220\u9664\u5b89\u5353\u673a\u4e0b\u8f7d\u4e0b\u6765\u7684\u6587\u4ef6--data",t," at mixins/linkFTP.js:187");var n=this.androidFileDocPath+t.fileName;plus.io.resolveLocalFileSystemURL(n,(function(t){t.remove((function(){e("log","\u6587\u4ef6\u5220\u9664\u6210\u529f"," at mixins/linkFTP.js:193")}),(function(t){e("log","\u6587\u4ef6\u5220\u9664\u5931\u8d25: "+t.message," at mixins/linkFTP.js:195")}))}),(function(t){e("log","\u65e0\u6cd5\u89e3\u6790\u6587\u4ef6\u8def\u5f84: "+t.message," at mixins/linkFTP.js:198")}))},ftpDeleteServerFiles:function(t){var i=this.cgConfigInfo.data.inspectionDir+"/"+t.fileName;e("log","\u5220\u9664FTP\u670d\u52a1\u5668\u6587\u4ef6",i," at mixins/linkFTP.js:207"),t&&t.fileName&&n.ftpDeleteServerFiles(i,(function(t){e("log","FTP\u670d\u52a1\u5668\u6587\u4ef6\u5220\u9664\u6210\u529f",i,t," at mixins/linkFTP.js:209")}))},ftpDeleteServerFilesWithoutDirectory:function(){n.ftpDeleteServerFilesWithoutDirectory(this.cgConfigInfo.data.inspectionDir,(function(t){e("log",t," at mixins/linkFTP.js:219")}))},closeFTPConnect:function(){var t=this;e("log","FTP\u65ad\u5f00\u8fde\u63a5\uff01\uff01\uff01\uff01"," at mixins/linkFTP.js:237"),n.closeFTPConnect((function(n){e("log","FTP\u65ad\u5f00\u8fde\u63a5",n," at mixins/linkFTP.js:240"),clearInterval(t.setInterTimeFTP)}))},webViewToH5:function(t){var n=this.$scope.$getAppWebview(),i=n.children()[0];e("log","uniapp \u4f20\u53c2\u7ed9 vue\u9875\u9762"," at mixins/linkFTP.js:249"),i.evalJS("getVueMessage(".concat(JSON.stringify(t),")"))}}};t.default=i}).call(this,n("0de9")["default"])},"8bbf":function(e,t){e.exports=Vue},9523:function(e,t,n){var i=n("a395");e.exports=function(e,t,n){return t=i(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},e.exports.__esModule=!0,e.exports["default"]=e.exports},"9ba7":function(e,t,n){"use strict";(function(e){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=uni.requireNativePlugin("Zhimi-UsbSerial"),i={data:function(){return{setInterTimeUSB:null,vendorId:"",port:"",usbDevicesComPortsList:[]}},destroyed:function(){e("log","\u9500\u6bc1\u9875\u9762"," at mixins/linkUSB.js:12"),clearInterval(this.setInterTimeUSB)},methods:{usbStatus:function(){var e=this;clearInterval(this.setInterTimeUSB),this.setInterTimeUSB=setInterval((function(){e.connectUSB("open")}),5e3)},connectUSB:function(t,i){var o=this;e("log","UsbSerial",n," at mixins/linkUSB.js:25"),n.setDataCallback((function(t){if(e("log","\u8bbe\u7f6eUSB\u6570\u636e\u56de\u8c03-res",t," at mixins/linkUSB.js:28"),"onUsbDeviceAttached"==t.type){e("log","USB\u5df2\u63d2\u5165"," at mixins/linkUSB.js:30");var n={command:"comStatusChanged",data:{state:0,message:"USB\u5df2\u63d2\u5165"}};o.webViewToH5(n)}else if("onUsbDeviceDetached"==t.type){e("log","USB\u5df2\u62d4\u51fa"," at mixins/linkUSB.js:40");n={command:"comStatusChanged",data:{state:0,message:"USB\u5df2\u62d4\u51fa"}};o.webViewToH5(n)}else if("startUpdateValue"===t.type)e("log","\u6b63\u5728\u63a5\u53d7\u6570\u636e\u4e2d,\u8bf7\u7a0d\u7b49..."," at mixins/linkUSB.js:50");else if("onNewData"==t.type){n=t.data.data,t.data.string;var i=t.data.hex;e("log","hex",i," at mixins/linkUSB.js:57"),e("log","this.hexCharCodeToStr(hex)",JSON.stringify(o.hexCharCodeToStr(i))," at mixins/linkUSB.js:59");n={command:"examineData",commandType:"USB",data:{state:0,message:JSON.stringify(o.hexCharCodeToStr(i))}};o.webViewToH5(n)}else if("onRunError"==t.type){n={command:"comStatusChanged",data:{state:0,message:"USBRunError"}};o.webViewToH5(n)}})),n.setReceiveTime(2,500),n.getUsbDevices((function(n){if(e("log","\u83b7\u53d6usb\u5217\u8868-usbDevices",n," at mixins/linkUSB.js:88"),n.length>0)if(o.usbDevicesComPortsList=n.map((function(e){return e.device.vendorId})),"NoOpen"===t)i();else{var a=n.filter((function(e){return e.device.vendorId==o.cgConfigInfo.data.portName}));e("log","usbDevice",a," at mixins/linkUSB.js:98"),a.length>0&&(o.vendorId=a[0].device.vendorId,o.port=a[0].ports[0],o.openUSB())}else o.usbDevicesComPortsList=[],"NoOpen"===t&&i()}))},openUSB:function(){var t=this,i=this.cgConfigInfo.data;e("log","\u6253\u5f00USB",this.vendorId," at mixins/linkUSB.js:114"),n.grantUsbPermission(this.vendorId,(function(o){if(e("log","\u68c0\u67e5\u6388\u6743Usb\u6743\u9650",o," at mixins/linkUSB.js:117"),1==o)n.open(t.vendorId,t.port,(function(o){if(e("log","\u6253\u5f00usb\u8fde\u63a5",o," at mixins/linkUSB.js:121"),1==o){n.setParameters(i.baudRate,i.dataBits,i.stopBits,i.parity);t.webViewToH5({command:"comStatusChanged",data:{state:0,message:"USB\u5df2\u6253\u5f00"}})}}));else{t.webViewToH5({command:"comStatusChanged",data:{state:0,message:"USB\u672a\u6388\u6743"}})}}))},closeUSB:function(){e("log","\u5173\u95edusb"," at mixins/linkUSB.js:149"),n.close(),clearInterval(this.setInterTimeUSB);this.webViewToH5({command:"comStatusChanged",data:{state:0,message:"USB\u5df2\u5173\u95ed"}})},hexCharCodeToStr:function(e){var t,n=e.trim(),i="0x"===n.substr(0,2).toLowerCase()?n.substr(2):n,o=i.length;if(o%2!==0)return alert("\u5b58\u5728\u975e\u6cd5\u5b57\u7b26!"),"";for(var a=[],r=0;r1?t-1:0),i=1;i1){var c=r.pop();l=r.join("---COMMA---"),0===c.indexOf(" at ")?l+=c:l+="---COMMA---"+c}else l=r[0];console[s](l)}n.r(t),n.d(t,"log",(function(){return s})),n.d(t,"default",(function(){return r}))},"16f0":function(e,t,n){"use strict";(function(e){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n={data:function(){return{onBluetoothDeviceFoundcustom:"",deviceId:"",stringToSend:"$D50504010300#",setInterTimeBEL:null}},onLoad:function(){},methods:{checkAndOpenGPS:function(){var t=plus.android.importClass("android.content.Context"),n=plus.android.importClass("android.location.LocationManager"),i=plus.android.runtimeMainActivity(),o=i.getSystemService(t.LOCATION_SERVICE),a=o.isProviderEnabled(n.GPS_PROVIDER),s=o.isProviderEnabled(n.NETWORK_PROVIDER);if(a||s)e("log","\u4f4d\u7f6e\u670d\u52a1\u5df2\u5f00\u542f"," at mixins/linkBEL.js:26"),this.openBluetoothAdapter();else{e("log","\u4f4d\u7f6e\u670d\u52a1\u672a\u5f00\u542f\uff0c\u8df3\u8f6c\u5230\u8bbe\u7f6e\u9875\u9762"," at mixins/linkBEL.js:29");var r=plus.android.importClass("android.content.Intent"),l=plus.android.importClass("android.provider.Settings"),c=new r(l.ACTION_LOCATION_SOURCE_SETTINGS);i.startActivity(c),plus.nativeUI.alert("\u8bf7\u624b\u52a8\u5f00\u542fGPS\uff01")}},openBluetoothAdapter:function(){var t=this;t.closeBluetoothAdapter(),e("log","\u521d\u59cb\u5316\u84dd\u7259"," at mixins/linkBEL.js:44"),uni.openBluetoothAdapter({success:function(n){e("log",n," at mixins/linkBEL.js:47");t.webViewToH5({command:"belConnectFeedback",commandType:"BEL",data:{state:0,message:"\u521d\u59cb\u5316\u6210\u529f"}}),t.startBluetoothDevicesDiscovery()},fail:function(n){e("log","\u521d\u59cb\u5316\u84dd\u7259\u5931\u8d25",n," at mixins/linkBEL.js:60");t.webViewToH5({command:"belConnectFeedback",commandType:"BEL",data:{state:0,message:"\u521d\u59cb\u5316\u5931\u8d25"}}),setTimeout((function(){t.openBluetoothAdapter()}),5e3)}})},startBluetoothDevicesDiscovery:function(){var t=this;e("log","\u5f00\u59cb\u641c\u7d22\u84dd\u7259\u8bbe\u5907"," at mixins/linkBEL.js:79");t.webViewToH5({command:"belConnectFeedback",commandType:"BEL",data:{state:0,message:"\u8bbe\u5907\u641c\u7d22\u4e2d"}}),uni.startBluetoothDevicesDiscovery({success:function(n){e("log",n," at mixins/linkBEL.js:91"),t.onBluetoothDeviceFound()}})},onBluetoothDeviceFound:function(){var t=this;this.onBluetoothDeviceFoundcustom=uni.onBluetoothDeviceFound((function(n){e("log","\u76d1\u542c\u8bbe\u5907\u53d1\u73b0",n.devices[0]," at mixins/linkBEL.js:100"),"ACP60205"===n.devices[0].name&&(e("log","hello\uff0c\u5389\u5bb3\uff0c\u627e\u5230\u5566\uff0c\u5566\u5566\u5566~~~"," at mixins/linkBEL.js:102"),uni.stopBluetoothDevicesDiscovery(),t.deviceId=n.devices[0].deviceId,t.createBLEConnection())}))},createBLEConnection:function(){var t=this;e("log","\u8fde\u63a5\u5230\u8bbe\u5907that.deviceId",t.deviceId," at mixins/linkBEL.js:113"),uni.createBLEConnection({deviceId:t.deviceId,success:function(){e("log","\u8fde\u63a5\u6210\u529f"," at mixins/linkBEL.js:117");t.webViewToH5({command:"belConnectFeedback",commandType:"BEL",data:{state:0,message:"\u5df2\u8fde\u63a5"}}),t.belStatus()},fail:function(n){e("error","\u8fde\u63a5\u5931\u8d25",n," at mixins/linkBEL.js:130");t.webViewToH5({command:"belConnectFeedback",commandType:"BEL",data:{state:0,message:"\u8fde\u63a5\u5931\u8d25"}}),setTimeout((function(){t.openBluetoothAdapter()}),5e3)}})},belStatus:function(){var e=this;clearInterval(this.setInterTimeBEL),this.setInterTimeBEL=setInterval((function(){e.getConnectedBluetoothDevices()}),5e3)},getConnectedBluetoothDevices:function(){var t=this;uni.getConnectedBluetoothDevices({success:function(n){if(e("log","\u5f53\u524d\u5df2\u8fde\u63a5\u7684\u8bbe\u5907:",n.devices," at mixins/linkBEL.js:158"),n.devices.length<=0){t.openBluetoothAdapter(),clearInterval(t.setInterTimeBEL);var i={command:"belConnectFeedback",commandType:"BEL",data:{state:0,message:"\u8fde\u63a5\u5931\u8d25"}};t.webViewToH5(i)}else{i={command:"belConnectFeedback",commandType:"BEL",data:{state:0,message:"\u5df2\u8fde\u63a5"}};t.webViewToH5(i)}},fail:function(n){e("log","\u83b7\u53d6\u5df2\u8fde\u63a5\u8bbe\u5907\u5931\u8d25:",n," at mixins/linkBEL.js:184"),t.openBluetoothAdapter()}})},writeBLECharacteristicValue:function(t){e("log","\u53d1\u9001\u84dd\u7259\u5185\u5bb9",t," at mixins/linkBEL.js:191");var n=this,i=n.stringToByteArray(t);e("log"," dataToSend.buffer",i.buffer," at mixins/linkBEL.js:198"),uni.writeBLECharacteristicValue({deviceId:n.deviceId,serviceId:"0000ffe0-0000-1000-8000-00805f9b34fb",characteristicId:"0000ffe1-0000-1000-8000-00805f9b34fb",value:i.buffer,writeType:"write",success:function(){e("log","\u53d1\u9001\u5185\u5bb9\u6210\u529f"," at mixins/linkBEL.js:206");n.webViewToH5({command:"sendBelDataFeedback",commandType:"BEL",data:{state:0,message:"\u53d1\u9001\u5185\u5bb9\u6210\u529f"}})},fail:function(t){e("error","\u53d1\u9001\u5185\u5bb9\u5931\u8d25",t," at mixins/linkBEL.js:218");n.webViewToH5({command:"sendBelDataFeedback",commandType:"BEL",data:{state:0,message:"\u53d1\u9001\u5185\u5bb9\u5931\u8d25"}})}})},stringToByteArray:function(e){for(var t=new Uint8Array(e.length),n=0;n0){var o=i.data.sort((function(e,t){return new Date(t.time)-new Date(e.time)}));e("log","newData\u65f6\u95f4\u6392\u5e8f",o," at mixins/linkFTP.js:123"),n.ftpChangeWorkingDirectory("/",(function(n){e("log","\u4e0b\u8f7d\u524d\u8c03\u7528\u8fd9\u4e2a\u65b9\u6cd5",n," at mixins/linkFTP.js:126"),n.data&&t.ftpDownloadSingleFile(o[0])}))}else t.readerFileFlag=!1}))},ftpDownloadSingleFile:function(t){var i=this;e("log","androidFileDocPath",this.androidFileDocPath," at mixins/linkFTP.js:140"),n.ftpDownloadSingleFile(this.androidFileDocPath,t.name,(function(n){e("log","\u5355\u4e2a\u6587\u4ef6\u4e0b\u8f7d\u81f3\u5b89\u5353\u673a--\u6210\u529f",n," at mixins/linkFTP.js:143"),"download"===n.type&&n.data.status?i.readerFile(t):i.readerFileFlag=!1}))},readerFile:function(t){var n=this,i=this.androidFileDocPath+t.fileName;e("log","\u83b7\u53d6\u5b89\u5353\u673a\u4e34\u65f6\u6587\u4ef6\u4e2d\u7684\u5185\u5bb9",i," at mixins/linkFTP.js:154"),plus.io.resolveLocalFileSystemURL(i,(function(i){e("log","\u6587\u4ef6\u6761\u76ee:",i," at mixins/linkFTP.js:157"),i.file((function(i){e("log","file",i," at mixins/linkFTP.js:159");var o=new plus.io.FileReader;o.onloadend=function(i){e("log","\u6587\u4ef6\u5185\u5bb9:",i.target.result," at mixins/linkFTP.js:162");var o={command:"examineData",commandType:"FTP",data:{state:0,message:JSON.stringify(i.target.result),fileName:t.fileName}};n.webViewToH5(o),n.readerFileFlag=!1},o.readAsText(i)}),(function(t){e("error","\u8bfb\u53d6\u6587\u4ef6\u5931\u8d25:",t," at mixins/linkFTP.js:177"),n.readerFileFlag=!1}))}),(function(t){e("error","\u83b7\u53d6\u6587\u4ef6\u8def\u5f84\u5931\u8d25:",t," at mixins/linkFTP.js:181"),n.readerFileFlag=!1}))},deleteAppDownLoadFile:function(t){e("log"," \u5220\u9664\u5b89\u5353\u673a\u4e0b\u8f7d\u4e0b\u6765\u7684\u6587\u4ef6--data",t," at mixins/linkFTP.js:187");var n=this.androidFileDocPath+t.fileName;plus.io.resolveLocalFileSystemURL(n,(function(t){t.remove((function(){e("log","\u6587\u4ef6\u5220\u9664\u6210\u529f"," at mixins/linkFTP.js:193")}),(function(t){e("log","\u6587\u4ef6\u5220\u9664\u5931\u8d25: "+t.message," at mixins/linkFTP.js:195")}))}),(function(t){e("log","\u65e0\u6cd5\u89e3\u6790\u6587\u4ef6\u8def\u5f84: "+t.message," at mixins/linkFTP.js:198")}))},ftpDeleteServerFiles:function(t){var i=this.cgConfigInfo.data.inspectionDir+"/"+t.fileName;e("log","\u5220\u9664FTP\u670d\u52a1\u5668\u6587\u4ef6",i," at mixins/linkFTP.js:207"),t&&t.fileName&&n.ftpDeleteServerFiles(i,(function(t){e("log","FTP\u670d\u52a1\u5668\u6587\u4ef6\u5220\u9664\u6210\u529f",i,t," at mixins/linkFTP.js:209")}))},ftpDeleteServerFilesWithoutDirectory:function(){n.ftpDeleteServerFilesWithoutDirectory(this.cgConfigInfo.data.inspectionDir,(function(t){e("log",t," at mixins/linkFTP.js:219")}))},closeFTPConnect:function(){var t=this;e("log","FTP\u65ad\u5f00\u8fde\u63a5\uff01\uff01\uff01\uff01"," at mixins/linkFTP.js:237"),n.closeFTPConnect((function(n){e("log","FTP\u65ad\u5f00\u8fde\u63a5",n," at mixins/linkFTP.js:240"),clearInterval(t.setInterTimeFTP)}))},webViewToH5:function(t){var n=this.$scope.$getAppWebview(),i=n.children()[0];e("log","uniapp \u4f20\u53c2\u7ed9 vue\u9875\u9762"," at mixins/linkFTP.js:249"),i.evalJS("getVueMessage(".concat(JSON.stringify(t),")"))}}};t.default=i}).call(this,n("0de9")["default"])},"8bbf":function(e,t){e.exports=Vue},9523:function(e,t,n){var i=n("a395");e.exports=function(e,t,n){return t=i(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},e.exports.__esModule=!0,e.exports["default"]=e.exports},"9ba7":function(e,t,n){"use strict";(function(e){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=uni.requireNativePlugin("Zhimi-UsbSerial"),i={data:function(){return{setInterTimeUSB:null,vendorId:"",port:"",usbDevicesComPortsList:[]}},destroyed:function(){e("log","\u9500\u6bc1\u9875\u9762"," at mixins/linkUSB.js:12"),clearInterval(this.setInterTimeUSB)},methods:{usbStatus:function(){var e=this;clearInterval(this.setInterTimeUSB),this.setInterTimeUSB=setInterval((function(){e.connectUSB("open")}),5e3)},connectUSB:function(t,i){var o=this;e("log","UsbSerial",n," at mixins/linkUSB.js:25"),n.setDataCallback((function(t){if(e("log","\u8bbe\u7f6eUSB\u6570\u636e\u56de\u8c03-res",t," at mixins/linkUSB.js:28"),"onUsbDeviceAttached"==t.type){e("log","USB\u5df2\u63d2\u5165"," at mixins/linkUSB.js:30");var n={command:"comStatusChanged",data:{state:0,message:"USB\u5df2\u63d2\u5165"}};o.webViewToH5(n)}else if("onUsbDeviceDetached"==t.type){e("log","USB\u5df2\u62d4\u51fa"," at mixins/linkUSB.js:40");n={command:"comStatusChanged",data:{state:0,message:"USB\u5df2\u62d4\u51fa"}};o.webViewToH5(n)}else if("startUpdateValue"===t.type)e("log","\u6b63\u5728\u63a5\u53d7\u6570\u636e\u4e2d,\u8bf7\u7a0d\u7b49..."," at mixins/linkUSB.js:50");else if("onNewData"==t.type){n=t.data.data,t.data.string;var i=t.data.hex;e("log","hex",i," at mixins/linkUSB.js:57"),e("log","this.hexCharCodeToStr(hex)",JSON.stringify(o.hexCharCodeToStr(i))," at mixins/linkUSB.js:59");n={command:"examineData",commandType:"USB",data:{state:0,message:JSON.stringify(o.hexCharCodeToStr(i))}};o.webViewToH5(n)}else if("onRunError"==t.type){n={command:"comStatusChanged",data:{state:0,message:"USBRunError"}};o.webViewToH5(n)}})),n.setReceiveTime(2,500),n.getUsbDevices((function(n){if(e("log","\u83b7\u53d6usb\u5217\u8868-usbDevices",n," at mixins/linkUSB.js:88"),n.length>0)if(o.usbDevicesComPortsList=n.map((function(e){return e.device.vendorId})),"NoOpen"===t)i();else{var a=n.filter((function(e){return e.device.vendorId==o.cgConfigInfo.data.portName}));e("log","usbDevice",a," at mixins/linkUSB.js:98"),a.length>0&&(o.vendorId=a[0].device.vendorId,o.port=a[0].ports[0],o.openUSB())}else o.usbDevicesComPortsList=[],"NoOpen"===t&&i()}))},openUSB:function(){var t=this,i=this.cgConfigInfo.data;e("log","\u6253\u5f00USB",this.vendorId," at mixins/linkUSB.js:114"),n.grantUsbPermission(this.vendorId,(function(o){if(e("log","\u68c0\u67e5\u6388\u6743Usb\u6743\u9650",o," at mixins/linkUSB.js:117"),1==o)n.open(t.vendorId,t.port,(function(o){if(e("log","\u6253\u5f00usb\u8fde\u63a5",o," at mixins/linkUSB.js:121"),1==o){n.setParameters(i.baudRate,i.dataBits,i.stopBits,i.parity);t.webViewToH5({command:"comStatusChanged",data:{state:0,message:"USB\u5df2\u6253\u5f00"}})}}));else{t.webViewToH5({command:"comStatusChanged",data:{state:0,message:"USB\u672a\u6388\u6743"}})}}))},closeUSB:function(){e("log","\u5173\u95edusb"," at mixins/linkUSB.js:149"),n.close(),clearInterval(this.setInterTimeUSB);this.webViewToH5({command:"comStatusChanged",data:{state:0,message:"USB\u5df2\u5173\u95ed"}})},hexCharCodeToStr:function(e){var t,n=e.trim(),i="0x"===n.substr(0,2).toLowerCase()?n.substr(2):n,o=i.length;if(o%2!==0)return alert("\u5b58\u5728\u975e\u6cd5\u5b57\u7b26!"),"";for(var a=[],s=0;sn.parts.length&&(r.parts.length=n.parts.length)}else{var a=[];for(o=0;on.parts.length&&(r.parts.length=n.parts.length)}else{var a=[];for(o=0;o 0) {\n _this2.usbDevicesComPortsList = usbDevices.map(function (item) {\n return item.device.vendorId;\n });\n if (flag === 'NoOpen') {\n callback();\n } else {\n // console.log('this.cgConfigInfo.data.portName',this.cgConfigInfo.data.portName);\n // console.log('usbDevices[0].device.vendorId',usbDevices[0].device.vendorId);\n var usbDevice = usbDevices.filter(function (item) {\n return item.device.vendorId == _this2.cgConfigInfo.data.portName;\n });\n __f__(\"log\", 'usbDevice', usbDevice, \" at mixins/linkUSB.js:98\");\n if (usbDevice.length > 0) {\n _this2.vendorId = usbDevice[0].device.vendorId;\n _this2.port = usbDevice[0].ports[0];\n _this2.openUSB();\n }\n }\n } else {\n _this2.usbDevicesComPortsList = [];\n flag === 'NoOpen' ? callback() : '';\n }\n });\n },\n // 打开USB\n openUSB: function openUSB() {\n var _this3 = this;\n var vueDetailData = this.cgConfigInfo.data;\n __f__(\"log\", '打开USB', this.vendorId, \" at mixins/linkUSB.js:114\");\n //检查授权Usb权限\n UsbSerial.grantUsbPermission(this.vendorId, function (res) {\n __f__(\"log\", '检查授权Usb权限', res, \" at mixins/linkUSB.js:117\");\n if (res == true) {\n //打开usb连接\n UsbSerial.open(_this3.vendorId, _this3.port, function (ret) {\n __f__(\"log\", '打开usb连接', ret, \" at mixins/linkUSB.js:121\");\n if (ret == true) {\n //设置参数\n UsbSerial.setParameters(vueDetailData.baudRate, vueDetailData.dataBits, vueDetailData.stopBits, vueDetailData.parity);\n var data = {\n command: 'comStatusChanged',\n data: {\n state: 0,\n message: 'USB已打开'\n }\n };\n _this3.webViewToH5(data);\n }\n });\n } else {\n var data = {\n command: 'comStatusChanged',\n data: {\n state: 0,\n message: 'USB未授权'\n }\n };\n _this3.webViewToH5(data);\n }\n });\n },\n //关闭usb\n closeUSB: function closeUSB() {\n __f__(\"log\", '关闭usb', \" at mixins/linkUSB.js:149\");\n UsbSerial.close();\n clearInterval(this.setInterTimeUSB);\n var data = {\n command: 'comStatusChanged',\n data: {\n state: 0,\n message: 'USB已关闭'\n }\n };\n this.webViewToH5(data);\n // uni.showToast({\n // \ttitle: \"usb已断开\"\n // })\n },\n // 将16进制的内容转成我们看得懂的字符串内容\n hexCharCodeToStr: function hexCharCodeToStr(hexCharCodeStr) {\n var trimedStr = hexCharCodeStr.trim();\n var rawStr = trimedStr.substr(0, 2).toLowerCase() === \"0x\" ? trimedStr.substr(2) : trimedStr;\n var len = rawStr.length;\n // console.log(len)\n if (len % 2 !== 0) {\n alert(\"存在非法字符!\");\n return \"\";\n }\n var curCharCode;\n var resultStr = [];\n for (var i = 0; i < len; i = i + 2) {\n curCharCode = parseInt(rawStr.substr(i, 2), 16);\n resultStr.push(String.fromCharCode(curCharCode));\n }\n return resultStr.join(\"\");\n },\n // uniapp 传参给 vue页面---刘灿测试\n webViewToH5: function webViewToH5(res) {\n var currentWebview = this.$scope.$getAppWebview();\n var wv = currentWebview.children()[0];\n __f__(\"log\", 'uniapp 传参给 vue页面', \" at mixins/linkUSB.js:186\");\n wv.evalJS(\"getVueMessage(\".concat(JSON.stringify(res), \")\"));\n }\n }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 12)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vbWl4aW5zL2xpbmtVU0IuanMiXSwibmFtZXMiOlsiVXNiU2VyaWFsIiwidW5pIiwicmVxdWlyZU5hdGl2ZVBsdWdpbiIsImRhdGEiLCJzZXRJbnRlclRpbWVVU0IiLCJ2ZW5kb3JJZCIsInBvcnQiLCJ1c2JEZXZpY2VzQ29tUG9ydHNMaXN0IiwiZGVzdHJveWVkIiwiY2xlYXJJbnRlcnZhbCIsIm1ldGhvZHMiLCJ1c2JTdGF0dXMiLCJzZXRJbnRlcnZhbCIsImNvbm5lY3RVU0IiLCJmbGFnIiwiY2FsbGJhY2siLCJzZXREYXRhQ2FsbGJhY2siLCJyZXMiLCJ0eXBlIiwiY29tbWFuZCIsInN0YXRlIiwibWVzc2FnZSIsIndlYlZpZXdUb0g1Iiwic3RyIiwic3RyaW5nIiwiaGV4IiwiSlNPTiIsInN0cmluZ2lmeSIsImhleENoYXJDb2RlVG9TdHIiLCJjb21tYW5kVHlwZSIsInNldFJlY2VpdmVUaW1lIiwiZ2V0VXNiRGV2aWNlcyIsInVzYkRldmljZXMiLCJsZW5ndGgiLCJtYXAiLCJpdGVtIiwiZGV2aWNlIiwidXNiRGV2aWNlIiwiZmlsdGVyIiwiY2dDb25maWdJbmZvIiwicG9ydE5hbWUiLCJwb3J0cyIsIm9wZW5VU0IiLCJ2dWVEZXRhaWxEYXRhIiwiZ3JhbnRVc2JQZXJtaXNzaW9uIiwib3BlbiIsInJldCIsInNldFBhcmFtZXRlcnMiLCJiYXVkUmF0ZSIsImRhdGFCaXRzIiwic3RvcEJpdHMiLCJwYXJpdHkiLCJjbG9zZVVTQiIsImNsb3NlIiwiaGV4Q2hhckNvZGVTdHIiLCJ0cmltZWRTdHIiLCJ0cmltIiwicmF3U3RyIiwic3Vic3RyIiwidG9Mb3dlckNhc2UiLCJsZW4iLCJhbGVydCIsImN1ckNoYXJDb2RlIiwicmVzdWx0U3RyIiwiaSIsInBhcnNlSW50IiwicHVzaCIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsImpvaW4iLCJjdXJyZW50V2VidmlldyIsIiRzY29wZSIsIiRnZXRBcHBXZWJ2aWV3Iiwid3YiLCJjaGlsZHJl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QUFXO01BQ2YsSUFBSUMsU0FBUyxHQUFHLEVBQUU7TUFDbEIsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdKLEdBQUcsRUFBRUksQ0FBQyxHQUFHQSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ25DRixXQUFXLEdBQUdHLFFBQVEsQ0FBQ1IsTUFBTSxDQUFDQyxNQUFNLENBQUNNLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDL0NELFNBQVMsQ0FBQ0csSUFBSSxDQUFDQyxNQUFNLENBQUNDLFlBQVksQ0FBQ04sV0FBVyxDQUFDLENBQUM7TUFDakQ7TUFDQSxPQUFPQyxTQUFTLENBQUNNLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUNEO0lBQ0EvQyxXQUFXLHVCQUFDTCxHQUFHLEVBQUU7TUFDaEIsSUFBSXFELGNBQWMsR0FBRyxJQUFJLENBQUNDLE1BQU0sQ0FBQ0MsY0FBYyxFQUFFO01BQ2pELElBQUlDLEVBQUUsR0FBR0gsY0FBYyxDQUFDSSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDckMsYUFBWSxrQkFBa0I7TUFDOUJELEVBQUUsQ0FBQ0UsTUFBTSx5QkFBa0JqRCxJQUFJLENBQUNDLFNBQVMsQ0FBQ1YsR0FBRyxDQUFDLE9BQUk7SUFDbkQ7RUFDRDtBQUNELENBQUM7QUFBQSwyQiIsImZpbGUiOiIxMy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBVc2JTZXJpYWwgPSB1bmkucmVxdWlyZU5hdGl2ZVBsdWdpbignWmhpbWktVXNiU2VyaWFsJyk7XHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuXHRkYXRhKCkge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0c2V0SW50ZXJUaW1lVVNCOiBudWxsLFxyXG5cdFx0XHR2ZW5kb3JJZDogJycsXHJcblx0XHRcdHBvcnQ6ICcnLFxyXG5cdFx0XHR1c2JEZXZpY2VzQ29tUG9ydHNMaXN0OiBbXSAvLyDkuLLlj6PlkI3np7DmlbDnu4RcclxuXHRcdH1cclxuXHR9LFxyXG5cdGRlc3Ryb3llZCgpIHtcclxuXHRcdGNvbnNvbGUubG9nKCfplIDmr4HpobXpnaInKTtcclxuXHRcdGNsZWFySW50ZXJ2YWwodGhpcy5zZXRJbnRlclRpbWVVU0IpXHJcblx0fSxcclxuXHRtZXRob2RzOiB7XHJcblx0XHQvLyDmo4DmtYtVU0LmmK/lkKbov57mjqXnirbmgIFcclxuXHRcdHVzYlN0YXR1cygpIHtcclxuXHRcdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLnNldEludGVyVGltZVVTQilcclxuXHRcdFx0dGhpcy5zZXRJbnRlclRpbWVVU0IgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5jb25uZWN0VVNCKCdvcGVuJylcclxuXHRcdFx0fSwgNTAwMClcclxuXHRcdH0sXHJcblx0XHQvLyDorr7nva5VU0LmlbDmja7lm57osINcclxuXHRcdGNvbm5lY3RVU0IoZmxhZywgY2FsbGJhY2spIHtcclxuXHRcdFx0Y29uc29sZS5sb2coJ1VzYlNlcmlhbCcsIFVzYlNlcmlhbClcclxuXHRcdFx0Ly/orr7nva7mlbDmja7lm57osINcclxuXHRcdFx0VXNiU2VyaWFsLnNldERhdGFDYWxsYmFjaygocmVzKSA9PiB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coJ+iuvue9rlVTQuaVsOaNruWbnuiwgy1yZXMnLCByZXMpXHJcblx0XHRcdFx0aWYgKHJlcy50eXBlID09IFwib25Vc2JEZXZpY2VBdHRhY2hlZFwiKSB7IC8vdXNi5o+S5LiKXHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZygnVVNC5bey5o+S5YWlJyk7XHJcblx0XHRcdFx0XHR2YXIgZGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0Y29tbWFuZDogJ2NvbVN0YXR1c0NoYW5nZWQnLFxyXG5cdFx0XHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHRcdFx0c3RhdGU6IDAsXHJcblx0XHRcdFx0XHRcdFx0bWVzc2FnZTogJ1VTQuW3suaPkuWFpSdcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dGhpcy53ZWJWaWV3VG9INShkYXRhKVxyXG5cdFx0XHRcdH0gZWxzZSBpZiAocmVzLnR5cGUgPT0gXCJvblVzYkRldmljZURldGFjaGVkXCIpIHsgLy91c2Lmlq3lvIBcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKCdVU0Llt7Lmi5Tlh7onKTtcclxuXHRcdFx0XHRcdHZhciBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRjb21tYW5kOiAnY29tU3RhdHVzQ2hhbmdlZCcsXHJcblx0XHRcdFx0XHRcdGRhdGE6IHtcclxuXHRcdFx0XHRcdFx0XHRzdGF0ZTogMCxcclxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlOiAnVVNC5bey5ouU5Ye6J1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLndlYlZpZXdUb0g1KGRhdGEpXHJcblx0XHRcdFx0fSBlbHNlIGlmIChyZXMudHlwZSA9PT0gJ3N0YXJ0VXBkYXRlVmFsdWUnKSB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZygn5q2j5Zyo5o6l5Y+X5pWw5o2u5LitLOivt+eojeetiS4uLicpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAocmVzLnR5cGUgPT0gXCJvbk5ld0RhdGFcIikgeyAvL+aVsOaNruWbnuiwg1xyXG5cdFx0XHRcdFx0dmFyIGRhdGEgPSByZXMuZGF0YS5kYXRhOyAvL+Wtl+iKguaVsOe7hFxyXG5cdFx0XHRcdFx0dmFyIHN0ciA9IHJlcy5kYXRhLnN0cmluZzsgLy/lrZfnrKbkuLJcclxuXHRcdFx0XHRcdHZhciBoZXggPSByZXMuZGF0YS5oZXg7IC8v5Y2B5YWt6L+b5Yi2XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygn5a2X6IqC5pWw57uEJyxkYXRhKVxyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ+Wtl+espuS4sicsc3RyKVxyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ2hleCcsIGhleClcclxuXHRcdFx0XHRcdC8vIDY4NjU2YzZjNmYyMDc3NmY3MjZjNjQtLS1oZWxsbyB3b3JsZFxyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ3RoaXMuaGV4Q2hhckNvZGVUb1N0cihoZXgpJywgSlNPTi5zdHJpbmdpZnkodGhpcy5oZXhDaGFyQ29kZVRvU3RyKGhleCkpKTtcclxuXHJcblx0XHRcdFx0XHR2YXIgZGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0Y29tbWFuZDogJ2V4YW1pbmVEYXRhJyxcclxuXHRcdFx0XHRcdFx0Y29tbWFuZFR5cGU6ICdVU0InLFxyXG5cdFx0XHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHRcdFx0c3RhdGU6IDAsXHJcblx0XHRcdFx0XHRcdFx0bWVzc2FnZTogSlNPTi5zdHJpbmdpZnkodGhpcy5oZXhDaGFyQ29kZVRvU3RyKGhleCkpXHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRoaXMud2ViVmlld1RvSDUoZGF0YSlcclxuXHRcdFx0XHR9IGVsc2UgaWYgKHJlcy50eXBlID09IFwib25SdW5FcnJvclwiKSB7XHJcblx0XHRcdFx0XHQvL+eCueWHu+WFs+mXrVVTQiBcclxuXHRcdFx0XHRcdHZhciBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRjb21tYW5kOiAnY29tU3RhdHVzQ2hhbmdlZCcsXHJcblx0XHRcdFx0XHRcdGRhdGE6IHtcclxuXHRcdFx0XHRcdFx0XHRzdGF0ZTogMCxcclxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlOiAnVVNCUnVuRXJyb3InXHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRoaXMud2ViVmlld1RvSDUoZGF0YSlcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0XHQvL1VzYlNlcmlhbC5zZXRSZWNlaXZlVGltZe+8iHR5cGUsdGltZe+8iSDlj4LmlbDvvJpcclxuXHRcdFx0Ly8gdHlwZSDvvIgwIDEgMu+8iTDnm7TmjqXov5Tlm57vvIzlrZfoioLlpKrplb/kvJrooqvliIbljIXvvJsgMeWbuuWumumXtOmalHRpbWXov5Tlm57mi7zmjqXnmoTmlbDmja7vvJsgMuaLvOaOpeaVsOaNru+8jOayoeaOpeaUtuWIsOaVsOaNrumXtOmalHRpbWXlkI7ov5Tlm55cclxuXHRcdFx0Ly8gdGltZSDvvIjmr6vnp5LvvIlcclxuXHRcdFx0VXNiU2VyaWFsLnNldFJlY2VpdmVUaW1lKDIsIDUwMClcclxuXHRcdFx0Ly/ojrflj5Z1c2LliJfooahcclxuXHRcdFx0VXNiU2VyaWFsLmdldFVzYkRldmljZXMoKHVzYkRldmljZXMpID0+IHtcclxuXHRcdFx0XHRjb25zb2xlLmxvZygn6I635Y+WdXNi5YiX6KGoLXVzYkRldmljZXMnLCB1c2JEZXZpY2VzKVxyXG5cdFx0XHRcdC8v6YCJ5oupdXNi5YiX6KGoXHJcblx0XHRcdFx0aWYgKHVzYkRldmljZXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0dGhpcy51c2JEZXZpY2VzQ29tUG9ydHNMaXN0ID0gdXNiRGV2aWNlcy5tYXAoaXRlbSA9PiBpdGVtLmRldmljZS52ZW5kb3JJZClcclxuXHRcdFx0XHRcdGlmIChmbGFnID09PSAnTm9PcGVuJykge1xyXG5cdFx0XHRcdFx0XHRjYWxsYmFjaygpIFxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ3RoaXMuY2dDb25maWdJbmZvLmRhdGEucG9ydE5hbWUnLHRoaXMuY2dDb25maWdJbmZvLmRhdGEucG9ydE5hbWUpO1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygndXNiRGV2aWNlc1swXS5kZXZpY2UudmVuZG9ySWQnLHVzYkRldmljZXNbMF0uZGV2aWNlLnZlbmRvcklkKTtcclxuXHRcdFx0XHRcdFx0bGV0IHVzYkRldmljZSA9IHVzYkRldmljZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5kZXZpY2UudmVuZG9ySWQgPT0gdGhpcy5jZ0NvbmZpZ0luZm8uZGF0YS5wb3J0TmFtZSlcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coJ3VzYkRldmljZScsdXNiRGV2aWNlKTtcclxuXHRcdFx0XHRcdFx0aWYgKHVzYkRldmljZS5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy52ZW5kb3JJZCA9IHVzYkRldmljZVswXS5kZXZpY2UudmVuZG9ySWRcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnBvcnQgPSB1c2JEZXZpY2VbMF0ucG9ydHNbMF1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLm9wZW5VU0IoKVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHRoaXMudXNiRGV2aWNlc0NvbVBvcnRzTGlzdCA9IFtdXHJcblx0XHRcdFx0XHRmbGFnID09PSAnTm9PcGVuJyA/IGNhbGxiYWNrKCkgOiAnJ1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9LFxyXG5cdFx0Ly8g5omT5byAVVNCXHJcblx0XHRvcGVuVVNCKCkge1xyXG5cdFx0XHRsZXQgdnVlRGV0YWlsRGF0YSA9IHRoaXMuY2dDb25maWdJbmZvLmRhdGFcclxuXHRcdFx0Y29uc29sZS5sb2coJ+aJk+W8gFVTQicsIHRoaXMudmVuZG9ySWQpXHJcblx0XHRcdC8v5qOA5p+l5o6I5p2DVXNi5p2D6ZmQXHJcblx0XHRcdFVzYlNlcmlhbC5ncmFudFVzYlBlcm1pc3Npb24odGhpcy52ZW5kb3JJZCwgKHJlcykgPT4ge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKCfmo4Dmn6XmjojmnYNVc2LmnYPpmZAnLCByZXMpXHJcblx0XHRcdFx0aWYgKHJlcyA9PSB0cnVlKSB7XHJcblx0XHRcdFx0XHQvL+aJk+W8gHVzYui/nuaOpVxyXG5cdFx0XHRcdFx0VXNiU2VyaWFsLm9wZW4odGhpcy52ZW5kb3JJZCwgdGhpcy5wb3J0LCAocmV0KSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKCfmiZPlvIB1c2Lov57mjqUnLCByZXQpXHJcblx0XHRcdFx0XHRcdGlmIChyZXQgPT0gdHJ1ZSkge1xyXG5cdFx0XHRcdFx0XHRcdC8v6K6+572u5Y+C5pWwXHJcblx0XHRcdFx0XHRcdFx0VXNiU2VyaWFsLnNldFBhcmFtZXRlcnModnVlRGV0YWlsRGF0YS5iYXVkUmF0ZSwgdnVlRGV0YWlsRGF0YS5kYXRhQml0cywgdnVlRGV0YWlsRGF0YS5zdG9wQml0cywgdnVlRGV0YWlsRGF0YS5wYXJpdHkpXHJcblx0XHRcdFx0XHRcdFx0dmFyIGRhdGEgPSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjb21tYW5kOiAnY29tU3RhdHVzQ2hhbmdlZCcsXHJcblx0XHRcdFx0XHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHN0YXRlOiAwLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlOiAnVVNC5bey5omT5byAJ1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLndlYlZpZXdUb0g1KGRhdGEpXHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR2YXIgZGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0Y29tbWFuZDogJ2NvbVN0YXR1c0NoYW5nZWQnLFxyXG5cdFx0XHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHRcdFx0c3RhdGU6IDAsXHJcblx0XHRcdFx0XHRcdFx0bWVzc2FnZTogJ1VTQuacquaOiOadgydcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dGhpcy53ZWJWaWV3VG9INShkYXRhKVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9LFxyXG5cdFx0Ly/lhbPpl611c2JcclxuXHRcdGNsb3NlVVNCKCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZygn5YWz6ZetdXNiJylcclxuXHRcdFx0VXNiU2VyaWFsLmNsb3NlKClcclxuXHRcdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLnNldEludGVyVGltZVVTQilcclxuXHRcdFx0dmFyIGRhdGEgPSB7XHJcblx0XHRcdFx0Y29tbWFuZDogJ2NvbVN0YXR1c0NoYW5nZWQnLFxyXG5cdFx0XHRcdGRhdGE6IHtcclxuXHRcdFx0XHRcdHN0YXRlOiAwLFxyXG5cdFx0XHRcdFx0bWVzc2FnZTogJ1VTQuW3suWFs+mXrSdcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy53ZWJWaWV3VG9INShkYXRhKVxyXG5cdFx0XHQvLyB1bmkuc2hvd1RvYXN0KHtcclxuXHRcdFx0Ly8gXHR0aXRsZTogXCJ1c2Llt7Lmlq3lvIBcIlxyXG5cdFx0XHQvLyB9KVxyXG5cdFx0fSxcclxuXHRcdC8vIOWwhjE26L+b5Yi255qE5YaF5a656L2s5oiQ5oiR5Lus55yL5b6X5oeC55qE5a2X56ym5Liy5YaF5a65XHJcblx0XHRoZXhDaGFyQ29kZVRvU3RyKGhleENoYXJDb2RlU3RyKSB7XHJcblx0XHRcdHZhciB0cmltZWRTdHIgPSBoZXhDaGFyQ29kZVN0ci50cmltKClcclxuXHRcdFx0dmFyIHJhd1N0ciA9IHRyaW1lZFN0ci5zdWJzdHIoMCwgMikudG9Mb3dlckNhc2UoKSA9PT0gXCIweFwiID8gdHJpbWVkU3RyLnN1YnN0cigyKSA6IHRyaW1lZFN0clxyXG5cdFx0XHR2YXIgbGVuID0gcmF3U3RyLmxlbmd0aDtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2cobGVuKVxyXG5cdFx0XHRpZiAobGVuICUgMiAhPT0gMCkge1xyXG5cdFx0XHRcdGFsZXJ0KFwi5a2Y5Zyo6Z2e5rOV5a2X56ymIVwiKVxyXG5cdFx0XHRcdHJldHVybiBcIlwiXHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIGN1ckNoYXJDb2RlXHJcblx0XHRcdHZhciByZXN1bHRTdHIgPSBbXVxyXG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSA9IGkgKyAyKSB7XHJcblx0XHRcdFx0Y3VyQ2hhckNvZGUgPSBwYXJzZUludChyYXdTdHIuc3Vic3RyKGksIDIpLCAxNilcclxuXHRcdFx0XHRyZXN1bHRTdHIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGN1ckNoYXJDb2RlKSlcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0U3RyLmpvaW4oXCJcIilcclxuXHRcdH0sXHJcblx0XHQvLyB1bmlhcHAg5Lyg5Y+C57uZIHZ1Zemhtemdoi0tLeWImOeBv+a1i+ivlVxyXG5cdFx0d2ViVmlld1RvSDUocmVzKSB7XHJcblx0XHRcdGxldCBjdXJyZW50V2VidmlldyA9IHRoaXMuJHNjb3BlLiRnZXRBcHBXZWJ2aWV3KCk7XHJcblx0XHRcdGxldCB3diA9IGN1cnJlbnRXZWJ2aWV3LmNoaWxkcmVuKClbMF07XHJcblx0XHRcdGNvbnNvbGUubG9nKCd1bmlhcHAg5Lyg5Y+C57uZIHZ1ZemhtemdoicpO1xyXG5cdFx0XHR3di5ldmFsSlMoYGdldFZ1ZU1lc3NhZ2UoJHtKU09OLnN0cmluZ2lmeShyZXMpfSlgKTtcclxuXHRcdH0sXHJcblx0fVxyXG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///13\n"); +eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar UsbSerial = uni.requireNativePlugin('Zhimi-UsbSerial');\nvar _default = {\n data: function data() {\n return {\n setInterTimeUSB: null,\n vendorId: '',\n port: '',\n usbDevicesComPortsList: [] // 串口名称数组\n };\n },\n destroyed: function destroyed() {\n __f__(\"log\", '销毁页面', \" at mixins/linkUSB.js:12\");\n clearInterval(this.setInterTimeUSB);\n },\n methods: {\n // 检测USB是否连接状态\n usbStatus: function usbStatus() {\n var _this = this;\n clearInterval(this.setInterTimeUSB);\n this.setInterTimeUSB = setInterval(function () {\n _this.connectUSB('open');\n }, 5000);\n },\n // 设置USB数据回调\n connectUSB: function connectUSB(flag, callback) {\n var _this2 = this;\n __f__(\"log\", 'UsbSerial', UsbSerial, \" at mixins/linkUSB.js:25\");\n //设置数据回调\n UsbSerial.setDataCallback(function (res) {\n __f__(\"log\", '设置USB数据回调-res', res, \" at mixins/linkUSB.js:28\");\n if (res.type == \"onUsbDeviceAttached\") {\n //usb插上\n __f__(\"log\", 'USB已插入', \" at mixins/linkUSB.js:30\");\n var data = {\n command: 'comStatusChanged',\n data: {\n state: 0,\n message: 'USB已插入'\n }\n };\n _this2.webViewToH5USB(data);\n } else if (res.type == \"onUsbDeviceDetached\") {\n //usb断开\n __f__(\"log\", 'USB已拔出', \" at mixins/linkUSB.js:40\");\n var data = {\n command: 'comStatusChanged',\n data: {\n state: 0,\n message: 'USB已拔出'\n }\n };\n _this2.webViewToH5USB(data);\n } else if (res.type === 'startUpdateValue') {\n __f__(\"log\", '正在接受数据中,请稍等...', \" at mixins/linkUSB.js:50\");\n } else if (res.type == \"onNewData\") {\n //数据回调\n var data = res.data.data; //字节数组\n var str = res.data.string; //字符串\n var hex = res.data.hex; //十六进制\n // console.log('字节数组',data)\n // console.log('字符串',str)\n __f__(\"log\", 'hex', hex, \" at mixins/linkUSB.js:57\");\n // 68656c6c6f20776f726c64---hello world\n __f__(\"log\", 'this.hexCharCodeToStr(hex)', JSON.stringify(_this2.hexCharCodeToStr(hex)), \" at mixins/linkUSB.js:59\");\n var data = {\n command: 'examineData',\n commandType: 'USB',\n data: {\n state: 0,\n message: JSON.stringify(_this2.hexCharCodeToStr(hex))\n }\n };\n _this2.webViewToH5USB(data);\n } else if (res.type == \"onRunError\") {\n //点击关闭USB \n var data = {\n command: 'comStatusChanged',\n data: {\n state: 0,\n message: 'USBRunError'\n }\n };\n _this2.webViewToH5USB(data);\n }\n });\n //UsbSerial.setReceiveTime(type,time) 参数:\n // type (0 1 2)0直接返回,字节太长会被分包; 1固定间隔time返回拼接的数据; 2拼接数据,没接收到数据间隔time后返回\n // time (毫秒)\n UsbSerial.setReceiveTime(2, 500);\n //获取usb列表\n UsbSerial.getUsbDevices(function (usbDevices) {\n __f__(\"log\", '获取usb列表-usbDevices', usbDevices, \" at mixins/linkUSB.js:88\");\n //选择usb列表\n if (usbDevices.length > 0) {\n _this2.usbDevicesComPortsList = usbDevices.map(function (item) {\n return item.device.vendorId;\n });\n if (flag === 'NoOpen') {\n callback();\n } else {\n // console.log('this.cgConfigInfo.data.portName',this.cgConfigInfo.data.portName);\n // console.log('usbDevices[0].device.vendorId',usbDevices[0].device.vendorId);\n var usbDevice = usbDevices.filter(function (item) {\n return item.device.vendorId == _this2.cgConfigInfo.data.portName;\n });\n __f__(\"log\", 'usbDevice', usbDevice, \" at mixins/linkUSB.js:98\");\n if (usbDevice.length > 0) {\n _this2.vendorId = usbDevice[0].device.vendorId;\n _this2.port = usbDevice[0].ports[0];\n _this2.openUSB();\n }\n }\n } else {\n _this2.usbDevicesComPortsList = [];\n flag === 'NoOpen' ? callback() : '';\n }\n });\n },\n // 打开USB\n openUSB: function openUSB() {\n var _this3 = this;\n var vueDetailData = this.cgConfigInfo.data;\n __f__(\"log\", '打开USB', this.vendorId, \" at mixins/linkUSB.js:114\");\n //检查授权Usb权限\n UsbSerial.grantUsbPermission(this.vendorId, function (res) {\n __f__(\"log\", '检查授权Usb权限', res, \" at mixins/linkUSB.js:117\");\n if (res == true) {\n //打开usb连接\n UsbSerial.open(_this3.vendorId, _this3.port, function (ret) {\n __f__(\"log\", '打开usb连接', ret, \" at mixins/linkUSB.js:121\");\n if (ret == true) {\n //设置参数\n UsbSerial.setParameters(vueDetailData.baudRate, vueDetailData.dataBits, vueDetailData.stopBits, vueDetailData.parity);\n var data = {\n command: 'comStatusChanged',\n data: {\n state: 0,\n message: 'USB已打开'\n }\n };\n _this3.webViewToH5USB(data);\n }\n });\n } else {\n var data = {\n command: 'comStatusChanged',\n data: {\n state: 0,\n message: 'USB未授权'\n }\n };\n _this3.webViewToH5USB(data);\n }\n });\n },\n //关闭usb\n closeUSB: function closeUSB() {\n __f__(\"log\", '关闭usb', \" at mixins/linkUSB.js:149\");\n UsbSerial.close();\n clearInterval(this.setInterTimeUSB);\n var data = {\n command: 'comStatusChanged',\n data: {\n state: 0,\n message: 'USB已关闭'\n }\n };\n this.webViewToH5USB(data);\n // uni.showToast({\n // \ttitle: \"usb已断开\"\n // })\n },\n // 将16进制的内容转成我们看得懂的字符串内容\n hexCharCodeToStr: function hexCharCodeToStr(hexCharCodeStr) {\n var trimedStr = hexCharCodeStr.trim();\n var rawStr = trimedStr.substr(0, 2).toLowerCase() === \"0x\" ? trimedStr.substr(2) : trimedStr;\n var len = rawStr.length;\n // console.log(len)\n if (len % 2 !== 0) {\n alert(\"存在非法字符!\");\n return \"\";\n }\n var curCharCode;\n var resultStr = [];\n for (var i = 0; i < len; i = i + 2) {\n curCharCode = parseInt(rawStr.substr(i, 2), 16);\n resultStr.push(String.fromCharCode(curCharCode));\n }\n return resultStr.join(\"\");\n },\n // uniapp 传参给 vue页面---刘灿测试\n webViewToH5USB: function webViewToH5USB(res) {\n var currentWebview = this.$scope.$getAppWebview();\n var wv = currentWebview.children()[0];\n __f__(\"log\", 'USB uniapp 传参给 vue页面', \" at mixins/linkUSB.js:186\");\n wv.evalJS(\"getVueMessage(\".concat(JSON.stringify(res), \")\"));\n }\n }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 12)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vbWl4aW5zL2xpbmtVU0IuanMiXSwibmFtZXMiOlsiVXNiU2VyaWFsIiwidW5pIiwicmVxdWlyZU5hdGl2ZVBsdWdpbiIsImRhdGEiLCJzZXRJbnRlclRpbWVVU0IiLCJ2ZW5kb3JJZCIsInBvcnQiLCJ1c2JEZXZpY2VzQ29tUG9ydHNMaXN0IiwiZGVzdHJveWVkIiwiY2xlYXJJbnRlcnZhbCIsIm1ldGhvZHMiLCJ1c2JTdGF0dXMiLCJzZXRJbnRlcnZhbCIsImNvbm5lY3RVU0IiLCJmbGFnIiwiY2FsbGJhY2siLCJzZXREYXRhQ2FsbGJhY2siLCJyZXMiLCJ0eXBlIiwiY29tbWFuZCIsInN0YXRlIiwibWVzc2FnZSIsIndlYlZpZXdUb0g1VVNCIiwic3RyIiwic3RyaW5nIiwiaGV4IiwiSlNPTiIsInN0cmluZ2lmeSIsImhleENoYXJDb2RlVG9TdHIiLCJjb21tYW5kVHlwZSIsInNldFJlY2VpdmVUaW1lIiwiZ2V0VXNiRGV2aWNlcyIsInVzYkRldmljZXMiLCJsZW5ndGgiLCJtYXAiLCJpdGVtIiwiZGV2aWNlIiwidXNiRGV2aWNlIiwiZmlsdGVyIiwiY2dDb25maWdJbmZvIiwicG9ydE5hbWUiLCJwb3J0cyIsIm9wZW5VU0IiLCJ2dWVEZXRhaWxEYXRhIiwiZ3JhbnRVc2JQZXJtaXNzaW9uIiwib3BlbiIsInJldCIsInNldFBhcmFtZXRlcnMiLCJiYXVkUmF0ZSIsImRhdGFCaXRzIiwic3RvcEJpdHMiLCJwYXJpdHkiLCJjbG9zZVVTQiIsImNsb3NlIiwiaGV4Q2hhckNvZGVTdHIiLCJ0cmltZWRTdHIiLCJ0cmltIiwicmF3U3RyIiwic3Vic3RyIiwidG9Mb3dlckNhc2UiLCJsZW4iLCJhbGVydCIsImN1ckNoYXJDb2RlIiwicmVzdWx0U3RyIiwiaSIsInBhcnNlSW50IiwicHVzaCIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsImpvaW4iLCJjdXJyZW50V2VidmlldyIsIiRzY29wZSIsIiRnZXRBcHBXZWJ2aWV3Iiwid3YiLCJjaGls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QyxXQUFXO01BQ2YsSUFBSUMsU0FBUyxHQUFHLEVBQUU7TUFDbEIsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdKLEdBQUcsRUFBRUksQ0FBQyxHQUFHQSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ25DRixXQUFXLEdBQUdHLFFBQVEsQ0FBQ1IsTUFBTSxDQUFDQyxNQUFNLENBQUNNLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDL0NELFNBQVMsQ0FBQ0csSUFBSSxDQUFDQyxNQUFNLENBQUNDLFlBQVksQ0FBQ04sV0FBVyxDQUFDLENBQUM7TUFDakQ7TUFDQSxPQUFPQyxTQUFTLENBQUNNLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUNEO0lBQ0EvQyxjQUFjLDBCQUFDTCxHQUFHLEVBQUU7TUFDbkIsSUFBSXFELGNBQWMsR0FBRyxJQUFJLENBQUNDLE1BQU0sQ0FBQ0MsY0FBYyxFQUFFO01BQ2pELElBQUlDLEVBQUUsR0FBR0gsY0FBYyxDQUFDSSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDckMsYUFBWSxzQkFBc0I7TUFDbENELEVBQUUsQ0FBQ0UsTUFBTSx5QkFBa0JqRCxJQUFJLENBQUNDLFNBQVMsQ0FBQ1YsR0FBRyxDQUFDLE9BQUk7SUFDbkQ7RUFDRDtBQUNELENBQUM7QUFBQSwyQiIsImZpbGUiOiIxMy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBVc2JTZXJpYWwgPSB1bmkucmVxdWlyZU5hdGl2ZVBsdWdpbignWmhpbWktVXNiU2VyaWFsJyk7XHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuXHRkYXRhKCkge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0c2V0SW50ZXJUaW1lVVNCOiBudWxsLFxyXG5cdFx0XHR2ZW5kb3JJZDogJycsXHJcblx0XHRcdHBvcnQ6ICcnLFxyXG5cdFx0XHR1c2JEZXZpY2VzQ29tUG9ydHNMaXN0OiBbXSAvLyDkuLLlj6PlkI3np7DmlbDnu4RcclxuXHRcdH1cclxuXHR9LFxyXG5cdGRlc3Ryb3llZCgpIHtcclxuXHRcdGNvbnNvbGUubG9nKCfplIDmr4HpobXpnaInKTtcclxuXHRcdGNsZWFySW50ZXJ2YWwodGhpcy5zZXRJbnRlclRpbWVVU0IpXHJcblx0fSxcclxuXHRtZXRob2RzOiB7XHJcblx0XHQvLyDmo4DmtYtVU0LmmK/lkKbov57mjqXnirbmgIFcclxuXHRcdHVzYlN0YXR1cygpIHtcclxuXHRcdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLnNldEludGVyVGltZVVTQilcclxuXHRcdFx0dGhpcy5zZXRJbnRlclRpbWVVU0IgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5jb25uZWN0VVNCKCdvcGVuJylcclxuXHRcdFx0fSwgNTAwMClcclxuXHRcdH0sXHJcblx0XHQvLyDorr7nva5VU0LmlbDmja7lm57osINcclxuXHRcdGNvbm5lY3RVU0IoZmxhZywgY2FsbGJhY2spIHtcclxuXHRcdFx0Y29uc29sZS5sb2coJ1VzYlNlcmlhbCcsIFVzYlNlcmlhbClcclxuXHRcdFx0Ly/orr7nva7mlbDmja7lm57osINcclxuXHRcdFx0VXNiU2VyaWFsLnNldERhdGFDYWxsYmFjaygocmVzKSA9PiB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coJ+iuvue9rlVTQuaVsOaNruWbnuiwgy1yZXMnLCByZXMpXHJcblx0XHRcdFx0aWYgKHJlcy50eXBlID09IFwib25Vc2JEZXZpY2VBdHRhY2hlZFwiKSB7IC8vdXNi5o+S5LiKXHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZygnVVNC5bey5o+S5YWlJyk7XHJcblx0XHRcdFx0XHR2YXIgZGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0Y29tbWFuZDogJ2NvbVN0YXR1c0NoYW5nZWQnLFxyXG5cdFx0XHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHRcdFx0c3RhdGU6IDAsXHJcblx0XHRcdFx0XHRcdFx0bWVzc2FnZTogJ1VTQuW3suaPkuWFpSdcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dGhpcy53ZWJWaWV3VG9INVVTQihkYXRhKVxyXG5cdFx0XHRcdH0gZWxzZSBpZiAocmVzLnR5cGUgPT0gXCJvblVzYkRldmljZURldGFjaGVkXCIpIHsgLy91c2Lmlq3lvIBcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKCdVU0Llt7Lmi5Tlh7onKTtcclxuXHRcdFx0XHRcdHZhciBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRjb21tYW5kOiAnY29tU3RhdHVzQ2hhbmdlZCcsXHJcblx0XHRcdFx0XHRcdGRhdGE6IHtcclxuXHRcdFx0XHRcdFx0XHRzdGF0ZTogMCxcclxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlOiAnVVNC5bey5ouU5Ye6J1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLndlYlZpZXdUb0g1VVNCKGRhdGEpXHJcblx0XHRcdFx0fSBlbHNlIGlmIChyZXMudHlwZSA9PT0gJ3N0YXJ0VXBkYXRlVmFsdWUnKSB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZygn5q2j5Zyo5o6l5Y+X5pWw5o2u5LitLOivt+eojeetiS4uLicpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAocmVzLnR5cGUgPT0gXCJvbk5ld0RhdGFcIikgeyAvL+aVsOaNruWbnuiwg1xyXG5cdFx0XHRcdFx0dmFyIGRhdGEgPSByZXMuZGF0YS5kYXRhOyAvL+Wtl+iKguaVsOe7hFxyXG5cdFx0XHRcdFx0dmFyIHN0ciA9IHJlcy5kYXRhLnN0cmluZzsgLy/lrZfnrKbkuLJcclxuXHRcdFx0XHRcdHZhciBoZXggPSByZXMuZGF0YS5oZXg7IC8v5Y2B5YWt6L+b5Yi2XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygn5a2X6IqC5pWw57uEJyxkYXRhKVxyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ+Wtl+espuS4sicsc3RyKVxyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ2hleCcsIGhleClcclxuXHRcdFx0XHRcdC8vIDY4NjU2YzZjNmYyMDc3NmY3MjZjNjQtLS1oZWxsbyB3b3JsZFxyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ3RoaXMuaGV4Q2hhckNvZGVUb1N0cihoZXgpJywgSlNPTi5zdHJpbmdpZnkodGhpcy5oZXhDaGFyQ29kZVRvU3RyKGhleCkpKTtcclxuXHJcblx0XHRcdFx0XHR2YXIgZGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0Y29tbWFuZDogJ2V4YW1pbmVEYXRhJyxcclxuXHRcdFx0XHRcdFx0Y29tbWFuZFR5cGU6ICdVU0InLFxyXG5cdFx0XHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHRcdFx0c3RhdGU6IDAsXHJcblx0XHRcdFx0XHRcdFx0bWVzc2FnZTogSlNPTi5zdHJpbmdpZnkodGhpcy5oZXhDaGFyQ29kZVRvU3RyKGhleCkpXHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRoaXMud2ViVmlld1RvSDVVU0IoZGF0YSlcclxuXHRcdFx0XHR9IGVsc2UgaWYgKHJlcy50eXBlID09IFwib25SdW5FcnJvclwiKSB7XHJcblx0XHRcdFx0XHQvL+eCueWHu+WFs+mXrVVTQiBcclxuXHRcdFx0XHRcdHZhciBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRjb21tYW5kOiAnY29tU3RhdHVzQ2hhbmdlZCcsXHJcblx0XHRcdFx0XHRcdGRhdGE6IHtcclxuXHRcdFx0XHRcdFx0XHRzdGF0ZTogMCxcclxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlOiAnVVNCUnVuRXJyb3InXHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRoaXMud2ViVmlld1RvSDVVU0IoZGF0YSlcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0XHQvL1VzYlNlcmlhbC5zZXRSZWNlaXZlVGltZe+8iHR5cGUsdGltZe+8iSDlj4LmlbDvvJpcclxuXHRcdFx0Ly8gdHlwZSDvvIgwIDEgMu+8iTDnm7TmjqXov5Tlm57vvIzlrZfoioLlpKrplb/kvJrooqvliIbljIXvvJsgMeWbuuWumumXtOmalHRpbWXov5Tlm57mi7zmjqXnmoTmlbDmja7vvJsgMuaLvOaOpeaVsOaNru+8jOayoeaOpeaUtuWIsOaVsOaNrumXtOmalHRpbWXlkI7ov5Tlm55cclxuXHRcdFx0Ly8gdGltZSDvvIjmr6vnp5LvvIlcclxuXHRcdFx0VXNiU2VyaWFsLnNldFJlY2VpdmVUaW1lKDIsIDUwMClcclxuXHRcdFx0Ly/ojrflj5Z1c2LliJfooahcclxuXHRcdFx0VXNiU2VyaWFsLmdldFVzYkRldmljZXMoKHVzYkRldmljZXMpID0+IHtcclxuXHRcdFx0XHRjb25zb2xlLmxvZygn6I635Y+WdXNi5YiX6KGoLXVzYkRldmljZXMnLCB1c2JEZXZpY2VzKVxyXG5cdFx0XHRcdC8v6YCJ5oupdXNi5YiX6KGoXHJcblx0XHRcdFx0aWYgKHVzYkRldmljZXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0dGhpcy51c2JEZXZpY2VzQ29tUG9ydHNMaXN0ID0gdXNiRGV2aWNlcy5tYXAoaXRlbSA9PiBpdGVtLmRldmljZS52ZW5kb3JJZClcclxuXHRcdFx0XHRcdGlmIChmbGFnID09PSAnTm9PcGVuJykge1xyXG5cdFx0XHRcdFx0XHRjYWxsYmFjaygpIFxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ3RoaXMuY2dDb25maWdJbmZvLmRhdGEucG9ydE5hbWUnLHRoaXMuY2dDb25maWdJbmZvLmRhdGEucG9ydE5hbWUpO1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygndXNiRGV2aWNlc1swXS5kZXZpY2UudmVuZG9ySWQnLHVzYkRldmljZXNbMF0uZGV2aWNlLnZlbmRvcklkKTtcclxuXHRcdFx0XHRcdFx0bGV0IHVzYkRldmljZSA9IHVzYkRldmljZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5kZXZpY2UudmVuZG9ySWQgPT0gdGhpcy5jZ0NvbmZpZ0luZm8uZGF0YS5wb3J0TmFtZSlcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coJ3VzYkRldmljZScsdXNiRGV2aWNlKTtcclxuXHRcdFx0XHRcdFx0aWYgKHVzYkRldmljZS5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy52ZW5kb3JJZCA9IHVzYkRldmljZVswXS5kZXZpY2UudmVuZG9ySWRcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnBvcnQgPSB1c2JEZXZpY2VbMF0ucG9ydHNbMF1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLm9wZW5VU0IoKVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHRoaXMudXNiRGV2aWNlc0NvbVBvcnRzTGlzdCA9IFtdXHJcblx0XHRcdFx0XHRmbGFnID09PSAnTm9PcGVuJyA/IGNhbGxiYWNrKCkgOiAnJ1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9LFxyXG5cdFx0Ly8g5omT5byAVVNCXHJcblx0XHRvcGVuVVNCKCkge1xyXG5cdFx0XHRsZXQgdnVlRGV0YWlsRGF0YSA9IHRoaXMuY2dDb25maWdJbmZvLmRhdGFcclxuXHRcdFx0Y29uc29sZS5sb2coJ+aJk+W8gFVTQicsIHRoaXMudmVuZG9ySWQpXHJcblx0XHRcdC8v5qOA5p+l5o6I5p2DVXNi5p2D6ZmQXHJcblx0XHRcdFVzYlNlcmlhbC5ncmFudFVzYlBlcm1pc3Npb24odGhpcy52ZW5kb3JJZCwgKHJlcykgPT4ge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKCfmo4Dmn6XmjojmnYNVc2LmnYPpmZAnLCByZXMpXHJcblx0XHRcdFx0aWYgKHJlcyA9PSB0cnVlKSB7XHJcblx0XHRcdFx0XHQvL+aJk+W8gHVzYui/nuaOpVxyXG5cdFx0XHRcdFx0VXNiU2VyaWFsLm9wZW4odGhpcy52ZW5kb3JJZCwgdGhpcy5wb3J0LCAocmV0KSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKCfmiZPlvIB1c2Lov57mjqUnLCByZXQpXHJcblx0XHRcdFx0XHRcdGlmIChyZXQgPT0gdHJ1ZSkge1xyXG5cdFx0XHRcdFx0XHRcdC8v6K6+572u5Y+C5pWwXHJcblx0XHRcdFx0XHRcdFx0VXNiU2VyaWFsLnNldFBhcmFtZXRlcnModnVlRGV0YWlsRGF0YS5iYXVkUmF0ZSwgdnVlRGV0YWlsRGF0YS5kYXRhQml0cywgdnVlRGV0YWlsRGF0YS5zdG9wQml0cywgdnVlRGV0YWlsRGF0YS5wYXJpdHkpXHJcblx0XHRcdFx0XHRcdFx0dmFyIGRhdGEgPSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjb21tYW5kOiAnY29tU3RhdHVzQ2hhbmdlZCcsXHJcblx0XHRcdFx0XHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHN0YXRlOiAwLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlOiAnVVNC5bey5omT5byAJ1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLndlYlZpZXdUb0g1VVNCKGRhdGEpXHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR2YXIgZGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0Y29tbWFuZDogJ2NvbVN0YXR1c0NoYW5nZWQnLFxyXG5cdFx0XHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHRcdFx0c3RhdGU6IDAsXHJcblx0XHRcdFx0XHRcdFx0bWVzc2FnZTogJ1VTQuacquaOiOadgydcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dGhpcy53ZWJWaWV3VG9INVVTQihkYXRhKVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9LFxyXG5cdFx0Ly/lhbPpl611c2JcclxuXHRcdGNsb3NlVVNCKCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZygn5YWz6ZetdXNiJylcclxuXHRcdFx0VXNiU2VyaWFsLmNsb3NlKClcclxuXHRcdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLnNldEludGVyVGltZVVTQilcclxuXHRcdFx0dmFyIGRhdGEgPSB7XHJcblx0XHRcdFx0Y29tbWFuZDogJ2NvbVN0YXR1c0NoYW5nZWQnLFxyXG5cdFx0XHRcdGRhdGE6IHtcclxuXHRcdFx0XHRcdHN0YXRlOiAwLFxyXG5cdFx0XHRcdFx0bWVzc2FnZTogJ1VTQuW3suWFs+mXrSdcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy53ZWJWaWV3VG9INVVTQihkYXRhKVxyXG5cdFx0XHQvLyB1bmkuc2hvd1RvYXN0KHtcclxuXHRcdFx0Ly8gXHR0aXRsZTogXCJ1c2Llt7Lmlq3lvIBcIlxyXG5cdFx0XHQvLyB9KVxyXG5cdFx0fSxcclxuXHRcdC8vIOWwhjE26L+b5Yi255qE5YaF5a656L2s5oiQ5oiR5Lus55yL5b6X5oeC55qE5a2X56ym5Liy5YaF5a65XHJcblx0XHRoZXhDaGFyQ29kZVRvU3RyKGhleENoYXJDb2RlU3RyKSB7XHJcblx0XHRcdHZhciB0cmltZWRTdHIgPSBoZXhDaGFyQ29kZVN0ci50cmltKClcclxuXHRcdFx0dmFyIHJhd1N0ciA9IHRyaW1lZFN0ci5zdWJzdHIoMCwgMikudG9Mb3dlckNhc2UoKSA9PT0gXCIweFwiID8gdHJpbWVkU3RyLnN1YnN0cigyKSA6IHRyaW1lZFN0clxyXG5cdFx0XHR2YXIgbGVuID0gcmF3U3RyLmxlbmd0aDtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2cobGVuKVxyXG5cdFx0XHRpZiAobGVuICUgMiAhPT0gMCkge1xyXG5cdFx0XHRcdGFsZXJ0KFwi5a2Y5Zyo6Z2e5rOV5a2X56ymIVwiKVxyXG5cdFx0XHRcdHJldHVybiBcIlwiXHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIGN1ckNoYXJDb2RlXHJcblx0XHRcdHZhciByZXN1bHRTdHIgPSBbXVxyXG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSA9IGkgKyAyKSB7XHJcblx0XHRcdFx0Y3VyQ2hhckNvZGUgPSBwYXJzZUludChyYXdTdHIuc3Vic3RyKGksIDIpLCAxNilcclxuXHRcdFx0XHRyZXN1bHRTdHIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGN1ckNoYXJDb2RlKSlcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0U3RyLmpvaW4oXCJcIilcclxuXHRcdH0sXHJcblx0XHQvLyB1bmlhcHAg5Lyg5Y+C57uZIHZ1Zemhtemdoi0tLeWImOeBv+a1i+ivlVxyXG5cdFx0d2ViVmlld1RvSDVVU0IocmVzKSB7XHJcblx0XHRcdGxldCBjdXJyZW50V2VidmlldyA9IHRoaXMuJHNjb3BlLiRnZXRBcHBXZWJ2aWV3KCk7XHJcblx0XHRcdGxldCB3diA9IGN1cnJlbnRXZWJ2aWV3LmNoaWxkcmVuKClbMF07XHJcblx0XHRcdGNvbnNvbGUubG9nKCdVU0IgdW5pYXBwIOS8oOWPgue7mSB2dWXpobXpnaInKTtcclxuXHRcdFx0d3YuZXZhbEpTKGBnZXRWdWVNZXNzYWdlKCR7SlNPTi5zdHJpbmdpZnkocmVzKX0pYCk7XHJcblx0XHR9LFxyXG5cdH1cclxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///13\n"); /***/ }), /* 14 */ @@ -354,7 +354,7 @@ eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nObject.defineProperty(exp /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar FTP = uni.requireNativePlugin('Zhimi-FTP-Module');\nvar _default = {\n data: function data() {\n return {\n remoteUrl: '',\n androidFileDocPath: plus.io.convertLocalFileSystemURL('_doc'),\n ftpLogicDeceteName: '/sda1/logicDelete',\n count: 0,\n isConnect: false,\n setInterTimeFTP: null,\n readerFileFlag: false\n };\n },\n onShow: function onShow() {\n // console.log('showshowshow');\n },\n onHide: function onHide() {\n // console.log('hidehidehide');\n },\n onLoad: function onLoad() {},\n destroyed: function destroyed() {\n __f__(\"log\", '销毁页面', \" at mixins/linkFTP.js:22\");\n clearInterval(this.setInterTimeFTP);\n },\n methods: {\n // 流程: \n // ftp连接 ---> 获取ftp目录文件夹名和文件名 ---> 下载文件夹中的文件到安卓机 ---> 临时地址转url传输给H5展示 \n // ---> H5页面关联确认完,在安卓机中找到关联确认后的文件上传到FTP的另外一个文件夹(新建文件夹) ---> 删除安卓机临时文件 ---> 删除FTP之前文件夹中关联确认后的文件\n // 测试是否掉线的方法\n ftpSendNoOp: function ftpSendNoOp() {\n var _this = this;\n clearInterval(this.setInterTimeFTP);\n this.setInterTimeFTP = setInterval(function () {\n FTP.ftpSendNoOp(function (res) {\n if (res.data === true) {\n __f__(\"log\", '测试是否掉线回调-未掉线', res, \" at mixins/linkFTP.js:36\");\n __f__(\"log\", 'readerFileFlag', _this.readerFileFlag, \" at mixins/linkFTP.js:37\");\n !_this.readerFileFlag ? FTP.ftpChangeWorkingDirectory(\"/\", function (red) {\n __f__(\"log\", '下载前调用这个方法', red, \" at mixins/linkFTP.js:39\");\n var data = {\n command: 'ftpStatusChanged',\n data: {\n state: 0,\n message: 'FTP已连接'\n }\n };\n _this.webViewToH5(data);\n red.data ? _this.ftpLoopServerPath() : '';\n }) : '';\n } else {\n __f__(\"log\", '测试是否掉线回调-已掉线', res, \" at mixins/linkFTP.js:51\");\n var data = {\n command: 'ftpStatusChanged',\n data: {\n state: 0,\n message: 'FTP已掉线'\n }\n };\n _this.webViewToH5(data);\n _this.connectFtpServer();\n }\n });\n }, 5000);\n },\n // FTP连接\n connectFtpServer: function connectFtpServer() {\n var _this2 = this;\n //(“服务地址”, 端口, “用户名”,”密码“, 回调 )\n //回调 \n //成功 {type : \"connect\", data : {data : \"相应状态码:200 连接是否成功:true 连接是否有效:true}} \n //失败 {type : \"connect\", data : {\"error\" : \"失败原因\"}}\n // \"192.168.50.1\", 21, \"hmgc\", \"hmgc\"\n // \"192.168.50.131\", 21, \"hmftp\", \"hmftp\"\n var cgConfigInfoData = this.cgConfigInfo.data;\n __f__(\"log\", 'cgConfigInfoData', cgConfigInfoData, \" at mixins/linkFTP.js:74\");\n // '192.168.50.1', 21, 'hmgc', 'hmgc', \"UTF-8\"\n // cgConfigInfoData.ftpHostName, 21, cgConfigInfoData.ftpUserName, cgConfigInfoData.ftpPassWord,\n FTP.connectFtpServer('192.168.50.1', 21, 'hmgc', 'hmgc', \"UTF-8\", function (res) {\n __f__(\"log\", 'FTP连接', res, \" at mixins/linkFTP.js:78\");\n if (res.type === 'connect' && res.data.connect === true) {\n var data = {\n command: 'ftpStatusChanged',\n data: {\n state: 0,\n message: 'FTP已连接'\n }\n };\n _this2.webViewToH5(data);\n\n // 获取FTP服务器目录前调用这个方法---处理闪退现象\n FTP.ftpChangeWorkingDirectory(\"/\", function (red) {\n __f__(\"log\", '下载前调用这个方法', red, \" at mixins/linkFTP.js:91\");\n red.data ? _this2.ftpLoopServerPath() : '';\n });\n } else if (res.type === 'connect' && res.data.connect === false) {\n // this.isConnect = false\n var data = {\n command: 'ftpStatusChanged',\n data: {\n state: 0,\n message: 'FTP连接失败'\n }\n };\n _this2.webViewToH5(data);\n }\n });\n },\n // 获取FTP服务器目录\n ftpLoopServerPath: function ftpLoopServerPath() {\n var _this3 = this;\n var name = this.cgConfigInfo.data.inspectionDir;\n __f__(\"log\", 'name', name, \" at mixins/linkFTP.js:110\");\n\n // 阀值--循环时控制暂时不走获取FTP服务器目录\n this.readerFileFlag = true;\n // 1是文件夹 0是文件\n //(\"获取服务器目录下文件,空白为根目录\", 回调)\n //回调 \n //成功 {type : getFileInfo, data : [{name : \"地址\", size : 文件大小单位字节, time : “修改时间”}]}\n //失败 {type : \"error\", data : \"失败原因\"}\n FTP.ftpLoopServerPath(name, function (res) {\n __f__(\"log\", '获取FTP服务器目录res', res, \" at mixins/linkFTP.js:120\");\n if (res.type === 'getFileInfo' && res.data.length > 0) {\n var newData = res.data.sort(function (a, b) {\n return new Date(b.time) - new Date(a.time);\n });\n __f__(\"log\", 'newData时间排序', newData, \" at mixins/linkFTP.js:123\");\n // 下载前调用这个方法---处理闪退现象\n FTP.ftpChangeWorkingDirectory(\"/\", function (red) {\n __f__(\"log\", '下载前调用这个方法', red, \" at mixins/linkFTP.js:126\");\n red.data ? _this3.ftpDownloadSingleFile(newData[0]) : '';\n });\n } else {\n _this3.readerFileFlag = false;\n }\n });\n },\n // FTP-单个文件下载至安卓机\n ftpDownloadSingleFile: function ftpDownloadSingleFile(data) {\n var _this4 = this;\n //(\"要下载到本地文件夹的绝对路径\", \"要下载的服务器上文件的绝对路径\", 回调)\n //回调\n //{type : download, data : {status : true/false, name : \"下载的文件名\", errpr : \"失败原因\"}}\n // var inputFile = plus.io.convertLocalFileSystemURL('/static')\n __f__(\"log\", 'androidFileDocPath', this.androidFileDocPath, \" at mixins/linkFTP.js:140\");\n // '/sda1/deviceNewFile/20240918/20240918logo.png'\n FTP.ftpDownloadSingleFile(this.androidFileDocPath, data.name, function (res) {\n __f__(\"log\", '单个文件下载至安卓机--成功', res, \" at mixins/linkFTP.js:143\");\n if (res.type === 'download' && res.data.status) {\n _this4.readerFile(data);\n } else {\n _this4.readerFileFlag = false;\n }\n });\n },\n // 获取安卓机临时文件中的内容\n readerFile: function readerFile(dataParams) {\n var _this5 = this;\n var tempFilePath = this.androidFileDocPath + dataParams.fileName;\n __f__(\"log\", '获取安卓机临时文件中的内容', tempFilePath, \" at mixins/linkFTP.js:154\");\n // console.log('获取安卓机临时文件中的内容1',plus.io.resolveLocalFileSystemURL);\n plus.io.resolveLocalFileSystemURL(tempFilePath, function (entry) {\n __f__(\"log\", \"文件条目:\", entry, \" at mixins/linkFTP.js:157\");\n entry.file(function (file) {\n __f__(\"log\", 'file', file, \" at mixins/linkFTP.js:159\");\n var reader = new plus.io.FileReader();\n reader.onloadend = function (res) {\n __f__(\"log\", \"文件内容:\", res.target.result, \" at mixins/linkFTP.js:162\"); // 输出文件内容\n var data = {\n command: 'examineData',\n commandType: 'FTP',\n data: {\n state: 0,\n message: JSON.stringify(res.target.result),\n fileName: dataParams.fileName\n }\n };\n _this5.webViewToH5(data);\n _this5.readerFileFlag = false;\n };\n reader.readAsText(file); // 根据文件类型选择读取方式,例如:readAsText\n }, function (error) {\n __f__(\"error\", \"读取文件失败:\", error, \" at mixins/linkFTP.js:177\");\n _this5.readerFileFlag = false;\n });\n }, function (error) {\n __f__(\"error\", \"获取文件路径失败:\", error, \" at mixins/linkFTP.js:181\");\n _this5.readerFileFlag = false;\n });\n },\n // 删除安卓机下载下来的文件\n deleteAppDownLoadFile: function deleteAppDownLoadFile(data) {\n __f__(\"log\", ' 删除安卓机下载下来的文件--data', data, \" at mixins/linkFTP.js:187\");\n // 获取安卓机路径地址\n var deleteAppFileName = this.androidFileDocPath + data.fileName;\n plus.io.resolveLocalFileSystemURL(deleteAppFileName, function (entry) {\n // 调用 remove 方法删除文件\n entry.remove(function () {\n __f__(\"log\", '文件删除成功', \" at mixins/linkFTP.js:193\");\n }, function (error) {\n __f__(\"log\", '文件删除失败: ' + error.message, \" at mixins/linkFTP.js:195\");\n });\n }, function (error) {\n __f__(\"log\", '无法解析文件路径: ' + error.message, \" at mixins/linkFTP.js:198\");\n });\n },\n // 删除FTP服务器文件\n ftpDeleteServerFiles: function ftpDeleteServerFiles(data) {\n //(\"要删除的文件夹或文件地址\", 回调)\n //回调\n //{type : delete, data : {msg : \"删除文件/删除文件夹(ps:先删除文件夹里面的文件再删文件夹)\", data : \"文件名\", status : true/false, error : \"失败原因\"}}\n var name = this.cgConfigInfo.data.inspectionDir + '/' + data.fileName;\n __f__(\"log\", '删除FTP服务器文件', name, \" at mixins/linkFTP.js:207\");\n data && data.fileName ? FTP.ftpDeleteServerFiles(name, function (res) {\n __f__(\"log\", 'FTP服务器文件删除成功', name, res, \" at mixins/linkFTP.js:209\");\n // setTimeout(() => {\n // \tthis.ftpUploadFile(data)\n // }, 3000)\n }) : '';\n },\n // 删除FTPS文件夹下面文件保留文件夹\n ftpDeleteServerFilesWithoutDirectory: function ftpDeleteServerFilesWithoutDirectory() {\n //同上,不会删除指定文件夹\n FTP.ftpDeleteServerFilesWithoutDirectory(this.cgConfigInfo.data.inspectionDir, function (res) {\n __f__(\"log\", res, \" at mixins/linkFTP.js:219\");\n });\n },\n // FTP-上传文件至FTP\n // ftpUploadFile(data) {\n // \tvar inputFile = plus.io.convertLocalFileSystemURL('/static/logo.png')\n // \tconsole.log('inputFile文件', inputFile);\n // \tFTP.ftpUploadFile(inputFile, '/sda1/deviceNewFile', res => {\n // \t\tconsole.log('文件-上传成功', res)\n // \t\tif (res.data.msg === '上传完成') {\n // \t\t\tconsole.log('00000000000000000000');\n // \t\t\tthis.ftpLoopServerPath()\n // \t\t\tconsole.log(this.count++);\n // \t\t}\n // \t})\n // },\n // FTP断开连接\n closeFTPConnect: function closeFTPConnect() {\n var _this6 = this;\n __f__(\"log\", 'FTP断开连接!!!!', \" at mixins/linkFTP.js:237\");\n //失败有回调,成功没有回调\n FTP.closeFTPConnect(function (res) {\n __f__(\"log\", 'FTP断开连接', res, \" at mixins/linkFTP.js:240\");\n clearInterval(_this6.setInterTimeFTP);\n // this.isConnect = false\n });\n },\n // uniapp 传参给 vue页面---刘灿测试\n webViewToH5: function webViewToH5(res) {\n var currentWebview = this.$scope.$getAppWebview();\n var wv = currentWebview.children()[0];\n __f__(\"log\", 'uniapp 传参给 vue页面', \" at mixins/linkFTP.js:249\");\n wv.evalJS(\"getVueMessage(\".concat(JSON.stringify(res), \")\"));\n }\n }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 12)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vbWl4aW5zL2xpbmtGVFAuanMiXSwibmFtZXMiOlsiRlRQIiwidW5pIiwicmVxdWlyZU5hdGl2ZVBsdWdpbiIsImRhdGEiLCJyZW1vdGVVcmwiLCJhbmRyb2lkRmlsZURvY1BhdGgiLCJwbHVzIiwiaW8iLCJjb252ZXJ0TG9jYWxGaWxlU3lzdGVtVVJMIiwiZnRwTG9naWNEZWNldGVOYW1lIiwiY291bnQiLCJpc0Nvbm5lY3QiLCJzZXRJbnRlclRpbWVGVFAiLCJyZWFkZXJGaWxlRmxhZyIsIm9uU2hvdyIsIm9uSGlkZSIsIm9uTG9hZCIsImRlc3Ryb3llZCIsImNsZWFySW50ZXJ2YWwiLCJtZXRob2RzIiwiZnRwU2VuZE5vT3AiLCJzZXRJbnRlcnZhbCIsInJlcyIsImZ0cENoYW5nZVdvcmtpbmdEaXJlY3RvcnkiLCJyZWQiLCJjb21tYW5kIiwic3RhdGUiLCJtZXNzYWdlIiwid2ViVmlld1RvSDUiLCJmdHBMb29wU2VydmVyUGF0aCIsImNvbm5lY3RGdHBTZXJ2ZXIiLCJjZ0NvbmZpZ0luZm9EYXRhIiwiY2dDb25maWdJbmZvIiwidHlwZSIsImNvbm5lY3QiLCJuYW1lIiwiaW5zcGVjdGlvbkRpciIsImxlbmd0aCIsIm5ld0RhdGEiLCJzb3J0IiwiYSIsImIiLCJEYXRlIiwidGltZSIsImZ0cERvd25sb2FkU2luZ2xlRmlsZSIsInN0YXR1cyIsInJlYWRlckZpbGUiLCJkYXRhUGFyYW1zIiwidGVtcEZpbGVQYXRoIiwiZmlsZU5hbWUiLCJyZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMIiwiZW50cnkiLCJmaWxlIiwicmVhZGVyIiwiRmlsZVJlYWRlciIsIm9ubG9hZGVuZCIsInRhcmdldCIsInJlc3VsdCIsImNvbW1hbmRUeXBlIiwiSlNPTiIsInN0cmluZ2lmeSIsInJlYWRBc1RleHQiLCJlcnJvciIsImRlbGV0ZUFwcERvd25Mb2FkRmlsZSIsImRlbGV0ZUFwcEZpbGVOYW1lIiwicmVtb3ZlIiwiZnRwRGVsZXRlU2VydmVyRmlsZXMiLCJmdHBEZWxldGVTZXJ2ZXJGaWxlc1dpdGhvdXREaXJlY3RvcnkiLCJjbG9zZUZUUENvbm5lY3QiLCJjdXJyZW50V2VidmlldyIsIiRzY29wZSIsIiRnZXRBcHBXZWJ2aWV3Iiwid3YiLCJjaGlsZHJlbiIsImV2YWxKUyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBSUEsR0FBRyxHQUFHQyxHQUFHLENBQUNDLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDO0FBQUMsZUFDdkM7RUFDZEMsSUFBSSxrQkFBRztJQUNOLE9BQU87TUFDTkMsU0FBUyxFQUFFLEVBQUU7TUFDYkMsa0JBQWtCLEVBQUVDLElBQUksQ0FBQ0MsRUFBRSxDQUFDQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUM7TUFDN0RDLGtCQUFrQixFQUFFLG1CQUFtQjtNQUN2Q0MsS0FBSyxFQUFFLENBQUM7TUFDUkMsU0FBUyxFQUFFLEtBQUs7TUFDaEJDLGVBQWUsRUFBRSxJQUFJO01BQ3JCQyxjQUFjLEVBQUM7SUFDaEIsQ0FBQztFQUNGLENBQUM7RUFDREMsTUFBTSxvQkFBRztJQUNSO0VBQUEsQ0FDQTtFQUNEQyxNQUFNLG9CQUFHO0lBQ1I7RUFBQSxDQUNBO0VBQ0RDLE1BQU0sb0JBQUcsQ0FBQyxDQUFDO0VBQ1hDLFNBQVMsdUJBQUc7SUFDWCxhQUFZLE1BQU07SUFDbEJDLGFBQWEsQ0FBQyxJQUFJLENBQUNOLGVBQWUsQ0FBQztFQUNwQyxDQUFDO0VBQ0RPLE9BQU8sRUFBRTtJQUNSO0lBQ0E7SUFDQTtJQUVBO0lBQ0FDLFdBQVcseUJBQUc7TUFBQTtNQUNiRixhQUFhLENBQUMsSUFBSSxDQUFDTixlQUFlLENBQUM7TUFDbkMsSUFBSSxDQUFDQSxlQUFlLEdBQUdTLFdBQVcsQ0FBQyxZQUFNO1FBQ3hDckIsR0FBRyxDQUFDb0IsV0FBVyxDQUFDLFVBQUFFLEdBQUcsRUFBSTtVQUN0QixJQUFJQSxHQUFHLENBQUNuQixJQUFJLEtBQUssSUFBSSxFQUFFO1lBQ3RCLGFBQVksY0FBYyxFQUFDbUIsR0FBRztZQUM5QixhQUFZLGdCQUFnQixFQUFDLEtBQUksQ0FBQ1QsY0FBYztZQUNoRCxDQUFDLEtBQUksQ0FBQ0EsY0FBYyxHQUFHYixHQUFHLENBQUN1Qix5QkFBeUIsQ0FBQyxHQUFHLEVBQUUsVUFBQUMsR0FBRyxFQUFJO2NBQ2hFLGFBQVksV0FBVyxFQUFFQSxHQUFHO2NBQzVCLElBQUlyQixJQUFJLEdBQUc7Z0JBQ1ZzQixPQUFPLEVBQUUsa0JBQWtCO2dCQUMzQnRCLElBQUksRUFBRTtrQkFDTHVCLEtBQUssRUFBRSxDQUFDO2tCQUNSQyxPQUFPLEVBQUU7Z0JBQ1Y7Y0FDRCxDQUFDO2NBQ0QsS0FBSSxDQUFDQyxXQUFXLENBQUN6QixJQUFJLENBQUM7Y0FDdEJxQixHQUFHLENBQUNyQixJQUFJLEdBQUcsS0FBSSxDQUFDMEIsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO1lBQ3pDLENBQUMsQ0FBQyxHQUFHLEVBQUU7VUFDUixDQUFDLE1BQU07WUFDTixhQUFZLGNBQWMsRUFBRVAsR0FBRztZQUMvQixJQUFJbkIsSUFBSSxHQUFHO2NBQ1ZzQixPQUFPLEVBQUUsa0JBQWtCO2NBQzNCdEIsSUFBSSxFQUFFO2dCQUNMdUIsS0FBSyxFQUFFLENBQUM7Z0JBQ1JDLE9BQU8sRUFBRTtjQUNWO1lBQ0QsQ0FBQztZQUNELEtBQUksQ0FBQ0MsV0FBVyxDQUFDekIsSUFBSSxDQUFDO1lBQ3RCLEtBQUksQ0FBQzJCLGdCQUFnQixFQUFFO1VBQ3hCO1FBQ0QsQ0FBQyxDQUFDO01BQ0gsQ0FBQyxFQUFFLElBQUksQ0FBQztJQUNULENBQUM7SUFDRDtJQUNBQSxnQkFBZ0IsOEJBQUc7TUFBQTtNQUNsQjtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQSxJQUFJQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUNDLFlBQVksQ0FBQzdCLElBQUk7TUFDN0MsYUFBWSxrQkFBa0IsRUFBQzRCLGdCQUFnQjtNQUMvQztNQUNBO01BQ0EvQixHQUFHLENBQUM4QixnQkFBZ0IsQ0FBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFVBQUFSLEdBQUcsRUFBSTtRQUN6RSxhQUFZLE9BQU8sRUFBRUEsR0FBRztRQUN4QixJQUFJQSxHQUFHLENBQUNXLElBQUksS0FBSyxTQUFTLElBQUlYLEdBQUcsQ0FBQ25CLElBQUksQ0FBQytCLE9BQU8sS0FBSyxJQUFJLEVBQUU7VUFDeEQsSUFBSS9CLElBQUksR0FBRztZQUNWc0IsT0FBTyxFQUFFLGtCQUFrQjtZQUMzQnRCLElBQUksRUFBRTtjQUNMdUIsS0FBSyxFQUFFLENBQUM7Y0FDUkMsT0FBTyxFQUFFO1lBQ1Y7VUFDRCxDQUFDO1VBQ0QsTUFBSSxDQUFDQyxXQUFXLENBQUN6QixJQUFJLENBQUM7O1VBRXRCO1VBQ0FILEdBQUcsQ0FBQ3VCLHlCQUF5QixDQUFDLEdBQUcsRUFBRSxVQUFBQyxHQUFHLEVBQUk7WUFDekMsYUFBWSxXQUFXLEVBQUVBLEdBQUc7WUFDNUJBLEdBQUcsQ0FBQ3JCLElBQUksR0FBRyxNQUFJLENBQUMwQixpQkFBaUIsRUFBRSxHQUFHLEVBQUU7VUFDekMsQ0FBQyxDQUFDO1FBQ0gsQ0FBQyxNQUFNLElBQUlQLEdBQUcsQ0FBQ1csSUFBSSxLQUFLLFNBQVMsSUFBSVgsR0FBRyxDQUFDbkIsSUFBSSxDQUFDK0IsT0FBTyxLQUFLLEtBQUssRUFBRTtVQUNoRTtVQUNBLElBQUkvQixJQUFJLEdBQUc7WUFDVnNCLE9BQU8sRUFBRSxrQkFBa0I7WUFDM0J0QixJQUFJLEVBQUU7Y0FDTHVCLEtBQUssRUFBRSxDQUFDO2NBQ1JDLE9BQU8sRUFBRTtZQUNWO1VBQ0QsQ0FBQztVQUNELE1BQUksQ0FBQ0MsV0FBVyxDQUFDekIsSUFBSSxDQUFDO1FBQ3ZCO01BQ0QsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUNEO0lBQ0EwQixpQkFBaUIsK0JBQUc7TUFBQTtNQUNuQixJQUFJTSxJQUFJLEdBQUcsSUFBSSxDQUFDSCxZQUFZLENBQUM3QixJQUFJLENBQUNpQyxhQUFhO01BQy9DLGFBQVksTUFBTSxFQUFDRCxJQUFJOztNQUV2QjtNQUNBLElBQUksQ0FBQ3RCLGNBQWMsR0FBRyxJQUFJO01BQzFCO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQWIsR0FBRyxDQUFDNkIsaUJBQWlCLENBQUNNLElBQUksRUFBRSxVQUFBYixHQUFHLEVBQUk7UUFDbEMsYUFBWSxlQUFlLEVBQUVBLEdBQUc7UUFDaEMsSUFBR0EsR0FBRyxDQUFDVyxJQUFJLEtBQUssYUFBYSxJQUFJWCxHQUFHLENBQUNuQixJQUFJLENBQUNrQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1VBQ3JELElBQUlDLE9BQU8sR0FBR2hCLEdBQUcsQ0FBQ25CLElBQUksQ0FBQ29DLElBQUksQ0FBQyxVQUFDQyxDQUFDLEVBQUVDLENBQUM7WUFBQSxPQUFLLElBQUlDLElBQUksQ0FBQ0QsQ0FBQyxDQUFDRSxJQUFJLENBQUMsR0FBRyxJQUFJRCxJQUFJLENBQUNGLENBQUMsQ0FBQ0csSUFBSSxDQUFDO1VBQUEsRUFBQztVQUMxRSxhQUFZLGFBQWEsRUFBQ0wsT0FBTztVQUNqQztVQUNBdEMsR0FBRyxDQUFDdUIseUJBQXlCLENBQUMsR0FBRyxFQUFFLFVBQUFDLEdBQUcsRUFBSTtZQUN6QyxhQUFZLFdBQVcsRUFBRUEsR0FBRztZQUM1QkEsR0FBRyxDQUFDckIsSUFBSSxHQUFHLE1BQUksQ0FBQ3lDLHFCQUFxQixDQUFDTixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFO1VBQ3ZELENBQUMsQ0FBQztRQUNILENBQUMsTUFBTTtVQUNOLE1BQUksQ0FBQ3pCLGNBQWMsR0FBRyxLQUFLO1FBQzVCO01BQ0QsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUNEO0lBQ0ErQixxQkFBcUIsaUNBQUN6QyxJQUFJLEVBQUU7TUFBQTtNQUMzQjtNQUNBO01BQ0E7TUFDQTtNQUNBLGFBQVksb0JBQW9CLEVBQUUsSUFBSSxDQUFDRSxrQkFBa0I7TUFDekQ7TUFDQUwsR0FBRyxDQUFDNEMscUJBQXFCLENBQUMsSUFBSSxDQUFDdkMsa0JBQWtCLEVBQUVGLElBQUksQ0FBQ2dDLElBQUksRUFBRSxVQUFBYixHQUFHLEVBQUk7UUFDcEUsYUFBWSxnQkFBZ0IsRUFBRUEsR0FBRztRQUNqQyxJQUFJQSxHQUFHLENBQUNXLElBQUksS0FBSyxVQUFVLElBQUlYLEdBQUcsQ0FBQ25CLElBQUksQ0FBQzBDLE1BQU0sRUFBRTtVQUMvQyxNQUFJLENBQUNDLFVBQVUsQ0FBQzNDLElBQUksQ0FBQztRQUN0QixDQUFDLE1BQU07VUFDTixNQUFJLENBQUNVLGNBQWMsR0FBRyxLQUFLO1FBQzVCO01BQ0QsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUNEO0lBQ0FpQyxVQUFVLHNCQUFDQyxVQUFVLEVBQUU7TUFBQTtNQUN0QixJQUFJQyxZQUFZLEdBQUcsSUFBSSxDQUFDM0Msa0JBQWtCLEdBQUcwQyxVQUFVLENBQUNFLFFBQVE7TUFDaEUsYUFBWSxlQUFlLEVBQUVELFlBQVk7TUFDekM7TUFDQTFDLElBQUksQ0FBQ0MsRUFBRSxDQUFDMkMseUJBQXlCLENBQUNGLFlBQVksRUFBRSxVQUFDRyxLQUFLLEVBQUs7UUFDMUQsYUFBWSxPQUFPLEVBQUVBLEtBQUs7UUFDMUJBLEtBQUssQ0FBQ0MsSUFBSSxDQUFDLFVBQUNBLElBQUksRUFBSztVQUNwQixhQUFZLE1BQU0sRUFBRUEsSUFBSTtVQUN4QixJQUFJQyxNQUFNLEdBQUcsSUFBSS9DLElBQUksQ0FBQ0MsRUFBRSxDQUFDK0MsVUFBVSxFQUFFO1VBQ3JDRCxNQUFNLENBQUNFLFNBQVMsR0FBRyxVQUFDakMsR0FBRyxFQUFLO1lBQzNCLGFBQVksT0FBTyxFQUFFQSxHQUFHLENBQUNrQyxNQUFNLENBQUNDLE1BQU0sK0JBQUUsQ0FBQztZQUN6QyxJQUFJdEQsSUFBSSxHQUFHO2NBQ1ZzQixPQUFPLEVBQUUsYUFBYTtjQUN0QmlDLFdBQVcsRUFBQyxLQUFLO2NBQ2pCdkQsSUFBSSxFQUFFO2dCQUNMdUIsS0FBSyxFQUFFLENBQUM7Z0JBQ1JDLE9BQU8sRUFBRWdDLElBQUksQ0FBQ0MsU0FBUyxDQUFDdEMsR0FBRyxDQUFDa0MsTUFBTSxDQUFDQyxNQUFNLENBQUM7Z0JBQzFDUixRQUFRLEVBQUVGLFVBQVUsQ0FBQ0U7Y0FDdEI7WUFDRCxDQUFDO1lBQ0QsTUFBSSxDQUFDckIsV0FBVyxDQUFDekIsSUFBSSxDQUFDO1lBQ3RCLE1BQUksQ0FBQ1UsY0FBYyxHQUFHLEtBQUs7VUFDNUIsQ0FBQztVQUNEd0MsTUFBTSxDQUFDUSxVQUFVLENBQUNULElBQUksQ0FBQyxDQUFDLENBQUM7UUFDMUIsQ0FBQyxFQUFFLFVBQUNVLEtBQUssRUFBSztVQUNiLGVBQWMsU0FBUyxFQUFFQSxLQUFLO1VBQzlCLE1BQUksQ0FBQ2pELGNBQWMsR0FBRyxLQUFLO1FBQzVCLENBQUMsQ0FBQztNQUNILENBQUMsRUFBRSxVQUFDaUQsS0FBSyxFQUFLO1FBQ2IsZUFBYyxXQUFXLEVBQUVBLEtBQUs7UUFDaEMsTUFBSSxDQUFDakQsY0FBYyxHQUFHLEtBQUs7TUFDNUIsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUNEO0lBQ0FrRCxxQkFBcUIsaUNBQUM1RCxJQUFJLEVBQUU7TUFDM0IsYUFBWSxxQkFBcUIsRUFBRUEsSUFBSTtNQUN2QztNQUNBLElBQUk2RCxpQkFBaUIsR0FBRyxJQUFJLENBQUMzRCxrQkFBa0IsR0FBR0YsSUFBSSxDQUFDOEMsUUFBUTtNQUMvRDNDLElBQUksQ0FBQ0MsRUFBRSxDQUFDMkMseUJBQXlCLENBQUNjLGlCQUFpQixFQUFFLFVBQUNiLEtBQUssRUFBSztRQUMvRDtRQUNBQSxLQUFLLENBQUNjLE1BQU0sQ0FBQyxZQUFNO1VBQ2xCLGFBQVksUUFBUTtRQUNyQixDQUFDLEVBQUUsVUFBQ0gsS0FBSyxFQUFLO1VBQ2IsYUFBWSxVQUFVLEdBQUdBLEtBQUssQ0FBQ25DLE9BQU87UUFDdkMsQ0FBQyxDQUFDO01BQ0gsQ0FBQyxFQUFFLFVBQUNtQyxLQUFLLEVBQUs7UUFDYixhQUFZLFlBQVksR0FBR0EsS0FBSyxDQUFDbkMsT0FBTztNQUN6QyxDQUFDLENBQUM7SUFDSCxDQUFDO0lBQ0Q7SUFDQXVDLG9CQUFvQixnQ0FBQy9ELElBQUksRUFBRTtNQUMxQjtNQUNBO01BQ0E7TUFDQSxJQUFJZ0MsSUFBSSxHQUFHLElBQUksQ0FBQ0gsWUFBWSxDQUFDN0IsSUFBSSxDQUFDaUMsYUFBYSxHQUFJLEdBQUcsR0FBR2pDLElBQUksQ0FBQzhDLFFBQVE7TUFDdEUsYUFBWSxZQUFZLEVBQUNkLElBQUk7TUFDN0JoQyxJQUFJLElBQUlBLElBQUksQ0FBQzhDLFFBQVEsR0FBR2pELEdBQUcsQ0FBQ2tFLG9CQUFvQixDQUFDL0IsSUFBSSxFQUFFLFVBQUFiLEdBQUcsRUFBSTtRQUM3RCxhQUFZLGNBQWMsRUFBRWEsSUFBSSxFQUFDYixHQUFHO1FBQ3BDO1FBQ0E7UUFDQTtNQUNELENBQUMsQ0FBQyxHQUFHLEVBQUU7SUFDUixDQUFDO0lBQ0Q7SUFDQTZDLG9DQUFvQyxrREFBRztNQUN0QztNQUNBbkUsR0FBRyxDQUFDbUUsb0NBQW9DLENBQUMsSUFBSSxDQUFDbkMsWUFBWSxDQUFDN0IsSUFBSSxDQUFDaUMsYUFBYSxFQUFFLFVBQUFkLEdBQUcsRUFBSTtRQUNyRixhQUFZQSxHQUFHO01BQ2hCLENBQUMsQ0FBQztJQUNILENBQUM7SUFDRDtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E4QyxlQUFlLDZCQUFHO01BQUE7TUFDakIsYUFBWSxhQUFhO01BQ3pCO01BQ0FwRSxHQUFHLENBQUNvRSxlQUFlLENBQUMsVUFBQTlDLEdBQUcsRUFBSTtRQUMxQixhQUFZLFNBQVMsRUFBQ0EsR0FBRztRQUN6QkosYUFBYSxDQUFDLE1BQUksQ0FBQ04sZUFBZSxDQUFDO1FBQ25DO01BQ0QsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUNEO0lBQ0FnQixXQUFXLHVCQUFDTixHQUFHLEVBQUU7TUFDaEIsSUFBSStDLGNBQWMsR0FBRyxJQUFJLENBQUNDLE1BQU0sQ0FBQ0MsY0FBYyxFQUFFO01BQ2pELElBQUlDLEVBQUUsR0FBR0gsY0FBYyxDQUFDSSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDckMsYUFBWSxrQkFBa0I7TUFDOUJELEVBQUUsQ0FBQ0UsTUFBTSx5QkFBa0JmLElBQUksQ0FBQ0MsU0FBUyxDQUFDdEMsR0FBRyxDQUFDLE9BQUk7SUFDbkQ7RUFDRDtBQUNELENBQUM7QUFBQSwyQiIsImZpbGUiOiIxNC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBGVFAgPSB1bmkucmVxdWlyZU5hdGl2ZVBsdWdpbignWmhpbWktRlRQLU1vZHVsZScpO1xyXG5leHBvcnQgZGVmYXVsdCB7XHJcblx0ZGF0YSgpIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHJlbW90ZVVybDogJycsXHJcblx0XHRcdGFuZHJvaWRGaWxlRG9jUGF0aDogcGx1cy5pby5jb252ZXJ0TG9jYWxGaWxlU3lzdGVtVVJMKCdfZG9jJyksXHJcblx0XHRcdGZ0cExvZ2ljRGVjZXRlTmFtZTogJy9zZGExL2xvZ2ljRGVsZXRlJyxcclxuXHRcdFx0Y291bnQ6IDAsXHJcblx0XHRcdGlzQ29ubmVjdDogZmFsc2UsXHJcblx0XHRcdHNldEludGVyVGltZUZUUDogbnVsbCxcclxuXHRcdFx0cmVhZGVyRmlsZUZsYWc6ZmFsc2VcclxuXHRcdH1cclxuXHR9LFxyXG5cdG9uU2hvdygpIHtcclxuXHRcdC8vIGNvbnNvbGUubG9nKCdzaG93c2hvd3Nob3cnKTtcclxuXHR9LFxyXG5cdG9uSGlkZSgpIHtcclxuXHRcdC8vIGNvbnNvbGUubG9nKCdoaWRlaGlkZWhpZGUnKTtcclxuXHR9LFxyXG5cdG9uTG9hZCgpIHt9LFxyXG5cdGRlc3Ryb3llZCgpIHtcclxuXHRcdGNvbnNvbGUubG9nKCfplIDmr4HpobXpnaInKTtcclxuXHRcdGNsZWFySW50ZXJ2YWwodGhpcy5zZXRJbnRlclRpbWVGVFApXHJcblx0fSxcclxuXHRtZXRob2RzOiB7XHJcblx0XHQvLyDmtYHnqIs6IFxyXG5cdFx0Ly8gZnRw6L+e5o6lIC0tLT4g6I635Y+WZnRw55uu5b2V5paH5Lu25aS55ZCN5ZKM5paH5Lu25ZCNIC0tLT4g5LiL6L295paH5Lu25aS55Lit55qE5paH5Lu25Yiw5a6J5Y2T5py6IC0tLT4g5Li05pe25Zyw5Z2A6L2sdXJs5Lyg6L6T57uZSDXlsZXnpLogIFxyXG5cdFx0Ly8gLS0tPiBINemhtemdouWFs+iBlOehruiupOWujO+8jOWcqOWuieWNk+acuuS4reaJvuWIsOWFs+iBlOehruiupOWQjueahOaWh+S7tuS4iuS8oOWIsEZUUOeahOWPpuWkluS4gOS4quaWh+S7tuWkue+8iOaWsOW7uuaWh+S7tuWkue+8iSAtLS0+IOWIoOmZpOWuieWNk+acuuS4tOaXtuaWh+S7tiAgLS0tPiDliKDpmaRGVFDkuYvliY3mlofku7blpLnkuK3lhbPogZTnoa7orqTlkI7nmoTmlofku7ZcclxuXHRcdFxyXG5cdFx0Ly8g5rWL6K+V5piv5ZCm5o6J57q/55qE5pa55rOVXHJcblx0XHRmdHBTZW5kTm9PcCgpIHtcclxuXHRcdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLnNldEludGVyVGltZUZUUClcclxuXHRcdFx0dGhpcy5zZXRJbnRlclRpbWVGVFAgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcblx0XHRcdFx0RlRQLmZ0cFNlbmROb09wKHJlcyA9PiB7XHJcblx0XHRcdFx0XHRpZiAocmVzLmRhdGEgPT09IHRydWUpIHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coJ+a1i+ivleaYr+WQpuaOiee6v+Wbnuiwgy3mnKrmjonnur8nLHJlcyk7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKCdyZWFkZXJGaWxlRmxhZycsdGhpcy5yZWFkZXJGaWxlRmxhZyk7XHJcblx0XHRcdFx0XHRcdCF0aGlzLnJlYWRlckZpbGVGbGFnID8gRlRQLmZ0cENoYW5nZVdvcmtpbmdEaXJlY3RvcnkoXCIvXCIsIHJlZCA9PiB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coJ+S4i+i9veWJjeiwg+eUqOi/meS4quaWueazlScsIHJlZClcclxuXHRcdFx0XHRcdFx0XHR2YXIgZGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbW1hbmQ6ICdmdHBTdGF0dXNDaGFuZ2VkJyxcclxuXHRcdFx0XHRcdFx0XHRcdGRhdGE6IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0c3RhdGU6IDAsXHJcblx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2U6ICdGVFDlt7Lov57mjqUnXHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMud2ViVmlld1RvSDUoZGF0YSlcclxuXHRcdFx0XHRcdFx0XHRyZWQuZGF0YSA/IHRoaXMuZnRwTG9vcFNlcnZlclBhdGgoKSA6ICcnXHJcblx0XHRcdFx0XHRcdH0pIDogJycgXHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZygn5rWL6K+V5piv5ZCm5o6J57q/5Zue6LCDLeW3suaOiee6vycsIHJlcyk7XHJcblx0XHRcdFx0XHRcdHZhciBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1hbmQ6ICdmdHBTdGF0dXNDaGFuZ2VkJyxcclxuXHRcdFx0XHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHRcdFx0XHRzdGF0ZTogMCxcclxuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2U6ICdGVFDlt7Lmjonnur8nXHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdHRoaXMud2ViVmlld1RvSDUoZGF0YSlcclxuXHRcdFx0XHRcdFx0dGhpcy5jb25uZWN0RnRwU2VydmVyKClcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9LCA1MDAwKVxyXG5cdFx0fSxcclxuXHRcdC8vIEZUUOi/nuaOpVxyXG5cdFx0Y29ubmVjdEZ0cFNlcnZlcigpIHtcclxuXHRcdFx0Ly/vvIjigJzmnI3liqHlnLDlnYDigJ3vvIwg56uv5Y+j77yMIOKAnOeUqOaIt+WQjeKAne+8jOKAneWvhueggeKAnO+8jCDlm57osIMg77yJXHJcblx0XHRcdC8v5Zue6LCDIFxyXG5cdFx0XHQvL+aIkOWKnyB7dHlwZSA6IFwiY29ubmVjdFwiLCBkYXRhIDoge2RhdGEgOiBcIuebuOW6lOeKtuaAgeegge+8mjIwMCAg6L+e5o6l5piv5ZCm5oiQ5Yqf77yadHJ1ZSAg6L+e5o6l5piv5ZCm5pyJ5pWI77yadHJ1ZX19IFxyXG5cdFx0XHQvL+Wksei0pSB7dHlwZSA6IFwiY29ubmVjdFwiLCBkYXRhIDoge1wiZXJyb3JcIiA6IFwi5aSx6LSl5Y6f5ZugXCJ9fVxyXG5cdFx0XHQvLyBcIjE5Mi4xNjguNTAuMVwiLCAyMSwgXCJobWdjXCIsIFwiaG1nY1wiXHJcblx0XHRcdC8vIFwiMTkyLjE2OC41MC4xMzFcIiwgMjEsIFwiaG1mdHBcIiwgXCJobWZ0cFwiXHJcblx0XHRcdGxldCBjZ0NvbmZpZ0luZm9EYXRhID0gdGhpcy5jZ0NvbmZpZ0luZm8uZGF0YVxyXG5cdFx0XHRjb25zb2xlLmxvZygnY2dDb25maWdJbmZvRGF0YScsY2dDb25maWdJbmZvRGF0YSk7XHJcblx0XHRcdC8vICcxOTIuMTY4LjUwLjEnLCAyMSwgJ2htZ2MnLCAnaG1nYycsIFwiVVRGLThcIlxyXG5cdFx0XHQvLyBjZ0NvbmZpZ0luZm9EYXRhLmZ0cEhvc3ROYW1lLCAyMSwgY2dDb25maWdJbmZvRGF0YS5mdHBVc2VyTmFtZSwgY2dDb25maWdJbmZvRGF0YS5mdHBQYXNzV29yZCxcclxuXHRcdFx0RlRQLmNvbm5lY3RGdHBTZXJ2ZXIoICcxOTIuMTY4LjUwLjEnLCAyMSwgJ2htZ2MnLCAnaG1nYycsIFwiVVRGLThcIiwgcmVzID0+IHtcclxuXHRcdFx0XHRjb25zb2xlLmxvZygnRlRQ6L+e5o6lJywgcmVzKVxyXG5cdFx0XHRcdGlmIChyZXMudHlwZSA9PT0gJ2Nvbm5lY3QnICYmIHJlcy5kYXRhLmNvbm5lY3QgPT09IHRydWUpIHtcclxuXHRcdFx0XHRcdHZhciBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRjb21tYW5kOiAnZnRwU3RhdHVzQ2hhbmdlZCcsXHJcblx0XHRcdFx0XHRcdGRhdGE6IHtcclxuXHRcdFx0XHRcdFx0XHRzdGF0ZTogMCxcclxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlOiAnRlRQ5bey6L+e5o6lJ1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLndlYlZpZXdUb0g1KGRhdGEpXHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdC8vIOiOt+WPlkZUUOacjeWKoeWZqOebruW9leWJjeiwg+eUqOi/meS4quaWueazlS0tLeWkhOeQhumXqumAgOeOsOixoVxyXG5cdFx0XHRcdFx0RlRQLmZ0cENoYW5nZVdvcmtpbmdEaXJlY3RvcnkoXCIvXCIsIHJlZCA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKCfkuIvovb3liY3osIPnlKjov5nkuKrmlrnms5UnLCByZWQpXHJcblx0XHRcdFx0XHRcdHJlZC5kYXRhID8gdGhpcy5mdHBMb29wU2VydmVyUGF0aCgpIDogJydcclxuXHRcdFx0XHRcdH0pIFxyXG5cdFx0XHRcdH0gZWxzZSBpZiAocmVzLnR5cGUgPT09ICdjb25uZWN0JyAmJiByZXMuZGF0YS5jb25uZWN0ID09PSBmYWxzZSkge1xyXG5cdFx0XHRcdFx0Ly8gdGhpcy5pc0Nvbm5lY3QgPSBmYWxzZVxyXG5cdFx0XHRcdFx0dmFyIGRhdGEgPSB7XHJcblx0XHRcdFx0XHRcdGNvbW1hbmQ6ICdmdHBTdGF0dXNDaGFuZ2VkJyxcclxuXHRcdFx0XHRcdFx0ZGF0YToge1xyXG5cdFx0XHRcdFx0XHRcdHN0YXRlOiAwLFxyXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2U6ICdGVFDov57mjqXlpLHotKUnXHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRoaXMud2ViVmlld1RvSDUoZGF0YSlcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0Ly8g6I635Y+WRlRQ5pyN5Yqh5Zmo55uu5b2VXHJcblx0XHRmdHBMb29wU2VydmVyUGF0aCgpIHsgXHJcblx0XHRcdGxldCBuYW1lID0gdGhpcy5jZ0NvbmZpZ0luZm8uZGF0YS5pbnNwZWN0aW9uRGlyXHJcblx0XHRcdGNvbnNvbGUubG9nKCduYW1lJyxuYW1lKTtcclxuXHRcdFx0XHJcblx0XHRcdC8vIOmYgOWAvC0t5b6q546v5pe25o6n5Yi25pqC5pe25LiN6LWw6I635Y+WRlRQ5pyN5Yqh5Zmo55uu5b2VXHJcblx0XHRcdHRoaXMucmVhZGVyRmlsZUZsYWcgPSB0cnVlXHJcblx0XHRcdC8vIDHmmK/mlofku7blpLkgMOaYr+aWh+S7tlxyXG5cdFx0XHQvLyhcIuiOt+WPluacjeWKoeWZqOebruW9leS4i+aWh+S7tu+8jOepuueZveS4uuagueebruW9lVwi77yMIOWbnuiwgylcclxuXHRcdFx0Ly/lm57osIMgXHJcblx0XHRcdC8v5oiQ5YqfIHt0eXBlIDogZ2V0RmlsZUluZm8sIGRhdGEgOiBbe25hbWUgOiBcIuWcsOWdgFwiLCBzaXplIDog5paH5Lu25aSn5bCP5Y2V5L2N5a2X6IqCLCB0aW1lIDog4oCc5L+u5pS55pe26Ze04oCdfV19XHJcblx0XHRcdC8v5aSx6LSlIHt0eXBlIDogXCJlcnJvclwiLCBkYXRhIDogXCLlpLHotKXljp/lm6BcIn1cclxuXHRcdFx0RlRQLmZ0cExvb3BTZXJ2ZXJQYXRoKG5hbWUsIHJlcyA9PiB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coJ+iOt+WPlkZUUOacjeWKoeWZqOebruW9lXJlcycsIHJlcyk7XHJcblx0XHRcdFx0aWYocmVzLnR5cGUgPT09ICdnZXRGaWxlSW5mbycgJiYgcmVzLmRhdGEubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0bGV0IG5ld0RhdGEgPSByZXMuZGF0YS5zb3J0KChhLCBiKSA9PiBuZXcgRGF0ZShiLnRpbWUpIC0gbmV3IERhdGUoYS50aW1lKSlcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKCduZXdEYXRh5pe26Ze05o6S5bqPJyxuZXdEYXRhKVxyXG5cdFx0XHRcdFx0Ly8g5LiL6L295YmN6LCD55So6L+Z5Liq5pa55rOVLS0t5aSE55CG6Zeq6YCA546w6LGhXHJcblx0XHRcdFx0XHRGVFAuZnRwQ2hhbmdlV29ya2luZ0RpcmVjdG9yeShcIi9cIiwgcmVkID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coJ+S4i+i9veWJjeiwg+eUqOi/meS4quaWueazlScsIHJlZClcclxuXHRcdFx0XHRcdFx0cmVkLmRhdGEgPyB0aGlzLmZ0cERvd25sb2FkU2luZ2xlRmlsZShuZXdEYXRhWzBdKSA6ICcnXHJcblx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLnJlYWRlckZpbGVGbGFnID0gZmFsc2VcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0Ly8gRlRQLeWNleS4quaWh+S7tuS4i+i9veiHs+WuieWNk+aculxyXG5cdFx0ZnRwRG93bmxvYWRTaW5nbGVGaWxlKGRhdGEpIHtcclxuXHRcdFx0Ly/vvIhcIuimgeS4i+i9veWIsOacrOWcsOaWh+S7tuWkueeahOe7neWvuei3r+W+hFwiLCBcIuimgeS4i+i9veeahOacjeWKoeWZqOS4iuaWh+S7tueahOe7neWvuei3r+W+hFwi77yMIOWbnuiwg++8iVxyXG5cdFx0XHQvL+Wbnuiwg1xyXG5cdFx0XHQvL3t0eXBlIDogZG93bmxvYWQsIGRhdGEgOiB7c3RhdHVzIDogdHJ1ZS9mYWxzZSwgbmFtZSA6IFwi5LiL6L2955qE5paH5Lu25ZCNXCIsIGVycnByIDogXCLlpLHotKXljp/lm6BcIn19XHJcblx0XHRcdC8vIHZhciBpbnB1dEZpbGUgPSBwbHVzLmlvLmNvbnZlcnRMb2NhbEZpbGVTeXN0ZW1VUkwoJy9zdGF0aWMnKVxyXG5cdFx0XHRjb25zb2xlLmxvZygnYW5kcm9pZEZpbGVEb2NQYXRoJywgdGhpcy5hbmRyb2lkRmlsZURvY1BhdGgpXHJcblx0XHRcdC8vICcvc2RhMS9kZXZpY2VOZXdGaWxlLzIwMjQwOTE4LzIwMjQwOTE4bG9nby5wbmcnXHJcblx0XHRcdEZUUC5mdHBEb3dubG9hZFNpbmdsZUZpbGUodGhpcy5hbmRyb2lkRmlsZURvY1BhdGgsIGRhdGEubmFtZSwgcmVzID0+IHtcclxuXHRcdFx0XHRjb25zb2xlLmxvZygn5Y2V5Liq5paH5Lu25LiL6L296Iez5a6J5Y2T5py6LS3miJDlip8nLCByZXMpXHJcblx0XHRcdFx0aWYgKHJlcy50eXBlID09PSAnZG93bmxvYWQnICYmIHJlcy5kYXRhLnN0YXR1cykge1xyXG5cdFx0XHRcdFx0dGhpcy5yZWFkZXJGaWxlKGRhdGEpXHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHRoaXMucmVhZGVyRmlsZUZsYWcgPSBmYWxzZVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHQvLyDojrflj5blronljZPmnLrkuLTml7bmlofku7bkuK3nmoTlhoXlrrlcclxuXHRcdHJlYWRlckZpbGUoZGF0YVBhcmFtcykge1xyXG5cdFx0XHRsZXQgdGVtcEZpbGVQYXRoID0gdGhpcy5hbmRyb2lkRmlsZURvY1BhdGggKyBkYXRhUGFyYW1zLmZpbGVOYW1lXHJcblx0XHRcdGNvbnNvbGUubG9nKCfojrflj5blronljZPmnLrkuLTml7bmlofku7bkuK3nmoTlhoXlrrknLCB0ZW1wRmlsZVBhdGgpO1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZygn6I635Y+W5a6J5Y2T5py65Li05pe25paH5Lu25Lit55qE5YaF5a65MScscGx1cy5pby5yZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMKTtcclxuXHRcdFx0cGx1cy5pby5yZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMKHRlbXBGaWxlUGF0aCwgKGVudHJ5KSA9PiB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coXCLmlofku7bmnaHnm646XCIsIGVudHJ5KTtcclxuXHRcdFx0XHRlbnRyeS5maWxlKChmaWxlKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZygnZmlsZScsIGZpbGUpO1xyXG5cdFx0XHRcdFx0dmFyIHJlYWRlciA9IG5ldyBwbHVzLmlvLkZpbGVSZWFkZXIoKVxyXG5cdFx0XHRcdFx0cmVhZGVyLm9ubG9hZGVuZCA9IChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coXCLmlofku7blhoXlrrk6XCIsIHJlcy50YXJnZXQucmVzdWx0KTsgLy8g6L6T5Ye65paH5Lu25YaF5a65XHJcblx0XHRcdFx0XHRcdHZhciBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1hbmQ6ICdleGFtaW5lRGF0YScsXHJcblx0XHRcdFx0XHRcdFx0Y29tbWFuZFR5cGU6J0ZUUCcsXHJcblx0XHRcdFx0XHRcdFx0ZGF0YTogeyBcclxuXHRcdFx0XHRcdFx0XHRcdHN0YXRlOiAwLFxyXG5cdFx0XHRcdFx0XHRcdFx0bWVzc2FnZTogSlNPTi5zdHJpbmdpZnkocmVzLnRhcmdldC5yZXN1bHQpLFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmlsZU5hbWU6IGRhdGFQYXJhbXMuZmlsZU5hbWVcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0dGhpcy53ZWJWaWV3VG9INShkYXRhKVxyXG5cdFx0XHRcdFx0XHR0aGlzLnJlYWRlckZpbGVGbGFnID0gZmFsc2VcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRyZWFkZXIucmVhZEFzVGV4dChmaWxlKTsgLy8g5qC55o2u5paH5Lu257G75Z6L6YCJ5oup6K+75Y+W5pa55byP77yM5L6L5aaC77yacmVhZEFzVGV4dFxyXG5cdFx0XHRcdH0sIChlcnJvcikgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihcIuivu+WPluaWh+S7tuWksei0pTpcIiwgZXJyb3IpO1xyXG5cdFx0XHRcdFx0dGhpcy5yZWFkZXJGaWxlRmxhZyA9IGZhbHNlXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0sIChlcnJvcikgPT4ge1xyXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoXCLojrflj5bmlofku7bot6/lvoTlpLHotKU6XCIsIGVycm9yKTtcclxuXHRcdFx0XHR0aGlzLnJlYWRlckZpbGVGbGFnID0gZmFsc2VcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHQvLyDliKDpmaTlronljZPmnLrkuIvovb3kuIvmnaXnmoTmlofku7ZcclxuXHRcdGRlbGV0ZUFwcERvd25Mb2FkRmlsZShkYXRhKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKCcg5Yig6Zmk5a6J5Y2T5py65LiL6L295LiL5p2l55qE5paH5Lu2LS1kYXRhJywgZGF0YSk7XHJcblx0XHRcdC8vIOiOt+WPluWuieWNk+acuui3r+W+hOWcsOWdgFxyXG5cdFx0XHR2YXIgZGVsZXRlQXBwRmlsZU5hbWUgPSB0aGlzLmFuZHJvaWRGaWxlRG9jUGF0aCArIGRhdGEuZmlsZU5hbWVcclxuXHRcdFx0cGx1cy5pby5yZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMKGRlbGV0ZUFwcEZpbGVOYW1lLCAoZW50cnkpID0+IHtcclxuXHRcdFx0XHQvLyDosIPnlKggcmVtb3ZlIOaWueazleWIoOmZpOaWh+S7tlxyXG5cdFx0XHRcdGVudHJ5LnJlbW92ZSgoKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZygn5paH5Lu25Yig6Zmk5oiQ5YqfJyk7XHJcblx0XHRcdFx0fSwgKGVycm9yKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZygn5paH5Lu25Yig6Zmk5aSx6LSlOiAnICsgZXJyb3IubWVzc2FnZSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0sIChlcnJvcikgPT4ge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKCfml6Dms5Xop6PmnpDmlofku7bot6/lvoQ6ICcgKyBlcnJvci5tZXNzYWdlKTtcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHQvLyDliKDpmaRGVFDmnI3liqHlmajmlofku7ZcclxuXHRcdGZ0cERlbGV0ZVNlcnZlckZpbGVzKGRhdGEpIHtcclxuXHRcdFx0Ly8oXCLopoHliKDpmaTnmoTmlofku7blpLnmiJbmlofku7blnLDlnYBcIiwg5Zue6LCDKVxyXG5cdFx0XHQvL+Wbnuiwg1xyXG5cdFx0XHQvL3t0eXBlIDogZGVsZXRlLCBkYXRhIDoge21zZyA6IFwi5Yig6Zmk5paH5Lu2L+WIoOmZpOaWh+S7tuWkuShwc++8muWFiOWIoOmZpOaWh+S7tuWkuemHjOmdoueahOaWh+S7tuWGjeWIoOaWh+S7tuWkuSlcIiwgZGF0YSA6IFwi5paH5Lu25ZCNXCIsIHN0YXR1cyA6IHRydWUvZmFsc2UsIGVycm9yIDogXCLlpLHotKXljp/lm6BcIn19XHJcblx0XHRcdGxldCBuYW1lID0gdGhpcy5jZ0NvbmZpZ0luZm8uZGF0YS5pbnNwZWN0aW9uRGlyICsgICcvJyArIGRhdGEuZmlsZU5hbWVcclxuXHRcdFx0Y29uc29sZS5sb2coJ+WIoOmZpEZUUOacjeWKoeWZqOaWh+S7ticsbmFtZSk7XHJcblx0XHRcdGRhdGEgJiYgZGF0YS5maWxlTmFtZSA/IEZUUC5mdHBEZWxldGVTZXJ2ZXJGaWxlcyhuYW1lLCByZXMgPT4ge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKCdGVFDmnI3liqHlmajmlofku7bliKDpmaTmiJDlip8nLCBuYW1lLHJlcylcclxuXHRcdFx0XHQvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0XHQvLyBcdHRoaXMuZnRwVXBsb2FkRmlsZShkYXRhKVxyXG5cdFx0XHRcdC8vIH0sIDMwMDApXHJcblx0XHRcdH0pIDogJydcclxuXHRcdH0sXHJcblx0XHQvLyDliKDpmaRGVFBT5paH5Lu25aS55LiL6Z2i5paH5Lu25L+d55WZ5paH5Lu25aS5XHJcblx0XHRmdHBEZWxldGVTZXJ2ZXJGaWxlc1dpdGhvdXREaXJlY3RvcnkoKSB7XHJcblx0XHRcdC8v5ZCM5LiK77yM5LiN5Lya5Yig6Zmk5oyH5a6a5paH5Lu25aS5XHJcblx0XHRcdEZUUC5mdHBEZWxldGVTZXJ2ZXJGaWxlc1dpdGhvdXREaXJlY3RvcnkodGhpcy5jZ0NvbmZpZ0luZm8uZGF0YS5pbnNwZWN0aW9uRGlyLCByZXMgPT4ge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKHJlcylcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHQvLyBGVFAt5LiK5Lyg5paH5Lu26IezRlRQXHJcblx0XHQvLyBmdHBVcGxvYWRGaWxlKGRhdGEpIHtcclxuXHRcdC8vIFx0dmFyIGlucHV0RmlsZSA9IHBsdXMuaW8uY29udmVydExvY2FsRmlsZVN5c3RlbVVSTCgnL3N0YXRpYy9sb2dvLnBuZycpXHJcblx0XHQvLyBcdGNvbnNvbGUubG9nKCdpbnB1dEZpbGXmlofku7YnLCBpbnB1dEZpbGUpO1xyXG5cdFx0Ly8gXHRGVFAuZnRwVXBsb2FkRmlsZShpbnB1dEZpbGUsICcvc2RhMS9kZXZpY2VOZXdGaWxlJywgcmVzID0+IHtcclxuXHRcdC8vIFx0XHRjb25zb2xlLmxvZygn5paH5Lu2LeS4iuS8oOaIkOWKnycsIHJlcylcclxuXHRcdC8vIFx0XHRpZiAocmVzLmRhdGEubXNnID09PSAn5LiK5Lyg5a6M5oiQJykge1xyXG5cdFx0Ly8gXHRcdFx0Y29uc29sZS5sb2coJzAwMDAwMDAwMDAwMDAwMDAwMDAwJyk7XHJcblx0XHQvLyBcdFx0XHR0aGlzLmZ0cExvb3BTZXJ2ZXJQYXRoKClcclxuXHRcdC8vIFx0XHRcdGNvbnNvbGUubG9nKHRoaXMuY291bnQrKyk7XHJcblx0XHQvLyBcdFx0fVxyXG5cdFx0Ly8gXHR9KVxyXG5cdFx0Ly8gfSxcclxuXHRcdC8vIEZUUOaWreW8gOi/nuaOpVxyXG5cdFx0Y2xvc2VGVFBDb25uZWN0KCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZygnRlRQ5pat5byA6L+e5o6l77yB77yB77yB77yBJyk7XHJcblx0XHRcdC8v5aSx6LSl5pyJ5Zue6LCD77yM5oiQ5Yqf5rKh5pyJ5Zue6LCDXHJcblx0XHRcdEZUUC5jbG9zZUZUUENvbm5lY3QocmVzID0+IHtcclxuXHRcdFx0XHRjb25zb2xlLmxvZygnRlRQ5pat5byA6L+e5o6lJyxyZXMpXHJcblx0XHRcdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLnNldEludGVyVGltZUZUUClcclxuXHRcdFx0XHQvLyB0aGlzLmlzQ29ubmVjdCA9IGZhbHNlXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0Ly8gdW5pYXBwIOS8oOWPgue7mSB2dWXpobXpnaItLS3liJjngb/mtYvor5VcclxuXHRcdHdlYlZpZXdUb0g1KHJlcykge1xyXG5cdFx0XHRsZXQgY3VycmVudFdlYnZpZXcgPSB0aGlzLiRzY29wZS4kZ2V0QXBwV2VidmlldygpO1xyXG5cdFx0XHRsZXQgd3YgPSBjdXJyZW50V2Vidmlldy5jaGlsZHJlbigpWzBdO1xyXG5cdFx0XHRjb25zb2xlLmxvZygndW5pYXBwIOS8oOWPgue7mSB2dWXpobXpnaInKTtcclxuXHRcdFx0d3YuZXZhbEpTKGBnZXRWdWVNZXNzYWdlKCR7SlNPTi5zdHJpbmdpZnkocmVzKX0pYCk7XHJcblx0XHR9LFxyXG5cdH1cclxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///14\n"); +eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar FTP = uni.requireNativePlugin('Zhimi-FTP-Module');\nvar _default = {\n data: function data() {\n return {\n remoteUrl: '',\n androidFileDocPath: plus.io.convertLocalFileSystemURL('_doc'),\n ftpLogicDeceteName: '/sda1/logicDelete',\n count: 0,\n isConnect: false,\n setInterTimeFTP: null,\n readerFileFlag: false\n };\n },\n onShow: function onShow() {\n // console.log('showshowshow');\n },\n onHide: function onHide() {\n // console.log('hidehidehide');\n },\n onLoad: function onLoad() {},\n destroyed: function destroyed() {\n __f__(\"log\", '销毁页面', \" at mixins/linkFTP.js:22\");\n clearInterval(this.setInterTimeFTP);\n },\n methods: {\n // 流程: \n // ftp连接 ---> 获取ftp目录文件夹名和文件名 ---> 下载文件夹中的文件到安卓机 ---> 临时地址转url传输给H5展示 \n // ---> H5页面关联确认完,在安卓机中找到关联确认后的文件上传到FTP的另外一个文件夹(新建文件夹) ---> 删除安卓机临时文件 ---> 删除FTP之前文件夹中关联确认后的文件\n // 测试是否掉线的方法\n ftpSendNoOp: function ftpSendNoOp() {\n var _this = this;\n clearInterval(this.setInterTimeFTP);\n this.setInterTimeFTP = setInterval(function () {\n FTP.ftpSendNoOp(function (res) {\n if (res.data === true) {\n __f__(\"log\", '测试是否掉线回调-未掉线', res, \" at mixins/linkFTP.js:36\");\n __f__(\"log\", 'readerFileFlag', _this.readerFileFlag, \" at mixins/linkFTP.js:37\");\n !_this.readerFileFlag ? FTP.ftpChangeWorkingDirectory(\"/\", function (red) {\n __f__(\"log\", '下载前调用这个方法', red, \" at mixins/linkFTP.js:39\");\n var data = {\n command: 'ftpStatusChanged',\n data: {\n state: 0,\n message: 'FTP已连接'\n }\n };\n _this.webViewToH5Ftp(data);\n red.data ? _this.ftpLoopServerPath() : '';\n }) : '';\n } else {\n __f__(\"log\", '测试是否掉线回调-已掉线', res, \" at mixins/linkFTP.js:51\");\n var data = {\n command: 'ftpStatusChanged',\n data: {\n state: 0,\n message: 'FTP已掉线'\n }\n };\n _this.webViewToH5Ftp(data);\n _this.connectFtpServer();\n }\n });\n }, 5000);\n },\n // FTP连接\n connectFtpServer: function connectFtpServer() {\n var _this2 = this;\n //(“服务地址”, 端口, “用户名”,”密码“, 回调 )\n //回调 \n //成功 {type : \"connect\", data : {data : \"相应状态码:200 连接是否成功:true 连接是否有效:true}} \n //失败 {type : \"connect\", data : {\"error\" : \"失败原因\"}}\n // \"192.168.50.1\", 21, \"hmgc\", \"hmgc\"\n // \"192.168.50.131\", 21, \"hmftp\", \"hmftp\"\n var cgConfigInfoData = this.cgConfigInfo.data;\n __f__(\"log\", 'cgConfigInfoData', cgConfigInfoData, \" at mixins/linkFTP.js:74\");\n // '192.168.50.1', 21, 'hmgc', 'hmgc', \"UTF-8\"\n // cgConfigInfoData.ftpHostName, 21, cgConfigInfoData.ftpUserName, cgConfigInfoData.ftpPassWord,\n FTP.connectFtpServer('192.168.50.1', 21, 'hmgc', 'hmgc', \"UTF-8\", function (res) {\n __f__(\"log\", 'FTP连接', res, \" at mixins/linkFTP.js:78\");\n if (res.type === 'connect' && res.data.connect === true) {\n var data = {\n command: 'ftpStatusChanged',\n data: {\n state: 0,\n message: 'FTP已连接'\n }\n };\n _this2.webViewToH5Ftp(data);\n\n // 获取FTP服务器目录前调用这个方法---处理闪退现象\n FTP.ftpChangeWorkingDirectory(\"/\", function (red) {\n __f__(\"log\", '下载前调用这个方法', red, \" at mixins/linkFTP.js:91\");\n red.data ? _this2.ftpLoopServerPath() : '';\n });\n } else if (res.type === 'connect' && res.data.connect === false) {\n // this.isConnect = false\n var data = {\n command: 'ftpStatusChanged',\n data: {\n state: 0,\n message: 'FTP连接失败'\n }\n };\n _this2.webViewToH5Ftp(data);\n }\n });\n },\n // 获取FTP服务器目录\n ftpLoopServerPath: function ftpLoopServerPath() {\n var _this3 = this;\n var name = this.cgConfigInfo.data.inspectionDir;\n __f__(\"log\", 'name', name, \" at mixins/linkFTP.js:110\");\n\n // 阀值--循环时控制暂时不走获取FTP服务器目录\n this.readerFileFlag = true;\n // 1是文件夹 0是文件\n //(\"获取服务器目录下文件,空白为根目录\", 回调)\n //回调 \n //成功 {type : getFileInfo, data : [{name : \"地址\", size : 文件大小单位字节, time : “修改时间”}]}\n //失败 {type : \"error\", data : \"失败原因\"}\n FTP.ftpLoopServerPath(name, function (res) {\n __f__(\"log\", '获取FTP服务器目录res', res, \" at mixins/linkFTP.js:120\");\n if (res.type === 'getFileInfo' && res.data.length > 0) {\n var newData = res.data.sort(function (a, b) {\n return new Date(b.time) - new Date(a.time);\n });\n __f__(\"log\", 'newData时间排序', newData, \" at mixins/linkFTP.js:123\");\n // 下载前调用这个方法---处理闪退现象\n FTP.ftpChangeWorkingDirectory(\"/\", function (red) {\n __f__(\"log\", '下载前调用这个方法', red, \" at mixins/linkFTP.js:126\");\n red.data ? _this3.ftpDownloadSingleFile(newData[0]) : '';\n });\n } else {\n _this3.readerFileFlag = false;\n }\n });\n },\n // FTP-单个文件下载至安卓机\n ftpDownloadSingleFile: function ftpDownloadSingleFile(data) {\n var _this4 = this;\n //(\"要下载到本地文件夹的绝对路径\", \"要下载的服务器上文件的绝对路径\", 回调)\n //回调\n //{type : download, data : {status : true/false, name : \"下载的文件名\", errpr : \"失败原因\"}}\n // var inputFile = plus.io.convertLocalFileSystemURL('/static')\n __f__(\"log\", 'androidFileDocPath', this.androidFileDocPath, \" at mixins/linkFTP.js:140\");\n // '/sda1/deviceNewFile/20240918/20240918logo.png'\n FTP.ftpDownloadSingleFile(this.androidFileDocPath, data.name, function (res) {\n __f__(\"log\", '单个文件下载至安卓机--成功', res, \" at mixins/linkFTP.js:143\");\n if (res.type === 'download' && res.data.status) {\n _this4.readerFile(data);\n } else {\n _this4.readerFileFlag = false;\n }\n });\n },\n // 获取安卓机临时文件中的内容\n readerFile: function readerFile(dataParams) {\n var _this5 = this;\n var tempFilePath = this.androidFileDocPath + dataParams.fileName;\n __f__(\"log\", '获取安卓机临时文件中的内容', tempFilePath, \" at mixins/linkFTP.js:154\");\n // console.log('获取安卓机临时文件中的内容1',plus.io.resolveLocalFileSystemURL);\n plus.io.resolveLocalFileSystemURL(tempFilePath, function (entry) {\n __f__(\"log\", \"文件条目:\", entry, \" at mixins/linkFTP.js:157\");\n entry.file(function (file) {\n __f__(\"log\", 'file', file, \" at mixins/linkFTP.js:159\");\n var reader = new plus.io.FileReader();\n reader.onloadend = function (res) {\n __f__(\"log\", \"文件内容:\", res.target.result, \" at mixins/linkFTP.js:162\"); // 输出文件内容\n var data = {\n command: 'examineData',\n commandType: 'FTP',\n data: {\n state: 0,\n message: JSON.stringify(res.target.result),\n fileName: dataParams.fileName\n }\n };\n _this5.webViewToH5Ftp(data);\n _this5.readerFileFlag = false;\n };\n reader.readAsText(file); // 根据文件类型选择读取方式,例如:readAsText\n }, function (error) {\n __f__(\"error\", \"读取文件失败:\", error, \" at mixins/linkFTP.js:177\");\n _this5.readerFileFlag = false;\n });\n }, function (error) {\n __f__(\"error\", \"获取文件路径失败:\", error, \" at mixins/linkFTP.js:181\");\n _this5.readerFileFlag = false;\n });\n },\n // 删除安卓机下载下来的文件\n deleteAppDownLoadFile: function deleteAppDownLoadFile(data) {\n __f__(\"log\", ' 删除安卓机下载下来的文件--data', data, \" at mixins/linkFTP.js:187\");\n // 获取安卓机路径地址\n var deleteAppFileName = this.androidFileDocPath + data.fileName;\n plus.io.resolveLocalFileSystemURL(deleteAppFileName, function (entry) {\n // 调用 remove 方法删除文件\n entry.remove(function () {\n __f__(\"log\", '文件删除成功', \" at mixins/linkFTP.js:193\");\n }, function (error) {\n __f__(\"log\", '文件删除失败: ' + error.message, \" at mixins/linkFTP.js:195\");\n });\n }, function (error) {\n __f__(\"log\", '无法解析文件路径: ' + error.message, \" at mixins/linkFTP.js:198\");\n });\n },\n // 删除FTP服务器文件\n ftpDeleteServerFiles: function ftpDeleteServerFiles(data) {\n //(\"要删除的文件夹或文件地址\", 回调)\n //回调\n //{type : delete, data : {msg : \"删除文件/删除文件夹(ps:先删除文件夹里面的文件再删文件夹)\", data : \"文件名\", status : true/false, error : \"失败原因\"}}\n var name = this.cgConfigInfo.data.inspectionDir + '/' + data.fileName;\n __f__(\"log\", '删除FTP服务器文件', name, \" at mixins/linkFTP.js:207\");\n data && data.fileName ? FTP.ftpDeleteServerFiles(name, function (res) {\n __f__(\"log\", 'FTP服务器文件删除成功', name, res, \" at mixins/linkFTP.js:209\");\n // setTimeout(() => {\n // \tthis.ftpUploadFile(data)\n // }, 3000)\n }) : '';\n },\n // 删除FTPS文件夹下面文件保留文件夹\n ftpDeleteServerFilesWithoutDirectory: function ftpDeleteServerFilesWithoutDirectory() {\n //同上,不会删除指定文件夹\n FTP.ftpDeleteServerFilesWithoutDirectory(this.cgConfigInfo.data.inspectionDir, function (res) {\n __f__(\"log\", res, \" at mixins/linkFTP.js:219\");\n });\n },\n // FTP-上传文件至FTP\n // ftpUploadFile(data) {\n // \tvar inputFile = plus.io.convertLocalFileSystemURL('/static/logo.png')\n // \tconsole.log('inputFile文件', inputFile);\n // \tFTP.ftpUploadFile(inputFile, '/sda1/deviceNewFile', res => {\n // \t\tconsole.log('文件-上传成功', res)\n // \t\tif (res.data.msg === '上传完成') {\n // \t\t\tconsole.log('00000000000000000000');\n // \t\t\tthis.ftpLoopServerPath()\n // \t\t\tconsole.log(this.count++);\n // \t\t}\n // \t})\n // },\n // FTP断开连接\n closeFTPConnect: function closeFTPConnect() {\n var _this6 = this;\n __f__(\"log\", 'FTP断开连接!!!!', \" at mixins/linkFTP.js:237\");\n //失败有回调,成功没有回调\n FTP.closeFTPConnect(function (res) {\n __f__(\"log\", 'FTP断开连接', res, \" at mixins/linkFTP.js:240\");\n clearInterval(_this6.setInterTimeFTP);\n // this.isConnect = false\n });\n },\n // uniapp 传参给 vue页面---刘灿测试\n webViewToH5Ftp: function webViewToH5Ftp(res) {\n var currentWebview = this.$scope.$getAppWebview();\n var wv = currentWebview.children()[0];\n __f__(\"log\", 'uniapp 传参给 vue页面', \" at mixins/linkFTP.js:249\");\n wv.evalJS(\"getVueMessage(\".concat(JSON.stringify(res), \")\"));\n }\n }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 12)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vbWl4aW5zL2xpbmtGVFAuanMiXSwibmFtZXMiOlsiRlRQIiwidW5pIiwicmVxdWlyZU5hdGl2ZVBsdWdpbiIsImRhdGEiLCJyZW1vdGVVcmwiLCJhbmRyb2lkRmlsZURvY1BhdGgiLCJwbHVzIiwiaW8iLCJjb252ZXJ0TG9jYWxGaWxlU3lzdGVtVVJMIiwiZnRwTG9naWNEZWNldGVOYW1lIiwiY291bnQiLCJpc0Nvbm5lY3QiLCJzZXRJbnRlclRpbWVGVFAiLCJyZWFkZXJGaWxlRmxhZyIsIm9uU2hvdyIsIm9uSGlkZSIsIm9uTG9hZCIsImRlc3Ryb3llZCIsImNsZWFySW50ZXJ2YWwiLCJtZXRob2RzIiwiZnRwU2VuZE5vT3AiLCJzZXRJbnRlcnZhbCIsInJlcyIsImZ0cENoYW5nZVdvcmtpbmdEaXJlY3RvcnkiLCJyZWQiLCJjb21tYW5kIiwic3RhdGUiLCJtZXNzYWdlIiwid2ViVmlld1RvSDVGdHAiLCJmdHBMb29wU2VydmVyUGF0aCIsImNvbm5lY3RGdHBTZXJ2ZXIiLCJjZ0NvbmZpZ0luZm9EYXRhIiwiY2dDb25maWdJbmZvIiwidHlwZSIsImNvbm5lY3QiLCJuYW1lIiwiaW5zcGVjdGlvbkRpciIsImxlbmd0aCIsIm5ld0RhdGEiLCJzb3J0IiwiYSIsImIiLCJEYXRlIiwidGltZSIsImZ0cERvd25sb2FkU2luZ2xlRmlsZSIsInN0YXR1cyIsInJlYWRlckZpbGUiLCJkYXRhUGFyYW1zIiwidGVtcEZpbGVQYXRoIiwiZmlsZU5hbWUiLCJyZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMIiwiZW50cnkiLCJmaWxlIiwicmVhZGVyIiwiRmlsZVJlYWRlciIsIm9ubG9hZGVuZCIsInRhcmdldCIsInJlc3VsdCIsImNvbW1hbmRUeXBlIiwiSlNPTiIsInN0cmluZ2lmeSIsInJlYWRBc1RleHQiLCJlcnJvciIsImRlbGV0ZUFwcERvd25Mb2FkRmlsZSIsImRlbGV0ZUFwcEZpbGVOYW1lIiwicmVtb3ZlIiwiZnRwRGVsZXRlU2VydmVyRmlsZXMiLCJmdHBEZWxldGVTZXJ2ZXJGaWxlc1dpdGhvdXREaXJlY3RvcnkiLCJjbG9zZUZUUENvbm5lY3QiLCJjdXJyZW50V2VidmlldyIsIiRzY29wZSIsIiRnZXRBcHBXZWJ2aWV3Iiwid3YiLCJjaGlsZHJlbiIsImV2YWxKUyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBSUEsR0FBRyxHQUFHQyxHQUFHLENBQUNDLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDO0FBQUMsZUFDdkM7RUFDZEMsSUFBSSxrQkFBRztJQUNOLE9BQU87TUFDTkMsU0FBUyxFQUFFLEVBQUU7TUFDYkMsa0JBQWtCLEVBQUVDLElBQUksQ0FBQ0MsRUFBRSxDQUFDQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUM7TUFDN0RDLGtCQUFrQixFQUFFLG1CQUFtQjtNQUN2Q0MsS0FBSyxFQUFFLENBQUM7TUFDUkMsU0FBUyxFQUFFLEtBQUs7TUFDaEJDLGVBQWUsRUFBRSxJQUFJO01BQ3JCQyxjQUFjLEVBQUM7SUFDaEIsQ0FBQztFQUNGLENBQUM7RUFDREMsTUFBTSxvQkFBRztJQUNSO0VBQUEsQ0FDQTtFQUNEQyxNQUFNLG9CQUFHO0lBQ1I7RUFBQSxDQUNBO0VBQ0RDLE1BQU0sb0JBQUcsQ0FBQyxDQUFDO0VBQ1hDLFNBQVMsdUJBQUc7SUFDWCxhQUFZLE1BQU07SUFDbEJDLGFBQWEsQ0FBQyxJQUFJLENBQUNOLGVBQWUsQ0FBQztFQUNwQyxDQUFDO0VBQ0RPLE9BQU8sRUFBRTtJQUNSO0lBQ0E7SUFDQTtJQUVBO0lBQ0FDLFdBQVcseUJBQUc7TUFBQTtNQUNiRixhQUFhLENBQUMsSUFBSSxDQUFDTixlQUFlLENBQUM7TUFDbkMsSUFBSSxDQUFDQSxlQUFlLEdBQUdTLFdBQVcsQ0FBQyxZQUFNO1FBQ3hDckIsR0FBRyxDQUFDb0IsV0FBVyxDQUFDLFVBQUFFLEdBQUcsRUFBSTtVQUN0QixJQUFJQSxHQUFHLENBQUNuQixJQUFJLEtBQUssSUFBSSxFQUFFO1lBQ3RCLGFBQVksY0FBYyxFQUFDbUIsR0FBRztZQUM5QixhQUFZLGdCQUFn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Q0FBQ0MsU0FBUyxDQUFDdEMsR0FBRyxDQUFDLE9BQUk7SUFDbkQ7RUFDRDtBQUNELENBQUM7QUFBQSwyQiIsImZpbGUiOiIxNC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBGVFAgPSB1bmkucmVxdWlyZU5hdGl2ZVBsdWdpbignWmhpbWktRlRQLU1vZHVsZScpO1xyXG5leHBvcnQgZGVmYXVsdCB7XHJcblx0ZGF0YSgpIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHJlbW90ZVVybDogJycsXHJcblx0XHRcdGFuZHJvaWRGaWxlRG9jUGF0aDogcGx1cy5pby5jb252ZXJ0TG9jYWxGaWxlU3lzdGVtVVJMKCdfZG9jJyksXHJcblx0XHRcdGZ0cExvZ2ljRGVjZXRlTmFtZTogJy9zZGExL2xvZ2ljRGVsZXRlJyxcclxuXHRcdFx0Y291bnQ6IDAsXHJcblx0XHRcdGlzQ29ubmVjdDogZmFsc2UsXHJcblx0XHRcdHNldEludGVyVGltZUZUUDogbnVsbCxcclxuXHRcdFx0cmVhZGVyRmlsZUZsYWc6ZmFsc2VcclxuXHRcdH1cclxuXHR9LFxyXG5cdG9uU2hvdygpIHtcclxuXHRcdC8vIGNvbnNvbGUubG9nKCdzaG93c2hvd3Nob3cnKTtcclxuXHR9LFxyXG5cdG9uSGlkZSgpIHtcclxuXHRcdC8vIGNvbnNvbGUubG9nKCdoaWRlaGlkZWhpZGUnKTtcclxuXHR9LFxyXG5cdG9uTG9hZCgpIHt9LFxyXG5cdGRlc3Ryb3llZCgpIHtcclxuXHRcdGNvbnNvbGUubG9nKCfplIDmr4HpobXpnaInKTtcclxuXHRcdGNsZWFySW50ZXJ2YWwodGhpcy5zZXRJbnRlclRpbWVGVFApXHJcblx0fSxcclxuXHRtZXRob2RzOiB7XHJcblx0XHQvLyDmtYHnqIs6IFxyXG5cdFx0Ly8gZnRw6L+e5o6lIC0tLT4g6I635Y+WZnRw55uu5b2V5paH5Lu25aS55ZCN5ZKM5paH5Lu25ZCNIC0tLT4g5LiL6L295paH5Lu25aS55Lit55qE5paH5Lu25Yiw5a6J5Y2T5py6IC0tLT4g5Li05pe25Zyw5Z2A6L2sdXJs5Lyg6L6T57uZSDXlsZXnpLogIFxyXG5cdFx0Ly8gLS0tPiBINemhtemdouWFs+iBlOehruiupOWujO+8jOWcqOWuieWNk+acuuS4reaJvuWIsOWFs+iBlOehruiupOWQjueahOaWh+S7tuS4iuS8oOWIsEZUUOeahOWPpuWkluS4gOS4quaWh+S7tuWkue+8iOaWsOW7uuaWh+S7tuWkue+8iSAtLS0+IOWIoOmZpOWuieWNk+acuuS4tOaXtuaWh+S7tiAgLS0tPiDliKDpmaRGVFDkuYvliY3mlofku7blpLnkuK3lhbPogZTnoa7orqTlkI7nmoTmlofku7ZcclxuXHRcdFxyXG5cdFx0Ly8g5rWL6K+V5piv5ZCm5o6J57q/55qE5pa55rOVXHJcblx0XHRmdHBTZW5kTm9PcCgpIHtcclxuXHRcdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLnNldEludGVyVGltZUZUUClcclxuXHRcdFx0dGhpcy5zZXRJbnRlclRpbWVGVFAgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcblx0XHRcdFx0RlRQLmZ0cFNlbmROb09wKHJlcyA9PiB7XHJcblx0XHRcdFx0XHRpZiAocmVzLmRhdGEgPT09IHRydWUpIHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coJ+a1i+ivleaYr+WQpuaOiee6v+Wbnuiwgy3mnKrmjonnur8nLHJlcyk7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKCdyZWFkZXJGaWxlRmxhZycsdGhpcy5yZWFkZXJGaWxlRmxhZyk7XHJcblx0XHRcdFx0XHRcdCF0aGlzLnJlYWRlckZpbGVGbGFnID8gRlRQLmZ0cENoYW5nZVdvcmtpbmdEaXJlY3RvcnkoXCIvXCIsIHJlZCA9PiB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coJ+S4i+i9veWJjeiwg+eUqOi/meS4quaWueazlScsIHJlZClcclxuXHRcdFx0XHRcdFx0XHR2YXIgZGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbW1hbmQ6ICdmdHBTdGF0dXNDaGFuZ2VkJyxcclxuXHRcdFx0XHRcdFx0XHRcdGRhdGE6IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0c3RhdGU6IDAsXHJcblx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2U6ICdGVFDlt7Lov57mjqUnXHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMud2ViVmlld1RvSDVGdHAoZGF0YSlcclxuXHRcdFx0XHRcdFx0XHRyZWQuZGF0YSA/IHRoaXMuZnRwTG9vcFNlcnZlclBhdGgoKSA6ICcnXHJcblx0XHRcdFx0XHRcdH0pIDogJycgXHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZygn5rWL6K+V5piv5ZCm5o6J57q/5Zue6LCDLeW3suaOiee6vycsIHJlcyk7XHJcblx0XHRcdFx0XHRcdHZhciBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1hbmQ6ICdmdHBTdGF0dXNDaGFuZ2VkJyxcclxuXHRcdFx0XHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHRcdFx0XHRzdGF0ZTogMCxcclxuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2U6ICdGVFDlt7Lmjonnur8nXHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdHRoaXMud2ViVmlld1RvSDVGdHAoZGF0YSlcclxuXHRcdFx0XHRcdFx0dGhpcy5jb25uZWN0RnRwU2VydmVyKClcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9LCA1MDAwKVxyXG5cdFx0fSxcclxuXHRcdC8vIEZUUOi/nuaOpVxyXG5cdFx0Y29ubmVjdEZ0cFNlcnZlcigpIHtcclxuXHRcdFx0Ly/vvIjigJzmnI3liqHlnLDlnYDigJ3vvIwg56uv5Y+j77yMIOKAnOeUqOaIt+WQjeKAne+8jOKAneWvhueggeKAnO+8jCDlm57osIMg77yJXHJcblx0XHRcdC8v5Zue6LCDIFxyXG5cdFx0XHQvL+aIkOWKnyB7dHlwZSA6IFwiY29ubmVjdFwiLCBkYXRhIDoge2RhdGEgOiBcIuebuOW6lOeKtuaAgeegge+8mjIwMCAg6L+e5o6l5piv5ZCm5oiQ5Yqf77yadHJ1ZSAg6L+e5o6l5piv5ZCm5pyJ5pWI77yadHJ1ZX19IFxyXG5cdFx0XHQvL+Wksei0pSB7dHlwZSA6IFwiY29ubmVjdFwiLCBkYXRhIDoge1wiZXJyb3JcIiA6IFwi5aSx6LSl5Y6f5ZugXCJ9fVxyXG5cdFx0XHQvLyBcIjE5Mi4xNjguNTAuMVwiLCAyMSwgXCJobWdjXCIsIFwiaG1nY1wiXHJcblx0XHRcdC8vIFwiMTkyLjE2OC41MC4xMzFcIiwgMjEsIFwiaG1mdHBcIiwgXCJobWZ0cFwiXHJcblx0XHRcdGxldCBjZ0NvbmZpZ0luZm9EYXRhID0gdGhpcy5jZ0NvbmZpZ0luZm8uZGF0YVxyXG5cdFx0XHRjb25zb2xlLmxvZygnY2dDb25maWdJbmZvRGF0YScsY2dDb25maWdJbmZvRGF0YSk7XHJcblx0XHRcdC8vICcxOTIuMTY4LjUwLjEnLCAyMSwgJ2htZ2MnLCAnaG1nYycsIFwiVVRGLThcIlxyXG5cdFx0XHQvLyBjZ0NvbmZpZ0luZm9EYXRhLmZ0cEhvc3ROYW1lLCAyMSwgY2dDb25maWdJbmZvRGF0YS5mdHBVc2VyTmFtZSwgY2dDb25maWdJbmZvRGF0YS5mdHBQYXNzV29yZCxcclxuXHRcdFx0RlRQLmNvbm5lY3RGdHBTZXJ2ZXIoICcxOTIuMTY4LjUwLjEnLCAyMSwgJ2htZ2MnLCAnaG1nYycsIFwiVVRGLThcIiwgcmVzID0+IHtcclxuXHRcdFx0XHRjb25zb2xlLmxvZygnRlRQ6L+e5o6lJywgcmVzKVxyXG5cdFx0XHRcdGlmIChyZXMudHlwZSA9PT0gJ2Nvbm5lY3QnICYmIHJlcy5kYXRhLmNvbm5lY3QgPT09IHRydWUpIHtcclxuXHRcdFx0XHRcdHZhciBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRjb21tYW5kOiAnZnRwU3RhdHVzQ2hhbmdlZCcsXHJcblx0XHRcdFx0XHRcdGRhdGE6IHtcclxuXHRcdFx0XHRcdFx0XHRzdGF0ZTogMCxcclxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlOiAnRlRQ5bey6L+e5o6lJ1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLndlYlZpZXdUb0g1RnRwKGRhdGEpXHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdC8vIOiOt+WPlkZUUOacjeWKoeWZqOebruW9leWJjeiwg+eUqOi/meS4quaWueazlS0tLeWkhOeQhumXqumAgOeOsOixoVxyXG5cdFx0XHRcdFx0RlRQLmZ0cENoYW5nZVdvcmtpbmdEaXJlY3RvcnkoXCIvXCIsIHJlZCA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKCfkuIvovb3liY3osIPnlKjov5nkuKrmlrnms5UnLCByZWQpXHJcblx0XHRcdFx0XHRcdHJlZC5kYXRhID8gdGhpcy5mdHBMb29wU2VydmVyUGF0aCgpIDogJydcclxuXHRcdFx0XHRcdH0pIFxyXG5cdFx0XHRcdH0gZWxzZSBpZiAocmVzLnR5cGUgPT09ICdjb25uZWN0JyAmJiByZXMuZGF0YS5jb25uZWN0ID09PSBmYWxzZSkge1xyXG5cdFx0XHRcdFx0Ly8gdGhpcy5pc0Nvbm5lY3QgPSBmYWxzZVxyXG5cdFx0XHRcdFx0dmFyIGRhdGEgPSB7XHJcblx0XHRcdFx0XHRcdGNvbW1hbmQ6ICdmdHBTdGF0dXNDaGFuZ2VkJyxcclxuXHRcdFx0XHRcdFx0ZGF0YToge1xyXG5cdFx0XHRcdFx0XHRcdHN0YXRlOiAwLFxyXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2U6ICdGVFDov57mjqXlpLHotKUnXHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRoaXMud2ViVmlld1RvSDVGdHAoZGF0YSlcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0Ly8g6I635Y+WRlRQ5pyN5Yqh5Zmo55uu5b2VXHJcblx0XHRmdHBMb29wU2VydmVyUGF0aCgpIHsgXHJcblx0XHRcdGxldCBuYW1lID0gdGhpcy5jZ0NvbmZpZ0luZm8uZGF0YS5pbnNwZWN0aW9uRGlyXHJcblx0XHRcdGNvbnNvbGUubG9nKCduYW1lJyxuYW1lKTtcclxuXHRcdFx0XHJcblx0XHRcdC8vIOmYgOWAvC0t5b6q546v5pe25o6n5Yi25pqC5pe25LiN6LWw6I635Y+WRlRQ5pyN5Yqh5Zmo55uu5b2VXHJcblx0XHRcdHRoaXMucmVhZGVyRmlsZUZsYWcgPSB0cnVlXHJcblx0XHRcdC8vIDHmmK/mlofku7blpLkgMOaYr+aWh+S7tlxyXG5cdFx0XHQvLyhcIuiOt+WPluacjeWKoeWZqOebruW9leS4i+aWh+S7tu+8jOepuueZveS4uuagueebruW9lVwi77yMIOWbnuiwgylcclxuXHRcdFx0Ly/lm57osIMgXHJcblx0XHRcdC8v5oiQ5YqfIHt0eXBlIDogZ2V0RmlsZUluZm8sIGRhdGEgOiBbe25hbWUgOiBcIuWcsOWdgFwiLCBzaXplIDog5paH5Lu25aSn5bCP5Y2V5L2N5a2X6IqCLCB0aW1lIDog4oCc5L+u5pS55pe26Ze04oCdfV19XHJcblx0XHRcdC8v5aSx6LSlIHt0eXBlIDogXCJlcnJvclwiLCBkYXRhIDogXCLlpLHotKXljp/lm6BcIn1cclxuXHRcdFx0RlRQLmZ0cExvb3BTZXJ2ZXJQYXRoKG5hbWUsIHJlcyA9PiB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coJ+iOt+WPlkZUUOacjeWKoeWZqOebruW9lXJlcycsIHJlcyk7XHJcblx0XHRcdFx0aWYocmVzLnR5cGUgPT09ICdnZXRGaWxlSW5mbycgJiYgcmVzLmRhdGEubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0bGV0IG5ld0RhdGEgPSByZXMuZGF0YS5zb3J0KChhLCBiKSA9PiBuZXcgRGF0ZShiLnRpbWUpIC0gbmV3IERhdGUoYS50aW1lKSlcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKCduZXdEYXRh5pe26Ze05o6S5bqPJyxuZXdEYXRhKVxyXG5cdFx0XHRcdFx0Ly8g5LiL6L295YmN6LCD55So6L+Z5Liq5pa55rOVLS0t5aSE55CG6Zeq6YCA546w6LGhXHJcblx0XHRcdFx0XHRGVFAuZnRwQ2hhbmdlV29ya2luZ0RpcmVjdG9yeShcIi9cIiwgcmVkID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coJ+S4i+i9veWJjeiwg+eUqOi/meS4quaWueazlScsIHJlZClcclxuXHRcdFx0XHRcdFx0cmVkLmRhdGEgPyB0aGlzLmZ0cERvd25sb2FkU2luZ2xlRmlsZShuZXdEYXRhWzBdKSA6ICcnXHJcblx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLnJlYWRlckZpbGVGbGFnID0gZmFsc2VcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0Ly8gRlRQLeWNleS4quaWh+S7tuS4i+i9veiHs+WuieWNk+aculxyXG5cdFx0ZnRwRG93bmxvYWRTaW5nbGVGaWxlKGRhdGEpIHtcclxuXHRcdFx0Ly/vvIhcIuimgeS4i+i9veWIsOacrOWcsOaWh+S7tuWkueeahOe7neWvuei3r+W+hFwiLCBcIuimgeS4i+i9veeahOacjeWKoeWZqOS4iuaWh+S7tueahOe7neWvuei3r+W+hFwi77yMIOWbnuiwg++8iVxyXG5cdFx0XHQvL+Wbnuiwg1xyXG5cdFx0XHQvL3t0eXBlIDogZG93bmxvYWQsIGRhdGEgOiB7c3RhdHVzIDogdHJ1ZS9mYWxzZSwgbmFtZSA6IFwi5LiL6L2955qE5paH5Lu25ZCNXCIsIGVycnByIDogXCLlpLHotKXljp/lm6BcIn19XHJcblx0XHRcdC8vIHZhciBpbnB1dEZpbGUgPSBwbHVzLmlvLmNvbnZlcnRMb2NhbEZpbGVTeXN0ZW1VUkwoJy9zdGF0aWMnKVxyXG5cdFx0XHRjb25zb2xlLmxvZygnYW5kcm9pZEZpbGVEb2NQYXRoJywgdGhpcy5hbmRyb2lkRmlsZURvY1BhdGgpXHJcblx0XHRcdC8vICcvc2RhMS9kZXZpY2VOZXdGaWxlLzIwMjQwOTE4LzIwMjQwOTE4bG9nby5wbmcnXHJcblx0XHRcdEZUUC5mdHBEb3dubG9hZFNpbmdsZUZpbGUodGhpcy5hbmRyb2lkRmlsZURvY1BhdGgsIGRhdGEubmFtZSwgcmVzID0+IHtcclxuXHRcdFx0XHRjb25zb2xlLmxvZygn5Y2V5Liq5paH5Lu25LiL6L296Iez5a6J5Y2T5py6LS3miJDlip8nLCByZXMpXHJcblx0XHRcdFx0aWYgKHJlcy50eXBlID09PSAnZG93bmxvYWQnICYmIHJlcy5kYXRhLnN0YXR1cykge1xyXG5cdFx0XHRcdFx0dGhpcy5yZWFkZXJGaWxlKGRhdGEpXHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHRoaXMucmVhZGVyRmlsZUZsYWcgPSBmYWxzZVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHQvLyDojrflj5blronljZPmnLrkuLTml7bmlofku7bkuK3nmoTlhoXlrrlcclxuXHRcdHJlYWRlckZpbGUoZGF0YVBhcmFtcykge1xyXG5cdFx0XHRsZXQgdGVtcEZpbGVQYXRoID0gdGhpcy5hbmRyb2lkRmlsZURvY1BhdGggKyBkYXRhUGFyYW1zLmZpbGVOYW1lXHJcblx0XHRcdGNvbnNvbGUubG9nKCfojrflj5blronljZPmnLrkuLTml7bmlofku7bkuK3nmoTlhoXlrrknLCB0ZW1wRmlsZVBhdGgpO1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZygn6I635Y+W5a6J5Y2T5py65Li05pe25paH5Lu25Lit55qE5YaF5a65MScscGx1cy5pby5yZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMKTtcclxuXHRcdFx0cGx1cy5pby5yZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMKHRlbXBGaWxlUGF0aCwgKGVudHJ5KSA9PiB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coXCLmlofku7bmnaHnm646XCIsIGVudHJ5KTtcclxuXHRcdFx0XHRlbnRyeS5maWxlKChmaWxlKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZygnZmlsZScsIGZpbGUpO1xyXG5cdFx0XHRcdFx0dmFyIHJlYWRlciA9IG5ldyBwbHVzLmlvLkZpbGVSZWFkZXIoKVxyXG5cdFx0XHRcdFx0cmVhZGVyLm9ubG9hZGVuZCA9IChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coXCLmlofku7blhoXlrrk6XCIsIHJlcy50YXJnZXQucmVzdWx0KTsgLy8g6L6T5Ye65paH5Lu25YaF5a65XHJcblx0XHRcdFx0XHRcdHZhciBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1hbmQ6ICdleGFtaW5lRGF0YScsXHJcblx0XHRcdFx0XHRcdFx0Y29tbWFuZFR5cGU6J0ZUUCcsXHJcblx0XHRcdFx0XHRcdFx0ZGF0YTogeyBcclxuXHRcdFx0XHRcdFx0XHRcdHN0YXRlOiAwLFxyXG5cdFx0XHRcdFx0XHRcdFx0bWVzc2FnZTogSlNPTi5zdHJpbmdpZnkocmVzLnRhcmdldC5yZXN1bHQpLFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmlsZU5hbWU6IGRhdGFQYXJhbXMuZmlsZU5hbWVcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0dGhpcy53ZWJWaWV3VG9INUZ0cChkYXRhKVxyXG5cdFx0XHRcdFx0XHR0aGlzLnJlYWRlckZpbGVGbGFnID0gZmFsc2VcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRyZWFkZXIucmVhZEFzVGV4dChmaWxlKTsgLy8g5qC55o2u5paH5Lu257G75Z6L6YCJ5oup6K+75Y+W5pa55byP77yM5L6L5aaC77yacmVhZEFzVGV4dFxyXG5cdFx0XHRcdH0sIChlcnJvcikgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihcIuivu+WPluaWh+S7tuWksei0pTpcIiwgZXJyb3IpO1xyXG5cdFx0XHRcdFx0dGhpcy5yZWFkZXJGaWxlRmxhZyA9IGZhbHNlXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0sIChlcnJvcikgPT4ge1xyXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoXCLojrflj5bmlofku7bot6/lvoTlpLHotKU6XCIsIGVycm9yKTtcclxuXHRcdFx0XHR0aGlzLnJlYWRlckZpbGVGbGFnID0gZmFsc2VcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHQvLyDliKDpmaTlronljZPmnLrkuIvovb3kuIvmnaXnmoTmlofku7ZcclxuXHRcdGRlbGV0ZUFwcERvd25Mb2FkRmlsZShkYXRhKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKCcg5Yig6Zmk5a6J5Y2T5py65LiL6L295LiL5p2l55qE5paH5Lu2LS1kYXRhJywgZGF0YSk7XHJcblx0XHRcdC8vIOiOt+WPluWuieWNk+acuui3r+W+hOWcsOWdgFxyXG5cdFx0XHR2YXIgZGVsZXRlQXBwRmlsZU5hbWUgPSB0aGlzLmFuZHJvaWRGaWxlRG9jUGF0aCArIGRhdGEuZmlsZU5hbWVcclxuXHRcdFx0cGx1cy5pby5yZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMKGRlbGV0ZUFwcEZpbGVOYW1lLCAoZW50cnkpID0+IHtcclxuXHRcdFx0XHQvLyDosIPnlKggcmVtb3ZlIOaWueazleWIoOmZpOaWh+S7tlxyXG5cdFx0XHRcdGVudHJ5LnJlbW92ZSgoKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZygn5paH5Lu25Yig6Zmk5oiQ5YqfJyk7XHJcblx0XHRcdFx0fSwgKGVycm9yKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZygn5paH5Lu25Yig6Zmk5aSx6LSlOiAnICsgZXJyb3IubWVzc2FnZSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0sIChlcnJvcikgPT4ge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKCfml6Dms5Xop6PmnpDmlofku7bot6/lvoQ6ICcgKyBlcnJvci5tZXNzYWdlKTtcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHQvLyDliKDpmaRGVFDmnI3liqHlmajmlofku7ZcclxuXHRcdGZ0cERlbGV0ZVNlcnZlckZpbGVzKGRhdGEpIHtcclxuXHRcdFx0Ly8oXCLopoHliKDpmaTnmoTmlofku7blpLnmiJbmlofku7blnLDlnYBcIiwg5Zue6LCDKVxyXG5cdFx0XHQvL+Wbnuiwg1xyXG5cdFx0XHQvL3t0eXBlIDogZGVsZXRlLCBkYXRhIDoge21zZyA6IFwi5Yig6Zmk5paH5Lu2L+WIoOmZpOaWh+S7tuWkuShwc++8muWFiOWIoOmZpOaWh+S7tuWkuemHjOmdoueahOaWh+S7tuWGjeWIoOaWh+S7tuWkuSlcIiwgZGF0YSA6IFwi5paH5Lu25ZCNXCIsIHN0YXR1cyA6IHRydWUvZmFsc2UsIGVycm9yIDogXCLlpLHotKXljp/lm6BcIn19XHJcblx0XHRcdGxldCBuYW1lID0gdGhpcy5jZ0NvbmZpZ0luZm8uZGF0YS5pbnNwZWN0aW9uRGlyICsgICcvJyArIGRhdGEuZmlsZU5hbWVcclxuXHRcdFx0Y29uc29sZS5sb2coJ+WIoOmZpEZUUOacjeWKoeWZqOaWh+S7ticsbmFtZSk7XHJcblx0XHRcdGRhdGEgJiYgZGF0YS5maWxlTmFtZSA/IEZUUC5mdHBEZWxldGVTZXJ2ZXJGaWxlcyhuYW1lLCByZXMgPT4ge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKCdGVFDmnI3liqHlmajmlofku7bliKDpmaTmiJDlip8nLCBuYW1lLHJlcylcclxuXHRcdFx0XHQvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0XHQvLyBcdHRoaXMuZnRwVXBsb2FkRmlsZShkYXRhKVxyXG5cdFx0XHRcdC8vIH0sIDMwMDApXHJcblx0XHRcdH0pIDogJydcclxuXHRcdH0sXHJcblx0XHQvLyDliKDpmaRGVFBT5paH5Lu25aS55LiL6Z2i5paH5Lu25L+d55WZ5paH5Lu25aS5XHJcblx0XHRmdHBEZWxldGVTZXJ2ZXJGaWxlc1dpdGhvdXREaXJlY3RvcnkoKSB7XHJcblx0XHRcdC8v5ZCM5LiK77yM5LiN5Lya5Yig6Zmk5oyH5a6a5paH5Lu25aS5XHJcblx0XHRcdEZUUC5mdHBEZWxldGVTZXJ2ZXJGaWxlc1dpdGhvdXREaXJlY3RvcnkodGhpcy5jZ0NvbmZpZ0luZm8uZGF0YS5pbnNwZWN0aW9uRGlyLCByZXMgPT4ge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKHJlcylcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHQvLyBGVFAt5LiK5Lyg5paH5Lu26IezRlRQXHJcblx0XHQvLyBmdHBVcGxvYWRGaWxlKGRhdGEpIHtcclxuXHRcdC8vIFx0dmFyIGlucHV0RmlsZSA9IHBsdXMuaW8uY29udmVydExvY2FsRmlsZVN5c3RlbVVSTCgnL3N0YXRpYy9sb2dvLnBuZycpXHJcblx0XHQvLyBcdGNvbnNvbGUubG9nKCdpbnB1dEZpbGXmlofku7YnLCBpbnB1dEZpbGUpO1xyXG5cdFx0Ly8gXHRGVFAuZnRwVXBsb2FkRmlsZShpbnB1dEZpbGUsICcvc2RhMS9kZXZpY2VOZXdGaWxlJywgcmVzID0+IHtcclxuXHRcdC8vIFx0XHRjb25zb2xlLmxvZygn5paH5Lu2LeS4iuS8oOaIkOWKnycsIHJlcylcclxuXHRcdC8vIFx0XHRpZiAocmVzLmRhdGEubXNnID09PSAn5LiK5Lyg5a6M5oiQJykge1xyXG5cdFx0Ly8gXHRcdFx0Y29uc29sZS5sb2coJzAwMDAwMDAwMDAwMDAwMDAwMDAwJyk7XHJcblx0XHQvLyBcdFx0XHR0aGlzLmZ0cExvb3BTZXJ2ZXJQYXRoKClcclxuXHRcdC8vIFx0XHRcdGNvbnNvbGUubG9nKHRoaXMuY291bnQrKyk7XHJcblx0XHQvLyBcdFx0fVxyXG5cdFx0Ly8gXHR9KVxyXG5cdFx0Ly8gfSxcclxuXHRcdC8vIEZUUOaWreW8gOi/nuaOpVxyXG5cdFx0Y2xvc2VGVFBDb25uZWN0KCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZygnRlRQ5pat5byA6L+e5o6l77yB77yB77yB77yBJyk7XHJcblx0XHRcdC8v5aSx6LSl5pyJ5Zue6LCD77yM5oiQ5Yqf5rKh5pyJ5Zue6LCDXHJcblx0XHRcdEZUUC5jbG9zZUZUUENvbm5lY3QocmVzID0+IHtcclxuXHRcdFx0XHRjb25zb2xlLmxvZygnRlRQ5pat5byA6L+e5o6lJyxyZXMpXHJcblx0XHRcdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLnNldEludGVyVGltZUZUUClcclxuXHRcdFx0XHQvLyB0aGlzLmlzQ29ubmVjdCA9IGZhbHNlXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0Ly8gdW5pYXBwIOS8oOWPgue7mSB2dWXpobXpnaItLS3liJjngb/mtYvor5VcclxuXHRcdHdlYlZpZXdUb0g1RnRwKHJlcykge1xyXG5cdFx0XHRsZXQgY3VycmVudFdlYnZpZXcgPSB0aGlzLiRzY29wZS4kZ2V0QXBwV2VidmlldygpO1xyXG5cdFx0XHRsZXQgd3YgPSBjdXJyZW50V2Vidmlldy5jaGlsZHJlbigpWzBdO1xyXG5cdFx0XHRjb25zb2xlLmxvZygndW5pYXBwIOS8oOWPgue7mSB2dWXpobXpnaInKTtcclxuXHRcdFx0d3YuZXZhbEpTKGBnZXRWdWVNZXNzYWdlKCR7SlNPTi5zdHJpbmdpZnkocmVzKX0pYCk7XHJcblx0XHR9LFxyXG5cdH1cclxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///14\n"); /***/ }), /* 15 */ @@ -365,7 +365,7 @@ eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nObject.defineProperty(exp /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _default = {\n data: function data() {\n return {\n onBluetoothDeviceFoundcustom: '',\n deviceId: '',\n stringToSend: '$D50504010300#',\n // D50604010000\n setInterTimeBEL: null\n };\n },\n onLoad: function onLoad() {},\n methods: {\n // 打开GPS定位!!!打开GPS定位新买的荣耀才能触发uni.onBluetoothDeviceFound监听!!!!\n checkAndOpenGPS: function checkAndOpenGPS() {\n var Context = plus.android.importClass(\"android.content.Context\");\n var LocationManager = plus.android.importClass(\"android.location.LocationManager\");\n var main = plus.android.runtimeMainActivity();\n\n // 获取系统的 LocationManager 服务\n var locationManager = main.getSystemService(Context.LOCATION_SERVICE);\n\n // 检查 GPS 是否开启\n var isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);\n var isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); // 检查网络定位服务\n // 位置服务已开启,不进行任何操作\n if (isGPSEnabled || isNetworkEnabled) {\n __f__(\"log\", \"位置服务已开启\", \" at mixins/linkBEL.js:26\");\n this.openBluetoothAdapter();\n } else {\n __f__(\"log\", \"位置服务未开启,跳转到设置页面\", \" at mixins/linkBEL.js:29\");\n // 位置服务未开启,引导用户打开 GPS 设置页面\n var Intent = plus.android.importClass(\"android.content.Intent\");\n var Settings = plus.android.importClass(\"android.provider.Settings\");\n var intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);\n main.startActivity(intent);\n\n // 提示用户手动开启 GPS\n plus.nativeUI.alert(\"请手动开启GPS!\");\n }\n },\n // 初始化蓝牙\n openBluetoothAdapter: function openBluetoothAdapter() {\n var that = this;\n that.closeBluetoothAdapter();\n __f__(\"log\", '初始化蓝牙', \" at mixins/linkBEL.js:44\");\n uni.openBluetoothAdapter({\n success: function success(res) {\n __f__(\"log\", res, \" at mixins/linkBEL.js:47\");\n var data = {\n command: 'belConnectFeedback',\n commandType: 'BEL',\n data: {\n state: 0,\n message: '初始化成功'\n }\n };\n that.webViewToH5(data);\n that.startBluetoothDevicesDiscovery();\n },\n fail: function fail(res) {\n __f__(\"log\", '初始化蓝牙失败', res, \" at mixins/linkBEL.js:60\");\n var data = {\n command: 'belConnectFeedback',\n commandType: 'BEL',\n data: {\n state: 0,\n message: '初始化失败'\n }\n };\n that.webViewToH5(data);\n setTimeout(function () {\n that.openBluetoothAdapter();\n }, 5000);\n }\n });\n },\n // 开始搜索蓝牙设备\n startBluetoothDevicesDiscovery: function startBluetoothDevicesDiscovery() {\n var that = this;\n __f__(\"log\", '开始搜索蓝牙设备', \" at mixins/linkBEL.js:79\");\n var data = {\n command: 'belConnectFeedback',\n commandType: 'BEL',\n data: {\n state: 0,\n message: '设备搜索中'\n }\n };\n that.webViewToH5(data);\n uni.startBluetoothDevicesDiscovery({\n success: function success(res) {\n __f__(\"log\", res, \" at mixins/linkBEL.js:91\");\n that.onBluetoothDeviceFound();\n }\n });\n },\n // 监听设备发现\n onBluetoothDeviceFound: function onBluetoothDeviceFound() {\n var that = this;\n this.onBluetoothDeviceFoundcustom = uni.onBluetoothDeviceFound(function (res) {\n __f__(\"log\", '监听设备发现', res.devices[0], \" at mixins/linkBEL.js:100\");\n if (res.devices[0].name === 'ACP60205') {\n __f__(\"log\", 'hello,厉害,找到啦,啦啦啦~~~', \" at mixins/linkBEL.js:102\");\n // 连接成功后,停止设备搜索\n uni.stopBluetoothDevicesDiscovery();\n that.deviceId = res.devices[0].deviceId; // 获取设备ID\n that.createBLEConnection();\n }\n });\n },\n // 连接到设备\n createBLEConnection: function createBLEConnection() {\n var that = this;\n __f__(\"log\", '连接到设备that.deviceId', that.deviceId, \" at mixins/linkBEL.js:113\");\n uni.createBLEConnection({\n deviceId: that.deviceId,\n success: function success() {\n __f__(\"log\", '连接成功', \" at mixins/linkBEL.js:117\");\n var data = {\n command: 'belConnectFeedback',\n commandType: 'BEL',\n data: {\n state: 0,\n message: '已连接'\n }\n };\n that.webViewToH5(data);\n that.belStatus();\n },\n fail: function fail(err) {\n __f__(\"error\", '连接失败', err, \" at mixins/linkBEL.js:130\");\n var data = {\n command: 'belConnectFeedback',\n commandType: 'BEL',\n data: {\n state: 0,\n message: '连接失败'\n }\n };\n that.webViewToH5(data);\n setTimeout(function () {\n that.openBluetoothAdapter();\n }, 5000);\n }\n });\n },\n // 检测BEL是否连接状态\n belStatus: function belStatus() {\n var _this = this;\n clearInterval(this.setInterTimeBEL);\n this.setInterTimeBEL = setInterval(function () {\n _this.getConnectedBluetoothDevices();\n }, 5000);\n },\n // 检查设备连接状态\n getConnectedBluetoothDevices: function getConnectedBluetoothDevices() {\n var that = this;\n uni.getConnectedBluetoothDevices({\n success: function success(res) {\n __f__(\"log\", '当前已连接的设备:', res.devices, \" at mixins/linkBEL.js:158\");\n if (res.devices.length <= 0) {\n that.openBluetoothAdapter();\n clearInterval(that.setInterTimeBEL);\n var data = {\n command: 'belConnectFeedback',\n commandType: 'BEL',\n data: {\n state: 0,\n message: '连接失败'\n }\n };\n that.webViewToH5(data);\n } else {\n var data = {\n command: 'belConnectFeedback',\n commandType: 'BEL',\n data: {\n state: 0,\n message: '已连接'\n }\n };\n that.webViewToH5(data);\n }\n },\n fail: function fail(err) {\n __f__(\"log\", '获取已连接设备失败:', err, \" at mixins/linkBEL.js:184\");\n that.openBluetoothAdapter();\n }\n });\n },\n // 发送蓝牙内容\n writeBLECharacteristicValue: function writeBLECharacteristicValue(belvalue) {\n __f__(\"log\", '发送蓝牙内容', belvalue, \" at mixins/linkBEL.js:191\");\n var that = this;\n // 要发送的字符串\n // $D50504030231#\n // D5---5米距离\n // 06---\n var dataToSend = that.stringToByteArray(belvalue);\n __f__(\"log\", ' dataToSend.buffer', dataToSend.buffer, \" at mixins/linkBEL.js:198\");\n uni.writeBLECharacteristicValue({\n deviceId: that.deviceId,\n // 设备ID\n serviceId: '0000ffe0-0000-1000-8000-00805f9b34fb',\n // 服务ID\n characteristicId: '0000ffe1-0000-1000-8000-00805f9b34fb',\n // 特征ID\n value: dataToSend.buffer,\n writeType: 'write',\n success: function success() {\n __f__(\"log\", '发送内容成功', \" at mixins/linkBEL.js:206\");\n var data = {\n command: 'sendBelDataFeedback',\n commandType: 'BEL',\n data: {\n state: 0,\n message: '发送内容成功'\n }\n };\n that.webViewToH5(data);\n },\n fail: function fail(err) {\n __f__(\"error\", '发送内容失败', err, \" at mixins/linkBEL.js:218\");\n var data = {\n command: 'sendBelDataFeedback',\n commandType: 'BEL',\n data: {\n state: 0,\n message: '发送内容失败'\n }\n };\n that.webViewToH5(data);\n }\n });\n },\n // 处理发送的内容\n stringToByteArray: function stringToByteArray(str) {\n var byteArray = new Uint8Array(str.length);\n for (var i = 0; i < str.length; i++) {\n byteArray[i] = str.charCodeAt(i);\n }\n return byteArray;\n },\n // 断开蓝牙\n closeBluetoothAdapter: function closeBluetoothAdapter(title) {\n var that = this;\n uni.closeBluetoothAdapter({\n success: function success() {\n __f__(\"log\", '蓝牙适配器关闭成功', \" at mixins/linkBEL.js:244\");\n var data = {\n command: title === 'belClose' ? 'belCloseFeedback' : 'belConnectFeedback',\n commandType: 'BEL',\n data: {\n state: 0,\n message: title === 'belClose' ? '已断开' : '未连接'\n }\n };\n clearInterval(that.setInterTimeBEL);\n uni.stopBluetoothDevicesDiscovery();\n that.webViewToH5(data);\n },\n fail: function fail(err) {\n __f__(\"log\", '关闭蓝牙适配器失败: ', err, \" at mixins/linkBEL.js:258\");\n }\n });\n },\n // uniapp 传参给 vue页面---刘灿测试\n webViewToH5: function webViewToH5(res) {\n var currentWebview = this.$scope.$getAppWebview();\n var wv = currentWebview.children()[0];\n __f__(\"log\", 'uniapp 传参给 vue页面', \" at mixins/linkBEL.js:266\");\n wv.evalJS(\"getVueMessage(\".concat(JSON.stringify(res), \")\"));\n }\n }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 12)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vbWl4aW5zL2xpbmtCRUwuanMiXSwibmFtZXMiOlsiZGF0YSIsIm9uQmx1ZXRvb3RoRGV2aWNlRm91bmRjdXN0b20iLCJkZXZpY2VJZCIsInN0cmluZ1RvU2VuZCIsInNldEludGVyVGltZUJFTCIsIm9uTG9hZCIsIm1ldGhvZHMiLCJjaGVja0FuZE9wZW5HUFMiLCJDb250ZXh0IiwicGx1cyIsImFuZHJvaWQiLCJpbXBvcnRDbGFzcyIsIkxvY2F0aW9uTWFuYWdlciIsIm1haW4iLCJydW50aW1lTWFpbkFjdGl2aXR5IiwibG9jYXRpb25NYW5hZ2VyIiwiZ2V0U3lzdGVtU2VydmljZSIsIkxPQ0FUSU9OX1NFUlZJQ0UiLCJpc0dQU0VuYWJsZWQiLCJpc1Byb3ZpZGVyRW5hYmxlZCIsIkdQU19QUk9WSURFUiIsImlzTmV0d29ya0VuYWJsZWQiLCJORVRXT1JLX1BST1ZJREVSIiwib3BlbkJsdWV0b290aEFkYXB0ZXIiLCJJbnRlbnQiLCJTZXR0aW5ncyIsImludGVudCIsIkFDVElPTl9MT0NBVElPTl9TT1VSQ0VfU0VUVElOR1MiLCJzdGFydEFjdGl2aXR5IiwibmF0aXZlVUkiLCJhbGVydCIsInRoYXQiLCJjbG9zZUJsdWV0b290aEFkYXB0ZXIiLCJ1bmkiLCJzdWNjZXNzIiwicmVzIiwiY29tbWFuZCIsImNvbW1hbmRUeXBlIiwic3RhdGUiLCJtZXNzYWdlIiwid2ViVmlld1RvSDUiLCJzdGFydEJsdWV0b290aERldmljZXNEaXNjb3ZlcnkiLCJmYWlsIiwic2V0VGltZW91dCIsIm9uQmx1ZXRvb3RoRGV2aWNlRm91bmQiLCJkZXZpY2VzIiwibmFtZSIsInN0b3BCbHVldG9vdGhEZXZpY2VzRGlzY292ZXJ5IiwiY3JlYXRlQkxFQ29ubmVjdGlvbiIsImJlbFN0YXR1cyIsImVyciIsImNsZWFySW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsImdldENvbm5lY3RlZEJsdWV0b290aERldmljZXMiLCJsZW5ndGgiLCJ3cml0ZUJMRUNoYXJhY3RlcmlzdGljVmFsdWUiLCJiZWx2YWx1ZSIsImRhdGFUb1NlbmQiLCJzdHJpbmdUb0J5dGVBcnJheSIsImJ1ZmZlciIsInNlcnZpY2VJZCIsImNoYXJhY3RlcmlzdGljSWQiLCJ2YWx1ZSIsIndyaXRlVHlwZSIsInN0ciIsImJ5dGVBcnJheSIsIlVpbnQ4QXJyYXkiLCJpIiwiY2hhckNvZGVBdCIsInRpdGxlIiwiY3VycmVudFdlYnZpZXciLCIkc2NvcGUiLCIkZ2V0QXBwV2VidmlldyIsInd2IiwiY2hpbGRyZW4iLCJldmFsSlMiLCJKU09OIiwic3RyaW5naWZ5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7ZUFBZTtFQUNkQSxJQUFJLGtCQUFHO0lBQ04sT0FBTztNQUNOQyw0QkFBNEIsRUFBRSxFQUFFO01BQ2hDQyxRQUFRLEVBQUUsRUFBRTtNQUNaQyxZQUFZLEVBQUUsZ0JBQWdCO01BQUU7TUFDaENDLGVBQWUsRUFBRTtJQUNsQixDQUFDO0VBQ0YsQ0FBQztFQUNEQyxNQUFNLG9CQUFHLENBQUMsQ0FBQztFQUNYQyxPQUFPLEVBQUU7SUFDUjtJQUNBQyxlQUFlLDZCQUFHO01BQ2pCLElBQUlDLE9BQU8sR0FBR0MsSUFBSSxDQUFDQyxPQUFPLENBQUNDLFdBQVcsQ0FBQyx5QkFBeUIsQ0FBQztNQUNqRSxJQUFJQyxlQUFlLEdBQUdILElBQUksQ0FBQ0MsT0FBTyxDQUFDQyxXQUFXLENBQUMsa0NBQWtDLENBQUM7TUFDbEYsSUFBSUUsSUFBSSxHQUFHSixJQUFJLENBQUNDLE9BQU8sQ0FBQ0ksbUJBQW1CLEVBQUU7O01BRTdDO01BQ0EsSUFBSUMsZUFBZSxHQUFHRixJQUFJLENBQUNHLGdCQUFnQixDQUFDUixPQUFPLENBQUNTLGdCQUFnQixDQUFDOztNQUVyRTtNQUNBLElBQUlDLFlBQVksR0FBR0gsZUFBZSxDQUFDSSxpQkFBaUIsQ0FBQ1AsZUFBZSxDQUFDUSxZQUFZLENBQUM7TUFDbEYsSUFBSUMsZ0JBQWdCLEdBQUdOLGVBQWUsQ0FBQ0ksaUJBQWlCLENBQUNQLGVBQWUsQ0FBQ1UsZ0JBQWdCLENBQUMs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YUFBWSxhQUFhLEVBQUVBLEdBQUc7UUFDL0I7TUFDRCxDQUFDLENBQUM7SUFDSCxDQUFDO0lBQ0Q7SUFDQVYsV0FBVyx1QkFBQ0wsR0FBRyxFQUFFO01BQ2hCLElBQUltQyxjQUFjLEdBQUcsSUFBSSxDQUFDQyxNQUFNLENBQUNDLGNBQWMsRUFBRTtNQUNqRCxJQUFJQyxFQUFFLEdBQUdILGNBQWMsQ0FBQ0ksUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ3JDLGFBQVksa0JBQWtCO01BQzlCRCxFQUFFLENBQUNFLE1BQU0seUJBQWtCQyxJQUFJLENBQUNDLFNBQVMsQ0FBQzFDLEdBQUcsQ0FBQyxPQUFJO0lBQ25EO0VBQ0Q7QUFDRCxDQUFDO0FBQUEsMkIiLCJmaWxlIjoiMTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCB7XHJcblx0ZGF0YSgpIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdG9uQmx1ZXRvb3RoRGV2aWNlRm91bmRjdXN0b206ICcnLFxyXG5cdFx0XHRkZXZpY2VJZDogJycsXHJcblx0XHRcdHN0cmluZ1RvU2VuZDogJyRENTA1MDQwMTAzMDAjJywgLy8gRDUwNjA0MDEwMDAwXHJcblx0XHRcdHNldEludGVyVGltZUJFTDogbnVsbFxyXG5cdFx0fVxyXG5cdH0sXHJcblx0b25Mb2FkKCkge30sXHJcblx0bWV0aG9kczoge1xyXG5cdFx0Ly8g5omT5byAR1BT5a6a5L2N77yB77yB77yB5omT5byAR1BT5a6a5L2N5paw5Lmw55qE6I2j6ICA5omN6IO96Kem5Y+RdW5pLm9uQmx1ZXRvb3RoRGV2aWNlRm91bmTnm5HlkKzvvIHvvIHvvIHvvIFcclxuXHRcdGNoZWNrQW5kT3BlbkdQUygpIHtcclxuXHRcdFx0dmFyIENvbnRleHQgPSBwbHVzLmFuZHJvaWQuaW1wb3J0Q2xhc3MoXCJhbmRyb2lkLmNvbnRlbnQuQ29udGV4dFwiKTtcclxuXHRcdFx0dmFyIExvY2F0aW9uTWFuYWdlciA9IHBsdXMuYW5kcm9pZC5pbXBvcnRDbGFzcyhcImFuZHJvaWQubG9jYXRpb24uTG9jYXRpb25NYW5hZ2VyXCIpO1xyXG5cdFx0XHR2YXIgbWFpbiA9IHBsdXMuYW5kcm9pZC5ydW50aW1lTWFpbkFjdGl2aXR5KCk7XHJcblxyXG5cdFx0XHQvLyDojrflj5bns7vnu5/nmoQgTG9jYXRpb25NYW5hZ2VyIOacjeWKoVxyXG5cdFx0XHR2YXIgbG9jYXRpb25NYW5hZ2VyID0gbWFpbi5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuTE9DQVRJT05fU0VSVklDRSk7XHJcblxyXG5cdFx0XHQvLyDmo4Dmn6UgR1BTIOaYr+WQpuW8gOWQr1xyXG5cdFx0XHR2YXIgaXNHUFNFbmFibGVkID0gbG9jYXRpb25NYW5hZ2VyLmlzUHJvdmlkZXJFbmFibGVkKExvY2F0aW9uTWFuYWdlci5HUFNfUFJPVklERVIpO1xyXG5cdFx0XHR2YXIgaXNOZXR3b3JrRW5hYmxlZCA9IGxvY2F0aW9uTWFuYWdlci5pc1Byb3ZpZGVyRW5hYmxlZChMb2NhdGlvbk1hbmFnZXIuTkVUV09SS19QUk9WSURFUik7IC8vIOajgOafpee9kee7nOWumuS9jeacjeWKoVxyXG5cdFx0XHQvLyDkvY3nva7mnI3liqHlt7LlvIDlkK/vvIzkuI3ov5vooYzku7vkvZXmk43kvZxcclxuXHRcdFx0aWYgKGlzR1BTRW5hYmxlZCB8fCBpc05ldHdvcmtFbmFibGVkKSB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coXCLkvY3nva7mnI3liqHlt7LlvIDlkK9cIik7XHJcblx0XHRcdFx0dGhpcy5vcGVuQmx1ZXRvb3RoQWRhcHRlcigpXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coXCLkvY3nva7mnI3liqHmnKrlvIDlkK/vvIzot7PovazliLDorr7nva7pobXpnaJcIik7XHJcblx0XHRcdFx0Ly8g5L2N572u5pyN5Yqh5pyq5byA5ZCv77yM5byV5a+855So5oi35omT5byAIEdQUyDorr7nva7pobXpnaJcclxuXHRcdFx0XHR2YXIgSW50ZW50ID0gcGx1cy5hbmRyb2lkLmltcG9ydENsYXNzKFwiYW5kcm9pZC5jb250ZW50LkludGVudFwiKTtcclxuXHRcdFx0XHR2YXIgU2V0dGluZ3MgPSBwbHVzLmFuZHJvaWQuaW1wb3J0Q2xhc3MoXCJhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzXCIpO1xyXG5cdFx0XHRcdHZhciBpbnRlbnQgPSBuZXcgSW50ZW50KFNldHRpbmdzLkFDVElPTl9MT0NBVElPTl9TT1VSQ0VfU0VUVElOR1MpO1xyXG5cdFx0XHRcdG1haW4uc3RhcnRBY3Rpdml0eShpbnRlbnQpO1xyXG5cclxuXHRcdFx0XHQvLyDmj5DnpLrnlKjmiLfmiYvliqjlvIDlkK8gR1BTXHJcblx0XHRcdFx0cGx1cy5uYXRpdmVVSS5hbGVydChcIuivt+aJi+WKqOW8gOWQr0dQU++8gVwiKTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdC8vIOWIneWni+WMluiTneeJmVxyXG5cdFx0b3BlbkJsdWV0b290aEFkYXB0ZXIoKSB7XHJcblx0XHRcdGxldCB0aGF0ID0gdGhpc1xyXG5cdFx0XHR0aGF0LmNsb3NlQmx1ZXRvb3RoQWRhcHRlcigpXHJcblx0XHRcdGNvbnNvbGUubG9nKCfliJ3lp4vljJbok53niZknKTtcclxuXHRcdFx0dW5pLm9wZW5CbHVldG9vdGhBZGFwdGVyKHtcclxuXHRcdFx0XHRzdWNjZXNzKHJlcykge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2cocmVzKVxyXG5cdFx0XHRcdFx0dmFyIGRhdGEgPSB7XHJcblx0XHRcdFx0XHRcdGNvbW1hbmQ6ICdiZWxDb25uZWN0RmVlZGJhY2snLFxyXG5cdFx0XHRcdFx0XHRjb21tYW5kVHlwZTogJ0JFTCcsXHJcblx0XHRcdFx0XHRcdGRhdGE6IHtcclxuXHRcdFx0XHRcdFx0XHRzdGF0ZTogMCxcclxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlOiAn5Yid5aeL5YyW5oiQ5YqfJ1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGF0LndlYlZpZXdUb0g1KGRhdGEpXHJcblx0XHRcdFx0XHR0aGF0LnN0YXJ0Qmx1ZXRvb3RoRGV2aWNlc0Rpc2NvdmVyeSgpXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRmYWlsKHJlcykge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ+WIneWni+WMluiTneeJmeWksei0pScsIHJlcylcclxuXHRcdFx0XHRcdHZhciBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRjb21tYW5kOiAnYmVsQ29ubmVjdEZlZWRiYWNrJyxcclxuXHRcdFx0XHRcdFx0Y29tbWFuZFR5cGU6ICdCRUwnLFxyXG5cdFx0XHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHRcdFx0c3RhdGU6IDAsXHJcblx0XHRcdFx0XHRcdFx0bWVzc2FnZTogJ+WIneWni+WMluWksei0pSdcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dGhhdC53ZWJWaWV3VG9INShkYXRhKVxyXG5cdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoYXQub3BlbkJsdWV0b290aEFkYXB0ZXIoKVxyXG5cdFx0XHRcdFx0fSwgNTAwMClcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0Ly8g5byA5aeL5pCc57Si6JOd54mZ6K6+5aSHXHJcblx0XHRzdGFydEJsdWV0b290aERldmljZXNEaXNjb3ZlcnkoKSB7XHJcblx0XHRcdGxldCB0aGF0ID0gdGhpc1xyXG5cdFx0XHRjb25zb2xlLmxvZygn5byA5aeL5pCc57Si6JOd54mZ6K6+5aSHJyk7XHJcblx0XHRcdHZhciBkYXRhID0ge1xyXG5cdFx0XHRcdGNvbW1hbmQ6ICdiZWxDb25uZWN0RmVlZGJhY2snLFxyXG5cdFx0XHRcdGNvbW1hbmRUeXBlOiAnQkVMJyxcclxuXHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHRzdGF0ZTogMCxcclxuXHRcdFx0XHRcdG1lc3NhZ2U6ICforr7lpIfmkJzntKLkuK0nXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHRoYXQud2ViVmlld1RvSDUoZGF0YSlcclxuXHRcdFx0dW5pLnN0YXJ0Qmx1ZXRvb3RoRGV2aWNlc0Rpc2NvdmVyeSh7XHJcblx0XHRcdFx0c3VjY2VzcyhyZXMpIHtcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHJlcylcclxuXHRcdFx0XHRcdHRoYXQub25CbHVldG9vdGhEZXZpY2VGb3VuZCgpXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdC8vIOebkeWQrOiuvuWkh+WPkeeOsFxyXG5cdFx0b25CbHVldG9vdGhEZXZpY2VGb3VuZCgpIHtcclxuXHRcdFx0bGV0IHRoYXQgPSB0aGlzXHJcblx0XHRcdHRoaXMub25CbHVldG9vdGhEZXZpY2VGb3VuZGN1c3RvbSA9IHVuaS5vbkJsdWV0b290aERldmljZUZvdW5kKChyZXMpID0+IHtcclxuXHRcdFx0XHRjb25zb2xlLmxvZygn55uR5ZCs6K6+5aSH5Y+R546wJywgcmVzLmRldmljZXNbMF0pO1xyXG5cdFx0XHRcdGlmIChyZXMuZGV2aWNlc1swXS5uYW1lID09PSAnQUNQNjAyMDUnKSB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZygnaGVsbG/vvIzljonlrrPvvIzmib7liLDllabvvIzllabllabllaZ+fn4nKTtcclxuXHRcdFx0XHRcdC8vIOi/nuaOpeaIkOWKn+WQju+8jOWBnOatouiuvuWkh+aQnOe0olxyXG5cdFx0XHRcdFx0dW5pLnN0b3BCbHVldG9vdGhEZXZpY2VzRGlzY292ZXJ5KCk7XHJcblx0XHRcdFx0XHR0aGF0LmRldmljZUlkID0gcmVzLmRldmljZXNbMF0uZGV2aWNlSWQ7IC8vIOiOt+WPluiuvuWkh0lEXHJcblx0XHRcdFx0XHR0aGF0LmNyZWF0ZUJMRUNvbm5lY3Rpb24oKVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHQvLyDov57mjqXliLDorr7lpIdcclxuXHRcdGNyZWF0ZUJMRUNvbm5lY3Rpb24oKSB7XHJcblx0XHRcdGxldCB0aGF0ID0gdGhpc1xyXG5cdFx0XHRjb25zb2xlLmxvZygn6L+e5o6l5Yiw6K6+5aSHdGhhdC5kZXZpY2VJZCcsIHRoYXQuZGV2aWNlSWQpO1xyXG5cdFx0XHR1bmkuY3JlYXRlQkxFQ29ubmVjdGlvbih7XHJcblx0XHRcdFx0ZGV2aWNlSWQ6IHRoYXQuZGV2aWNlSWQsXHJcblx0XHRcdFx0c3VjY2VzczogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZygn6L+e5o6l5oiQ5YqfJylcclxuXHRcdFx0XHRcdHZhciBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRjb21tYW5kOiAnYmVsQ29ubmVjdEZlZWRiYWNrJyxcclxuXHRcdFx0XHRcdFx0Y29tbWFuZFR5cGU6ICdCRUwnLFxyXG5cdFx0XHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHRcdFx0c3RhdGU6IDAsXHJcblx0XHRcdFx0XHRcdFx0bWVzc2FnZTogJ+W3sui/nuaOpSdcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dGhhdC53ZWJWaWV3VG9INShkYXRhKVxyXG5cdFx0XHRcdFx0dGhhdC5iZWxTdGF0dXMoKVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0ZmFpbDogZnVuY3Rpb24oZXJyKSB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCfov57mjqXlpLHotKUnLCBlcnIpXHJcblx0XHRcdFx0XHR2YXIgZGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0Y29tbWFuZDogJ2JlbENvbm5lY3RGZWVkYmFjaycsXHJcblx0XHRcdFx0XHRcdGNvbW1hbmRUeXBlOiAnQkVMJyxcclxuXHRcdFx0XHRcdFx0ZGF0YToge1xyXG5cdFx0XHRcdFx0XHRcdHN0YXRlOiAwLFxyXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2U6ICfov57mjqXlpLHotKUnXHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRoYXQud2ViVmlld1RvSDUoZGF0YSlcclxuXHRcdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGF0Lm9wZW5CbHVldG9vdGhBZGFwdGVyKClcclxuXHRcdFx0XHRcdH0sIDUwMDApXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdC8vIOajgOa1i0JFTOaYr+WQpui/nuaOpeeKtuaAgVxyXG5cdFx0YmVsU3RhdHVzKCkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMuc2V0SW50ZXJUaW1lQkVMKVxyXG5cdFx0XHR0aGlzLnNldEludGVyVGltZUJFTCA9IHNldEludGVydmFsKCgpID0+IHtcclxuXHRcdFx0XHR0aGlzLmdldENvbm5lY3RlZEJsdWV0b290aERldmljZXMoKVxyXG5cdFx0XHR9LCA1MDAwKVxyXG5cdFx0fSxcclxuXHRcdC8vIOajgOafpeiuvuWkh+i/nuaOpeeKtuaAgVxyXG5cdFx0Z2V0Q29ubmVjdGVkQmx1ZXRvb3RoRGV2aWNlcygpIHtcclxuXHRcdFx0bGV0IHRoYXQgPSB0aGlzXHJcblx0XHRcdHVuaS5nZXRDb25uZWN0ZWRCbHVldG9vdGhEZXZpY2VzKHtcclxuXHRcdFx0XHRzdWNjZXNzKHJlcykge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ+W9k+WJjeW3sui/nuaOpeeahOiuvuWkhzonLCByZXMuZGV2aWNlcyk7XHJcblx0XHRcdFx0XHRpZiAocmVzLmRldmljZXMubGVuZ3RoIDw9IDApIHtcclxuXHRcdFx0XHRcdFx0dGhhdC5vcGVuQmx1ZXRvb3RoQWRhcHRlcigpXHJcblx0XHRcdFx0XHRcdGNsZWFySW50ZXJ2YWwodGhhdC5zZXRJbnRlclRpbWVCRUwpXHJcblx0XHRcdFx0XHRcdHZhciBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1hbmQ6ICdiZWxDb25uZWN0RmVlZGJhY2snLFxyXG5cdFx0XHRcdFx0XHRcdGNvbW1hbmRUeXBlOiAnQkVMJyxcclxuXHRcdFx0XHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHRcdFx0XHRzdGF0ZTogMCxcclxuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2U6ICfov57mjqXlpLHotKUnXHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdHRoYXQud2ViVmlld1RvSDUoZGF0YSlcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHZhciBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1hbmQ6ICdiZWxDb25uZWN0RmVlZGJhY2snLFxyXG5cdFx0XHRcdFx0XHRcdGNvbW1hbmRUeXBlOiAnQkVMJyxcclxuXHRcdFx0XHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHRcdFx0XHRzdGF0ZTogMCxcclxuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2U6ICflt7Lov57mjqUnXHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdHRoYXQud2ViVmlld1RvSDUoZGF0YSlcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGZhaWwoZXJyKSB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZygn6I635Y+W5bey6L+e5o6l6K6+5aSH5aSx6LSlOicsIGVycilcclxuXHRcdFx0XHRcdHRoYXQub3BlbkJsdWV0b290aEFkYXB0ZXIoKVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHQvLyDlj5HpgIHok53niZnlhoXlrrlcclxuXHRcdHdyaXRlQkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZShiZWx2YWx1ZSkge1xyXG5cdFx0XHRjb25zb2xlLmxvZygn5Y+R6YCB6JOd54mZ5YaF5a65JyxiZWx2YWx1ZSk7XHJcblx0XHRcdGxldCB0aGF0ID0gdGhpc1xyXG5cdFx0XHQvLyDopoHlj5HpgIHnmoTlrZfnrKbkuLJcclxuXHRcdFx0Ly8gJEQ1MDUwNDAzMDIzMSNcclxuXHRcdFx0Ly8gRDUtLS0157Gz6Led56a7XHJcblx0XHRcdC8vIDA2LS0tXHJcblx0XHRcdGNvbnN0IGRhdGFUb1NlbmQgPSB0aGF0LnN0cmluZ1RvQnl0ZUFycmF5KGJlbHZhbHVlKVxyXG5cdFx0XHRjb25zb2xlLmxvZygnIGRhdGFUb1NlbmQuYnVmZmVyJywgZGF0YVRvU2VuZC5idWZmZXIpXHJcblx0XHRcdHVuaS53cml0ZUJMRUNoYXJhY3RlcmlzdGljVmFsdWUoe1xyXG5cdFx0XHRcdGRldmljZUlkOiB0aGF0LmRldmljZUlkLCAvLyDorr7lpIdJRFxyXG5cdFx0XHRcdHNlcnZpY2VJZDogJzAwMDBmZmUwLTAwMDAtMTAwMC04MDAwLTAwODA1ZjliMzRmYicsIC8vIOacjeWKoUlEXHJcblx0XHRcdFx0Y2hhcmFjdGVyaXN0aWNJZDogJzAwMDBmZmUxLTAwMDAtMTAwMC04MDAwLTAwODA1ZjliMzRmYicsIC8vIOeJueW+gUlEXHJcblx0XHRcdFx0dmFsdWU6IGRhdGFUb1NlbmQuYnVmZmVyLFxyXG5cdFx0XHRcdHdyaXRlVHlwZTogJ3dyaXRlJyxcclxuXHRcdFx0XHRzdWNjZXNzOiAoKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZygn5Y+R6YCB5YaF5a655oiQ5YqfJylcclxuXHRcdFx0XHRcdHZhciBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRjb21tYW5kOiAnc2VuZEJlbERhdGFGZWVkYmFjaycsXHJcblx0XHRcdFx0XHRcdGNvbW1hbmRUeXBlOiAnQkVMJyxcclxuXHRcdFx0XHRcdFx0ZGF0YToge1xyXG5cdFx0XHRcdFx0XHRcdHN0YXRlOiAwLFxyXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2U6ICflj5HpgIHlhoXlrrnmiJDlip8nXHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRoYXQud2ViVmlld1RvSDUoZGF0YSlcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ+WPkemAgeWGheWuueWksei0pScsIGVycilcclxuXHRcdFx0XHRcdHZhciBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRjb21tYW5kOiAnc2VuZEJlbERhdGFGZWVkYmFjaycsXHJcblx0XHRcdFx0XHRcdGNvbW1hbmRUeXBlOiAnQkVMJyxcclxuXHRcdFx0XHRcdFx0ZGF0YToge1xyXG5cdFx0XHRcdFx0XHRcdHN0YXRlOiAwLFxyXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2U6ICflj5HpgIHlhoXlrrnlpLHotKUnXHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRoYXQud2ViVmlld1RvSDUoZGF0YSlcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0Ly8g5aSE55CG5Y+R6YCB55qE5YaF5a65XHJcblx0XHRzdHJpbmdUb0J5dGVBcnJheShzdHIpIHtcclxuXHRcdFx0Y29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoc3RyLmxlbmd0aCk7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0Ynl0ZUFycmF5W2ldID0gc3RyLmNoYXJDb2RlQXQoaSlcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gYnl0ZUFycmF5O1xyXG5cdFx0fSxcclxuXHRcdC8vIOaWreW8gOiTneeJmVxyXG5cdFx0Y2xvc2VCbHVldG9vdGhBZGFwdGVyKHRpdGxlKSB7XHJcblx0XHRcdGxldCB0aGF0ID0gdGhpc1xyXG5cdFx0XHR1bmkuY2xvc2VCbHVldG9vdGhBZGFwdGVyKHtcclxuXHRcdFx0XHRzdWNjZXNzKCkge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ+iTneeJmemAgumFjeWZqOWFs+mXreaIkOWKnycpO1xyXG5cdFx0XHRcdFx0dmFyIGRhdGEgPSB7XHJcblx0XHRcdFx0XHRcdGNvbW1hbmQ6IHRpdGxlID09PSAnYmVsQ2xvc2UnID8gJ2JlbENsb3NlRmVlZGJhY2snIDogJ2JlbENvbm5lY3RGZWVkYmFjaycsXHJcblx0XHRcdFx0XHRcdGNvbW1hbmRUeXBlOiAnQkVMJyxcclxuXHRcdFx0XHRcdFx0ZGF0YToge1xyXG5cdFx0XHRcdFx0XHRcdHN0YXRlOiAwLFxyXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2U6IHRpdGxlID09PSAnYmVsQ2xvc2UnID8gJ+W3suaWreW8gCcgOiAn5pyq6L+e5o6lJ1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRjbGVhckludGVydmFsKHRoYXQuc2V0SW50ZXJUaW1lQkVMKVxyXG5cdFx0XHRcdFx0dW5pLnN0b3BCbHVldG9vdGhEZXZpY2VzRGlzY292ZXJ5KCk7XHJcblx0XHRcdFx0XHR0aGF0LndlYlZpZXdUb0g1KGRhdGEpXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRmYWlsKGVycikge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ+WFs+mXreiTneeJmemAgumFjeWZqOWksei0pTogJywgZXJyKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fSxcclxuXHRcdC8vIHVuaWFwcCDkvKDlj4Lnu5kgdnVl6aG16Z2iLS0t5YiY54G/5rWL6K+VXHJcblx0XHR3ZWJWaWV3VG9INShyZXMpIHtcclxuXHRcdFx0bGV0IGN1cnJlbnRXZWJ2aWV3ID0gdGhpcy4kc2NvcGUuJGdldEFwcFdlYnZpZXcoKTtcclxuXHRcdFx0bGV0IHd2ID0gY3VycmVudFdlYnZpZXcuY2hpbGRyZW4oKVswXTtcclxuXHRcdFx0Y29uc29sZS5sb2coJ3VuaWFwcCDkvKDlj4Lnu5kgdnVl6aG16Z2iJyk7XHJcblx0XHRcdHd2LmV2YWxKUyhgZ2V0VnVlTWVzc2FnZSgke0pTT04uc3RyaW5naWZ5KHJlcyl9KWApO1xyXG5cdFx0fSxcclxuXHR9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///15\n"); +eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _default = {\n data: function data() {\n return {\n onBluetoothDeviceFoundcustom: '',\n deviceId: '',\n stringToSend: '$D50504010300#',\n // D50604010000\n setInterTimeBEL: null\n };\n },\n onLoad: function onLoad() {},\n methods: {\n // 打开GPS定位!!!打开GPS定位新买的荣耀才能触发uni.onBluetoothDeviceFound监听!!!!\n checkAndOpenGPS: function checkAndOpenGPS() {\n var Context = plus.android.importClass(\"android.content.Context\");\n var LocationManager = plus.android.importClass(\"android.location.LocationManager\");\n var main = plus.android.runtimeMainActivity();\n\n // 获取系统的 LocationManager 服务\n var locationManager = main.getSystemService(Context.LOCATION_SERVICE);\n\n // 检查 GPS 是否开启\n var isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);\n var isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); // 检查网络定位服务\n // 位置服务已开启,不进行任何操作\n if (isGPSEnabled || isNetworkEnabled) {\n __f__(\"log\", \"位置服务已开启\", \" at mixins/linkBEL.js:26\");\n this.openBluetoothAdapter();\n } else {\n __f__(\"log\", \"位置服务未开启,跳转到设置页面\", \" at mixins/linkBEL.js:29\");\n // 位置服务未开启,引导用户打开 GPS 设置页面\n var Intent = plus.android.importClass(\"android.content.Intent\");\n var Settings = plus.android.importClass(\"android.provider.Settings\");\n var intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);\n main.startActivity(intent);\n\n // 提示用户手动开启 GPS\n plus.nativeUI.alert(\"请手动开启GPS!\");\n }\n },\n // 初始化蓝牙\n openBluetoothAdapter: function openBluetoothAdapter() {\n var that = this;\n that.closeBluetoothAdapter();\n __f__(\"log\", '初始化蓝牙', \" at mixins/linkBEL.js:44\");\n uni.openBluetoothAdapter({\n success: function success(res) {\n __f__(\"log\", res, \" at mixins/linkBEL.js:47\");\n var data = {\n command: 'belConnectFeedback',\n commandType: 'BEL',\n data: {\n state: 0,\n message: '初始化成功'\n }\n };\n that.webViewToH5Bel(data);\n that.startBluetoothDevicesDiscovery();\n },\n fail: function fail(res) {\n __f__(\"log\", '初始化蓝牙失败', res, \" at mixins/linkBEL.js:60\");\n var data = {\n command: 'belConnectFeedback',\n commandType: 'BEL',\n data: {\n state: 0,\n message: '初始化失败'\n }\n };\n that.webViewToH5Bel(data);\n setTimeout(function () {\n that.openBluetoothAdapter();\n }, 5000);\n }\n });\n },\n // 开始搜索蓝牙设备\n startBluetoothDevicesDiscovery: function startBluetoothDevicesDiscovery() {\n var that = this;\n __f__(\"log\", '开始搜索蓝牙设备', \" at mixins/linkBEL.js:79\");\n var data = {\n command: 'belConnectFeedback',\n commandType: 'BEL',\n data: {\n state: 0,\n message: '设备搜索中'\n }\n };\n that.webViewToH5Bel(data);\n uni.startBluetoothDevicesDiscovery({\n success: function success(res) {\n __f__(\"log\", res, \" at mixins/linkBEL.js:91\");\n that.onBluetoothDeviceFound();\n }\n });\n },\n // 监听设备发现\n onBluetoothDeviceFound: function onBluetoothDeviceFound() {\n var that = this;\n this.onBluetoothDeviceFoundcustom = uni.onBluetoothDeviceFound(function (res) {\n __f__(\"log\", '监听设备发现', res.devices[0], \" at mixins/linkBEL.js:100\");\n if (res.devices[0].name === 'ACP60205') {\n __f__(\"log\", 'hello,厉害,找到啦,啦啦啦~~~', \" at mixins/linkBEL.js:102\");\n // 连接成功后,停止设备搜索\n uni.stopBluetoothDevicesDiscovery();\n that.deviceId = res.devices[0].deviceId; // 获取设备ID\n that.createBLEConnection();\n }\n });\n },\n // 连接到设备\n createBLEConnection: function createBLEConnection() {\n var that = this;\n __f__(\"log\", '连接到设备that.deviceId', that.deviceId, \" at mixins/linkBEL.js:113\");\n uni.createBLEConnection({\n deviceId: that.deviceId,\n success: function success() {\n __f__(\"log\", '连接成功', \" at mixins/linkBEL.js:117\");\n var data = {\n command: 'belConnectFeedback',\n commandType: 'BEL',\n data: {\n state: 0,\n message: '已连接'\n }\n };\n that.webViewToH5Bel(data);\n that.belStatus();\n },\n fail: function fail(err) {\n __f__(\"error\", '连接失败', err, \" at mixins/linkBEL.js:130\");\n var data = {\n command: 'belConnectFeedback',\n commandType: 'BEL',\n data: {\n state: 0,\n message: '连接失败'\n }\n };\n that.webViewToH5Bel(data);\n setTimeout(function () {\n that.openBluetoothAdapter();\n }, 5000);\n }\n });\n },\n // 检测BEL是否连接状态\n belStatus: function belStatus() {\n var _this = this;\n clearInterval(this.setInterTimeBEL);\n this.setInterTimeBEL = setInterval(function () {\n _this.getConnectedBluetoothDevices();\n }, 5000);\n },\n // 检查设备连接状态\n getConnectedBluetoothDevices: function getConnectedBluetoothDevices() {\n var that = this;\n uni.getConnectedBluetoothDevices({\n success: function success(res) {\n __f__(\"log\", '当前已连接的设备:', res.devices, \" at mixins/linkBEL.js:158\");\n if (res.devices.length <= 0) {\n that.openBluetoothAdapter();\n clearInterval(that.setInterTimeBEL);\n var data = {\n command: 'belConnectFeedback',\n commandType: 'BEL',\n data: {\n state: 0,\n message: '连接失败'\n }\n };\n that.webViewToH5Bel(data);\n } else {\n var data = {\n command: 'belConnectFeedback',\n commandType: 'BEL',\n data: {\n state: 0,\n message: '已连接'\n }\n };\n that.webViewToH5Bel(data);\n }\n },\n fail: function fail(err) {\n __f__(\"log\", '获取已连接设备失败:', err, \" at mixins/linkBEL.js:184\");\n that.openBluetoothAdapter();\n }\n });\n },\n // 发送蓝牙内容\n writeBLECharacteristicValue: function writeBLECharacteristicValue(belvalue) {\n __f__(\"log\", '发送蓝牙内容', belvalue, \" at mixins/linkBEL.js:191\");\n var that = this;\n // 要发送的字符串\n // $D50504030231#\n // D5---5米距离\n // 06---\n var dataToSend = that.stringToByteArray(belvalue);\n __f__(\"log\", ' dataToSend.buffer', dataToSend.buffer, \" at mixins/linkBEL.js:198\");\n uni.writeBLECharacteristicValue({\n deviceId: that.deviceId,\n // 设备ID\n serviceId: '0000ffe0-0000-1000-8000-00805f9b34fb',\n // 服务ID\n characteristicId: '0000ffe1-0000-1000-8000-00805f9b34fb',\n // 特征ID\n value: dataToSend.buffer,\n writeType: 'write',\n success: function success() {\n __f__(\"log\", '发送内容成功', \" at mixins/linkBEL.js:206\");\n var data = {\n command: 'sendBelDataFeedback',\n commandType: 'BEL',\n data: {\n state: 0,\n message: '发送内容成功'\n }\n };\n that.webViewToH5Bel(data);\n },\n fail: function fail(err) {\n __f__(\"error\", '发送内容失败', err, \" at mixins/linkBEL.js:218\");\n var data = {\n command: 'sendBelDataFeedback',\n commandType: 'BEL',\n data: {\n state: 0,\n message: '发送内容失败'\n }\n };\n that.webViewToH5Bel(data);\n }\n });\n },\n // 处理发送的内容\n stringToByteArray: function stringToByteArray(str) {\n var byteArray = new Uint8Array(str.length);\n for (var i = 0; i < str.length; i++) {\n byteArray[i] = str.charCodeAt(i);\n }\n return byteArray;\n },\n // 断开蓝牙\n closeBluetoothAdapter: function closeBluetoothAdapter(title) {\n var that = this;\n uni.closeBluetoothAdapter({\n success: function success() {\n __f__(\"log\", '蓝牙适配器关闭成功', \" at mixins/linkBEL.js:244\");\n var data = {\n command: title === 'belClose' ? 'belCloseFeedback' : 'belConnectFeedback',\n commandType: 'BEL',\n data: {\n state: 0,\n message: title === 'belClose' ? '已断开' : '未连接'\n }\n };\n clearInterval(that.setInterTimeBEL);\n uni.stopBluetoothDevicesDiscovery();\n that.webViewToH5Bel(data);\n },\n fail: function fail(err) {\n __f__(\"log\", '关闭蓝牙适配器失败: ', err, \" at mixins/linkBEL.js:258\");\n }\n });\n },\n // uniapp 传参给 vue页面---刘灿测试\n webViewToH5Bel: function webViewToH5Bel(res) {\n var currentWebview = this.$scope.$getAppWebview();\n var wv = currentWebview.children()[0];\n __f__(\"log\", 'BEL-uniapp 传参给 vue页面', \" at mixins/linkBEL.js:266\");\n wv.evalJS(\"getVueMessage(\".concat(JSON.stringify(res), \")\"));\n }\n }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 12)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vbWl4aW5zL2xpbmtCRUwuanMiXSwibmFtZXMiOlsiZGF0YSIsIm9uQmx1ZXRvb3RoRGV2aWNlRm91bmRjdXN0b20iLCJkZXZpY2VJZCIsInN0cmluZ1RvU2VuZCIsInNldEludGVyVGltZUJFTCIsIm9uTG9hZCIsIm1ldGhvZHMiLCJjaGVja0FuZE9wZW5HUFMiLCJDb250ZXh0IiwicGx1cyIsImFuZHJvaWQiLCJpbXBvcnRDbGFzcyIsIkxvY2F0aW9uTWFuYWdlciIsIm1haW4iLCJydW50aW1lTWFpbkFjdGl2aXR5IiwibG9jYXRpb25NYW5hZ2VyIiwiZ2V0U3lzdGVtU2VydmljZSIsIkxPQ0FUSU9OX1NFUlZJQ0UiLCJpc0dQU0VuYWJsZWQiLCJpc1Byb3ZpZGVyRW5hYmxlZCIsIkdQU19QUk9WSURFUiIsImlzTmV0d29ya0VuYWJsZWQiLCJORVRXT1JLX1BST1ZJREVSIiwib3BlbkJsdWV0b290aEFkYXB0ZXIiLCJJbnRlbnQiLCJTZXR0aW5ncyIsImludGVudCIsIkFDVElPTl9MT0NBVElPTl9TT1VSQ0VfU0VUVElOR1MiLCJzdGFydEFjdGl2aXR5IiwibmF0aXZlVUkiLCJhbGVydCIsInRoYXQiLCJjbG9zZUJsdWV0b290aEFkYXB0ZXIiLCJ1bmkiLCJzdWNjZXNzIiwicmVzIiwiY29tbWFuZCIsImNvbW1hbmRUeXBlIiwic3RhdGUiLCJtZXNzYWdlIiwid2ViVmlld1RvSDVCZWwiLCJzdGFydEJsdWV0b290aERldmljZXNEaXNjb3ZlcnkiLCJmYWlsIiwic2V0VGltZW91dCIsIm9uQmx1ZXRvb3RoRGV2aWNlRm91bmQiLCJkZXZpY2VzIiwibmFtZSIsInN0b3BCbHVldG9vdGhEZXZpY2VzRGlzY292ZXJ5IiwiY3JlYXRlQkxFQ29ubmVjdGlvbiIsImJlbFN0YXR1cyIsImVyciIsImNsZWFySW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsImdldENvbm5lY3RlZEJsdWV0b290aERldmljZXMiLCJsZW5ndGgiLCJ3cml0ZUJMRUNoYXJhY3RlcmlzdGljVmFsdWUiLCJiZWx2YWx1ZSIsImRhdGFUb1NlbmQiLCJzdHJpbmdUb0J5dGVBcnJheSIsImJ1ZmZlciIsInNlcnZpY2VJZCIsImNoYXJhY3RlcmlzdGljSWQiLCJ2YWx1ZSIsIndyaXRlVHlwZSIsInN0ciIsImJ5dGVBcnJheSIsIlVpbnQ4QXJyYXkiLCJpIiwiY2hhckNvZGVBdCIsInRpdGxlIiwiY3VycmVudFdlYnZpZXciLCIkc2NvcGUiLCIkZ2V0QXBwV2VidmlldyIsInd2IiwiY2hpbGRyZW4iLCJldmFsSlMiLCJKU09OIiwic3RyaW5naWZ5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7ZUFBZTtFQUNkQSxJQUFJLGtCQUFHO0lBQ04sT0FBTztNQUNOQyw0QkFBNEIsRUFBRSxFQUFFO01BQ2hDQyxRQUFRLEVBQUUsRUFBRTtNQUNaQyxZQUFZLEVBQUUsZ0JBQWdCO01BQUU7TUFDaENDLGVBQWUsRUFBRTtJQUNsQixDQUFDO0VBQ0YsQ0FBQztFQUNEQyxNQUFNLG9CQUFHLENBQUMsQ0FBQztFQUNYQyxPQUFPLEVBQUU7SUFDUjtJQUNBQyxlQUFlLDZCQUFHO01BQ2pCLElBQUlDLE9BQU8sR0FBR0MsSUFBSSxDQUFDQyxPQUFPLENBQUNDLFdBQVcsQ0FBQyx5QkFBeUIsQ0FBQztNQUNqRSxJQUFJQyxlQUFlLEdBQUdILElBQUksQ0FBQ0MsT0FBTyxDQUFDQyxXQUFXLENBQUMsa0NBQWtDLENBQUM7TUFDbEYsSUFBSUUsSUFBSSxHQUFHSixJQUFJLENBQUNDLE9BQU8sQ0FBQ0ksbUJBQW1CLEVBQUU7O01BRTdDO01BQ0EsSUFBSUMsZUFBZSxHQUFHRixJQUFJLENBQUNHLGdCQUFnQixDQUFDUixPQUFPLENBQUNTLGdCQUFnQixDQUFDOztNQUVyRTtNQUNBLElBQUlDLFlBQVksR0FBR0gsZUFBZSxDQUFDSSxpQkFBaUIsQ0FBQ1AsZUFBZSxDQUFDUSxZQUFZLENBQUM7TUFDbEYsSUFBSUMsZ0JBQWdCLEdBQUdOLGVBQWUsQ0FBQ0ksaUJBQWlCLENBQUNQLGVBQWUsQ0FBQ1UsZ0JBQWdCLENB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Q1QsYUFBWSxhQUFhLEVBQUVBLEdBQUc7UUFDL0I7TUFDRCxDQUFDLENBQUM7SUFDSCxDQUFDO0lBQ0Q7SUFDQVYsY0FBYywwQkFBQ0wsR0FBRyxFQUFFO01BQ25CLElBQUltQyxjQUFjLEdBQUcsSUFBSSxDQUFDQyxNQUFNLENBQUNDLGNBQWMsRUFBRTtNQUNqRCxJQUFJQyxFQUFFLEdBQUdILGNBQWMsQ0FBQ0ksUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ3JDLGFBQVksc0JBQXNCO01BQ2xDRCxFQUFFLENBQUNFLE1BQU0seUJBQWtCQyxJQUFJLENBQUNDLFNBQVMsQ0FBQzFDLEdBQUcsQ0FBQyxPQUFJO0lBQ25EO0VBQ0Q7QUFDRCxDQUFDO0FBQUEsMkIiLCJmaWxlIjoiMTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCB7XHJcblx0ZGF0YSgpIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdG9uQmx1ZXRvb3RoRGV2aWNlRm91bmRjdXN0b206ICcnLFxyXG5cdFx0XHRkZXZpY2VJZDogJycsXHJcblx0XHRcdHN0cmluZ1RvU2VuZDogJyRENTA1MDQwMTAzMDAjJywgLy8gRDUwNjA0MDEwMDAwXHJcblx0XHRcdHNldEludGVyVGltZUJFTDogbnVsbFxyXG5cdFx0fVxyXG5cdH0sXHJcblx0b25Mb2FkKCkge30sXHJcblx0bWV0aG9kczoge1xyXG5cdFx0Ly8g5omT5byAR1BT5a6a5L2N77yB77yB77yB5omT5byAR1BT5a6a5L2N5paw5Lmw55qE6I2j6ICA5omN6IO96Kem5Y+RdW5pLm9uQmx1ZXRvb3RoRGV2aWNlRm91bmTnm5HlkKzvvIHvvIHvvIHvvIFcclxuXHRcdGNoZWNrQW5kT3BlbkdQUygpIHtcclxuXHRcdFx0dmFyIENvbnRleHQgPSBwbHVzLmFuZHJvaWQuaW1wb3J0Q2xhc3MoXCJhbmRyb2lkLmNvbnRlbnQuQ29udGV4dFwiKTtcclxuXHRcdFx0dmFyIExvY2F0aW9uTWFuYWdlciA9IHBsdXMuYW5kcm9pZC5pbXBvcnRDbGFzcyhcImFuZHJvaWQubG9jYXRpb24uTG9jYXRpb25NYW5hZ2VyXCIpO1xyXG5cdFx0XHR2YXIgbWFpbiA9IHBsdXMuYW5kcm9pZC5ydW50aW1lTWFpbkFjdGl2aXR5KCk7XHJcblxyXG5cdFx0XHQvLyDojrflj5bns7vnu5/nmoQgTG9jYXRpb25NYW5hZ2VyIOacjeWKoVxyXG5cdFx0XHR2YXIgbG9jYXRpb25NYW5hZ2VyID0gbWFpbi5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuTE9DQVRJT05fU0VSVklDRSk7XHJcblxyXG5cdFx0XHQvLyDmo4Dmn6UgR1BTIOaYr+WQpuW8gOWQr1xyXG5cdFx0XHR2YXIgaXNHUFNFbmFibGVkID0gbG9jYXRpb25NYW5hZ2VyLmlzUHJvdmlkZXJFbmFibGVkKExvY2F0aW9uTWFuYWdlci5HUFNfUFJPVklERVIpO1xyXG5cdFx0XHR2YXIgaXNOZXR3b3JrRW5hYmxlZCA9IGxvY2F0aW9uTWFuYWdlci5pc1Byb3ZpZGVyRW5hYmxlZChMb2NhdGlvbk1hbmFnZXIuTkVUV09SS19QUk9WSURFUik7IC8vIOajgOafpee9kee7nOWumuS9jeacjeWKoVxyXG5cdFx0XHQvLyDkvY3nva7mnI3liqHlt7LlvIDlkK/vvIzkuI3ov5vooYzku7vkvZXmk43kvZxcclxuXHRcdFx0aWYgKGlzR1BTRW5hYmxlZCB8fCBpc05ldHdvcmtFbmFibGVkKSB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coXCLkvY3nva7mnI3liqHlt7LlvIDlkK9cIik7XHJcblx0XHRcdFx0dGhpcy5vcGVuQmx1ZXRvb3RoQWRhcHRlcigpXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coXCLkvY3nva7mnI3liqHmnKrlvIDlkK/vvIzot7PovazliLDorr7nva7pobXpnaJcIik7XHJcblx0XHRcdFx0Ly8g5L2N572u5pyN5Yqh5pyq5byA5ZCv77yM5byV5a+855So5oi35omT5byAIEdQUyDorr7nva7pobXpnaJcclxuXHRcdFx0XHR2YXIgSW50ZW50ID0gcGx1cy5hbmRyb2lkLmltcG9ydENsYXNzKFwiYW5kcm9pZC5jb250ZW50LkludGVudFwiKTtcclxuXHRcdFx0XHR2YXIgU2V0dGluZ3MgPSBwbHVzLmFuZHJvaWQuaW1wb3J0Q2xhc3MoXCJhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzXCIpO1xyXG5cdFx0XHRcdHZhciBpbnRlbnQgPSBuZXcgSW50ZW50KFNldHRpbmdzLkFDVElPTl9MT0NBVElPTl9TT1VSQ0VfU0VUVElOR1MpO1xyXG5cdFx0XHRcdG1haW4uc3RhcnRBY3Rpdml0eShpbnRlbnQpO1xyXG5cclxuXHRcdFx0XHQvLyDmj5DnpLrnlKjmiLfmiYvliqjlvIDlkK8gR1BTXHJcblx0XHRcdFx0cGx1cy5uYXRpdmVVSS5hbGVydChcIuivt+aJi+WKqOW8gOWQr0dQU++8gVwiKTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdC8vIOWIneWni+WMluiTneeJmVxyXG5cdFx0b3BlbkJsdWV0b290aEFkYXB0ZXIoKSB7XHJcblx0XHRcdGxldCB0aGF0ID0gdGhpc1xyXG5cdFx0XHR0aGF0LmNsb3NlQmx1ZXRvb3RoQWRhcHRlcigpXHJcblx0XHRcdGNvbnNvbGUubG9nKCfliJ3lp4vljJbok53niZknKTtcclxuXHRcdFx0dW5pLm9wZW5CbHVldG9vdGhBZGFwdGVyKHtcclxuXHRcdFx0XHRzdWNjZXNzKHJlcykge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2cocmVzKVxyXG5cdFx0XHRcdFx0dmFyIGRhdGEgPSB7XHJcblx0XHRcdFx0XHRcdGNvbW1hbmQ6ICdiZWxDb25uZWN0RmVlZGJhY2snLFxyXG5cdFx0XHRcdFx0XHRjb21tYW5kVHlwZTogJ0JFTCcsXHJcblx0XHRcdFx0XHRcdGRhdGE6IHtcclxuXHRcdFx0XHRcdFx0XHRzdGF0ZTogMCxcclxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlOiAn5Yid5aeL5YyW5oiQ5YqfJ1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGF0LndlYlZpZXdUb0g1QmVsKGRhdGEpXHJcblx0XHRcdFx0XHR0aGF0LnN0YXJ0Qmx1ZXRvb3RoRGV2aWNlc0Rpc2NvdmVyeSgpXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRmYWlsKHJlcykge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ+WIneWni+WMluiTneeJmeWksei0pScsIHJlcylcclxuXHRcdFx0XHRcdHZhciBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRjb21tYW5kOiAnYmVsQ29ubmVjdEZlZWRiYWNrJyxcclxuXHRcdFx0XHRcdFx0Y29tbWFuZFR5cGU6ICdCRUwnLFxyXG5cdFx0XHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHRcdFx0c3RhdGU6IDAsXHJcblx0XHRcdFx0XHRcdFx0bWVzc2FnZTogJ+WIneWni+WMluWksei0pSdcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dGhhdC53ZWJWaWV3VG9INUJlbChkYXRhKVxyXG5cdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoYXQub3BlbkJsdWV0b290aEFkYXB0ZXIoKVxyXG5cdFx0XHRcdFx0fSwgNTAwMClcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0Ly8g5byA5aeL5pCc57Si6JOd54mZ6K6+5aSHXHJcblx0XHRzdGFydEJsdWV0b290aERldmljZXNEaXNjb3ZlcnkoKSB7XHJcblx0XHRcdGxldCB0aGF0ID0gdGhpc1xyXG5cdFx0XHRjb25zb2xlLmxvZygn5byA5aeL5pCc57Si6JOd54mZ6K6+5aSHJyk7XHJcblx0XHRcdHZhciBkYXRhID0ge1xyXG5cdFx0XHRcdGNvbW1hbmQ6ICdiZWxDb25uZWN0RmVlZGJhY2snLFxyXG5cdFx0XHRcdGNvbW1hbmRUeXBlOiAnQkVMJyxcclxuXHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHRzdGF0ZTogMCxcclxuXHRcdFx0XHRcdG1lc3NhZ2U6ICforr7lpIfmkJzntKLkuK0nXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHRoYXQud2ViVmlld1RvSDVCZWwoZGF0YSlcclxuXHRcdFx0dW5pLnN0YXJ0Qmx1ZXRvb3RoRGV2aWNlc0Rpc2NvdmVyeSh7XHJcblx0XHRcdFx0c3VjY2VzcyhyZXMpIHtcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHJlcylcclxuXHRcdFx0XHRcdHRoYXQub25CbHVldG9vdGhEZXZpY2VGb3VuZCgpXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdC8vIOebkeWQrOiuvuWkh+WPkeeOsFxyXG5cdFx0b25CbHVldG9vdGhEZXZpY2VGb3VuZCgpIHtcclxuXHRcdFx0bGV0IHRoYXQgPSB0aGlzXHJcblx0XHRcdHRoaXMub25CbHVldG9vdGhEZXZpY2VGb3VuZGN1c3RvbSA9IHVuaS5vbkJsdWV0b290aERldmljZUZvdW5kKChyZXMpID0+IHtcclxuXHRcdFx0XHRjb25zb2xlLmxvZygn55uR5ZCs6K6+5aSH5Y+R546wJywgcmVzLmRldmljZXNbMF0pO1xyXG5cdFx0XHRcdGlmIChyZXMuZGV2aWNlc1swXS5uYW1lID09PSAnQUNQNjAyMDUnKSB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZygnaGVsbG/vvIzljonlrrPvvIzmib7liLDllabvvIzllabllabllaZ+fn4nKTtcclxuXHRcdFx0XHRcdC8vIOi/nuaOpeaIkOWKn+WQju+8jOWBnOatouiuvuWkh+aQnOe0olxyXG5cdFx0XHRcdFx0dW5pLnN0b3BCbHVldG9vdGhEZXZpY2VzRGlzY292ZXJ5KCk7XHJcblx0XHRcdFx0XHR0aGF0LmRldmljZUlkID0gcmVzLmRldmljZXNbMF0uZGV2aWNlSWQ7IC8vIOiOt+WPluiuvuWkh0lEXHJcblx0XHRcdFx0XHR0aGF0LmNyZWF0ZUJMRUNvbm5lY3Rpb24oKVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHQvLyDov57mjqXliLDorr7lpIdcclxuXHRcdGNyZWF0ZUJMRUNvbm5lY3Rpb24oKSB7XHJcblx0XHRcdGxldCB0aGF0ID0gdGhpc1xyXG5cdFx0XHRjb25zb2xlLmxvZygn6L+e5o6l5Yiw6K6+5aSHdGhhdC5kZXZpY2VJZCcsIHRoYXQuZGV2aWNlSWQpO1xyXG5cdFx0XHR1bmkuY3JlYXRlQkxFQ29ubmVjdGlvbih7XHJcblx0XHRcdFx0ZGV2aWNlSWQ6IHRoYXQuZGV2aWNlSWQsXHJcblx0XHRcdFx0c3VjY2VzczogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZygn6L+e5o6l5oiQ5YqfJylcclxuXHRcdFx0XHRcdHZhciBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRjb21tYW5kOiAnYmVsQ29ubmVjdEZlZWRiYWNrJyxcclxuXHRcdFx0XHRcdFx0Y29tbWFuZFR5cGU6ICdCRUwnLFxyXG5cdFx0XHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHRcdFx0c3RhdGU6IDAsXHJcblx0XHRcdFx0XHRcdFx0bWVzc2FnZTogJ+W3sui/nuaOpSdcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dGhhdC53ZWJWaWV3VG9INUJlbChkYXRhKVxyXG5cdFx0XHRcdFx0dGhhdC5iZWxTdGF0dXMoKVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0ZmFpbDogZnVuY3Rpb24oZXJyKSB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCfov57mjqXlpLHotKUnLCBlcnIpXHJcblx0XHRcdFx0XHR2YXIgZGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0Y29tbWFuZDogJ2JlbENvbm5lY3RGZWVkYmFjaycsXHJcblx0XHRcdFx0XHRcdGNvbW1hbmRUeXBlOiAnQkVMJyxcclxuXHRcdFx0XHRcdFx0ZGF0YToge1xyXG5cdFx0XHRcdFx0XHRcdHN0YXRlOiAwLFxyXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2U6ICfov57mjqXlpLHotKUnXHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRoYXQud2ViVmlld1RvSDVCZWwoZGF0YSlcclxuXHRcdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGF0Lm9wZW5CbHVldG9vdGhBZGFwdGVyKClcclxuXHRcdFx0XHRcdH0sIDUwMDApXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdC8vIOajgOa1i0JFTOaYr+WQpui/nuaOpeeKtuaAgVxyXG5cdFx0YmVsU3RhdHVzKCkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMuc2V0SW50ZXJUaW1lQkVMKVxyXG5cdFx0XHR0aGlzLnNldEludGVyVGltZUJFTCA9IHNldEludGVydmFsKCgpID0+IHtcclxuXHRcdFx0XHR0aGlzLmdldENvbm5lY3RlZEJsdWV0b290aERldmljZXMoKVxyXG5cdFx0XHR9LCA1MDAwKVxyXG5cdFx0fSxcclxuXHRcdC8vIOajgOafpeiuvuWkh+i/nuaOpeeKtuaAgVxyXG5cdFx0Z2V0Q29ubmVjdGVkQmx1ZXRvb3RoRGV2aWNlcygpIHtcclxuXHRcdFx0bGV0IHRoYXQgPSB0aGlzXHJcblx0XHRcdHVuaS5nZXRDb25uZWN0ZWRCbHVldG9vdGhEZXZpY2VzKHtcclxuXHRcdFx0XHRzdWNjZXNzKHJlcykge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ+W9k+WJjeW3sui/nuaOpeeahOiuvuWkhzonLCByZXMuZGV2aWNlcyk7XHJcblx0XHRcdFx0XHRpZiAocmVzLmRldmljZXMubGVuZ3RoIDw9IDApIHtcclxuXHRcdFx0XHRcdFx0dGhhdC5vcGVuQmx1ZXRvb3RoQWRhcHRlcigpXHJcblx0XHRcdFx0XHRcdGNsZWFySW50ZXJ2YWwodGhhdC5zZXRJbnRlclRpbWVCRUwpXHJcblx0XHRcdFx0XHRcdHZhciBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1hbmQ6ICdiZWxDb25uZWN0RmVlZGJhY2snLFxyXG5cdFx0XHRcdFx0XHRcdGNvbW1hbmRUeXBlOiAnQkVMJyxcclxuXHRcdFx0XHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHRcdFx0XHRzdGF0ZTogMCxcclxuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2U6ICfov57mjqXlpLHotKUnXHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdHRoYXQud2ViVmlld1RvSDVCZWwoZGF0YSlcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHZhciBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1hbmQ6ICdiZWxDb25uZWN0RmVlZGJhY2snLFxyXG5cdFx0XHRcdFx0XHRcdGNvbW1hbmRUeXBlOiAnQkVMJyxcclxuXHRcdFx0XHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHRcdFx0XHRzdGF0ZTogMCxcclxuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2U6ICflt7Lov57mjqUnXHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdHRoYXQud2ViVmlld1RvSDVCZWwoZGF0YSlcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGZhaWwoZXJyKSB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZygn6I635Y+W5bey6L+e5o6l6K6+5aSH5aSx6LSlOicsIGVycilcclxuXHRcdFx0XHRcdHRoYXQub3BlbkJsdWV0b290aEFkYXB0ZXIoKVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHQvLyDlj5HpgIHok53niZnlhoXlrrlcclxuXHRcdHdyaXRlQkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZShiZWx2YWx1ZSkge1xyXG5cdFx0XHRjb25zb2xlLmxvZygn5Y+R6YCB6JOd54mZ5YaF5a65JyxiZWx2YWx1ZSk7XHJcblx0XHRcdGxldCB0aGF0ID0gdGhpc1xyXG5cdFx0XHQvLyDopoHlj5HpgIHnmoTlrZfnrKbkuLJcclxuXHRcdFx0Ly8gJEQ1MDUwNDAzMDIzMSNcclxuXHRcdFx0Ly8gRDUtLS0157Gz6Led56a7XHJcblx0XHRcdC8vIDA2LS0tXHJcblx0XHRcdGNvbnN0IGRhdGFUb1NlbmQgPSB0aGF0LnN0cmluZ1RvQnl0ZUFycmF5KGJlbHZhbHVlKVxyXG5cdFx0XHRjb25zb2xlLmxvZygnIGRhdGFUb1NlbmQuYnVmZmVyJywgZGF0YVRvU2VuZC5idWZmZXIpXHJcblx0XHRcdHVuaS53cml0ZUJMRUNoYXJhY3RlcmlzdGljVmFsdWUoe1xyXG5cdFx0XHRcdGRldmljZUlkOiB0aGF0LmRldmljZUlkLCAvLyDorr7lpIdJRFxyXG5cdFx0XHRcdHNlcnZpY2VJZDogJzAwMDBmZmUwLTAwMDAtMTAwMC04MDAwLTAwODA1ZjliMzRmYicsIC8vIOacjeWKoUlEXHJcblx0XHRcdFx0Y2hhcmFjdGVyaXN0aWNJZDogJzAwMDBmZmUxLTAwMDAtMTAwMC04MDAwLTAwODA1ZjliMzRmYicsIC8vIOeJueW+gUlEXHJcblx0XHRcdFx0dmFsdWU6IGRhdGFUb1NlbmQuYnVmZmVyLFxyXG5cdFx0XHRcdHdyaXRlVHlwZTogJ3dyaXRlJyxcclxuXHRcdFx0XHRzdWNjZXNzOiAoKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZygn5Y+R6YCB5YaF5a655oiQ5YqfJylcclxuXHRcdFx0XHRcdHZhciBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRjb21tYW5kOiAnc2VuZEJlbERhdGFGZWVkYmFjaycsXHJcblx0XHRcdFx0XHRcdGNvbW1hbmRUeXBlOiAnQkVMJyxcclxuXHRcdFx0XHRcdFx0ZGF0YToge1xyXG5cdFx0XHRcdFx0XHRcdHN0YXRlOiAwLFxyXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2U6ICflj5HpgIHlhoXlrrnmiJDlip8nXHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRoYXQud2ViVmlld1RvSDVCZWwoZGF0YSlcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ+WPkemAgeWGheWuueWksei0pScsIGVycilcclxuXHRcdFx0XHRcdHZhciBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRjb21tYW5kOiAnc2VuZEJlbERhdGFGZWVkYmFjaycsXHJcblx0XHRcdFx0XHRcdGNvbW1hbmRUeXBlOiAnQkVMJyxcclxuXHRcdFx0XHRcdFx0ZGF0YToge1xyXG5cdFx0XHRcdFx0XHRcdHN0YXRlOiAwLFxyXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2U6ICflj5HpgIHlhoXlrrnlpLHotKUnXHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRoYXQud2ViVmlld1RvSDVCZWwoZGF0YSlcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0Ly8g5aSE55CG5Y+R6YCB55qE5YaF5a65XHJcblx0XHRzdHJpbmdUb0J5dGVBcnJheShzdHIpIHtcclxuXHRcdFx0Y29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoc3RyLmxlbmd0aCk7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0Ynl0ZUFycmF5W2ldID0gc3RyLmNoYXJDb2RlQXQoaSlcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gYnl0ZUFycmF5O1xyXG5cdFx0fSxcclxuXHRcdC8vIOaWreW8gOiTneeJmVxyXG5cdFx0Y2xvc2VCbHVldG9vdGhBZGFwdGVyKHRpdGxlKSB7XHJcblx0XHRcdGxldCB0aGF0ID0gdGhpc1xyXG5cdFx0XHR1bmkuY2xvc2VCbHVldG9vdGhBZGFwdGVyKHtcclxuXHRcdFx0XHRzdWNjZXNzKCkge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ+iTneeJmemAgumFjeWZqOWFs+mXreaIkOWKnycpO1xyXG5cdFx0XHRcdFx0dmFyIGRhdGEgPSB7XHJcblx0XHRcdFx0XHRcdGNvbW1hbmQ6IHRpdGxlID09PSAnYmVsQ2xvc2UnID8gJ2JlbENsb3NlRmVlZGJhY2snIDogJ2JlbENvbm5lY3RGZWVkYmFjaycsXHJcblx0XHRcdFx0XHRcdGNvbW1hbmRUeXBlOiAnQkVMJyxcclxuXHRcdFx0XHRcdFx0ZGF0YToge1xyXG5cdFx0XHRcdFx0XHRcdHN0YXRlOiAwLFxyXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2U6IHRpdGxlID09PSAnYmVsQ2xvc2UnID8gJ+W3suaWreW8gCcgOiAn5pyq6L+e5o6lJ1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRjbGVhckludGVydmFsKHRoYXQuc2V0SW50ZXJUaW1lQkVMKVxyXG5cdFx0XHRcdFx0dW5pLnN0b3BCbHVldG9vdGhEZXZpY2VzRGlzY292ZXJ5KCk7XHJcblx0XHRcdFx0XHR0aGF0LndlYlZpZXdUb0g1QmVsKGRhdGEpXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRmYWlsKGVycikge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ+WFs+mXreiTneeJmemAgumFjeWZqOWksei0pTogJywgZXJyKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fSxcclxuXHRcdC8vIHVuaWFwcCDkvKDlj4Lnu5kgdnVl6aG16Z2iLS0t5YiY54G/5rWL6K+VXHJcblx0XHR3ZWJWaWV3VG9INUJlbChyZXMpIHtcclxuXHRcdFx0bGV0IGN1cnJlbnRXZWJ2aWV3ID0gdGhpcy4kc2NvcGUuJGdldEFwcFdlYnZpZXcoKTtcclxuXHRcdFx0bGV0IHd2ID0gY3VycmVudFdlYnZpZXcuY2hpbGRyZW4oKVswXTtcclxuXHRcdFx0Y29uc29sZS5sb2coJ0JFTC11bmlhcHAg5Lyg5Y+C57uZIHZ1ZemhtemdoicpO1xyXG5cdFx0XHR3di5ldmFsSlMoYGdldFZ1ZU1lc3NhZ2UoJHtKU09OLnN0cmluZ2lmeShyZXMpfSlgKTtcclxuXHRcdH0sXHJcblx0fVxyXG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///15\n"); /***/ }), /* 16 */