gitextract_bg4_g3iy/ ├── .gitignore ├── .travis.yml ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── README.md ├── apiary.apib ├── checkstyle.xml ├── client/ │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── cc/ │ │ │ └── blynk/ │ │ │ └── client/ │ │ │ ├── ClientLauncher.java │ │ │ ├── CommandParserUtil.java │ │ │ ├── core/ │ │ │ │ ├── ActiveHardwareClient.java │ │ │ │ ├── AppClient.java │ │ │ │ ├── BaseClient.java │ │ │ │ └── HardwareClient.java │ │ │ ├── enums/ │ │ │ │ └── ClientMode.java │ │ │ └── handlers/ │ │ │ ├── ClientReplayingMessageDecoder.java │ │ │ ├── decoders/ │ │ │ │ ├── AppClientMessageDecoder.java │ │ │ │ └── ClientMessageDecoder.java │ │ │ └── hardware/ │ │ │ └── HardwareEchoHandler.java │ │ └── resources/ │ │ ├── log4j2.xml │ │ └── test.crt │ └── test/ │ └── java/ │ └── cc/ │ └── blynk/ │ └── client/ │ └── ClientTest.java ├── docs/ │ ├── README_FOR_APP_DEVS.md │ └── websocket/ │ ├── Command.js │ ├── README.MD │ └── websocket.js.html ├── integration-tests/ │ ├── pom.xml │ └── src/ │ └── test/ │ ├── java/ │ │ └── cc/ │ │ └── blynk/ │ │ └── integration/ │ │ ├── BaseTest.java │ │ ├── CounterBase.java │ │ ├── MyHostVerifier.java │ │ ├── SingleServerInstancePerTest.java │ │ ├── SingleServerInstancePerTestWithDB.java │ │ ├── TestUtil.java │ │ ├── http/ │ │ │ ├── AcmeTest.java │ │ │ ├── HttpAPIKeepAliveServerTest.java │ │ │ ├── HttpAPIPinsAsyncClientTest.java │ │ │ ├── HttpAPIPinsTest.java │ │ │ ├── HttpAndTCPSameJVMTest.java │ │ │ ├── OTATest.java │ │ │ └── UploadAPITest.java │ │ ├── https/ │ │ │ ├── HttpResetPassTest.java │ │ │ └── HttpsAdminServerTest.java │ │ ├── model/ │ │ │ ├── MockHolder.java │ │ │ ├── SimpleClientHandler.java │ │ │ ├── http/ │ │ │ │ ├── PinJsonResponse.java │ │ │ │ └── ResponseUserEntity.java │ │ │ ├── tcp/ │ │ │ │ ├── BaseTestAppClient.java │ │ │ │ ├── BaseTestHardwareClient.java │ │ │ │ ├── ClientPair.java │ │ │ │ ├── TestAppClient.java │ │ │ │ ├── TestHardClient.java │ │ │ │ └── TestSslHardClient.java │ │ │ └── websocket/ │ │ │ ├── AppWebSocketClient.java │ │ │ ├── AppWebSocketClientHandler.java │ │ │ ├── WebSocketClient.java │ │ │ └── WebSocketClientHandler.java │ │ ├── tcp/ │ │ │ ├── AppMailTest.java │ │ │ ├── AppOfflineTest.java │ │ │ ├── AppSyncWorkflowTest.java │ │ │ ├── AppWorkflowTest.java │ │ │ ├── AssignTokenTest.java │ │ │ ├── BlynkInternalTest.java │ │ │ ├── BridgeWorkflowTest.java │ │ │ ├── CloneWorkFlowTest.java │ │ │ ├── DeviceCommandsTest.java │ │ │ ├── DeviceSelectorWorkflowTest.java │ │ │ ├── DeviceTilesWidgetTest.java │ │ │ ├── DeviceWorkflowTest.java │ │ │ ├── EnergyWorkflowTest.java │ │ │ ├── EventorTest.java │ │ │ ├── FacebookLoginTest.java │ │ │ ├── HistoryGraphTest.java │ │ │ ├── LoadBalancingIntegrationTest.java │ │ │ ├── MainWorkflowTest.java │ │ │ ├── MultiAppTest.java │ │ │ ├── NotificationsLogicTest.java │ │ │ ├── OfflineNotificationTest.java │ │ │ ├── PortUnificationTest.java │ │ │ ├── PublishingPreviewFlow.java │ │ │ ├── ReadingWorkflowTest.java │ │ │ ├── RegistrationLimitCheckTest.java │ │ │ ├── ReportingTest.java │ │ │ ├── SetPropertyTest.java │ │ │ ├── ShareProfileWorkflowTest.java │ │ │ ├── SimplePerformanceTest.java │ │ │ ├── SyncWorkflowTest.java │ │ │ ├── TableCommandsTest.java │ │ │ ├── TagCommandsTest.java │ │ │ ├── TimerTest.java │ │ │ ├── WebhookTest.java │ │ │ └── WidgetWorkflowTest.java │ │ ├── tools/ │ │ │ ├── FlahsedTokenGenerator.java │ │ │ ├── ProjectTokenGenerator.java │ │ │ ├── QRGenerator.java │ │ │ ├── TokenGenerator.java │ │ │ └── UserReader.java │ │ └── websocket/ │ │ └── WebSocketTest.java │ └── resources/ │ ├── db-test.properties │ ├── json_test/ │ │ ├── user_profile_json.txt │ │ ├── user_profile_json_2.txt │ │ ├── user_profile_json_3_dashes.txt │ │ ├── user_profile_json_empty_dash.txt │ │ └── user_profile_json_many_dashes.txt │ ├── log4j2-test.xml │ ├── no_certs.properties │ ├── profiles/ │ │ └── u_dmitriy@blynk.cc.user │ ├── server.properties │ ├── server2.properties │ ├── test-certs/ │ │ └── mutual/ │ │ ├── app.crt │ │ ├── app.pem │ │ ├── server.crt │ │ └── server.pem │ └── twitter4j.properties ├── license.txt ├── new_server_install.md ├── pom.xml ├── scripts/ │ ├── copy_to_qa.sh │ ├── db │ ├── help_tools.sh │ ├── move.bat │ ├── move.sh │ ├── native_openssl.sh │ ├── ulimit │ ├── userfull_commands │ └── win/ │ ├── README.md │ └── StartBlynkServer.cmd └── server/ ├── Docker/ │ ├── Dockerfile │ ├── README.md │ └── bin/ │ └── run.sh ├── acme/ │ ├── pom.xml │ └── src/ │ └── main/ │ └── java/ │ ├── cc/ │ │ └── blynk/ │ │ └── server/ │ │ └── acme/ │ │ ├── AcmeClient.java │ │ └── ContentHolder.java │ └── module-info.java ├── core/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ ├── cc/ │ │ │ │ └── blynk/ │ │ │ │ └── server/ │ │ │ │ ├── Holder.java │ │ │ │ ├── Limits.java │ │ │ │ ├── SslContextHolder.java │ │ │ │ ├── TextHolder.java │ │ │ │ ├── common/ │ │ │ │ │ ├── BaseSimpleChannelInboundHandler.java │ │ │ │ │ └── handlers/ │ │ │ │ │ ├── AlreadyLoggedHandler.java │ │ │ │ │ ├── UserNotLoggedHandler.java │ │ │ │ │ └── logic/ │ │ │ │ │ └── PingLogic.java │ │ │ │ ├── core/ │ │ │ │ │ ├── BlockingIOProcessor.java │ │ │ │ │ ├── dao/ │ │ │ │ │ │ ├── CSVGenerator.java │ │ │ │ │ │ ├── FileManager.java │ │ │ │ │ │ ├── RegularTokenManager.java │ │ │ │ │ │ ├── ReportingDiskDao.java │ │ │ │ │ │ ├── SessionDao.java │ │ │ │ │ │ ├── SharedTokenManager.java │ │ │ │ │ │ ├── SharedTokenValue.java │ │ │ │ │ │ ├── TemporaryTokenValue.java │ │ │ │ │ │ ├── TokenManager.java │ │ │ │ │ │ ├── TokenValue.java │ │ │ │ │ │ ├── UserDao.java │ │ │ │ │ │ ├── UserKey.java │ │ │ │ │ │ ├── functions/ │ │ │ │ │ │ │ ├── AverageGraphFunction.java │ │ │ │ │ │ │ ├── GraphFunction.java │ │ │ │ │ │ │ ├── MaxGraphFunction.java │ │ │ │ │ │ │ ├── MedianGraphFunction.java │ │ │ │ │ │ │ ├── MinGraphFunction.java │ │ │ │ │ │ │ └── SumGraphFunction.java │ │ │ │ │ │ └── ota/ │ │ │ │ │ │ ├── OTAInfo.java │ │ │ │ │ │ └── OTAManager.java │ │ │ │ │ ├── model/ │ │ │ │ │ │ ├── DashBoard.java │ │ │ │ │ │ ├── DashboardSettings.java │ │ │ │ │ │ ├── DataStream.java │ │ │ │ │ │ ├── Profile.java │ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ │ ├── App.java │ │ │ │ │ │ │ ├── FacebookTokenResponse.java │ │ │ │ │ │ │ ├── Session.java │ │ │ │ │ │ │ └── User.java │ │ │ │ │ │ ├── device/ │ │ │ │ │ │ │ ├── BoardType.java │ │ │ │ │ │ │ ├── ConnectionType.java │ │ │ │ │ │ │ ├── Device.java │ │ │ │ │ │ │ ├── DeviceOtaInfo.java │ │ │ │ │ │ │ ├── DeviceStatusDTO.java │ │ │ │ │ │ │ ├── HardwareInfo.java │ │ │ │ │ │ │ ├── HardwareInfoPrivate.java │ │ │ │ │ │ │ ├── Status.java │ │ │ │ │ │ │ └── Tag.java │ │ │ │ │ │ ├── enums/ │ │ │ │ │ │ │ ├── PinMode.java │ │ │ │ │ │ │ ├── PinType.java │ │ │ │ │ │ │ ├── ProvisionType.java │ │ │ │ │ │ │ ├── Theme.java │ │ │ │ │ │ │ └── WidgetProperty.java │ │ │ │ │ │ ├── graph/ │ │ │ │ │ │ │ └── GraphKey.java │ │ │ │ │ │ ├── serialization/ │ │ │ │ │ │ │ ├── CopyUtil.java │ │ │ │ │ │ │ ├── JsonParser.java │ │ │ │ │ │ │ └── View.java │ │ │ │ │ │ ├── storage/ │ │ │ │ │ │ │ ├── DashPinStorageKeyDeserializer.java │ │ │ │ │ │ │ ├── PinStorageKeyDeserializer.java │ │ │ │ │ │ │ ├── PinStorageValueDeserializer.java │ │ │ │ │ │ │ ├── key/ │ │ │ │ │ │ │ │ ├── DashPinPropertyStorageKey.java │ │ │ │ │ │ │ │ ├── DashPinStorageKey.java │ │ │ │ │ │ │ │ ├── PinPropertyStorageKey.java │ │ │ │ │ │ │ │ └── PinStorageKey.java │ │ │ │ │ │ │ └── value/ │ │ │ │ │ │ │ ├── MultiPinStorageValue.java │ │ │ │ │ │ │ ├── MultiPinStorageValueType.java │ │ │ │ │ │ │ ├── PinStorageValue.java │ │ │ │ │ │ │ └── SinglePinStorageValue.java │ │ │ │ │ │ └── widgets/ │ │ │ │ │ │ ├── CopyObject.java │ │ │ │ │ │ ├── DeviceCleaner.java │ │ │ │ │ │ ├── FrequencyWidget.java │ │ │ │ │ │ ├── HardwareSyncWidget.java │ │ │ │ │ │ ├── MobileSyncWidget.java │ │ │ │ │ │ ├── MultiPinWidget.java │ │ │ │ │ │ ├── NoPinWidget.java │ │ │ │ │ │ ├── OnePinReadingWidget.java │ │ │ │ │ │ ├── OnePinWidget.java │ │ │ │ │ │ ├── Target.java │ │ │ │ │ │ ├── Widget.java │ │ │ │ │ │ ├── controls/ │ │ │ │ │ │ │ ├── Button.java │ │ │ │ │ │ │ ├── ButtonState.java │ │ │ │ │ │ │ ├── ButtonStyle.java │ │ │ │ │ │ │ ├── Edge.java │ │ │ │ │ │ │ ├── LinkButton.java │ │ │ │ │ │ │ ├── NumberInput.java │ │ │ │ │ │ │ ├── QR.java │ │ │ │ │ │ │ ├── RGB.java │ │ │ │ │ │ │ ├── SegmentedControl.java │ │ │ │ │ │ │ ├── Slider.java │ │ │ │ │ │ │ ├── Step.java │ │ │ │ │ │ │ ├── StyledButton.java │ │ │ │ │ │ │ ├── Switch.java │ │ │ │ │ │ │ ├── Terminal.java │ │ │ │ │ │ │ ├── TextInput.java │ │ │ │ │ │ │ ├── Timer.java │ │ │ │ │ │ │ ├── TwoAxisJoystick.java │ │ │ │ │ │ │ ├── VerticalSlider.java │ │ │ │ │ │ │ └── VerticalStep.java │ │ │ │ │ │ ├── notifications/ │ │ │ │ │ │ │ ├── Mail.java │ │ │ │ │ │ │ ├── Notification.java │ │ │ │ │ │ │ ├── SMS.java │ │ │ │ │ │ │ └── Twitter.java │ │ │ │ │ │ ├── others/ │ │ │ │ │ │ │ ├── Bluetooth.java │ │ │ │ │ │ │ ├── BluetoothSerial.java │ │ │ │ │ │ │ ├── Bridge.java │ │ │ │ │ │ │ ├── Player.java │ │ │ │ │ │ │ ├── TextWidget.java │ │ │ │ │ │ │ ├── Video.java │ │ │ │ │ │ │ ├── eventor/ │ │ │ │ │ │ │ │ ├── Eventor.java │ │ │ │ │ │ │ │ ├── Rule.java │ │ │ │ │ │ │ │ ├── TimerTime.java │ │ │ │ │ │ │ │ └── model/ │ │ │ │ │ │ │ │ ├── action/ │ │ │ │ │ │ │ │ │ ├── BaseAction.java │ │ │ │ │ │ │ │ │ ├── SetPinAction.java │ │ │ │ │ │ │ │ │ ├── SetPinActionType.java │ │ │ │ │ │ │ │ │ ├── SetPropertyPinAction.java │ │ │ │ │ │ │ │ │ └── notification/ │ │ │ │ │ │ │ │ │ ├── MailAction.java │ │ │ │ │ │ │ │ │ ├── NotificationAction.java │ │ │ │ │ │ │ │ │ ├── NotifyAction.java │ │ │ │ │ │ │ │ │ └── TwitAction.java │ │ │ │ │ │ │ │ └── condition/ │ │ │ │ │ │ │ │ ├── BaseCondition.java │ │ │ │ │ │ │ │ ├── ValueChanged.java │ │ │ │ │ │ │ │ ├── number/ │ │ │ │ │ │ │ │ │ ├── Between.java │ │ │ │ │ │ │ │ │ ├── Equal.java │ │ │ │ │ │ │ │ │ ├── GreaterThan.java │ │ │ │ │ │ │ │ │ ├── GreaterThanOrEqual.java │ │ │ │ │ │ │ │ │ ├── LessThan.java │ │ │ │ │ │ │ │ │ ├── LessThanOrEqual.java │ │ │ │ │ │ │ │ │ ├── NotBetween.java │ │ │ │ │ │ │ │ │ └── NotEqual.java │ │ │ │ │ │ │ │ └── string/ │ │ │ │ │ │ │ │ ├── StringEqual.java │ │ │ │ │ │ │ │ └── StringNotEqual.java │ │ │ │ │ │ │ ├── rtc/ │ │ │ │ │ │ │ │ ├── RTC.java │ │ │ │ │ │ │ │ ├── StringToZoneId.java │ │ │ │ │ │ │ │ └── ZoneIdToString.java │ │ │ │ │ │ │ └── webhook/ │ │ │ │ │ │ │ ├── Header.java │ │ │ │ │ │ │ ├── SupportedWebhookMethod.java │ │ │ │ │ │ │ └── WebHook.java │ │ │ │ │ │ ├── outputs/ │ │ │ │ │ │ │ ├── Gauge.java │ │ │ │ │ │ │ ├── LCD.java │ │ │ │ │ │ │ ├── LED.java │ │ │ │ │ │ │ ├── LabeledValueDisplay.java │ │ │ │ │ │ │ ├── LevelDisplay.java │ │ │ │ │ │ │ ├── Map.java │ │ │ │ │ │ │ ├── TextAlignment.java │ │ │ │ │ │ │ ├── ValueDisplay.java │ │ │ │ │ │ │ ├── VerticalLevelDisplay.java │ │ │ │ │ │ │ └── graph/ │ │ │ │ │ │ │ ├── AggregationFunctionType.java │ │ │ │ │ │ │ ├── FontSize.java │ │ │ │ │ │ │ ├── GoalLine.java │ │ │ │ │ │ │ ├── GraphDataStream.java │ │ │ │ │ │ │ ├── GraphGranularityType.java │ │ │ │ │ │ │ ├── GraphPeriod.java │ │ │ │ │ │ │ ├── GraphType.java │ │ │ │ │ │ │ ├── LineType.java │ │ │ │ │ │ │ ├── Stacking.java │ │ │ │ │ │ │ ├── Superchart.java │ │ │ │ │ │ │ └── YAxisScale.java │ │ │ │ │ │ ├── sensors/ │ │ │ │ │ │ │ ├── Accelerometer.java │ │ │ │ │ │ │ ├── Barometer.java │ │ │ │ │ │ │ ├── GPSStreaming.java │ │ │ │ │ │ │ ├── GPSTrigger.java │ │ │ │ │ │ │ ├── Gravity.java │ │ │ │ │ │ │ ├── Humidity.java │ │ │ │ │ │ │ ├── Light.java │ │ │ │ │ │ │ ├── Proximity.java │ │ │ │ │ │ │ └── Temperature.java │ │ │ │ │ │ └── ui/ │ │ │ │ │ │ ├── DeviceSelector.java │ │ │ │ │ │ ├── Menu.java │ │ │ │ │ │ ├── Tab.java │ │ │ │ │ │ ├── Tabs.java │ │ │ │ │ │ ├── TimeInput.java │ │ │ │ │ │ ├── image/ │ │ │ │ │ │ │ ├── Image.java │ │ │ │ │ │ │ ├── ImageScaling.java │ │ │ │ │ │ │ └── ImageSource.java │ │ │ │ │ │ ├── reporting/ │ │ │ │ │ │ │ ├── BaseReportTask.java │ │ │ │ │ │ │ ├── Format.java │ │ │ │ │ │ │ ├── PeriodicReportTask.java │ │ │ │ │ │ │ ├── Report.java │ │ │ │ │ │ │ ├── ReportOutput.java │ │ │ │ │ │ │ ├── ReportResult.java │ │ │ │ │ │ │ ├── ReportScheduler.java │ │ │ │ │ │ │ ├── ReportTaskKey.java │ │ │ │ │ │ │ ├── ReportingWidget.java │ │ │ │ │ │ │ ├── source/ │ │ │ │ │ │ │ │ ├── DeviceReportSource.java │ │ │ │ │ │ │ │ ├── ReportDataStream.java │ │ │ │ │ │ │ │ ├── ReportSource.java │ │ │ │ │ │ │ │ └── TileTemplateReportSource.java │ │ │ │ │ │ │ └── type/ │ │ │ │ │ │ │ ├── BaseReportType.java │ │ │ │ │ │ │ ├── DailyReport.java │ │ │ │ │ │ │ ├── DayOfMonth.java │ │ │ │ │ │ │ ├── MonthlyReport.java │ │ │ │ │ │ │ ├── OneTimeReport.java │ │ │ │ │ │ │ ├── ReportDurationType.java │ │ │ │ │ │ │ └── WeeklyReport.java │ │ │ │ │ │ ├── table/ │ │ │ │ │ │ │ ├── Column.java │ │ │ │ │ │ │ ├── Row.java │ │ │ │ │ │ │ └── Table.java │ │ │ │ │ │ └── tiles/ │ │ │ │ │ │ ├── DeviceTiles.java │ │ │ │ │ │ ├── SortType.java │ │ │ │ │ │ ├── Tile.java │ │ │ │ │ │ ├── TileMode.java │ │ │ │ │ │ ├── TileTemplate.java │ │ │ │ │ │ └── templates/ │ │ │ │ │ │ ├── ButtonTileTemplate.java │ │ │ │ │ │ ├── DimmerTileTemplate.java │ │ │ │ │ │ ├── Interaction.java │ │ │ │ │ │ ├── PageTileTemplate.java │ │ │ │ │ │ └── State.java │ │ │ │ │ ├── processors/ │ │ │ │ │ │ ├── BaseProcessorHandler.java │ │ │ │ │ │ ├── EventorProcessor.java │ │ │ │ │ │ ├── NotificationBase.java │ │ │ │ │ │ └── WebhookProcessor.java │ │ │ │ │ ├── protocol/ │ │ │ │ │ │ ├── enums/ │ │ │ │ │ │ │ ├── Command.java │ │ │ │ │ │ │ └── Response.java │ │ │ │ │ │ ├── exceptions/ │ │ │ │ │ │ │ ├── BaseServerException.java │ │ │ │ │ │ │ ├── IllegalCommandBodyException.java │ │ │ │ │ │ │ ├── IllegalCommandException.java │ │ │ │ │ │ │ ├── NoDataException.java │ │ │ │ │ │ │ ├── NotAllowedException.java │ │ │ │ │ │ │ ├── QuotaLimitException.java │ │ │ │ │ │ │ └── UnsupportedCommandException.java │ │ │ │ │ │ ├── handlers/ │ │ │ │ │ │ │ ├── DefaultExceptionHandler.java │ │ │ │ │ │ │ ├── decoders/ │ │ │ │ │ │ │ │ ├── MessageDecoder.java │ │ │ │ │ │ │ │ ├── MobileMessageDecoder.java │ │ │ │ │ │ │ │ └── WSMessageDecoder.java │ │ │ │ │ │ │ └── encoders/ │ │ │ │ │ │ │ ├── MessageEncoder.java │ │ │ │ │ │ │ ├── MobileMessageEncoder.java │ │ │ │ │ │ │ └── WSMessageEncoder.java │ │ │ │ │ │ └── model/ │ │ │ │ │ │ └── messages/ │ │ │ │ │ │ ├── BinaryMessage.java │ │ │ │ │ │ ├── MessageBase.java │ │ │ │ │ │ ├── MessageFactory.java │ │ │ │ │ │ ├── ResponseMessage.java │ │ │ │ │ │ ├── StringMessage.java │ │ │ │ │ │ ├── appllication/ │ │ │ │ │ │ │ ├── GetServerMessage.java │ │ │ │ │ │ │ ├── LoginMessage.java │ │ │ │ │ │ │ ├── RegisterMessage.java │ │ │ │ │ │ │ ├── ResetPasswordMessage.java │ │ │ │ │ │ │ └── sharing/ │ │ │ │ │ │ │ └── ShareLoginMessage.java │ │ │ │ │ │ ├── common/ │ │ │ │ │ │ │ └── HardwareMessage.java │ │ │ │ │ │ └── hardware/ │ │ │ │ │ │ └── HardwareLoginMessage.java │ │ │ │ │ ├── reporting/ │ │ │ │ │ │ ├── GraphPinRequest.java │ │ │ │ │ │ ├── average/ │ │ │ │ │ │ │ ├── AggregationKey.java │ │ │ │ │ │ │ ├── AggregationValue.java │ │ │ │ │ │ │ └── AverageAggregatorProcessor.java │ │ │ │ │ │ └── raw/ │ │ │ │ │ │ ├── BaseReportingKey.java │ │ │ │ │ │ ├── GraphValue.java │ │ │ │ │ │ ├── RawDataCacheForGraphProcessor.java │ │ │ │ │ │ └── RawDataProcessor.java │ │ │ │ │ ├── session/ │ │ │ │ │ │ ├── HardwareStateHolder.java │ │ │ │ │ │ └── StateHolderBase.java │ │ │ │ │ └── stats/ │ │ │ │ │ ├── EWMA.java │ │ │ │ │ ├── GlobalStats.java │ │ │ │ │ ├── Meter.java │ │ │ │ │ ├── metrics/ │ │ │ │ │ │ └── InstanceLoadMeter.java │ │ │ │ │ └── model/ │ │ │ │ │ ├── BlockingIOStat.java │ │ │ │ │ ├── CommandStat.java │ │ │ │ │ ├── HttpStat.java │ │ │ │ │ ├── MemoryStat.java │ │ │ │ │ └── Stat.java │ │ │ │ ├── db/ │ │ │ │ │ ├── DBManager.java │ │ │ │ │ ├── ReportingDBManager.java │ │ │ │ │ ├── dao/ │ │ │ │ │ │ ├── CloneProjectDBDao.java │ │ │ │ │ │ ├── FlashedTokensDBDao.java │ │ │ │ │ │ ├── ForwardingTokenDBDao.java │ │ │ │ │ │ ├── ForwardingTokenEntry.java │ │ │ │ │ │ ├── PurchaseDBDao.java │ │ │ │ │ │ ├── RedeemDBDao.java │ │ │ │ │ │ ├── ReportingDBDao.java │ │ │ │ │ │ └── UserDBDao.java │ │ │ │ │ └── model/ │ │ │ │ │ ├── FlashedToken.java │ │ │ │ │ ├── Purchase.java │ │ │ │ │ └── Redeem.java │ │ │ │ ├── internal/ │ │ │ │ │ ├── CommonByteBufUtil.java │ │ │ │ │ ├── EmptyArraysUtil.java │ │ │ │ │ ├── QuotaLimitChecker.java │ │ │ │ │ ├── ReregisterChannelUtil.java │ │ │ │ │ ├── SerializationUtil.java │ │ │ │ │ ├── StateHolderUtil.java │ │ │ │ │ └── token/ │ │ │ │ │ ├── BaseToken.java │ │ │ │ │ ├── ResetPassToken.java │ │ │ │ │ └── TokensPool.java │ │ │ │ ├── transport/ │ │ │ │ │ └── TransportTypeHolder.java │ │ │ │ └── workers/ │ │ │ │ ├── ReadingWidgetsWorker.java │ │ │ │ └── timer/ │ │ │ │ ├── TimerKey.java │ │ │ │ └── TimerWorker.java │ │ │ └── module-info.java │ │ └── resources/ │ │ ├── create_schema.sql │ │ ├── db.properties │ │ ├── dynamic_provisioning_mail.html │ │ ├── migrataion.temp │ │ ├── reporting_schema.sql │ │ ├── server.properties │ │ ├── single_token_mail_body.txt │ │ ├── static_provisioning_mail.html │ │ └── template_id_mail.html │ └── test/ │ ├── java/ │ │ └── cc/ │ │ └── blynk/ │ │ ├── server/ │ │ │ ├── core/ │ │ │ │ ├── dao/ │ │ │ │ │ ├── CSVGeneratorTest.java │ │ │ │ │ ├── ReportingDaoTest.java │ │ │ │ │ └── functions/ │ │ │ │ │ └── MedianGraphFunctionTest.java │ │ │ │ ├── device/ │ │ │ │ │ └── SerializationForBoardTypeTest.java │ │ │ │ ├── model/ │ │ │ │ │ ├── CopyObjectTest.java │ │ │ │ │ ├── DataStreamStorageSerializationTest.java │ │ │ │ │ ├── DataStreamValuesUpdateCorrectTest.java │ │ │ │ │ └── widgets/ │ │ │ │ │ ├── DataStreamGetJsonValueTest.java │ │ │ │ │ ├── MultiPinWidgetsToJsonTest.java │ │ │ │ │ ├── others/ │ │ │ │ │ │ └── RTCSerializationTest.java │ │ │ │ │ └── ui/ │ │ │ │ │ ├── TableSerializationTest.java │ │ │ │ │ └── reporting/ │ │ │ │ │ └── ReportingModelTest.java │ │ │ │ └── reporting/ │ │ │ │ └── average/ │ │ │ │ └── AverageAggregatorTest.java │ │ │ ├── db/ │ │ │ │ ├── CloneProjectTest.java │ │ │ │ ├── DBManagerTest.java │ │ │ │ ├── FlashedTokensManagerTest.java │ │ │ │ ├── ForwardingTokenTest.java │ │ │ │ ├── RawDataDBTest.java │ │ │ │ └── RealtimeStatsDBTest.java │ │ │ └── internal/ │ │ │ └── SerializationTokenPoolTest.java │ │ └── test/ │ │ └── utils/ │ │ ├── FileManagerIntegrationTest.java │ │ ├── JsonParsingTest.java │ │ ├── NumberUtilTest.java │ │ ├── StringUtilPerfTest.java │ │ ├── StringUtilsTest.java │ │ └── UserStatisticsTest.java │ └── resources/ │ ├── db-test.properties │ ├── json_test/ │ │ ├── user_ios_profile_json.txt │ │ ├── user_profile_json.txt │ │ ├── user_profile_json_2.txt │ │ ├── user_profile_json_3.txt │ │ ├── user_profile_json_4.txt │ │ ├── user_profile_json_5.txt │ │ ├── user_profile_json_RGB.txt │ │ ├── user_profile_json_old_pinstorage.txt │ │ ├── user_profile_json_with_outdated_widget.txt │ │ └── user_profile_with_timer.txt │ └── log4j2-test.xml ├── http-admin/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ ├── cc/ │ │ │ │ └── blynk/ │ │ │ │ └── server/ │ │ │ │ └── admin/ │ │ │ │ └── http/ │ │ │ │ ├── handlers/ │ │ │ │ │ └── IpFilterHandler.java │ │ │ │ ├── logic/ │ │ │ │ │ ├── Config.java │ │ │ │ │ ├── ConfigsLogic.java │ │ │ │ │ ├── HardwareStatsLogic.java │ │ │ │ │ ├── OTALogic.java │ │ │ │ │ ├── StatsLogic.java │ │ │ │ │ └── UsersLogic.java │ │ │ │ └── response/ │ │ │ │ ├── IpNameResponse.java │ │ │ │ └── RequestPerSecondResponse.java │ │ │ └── module-info.java │ │ └── resources/ │ │ └── static/ │ │ ├── admin.html │ │ ├── css/ │ │ │ └── blynk.css │ │ ├── js/ │ │ │ ├── admin.js │ │ │ ├── core-min.js │ │ │ ├── enc-base64-min.js │ │ │ ├── login.js │ │ │ └── sha256-min.js │ │ └── login.html │ └── test/ │ └── java/ │ └── cc/ │ └── blynk/ │ └── server/ │ ├── admin/ │ │ └── http/ │ │ ├── handlers/ │ │ │ └── IpFilterHandlerTest.java │ │ └── logic/ │ │ └── admin/ │ │ └── UsersLogicTest.java │ └── reset/ │ └── SHA256UtilTest.java ├── http-api/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── cc/ │ │ │ └── blynk/ │ │ │ └── server/ │ │ │ └── api/ │ │ │ ├── http/ │ │ │ │ ├── handlers/ │ │ │ │ │ ├── BaseHttpAndBlynkUnificationHandler.java │ │ │ │ │ ├── BaseWebSocketUnificator.java │ │ │ │ │ └── LetsEncryptHandler.java │ │ │ │ ├── logic/ │ │ │ │ │ ├── HttpAPILogic.java │ │ │ │ │ ├── ResetPasswordHttpLogic.java │ │ │ │ │ └── business/ │ │ │ │ │ ├── AdminAuthHandler.java │ │ │ │ │ └── AuthCookieHandler.java │ │ │ │ └── pojo/ │ │ │ │ ├── EmailPojo.java │ │ │ │ ├── PinData.java │ │ │ │ └── PushMessagePojo.java │ │ │ └── websockets/ │ │ │ └── handlers/ │ │ │ ├── WSHandler.java │ │ │ └── WSWrapperEncoder.java │ │ └── resources/ │ │ └── static/ │ │ └── reset/ │ │ ├── enterNewPassword.html │ │ ├── reset-email-app-confirmation.html │ │ ├── reset-email-app.html │ │ ├── reset-email.html │ │ └── site.css │ └── test/ │ └── java/ │ └── cc/ │ └── blynk/ │ └── server/ │ ├── api/ │ │ └── http/ │ │ ├── logic/ │ │ │ ├── HttpSignatureTest.java │ │ │ └── TestHideSecureInfoForCloning.java │ │ └── pojo/ │ │ └── TestDataStreamDataJson.java │ └── reset/ │ └── TokensPoolTest.java ├── http-core/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ ├── cc/ │ │ │ └── blynk/ │ │ │ └── core/ │ │ │ └── http/ │ │ │ ├── AnnotationsProcessor.java │ │ │ ├── AuthHeadersBaseHttpHandler.java │ │ │ ├── BaseHttpHandler.java │ │ │ ├── CookiesBaseHttpHandler.java │ │ │ ├── Response.java │ │ │ ├── TokenBaseHttpHandler.java │ │ │ ├── UriTemplate.java │ │ │ ├── annotation/ │ │ │ │ ├── Consumes.java │ │ │ │ ├── Context.java │ │ │ │ ├── DELETE.java │ │ │ │ ├── EnumQueryParam.java │ │ │ │ ├── FormParam.java │ │ │ │ ├── GET.java │ │ │ │ ├── HttpMethod.java │ │ │ │ ├── Metric.java │ │ │ │ ├── POST.java │ │ │ │ ├── PUT.java │ │ │ │ ├── Path.java │ │ │ │ ├── PathParam.java │ │ │ │ └── QueryParam.java │ │ │ ├── handlers/ │ │ │ │ ├── BlynkHttpPostMultipartRequestDecoder.java │ │ │ │ ├── BlynkHttpPostRequestDecoder.java │ │ │ │ ├── CookieBasedUrlReWriterHandler.java │ │ │ │ ├── HttpPostBodyUtil.java │ │ │ │ ├── NoCacheStaticFile.java │ │ │ │ ├── NoMatchHandler.java │ │ │ │ ├── OTAHandler.java │ │ │ │ ├── StaticFile.java │ │ │ │ ├── StaticFileEdsWith.java │ │ │ │ ├── StaticFileHandler.java │ │ │ │ ├── UploadHandler.java │ │ │ │ └── url/ │ │ │ │ ├── UrlMapper.java │ │ │ │ └── UrlReWriterHandler.java │ │ │ ├── model/ │ │ │ │ ├── Filter.java │ │ │ │ └── NameCountResponse.java │ │ │ ├── rest/ │ │ │ │ ├── HandlerHolder.java │ │ │ │ ├── HandlerWrapper.java │ │ │ │ ├── RequestHeaderParam.java │ │ │ │ ├── URIDecoder.java │ │ │ │ └── params/ │ │ │ │ ├── BodyParam.java │ │ │ │ ├── ContextParam.java │ │ │ │ ├── EnumQueryParam.java │ │ │ │ ├── FormParam.java │ │ │ │ ├── Param.java │ │ │ │ ├── PathParam.java │ │ │ │ └── QueryParam.java │ │ │ └── utils/ │ │ │ ├── AdminHttpUtil.java │ │ │ ├── ContentTypeUtil.java │ │ │ └── ListUtils.java │ │ └── module-info.java │ └── test/ │ └── java/ │ └── cc/ │ └── blynk/ │ ├── core/ │ │ └── http/ │ │ └── UriTemplateTest.java │ └── test/ │ └── ListUtilsTest.java ├── launcher/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── cc/ │ │ │ └── blynk/ │ │ │ ├── cli/ │ │ │ │ ├── AlreadySelectedException.java │ │ │ │ ├── AmbiguousOptionException.java │ │ │ │ ├── CommandLine.java │ │ │ │ ├── DefaultParser.java │ │ │ │ ├── MissingArgumentException.java │ │ │ │ ├── MissingOptionException.java │ │ │ │ ├── Option.java │ │ │ │ ├── OptionGroup.java │ │ │ │ ├── OptionValidator.java │ │ │ │ ├── Options.java │ │ │ │ ├── ParseException.java │ │ │ │ ├── UnrecognizedOptionException.java │ │ │ │ └── Util.java │ │ │ ├── server/ │ │ │ │ ├── launcher/ │ │ │ │ │ ├── ArgumentsParser.java │ │ │ │ │ ├── JobLauncher.java │ │ │ │ │ └── ServerLauncher.java │ │ │ │ ├── servers/ │ │ │ │ │ ├── BaseServer.java │ │ │ │ │ ├── application/ │ │ │ │ │ │ └── MobileAndHttpsServer.java │ │ │ │ │ └── hardware/ │ │ │ │ │ ├── HardwareAndHttpAPIServer.java │ │ │ │ │ └── MQTTHardwareServer.java │ │ │ │ └── workers/ │ │ │ │ ├── CertificateRenewalWorker.java │ │ │ │ ├── HistoryGraphUnusedPinDataCleanerWorker.java │ │ │ │ ├── ProfileSaverWorker.java │ │ │ │ ├── ReportingTruncateWorker.java │ │ │ │ ├── ReportingWorker.java │ │ │ │ ├── ShutdownHookWorker.java │ │ │ │ └── StatsWorker.java │ │ │ └── utils/ │ │ │ └── LoggerUtil.java │ │ └── resources/ │ │ └── log4j2.xml │ └── test/ │ └── java/ │ └── cc/ │ └── blynk/ │ └── server/ │ └── workers/ │ ├── ProfileSaverWorkerTest.java │ └── ReportingWorkerTest.java ├── notifications/ │ ├── email/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ ├── cc/ │ │ │ │ │ └── blynk/ │ │ │ │ │ └── server/ │ │ │ │ │ └── notifications/ │ │ │ │ │ └── mail/ │ │ │ │ │ ├── GMailClient.java │ │ │ │ │ ├── MailClient.java │ │ │ │ │ ├── MailWrapper.java │ │ │ │ │ ├── QrHolder.java │ │ │ │ │ ├── ResetQrHolder.java │ │ │ │ │ └── ThirdPartyMailClient.java │ │ │ │ └── module-info.java │ │ │ └── resources/ │ │ │ └── mail.properties │ │ └── test/ │ │ ├── java/ │ │ │ └── cc/ │ │ │ └── blynk/ │ │ │ └── server/ │ │ │ └── notifications/ │ │ │ └── mail/ │ │ │ └── MailWrapperTest.java │ │ └── resources/ │ │ ├── amazon.properties │ │ ├── mail.properties │ │ ├── sparkpost-http.properties │ │ └── sparkpost-smtp.properties │ ├── pom.xml │ ├── push/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ ├── cc/ │ │ │ │ │ └── blynk/ │ │ │ │ │ └── server/ │ │ │ │ │ └── notifications/ │ │ │ │ │ └── push/ │ │ │ │ │ ├── GCMMessage.java │ │ │ │ │ ├── GCMResponseMessage.java │ │ │ │ │ ├── GCMResult.java │ │ │ │ │ ├── GCMWrapper.java │ │ │ │ │ ├── android/ │ │ │ │ │ │ ├── AndroidBody.java │ │ │ │ │ │ └── AndroidGCMMessage.java │ │ │ │ │ ├── enums/ │ │ │ │ │ │ └── Priority.java │ │ │ │ │ └── ios/ │ │ │ │ │ ├── IOSBody.java │ │ │ │ │ └── IOSGCMMessage.java │ │ │ │ └── module-info.java │ │ │ └── resources/ │ │ │ └── gcm.properties │ │ └── test/ │ │ └── java/ │ │ └── cc/ │ │ └── blynk/ │ │ └── server/ │ │ └── notifications/ │ │ └── push/ │ │ └── GCMWrapperTest.java │ ├── sms/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ ├── cc/ │ │ │ │ │ └── blynk/ │ │ │ │ │ └── server/ │ │ │ │ │ └── notifications/ │ │ │ │ │ └── sms/ │ │ │ │ │ ├── SMSWrapper.java │ │ │ │ │ └── SmsResponse.java │ │ │ │ └── module-info.java │ │ │ └── resources/ │ │ │ └── sms.properties │ │ └── test/ │ │ └── java/ │ │ └── cc/ │ │ └── blynk/ │ │ └── server/ │ │ └── notifications/ │ │ └── sms/ │ │ └── TestSendSms.java │ └── twitter/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ ├── cc/ │ │ │ └── blynk/ │ │ │ └── server/ │ │ │ └── notifications/ │ │ │ └── twitter/ │ │ │ └── TwitterWrapper.java │ │ └── module-info.java │ └── test/ │ ├── java/ │ │ └── cc/ │ │ └── blynk/ │ │ └── server/ │ │ └── notifications/ │ │ └── twitter/ │ │ └── TwitterWrapperTest.java │ └── resources/ │ └── twitter4j.properties ├── pom.xml ├── tcp-app-server/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── cc/ │ │ │ └── blynk/ │ │ │ ├── server/ │ │ │ │ └── application/ │ │ │ │ └── handlers/ │ │ │ │ ├── main/ │ │ │ │ │ ├── MobileChannelStateHandler.java │ │ │ │ │ ├── MobileHandler.java │ │ │ │ │ ├── MobileResetPasswordHandler.java │ │ │ │ │ ├── auth/ │ │ │ │ │ │ ├── LimitChecker.java │ │ │ │ │ │ ├── MobileGetServerHandler.java │ │ │ │ │ │ ├── MobileLoginHandler.java │ │ │ │ │ │ ├── MobileRegisterHandler.java │ │ │ │ │ │ ├── MobileStateHolder.java │ │ │ │ │ │ ├── OsType.java │ │ │ │ │ │ └── Version.java │ │ │ │ │ └── logic/ │ │ │ │ │ ├── LoadSharedProfileGzippedLogic.java │ │ │ │ │ ├── MobileActivateDashboardLogic.java │ │ │ │ │ ├── MobileAddPushLogic.java │ │ │ │ │ ├── MobileAssignTokenLogic.java │ │ │ │ │ ├── MobileDeActivateDashboardLogic.java │ │ │ │ │ ├── MobileGetCloneCodeLogic.java │ │ │ │ │ ├── MobileGetEnergyLogic.java │ │ │ │ │ ├── MobileGetProjectByClonedTokenLogic.java │ │ │ │ │ ├── MobileGetProjectByTokenLogic.java │ │ │ │ │ ├── MobileGetProvisionTokenLogic.java │ │ │ │ │ ├── MobileHardwareLogic.java │ │ │ │ │ ├── MobileHardwareResendFromBTLogic.java │ │ │ │ │ ├── MobileLoadProfileGzippedLogic.java │ │ │ │ │ ├── MobileLogoutLogic.java │ │ │ │ │ ├── MobileMailLogic.java │ │ │ │ │ ├── MobilePurchaseLogic.java │ │ │ │ │ ├── MobileRedeemLogic.java │ │ │ │ │ ├── MobileRefreshTokenLogic.java │ │ │ │ │ ├── MobileSetWidgetPropertyLogic.java │ │ │ │ │ ├── MobileSyncLogic.java │ │ │ │ │ ├── dashboard/ │ │ │ │ │ │ ├── MobileCreateDashLogic.java │ │ │ │ │ │ ├── MobileDeleteDashLogic.java │ │ │ │ │ │ ├── MobileUpdateDashLogic.java │ │ │ │ │ │ ├── MobileUpdateDashSettingLogic.java │ │ │ │ │ │ ├── device/ │ │ │ │ │ │ │ ├── MobileCreateDeviceLogic.java │ │ │ │ │ │ │ ├── MobileDeleteDeviceLogic.java │ │ │ │ │ │ │ ├── MobileGetDeviceLogic.java │ │ │ │ │ │ │ ├── MobileGetDevicesLogic.java │ │ │ │ │ │ │ └── MobileUpdateDeviceLogic.java │ │ │ │ │ │ ├── tags/ │ │ │ │ │ │ │ ├── MobileCreateTagLogic.java │ │ │ │ │ │ │ ├── MobileDeleteTagLogic.java │ │ │ │ │ │ │ ├── MobileGetTagsLogic.java │ │ │ │ │ │ │ └── MobileUpdateTagLogic.java │ │ │ │ │ │ └── widget/ │ │ │ │ │ │ ├── MobileCreateWidgetLogic.java │ │ │ │ │ │ ├── MobileDeleteWidgetLogic.java │ │ │ │ │ │ ├── MobileGetWidgetLogic.java │ │ │ │ │ │ ├── MobileUpdateWidgetLogic.java │ │ │ │ │ │ └── tile/ │ │ │ │ │ │ ├── MobileCreateTileTemplateLogic.java │ │ │ │ │ │ ├── MobileDeleteTileTemplateLogic.java │ │ │ │ │ │ └── MobileUpdateTileTemplateLogic.java │ │ │ │ │ ├── face/ │ │ │ │ │ │ ├── MobileCreateAppLogic.java │ │ │ │ │ │ ├── MobileDeleteAppLogic.java │ │ │ │ │ │ ├── MobileMailQRsLogic.java │ │ │ │ │ │ ├── MobileUpdateAppLogic.java │ │ │ │ │ │ └── MobileUpdateFaceLogic.java │ │ │ │ │ ├── graph/ │ │ │ │ │ │ ├── MobileDeleteDeviceDataLogic.java │ │ │ │ │ │ ├── MobileDeleteEnhancedGraphDataLogic.java │ │ │ │ │ │ ├── MobileExportGraphDataLogic.java │ │ │ │ │ │ ├── MobileGetEnhancedGraphDataLogic.java │ │ │ │ │ │ └── links/ │ │ │ │ │ │ └── DeviceFileLink.java │ │ │ │ │ ├── reporting/ │ │ │ │ │ │ ├── MobileCreateReportLogic.java │ │ │ │ │ │ ├── MobileDeleteReportLogic.java │ │ │ │ │ │ ├── MobileExportReportLogic.java │ │ │ │ │ │ └── MobileUpdateReportLogic.java │ │ │ │ │ └── sharing/ │ │ │ │ │ ├── MobileGetShareTokenLogic.java │ │ │ │ │ ├── MobileRefreshShareTokenLogic.java │ │ │ │ │ └── MobileShareLogic.java │ │ │ │ └── sharing/ │ │ │ │ ├── MobileShareHandler.java │ │ │ │ ├── auth/ │ │ │ │ │ ├── MobileShareLoginHandler.java │ │ │ │ │ └── MobileShareStateHolder.java │ │ │ │ └── logic/ │ │ │ │ └── MobileShareHardwareLogic.java │ │ │ └── utils/ │ │ │ └── MobileStateHolderUtil.java │ │ └── resources/ │ │ └── static/ │ │ ├── register-email.html │ │ └── report-email.html │ └── test/ │ └── java/ │ └── cc/ │ └── blynk/ │ ├── server/ │ │ └── application/ │ │ └── handlers/ │ │ ├── GetGraphDataHandlerTest.java │ │ └── main/ │ │ ├── auth/ │ │ │ ├── RegistrationLimitCheckerTest.java │ │ │ └── VersionTest.java │ │ └── logic/ │ │ └── reporting/ │ │ ├── CreateReportTestTimingTest.java │ │ └── ExportGraphDataLogicTest.java │ └── utils/ │ └── EMailValidationTest.java ├── tcp-hardware-server/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── cc/ │ │ └── blynk/ │ │ └── server/ │ │ └── hardware/ │ │ ├── handlers/ │ │ │ └── hardware/ │ │ │ ├── HardwareChannelStateHandler.java │ │ │ ├── HardwareHandler.java │ │ │ ├── MqttHardwareHandler.java │ │ │ ├── auth/ │ │ │ │ └── HardwareLoginHandler.java │ │ │ ├── logic/ │ │ │ │ ├── BlynkInternalLogic.java │ │ │ │ ├── BridgeLogic.java │ │ │ │ ├── HardwareLogic.java │ │ │ │ ├── HardwareSyncLogic.java │ │ │ │ ├── MailLogic.java │ │ │ │ ├── PushLogic.java │ │ │ │ ├── SetWidgetPropertyLogic.java │ │ │ │ ├── SmsLogic.java │ │ │ │ └── TwitLogic.java │ │ │ └── mqtt/ │ │ │ ├── auth/ │ │ │ │ └── MqttHardwareLoginHandler.java │ │ │ └── logic/ │ │ │ └── MqttHardwareLogic.java │ │ └── internal/ │ │ └── BridgeForwardMessage.java │ └── test/ │ └── java/ │ └── cc/ │ └── blynk/ │ └── server/ │ └── hardware/ │ └── handlers/ │ └── TwitHandlerTest.java ├── tcp-web-server/ │ └── pom.xml ├── tools/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── cc/ │ │ └── blynk/ │ │ └── server/ │ │ └── tools/ │ │ ├── ForwardingTokenGenerator.java │ │ └── ReportingDataCleaner.java │ └── test/ │ └── java/ │ └── cc/ │ └── blynk/ │ └── server/ │ └── tools/ │ └── ReportingDataCleanerTest.java └── utils/ ├── pom.xml └── src/ ├── main/ │ └── java/ │ ├── cc/ │ │ └── blynk/ │ │ └── utils/ │ │ ├── AppNameUtil.java │ │ ├── ArrayUtil.java │ │ ├── BlynkTPFactory.java │ │ ├── ByteUtils.java │ │ ├── DateTimeUtils.java │ │ ├── FileLoaderUtil.java │ │ ├── FileUtils.java │ │ ├── IPUtils.java │ │ ├── IntArray.java │ │ ├── JarUtil.java │ │ ├── KMPMatch.java │ │ ├── NumberUtil.java │ │ ├── ReflectionUtil.java │ │ ├── ReportingUtil.java │ │ ├── SHA256Util.java │ │ ├── StringUtils.java │ │ ├── TokenGeneratorUtil.java │ │ ├── http/ │ │ │ ├── ContentType.java │ │ │ └── MediaType.java │ │ ├── properties/ │ │ │ ├── BaseProperties.java │ │ │ ├── DBProperties.java │ │ │ ├── GCMProperties.java │ │ │ ├── MailProperties.java │ │ │ ├── Placeholders.java │ │ │ ├── ServerProperties.java │ │ │ ├── SmsProperties.java │ │ │ └── TwitterProperties.java │ │ ├── structure/ │ │ │ ├── BaseLimitedQueue.java │ │ │ ├── LCDLimitedQueue.java │ │ │ ├── LRUCache.java │ │ │ ├── LimitedArrayDeque.java │ │ │ ├── MapLimitedQueue.java │ │ │ ├── TableLimitedQueue.java │ │ │ └── TerminalLimitedQueue.java │ │ └── validators/ │ │ ├── BlynkEmailValidator.java │ │ ├── DomainValidator.java │ │ ├── EmailValidator.java │ │ ├── InetAddressValidator.java │ │ └── RegexValidator.java │ └── module-info.java └── test/ └── java/ └── cc/ └── blynk/ └── utils/ └── structure/ ├── IntArrayTest.java ├── LimitedArrayDequeTest.java └── LimitedQueueTest.java