{"version":3,"sources":["ErrorCode.ts","components/molecules/Dialog/ReadDevCsvDialog/ReadDevCsvDialog.ts","i18n.ts","Reducer.tsx","Constant.ts","components/molecules/Card/PLSStateCard.tsx","components/molecules/Card/CloudErrorLogCard.tsx","components/atoms/Div/DateTImeDiv.tsx","components/molecules/Card/TimeCard.tsx","components/atoms/ComboBox/ItemComboBoxMaterial.tsx","components/molecules/Card/LanguageChangeCardEx.tsx","image/logo.PNG","components/molecules/Card/AppTitleCard.tsx","function/useModal.ts","components/atoms/Dialog/ConfirmDialog.tsx","components/molecules/Card/UserNameCard.tsx","components/organisms/AppHeader.tsx","components/molecules/Div/AlarmKindDiv.tsx","components/molecules/Div/AlarmStateDiv.tsx","components/atoms/Dialog/SimpleDialog.tsx","components/molecules/Grid/AlarmGrid.tsx","components/organisms/AppFooter.tsx","components/organisms/MenuTab.tsx","baseStyle/tableBaseStyle.ts","components/atoms/Dialog/OKCancelDialog.tsx","components/molecules/Dialog/LearnResultDialog.tsx","function/GroupDataModel.ts","components/molecules/Grid/GropuListComGrid.tsx","components/molecules/Button/DevListLearnResultButton.tsx","components/Pages/Home/DevListStudyButton.tsx","components/Pages/Home/DeviceListStyle.ts","components/Pages/Home/DeviceListStatErrorListDialog.tsx","components/Pages/Home/DeviceList.ts","components/Pages/Home/DeviceListStatErrorButton.tsx","function/PlcNoModel.ts","components/Pages/Home/DeviceListGrid.tsx","function/PLCCommunicateModel.ts","components/Pages/Home/HomePage.tsx","components/atoms/Text/ColorLineText.tsx","components/Pages/TrendGraph/TrendGraphItemHeader.tsx","components/Pages/TrendGraph/TrendGraph.ts","function/CalculationModel.tsx","components/Pages/GroupSettings/TrendSetting/TrendSetting.ts","components/Pages/TrendGraph/TrendGraphChart.tsx","components/molecules/Range/RangeInputNumber.tsx","components/Pages/TrendGraph/TrendGraphChartSetting.tsx","components/atoms/ComboBox/ItemComboBox.tsx","components/Pages/TrendGraph/TrendGraphPageComboBox.tsx","components/Pages/TrendGraph/TrendGraphItemInfo.tsx","function/LogLapper.ts","components/Pages/TrendGraph/TrendGraphItemInfoList.tsx","components/organisms/Pages/GroupSelectGrid.tsx","components/Pages/XYDiagram/XYDiagramGroupSelectPage.tsx","components/Pages/RealTimeTrendGraph/RealTimeTrendGraphGroupSelectPage.tsx","components/molecules/Dialog/ImageDialog.tsx","function/ImageFileModel.ts","components/Pages/TrendGraph/TrendGraphButtonList.tsx","components/Pages/TrendGraph/TrendGraphDaySelects.tsx","components/Pages/GroupSettings/ColorPicker.tsx","components/Pages/GroupSettings/TrendSetting/TrendSettingStyle.ts","components/Pages/GroupSettings/TrendSetting/TrendSettingItem.tsx","components/Pages/GroupSettings/SaveCancel.tsx","components/Pages/GroupSettings/ListControl.tsx","components/atoms/Input/NumericEntry_inputEx.tsx","components/Pages/GroupSettings/CreateGroupDialog.tsx","components/atoms/Dialog/MessageDialog.tsx","components/Pages/GroupSettings/TrendSetting/TrendSettingPage.tsx","components/organisms/SelectSettings.tsx","components/molecules/Dialog/TrendSettingDialog.tsx","components/atoms/Calendar/DateInput.tsx","components/Pages/TrendGraph/TrendGraphPage.tsx","components/Pages/TrendGraph/TrendGraphGroupSelectPage.tsx","components/atoms/ComboBox/ItemComboBoxAdjLabel.tsx","components/atoms/Calendar/ItemCalenderTimeEx.tsx","components/Pages/RealTimeTrendGraph/RealTimeTrendGraphPageComboBox.tsx","components/Pages/RealTimeTrendGraph/RealTimeTrendGraphItemInfoHeader.tsx","components/Pages/RealTimeTrendGraph/RealTimeTrendGraph.ts","components/Pages/RealTimeTrendGraph/RealTimeTrendGraphChart.tsx","components/Pages/RealTimeTrendGraph/RealTimeTrendGraphItemInfo.tsx","components/Pages/RealTimeTrendGraph/RealTimeTrendGraphItemInfoList.tsx","components/Pages/RealTimeTrendGraph/RealTimeTrendGraphButtonList.tsx","components/Pages/GroupSettings/RealTimeSetting/RealtimeSettingStyle.ts","components/Pages/GroupSettings/RealTimeSetting/RealtimeSettingItem.tsx","components/Pages/GroupSettings/RealTimeSetting/RealtimeSettingPage.tsx","components/molecules/Dialog/RealtimeSettingDialog.tsx","components/Pages/RealTimeTrendGraph/RealTimeTrendGraphPage.tsx","components/Pages/PhaseCurrent/PhaseCurrentCheckBox.tsx","components/Pages/PhaseCurrent/PhaseCurrentCheckBoxList.tsx","components/Pages/PhaseCurrent/PhaseCurrent.ts","components/Pages/PhaseCurrent/PhaseCurrentSelectItem.tsx","function/ChartCommon.ts","components/Pages/PhaseCurrent/PhaseCurrentChart.tsx","components/Pages/PhaseCurrent/PhaseCurrentButtonList.tsx","function/NameDevSetModel.ts","components/molecules/Range/RangeInputNumberLimit.tsx","components/Pages/PhaseCurrent/PhaseCurrentPage.tsx","components/Pages/PhaseCurrent/PhaseCurrentGroupSelectPage.tsx","components/Pages/RawWaveformComparison/RawWaveformComparison.ts","components/Pages/RawWaveformComparison/RawWaveformComparisonChart.tsx","components/atoms/CheckBox/ItemCheckBox.tsx","components/Pages/RawWaveformComparison/RawWaveformComparisonSelectItem.tsx","components/Pages/RawWaveformComparison/RawWaveformComparisonChartSetting.tsx","components/Pages/RawWaveformComparison/RawWaveformComparisonButtonList.tsx","components/Pages/RawWaveformComparison/RawWaveformComparisonPage.tsx","components/Pages/RawWaveformComparison/RawWaveformComparisonGroupSelectPage.tsx","components/Pages/RawWaveformComparisonConanair/RawWaveformComparisonConanairGroupSelectPage.tsx","components/Pages/RawWaveformComparisonConanair/RawWaveformComparisonConanair.ts","components/Pages/RawWaveformComparisonConanair/RawWaveformComparisonConanairChart.tsx","components/Pages/RawWaveformComparisonConanair/RawWaveformComparisonConanairSelectItem.tsx","components/Pages/RawWaveformComparisonConanair/RawWaveformComparisonConanairChartSetting.tsx","components/Pages/RawWaveformComparisonConanair/RawWaveformComparisonConanairButtonList.tsx","components/Pages/RawWaveformComparisonConanair/RawWaveformComparisonConanairStyle.ts","components/Pages/MeasureSetting/CollectSetting/CollectSettingDefine.ts","components/Pages/RawWaveformComparisonConanair/RawWaveformComparisonConanairPage.tsx","components/Pages/GroupSettings/XYCompansonSetting/XYDeviceItem.tsx","components/Pages/GroupSettings/XYCompansonSetting/XYCompansonSettingSytle.ts","components/Pages/GroupSettings/XYCompansonSetting/XYDateSettings.tsx","components/Pages/GroupSettings/XYCompansonSetting/XYComparisonSetting.tsx","components/molecules/Dialog/XYSettingDialog.tsx","components/Pages/XYDiagram/XYDiagram.ts","components/Pages/XYDiagram/RangeInputCalendar.tsx","components/atoms/Cell/StackCell.tsx","components/Pages/XYDiagram/XYDiagramSelectItem.tsx","components/Pages/XYDiagram/XYDiagramChart.tsx","components/Pages/XYDiagram/XYDiagramButtonList.tsx","components/Pages/XYDiagram/XYDiagramPage.tsx","components/Pages/AlarmSummary/AlarmSummaryFooter.tsx","components/Pages/AlarmSummary/AlarmSummaryGrid.tsx","components/Pages/AlarmSummary/AlarmSummaryPage.tsx","components/atoms/Calendar/DateTimeInput.tsx","components/Pages/AlarmHistory/GroupBox.tsx","components/atoms/Dialog/MessageStyleDialog.tsx","components/Pages/AlarmHistory/AlarmHistoryHeader.tsx","components/molecules/CSVExport/CSVDownload.tsx","components/Pages/AlarmHistory/AlarmHistoryPage.tsx","components/Pages/FFTComparison/FFTComparison.ts","components/atoms/ComboBox/ItemComboBoxStr.tsx","components/atoms/Input/NumericEntry.tsx","components/Pages/FFTComparison/FFTSideBandDiagDialog.tsx","components/Pages/FFTComparison/FFTComparisonSelectItem.tsx","components/Pages/FFTComparison/FFTComparisonFrequency.tsx","components/Pages/FFTComparison/FFTComparisonInfo.tsx","components/Pages/FFTComparison/FFTComparisonChartSetting.tsx","components/Pages/FFTComparison/FFTComparisonChart.tsx","components/Pages/FFTComparison/FFTComparisonButtonList.tsx","components/Pages/FFTComparison/FFTComparisonPage.tsx","components/Pages/FFTComparison/FFTComparisonGroupSelectPage.tsx","components/Pages/FFTComparisonConanair/FFTComparisonConanair.ts","components/Pages/FFTComparisonConanair/FFTConanairSideBandDiagDialog.tsx","components/Pages/FFTComparisonConanair/FFTComparisonConanairSelectItem.tsx","components/Pages/FFTComparisonConanair/FFTComparisonConanairFrequency.tsx","components/Pages/FFTComparisonConanair/FFTComparisonConanairInfo.tsx","components/Pages/FFTComparisonConanair/FFTComparisonConanairChartSetting.tsx","components/Pages/FFTComparisonConanair/FFTComparisonConanairChart.tsx","components/Pages/FFTComparisonConanair/FFTComparisonConanairButtonList.tsx","components/Pages/FFTComparisonConanair/FFTComparisonConanairPage.tsx","components/Pages/FFTComparisonConanair/FFTComparisonConanairGroupSelectPage.tsx","components/Pages/MeasureLog/MeasureLog.ts","components/molecules/Div/MeasureLogStatusManualDev.tsx","components/Pages/MeasureLog/MeasureLogStyle.ts","components/Pages/MeasureLog/MeasureLogGrid.tsx","components/Pages/MeasureLog/MeasureLogGridIoTBox.tsx","components/Pages/MeasureLog/MeasureLogFooter.tsx","components/Pages/MeasureLog/MeasureLogPage.tsx","components/Pages/GroupSettings/PhaseCurrentSetting.tsx","components/Pages/GroupSettings/DeviceMeasItem.tsx","components/Pages/GroupSettings/RawWaveformsComparisonSetting.tsx","components/Pages/GroupSettings/RawWaveformComparisonConanSetting/RawWaveformComparisonConanSettingStyle.ts","components/Pages/GroupSettings/RawWaveformComparisonConanSetting/DeviceMeasConanItem.tsx","components/Pages/GroupSettings/RawWaveformComparisonConanSetting/RawWaveformComparisonConanSetting.tsx","components/Pages/GroupSettings/FFTComparisonSetting.tsx","components/Pages/GroupSettings/FFTComparisonConanSetting/FFTComparisonConanSettingStyle.ts","components/Pages/GroupSettings/FFTComparisonConanSetting/FFTComparisonConanSetting.tsx","components/Pages/GroupSettings/GroupSettingsPage.tsx","components/Pages/FeatureParameter/FeatureParameter.ts","components/Pages/FeatureParameter/FeatureParameterSelectItem.tsx","components/Pages/FeatureParameter/FeatureParameterGrid.tsx","components/Pages/FeatureParameter/FeatureParameterExportCSV.tsx","components/Pages/FeatureParameter/FeatureParameterPage.tsx","components/Pages/MeasureSetting/CollectSetting/CollectGridHeader.tsx","components/atoms/Calendar/ItemCalenderTime.tsx","components/Pages/MeasureSetting/JudgeSetting/JudgeSetting.ts","components/Pages/MeasureSetting/JudgeSetting/JudgeSettingStyle.ts","components/Pages/MeasureSetting/JudgeSetting/JudgeSettingItemRowEx.tsx","components/Pages/MeasureSetting/JudgeSetting/JudgeSettingDialog.tsx","function/JudgeSettingSelectModel.ts","components/atoms/Input/NumericFormatEntry_input.tsx","components/Pages/MeasureSetting/CollectSetting/CollectSettingItemDialog.tsx","components/Pages/MeasureSetting/CollectSetting/CollectGridBody.tsx","components/Pages/MeasureSetting/CollectSetting/CollectSettingFooter.tsx","components/Pages/MeasureSetting/CollectSetting/CollectGridHeaderIoT.tsx","components/Pages/MeasureSetting/CollectSetting/CollectSettingItemIoTDialog.tsx","components/Pages/MeasureSetting/CollectSetting/CollectGridBodyIoT.tsx","components/Pages/MeasureSetting/CollectSetting/CollectSetting.tsx","components/Pages/MeasureSetting/DeviceRegist/DeviceRegistGridHeader.tsx","components/Pages/MeasureSetting/DeviceRegist/DeviceRegistGridBody.tsx","components/Pages/MeasureSetting/DeviceRegist/DeviceRegistStyle.ts","components/Pages/MeasureSetting/DeviceRegist/DeviceRegistFooter.tsx","components/molecules/Dialog/ReadDevCsvDialog/ReadDevCsvDialogGridRow.tsx","components/molecules/Dialog/ReadDevCsvDialog/ReadDevCsvDialogPage.tsx","components/atoms/Input/NumericEntry_input_EmptyUse.tsx","components/Pages/MeasureSetting/DeviceRegist/LayerShort/LayerShortSettingStyle.ts","components/Pages/MeasureSetting/DeviceRegist/LayerShort/LayerShortSettingHeader.tsx","components/Pages/MeasureSetting/DeviceRegist/LayerShort/LayerShortSettingHeader2.tsx","components/Pages/MeasureSetting/DeviceRegist/LayerShort/LayerShortSettingDialogBody.tsx","components/Pages/MeasureSetting/DeviceRegist/LayerShort/LayerShortSettingDialog.tsx","components/Pages/MeasureSetting/DeviceRegist/Vibration/VibrationSettingStyle.ts","components/Pages/MeasureSetting/DeviceRegist/Vibration/VibrationSettingHeader.tsx","components/Pages/MeasureSetting/DeviceRegist/Vibration/VibrationSettingDialogBody.tsx","components/Pages/MeasureSetting/DeviceRegist/Vibration/VibrationSettingDialog.tsx","components/Pages/MeasureSetting/DeviceRegist/DeviceRegistSettingDialog.tsx","components/Pages/MeasureSetting/DeviceRegist/DeviceRegist.tsx","components/Pages/MeasureSetting/ItemRegistGridHeader.tsx","components/Pages/MeasureSetting/ItemRegistGridBody.tsx","components/Pages/MeasureSetting/ItemRegistFooter.tsx","components/Pages/MeasureSetting/ItemRegist.tsx","components/Pages/MeasureSetting/AlmKindRegist/AlmKindRegistGridHeader.tsx","components/Pages/MeasureSetting/AlmKindRegist/AlmKindRegistStyle.ts","components/Pages/MeasureSetting/AlmKindRegist/AlmKindRegistGridBody.tsx","components/Pages/MeasureSetting/AlmKindRegist/AlmKindRegistFooter.tsx","function/AlmKindSetModel.ts","function/MstClcTypModels.ts","components/Pages/MeasureSetting/AlmKindRegist/AlmKindRegistPage.tsx","components/Pages/MeasureSetting/IoTBoxSetting/IoTBoxSetting.ts","components/atoms/Input/TimeEntry.tsx","components/Pages/MeasureSetting/IoTBoxSetting/IoTBoxSettingStyle.ts","components/Pages/MeasureSetting/IoTBoxSetting/IoTBoxSettingRowNewDialog.tsx","components/Pages/MeasureSetting/IoTBoxSetting/IoTBoxSettingGridItem.tsx","components/Pages/MeasureSetting/IoTBoxSetting/IoTBoxSettingFooter.tsx","components/Pages/MeasureSetting/IoTBoxSetting/IoTBoxSettingRowDelDialog.tsx","components/Pages/MeasureSetting/IoTBoxSetting/IoTBoxSettingPage.tsx","function/EMCModel.ts","components/atoms/ComboBox/ItemComboBoxStrOD.tsx","components/Pages/MeasureSetting/EMCSetting/EMCSettingGridRow.tsx","components/Pages/MeasureSetting/EMCSetting/EMCSettingGrid.tsx","components/Pages/MeasureSetting/EMCSetting/EMCSettingFooter.tsx","components/Pages/MeasureSetting/EMCSetting/EMCSettingPage.tsx","components/Pages/MeasureSetting/StudySetting/StudySettingStyle.ts","components/Pages/MeasureSetting/StudySetting/StudySettingFooter.tsx","components/Pages/MeasureSetting/StudySetting/StudySettingGridRow.tsx","components/Pages/MeasureSetting/StudySetting/StudySetting1Grid.tsx","components/Pages/MeasureSetting/StudySetting/StudySetting.ts","components/Pages/MeasureSetting/StudySetting/StudySetting2EditBody.tsx","components/Pages/MeasureSetting/StudySetting/StudySettingPage.tsx","function/NameItemSetModel.ts","components/Pages/MeasureSetting/ConanairManagement/ConanairManagement.ts","components/Pages/MeasureSetting/ConanairManagement/ConanairManagementStyle.ts","components/Pages/MeasureSetting/ConanairManagement/ConanairManagementFooter.tsx","components/Pages/MeasureSetting/ConanairManagement/ConanairManagementGridRow.tsx","components/Pages/MeasureSetting/ConanairManagement/ConanairManagementGridRowNewDialog.tsx","components/Pages/MeasureSetting/ConanairManagement/ConanairManagementPage.tsx","components/Pages/MeasureSetting/PartialDischargeCollection/PartialDischargeCollectionStyle.ts","components/Pages/MeasureSetting/PartialDischargeCollection/PartialDischargeCollectionBody.tsx","components/Pages/MeasureSetting/PartialDischargeCollection/PartialDischargeCollectionFooter.tsx","components/Pages/MeasureSetting/PartialDischargeCollection/PartialDischargeCollectionPage.tsx","components/Pages/MeasureSetting/PartialDischargeCollection/PartialDischargeCollection.ts","components/Pages/MeasureSetting/MeasureSettingsPage.tsx","components/Pages/IoTDevList/IoTDevListStudyButton.tsx","components/Pages/IoTDevList/IoTDevList.ts","components/Pages/IoTDevList/IoTDevListStyle.ts","components/Pages/IoTDevList/IoTDevListFooter.tsx","components/Pages/IoTDevList/IotDevListHealthyErrorListDialog.tsx","components/Pages/IoTDevList/IoTDevListHealthyButton.tsx","components/Pages/IoTDevList/IotDevListStatErrorDialog.tsx","components/Pages/IoTDevList/IotDevListStatButton.tsx","components/Pages/IoTDevList/IoTDevListGrid.tsx","components/Pages/IoTDevList/IoTDevListPage.tsx","components/Pages/EMCTrend/EMCTrend.ts","components/Pages/EMCTrend/EMCTrendStyle.ts","components/Pages/EMCTrend/EMCTrendGrid.tsx","components/Pages/EMCTrend/EMCTrendErrorLogSelectDialog.tsx","components/Pages/EMCTrend/EMCTrendSelectItem.tsx","components/Pages/EMCTrend/EMCTrendChart.tsx","components/Pages/EMCTrend/EMCTrendPage.tsx","components/Pages/OffLineJudge/OffLineJudgeStyle.ts","components/Pages/OffLineJudge/OffLineJudgeFooter.tsx","components/Pages/OffLineJudge/OffLineJudgePage.tsx","components/Pages/OffLineJudge/OffLineJudge.ts","components/Pages/PartialDischarge/PartialDischargeStyle.ts","components/Pages/PartialDischarge/PartialDischargeGrid/PartialDischargeGridRow.tsx","components/Pages/PartialDischarge/PartialDischargeGrid/PartialDischargeGrid.tsx","components/Pages/PartialDischarge/PartialDischarge.ts","components/Pages/PartialDischarge/PartialDischargeGrid/PartialDischargePage.tsx","components/Pages/PartialDischarge/PartialDischargeGraph/PartialDischargeGraphLeftChart.tsx","components/Pages/PartialDischarge/PartialDischargeGraph/PartialDischargeGraphRightChart.tsx","components/Pages/PartialDischarge/PartialDischargeGraph/PartialDischargeGraphPage.tsx","components/Pages/PartialDischarge/PartialDischargeSettingPage.tsx","components/Pages/CustomConfig/StorageCapacitySetting/StorageCapacitySettingStyle.ts","components/Pages/CustomConfig/StorageCapacitySetting/StorageCapacitySettingFooter.tsx","components/Pages/CustomConfig/StorageCapacitySetting/StorageCapacitySetting.ts","components/Pages/CustomConfig/StorageCapacitySetting/StorageCapacitySettingEditBody.tsx","components/Pages/CustomConfig/StorageCapacitySetting/StorageCapacitySettingPage.tsx","function/UserManageModel.ts","components/Pages/CustomConfig/LoginUserSetting/LoginUserSettingStyle.ts","components/Pages/CustomConfig/LoginUserSetting/LoginUserSettingPassWordChangeBody.tsx","components/Pages/CustomConfig/LoginUserSetting/LoginUserSettingGrid.tsx","components/Pages/CustomConfig/LoginUserSetting/LoginUserSettingFooter.tsx","components/Pages/CustomConfig/LoginUserSetting/LoginUserSettingPage.tsx","components/Pages/CustomConfig/PLMSetting/PLMSettingStyle.ts","components/Pages/CustomConfig/PLMSetting/PLMSettingGridRow.tsx","components/Pages/CustomConfig/PLMSetting/PLMSettingGrid.tsx","components/Pages/CustomConfig/PLMSetting/PLMSettingFooter.tsx","components/Pages/CustomConfig/PLMSetting/PLMSetting.ts","components/Pages/CustomConfig/PLMSetting/PLMSettingPage.tsx","components/Pages/CustomConfig/CustomConfigPage.tsx","image/loginBack.png","image/loginBackE.png","components/Pages/Login/LoginStyle.ts","components/Pages/Login/LoginMode.tsx","components/Pages/Login/SendLoginMode.tsx","components/Pages/Login/LoginTwoPasswordMode.tsx","components/Pages/Login/LoginMailAdress.tsx","components/Pages/Login/LoginPage.tsx","LoginState.ts","components/Pages/Report/ReportStyle.ts","components/Pages/Report/ReportPageFooter.tsx","components/Pages/Report/Report.ts","components/Pages/Report/ReportPage.tsx","App.tsx","registerServiceWorker.js","mocks/handlers.tsx","index.js","mocks/browser.tsx"],"names":["ErrorCode","ERR_CODE_NONE","ERR_CODE_USER_NO_USER","ERR_CODE_USER_PASSWORD_NOMATCH","ERR_CODE_USER_NEN_PASSWORD_LENGTH","ERR_CODE_USER_USER_ID_DUPLICATE","ERR_CODE_USER_PASSWORD_OLD","ERR_CODE_USER_LOCK","ERR_CODE_USER_PASSWORD_EXPIRATION","ERR_CODE_USER_MAILADRESS","ERR_CODE_USER_NOMAILADRESS","ERR_CODE_JSET_FAIL_BEARING_FREQ","ERR_CODE_JSET_NO_BEARING_FILE","ERR_CODE_JSET_NO_BEARING_INFO","ERR_CODE_JSET_FAIL_SIDEBAND_FREQ","ERR_CODE_JSET_SAVE_FAIL","ERR_CODE_JSET_JDG_TYP_REQUIRED_ITEMS","ERR_CODE_JSET_FREQ_C_INVALID_VALUE","ERR_CODE_JSET_FREQ_C_CANNOT_BE_SET","ERR_CODE_JSET_FREQ_C_20TO6000","ERR_CODE_JSET_FREQ_C_1TO6000","ERR_CODE_JSET_FREQ_C_0_OR_HIGHER","ERR_CODE_JSET_CLC_TYP_REQUIRED_ITEMS","ERR_CODE_JSET_CLC_TYP_CANNOT_BE_SET","ERR_CODE_JSET_TWRN_LIM_INVALIDVALUE","ERR_CODE_JSET_TWRN_LIM_0TO10000","ERR_CODE_JSET_ALM_LIM_INVALID_VALUE","ERR_CODE_JSET_ALM_LIM_0TO10000","ERR_CODE_JSET_BAND_VAL_INVALID_VALUE","ERR_CODE_JSET_BAND_VAL_CANNOT_BE_SET","ERR_CODE_JSET_BAND_VAL_0TO10","ERR_CODE_JSET_BAND_VAL_0_OR_MORE","ERR_CODE_JSET_ADJ_ROT_ON_INCORRECT_VALUE","ERR_CODE_JSET_ADJ_ROT_ON_CANNOT_BE_SET","ERR_CODE_JSET_ADJ_ROT_ON_VALID_OR_INVALID","ERR_CODE_JSET_ALM_TYP_NO_REQUIRED_ITEM","ERR_CODE_JSET_ALM_TYP_NO_CANNOT_BE_SET","ERR_CODE_JSET_MOVE_AVERAGE_ADD_CHANGE","ERR_CODE_JSET_MOVE_AVERAGE_RST","ERR_CODE_PLC_REQUEST_DUPLICATION","ERR_CODE_PLC_REQUEST_NO_DATA","ERR_CODE_EMC_DEVINDEX_DUPLICATE","ERR_CODE_EMC_NO_DATA","ERR_CODE_DEV_INDEX_DUPLICATION","ERR_CODE_NODATE","ERR_CODE_NOLIML_VALUE","ERR_CODE_NOLIMH_VALUE","ERR_CODE_LIM_VALUE","ERR_CODE_NOIPADR","ERR_CODE_IPADR_INCORRECT","ERR_CODE_NOLIMLPD_VALUE","ERR_CODE_NOLIMHPD_VALUE","ERR_CODE_LIMPD_VALUE","ERR_CODE_NOMCLC_TYP_ID_MAX","ERR_CODE_NOMCLC_TYP_ID_PD","ERR_CODE_DATA_NONCATCH","ERR_CODE_CONAN_CONANAIRSET_NODATA","ERR_CODE_CONAN_COLSET_NODATA","ERR_CODE_CONAN_ITEM_HASDUPULICATES","ERR_CODE_CONAN_DEVINDEX_IOT_REGISTERED","ERR_CODE_RUNFLG_CHECK_ERROR","ERR_CODE_SYSTEM_ERROR","PutNameDevSetCsvData","targetList","Promise","resolve","reject","fetch","method","headers","body","JSON","stringify","then","res","ok","json","message","status","result","catch","error","console","CheckInputData","translation","errorMsgs","forEach","r","index","DevNo","push","i18next","t","length","DevName","ReadAsCsvReader","fileObject","reader","FileReader","onloadstart","ev","debug","loaded","onloadend","onprogress","onerror","abort","onload","readAsArrayBuffer","CreateNameDevSetList","datas","csvString","iconv","decode","Buffer","from","records","parse","columns","trim","skip_empty_lines","relax_column_count","list","record","newRow","indexNo","list2","filter","x","i","self","findIndex","y","i18n","use","Backend","LanguageDetector","initReactI18next","init","fallbackLng","react","wait","useSuspense","interpolation","escapeValue","changeLanguage","CHANGE_LANG","appReducer","state","action","type","lang","payload","FFT_MAX_VALUE_CLUDO","FFT_MAX_VALUE_ONPRE","GraphThemeLight","LIGHT_FAULT_LINE_COLOR","SERIOUS_FAULT_LINE_COLOR","NameItemKind","JdgTypKind","CcTypKind","SpeedKind","MeasureLowKind","MeasureHighKind","NONE","VIBRATION","R_CURRENT","S_CURRENT","T_CURRENT","ZERO_CURRENT","TEMPERATURE_IOT","VIBRATION_SPD","VIBRATION_DSP","MeasureCalcKind","SEI_CURRENT","GYAKU_CURRENT","MeasureConanKind","MeasureClcType","GetMeasureClcName","clc","clcName","AlmTypKind","CollectionStatsuType","LearnStatType","GetVibrationSpecialNo","kindNo","String","GetVibrationSpecialNoUnit","unit","GetVibrationSpecialString","DefaultKindNo","GetVibrationSpecialStringByKindNo","useStyles","makeStyles","paper","height","background","props","isStatusOk","color","textAlign","PLSStateCard","useTranslation","useState","plcState","setPlcState","getData","useEffect","interval","setInterval","clearInterval","isOk","every","row","STAT_CON","classes","Paper","className","Typography","variant","ApiResponseCode","ButtonStatus","getCloudStatusValidate","data","cursor","buttonStyle","CloudErrorLogCard","buttonStatus","setButtonStatus","log","ResponceData","CloudErrorStatus","e","finally","onClick","resp","err","getButtonString","DateTImeDiv","value","undefined","day1","dayjs","format","TimeCard","Date","nowTime","setnowTime","ComboBoxMaterial","inputLabel","items","defaultValue","onChange","InputLabel","Select","target","map","item","MenuItem","id","LanguageChangeCard","useContext","AppContext","dispatch","languages","selectIndex","setSelectIndex","selected","find","handleLanguageChange","paddingLeft","AppTitleCard","Box","display","justifyContent","alignItems","src","logo","alt","width","useModal","isOpen","flag","setFlag","dialogAction","useMemo","DialogAction","_setFlag","_applyAction","_cancelAction","this","DialogDispatch","close","applyAction","cancelAction","parent","_parent","setApply","setCancel","createStyles","button","ConfirmDialog","setIsOpen","mode","setMode","tempMsg","msgs","split","Dialog","open","fullScreen","onEntered","onExited","dialog","apply","cancel","title","DialogContent","style","msg","DialogActions","Button","UserNameCard","history","useHistory","login","flgMsgDlg","actMsgDlg","dlgtitle","setDlgtitle","dlgmsg","setDlgmsg","actionDisp","setActionDisp","cancelDisp","setCancelDisp","cfmdlg","pathname","logout","ID","spacingXs1","minWidth","Header","IsIoT","Grid","container","spacing","xs","LanguageChangeCardEx","ConvertKind","kind","trans","label","AlarmKindDiv","ConvertState","devName","AlarmStateDiv","theme","root","margin","padding","closeButton","position","right","top","palette","grey","DialogTitle","children","onClose","other","disableTypography","IconButton","aria-label","withStyles","MuiDialogContent","MuiDialogActions","SimpleDialog","autoClose","okText","maxWidth","fullWidth","dividers","autoFocus","startIcon","tableContainer","maxHeight","tableStyle","borderWidth","borderColor","borderStyle","tableHeaderCell","backgroundColor","tableCell","tableRow","AlarmGrid","alarmArray","setAlarmArray","React","messageDialogOpen","setMessageDialogOpen","showMessage","setShowMessage","Error","getColor","sate","TableContainer","Table","TableBody","TableRow","TableCell","ALM_SMM_DAT","ALM_KIND","COL_DATE","DEV_NAME","ITM_NAME","ALM_KIND_SET","TYP_NAME","STAT","MESSAGE","getAlarmInfo","flexDirection","bottom","marginBottom","AppHeader","fontWeight","marginTop","themeStyles","typography","fontSize","MenuTab","classes2","setValue","menuList","setMenuList","reportButtonEnabled","GetSystemSettingModel","ReportButtonEnabled","offLineJudgeButtonEnabled","OffLineJudgeButtonEnabled","conanairEnabled","ConanairEnabled","emcbEnabled","EmcbEnabled","partialDischargeEnabled","PartialDischargeEnabled","menuSrc","icon","url","groupUrls","SET_AUTH","SYSTEM_AUTH","listen","location","toMenu","mi","toMenuSub","gu","language","Tabs","event","newValue","Tab","component","Link","to","pxToRem","createTheme","TableBaseStyle","headerCell","bodyCell","bodyCellCenter","bodyRow","textField","flexGrow","border","tooltip","chartContainer","minHeight","paperRoot","buttonRoot","muiTypography","lineHeight","checkBox","hiddenScroll","overflow","dialogPaper","OKCancelDialog","cancelText","onOK","onCancel","tableHeader","borderCollapse","colKind","colItem","col1st","col2nd","col3rd","colVarparam","LearnResultDialog","devStatus","setDevStatus","setCoefficientThreshold","resultMessage","setResultMessage","vibrationUnit","setVibrationUnit","currentUnit","setCurrentUnit","devIndex","DevStatus","CoefficientThreshold","VibrationUnit","CurrentUnit","CV_V","LEARN_STAT","CV_C","reason","stickyHeader","size","TableHead","LEARN_1_V","LEARN_2_V","LEARN_3_V","toExponential","LEARN_1_C","LEARN_2_C","LEARN_3_C","marginRight","GetTrendGroupList","TrendGroupListValidate","TM_TRD_GROUP_SETs","GetTrendGroupTableByItemSet","TrendGroupTableByItemSetValidate","trdGroupSet","PutTrendGroupSetting","group","Group","Items","Count","GetRealTimeTrendGroupList","RealTimeTrendGroupListValidate","RT_TRD_GROUP_SETs","RealtimeGroupListValidate","GetRealTimeTrendGroupTableByItemSet","RealTimeTrendGroupTableByItemSetValidate","PutRealtimeGroupSetting","GetPhaseCurrentGroupList","PhaseCurrentGroupListValidate","PH_CUR_GROUP_SETs","PhCurSelectItems","PutPhaseCurrentGroupList","GetRawWaveformsComparisonGroupList","RawWaveformsComparisonGroupListValidate","SIG_CMP_GROUP_SETs","DeviceSelects","PutRawWaveformsComparisonGroupList","GetRawWaveformsComparisonConanGroupList","RawWaveformsComparisonConanGroupListValidate","SIGC_CMP_GROUP_SETs","PutRawWaveformsComparisonConanGroupList","GetFFTComparisonGroupList","FFTComparisonGroupListValidate","FFT_CMP_GROUP_SETs","PutFFTComparisonGroupList","GetFFTComparisonConanGroupList","FFTComparisonConanGroupListValidate","FFTC_CMP_GROUP_SETs","DeviceConanSelects","PutFFTComparisonConanGroupList","GetXYComparisonGroupList","XYComparisonGroupListValidate","XY_CMP_GROUP_SETs","XYDeviceSelects","PutXYComparisonGroupList","GetAllGroupList","deviceIndex","AllGroupListValidate","GroupListsComModels","GroupDeviceSelectValidate","GropuListComGrid","baseClasses","groupInfo","groupListInfo","setGroupListInfo","selectedIndex","setSelectedIndex","ret","lineSelection","hover","selectRow","FormID","GROUP_NO","GroupNo","onDataSelectAction","handleSelectData","FormName","GroupName","IoTDevListLearnResultButton","learnStat","setLearnStat","cv_v","cvv","setCvv","cv_c","cvc","setCvc","getLearnResultButtonColor","isButtonEnable","DevListStudyButton","studyStatus","setStudyStatus","isStudyCheck","setIsStudyCheck","dialogOpen","setDialogOpen","getStudyButtonColor","getStudyButtonText","onCancelClick","TableUseStyle","DeviceListStatErrorListDialog","buttonEnable","setButtonEnable","deviceAlarmDataList","setIDeviceAlarmDataList","devListData","DEV_INDEX","toString","param","getAlmKindText","disabled","disableElevation","DeviceListStatErrorButton","openErrorList","setOpenErrorList","getState","getSENSOR_COLMNGSStatusColor","devList","getButtonTextColor","IsConanAirPlc","plcNo","Number","IsPartialDischargePlc","DeviceListGrid","okCancelDialogOpen","setOkCancelDialogOpen","selectDevIndex","setSelectDevIndex","selectedID","setSelectedID","deviceArray","setDeviceArray","setOpen","setDeviceIndex","TrendSettings","MeasKinds","DeviceLists","ItemLists","DataKinds","AlarmKinds","AlarmLimits","DeviceUnitInfos","ColSetInfos","KIND_NO_NAME_SETs","JudgeSetSelect","MClcTypes","SetPartDisList","rowno","setRowno","flgLearnResDlg","learnResDlg","handlePLCManualCollectionOK","PLCManualCollectionRequest","IsManualColection","concat","getManualColectionString","pageName","V_DEV_LIST_DISP","handleTableCellClick","studyRequestAction","devRow","PLCStudyRequest","IsLearning","studyCancelRequestAction","PLCStudyCancelRequest","lrdlg","tableContainerStyle","DEV_NO","COL_TIME","SCHEDULE_TIME","DSP_STR","PLC_NO","DevListLearnResultButton","HomePage","ColorLineText","inputText","aria-readonly","readOnly","tdStyle","tdCheckStyle","TrendGraphItemHeader","colSpan","Constant","trendManagementSettingTypeListValidate","GraphDataListsTypeValidate","ToPowIndex","num","Math","abs","ii","pow","ToValueRoundInternal","source","isMax","powValue","floorValue","floor","ToValueMaxRound","ToValueMinRound","CreateInitTrendSettingItem","groupNo","PEN_NO","DSP_FLG","DSP_COLOR","GRP_LOW","GRP_HIGH","SCALE_ON","AI_CARD","AI_CH","TYP_NO","MCLC_TYP_ID","SET_NO","ITM_NAME_NO","EMC_ITM_NAME_NO","EMC_ITM_NAME","EMC_UNIT","CLC","KIND","KIND_NO","UNIT","RH","RL","MUL","SPEED","MES_NAME","LOG_INT","GetDefaultPenColor","getColorCode","g","b","GetUnit","colSets","plc","aicard","aich","GetUnitWithClcConal","GetPartialDischargeUnit","col","GetUnitWithClc","CreateSpecialDatTrendSettingParameter","spdkind","NAME_NO","dspkind","Key","Disp","copys","temp1","Object","assign","VALID","temp2","customTooltip","convertGraphPoint","points","datetime","value1","value2","value3","value4","value5","value6","value7","value8","row2","index2","TrendGraphChart","graphData","setGraphData","upper","upperLimit","yMax","yMin","backColor","memoryFontColor","yUnit","xUnit","yUnitColor","xUnitColor","gridColor","xticks","graphSetting","setGraphSetting","chartBrushMin","useRef","chartBrushMax","trendSettingList","IsRowSelect","TrendValueUpper","TrendValueUpperLimit","PLCNo","UnitSymbol","Clc","MeasureKindNo","Kind","targetDay","add","selectFlg","IsShow","infoColor","LineColor","lineName","ItemName","setData","gropuNo","fromTime","toTime","toDay","trendGraphPageData","selectGroupNo","timeBetween","tList","rows","GraphDataList","lineNo","valueUpper","UpperValue","valueUpperLimit","UpperLimitValue","j","ValueDateTime","Value","maxA","minA","max","round","p","min","CreateGData","current","showList","onChagneYMinMax","graphDispSetting","CustomTooltip","active","name","toFixed","ResponsiveContainer","chartContainerStyle","LineChart","left","onChengeDateTime","activeLabel","CartesianGrid","stroke","strokeDasharray","XAxis","dataKey","allowDuplicatedCategory","tickFormatter","isValid","tick","dy","YAxis","allowDataOverflow","domain","Label","angle","textAnchor","Brush","startIndex","endIndex","Tooltip","content","ReferenceLine","alwaysShow","Line","strokeWidth","dot","hide","isAnimationActive","RangeInputNumber","minValue","fromValue","setFromValue","maxValue","toValue","setToValue","handlefromFocusEvent","f","isNaN","minLimit","CheckMin","minValueLimit","handletoFocusEvent","maxLimit","CheckMax","maxValueLimit","textBoxWidth","onBlur","onKeyPress","key","TrendGraphChartSetting","settingData","Infinity","tmp","ItemComboBox","labelStyle","NativeSelect","onChangeEvent","itemBoxStyle","preventDefault","onKeyDown","itemList","TrendGraphPageComboBox","groupList","setGroupList","gpList","GROUP_NAME","createMeasureList","defalutIndex","TrendGraphItemInfo","marginLeft","tdStyleColor","onDoubleClick","isRowSelectDoubleClick","isRowSelectClick","IndexNo","checked","isShowOnChange","MeasureKindName","MachineIndex","MachineName","OperationProcess","TypeName","IsDataSelect","isDataSelectOnChange","LogD","s","isDisp","TrendGraphItemInfoList","onChangeTrandSettingData","onShowTrendSettingDialog","tableHeaderLeftCell","tableLeftCell","GroupSelectPage","align","onSelect","groupName","XYDiagramGroupSelectPage","defalutGropuNos","groupDt","setGroupDt","fillter","lists","filterDt","GroupSelectGrid","selectdata","RealTimeTrendGraphGroupSelectPage","imageTagMuiDialogPaperWidthSm","ImageDialog","paperWidthSm","imagePath","imageName","imageWidht","imageHeigth","GetThreeDimensionImagePath","aiCardNo","aiChannelNo","selectDate","searchMode","query_params","URLSearchParams","ErrorMessage","GetThreeDimensionImageTitle","fileDate","collectSettingModel","MachineNo","DialogKindKey","TrendGraphButtonList","simpleDialogOpen","setSimpleDialogOpen","gropuSelectDialogOpen","setGropuSelectDialogOpen","dialogKind","setDialogKind","selectGroupNos","setSelectGroupNos","setImagePath","setImageName","imageDlg","actImageDlg","imageCollectSetting","setImageCollectSetting","imageFileDate","setImageFileDate","messageDialogTitle","imgDlg","threeDButtonEnabled","ThreeDButtonEnabled","handleGroupSelectDialogShow","targetRows","trdItemSet","SettingNo","groupRows","el","gpNos","PLC_NO_X","SET_NO_X","PLC_NO_Y","SET_NO_Y","date1","date2","date3","dt1","dt2","sendDt","PLC_NO1","SET_NO1","PLC_NO2","SET_NO2","Time_No1","Time_No2","tRow","tRow2","dt3","PLC_NO3","SET_NO3","KIND1","KIND2","KIND3","Time_No3","AICardNo","ChannelNo","FilePath","SearchFileName","Base64ImageData","CollectSettingModel","FileDate","tableTitleCell","borderBottomWidth","tableSelectCell","TrendGraphDaySelects","handleDataCellClick","onChangeDateSelectIndex","onDataCellDoubleClick","onDeleteDateSelectIndex","DefaultColor","ColorDialog","colR","setColR","colG","setColG","colB","setColB","colors","rgb","ColorPicker","flgDlg","actDlg","setColor","headerCell_s","orderBottomStyle","borderLeftStyle","borderRightStyle","cellName","cellData","borderBottom","borderTop","borderLeft","borderRight","gridStyle","TrendSettingStyle","activeRow","itemRow","itemSelLabel","itemSelData","entryLabel","settingContainer","entry","TrendSettingItem","alarmLimits","aiCard","aiCh","typeNo","mclcTypId","nameSets","pageStyle","limit","al","CLC_TYP","ALM_TYP_NO","colSetInfos","setSelectIdx","selectIdx","Checkbox","updateItem","measKinds","v","tag","judgeSetSelect","kindNoNameSets","k","parseInt","deviceLists","setPartDis","findCols","csi","findCols2","findPartialDischarge","kns","itemLists","itemListFilterCombos","dataKinds","TYP_NO_CLC","mClcTypes","alarmKinds","LMT_L","LMT_L_PD","WRN_LIM","CreateLFaultValue","LMT_H","LMT_H_PD","ALM_LIM","CreateHFaultValue","SaveCancel","saveAction","createAction","deleteAction","flexFlow","ListControl","insertAction","upAction","downAction","NumericEntry_inputEx","initVal","fixed","val","setVal","iv","parseFloat","cv","CheckValLimit","onFocus","select","backgroundcolor","checkOutOfRange","gno","CreateGroupDialog","no","setNo","setMessage","btnEnable","exists","grp","maxGroup","validateNo","MessageDialog","TrendSettingPage","setGroupNo","editList","setEditList","setGroupName","groupCombos","setGroupCombos","measCombos","setMeasCombos","deviceCombos","setDeviceCombos","itemCombos","setItemCombos","dataCombos","setDataCombos","alarmCombos","setAlarmCombos","mClcTypeCombos","setMClcTypeCombos","setItemList","setKindNoNameSets","setJudgeSetSelect","judgeInfo","setJudgeInfo","setDeviceUnitInfo","colSetInfo","setColSetInfo","setCursorColor","setDispFlg","minVal","setMinVal","maxVal","setMaxVal","flgCfmDlg","actCfmDlg","flgCrtDlg","actCrtDlg","setSetPartDis","msgdlg","crtdlg","gc","changeLangDataCombos","newDataCombos","ci","idx1","idx2","changeLangMeasCombos","defPara","Tag","editData","SaveFunction","saveCurrentSetting","IsUpdate","CancelCondition","groups","CreateGroupNoComboList","ed","setItems","spNo","step","penNo","insRow","sp","errmsg","validateSetting","colset","count","_","itemUpdate","idx","itm","findCol","temp","Target","checkValidityItem","conditionRow","pop","colsets","itemNoInfo","spd","TextField","inputProps","maxLength","groupNameChange","rowSpan","last","slice","splice","insertRow","deleteRow","trg","upRow","MaxSettingRow","downRow","allDisp","IsSaveClose","isDialog","CloseSetting","UpdateCancel","info","newGrp","AUT_UPDATE","DSP_SPAN","newList","sort","g1","g2","newEditList","defaultProps","SettingsState","_update","_target","_callback","_setIdx","_confirm","_param","_saveClose","_cancelFlip","_parentDialogAction","selectIndexNo","dummyCallback","func","callback","isSave","menuPanel","menuButton","mariginRight","textTransform","SelectSettings","setTarget","isSelectMenu","changeMenu","SaveConfirmFunction","dialogColoseAction","CloseDialog","editState","targetTag","SaveSetting","targetPage","pg","settingComponent","createElement","confirm","mn","TrendSettingDialog","dummyIdx","setDummyIdx","DispatchIndex","PaperProps","flexWrap","tableTd","resize","DateInput","labelCssString","labelPosition","initialValue","onDateChange","selectedDateTime","setSelectedDateTime","isValidDateTime","minDateTime","getTime","maxDateTime","responsiveContainer","TrendGraphPage","subtract","dataUpDateTime","setTrendGraphPageData","GroupSetNo","PenNo","TypeNo","MCLCTypeID","MCLCTypeName","createDefaltTrendSettingList","setTrendSettingList","setDate1","setDate2","setDate3","SetGraphDispSetting","flgTSDlg","actTSDlg","getGroupNoData","tsdlg","gpNo","selectCount","justify","direction","TrendGraphGroupSelectPage","fillterDt","ItemComboBoxAdjLabel","CreateTimeList","ItemCalenderTimeEx","year","setYear","month","setMonth","date","setDate","hour","setHour","minute","setMinute","second","setSecond","editValue","setEditValue","hoursList","setHoursList","minutesList","setMinutesList","days","convertDatetime","mon","sec","timeStr","noValidate","conv","ChangeDateSelect","h","RealTimeTrendGraphPageComboBox","createGroupList","RealTimeTrendGraphItemInfoHeader","GetRealTimeTrendSettingModelList","GetTrendManagementSettingTypeListValidate","PageNo","GraphScaleUpper","GraphScaleLower","ScaleNo","DispSpan","ClcTypeNo","RealTimeTrendValueUpper","RealTimeTrendValueUpperLimit","EngineeringValueLower","EngineeringValueUpper","MultiplicationFactor","SpeedNo","LoggingPeriod","RealTimeTrendGraphChart","time","xMax","xMin","graphDataList","pointCount","onYMinMaxChange","gs","targetTime","dt","chartInitData","timeEnd","ticks","dispSpan","ans","bairitu","addTime","GetMemoryScaleByTimeString","RealTimeTrendGraphItemInfo","RealTimeTrendGraphItemInfoList","onshowRealTimeTrendSettingDialog","RealTimeTrendGraphButtonList","rTrendSettingList","targets","RealtimeSettingStyle","comboLabel","RealtimeSettingItem","RT_LMT_H","RT_LMT_HH","COL_RT_LMT_H","COL_RT_LMT_HH","RealtimeSettingPage","cursorColor","period","setPeriod","setAutoUpdate","timePeriods","createComboList","getInitialItem","ValidateSetting","updatePeriod","RealtimeSettingDialog","RealTimeTrendGraphPage","selectDay","setChartInitData","setSelectGroupNo","setTargetDay","createDefaltTrandSettingData","flgRTTDlg","actRTTDlg","setYMax","setYMin","rttdlg","textCssString","PhaseCurrentCheckBox","isCheckd","itemName","PhaseCurrentCheckBoxList","selectData","isRDisp","sDt","onSelectDataChangeEvent","isSDisp","isTDisp","isPileup","isDCRemoval","GetTimeList","TimeListValidate","LatesTimeValidate","PhaseCurrentGraphValidate","RGrahData","SGrahData","TGrahData","marggin","PhaseCurrentSelectItem","nameDebSetList","setNameDevSetList","selectDevid","setSelectDevid","timeList","setTimeList","setSelectDay","selectTimeid","setSelectTimeid","initData","nameDevList","selData","cmdList","cmdList2","a","selectTime","setTimeLists","GetMemoryScaleByNumber","lineCount","xaxisAvarage","PhaseCurrentChart","graphLineData","setGraphLineData","chartUpDate","getGraphData","selectMSecondData","maxSec","dispGraphData","checkBoxData","SamplingCount","updateLoadginState","maxMSec","millisecond","ms","setDt","gSetting","scaledMax","ymax","resultMax","tempMaxValue","ceil","toAutoScaleMax","rMax","MaxValue","YaxisOffset","sMax","tMax","rMin","MinValue","sMin","tMin","aMax","aMin","getMaxYValue","Unit","axisMin","minSec","axisMax","XaxisStartIndex","XaxisSpanCount","startSampleIndex","SamplingPeriod","endSampleIndex","trunc","XValues","xLabel","xValue","yValue","YValues","connectNulls","PhaseCurrentButtonList","selectDt","phaseCurrentSelectData","rr","rtRow","rt","stRow","ttRow","fftgroupSet","GetNameDevSetList","NameDevSetListValidate","dev","startJdgCurPer","RATED_CUR","START_JDG_CUR","GetNameDevSetRow","SetNameDevSetRow","devSet","IsValidKindOfFftCmp","speed","measure","IsValidKindOfFftCmpConan","RangeInputNumberLimit","l","limitValue","Width","Height","flexBox","eight","flexBoxItem","PhaseCurrentPage","loading","setLoading","selectMSecond","setSelectMSecond","setInitData","setSelectData","setCheckBoxData","chartUpdate","setChartUpdate","devindex","nameDevSets","output","EST","indexCheck","LoadingButton","loadingPosition","PhaseCurrentGroupSelectPage","MeasureInfoTypeListValidate","GetDataTimeList","aiNo","chNo","DataTimeListValidate","GetLatesTime","channelNo","GraphLineDataValidate","FindMeasureInfo","measureInfos","mes","mesid","devid","itemid","KindNo","DevIndex","ItemNameNo","aryMax","aryMin","getTicks","getLineInfoYMax","waveData","reduce","getLineInfoYMin","getMaxAbsoluteValue","number1","number2","absolute1","absolute2","createChartPoints","chartDt","xOffset","Array","sIdex","SamplingRate","GetChartPointCount","samplingRate","UpDateGraphData","xmin","xmax","OneLineData","rowCount","xoffset","TowLineData","GetTargetData","mesList","itemdt","RawWaveformComparisonChart","fetchData","setFetchData","y1Max","y1Min","y2Max","y2Min","yUnit1","yUnit2","isLineShow","isLineShows","line1","line2","onLoading","target1","time1","target2","day2","time2","plcNo1","aiNo1","chNo1","targetDay1","plcNo2","aiNo2","chNo2","targetDay2","GetGraphLineData","PlcNo","AiCard","AiCh","update","gdata","isAutoRangeRef","onAutoRangeSet","y1","y2","unit1","unit2","yAxisId","orientation","ItemCheckBox","CreateDevList","measureId","Speed","CreateItemList","devId","itemNameList","RawWaveformComparisonSelectItem","setMesList","setDevList","mesInfoList","sdt","isBlankSelect","measureList","MesName","CreateMeasureList","createTimeList","onChangeSelectDataEvent","day","isShow","onChnageIsShowSelect","itemColor","selectId","isSelect","RawWaveformComparisonChartSetting","yMinMaxOn","RawWaveformComparisonButtonList","selectDatas","measureInfo","fftErrDialogOpen","setFftErrDialogOpen","handleSimpleDialogClickOpen","sData","gpInfo","SetNo","plc1","plc2","set1","set2","sDatas","CreateSelectData","meslist","mid","did","iid","RawWaveformComparisonPage","setMeasereInfo","setIsLineShow","selectData1","setSelectData1","selectData2","setSelectData2","mesRet","FftInvalid","s1","s2","gp","toDate","c","d","all","handoleAutoRangeSet","min1","max1","min2","max2","isFlg","RawWaveformComparisonGroupSelectPage","RawWaveformComparisonConanairGroupSelectPage","gpDt","CreateDefalutSelectDataType","conanNameNo","RawWaveformComparisonConanairChart","mes1","mes2","conanNameNo1","conanNameNo2","targetDatas","RawWaveformComparisonConanairSelectItem","setMesInfoList","rawWaveCombobox","mesId","RawWaveformComparisonConanairChartSetting","RawWaveformComparisonConanairButtonList","RawWaveformComparisonConanairStyle","GetKindNoNameSetType","KindNoNameSetTypeValidate","GetNameItemSetType","NameItemSetTypeValidate","GetLogIntSetType","LogIntSetTypeValidate","GetmulItems","code","GetDataUnitType","DataUnitTypeValidate","PLCcollectSettingTypeValidate","GetConanMeasureName","kindNoNameList","IsIoTZeroGyakuSetting","settings","includes","IsPLCCalcSetting","AIUnit","RawWaveformComparisonConanairPage","conanRawWaveComboList","setConanRawWaveComboList","kindNoNameSet","conanRawWaveTypList","FFT_INVALID","rowStyle","cellStyle","selectNo","selectName","dropdownStyle","tableItem","XYDeviceItem","devIdx","setDevIdx","devCombos","setDevCombos","itemXCombos","setItemXCombos","itemNameCombos","setItemNameCombos","itemNameNoX","setItemNameNoX","itemNameNoY","setItemNameNoY","itemXIdx","setItemXIdx","itemYCombos","setItemYCombos","itemYIdx","setItemYIdx","setListItem","checkCombos","crateItemNameCombos","devConbo","ItemSelects","array","searchItemNameCombosIndex","itemSelectDatas","itemNameConbos","itemTarget","tgt","crateItemCombos","devCombo","itemNameCombo","vv","searchItemCombosIndex","itemConbos","selectList","sel","devListIndex","searchDevCombosIndex","deviceIdx","itemNameComboIndexX","plcNoX","setNoX","itemNameComboIndexY","plcNoY","setNoY","itemCombosX","itemCombosY","itemComboIndexX","itemComboIndexY","lstItem","plcSetFunc","deviceChange","tgtX","tgtY","itemNameChangeX","itemChangeX","itemNameChangeY","itemChangeY","bodyCellCenterColor","transform","fixColumn","outlineWidth","outlineColor","outlineStyle","zIndex","gridStyle2","getMonthList","monthList","XYDateSettings","changeEventFlg","setChangeEventFlg","groupData","changeEvent","monthCol","YEAR_FLG","newYearFlg","prevData","MONTH_FLG","newMonthFlg","START_DATE","END_DATE","DSP_COLOR1","START_MONTH1","END_MONTH1","DSP_COLOR2","START_MONTH2","END_MONTH2","DSP_COLOR3","START_MONTH3","END_MONTH3","DSP_COLOR4","START_MONTH4","END_MONTH4","DspColor1","DspColor2","DspColor3","DspColor4","fromCalendar","setFullYear","getFullYear","padStart","getDate","toCalendar","XYComparisonSetting","setSelectList","setPlcNoX","setSetNoX","setPlcNoY","setSetNoY","edit","setEdit","xy","startGroupNo","xyGroupSetData","groupChange","updateDispFlg","reasone","isNullOrZero","startDate","endDate","diff","checkMsg","checkMonthSettings","updateFormData","errorMsg","checkMonths","startMonth1","startMonth2","endMonth1","endMonth2","spansYear1","spansYear2","plcX","setX","plcY","setY","ph","XYSettingDialog","IsTemperatureItem","GetXYDiagramData","xPlcNo","xSetNo","xSpeed","xKindNo","yPlcNo","ySetNo","ySpeed","yKindNo","XYDiagramDataModelValidate","IsValidKindOfXyCmp","checkFromTo","isAfter","RangeInputCalendar","fromDate","fromData","setFromData","toData","setToData","onChangeFromCalendarValue","onChangeToCalendarValue","CellSizeContainer","start","ptr","StackCell","pos","Current","Add","CreateXYList","xList","XYDiagramSelectItem","setXList","yList","setYList","setColorLabel","devNameList","xid","yid","changeSelectFlg","onChangeSelectFlg","xyCmpGroupSet","xyDiagramSettingModel","YearFlg","MonthFlg","fromDay","GraphDataItems","checkItem","YearDateSetting","SymbolName","checkColorGroupList","ColorDataSetting","StartMonth","EndMonth","ScatterColor","ColorGroupNo","settingItems","XYDiagramChart","GraphDatas","graphDataInfoType","setXyDiagramSettingModel","ymin","updateGraphDomain","XValue","YValue","regressionValue","RegressionValue","valueColDate","ValueColDate","adjustValue","axisType","logValue","log10","maxBaseValue","minBaseValue","gData","tempYmin","tempYmax","tempXmin","tempXmax","adjustValueY","adjustValueX","pointDate","getDistributionMapData","graphPoint","RenderDot","cx","cy","Dot","fill","ScatterChart","tickCount","Scatter","tempGraphPoint","keys","xValueList","tempMin","tempMax","getLineData","line","shape","symbolName","XYDiagramButtonList","xDt","yDt","xDts","yDts","getDevalutXid","defX","getDevalutYid","defY","orgDt","fDevList","searchDevIndex","xyList","XYDiagramPage","yesterDay","SetXyCmpGroupSet","selectSettingFlg","setSelectSettingFlg","xyDiagramSetting","setXyDiagramSetting","flgXYDlg","actXYDlg","getMeasurInfoData","xdt","ydt","warn","getXYDiagrams","mesInfo","xyDiagram","onClickDisplayButton","measureInfoRow","xydlg","countBox","borderRadius","AlarmSummaryFooter","bulkButton","tableItemSub","verticalAlign","alarmValue","cellNo","cellDateTime","cellKubun","cellDeviceNo","cellDeviceName","cellItemName","cellAlertType","cellMessage","cellStatus","cellAlarm","cellAlarmSub","alertRoll","isNormal","isNormalNC","isNormalWS","hasAlert","hasAlertLFault","hasAlertHFault","hasAlertSFault","hasAlertNC","hasAlertNCLFault","hasAlertNCHFault","hasAlertNCSFault","hasAlertWS","hasAlertWSLFault","hasAlertWSHFault","hasAlertWSSFault","alertValueFormat","AlarmSummaryGrid","alarmContainerStyle","lineAttr","CHECKED","DATA","LIMIT","overflowY","AlarmSummaryPage","selIdx","setSelIdx","noCheckCount","setNoCheckCount","imgPath","setImgPath","dlg","graphButton","Filepath","deleteButton","deleteTarget","DateTimeInput","onDateTimeChange","box","header","GroupBox","MessageStyleDialog","checkstyle","searchName","AlarmHistoryHeader","rangeFrom","setRangeFrom","rangeTo","setRangeTo","flgHeavy","setFlgHeavy","flgLight","setFlgLight","flgSystem","setFlgSystem","devNo","setDevNo","setDevName","itmName","setItmName","search","setSearch","setCount","enableExport","setEnableExport","now","FormControlLabel","control","devNoP","devNameP","itmNameP","searchP","setAlarmList","setSearchRange","searchAlarm","exportButton","prm","maxlength","CSVDownload","href","download","DownloadFile","filename","link","document","getElementById","URL","createObjectURL","click","AlarmHistoryPage","searchRange","bom","Uint8Array","alarms","alm","stat","JUDGE_NO","blob","Blob","range","replaceAll","lineColor","isThreshold","envelopeNo","GetComparisonNo","comparisonNo","FindMeasureInfoType","groupRow","itemIndex","kindInfo","GetChartDataValidate","GetSideBandParamValidate","GetSideBandCalcValidate","GetFFTInitialWidthValidate","ItemComboBoxStr","NumericEntry","isNoFixed","isNofixed","FormControl","InputBase","whiteSpace","bandSet","entryBand","FFTSideBandDiagDialog","freq","setFreq","slide","setSlide","bandWidth","setBandWidth","lowerSideBand","setLowerSideBand","upperSideBand","setUpperSideBand","dbFreq","setDbFreq","dbValue","setDbValue","freqMinus","setFreqMinus","dbMinus","setDbMinus","dbMinusDiff","setDbMinusDiff","freqPlus","setFreqPlus","dbPlus","setDbPlus","dbPlusDiff","setDbPlusDiff","entBand","setEntBand","GetSideBandParam","Freq","Slide","BandWidth","LowerSideBand","UpperSideBand","DBFreq","DBValue","calcSideband","band","GetSideBandCalc","FreqMinus","DBMinus","DBDiffMinus","FreqPlus","DBPlus","DBDiffPlus","cellStyleNoBorder","cellSelectStyle","sokuButtonStyle","createDevList","createItemList","FFTComparisonSelectItem","envelopeList","setEnvelopeList","flgSideBand","actSideBand","sbPlcNo","sbAiCard","sbAiCh","sbTarget","fftSpd","fftDsp","refreshData","upDateTimeList","initSelectData","onChangeEnvelopeSelect","sideBandDiag","onChangeSelectDataDispUpDateEvent","handleIsShowChange","isUnitSelect","onClickUnitSelect","measurementName","handleIsThresholdChange","handleIsSelectChange","envelopeDisp","headerStyle","FFTComparisonFrequency","frequencyDataList","setFrequencyDataList","frequency","tmpList","pTempList","prev","next","getFrequencyData","oaValue","FFTComparisonInfo","createRengeList","FFTComparisonChartSetting","setFrequencyRangeList","setFrequencyRengeCmd","dBRangeList","setdBRangeList","dBRangeCmd","setdBRangeCmd","rangeSelectData","setRangeSelectData","selectAxis","setSelectAxis","splitsCount","rengeId","rengeMin","rengeMax","changeAxis","onChangeRangeSelectDataEvent","Radio","dbId","renge","dbMin","dbMax","getLIMValue","isdb","upDateGraphData","tooltipColor","yValueMax","yValueMin","skip","SignalSize","SampleSpan","OAValue","getTargetData","enve","GetChartData","FFTComparisonChart","onChangeGraphDataEvent","thresholdgraphData","setThresholdgraphData","thresholdgraphLine","thresholdgrapColor","thresholdgraphYPoint","lineDatas","chartDataInfo","chartInfo","SetGraphSetting","chinf","line3","promises","show","isShow1","isShow2","isShow3","isThreshold1","isThreshold2","isThreshold3","lineIndex","lineHide","JudgeSettingModel","selectGraphItems","graphPoints","jset","freqValue","INV_DRV_ON","FreqCenter","TrddatChrModels","MclcTypeID","FREQ","BandValue","SeriousFailure","almLine","AbnormalKind","MinorFailure","wrmLine","createGraphThreshold","setYMinMaxEx","isFFTAutoRangeRef","onFFTAutoRamgeSet","yunit","unitIndex","unitSelectIndex","updateUnitByMesKind","dispSetting","isAutoRange","line1List","line2List","line3List","array1","colorItem","tooltipColorSelect","chartControlMemo","onMouseMove","isTooltipActive","activePayload","activeDot","onMouseEnter","yPoint","onMouseLeave","FFTComparisonButtonList","getSelectDatas","paperChild","FFTComparisonPage","selectData1Ref","selectData2Ref","selectData3Ref","isInitDisp","setChartInfo","selectItemRefreshDatas","setSelectItemRefreshDatas","selectUnit","setSelectUnit","holdLinearValueMin","holdLinearValueMax","test1","EntryNo","LogStart","test2","GetAdditionalMeasureInfoType","sList","dtList","compartionList","orgData","createSelectData","GetFFTInitialWidth","xItems","XMinInitial","XMaxInitial","gpTimeList","dtRow","retTimes","onChangeSelectData","dataNo","unitSelectClickAction","onChangeSelectDataUpdate","handleGraphDataChange","handleLoadingStateChange","FFTComparisonGroupSelectPage","FFTConanairSideBandDiagDialog","FFTComparisonConanairSelectItem","fftConanComboBoxList","FFTComparisonConanairFrequency","FFTComparisonConanairInfo","FFTComparisonConanairChartSetting","GetConanChartData","FFTComparisonConanairChart","ValueMax","FFTComparisonConanairButtonList","FFTComparisonConanairPage","setConanFFTComboList","conanFFTTypList","FFTComparisonConanairGroupSelectPage","GetMeasureModel","MeasureModelValidate","GetMeasureIoTBoxModel","MeasureLogStatusManualDev","manual","defaultTheme","tableUseStyles","bodySelectCellCenter","MeasureLogStyle","FooterBaseStyle","MeasureLogGrid","tableBaseStyle","measureLoglList","setMeasureLoglList","targetData","onChangeData","LOG_START","rowClickAction","MSR_DATE","STATUS","MANUAL","MeasureLogGridIoTBox","IMSI_NO","MeasureLogFooter","footerBaseStyle","onClickDispImageFile","MeasureLogPage","onSelectDataChange","fixedCell","DeviceSelectSub","selectCombos","targetChange","PhaseCurrentSetting","setSelectCombos","kindR","setKindR","kindS","setKindS","kindT","setKindT","itemR","setItemR","itemS","setItemS","itemT","setItemT","selects","unshift","si","KIND_R","KIND_S","KIND_T","ITEM_R","ITEM_S","ITEM_T","ss","edt","SET_NO_R","SET_NO_S","SET_NO_T","getDevMeasItmIdxCore","devsel","mno","ino","mlist","ilist","ds","midx","MeasureSelects","ires","DeviceMeasItem","measIdx","setMeasIdx","itemIdx","setItemIdx","iidx","is","dno","mlst","ilst","meas","m","targetDev","getComboInfoOnDeviceChange","mno1","ino1","sm","sidx","sidx2","measureChange","plcidx","device","getComboInfoOnMeasChange","measidx","itemChange","RawWaveformsComparisonSetting","setPlcNo1","setNo1","setSetNo1","setPlcNo2","setNo2","setSetNo2","set","DeviceMeasConanItem","RawWaveformComparisonConanSetting","FFTComparisonSetting","kind1","setKind1","kind2","setKind2","plcNo3","setPlcNo3","setNo3","setSetNo3","kind3","setKind3","entries","deviceSelectItem","measureSelect","itemSelect","fft","FFTComparisonConanSetting","GroupSettingsPage","GetFeatureParameterDataType","deviceNo","FeatureParameterDataTypeValidate","FeatureParameterSelectItem","yearList","setYearList","setMonthList","mList","n","CreateYearList","CreateMonthList","borderBottomStyle","tableDateCell","paddingRight","FeatureParameterGrid","featureParameter","setFeatureParameterList","dayList","setDayList","roundDecimal","HeaderData","Datas","DeviceInfo","ItemSpeed","BodyData","judgementColorStyle","body_value_cell_disp","dataIndex","fpData","FeatureParameterDatas","Judgement","refreshGridData","selectDataType","dList","Day","fData","FeatureParameterCreateCSV","header1s","head","Header1Data","join","replace","header2s","bodys","FeatureParameterExportCSV","csvs","targetName","FeatureParameterPage","setRefreshGridData","setTargetName","fixHeader","CollectGridHeader","cnt","fixNo","fix0","fix1","isDispPLC","fix2","fix3","fix4","fix5","fix6","fix7","colDig","colEng","colMul","ItemCalenderTime","InputProps","input","JudgeSettingValidate","SetJudgeSettingValidate","GethandleBearingFeaturesFreqItems","itemNameNo","GethandleBearingFeaturesFreqValidate","SideBandFreqValidate","SetJusgeAutoSetting","autoSettings","plcCol","f1","KindNameNo","f2","JogTypeNo","JDG_TYP","f3","f4","AlmKindTypeNo","RatedSpeedUseFlg","WrnLim","AlmLim","RatedSpeed","bodyCellRight","bodyCellLeft","JudgeSettingStyle","JudgeSettingItemRow","judgeSettingItem","judgeSet","setJudgeSet","jdgFilterCombos","CHANGE_INVALID","jdgCombos","judgeItemSelectInfo","jdgList","TYP_NO_JDG","clcFilterFCombos","clcCombos","clcf","TYP_INVALID","clcList","onChangeCell","onChangeCellAutoValue","autoValue","judgeAutoSettings","plcCollectSetting","onChangemClcType","FREQ_C","BAND_VAL","HRM_JDG_ON","ADJ_ROT_ON","EMC_W_POS","EMC_B_POS","F2_CANCEL","judgest","onChangeJogType","TYP_NO_ALM","onChangeClcType","JDG_NO","USE_ON","mclcTypeCombos","mclc_typ_id_disp","jdg_type_disp","clc_typ_disp","almCombos","JudgeSettingDialog","judgeSettingStyle","setMclcTypeCombos","setJdgCombos","setClcCombos","setAlmCombos","flgUpdate","setFlgUpdate","flgConfirm","confirmDlg","msgConfirm","setMsgConfirm","showTitle","setShowTitle","isBearingFeaturesFreqButton","isSideBandFreqItemButton","IsSideBandFreqItemButton","DispMaskOn","dispMaskOn","judgeItems","GetJudgeSettingItems","GetJudgeSettingSelectConanItems","GetJudgeSettingSelectItems","ResponceDataModel","JudgeSettingSelectItems","GetJudgeAutoSettingItems","JudgeAutoSettingList","GetJudgeSettingParameter","JudgeTypes","CLCTypes","it","BearingFeaturesFreqButtonAction","getBearingFeaturesFreqData","handleBearingFeaturesFreq","handleBearingFeaturesFreqByFrame","setBearingFeaturesFreq","addBearingFeaturesFreqItem","JdgSetItems","handleSideBandFreq","GetSideBandFreqItems","addSideBandFreqItem","bearingItems","bi","regedIdx","freqItems","fi","colData","JudgeSettingItems","isAlmTypNoCheck","SetJudgeSettingItems","onChangeDspMskOn","errCode","ErrorItem","Min","Max","ConvErrorMessage","JdgSetErrData","defaultMinValue","defaultMinValueMainasu","checkValueConvert","setV","numValue","NumericFormatEntry_input","decimalScale","fixedDecimalScale","allowNegative","thousandSeparator","isAllowed","values","onValueChange","sourceInfo","tableScroll","overflowX","textAlignRightCell","textAlignCenterCell","table_no_border_td","borderRightColor","table_td_noValue","IsItemRST","itemNo","CollectSettingItemDialog","setItem","IsExecute","isExecute","setIsExecute","NameNo","setKind","machineIdx","setMachineIdx","setItemNameNo","LoggingPeriodMinute","logPeriod","setLogPeriod","LoggingStartTime","startTime","setStartTime","DigitalValueUpper","dUpper","setDUpeer","DigitalValueLower","dLower","setDLower","eUpper","setEUpeer","eLower","setELower","RealtimeTrendValueUpper","RealtimeTrendValueUpperUpper","Mul","mul","setMul","setUnit","StartDet","isMotor","setIsMotor","AvgPrc","avg","setAvg","EnvSav","setIsEnvSav","RotClc","isRotClc","setIsRotClc","Note","note","setNote","measSubCombos","cmb","endsWith","logIntCombos","flgJdg","jdgDlg","changeLogPeriod","changeItemNameNo","changeMul","changeAvg","changeRotClc","chk","devs","nds","dv","IsInverter","updateRotClc","jdgdlgElem","exec","UnitName","changeKind","stdate","devNoCell","nameItemList","itemNameCell","unitCombos","avgCombos","updateMotorSensor","changeMotor","changeDUpper","changeDLower","changeEUpper","changeELower","mulCombos","text","CollectGridRow","flgEdit","editDlg","editdlgElem","logIntList","mulList","dataUnitList","doubleClick","updateStartTime","updateCursor","ml","lg","un","av","CollectGridBody","setKindNoNameList","setNameDevList","setNameItemList","setLogIntList","setMULList","setDataUnitList","setMulCombos","setUnitCombos","setLogIntCombos","cursorIndex","setCursorIndex","plcSettingList","conaMesName","UNIT_STR","Fragment","colTime","CollectSettingFooter","sortItem","setSortItem","plcDisp","setPLCDisp","changeSortItem","onChangeSortItem","changePLCDispItem","onChangePLCDisp","onClickSaveButton","onClickCancelButton","CollectGridHeaderIoT","fix8","CollectSettingItemIoTDialog","isIotEdit","mesureCell","CollectGridBodyIoT","buttonFace","tableContainerIoT","setAllStartTime","orderDevice","plcOn","isDevice","plcs","listDev","listNone","CollectSetting","isOrderDevice","setIsOrderDevice","setIsDispPLC","setPlcSettingList","plcSettingSource","setPlcSettingSource","PageParam","GetPLCcollectSettingType","isEdit","ValID","saveProc","settingSource","saveSettings","setting","IsOverwrite","ZRChCount","IsIotEdit","SetPLCcollectSetting","updateFunction","onClickAllStartTimeSetButton","cond","tableFixHead","tableFixC0","tableFixC1","tableFixC2","tableFixC3","DeviceRegistGridHeader","DeviceRegistGridBody","est","setEst","RATED_POWER","ratedPower","setRatedPower","POLE","pole","setPole","VOLTAGE","voltage","setVoltage","PWR_FREQ","pwrFreq","setPwrFreq","ratedCur","setRatedCur","RATED_SPEED","ratedSpeed","setRatedSpeed","EXC_CUR","excCur","setExcCur","startJdgCur","setStartJdgCur","BEARING_LD","bearingLd","setBearingLd","BEARING_ANTI_LD","bearingAntiLd","setBearingAntiLd","INV_FREQ","invFreq","setInvFreq","WEALTH","wealth","setWealth","CAREER_MASK","isCareer","setIsCareer","isInvDrv","setIsInvDrv","EMC_TYPE","isEmcType","setIsEmcType","seectId","onClickSettingButton","dialogBodyCell","dialogBodyCellLeft","textFieldDialog","DeviceRegistPageStyle","tableDialgContainer","DeviceRegistFooter","accept","hidden","files","file","onClickReadCSVButton","ReadDevCsvDialogGridRow","nameDevRow","setNameDevRow","setIsEdit","editRow","editFlg","bodyCellStyle","textFieldStyle","ReadDevCsvDialogPage","setFilename","readDevList","setReadDevList","ArrayBuffer","fileSelectAction","changeAction","headerCellStyle","messages","NumericEntry_input_EmptyUse","inputValue","parsedValue","LayerShortSettingHeader","LayerShortSettingHeader2","LayerShortSettingDialogBody","nameDevSetRow","SMOOTH_W0","smoothW0","setSmoothW0","SMOOTH_W1","smoothW1","setSmoothW1","SMOOTH_W2","smoothW2","setSmoothW2","TH_SIGMA","thSigma","setThSigma","TH_L_R","thLR","setThLR","TH_L_S","thLS","setThLS","TH_L_T","thLT","setThLT","TH_H_R","thHR","setThHR","TH_H_S","thHS","setThHS","TH_H_T","thHT","setThHT","LayerShortSettingDialog","isUpdateDisp","setIsUpdateDisp","FLG_MOTOR","REV_VAL","NOTE","WAV_MAKE","SPD_UP_FREQ","SPD_LO_FREQ","DSP_UP_FREQ","DSP_LO_FREQ","setDevRow","saveAction2","devItem","res2","checkInputData","VibrationSettingHeader","VibrationSettingDialogBody","spdUpFreq","setSpdUpFreq","spdLoFreq","setSpdLoFreq","dspUpFreq","setDspUpFreq","dspLoFreq","setDspLoFreq","VibrationSettingDialog","DeviceRegistSettingDialog","DeviceRegist","setIndex","openReadCSVDlg","setOpenReadCSVDlg","fileObjectData","flgSettingRowDlg","settingRowDlg","updateDev","srch","newAction","updateFlg","ItemRegistGridHeader","tableItemL","ItemRegistGridBody","setItemName","ItemRegistFooter","ItemRegist","AlmKindRegistGridHeader","AlmKindRegistGridBody","almKindSetItem","GUIDE_MSG","GUIDE_MSGL","messageL","setMessageL","setMclcTypeId","mclcTypList","AlmKindRegistFooter","AlmKindSetTypeValidate","MstClcTypListListValidate","AlmKindRegistPage","setMclcItemList","mclcComboList","setMclcComboList","updateData","mstClcTyp","mstClcTypList","SORT_NO","MCLC_TYP_NAME","checkAlmKindRegistFlg","checkTypeName","errorMessage","IoTBoxSettingTypeValidate","SetIoTSetListType","TimeEntry","logTimeField","IoTBoxSettingStyle","IoTBoxSettingRowNewDialog","imsiNo","setImsiNo","devNoTyp","setDevNoTyp","logHour","setLogHour","logMin","setlogMin","logSec","setLogSec","lithiumBattery","setLithiumBattery","nameDevCombos","setNameDevCombos","newBtnAction","LOG_HOUR","LOG_MIN","LOG_SEC","MOBILE_BATTERY","LITHIUM_BATTERY","InsertIoTSet","test","IoTBoxSettingGridItem","RUN_FLG","devNoLists","enterDelay","mobileVoltLevel","lithiumVoltRemainingDays","lithiumChangeDaytimeAction","SET_VER","IOT_SET_FLG_Disp","collectSetting","DL_ENABLE","saveRowAction","DL_Disp","IoTBoxSettingFooter","onClickUpdateScreenButton","onClickAllDLButton","onClickNewButton","onClickDelButton","IoTBoxSettingRowDelDialog","delBtnAction","IoTBoxSettingPage","setBatteryConvertList","devNoComboList","setDevNoComboList","devNameComboList","setDevNameComboList","flgNewRow","newRowDlg","flgDelRow","delRowDlg","showMessageTitle","setShowMessageTitle","Map","updateMap","setUpdateMap","iotBoxSettingList","batteryConvertList","V_IOTBOX_SETTING_ITEMS","IOT_SET_FLG","iotSetFlg","getIotSetFlgRes","getIotSetFlgDL","convertList","rowIndex","VOLT_INDEX","LOWER_VOLT","MOBILE_VOLT","UPPER_VOLT","batteryPer","BATTERY_PERCENT","GetMobileBatteryLevel","LITHIUM_CHANGE_DAYTIME","changeDate","passDay","daysLeft","GetLithiumVoltRemainingDays","IS_EDITED","dlRowBtnAction","has","delete","handleCollectSettingShow","plcParam","JumpMenu","sendItems","devNameLists","PutEMCSettings","updateRows","CreateSelectAlarmLogList","alarmLogList","CheckEMCSettingEditFlg","cRow","ItemComboBoxStrOD","inputEl","focus","ref","spanStyle","EMCSettingGridRow","emcSettingRow","RunFlg","UnitNo","AreaNo","cmoboBoxItemList","EMCSettingGrid","emcSettingList","EMCSettingFooter","EMCSettingPage","cmbItems","emcSettingData","setEMCSettingData","upDatePage","emcList","cmdItems","comboItems","CreateSettingCombBoxItems","StudySettingStyle","PLMSettingFooter","footerStyle","StudySettingGridRow","studySet1","studySetting1","setStudySetting1","rowIndexNo","CLC_TYPE_NAME","WRN_NUM","ALM_NUM","StudySetting1Grid","studySettingStyle","studySet1List","PutStudySetting","StudySet1List","StudySet2List","CheckStudySettingEditFlg","targetModel","StudySetting2EditBody","studySet2List","studySetting2","setStudySetting2","getItemName","elevation","THR_NUM","StudySettingPage","studySettingModel","setStudySettingModel","StudySettingFooter","CheckStudySettingInputData","NameItemSetListValidate","PutConanairManagement","ConanairSetList","CheckConanairManagementFlg","nameDev","deveItem","ConanairManagementStyle","dispay","ConanairManagementFooter","ConanairManagementBody","conanItem","logtimer","logStart","getHours","getMinutes","getSeconds","ChangeItemDataAction","ChangeLogStart","dateTimeNow","getMonth","logStartItem","devCombList","nameItemCombList","CNA_ID","ConanairManagementGridRowNewDialog","conanairId","setConanairId","setLogMin","conanData","colSetLogData","GetLogStartItem","ConanairSet","ColSetLog","InsertConanAirManagement","devNoComBox","nameItemComBox","ConanairManagementPage","conanList","setConanList","colSetlogItemList","SetColSetlogItemList","nameDevSet","setNameDevSet","setNameItemSet","nameItemComboList","setNameItemComboList","itemSet","devComList","nameItemComList","conanairItemList","ColSetLogModelList","ColSetLogList","cList","nList","editModel","csList","itemUpdateAction","ConanairManagementGridRow","extAlign","PartialDischargeCollectionBody","setPartDisItem","IP_ADR","ipAdrSetting","setIpAdrSetting","changeLmtH","changeLmtL","changeCalendarValue","changeLmtHPd","changeLmtLPd","changeIpAdr","str","changeTypNoMax","TYP_NO_MAX","changeTypNoPd","TYP_NO_PD","nameDevComboBoxItemList","partialDischargeIpEnabled","match","mclcTypIdMaxComboBoxItemList","mclcTypIdPdComboBoxItemList","PartialDischargeCollectionFooter","PartialDischargeCollectionPage","setPartDisList","setSetPartDisList","nameDevSetComboBoxItemList","setNameDevSetComboBoxItemList","setMclcTypIdMaxComboBoxItemList","setMclcTypIdPdComboBoxItemList","setPartialDischargeIpEnabled","setPartDisDataList","PartialDischargeCollectionItems","NameDevSetLists","MclcTypIdMaxDataList","MclcTypIdPdDataList","PartialDischargeCollectionType","changeSetPartDis","PutPartialDischargeCollectionData","ErrorSetNo","MCLC_TYP_ID_MAX","MCLC_TYP_ID_PD","changeSetPartDisList","MeasureSettingsPage","IoTDevListStudyButton","isStudyCancelRun","setIsStudyCancelRun","isCancelCheck","isStudyCancelCheck","getStudyLabelColor","isStudyCancel","handleCheckDialogShow","deviceListValidate","bodyCellError","bodyCellRun","bodyCellEnd","IoTDevListStyle","IoTDevListFooter","onClickUUpdateScreenButton","IotDevListHealthyErrorListDialog","iotBoxAlarmDataList","setIoTBoxAlarmDataList","iotBoxData","ALM_CODE","getButtonColor","IoTDevListHealthyButton","getButtonText","IOT_SET","IotDevListStatErrorDialog","IotDevListStatButton","getSENSOR_COLMNGSStatus","SENSOR_STATUS","IoTDevListGrid","iotBoxdeviceArray","setIoTBoxDeviceArray","sortedList","V_IOTBOX_DEV_LISTS","handleInstructManualCollection","LOCAL_VER","IS_MANUAL_COLRECT","IS_STUDY_CHECK","GET_FLG","AUTO_RETRY_COUNT","handleStudyCollection","STUDY_STATUS","CancelHandleStudyCollection","collectionResult","retryStatus","retryStatusVal","getCollectionState","handleDialogShow","LOG_NEW","LOG_NEXT","studyCount","STUDY_COUNT","IS_STUDY_CANCEL_CHECK","IS_STUDY_CANCEL_RUN","IoTDevListPage","SelectMode","ALRAM_MODE","DAY_MODE","ConvertDateToStringByString","ConvertDateToStringByDate","ConvertDateToStringByMarume","validate","ChartBaseStyle","EMCTrendStyle","EMCTrendGrid","emcTrendStyle","allDispCheckFlg","getAlarmKindData","AlarmKind","getValue","dIndex","TrendGraphDatas","ColData","chartSelectData","RawValue","onLineDispCkeckBoxChange","ItemNo","IsDisplay","ChartLineColor","onLineDispAllOff","emcAlarmInfoModel","EMCTrendErrorLogSelectDialog","emcAlarmLogTypeList","EMCTrendSelectItem","selectComboBoxList","setSelectComboBoxList","emcAlarmLogs","setEmcAlarmLogs","alramDate","selectMode","openErrorLog","setOpenErrorLog","selectAlramList","setSelectAlramList","emcAlarmList","selectAlramIndex","CreateSelectCombBoxItems","onClickDispButton","RadioGroup","EMCTrendChart","chartStyle","obj1","newObj","PercentValue","onChartSelectDataChangeEvent","chartControlClikAction","chartAlramBasePointData","EMCTrendPage","Props","setEMCAlarmInfoModel","setChartSelectData","allSelectCheckBox","dispAction","params","GetEMCTrendDatas","selectAlramDate","gList","tempSa","tempData","sa","GetAlaramBasePoint","OffLineJudgeStyle","OffLineJudgeFooter","onClickSelectButton","OffLineJudgePage","offLineJudgeStyle","setOfflineJudgeData","selectDevComboBoxList","setSelectDevComboBoxList","selectTimeComboBoxList","setSelectTimeComboBoxList","upDateSelectTimeList","fileTimes","CreateTimeCombBoxItems","offlineList","offlineJudgeData","element","CreateDevCombBoxItems","changeCalendarValueAction","selectTimeIndex","ExecuteCopyOffLineJudgeFile","bodyCell_left","paddingleft","manualButton","PartialDischargeGridRow","partialDischargeType","getManualColectionColor","handleDialogOkButton","manualButtonStat","MAN_COLDATE","Dev_NoName","GetStatusColor","StatNo","GetStatusString","Coldate","AUTO_NEXTDATE","PartialDischargeGrid","changePartialDischargeType","onChangeRowData","partialDischargeTypeList","MAN_STAT","DateTimeList","GetPartialDischargeGraphItemData","measureTime","GetManCollectionStat","rowList","Man_ColStatNo","PartialDischargePage","partialDischargeStatusItems","PartialDischargeStatusItems","statusItem","retList","ChangeMancollectionStat","PartialDischargeGraphLeftChart","phaseCharacteristicsGraphList","xDomain","yDomain","opacity","sizeRange","dataList","tempList","sizeValue","Size","GetXYItems","scale","scaleLog","base","scaleX","E","PartialDischargeGraphRightChart","cumulativeFrequencyGraphList","ZAxis","PartialDischargeGraphPage","selectViewTimeComboBoxList","setSelectViewTimeComboBoxList","setPhaseCharacteristicsGraphList","setCumulativeFrequencyGraphList","measureValue","setMeasureValue","viwTime","graphsEnable","setGraphsEnable","nameDevSetList","selectDateList","viwTimeList","ResponseCode","PhaseCharacteristicsGraphList","CumulativeFrequencyGraphList","MeasureValue","graphDataChange","leftChartControlMemo","rightChartControlMemo","viwTimeNo","tableLayout","PartialDischargeSettingPage","StorageCapacitySettingStyle","StorageCapacitySettingFooter","PutStorageCapacitySetting","CheckStorageCapacitySetting","StorageCapacitySettingEditBody","storageSetting","setStorageSetting","FREE_SPACE","FILE_RET_PERIOD","StorageCapacitySettingPage","SAV_INDEX","GetUserInfosValidate","UpdateUserInfos","UpdatePassword","user","password","oldPassword","USER_ID","PASSWORD","OLD_PASSWORD","CheckPasswordFormat","LoginUserSettingStyle","LoginUserSettingPassWordChangeBody","onChangeText","updatePassword","sx","autoComplete","hasCurrentPass","LoginUserSettingGrid","tableBase","nowPassword","newPassword","confirmationPassword","hasPassword","passCheck","setPassCheck","cells","setCells","addressUseenable","OnetimePasswordEnable","um","updateCells","cellRefresh","removeIndexes","rmv","DEF","MAIL_ADDRESS","_cells","onChangeSwitchCell","defIdx","getPasswordDisp","scope","ENT_NO","USER_LOCK","handlePasswordCheckOkButton","_passwordCheck","LoginUserSettingFooter","LoginUserSettingPage","setCellRefresh","removeIdx","setRemoveIdx","handleOkButton","newUsers","existUsers","rmvidx","clearIndex","isDuplicate","updateErrorInfos","errorCode","newCells","some","handleSaveOkButton","pmlSettingPageStyle","PLMSettingGridRow","plmSetting","setPLMSetting","isEditPlmState","PLM_NAME","PLM_CSV_PATH","PLM_USERID","PLM_PASSWD","PLM_IPADR","PLM_HHMM","onChangeHHMMonBlurCell","Switch","PLM_REQ_FLG","onClickPLM_REQ_FLGButton","PLM_STAT","getStatusString","onClickDeleteButton","PLMSettingGrid","plmStyle","plmSettingList","onClickRefreshButton","PutPLMSettings","deleteList","PLMSettingList","DeltePLMSettingPlmIndexList","CheckPLMSettingInputData","PLMSettingPage","earlyPlmListCount","setEarlyPlmListCount","setPLMSettingList","plmDeleteIndexList","setPLMDeleteIndexList","plmList","setParameterTabChange","delRow","PLM_INDEX","PLM_RETRY","maxIndex","CustomConfigPage","loginContainer","backgroundImage","bgImage","backgroundRepeat","backgroundPosition","backgroundSize","loginContainerE","bgImageE","systemTitle","entryContainer","entryRow","loginButton","twoPasswordButton","twoPasswordLabel","messageLabel","LoginMode","changeUserName","changePassword","startLoginAction","SendLoginMode","startSendMailAction","LoginTwoPasswordMode","onetimePasswordValidityTime","oneteimePassword","changeoneteimePassword","ontimeLoginAction","backAction","LoginMailAdress","mailAdress","EntryMailAdress","entrymailAdressAction","LoginPage","userid","setUser","setPassword","setOneteimePassword","setMailAdress","containerStyle","setContainerStyle","loginMode","setLoginMode","onetimePassMode","setOnetimePassMode","entryMailAdressMode","setEntryMailAdressMode","setOnetimePasswordValidityTime","loginAction","SendMailAction","sendPassword","AdminUserId","OnetimePasswordValidityTime","userName","changePassWord","userPssword","entrymailAdress","entryAdress","MAIL_ADRESS","twoPassword","onetimeLogin","SessionKey","LoginState","_UserName","_ID","_IsLogin","_SET_AUTH","_REP_AUTH","_SYSTEM_AUTH","_IsIoT","_SystemSettingModel","_dispatch","sessionStr","sessionStorage","getItem","session","setAuth","systemAuth","repAuth","isIoT","systemSettingModel","pw","AuthenticateUser","toUpperCase","USER_NAME","REP_AUTH","IS_IOT","SystemSettingModel","UserName","saveSession","removeItem","OnetimeAuthenticate","adress","EntryMailAction","_instance","checkBoxLabel","paddingTop","ReportJudgeStyle","ReportPageFooter","getFileNameFromContentDisposition","disposition","matches","fileName","decodeURI","ReportPage","reportJudgeStyle","isVibrationTrend","isBearing","isRotateBar","isElecTrend","isTemperature","isError","CreateCombBoxItems","onInputChackBoxChenge","get","downloadTag","GetReportFile","createContext","App","useLocation","query","useridParam","useReducer","defaultLangInfo","window","localStorage","getDefaultLangInfo","loginFlg","setLoginFlg","getInstance","langInfoStringfy","setLangInfoToLocalStorage","loginStateFace","path","exact","AppFooter","render","Provider","isLocalhost","Boolean","hostname","registerValidSW","swUrl","navigator","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","handlers","rest","req","ctx","username","baseUrl","setupWorker","getElementsByTagName","getAttribute","rootElement","ReactDOM","basename","process","origin","addEventListener","response","indexOf","ready","unregister","reload","checkValidServiceWorker","registerServiceWorker"],"mappings":"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","file":"static/js/main.2d9a1d3b.chunk.js","sourcesContent":["// レスポンス情報\r\nexport type ResponceDataType = {\r\n ResponseCode: number;\r\n ErrorCode: number;\r\n ResponseMessage: string;\r\n ErrorMessage: string;\r\n};\r\n\r\n\r\n\r\n/* 共通APIエラーコード */\r\nexport const ErrorCode = {\r\n ERR_CODE_NONE: 0, //エラーなし\r\n\r\n ERR_CODE_USER_NO_USER: 1000, //指定したユーザーがいない\r\n ERR_CODE_USER_PASSWORD_NOMATCH: 1001, //現パスワードが一致しない\r\n ERR_CODE_USER_NEN_PASSWORD_LENGTH: 1002, //新パスワード桁数異常\r\n ERR_CODE_USER_USER_ID_DUPLICATE: 1010, //重複エラー\r\n ERR_CODE_USER_PASSWORD_OLD: 1011,// //過去に使用したパスワードは使用できません\r\n ERR_CODE_USER_LOCK: 1012, //ユーザロック中\r\n ERR_CODE_USER_PASSWORD_EXPIRATION: 1013, //ユーザロック中\r\n ERR_CODE_USER_MAILADRESS: 1014, //メールアドレスではありません\r\n ERR_CODE_USER_NOMAILADRESS: 1015, //メールアドレスが空です\r\n\r\n //判定値設定画面\r\n ERR_CODE_JSET_FAIL_BEARING_FREQ: 2000, //軸受特徴周波数設定リスト取得エラー\r\n ERR_CODE_JSET_NO_BEARING_FILE: 2001, //軸受特徴周波数設定ファイルが存在しない\r\n ERR_CODE_JSET_NO_BEARING_INFO: 2002, //軸受特徴周波数設定ファイルに軸受番号が存在しない\r\n ERR_CODE_JSET_FAIL_SIDEBAND_FREQ: 2050, //側帯波周波数設定リスト取得エラー\r\n\r\n //判定値設定画面保存\r\n ERR_CODE_JSET_SAVE_FAIL: 2100,\t//判定値設定画面保存エラー\r\n ERR_CODE_JSET_JDG_TYP_REQUIRED_ITEMS: 2101,\t//診断タイプ:必須項目\r\n ERR_CODE_JSET_FREQ_C_INVALID_VALUE: 2102,\t//周波数:不正値\r\n ERR_CODE_JSET_FREQ_C_CANNOT_BE_SET: 2103,\t//周波数:設定不可\r\n ERR_CODE_JSET_FREQ_C_20TO6000: 2104,\t//周波数:20~6000\r\n ERR_CODE_JSET_FREQ_C_1TO6000: 2105,\t//周波数:1~6000\r\n ERR_CODE_JSET_FREQ_C_0_OR_HIGHER: 2106,\t//周波数:0以上\r\n ERR_CODE_JSET_CLC_TYP_REQUIRED_ITEMS: 2107,\t//演算方法:必須項目\r\n ERR_CODE_JSET_CLC_TYP_CANNOT_BE_SET: 2108, //演算方法:入力範囲エラー\r\n ERR_CODE_JSET_TWRN_LIM_INVALIDVALUE: 2113,\t//閾値_軽故障:不正値\r\n ERR_CODE_JSET_TWRN_LIM_0TO10000: 2114,\t//閾値_軽故障:0~10000\r\n ERR_CODE_JSET_ALM_LIM_INVALID_VALUE: 2115,\t//閾値_重故障:不正値\r\n ERR_CODE_JSET_ALM_LIM_0TO10000: 2116,\t//閾値_重故障:0~10000\r\n ERR_CODE_JSET_BAND_VAL_INVALID_VALUE: 2117,\t//裕度(%):不正値\r\n ERR_CODE_JSET_BAND_VAL_CANNOT_BE_SET: 2118,\t//裕度(%):設定不可\r\n ERR_CODE_JSET_BAND_VAL_0TO10: 2119,\t//裕度(%):0~10\r\n ERR_CODE_JSET_BAND_VAL_0_OR_MORE: 2120,\t//裕度(%):0以上\r\n ERR_CODE_JSET_ADJ_ROT_ON_INCORRECT_VALUE: 2121,\t//補正:回転数:不正値\r\n ERR_CODE_JSET_ADJ_ROT_ON_CANNOT_BE_SET: 2122,\t//補正:回転数:設定不可\r\n ERR_CODE_JSET_ADJ_ROT_ON_VALID_OR_INVALID: 2123,\t//補正:回転数:有効もしくは無効\r\n ERR_CODE_JSET_ALM_TYP_NO_REQUIRED_ITEM: 2124,\t//異常種別:必須項目\r\n ERR_CODE_JSET_ALM_TYP_NO_CANNOT_BE_SET: 2125,\t//異常種別:設定不可\r\n ERR_CODE_JSET_MOVE_AVERAGE_ADD_CHANGE: 2126, //移動平均行の追加・変更に失敗\r\n ERR_CODE_JSET_MOVE_AVERAGE_RST: 2127, //移動平均行の初期化に失敗\r\n\r\n ERR_CODE_PLC_REQUEST_DUPLICATION: 2200, //PLC手動指示リクエスト重複\r\n ERR_CODE_PLC_REQUEST_NO_DATA: 2201, //該当れーこどがない\r\n\r\n //EMC情報画面\r\n ERR_CODE_EMC_DEVINDEX_DUPLICATE: 2300, //デバイス重複\r\n ERR_CODE_EMC_NO_DATA: 2301, //該当レコードがない\r\n\r\n //部分放電収集設定\r\n ERR_CODE_DEV_INDEX_DUPLICATION: 2900, //機器番号・名称が重複\r\n ERR_CODE_NODATE: 2901, //収集開始時刻が入力されていない\r\n ERR_CODE_NOLIML_VALUE: 2902, //軽故障が入力されていない\r\n ERR_CODE_NOLIMH_VALUE: 2903, //重故障が入力されていない\r\n ERR_CODE_LIM_VALUE: 2904, //軽故障<重故障でない\r\n ERR_CODE_NOIPADR: 2905, //IPアドレスが入力されていない\r\n ERR_CODE_IPADR_INCORRECT: 2906, //IPアドレスの書式が不正\r\n ERR_CODE_NOLIMLPD_VALUE: 2907, //PD強度閾値 軽故障が入力されていない\r\n ERR_CODE_NOLIMHPD_VALUE: 2908, //PD強度閾値 重故障が入力されていない\r\n ERR_CODE_LIMPD_VALUE: 2909, //PD強度閾値 軽故障<重故障でない\r\n ERR_CODE_NOMCLC_TYP_ID_MAX: 2910, //部分放電判定 最大値異常内容が登録されていない\r\n ERR_CODE_NOMCLC_TYP_ID_PD: 2911, //部分放電判定 PD強度異常内容が登録されていない\r\n\r\n //絶縁劣化検出\r\n ERR_CODE_DATA_NONCATCH: 2950, //DEV_INDEXの取得失敗かPLC_NOが存在しない\r\n\r\n //コナンエアー管理画面\r\n ERR_CODE_CONAN_CONANAIRSET_NODATA: 3000, //変更コナンエアーの登録がない\r\n ERR_CODE_CONAN_COLSET_NODATA: 3001, //変更コナンエアーに紐づくCOL_SETのアイテムがない\r\n ERR_CODE_CONAN_ITEM_HASDUPULICATES: 3002, //機器番号の重複\r\n ERR_CODE_CONAN_DEVINDEX_IOT_REGISTERED: 3003, //BOX管理側と機器番号の重複\r\n //データ収集画面\r\n ERR_CODE_RUNFLG_CHECK_ERROR: 3100, //TMBEE-BOXとコナンエアのRUN_FLGが両方ともON\r\n ERR_CODE_SYSTEM_ERROR: -99999, //システム異常\r\n\r\n\r\n}\r\n","import { ErrorCode, ResponceDataType } from \"../../../../ErrorCode\";\r\nimport iconv from 'iconv-lite';\r\nimport { parse } from 'csv-parse/lib/sync';\r\nimport i18next from 'i18next';\r\n\r\n/**\r\n *機器管理台帳読込用Type\r\n */\r\nexport type NameDevSetModel = {\r\n DevNo: string;\r\n DevName: string;\r\n\r\n indexNo: number;\r\n};\r\n\r\n/**\r\n * 機器管理台帳CSV読込\r\n * @param targetList\r\n * @returns\r\n */\r\nexport const PutNameDevSetCsvData = (targetList: NameDevSetModel[]): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/NameDevSet/readcsv\", {\r\n method: 'put',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(targetList),\r\n })\r\n .then((res) => {\r\n if (!res.ok) {\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n reject(message);\r\n }\r\n else {\r\n return res.json();\r\n }\r\n })\r\n .then((result: ResponceDataType) => {\r\n if (result.ErrorCode === ErrorCode.ERR_CODE_NONE) {\r\n resolve(result);\r\n }\r\n else {\r\n reject(result);\r\n }\r\n })\r\n .catch(error => {\r\n console.error(error);\r\n reject(error)\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * 入力チェック\r\n */\r\nexport const CheckInputData = (targetList: NameDevSetModel[], translation: any): string[] => {\r\n let errorMsgs: string[] = [];\r\n\r\n targetList.forEach((r, index) => {\r\n if (!r.DevNo) {\r\n errorMsgs.push(`No:${index + 1} ` + i18next.t('ReadDevCsvDialog.機器番号必須', '機器番号必須です'));\r\n }\r\n if (r.DevNo.length > 10) {\r\n errorMsgs.push(`No:${index + 1} ` + i18next.t('ReadDevCsvDialog.機器番号最大文字数', '機器番号最大10文字です'));\r\n }\r\n if (r.DevName.length > 32) {\r\n errorMsgs.push(`No:${index + 1} ` + i18next.t('ReadDevCsvDialog.機器番号文字数', '機器番号は32文字です'));\r\n }\r\n });\r\n\r\n return errorMsgs;\r\n}\r\n\r\n\r\n/**\r\n * csvファイル選択パーサー\r\n * @param fileObject CSVファイルobject\r\n * @returns 成功した場合、読み込んだファイルの配列を返す\r\n */\r\nexport const ReadAsCsvReader = (fileObject: File): Promise => {\r\n\r\n const reader = new FileReader();\r\n\r\n return new Promise((resolve, reject) => {\r\n reader.onloadstart = ev => {\r\n console.debug(`onloadstart: total=${ev.loaded}/${ev.loaded}`);\r\n };\r\n\r\n reader.onloadend = ev => {\r\n console.debug(`onloadend: total=${ev.loaded}/${ev.loaded}`);\r\n };\r\n\r\n reader.onprogress = ev => {\r\n console.debug(`onprogress: total=${ev.loaded}/${ev.loaded}`);\r\n };\r\n\r\n reader.onerror = () => {\r\n reader.abort();\r\n reject('Unknown error occurred during reading the file');\r\n };\r\n\r\n reader.onload = () => {\r\n console.debug('onload');\r\n resolve(reader.result);\r\n };\r\n\r\n reader.readAsArrayBuffer(fileObject);\r\n });\r\n};\r\n\r\n\r\n/**\r\n * ArrayBufferを元にNameDevSetModelのリストを返す\r\n * @param datas \r\n * @returns\r\n */\r\nexport const CreateNameDevSetList = (datas: ArrayBuffer): Promise => {\r\n\r\n return new Promise((resolve, reject) => {\r\n // CSVファイルの文字コードを Shift_JIS に変換する。\r\n const csvString = iconv.decode(Buffer.from(datas), 'Shift_JIS');\r\n // CSVファイルを JavaScriptのオブジェクト に変換する。\r\n const records = parse(csvString, {\r\n columns: true,\r\n trim: true,\r\n skip_empty_lines: true,\r\n relax_column_count: true,\r\n });\r\n\r\n if (records.length == 0) {\r\n return reject('data format error');\r\n }\r\n\r\n let list: NameDevSetModel[] = [];\r\n for (const record of records) {\r\n const newRow: NameDevSetModel = {\r\n indexNo: 0,\r\n DevName: record['機器名'],\r\n DevNo: record['機器番号'],\r\n };\r\n if (newRow.DevNo != null && newRow.DevNo !== '') {\r\n list.push(newRow);\r\n }\r\n }\r\n\r\n if (list.length === 0) {\r\n return reject('data format error');\r\n }\r\n\r\n // 重複を削除したリストを作成\r\n const list2 = list.filter((x, i, self) => self.findIndex((y) => y.DevNo === x.DevNo) === i);\r\n //連番付与\r\n list2.forEach((r, index) => (r.indexNo = index + 1));\r\n console.debug(['list', list2]);\r\n return resolve(list2);\r\n\r\n });\r\n};\r\n","\r\nimport {initReactI18next} from 'react-i18next';\r\nimport Backend from 'i18next-http-backend';\r\nimport LanguageDetector from 'i18next-browser-languagedetector';\r\nimport i18n from 'i18next';\r\n\r\ni18n\r\n .use(Backend)//パブリックフォルダからの翻訳ファイルをロード\r\n .use(LanguageDetector)//ブラウザの言語設定をいい感じに取得してくれるプラグイン\r\n .use(initReactI18next)\r\n .init({\r\n fallbackLng: 'ja',\r\n debug: true,\r\n react: {\r\n wait: true,\r\n useSuspense: false,\r\n },\r\n interpolation: {\r\n escapeValue: false, // not needed for react as it escapes by default\r\n },\r\n });\r\n\r\n//初期表示で発火させるための呼び出し\r\ni18n.changeLanguage(\"ja\");\r\n\r\nexport default i18n;\r\n","export const CHANGE_LANG = 'CHANGE_LANG' as const;\r\n\r\nexport type StateType = {\r\n lang: string;\r\n};\r\n\r\nexport const changeLang = (lang: string) => ({\r\n type: CHANGE_LANG,\r\n payload: { lang },\r\n});\r\n\r\nexport type ActionType = ReturnType;\r\n\r\nexport const appReducer = (state: StateType, action: ActionType) => {\r\n switch (action.type) {\r\n case CHANGE_LANG:\r\n return { ...state, lang: action.payload.lang };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\n","import i18n from \"./i18n\";\r\nimport i18next from 'i18next';\r\n\r\n/**\r\n * PLC情報更新周期 ミリ秒\r\n */\r\nexport const PLC_STATUS_OBSERVE_SPAN = 10000;\r\n/**\r\n * Colud情報更新周期 ミリ秒\r\n */\r\nexport const CLOUD_STATUS_OBSERVE_SPAN = 10000;\r\n\r\n/**\r\n * IoT機器一覧更新周期 ミリ秒\r\n */\r\nexport const IOT_MACHINE_STATUS_OBSERVE_SPAN = 10 * 1000;\r\n\r\n/**\r\n * コナンエアーPLCNO最大値\r\n */\r\nexport const CONAN_AIR_PLCNO_MAX = 400;\r\n/**\r\n * コナンエアーPLCNO最小値\r\n */\r\nexport const CONAN_AIR_PLCNO_MIN = 301;\r\n\r\n/**\r\n * 部分放電PLCNo\r\n */\r\nexport const PARTIAL_DISCHARGE_PLCNO = 255;\r\n\r\n/**\r\n * 移動平均法(MCLC_TYP_ID)\r\n */\r\nexport const MOVING_AVERAGE_METHOD = 16;\r\n\r\n/**\r\n * FFT比較横軸最大値 クラウド版\r\n */\r\nexport const FFT_MAX_VALUE_CLUDO = 5000;\r\n/**\r\n * FFT比較横軸最大値 オンプレ版\r\n */\r\nexport const FFT_MAX_VALUE_ONPRE = 6250;\r\n\r\n/* グラフ背景 黒テーマ */\r\nexport const GraphThemeDark = {\r\n BACK_COLOR: '#000000',\r\n MEMORY_FONT_COLOR: '#f0f8ff',\r\n UNIT_COLOR: '#f0f8ff',\r\n GRIDCOLOR: '#ccc',\r\n}\r\n/* グラフ背景 白テーマ */\r\nexport const GraphThemeLight = {\r\n BACK_COLOR: \"white\",\r\n MEMORY_FONT_COLOR: '#000000',\r\n UNIT_COLOR: '#000000',\r\n GRID_COLOR: 'black',\r\n}\r\n\r\n/* 軽故障ラインカラー */\r\nexport const LIGHT_FAULT_LINE_COLOR = 'orange';\r\n/* 重故障ラインカラー*/\r\nexport const SERIOUS_FAULT_LINE_COLOR = 'red';\r\n\r\n\r\n/**\r\n * 項目名称の列挙体\r\n */\r\nexport const NameItemKind = {\r\n /* 負荷側*/\r\n LOADSIDE: 1,\r\n /* 反負荷側*/\r\n ANTI_LOADSIDE: 2,\r\n /* R相*/\r\n R: 3,\r\n /* S相*/\r\n S: 4,\r\n /* T相*/\r\n T: 5,\r\n /*フレーム*/\r\n FLAME: 18,\r\n} as const;\r\nexport type NameItemKind = typeof NameItemKind[keyof typeof NameItemKind];\r\n\r\n\r\n/**\r\n * 診断タイプの列挙体\r\n */\r\nexport const JdgTypKind = {\r\n /* 生波形を表します*/\r\n RAW: 2,\r\n /* 可視化処理を表します*/\r\n KASHIKA: 3,\r\n /*FFT を表します*/\r\n FFT: 4,\r\n /* FFT(ENV) を表します*/\r\n FFT_ENV: 5,\r\n /* 差分 dB を表します*/\r\n DBD: 6,\r\n /* 変位 FFT を表します*/\r\n DSP_FFT: 7,\r\n /* 速度 FFT を表します*/\r\n SPD_FFT: 8,\r\n /* 移動平均を表します */\r\n MOVE_AVE: 9,\r\n} as const;\r\nexport type JdgTypKind = typeof JdgTypKind[keyof typeof JdgTypKind];\r\n\r\n/**\r\n * 演算Noの列挙体\r\n */\r\nexport const CcTypKind = {\r\n /* 最大値を表します */\r\n MAX: 1,\r\n /* 実効値を表します */\r\n RUN_VALUE: 2,\r\n /* OA値を表します */\r\n OA_VALUE: 4,\r\n /* 速度を表します */\r\n SPD: 5,\r\n /* 変位を表します */\r\n DSP: 6,\r\n /* dB差分値を表します */\r\n DBD: 7,\r\n /* PD強度を表します */\r\n PD_INTENSITY: 10,\r\n /* 移動平均を表します */\r\n MOVE_AVERAGE: 13,\r\n /** 部分放電 最大値 */\r\n PD_TYP_NO_CLC_MAXVALUE: 97,\r\n /**部分放電 Pd強度 */\r\n PD_TYP_NO_CLC_PDVALUE: 98,\r\n\r\n} as const;\r\nexport type CcTypKind = typeof CcTypKind[keyof typeof CcTypKind];\r\n\r\n/**\r\n * 低速 / 高速区分\r\n */\r\nexport const SpeedKind = {\r\n /* 低速*/\r\n SPEED_KIND_LOW: 1,\r\n /* 高速*/\r\n SPEED_KIND_HIGHT: 2,\r\n /*EMC-B*/\r\n SPEED_KIND_EMCB: 3,\r\n /* 計算タグ*/\r\n SPEED_KIND_CALC: 4,\r\n /* 計算タグ*/\r\n SPEED_KIND_IotBox: 5,\r\n /* コナンエア*/\r\n SPEED_CONAN: 6,\r\n /**部分放電 */\r\n SPEED_PARTIALDISCHARGE: 7,\r\n} as const;\r\nexport type SpeedKind = typeof SpeedKind[keyof typeof SpeedKind];\r\n\r\n/**\r\n計測種別 (低速) の列挙体\r\n*/\r\nexport const MeasureLowKind = {\r\n /* 不明な識別子*/\r\n NONE: 0,\r\n /* 電圧*/\r\n VOLTAGE: 1,\r\n /* 電流*/\r\n CURRENT: 2,\r\n /* 温度*/\r\n TEMPERATURE: 3,\r\n\r\n} as const;\r\nexport type MeasureLowKind = typeof MeasureLowKind[keyof typeof MeasureLowKind];\r\n\r\n/**\r\n計測種別 (高速) の列挙体\r\n*/\r\nexport const MeasureHighKind = {\r\n /* 不明な識別子*/\r\n NONE: 0,\r\n /* 振動 (加速度) */\r\n VIBRATION: 1,\r\n /* 線電流 R 相*/\r\n R_CURRENT: 2,\r\n /* 線電流 S 相*/\r\n S_CURRENT: 3,\r\n /* 線電流 T 相*/\r\n T_CURRENT: 4,\r\n /* 零相電流 (収集) */\r\n ZERO_CURRENT: 5,\r\n /* 温度*/\r\n TEMPERATURE_IOT: 6,\r\n /* 振動 (速度) */\r\n VIBRATION_SPD: 1001,\r\n /* 振動 (変位)*/\r\n VIBRATION_DSP: 1002,\r\n\r\n} as const;\r\n\r\nexport type MeasureHighKind = typeof MeasureHighKind[keyof typeof MeasureHighKind];\r\n\r\n/**\r\n計測種別 (計算タグ) の列挙体\r\n*/\r\nexport const MeasureCalcKind = {\r\n /* 不明な識別子*/\r\n NONE: 0,\r\n /* 零相電流 (計算) を表します */\r\n ZERO_CURRENT: 1,\r\n /* 正相電流 (計算) を表します*/\r\n SEI_CURRENT: 2,\r\n /* 逆相電流 (計算) を表します*/\r\n GYAKU_CURRENT: 3,\r\n\r\n} as const;\r\n\r\nexport type MeasureCalcKind = typeof MeasureCalcKind[keyof typeof MeasureCalcKind];\r\n/**\r\n計測種別 コナンエアの列挙体\r\n*/\r\nexport const MeasureConanKind = {\r\n /* 不明な識別子*/\r\n NONE: 0,\r\n /* 速度:X軸 */\r\n SOKUDO_X: 8,\r\n /* 速度:Y軸*/\r\n SOKUDO_Y: 9,\r\n /* 速度:Z軸*/\r\n SOKUDO_Z: 10,\r\n /* 速度:3D*/\r\n SOKUDO_3D: 11,\r\n /* 振動(速度):X軸(FFT)*/\r\n SOKUDO_FFT_X: 20,\r\n /* 振動(速度):Y軸(FFT)*/\r\n SOKUDO_FFT_Y: 21,\r\n /* 振動(速度):Z軸(FFT)*/\r\n SOKUDO_FFT_Z: 22,\r\n /* 振動(速度):3D(FFT)*/\r\n SOKUDO_FFT_3D: 23,\r\n\r\n} as const;\r\n\r\nexport type MeasureConanKind = typeof MeasureConanKind[keyof typeof MeasureConanKind];\r\n\r\n/**\r\n計算方法 の列挙体\r\n*/\r\nexport const MeasureClcType = {\r\n /*最大値を表します。*/\r\n eMax: 1,\r\n /*実効値を表します。*/\r\n eRms: 2,\r\n /*瞬時値を表します。*/\r\n eMon: 3,\r\n /*OA 値を表します。*/\r\n eOav: 4,\r\n /*速度値を表します。*/\r\n eSpd: 5,\r\n /*変位値を表します。*/\r\n eDsp: 6,\r\n /*dB 差分を表します。*/\r\n eDbd: 7,\r\n /*回転周波数を表します。*/\r\n eFrq: 8,\r\n /*平均値を表します。*/\r\n eAvg: 9,\r\n /*PD 強度を表します。*/\r\n ePdm: 98,\r\n /*特徴値を表します。*/\r\n eChr: 99,\r\n} as const;\r\n\r\nexport type MeasureClcType = typeof MeasureClcType[keyof typeof MeasureClcType];\r\n\r\n/**\r\n * 特徴値を多言語化します\r\n * @param clc\r\n * @param clcName デフォルト文字\r\n * @param translation useTranslation関数\r\n * @returns\r\n */\r\nexport const GetMeasureClcName = (clc: number, clcName: string, translation: any): string => {\r\n if (clc === MeasureClcType.eChr) {\r\n return i18next.t('Constant.特徴値', '特徴値');\r\n }\r\n return clcName;\r\n};\r\n\r\n\r\n/**\r\n異常種別 の列挙体\r\n*/\r\nexport const AlmTypKind = {\r\n /*軸受特徴周波数 (内輪) を表します。*/\r\n eChr1: 1,\r\n /*軸受特徴周波数 (外輪) を表します。*/\r\n eChr2: 2,\r\n /*軸受特徴周波数 (転動体) を表します。*/\r\n eChr3: 3,\r\n /*軸受特徴周波数 (保持器) を表します。*/\r\n eChr4: 4,\r\n /*特徴周波数設定 (特徴 No.1) を表します。*/\r\n eChr5: 5,\r\n /*特徴周波数設定 (特徴 No.2) を表します。*/\r\n eChr6: 6,\r\n /*特徴周波数設定 (特徴 No.3) を表します。*/\r\n eChr7: 7,\r\n /*特徴周波数設定 (特徴 No.4) を表します。*/\r\n eChr8: 8,\r\n /*電流側帯波周波数 (-側) を表します。*/\r\n eDbdMinus: 9,\r\n /*電流側帯波周波数 (+側) を表します。*/\r\n eDbdPlus: 10,\r\n /*生波形 最大値を表します。*/\r\n eRawMax: 11,\r\n /*生波形 実効値を表します。*/\r\n eRawRms: 12,\r\n /*生波形 OA 値を表します。*/\r\n eRawOav: 13,\r\n /*生波形 速度値を表します。*/\r\n eRawSpd: 14,\r\n /*生波形 変位値を表します。*/\r\n eRawDsp: 15,\r\n /*可視化処理 最大値を表します。*/\r\n eKashikaMax: 16,\r\n /*可視化処理 実効値を表します。*/\r\n eKashikaRms: 17,\r\n /*可視化処理を表します。*/\r\n eKashikaShori: 18,\r\n /*回転子特徴周波数を表します。*/\r\n eKaitenChr: 19,\r\n /*FFT 変位周波数設定 (No.1) を表します。*/\r\n eFftDsp1: 20,\r\n /*FFT 変位周波数設定 (No.2) を表します。*/\r\n eFftDsp2: 21,\r\n /*FFT 変位周波数設定 (No.3) を表します。*/\r\n eFftDsp3: 22,\r\n /*FFT 変位周波数設定 (No.4) を表します。*/\r\n eFftDsp4: 23,\r\n /*FFT 速度周波数設定 (No.1) を表します。*/\r\n eFftSpd1: 24,\r\n /*FFT 速度周波数設定 (No.2) を表します。*/\r\n eFftSpd2: 25,\r\n /*FFT 速度周波数設定 (No.3) を表します。*/\r\n eFftSpd3: 26,\r\n /*FFT 速度周波数設定 (No.4) を表します。*/\r\n eFftSpd4: 27,\r\n /**軸受特徴周波数(内輪):3D(負荷側) */\r\n eConanfft3dSpd1_loadside: 41,\r\n /**軸受特徴周波数(保持器):3D(負荷側) */\r\n eConanfft3dSpd4_loadside: 44,\r\n /**軸受特徴周波数(内輪):3D(反負荷側) */\r\n eConanfft3dSpd1_aloadside: 57,\r\n /**軸受特徴周波数(保持器):3D(反負荷側) */\r\n eConanfft3dSpd4_aloadside: 60,\r\n} as const;\r\n\r\nexport type AlmTypKind = typeof AlmTypKind[keyof typeof AlmTypKind];\r\n\r\n\r\n/**\r\n * IoTBox機器一覧 収集結果種別 の列挙体\r\n */\r\nexport const CollectionStatsuType = {\r\n /* 収集中*/\r\n COLLECTING: 0,\r\n /* 収集完了*/\r\n END: 1,\r\n /* 収集失敗*/\r\n ERROR: 2,\r\n} as const;\r\nexport type CollectionStatsuType = typeof CollectionStatsuType[keyof typeof CollectionStatsuType];\r\n\r\n/**\r\n * 学習状況 の列挙体\r\n */\r\nexport const LearnStatType = {\r\n /* 学習前*/\r\n BEFORE_LEARNING: 0,\r\n /* 学習中 */\r\n LEARNING: 1,\r\n /* 学習後(ばらつき有)*/\r\n AFTER_LEARNING_VARIATION: 2,\r\n /* 学習後(ばらつき無)*/\r\n AFTER_LEARNING_NO_VARIATION: 3,\r\n /** 使用不可 */\r\n UNUSABLE: -1,\r\n} as const;\r\nexport type LearnStatType = typeof LearnStatType[keyof typeof LearnStatType];\r\n\r\n//=============================振動 速度、変位対応\r\n/**\r\n * 主に、グループ設定で振動の特殊データだった場合\r\n * 特殊な番号のKINDNOへ変換する\r\n * @param kindNo\r\n * @returns\r\n */\r\nexport const GetVibrationSpecialNo = (kindNo: number): string => {\r\n if (kindNo === 1) {\r\n return String(MeasureHighKind.VIBRATION_SPD);\r\n }\r\n if (kindNo === 2) {\r\n return String(MeasureHighKind.VIBRATION_DSP);\r\n }\r\n return \"0\";\r\n};\r\n/**\r\n * 計測種別で単位を返します。\r\n * @param kindNo 計測種別\r\n * @param unit 単位\r\n * @returns\r\n */\r\nexport const GetVibrationSpecialNoUnit = (kindNo: number, unit: string): string => {\r\n switch (kindNo) {\r\n case MeasureHighKind.VIBRATION_SPD:\r\n // 振動(速度)\r\n return 'mm/s';\r\n case MeasureHighKind.VIBRATION_DSP:\r\n // 振動(変位)\r\n return 'µm';\r\n }\r\n return unit;\r\n};\r\n\r\n/**\r\n * 計測種別の特殊種別の計測種別名を返す。\r\n * @param kindNo 計測種別\r\n * @returns\r\n */\r\nexport const GetVibrationSpecialString = (kindNo: number, translation: any): string => {\r\n switch (kindNo) {\r\n case MeasureHighKind.VIBRATION_SPD:\r\n return i18next.t('Constant.振動(速度)', '振動(速度)');\r\n case MeasureHighKind.VIBRATION_DSP:\r\n return i18next.t('Constant.振動(変位)', '振動(変位)');\r\n }\r\n return \"\";\r\n};\r\n\r\n/**\r\n * 計測種別の列挙体\r\n */\r\nexport const DefaultKindNo = {\r\n /* デフォルト */\r\n NONE: 0,\r\n /* 振動 (速度) */\r\n VIBRATION_SPD: 1,\r\n /* 振動 (変位) */\r\n VIBRATION_DSP: 2,\r\n} as const;\r\nexport type DefaultKindNo = typeof DefaultKindNo[keyof typeof DefaultKindNo];\r\n\r\n/**\r\n * 計測種別の 振動 (速度)、振動 (変位) 計測種別名を返す。\r\n * @param kindNo 計測種別\r\n * @returns\r\n */\r\nexport const GetVibrationSpecialStringByKindNo = (kindNo: number, translation: any): string => {\r\n switch (kindNo) {\r\n case DefaultKindNo.VIBRATION_SPD:\r\n return i18next.t('Constant.振動(速度)', '振動(速度)');\r\n case DefaultKindNo.VIBRATION_DSP:\r\n return i18next.t('Constant.振動(変位)', '振動(変位)');\r\n }\r\n return \"\";\r\n};\r\n//=============================\r\n","import React, { useEffect, useState } from 'react';\r\nimport { makeStyles, Theme } from '@material-ui/core/styles';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport { PLC_STATUS_OBSERVE_SPAN } from '../../../Constant';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nexport type PLC_COLMNG = {\r\n PLC_NO: number;\r\n EST: number;\r\n STAT_CON: number;\r\n STAT_SAV: number;\r\n ERR_MES: string;\r\n};\r\n\r\n// スタイル定義用のフック関数が受け取るプロパティの型\r\ntype StyleProps = {\r\n isStatusOk: boolean;\r\n};\r\n\r\nconst useStyles = makeStyles({\r\n paper: {\r\n height: '100%',\r\n background: (props) => (props.isStatusOk ? '#4CAF50' : '#FF0000'),\r\n color: '#FFFFFF',\r\n textAlign: 'center',\r\n },\r\n});\r\n\r\nconst PLSStateCard: React.FC = () => {\r\n const { t } = useTranslation();\r\n const [plcState, setPlcState] = useState([]);\r\n\r\n const getData = () => {\r\n fetch('api/PLCColmNg')\r\n .then((res) => res.json())\r\n .then(\r\n (result: PLC_COLMNG[]) => {\r\n setPlcState(result);\r\n },\r\n (error) => {\r\n console.debug(error);\r\n }\r\n );\r\n };\r\n\r\n useEffect(() => {\r\n getData();\r\n const interval = setInterval(() => {\r\n getData();\r\n }, PLC_STATUS_OBSERVE_SPAN); // intervals\r\n\r\n return () => {\r\n clearInterval(interval);\r\n };\r\n }, []);\r\n\r\n //全接続状態 判定\r\n const isOk = plcState.length > 0 && plcState.every((row) => row.STAT_CON === 1);\r\n\r\n const classes = useStyles({ isStatusOk: isOk });\r\n\r\n return (\r\n \r\n \r\n {isOk ? t('PLSStateCard.収集OK', '収集OK') : t('PLSStateCard.PLC未接続', 'PLC未接続')}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default PLSStateCard;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { makeStyles, createStyles, Theme } from '@material-ui/core/styles';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { ErrorCode } from '../../../ErrorCode';\r\nimport { CLOUD_STATUS_OBSERVE_SPAN } from '../../../Constant';\r\n\r\nexport type COMM_HIS = {\r\n REQ_DATE: string; //通信日時\r\n PRO_CATEGORY: string; //処理分類\r\n PROCESS_NO: number; //処理番号\r\n REQ1: string; //データ1\r\n REQ2: string; //データ2\r\n REQ3: string; //データ3\r\n REQ4: string; //データ4\r\n REQ5: string; //データ5\r\n REQ6: string; //データ6\r\n REQ7: string; //データ7\r\n REQ8: string; //データ8\r\n REQ9: string; //データ9\r\n REQ10: string; //データ10\r\n REQ11: string; //データ11\r\n REQ12: string; //データ12\r\n REQ13: string; //データ13\r\n REQ14: string; //データ14\r\n REQ15: string; //データ15\r\n REQ16: string; //データ16\r\n REQ17: string; //データ17\r\n REQ18: string; //データ18\r\n REQ19: string; //データ19\r\n REQ20: string; //データ20\r\n REQ21: string; //データ21\r\n REQ22: string; //データ22\r\n REQ23: string; //データ23\r\n REQ24: string; //データ24\r\n REQ25: string; //データ25\r\n REQ26: string; //データ26\r\n REQ27: string; //データ27\r\n REQ28: string; //データ28\r\n REQ29: string; //データ29\r\n REQ30: string; //データ30\r\n REQ_CONT: number; //リトライ回数\r\n COMP_FLG: string; //完了フラグ\r\n PRO_PROGRAM: string; //処理プログラム\r\n COMP_DATE: string; //完了日時\r\n};\r\n\r\ntype ColudErrorLogType = {\r\n CloudErrorStatus: number;\r\n ResponceData: ResponceDataType;\r\n};\r\n\r\n// レスポンス情報\r\ntype ResponceDataType = {\r\n ResponseCode: number;\r\n ErrorCode: number;\r\n ResponseMessage: string;\r\n ErrorMessage: string;\r\n};\r\n\r\nconst ApiResponseCode = {\r\n DEFAULT: 200,\r\n SUCCESS: 204, //要求待ちレコード追加\r\n EXISTS_RECORD: 406, //既に要求中\r\n UPDATE_FAILURE: 500, //更新失敗\r\n};\r\n\r\nconst ButtonStatus = {\r\n DEFAULT: 0,\r\n REQUESTING: 1, //サーバアクセス中\r\n RES_OK: 2,\r\n RES_NG: 3,\r\n};\r\n\r\n//CSVファイルの取得\r\nexport const getCloudStatus = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const url = 'api/CloudErrorLog';\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then(\r\n (result: ColudErrorLogType) => {\r\n console.debug(['result', result]);\r\n if (getCloudStatusValidate(result)) {\r\n resolve(result);\r\n }\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\nconst getCloudStatusValidate = (data: ColudErrorLogType) => {\r\n if (data == null) {\r\n return false;\r\n }\r\n return true;\r\n};\r\n\r\n// スタイル定義用のフック関数が受け取るプロパティの型\r\ntype StyleProps = {\r\n buttonStyle: number;\r\n};\r\nconst useStyles = makeStyles({\r\n paper: {\r\n cursor: 'pointer' /* マウスポインタの形状 */,\r\n height: '100%',\r\n background: (props) => {\r\n switch (props.buttonStyle) {\r\n case ButtonStatus.REQUESTING:\r\n return '#808000';\r\n case ButtonStatus.RES_OK:\r\n return '#4CAF50';\r\n case ButtonStatus.RES_NG:\r\n return '#FF0000';\r\n default:\r\n return '#536DFE';\r\n }\r\n },\r\n color: '#FFFFFF',\r\n textAlign: 'center',\r\n },\r\n});\r\n\r\n/**\r\n * クラウドエラー要求をCOMM_HISテーブルにインサートする\r\n * @returns\r\n */\r\nconst CloudErrorLogCard: React.FC = () => {\r\n const { t } = useTranslation();\r\n\r\n const [buttonStatus, setButtonStatus] = useState(ButtonStatus.DEFAULT);\r\n //const [commHis, setCommHis] = useState();\r\n\r\n const getButtonString = (buttonStatus: number) => {\r\n switch (buttonStatus) {\r\n case ButtonStatus.REQUESTING:\r\n return t('CloudErrorLogCard.処理中です', '処理中です');\r\n case ButtonStatus.RES_OK:\r\n return t('CloudErrorLogCard.クラウドOK', 'クラウドOK');\r\n case ButtonStatus.RES_NG:\r\n return t('CloudErrorLogCard.クラウドNG', 'クラウドNG');\r\n default:\r\n return t('CloudErrorLogCard.クラウド情報表示', 'クラウド情報表示');\r\n }\r\n };\r\n\r\n const getData = () => {\r\n getCloudStatus()\r\n .then((r) => {\r\n if (r.ResponceData.ErrorCode != ErrorCode.ERR_CODE_NONE) {\r\n setButtonStatus(ButtonStatus.RES_NG);\r\n } else {\r\n switch (r.CloudErrorStatus) {\r\n case 0:\r\n return setButtonStatus(ButtonStatus.REQUESTING);\r\n case 1:\r\n return setButtonStatus(ButtonStatus.RES_OK);\r\n case 2:\r\n return setButtonStatus(ButtonStatus.RES_NG);\r\n default:\r\n return setButtonStatus(ButtonStatus.RES_NG);\r\n }\r\n }\r\n })\r\n .catch((e) => {\r\n console.error('Experiment completed');\r\n setButtonStatus(ButtonStatus.RES_NG);\r\n })\r\n .finally(() => {});\r\n };\r\n\r\n useEffect(() => {\r\n getData();\r\n const interval = setInterval(() => {\r\n getData();\r\n }, CLOUD_STATUS_OBSERVE_SPAN); // intervals\r\n\r\n return () => {\r\n clearInterval(interval);\r\n };\r\n }, []);\r\n\r\n /** クラウドエラーリクエストボタン処理 */\r\n const handleCloudErrorClick = () => {\r\n console.debug(['===buttonStatus====', buttonStatus]);\r\n\r\n //if (buttonStatus != ButtonStatus.REQUESTING) { //TODO リクエスト中の場合はAPIをコールしない\r\n fetch('api/CloudErrorLog', {\r\n method: 'post',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({}),\r\n })\r\n .then((resp) => {\r\n console.debug([resp]);\r\n if (resp.status == ApiResponseCode.SUCCESS) {\r\n //クラウドエラー要求をレコード追加\r\n setButtonStatus(ButtonStatus.REQUESTING);\r\n } else if (resp.status == ApiResponseCode.EXISTS_RECORD) {\r\n setButtonStatus(ButtonStatus.REQUESTING);\r\n } else {\r\n setButtonStatus(ButtonStatus.DEFAULT);\r\n }\r\n })\r\n .catch((err) => {\r\n console.log(err);\r\n });\r\n //}\r\n };\r\n\r\n //console.debug(['表示開始', buttonStatus]);\r\n const classes = useStyles({ buttonStyle: buttonStatus });\r\n return (\r\n \r\n \r\n
{getButtonString(buttonStatus)}
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default CloudErrorLogCard;\r\n","import React from 'react';\r\nimport dayjs from 'dayjs';\r\n\r\ntype Props = {\r\n value: Date | null | undefined;\r\n format: string;\r\n};\r\n\r\nconst DateTImeDiv: React.FC = (props) => {\r\n if (props.value == null || props.value == undefined) {\r\n return
;\r\n } else {\r\n const day1 = dayjs(props.value);\r\n return
{day1.format(props.format)}
;\r\n }\r\n};\r\n\r\nexport default DateTImeDiv;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport DateTImeDiv from '../../atoms/Div/DateTImeDiv';\r\nimport Paper from '@material-ui/core/Paper';\r\n\r\nconst useStyles = makeStyles({\r\n paper: {\r\n height: '100%',\r\n background: '#f4d700',\r\n color: '#000000',\r\n textAlign: 'center',\r\n },\r\n});\r\n\r\nconst TimeCard: React.FC = () => {\r\n const [nowTime, setnowTime] = useState(new Date());\r\n\r\n useEffect(() => {\r\n const interval = setInterval(() => {\r\n setnowTime(new Date());\r\n }, 1000);\r\n\r\n return () => {\r\n clearInterval(interval);\r\n };\r\n }, []);\r\n\r\n const classes = useStyles();\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default TimeCard;\r\n","import React from 'react';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport Select from '@material-ui/core/Select';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\n\r\nexport interface ComboBoxItem {\r\n id: string;\r\n value: string;\r\n}\r\n\r\ntype Props = {\r\n inputLabel: string;\r\n items: ComboBoxItem[];\r\n defaultValue: string;\r\n value: string;\r\n onChange: (selected: string) => void;\r\n};\r\n\r\nconst ComboBoxMaterial: React.FC = (props) => {\r\n const { inputLabel, items, value, defaultValue, onChange } = props;\r\n\r\n return (\r\n <>\r\n {inputLabel}\r\n {\r\n if (e.target.value !== undefined) {\r\n onChange(e.target.value as string);\r\n }\r\n }}\r\n >\r\n {items.map((item) => (\r\n \r\n {item.value}\r\n \r\n ))}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default ComboBoxMaterial;\r\n","import React, { useState, useEffect, useContext } from 'react';\r\nimport { AppContext } from '../../../App';\r\nimport { CHANGE_LANG } from '../../../Reducer';\r\n\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport ComboBoxMaterial, { ComboBoxItem } from '../../atoms/ComboBox/ItemComboBoxMaterial';\r\n\r\nconst useStyles = makeStyles({\r\n paper: {\r\n background: '#f4d700',\r\n color: '#000000',\r\n textAlign: 'center',\r\n },\r\n});\r\n\r\nconst LanguageChangeCard: React.FC = () => {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const { state, dispatch } = useContext(AppContext);\r\n\r\n //言語リスト作成\r\n const languages: ComboBoxItem[] = [\r\n { id: 'ja', value: '日本語' },\r\n { id: 'en', value: 'English' },\r\n ];\r\n\r\n const [selectIndex, setSelectIndex] = useState('ja');\r\n\r\n useEffect(() => {\r\n //ログイン後の初期値選択設定\r\n setSelectIndex(state.lang);\r\n }, []);\r\n\r\n const handleLanguageChange = (value: string) => {\r\n var r = languages.find((row) => row.id === value);\r\n if (r != undefined) {\r\n dispatch({\r\n type: CHANGE_LANG,\r\n payload: { lang: r.id },\r\n });\r\n setSelectIndex(value);\r\n } else {\r\n dispatch({\r\n type: CHANGE_LANG,\r\n payload: { lang: 'ja' },\r\n });\r\n setSelectIndex('ja');\r\n }\r\n };\r\n\r\n return (\r\n \r\n handleLanguageChange(selected)}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default LanguageChangeCard;\r\n","export default __webpack_public_path__ + \"static/media/logo.5582a074.PNG\";","import React, { useEffect, useState } from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport { useTranslation } from 'react-i18next';\r\nimport logo from '../../../image/logo.PNG';\r\nimport Box from '@material-ui/core/Box';\r\n\r\nconst useStyles = makeStyles({\r\n paper: {\r\n background: '#f4d700',\r\n color: '#000000',\r\n paddingLeft: '10px',\r\n },\r\n});\r\n\r\nconst AppTitleCard: React.FC = () => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n return (\r\n \r\n \r\n \"picture\"\r\n {t('AppTitleCard.回転機診断Webシステム', '回転機診断Webシステム')}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default AppTitleCard;\r\n","import React, { useState, Dispatch, SetStateAction, useMemo } from 'react';\r\n\r\n/*\r\n * ダイアログ表示サポート用フック\r\n *\r\n * 親ウィンドウ\r\n *\r\n * // 戻り値として Response型が返るモーダル用変数定義\r\n * // 表示状態管理用のフラグと状態管理用変数が返る\r\n * const [flagDlg,actionDlg] = useModal();\r\n * :\r\n *\r\n * // フラグ状態でダイアログの表示の有無を決める\r\n * // ダイアログの型はここで決まる。必ず状態管理用変数を引数として与える\r\n * const dlg = flagDlg?:null;\r\n *\r\n *  return (\r\n *
\r\n * \r\n * {dlg}\r\n *
\r\n * );\r\n *\r\n * 子ウィンドウ\r\n * // 子ウィンドウのプロパティに必ず状態管理用変数を定義しておく\r\n * type DialogProps = {\r\n * dialog: DialogAction;\r\n * };\r\n *\r\n * const Dialog = (props: DialogProps) => {\r\n * // 確定でダイアログを終了する場合\r\n * // 引数としてResponse型の値を渡す\r\n * props.action.apply({});\r\n *\r\n * // キャンセルでダイアログを終了する場合\r\n * props.action.cancel();\r\n * }\r\n */\r\n\r\n/**\r\n * モーダルウィンドウ管理用フック\r\n * @param isOpen ウィンドウ初期状態。デフォルトはクローズ\r\n * @returns\r\n */\r\nexport function useModal(isOpen: boolean = false): [boolean, DialogAction] {\r\n const [flag, setFlag] = useState(isOpen);\r\n const dialogAction = useMemo(() => {\r\n return new DialogAction(setFlag);\r\n }, []);\r\n\r\n return [flag, dialogAction];\r\n}\r\n\r\n/**\r\n * ダイアログ操作クラス\r\n *\r\n */\r\nexport class DialogAction {\r\n private _setFlag: Dispatch>;\r\n private _applyAction?: (p: TResponse) => void;\r\n private _cancelAction?: (p: TResponse | undefined) => void;\r\n\r\n constructor(setFlag: Dispatch>) {\r\n this._setFlag = setFlag;\r\n }\r\n\r\n /**\r\n * オープン\r\n * @returns\r\n */\r\n open(): DialogDispatch {\r\n this._setFlag(true);\r\n\r\n return new DialogDispatch(this);\r\n }\r\n\r\n /**\r\n * クローズ\r\n * @description 何もせずにダイアログを閉じます\r\n */\r\n close() {\r\n this._setFlag(false);\r\n }\r\n\r\n /**\r\n * 確定処理\r\n * @param res パラメータ\r\n * @description パラメータを確定処理に渡し、ダイアログを閉じます。\r\n */\r\n apply(res: TResponse) {\r\n if (this._applyAction) {\r\n this._applyAction(res);\r\n }\r\n this.close();\r\n }\r\n\r\n /**\r\n * キャンセル処理\r\n * @param res パラメータ\r\n * @description パラメータをキャンセル処理に渡し、ダイアログを閉じます。\r\n */\r\n cancel(res?: TResponse) {\r\n if (this._cancelAction) {\r\n this._cancelAction(res);\r\n }\r\n this.close();\r\n }\r\n\r\n /**\r\n * 確定時処理登録\r\n * @param applyAction 確定時処理\r\n */\r\n setApply(applyAction: (p: TResponse) => void) {\r\n this._applyAction = applyAction;\r\n }\r\n\r\n /**\r\n * キャンセル時処理登録\r\n * @param cancelAction キャンセル時処理\r\n */\r\n setCancel(cancelAction: (p: TResponse | undefined) => void) {\r\n this._cancelAction = cancelAction;\r\n }\r\n}\r\n\r\n/**\r\n * ダイアログディスパッチャ\r\n */\r\nclass DialogDispatch {\r\n private _parent: DialogAction;\r\n\r\n /**\r\n * コンストラクタ\r\n * @param open オープンフラグ\r\n */\r\n constructor(parent: DialogAction) {\r\n this._parent = parent;\r\n }\r\n\r\n /**\r\n * 確定時処理設定\r\n * @param action 確定時処理\r\n * @description 確定時に呼び出される処理を登録します。\r\n */\r\n apply(action: (response: TResponse) => void): DialogDispatch {\r\n this._parent.setApply(action);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * キャンセル時処理登録\r\n * @param action キャンセル時処理\r\n * @description キャンセル時に呼び出される処理を登録します。\r\n */\r\n cancel(action: (response: TResponse | undefined) => void): DialogDispatch {\r\n this._parent.setCancel(action);\r\n\r\n return this;\r\n }\r\n}\r\n","import React, { useState } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { Button, Dialog, DialogTitle, DialogContent, DialogActions } from '@material-ui/core';\r\nimport { DialogAction } from '../../../function/useModal';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ntype ConfirmDialogProps = {\r\n dialog: DialogAction;\r\n title?: string;\r\n message?: string;\r\n action?: string;\r\n cancel?: string;\r\n};\r\n\r\nexport type ConfirmDialogResponse = {};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n button: {\r\n width: '150px',\r\n },\r\n })\r\n);\r\n\r\nconst ConfirmDialog: React.FC = (props: ConfirmDialogProps) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [isOpen, setIsOpen] = useState(true);\r\n const [mode, setMode] = useState(true);\r\n\r\n const tempMsg = t('ConfirmDialog.処理を行いますか?', '処理を行いますか?') ?? '処理を行いますか?';\r\n const msgs = (props.message ?? tempMsg).split('\\n');\r\n\r\n return (\r\n <>\r\n {}}\r\n onExited={(e) => {\r\n if (mode) {\r\n props.dialog.apply({});\r\n } else {\r\n props.dialog.cancel();\r\n }\r\n }}\r\n >\r\n {props.title ?? t('ConfirmDialog.確認', '確認')}\r\n \r\n
\r\n {msgs.map((msg) => (\r\n
{msg}
\r\n ))}\r\n
\r\n
\r\n \r\n {\r\n setIsOpen(false);\r\n setMode(true);\r\n }}\r\n >\r\n {props.action ?? t('ConfirmDialog.適用', '適用')}\r\n \r\n {\r\n setIsOpen(false);\r\n setMode(false);\r\n }}\r\n >\r\n {props.cancel ?? t('ConfirmDialog.キャンセル', 'キャンセル')}\r\n \r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nexport default ConfirmDialog;\r\n","import React, { useEffect, useState, useContext } from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport DateTImeDiv from '../../atoms/Div/DateTImeDiv';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { AppContext } from '../../../App';\r\nimport { useModal } from '../../../function/useModal';\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../atoms/Dialog/ConfirmDialog';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useHistory } from 'react-router-dom';\r\n\r\nconst useStyles = makeStyles({\r\n paper: {\r\n height: '100%',\r\n background: '#f4d700',\r\n color: '#000000',\r\n textAlign: 'center',\r\n },\r\n});\r\n\r\nconst UserNameCard: React.FC = () => {\r\n const history = useHistory();\r\n const classes = useStyles();\r\n const { login } = useContext(AppContext);\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n const [dlgtitle, setDlgtitle] = useState('');\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n const [actionDisp, setActionDisp] = useState('');\r\n const [cancelDisp, setCancelDisp] = useState('');\r\n const { t } = useTranslation();\r\n\r\n const cfmdlg = flgMsgDlg ? (\r\n \r\n ) : null;\r\n\r\n const onClickName = () => {\r\n setDlgtitle(t('Logout.確認', '確認'));\r\n setDlgmsg(t('Logout.ログアウトしますか?', 'ログアウトしますか?'));\r\n setActionDisp(t('Logout.はい', 'ログアウト'));\r\n setCancelDisp(t('Logout.いいえ', 'いいえ'));\r\n actMsgDlg\r\n .open()\r\n .apply((resp) => {\r\n //画面遷移\r\n history.push({\r\n pathname: '/',\r\n });\r\n login.logout();\r\n })\r\n .cancel((resp) => {});\r\n };\r\n\r\n //console.debug(['- 画面描画開始 -', login]);\r\n return (\r\n <>\r\n onClickName()}>\r\n {login.ID}\r\n \r\n {cfmdlg}\r\n \r\n );\r\n};\r\n\r\nexport default UserNameCard;\r\n","import React, { useState, useContext } from 'react';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport AlarmGrid from '../molecules/Grid/AlarmGrid';\r\nimport PLSStateCard from '../molecules/Card/PLSStateCard';\r\nimport CloudErrorLogCard from '../molecules/Card/CloudErrorLogCard';\r\nimport TimeCard from '../molecules/Card/TimeCard';\r\nimport LanguageChangeCardEx from '../molecules/Card/LanguageChangeCardEx';\r\nimport AppTitleCard from '../molecules/Card/AppTitleCard';\r\nimport UserNameCard from '../molecules/Card/UserNameCard';\r\nimport { AppContext } from '../../App';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n spacingXs1: {\r\n minWidth: '1440px',\r\n },\r\n })\r\n);\r\n\r\nconst Header: React.FC = () => {\r\n const { login } = useContext(AppContext);\r\n const classes = useStyles();\r\n\r\n return (\r\n <>\r\n {login.IsIoT ? (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default Header;\r\n","import React from 'react';\r\nimport { TFunction, useTranslation } from 'react-i18next';\r\nimport i18next from 'i18next';\r\n\r\ntype Props = {\r\n kind: Number;\r\n};\r\n\r\nconst AlarmKindDiv: React.FC = (props) => {\r\n const { t, i18n } = useTranslation();\r\n let label = ConvertKind(props.kind, t);\r\n return
{label}
;\r\n};\r\n\r\nexport const ConvertKind = (kind: Number, trans: TFunction<'translation'>): string => {\r\n let label = '';\r\n switch (kind) {\r\n case 1:\r\n label = i18next.t('AlarmKindDiv.重故障', '重故障');\r\n break;\r\n case 2:\r\n label = i18next.t('AlarmKindDiv.軽故障', '軽故障');\r\n break;\r\n case 3:\r\n label = i18next.t('AlarmKindDiv.システム異常', 'システム異常');\r\n break;\r\n case 4:\r\n label = i18next.t('AlarmKindDiv.モータ停止', 'モータ停止');\r\n break;\r\n case 21:\r\n case 23:\r\n label = i18next.t('AlarmKindDiv.上限異常', '上限異常');\r\n break;\r\n case 22:\r\n case 24:\r\n label = i18next.t('AlarmKindDiv.上上限異常', '上上限異常');\r\n break;\r\n default:\r\n label = i18next.t('AlarmKindDiv.不明', '不明');\r\n }\r\n\r\n return label;\r\n};\r\n\r\nexport default AlarmKindDiv;\r\n","import React from 'react';\r\nimport { TFunction, useTranslation } from 'react-i18next';\r\nimport i18next from 'i18next';\r\n\r\ntype Props = {\r\n devName: string;\r\n state: Number;\r\n};\r\n\r\nconst AlarmStateDiv: React.FC = (props) => {\r\n const { t, i18n } = useTranslation();\r\n const label = ConvertState(props.state, props.devName, t);\r\n return
{label}
;\r\n};\r\n\r\nexport const ConvertState = (state: Number, devName: string, trans: TFunction<'translation'>): string => {\r\n let label = '';\r\n if (state == 1) {\r\n label = devName == 'PLC' ? i18next.t('AlarmStateDiv.発生', '発生') : i18next.t('AlarmStateDiv.検出', '検出');\r\n } else {\r\n label = i18next.t('AlarmStateDiv.復帰', '復帰');\r\n }\r\n\r\n return label;\r\n};\r\n\r\nexport default AlarmStateDiv;\r\n","import React from 'react';\r\n\r\nimport { makeStyles, createStyles, Theme, withStyles } from '@material-ui/core/styles';\r\nimport { DialogProps } from '@material-ui/core/Dialog/Dialog';\r\nimport Button from '@material-ui/core/Button';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport MuiDialogTitle from '@material-ui/core/DialogTitle';\r\nimport MuiDialogContent from '@material-ui/core/DialogContent';\r\nimport MuiDialogActions from '@material-ui/core/DialogActions';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\n/**\r\n * 使用例\r\n */\r\n// const [open, setOpen] = React.useState(false);\r\n\r\n// const handleClickOpen = () => {\r\n// setOpen(true);\r\n// };\r\n// const handleClose = () => {\r\n// setOpen(false);\r\n// };\r\n\r\n// \r\n// Hello body\r\n// ;\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n margin: 0,\r\n padding: theme.spacing(2),\r\n },\r\n closeButton: {\r\n position: 'absolute',\r\n right: theme.spacing(1),\r\n top: theme.spacing(1),\r\n color: theme.palette.grey[500],\r\n },\r\n })\r\n);\r\n\r\ntype DialogTitleProps = {\r\n children: React.ReactNode;\r\n onClose: () => void;\r\n};\r\n\r\nconst DialogTitle: React.FC = (props) => {\r\n const { children, onClose, ...other } = props;\r\n const classes = useStyles(props);\r\n return (\r\n \r\n {children}\r\n {onClose ? (\r\n \r\n \r\n \r\n ) : null}\r\n \r\n );\r\n};\r\n\r\nconst DialogContent = withStyles((theme: Theme) => ({\r\n root: {\r\n padding: theme.spacing(2),\r\n },\r\n}))(MuiDialogContent);\r\n\r\nconst DialogActions = withStyles((theme: Theme) => ({\r\n root: {\r\n margin: 0,\r\n padding: theme.spacing(1),\r\n },\r\n}))(MuiDialogActions);\r\n\r\nexport type SimpleDialogProps = {\r\n /**画面外にマウスをクリックで画面を閉じる */\r\n autoClose?: boolean;\r\n /**ダイアログタイトル */\r\n title?: React.ReactNode | React.ReactNodeArray;\r\n /**ダイアログコンテント */\r\n children?: React.ReactNode | React.ReactNodeArray;\r\n /**ダイアログフッター 未使用 */\r\n footer?: React.ReactNode | React.ReactNodeArray;\r\n /**ボタン表示 */\r\n okText?: string;\r\n /**表示/非表示コントロール用 */\r\n open: boolean;\r\n /**画面外にマウスをクリックで画面を閉じる */\r\n maxWidth?: DialogProps['maxWidth'];\r\n onClose: () => void;\r\n};\r\n\r\nexport const SimpleDialog: React.FC = (props) => {\r\n const classes = useStyles();\r\n const { autoClose = false, title, open, children, okText, maxWidth = 'md', onClose } = props;\r\n return (\r\n {\r\n if (autoClose) {\r\n onClose();\r\n }\r\n }}\r\n open={open}\r\n fullWidth={true}\r\n maxWidth={maxWidth}\r\n >\r\n {title}\r\n {children}\r\n {okText && (\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\nexport default SimpleDialog;\r\n","import React, { useEffect, useState, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Table from '@material-ui/core/Table';\r\nimport TableBody from '@material-ui/core/TableBody';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport TableContainer from '@material-ui/core/TableContainer';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport TableRow from '@material-ui/core/TableRow';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\n\r\nimport DateTImeDiv from '../../atoms/Div/DateTImeDiv';\r\nimport AlarmKindDiv from '../Div/AlarmKindDiv';\r\nimport AlarmStateDiv from '../Div/AlarmStateDiv';\r\nimport { AppContext } from '../../../App';\r\nimport SimpleDialog from '../../atoms/Dialog/SimpleDialog';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n width: '90%',\r\n maxHeight: 'calc(100vh - 240px)',\r\n },\r\n //テーブル外枠\r\n tableStyle: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n },\r\n //テーブルヘッダセル\r\n tableHeaderCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n },\r\n //テーブルボディーセル\r\n tableCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n // minWidth: '100px',\r\n padding: '1px',\r\n },\r\n tableRow: {\r\n height: '10',\r\n },\r\n })\r\n);\r\n\r\nexport type ALM_KIND_SET = {\r\n TYP_NO: Number;\r\n TYP_NAME: string;\r\n};\r\n\r\nexport type ALM_SMM_DAT = {\r\n COL_DATE: Date;\r\n PLC_NO: Number;\r\n AI_CARD: Number;\r\n AI_CH: Number;\r\n JUDGE_NO: Number;\r\n ALM_KIND: Number;\r\n ALM_TYP_NO: Number;\r\n MESSAGE: string;\r\n STAT: Number;\r\n DATA: Number;\r\n LIMIT: Number;\r\n CHECKED: Number;\r\n DEV_NO: string;\r\n DEV_NAME: string;\r\n ITM_NAME: string;\r\n JUDGE_MODE: Number;\r\n SET_NO: Number;\r\n ALM_CODE: string;\r\n};\r\n\r\ntype AlarmDatas = Array<{\r\n ALM_SMM_DAT: ALM_SMM_DAT;\r\n ALM_KIND_SET: ALM_KIND_SET;\r\n}>;\r\n\r\nconst RELOAD_SPAN: number = 10000;\r\n\r\nconst AlarmGrid: React.FC = () => {\r\n const classes = useStyles();\r\n const { login } = useContext(AppContext);\r\n const [alarmArray, setAlarmArray] = useState([]);\r\n const [messageDialogOpen, setMessageDialogOpen] = React.useState(false);\r\n const [showMessage, setShowMessage] = React.useState('');\r\n\r\n const { t } = useTranslation();\r\n\r\n const getData = () => {\r\n fetch('api/AlarmData')\r\n .then((res) => {\r\n if (!res.ok) {\r\n setShowMessage(\r\n t(\r\n 'AlarmGrid.ログイン期限が切れました_もう一度ログインしてください',\r\n 'ログイン期限が切れました_もう一度ログインしてください'\r\n )\r\n );\r\n setMessageDialogOpen(true);\r\n throw new Error('');\r\n }\r\n return res.json();\r\n })\r\n .then((result: AlarmDatas) => {\r\n setAlarmArray(result);\r\n })\r\n .catch((error) => {\r\n console.log(error);\r\n });\r\n };\r\n\r\n const getColor = (sate: Number): string => {\r\n switch (sate) {\r\n case 1:\r\n return 'red';\r\n case 2:\r\n return '#ee7800';\r\n case 3:\r\n return 'red';\r\n case 4:\r\n return 'red';\r\n default:\r\n return 'black';\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n getData();\r\n const interval = setInterval(() => {\r\n getData();\r\n }, RELOAD_SPAN);\r\n return () => {\r\n clearInterval(interval);\r\n };\r\n }, []);\r\n\r\n /**\r\n * 状態が復帰の場合メッセージを空白にする\r\n * @param data\r\n * @returns\r\n */\r\n const getAlarmMessage = (data: ALM_SMM_DAT): string => {\r\n if (data.STAT === 2) {\r\n return '';\r\n }\r\n return data.MESSAGE;\r\n };\r\n\r\n const getAlarmInfo = (): any[] => {\r\n const items: any[] = [];\r\n for (let i = 0; i < 3; i++) {\r\n if (alarmArray.length >= i + 1) {\r\n var row = alarmArray[i];\r\n items.push(\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {row.ALM_SMM_DAT.DEV_NAME}\r\n \r\n \r\n {row.ALM_SMM_DAT.ITM_NAME}\r\n \r\n \r\n {row.ALM_KIND_SET?.TYP_NAME ?? ''}\r\n \r\n \r\n {getAlarmMessage(row.ALM_SMM_DAT)}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n } else {\r\n items.push(\r\n \r\n \r\n  \r\n \r\n \r\n  \r\n \r\n \r\n  \r\n \r\n \r\n  \r\n \r\n \r\n  \r\n \r\n \r\n  \r\n \r\n \r\n  \r\n \r\n \r\n );\r\n }\r\n }\r\n return items;\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n {getAlarmInfo()}\r\n
\r\n
\r\n {\r\n login.logout();\r\n setMessageDialogOpen(false);\r\n }}\r\n title={t('AlarmGrid.エラー画面', 'エラー画面')}\r\n okText={t('AlarmGrid.OK', 'OK')}\r\n maxWidth={'sm'}\r\n >\r\n {showMessage}\r\n \r\n \r\n );\r\n};\r\nexport default AlarmGrid;\r\n","import React from 'react';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport AlarmGrid from '../molecules/Grid/AlarmGrid';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles({\r\n paper: {\r\n height: '76px',\r\n width: 'calc(100vw - 16px)',\r\n color: '#FFFFFF',\r\n textAlign: 'center',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n position: 'fixed',\r\n bottom: '0px',\r\n marginBottom: '4px',\r\n },\r\n});\r\n\r\nconst AppHeader: React.FC = () => {\r\n const classes = useStyles();\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default AppHeader;\r\n","import React, { useState, useContext, useEffect } from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { AppBar, Tabs, Toolbar, Tab } from '@material-ui/core';\r\nimport { Link, useHistory } from 'react-router-dom';\r\nimport FavoriteIcon from '@material-ui/icons/Favorite';\r\nimport ShowChart from '@material-ui/icons/ShowChart';\r\nimport HomeIcon from '@material-ui/icons/Home';\r\nimport EqualizerIcon from '@material-ui/icons/Equalizer';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { AppContext } from '../../App';\r\nimport { LoginState } from './../../LoginState';\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n height: '100%',\r\n // minWidth: '1440px',\r\n background: '#e6e6fa',\r\n color: '#000080',\r\n fontWeight: 'bold',\r\n marginTop: 5,\r\n },\r\n});\r\n\r\nconst themeStyles = makeStyles({\r\n typography: {\r\n fontSize: 12,\r\n padding: '0px',\r\n margin: '0px',\r\n },\r\n});\r\n\r\ntype ChangePage = {\r\n path: string;\r\n no: number;\r\n};\r\n\r\ntype MenuProps = {\r\n lang: string;\r\n};\r\n\r\ntype MenuInfo = {\r\n label: string;\r\n icon: string;\r\n url: string;\r\n groupUrls?: string[];\r\n};\r\n\r\nconst MenuTab = () => {\r\n console.debug('MenuTab Update');\r\n const classes = useStyles();\r\n const classes2 = themeStyles();\r\n const [value, setValue] = React.useState(0);\r\n\r\n const { t, i18n } = useTranslation();\r\n const { login } = useContext(AppContext);\r\n const [menuList, setMenuList] = useState([]);\r\n\r\n const handleChange = (event: React.ChangeEvent<{}>, newValue: number) => {\r\n setValue(newValue);\r\n };\r\n\r\n //レポート有効フラグ\r\n const reportButtonEnabled: boolean = login.GetSystemSettingModel.ReportButtonEnabled === 1 ? true : false;\r\n //オフライン判定有効フラグ\r\n const offLineJudgeButtonEnabled: boolean = login.GetSystemSettingModel.OffLineJudgeButtonEnabled === 1 ? true : false;\r\n //コナンエア画面有効フラグ\r\n const conanairEnabled: boolean = login.GetSystemSettingModel.ConanairEnabled === 1 ? true : false;\r\n //Emcb画面有効フラグ\r\n const emcbEnabled: boolean = login.GetSystemSettingModel.EmcbEnabled === 1 ? true : false;\r\n //部分放電画面有効フラグ\r\n const partialDischargeEnabled: boolean = login.GetSystemSettingModel.PartialDischargeEnabled === 1 ? true : false;\r\n\r\n const history = useHistory();\r\n\r\n useEffect(() => {\r\n //console.debug('MenuTab useEffect');\r\n const menuSrc: MenuInfo[] = [];\r\n\r\n if (!login.IsIoT) {\r\n menuSrc.push({\r\n label: t('MenuTab.ホーム', 'ホーム'),\r\n icon: 'Home.svg',\r\n url: '/Home',\r\n });\r\n } else {\r\n menuSrc.push({\r\n label: t('MenuTab.IoT機器一覧', 'ホーム'),\r\n icon: 'IoTDevList.svg',\r\n url: '/Home',\r\n });\r\n }\r\n menuSrc.push({\r\n label: t('MenuTab.傾向管理', '傾向管理'),\r\n icon: 'TrendGroup.svg',\r\n url: '/TrendGraphGroupSelectPage',\r\n groupUrls: ['/TrendGraphPage'],\r\n });\r\n if (!login.IsIoT) {\r\n menuSrc.push({\r\n label: t('MenuTab.リアルタイムトレンド', 'リアルタイムトレンド'),\r\n icon: 'RealTimeTrend.svg',\r\n url: '/RealTimeTrendGraphGroupSelectPage',\r\n groupUrls: ['/RealTimeTrendGraphPage'],\r\n });\r\n }\r\n menuSrc.push({\r\n label: t('MenuTab.電流診断', '電流診断'),\r\n icon: 'RawWaveforms.svg',\r\n url: '/PhaseCurrentGroupSelectPage',\r\n groupUrls: ['/PhaseCurrentPage'],\r\n });\r\n menuSrc.push({\r\n label: t('MenuTab.生波形比較', '生波形比較'),\r\n icon: 'Comparison.svg',\r\n url: '/RawWaveformComparisonGroupSelectPage',\r\n groupUrls: ['/RawWaveformComparisonPage'],\r\n });\r\n if (conanairEnabled) {\r\n menuSrc.push({\r\n label: t('MenuTab.生波形比較_コナン', '生波形比較(コナン)'),\r\n icon: 'Comparison.svg',\r\n url: '/RawWaveformComparisonConanairGroupSelectPage',\r\n groupUrls: ['/RawWaveformComparisonConanairPage'],\r\n });\r\n }\r\n menuSrc.push({\r\n label: t('MenuTab.FFT比較', 'FFT比較'),\r\n icon: 'Comparison.svg',\r\n url: '/FFTComparisonGroupSelectPage',\r\n groupUrls: ['/FFTComparisonPage'],\r\n });\r\n if (conanairEnabled) {\r\n menuSrc.push({\r\n label: t('MenuTab.FFT比較_コナン', 'FFT比較(コナン)'),\r\n icon: 'Comparison.svg',\r\n url: '/FFTComparisonConanairGroupSelectPage',\r\n groupUrls: ['/FFTComparisonConanairPage'],\r\n });\r\n }\r\n menuSrc.push({\r\n label: t('MenuTab.X-Y分布', 'X-Y分布'),\r\n icon: 'XYDiagram.svg',\r\n url: '/XYDiagramGroupSelectPage',\r\n groupUrls: ['/XYDiagramPage'],\r\n });\r\n if (emcbEnabled) {\r\n menuSrc.push({\r\n label: t('MenuTab.MCCトレースバック', 'MCCトレースバック'),\r\n icon: 'Comparison.svg',\r\n url: '/EMCTrendPage',\r\n groupUrls: ['/EMCTrendPage'],\r\n });\r\n }\r\n\r\n menuSrc.push({\r\n label: t('MenuTab.アラームサマリー', 'アラームサマリー'),\r\n icon: 'AlarmSummary.svg',\r\n url: '/AlarmSummaryPage',\r\n });\r\n menuSrc.push({\r\n label: t('MenuTab.アラーム履歴', 'アラーム履歴'),\r\n icon: 'AlarmHistory.svg',\r\n url: '/AlarmHistoryPage',\r\n });\r\n menuSrc.push({\r\n label: t('MenuTab.計測一覧', '計測一覧'),\r\n icon: 'ColView.svg',\r\n url: '/MeasureLogPage',\r\n });\r\n menuSrc.push({\r\n label: t('MenuTab.データ一覧', 'データ一覧'),\r\n icon: 'ColView.svg',\r\n url: '/FeatureParameterPage',\r\n });\r\n\r\n if (reportButtonEnabled) {\r\n menuSrc.push({\r\n label: t('MenuTab.レポート作成', 'レポート作成'),\r\n icon: 'Report.svg',\r\n url: '/ReportPage',\r\n });\r\n }\r\n if (offLineJudgeButtonEnabled) {\r\n menuSrc.push({\r\n label: t('MenuTab.オフライン判定', 'オフライン判定'),\r\n icon: 'ColView.svg',\r\n url: '/OffLineJudgePage',\r\n });\r\n }\r\n if (partialDischargeEnabled) {\r\n menuSrc.push({\r\n label: t('MenuTab.部分放電', '部分放電'),\r\n icon: 'Comparison.svg',\r\n url: '/PartialDischargePage',\r\n });\r\n }\r\n if (login.SET_AUTH) {\r\n menuSrc.push({\r\n label: t('MenuTab.設定', '設定'),\r\n icon: 'SystemSetting.svg',\r\n url: '/MeasureSettingsPage',\r\n });\r\n }\r\n menuSrc.push({\r\n label: t('MenuTab.グループ設定', 'グループ設定'),\r\n icon: 'ColView.svg',\r\n url: '/GroupSettingsPage',\r\n });\r\n if (login.SYSTEM_AUTH) {\r\n menuSrc.push({\r\n label: t('MenuTab.環境設定', '環境設定'),\r\n icon: 'CustomConfig.svg',\r\n url: '/CustomConfigPage',\r\n });\r\n }\r\n\r\n setMenuList(menuSrc);\r\n\r\n history.listen((location) => {\r\n console.log(`Change location: ${location.pathname}`);\r\n const toMenu = menuSrc.findIndex((mi) => mi.url === location.pathname);\r\n if (toMenu >= 0) {\r\n setValue(toMenu);\r\n } else {\r\n const toMenuSub = menuSrc.findIndex((mi) => {\r\n if (mi.groupUrls) {\r\n return mi.groupUrls.findIndex((gu) => gu === location.pathname) >= 0;\r\n } else {\r\n return false;\r\n }\r\n });\r\n if (toMenuSub >= 0) {\r\n setValue(toMenuSub);\r\n }\r\n }\r\n });\r\n }, [i18n.language]);\r\n\r\n return (\r\n \r\n \r\n {menuList.map((mi, index) => {\r\n return (\r\n }\r\n component={Link}\r\n to={mi.url}\r\n />\r\n );\r\n })}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default MenuTab;\r\n","import { createStyles, makeStyles, Theme, createTheme } from '@material-ui/core/styles';\r\n\r\nconst defaultTheme = createTheme({});\r\nconst { pxToRem } = defaultTheme.typography;\r\n\r\n\r\nexport const TableBaseStyle = makeStyles(\r\n createStyles({\r\n //テーブルヘッダセル\r\n headerCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n padding: '1px',\r\n },\r\n bodyCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '0.5px',\r\n height: '10px',\r\n },\r\n bodyCellCenter: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n padding: '0px',\r\n height: '10px',\r\n },\r\n //行選択カラー表示\r\n bodyRow: {\r\n '&.Mui-selected, &.Mui-selected:hover': {\r\n //背景色\r\n backgroundColor: '#7fffd4',\r\n '& > .MuiTableCell-root': {\r\n //文字色\r\n color: 'brack',\r\n },\r\n }, //共通化できていない例外箇所はアラームサマリー、データ収集設定、傾向管理グループ、リアルタイムトレンドグループ\r\n },\r\n //テキスト\r\n textField: {\r\n flexGrow: 1,\r\n height: '100%',\r\n width: '100%',\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n textAlign: \"center\",\r\n },\r\n })\r\n);\r\n\r\nexport const ChartBaseStyle = makeStyles(\r\n createStyles({\r\n tooltip: {\r\n background: '#FFFFEE',\r\n fontSize: '14px',\r\n padding: '10px 10px 0px 20px',\r\n },\r\n })\r\n);\r\n\r\nexport const EMCTrendStyle = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 276px)',\r\n },\r\n chartContainer: {\r\n minHeight: 'calc(100vh - 276px)',\r\n maxHeight: 'calc(100vh - 276px)',\r\n },\r\n //画面ヘッダ部ペーパ^\r\n paperRoot: {\r\n maxWidth: '1100px',\r\n minWidth: '1100px',\r\n padding: '3px',\r\n },\r\n buttonRoot: {\r\n minWidth: '130px',\r\n },\r\n //画面ヘッダ部ラジオボタン\r\n muiTypography: {\r\n fontSize: pxToRem(14),\r\n lineHeight: 1.66,\r\n },\r\n //画面で使用しているチェックボックス\r\n checkBox: {\r\n padding: '0px',\r\n },\r\n spacingXs1: {\r\n minWidth: '1440px',\r\n },\r\n })\r\n);\r\n\r\nexport const FooterBaseStyle = makeStyles(\r\n createStyles({\r\n buttonStyle: {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n },\r\n })\r\n);\r\n","import React from 'react';\r\n\r\nimport { makeStyles, createStyles, Theme, withStyles } from '@material-ui/core/styles';\r\nimport { DialogProps } from '@material-ui/core/Dialog/Dialog';\r\nimport Button from '@material-ui/core/Button';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport MuiDialogTitle from '@material-ui/core/DialogTitle';\r\nimport MuiDialogContent from '@material-ui/core/DialogContent';\r\nimport MuiDialogActions from '@material-ui/core/DialogActions';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport CheckIcon from '@material-ui/icons//Check';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport Grid from '@material-ui/core/Grid';\r\n\r\n/**\r\n * 使用例\r\n */\r\n// const [open, setOpen] = React.useState(false);\r\n\r\n// const handleClickOpen = () => {\r\n// setOpen(true);\r\n// };\r\n// const handleClose = () => {\r\n// setOpen(false);\r\n// };\r\n\r\n// \r\n// Hello body\r\n// ;\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n margin: 0,\r\n padding: theme.spacing(2),\r\n },\r\n closeButton: {\r\n position: 'absolute',\r\n right: theme.spacing(1),\r\n top: theme.spacing(1),\r\n color: theme.palette.grey[500],\r\n },\r\n hiddenScroll: {\r\n overflow: 'hidden',\r\n },\r\n dialogPaper: {\r\n // minHeight: '50vh',\r\n // maxHeight: '50vh',\r\n //height: '400px',\r\n },\r\n })\r\n);\r\n\r\ntype DialogTitleProps = {\r\n children: React.ReactNode;\r\n onClose: () => void;\r\n};\r\n\r\nconst DialogTitle: React.FC = (props) => {\r\n const { children, onClose, ...other } = props;\r\n const classes = useStyles(props);\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nconst DialogContent = withStyles((theme: Theme) => ({\r\n root: {\r\n padding: theme.spacing(2),\r\n },\r\n}))(MuiDialogContent);\r\n\r\nconst DialogActions = withStyles((theme: Theme) => ({\r\n root: {\r\n margin: 0,\r\n padding: theme.spacing(1),\r\n },\r\n}))(MuiDialogActions);\r\n\r\nexport type OKCancelDialogProps = {\r\n /**画面外にマウスをクリックで画面を閉じる */\r\n autoClose?: boolean;\r\n /**ダイアログタイトル */\r\n title?: React.ReactNode | React.ReactNodeArray;\r\n /**ダイアログコンテント */\r\n children?: React.ReactNode | React.ReactNodeArray;\r\n /**ダイアログフッター 未使用 */\r\n footer?: React.ReactNode | React.ReactNodeArray;\r\n /**ボタン表示 */\r\n okText?: string;\r\n /**ボタン表示 */\r\n cancelText?: string;\r\n /**表示/非表示コントロール用 */\r\n open: boolean;\r\n /**画面外にマウスをクリックで画面を閉じる */\r\n maxWidth?: DialogProps['maxWidth'];\r\n onOK: () => void;\r\n onCancel: () => void;\r\n};\r\n\r\nexport const OKCancelDialog: React.FC = (props) => {\r\n const classes = useStyles();\r\n const { autoClose = false, title, open, children, okText, cancelText, maxWidth = 'md', onOK, onCancel } = props;\r\n return (\r\n {\r\n if (autoClose) {\r\n onCancel();\r\n }\r\n }}\r\n open={open}\r\n fullWidth={true}\r\n maxWidth={maxWidth}\r\n >\r\n {title}\r\n \r\n {children}\r\n \r\n \r\n {okText && (\r\n \r\n )}\r\n {cancelText && (\r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\nexport default OKCancelDialog;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { Button, Dialog, DialogTitle, DialogContent, DialogActions, Typography } from '@material-ui/core';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\n\r\nimport { LearnStatType } from '../../../Constant';\r\nimport { DialogAction } from '../../../function/useModal';\r\n\r\ntype LearnResultDialogProps = {\r\n dialog: DialogAction;\r\n devIndex: number;\r\n};\r\n\r\nexport type LearnResultDialogResponse = {};\r\n\r\ntype DEV_STATUS = {\r\n DEV_INDEX: number;\r\n COL_TIME?: Date;\r\n COL_MODE?: number;\r\n STATUS?: number;\r\n LEARN_STAT?: number;\r\n SCHEDULE_TIME?: Date;\r\n RETRY_CNT?: number;\r\n LEARN_1_V?: number;\r\n LEARN_1_C?: number;\r\n LEARN_2_V?: number;\r\n LEARN_2_C?: number;\r\n LEARN_3_V?: number;\r\n LEARN_3_C?: number;\r\n CV_V?: number;\r\n CV_C?: number;\r\n};\r\n\r\ntype DevStatusModel = {\r\n DevStatus: DEV_STATUS;\r\n /**ばらつき有無指標に使用する値 */\r\n CoefficientThreshold: number;\r\n /**振動表示単位 */\r\n VibrationUnit: string;\r\n /**電流表示単位 */\r\n CurrentUnit: string;\r\n};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 300px)',\r\n //fontSize: '0.8em',\r\n },\r\n tableHeader: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n padding: '1px',\r\n minWidth: '80px',\r\n borderCollapse: `collapse`,\r\n },\r\n tableCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n borderCollapse: 'collapse',\r\n textAlign: 'left',\r\n },\r\n colKind: {\r\n width: '100px',\r\n },\r\n colItem: {\r\n width: '100px',\r\n },\r\n col1st: {\r\n width: '100px',\r\n },\r\n col2nd: {\r\n width: '100px',\r\n },\r\n col3rd: {\r\n width: '100px',\r\n },\r\n colVarparam: {\r\n width: '100px',\r\n },\r\n button: {\r\n width: '150px',\r\n },\r\n })\r\n);\r\n\r\nconst LearnResultDialog: React.FC = (props: LearnResultDialogProps) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [isOpen, setIsOpen] = useState(true);\r\n const [mode, setMode] = useState(true);\r\n const [devStatus, setDevStatus] = useState();\r\n const [coefficientThreshold, setCoefficientThreshold] = useState();\r\n const [resultMessage, setResultMessage] = useState('');\r\n\r\n /**振動表示単位 */\r\n const [vibrationUnit, setVibrationUnit] = useState('');\r\n /**電流表示単位 */\r\n const [currentUnit, setCurrentUnit] = useState('');\r\n\r\n useEffect(() => {\r\n const url = `api/DevStatus/${props.devIndex}`;\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: DevStatusModel) => {\r\n console.debug(['result', result]);\r\n\r\n if (result.DevStatus != null) {\r\n setDevStatus(result.DevStatus);\r\n }\r\n if (result.CoefficientThreshold != null) {\r\n setCoefficientThreshold(result.CoefficientThreshold);\r\n }\r\n if (result.VibrationUnit != null) {\r\n setVibrationUnit(result.VibrationUnit);\r\n }\r\n if (result.CurrentUnit != null) {\r\n setCurrentUnit(result.CurrentUnit);\r\n }\r\n if (\r\n (result.DevStatus.CV_V &&\r\n result.DevStatus.LEARN_STAT &&\r\n result.DevStatus.LEARN_STAT === LearnStatType.AFTER_LEARNING_VARIATION) ||\r\n (result.DevStatus.CV_C &&\r\n result.DevStatus.LEARN_STAT &&\r\n result.DevStatus.LEARN_STAT === LearnStatType.AFTER_LEARNING_VARIATION)\r\n ) {\r\n setResultMessage(\r\n t(\r\n 'LearnResultDialog.収集データのばらつきが大きいため,学習データを再収集してください。',\r\n '収集データのばらつきが大きいため,学習データを再収集してください。'\r\n )\r\n );\r\n }\r\n })\r\n .catch((reason) => console.log(reason));\r\n }, []);\r\n\r\n return (\r\n <>\r\n {\r\n if (mode) {\r\n props.dialog.apply({});\r\n } else {\r\n props.dialog.cancel();\r\n }\r\n }}\r\n >\r\n {t('LearnResultDialog.学習結果表示', '学習結果表示')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {t('LearnResultDialog.計測種別', '計測種別')}\r\n \r\n \r\n {t('LearnResultDialog.項目種別', '項目種別')}\r\n \r\n \r\n {t('LearnResultDialog.単位', '単位')}\r\n \r\n \r\n {t('LearnResultDialog.1回目', '1回目')}\r\n \r\n \r\n {t('LearnResultDialog.2回目', '2回目')}\r\n \r\n \r\n {t('LearnResultDialog.3回目', '3回目')}\r\n \r\n \r\n {t('LearnResultDialog.変動係数', '変動係数')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {t('LearnResultDialog.振動', '振動')}\r\n \r\n \r\n {t('LearnResultDialog.負荷側', '負荷側')}\r\n \r\n {vibrationUnit}\r\n \r\n {(devStatus && devStatus.LEARN_1_V) ?? ''}\r\n \r\n \r\n {(devStatus && devStatus.LEARN_2_V) ?? ''}\r\n \r\n \r\n {(devStatus && devStatus.LEARN_3_V) ?? ''}\r\n \r\n \r\n {(devStatus && devStatus.CV_V?.toExponential(4)) ?? ''}\r\n \r\n \r\n \r\n \r\n {t('LearnResultDialog.電流', '電流')}\r\n \r\n \r\n {t('LearnResultDialog.R相', 'R相')}\r\n \r\n {currentUnit}\r\n \r\n {(devStatus && devStatus.LEARN_1_C) ?? ''}\r\n \r\n \r\n {' '}\r\n {(devStatus && devStatus.LEARN_2_C) ?? ''}\r\n \r\n \r\n {' '}\r\n {(devStatus && devStatus.LEARN_3_C) ?? ''}\r\n \r\n \r\n {(devStatus && devStatus.CV_C?.toExponential(4)) ?? ''}\r\n \r\n \r\n \r\n
\r\n
\r\n
{resultMessage}
\r\n
\r\n \r\n {\r\n setIsOpen(false);\r\n setMode(true);\r\n }}\r\n >\r\n {t('LearnResultDialog.閉じる', '閉じる')}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default LearnResultDialog;\r\n","import { MST_CLC_TYP, GetMstClcTyp } from './MstClcTypModels';\r\nimport { JudgeSettingSelectType } from \"./JudgeSettingSelectModel\";\r\nimport { SET_PART_DIS } from '../components/Pages/MeasureSetting/PartialDischargeCollection/PartialDischargeCollection';\r\n//傾向管理グループテーブルタイプ\r\nexport type TM_TRD_GROUP_SET = {\r\n GROUP_NO: number;\r\n GROUP_NAME: string;\r\n DSP_FLG: number;\r\n DSP_COLOR: number;\r\n AUT_UPDATE: number;\r\n DSP_SPAN: number;\r\n};\r\nexport type V_TREND_SETTING_ITEM = {\r\n GROUP_NO: number;\r\n PEN_NO: number;\r\n DSP_FLG: number;\r\n DSP_COLOR: number;\r\n GRP_LOW: number;\r\n GRP_HIGH: number;\r\n SCALE_ON: number;\r\n PLC_NO: number;\r\n AI_CARD: number;\r\n AI_CH: number;\r\n TYP_NO: number;\r\n MCLC_TYP_ID: number;\r\n SET_NO: number;\r\n DEV_INDEX: number,\r\n DEV_NO: string;\r\n DEV_NAME: string;\r\n ITM_NAME_NO: number,\r\n ITM_NAME: string;\r\n EMC_ITM_NAME_NO: number;\r\n EMC_ITM_NAME: string;\r\n EMC_UNIT: string;\r\n CLC: number;\r\n KIND: number;\r\n KIND_NO: number;\r\n UNIT: string;\r\n RH: number;\r\n RL: number;\r\n MUL: number;\r\n SPEED: number;\r\n MES_NAME: string;\r\n LOG_INT: number;\r\n}\r\n\r\n//リアルタイムトレンドグループタイプ\r\nexport type RT_TRD_GROUP_SET = {\r\n GROUP_NO: number;\r\n GROUP_NAME: string;\r\n DSP_FLG: number;\r\n DSP_COLOR: number;\r\n AUT_UPDATE: number;\r\n DSP_SPAN: number;\r\n}\r\nexport type V_RT_TREND_SETTING_ITEM = {\r\n GROUP_NO: number;\r\n PEN_NO: number;\r\n DSP_FLG: number;\r\n DSP_COLOR: number;\r\n GRP_LOW: number;\r\n GRP_HIGH: number;\r\n SCALE_ON: number;\r\n PLC_NO: number;\r\n AI_CARD: number;\r\n AI_CH: number;\r\n TYP_NO: number;\r\n MCLC_TYP_ID: number;\r\n SET_NO: number;\r\n DEV_INDEX: number,\r\n DEV_NO: string;\r\n DEV_NAME: string;\r\n ITM_NAME_NO: number,\r\n ITM_NAME: string;\r\n CLC: number;\r\n RT_LMT_H: number;\r\n RT_LMT_HH: number;\r\n KIND: number;\r\n KIND_NO: number;\r\n UNIT: string;\r\n RH: number;\r\n RL: number;\r\n COL_RT_LMT_H: number;\r\n COL_RT_LMT_HH: number;\r\n MUL: number;\r\n SPEED: number;\r\n MES_NAME: string;\r\n LOG_INT: number;\r\n}\r\n\r\n//電流診断グループタイプ\r\nexport type PH_CUR_GROUP_SET = {\r\n GROUP_NO: number;\r\n GROUP_NAME: string;\r\n DSP_FLG: number;\r\n DEV_INDEX: number;\r\n PLC_NO: number;\r\n SET_NO_R: number;\r\n SET_NO_S: number;\r\n SET_NO_T: number;\r\n}\r\n\r\n//生波形比較グループタイプ\r\nexport type SIG_CMP_GROUP_SET = {\r\n GROUP_NO: number;\r\n GROUP_NAME: string;\r\n DSP_FLG: number;\r\n PLC_NO1: number;\r\n SET_NO1: number;\r\n PLC_NO2: number;\r\n SET_NO2: number;\r\n\r\n //時間項目追加\r\n Time_No1: string;\r\n Time_No2: string;\r\n\r\n}\r\n\r\n//生波形比較(コナン)グループタイプ\r\nexport type SIGC_CMP_GROUP_SET = {\r\n GROUP_NO: number;\r\n GROUP_NAME: string;\r\n DSP_FLG: number;\r\n PLC_NO1: number;\r\n SET_NO1: number;\r\n PLC_NO2: number;\r\n SET_NO2: number;\r\n\r\n //時間項目追加\r\n Time_No1: string;\r\n Time_No2: string;\r\n\r\n}\r\n\r\n//FFT 比較グループタイプ\r\nexport type FFT_CMP_GROUP_SET = {\r\n GROUP_NO: number;\r\n GROUP_NAME: string;\r\n DSP_FLG: number;\r\n PLC_NO1: number;\r\n SET_NO1: number;\r\n PLC_NO2: number;\r\n SET_NO2: number;\r\n PLC_NO3: number;\r\n SET_NO3: number;\r\n KIND1: number;\r\n KIND2: number;\r\n KIND3: number;\r\n\r\n //時間項目追加\r\n Time_No1: string;\r\n Time_No2: string;\r\n Time_No3: string;\r\n\r\n}\r\n\r\n//FFT 比較(コナン)グループタイプ\r\nexport type FFTC_CMP_GROUP_SET = {\r\n GROUP_NO: number;\r\n GROUP_NAME: string;\r\n DSP_FLG: number;\r\n PLC_NO1: number;\r\n SET_NO1: number;\r\n PLC_NO2: number;\r\n SET_NO2: number;\r\n PLC_NO3: number;\r\n SET_NO3: number;\r\n KIND1: number;\r\n KIND2: number;\r\n KIND3: number;\r\n\r\n //時間項目追加\r\n Time_No1: string;\r\n Time_No2: string;\r\n Time_No3: string;\r\n\r\n}\r\n\r\n//XY分布グループタイプ\r\nexport type XY_CMP_GROUP_SET = {\r\n GROUP_NO: number;\r\n GROUP_NAME: string;\r\n DSP_FLG: number;\r\n DEV_INDEX: number;\r\n PLC_NO_X: number;\r\n SET_NO_X: number;\r\n PLC_NO_Y: number;\r\n SET_NO_Y: number;\r\n YEAR_FLG: number;\r\n MONTH_FLG: number;\r\n START_DATE: string;\r\n END_DATE: string;\r\n START_MONTH1: number;\r\n END_MONTH1: number;\r\n DSP_COLOR1: number;\r\n START_MONTH2: number;\r\n END_MONTH2: number;\r\n DSP_COLOR2: number;\r\n START_MONTH3: number;\r\n END_MONTH3: number;\r\n DSP_COLOR3: number;\r\n START_MONTH4: number;\r\n END_MONTH4: number;\r\n DSP_COLOR4: number;\r\n}\r\n\r\n//リアルタイムトレンド\r\nexport type RT_TRD_ITEM_SET = {\r\n GROUP_NO: number;\r\n PEN_NO: number;\r\n DSP_FLG: number;\r\n DSP_COLOR: number;\r\n PLC_NO: number;\r\n AI_CARD: number;\r\n AI_CH: number;\r\n GRP_LOW: number;\r\n GRP_HIGH: number;\r\n SCALE_ON: number;\r\n TYP_NO: number;\r\n CLC: number;\r\n RT_LMT_H: number;\r\n RT_LMT_HH: number;\r\n SET_NO: number;\r\n}\r\n\r\n//傾向管理\r\nexport type TM_TRD_ITEM_SET = {\r\n GROUP_NO: number;\r\n PEN_NO: number;\r\n DSP_FLG: number;\r\n DSP_COLOR: number;\r\n PLC_NO: number;\r\n AI_CARD: number;\r\n AI_CH: number;\r\n GRP_LOW: number;\r\n GRP_HIGH: number;\r\n SCALE_ON: number;\r\n TYP_NO: number;\r\n CLC: number;\r\n SET_NO: number;\r\n}\r\n\r\nexport type KIND_NO_NAME_SET = {\r\n SPEED: number;\r\n NAME_NO: number;\r\n MES_NAME: string;\r\n}\r\n\r\n/**\r\n * 傾向管理画面データ選択リスト\r\n */\r\nexport type TMGroupSelectDataType = {\r\n trdItemSet: TM_TRD_ITEM_SET;\r\n trdGroupSet: TM_TRD_GROUP_SET;\r\n};\r\n\r\n/**\r\n * リアルタイムトレンド画面データ選択リスト\r\n */\r\nexport type RTGroupSelectDataType = {\r\n trdItemSet: RT_TRD_ITEM_SET;\r\n trdGroupSet: RT_TRD_GROUP_SET;\r\n};\r\n\r\n\r\n//全グループリスト情報(画面名付)\r\nexport type GroupListComModel = {\r\n FormID: Number;\r\n FormName: string;\r\n GroupNo: Number;\r\n GroupName: string;\r\n DispFlg: Number;\r\n};\r\n\r\n\r\n// 電流診断 選択肢\r\nexport type PhaseCurrentSelectItem = {\r\n GROUP_NAME: string;\r\n DEV_INDEX: number;\r\n PLC_NO: number;\r\n SET_NO_R: number;\r\n SET_NO_S: number;\r\n SET_NO_T: number;\r\n KIND_R: string;\r\n KIND_S: string;\r\n KIND_T: string;\r\n ITEM_R: string;\r\n ITEM_S: string;\r\n ITEM_T: string;\r\n}\r\n\r\n// 生波形/FFT比較 選択肢\r\nexport type DeviceSelectItem = {\r\n DEV_INDEX: number;\r\n DEV_NO: string;\r\n\r\n MeasureSelects: MeasureSelectItem[];\r\n}\r\nexport type MeasureSelectItem = {\r\n MES_NAME: string;\r\n NAME_NO: number;\r\n FFT_INVALID: number;\r\n ItemSelects: ItemSelectItem[];\r\n}\r\nexport type ItemSelectItem = {\r\n ITM_NAME: string;\r\n PLC_NO: number;\r\n SET_NO: number;\r\n KIND: number;\r\n}\r\n\r\n// XY比較 選択肢\r\nexport type XYDeviceSelectItem = {\r\n DEV_INDEX: number;\r\n DEV_NO: string;\r\n\r\n ItemSelects: XYItemSelectItem[];\r\n}\r\nexport type XYItemSelectItem = {\r\n PLC_NO: number;\r\n SET_NO: number;\r\n ITM_NAME: string;\r\n NAME_NO: number;\r\n MES_NAME: string;\r\n SPEED: number;\r\n\r\n index: number;\r\n}\r\n\r\nexport type TrendSettingParameter = {\r\n MeasKinds: ComboItem[];\r\n KIND_NO_NAME_SETs: KIND_NO_NAME_SET[];\r\n DeviceLists: ComboItem[];\r\n ItemLists: ComboItem[];\r\n DataKinds: ComboItem[];\r\n AlarmKinds: ComboItem[];\r\n MClcTypes: ComboItem[];\r\n AlarmLimits: JudgeInfo[];\r\n DeviceUnitInfos: PlcInfo[];\r\n ColSetInfos: ColSetInfo[];\r\n JudgeSetSelect: JudgeSettingSelectType[];\r\n SetPartDisList: SET_PART_DIS[];\r\n}\r\nexport type ComboItem = {\r\n Key: number;\r\n Disp: string;\r\n Tag?: any; //付加情報\r\n}\r\nexport type JudgeInfo = {\r\n PLC_NO: number;\r\n AI_CARD: number;\r\n AI_CH: number;\r\n CLC_TYP: number;\r\n ALM_TYP_NO: number;\r\n WRN_LIM: number;\r\n ALM_LIM: number;\r\n MCLC_TYP_ID: number;\r\n}\r\nexport type PlcInfo = {\r\n PLC_NO: number;\r\n AiCards: AiCardInfo[]\r\n}\r\nexport type AiCardInfo = {\r\n AI_CARD: number;\r\n AiChs: AiChInfo[];\r\n}\r\nexport type AiChInfo = {\r\n AI_CH: number;\r\n Unit: string;\r\n}\r\nexport type ColSetInfo = {\r\n KIND_NO: number;\r\n DEV_INDEX: number;\r\n ITM_NAME_NO: number;\r\n CLC: number;\r\n PLC_NO: number;\r\n AI_CARD: number;\r\n AI_CH: number;\r\n SET_NO: number;\r\n SPEED: number;\r\n UNIT: string;\r\n VALID: number;\r\n}\r\n\r\n\r\n\r\nexport type V_GROUP_DEVICE = {\r\n\r\n DEV_INDEX: number;/// 機器インデックスを取得または設定します。\r\n DEV_NO: string; /// 機器番号を取得または設定します。\r\n DEV_NAME: string; /// 機器名称を取得または設定します。\r\n PLC_NO: number; /// PLC 番号を取得または設定します。\r\n AI_CARD: number; /// AI カードを取得または設定します。\r\n AI_CH: number; /// CH 番号を取得または設定します。\r\n SET_NO: number; /// 設定 No を取得または設定します。\r\n SPEED: number; /// 低速/高速区分を取得または設定します。\r\n NAME_NO: number; /// 計測種別 No を取得または設定します。\r\n MES_NAME: string; /// 計測種別を取得または設定します。\r\n ITM_NAME_NO: number; /// 項目名称 No を取得または設定します。\r\n ITM_NAME: string; /// 項目名称を取得または設定します。\r\n\r\n}\r\n\r\n\r\n\r\n//Json受取タイプ\r\nexport type GroupListType = {\r\n TM_TRD_GROUP_SETs: TM_TRD_GROUP_SET[];\r\n RT_TRD_GROUP_SETs: RT_TRD_GROUP_SET[];\r\n PH_CUR_GROUP_SETs: PH_CUR_GROUP_SET[];\r\n SIG_CMP_GROUP_SETs: SIG_CMP_GROUP_SET[];\r\n SIGC_CMP_GROUP_SETs: SIGC_CMP_GROUP_SET[];\r\n FFT_CMP_GROUP_SETs: FFT_CMP_GROUP_SET[];\r\n FFTC_CMP_GROUP_SETs: FFTC_CMP_GROUP_SET[];\r\n XY_CMP_GROUP_SETs: XY_CMP_GROUP_SET[];\r\n GroupListsComModels: GroupListComModel[];\r\n\r\n TrendSettings: TrendSettingParameter;\r\n\r\n PhCurSelectItems: PhaseCurrentSelectItem[];\r\n\r\n DeviceSelects: DeviceSelectItem[];\r\n DeviceConanSelects: DeviceSelectItem[];\r\n XYDeviceSelects: XYDeviceSelectItem[];\r\n};\r\n\r\n\r\n//傾向管理のグループ一覧を取得\r\nexport const GetTrendGroupList = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/TrendGroupList\")\r\n .then((res) => res.json())\r\n .then((result: GroupListType) => {\r\n console.debug([`fetch api/TrendGroupList OK `, result]);\r\n if (TrendGroupListValidate(result)) resolve(result);\r\n\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.error(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\n//グループ一覧取得データ検証\r\nconst TrendGroupListValidate = (data: GroupListType): boolean => {\r\n if (data.TM_TRD_GROUP_SETs == undefined) {\r\n console.debug(`TrendGroupListValidate NG `);\r\n return false;\r\n }\r\n console.debug(`TrendGroupListValidate OK `);\r\n return true;\r\n};\r\n\r\n// 傾向管理のグループ一覧を取得\r\nexport const GetTrendGroupTableByItemSet = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/GetTrendGroupTableByItemSet\")\r\n .then((res) => res.json())\r\n .then((result: TMGroupSelectDataType[]) => {\r\n if (TrendGroupTableByItemSetValidate(result)) resolve(result);\r\n\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\n// リアルタイムトレンドの取得データ検証\r\nconst TrendGroupTableByItemSetValidate = (data: TMGroupSelectDataType[]): boolean => {\r\n if (data[0].trdGroupSet === undefined) {\r\n return false;\r\n }\r\n return true;\r\n};\r\n\r\n// 傾向管理設定項目\r\nexport const GetTrendSetting = (no: number): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(`api/TrendGroupSetting/${no}`)\r\n .then((res) => res.json())\r\n .then((result: V_TREND_SETTING_ITEM[]) => {\r\n resolve(result);\r\n })\r\n .catch(reason => reject(reason));\r\n });\r\n}\r\n// 傾向管理設定更新\r\nexport const PutTrendGroupSetting = (group: TM_TRD_GROUP_SET, items: V_TREND_SETTING_ITEM[]): Promise => {\r\n console.debug([\"PutTrendGroupSetting, group,items\", group, items])\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/TrendGroupSetting\", {\r\n method: 'put',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({ Group: group, Items: items }),\r\n })\r\n .then((res) => res.json())\r\n .then((result: { Count: number }) => {\r\n resolve(result.Count);\r\n })\r\n .catch(reason => reject(reason));\r\n });\r\n}\r\n\r\n//リアルタイムトレンドのグループ一覧を取得\r\nexport const GetRealTimeTrendGroupList = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/RealTimeTrendGroupList\")\r\n .then((res) => res.json())\r\n .then((result: GroupListType) => {\r\n console.debug(`fetch api/RealTimeTrendGroupList OK `);\r\n console.debug(result);\r\n if (RealTimeTrendGroupListValidate(result)) resolve(result);\r\n\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n//グループ一覧取得データ検証\r\nconst RealTimeTrendGroupListValidate = (data: GroupListType): boolean => {\r\n if (data.RT_TRD_GROUP_SETs == undefined) {\r\n console.debug(`TrendGroupListValidate NG `);\r\n return false;\r\n }\r\n console.debug(`TrendGroupListValidate OK `);\r\n return true;\r\n};\r\n\r\n\r\n// リアルタイムトレンドのグループ一覧を取得\r\nexport const GetRealtimeGroupList = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/RealtimeGroupList\")\r\n .then((res) => res.json())\r\n .then((result: GroupListType) => {\r\n console.debug(`fetch api/RealtimeGroupList OK `);\r\n console.debug(result);\r\n if (RealtimeGroupListValidate(result)) resolve(result);\r\n\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n// リアルタイムトレンドの取得データ検証\r\nconst RealtimeGroupListValidate = (data: GroupListType): boolean => {\r\n if (data.RT_TRD_GROUP_SETs == undefined) {\r\n console.debug(`RealtimeGroupListValidate NG `);\r\n return false;\r\n }\r\n console.debug(`RealtimeGroupListValidate OK `);\r\n return true;\r\n};\r\n\r\n\r\n// リアルタイムトレンドのグループ一覧を取得\r\nexport const GetRealTimeTrendGroupTableByItemSet = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/GetRealTimeTrendGroupTableByItemSet\")\r\n .then((res) => res.json())\r\n .then((result: RTGroupSelectDataType[]) => {\r\n if (RealTimeTrendGroupTableByItemSetValidate(result)) resolve(result);\r\n\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\n// リアルタイムトレンドの取得データ検証\r\nconst RealTimeTrendGroupTableByItemSetValidate = (data: RTGroupSelectDataType[]): boolean => {\r\n if (data[0].trdGroupSet === undefined) {\r\n return false;\r\n }\r\n return true;\r\n};\r\n\r\n// リアルタイムトレンド設定項目\r\nexport const GetRealtimeSetting = (no: number): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(`api/RealtimeGroupSetting/${no}`)\r\n .then((res) => res.json())\r\n .then((result: V_RT_TREND_SETTING_ITEM[]) => {\r\n resolve(result);\r\n })\r\n .catch(reason => reject(reason));\r\n });\r\n}\r\n// リアルタイムトレンド設定更新\r\nexport const PutRealtimeGroupSetting = (group: RT_TRD_GROUP_SET, items: V_RT_TREND_SETTING_ITEM[]): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/RealtimeGroupSetting\", {\r\n method: 'put',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({ Group: group, Items: items }),\r\n })\r\n .then((res) => res.json())\r\n .then((result: { Count: number }) => {\r\n resolve(result.Count);\r\n })\r\n .catch(reason => reject(reason));\r\n });\r\n}\r\n\r\n/**\r\n * 電流診断グループ設定画面用情報取得\r\n * @returns\r\n */\r\nexport const GetPhaseCurrentGroupList = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/PhaseCurrentGroupList\")\r\n .then((res) => res.json())\r\n .then((result: GroupListType) => {\r\n console.debug('fetch api/PhaseCurrentGroupList OK');\r\n console.debug(result);\r\n if (PhaseCurrentGroupListValidate(result)) resolve(result);\r\n\r\n reject('Invalidate response');\r\n })\r\n .catch(reason => reject(reason));\r\n });\r\n}\r\n\r\nconst PhaseCurrentGroupListValidate = (data: GroupListType): boolean => {\r\n if (data.PH_CUR_GROUP_SETs == undefined) {\r\n console.debug('PhaseCurretGroupListValidate NG');\r\n return false;\r\n }\r\n if (data.PhCurSelectItems == undefined) {\r\n console.debug('PhCurSelectItem Validate NG');\r\n return false;\r\n }\r\n console.debug('PhaseCurrentGroupListValidete OK');\r\n return true;\r\n}\r\n\r\nexport const PutPhaseCurrentGroupList = (data: PH_CUR_GROUP_SET[]): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/PhaseCurrentGroupList\", {\r\n method: 'put',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(data),\r\n })\r\n .then((res) => res.json())\r\n .then((result: { Count: number }) => {\r\n resolve(result.Count);\r\n })\r\n .catch(reason => reject(reason));\r\n });\r\n}\r\n\r\n/**\r\n * 生波形比較グループテーブルを Select\r\n * @returns\r\n */\r\nexport const GetRawWaveformsComparisonGroupList = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/RawWaveformsComparisonGroupList\")\r\n .then((res) => res.json())\r\n .then((result: GroupListType) => {\r\n console.debug('fetch api/RawWaveformsComparisonGroupList OK');\r\n console.debug(result);\r\n if (RawWaveformsComparisonGroupListValidate(result)) resolve(result);\r\n\r\n reject('Invalidate response');\r\n })\r\n .catch(reason => reject(reason));\r\n });\r\n}\r\n\r\nconst RawWaveformsComparisonGroupListValidate = (data: GroupListType): boolean => {\r\n if (data.SIG_CMP_GROUP_SETs == undefined) {\r\n console.debug('RawWaveformsComparisonValidate NG');\r\n return false;\r\n }\r\n if (data.DeviceSelects == undefined) {\r\n console.debug('RawWaveformsComparisonSelectItem Validate NG');\r\n return false;\r\n }\r\n console.debug('RawWaveformsComparisonValidate OK');\r\n return true;\r\n}\r\n\r\n/**\r\n * 生波形比較グループテーブルの更新\r\n * @param data\r\n * @returns\r\n */\r\nexport const PutRawWaveformsComparisonGroupList = (data: SIG_CMP_GROUP_SET[]): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/RawWaveformsComparisonGroupList\", {\r\n method: 'put',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(data),\r\n })\r\n .then((res) => res.json())\r\n .then((result: { Count: number }) => {\r\n resolve(result.Count);\r\n })\r\n .catch(reason => reject(reason));\r\n });\r\n}\r\n\r\n/**\r\n * 生波形比較(コナン)グループテーブルを Select\r\n * @returns\r\n */\r\nexport const GetRawWaveformsComparisonConanGroupList = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/RawWaveformsComparisonConanGroupList\")\r\n .then((res) => res.json())\r\n .then((result: GroupListType) => {\r\n console.debug('fetch api/RawWaveformsComparisonConanGroupList OK');\r\n console.debug(result);\r\n if (RawWaveformsComparisonConanGroupListValidate(result)) resolve(result);\r\n\r\n reject('Invalidate response');\r\n })\r\n .catch(reason => reject(reason));\r\n });\r\n}\r\n\r\nconst RawWaveformsComparisonConanGroupListValidate = (data: GroupListType): boolean => {\r\n if (data.SIGC_CMP_GROUP_SETs == undefined) {\r\n console.debug('RawWaveformsComparisonConanValidate NG');\r\n return false;\r\n }\r\n if (data.DeviceSelects == undefined) {\r\n console.debug('RawWaveformsComparisonConanSelectItem Validate NG');\r\n return false;\r\n }\r\n console.debug('RawWaveformsComparisonConanValidate OK');\r\n return true;\r\n}\r\n\r\n/**\r\n * 生波形比較(コナン)グループテーブルの更新\r\n * @param data\r\n * @returns\r\n */\r\nexport const PutRawWaveformsComparisonConanGroupList = (data: SIGC_CMP_GROUP_SET[]): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/RawWaveformsComparisonConanGroupList\", {\r\n method: 'put',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(data),\r\n })\r\n .then((res) => res.json())\r\n .then((result: { Count: number }) => {\r\n resolve(result.Count);\r\n })\r\n .catch(reason => reject(reason));\r\n });\r\n}\r\n\r\n/**\r\n * FFT 比較グループテーブルを Select\r\n * @returns\r\n */\r\nexport const GetFFTComparisonGroupList = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/FFTComparisonGroupList\")\r\n .then((res) => res.json())\r\n .then((result: GroupListType) => {\r\n console.debug('fetch api/FFTComparisonGroupList OK');\r\n console.debug(result);\r\n if (FFTComparisonGroupListValidate(result)) resolve(result);\r\n\r\n reject('Invalidate response');\r\n })\r\n .catch(reason => reject(reason));\r\n });\r\n}\r\n\r\nconst FFTComparisonGroupListValidate = (data: GroupListType): boolean => {\r\n if (data.FFT_CMP_GROUP_SETs == undefined) {\r\n console.debug('FFTComparisonValidate NG');\r\n return false;\r\n }\r\n if (data.DeviceSelects == undefined) {\r\n console.debug('FFTComparisonSelectItem Validate NG');\r\n return false;\r\n }\r\n console.debug('FFTComparisonValidate OK');\r\n return true;\r\n}\r\n\r\n/**\r\n * FFT比較グループテーブルの更新\r\n * @param data\r\n * @returns\r\n */\r\nexport const PutFFTComparisonGroupList = (data: FFT_CMP_GROUP_SET[]): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/FFTComparisonGroupList\", {\r\n method: 'put',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(data),\r\n })\r\n .then((res) => res.json())\r\n .then((result: { Count: number }) => {\r\n resolve(result.Count);\r\n })\r\n .catch(reason => reject(reason));\r\n });\r\n}\r\n\r\n/**\r\n * FFT 比較(コナン)グループテーブルを Select\r\n * @returns\r\n */\r\nexport const GetFFTComparisonConanGroupList = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/FFTComparisonConanGroupList\")\r\n .then((res) => res.json())\r\n .then((result: GroupListType) => {\r\n console.debug('fetch api/FFTComparisonConanGroupList OK');\r\n console.debug(result);\r\n if (FFTComparisonConanGroupListValidate(result)) resolve(result);\r\n\r\n reject('Invalidate response');\r\n })\r\n .catch(reason => reject(reason));\r\n });\r\n}\r\n\r\nconst FFTComparisonConanGroupListValidate = (data: GroupListType): boolean => {\r\n if (data.FFTC_CMP_GROUP_SETs == undefined) {\r\n console.debug('FFTComparisonConanValidate NG');\r\n return false;\r\n }\r\n if (data.DeviceConanSelects == undefined) {\r\n console.debug('FFTComparisonConanSelectItem Validate NG');\r\n return false;\r\n }\r\n console.debug('FFTComparisonConanValidate OK');\r\n return true;\r\n}\r\n\r\n/**\r\n * FFT比較(コナン)グループテーブルの更新\r\n * @param data\r\n * @returns\r\n */\r\nexport const PutFFTComparisonConanGroupList = (data: FFTC_CMP_GROUP_SET[]): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/FFTComparisonConanGroupList\", {\r\n method: 'put',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(data),\r\n })\r\n .then((res) => res.json())\r\n .then((result: { Count: number }) => {\r\n resolve(result.Count);\r\n })\r\n .catch(reason => reject(reason));\r\n });\r\n}\r\n\r\n/**\r\n * XYのグループテーブル設定取得\r\n * @returns \r\n */\r\nexport const GetXYComparisonGroupList = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/XYComparisonGroupList\")\r\n .then((res) => res.json())\r\n .then((result: GroupListType) => {\r\n console.debug(['fetch api/XYComparisonGroupList OK', result]);\r\n if (XYComparisonGroupListValidate(result)) resolve(result);\r\n\r\n reject('Invalidate response');\r\n })\r\n .catch(reason => {\r\n console.error(reason);\r\n reject(reason)\r\n });\r\n });\r\n}\r\n\r\nconst XYComparisonGroupListValidate = (data: GroupListType): boolean => {\r\n if (data.XY_CMP_GROUP_SETs == undefined) {\r\n console.debug('XYComparisonValidate NG');\r\n return false;\r\n }\r\n if (data.XYDeviceSelects == undefined) {\r\n console.debug('XYComparisonSelectItem Validate NG');\r\n return false;\r\n }\r\n console.debug('XYComparisonValidate OK');\r\n return true;\r\n}\r\n\r\n/**\r\n * XYのグループテーブルの更新\r\n * @param data \r\n * @returns \r\n */\r\nexport const PutXYComparisonGroupList = (data: XY_CMP_GROUP_SET[]): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/XYComparisonGroupList\", {\r\n method: 'put',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(data),\r\n })\r\n .then((res) => res.json())\r\n .then((result: { Count: number }) => {\r\n resolve(result.Count);\r\n })\r\n .catch(reason => reject(reason));\r\n });\r\n}\r\n\r\nexport const GetAllGroupList = (deviceIndex: Number): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(`api/GroupList?deviceindex=${deviceIndex}`)\r\n .then((res) => res.json())\r\n .then((result: GroupListType) => {\r\n console.debug(result);\r\n if (AllGroupListValidate(result)) resolve(result);\r\n\r\n reject('Invalidate response');\r\n })\r\n .catch(reason => reject(reason));\r\n });\r\n}\r\n\r\nconst AllGroupListValidate = (data: GroupListType): boolean => {\r\n console.debug(data.GroupListsComModels.length);\r\n if (data.GroupListsComModels == undefined) {\r\n console.debug('AllGroupListValidate NG');\r\n return false;\r\n }\r\n console.debug('AllGroupListValidate OK');\r\n return true;\r\n}\r\n\r\nexport const GetGroupDeviceSelect = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(`api/GroupDeviceSelect`)\r\n .then((res) => res.json())\r\n .then((result: V_GROUP_DEVICE[]) => {\r\n console.debug(result);\r\n if (GroupDeviceSelectValidate(result)) resolve(result);\r\n\r\n reject('Invalidate response');\r\n })\r\n .catch(reason => reject(reason));\r\n });\r\n}\r\n\r\nconst GroupDeviceSelectValidate = (data: V_GROUP_DEVICE[]): boolean => {\r\n if (data == undefined) {\r\n console.debug('AllGroupListValidate NG');\r\n return false;\r\n }\r\n console.debug('AllGroupListValidate OK');\r\n return true;\r\n}\r\n","import React, { useEffect, useState } from 'react';\r\nimport Table from '@material-ui/core/Table';\r\nimport TableHead from '@material-ui/core/TableHead';\r\nimport TableBody from '@material-ui/core/TableBody';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport TableContainer from '@material-ui/core/TableContainer';\r\nimport TableRow from '@material-ui/core/TableRow';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\n\r\nimport { TableBaseStyle } from '../../../baseStyle/tableBaseStyle';\r\n\r\nimport { GroupListType, GetAllGroupList } from '../../../function/GroupDataModel';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n width: '95%',\r\n maxHeight: 'calc(100vh - 240px)',\r\n },\r\n //テーブル外枠\r\n tableStyle: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n },\r\n //テーブルヘッダセル\r\n tableHeaderCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n },\r\n //テーブルボディーセル\r\n tableCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n minWidth: '100px',\r\n },\r\n tableRow: {\r\n '&.Mui-selected, &.Mui-selected:hover': {\r\n //背景色\r\n backgroundColor: 'yellow',\r\n '& > .MuiTableCell-root': {\r\n //文字色\r\n color: 'brack',\r\n },\r\n },\r\n },\r\n })\r\n);\r\n\r\ntype Props = {\r\n deviceIndex: Number;\r\n groupInfo: GroupListType;\r\n onDataSelectAction: (pathname: string, state: any) => void;\r\n};\r\n\r\nconst GropuListComGrid: React.FC = (props) => {\r\n const classes = useStyles();\r\n const baseClasses = TableBaseStyle();\r\n\r\n const [groupListInfo, setGroupListInfo] = useState(props.groupInfo);\r\n const [selectedIndex, setSelectedIndex] = useState(0);\r\n const { t } = useTranslation();\r\n\r\n useEffect(() => {\r\n GetAllGroupList(props.deviceIndex).then((ret) => {\r\n setGroupListInfo(ret);\r\n });\r\n }, []);\r\n\r\n const handleSelectData = (selectedIndex: number) => {\r\n if (groupListInfo) {\r\n var selectRow = groupListInfo.GroupListsComModels[selectedIndex];\r\n if (selectRow != undefined) {\r\n console.debug(selectRow);\r\n var pathname: string = '';\r\n var state: any = undefined;\r\n switch (selectRow.FormID) {\r\n case 1:\r\n pathname = '/TrendGraphPage';\r\n state = props.groupInfo.TM_TRD_GROUP_SETs.find((row) => row.GROUP_NO == selectRow.GroupNo);\r\n break;\r\n case 2:\r\n pathname = '/RealTimeTrendGraphPage';\r\n state = props.groupInfo.RT_TRD_GROUP_SETs.find((row) => row.GROUP_NO == selectRow.GroupNo);\r\n break;\r\n case 3:\r\n pathname = '/PhaseCurrentPage';\r\n state = props.groupInfo.PH_CUR_GROUP_SETs.find((row) => row.GROUP_NO == selectRow.GroupNo);\r\n break;\r\n case 4:\r\n pathname = '/RawWaveformComparisonPage';\r\n state = props.groupInfo.SIG_CMP_GROUP_SETs.find((row) => row.GROUP_NO == selectRow.GroupNo);\r\n break;\r\n case 5:\r\n pathname = '/FFTComparisonPage';\r\n state = props.groupInfo.FFT_CMP_GROUP_SETs.find((row) => row.GROUP_NO == selectRow.GroupNo);\r\n break;\r\n case 6:\r\n pathname = '/XYDiagramPage';\r\n state = props.groupInfo.XY_CMP_GROUP_SETs.find((row) => row.GROUP_NO == selectRow.GroupNo);\r\n break;\r\n case 7:\r\n pathname = '/RawWaveformComparisonConanPage';\r\n state = props.groupInfo.SIGC_CMP_GROUP_SETs.find((row) => row.GROUP_NO == selectRow.GroupNo);\r\n break;\r\n case 8:\r\n pathname = '/FFTComparisonConanPage';\r\n state = props.groupInfo.FFTC_CMP_GROUP_SETs.find((row) => row.GROUP_NO == selectRow.GroupNo);\r\n break;\r\n default:\r\n pathname = '/';\r\n }\r\n\r\n console.debug(pathname);\r\n console.debug(state);\r\n props.onDataSelectAction(pathname, state);\r\n }\r\n }\r\n };\r\n\r\n //行選択の背景色一時置き\r\n let lineSelection = '';\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n No\r\n {t('GropuListComGrid.機能', '機能')}\r\n \r\n {t('GropuListComGrid.グループNo', 'グループNo.')}\r\n \r\n \r\n {t('GropuListComGrid.グループ名', 'グループ名')}\r\n \r\n \r\n \r\n \r\n {groupListInfo?.GroupListsComModels.map((row, index) => (\r\n {\r\n if (selectedIndex == index + 1) {\r\n handleSelectData(index);\r\n } else {\r\n setSelectedIndex(index + 1);\r\n }\r\n }}\r\n selected={selectedIndex === index + 1}\r\n className={lineSelection}\r\n >\r\n {index + 1} \r\n {row.FormName}\r\n {row.GroupNo}\r\n {row.GroupName}\r\n \r\n ))}\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default GropuListComGrid;\r\n","import React, { useEffect, useState } from 'react';\r\nimport Button_mui from '@mui/material/Button';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { LearnStatType } from '../../../Constant';\r\n\r\ntype LearnResultButtonProps = {\r\n learnStat: LearnStatType;\r\n cv_v?: number;\r\n cv_c?: number;\r\n onClick: () => void;\r\n};\r\n\r\n/**\r\n * 学習結果\tボタン\r\n * @param props\r\n * @returns\r\n */\r\nconst IoTDevListLearnResultButton: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const [learnStat, setLearnStat] = useState(props.learnStat);\r\n const [cvv, setCvv] = useState(props.cv_v);\r\n const [cvc, setCvc] = useState(props.cv_c);\r\n\r\n useEffect(() => {\r\n setLearnStat(props.learnStat);\r\n setCvv(props.cv_v);\r\n setCvc(props.cv_c);\r\n }, [props.learnStat, props.cv_v, props.cv_c]);\r\n\r\n const getLearnResultButtonColor = (state?: LearnStatType): string => {\r\n if (state == undefined) return 'silver';\r\n\r\n switch (state) {\r\n /* 学習前*/\r\n case LearnStatType.BEFORE_LEARNING:\r\n return 'green';\r\n /* 学習中 */\r\n case LearnStatType.LEARNING:\r\n return 'royalblue';\r\n /* 学習後(ばらつき有)*/\r\n case LearnStatType.AFTER_LEARNING_VARIATION:\r\n return 'red';\r\n /* 学習後(ばらつき無)*/\r\n case LearnStatType.AFTER_LEARNING_NO_VARIATION:\r\n return 'orange';\r\n /**使用不可 */\r\n case LearnStatType.UNUSABLE:\r\n return 'silver';\r\n default:\r\n return 'silver';\r\n }\r\n };\r\n\r\n /**\r\n * ボタン表示判定\r\n * @param state\r\n * @returns\r\n */\r\n const isButtonEnable = (state?: LearnStatType, cv_c?: number, cv_v?: number): boolean => {\r\n //どちらかのデータが有ればボタンは表示\r\n\r\n if (cv_c === null && cv_v === null) return false;\r\n\r\n //if (state == undefined) return false;\r\n\r\n switch (state) {\r\n /* 学習後(ばらつき有)*/\r\n case LearnStatType.AFTER_LEARNING_VARIATION:\r\n return true;\r\n /* 学習後(ばらつき無)*/\r\n case LearnStatType.AFTER_LEARNING_NO_VARIATION:\r\n return true;\r\n }\r\n return true;\r\n };\r\n\r\n //console.debug(['- 画面描画開始 -', props]);\r\n return (\r\n
\r\n {isButtonEnable(learnStat, cvc, cvv) ? (\r\n {\r\n props.onClick();\r\n }}\r\n >\r\n {t('IoTDevListGrid.表示', '表示')}\r\n \r\n ) : null}\r\n
\r\n );\r\n};\r\n\r\nexport default IoTDevListLearnResultButton;\r\n","import React, { useEffect, useState } from 'react';\r\nimport Button from '@material-ui/core/Button';\r\nimport { useTranslation } from 'react-i18next';\r\nimport OKCancelDialog from '../../atoms/Dialog/OKCancelDialog';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\ntype StudyButtonProps = {\r\n studyStatus: number;\r\n isStudyCheck: boolean;\r\n //studyFlg: number;\r\n onClick: () => void;\r\n onCancelClick: () => void;\r\n};\r\n\r\nconst DevListStudyButton: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const [studyStatus, setStudyStatus] = useState(props.studyStatus);\r\n const [isStudyCheck, setIsStudyCheck] = useState(props.isStudyCheck);\r\n //const [studyFlg, setStudyFlg] = useState(props.studyFlg);\r\n const [dialogOpen, setDialogOpen] = React.useState(false);\r\n const [showMessage, setShowMessage] = React.useState('');\r\n\r\n useEffect(() => {\r\n setStudyStatus(props.studyStatus);\r\n setIsStudyCheck(props.isStudyCheck);\r\n }, [props.studyStatus, props.isStudyCheck]);\r\n\r\n const getStudyButtonColor = (state?: number): string => {\r\n if (state == undefined) return 'silver';\r\n\r\n switch (state) {\r\n case 0: //学習未\r\n return 'gray';\r\n case 1: //学習中\r\n return 'royalblue';\r\n case 2: //学習完了\r\n return 'green';\r\n case 3: //学習完了\r\n return 'green';\r\n case 4: //学習キャンセル\r\n return 'gray';\r\n default:\r\n //使用不可,不明\r\n return 'silver';\r\n }\r\n };\r\n const getStudyButtonText = (state?: number): string => {\r\n if (state == undefined) return t('DevListStudyButton.不明', '不明');\r\n\r\n switch (state) {\r\n case 0:\r\n return t('DevListStudyButton.学習前', '学習未');\r\n case 1:\r\n return t('DevListStudyButton.学習中', '学習中');\r\n case 2:\r\n return t('DevListStudyButton.学習後', '学習完了');\r\n case 3:\r\n return t('DevListStudyButton.学習後', '学習完了');\r\n case 4:\r\n return t('DevListStudyButton.学習キャンセル', '学習キャンセル');\r\n case -1:\r\n return t('DevListStudyButton.使用不可', '使用不可');\r\n default:\r\n return t('DevListStudyButton.不明', '不明');\r\n }\r\n };\r\n\r\n /**\r\n * OK処理\r\n */\r\n const handleDialogOkButton = () => {\r\n if (studyStatus == 1) {\r\n props.onCancelClick();\r\n } else {\r\n props.onClick();\r\n }\r\n //setStudyStatus(2);\r\n setDialogOpen(false);\r\n };\r\n\r\n /**\r\n * 確認ダイアログ\r\n */\r\n const handleCheckDialogShow = () => {\r\n if (studyStatus == 1) {\r\n setShowMessage(t('DevListStudyButton.学習処理をキャンセルします', '学習処理をキャンセルしますか?'));\r\n } else {\r\n setShowMessage(t('DevListStudyButton.学習処理を実行します', '学習処理を実行しますか?'));\r\n }\r\n setDialogOpen(true);\r\n };\r\n\r\n //console.debug(['- 画面描画開始 -', props]);\r\n //学習中の場合はボタン押下でキャンセルとする\r\n return (\r\n
\r\n {isStudyCheck || studyStatus == 1 ? (\r\n {\r\n handleCheckDialogShow();\r\n }}\r\n >\r\n {getStudyButtonText(studyStatus)}\r\n \r\n ) : (\r\n \r\n {getStudyButtonText(studyStatus)}\r\n
\r\n )}\r\n handleDialogOkButton()}\r\n onCancel={() => setDialogOpen(false)}\r\n title={t('DevListStudyButton.確認', '確認')}\r\n okText={t('DevListStudyButton.OK', 'OK')}\r\n cancelText={t('DevListStudyButton.キャンセル', 'キャンセル')}\r\n maxWidth={'sm'}\r\n >\r\n {showMessage}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default DevListStudyButton;\r\n","import { createStyles, makeStyles, Theme, createTheme } from '@material-ui/core/styles';\r\n\r\nexport const TableUseStyle = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 210px)',\r\n },\r\n //テーブルヘッダセル\r\n tableHeaderCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n },\r\n //テーブルボディーセル\r\n tableCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n padding: '5px',\r\n minWidth: '100px',\r\n },\r\n tableRow: {\r\n '&.Mui-selected, &.Mui-selected:hover': {\r\n //背景色\r\n backgroundColor: '#7fffd4',\r\n '& > .MuiTableCell-root': {\r\n //文字色\r\n color: 'brack',\r\n },\r\n },\r\n },\r\n buttonStyle: {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n },\r\n })\r\n\r\n);\r\n","import React, { useEffect, useState } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport Button from '@material-ui/core/Button';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { V_DEV_LIST, DeviceAlarmData, GetPlcStatuserrorList } from \"./DeviceList\";\r\nimport { TableUseStyle } from './DeviceListStyle';\r\n\r\ntype DeviceListStatErrorListDialogProps = {\r\n open: boolean;\r\n onClose: () => void;\r\n devListData: V_DEV_LIST;\r\n};\r\n\r\n\r\nconst DeviceListStatErrorListDialog: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = TableUseStyle();\r\n const [buttonEnable, setButtonEnable] = useState(true);\r\n const [deviceAlarmDataList, setIDeviceAlarmDataList] = useState([]);\r\n\r\n useEffect(() => {\r\n if (props.open === true) {\r\n setButtonEnable(false);\r\n console.debug(['DeviceListStatErrorListDialog useEffect']);\r\n GetPlcStatuserrorList(props.devListData.DEV_INDEX.toString())\r\n .then((r) => {\r\n setIDeviceAlarmDataList(r);\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n } else {\r\n setIDeviceAlarmDataList([]);\r\n }\r\n }, [props.open]);\r\n\r\n /**\r\n * エラー区分\r\n * @param sate\r\n * @returns\r\n */\r\n const getAlmKindText = (kind: Number): string => {\r\n if (kind == undefined) return t('DeviceListStatErrorListDialog.不明', '不明');\r\n switch (kind) {\r\n case 1:\r\n return t('DeviceListStatErrorListDialog.重故障', '重故障');\r\n case 2:\r\n return t('DeviceListStatErrorListDialog.軽故障', '軽故障');\r\n default:\r\n return t('DeviceListStatErrorListDialog.不明', '不明');\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n {t('DeviceListStatErrorListDialog.ステータスアラームログ', 'ステータスアラームログ')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {' '}\r\n {t('DeviceListStatErrorListDialog.区分', '区分')}\r\n \r\n \r\n {t('DeviceListStatErrorListDialog.項目名称', '項目名称')}\r\n \r\n \r\n {t('DeviceListStatErrorListDialog.アラームコード', 'アラームコード')}\r\n \r\n \r\n {t('DeviceListStatErrorListDialog.アラーム内容', 'アラーム内容')}\r\n \r\n \r\n \r\n \r\n {deviceAlarmDataList.map((row, index) => {\r\n return (\r\n \r\n {getAlmKindText(row.ALM_SMM_DAT.ALM_KIND)}\r\n {row.ALM_SMM_DAT.ITM_NAME}\r\n {row.ALM_KIND_SET == null ? \"\" : row.ALM_KIND_SET.TYP_NAME}\r\n {row.ALM_SMM_DAT.MESSAGE}\r\n \r\n );\r\n })}\r\n \r\n
\r\n
\r\n
\r\n \r\n {\r\n props.onClose();\r\n }}\r\n >\r\n {t('DeviceListStatErrorListDialog.閉じる', '閉じる')}\r\n \r\n \r\n
\r\n \r\n );\r\n}\r\n\r\nexport default DeviceListStatErrorListDialog;","\r\nimport { LearnStatType, SpeedKind } from '../../../Constant';\r\nimport { ALM_KIND_SET, ALM_SMM_DAT } from '../../molecules/Grid/AlarmGrid';\r\n\r\nexport type V_DEV_LIST = {\r\n DEV_INDEX: number;\r\n DEV_NO: string;\r\n DEV_NAME: string;\r\n PLC_NO?: number;\r\n SET_NO?: number;\r\n SPEED?: number;\r\n STAT?: number;\r\n LOG_INT?: number;\r\n DSP_STR: string;\r\n COL_TIME?: Date;\r\n COL_MODE?: number;\r\n STATUS?: number;\r\n LEARN_STAT?: LearnStatType;\r\n SCHEDULE_TIME?: Date;\r\n LEARN_1_V?: number;\r\n LEARN_1_C?: number;\r\n LEARN_2_V?: number;\r\n LEARN_2_C?: number;\r\n LEARN_3_V?: number;\r\n LEARN_3_C?: number;\r\n CV_V?: number;\r\n CV_C?: number;\r\n STAT_CON?: number;\r\n SPD_UP_FREQ?: number;\r\n SPD_LO_FREQ?: number;\r\n};\r\n\r\nexport type DeviceLists = Array<{\r\n V_DEV_LIST_DISP: V_DEV_LIST;\r\n V_DEV_LISTS: V_DEV_LIST[];\r\n IsManualColection: number;\r\n IsLearning: boolean;\r\n}>;\r\n\r\nexport type DeviceAlarmData = {\r\n ALM_SMM_DAT: ALM_SMM_DAT;\r\n ALM_KIND_SET: ALM_KIND_SET;\r\n};\r\n\r\nexport const deviceListValidate = (data: DeviceLists) => {\r\n if (data.length === 0 || data[0].V_DEV_LIST_DISP === undefined) return false;\r\n return true;\r\n};\r\n\r\n/**\r\n * ステータス異常の一覧取得\r\n * @param devIndex \r\n * @returns \r\n */\r\nexport const GetPlcStatuserrorList = (devIndex: string): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const url = 'api/AlarmSummary/PlcStatusAlarmList?'\r\n var param = `devIndex=${devIndex}`;\r\n fetch(`${url}${param}`)\r\n .then((res) => res.json())\r\n .then((result: DeviceAlarmData[]) => {\r\n console.debug(`${url}${param}`);\r\n console.debug(['GetPlcStatuserrorList result', result]);\r\n resolve(result);\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n });\r\n });\r\n}\r\n","import React, { useEffect, useState } from 'react';\r\nimport Button from '@mui/material/Button';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { V_DEV_LIST } from './DeviceList';\r\nimport { TableUseStyle } from './DeviceListStyle';\r\nimport DeviceListStatErrorListDialog from './DeviceListStatErrorListDialog';\r\n\r\ntype DeviceListStatErrorButtonProps = {\r\n devList: V_DEV_LIST;\r\n};\r\n\r\nconst DeviceListStatErrorButton: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = TableUseStyle();\r\n const [openErrorList, setOpenErrorList] = useState(false);\r\n\r\n /**\r\n * 状態を取得\r\n * @param sate\r\n * @returns\r\n */\r\n const getState = (sate?: number): string => {\r\n if (sate == undefined) return t('DeviceListStatErrorButton.不明', '不明');\r\n\r\n switch (sate) {\r\n case 0:\r\n return t('DeviceListStatErrorButton.正常', '正常');\r\n case 1:\r\n return t('DeviceListStatErrorButton.軽故障', '軽故障');\r\n case 2:\r\n return t('DeviceListStatErrorButton.重故障', '重故障');\r\n case 4:\r\n return t('DeviceListStatErrorButton.停止中', '停止中');\r\n default:\r\n return t('DeviceListStatErrorButton.不明', '不明');\r\n }\r\n };\r\n\r\n /**\r\n * 状態の色を取得\r\n * @param sate\r\n * @returns\r\n */\r\n const getSENSOR_COLMNGSStatusColor = (sate?: number): string => {\r\n if (sate == undefined) return 'silver';\r\n\r\n switch (sate) {\r\n case 0: //正常\r\n return 'green';\r\n case 1: //軽故障\r\n return '#FFF380';\r\n case 2: //重故障\r\n return 'red';\r\n case 4: //停止中\r\n return 'silver';\r\n default:\r\n //不明\r\n return 'silver';\r\n }\r\n };\r\n\r\n /**\r\n * エラーログ日時選択ダイアログOPEN\r\n */\r\n const errorListDialogOpenAction = () => {\r\n setOpenErrorList(true);\r\n };\r\n\r\n /**\r\n * エラーログ日時選択閉じる\r\n */\r\n const errorListDialogCloseAction = () => {\r\n setOpenErrorList(false);\r\n };\r\n\r\n /**\r\n * ラベル時の文字色取得\r\n * @param sate\r\n * @returns\r\n */\r\n const getLabelTextColor = (sate?: number): string => {\r\n let displayColor = sate == 1 ? 'black' : 'white';\r\n return displayColor;\r\n };\r\n /**\r\n * ボタンの文字色取得\r\n * @param sate\r\n * @returns\r\n */\r\n const getButtonTextColor = (sate?: number): string => {\r\n if (sate == undefined) return 'silver';\r\n\r\n switch (sate) {\r\n case 0: //正常\r\n return 'green';\r\n case 1: //軽故障\r\n return '#FFF380';\r\n case 2: //重故障\r\n return 'red';\r\n case 4: //停止中\r\n return 'silver';\r\n default:\r\n //不明\r\n return 'silver';\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n {/**軽故障・重故障の場合はボタンに変更、それ以外はラベル表示 */}\r\n {props.devList.STAT !== 1 && props.devList.STAT !== 2 ? (\r\n \r\n {getState(props.devList.STAT)}\r\n \r\n ) : (\r\n errorListDialogOpenAction()}\r\n >\r\n {getState(props.devList.STAT)}\r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\nexport default DeviceListStatErrorButton;\r\n","import { CONAN_AIR_PLCNO_MAX, CONAN_AIR_PLCNO_MIN, PARTIAL_DISCHARGE_PLCNO } from \"../Constant\"\r\n\r\n/**\r\n *指定したPLCNoがコナンエアー用のPLCNoかどうかを返す\r\n * @param plcNo チェック対象のPLCNo\r\n * @returns\r\n */\r\nexport const IsConanAirPlc = (plcNo: string): boolean => {\r\n if ((CONAN_AIR_PLCNO_MIN <= Number(plcNo)) && (Number(plcNo) <= CONAN_AIR_PLCNO_MAX)) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n *指定したPLCNoが部分放電のPLCNoかどうかを返す\r\n * @param plcNo チェック対象のPLCNo\r\n * @returns\r\n */\r\nexport const IsPartialDischargePlc = (plcNo: string): boolean => {\r\n if ((PARTIAL_DISCHARGE_PLCNO == Number(plcNo))) {\r\n return true;\r\n }\r\n return false;\r\n}","import React, { useEffect, useState } from 'react';\r\n\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport Button from '@material-ui/core/Button';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport { TableBaseStyle } from '../../../baseStyle/tableBaseStyle';\r\n\r\nimport DateTImeDiv from '../../atoms/Div/DateTImeDiv';\r\nimport OKCancelDialog from '../../atoms/Dialog/OKCancelDialog';\r\nimport SimpleDialog from '../../atoms/Dialog/SimpleDialog';\r\n\r\nimport { useHistory } from 'react-router-dom';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { LearnStatType, SpeedKind } from '../../../Constant';\r\nimport { ErrorCode } from '../../../ErrorCode';\r\nimport LearnResultDialog, { LearnResultDialogResponse } from '../../molecules/Dialog/LearnResultDialog';\r\nimport GropuListComGrid from '../../molecules/Grid/GropuListComGrid';\r\nimport DevListLearnResultButton from '../../molecules/Button/DevListLearnResultButton';\r\n\r\nimport DevListStudyButton from './DevListStudyButton';\r\nimport DeviceListStatErrorButton from './DeviceListStatErrorButton';\r\nimport { TableUseStyle } from './DeviceListStyle';\r\nimport { V_DEV_LIST, DeviceLists, deviceListValidate } from './DeviceList';\r\n\r\nimport { GroupListType, GetAllGroupList } from '../../../function/GroupDataModel';\r\nimport {\r\n PLCManualCollectionRequest,\r\n PLCStudyRequest,\r\n PLCStudyCancelRequest,\r\n} from '../../../function/PLCCommunicateModel';\r\nimport { IsConanAirPlc, IsPartialDischargePlc } from '../../../function/PlcNoModel';\r\nimport { useModal } from '../../../function/useModal';\r\n\r\ntype Props = {\r\n tableContainerStyle: string;\r\n};\r\n\r\nconst DeviceListGrid: React.FC = (props) => {\r\n const history = useHistory();\r\n const classes = TableUseStyle();\r\n const baseClasses = TableBaseStyle();\r\n const { t } = useTranslation();\r\n\r\n const [okCancelDialogOpen, setOkCancelDialogOpen] = React.useState(false);\r\n const [messageDialogOpen, setMessageDialogOpen] = React.useState(false);\r\n const [showMessage, setShowMessage] = React.useState('');\r\n const [selectDevIndex, setSelectDevIndex] = React.useState(0);\r\n\r\n const [selectedID, setSelectedID] = useState(0);\r\n const [deviceArray, setDeviceArray] = useState([]);\r\n const [open, setOpen] = React.useState(false);\r\n const [deviceIndex, setDeviceIndex] = React.useState(0);\r\n const [groupListInfo, setGroupListInfo] = useState({\r\n TM_TRD_GROUP_SETs: [],\r\n RT_TRD_GROUP_SETs: [],\r\n PH_CUR_GROUP_SETs: [],\r\n SIG_CMP_GROUP_SETs: [],\r\n SIGC_CMP_GROUP_SETs: [],\r\n FFT_CMP_GROUP_SETs: [],\r\n FFTC_CMP_GROUP_SETs: [],\r\n XY_CMP_GROUP_SETs: [],\r\n GroupListsComModels: [],\r\n TrendSettings: {\r\n MeasKinds: [],\r\n DeviceLists: [],\r\n ItemLists: [],\r\n DataKinds: [],\r\n AlarmKinds: [],\r\n AlarmLimits: [],\r\n DeviceUnitInfos: [],\r\n ColSetInfos: [],\r\n KIND_NO_NAME_SETs: [],\r\n JudgeSetSelect: [],\r\n MClcTypes: [],\r\n SetPartDisList: [],\r\n },\r\n PhCurSelectItems: [],\r\n DeviceSelects: [],\r\n DeviceConanSelects: [],\r\n XYDeviceSelects: [],\r\n });\r\n const [rowno, setRowno] = useState(-1);\r\n //学習結果ダイアログ\r\n const [flgLearnResDlg, learnResDlg] = useModal();\r\n\r\n useEffect(() => {\r\n getData();\r\n const interval = setInterval(() => {\r\n getData();\r\n }, 10000);\r\n\r\n return () => {\r\n clearInterval(interval);\r\n };\r\n }, []);\r\n\r\n const handleTransitionPage = (pathname: string, state: any) => {\r\n history.push({\r\n pathname: pathname,\r\n state: state,\r\n });\r\n };\r\n\r\n const handleDialogShow = () => {\r\n setOpen(true);\r\n };\r\n\r\n const handleDialogClose = () => {\r\n console.debug('handleDialogClose');\r\n setOpen(false);\r\n };\r\n\r\n const handlePLCManualCollectionOK = () => {\r\n PLCManualCollectionRequest(selectDevIndex)\r\n .then((ret) => {\r\n if (ret.ErrorCode === ErrorCode.ERR_CODE_NONE) {\r\n setShowMessage(t('DeviceListGrid.手動収集を要求しました', '手動収集を要求しました'));\r\n deviceArray[rowno].IsManualColection = 3;\r\n setDeviceArray(deviceArray.concat());\r\n } else if (ret.ErrorCode === ErrorCode.ERR_CODE_PLC_REQUEST_DUPLICATION) {\r\n setShowMessage(t('DeviceListGrid.既に要求中です', '既に要求中です'));\r\n } else {\r\n setShowMessage(t('DeviceListGrid.手動収集の要求に失敗しました', '手動収集の要求に失敗しました。'));\r\n }\r\n setMessageDialogOpen(true);\r\n })\r\n .catch((error) => {\r\n setShowMessage(t('DeviceListGrid.手動収集の要求に失敗しました', '手動収集の要求に失敗しました。'));\r\n setMessageDialogOpen(true);\r\n setSelectDevIndex(0);\r\n })\r\n .finally(() => {\r\n setSelectDevIndex(0);\r\n setOkCancelDialogOpen(false);\r\n setRowno(-1);\r\n });\r\n };\r\n\r\n const handlePLCManualCollectionButton = (devRow: DeviceLists) => {\r\n if (devRow[0].IsManualColection == 0) {\r\n setShowMessage(t('DeviceListGrid.手動収集を要求しますか', '手動収集を要求しますか?'));\r\n setOkCancelDialogOpen(true);\r\n setSelectDevIndex(devRow[0].V_DEV_LIST_DISP.DEV_INDEX);\r\n }\r\n };\r\n\r\n const getManualColectionString = (sate?: number): string => {\r\n if (sate == undefined) return t('DeviceListGrid.不明', '不明');\r\n\r\n switch (sate) {\r\n case 0:\r\n return t('DeviceListGrid.開始', '開始');\r\n case 1:\r\n return t('DeviceListGrid.自動中', '自動中');\r\n case 2:\r\n return t('DeviceListGrid.リトライ中', 'リトライ中');\r\n case 3:\r\n return t('DeviceListGrid.手動中', '手動中');\r\n case 4:\r\n return t('DeviceListGrid.学習中', '学習中');\r\n case 5:\r\n return t('DeviceListGrid.待機中', '待機中');\r\n case 9:\r\n return t('DeviceListGrid.収集不可', '収集不可');\r\n default:\r\n return t('DeviceListGrid.不明', '不明');\r\n }\r\n };\r\n\r\n /**\r\n * 機器一覧の取得\r\n * @returns \r\n */\r\n const getData = (): DeviceLists | undefined => {\r\n fetch('api/DeviceList', {\r\n method: 'GET',\r\n headers: { pageName: 'Home' },\r\n })\r\n .then((res) => res.json())\r\n .then(\r\n (result: DeviceLists) => {\r\n console.debug(['Get result Data', 'api/DeviceList', result]);\r\n if (deviceListValidate(result)) setDeviceArray(result);\r\n return result;\r\n },\r\n (error) => {\r\n console.error('DeviceListGrid - getData');\r\n console.error(error);\r\n }\r\n );\r\n return undefined;\r\n };\r\n\r\n /**\r\n * 行クリックハンドラ\r\n * @param e \r\n * @param index \r\n */\r\n const handleTableCellClick = (e: V_DEV_LIST, index: number) => {\r\n console.debug(['handleTableCellClick', e, index]);\r\n if (selectedID == index + 1) {\r\n setDeviceIndex(e.DEV_INDEX);\r\n GetAllGroupList(e.DEV_INDEX).then((ret) => {\r\n setGroupListInfo(ret);\r\n handleDialogShow();\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * studyRequestAction実行\r\n * @param devRow\r\n * @param index\r\n */\r\n const studyRequestAction = (devRow: DeviceLists, index: number) => {\r\n console.debug('studyRequestAction実行');\r\n //console.debug(['studyRequestAction_devRow',devRow]);\r\n PLCStudyRequest(devRow[0].V_DEV_LIST_DISP.DEV_INDEX)\r\n .then((ret) => {\r\n //console.debug(['studyRequestAction_ret',ret]);\r\n if (ret.ErrorCode === ErrorCode.ERR_CODE_NONE) {\r\n setShowMessage(t('DeviceListGrid.学習処理の要求しました', '学習処理を要求しました'));\r\n deviceArray[index].IsLearning = false;\r\n setDeviceArray(deviceArray.concat());\r\n } else if (ret.ErrorCode === ErrorCode.ERR_CODE_PLC_REQUEST_DUPLICATION) {\r\n setShowMessage(t('DeviceListGrid.既に要求中です', '既に要求中です'));\r\n } else {\r\n setShowMessage(t('DeviceListGrid.学習処理の要求に失敗しました', '学習処理の要求に失敗しました。'));\r\n }\r\n setMessageDialogOpen(true);\r\n })\r\n .catch((error) => {\r\n setShowMessage(t('DeviceListGrid.学習処理の要求に失敗しました', '学習処理の要求に失敗しました。'));\r\n setMessageDialogOpen(true);\r\n setSelectDevIndex(0);\r\n console.error(['studyRequestAction_error', error]);\r\n })\r\n .finally(() => {\r\n setSelectDevIndex(0);\r\n setOkCancelDialogOpen(false);\r\n setRowno(-1);\r\n });\r\n };\r\n\r\n /**\r\n * studyCancelRequestAction実行\r\n * @param devRow\r\n * @param index\r\n */\r\n const studyCancelRequestAction = (devRow: DeviceLists, index: number) => {\r\n console.debug('studyCancelRequestAction実行');\r\n //console.debug(['studyRequestAction_devRow',devRow]);\r\n PLCStudyCancelRequest(devRow[0].V_DEV_LIST_DISP.DEV_INDEX)\r\n .then((ret) => {\r\n //console.debug(['studyRequestAction_ret',ret]);\r\n if (ret.ErrorCode === ErrorCode.ERR_CODE_NONE) {\r\n setShowMessage(t('DeviceListGrid.学習キャンセル処理の要求しました', '学習キャンセル処理を要求しました'));\r\n deviceArray[index].IsLearning = false;\r\n setDeviceArray(deviceArray.concat());\r\n } else if (ret.ErrorCode === ErrorCode.ERR_CODE_PLC_REQUEST_DUPLICATION) {\r\n setShowMessage(t('DeviceListGrid.既にキャンセル要求中です', '既にキャンセル要求中です'));\r\n } else {\r\n setShowMessage(\r\n t('DeviceListGrid.学習キャンセル処理の要求に失敗しました', '学習キャンセル処理の要求に失敗しました。')\r\n );\r\n }\r\n setMessageDialogOpen(true);\r\n })\r\n .catch((error) => {\r\n setShowMessage(\r\n t('DeviceListGrid.学習キャンセル処理の要求に失敗しました', '学習キャンセル処理の要求に失敗しました。')\r\n );\r\n setMessageDialogOpen(true);\r\n setSelectDevIndex(0);\r\n console.error(['studyCancelRequestAction_error', error]);\r\n })\r\n .finally(() => {\r\n setSelectDevIndex(0);\r\n setOkCancelDialogOpen(false);\r\n setRowno(-1);\r\n });\r\n };\r\n\r\n const lrdlg = flgLearnResDlg ? : null;\r\n\r\n //行選択の背景色一時置き\r\n let lineSelection = '';\r\n\r\n //console.debug([' - 画面描画開始 -', deviceArray]);\r\n return (\r\n <>\r\n
\r\n \r\n \r\n \r\n \r\n {t('DeviceListGrid.No', 'No')}\r\n \r\n {t('DeviceListGrid.機器番号_名称', '機器番号・名称')}\r\n \r\n {t('DeviceListGrid.状態', '状態')}\r\n \r\n {t('DeviceListGrid.最新収集時刻', '最新収集時刻')}\r\n \r\n {t('DeviceListGrid.手動収集', '手動収集')}\r\n \r\n {t('DeviceListGrid.次回収集予定', '次回収集予定')}\r\n \r\n {t('DeviceListGrid.周期', '周期')}\r\n {t('DeviceListGrid.学習処理', '学習処理')}\r\n {t('DeviceListGrid.学習結果', '学習結果')}\r\n \r\n \r\n \r\n {deviceArray.map((row, index) => (\r\n {\r\n setSelectedID(index + 1);\r\n }}\r\n selected={selectedID === index + 1}\r\n className={lineSelection}\r\n >\r\n {/**No */}\r\n handleTableCellClick(row.V_DEV_LIST_DISP, index)}\r\n >\r\n {index + 1}\r\n \r\n {/**機器番号・名称 */}\r\n handleTableCellClick(row.V_DEV_LIST_DISP, index)}\r\n >\r\n {row.V_DEV_LIST_DISP.DEV_NO + row.V_DEV_LIST_DISP.DEV_NAME}\r\n \r\n {/**状態 */}\r\n \r\n \r\n \r\n {/**最新収集時刻 */}\r\n handleTableCellClick(row.V_DEV_LIST_DISP, index)}\r\n >\r\n \r\n \r\n {/**手動収集 */}\r\n \r\n {\r\n handlePLCManualCollectionButton([row]);\r\n setRowno(index);\r\n }}\r\n disabled={row.IsManualColection != 0}\r\n >\r\n {getManualColectionString(row.IsManualColection)}\r\n \r\n \r\n {/**次回収集予定 */}\r\n handleTableCellClick(row.V_DEV_LIST_DISP, index)}\r\n >\r\n \r\n \r\n {/**周期 */}\r\n handleTableCellClick(row.V_DEV_LIST_DISP, index)}\r\n >\r\n {row.V_DEV_LIST_DISP.DSP_STR}\r\n \r\n {/**学習処理 */}\r\n \r\n {\r\n setRowno(index);\r\n studyRequestAction([row], index);\r\n }}\r\n onCancelClick={() => {\r\n setRowno(index);\r\n studyCancelRequestAction([row], index);\r\n }}\r\n />\r\n \r\n {/**学習結果 */}\r\n {IsPartialDischargePlc(String(row.V_DEV_LIST_DISP.PLC_NO)) ||\r\n IsConanAirPlc(String(row.V_DEV_LIST_DISP.PLC_NO)) ? (\r\n \r\n {/**部分放電とコナンエアーの場合はハイフンを表示*/}―\r\n \r\n ) : (\r\n \r\n {\r\n setDeviceIndex(row.V_DEV_LIST_DISP.DEV_INDEX);\r\n learnResDlg.open();\r\n }}\r\n />\r\n \r\n )}\r\n \r\n ))}\r\n \r\n
\r\n
\r\n {/**グループ一覧ダイアログ表示 */}\r\n \r\n {t('DeviceListGrid.グループ一覧', 'グループ一覧')}\r\n \r\n \r\n \r\n \r\n \r\n {t('DeviceListGrid.閉じる', '閉じる')}\r\n \r\n \r\n \r\n handlePLCManualCollectionOK()}\r\n onCancel={() => setOkCancelDialogOpen(false)}\r\n title={t('DeviceListGrid.確認', '確認')}\r\n okText={t('DeviceListGrid.OK', 'OK')}\r\n cancelText={t('DeviceListGrid.キャンセル', 'キャンセル')}\r\n maxWidth={'sm'}\r\n >\r\n {showMessage}\r\n \r\n setMessageDialogOpen(false)}\r\n title={t('DeviceListGrid.確認', '確認')}\r\n okText={t('DeviceListGrid.OK', 'OK')}\r\n maxWidth={'sm'}\r\n >\r\n {showMessage}\r\n \r\n {lrdlg}\r\n \r\n );\r\n};\r\nexport default DeviceListGrid;\r\n","import { ResponceDataType } from \"../ErrorCode\"\r\n\r\nexport const PLCManualCollectionRequest = (deviceIndex: number): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/PLCCommunicate/PLCManualCollection\",{\r\n method: 'post',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(deviceIndex),\r\n })\r\n .then((res) => res.json())\r\n .then((result: ResponceDataType) => resolve(result))\r\n .catch(reason => reject(reason));\r\n });\r\n}\r\n\r\nexport const PLCStudyRequest = (deviceIndex: number): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/PLCCommunicate/PLCStudyRequest\",{\r\n method: 'post',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(deviceIndex),\r\n })\r\n .then((res) => res.json())\r\n .then((result: ResponceDataType) => resolve(result))\r\n .catch(reason => reject(reason));\r\n });\r\n}\r\n\r\nexport const PLCStudyCancelRequest = (deviceIndex: number): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/PLCCommunicate/PLCStudyCancelRequest\",{\r\n method: 'post',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(deviceIndex),\r\n })\r\n .then((res) => res.json())\r\n .then((result: ResponceDataType) => resolve(result))\r\n .catch(reason => reject(reason));\r\n });\r\n}\r\n","import React from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\n\r\nimport DeviceListGrid from './DeviceListGrid';\r\nimport Test from '../../atoms/Test/TimeLineChart';\r\nimport { TableUseStyle } from './DeviceListStyle';\r\n\r\n\r\nconst HomePage: React.FC = () => {\r\n //console.debug(['HomePage',]);\r\n const classes = TableUseStyle();\r\n return ;\r\n //return ;\r\n};\r\n\r\nexport default HomePage;\r\n","import * as React from 'react';\r\n\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\n\r\ntype Props = {\r\n color: string;\r\n width: string;\r\n height: string;\r\n};\r\n\r\nconst ColorLineText: React.FC = (props) => {\r\n const useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n inputText: {\r\n width: props.width,\r\n height: props.height,\r\n background: props.color,\r\n },\r\n })\r\n );\r\n const classes = useStyles();\r\n return ;\r\n};\r\nexport default ColorLineText;\r\n","import React, { useState, useEffect } from 'react';\r\nimport * as Constant from '../../../Constant';\r\nimport ColorLineHr from '../../atoms/ColorLineHr';\r\nimport ColorLineText from '../../atoms/Text/ColorLineText';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableStyle: {\r\n borderWidth: '1px',\r\n borderColor: '#aaaaaa',\r\n borderStyle: 'solid',\r\n background: '#e0e0e0',\r\n borderCollapse: `collapse`,\r\n width: '150px',\r\n },\r\n tdStyle: {\r\n borderWidth: '1px',\r\n borderColor: '#aaaaaa',\r\n borderStyle: 'solid',\r\n background: '#e0e0e0',\r\n paddingLeft: '5px',\r\n },\r\n tdCheckStyle: {\r\n borderWidth: '1px',\r\n borderColor: '#aaaaaa',\r\n borderStyle: 'solid',\r\n background: '#e0e0e0',\r\n paddingLeft: '5px',\r\n },\r\n })\r\n);\r\n\r\nconst TrendGraphItemHeader: React.FC = () => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
{t('TrendGraphItemHeader.表示有', '表示有')}{t('TrendGraphItemHeader.線色', '線色')}
\r\n {t('TrendGraphItemHeader.計測種別', '計測種別')}\r\n
\r\n {t('TrendGraphItemHeader.機器番号_機器名称', '機器番号・機器名称')}\r\n
\r\n {t('TrendGraphItemHeader.項目名称', '項目名称')}\r\n
{t('TrendGraphItemHeader.データ種別', 'データ種別')}{t('TrendGraphItemHeader.単位', '単位')}
\r\n {t('TrendGraphItemHeader.異常種別', '異常種別')}\r\n
\r\n {t('TrendGraphItemHeader.軽故障', '軽故障')}\r\n \r\n \r\n {t('TrendGraphItemHeader.重故障', '重故障')}\r\n \r\n
\r\n {t('TrendGraphItemHeader.項目選択', '項目選択')}\r\n
\r\n );\r\n};\r\n\r\nexport default TrendGraphItemHeader;\r\n","import { ErrorCode, ResponceDataType } from \"../../../ErrorCode\"\r\nimport { IsConanAirPlc} from \"../../../function/PlcNoModel\";\r\n\r\n//傾向管理アイテムType\r\nexport type TrendGraphPageDataType = {\r\n selectGroupNo: number;\r\n targetDay: string;\r\n dataUpDateTime: string;\r\n};\r\n\r\n\r\n//傾向管理アイテムType\r\nexport type TrendManagementSettingType = {\r\n PLCNo: string;\r\n AICardNo: string;\r\n ChannelNo: string;\r\n SettingNo: string;\r\n IsShow: boolean;\r\n GroupSetNo: number;\r\n PenNo: string;\r\n LineColor: string;\r\n Kind: number;\r\n MachineIndex: string;\r\n MachineName: string;\r\n ItemName: string;\r\n MeasureKindName: string;\r\n MeasureKindNo:number;\r\n TrendValueUpper: string;\r\n TrendValueUpperLimit: string;\r\n OperationProcess: string;\r\n UnitSymbol: string;\r\n Clc: number;\r\n TypeNo: number;\r\n TypeName: string;\r\n MCLCTypeID: number;\r\n MCLCTypeName: string;\r\n IsRowSelect: boolean;\r\n IndexNo: number;\r\n IsDataSelect: boolean;\r\n};\r\n\r\nexport const createDefaltTrendSetting = () : TrendManagementSettingType => {\r\n var ret: TrendManagementSettingType = {\r\n IndexNo: 0,\r\n PLCNo: \"0\",\r\n AICardNo: \"0\",\r\n ChannelNo: \"0\",\r\n SettingNo: \"0\",\r\n IsShow: false,\r\n GroupSetNo : 0,\r\n PenNo: \"0\",\r\n LineColor: \"\",\r\n Kind : 0,\r\n MachineIndex: \"0\",\r\n MachineName: \"\",\r\n ItemName: \"\",\r\n MeasureKindName: \"\",\r\n MeasureKindNo: 0,\r\n TrendValueUpper: \"\",\r\n TrendValueUpperLimit: \"\",\r\n OperationProcess: \"\",\r\n UnitSymbol: \"\",\r\n Clc: 0,\r\n TypeNo: 0,\r\n TypeName: \"\",\r\n MCLCTypeID : 0,\r\n MCLCTypeName : \"\",\r\n IsRowSelect: false,\r\n IsDataSelect :false,\r\n };\r\n\r\n return ret;\r\n}\r\n\r\nexport type GraphDataType = {\r\n PLCNo: string;\r\n AICardNo: string;\r\n ChannelNo: string;\r\n SettingNo: string;\r\n ValueDateTime: Date[];\r\n Value: number[];\r\n UpperValue: number;\r\n UpperLimitValue:number;\r\n\r\n AlmTypeNo: number\r\n GraphY1MaxValue: number;\r\n GraphY1MinValue: number;\r\n}\r\n\r\nexport type GraphDataListsType = {\r\n GraphDataList: GraphDataType[];\r\n\r\n}\r\n\r\n//傾向管理アイテム設定一覧を取得\r\nexport const GetTrendSettingList = (gropuNo: string | unknown) : Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/TrendSetting/\" + gropuNo, {\r\n method: 'GET',\r\n headers: { pageName: 'TrendGraph' },\r\n })\r\n .then((res) => res.json())\r\n .then((result: TrendManagementSettingType[]) => {\r\n if (trendManagementSettingTypeListValidate(result)) resolve(result);\r\n\r\n if (result.length != 8) {\r\n var count: number = result.length;\r\n for (let i = 0; i < (8 - count); i++) {\r\n result.push(createDefaltTrendSetting());\r\n }\r\n }\r\n\r\n for (var i in result) {\r\n result[i].IndexNo = Number(i);\r\n result[i].IsRowSelect = false;\r\n result[i].IsDataSelect = false;\r\n }\r\n for (let i = 0; i < result.length; i++) {\r\n }\r\n\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\nconst trendManagementSettingTypeListValidate = (data: TrendManagementSettingType[]) => {\r\n if (data == undefined) return false;\r\n return true;\r\n };\r\n\r\n\r\nexport const GetGraphDataListsType = (\r\n gropuNo: string | unknown,\r\n fromTime: string,\r\n toTime: string): Promise => {\r\n return new Promise((resolve, reject) => {\r\n\r\n var url: string = \"api/TrendGraphModels/\" + gropuNo;\r\n var timeBetween = `?fromtime=${fromTime}&totime=${toTime}`;\r\n\r\n console.debug(` GetGraphDataListsType -- ${url + timeBetween}`);\r\n fetch(url + timeBetween)\r\n .then((res) => res.json())\r\n .then((result: GraphDataListsType) => {\r\n if (GraphDataListsTypeValidate(result)) resolve(result);\r\n\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\nconst GraphDataListsTypeValidate = (data: GraphDataListsType) => {\r\n console.log(`TrandSettings ckeck ${data}`);\r\n if (data == undefined) return false;\r\n console.log(\"TrandSettings ckeck ok\");\r\n return true;\r\n};\r\n","export const ToPowIndex = (num: number): number => {\r\n if (Math.abs(num) >= 1) {\r\n for (var ii = 0; ii < 10; ii++) {\r\n if (Math.abs(num) < Math.pow(10, ii)) {\r\n return ii - 1;\r\n }\r\n }\r\n } else {\r\n for (var ii = 0; ii < 10; ii++) {\r\n if (Math.abs(num) < Math.pow(10, ii * -1)) {\r\n return ii * -1;\r\n }\r\n }\r\n }\r\n\r\n return 0;\r\n};\r\n\r\n/**\r\n *\r\n */\r\nexport const ToValueRoundInternal = (source: number, index: number, isMax: boolean): number => {\r\n if (source > 0) {\r\n var powValue = source / Math.pow(10, index);\r\n if (powValue >= 1) {\r\n var floorValue = Math.floor(powValue);\r\n if (isMax) {\r\n floorValue += 1;\r\n } else if ((floorValue = powValue)) {\r\n floorValue -= 1;\r\n }\r\n\r\n return floorValue * Math.pow(10, index);\r\n } else {\r\n return Math.pow(10, index);\r\n }\r\n }\r\n return 0;\r\n};\r\n\r\n/**\r\n * 最大値で値を丸めます。\r\n * @param source 変換する値。\r\n * @returns\r\n */\r\nexport const ToValueMaxRound = (source: number): number => {\r\n var index = ToPowIndex(source);\r\n if (source >= 0) {\r\n return ToValueRoundInternal(source, index, true);\r\n } else {\r\n return ToValueRoundInternal(source * -1, index, false) * -1;\r\n }\r\n};\r\n\r\n/**\r\n * 最小値で値を丸めます。\r\n * @param source 変換する値。\r\n * @returns\r\n */\r\nexport const ToValueMinRound = (source: number): number => {\r\n var index = ToPowIndex(source);\r\n if (source >= 0) {\r\n return ToValueRoundInternal(source, index, false);\r\n } else {\r\n return ToValueRoundInternal(source * -1, index, true) * -1;\r\n }\r\n};\r\n","import ItemComboBox, { ComboBoxItemType } from '../../../atoms/ComboBox/ItemComboBox';\r\nimport {\r\n MeasureHighKind,\r\n MeasureClcType,\r\n AlmTypKind,\r\n GetVibrationSpecialNo,\r\n GetVibrationSpecialNoUnit,\r\n GetVibrationSpecialString,\r\n GetMeasureClcName,\r\n MeasureConanKind,\r\n PARTIAL_DISCHARGE_PLCNO,\r\n CcTypKind\r\n} from '../../../../Constant';\r\n\r\nimport {\r\n GroupListType,\r\n GetTrendGroupList,\r\n GetTrendSetting,\r\n PutTrendGroupSetting,\r\n TM_TRD_GROUP_SET,\r\n V_TREND_SETTING_ITEM,\r\n JudgeInfo,\r\n PlcInfo,\r\n ColSetInfo,\r\n KIND_NO_NAME_SET,\r\n TrendSettingParameter\r\n} from '../../../../function/GroupDataModel';\r\n\r\nimport { IsConanAirPlc, IsPartialDischargePlc } from '../../../../function/PlcNoModel';\r\nimport { SET_PART_DIS } from '../../MeasureSetting/PartialDischargeCollection/PartialDischargeCollection';\r\n\r\nexport type CLC_TYP_SET = {\r\n TYP_NO: number;\r\n TYP_NAME: string;\r\n TYP_INVALID: number;\r\n}\r\n\r\n/**\r\n * グループコンボボックスリスト作成\r\n * @param groups\r\n * @returns\r\n */\r\nexport const CreateGroupNoComboList = (groups: TM_TRD_GROUP_SET[]): ComboBoxItemType[] => {\r\n return groups.map((grp) => {\r\n return { index: grp.GROUP_NO, name: grp.GROUP_NO.toString() };\r\n });\r\n};\r\n\r\n/**\r\n *V_TREND_SETTING_ITEMのデフォルトデータを返す\r\n * @returns\r\n */\r\nexport const CreateInitTrendSettingItem = (groupNo: number): V_TREND_SETTING_ITEM => {\r\n return {\r\n GROUP_NO: groupNo,\r\n PEN_NO: 0,\r\n DSP_FLG: 0,\r\n DSP_COLOR: 0,\r\n GRP_LOW: 0,\r\n GRP_HIGH: 0,\r\n SCALE_ON: 0,\r\n PLC_NO: 0,\r\n AI_CARD: 0,\r\n AI_CH: 0,\r\n TYP_NO: 0,\r\n MCLC_TYP_ID: 0,\r\n SET_NO: 0,\r\n DEV_INDEX: 0,\r\n DEV_NO: '',\r\n DEV_NAME: '',\r\n ITM_NAME_NO: 0,\r\n ITM_NAME: '',\r\n EMC_ITM_NAME_NO: 0,\r\n EMC_ITM_NAME: '',\r\n EMC_UNIT: '',\r\n CLC: 0,\r\n KIND: 0,\r\n KIND_NO: 0,\r\n UNIT: '',\r\n RH: 0,\r\n RL: 0,\r\n MUL: 0,\r\n SPEED: 0,\r\n MES_NAME: '',\r\n LOG_INT: 0,\r\n };\r\n};\r\n\r\n/**\r\n * ColSetInfoのデフォルトデータを返す\r\n */\r\nexport const CreateInitColSetInfo = (): ColSetInfo => {\r\n var col: ColSetInfo = {\r\n KIND_NO: 0,\r\n DEV_INDEX: 0,\r\n ITM_NAME_NO: 0,\r\n CLC: 0,\r\n PLC_NO: 0,\r\n AI_CARD: 0,\r\n AI_CH: 0,\r\n SET_NO: 0,\r\n SPEED: 0,\r\n UNIT: '',\r\n VALID: 0,\r\n };\r\n return col;\r\n};\r\n\r\n/**\r\n * グループ設定のデフォルトデータを返す\r\n * @returns\r\n */\r\nexport const CreateInitGroupSet = (gropuNo: number): TM_TRD_GROUP_SET => {\r\n const newGrp: TM_TRD_GROUP_SET = {\r\n GROUP_NO: gropuNo,\r\n GROUP_NAME: '',\r\n DSP_FLG: 1,\r\n DSP_COLOR: getColorCode(0, 0, 64),\r\n AUT_UPDATE: 0,\r\n DSP_SPAN: 0,\r\n };\r\n\r\n return newGrp;\r\n\r\n};\r\n\r\n/**\r\n * 指定した行のデフォルト色を返す\r\n * @param indexNo\r\n */\r\nexport const GetDefaultPenColor = (indexNo: number): number => {\r\n switch (indexNo) {\r\n case 1:\r\n return getColorCode(255, 0, 0);\r\n case 2:\r\n return getColorCode(0, 0, 255);\r\n case 3:\r\n return getColorCode(0, 128, 0);\r\n case 4:\r\n return getColorCode(0, 255, 255);\r\n case 5:\r\n return getColorCode(128, 0, 128);\r\n case 6:\r\n return getColorCode(128, 128, 0);\r\n case 7:\r\n return getColorCode(255, 255, 0);\r\n case 8:\r\n return getColorCode(0, 128, 128);\r\n default:\r\n return getColorCode(255, 0, 0);\r\n }\r\n}\r\n/**\r\n * 指定した空コードを返す\r\n * @param r\r\n * @param g\r\n * @param b\r\n * @returns\r\n */\r\nconst getColorCode = (r: number, g: number, b: number): number => {\r\n return r + (g << 8) + (b << 16);\r\n};\r\n\r\n/**\r\n * 閾値取得\r\n * @param alarmLimits\r\n * @param plcNo\r\n * @param aiCard\r\n * @param aiCh\r\n * @param clc\r\n * @param typeNo\r\n * @param kindNo\r\n * @returns\r\n */\r\nexport const GetLimit = (\r\n alarmLimits: JudgeInfo[],\r\n plcNo: number,\r\n aiCard: number,\r\n aiCh: number,\r\n clc: number,\r\n typeNo: number,\r\n kindNo: number,\r\n mclcTypId: number\r\n): JudgeInfo | undefined => {\r\n if (kindNo === MeasureHighKind.VIBRATION_SPD) {\r\n clc = 5; //データ種別 速度固定\r\n } else if (kindNo === MeasureHighKind.VIBRATION_DSP) {\r\n clc = 6; //データ種別 変位固定\r\n }\r\n const limit = alarmLimits.find((al) => {\r\n if (al.PLC_NO == plcNo && al.AI_CARD == aiCard && al.AI_CH == aiCh && al.MCLC_TYP_ID == mclcTypId) {\r\n // if (clc == 7) {\r\n // // dB差分\r\n // return al.CLC_TYP == 7 && al.ALM_TYP_NO == typeNo;\r\n // } else if (clc == 99) {\r\n // // 特殊値\r\n // return al.CLC_TYP == 1 && al.ALM_TYP_NO == typeNo;\r\n // } else {\r\n // // 上記以外\r\n // return al.CLC_TYP == clc && al.ALM_TYP_NO == typeNo;\r\n // }\r\n return al.CLC_TYP == clc && al.ALM_TYP_NO == typeNo;\r\n } else {\r\n return false;\r\n }\r\n });\r\n\r\n return limit;\r\n};\r\n\r\n\r\n/**\r\n * 単位取得\r\n * @param colSets\r\n * @param plc\r\n * @param aicard\r\n * @param aich\r\n * @param clc\r\n * @param kindNo\r\n * @returns\r\n */\r\nexport const GetUnit = (\r\n colSets: ColSetInfo[],\r\n plc: number,\r\n aicard: number,\r\n aich: number,\r\n clc: number,\r\n kindNo: number\r\n): string => {\r\n if (IsConanAirPlc(String(plc))) {\r\n return GetUnitWithClcConal(kindNo);\r\n }\r\n if (IsPartialDischargePlc(String(plc))) {\r\n console.debug([\"IsPartialDischargePlc\", clc, plc])\r\n return GetPartialDischargeUnit(clc);\r\n }\r\n var col = colSets.find(\r\n (col) => col.PLC_NO == plc && col.AI_CARD == aicard && col.AI_CH == aich && col.KIND_NO == kindNo\r\n );\r\n if (col) {\r\n return GetUnitWithClc(col.PLC_NO, col.UNIT, clc, kindNo, 0);\r\n }\r\n return '';\r\n};\r\n\r\n/**\r\n * 部分放電の単位取得\r\n * @param clc \r\n * @param plc \r\n * @returns \r\n */\r\nexport const GetPartialDischargeUnit = (clc: number): string => {\r\n if ((clc === CcTypKind.PD_TYP_NO_CLC_MAXVALUE || clc === CcTypKind.PD_TYP_NO_CLC_PDVALUE)) {\r\n return \"V\";\r\n }\r\n return \"\";\r\n};\r\n\r\n/**\r\n * 各演算タイプの単位文字列を返す\r\n * @param unit\r\n * @param clc\r\n * @param kind\r\n * @returns\r\n */\r\nexport const GetUnitWithClc = (plcNo: number, unit: string, clc: number, kindNo: number, kind: number) => {\r\n if (IsConanAirPlc(String(plcNo))) {\r\n return GetUnitWithClcConal(kindNo);\r\n }\r\n if (clc == 5) {\r\n /* 速度値 */\r\n return 'mm/s';\r\n } else if (clc == 6) {\r\n /* 変位値 */\r\n return 'μm';\r\n } else if (clc == 7) {\r\n /* 変位値 */\r\n return 'dB';\r\n } else if (kind == 1) {\r\n /* 速度値 */\r\n return 'mm/s';\r\n } else if (kind == 2) {\r\n /* 変位値 */\r\n return 'μm';\r\n } else {\r\n return unit;\r\n }\r\n};\r\n/**\r\n * コナンエアの場合、単位固定\r\n * @param unit\r\n * @param clc\r\n * @param kind\r\n * @returns\r\n */\r\nexport const GetUnitWithClcConal = (kindNo: number) => {\r\n if (MeasureConanKind.SOKUDO_X === kindNo\r\n || MeasureConanKind.SOKUDO_Y === kindNo\r\n || MeasureConanKind.SOKUDO_Z === kindNo\r\n || MeasureConanKind.SOKUDO_3D === kindNo\r\n || MeasureConanKind.SOKUDO_FFT_X === kindNo\r\n || MeasureConanKind.SOKUDO_FFT_Y === kindNo\r\n || MeasureConanKind.SOKUDO_FFT_Z === kindNo\r\n || MeasureConanKind.SOKUDO_FFT_3D === kindNo\r\n ) {\r\n return 'mm/s';\r\n }\r\n else {\r\n return 'm/s2';\r\n }\r\n};\r\n\r\n/**\r\n *特殊データを追加\r\n 振動(速度)振動(変位)\r\n */\r\nexport const CreateSpecialDatTrendSettingParameter = (target: TrendSettingParameter, translation: any) => {\r\n //特殊項目追加\r\n const spdkind: KIND_NO_NAME_SET = {\r\n SPEED: 2,\r\n NAME_NO: MeasureHighKind.VIBRATION_SPD,\r\n MES_NAME: GetVibrationSpecialString(MeasureHighKind.VIBRATION_SPD, translation),\r\n };\r\n const dspkind: KIND_NO_NAME_SET = {\r\n SPEED: 2,\r\n NAME_NO: MeasureHighKind.VIBRATION_DSP,\r\n MES_NAME: GetVibrationSpecialString(MeasureHighKind.VIBRATION_DSP, translation),\r\n };\r\n target.KIND_NO_NAME_SETs.push(spdkind);\r\n target.KIND_NO_NAME_SETs.push(dspkind);\r\n target.MeasKinds.push({ Key: target.MeasKinds.length + 1, Disp: spdkind.MES_NAME });\r\n target.MeasKinds.push({ Key: target.MeasKinds.length + 1, Disp: dspkind.MES_NAME });\r\n\r\n const copys = target.ColSetInfos.filter((r) => r.SPEED == 2 && r.KIND_NO == 1);\r\n if (copys != null) {\r\n for (let i in copys) {\r\n let temp1 = Object.assign(CreateInitColSetInfo(), copys[i]);\r\n temp1.KIND_NO = MeasureHighKind.VIBRATION_SPD;\r\n temp1.UNIT = GetVibrationSpecialNoUnit(temp1.KIND_NO, '');\r\n target.ColSetInfos.push(temp1);\r\n let temp2 = Object.assign(CreateInitColSetInfo(), copys[i]);\r\n temp2.KIND_NO = MeasureHighKind.VIBRATION_DSP;\r\n temp2.UNIT = GetVibrationSpecialNoUnit(temp2.KIND_NO, '');\r\n target.ColSetInfos.push(temp2);\r\n console.debug(['mesRt,temp1,temp2,mesRet', temp1, temp2, target.ColSetInfos]);\r\n }\r\n }\r\n}\r\n","import React, { useDebugValue, useEffect, useState } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\n\r\nimport {\r\n LineChart,\r\n Line,\r\n XAxis,\r\n YAxis,\r\n Label,\r\n CartesianGrid,\r\n ResponsiveContainer,\r\n ReferenceLine,\r\n Brush,\r\n Tooltip,\r\n} from 'recharts';\r\nimport dayjs from 'dayjs';\r\nimport {\r\n TrendGraphPageDataType,\r\n TrendManagementSettingType,\r\n GetGraphDataListsType,\r\n GraphDataListsType,\r\n} from './TrendGraph';\r\nimport * as Constant from '../../../Constant';\r\nimport { ToValueRoundInternal, ToPowIndex, ToValueMaxRound, ToValueMinRound } from '../../../function/CalculationModel';\r\n\r\nimport { GetUnitWithClc } from '../GroupSettings/TrendSetting/TrendSetting';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n customTooltip: {\r\n background: '#FFFFEE',\r\n fontSize: '14px',\r\n padding: '10px 10px 0px 20px',\r\n },\r\n })\r\n);\r\n\r\nexport type GraphDispSetting = {\r\n yMin: number;\r\n yMax: number;\r\n};\r\n\r\ntype GraphData = {\r\n lineNo: number;\r\n lineName: string;\r\n points: GraphPoint[];\r\n valueUpper: number;\r\n valueUpperLimit: number;\r\n selectFlg: boolean;\r\n infoColor: string;\r\n yMax: number;\r\n yMin: number;\r\n};\r\n\r\ntype GraphPoint = {\r\n datetime: Date;\r\n value: number;\r\n};\r\n\r\ntype GraphPointEx = {\r\n datetime: Date;\r\n value1: number;\r\n value2: number;\r\n value3: number;\r\n value4: number;\r\n value5: number;\r\n value6: number;\r\n value7: number;\r\n value8: number;\r\n};\r\n\r\ntype GraphSetting = {\r\n upper: number;\r\n upperLimit: number;\r\n yMin: number;\r\n yMax: number;\r\n backColor: string;\r\n memoryFontColor: string;\r\n yUnit: string;\r\n xUnit: string;\r\n yUnitColor: string;\r\n xUnitColor: string;\r\n gridColor: string;\r\n xticks: string[];\r\n};\r\n\r\nconst convertGraphPoint = (data: GraphData[]) => {\r\n const result: GraphPointEx[] = [];\r\n data[0]?.points.map((r: GraphPoint) => {\r\n result.push({\r\n datetime: r.datetime,\r\n value1: 0,\r\n value2: 0,\r\n value3: 0,\r\n value4: 0,\r\n value5: 0,\r\n value6: 0,\r\n value7: 0,\r\n value8: 0,\r\n });\r\n });\r\n data.map((row, index) => {\r\n //console.debug(['row , index ', row, index]);\r\n row.points.map((row2, index2) => {\r\n if (index == 0) {\r\n //console.debug(['row2 , index ', row2, index]);\r\n result[index2].value1 = row2.value;\r\n }\r\n if (index == 1) {\r\n result[index2].value2 = row2.value;\r\n }\r\n if (index == 2) {\r\n result[index2].value3 = row2.value;\r\n }\r\n if (index == 3) {\r\n result[index2].value4 = row2.value;\r\n }\r\n if (index == 4) {\r\n result[index2].value5 = row2.value;\r\n }\r\n if (index == 5) {\r\n result[index2].value6 = row2.value;\r\n }\r\n if (index == 6) {\r\n result[index2].value7 = row2.value;\r\n }\r\n if (index == 7) {\r\n result[index2].value8 = row2.value;\r\n }\r\n });\r\n });\r\n console.debug(['graphPointEx', result]);\r\n return result;\r\n};\r\n\r\nconst CreateGData = (rows: GraphDataListsType): GraphData[] => {\r\n var ret: GraphData[] = [];\r\n for (var i in rows.GraphDataList) {\r\n var item: GraphData = {\r\n lineNo: Number(i),\r\n valueUpper: rows.GraphDataList[i].UpperValue,\r\n valueUpperLimit: rows.GraphDataList[i].UpperLimitValue,\r\n selectFlg: true,\r\n points: [],\r\n infoColor: '',\r\n lineName: '',\r\n yMax: 0,\r\n yMin: 0,\r\n };\r\n\r\n for (var j in rows.GraphDataList[i].ValueDateTime) {\r\n item.points.push({ datetime: rows.GraphDataList[i].ValueDateTime[j], value: rows.GraphDataList[i].Value[j] });\r\n }\r\n var max = Math.round(Math.max(...item.points.map((p) => p.value)));\r\n var min = Math.min(...item.points.map((p) => p.value));\r\n\r\n var maxA: number;\r\n var minA: number;\r\n maxA = ToValueMaxRound(max);\r\n minA = ToValueMinRound(min);\r\n item.yMax = maxA;\r\n item.yMin = minA;\r\n ret.push(item);\r\n }\r\n\r\n return ret;\r\n};\r\n\r\ntype Props = {\r\n onChagneYMinMax: (min: number, max: number) => void;\r\n trendSettingList: TrendManagementSettingType[];\r\n targetDay: string;\r\n chartContainerStyle: string;\r\n onChengeDateTime: (value: string) => void;\r\n graphDispSetting: GraphDispSetting;\r\n trendGraphPageData: TrendGraphPageDataType;\r\n};\r\n\r\nconst TrendGraphChart: React.FC = (props) => {\r\n const classes = useStyles();\r\n const [graphData, setGraphData] = useState([]);\r\n\r\n const [graphSetting, setGraphSetting] = useState({\r\n upper: 0,\r\n upperLimit: 0,\r\n yMax: 0,\r\n yMin: 0,\r\n backColor: Constant.GraphThemeLight.BACK_COLOR,\r\n memoryFontColor: Constant.GraphThemeLight.MEMORY_FONT_COLOR,\r\n yUnit: '',\r\n xUnit: '',\r\n yUnitColor: Constant.GraphThemeLight.UNIT_COLOR,\r\n xUnitColor: Constant.GraphThemeLight.UNIT_COLOR,\r\n gridColor: Constant.GraphThemeLight.GRID_COLOR,\r\n xticks: [],\r\n });\r\n const chartBrushMin = React.useRef(334);\r\n const chartBrushMax = React.useRef(364);\r\n const setData = () => {\r\n if (props.trendSettingList != null) {\r\n var target = props.trendSettingList.find((item) => item.IsRowSelect);\r\n\r\n console.debug(['■■ target', target]);\r\n\r\n graphSetting.xticks = [''];\r\n if (target != null) {\r\n graphSetting.upper = Number(target.TrendValueUpper);\r\n graphSetting.upperLimit = Number(target.TrendValueUpperLimit);\r\n graphSetting.yUnit = GetUnitWithClc(\r\n Number(target.PLCNo),\r\n target.UnitSymbol,\r\n target.Clc,\r\n target.MeasureKindNo,\r\n target.Kind\r\n );\r\n\r\n for (let i = 0; i < 12; i++) {\r\n graphSetting.xticks.push(dayjs(props.targetDay).add(i, 'month').format('YYYY-MM-DDT00:00:00'));\r\n }\r\n }\r\n for (var i in graphData) {\r\n if (props.trendSettingList[i].PLCNo != '0') {\r\n graphData[i].selectFlg = props.trendSettingList[i].IsShow;\r\n graphData[i].infoColor = props.trendSettingList[i].LineColor;\r\n graphData[i].lineName = props.trendSettingList[i].ItemName;\r\n }\r\n }\r\n }\r\n\r\n //setGraphData({ ...graphData });\r\n };\r\n\r\n setData();\r\n\r\n useEffect(() => {\r\n const toDay: string = dayjs(props.targetDay).add(1, 'year').format('YYYY-MM-DD');\r\n GetGraphDataListsType(props.trendGraphPageData.selectGroupNo.toString(), props.targetDay, toDay).then((result) => {\r\n console.debug(['GetGraphDataListsType result', result]);\r\n var tList = CreateGData(result);\r\n\r\n //うるう年問題対応\r\n if (tList.length !== 0) {\r\n if (tList[0].points.length == 366) {\r\n if (chartBrushMax.current == 364) {\r\n chartBrushMax.current = 365;\r\n }\r\n } else if (tList[0].points.length == 365) {\r\n if (chartBrushMax.current == 365) {\r\n chartBrushMax.current = 364;\r\n }\r\n }\r\n }\r\n\r\n setGraphData(tList);\r\n\r\n var showList = tList.filter((item) => item.selectFlg);\r\n //Y軸取得;\r\n const yMin = showList == null ? 0 : Math.min(...showList.map((p) => p.yMin));\r\n const yMax = showList == null ? 0 : Math.max(...showList.map((p) => p.yMax));\r\n\r\n console.debug(['showList, yMin, yMax, siyMax', showList, yMin, yMax, yMax]);\r\n props.onChagneYMinMax(yMin, yMax);\r\n });\r\n }, [props.trendGraphPageData]);\r\n\r\n //Y軸更新\r\n useEffect(() => {\r\n var yMax = props.graphDispSetting.yMax;\r\n var yMin = props.graphDispSetting.yMin;\r\n\r\n setGraphSetting({ ...graphSetting, yMax: yMax, yMin: yMin });\r\n console.debug(['★★yMin, yMax★★', yMin, yMax]);\r\n }, [props.graphDispSetting]);\r\n\r\n const CustomTooltip = ({ active, payload, label }: any) => {\r\n //console.debug(['payload', payload]);\r\n if (active) {\r\n return (\r\n
\r\n
{dayjs(label).format('YY/MM/DD')}
\r\n {payload?.map((r: any, index: any) => {\r\n return (\r\n
\r\n {r.name} : {Number(r.value).toFixed(3)}\r\n
\r\n );\r\n })}\r\n
\r\n );\r\n }\r\n return null;\r\n };\r\n\r\n type BrushStartEndIndex = {\r\n startIndex?: number;\r\n endIndex?: number;\r\n };\r\n //allowDuplicatedCategory 重複したメモリを重ねる\r\n return (\r\n \r\n {\r\n if (x !== null) {\r\n props.onChengeDateTime(x?.activeLabel);\r\n }\r\n }}\r\n >\r\n \r\n {\r\n return r === 0 || r === 'auto' || dayjs(r).isValid() === false ? '' : dayjs(r).format('YY/MM/DD');\r\n }}\r\n height={40}\r\n tick={{ dy: 8, fontSize: 11 }}\r\n padding={{ right: 0, left: 0 }}\r\n />\r\n\r\n props.toFixed(2)}\r\n width={100}\r\n >\r\n \r\n \r\n\r\n dayjs(props).format('YY/MM/DD')}\r\n onChange={(e: any) => {\r\n chartBrushMin.current = e.startIndex ?? 0;\r\n chartBrushMax.current = e.endIndex ?? 0;\r\n //return console.debug(['TimeLineChart-brush', e]);\r\n return '';\r\n }}\r\n />\r\n\r\n } />\r\n \r\n \r\n {graphData?.map((row, index) => (\r\n \r\n ))}\r\n \r\n \r\n );\r\n};\r\nexport default TrendGraphChart;\r\n","import React, { useEffect, useState } from 'react';\r\n\r\ntype Props = {\r\n label: string;\r\n minValue: number;\r\n maxValue: number;\r\n minValueLimit?: number;\r\n maxValueLimit?: number;\r\n textBoxWidth: string;\r\n onChange?: (minValue: number, maxValue: number) => void;\r\n};\r\n\r\nconst CheckMin = (min: number, max: number, minLimit?: number): number => {\r\n var ret = 0;\r\n if (max >= min) {\r\n ret = min;\r\n } else {\r\n ret = max;\r\n }\r\n\r\n if (minLimit != null) {\r\n if (ret < minLimit) {\r\n ret = minLimit;\r\n }\r\n }\r\n return ret;\r\n};\r\n\r\nconst CheckMax = (min: number, max: number, maxLimit?: number): number => {\r\n var ret = 0;\r\n if (max >= min) {\r\n ret = max;\r\n } else {\r\n ret = min;\r\n }\r\n if (maxLimit != null) {\r\n if (ret > maxLimit) {\r\n ret = maxLimit;\r\n }\r\n }\r\n return ret;\r\n};\r\n\r\nconst RangeInputNumber: React.FC = (props) => {\r\n const [fromValue, setFromValue] = React.useState(String(props.minValue));\r\n const [toValue, setToValue] = React.useState(String(props.maxValue));\r\n\r\n useEffect(() => {\r\n setFromValue(String(props.minValue));\r\n setToValue(String(props.maxValue));\r\n }, [props.minValue, props.maxValue]);\r\n\r\n const onChangefromValue = (event: React.ChangeEvent) => {\r\n setFromValue(event.target.value);\r\n };\r\n const onChangetoValue = (event: React.ChangeEvent) => {\r\n setToValue(event.target.value);\r\n };\r\n\r\n const handlefromFocusEvent = () => {\r\n var f = Number(fromValue);\r\n var t = Number(toValue);\r\n if (isNaN(f)) {\r\n setFromValue('0');\r\n } else {\r\n f = CheckMin(f, t, props.minValueLimit);\r\n setFromValue(String(f));\r\n if (props.onChange) {\r\n props.onChange(f, t);\r\n }\r\n }\r\n };\r\n const handletoFocusEvent = () => {\r\n var f = Number(fromValue);\r\n var t = Number(toValue);\r\n console.debug(t);\r\n if (isNaN(t)) {\r\n setToValue('0');\r\n } else {\r\n t = CheckMax(f, t, props.maxValueLimit);\r\n setToValue(String(t));\r\n if (props.onChange) {\r\n props.onChange(f, t);\r\n }\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
{props.label}\r\n {\r\n if (e.key == 'Enter') {\r\n handlefromFocusEvent();\r\n }\r\n }}\r\n />\r\n ~ \r\n {\r\n if (e.key == 'Enter') {\r\n handletoFocusEvent();\r\n }\r\n }}\r\n />\r\n
\r\n );\r\n};\r\n\r\nexport default RangeInputNumber;\r\n","import React, { useState, useEffect } from 'react';\r\nimport RangeInputNumber from '../../molecules/Range/RangeInputNumber';\r\nimport { GraphDispSetting } from './TrendGraphChart';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ntype Props = {\r\n settingData: GraphDispSetting;\r\n onChange: (data: GraphDispSetting) => void;\r\n};\r\n\r\nconst TrendGraphChartSetting: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const buttonStyle = {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n };\r\n const yMinMaxOn = (min: number, max: number) => {\r\n if (min == Infinity) {\r\n return;\r\n }\r\n if (max == Infinity) {\r\n return;\r\n }\r\n console.debug(['yMinMaxOn', `min=${min},max=${max}`]);\r\n var tmp = props.settingData;\r\n tmp.yMin = min;\r\n tmp.yMax = max;\r\n props.onChange(tmp);\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default TrendGraphChartSetting;\r\n","import React, { KeyboardEventHandler, KeyboardEvent, useEffect, useState } from 'react';\r\nimport NativeSelect from '@material-ui/core/NativeSelect';\r\nimport Box from '@material-ui/core/Box';\r\n\r\nexport type ComboBoxItemType = {\r\n index: number;\r\n name: string;\r\n tag?: any; //付加情報\r\n};\r\n\r\ntype Props = {\r\n itemList: ComboBoxItemType[] | undefined;\r\n label: string;\r\n value?: number;\r\n itemBoxStyle?: string;\r\n labelStyle?: string;\r\n justifyContent?: string;\r\n onChangeEvent?: (event: React.ChangeEvent<{ name?: string; value: unknown }>) => void;\r\n};\r\n\r\nexport const ItemComboBox: React.FC = (props) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
{props.label}
\r\n
\r\n {\r\n //console.debug([`NativeSelect onKeyPress ${ev}`]);\r\n ev.preventDefault();\r\n }}\r\n onKeyDown={(ev) => {\r\n //console.debug([`NativeSelect onKeyDown ${ev}`]);\r\n ev.preventDefault();\r\n }}\r\n >\r\n {props.itemList?.map((row, index) => (\r\n \r\n ))}\r\n \r\n
\r\n );\r\n};\r\nexport default ItemComboBox;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { GroupListType, GetTrendGroupList } from '../../../function/GroupDataModel';\r\nimport { ItemComboBox, ComboBoxItemType } from '../../atoms/ComboBox/ItemComboBox';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n labelStyle: {\r\n fontSize: '14px',\r\n },\r\n itemBoxStyle: {\r\n fontSize: '15px',\r\n },\r\n })\r\n);\r\n\r\n//グループリスト作成\r\nconst createMeasureList = (data: GroupListType): ComboBoxItemType[] => {\r\n var ret: ComboBoxItemType[] = [];\r\n if (data != null) {\r\n const gpList = data.TM_TRD_GROUP_SETs.filter((r) => r.DSP_FLG == 1);\r\n for (var i in gpList) {\r\n ret.push({\r\n index: gpList[i].GROUP_NO,\r\n name: `[${gpList[i].GROUP_NO}]` + gpList[i].GROUP_NAME,\r\n });\r\n }\r\n }\r\n return ret;\r\n};\r\n\r\ntype Props = {\r\n onChangeEvent: (event: React.ChangeEvent<{ name?: string; value: unknown }>) => void;\r\n defalutIndex: number;\r\n};\r\n\r\nconst TrendGraphPageComboBox: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [groupList, setGroupList] = React.useState([]);\r\n\r\n useEffect(() => {\r\n GetTrendGroupList()\r\n .then((ret) => {\r\n setGroupList(createMeasureList(ret));\r\n })\r\n .catch((reason) => {});\r\n }, []);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default TrendGraphPageComboBox;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { LogD } from '../../../function/LogLapper';\r\nimport { TrendManagementSettingType } from '../TrendGraph/TrendGraph';\r\nimport { GetUnitWithClc } from '../GroupSettings/TrendSetting/TrendSetting';\r\nimport { GetMeasureClcName, GetVibrationSpecialStringByKindNo } from '../../../Constant';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ntype Props = {\r\n setData: TrendManagementSettingType;\r\n isShowOnChange: (event: React.ChangeEvent, index: number) => void;\r\n isRowSelectClick: (index: number) => void;\r\n isDataSelectOnChange: (event: React.ChangeEvent, index: number) => void;\r\n isRowSelectDoubleClick: () => void;\r\n};\r\n\r\nconst TrendGraphItemInfo: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const isDispLog: boolean = false;\r\n console.debug([`==TrendGraphItemInfo==`, props.setData]);\r\n\r\n const tableStyle: React.CSSProperties = {\r\n borderWidth: '1px',\r\n borderColor: '#aaaaaa',\r\n borderStyle: 'solid',\r\n background: `${props.setData.LineColor}`,\r\n borderCollapse: `collapse`,\r\n marginLeft: '3px',\r\n width: '12%',\r\n };\r\n\r\n const tdStyle = {\r\n borderWidth: '1px',\r\n borderColor: '#aaaaaa',\r\n borderStyle: 'solid',\r\n background: props.setData.IsRowSelect ? '#ffff00' : '#ffffff',\r\n paddingLeft: '5px',\r\n };\r\n\r\n const tdStyleColor = {\r\n borderWidth: '1px',\r\n borderColor: '#aaaaaa',\r\n borderStyle: 'solid',\r\n background: `${props.setData.LineColor}`,\r\n paddingLeft: '5px',\r\n };\r\n\r\n return (\r\n \r\n {\r\n props.isRowSelectDoubleClick();\r\n }}\r\n >\r\n {/**表示有 */}\r\n \r\n \r\n \r\n {/**計測種別 */}\r\n \r\n \r\n \r\n {/**機器番号・機器名称 */}\r\n \r\n \r\n \r\n {/**項目名称 */}\r\n \r\n \r\n \r\n \r\n {/**演算方法 */}\r\n \r\n {/**単位 */}\r\n \r\n \r\n {/**異常内容 */}\r\n \r\n \r\n \r\n \r\n {/**軽故障 */}\r\n \r\n {/**重故障 */}\r\n \r\n \r\n {/**項目選択 */}\r\n \r\n \r\n \r\n \r\n
props.isRowSelectClick(props.setData.IndexNo)}>\r\n props.isShowOnChange(e, props.setData.IndexNo)}\r\n />\r\n
props.isRowSelectClick(props.setData.IndexNo)}>\r\n {GetVibrationSpecialStringByKindNo(props.setData.Kind, t) === ''\r\n ? props.setData.MeasureKindName\r\n : GetVibrationSpecialStringByKindNo(props.setData.Kind, t)}\r\n  \r\n
props.isRowSelectClick(props.setData.IndexNo)}>\r\n {props.setData.MachineIndex != '0' && props.setData.MachineIndex + props.setData.MachineName} \r\n
props.isRowSelectClick(props.setData.IndexNo)}>\r\n {props.setData.ItemName} \r\n
props.isRowSelectClick(props.setData.IndexNo)}>\r\n {GetMeasureClcName(props.setData.Clc, props.setData.OperationProcess, t)} \r\n props.isRowSelectClick(props.setData.IndexNo)}>\r\n {GetUnitWithClc(\r\n Number(props.setData.PLCNo),\r\n props.setData.UnitSymbol,\r\n props.setData.Clc,\r\n props.setData.MeasureKindNo,\r\n props.setData.Kind\r\n )}\r\n  \r\n
props.isRowSelectClick(props.setData.IndexNo)}>\r\n {props.setData.TypeName}  \r\n
props.isRowSelectClick(props.setData.IndexNo)}>\r\n {props.setData.PLCNo !== '0' ? Number(props.setData.TrendValueUpper).toFixed(4) : ' '} \r\n props.isRowSelectClick(props.setData.IndexNo)}>\r\n {props.setData.PLCNo !== '0' ? Number(props.setData.TrendValueUpperLimit).toFixed(4) : ' '} \r\n
props.isRowSelectClick(props.setData.IndexNo)}>\r\n props.isDataSelectOnChange(e, props.setData.IndexNo)}\r\n />\r\n
\r\n );\r\n};\r\n\r\nexport default TrendGraphItemInfo;\r\n","/** デバッグモードかどうか。本番公開時にはfalseにする */\r\nconst DEBUG_MODE = true;\r\n\r\n\r\n/** デバッグモードでConsoleAPIが有効な場合にログを出力する */\r\nexport function LogD(s: string, isDisp : boolean) {\r\n if (DEBUG_MODE && isDisp && console && typeof console.log != \"undefined\") {\r\n console.debug(s);\r\n }\r\n}\r\n\r\n\r\nexport const debug = (content: any): void => {\r\n console.log('--- DEBUG ---')\r\n if (Array.isArray(content)) {\r\n console.log('Array', ':')\r\n console.table(content)\r\n } else if (Number.isNaN(content)) {\r\n console.log('NaN', ':', content)\r\n } else {\r\n console.log(Object.prototype.toString.call(content).slice(8, -1), ':', content)\r\n }\r\n}\r\n\r\nexport const isNullOrUndefined = (content: any): boolean => {\r\n return content === null || content === undefined\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport TrendGraphItemInfo from './TrendGraphItemInfo';\r\nimport { TrendManagementSettingType } from './TrendGraph';\r\nimport { LogD } from '../../../function/LogLapper';\r\n\r\nconst isDispLog: boolean = false;\r\n\r\ntype Props = {\r\n selectGroupNo: number;\r\n trendSettingList: TrendManagementSettingType[];\r\n onChangeTrandSettingData: (datas: TrendManagementSettingType[]) => void;\r\n onShowTrendSettingDialog: () => void;\r\n};\r\n\r\nconst TrendGraphItemInfoList: React.FC = (props) => {\r\n LogD('==TrendGraphItemInfoList==', isDispLog);\r\n\r\n //表示チェックボックス選択\r\n const isShowOnChange = (e: React.ChangeEvent, index: number) => {\r\n LogD('=isShowOnChange=', isDispLog);\r\n var tmp = props.trendSettingList;\r\n tmp[index].IsShow = tmp[index].IsShow == true ? false : true;\r\n props.onChangeTrandSettingData(tmp);\r\n };\r\n\r\n //背景選択\r\n const isRowSelectClick = (index: number) => {\r\n var tmp = props.trendSettingList;\r\n //console.debug(['= isRowSelectClick =', index, tmp,]);\r\n if (tmp[index].PLCNo !== '0') {\r\n tmp.forEach((row) => (row.IsRowSelect = false));\r\n tmp[index].IsRowSelect = true;\r\n }\r\n props.onChangeTrandSettingData(tmp);\r\n };\r\n\r\n //データチェックボックス\r\n const isDataSelectOnChange = (e: React.ChangeEvent, index: number) => {\r\n var tmp = props.trendSettingList;\r\n if (tmp.filter((r) => r.IsDataSelect).length >= 3) {\r\n if (tmp[index].IsDataSelect == false) {\r\n //最大3件までしか選択できない\r\n console.debug([' IsDataSelect select max over']);\r\n return;\r\n }\r\n }\r\n tmp[index].IsDataSelect = tmp[index].IsDataSelect == true ? false : true;\r\n props.onChangeTrandSettingData(tmp);\r\n };\r\n\r\n return (\r\n
\r\n {props.trendSettingList?.map((row, index) => (\r\n \r\n ))}\r\n
\r\n );\r\n};\r\n\r\nexport default TrendGraphItemInfoList;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { useHistory } from 'react-router-dom';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { TableBaseStyle } from '../../../baseStyle/tableBaseStyle';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n //テーブル外枠\r\n tableStyle: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n },\r\n //テーブルヘッダセル\r\n tableHeaderCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n },\r\n //テーブルヘッダセル\r\n tableHeaderLeftCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'left',\r\n color: 'white',\r\n },\r\n //テーブルボディーセル\r\n tableCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n minWidth: '100px',\r\n },\r\n tableLeftCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'left',\r\n minWidth: '100px',\r\n },\r\n tableRow: {\r\n '&.Mui-selected, &.Mui-selected:hover': {\r\n //背景色\r\n backgroundColor: '#7fffd4',\r\n '& > .MuiTableCell-root': {\r\n //文字色\r\n color: 'brack',\r\n },\r\n },\r\n },\r\n })\r\n);\r\n\r\nexport type Props = {\r\n groupList: SelectGroupType[];\r\n tableContainerStyle?: string;\r\n onSelect: (selectdata: SelectGroupType) => void;\r\n};\r\n\r\nexport type SelectGroupType = {\r\n index: number;\r\n groupNo: number;\r\n groupName: string;\r\n};\r\n\r\nconst GroupSelectPage: React.FC = (props) => {\r\n const history = useHistory();\r\n const classes = useStyles();\r\n const baseClasses = TableBaseStyle();\r\n const [selectedID, setSelectedID] = useState(0);\r\n const { t } = useTranslation();\r\n\r\n console.debug('GroupSelectPage');\r\n\r\n //行選択の背景色一時置き\r\n let lineSelection = '';\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n {/* \r\n No\r\n */}\r\n \r\n {t('GroupSelectPage.グループNo', 'グループNo')}\r\n \r\n \r\n {t('GroupSelectPage.グループ名称', 'グループ名称')}\r\n \r\n \r\n \r\n \r\n {props.groupList?.map((item, index) => (\r\n {\r\n if (selectedID == index + 1) {\r\n props.onSelect(item);\r\n } else {\r\n setSelectedID(index + 1);\r\n }\r\n }}\r\n selected={selectedID === index + 1}\r\n className={lineSelection}\r\n >\r\n {/* {index + 1} */}\r\n {item.groupNo}\r\n {item.groupName}\r\n \r\n ))}\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\nexport default GroupSelectPage;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { XY_CMP_GROUP_SET, GetXYComparisonGroupList, GroupListType } from '../../../function/GroupDataModel';\r\nimport GroupSelectGrid, { SelectGroupType } from '../../organisms/Pages/GroupSelectGrid';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n paper: {\r\n padding: '10px',\r\n background: '#FFFFEE',\r\n },\r\n tableContainer: { maxHeight: 'calc(100vh - 210px)' },\r\n })\r\n);\r\n\r\ntype Props = {\r\n /**\r\n * 初期表示時の絞り込みパラメータ\r\n */\r\n defalutGropuNos?: number[];\r\n};\r\n\r\nconst XYDiagramGroupSelectPage: React.FC = (props) => {\r\n const defalutGropuNos: number[] = props.defalutGropuNos ?? [];\r\n const history = useHistory();\r\n const classes = useStyles();\r\n const [groupDt, setGroupDt] = useState([]);\r\n const [groupList, setGroupList] = useState([]);\r\n\r\n useEffect(() => {\r\n //XYのグループテーブル設定取得\r\n GetXYComparisonGroupList().then((ret) => {\r\n var fillter = ret.XY_CMP_GROUP_SETs.filter((item) => item.DSP_FLG == 1);\r\n setGroupDt(fillter);\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n var lists: SelectGroupType[] = [];\r\n console.debug(['defalutGropuNo', defalutGropuNos]);\r\n if (defalutGropuNos.length === 0) {\r\n for (var i in groupDt) {\r\n lists.push({ index: Number(i) + 1, groupName: groupDt[i].GROUP_NAME, groupNo: groupDt[i].GROUP_NO });\r\n }\r\n } else {\r\n var filterDt = groupDt.filter((row) => defalutGropuNos.find((row2) => row.GROUP_NO === row2) !== undefined);\r\n for (var i in filterDt) {\r\n lists.push({\r\n index: Number(i) + 1,\r\n groupName: filterDt[i].GROUP_NAME,\r\n groupNo: filterDt[i].GROUP_NO,\r\n });\r\n }\r\n }\r\n setGroupList(lists);\r\n console.debug(lists);\r\n }, [groupDt]);\r\n\r\n const groupSelect = (selectdata: SelectGroupType) => {\r\n var target = groupDt.find((row) => row.GROUP_NO == selectdata.groupNo);\r\n history.push({\r\n pathname: '/XYDiagramPage',\r\n state: target,\r\n });\r\n };\r\n\r\n return ;\r\n};\r\n\r\nexport default XYDiagramGroupSelectPage;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { RT_TRD_GROUP_SET, GetRealTimeTrendGroupList, GroupListType } from '../../../function/GroupDataModel';\r\nimport GroupSelectGrid, { SelectGroupType } from '../../organisms/Pages/GroupSelectGrid';\r\nimport { useHistory } from 'react-router-dom';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n paper: {\r\n padding: '10px',\r\n background: '#FFFFEE',\r\n },\r\n tableContainer: { maxHeight: 'calc(100vh - 210px)' },\r\n })\r\n);\r\n\r\ntype Props = {\r\n /**\r\n * 初期表示時の絞り込みパラメータ\r\n */\r\n defalutGropuNos?: number[];\r\n};\r\n\r\nconst RealTimeTrendGraphGroupSelectPage: React.FC = (props) => {\r\n const defalutGropuNos: number[] = props.defalutGropuNos ?? [];\r\n const history = useHistory();\r\n const classes = useStyles();\r\n\r\n const [groupDt, setGroupDt] = useState([]);\r\n const [groupList, setGroupList] = useState([]);\r\n\r\n useEffect(() => {\r\n GetRealTimeTrendGroupList().then((ret) => {\r\n const gpList = ret.RT_TRD_GROUP_SETs.filter((r) => r.DSP_FLG === 1);\r\n setGroupDt(gpList);\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n var lists: SelectGroupType[] = [];\r\n console.debug(['★defalutGropuNo★', defalutGropuNos]);\r\n if (defalutGropuNos.length === 0) {\r\n for (var i in groupDt) {\r\n lists.push({ index: Number(i) + 1, groupName: groupDt[i].GROUP_NAME, groupNo: groupDt[i].GROUP_NO });\r\n }\r\n } else {\r\n var filterDt = groupDt.filter((row) => defalutGropuNos.find((row2) => row.GROUP_NO === row2) !== undefined);\r\n for (var i in filterDt) {\r\n lists.push({\r\n index: Number(i) + 1,\r\n groupName: filterDt[i].GROUP_NAME,\r\n groupNo: filterDt[i].GROUP_NO,\r\n });\r\n }\r\n }\r\n setGroupList(lists);\r\n console.debug(lists);\r\n }, [groupDt]);\r\n\r\n const groupSelect = (selectdata: SelectGroupType) => {\r\n var target = groupDt.find((row) => row.GROUP_NO == selectdata.groupNo);\r\n history.push({\r\n pathname: '/RealTimeTrendGraphPage',\r\n state: target,\r\n });\r\n };\r\n\r\n return ;\r\n};\r\n\r\nexport default RealTimeTrendGraphGroupSelectPage;\r\n","import { useState } from 'react';\r\nimport { DialogAction } from '../../../function/useModal';\r\nimport { Dialog, DialogTitle, DialogContent, DialogActions } from '@material-ui/core';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { Button } from '@material-ui/core';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n imageTagMuiDialogPaperWidthSm: {\r\n maxWidth: '100%',\r\n },\r\n })\r\n);\r\n\r\ntype ImageDialogProps = {\r\n imagePath: string;\r\n imageName?: string;\r\n imageWidht: string;\r\n imageHeigth: string;\r\n dialog: DialogAction;\r\n title: string;\r\n};\r\n\r\nexport type ImageDialogResponse = {};\r\n\r\nconst ImageDialog: React.FC = (props: ImageDialogProps) => {\r\n const { t } = useTranslation();\r\n const [isOpen, setIsOpen] = useState(true);\r\n const classes = useStyles();\r\n return (\r\n <>\r\n {}}\r\n onExited={(e) => {\r\n props.dialog.apply({});\r\n }}\r\n >\r\n {t('ImageDialog.三次元グラフ', '三次元グラフ')}\r\n \r\n
{props.title}
\r\n {props.imageName\r\n
\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ImageDialog;\r\n","import { PLCcollectSettingType } from \"../components/Pages/MeasureSetting/CollectSetting/CollectSettingDefine\";\r\nimport { ErrorCode, ResponceDataType} from \"../ErrorCode\"\r\n\r\nexport type ImageFileType = {\r\n FilePath: string;\r\n SearchFileName: string;\r\n ResponceData: ResponceDataType;\r\n Base64ImageData: string;\r\n CollectSettingModel: PLCcollectSettingType;\r\n FileDate: string;\r\n}\r\n\r\n\r\n/**\r\n * * 三次元グラフ画像パス取得\r\n * @param plcNo PLC番号\r\n * @param aiCardNo AICARD番号\r\n * @param aiChannelNo チャンネル番号\r\n * @param selectDate 検索対象日時情報\r\n * @param searchMode 検索モード 0:日時指定 1:日のみ指定\r\n * @returns\r\n */\r\nexport const GetThreeDimensionImagePath = (plcNo : string, aiCardNo : string ,aiChannelNo : string , selectDate : string ,searchMode:number ) : Promise => {\r\n return new Promise((resolve, reject) => {\r\n const query_params = new URLSearchParams({\r\n plcNo: plcNo,\r\n aiCardNo: aiCardNo,\r\n aiChannelNo: aiChannelNo,\r\n selectDate: selectDate,\r\n searchMode : searchMode.toString()\r\n });\r\n console.debug([\"ThreeDimensionImage - ulr\", \"api/ThreeDimensionImage?\" + query_params])\r\n fetch(\"api/ThreeDimensionImage?\" + query_params)\r\n .then((res) => {\r\n if (!res.ok) {\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n reject(message);\r\n } else {\r\n return res.json();\r\n }\r\n })\r\n .then((result: ImageFileType) => {\r\n console.debug([\"ThreeDimensionImage - result\", result]);\r\n if (result.ResponceData.ErrorCode === ErrorCode.ERR_CODE_NONE) {\r\n resolve(result);\r\n }\r\n else {\r\n reject(result.ResponceData.ErrorMessage);\r\n }\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n reject(error);\r\n })\r\n })\r\n}\r\n/**\r\n * 三次元グラフ画像の情報取得\r\n * @param fileDate 取得ファイル時間\r\n * @param collectSettingModel COL_SETの情報 \r\n * @returns \r\n */\r\nexport const GetThreeDimensionImageTitle =(fileDate: string, collectSettingModel?: PLCcollectSettingType):string => {\r\n if(collectSettingModel === undefined){\r\n return '';\r\n }\r\n else{\r\n const imageTitle: string =`${collectSettingModel.MachineNo}_${collectSettingModel.MachineName}_${collectSettingModel.ItemName}_${fileDate}`;\r\n return imageTitle;\r\n }\r\n}","import React, { useContext, useState, useEffect, useRef } from 'react';\r\nimport { LogD } from '../../../function/LogLapper';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport Button from '@material-ui/core/Button';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { TrendManagementSettingType } from './TrendGraph';\r\nimport SimpleDialog from '../../atoms/Dialog/SimpleDialog';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport { useHistory } from 'react-router-dom';\r\nimport {\r\n SIG_CMP_GROUP_SET,\r\n GetXYComparisonGroupList,\r\n FFT_CMP_GROUP_SET,\r\n GetRealTimeTrendGroupTableByItemSet,\r\n RTGroupSelectDataType,\r\n} from '../../../function/GroupDataModel';\r\nimport XYDiagramGroupSelectPage from '../XYDiagram/XYDiagramGroupSelectPage';\r\nimport RealTimeTrendGraphGroupSelectPage from '../RealTimeTrendGraph/RealTimeTrendGraphGroupSelectPage';\r\nimport { AppContext } from '../../../App';\r\nimport ImageDialog, { ImageDialogResponse } from '../../molecules/Dialog/ImageDialog';\r\nimport { useModal } from '../../../function/useModal';\r\nimport { ImageFileType, GetThreeDimensionImagePath ,GetThreeDimensionImageTitle} from '../../../function/ImageFileModel';\r\nimport { PLCcollectSettingType } from '../MeasureSetting/CollectSetting/CollectSettingDefine';\r\n\r\n/**ダイアログ表示モードキー */\r\nconst DialogKindKey = {\r\n None: 'None',\r\n XYComparison: 'xyComparison',\r\n Trend: 'trend',\r\n RealTime: 'realTime',\r\n} as const;\r\n/**ダイアログ表示タイプ */\r\ntype DialgKindType = typeof DialogKindKey[keyof typeof DialogKindKey];\r\n/**引数 */\r\ntype Props = {\r\n trendSettingList: TrendManagementSettingType[];\r\n date1: string;\r\n date2: string;\r\n date3: string;\r\n};\r\n\r\nconst TrendGraphButtonList: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const history = useHistory();\r\n const { login } = useContext(AppContext);\r\n const buttonStyle = {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n };\r\n\r\n const [simpleDialogOpen, setSimpleDialogOpen] = React.useState(false);\r\n const [gropuSelectDialogOpen, setGropuSelectDialogOpen] = React.useState(false);\r\n const [showMessage, setShowMessage] = React.useState('');\r\n\r\n const [dialogKind, setDialogKind] = React.useState(DialogKindKey.None);\r\n const [selectGroupNos, setSelectGroupNos] = React.useState([0]);\r\n const [imagePath, setImagePath] = React.useState('');\r\n const [imageName, setImageName] = React.useState('');\r\n const [imageDlg, actImageDlg] = useModal();\r\n const [imageCollectSetting, setImageCollectSetting] = React.useState();\r\n const [imageFileDate, setImageFileDate] = React.useState('');\r\n\r\n //メッセージボックスタイトル\r\n const messageDialogTitle = React.useRef(t('TrendGraphButtonList.グループ選択', 'グループ選択'));\r\n\r\n const imgDlg = imageDlg ? (\r\n \r\n ) : null;\r\n //3次元ボタン有効フラグ\r\n const threeDButtonEnabled: boolean = login.GetSystemSettingModel.ThreeDButtonEnabled === 1 ? true : false;\r\n /**\r\n * グループ選択ダイアログ表示\r\n */\r\n const handleGroupSelectDialogShow = () => {\r\n setGropuSelectDialogOpen(true);\r\n };\r\n\r\n /**\r\n * グループ選択ダイアログ閉じる\r\n */\r\n const handleGroupSelectDialogClose = () => {\r\n setGropuSelectDialogOpen(false);\r\n };\r\n /**メッセージボックス閉じる */\r\n const handleSimpleDialogClose = () => {\r\n setSimpleDialogOpen(false);\r\n };\r\n\r\n /**\r\n * FFT比較ボタン押下\r\n * @returns\r\n */\r\n const FFTComparisonPagePageOpen = () => {\r\n messageDialogTitle.current = t('TrendGraphButtonList.グループ選択', 'グループ選択');\r\n\r\n //選択項目を取得\r\n var target = props.trendSettingList.filter((row) => row.IsDataSelect === true);\r\n if (target.length === 0) {\r\n setShowMessage(t('TrendGraphButtonList.項目が選択されていません', '項目が選択されていません'));\r\n setSimpleDialogOpen(true);\r\n return;\r\n }\r\n console.debug(['datas', props.date1, props.date2, props.date3]);\r\n var dt1 = props.date1;\r\n var dt2 = props.date2;\r\n var dt3 = props.date3;\r\n if (dt1 === '') {\r\n setShowMessage(t('TrendGraphButtonList.日付が選択されていません', '日付が選択されていません'));\r\n setSimpleDialogOpen(true);\r\n return;\r\n }\r\n\r\n var sendDt: FFT_CMP_GROUP_SET = {\r\n GROUP_NO: -1,\r\n GROUP_NAME: '',\r\n DSP_FLG: 1,\r\n PLC_NO1: 0,\r\n SET_NO1: 0,\r\n PLC_NO2: 0,\r\n SET_NO2: 0,\r\n PLC_NO3: 0,\r\n SET_NO3: 0,\r\n KIND1: 0,\r\n KIND2: 0,\r\n KIND3: 0,\r\n Time_No1: '',\r\n Time_No2: '',\r\n Time_No3: '',\r\n };\r\n\r\n if (target.length == 1) {\r\n //チャンネルの選択が1個の場合、時間が違うデータを比較\r\n var tRow = target[0];\r\n if (dt1 !== '') {\r\n sendDt.PLC_NO1 = Number(tRow.PLCNo);\r\n sendDt.SET_NO1 = Number(tRow.SettingNo);\r\n sendDt.KIND1 = tRow.Kind;\r\n sendDt.Time_No1 = dt1;\r\n }\r\n if (dt2 !== '') {\r\n sendDt.PLC_NO2 = Number(tRow.PLCNo);\r\n sendDt.SET_NO2 = Number(tRow.SettingNo);\r\n sendDt.Time_No2 = dt2;\r\n sendDt.KIND2 = tRow.Kind;\r\n }\r\n if (dt3 !== '') {\r\n sendDt.PLC_NO3 = Number(tRow.PLCNo);\r\n sendDt.SET_NO3 = Number(tRow.SettingNo);\r\n sendDt.Time_No3 = dt3;\r\n sendDt.KIND3 = tRow.Kind;\r\n }\r\n } else {\r\n //チャンネルの選択が複数個の場合、同じ時間で比較\r\n if (target.length >= 1) {\r\n sendDt.PLC_NO1 = Number(target[0].PLCNo);\r\n sendDt.SET_NO1 = Number(target[0].SettingNo);\r\n sendDt.KIND1 = target[0].Kind;\r\n sendDt.Time_No1 = dt1;\r\n }\r\n if (target.length >= 2) {\r\n sendDt.PLC_NO2 = Number(target[1].PLCNo);\r\n sendDt.SET_NO2 = Number(target[1].SettingNo);\r\n sendDt.KIND2 = target[1].Kind;\r\n sendDt.Time_No2 = dt1;\r\n }\r\n if (target.length >= 3) {\r\n sendDt.PLC_NO3 = Number(target[2].PLCNo);\r\n sendDt.SET_NO3 = Number(target[2].SettingNo);\r\n sendDt.KIND3 = target[2].Kind;\r\n sendDt.Time_No3 = dt1;\r\n }\r\n }\r\n //画面遷移\r\n history.push({\r\n pathname: '/FFTComparisonPage',\r\n state: sendDt,\r\n });\r\n };\r\n\r\n /**\r\n * 3次元グラフボタン\r\n */\r\n const onClickThreeDimensionOpenButton = () => {\r\n messageDialogTitle.current = t('TrendGraphButtonList.3次元グラフ選択', '3次元グラフ選択');\r\n var target = props.trendSettingList.filter((row) => row.IsDataSelect === true);\r\n if (target.length === 0) {\r\n setShowMessage(t('TrendGraphButtonList.項目が選択されていません', '項目が選択されていません'));\r\n setSimpleDialogOpen(true);\r\n return;\r\n }\r\n if (target.length !== 1) {\r\n setShowMessage(\r\n t(\r\n 'TrendGraphButtonList.項目選択は1つを選択後ボタン押下してください',\r\n '項目選択は1つを選択後,ボタン押下してください。'\r\n )\r\n );\r\n setSimpleDialogOpen(true);\r\n return;\r\n }\r\n\r\n var dt1 = props.date1;\r\n if (dt1 === '') {\r\n setShowMessage(t('TrendGraphButtonList.日付が選択されていません', '日付が選択されていません'));\r\n setSimpleDialogOpen(true);\r\n return;\r\n }\r\n\r\n console.debug(['onClickThreeDimensionOpenButton selectData , selectDate', target, dt1]);\r\n GetThreeDimensionImagePath(target[0].PLCNo, target[0].AICardNo, target[0].ChannelNo, dt1, 1)\r\n .then((r) => {\r\n if (r.FilePath === '') {\r\n setShowMessage(\r\n t('TrendGraphButtonList.ファイルがありません', 'ファイルがありません') + '\\n' + r.SearchFileName\r\n );\r\n setSimpleDialogOpen(true);\r\n } else {\r\n setImageName(r.FilePath);\r\n setImagePath(`data:image/bmp;base64,${r.Base64ImageData}`);\r\n actImageDlg\r\n .open()\r\n .apply((resp: ImageDialogResponse) => {})\r\n .cancel(() => {});\r\n setImageCollectSetting(r.CollectSettingModel);\r\n setImageFileDate(r.FileDate);\r\n }\r\n })\r\n .catch((error) => {\r\n setShowMessage(\r\n t('TrendGraphButtonList.ファイル取得中ににエラーが発生しました', 'ファイル取得中ににエラーが発生しました')\r\n );\r\n setSimpleDialogOpen(true);\r\n })\r\n .finally(() => {});\r\n };\r\n\r\n /**\r\n * 生波形ボタン押下\r\n * @returns\r\n */\r\n const RawWaveformComparisonPageOpen = () => {\r\n messageDialogTitle.current = t('TrendGraphButtonList.グループ選択', 'グループ選択');\r\n\r\n //選択項目を取得\r\n var target = props.trendSettingList.filter((row) => row.IsDataSelect === true);\r\n if (target.length === 0) {\r\n setShowMessage(t('TrendGraphButtonList.項目が選択されていません', '項目が選択されていません'));\r\n setSimpleDialogOpen(true);\r\n return;\r\n }\r\n console.debug(['datas', props.date1, props.date2, props.date3]);\r\n var dt1 = props.date1;\r\n var dt2 = props.date2;\r\n var dt3 = props.date3;\r\n if (dt1 === '') {\r\n setShowMessage(t('TrendGraphButtonList.日付が選択されていません', '日付が選択されていません'));\r\n setSimpleDialogOpen(true);\r\n return;\r\n }\r\n\r\n var sendDt: SIG_CMP_GROUP_SET = {\r\n GROUP_NO: -1,\r\n GROUP_NAME: '',\r\n DSP_FLG: 1,\r\n PLC_NO1: 0,\r\n SET_NO1: 0,\r\n PLC_NO2: 0,\r\n SET_NO2: 0,\r\n Time_No1: '',\r\n Time_No2: '',\r\n };\r\n\r\n if (target.length == 1) {\r\n //チャンネルの選択が1個の場合、時間が違うデータを比較\r\n var tRow = target[0];\r\n sendDt.PLC_NO1 = Number(tRow.PLCNo);\r\n sendDt.SET_NO1 = Number(tRow.SettingNo);\r\n sendDt.Time_No1 = dt1;\r\n\r\n if (dt2 !== '') {\r\n sendDt.PLC_NO2 = Number(tRow.PLCNo);\r\n sendDt.SET_NO2 = Number(tRow.SettingNo);\r\n sendDt.Time_No2 = dt2;\r\n }\r\n } else {\r\n //チャンネルの選択が2個の場合、同じ時間で比較\r\n var tRow = target[0];\r\n var tRow2 = target[1];\r\n sendDt.PLC_NO1 = Number(tRow.PLCNo);\r\n sendDt.SET_NO1 = Number(tRow.SettingNo);\r\n sendDt.PLC_NO2 = Number(tRow2.PLCNo);\r\n sendDt.SET_NO2 = Number(tRow2.SettingNo);\r\n\r\n sendDt.Time_No1 = dt1;\r\n sendDt.Time_No2 = dt1;\r\n }\r\n //画面遷移\r\n history.push({\r\n pathname: '/RawWaveformComparisonPage',\r\n state: sendDt,\r\n });\r\n };\r\n /**\r\n *\r\n * @returns\r\n */\r\n const handleXYPageOpen = () => {\r\n messageDialogTitle.current = t('TrendGraphButtonList.グループ選択', 'グループ選択');\r\n\r\n var target = props.trendSettingList.filter((row) => row.IsDataSelect === true);\r\n if (target.length === 0) {\r\n setShowMessage(t('TrendGraphButtonList.項目が選択されていません', '項目が選択されていません'));\r\n setSimpleDialogOpen(true);\r\n return;\r\n } else {\r\n setDialogKind(DialogKindKey.XYComparison);\r\n GetXYComparisonGroupList().then((ret) => {\r\n var groupRows = ret.XY_CMP_GROUP_SETs.filter((item) => item.DSP_FLG == 1);\r\n var targetRows = groupRows.filter(\r\n (row) =>\r\n (row.PLC_NO_X === Number(target[0].PLCNo) && row.SET_NO_X === Number(target[0].SettingNo)) ||\r\n (row.PLC_NO_Y === Number(target[0].PLCNo) && row.SET_NO_Y === Number(target[0].SettingNo))\r\n );\r\n\r\n if (targetRows.length != 0) {\r\n var gpNos: number[] = [];\r\n for (var i in targetRows) {\r\n gpNos.push(targetRows[i].GROUP_NO);\r\n }\r\n console.debug(['targetRows,gpNos', targetRows, gpNos]);\r\n setSelectGroupNos(gpNos);\r\n handleGroupSelectDialogShow();\r\n } else {\r\n setShowMessage(\r\n t('TrendGraphButtonList.項目に対するグループ登録がありません', '項目に対するグループ登録がありません')\r\n );\r\n setSimpleDialogOpen(true);\r\n }\r\n });\r\n }\r\n console.debug(['handleXYPageOpen selectData', target]);\r\n };\r\n /**\r\n *リアルタイムトレンドボタン処理\r\n */\r\n const handleRealTimeTrendPageOpen = () => {\r\n messageDialogTitle.current = t('TrendGraphButtonList.グループ選択', 'グループ選択');\r\n\r\n setDialogKind(DialogKindKey.RealTime);\r\n var target = props.trendSettingList.filter((row) => row.IsDataSelect === true);\r\n\r\n if (target.length === 0) {\r\n setShowMessage(t('TrendGraphButtonList.項目が選択されていません', '項目が選択されていません'));\r\n setSimpleDialogOpen(true);\r\n return;\r\n }\r\n\r\n GetRealTimeTrendGroupTableByItemSet().then((ret) => {\r\n var targetRows = ret.filter(\r\n (r) => r.trdItemSet.PLC_NO === Number(target[0].PLCNo) && r.trdItemSet.SET_NO === Number(target[0].SettingNo)\r\n );\r\n if (targetRows.length === 0) {\r\n setShowMessage(\r\n t('TrendGraphButtonList.項目に対するグループ登録がありません', '項目に対するグループ登録がありません')\r\n );\r\n setSimpleDialogOpen(true);\r\n return;\r\n }\r\n\r\n //groupNoで、groupby\r\n console.debug(['targetRows★', targetRows]);\r\n var groupRows = targetRows.filter(\r\n (el: RTGroupSelectDataType, index, self) =>\r\n self.findIndex((e: RTGroupSelectDataType) => e.trdGroupSet.GROUP_NO === el.trdGroupSet.GROUP_NO) === index\r\n );\r\n console.debug(['groupRows', groupRows]);\r\n\r\n if (groupRows.length != 0) {\r\n var gpNos: number[] = [];\r\n for (var i in groupRows) {\r\n gpNos.push(groupRows[i].trdGroupSet.GROUP_NO);\r\n }\r\n setSelectGroupNos(gpNos);\r\n handleGroupSelectDialogShow();\r\n }\r\n });\r\n };\r\n\r\n return (\r\n \r\n {login.IsIoT === true ? (\r\n ''\r\n ) : (\r\n \r\n \r\n {t('TrendGraphButtonList.リアルタイムトレンド', 'リアルタイムトレンド')}\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n {t('TrendGraphButtonList.生波形比較', '生波形比較')}\r\n \r\n \r\n \r\n \r\n {t('TrendGraphButtonList.FFT比較', 'FFT比較')}\r\n \r\n \r\n {threeDButtonEnabled === true ? (\r\n \r\n \r\n {t('TrendGraphButtonList.三次元グラフ', '三次元グラフ')}\r\n \r\n \r\n ) : null}\r\n\r\n \r\n {dialogKind == DialogKindKey.XYComparison ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n {showMessage}\r\n \r\n {imgDlg}\r\n \r\n );\r\n};\r\n\r\nexport default TrendGraphButtonList;\r\n","import React, { useState, useEffect } from 'react';\r\nimport dayjs from 'dayjs';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { TrendManagementSettingType, createDefaltTrendSetting, GetTrendSettingList } from './TrendGraph';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableTitleCell: {\r\n maxWidth: '30px',\r\n minWidth: '30px',\r\n padding: '1px',\r\n textAlign: 'right',\r\n fontSize: '15px',\r\n borderBottomWidth: '0px',\r\n },\r\n tableCell: {\r\n border: '1px solid rgba(0, 0, 0, 1)',\r\n backgroundColor: 'white',\r\n maxWidth: '30px',\r\n minWidth: '30px',\r\n padding: '1px',\r\n textAlign: 'center',\r\n },\r\n tableSelectCell: {\r\n border: '1px solid rgba(0, 0, 0, 1)',\r\n backgroundColor: '#FFFFBB',\r\n maxWidth: '30px',\r\n minWidth: '30px',\r\n padding: '1px',\r\n textAlign: 'center',\r\n },\r\n })\r\n);\r\n\r\ntype Props = {\r\n date1: string;\r\n date2: string;\r\n date3: string;\r\n selectIndex: number;\r\n onChangeDateSelectIndex: (index: number) => void;\r\n onDeleteDateSelectIndex: (index: number) => void;\r\n};\r\n\r\nconst TrendGraphDaySelects: React.FC = (props) => {\r\n console.debug('==TrendGraphDaySelects==');\r\n\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n\r\n const handleDataCellClick = (selectIndex: number) => {\r\n props.onChangeDateSelectIndex(selectIndex);\r\n };\r\n\r\n const onDataCellDoubleClick = (selectIndex: number) => {\r\n props.onDeleteDateSelectIndex(selectIndex);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n {t('TrendGraphDaySelects.日付選択', '日付選択:')}\r\n handleDataCellClick(1)}\r\n onDoubleClick={(e) => onDataCellDoubleClick(1)}\r\n >\r\n {props.date1}\r\n \r\n handleDataCellClick(2)}\r\n onDoubleClick={(e) => onDataCellDoubleClick(2)}\r\n >\r\n {props.date2}\r\n \r\n handleDataCellClick(3)}\r\n onDoubleClick={(e) => onDataCellDoubleClick(3)}\r\n >\r\n {props.date3}\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default TrendGraphDaySelects;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { useModal, DialogAction } from '../../../function/useModal';\r\nimport { Button, Dialog, DialogTitle, DialogContent, DialogActions } from '@material-ui/core';\r\nimport { CompactPicker } from 'react-color';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ntype ColorPickerProps = {\r\n color: number;\r\n setColor: (color: number) => void;\r\n};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n container: {\r\n display: 'flex',\r\n margin: '4px',\r\n borderStyle: 'solid',\r\n borderWidth: '1px',\r\n height: '20px',\r\n width: '20px',\r\n },\r\n })\r\n);\r\n\r\nconst ColorPicker: React.FC = (props: ColorPickerProps) => {\r\n const classes = useStyles();\r\n const [colR, setColR] = useState(props.color & 0xff);\r\n const [colG, setColG] = useState((props.color & 0xff00) >> 8);\r\n const [colB, setColB] = useState((props.color & 0xff0000) >> 16);\r\n const [flgDlg, actDlg] = useModal();\r\n\r\n const color = flgDlg ? : null;\r\n\r\n useEffect(() => {\r\n setColR(props.color & 0xff);\r\n setColG((props.color & 0xff00) >> 8);\r\n setColB((props.color & 0xff0000) >> 16);\r\n }, [props.color]);\r\n\r\n return (\r\n <>\r\n {\r\n actDlg\r\n .open()\r\n .apply((res: ColorDialogResponse) => {\r\n props.setColor(res.r + (res.g << 8) + (res.b << 16));\r\n })\r\n .cancel(() => {});\r\n }}\r\n >\r\n {color}\r\n \r\n );\r\n};\r\n\r\ntype ColorDialogProps = {\r\n dialog: DialogAction;\r\n r: number;\r\n g: number;\r\n b: number;\r\n};\r\n\r\nexport type ColorDialogResponse = {\r\n r: number;\r\n g: number;\r\n b: number;\r\n};\r\n\r\nconst DefaultColor: Array = [\r\n '#FF8080',\r\n '#FFFF80',\r\n '#80FF80',\r\n '#00FF80',\r\n '#80FFFF',\r\n '#0080FF',\r\n '#FF80C0',\r\n '#FF80FF',\r\n '#FF0000',\r\n '#FFFF00',\r\n '#80FF00',\r\n '#00FF40',\r\n '#00FFFF',\r\n '#0080C0',\r\n '#8080C0',\r\n '#FF00FF',\r\n '#804040',\r\n '#FF8040',\r\n '#00FF00',\r\n '#008080',\r\n '#004080',\r\n '#8080FF',\r\n '#800040',\r\n '#FF0080',\r\n '#800000',\r\n '#FF8000',\r\n '#008000',\r\n '#008040',\r\n '#0000FF',\r\n '#0000A0',\r\n '#800080',\r\n '#8000FF',\r\n '#400000',\r\n '#804000',\r\n '#004000',\r\n '#004040',\r\n '#000080',\r\n '#000040',\r\n '#400040',\r\n '#400080',\r\n '#000000',\r\n '#808000',\r\n '#808040',\r\n '#808080',\r\n '#408080',\r\n '#C0C0C0',\r\n '#400042',\r\n '#FFFFFF',\r\n];\r\n\r\nconst ColorDialog: React.FC = (props: ColorDialogProps) => {\r\n const { t } = useTranslation();\r\n const [isOpen, setIsOpen] = useState(true);\r\n const [mode, setMode] = useState(true);\r\n const [colR, setColR] = useState(props.r);\r\n const [colG, setColG] = useState(props.g);\r\n const [colB, setColB] = useState(props.b);\r\n\r\n return (\r\n <>\r\n {}}\r\n onExited={(e) => {\r\n if (mode) {\r\n props.dialog.apply({\r\n r: colR,\r\n g: colG,\r\n b: colB,\r\n });\r\n } else {\r\n props.dialog.cancel();\r\n }\r\n }}\r\n >\r\n {t('ColorPicker.色選択','色選択')}\r\n \r\n {\r\n console.log(e.rgb);\r\n setColR(e.rgb.r);\r\n setColG(e.rgb.g);\r\n setColB(e.rgb.b);\r\n }}\r\n />\r\n \r\n \r\n {\r\n setIsOpen(false);\r\n setMode(true);\r\n }}\r\n >\r\n {t('ColorPicker.設定','設定')}\r\n \r\n {\r\n setIsOpen(false);\r\n setMode(false);\r\n }}\r\n >\r\n {t('ColorPicker.キャンセル','キャンセル')}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ColorPicker;\r\n","import { createStyles, makeStyles, Theme, createTheme } from '@material-ui/core/styles';\r\n\r\nconst defaultTheme = createTheme({});\r\nconst { pxToRem } = defaultTheme.typography;\r\n\r\n\r\nexport const TableBaseStyle = makeStyles(\r\n createStyles({\r\n //テーブルヘッダセル\r\n headerCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n padding: '1px',\r\n minWidth: '80px',\r\n borderCollapse: `collapse`,\r\n },\r\n headerCell_s: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n padding: '1px',\r\n minWidth: '0px',\r\n borderCollapse: `collapse`,\r\n },\r\n bodyCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '0.5px',\r\n height: '10px',\r\n },\r\n bodyCellCenter: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n orderBottomStyle: 'inset',\r\n borderLeftStyle: 'solid',\r\n borderRightStyle: 'solid',\r\n textAlign: 'center',\r\n minWidth: '80px',\r\n height: '8px',\r\n padding: '1px',\r\n },\r\n bodyRow: {\r\n '&.Mui-selected, &.Mui-selected:hover': {\r\n //背景色\r\n backgroundColor: 'yellow',\r\n '& > .MuiTableCell-root': {\r\n //文字色\r\n color: 'brack',\r\n },\r\n },\r\n },\r\n cellName: {\r\n borderStyle: 'none',\r\n width: '60px',\r\n },\r\n cellData: {\r\n borderStyle: 'none',\r\n width: '220px',\r\n },\r\n //テキスト\r\n textField: {\r\n flexGrow: 1,\r\n height: '100%',\r\n width: '98%',\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n borderBottom: '1px solid #000000',\r\n borderTop: 'none',\r\n borderLeft: 'none',\r\n borderRight: 'none',\r\n textAlign: \"center\",\r\n },\r\n gridStyle: {\r\n borderStyle: 'solid',\r\n maxWidth: '600px',\r\n },\r\n\r\n })\r\n);\r\n\r\nexport const ChartBaseStyle = makeStyles(\r\n createStyles({\r\n tooltip: {\r\n background: '#FFFFEE',\r\n fontSize: '14px',\r\n padding: '10px 10px 0px 20px',\r\n },\r\n })\r\n);\r\n\r\nexport const TrendSettingStyle = makeStyles(\r\n createStyles({\r\n activeRow: {\r\n background: '#7fffd4',\r\n },\r\n itemRow: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n height: '60px',\r\n },\r\n itemSelLabel: {\r\n marginTop: '2px',\r\n marginLeft: '16px',\r\n },\r\n itemSelData: {\r\n marginTop: '2px',\r\n marginLeft: '16px',\r\n },\r\n entryLabel: {\r\n marginTop: '4px',\r\n },\r\n gridStyle: {\r\n borderStyle: 'solid',\r\n //maxWidth: '1200px',\r\n // height: 'calc(100vh - 400px)',\r\n },\r\n settingContainer: {\r\n display: 'flex',\r\n alignItems: 'flex-start',\r\n margin: '4px',\r\n },\r\n entry: {\r\n marginLeft: '8px',\r\n marginRight: '8px',\r\n width: '64px',\r\n },\r\n container: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n margin: '4px',\r\n },\r\n button: {\r\n width: '150px',\r\n marginTop: '2px',\r\n marginRight: '20px',\r\n height: '35px',\r\n },\r\n })\r\n);\r\n\r\nexport const FooterBaseStyle = makeStyles(\r\n createStyles({\r\n buttonStyle: {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n },\r\n })\r\n);\r\n","import React, { useEffect, useState, Dispatch, SetStateAction } from 'react';\r\n\r\nimport ColorPicker from '../ColorPicker';\r\nimport { TableRow, TableCell, Checkbox } from '@material-ui/core';\r\nimport ItemComboBox, { ComboBoxItemType } from '../../../atoms/ComboBox/ItemComboBox';\r\nimport { MeasureHighKind, AlmTypKind, SpeedKind, PARTIAL_DISCHARGE_PLCNO, CcTypKind } from '../../../../Constant';\r\n\r\nimport { MST_CLC_TYPE } from '../../MeasureSetting/JudgeSetting/JudgeSetting';\r\nimport { SET_PART_DIS } from '../../MeasureSetting/PartialDischargeCollection/PartialDischargeCollection';\r\n\r\nimport { JudgeInfo, V_TREND_SETTING_ITEM, KIND_NO_NAME_SET, ColSetInfo } from '../../../../function/GroupDataModel';\r\nimport { JudgeSettingSelectType, GetJudgeSettingSelectItems } from '../../../../function/JudgeSettingSelectModel';\r\nimport { ALM_KIND_SET } from '../../../../function/AlmKindSetModel';\r\nimport { IsConanAirPlc, IsPartialDischargePlc } from '../../../../function/PlcNoModel';\r\n\r\nimport { GetLimit, GetUnit, CLC_TYP_SET } from './TrendSetting';\r\nimport { TableBaseStyle, TrendSettingStyle } from './TrendSettingStyle';\r\n\r\n\r\ntype TrendSettingItemProps = {\r\n rowno: number;\r\n selectIdx: number;\r\n setSelectIdx: Dispatch>;\r\n item: V_TREND_SETTING_ITEM;\r\n updateItem: (item: V_TREND_SETTING_ITEM) => void;\r\n measKinds: ComboBoxItemType[];\r\n deviceLists: ComboBoxItemType[];\r\n itemLists: ComboBoxItemType[];\r\n dataKinds: ComboBoxItemType[];\r\n alarmKinds: ComboBoxItemType[];\r\n alarmLimits: JudgeInfo[];\r\n //deviceUnitInfos: PlcInfo[];\r\n colSetInfos: ColSetInfo[];\r\n kindNoNameSets: KIND_NO_NAME_SET[];\r\n judgeSetSelect: JudgeSettingSelectType[];\r\n mClcTypes: ComboBoxItemType[];\r\n setPartDis: SET_PART_DIS[];\r\n};\r\n\r\n/**\r\n * 計測種別のアイテム選択\r\n * @param item \r\n * @param nameSets \r\n * @returns \r\n */\r\nconst getKindIndex = (item: V_TREND_SETTING_ITEM, nameSets: KIND_NO_NAME_SET[]): number => {\r\n var index = nameSets.findIndex((r) => r.SPEED == item.SPEED && r.NAME_NO == item.KIND_NO);\r\n //console.debug(['item,nameSets,index', item, nameSets, index]);\r\n return index;\r\n};\r\n\r\nconst TrendSettingItem: React.FC = (props: TrendSettingItemProps) => {\r\n const tableStyle = TableBaseStyle();\r\n const pageStyle = TrendSettingStyle();\r\n\r\n const limit = GetLimit(\r\n props.alarmLimits,\r\n props.item.PLC_NO,\r\n props.item.AI_CARD,\r\n props.item.AI_CH,\r\n props.item.CLC,\r\n props.item.TYP_NO,\r\n props.item.KIND_NO,\r\n props.item.MCLC_TYP_ID\r\n );\r\n\r\n //console.debug(['GetLimit', props.item, limit]);\r\n //const unit = props.item.EMC_UNIT ?? props.item.UNIT;\r\n const unit = GetUnit(\r\n props.colSetInfos,\r\n props.item.PLC_NO,\r\n props.item.AI_CARD,\r\n props.item.AI_CH,\r\n props.item.CLC,\r\n props.item.KIND_NO\r\n );\r\n /**\r\n * 計測種別アイテム種痘\r\n * @returns\r\n */\r\n const measFilterCombos = (): ComboBoxItemType[] => {\r\n //console.debug(['計測種別アイテム取得', props.judgeSetSelect, props.measKinds]);\r\n return props.measKinds.filter((r) => {\r\n let v = r.tag as KIND_NO_NAME_SET;\r\n if (r.index === 0 || v == null) {\r\n //console.debug(['計測種別アイテム取得2', r, v]);\r\n return true;\r\n }\r\n if (props.judgeSetSelect.findIndex((row) => row.SPEED === v.SPEED && row.NAME_NO === v.NAME_NO) !== -1) {\r\n //console.debug(['計測種別アイテム取得3', r, v]);\r\n return true;\r\n }\r\n return false;\r\n });\r\n };\r\n\r\n /**\r\n * 項目種別アイテム種痘\r\n * @returns\r\n */\r\n const itemListFilterCombos = (): ComboBoxItemType[] => {\r\n let findCols = props.colSetInfos.filter(\r\n (csi) =>\r\n IsConanAirPlc(String(csi.PLC_NO)) === false &&\r\n csi.DEV_INDEX === props.item.DEV_INDEX &&\r\n csi.SPEED === props.item.SPEED &&\r\n csi.KIND_NO === props.item.KIND_NO\r\n );\r\n let findCols2 = props.colSetInfos.filter(\r\n (csi) =>\r\n IsConanAirPlc(String(csi.PLC_NO)) === true &&\r\n csi.DEV_INDEX === props.item.DEV_INDEX &&\r\n csi.SPEED === props.item.SPEED\r\n );\r\n //部分放電の項目名称取得\r\n let findPartialDischarge = props.kindNoNameSets.filter(\r\n (kns) =>\r\n kns.SPEED === props.item.SPEED &&\r\n kns.SPEED === 7 &&\r\n kns.NAME_NO === props.item.KIND_NO\r\n )\r\n\r\n findCols = findCols.concat(findCols2);\r\n\r\n console.debug(['itemListFilterCombos', props, findCols, findPartialDischarge]);\r\n return props.itemLists.filter((r) => {\r\n if (r.index === 0) {\r\n return true;\r\n }\r\n if (findCols.findIndex((row) => row.ITM_NAME_NO === r.index) !== -1) {\r\n return true;\r\n }\r\n if (findPartialDischarge.findIndex((row) => row.MES_NAME === r.name) !== -1) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n };\r\n\r\n /**\r\n *データ種別\r\n * @returns\r\n */\r\n const createDataKindCombos = (): ComboBoxItemType[] => {\r\n //console.debug(['データ種別選択候補リスト情報', props.item, props.dataKinds]);\r\n if (props.item.KIND_NO === MeasureHighKind.VIBRATION_SPD || props.item.KIND_NO === MeasureHighKind.VIBRATION_DSP) {\r\n //console.debug('VIBRATION_SPD');\r\n if (props.item.CLC !== 4) {\r\n props.item.CLC = 4;\r\n props.updateItem(props.item);\r\n }\r\n return props.dataKinds.filter((r) => r.index === 4);\r\n }\r\n\r\n return props.dataKinds.filter((r) => {\r\n let v = r.tag as CLC_TYP_SET;\r\n let item = props.item;\r\n\r\n if (r.index === 0 || v == null) {\r\n return true;\r\n }\r\n if (v.TYP_NO !== CcTypKind.MOVE_AVERAGE) { //移動平均非表示\r\n if (\r\n props.judgeSetSelect.findIndex(\r\n (row) => row.SPEED === item.SPEED && row.NAME_NO === item.KIND_NO && row.TYP_NO_CLC === v.TYP_NO\r\n ) !== -1\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n });\r\n };\r\n\r\n /**\r\n *演算種別\r\n * @returns\r\n */\r\n const createMclcCombos = (): ComboBoxItemType[] => {\r\n console.debug(['演算種別選択候補リスト情報', props.item, props.mClcTypes]);\r\n if (props.item.KIND_NO === MeasureHighKind.VIBRATION_SPD || props.item.KIND_NO === MeasureHighKind.VIBRATION_DSP) {\r\n return props.mClcTypes.filter((r) => {\r\n let v = r.tag as MST_CLC_TYPE;\r\n if (r.index === 0 || v == null) {\r\n return true;\r\n }\r\n if (props.item.KIND_NO === MeasureHighKind.VIBRATION_SPD && r.index === AlmTypKind.eRawSpd) {\r\n return true;\r\n }\r\n if (props.item.KIND_NO === MeasureHighKind.VIBRATION_DSP && r.index === AlmTypKind.eRawDsp) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n } else {\r\n return props.mClcTypes.filter((r) => {\r\n let v = r.tag as MST_CLC_TYPE;\r\n let item = props.item;\r\n\r\n if (r.index === 0 || v == null) {\r\n return true;\r\n }\r\n if (\r\n props.judgeSetSelect.findIndex(\r\n (row) =>\r\n row.SPEED === item.SPEED &&\r\n row.NAME_NO === item.KIND_NO &&\r\n row.TYP_NO_CLC === item.CLC &&\r\n row.MCLC_TYP_ID === v.MCLC_TYP_ID\r\n ) !== -1\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n }\r\n };\r\n /**\r\n *異常種別\r\n * @returns\r\n */\r\n const createAlarmKindCombos = (): ComboBoxItemType[] => {\r\n //console.debug(['異常種別候補リスト', props.item, props.alarmKinds]);\r\n return props.alarmKinds.filter((r) => {\r\n let v = r.tag as ALM_KIND_SET;\r\n let item = props.item;\r\n if (r.index === 0 || v.MCLC_TYP_ID === item.MCLC_TYP_ID) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n };\r\n\r\n const selectRow = () => {\r\n props.setSelectIdx(props.rowno);\r\n };\r\n\r\n /**\r\n * 警報閾値 軽故障\r\n * @returns \r\n */\r\n const CreateLFaultValue = (): string => {\r\n //console.debug([\"test\", props.item]);\r\n if (IsPartialDischargePlc(String(props.item.PLC_NO))) {\r\n let data = props.setPartDis.find((row) => row.DEV_INDEX === props.item.DEV_INDEX);\r\n if (props.item.CLC === CcTypKind.PD_TYP_NO_CLC_MAXVALUE && data?.LMT_L !== undefined) {\r\n return data.LMT_L !== null ? data.LMT_L.toFixed(4) : '';\r\n }\r\n else if (props.item.CLC === CcTypKind.PD_TYP_NO_CLC_PDVALUE && data?.LMT_L_PD !== undefined) {\r\n return data.LMT_L_PD !== null ? data.LMT_L_PD.toFixed(4) : '';\r\n }\r\n else {\r\n return '';\r\n }\r\n }\r\n else {\r\n return limit?.WRN_LIM.toFixed(4) ?? '';\r\n }\r\n };\r\n\r\n /**\r\n * \r\n * @returns 警報閾値 重故障\r\n */\r\n const CreateHFaultValue = (): string => {\r\n if (IsPartialDischargePlc(String(props.item.PLC_NO))) {\r\n let data = props.setPartDis.find((row) => row.DEV_INDEX === props.item.DEV_INDEX);\r\n if (props.item.CLC === CcTypKind.PD_TYP_NO_CLC_MAXVALUE && data?.LMT_H !== undefined) {\r\n return data.LMT_H !== null ? data.LMT_H.toFixed(4) : '';\r\n }\r\n else if (props.item.CLC === CcTypKind.PD_TYP_NO_CLC_PDVALUE && data?.LMT_H_PD !== undefined) {\r\n return data.LMT_H_PD !== null ? data.LMT_H_PD.toFixed(4) : '';\r\n }\r\n else {\r\n return '';\r\n }\r\n }\r\n else {\r\n return limit?.ALM_LIM.toFixed(4) ?? '';\r\n }\r\n }\r\n\r\n return (\r\n \r\n {/**表示有 */}\r\n selectRow()}>\r\n {\r\n props.item.DSP_FLG = e.target.checked ? 1 : 0;\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n \r\n {/**表示線 */}\r\n selectRow()}>\r\n {\r\n props.item.DSP_COLOR = col;\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n \r\n {/**計測種別 */}\r\n selectRow()}>\r\n {\r\n if (typeof e.target.value === 'string') {\r\n var k = props.kindNoNameSets[parseInt(e.target.value)];\r\n\r\n /* 計測種別が空白になった場合チェックを外す */\r\n /* 計測種別が変更された場合チェックを付ける */\r\n props.item.SPEED = e.target.value === '0' ? 0 : k.SPEED;\r\n props.item.KIND_NO = e.target.value === '0' ? 0 : k.NAME_NO;\r\n props.item.DSP_FLG = e.target.value === '0' ? 0 : 1;\r\n props.item.DEV_INDEX = e.target.value === '0' ? 0 : props.item.DEV_INDEX;\r\n props.item.ITM_NAME_NO = 0;\r\n props.item.TYP_NO = 0;\r\n props.item.CLC = 0;\r\n props.item.MCLC_TYP_ID = 0;\r\n if (k.SPEED === SpeedKind.SPEED_CONAN) {\r\n //コナンエアの場合SET_NOにKIND_NOを保持\r\n props.item.SET_NO = k.NAME_NO;\r\n }\r\n if (k.SPEED === SpeedKind.SPEED_PARTIALDISCHARGE) {\r\n //部分放電の場合PLC_NO等をSET\r\n props.item.PLC_NO = PARTIAL_DISCHARGE_PLCNO;\r\n props.item.AI_CARD = 1;\r\n props.item.AI_CH = 1;\r\n }\r\n props.updateItem(props.item);\r\n }\r\n }}\r\n />\r\n \r\n {/** 機器番号・機器名称*/}\r\n selectRow()}>\r\n {\r\n if (typeof e.target.value === 'string') {\r\n props.item.DEV_INDEX = parseInt(e.target.value);\r\n props.updateItem(props.item);\r\n }\r\n //部分放電の場合SET_NOを登録\r\n if (props.item.SPEED === SpeedKind.SPEED_PARTIALDISCHARGE) {\r\n let data = props.setPartDis.find((row) => row.DEV_INDEX === props.item.DEV_INDEX);\r\n props.item.SET_NO = data !== undefined ? data.SET_NO : 0;\r\n }\r\n }}\r\n />\r\n \r\n {/**項目名称 */}\r\n selectRow()}>\r\n {\r\n if (typeof e.target.value === 'string') {\r\n props.item.ITM_NAME_NO = parseInt(e.target.value);\r\n props.updateItem(props.item);\r\n }\r\n }}\r\n />\r\n \r\n {/* 演算方法 */}\r\n selectRow()}>\r\n {\r\n if (typeof e.target.value === 'string') {\r\n props.item.CLC = parseInt(e.target.value);\r\n props.item.MCLC_TYP_ID = 0;\r\n props.item.TYP_NO = 0;\r\n props.updateItem(props.item);\r\n }\r\n }}\r\n />\r\n \r\n {/**演算種別 */}\r\n selectRow()}>\r\n {\r\n if (typeof e.target.value === 'string') {\r\n props.item.MCLC_TYP_ID = parseInt(e.target.value);\r\n props.item.TYP_NO = 0;\r\n props.updateItem(props.item);\r\n }\r\n }}\r\n />\r\n \r\n {/** 異常内容*/}\r\n selectRow()}>\r\n {\r\n if (typeof e.target.value === 'string') {\r\n props.item.TYP_NO = parseInt(e.target.value);\r\n props.updateItem(props.item);\r\n }\r\n }}\r\n />\r\n \r\n {/**警報閾値 軽故障 */}\r\n selectRow()}>\r\n {CreateLFaultValue()}\r\n \r\n {/**警報閾値 重故障 */}\r\n selectRow()}>\r\n {CreateHFaultValue()}\r\n \r\n {/**単位 */}\r\n selectRow()}>\r\n {unit}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default TrendSettingItem;\r\n","import React from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport Button from '@material-ui/core/Button';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ntype SaveCancelProps = {\r\n saveAction: () => void;\r\n cancelAction: () => void;\r\n createAction?: () => void;\r\n deleteAction?: () => void;\r\n};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n container: {\r\n display: 'flex',\r\n margin: '4px',\r\n },\r\n button: {\r\n width: '150px',\r\n margin: '2px',\r\n },\r\n })\r\n);\r\n\r\nconst SaveCancel: React.FC = (props: SaveCancelProps) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n\r\n return (\r\n
\r\n \r\n \r\n {\r\n props.createAction !== undefined ? \r\n : null\r\n }\r\n {\r\n props.deleteAction !== undefined ?\r\n : null\r\n }\r\n
\r\n );\r\n};\r\n\r\nexport default SaveCancel;\r\n","import React from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport Button from '@material-ui/core/Button';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ntype ListControlProps = {\r\n insertAction: () => void;\r\n deleteAction: () => void;\r\n upAction: () => void;\r\n downAction: () => void;\r\n};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n container: {\r\n display: 'flex',\r\n flexFlow: 'column',\r\n margin: '4px',\r\n },\r\n button: {\r\n width: '150px',\r\n margin: '2px',\r\n },\r\n })\r\n);\r\n\r\nconst ListControl: React.FC = (props: ListControlProps) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default ListControl;\r\n","import React, { useEffect, useState } from 'react';\r\n\r\nexport type NumericEntry_inputExProps = {\r\n value: number;\r\n minValueLimit?: number;\r\n maxValueLimit?: number;\r\n onChange?: (value: number) => void;\r\n fixed?: number; //小数点桁数指定\r\n className?: string;\r\n};\r\n\r\n/**\r\n * 上下限値に応じた値を設定\r\n * @param val\r\n * @param minLimit\r\n * @param maxLimit\r\n * @returns\r\n */\r\nconst CheckValLimit = (val: number, minLimit?: number, maxLimit?: number): number => {\r\n console.debug([`CheckValLimit val = ${val} minLimit=${minLimit} maxLimit=${maxLimit}`]);\r\n var ret = val;\r\n\r\n if (minLimit != null && ret < minLimit) {\r\n ret = minLimit;\r\n }\r\n if (maxLimit != null && ret > maxLimit) {\r\n ret = maxLimit;\r\n }\r\n return ret;\r\n};\r\n\r\n/**\r\n * 数値入力 最大値 最小値 設定可能コンポーネント\r\n * @param props\r\n * @returns\r\n */\r\nconst NumericEntry_inputEx: React.FC = (props: NumericEntry_inputExProps) => {\r\n //console.debug(['NumericEntry_inputEx() - props', props]);\r\n //console.debug( props.fixed != undefined ? \"NumericEntry_inputEx true.\" : \"NumericEntry_inputEx false\");\r\n const initVal = props.fixed != undefined ? props.value.toFixed(props.fixed) : props.value.toString();\r\n const [val, setVal] = useState(initVal);\r\n\r\n useEffect(() => {\r\n //console.debug(['- useEffect - props.value, initVal ??', props.value, initVal ?? '']);\r\n setVal(initVal ?? '');\r\n }, [props.value]);\r\n\r\n return (\r\n {\r\n const iv = parseFloat(e.target.value);\r\n if (!isNaN(iv)) {\r\n setVal(e.target.value);\r\n } else {\r\n setVal('0');\r\n }\r\n }}\r\n onBlur={(e) => {\r\n const cv = CheckValLimit(parseFloat(val), props.minValueLimit, props.maxValueLimit);\r\n const ret = props.fixed != undefined ? cv.toFixed(props.fixed) : cv.toString();\r\n console.debug(`-onBlur - props.fixed:${props.fixed}, setval:${ret}`);\r\n setVal(ret);\r\n if (props.onChange) {\r\n props.onChange(Number(ret));\r\n }\r\n }}\r\n onFocus={(e) => e.target.select()}\r\n />\r\n );\r\n};\r\n\r\nexport default NumericEntry_inputEx;\r\n","import React, { useState } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { Button, Dialog, DialogTitle, DialogContent, DialogActions } from '@material-ui/core';\r\nimport {\r\n Table,\r\n TableContainer,\r\n TableHead,\r\n TableBody,\r\n TableRow,\r\n TableCell,\r\n} from '@material-ui/core';\r\nimport { DialogAction } from '../../../function/useModal';\r\nimport { useTranslation } from 'react-i18next';\r\nimport NumericWithNullEntry from '../../atoms/Input/NumericWithNullEntry';\r\nimport NumericEntry_inputEx from './../../atoms/Input/NumericEntry_inputEx';\r\n\r\ntype CreateGroupDialogProps = {\r\n dialog: DialogAction;\r\n /** 登録済みグループ*/\r\n exists: number[] | undefined;\r\n maxGroup: number;\r\n};\r\n\r\nexport type CreateGroupDialogResponse = {\r\n no: number;\r\n};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n button: {\r\n width: '150px',\r\n },\r\n title: {\r\n width: '150px',\r\n },\r\n error: {\r\n color: 'red',\r\n },\r\n //テキスト\r\n textField: {\r\n flexGrow: 1,\r\n height: '100%',\r\n width: '98%',\r\n backgroundcolor: 'transparent',\r\n borderBottom: '1px solid #000000',\r\n borderTop: 'none',\r\n borderLeft:'none',\r\n borderRight:'none',\r\n backgroundColor: 'transparent',\r\n textAlign: \"center\",\r\n },\r\n })\r\n);\r\n\r\nconst checkOutOfRange = (gno: number, max: number): boolean => {\r\n return gno > 0 && gno <= max;\r\n}\r\n\r\n\r\n/**\r\n * グループに登録可能な場合は1~128のグループ番号を返却\r\n * @param props \r\n * @returns \r\n */\r\nconst CreateGroupDialog: React.FC = (props: CreateGroupDialogProps) => {\r\n //console.debug(\"CreateGroupDialog()\", props);\r\n\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [isOpen, setIsOpen] = useState(true);\r\n const [mode, setMode] = useState(true);\r\n const [no, setNo] = useState(0);\r\n const [message, setMessage] = useState('');\r\n const [btnEnable, setBtnEnable] = useState(true);\r\n\r\n const validateNo = () => {\r\n console.debug(`validateNo(), no:${no}, exists:${props.exists}`);\r\n\r\n if (props.exists) {\r\n //既にグループが存在する\r\n if (props.exists.findIndex((grp) => grp === no) < 0) {\r\n if (checkOutOfRange(no, props.maxGroup)) {\r\n setMessage('');\r\n return true;\r\n }\r\n setMessage(t('CreateGroupDialog.範囲外です', '範囲外です'));\r\n } else {\r\n setMessage(t('CreateGroupDialog.既に存在するグループです', '既に存在するグループです'));\r\n }\r\n } else {\r\n //未登録グループ\r\n if (checkOutOfRange(no, props.maxGroup)) {\r\n setMessage('');\r\n return true;\r\n }\r\n setMessage(t('CreateGroupDialog.範囲外です', '範囲外です'));\r\n }\r\n return false;\r\n };\r\n\r\n return (\r\n <>\r\n { }}\r\n onExited={(e) => {\r\n if (mode) {\r\n props.dialog.apply({\r\n no: no,\r\n });\r\n } else {\r\n props.dialog.cancel();\r\n }\r\n }}\r\n >\r\n {t('CreateGroupDialog.新規グループ作成', '新規グループ作成')}\r\n \r\n \r\n \r\n \r\n \r\n {t('CreateGroupDialog.グループ番号', 'グループ番号')}\r\n \r\n \r\n \r\n \r\n \r\n {/* {\r\n console.debug('onChange -- e', e);\r\n if (e != undefined && !isNaN(e)) {\r\n setNo(e);\r\n } else {\r\n setNo(0);\r\n }\r\n }} />
\r\n {message} */}\r\n {\r\n console.debug('onChange -- e', e);\r\n if (e != undefined && !isNaN(e)) {\r\n setNo(e);\r\n } else {\r\n setNo(0);\r\n }\r\n }} />
\r\n {message}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n {\r\n if (validateNo()) {\r\n setIsOpen(false);\r\n setMode(true);\r\n }\r\n }}\r\n >\r\n {t('CreateGroupDialog.作成', '作成')}\r\n \r\n {\r\n setIsOpen(false);\r\n setMode(false);\r\n }}\r\n >\r\n {t('CreateGroupDialog.キャンセル', 'キャンセル')}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CreateGroupDialog;\r\n","import React, { useState } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { Button, Dialog, DialogTitle, DialogContent, DialogActions } from '@material-ui/core';\r\nimport { DialogAction } from '../../../function/useModal';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ntype MessageDialogProps = {\r\n dialog: DialogAction;\r\n title?: string;\r\n message: string;\r\n action?: string;\r\n};\r\n\r\nexport type MessageDialogResponse = {};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n button: {\r\n width: '150px',\r\n },\r\n })\r\n);\r\n\r\nconst MessageDialog: React.FC = (props: MessageDialogProps) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [isOpen, setIsOpen] = useState(true);\r\n const [mode, setMode] = useState(true);\r\n\r\n const msgs = props.message.split('\\n');\r\n\r\n return (\r\n <>\r\n {}}\r\n onExited={(e) => {\r\n if (mode) {\r\n props.dialog.apply({});\r\n } else {\r\n props.dialog.cancel();\r\n }\r\n }}\r\n >\r\n {props.title ?? t('MessageDialog.確認', '確認')}\r\n \r\n
\r\n {msgs.map((msg, index) => (\r\n
{msg}
\r\n ))}\r\n
\r\n
\r\n \r\n {\r\n setIsOpen(false);\r\n setMode(true);\r\n }}\r\n >\r\n {props.action ?? 'OK'}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default MessageDialog;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport {\r\n Paper,\r\n Table,\r\n TableContainer,\r\n TableBody,\r\n TableRow,\r\n TableCell,\r\n TextField,\r\n TableHead,\r\n Checkbox,\r\n Button,\r\n} from '@material-ui/core';\r\n\r\nimport TrendSettingItem from './TrendSettingItem';\r\nimport SaveCancel from '../SaveCancel';\r\nimport ColorPicker from '../ColorPicker';\r\nimport ListControl from '../ListControl';\r\nimport CreateGroupDialog, { CreateGroupDialogResponse } from '../CreateGroupDialog';\r\nimport {\r\n CreateGroupNoComboList,\r\n CreateInitTrendSettingItem,\r\n GetDefaultPenColor,\r\n CreateInitColSetInfo,\r\n CreateInitGroupSet,\r\n CreateSpecialDatTrendSettingParameter,\r\n} from './TrendSetting';\r\nimport { TableBaseStyle, TrendSettingStyle } from './TrendSettingStyle';\r\n\r\nimport ItemComboBox, { ComboBoxItemType } from '../../../atoms/ComboBox/ItemComboBox';\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../../atoms/Dialog/ConfirmDialog';\r\nimport MessageDialog, { MessageDialogResponse } from '../../../atoms/Dialog/MessageDialog';\r\nimport { SettingsState } from '../../../organisms/SelectSettings';\r\n\r\nimport {\r\n GroupListType,\r\n GetTrendGroupList,\r\n GetTrendSetting,\r\n PutTrendGroupSetting,\r\n TM_TRD_GROUP_SET,\r\n V_TREND_SETTING_ITEM,\r\n JudgeInfo,\r\n PlcInfo,\r\n ColSetInfo,\r\n KIND_NO_NAME_SET,\r\n} from '../../../../function/GroupDataModel';\r\nimport { useModal } from '../../../../function/useModal';\r\nimport { JudgeSettingSelectType, GetJudgeSettingSelectItems } from '../../../../function/JudgeSettingSelectModel';\r\nimport { IsConanAirPlc } from '../../../../function/PlcNoModel';\r\nimport {\r\n MeasureHighKind,\r\n MeasureClcType,\r\n AlmTypKind,\r\n GetVibrationSpecialNo,\r\n GetVibrationSpecialNoUnit,\r\n GetVibrationSpecialString,\r\n GetMeasureClcName,\r\n SpeedKind,\r\n} from '../../../../Constant';\r\nimport { SET_PART_DIS } from '../../MeasureSetting/PartialDischargeCollection/PartialDischargeCollection';\r\n\r\ntype TrendSettingProps = {\r\n editData: SettingsState;\r\n groupNo?: number;\r\n isDialog: boolean;\r\n};\r\n\r\ntype SaveParameter = {\r\n group: TM_TRD_GROUP_SET;\r\n list: V_TREND_SETTING_ITEM[];\r\n colset: ColSetInfo[];\r\n};\r\n\r\nconst MaxSettingRow: number = 8;\r\nconst MaxGroup: number = 128;\r\n\r\nconst TrendSettingPage: React.FC = (props: TrendSettingProps) => {\r\n const { t, i18n } = useTranslation();\r\n const tableStyle = TableBaseStyle();\r\n const pageStyle = TrendSettingStyle();\r\n\r\n const [groupNo, setGroupNo] = useState(0);\r\n const [editList, setEditList] = useState([]);\r\n const [groupName, setGroupName] = useState('');\r\n const [groupCombos, setGroupCombos] = useState();\r\n const [measCombos, setMeasCombos] = useState([]);\r\n const [deviceCombos, setDeviceCombos] = useState([]);\r\n const [itemCombos, setItemCombos] = useState([]);\r\n const [dataCombos, setDataCombos] = useState([]);\r\n const [alarmCombos, setAlarmCombos] = useState([]);\r\n const [mClcTypeCombos, setMClcTypeCombos] = useState([]);\r\n const [itemList, setItemList] = useState([]);\r\n const [kindNoNameSets, setKindNoNameSets] = useState([]);\r\n const [judgeSetSelect, setJudgeSetSelect] = useState([]);\r\n const [judgeInfo, setJudgeInfo] = useState([]);\r\n const [deviceUnitInfo, setDeviceUnitInfo] = useState([]);\r\n const [colSetInfo, setColSetInfo] = useState([]);\r\n const [cursorColor, setCursorColor] = useState(0);\r\n const [dispFlg, setDispFlg] = useState(false);\r\n const [minVal, setMinVal] = useState(0.0);\r\n const [maxVal, setMaxVal] = useState(0.0);\r\n const [selectIdx, setSelectIdx] = useState(-1);\r\n const [flgCfmDlg, actCfmDlg] = useModal();\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n const [flgCrtDlg, actCrtDlg] = useModal();\r\n const [setPartDis, setSetPartDis] = useState([]);\r\n\r\n const cfmdlg = flgCfmDlg ? (\r\n \r\n ) : null;\r\n const msgdlg = flgMsgDlg ? : null;\r\n const crtdlg = flgCrtDlg ? (\r\n ((gc) => gc.index)} maxGroup={MaxGroup} />\r\n ) : null;\r\n\r\n /**\r\n * 計測種別 言語切替\r\n */\r\n const changeLangMeasCombos = () => {\r\n //振動(速度)\r\n const idx1 = kindNoNameSets.findIndex((x) => x.NAME_NO == MeasureHighKind.VIBRATION_SPD);\r\n if (idx1 !== -1) {\r\n const name = GetVibrationSpecialString(MeasureHighKind.VIBRATION_SPD, t);\r\n kindNoNameSets[idx1].MES_NAME = name;\r\n measCombos[idx1].name = name;\r\n }\r\n //振動(変位)\r\n const idx2 = kindNoNameSets.findIndex((x) => x.NAME_NO == MeasureHighKind.VIBRATION_DSP);\r\n if (idx2 !== -1) {\r\n const name = GetVibrationSpecialString(MeasureHighKind.VIBRATION_DSP, t);\r\n kindNoNameSets[idx2].MES_NAME = name;\r\n measCombos[idx2].name = name;\r\n }\r\n //console.debug('changeLangMeasCombos', kindNoNameSets, measCombos, idx1, idx2);\r\n\r\n setKindNoNameSets(kindNoNameSets);\r\n setMeasCombos(measCombos);\r\n };\r\n\r\n /**\r\n * データ種別 言語切替\r\n */\r\n const changeLangDataCombos = (newDataCombos: ComboBoxItemType[]) => {\r\n const data = newDataCombos.find((x) => x.index == MeasureClcType.eChr);\r\n //console.debug('changeLangDataCombos', data, newDataCombos);\r\n if (data) {\r\n data.name = GetMeasureClcName(data.index, data.name, t);\r\n console.debug(['changeLangDataCombos2', data.name]);\r\n setDataCombos(\r\n newDataCombos.map((ci) => {\r\n return { index: ci.index, name: ci.name, tag: ci.tag };\r\n })\r\n );\r\n } else {\r\n setDataCombos(\r\n newDataCombos.map((ci) => {\r\n return { index: ci.index, name: ci.name, tag: ci.tag };\r\n })\r\n );\r\n }\r\n };\r\n\r\n // 言語切替\r\n useEffect(() => {\r\n console.debug(['TrendSetting useEffect', i18n, measCombos, dataCombos]);\r\n changeLangMeasCombos();\r\n changeLangDataCombos(dataCombos);\r\n }, [i18n.language]);\r\n\r\n //初期表示\r\n useEffect(() => {\r\n GetTrendGroupList().then((result: GroupListType) => {\r\n setEditList(result.TM_TRD_GROUP_SETs);\r\n\r\n //特殊項目追加\r\n CreateSpecialDatTrendSettingParameter(result.TrendSettings, t);\r\n\r\n const defkind: KIND_NO_NAME_SET = { SPEED: -1, NAME_NO: -1, MES_NAME: '' };\r\n setKindNoNameSets([defkind].concat(result.TrendSettings.KIND_NO_NAME_SETs));\r\n\r\n const defPara: ComboBoxItemType = { index: 0, name: '' };\r\n //計測種別\r\n //console.debug('setMeasCombos', result.TrendSettings.MeasKinds);\r\n setMeasCombos(\r\n [defPara].concat(\r\n result.TrendSettings.MeasKinds.map((ci) => {\r\n return { index: ci.Key, name: ci.Disp, tag: ci.Tag };\r\n })\r\n )\r\n );\r\n setDeviceCombos(\r\n [defPara].concat(\r\n result.TrendSettings.DeviceLists.map((ci) => {\r\n return { index: ci.Key, name: ci.Disp };\r\n })\r\n )\r\n );\r\n setItemCombos(\r\n [defPara].concat(\r\n result.TrendSettings.ItemLists.map((ci) => {\r\n return { index: ci.Key, name: ci.Disp };\r\n })\r\n )\r\n );\r\n //演算種別\r\n setMClcTypeCombos(\r\n [defPara].concat(\r\n result.TrendSettings.MClcTypes.map((ci) => {\r\n return { index: ci.Key, name: ci.Disp, tag: ci.Tag };\r\n })\r\n )\r\n );\r\n //データ種別\r\n //console.debug('setDataCombos', result.TrendSettings.DataKinds);\r\n const newDataCombos = result.TrendSettings.DataKinds.map((ci) => {\r\n return { index: ci.Key, name: ci.Disp, tag: ci.Tag };\r\n });\r\n //console.debug('setDataCombos2', newDataCombos);\r\n changeLangDataCombos(newDataCombos);\r\n\r\n //異常種別\r\n setAlarmCombos(\r\n [defPara].concat(\r\n result.TrendSettings.AlarmKinds.map((ci) => {\r\n return { index: ci.Key, name: ci.Disp, tag: ci.Tag };\r\n })\r\n )\r\n );\r\n setJudgeInfo(result.TrendSettings.AlarmLimits);\r\n setDeviceUnitInfo(result.TrendSettings.DeviceUnitInfos);\r\n setColSetInfo(result.TrendSettings.ColSetInfos);\r\n setJudgeSetSelect(result.TrendSettings.JudgeSetSelect);\r\n setSetPartDis(result.TrendSettings.SetPartDisList);\r\n\r\n props.editData.SaveFunction = saveCurrentSetting;\r\n props.editData.IsUpdate = false;\r\n\r\n if (props.groupNo) {\r\n setGroupNo(props.groupNo);\r\n }\r\n\r\n console.debug(['result', result]);\r\n });\r\n }, [props.editData.CancelCondition]);\r\n\r\n useEffect(() => {\r\n const groups = CreateGroupNoComboList(editList);\r\n setGroupCombos(groups);\r\n\r\n if (!editList.find((el) => el.GROUP_NO == groupNo)) {\r\n if (editList.length > 0) {\r\n const grp = editList[0];\r\n setGroupNo(grp.GROUP_NO);\r\n }\r\n }\r\n }, [editList]);\r\n\r\n //グループNo変更表示処理\r\n useEffect(() => {\r\n console.log('-- groupChange --', groupNo);\r\n setSelectIdx(-1);\r\n const grp = editList.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n console.log('groupName', grp.GROUP_NAME);\r\n setGroupName(grp.GROUP_NAME ?? '');\r\n setCursorColor(grp.DSP_COLOR);\r\n setDispFlg(grp.DSP_FLG !== 0);\r\n } else {\r\n console.log('not found group');\r\n }\r\n\r\n GetTrendSetting(groupNo).then((result: V_TREND_SETTING_ITEM[]) => {\r\n var setItems: V_TREND_SETTING_ITEM[] = [];\r\n //KINDを確認して、特殊な信号だった場合KIND_NOを入れ替える\r\n //MCLC_TYP_IDがNULLなら、デフォルトで0を設定\r\n result.forEach((r) => {\r\n //コナンエアの場合SET_NO=KIND_NOとする\r\n if (IsConanAirPlc(String(r.PLC_NO))) {\r\n r.KIND_NO = r.SET_NO;\r\n }\r\n var spNo = GetVibrationSpecialNo(r.KIND);\r\n if (spNo !== '0') {\r\n r.KIND_NO = Number(spNo);\r\n }\r\n if (r.MCLC_TYP_ID === null) {\r\n r.MCLC_TYP_ID = 0;\r\n }\r\n });\r\n for (let step = 0; step < MaxSettingRow; step++) {\r\n const penNo = step + 1;\r\n const index = result.findIndex((r) => r.PEN_NO == penNo);\r\n if (index === -1) {\r\n let insRow = CreateInitTrendSettingItem(groupNo);\r\n insRow.PEN_NO = penNo;\r\n insRow.DSP_COLOR = GetDefaultPenColor(penNo);\r\n setItems.push(insRow);\r\n } else {\r\n setItems.push(result[index]);\r\n }\r\n }\r\n\r\n console.debug(['result,setItemList', result, setItems]);\r\n setItemList(setItems);\r\n if (result.length > 0) {\r\n setMinVal(result[0].GRP_LOW);\r\n setMaxVal(result[0].GRP_HIGH);\r\n }\r\n });\r\n }, [groupNo]);\r\n\r\n /**\r\n * グルプ名変更event\r\n * @param name\r\n */\r\n const groupNameChange = (name: string) => {\r\n const grp = editList.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n setGroupName(name);\r\n grp.GROUP_NAME = name;\r\n\r\n props.editData.Target = { group: grp, list: itemList, colset: colSetInfo };\r\n props.editData.IsUpdate = true;\r\n }\r\n };\r\n\r\n const saveCurrentSetting = (param: object): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const sp = param as SaveParameter;\r\n if (sp && sp.group && sp.list) {\r\n const errmsg = validateSetting(sp.group, sp.list, sp.colset);\r\n if (errmsg === '') {\r\n console.debug([\r\n 'saveCurrentSetting - validateSetting OK sp.group, sp.list, sp.colset',\r\n sp.group,\r\n sp.list,\r\n sp.colset,\r\n ]);\r\n PutTrendGroupSetting(sp.group, sp.list)\r\n .then((count: number) => {\r\n console.log(['saveCurrentSetting end', count]);\r\n resolve('done');\r\n })\r\n .catch((reason) => reject(reason));\r\n } else {\r\n setDlgmsg(errmsg);\r\n actMsgDlg.open().apply((_) => setDlgmsg(''));\r\n }\r\n } else {\r\n reject('data nothing');\r\n }\r\n });\r\n };\r\n const deleteCurrentSetting = (param: object): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const sp = param as SaveParameter;\r\n if (sp && sp.group && sp.list) {\r\n PutTrendGroupSetting(sp.group, sp.list)\r\n .then((count: number) => {\r\n console.log(['deleteCurrentSetting end', count]);\r\n resolve('done');\r\n })\r\n .catch((reason) => reject(reason));\r\n } else {\r\n reject('data nothing');\r\n }\r\n });\r\n };\r\n const itemUpdate = (item: V_TREND_SETTING_ITEM) => {\r\n const idx = itemList.findIndex((itm) => itm.PEN_NO === item.PEN_NO);\r\n if (idx >= 0) {\r\n const temp = itemList.concat(); // 画面更新のためArrayの再生成\r\n\r\n let findCol;\r\n if (item.SPEED === SpeedKind.SPEED_CONAN) {\r\n findCol = colSetInfo.find(\r\n (csi) => csi.DEV_INDEX === item.DEV_INDEX && csi.SPEED === item.SPEED && csi.ITM_NAME_NO === item.ITM_NAME_NO\r\n );\r\n\r\n if (findCol) {\r\n item.PLC_NO = findCol.PLC_NO;\r\n item.AI_CARD = findCol.AI_CARD;\r\n item.AI_CH = findCol.AI_CH;\r\n item.UNIT = findCol.UNIT;\r\n }\r\n } else {\r\n findCol = colSetInfo.find(\r\n (csi) =>\r\n csi.KIND_NO === item.KIND_NO &&\r\n csi.DEV_INDEX === item.DEV_INDEX &&\r\n csi.ITM_NAME_NO === item.ITM_NAME_NO &&\r\n csi.SPEED === item.SPEED\r\n );\r\n if (findCol) {\r\n item.PLC_NO = findCol.PLC_NO;\r\n item.AI_CARD = findCol.AI_CARD;\r\n item.AI_CH = findCol.AI_CH;\r\n item.SET_NO = findCol.SET_NO;\r\n item.UNIT = findCol.UNIT;\r\n item.KIND_NO = findCol.KIND_NO;\r\n }\r\n }\r\n console.debug([\r\n 'item,colSetInfo,findCol',\r\n item,\r\n colSetInfo,\r\n findCol,\r\n colSetInfo.filter((r) => r.SPEED == 2 && r.KIND_NO == 2),\r\n ]);\r\n\r\n temp[idx] = item;\r\n setItemList(temp);\r\n\r\n const grp = editList.find((ed) => ed.GROUP_NO === groupNo);\r\n props.editData.Target = { group: grp, list: temp, colset: colSetInfo };\r\n props.editData.IsUpdate = true;\r\n }\r\n };\r\n\r\n const updateCursorColor = (color: number) => {\r\n setCursorColor(color);\r\n\r\n const grp = editList.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n grp.DSP_COLOR = color;\r\n\r\n props.editData.Target = { group: grp, list: itemList, colset: colSetInfo };\r\n props.editData.IsUpdate = true;\r\n }\r\n };\r\n\r\n //指定したアイテムが行データとして有効か確認\r\n const checkValidityItem = (item: V_TREND_SETTING_ITEM): boolean => {\r\n if (item.SPEED !== 0 && item.KIND_NO !== 0) {\r\n return true;\r\n }\r\n if (item.DEV_INDEX !== 0) {\r\n return true;\r\n }\r\n if (item.ITM_NAME_NO !== 0) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n const conditionRow = (source: V_TREND_SETTING_ITEM[]): V_TREND_SETTING_ITEM[] => {\r\n const temp = source.concat();\r\n if (temp.length < MaxSettingRow) {\r\n temp.push(CreateInitTrendSettingItem(groupNo));\r\n } else if (temp.length > MaxSettingRow) {\r\n temp.pop();\r\n }\r\n temp.forEach((item, idx) => (item.PEN_NO = idx + 1));\r\n return temp;\r\n };\r\n const insertRow = () => {\r\n if (selectIdx == -1) {\r\n return;\r\n }\r\n const last = itemList.slice(-1)[0];\r\n if (checkValidityItem(last)) {\r\n //インサートできない\r\n return;\r\n }\r\n //指定した行へ空データインサート\r\n itemList.splice(selectIdx, 0, CreateInitTrendSettingItem(groupNo));\r\n //末尾を削除\r\n itemList.pop();\r\n //ペンNo振りなおし\r\n itemList.forEach((item, idx) => (item.PEN_NO = idx + 1));\r\n for (let i = 0; i < itemList.length; i++) {\r\n if (itemList[i].DEV_INDEX === 0) {\r\n itemList[i].DSP_COLOR = GetDefaultPenColor(i + 1);\r\n }\r\n }\r\n console.debug(['setItemList', itemList]);\r\n setItemList(itemList.concat());\r\n\r\n const grp = editList.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n props.editData.Target = { group: grp, list: itemList, colset: colSetInfo };\r\n props.editData.IsUpdate = true;\r\n }\r\n };\r\n const deleteRow = () => {\r\n if (selectIdx == -1) {\r\n return;\r\n }\r\n //指定行を削除\r\n itemList.splice(selectIdx, 1);\r\n //末尾に行追加\r\n itemList.push(CreateInitTrendSettingItem(groupNo));\r\n //ペンNo振りなおし\r\n itemList.forEach((item, idx) => (item.PEN_NO = idx + 1));\r\n for (let i = 0; i < itemList.length; i++) {\r\n if (itemList[i].DEV_INDEX === 0) {\r\n itemList[i].DSP_COLOR = GetDefaultPenColor(i + 1);\r\n }\r\n }\r\n\r\n console.debug(['setItemList', itemList]);\r\n setItemList(itemList.concat());\r\n\r\n const grp = editList.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n props.editData.Target = { group: grp, list: itemList, colset: colSetInfo };\r\n props.editData.IsUpdate = true;\r\n }\r\n };\r\n const upRow = () => {\r\n if (selectIdx == -1) {\r\n setSelectIdx(0);\r\n return;\r\n }\r\n if (selectIdx > 0) {\r\n const trg = itemList[selectIdx];\r\n itemList[selectIdx] = itemList[selectIdx - 1];\r\n itemList[selectIdx - 1] = trg;\r\n if (itemList[selectIdx].DEV_INDEX === 0) {\r\n itemList[selectIdx].DSP_COLOR = GetDefaultPenColor(selectIdx + 1);\r\n }\r\n setItemList(conditionRow(itemList));\r\n setSelectIdx(selectIdx - 1);\r\n\r\n const grp = editList.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n props.editData.Target = { group: grp, list: itemList, colset: colSetInfo };\r\n props.editData.IsUpdate = true;\r\n }\r\n }\r\n };\r\n const downRow = () => {\r\n if (selectIdx == -1) {\r\n setSelectIdx(0);\r\n return;\r\n }\r\n if (selectIdx < MaxSettingRow - 1) {\r\n const trg = itemList[selectIdx];\r\n itemList[selectIdx] = itemList[selectIdx + 1];\r\n itemList[selectIdx + 1] = trg;\r\n if (itemList[selectIdx].DEV_INDEX === 0) {\r\n itemList[selectIdx].DSP_COLOR = GetDefaultPenColor(selectIdx + 1);\r\n }\r\n setItemList(conditionRow(itemList));\r\n setSelectIdx(selectIdx + 1);\r\n\r\n const grp = editList.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n props.editData.Target = { group: grp, list: itemList, colset: colSetInfo };\r\n props.editData.IsUpdate = true;\r\n }\r\n }\r\n };\r\n const updateDisp = (disp: boolean) => {\r\n setDispFlg(disp);\r\n const grp = editList.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n grp.DSP_FLG = disp ? 1 : 0;\r\n\r\n props.editData.Target = { group: grp, list: itemList, colset: colSetInfo };\r\n props.editData.IsUpdate = true;\r\n }\r\n };\r\n useEffect(() => {\r\n itemList.forEach((item) => (item.GRP_LOW = minVal));\r\n }, [minVal]);\r\n useEffect(() => {\r\n itemList.forEach((item) => (item.GRP_HIGH = maxVal));\r\n }, [maxVal]);\r\n\r\n const allDisp = () => {\r\n itemList.forEach((itm) => {\r\n itm.DSP_FLG = 1;\r\n });\r\n const temp = itemList.concat(); // 画面更新のためArrayの再生成\r\n setItemList(temp);\r\n\r\n const grp = editList.find((ed) => ed.GROUP_NO === groupNo);\r\n props.editData.Target = { group: grp, list: temp, colset: colSetInfo };\r\n props.editData.IsUpdate = true;\r\n };\r\n\r\n /**\r\n * 保存前の検証設定 \r\n * @param group \r\n * @param items \r\n * @param colsets \r\n * @returns \r\n */\r\n const validateSetting = (group: TM_TRD_GROUP_SET, items: V_TREND_SETTING_ITEM[], colsets: ColSetInfo[]): string => {\r\n if (group.GROUP_NAME == '') {\r\n return t('TrendSetting.グループ名必須', 'グループ名は必須です');\r\n }\r\n /* 全行の空チェック */\r\n if (items.filter((r) => r.DEV_INDEX !== 0).length === 0) {\r\n return t('TrendSetting.リストが空のためグループが削除されます', 'リストが空のためグループが削除されます');\r\n }\r\n\r\n for (var idx = 0; idx < items.length; idx++) {\r\n const item = items[idx];\r\n const itemNoInfo: string = 'no:' + String(idx + 1) + ' ';\r\n console.debug(['colsets,item, index', colsets, item, idx]);\r\n if (checkValidityItem(item)) {\r\n let trg;\r\n if (item.SPEED === SpeedKind.SPEED_CONAN) {\r\n //コナンエアの場合\r\n trg = colsets.find((colset) => {\r\n return (\r\n colset.DEV_INDEX === item.DEV_INDEX &&\r\n colset.SPEED === item.SPEED &&\r\n colset.ITM_NAME_NO === item.ITM_NAME_NO\r\n );\r\n });\r\n }\r\n else if (item.SPEED === SpeedKind.SPEED_PARTIALDISCHARGE) {\r\n //部分放電の場合\r\n trg = setPartDis.find((spd) => {\r\n console.debug([\"部分放電の場合\", spd, item])\r\n return (\r\n spd.DEV_INDEX === item.DEV_INDEX &&\r\n spd.ITM_NAME_NO === item.ITM_NAME_NO\r\n )\r\n });\r\n }\r\n else {\r\n trg = colsets.find((colset) => {\r\n return (\r\n colset.KIND_NO === item.KIND_NO &&\r\n colset.DEV_INDEX === item.DEV_INDEX &&\r\n colset.ITM_NAME_NO === item.ITM_NAME_NO &&\r\n colset.SPEED === item.SPEED\r\n );\r\n });\r\n }\r\n\r\n if (trg) {\r\n if (item.KIND_NO !== 0 && item.DEV_INDEX !== 0 && item.ITM_NAME_NO !== 0) {\r\n if (item.CLC === 0) {\r\n return (\r\n itemNoInfo + t('TrendSetting.登録データが不正です。(データ種別)', '登録データが不正です。(データ種別)')\r\n );\r\n }\r\n if (item.MCLC_TYP_ID === 0) {\r\n return (\r\n itemNoInfo + t('TrendSetting.登録データが不正です。(演算種別)', '登録データが不正です。(演算種別)')\r\n );\r\n }\r\n if (item.TYP_NO === 0) {\r\n return (\r\n itemNoInfo + t('TrendSetting.登録データが不正です。(異常内容)', '登録データが不正です。(異常内容)')\r\n );\r\n }\r\n }\r\n } else {\r\n return (\r\n itemNoInfo +\r\n t(\r\n 'TrendSetting.指定された項目が見つかりません。\\n(機器番号・項目名称からPLCNo.、AIカードNo.、CHNo.を検索)',\r\n '指定された項目が見つかりません。\\n(機器番号・項目名称からPLCNo.、AIカードNo.、CHNo.を検索)'\r\n )\r\n );\r\n }\r\n }\r\n }\r\n return '';\r\n };\r\n\r\n return (\r\n
\r\n \r\n
\r\n
{t('TrendSetting.グループNo', 'グループNo')}
\r\n
\r\n {\r\n if (typeof e.target.value === 'number') {\r\n setGroupNo(e.target.value);\r\n } else if (typeof e.target.value === 'string') {\r\n setGroupNo(parseInt(e.target.value));\r\n }\r\n }}\r\n />\r\n
\r\n
{t('TrendSetting.グループ名称', 'グループ名称')}
\r\n
\r\n {\r\n groupNameChange(e.target.value);\r\n }}\r\n />\r\n
\r\n
\r\n {/*
\r\n
{t('TrendSetting.表示', '表示')}
\r\n
\r\n {\r\n updateDisp(e.target.checked);\r\n }}\r\n />\r\n
\r\n
{t('TrendSetting.グラフ最小値', 'グラフ最小値')}
\r\n
\r\n {\r\n setMinVal(val);\r\n }}\r\n />\r\n
\r\n
{t('TrendSetting.グラフ最大値', 'グラフ最大値')}
\r\n
\r\n {\r\n setMaxVal(val);\r\n }}\r\n />\r\n
\r\n
{t('TrendSetting.カーソル', 'カーソル')}
\r\n
\r\n \r\n
\r\n
*/}\r\n\r\n
\r\n \r\n \r\n \r\n \r\n {t('TrendSetting.表示', '表示')}\r\n \r\n \r\n {t('TrendSetting.計測種別', '計測種別')}\r\n \r\n \r\n {t('TrendSetting.機器番号_機器名称', '機器番号・機器名称')}\r\n \r\n \r\n {t('TrendSetting.項目名称', ' 項目名称')}\r\n \r\n \r\n {t('TrendSetting.データ種別', 'データ種別')}\r\n \r\n \r\n {t('TrendSetting.演算種別', '演算種別')}\r\n \r\n \r\n {t('TrendSetting.異常種別', '異常種別')}\r\n \r\n \r\n {t('TrendSetting.警報閾値', '警報閾値')}\r\n \r\n \r\n {t('TrendSetting.単位', '単位')}\r\n \r\n \r\n \r\n {t('TrendSetting.有', '有')}\r\n {t('TrendSetting.線', '線')}\r\n {t('TrendSetting.軽故障', '軽故障')}\r\n {t('TrendSetting.重故障', '重故障')}\r\n \r\n \r\n \r\n {itemList.map((item, idx) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n insertRow()}\r\n deleteAction={() => deleteRow()}\r\n upAction={() => upRow()}\r\n downAction={() => downRow()}\r\n />\r\n
\r\n
\r\n {\r\n allDisp();\r\n }}\r\n >\r\n {t('TrendSetting.すべて表示', 'すべて表示')}\r\n \r\n\r\n {\r\n setDlgmsg(t('TrendSetting.保存しますか?', '保存しますか?'));\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n const grp = editList.find((ed) => ed.GROUP_NO == groupNo);\r\n if (grp) {\r\n saveCurrentSetting({ group: grp, list: itemList, colset: colSetInfo }).then((_) => {\r\n props.editData.IsSaveClose = true;\r\n props.editData.IsUpdate = false;\r\n if (props.isDialog) {\r\n props.editData.CloseSetting();\r\n }\r\n });\r\n }\r\n })\r\n .cancel(() => { });\r\n }}\r\n cancelAction={() => {\r\n if (props.editData.IsUpdate) {\r\n setDlgmsg(\r\n t(\r\n 'TrendSetting.保存していないデータを破棄します。\\nよろしいですか?',\r\n '保存していないデータを破棄します。\\nよろしいですか?'\r\n )\r\n );\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n if (props.isDialog) {\r\n props.editData.IsUpdate = false;\r\n props.editData.CloseSetting();\r\n } else {\r\n setEditList([]);\r\n setGroupNo(0);\r\n props.editData.UpdateCancel();\r\n }\r\n })\r\n .cancel(() => { });\r\n } else {\r\n if (props.isDialog) {\r\n props.editData.CloseSetting();\r\n }\r\n }\r\n }}\r\n createAction={() => {\r\n actCrtDlg.open().apply((info) => {\r\n const grp = editList.find((ed) => ed.GROUP_NO == info.no);\r\n if (!grp) {\r\n const newGrp = CreateInitGroupSet(info.no);\r\n const newList = editList.concat(newGrp).sort((g1, g2) => g1.GROUP_NO - g2.GROUP_NO);\r\n\r\n setEditList(newList);\r\n }\r\n setGroupNo(info.no);\r\n });\r\n }}\r\n deleteAction={() => {\r\n setDlgmsg(t('TrendSetting.削除しますか?', '削除しますか?'));\r\n actCfmDlg.open().apply((_) => {\r\n const grp = editList.find((ed) => ed.GROUP_NO == groupNo);\r\n if (grp) {\r\n grp.GROUP_NAME = '';\r\n deleteCurrentSetting({ group: grp, list: [], colset: colSetInfo }).then((_) => {\r\n props.editData.IsSaveClose = true;\r\n props.editData.IsUpdate = false;\r\n const newEditList = editList.filter((ed) => ed.GROUP_NO != groupNo);\r\n setEditList(newEditList);\r\n });\r\n }\r\n });\r\n }}\r\n />\r\n
\r\n
\r\n {cfmdlg}\r\n {msgdlg}\r\n {crtdlg}\r\n
\r\n );\r\n};\r\n\r\nTrendSettingPage.defaultProps = { isDialog: false };\r\n\r\nexport default TrendSettingPage;\r\n","import React, { useEffect, useState, Dispatch, SetStateAction, useMemo } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { Button } from '@material-ui/core';\r\nimport { useModal } from '../../function/useModal';\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../atoms/Dialog/ConfirmDialog';\r\n\r\nexport type MenuContents = {\r\n name: string;\r\n component: React.ComponentType;\r\n tag: string;\r\n};\r\n\r\nexport class SettingsState {\r\n private _update: boolean;\r\n private _target: object;\r\n private _callback: (param: object) => Promise;\r\n private _setIdx?: Dispatch>;\r\n private _confirm?: (state: SettingsState, tag: string) => void;\r\n private _param: object | undefined;\r\n private _saveClose: boolean;\r\n private _cancelFlip: boolean;\r\n private _parentDialogAction?: () => void;\r\n selectIndexNo?: number;\r\n\r\n /**\r\n * コンストラクタ\r\n */\r\n constructor() {\r\n console.log('settingsState initialize...');\r\n this._update = false;\r\n this._target = {};\r\n this._callback = this.dummyCallback;\r\n this._param = {};\r\n this._saveClose = false;\r\n this._cancelFlip = false;\r\n }\r\n\r\n set DispatchIndex(dispatch: Dispatch>) {\r\n this._setIdx = dispatch;\r\n }\r\n set SaveConfirmFunction(func: (state: SettingsState, tag: string) => void) {\r\n this._confirm = func;\r\n }\r\n set ParentDialogAction(func: () => void) {\r\n this._parentDialogAction = func;\r\n }\r\n\r\n /**\r\n * 更新フラグ\r\n */\r\n get IsUpdate(): boolean {\r\n return this._update;\r\n }\r\n set IsUpdate(value: boolean) {\r\n this._update = value;\r\n }\r\n\r\n /**\r\n * 関連情報\r\n */\r\n get Target(): object {\r\n return this._target;\r\n }\r\n set Target(data: object) {\r\n this._target = data;\r\n }\r\n\r\n /**\r\n * ページ呼び出しパラメータ\r\n */\r\n get PageParam(): object | undefined {\r\n return this._param;\r\n }\r\n set PageParam(param: object | undefined) {\r\n this._param = param;\r\n }\r\n\r\n /**\r\n * 保存処理\r\n */\r\n get SaveFunction(): (param: object) => Promise {\r\n return this._callback;\r\n }\r\n set SaveFunction(callback: (param: object) => Promise) {\r\n this._callback = callback;\r\n }\r\n\r\n /**\r\n * 保存処理実行フラグ\r\n */\r\n get IsSaveClose(): boolean {\r\n return this._saveClose;\r\n }\r\n set IsSaveClose(isSave: boolean) {\r\n this._saveClose = isSave;\r\n }\r\n\r\n /**\r\n * キャンセル状態\r\n */\r\n get CancelCondition(): boolean {\r\n return this._cancelFlip;\r\n }\r\n\r\n dummyCallback = (param: object): Promise => {\r\n return new Promise((resolve, reject) => {\r\n reject('');\r\n });\r\n };\r\n\r\n /**\r\n * 保存処理実行\r\n * @returns\r\n */\r\n SaveSetting(): Promise {\r\n return this._callback(this._target);\r\n }\r\n\r\n /**\r\n * 設定画面を閉じる\r\n */\r\n CloseSetting() {\r\n if (this._setIdx) {\r\n this._setIdx(-1);\r\n }\r\n }\r\n\r\n /**\r\n * 更新状態のキャンセル\r\n */\r\n UpdateCancel() {\r\n this._cancelFlip = !this._cancelFlip;\r\n }\r\n\r\n /**\r\n * 指定のメニューを直接開く\r\n * @param tagidx メニュー番号\r\n * @param param メニューパラメータ\r\n */\r\n JumpMenu(tag: string, param?: object) {\r\n this._param = param;\r\n if (this._confirm) {\r\n this._confirm(this, tag);\r\n }\r\n }\r\n\r\n /**\r\n * 親のダイアログを閉じる処理\r\n */\r\n CloseDialog() {\r\n if (this._parentDialogAction) {\r\n this._parentDialogAction();\r\n }\r\n }\r\n}\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n menuPanel: {\r\n display: 'flex',\r\n overflow: 'auto',\r\n width: '100%',\r\n marginTop: '4px',\r\n marginBottom: '4px',\r\n //marginRight: '10px',\r\n },\r\n menuButton: {\r\n width: '100%',\r\n borderStyle: 'solid',\r\n borderColor: '#c0c0c0',\r\n borderWidth: 'thin',\r\n marginLeft: '2px',\r\n mariginRight: '2px',\r\n marginBottom: '2px',\r\n textTransform: 'none',\r\n },\r\n })\r\n);\r\n\r\ntype SelectSettingsProps = {\r\n menuList: MenuContents[];\r\n isSelectMenu?: number;\r\n dialogColoseAction?: () => void;\r\n selectIndexNo?: number;\r\n};\r\n\r\nconst SelectSettings: React.FC = (props: SelectSettingsProps) => {\r\n const classes = useStyles();\r\n // const [selIdx, setSelIdx] = useState(props.setIdx);\r\n // const [noCheckCount, setNoCheckCount] = useState(0);\r\n // const [editData, ] = useState(new SettingsState());\r\n const [target, setTarget] = useState('');\r\n const [flgDlg, actDlg] = useModal();\r\n\r\n const editData = useMemo(() => new SettingsState(), []);\r\n useEffect(() => {\r\n //画面表示時にメニュー呼び出しを行う機能\r\n if (props.isSelectMenu !== undefined) {\r\n changeMenu(editData, props.menuList[0].tag)\r\n }\r\n editData.SaveConfirmFunction = changeMenu;\r\n if (props.dialogColoseAction !== undefined) {\r\n editData.CloseDialog = props.dialogColoseAction;\r\n }\r\n if (props.selectIndexNo !== undefined) {\r\n editData.selectIndexNo = props.selectIndexNo;\r\n }\r\n }, []);\r\n\r\n const changeMenu = (editState: SettingsState, targetTag: string) => {\r\n console.debug('Change menu:', targetTag);\r\n if (editState.IsUpdate) {\r\n actDlg\r\n .open()\r\n .apply((_) => {\r\n editState\r\n .SaveSetting()\r\n .then((_) => {\r\n editState.IsUpdate = false;\r\n\r\n setTarget(targetTag);\r\n })\r\n .catch((reason) => {\r\n console.error(reason);\r\n });\r\n })\r\n .cancel((_) => {\r\n editState.IsUpdate = false;\r\n\r\n setTarget(targetTag);\r\n });\r\n } else {\r\n editState.IsUpdate = false;\r\n\r\n setTarget(targetTag);\r\n }\r\n };\r\n\r\n const targetPage = props.menuList.find((pg) => pg.tag == target);\r\n const settingComponent = targetPage ? React.createElement(targetPage.component, { editData: editData }) : null;\r\n const confirm = flgDlg ? : null;\r\n\r\n return (\r\n <>\r\n
\r\n {props.menuList.map((mn, idx) => {\r\n return (\r\n {\r\n changeMenu(editData, mn.tag);\r\n }}\r\n variant=\"contained\"\r\n color={mn.tag == target ? 'primary' : 'inherit'}\r\n >\r\n {mn.name}\r\n \r\n );\r\n })}\r\n
\r\n {settingComponent}\r\n {confirm}\r\n \r\n );\r\n};\r\n\r\nexport default SelectSettings;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { Dialog, DialogTitle, DialogContent } from '@material-ui/core';\r\nimport { DialogAction } from '../../../function/useModal';\r\nimport { useTranslation } from 'react-i18next';\r\nimport TrendSettingPage from '../../Pages/GroupSettings/TrendSetting/TrendSettingPage';\r\nimport { SettingsState } from '../../organisms/SelectSettings';\r\n\r\ntype TrendSettingDialogProps = {\r\n dialog: DialogAction;\r\n groupNo: number;\r\n};\r\n\r\nexport type TrendSettingDialogResponse = {};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n dialog: {\r\n background: '#FFFFEE',\r\n },\r\n })\r\n);\r\n\r\nconst TrendSettingDialog: React.FC = (props: TrendSettingDialogProps) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [isOpen, setIsOpen] = useState(true);\r\n const [mode, setMode] = useState(true);\r\n const [no, setNo] = useState(props.groupNo);\r\n const [editData, setEditData] = useState(new SettingsState());\r\n const [dummyIdx, setDummyIdx] = useState(0);\r\n\r\n useEffect(() => {\r\n //console.debug('-- useEffect editData --', editData)\r\n editData.DispatchIndex = setDummyIdx;\r\n }, [editData]);\r\n\r\n useEffect(() => {\r\n //console.debug(['-- useEffect dummyIdx --', editData.IsUpdate, dummyIdx])\r\n if (dummyIdx < 0) {\r\n setIsOpen(false);\r\n setMode(editData.IsSaveClose);\r\n }\r\n }, [dummyIdx]);\r\n\r\n return (\r\n <>\r\n {}}\r\n onExited={(e) => {\r\n if (mode) {\r\n props.dialog.apply({});\r\n } else {\r\n props.dialog.cancel();\r\n }\r\n }}\r\n PaperProps={{ className: classes.dialog }}\r\n >\r\n {t('TrendSettingDialog.傾向管理グループ設定', '傾向管理グループ設定')}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default TrendSettingDialog;\r\n\r\n//import TrendSettingDialog, { TrendSettingDialogResponse } from '../../molecules/Dialog/TrendSettingDialog';\r\n//const [flgTSDlg, actTSDlg] = useModal();\r\n// const tsdlg = flgTSDlg ? : null;\r\n","import React, { useState, useEffect, ChangeEvent } from 'react';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Box from '@material-ui/core/Box';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n container: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n },\r\n tableTd: {\r\n fontSize: '15px',\r\n },\r\n textField: {\r\n width: 130,\r\n },\r\n //style for font size\r\n resize: {\r\n fontSize: '15px',\r\n },\r\n })\r\n);\r\n\r\ninterface DateInputProps {\r\n labelCssString?: string;\r\n label: string;\r\n labelPosition?: number;\r\n initialValue: string;\r\n onDateChange: (value: string) => void;\r\n}\r\n\r\nconst DateInput: React.FC = ({ labelCssString, label, labelPosition, initialValue, onDateChange }) => {\r\n const [selectedDateTime, setSelectedDateTime] = useState(initialValue);\r\n\r\n const classes = useStyles();\r\n\r\n useEffect(() => {\r\n if (isValidDateTime(initialValue)) {\r\n setSelectedDateTime(initialValue);\r\n }\r\n }, [initialValue]);\r\n\r\n const handleDateTimeChange = (event: ChangeEvent) => {\r\n const value = event.target.value;\r\n console.debug(value);\r\n setSelectedDateTime(value);\r\n };\r\n\r\n const isValidDateTime = (value: string) => {\r\n const minDateTime = new Date('1900-01-01T00:00').getTime();\r\n const maxDateTime = new Date('2999-12-30T00:00').getTime();\r\n const selectedDateTime = new Date(value).getTime();\r\n return selectedDateTime >= minDateTime && selectedDateTime <= maxDateTime;\r\n };\r\n\r\n return (\r\n \r\n {labelPosition === 1 &&
{label}
}\r\n {\r\n const value = event.target.value;\r\n if (isValidDateTime(value)) {\r\n onDateChange(value);\r\n } else {\r\n //console.debug(['reset', selectedDateTimeDef]);\r\n setSelectedDateTime(initialValue);\r\n }\r\n }}\r\n />\r\n
\r\n );\r\n};\r\n\r\nexport default DateInput;\r\n","import React, { useEffect, useState } from 'react';\r\nimport dayjs from 'dayjs';\r\n\r\nimport Grid from '@material-ui/core/Grid';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport Box from '@material-ui/core/Box';\r\n\r\nimport ItemCalender from '../../atoms/Calendar/ItemCalender';\r\nimport { TM_TRD_GROUP_SET } from '../../../function/GroupDataModel';\r\n\r\nimport TrendGraphItemHeader from './TrendGraphItemHeader';\r\nimport TrendGraphChart, { GraphDispSetting } from './TrendGraphChart';\r\nimport TrendGraphChartSetting from './TrendGraphChartSetting';\r\nimport {\r\n TrendGraphPageDataType,\r\n TrendManagementSettingType,\r\n createDefaltTrendSetting,\r\n GetTrendSettingList,\r\n} from './TrendGraph';\r\nimport TrendGraphPageComboBox from './TrendGraphPageComboBox';\r\nimport TrendGraphItemInfoList from './TrendGraphItemInfoList';\r\nimport TrendGraphButtonList from './TrendGraphButtonList';\r\nimport TrendGraphDaySelects from './TrendGraphDaySelects';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useModal } from '../../../function/useModal';\r\nimport TrendSettingDialog, { TrendSettingDialogResponse } from '../../molecules/Dialog/TrendSettingDialog';\r\nimport DateInput from '../../atoms/Calendar/DateInput';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n responsiveContainer: {\r\n minHeight: 'calc(100vh - 470px)',\r\n maxHeight: 'calc(100vh - 470px)',\r\n },\r\n tableCell: {\r\n padding: '0px',\r\n borderBottomWidth: '0px',\r\n },\r\n })\r\n);\r\n\r\nconst createDefaltTrendSettingList = (count: number): TrendManagementSettingType[] => {\r\n var list: TrendManagementSettingType[] = [];\r\n for (let i = 0; i < count; i++) {\r\n list.push(createDefaltTrendSetting());\r\n }\r\n return list;\r\n};\r\n\r\ntype Props = {\r\n location: { state: TM_TRD_GROUP_SET };\r\n};\r\n\r\nconst TrendGraphPage: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const selectDay: string = dayjs(new Date()).subtract(1, 'year').add(1, 'day').format('YYYY-MM-DD'); //うるう年考慮\r\n\r\n //画面選択中のグループ番号\r\n const [trendGraphPageData, setTrendGraphPageData] = useState({\r\n selectGroupNo: props.location.state != undefined ? props.location.state.GROUP_NO : 1,\r\n targetDay: dayjs(new Date()).subtract(1, 'year').add(1, 'day').format('YYYY-MM-DD'), //うるう年考慮\r\n dataUpDateTime: '',\r\n });\r\n\r\n //選択データの対象日時\r\n const [trendSettingList, setTrendSettingList] = useState(\r\n createDefaltTrendSettingList(8)\r\n );\r\n\r\n const [date1, setDate1] = useState('');\r\n const [date2, setDate2] = useState('');\r\n const [date3, setDate3] = useState('');\r\n const [selectIndex, setSelectIndex] = useState(1);\r\n\r\n //Y軸 最大/最小 入力データ\r\n const [graphDispSetting, SetGraphDispSetting] = React.useState({\r\n yMin: 0,\r\n yMax: 0,\r\n });\r\n\r\n const [flgTSDlg, actTSDlg] = useModal();\r\n\r\n useEffect(() => {\r\n getGroupNoData(trendGraphPageData.selectGroupNo);\r\n }, []);\r\n\r\n const getGroupNoData = (groupNo: number) => {\r\n GetTrendSettingList(groupNo.toString()).then((result) => {\r\n //左側アイテムをデフォルト選択\r\n if (result.length && result[0].PLCNo !== '0') {\r\n result.forEach((row) => (row.IsRowSelect = false));\r\n result[0].IsRowSelect = true;\r\n }\r\n console.debug(['getGroupNoData★', result]);\r\n setTrendSettingList([...result]);\r\n setTrendGraphPageData({\r\n ...trendGraphPageData,\r\n selectGroupNo: groupNo,\r\n dataUpDateTime: dayjs().format('YYYY-MM-DD hh:mm:ss'),\r\n });\r\n });\r\n };\r\n\r\n const changeGroupSelectNo = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n let gpNo = Number(event.target.value);\r\n getGroupNoData(gpNo);\r\n setTrendGraphPageData({ ...trendGraphPageData, selectGroupNo: gpNo });\r\n };\r\n\r\n const changeTrendSettingData = (datas: TrendManagementSettingType[]) => {\r\n var selectCount = datas.filter((r) => r.IsDataSelect).length;\r\n if (selectCount >= 2) {\r\n //今の選択状態によって日時の選択を制御する\r\n // ・項目選択は三つまでしか選択できない。\r\n // ・項目選択を二つ以上選択したとき、日付は一つしか選択できない。\r\n // ・日付を二つ以上選択したとき、項目は一つしか選択できない。\r\n setDate2('');\r\n setDate3('');\r\n setSelectIndex(1);\r\n }\r\n setTrendSettingList([...datas]);\r\n };\r\n\r\n //傾向管理設定ダイアログ\r\n const showTrendSettingDialog = () => {\r\n actTSDlg\r\n .open()\r\n .apply((resp) => {\r\n getGroupNoData(trendGraphPageData.selectGroupNo);\r\n })\r\n .cancel((resp) => {\r\n //console.debug(['cancel()',]);\r\n });\r\n };\r\n const tsdlg = flgTSDlg ? : null;\r\n\r\n const changeCalendarValue = (value: string) => {\r\n setTrendGraphPageData({ ...trendGraphPageData, targetDay: value });\r\n };\r\n\r\n /**\r\n * 日付選択テキストボックスカレント番号変更通知\r\n * @param index\r\n */\r\n const changeSelectDateIndex = (index: number) => {\r\n var selectCount = trendSettingList.filter((r) => r.IsDataSelect).length;\r\n if (selectCount >= 2) {\r\n //今の選択状態によって日時の選択を制御する\r\n // ・項目選択は三つまでしか選択できない。\r\n // ・項目選択を二つ以上選択したとき、日付は一つしか選択できない。\r\n // ・日付を二つ以上選択したとき、項目は一つしか選択できない。\r\n setSelectIndex(1);\r\n } else {\r\n setSelectIndex(index);\r\n }\r\n };\r\n\r\n /**\r\n * 日付選択テキストボック値削除\r\n * @param index\r\n */\r\n const deleteSelectData = (index: number) => {\r\n if (index == 1) {\r\n setDate1('');\r\n } else if (index == 2) {\r\n setDate2('');\r\n } else {\r\n setDate3('');\r\n }\r\n };\r\n\r\n const changeSelectDateTime = (value: string) => {\r\n if (dayjs(value).isValid()) {\r\n var t = dayjs(value).format('YYYY-MM-DD');\r\n if (t !== '1970-01-01') {\r\n switch (selectIndex) {\r\n case 1:\r\n setDate1(t);\r\n break;\r\n case 2:\r\n setDate2(t);\r\n break;\r\n case 3:\r\n setDate3(t);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n };\r\n\r\n const handleGraphSettingChange = (data: GraphDispSetting) => {\r\n console.debug(['★handleGraphSettingChange YMin、YMax★', data.yMin, data.yMax]);\r\n SetGraphDispSetting({ ...data });\r\n };\r\n\r\n const handleYMinMaxChange = (min: number, max: number) => {\r\n if (max == Infinity) {\r\n return;\r\n }\r\n if (min == Infinity) {\r\n return;\r\n }\r\n console.debug(['★handleYMinMaxChange YMin、YMax★', min, max]);\r\n SetGraphDispSetting({ ...graphDispSetting, yMin: min, yMax: max });\r\n };\r\n\r\n return (\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n {/* グラフ情報ヘッダ */}\r\n \r\n \r\n \r\n {/* グラフ情報リスト */}\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {tsdlg}\r\n
\r\n );\r\n};\r\n\r\nexport default TrendGraphPage;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { TM_TRD_GROUP_SET, GetTrendGroupList, GroupListType } from '../../../function/GroupDataModel';\r\nimport GroupSelectGrid, { SelectGroupType } from '../../organisms/Pages/GroupSelectGrid';\r\nimport { useHistory } from 'react-router-dom';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n paper: {\r\n padding: '10px',\r\n background: '#FFFFEE',\r\n },\r\n tableContainer: { maxHeight: 'calc(100vh - 210px)' },\r\n })\r\n);\r\n\r\ntype Props = {\r\n /**\r\n * 初期表示時の絞り込みパラメータ\r\n */\r\n defalutGropuNos?: number[];\r\n};\r\n\r\nconst TrendGraphGroupSelectPage: React.FC = (props) => {\r\n const defalutGropuNos: number[] = props.defalutGropuNos ?? [];\r\n const history = useHistory();\r\n const classes = useStyles();\r\n\r\n const [groupDt, setGroupDt] = useState([]);\r\n const [groupList, setGroupList] = useState([]);\r\n\r\n useEffect(() => {\r\n GetTrendGroupList().then((ret) => {\r\n setGroupDt(ret.TM_TRD_GROUP_SETs.filter((r) => r.DSP_FLG == 1));\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n var lists: SelectGroupType[] = [];\r\n console.debug(['★defalutGropuNo★', defalutGropuNos]);\r\n if (defalutGropuNos.length === 0) {\r\n for (var i in groupDt) {\r\n lists.push({ index: Number(i) + 1, groupName: groupDt[i].GROUP_NAME, groupNo: groupDt[i].GROUP_NO });\r\n }\r\n } else {\r\n var fillterDt = groupDt.filter((row) => defalutGropuNos.find((row2) => row.GROUP_NO === row2) !== undefined);\r\n for (var i in fillterDt) {\r\n lists.push({ index: Number(i) + 1, groupName: fillterDt[i].GROUP_NAME, groupNo: fillterDt[i].GROUP_NO });\r\n }\r\n }\r\n\r\n setGroupList(lists);\r\n console.debug(lists);\r\n }, [groupDt]);\r\n\r\n const groupSelect = (selectdata: SelectGroupType) => {\r\n var target = groupDt.find((row) => row.GROUP_NO == selectdata.groupNo);\r\n history.push({\r\n pathname: '/TrendGraphPage',\r\n state: target,\r\n });\r\n };\r\n\r\n return ;\r\n};\r\n\r\nexport default TrendGraphGroupSelectPage;\r\n","import React, { useEffect, useState } from 'react';\r\nimport NativeSelect from '@material-ui/core/NativeSelect';\r\nimport Box from '@material-ui/core/Box';\r\n\r\nexport type ComboBoxItemType = {\r\n index: number;\r\n name: string;\r\n};\r\n\r\ntype Props = {\r\n itemList: ComboBoxItemType[] | undefined;\r\n label: string;\r\n labelPosition?: number;//2 右ラベル表示\r\n value?: number;\r\n itemBoxStyle?: string;\r\n labelStyle?: string;\r\n onChangeEvent?: (event: React.ChangeEvent<{ name?: string; value: unknown }>) => void;\r\n};\r\n\r\n/**\r\n * コンボボックス ラベルの位置指定可能\r\n * @param props \r\n * @returns \r\n */\r\nexport const ItemComboBoxAdjLabel: React.FC = (props) => {\r\n const { labelPosition = 1 } = props;\r\n //console.debug(['ItemComboBoxAdjLabel()', props, labelPosition]);\r\n\r\n return (\r\n \r\n {labelPosition === 1 &&
{props.label}
}\r\n
\r\n \r\n {props.itemList?.map((row, index) => (\r\n \r\n ))}\r\n \r\n
\r\n {labelPosition === 2 &&
{props.label}
}\r\n
\r\n );\r\n};\r\nexport default ItemComboBoxAdjLabel;\r\n","import React, { useState, useEffect } from 'react';\r\nimport ItemComboBoxAdjLabel, { ComboBoxItemType } from '../ComboBox/ItemComboBoxAdjLabel';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Box from '@material-ui/core/Box';\r\nimport { debug, LogD } from '../../../function/LogLapper';\r\nimport dayjs from 'dayjs';\r\nimport DateInput from '../../atoms/Calendar/DateInput';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n container: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n },\r\n tableTd: {\r\n fontSize: '15px',\r\n },\r\n textField: {\r\n width: 200,\r\n },\r\n //style for font size\r\n resize: {\r\n fontSize: '15px',\r\n },\r\n\r\n labelStyle: {\r\n fontSize: '22px',\r\n },\r\n itemBoxStyle: {\r\n fontSize: '13px',\r\n },\r\n })\r\n);\r\n\r\n//時刻リスト作成\r\nconst CreateTimeList = (min: number, max: number): ComboBoxItemType[] => {\r\n var ret: ComboBoxItemType[] = [];\r\n for (let i = min; i <= max; i++) {\r\n ret.push({ index: i, name: `${('00' + i).slice(-2)}` });\r\n }\r\n //console.debug(['ret', ret]);\r\n return ret;\r\n};\r\n\r\ntype Props = {\r\n labelCssString?: string;\r\n textCssString?: string;\r\n label: string;\r\n labelPosition?: number;\r\n defaultValue: string; //format('YYYY-MM-DD HH:mm:ss');\r\n onChange: (value: string) => void;\r\n};\r\n\r\n/**\r\n * カレンダー(TextField)に時刻コンボボックスを追加したコンポーネント\r\n * @param props\r\n * @returns\r\n */\r\nconst ItemCalenderTimeEx: React.FC = (props) => {\r\n //console.debug(['- ItemCalenderTimeEx props -', props]);\r\n\r\n const { labelPosition = 1 } = props;\r\n const classes = useStyles();\r\n\r\n const [year, setYear] = useState(0);\r\n const [month, setMonth] = useState(0);\r\n const [date, setDate] = useState(0);\r\n const [hour, setHour] = useState(0);\r\n const [minute, setMinute] = useState(0);\r\n const [second, setSecond] = useState(0);\r\n const [editValue, setEditValue] = useState(props.defaultValue);\r\n\r\n const [hoursList, setHoursList] = React.useState([]);\r\n const [minutesList, setMinutesList] = React.useState([]);\r\n\r\n //コンボボックスデータ作成\r\n useEffect(() => {\r\n //console.debug(['useEffect 1']);\r\n setHoursList(CreateTimeList(0, 23));\r\n setMinutesList(CreateTimeList(0, 59));\r\n }, []);\r\n\r\n useEffect(() => {\r\n const days = dayjs(props.defaultValue);\r\n //console.debug(['useEffect 2', props.defaultValue, days]);\r\n setYear(days.year());\r\n setMonth(days.month() + 1);\r\n setDate(days.date());\r\n setHour(days.hour());\r\n setMinute(days.minute());\r\n setSecond(days.second());\r\n setEditValue(props.defaultValue);\r\n }, [props.defaultValue]);\r\n\r\n // /**\r\n // * 時刻を yyyy-MM-ddThh:mm フォーマットで返す\r\n // * @param value\r\n // * @returns\r\n // */\r\n // const convertDatetimeLocalFormat = (value: string) => {\r\n // const timeStr = dayjs(value).format('YYYY-MM-DDTHH:mm');\r\n // //console.debug(['convertDatetimeLocalFormat', value, timeStr]);\r\n // return timeStr;\r\n // };\r\n\r\n /**\r\n * 時刻を yyyy-MM-dd hh:mm フォーマットで返す\r\n * @param value\r\n * @returns\r\n */\r\n const convertDatetime = (\r\n src: string,\r\n year: number,\r\n mon: number,\r\n date: number,\r\n hour: number,\r\n min: number,\r\n sec: number\r\n ) => {\r\n const timeStr = dayjs(src)\r\n .year(year)\r\n .month(mon - 1)\r\n .date(date)\r\n .hour(hour)\r\n .minute(min)\r\n .second(sec)\r\n .format('YYYY-MM-DD HH:mm');\r\n console.debug(`convertDatetime', ${src} ==> ${timeStr}`);\r\n return timeStr;\r\n };\r\n\r\n /**\r\n * 日付選択\r\n * format 'YYYY-MM-DD HH:mm'でコールバック\r\n * @param date\r\n */\r\n const ChangeDateSelect = (date: string) => {\r\n const conv = dayjs(date);\r\n //console.debug(['ChangeDateSelect', date, conv]);\r\n const timeStr = convertDatetime(editValue, conv.year(), conv.month() + 1, conv.date(), hour, minute, second);\r\n setYear(conv.year());\r\n setMonth(conv.month() + 1);\r\n setDate(conv.date());\r\n setEditValue(timeStr);\r\n props.onChange(timeStr);\r\n };\r\n\r\n /**\r\n * 時間選択\r\n * format 'YYYY-MM-DD HH:mm'でコールバック\r\n * @param event\r\n */\r\n const ChangeHourSelect = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n var h = hoursList.find((item) => item.index === Number(event.target.value));\r\n //console.debug('ChangeHoursSelect -- ', h);\r\n if (h !== undefined) {\r\n const timeStr = convertDatetime(editValue, year, month, date, h.index, minute, second);\r\n setHour(h.index);\r\n setEditValue(timeStr);\r\n props.onChange(timeStr);\r\n }\r\n };\r\n\r\n /**\r\n * 分選択\r\n * format 'YYYY-MM-DD HH:mm'でコールバック\r\n * @param event\r\n */\r\n const ChangeMinuteSelect = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n var min = minutesList.find((item) => item.index === Number(event.target.value));\r\n //console.debug('ChangeMinuteSelect -- ', min);\r\n if (min !== undefined) {\r\n const timeStr = convertDatetime(editValue, year, month, date, hour, min.index, second);\r\n setMinute(min.index);\r\n setEditValue(timeStr);\r\n props.onChange(timeStr);\r\n }\r\n };\r\n\r\n return (\r\n \r\n {labelPosition === 1 &&
{props.label}
}\r\n
\r\n {/* カレンダー */}\r\n {\r\n console.debug('onChange', event);\r\n if (event !== '') {\r\n ChangeDateSelect(event);\r\n }\r\n }}\r\n >\r\n {
\r\n\r\n
}\r\n {/* 時間 */}\r\n \r\n\r\n {/* 分 */}\r\n \r\n \r\n {labelPosition === 2 &&
{props.label}
}\r\n
\r\n );\r\n};\r\nexport default ItemCalenderTimeEx;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { GroupListType, GetRealTimeTrendGroupList } from '../../../function/GroupDataModel';\r\nimport { ItemComboBox, ComboBoxItemType } from '../../atoms/ComboBox/ItemComboBox';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n labelStyle: {\r\n fontSize: '15px',\r\n },\r\n itemBoxStyle: {\r\n fontSize: '15px',\r\n },\r\n })\r\n);\r\n\r\ntype Props = {\r\n onChangeEvent: (event: React.ChangeEvent<{ name?: string; value: unknown }>) => void;\r\n defalutIndex: number;\r\n};\r\n\r\n//グループリスト作成\r\nconst createGroupList = (data: GroupListType): ComboBoxItemType[] => {\r\n var ret: ComboBoxItemType[] = [];\r\n if (data != null) {\r\n const gpList = data.RT_TRD_GROUP_SETs.filter((r) => r.DSP_FLG === 1);\r\n for (var i in gpList) {\r\n ret.push({\r\n index: gpList[i].GROUP_NO,\r\n name: `[${gpList[i].GROUP_NO}]` + gpList[i].GROUP_NAME,\r\n });\r\n }\r\n }\r\n return ret;\r\n};\r\n\r\nconst RealTimeTrendGraphPageComboBox: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [groupList, setGroupList] = useState([]);\r\n\r\n useEffect(() => {\r\n GetRealTimeTrendGroupList()\r\n .then((ret) => {\r\n setGroupList(createGroupList(ret));\r\n })\r\n .catch((reason) => {});\r\n }, []);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default RealTimeTrendGraphPageComboBox;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport ColorLineText from '../../atoms/Text/ColorLineText';\r\nimport * as Constant from '../../../Constant';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableStyle: {\r\n borderWidth: '1px',\r\n borderColor: '#aaaaaa',\r\n borderStyle: 'solid',\r\n background: '#e0e0e0',\r\n borderCollapse: `collapse`,\r\n width: '150px',\r\n },\r\n tdStyle: {\r\n borderWidth: '1px',\r\n borderColor: '#aaaaaa',\r\n borderStyle: 'solid',\r\n background: '#e0e0e0',\r\n padding: '0px',\r\n },\r\n tdCheckStyle: {\r\n borderWidth: '1px',\r\n borderColor: '#aaaaaa',\r\n borderStyle: 'solid',\r\n background: '#e0e0e0',\r\n padding: '2px',\r\n },\r\n })\r\n);\r\n\r\nconst RealTimeTrendGraphItemInfoHeader: React.FC = () => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const backColor = '#e0e0e0';\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
{t('RealTimeTrendGraphItemInfoHeader.表示 有', '表示 有')}{t('RealTimeTrendGraphItemInfoHeader.線色', '線色')}
\r\n {t('RealTimeTrendGraphItemInfoHeader.計測種別', '計測種別')}\r\n
\r\n {t('RealTimeTrendGraphItemInfoHeader.機器番号_機器名称', '機器番号・機器名称')}\r\n
\r\n {t('RealTimeTrendGraphItemInfoHeader.項目名称', '項目名称')}\r\n
{t('RealTimeTrendGraphItemInfoHeader.データ種別', 'データ種別')}{t('RealTimeTrendGraphItemInfoHeader.単位', '単位')}
\r\n {t('RealTimeTrendGraphItemInfoHeader.異常種別', '異常種別')}\r\n
\r\n {t('RealTimeTrendGraphItemInfoHeader.軽故障', '軽故障')}{' '}\r\n \r\n \r\n {t('RealTimeTrendGraphItemInfoHeader.重故障', '重故障')}{' '}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default RealTimeTrendGraphItemInfoHeader;\r\n","export type RealTimeTrendSettingModel = {\r\n PageNo: string;\r\n PenNo: string;\r\n IsShow: boolean;\r\n LineColor: string;\r\n PLCNo: string;\r\n AICardNo: string;\r\n ChannelNo: string;\r\n SettingNo: string;\r\n GraphScaleUpper: string;\r\n GraphScaleLower: string;\r\n ScaleNo: string;\r\n DispSpan: number;\r\n MachineIndex: string;\r\n MachineName: string;\r\n ItemName: string;\r\n OperationProcess: string;\r\n ClcTypeNo: string;\r\n RealTimeTrendValueUpper: string;\r\n RealTimeTrendValueUpperLimit: string;\r\n MeasureKindNo: string;\r\n UnitSymbol: string;\r\n Clc: number;\r\n EngineeringValueLower: string;\r\n EngineeringValueUpper: string;\r\n MultiplicationFactor: string;\r\n SpeedNo: number;\r\n LoggingPeriod: string;\r\n MeasureKindName: string;\r\n TypeNo: string;\r\n TypeName: string;\r\n Kind: number;\r\n\r\n IsRowSelect: boolean;\r\n IndexNo: number;\r\n}\r\n\r\nexport const CreateDefaltRealTimeTrendSettingModel = (): RealTimeTrendSettingModel => {\r\n var ret: RealTimeTrendSettingModel = {\r\n PageNo: \"\",\r\n PenNo: \"\",\r\n IsShow: false,\r\n LineColor: \"\",\r\n PLCNo: \"\",\r\n AICardNo: \"\",\r\n ChannelNo: \"\",\r\n SettingNo: \"\",\r\n GraphScaleUpper: \"\",\r\n GraphScaleLower: \"\",\r\n ScaleNo: \"\",\r\n DispSpan: 0,\r\n MachineIndex: \"\",\r\n MachineName: \"\",\r\n ItemName: \"\",\r\n OperationProcess: \"\",\r\n ClcTypeNo: \"\",\r\n RealTimeTrendValueUpper: \"\",\r\n RealTimeTrendValueUpperLimit: \"\",\r\n MeasureKindNo: \"\",\r\n UnitSymbol: \"\",\r\n Clc: 0,\r\n EngineeringValueLower: \"\",\r\n EngineeringValueUpper: \"\",\r\n MultiplicationFactor: \"\",\r\n SpeedNo: 0,\r\n LoggingPeriod: \"\",\r\n MeasureKindName: \"\",\r\n TypeNo: \"\",\r\n TypeName: \"\",\r\n Kind : 0,\r\n\r\n IsRowSelect: false,\r\n IndexNo: 0,\r\n };\r\n\r\n return ret;\r\n}\r\n\r\n\r\n//リアルタイムトレンドのアイテム設定一覧を取得\r\nexport const GetRealTimeTrendSettingModelList = (gropuNo: string | unknown): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/RealTimeTrendSetting/\" + gropuNo)\r\n .then((res) => res.json())\r\n .then((result: RealTimeTrendSettingModel[]) => {\r\n if (GetTrendManagementSettingTypeListValidate(result)) {\r\n\r\n console.debug(result);\r\n if (result.length != 8) {\r\n var count: number = result.length;\r\n for (let i = 0; i < (8 - count); i++) {\r\n result.push(CreateDefaltRealTimeTrendSettingModel());\r\n }\r\n }\r\n\r\n for (let i = 0; i < result.length; i++) {\r\n result[i].IndexNo = i;\r\n result[i].IsRowSelect = false;\r\n }\r\n\r\n resolve(result);\r\n }\r\n else {\r\n reject('Invalidate response');\r\n\r\n }\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\nconst GetTrendManagementSettingTypeListValidate = (data: RealTimeTrendSettingModel[]) => {\r\n if (data == undefined) return false;\r\n return true;\r\n};\r\n\r\n\r\nexport type GraphDataType = {\r\n PLCNo: string;\r\n AICardNo: string;\r\n ChannelNo: string;\r\n SettingNo: string;\r\n ValueDateTime: Date[];\r\n Value: number[];\r\n UpperValue: number;\r\n UpperLimitValue: number;\r\n}\r\n\r\nexport type GraphDataListsType = {\r\n GraphDataList: GraphDataType[];\r\n}\r\n\r\nexport const GetGraphDataListsType = (\r\n gropuNo: string | unknown,\r\n targetTime: string): Promise => {\r\n return new Promise((resolve, reject) => {\r\n\r\n var url: string = \"api/RealTimeTrendGraphModels/\" + gropuNo;\r\n var timeBetween = `?targetTime=${targetTime}`;\r\n\r\n console.debug(` GetGraphDataListsType -- ${url + timeBetween}`);\r\n fetch(url + timeBetween)\r\n .then((res) => res.json())\r\n .then((result: GraphDataListsType) => {\r\n if (GraphDataListsTypeValidate(result)) resolve(result);\r\n\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\nconst GraphDataListsTypeValidate = (data: GraphDataListsType) => {\r\n console.log(`TrandSettings ckeck ${data}`);\r\n if (data == undefined) return false;\r\n console.log(\"TrandSettings ckeck ok\");\r\n return true;\r\n};\r\n","import React, { useEffect, useState } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\n\r\nimport {\r\n LineChart,\r\n Line,\r\n XAxis,\r\n YAxis,\r\n CartesianGrid,\r\n Tooltip,\r\n Legend,\r\n Label,\r\n ResponsiveContainer,\r\n ReferenceLine,\r\n} from 'recharts';\r\nimport dayjs from 'dayjs';\r\nimport { RealTimeTrendSettingModel, GetGraphDataListsType, GraphDataListsType } from './RealTimeTrendGraph';\r\nimport * as Constant from '../../../Constant';\r\nimport { ToValueMaxRound, ToValueMinRound } from '../../../function/CalculationModel';\r\nimport { GetUnitWithClc } from '../GroupSettings/TrendSetting/TrendSetting';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n customTooltip: {\r\n background: '#FFFFEE',\r\n fontSize: '14px',\r\n padding: '10px 10px 0px 20px',\r\n },\r\n })\r\n);\r\n\r\nexport type ChartInitType = {\r\n targetDay: string;\r\n selectGroupNo: number;\r\n trendSettingList: RealTimeTrendSettingModel[];\r\n};\r\n\r\ntype GraphData = {\r\n lineName: string;\r\n lineNo: number;\r\n points: GraphPoint[];\r\n valueUpper: number;\r\n valueUpperLimit: number;\r\n selectFlg: boolean;\r\n infoColor: string;\r\n yMax: number;\r\n yMin: number;\r\n};\r\ntype GraphPoint = {\r\n datetime: Date;\r\n value: number;\r\n};\r\n\r\ntype GraphSetting = {\r\n upper: number;\r\n upperLimit: number;\r\n yMin: number;\r\n yMax: number;\r\n backColor: string;\r\n memoryFontColor: string;\r\n gridColor: string;\r\n UnitSymbol: string;\r\n xMin: string; //時間軸最小文字列\r\n xMax: string; //時間軸最大文字列\r\n};\r\n\r\nconst CreateGData = (rows: GraphDataListsType): GraphData[] => {\r\n var ret: GraphData[] = [];\r\n for (var i in rows.GraphDataList) {\r\n var item: GraphData = {\r\n lineNo: Number(i),\r\n valueUpper: rows.GraphDataList[i].UpperValue,\r\n valueUpperLimit: rows.GraphDataList[i].UpperLimitValue,\r\n selectFlg: true,\r\n points: [],\r\n infoColor: '',\r\n lineName: '',\r\n yMax: 0,\r\n yMin: 0,\r\n };\r\n\r\n for (var j in rows.GraphDataList[i].ValueDateTime) {\r\n item.points.push({ datetime: rows.GraphDataList[i].ValueDateTime[j], value: rows.GraphDataList[i].Value[j] });\r\n }\r\n var max = Math.round(Math.max(...item.points.map((p) => p.value)));\r\n var min = Math.min(...item.points.map((p) => p.value));\r\n\r\n var maxA: number;\r\n var minA: number;\r\n maxA = ToValueMaxRound(max);\r\n minA = ToValueMinRound(min);\r\n item.yMax = maxA;\r\n item.yMin = minA;\r\n\r\n ret.push(item);\r\n }\r\n return ret;\r\n};\r\n\r\ntype Props = {\r\n selectGroupNo: number;\r\n trendSettingList: RealTimeTrendSettingModel[];\r\n\r\n chartContainerStyle: string;\r\n chartInitData: ChartInitType;\r\n onYMinMaxChange: (yMin: number, yMax: number) => void;\r\n yMin: number;\r\n yMax: number;\r\n};\r\n\r\nconst RealTimeTrendGraphChart: React.FC = (props) => {\r\n const { t, i18n } = useTranslation();\r\n const classes = useStyles();\r\n console.time('[RealTimeTrendGraphChart] - timer');\r\n\r\n const [graphData, setGraphData] = useState([]);\r\n\r\n const [graphSetting, setGraphSetting] = useState({\r\n upper: 0,\r\n upperLimit: 0,\r\n yMax: 0,\r\n yMin: 0,\r\n backColor: Constant.GraphThemeLight.BACK_COLOR,\r\n memoryFontColor: Constant.GraphThemeLight.MEMORY_FONT_COLOR,\r\n gridColor: Constant.GraphThemeLight.GRID_COLOR,\r\n UnitSymbol: '',\r\n xMax: '',\r\n xMin: '',\r\n });\r\n\r\n const setData = (graphDataList: GraphData[], trendSettingList: RealTimeTrendSettingModel[]) => {\r\n if (trendSettingList != null) {\r\n var target = trendSettingList.find((item) => item.IsRowSelect);\r\n console.debug(['★target', target]);\r\n\r\n if (target != null) {\r\n graphSetting.upper = Number(target.RealTimeTrendValueUpper);\r\n graphSetting.upperLimit = Number(target.RealTimeTrendValueUpperLimit);\r\n\r\n //Y軸取得;\r\n const yMin = graphDataList == null ? 0 : Math.min(...graphDataList.map((p) => p.yMin));\r\n const yMax = graphDataList == null ? 0 : Math.max(...graphDataList.map((p) => p.yMax));\r\n\r\n graphSetting.yMax = yMax;\r\n graphSetting.yMin = yMin;\r\n graphSetting.UnitSymbol = GetUnitWithClc(\r\n Number(target.PLCNo),\r\n target.UnitSymbol,\r\n target.Clc,\r\n Number(target.MeasureKindNo),\r\n target.Kind\r\n );\r\n //console.debug([target, '★yMax', graphSetting.yMax]);\r\n //console.debug([target, '★yMin', graphSetting.yMin]);\r\n\r\n //X軸最大値セット\r\n if (graphDataList.length !== 0) {\r\n let pointCount = graphDataList[0].points.length;\r\n if (pointCount !== 0) {\r\n graphSetting.xMax = graphDataList[0].points[pointCount - 1].datetime.toString();\r\n graphSetting.xMin = graphDataList[0].points[0].datetime.toString();\r\n }\r\n }\r\n\r\n console.debug(['trendSettingList,graphSetting', target, graphSetting]);\r\n props.onYMinMaxChange(graphSetting.yMin, graphSetting.yMax);\r\n setGraphSetting({ ...graphSetting });\r\n }\r\n for (var i in graphDataList) {\r\n if (props.trendSettingList[i].PLCNo != '0') {\r\n graphDataList[i].selectFlg = props.trendSettingList[i].IsShow;\r\n graphDataList[i].infoColor = props.trendSettingList[i].LineColor;\r\n }\r\n }\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n var gs = graphSetting;\r\n gs.yMin = props.yMin;\r\n gs.yMax = props.yMax;\r\n console.debug(['useEffect props.yMax, props.yMin', props.yMax, props.yMin]);\r\n setGraphSetting({ ...gs });\r\n }, [props.yMax, props.yMin]);\r\n\r\n useEffect(() => {\r\n var dt = props.chartInitData;\r\n GetGraphDataListsType(dt.selectGroupNo.toString(), dt.targetDay).then((result) => {\r\n var tList = CreateGData(result);\r\n setData(tList, dt.trendSettingList);\r\n setGraphData(tList);\r\n console.debug(['props.chartInitData', dt]);\r\n console.debug(['tList', tList]);\r\n console.timeEnd('[RealTimeTrendGraphChart] GetGraphDataListsType - timer');\r\n });\r\n }, [props.chartInitData]);\r\n\r\n useEffect(() => {\r\n console.time('[RealTimeTrendGraphChart] trendSettingListCnage - timer');\r\n setData(graphData, props.trendSettingList);\r\n setGraphData([...graphData]);\r\n console.debug('★props.trendSettingList- useEffect★');\r\n console.debug(['★props.trendSettingList', props.trendSettingList]);\r\n console.debug(['★graphData', graphData]);\r\n console.timeEnd('[RealTimeTrendGraphChart] trendSettingListCnage - timer');\r\n }, [props.trendSettingList]);\r\n\r\n console.timeEnd('[RealTimeTrendGraphChart] - timer');\r\n\r\n const CustomTooltip = ({ active, payload, label }: any) => {\r\n //console.debug(['payload', payload]);\r\n if (active) {\r\n return (\r\n
\r\n
{dayjs(label).format('YY/MM/DD HH:mm')}
\r\n {payload?.map((r: any, index: any) => {\r\n return (\r\n
\r\n {r.name} : {Number(r.value).toFixed(3)}\r\n
\r\n );\r\n })}\r\n
\r\n );\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * x軸時間表示作成\r\n * @param min\r\n * @param max\r\n * @param dispSpan //表示周期\r\n * @returns\r\n */\r\n const GetMemoryScaleByTimeString = (min: string, max: string, dispSpan: number): string[] => {\r\n let ans: string[] = [];\r\n ans.push(min);\r\n let bairitu = 4 * dispSpan;\r\n\r\n for (let i = 0; i < 5; i++) {\r\n let addTime = dayjs(min)\r\n .add(bairitu + bairitu * i, 'h')\r\n .format('YYYY-MM-DDTHH:mm:ss')\r\n .toString();\r\n ans.push(addTime);\r\n }\r\n ans.push(max);\r\n return ans;\r\n };\r\n\r\n //allowDuplicatedCategory 重複したメモリを重ねる\r\n return (\r\n \r\n \r\n \r\n dayjs(props).format(t('RealTimeTrendGraphChart.DD日HH時mm分', 'DD日HH時mm分'))}\r\n height={30}\r\n tick={{ dy: 10 }}\r\n padding={{ right: 0, left: 0 }}\r\n />\r\n props.toFixed(2)}\r\n width={80}\r\n >\r\n \r\n \r\n } />\r\n \r\n \r\n {graphData\r\n ?.filter((r) => r.selectFlg === true)\r\n .map((row, index) => (\r\n \r\n ))}\r\n \r\n \r\n );\r\n};\r\nexport default RealTimeTrendGraphChart;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { LogD } from '../../../function/LogLapper';\r\nimport { RealTimeTrendSettingModel } from './RealTimeTrendGraph';\r\nimport { GetUnitWithClc } from '../GroupSettings/TrendSetting/TrendSetting';\r\nimport { GetMeasureClcName, GetVibrationSpecialStringByKindNo } from '../../../Constant';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ntype Props = {\r\n setData: RealTimeTrendSettingModel;\r\n isShowOnChange: (event: React.ChangeEvent, index: number) => void;\r\n isRowSelectClick: (index: number) => void;\r\n isRowSelectDoubleClick: () => void;\r\n};\r\n\r\nconst RealTimeTrendGraphItemInfo: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const isDispLog: boolean = false;\r\n console.debug(['==RealTimeTrendGraphItemInfo== ', props.setData]);\r\n\r\n const tableStyle: React.CSSProperties = {\r\n borderWidth: '1px',\r\n borderColor: '#aaaaaa',\r\n borderStyle: 'solid',\r\n backgroundColor: `${props.setData.LineColor}`,\r\n borderCollapse: `collapse`,\r\n marginLeft: '3px',\r\n width: '12%',\r\n };\r\n\r\n const tdStyle = {\r\n borderWidth: '1px',\r\n borderColor: '#aaaaaa',\r\n borderStyle: 'solid',\r\n background: props.setData.IsRowSelect ? '#ffff00' : '#ffffff',\r\n padding: '0px',\r\n };\r\n\r\n const tdStyleColor = {\r\n borderWidth: '1px',\r\n borderColor: '#aaaaaa',\r\n borderStyle: 'solid',\r\n background: `${props.setData.LineColor}`,\r\n padding: '0px',\r\n };\r\n\r\n //console.debug(['- 画面描画開始 -', props.setData]);\r\n return (\r\n \r\n {\r\n props.isRowSelectDoubleClick();\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* データ種別 */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
props.isRowSelectClick(props.setData.IndexNo)}>\r\n props.isShowOnChange(e, props.setData.IndexNo)}\r\n />\r\n
props.isRowSelectClick(props.setData.IndexNo)}>\r\n {GetVibrationSpecialStringByKindNo(props.setData.Kind, t) === ''\r\n ? props.setData.MeasureKindName\r\n : GetVibrationSpecialStringByKindNo(props.setData.Kind, t)}{' '}\r\n  \r\n
props.isRowSelectClick(props.setData.IndexNo)}>\r\n {props.setData.MachineIndex != '0' && props.setData.MachineIndex + props.setData.MachineName} \r\n
props.isRowSelectClick(props.setData.IndexNo)}>\r\n {props.setData.ItemName} \r\n
props.isRowSelectClick(props.setData.IndexNo)}>\r\n {GetMeasureClcName(props.setData.Clc, props.setData.OperationProcess, t)} \r\n props.isRowSelectClick(props.setData.IndexNo)}>\r\n {GetUnitWithClc(\r\n Number(props.setData.PLCNo),\r\n props.setData.UnitSymbol,\r\n props.setData.Clc,\r\n Number(props.setData.MeasureKindNo),\r\n props.setData.Kind\r\n )}\r\n  \r\n
props.isRowSelectClick(props.setData.IndexNo)}>\r\n {props.setData.TypeName} \r\n
props.isRowSelectClick(props.setData.IndexNo)}>\r\n {props.setData.PLCNo !== '' ? Number(props.setData.RealTimeTrendValueUpper).toFixed(4) : ' '} \r\n props.isRowSelectClick(props.setData.IndexNo)}>\r\n {props.setData.PLCNo !== '' ? Number(props.setData.RealTimeTrendValueUpperLimit).toFixed(4) : ' '} \r\n
\r\n );\r\n};\r\n\r\nexport default RealTimeTrendGraphItemInfo;\r\n","import React, { useState, useEffect } from 'react';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport RealTimeTrendGraphItemInfo from './RealTimeTrendGraphItemInfo';\r\nimport { RealTimeTrendSettingModel, GetRealTimeTrendSettingModelList } from './RealTimeTrendGraph';\r\n\r\ntype Props = {\r\n selectGroupNo: number;\r\n trendSettingList: RealTimeTrendSettingModel[];\r\n onChangeTrandSettingData: (datas: RealTimeTrendSettingModel[]) => void;\r\n onshowRealTimeTrendSettingDialog: () => void;\r\n};\r\n\r\nconst RealTimeTrendGraphItemInfoList: React.FC = (props) => {\r\n //表示チェックボックス選択\r\n const isShowOnChange = (e: React.ChangeEvent, index: number) => {\r\n var tmp = props.trendSettingList;\r\n tmp[index].IsShow = tmp[index].IsShow == true ? false : true;\r\n props.onChangeTrandSettingData(tmp);\r\n };\r\n\r\n //背景選択\r\n const isRowSelectClick = (index: number) => {\r\n console.time('[RealTimeTrendGraphItemInfoList] isRowSelectClick - timer');\r\n var tmp = props.trendSettingList;\r\n if (tmp[index].PLCNo !== '0') {\r\n tmp.forEach((row) => (row.IsRowSelect = false));\r\n tmp[index].IsRowSelect = true;\r\n }\r\n props.onChangeTrandSettingData(tmp);\r\n console.timeEnd('[RealTimeTrendGraphItemInfoList] isRowSelectClick - timer');\r\n };\r\n\r\n return (\r\n
\r\n {props.trendSettingList?.map((row, index) => (\r\n \r\n ))}\r\n
\r\n );\r\n};\r\n\r\nexport default RealTimeTrendGraphItemInfoList;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { LogD } from '../../../function/LogLapper';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport Button from '@material-ui/core/Button';\r\nimport { useTranslation } from 'react-i18next';\r\nimport SimpleDialog from '../../atoms/Dialog/SimpleDialog';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport {\r\n XY_CMP_GROUP_SET,\r\n GetXYComparisonGroupList,\r\n GetTrendGroupTableByItemSet,\r\n} from '../../../function/GroupDataModel';\r\nimport XYDiagramGroupSelectPage from '../XYDiagram/XYDiagramGroupSelectPage';\r\nimport TrendGraphGroupSelectPage from '../TrendGraph/TrendGraphGroupSelectPage';\r\nimport {\r\n RealTimeTrendSettingModel,\r\n CreateDefaltRealTimeTrendSettingModel,\r\n GetRealTimeTrendSettingModelList,\r\n} from './RealTimeTrendGraph';\r\n\r\n/**ダイアログ表示モードキー */\r\nconst DialogKindKey = {\r\n None: 'None',\r\n XYComparison: 'xyComparison',\r\n Trend: 'trend',\r\n} as const;\r\n\r\n/**ダイアログ表示タイプ */\r\ntype DialgKindType = typeof DialogKindKey[keyof typeof DialogKindKey];\r\n\r\n/**引数 */\r\ntype Props = {\r\n rTrendSettingList: RealTimeTrendSettingModel[];\r\n};\r\n\r\nconst RealTimeTrendGraphButtonList: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n\r\n const { rTrendSettingList } = props;\r\n\r\n const [simpleDialogOpen, setSimpleDialogOpen] = React.useState(false);\r\n const [gropuSelectDialogOpen, setGropuSelectDialogOpen] = React.useState(false);\r\n const [showMessage, setShowMessage] = React.useState('');\r\n\r\n const [dialogKind, setDialogKind] = React.useState(DialogKindKey.None);\r\n const [selectGroupNos, setSelectGroupNos] = React.useState([0]);\r\n\r\n const buttonStyle = {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n };\r\n\r\n /**\r\n * グループ選択ダイアログ表示\r\n */\r\n const handleGroupSelectDialogShow = () => {\r\n setGropuSelectDialogOpen(true);\r\n };\r\n /**\r\n * グループ選択ダイアログ閉じる\r\n */\r\n const handleGroupSelectDialogClose = () => {\r\n setGropuSelectDialogOpen(false);\r\n };\r\n\r\n /**メッセージボックス閉じる */\r\n const handleSimpleDialogClose = () => {\r\n setSimpleDialogOpen(false);\r\n };\r\n\r\n const handleXYPageOpen = () => {\r\n var targets = rTrendSettingList.filter((row) => row.IsRowSelect === true);\r\n if (targets.length === 0) {\r\n //エラーメッセージ\r\n setShowMessage(t('RealTimeTrendGraphButtonList.項目が選択されていません', '項目が選択されていません'));\r\n setSimpleDialogOpen(true);\r\n return;\r\n }\r\n setDialogKind(DialogKindKey.XYComparison);\r\n GetXYComparisonGroupList().then((ret) => {\r\n var groupRows = ret.XY_CMP_GROUP_SETs.filter((item) => item.DSP_FLG == 1);\r\n var targetRows = groupRows.filter(\r\n (row) =>\r\n (row.PLC_NO_X === Number(targets[0].PLCNo) && row.SET_NO_X === Number(targets[0].SettingNo)) ||\r\n (row.PLC_NO_Y === Number(targets[0].PLCNo) && row.SET_NO_Y === Number(targets[0].SettingNo))\r\n );\r\n if (targetRows.length != 0) {\r\n var gpNos: number[] = [];\r\n for (var i in targetRows) {\r\n gpNos.push(targetRows[i].GROUP_NO);\r\n }\r\n console.debug(['targetRows,gpNos', targetRows, gpNos]);\r\n setSelectGroupNos(gpNos);\r\n handleGroupSelectDialogShow();\r\n } else {\r\n setShowMessage(\r\n t('RealTimeTrendGraphButtonList.項目に対するグループ登録がありません', '項目に対するグループ登録がありません')\r\n );\r\n setSimpleDialogOpen(true);\r\n }\r\n console.debug(['groupRows', groupRows]);\r\n console.debug(['targetRows', targetRows]);\r\n });\r\n console.debug(['表示中 リアルタイムトレンド信号リスト', rTrendSettingList]);\r\n };\r\n\r\n const handleTrandPageOpen = () => {\r\n var targets = rTrendSettingList.filter((row) => row.IsRowSelect === true);\r\n if (targets.length === 0) {\r\n setShowMessage(t('RealTimeTrendGraphButtonList.項目が選択されていません', '項目が選択されていません'));\r\n setSimpleDialogOpen(true);\r\n return;\r\n }\r\n setDialogKind(DialogKindKey.Trend);\r\n GetTrendGroupTableByItemSet().then((ret) => {\r\n var targetRows = ret.filter(\r\n (row) =>\r\n row.trdItemSet.PLC_NO == Number(targets[0].PLCNo) && row.trdItemSet.SET_NO === Number(targets[0].SettingNo)\r\n );\r\n if (targetRows.length != 0) {\r\n var gpNos: number[] = [];\r\n for (var i in targetRows) {\r\n gpNos.push(targetRows[i].trdGroupSet.GROUP_NO);\r\n }\r\n setSelectGroupNos(gpNos);\r\n handleGroupSelectDialogShow();\r\n } else {\r\n setShowMessage(\r\n t('RealTimeTrendGraphButtonList.項目に対するグループ登録がありません', '項目に対するグループ登録がありません')\r\n );\r\n setSimpleDialogOpen(true);\r\n }\r\n });\r\n console.debug(['表示中 リアルタイムトレンド信号リスト', rTrendSettingList]);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {dialogKind == DialogKindKey.XYComparison ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n {showMessage}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default RealTimeTrendGraphButtonList;\r\n","import { createStyles, makeStyles, Theme, createTheme } from '@material-ui/core/styles';\r\n\r\nconst defaultTheme = createTheme({});\r\nconst { pxToRem } = defaultTheme.typography;\r\n\r\n\r\nexport const TableBaseStyle = makeStyles(\r\n createStyles({\r\n //テーブルヘッダセル\r\n headerCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n padding: '1px',\r\n minWidth: '80px',\r\n borderCollapse: `collapse`,\r\n },\r\n headerCell_s: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n padding: '1px',\r\n minWidth: '0px',\r\n borderCollapse: `collapse`,\r\n },\r\n\r\n bodyCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '0.5px',\r\n height: '10px',\r\n },\r\n bodyCellCenter: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n orderBottomStyle: 'inset',\r\n borderLeftStyle: 'solid',\r\n borderRightStyle: 'solid',\r\n textAlign: 'center',\r\n minWidth: '80px',\r\n height: '8px',\r\n padding: '1px',\r\n },\r\n bodyRow: {\r\n '&.Mui-selected, &.Mui-selected:hover': {\r\n //背景色\r\n backgroundColor: 'yellow',\r\n '& > .MuiTableCell-root': {\r\n //文字色\r\n color: 'brack',\r\n },\r\n },\r\n },\r\n cellName: {\r\n borderStyle: 'none',\r\n width: '60px',\r\n },\r\n cellData: {\r\n borderStyle: 'none',\r\n width: '220px',\r\n },\r\n //テキスト\r\n textField: {\r\n flexGrow: 1,\r\n height: '100%',\r\n width: '98%',\r\n backgroundcolor: 'transparent',\r\n borderBottom: '1px solid #000000',\r\n borderTop: 'none',\r\n borderLeft: 'none',\r\n borderRight: 'none',\r\n backgroundColor: 'transparent',\r\n textAlign: 'center',\r\n },\r\n gridStyle: {\r\n borderStyle: 'solid',\r\n maxWidth: '1440px',\r\n },\r\n\r\n })\r\n);\r\n\r\nexport const ChartBaseStyle = makeStyles(\r\n createStyles({\r\n tooltip: {\r\n background: '#FFFFEE',\r\n fontSize: '14px',\r\n padding: '10px 10px 0px 20px',\r\n },\r\n })\r\n);\r\n\r\nexport const RealtimeSettingStyle = makeStyles(\r\n createStyles({\r\n activeRow: {\r\n background: '#7fffd4',\r\n },\r\n itemRow: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n height: '60px',\r\n },\r\n itemSelLabel: {\r\n marginTop: '2px',\r\n marginLeft: '16px',\r\n },\r\n itemSelData: {\r\n marginTop: '2px',\r\n marginLeft: '16px',\r\n },\r\n entryLabel: {\r\n marginTop: '4px',\r\n },\r\n gridStyle: {\r\n borderStyle: 'solid',\r\n //maxWidth: '1200px',\r\n // height: 'calc(100vh - 400px)',\r\n },\r\n settingContainer: {\r\n display: 'flex',\r\n alignItems: 'flex-start',\r\n margin: '4px',\r\n },\r\n entry: {\r\n marginLeft: '8px',\r\n marginRight: '8px',\r\n width: '64px',\r\n },\r\n container: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n margin: '4px',\r\n },\r\n button: {\r\n width: '150px',\r\n marginTop: '2px',\r\n marginRight: '20px',\r\n height: '35px',\r\n },\r\n comboLabel: {\r\n margin: '16px',\r\n },\r\n })\r\n);\r\n\r\nexport const FooterBaseStyle = makeStyles(\r\n createStyles({\r\n buttonStyle: {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n },\r\n })\r\n);\r\n","import React, { Dispatch, SetStateAction } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { TableRow, TableCell, Checkbox } from '@material-ui/core';\r\nimport {\r\n JudgeInfo,\r\n PlcInfo,\r\n V_RT_TREND_SETTING_ITEM,\r\n KIND_NO_NAME_SET,\r\n ColSetInfo,\r\n} from '../../../../function/GroupDataModel';\r\nimport ItemComboBox, { ComboBoxItemType } from '../../../atoms/ComboBox/ItemComboBox';\r\nimport ColorPicker from '../ColorPicker';\r\nimport NumericEntry from '../../../atoms/Input/NumericEntry';\r\nimport { GetLimit, GetUnit, CLC_TYP_SET } from '../TrendSetting/TrendSetting';\r\nimport NumericEntry_inputEx from '../../../atoms/Input/NumericEntry_inputEx';\r\nimport RealTimeTrendGraphButtonList from '../../RealTimeTrendGraph/RealTimeTrendGraphButtonList';\r\nimport { JudgeSettingSelectType, GetJudgeSettingSelectItems } from '../../../../function/JudgeSettingSelectModel';\r\nimport { TableBaseStyle, RealtimeSettingStyle } from './RealtimeSettingStyle';\r\nimport { MeasureHighKind, AlmTypKind, SpeedKind } from '../../../../Constant';\r\nimport { MST_CLC_TYPE } from '../../MeasureSetting/JudgeSetting/JudgeSetting';\r\nimport { ALM_KIND_SET } from '../../../../function/AlmKindSetModel';\r\nimport { IsConanAirPlc } from '../../../../function/PlcNoModel';\r\n\r\ntype RealtimeSettingItemProps = {\r\n rowno: number;\r\n selectIdx: number;\r\n setSelectIdx: Dispatch>;\r\n item: V_RT_TREND_SETTING_ITEM;\r\n updateItem: (item: V_RT_TREND_SETTING_ITEM) => void;\r\n measKinds: ComboBoxItemType[];\r\n deviceLists: ComboBoxItemType[];\r\n itemLists: ComboBoxItemType[];\r\n dataKinds: ComboBoxItemType[];\r\n alarmKinds: ComboBoxItemType[];\r\n alarmLimits: JudgeInfo[];\r\n // deviceUnitInfos: PlcInfo[];\r\n colSetInfos: ColSetInfo[];\r\n kindNoNameSets: KIND_NO_NAME_SET[];\r\n judgeSetSelect: JudgeSettingSelectType[];\r\n mClcTypes: ComboBoxItemType[];\r\n};\r\n\r\nconst getKindIndex = (item: V_RT_TREND_SETTING_ITEM, nameSets: KIND_NO_NAME_SET[]): number => {\r\n var index = nameSets.findIndex((r) => r.SPEED == item.SPEED && r.NAME_NO == item.KIND_NO);\r\n //console.debug(['item,nameSets,index', item, nameSets, index]);\r\n return index;\r\n};\r\n\r\nconst RealtimeSettingItem: React.FC = (props: RealtimeSettingItemProps) => {\r\n const tableStyle = TableBaseStyle();\r\n const pageStyle = RealtimeSettingStyle();\r\n\r\n const unit = GetUnit(\r\n props.colSetInfos,\r\n props.item.PLC_NO,\r\n props.item.AI_CARD,\r\n props.item.AI_CH,\r\n props.item.CLC,\r\n props.item.KIND_NO\r\n );\r\n\r\n /**\r\n * 計測種別アイテム種痘\r\n * @returns\r\n */\r\n const measFilterCombos = (): ComboBoxItemType[] => {\r\n //console.debug(['計測種別アイテム取得', props.judgeSetSelect, props.measKinds]);\r\n return props.measKinds;\r\n // return props.measKinds.filter((r) => {\r\n // let v = r.tag as KIND_NO_NAME_SET;\r\n // if (r.index === 0 || v == null) {\r\n // return true;\r\n // }\r\n // if (props.judgeSetSelect.findIndex((row) => row.SPEED === v.SPEED && row.NAME_NO === v.NAME_NO) !== -1) {\r\n // return true;\r\n // }\r\n // return false;\r\n // });\r\n };\r\n\r\n /**\r\n * 項目種別アイテム種痘\r\n * @returns\r\n */\r\n const itemListFilterCombos = (): ComboBoxItemType[] => {\r\n let findCols = props.colSetInfos.filter(\r\n (csi) =>\r\n IsConanAirPlc(String(csi.PLC_NO)) === false &&\r\n csi.DEV_INDEX === props.item.DEV_INDEX &&\r\n csi.SPEED === props.item.SPEED &&\r\n csi.KIND_NO === props.item.KIND_NO\r\n );\r\n let findCols2 = props.colSetInfos.filter(\r\n (csi) =>\r\n IsConanAirPlc(String(csi.PLC_NO)) === true &&\r\n csi.DEV_INDEX === props.item.DEV_INDEX &&\r\n csi.SPEED === props.item.SPEED\r\n );\r\n\r\n findCols = findCols.concat(findCols2);\r\n\r\n return props.itemLists.filter((r) => {\r\n if (r.index === 0) {\r\n return true;\r\n }\r\n if (findCols.findIndex((row) => row.ITM_NAME_NO === r.index) !== -1) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n };\r\n /**\r\n *データ種別\r\n * @returns\r\n */\r\n const createDataKindCombos = (): ComboBoxItemType[] => {\r\n //console.debug(['データ種別選択候補リスト情報', props.item, props.dataKinds]);\r\n\r\n if (props.item.KIND_NO === MeasureHighKind.VIBRATION_SPD || props.item.KIND_NO === MeasureHighKind.VIBRATION_DSP) {\r\n //console.debug('VIBRATION_SPD');\r\n if (props.item.CLC !== 4) {\r\n props.item.CLC = 4;\r\n props.updateItem(props.item);\r\n }\r\n return props.dataKinds.filter((r) => r.index === 4);\r\n }\r\n\r\n return props.dataKinds.filter((r) => {\r\n let v = r.tag as CLC_TYP_SET;\r\n let item = props.item;\r\n\r\n if (r.index === 0 || v == null) {\r\n return true;\r\n }\r\n if (\r\n props.judgeSetSelect.findIndex(\r\n (row) => row.SPEED === item.SPEED && row.NAME_NO === item.KIND_NO && row.TYP_NO_CLC === v.TYP_NO\r\n ) !== -1\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n };\r\n\r\n /**\r\n *演算種別\r\n * @returns\r\n */\r\n const createMclcCombos = (): ComboBoxItemType[] => {\r\n //console.debug(['演算種別選択候補リスト情報', props.item, props.mClcTypes, props.judgeSetSelect]);\r\n if (props.item.KIND_NO === MeasureHighKind.VIBRATION_SPD || props.item.KIND_NO === MeasureHighKind.VIBRATION_DSP) {\r\n return props.mClcTypes.filter((r) => {\r\n let v = r.tag as MST_CLC_TYPE;\r\n if (r.index === 0 || v == null) {\r\n return true;\r\n }\r\n\r\n if (props.item.KIND_NO === MeasureHighKind.VIBRATION_SPD && r.index === AlmTypKind.eRawSpd) {\r\n return true;\r\n }\r\n if (props.item.KIND_NO === MeasureHighKind.VIBRATION_DSP && r.index === AlmTypKind.eRawDsp) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n } else {\r\n return props.mClcTypes.filter((r) => {\r\n let v = r.tag as MST_CLC_TYPE;\r\n let item = props.item;\r\n\r\n if (r.index === 0 || v == null) {\r\n return true;\r\n }\r\n if (\r\n props.judgeSetSelect.findIndex(\r\n (row) =>\r\n row.SPEED === item.SPEED &&\r\n row.NAME_NO === item.KIND_NO &&\r\n row.TYP_NO_CLC === item.CLC &&\r\n row.MCLC_TYP_ID === v.MCLC_TYP_ID\r\n ) !== -1\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n }\r\n };\r\n /**\r\n *異常種別\r\n * @returns\r\n */\r\n const createAlarmKindCombos = (): ComboBoxItemType[] => {\r\n //console.debug(['異常種別候補リスト', props.item, props.alarmKinds]);\r\n return props.alarmKinds.filter((r) => {\r\n let v = r.tag as ALM_KIND_SET;\r\n let item = props.item;\r\n //console.debug(['異常種別候補リスト2', props.item, props.alarmKinds, v]);\r\n if (r.index === 0 || v == null) {\r\n return true;\r\n }\r\n if (v.MCLC_TYP_ID === item.MCLC_TYP_ID) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n };\r\n\r\n const selectRow = () => {\r\n props.setSelectIdx(props.rowno);\r\n };\r\n\r\n return (\r\n \r\n {/* 表示 有*/}\r\n selectRow()}>\r\n {\r\n props.item.DSP_FLG = e.target.checked ? 1 : 0;\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n \r\n {/* 表示 線*/}\r\n selectRow()}>\r\n {\r\n props.item.DSP_COLOR = col;\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n \r\n {/* 計測種別 */}\r\n selectRow()}>\r\n {\r\n if (typeof e.target.value === 'string') {\r\n var k = props.kindNoNameSets[parseInt(e.target.value)];\r\n\r\n /* 計測種別が空白になった場合チェックを外す */\r\n /* 計測種別が変更された場合チェックを付ける */\r\n props.item.SPEED = e.target.value === '0' ? 0 : k.SPEED;\r\n props.item.KIND_NO = e.target.value === '0' ? 0 : k.NAME_NO;\r\n props.item.DSP_FLG = e.target.value === '0' ? 0 : 1;\r\n props.item.DEV_INDEX = e.target.value === '0' ? 0 : props.item.DEV_INDEX;\r\n props.item.ITM_NAME_NO = 0;\r\n props.item.TYP_NO = 0;\r\n props.item.CLC = 0;\r\n props.item.MCLC_TYP_ID = 0;\r\n if (k.SPEED === SpeedKind.SPEED_CONAN) {\r\n //コナンエアの場合SET_NOにKIND_NOを保持\r\n props.item.SET_NO = k.NAME_NO;\r\n }\r\n\r\n props.updateItem(props.item);\r\n }\r\n }}\r\n />\r\n \r\n {/* 機器番号・機器名称 */}\r\n selectRow()}>\r\n {\r\n if (typeof e.target.value === 'string') {\r\n props.item.DEV_INDEX = parseInt(e.target.value);\r\n props.updateItem(props.item);\r\n }\r\n }}\r\n />\r\n \r\n {/* 項目名称 */}\r\n selectRow()}>\r\n {\r\n if (typeof e.target.value === 'string') {\r\n props.item.ITM_NAME_NO = parseInt(e.target.value);\r\n props.updateItem(props.item);\r\n }\r\n }}\r\n />\r\n \r\n {/* データ種別 */}\r\n selectRow()}>\r\n {\r\n if (typeof e.target.value === 'string') {\r\n props.item.CLC = parseInt(e.target.value);\r\n props.item.MCLC_TYP_ID = 0;\r\n props.item.TYP_NO = 0;\r\n props.updateItem(props.item);\r\n }\r\n }}\r\n />\r\n \r\n {/* 演算種別 */}\r\n selectRow()}>\r\n {\r\n if (typeof e.target.value === 'string') {\r\n props.item.MCLC_TYP_ID = parseInt(e.target.value);\r\n props.item.TYP_NO = 0;\r\n props.updateItem(props.item);\r\n }\r\n }}\r\n />\r\n \r\n {/* 異常種別 */}\r\n selectRow()}>\r\n {\r\n if (typeof e.target.value === 'string') {\r\n props.item.TYP_NO = parseInt(e.target.value);\r\n props.updateItem(props.item);\r\n }\r\n }}\r\n />\r\n \r\n\r\n {props.item.SPEED != 1 ? (\r\n <>\r\n {/* 軽故障 */}\r\n selectRow()}>\r\n {\r\n props.item.RT_LMT_H = val;\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n \r\n {/* 重故障 */}\r\n selectRow()}>\r\n {\r\n props.item.RT_LMT_HH = val;\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n \r\n \r\n ) : (\r\n <>\r\n {/* 軽故障 */}\r\n selectRow()}>\r\n {\r\n props.item.COL_RT_LMT_H = val;\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n \r\n {/* 重故障 */}\r\n selectRow()}>\r\n {\r\n props.item.COL_RT_LMT_HH = val;\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n \r\n \r\n )}\r\n\r\n {/* グラフ最小値 */}\r\n {/* \r\n {\r\n props.item.GRP_LOW = val;\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n */}\r\n {/* グラフ最大値 */}\r\n {/* \r\n {\r\n props.item.GRP_HIGH = val;\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n */}\r\n {/* 単位 */}\r\n selectRow()}>\r\n {unit}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default RealtimeSettingItem;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { SettingsState } from '../../../organisms/SelectSettings';\r\nimport {\r\n Paper,\r\n Table,\r\n TableContainer,\r\n TableBody,\r\n TableRow,\r\n TableCell,\r\n TextField,\r\n TableHead,\r\n Checkbox,\r\n Button,\r\n} from '@material-ui/core';\r\nimport {\r\n GroupListType,\r\n GetRealtimeGroupList,\r\n GetRealtimeSetting,\r\n PutRealtimeGroupSetting,\r\n RT_TRD_GROUP_SET,\r\n V_RT_TREND_SETTING_ITEM,\r\n JudgeInfo,\r\n PlcInfo,\r\n ColSetInfo,\r\n KIND_NO_NAME_SET,\r\n} from '../../../../function/GroupDataModel';\r\nimport ItemComboBox, { ComboBoxItemType } from '../../../atoms/ComboBox/ItemComboBox';\r\nimport RealtimeSettingItem from './RealtimeSettingItem';\r\nimport SaveCancel from '../SaveCancel';\r\nimport ColorPicker from '../ColorPicker';\r\nimport ListControl from '../ListControl';\r\nimport { useMemo } from 'react';\r\nimport { useModal } from '../../../../function/useModal';\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../../atoms/Dialog/ConfirmDialog';\r\nimport MessageDialog, { MessageDialogResponse } from '../../../atoms/Dialog/MessageDialog';\r\nimport { useTranslation } from 'react-i18next';\r\nimport CreateGroupDialog, { CreateGroupDialogResponse } from '../CreateGroupDialog';\r\nimport {\r\n MeasureHighKind,\r\n MeasureClcType,\r\n AlmTypKind,\r\n GetVibrationSpecialNo,\r\n GetVibrationSpecialNoUnit,\r\n GetVibrationSpecialString,\r\n GetMeasureClcName,\r\n SpeedKind,\r\n} from '../../../../Constant';\r\n\r\nimport {\r\n GetDefaultPenColor,\r\n CreateInitColSetInfo,\r\n CreateSpecialDatTrendSettingParameter,\r\n} from '../TrendSetting/TrendSetting';\r\nimport { TableBaseStyle, RealtimeSettingStyle } from './RealtimeSettingStyle';\r\nimport { JudgeSettingSelectType, GetJudgeSettingSelectItems } from '../../../../function/JudgeSettingSelectModel';\r\nimport { IsConanAirPlc } from '../../../../function/PlcNoModel';\r\n\r\ntype RealtimeSettingProps = {\r\n editData: SettingsState;\r\n groupNo?: number;\r\n isDialog: boolean;\r\n};\r\n\r\ntype SaveParameter = {\r\n group: RT_TRD_GROUP_SET;\r\n list: V_RT_TREND_SETTING_ITEM[];\r\n colset: ColSetInfo[];\r\n};\r\n\r\nconst MaxSettingRow: number = 8;\r\nconst MaxGroup: number = 128;\r\n\r\nconst createComboList = (groups: RT_TRD_GROUP_SET[]): ComboBoxItemType[] => {\r\n return groups.map((grp) => {\r\n return { index: grp.GROUP_NO, name: grp.GROUP_NO.toString() };\r\n });\r\n};\r\n\r\nconst RealtimeSettingPage: React.FC = (props: RealtimeSettingProps) => {\r\n const { t, i18n } = useTranslation();\r\n const tableStyle = TableBaseStyle();\r\n const pageStyle = RealtimeSettingStyle();\r\n const [groupNo, setGroupNo] = useState(0);\r\n const [editList, setEditList] = useState([]);\r\n const [groupName, setGroupName] = useState('');\r\n const [groupCombos, setGroupCombos] = useState();\r\n const [measCombos, setMeasCombos] = useState([]);\r\n const [deviceCombos, setDeviceCombos] = useState([]);\r\n const [itemCombos, setItemCombos] = useState([]);\r\n const [dataCombos, setDataCombos] = useState([]);\r\n const [alarmCombos, setAlarmCombos] = useState([]);\r\n const [mClcTypeCombos, setMClcTypeCombos] = useState([]);\r\n\r\n const [judgeInfo, setJudgeInfo] = useState([]);\r\n\r\n const [itemList, setItemList] = useState([]);\r\n const [kindNoNameSets, setKindNoNameSets] = useState([]);\r\n const [deviceUnitInfo, setDeviceUnitInfo] = useState([]);\r\n const [judgeSetSelect, setJudgeSetSelect] = useState([]);\r\n const [colSetInfo, setColSetInfo] = useState([]);\r\n const [cursorColor, setCursorColor] = useState(0);\r\n const [dispFlg, setDispFlg] = useState(false);\r\n const [period, setPeriod] = useState(1);\r\n const [autoUpdate, setAutoUpdate] = useState(false);\r\n const [selectIdx, setSelectIdx] = useState(-1);\r\n const [flgCfmDlg, actCfmDlg] = useModal();\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n const [flgCrtDlg, actCrtDlg] = useModal();\r\n\r\n const cfmdlg = flgCfmDlg ? (\r\n \r\n ) : null;\r\n const msgdlg = flgMsgDlg ? : null;\r\n const crtdlg = flgCrtDlg ? (\r\n ((gc) => gc.index)} maxGroup={MaxGroup} />\r\n ) : null;\r\n // const [flgDlg, actDlg] = useModal();\r\n // const [errmsg,setErrmsg] = useState('');\r\n\r\n // const msgdlg = flgDlg?:null;\r\n\r\n console.log('-- RealtimeSetting --', cursorColor);\r\n\r\n const timePeriods: ComboBoxItemType[] = useMemo(() => {\r\n return [\r\n { index: 1, name: t('RealtimeSetting.1分', '1分') },\r\n { index: 10, name: t('RealtimeSetting.10分', '10分') },\r\n { index: 30, name: t('RealtimeSetting.30分', '30分') },\r\n { index: 60, name: t('RealtimeSetting.60分', '60分') },\r\n ];\r\n }, []);\r\n\r\n /**\r\n * 計測種別 言語切替\r\n */\r\n const changeLangMeasCombos = () => {\r\n //振動(速度)\r\n const idx1 = kindNoNameSets.findIndex((x) => x.NAME_NO == MeasureHighKind.VIBRATION_SPD);\r\n if (idx1 !== -1) {\r\n const name = GetVibrationSpecialString(MeasureHighKind.VIBRATION_SPD, t);\r\n kindNoNameSets[idx1].MES_NAME = name;\r\n measCombos[idx1].name = name;\r\n }\r\n //振動(変位)\r\n const idx2 = kindNoNameSets.findIndex((x) => x.NAME_NO == MeasureHighKind.VIBRATION_DSP);\r\n if (idx2 !== -1) {\r\n const name = GetVibrationSpecialString(MeasureHighKind.VIBRATION_DSP, t);\r\n kindNoNameSets[idx2].MES_NAME = name;\r\n measCombos[idx2].name = name;\r\n }\r\n //console.debug('changeLangMeasCombos', kindNoNameSets, measCombos, idx1, idx2);\r\n\r\n setKindNoNameSets(kindNoNameSets);\r\n setMeasCombos(measCombos);\r\n };\r\n\r\n /**\r\n * データ種別 言語切替\r\n */\r\n const changeLangDataCombos = (newDataCombos: ComboBoxItemType[]) => {\r\n const data = newDataCombos.find((x) => x.index == MeasureClcType.eChr);\r\n //console.debug('changeLangDataCombos', data, newDataCombos);\r\n if (data) {\r\n data.name = GetMeasureClcName(data.index, data.name, t);\r\n setDataCombos(\r\n newDataCombos.map((ci) => {\r\n return { index: ci.index, name: ci.name, tag: ci.tag };\r\n })\r\n );\r\n }\r\n };\r\n\r\n // 言語切替\r\n useEffect(() => {\r\n //console.debug(['TrendSetting useEffect', i18n, measCombos, dataCombos]);\r\n changeLangMeasCombos();\r\n changeLangDataCombos(dataCombos);\r\n }, [i18n.language]);\r\n\r\n useEffect(() => {\r\n GetRealtimeGroupList().then((result: GroupListType) => {\r\n //console.debug(['result', result]);\r\n setEditList(result.RT_TRD_GROUP_SETs);\r\n\r\n //特殊項目追加\r\n CreateSpecialDatTrendSettingParameter(result.TrendSettings, t);\r\n\r\n const defkind: KIND_NO_NAME_SET = { SPEED: -1, NAME_NO: -1, MES_NAME: '' };\r\n setKindNoNameSets([defkind].concat(result.TrendSettings.KIND_NO_NAME_SETs));\r\n\r\n const defPara: ComboBoxItemType = { index: 0, name: '' };\r\n\r\n setMeasCombos(\r\n [defPara].concat(\r\n result.TrendSettings.MeasKinds.map((ci) => {\r\n return { index: ci.Key, name: ci.Disp, tag: ci.Tag };\r\n })\r\n )\r\n );\r\n setDeviceCombos(\r\n [defPara].concat(\r\n result.TrendSettings.DeviceLists.map((ci) => {\r\n return { index: ci.Key, name: ci.Disp };\r\n })\r\n )\r\n );\r\n setItemCombos(\r\n [defPara].concat(\r\n result.TrendSettings.ItemLists.map((ci) => {\r\n return { index: ci.Key, name: ci.Disp };\r\n })\r\n )\r\n );\r\n //演算種別\r\n setMClcTypeCombos(\r\n [defPara].concat(\r\n result.TrendSettings.MClcTypes.map((ci) => {\r\n return { index: ci.Key, name: ci.Disp, tag: ci.Tag };\r\n })\r\n )\r\n );\r\n //データ種別\r\n //console.debug('setDataCombos', result.TrendSettings.DataKinds);\r\n const newDataCombos = result.TrendSettings.DataKinds.map((ci) => {\r\n return { index: ci.Key, name: ci.Disp, tag: ci.Tag };\r\n });\r\n changeLangDataCombos(newDataCombos);\r\n\r\n //異常種別 空文字除外\r\n setAlarmCombos(\r\n [defPara].concat(\r\n result.TrendSettings.AlarmKinds.map((ci) => {\r\n return { index: ci.Key, name: ci.Disp, tag: ci.Tag };\r\n })\r\n )\r\n );\r\n setJudgeInfo(result.TrendSettings.AlarmLimits);\r\n setDeviceUnitInfo(result.TrendSettings.DeviceUnitInfos);\r\n setColSetInfo(result.TrendSettings.ColSetInfos);\r\n setJudgeSetSelect(result.TrendSettings.JudgeSetSelect);\r\n\r\n props.editData.SaveFunction = saveCurrentSetting;\r\n props.editData.IsUpdate = false;\r\n\r\n if (props.groupNo) {\r\n setGroupNo(props.groupNo);\r\n }\r\n });\r\n }, [props.editData.CancelCondition]);\r\n\r\n useEffect(() => {\r\n const groups = createComboList(editList);\r\n setGroupCombos(groups);\r\n\r\n if (!editList.find((el) => el.GROUP_NO == groupNo)) {\r\n if (editList.length > 0) {\r\n const grp = editList[0];\r\n setGroupNo(grp.GROUP_NO);\r\n }\r\n }\r\n }, [editList]);\r\n\r\n useEffect(() => {\r\n console.debug('-- groupChange --', groupNo);\r\n setSelectIdx(-1);\r\n const grp = editList.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n console.log('groupName', grp.GROUP_NAME);\r\n setGroupName(grp.GROUP_NAME ?? '');\r\n setCursorColor(grp.DSP_COLOR);\r\n setDispFlg(grp.DSP_FLG !== 0);\r\n setPeriod(grp.DSP_SPAN);\r\n setAutoUpdate(grp.AUT_UPDATE !== 0);\r\n } else {\r\n console.debug('not found group');\r\n }\r\n\r\n GetRealtimeSetting(groupNo).then((result: V_RT_TREND_SETTING_ITEM[]) => {\r\n var setItems: V_RT_TREND_SETTING_ITEM[] = [];\r\n //KINDを確認して、特殊な信号だった場合KIND_NOを入れ替える\r\n //MCLC_TYP_IDがNULLなら、デフォルトで0を設定\r\n result.forEach((r) => {\r\n //コナンエアの場合SET_NO=KIND_NOとする\r\n if (IsConanAirPlc(String(r.PLC_NO))) {\r\n r.KIND_NO = r.SET_NO;\r\n }\r\n\r\n var spNo = GetVibrationSpecialNo(r.KIND);\r\n if (spNo !== '0') {\r\n r.KIND_NO = Number(spNo);\r\n }\r\n if (r.MCLC_TYP_ID === null) {\r\n r.MCLC_TYP_ID = 0;\r\n }\r\n });\r\n for (let step = 0; step < MaxSettingRow; step++) {\r\n let penNo = step + 1;\r\n let index = result.findIndex((r) => r.PEN_NO == penNo);\r\n if (index === -1) {\r\n let insRow = getInitialItem();\r\n insRow.PEN_NO = penNo;\r\n insRow.DSP_COLOR = GetDefaultPenColor(penNo);\r\n setItems.push(insRow);\r\n } else {\r\n setItems.push(result[index]);\r\n }\r\n }\r\n console.debug(['result,setItemList', result, setItems]);\r\n setItemList(setItems);\r\n });\r\n }, [groupNo]);\r\n\r\n const groupNameChange = (name: string) => {\r\n const grp = editList.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n setGroupName(name);\r\n grp.GROUP_NAME = name;\r\n\r\n props.editData.Target = { group: grp, list: itemList };\r\n props.editData.IsUpdate = true;\r\n }\r\n };\r\n const saveCurrentSetting = (param: object): Promise => {\r\n console.debug('saveCurrentSetting', param);\r\n\r\n return new Promise((resolve, reject) => {\r\n const sp = param as SaveParameter;\r\n if (sp && sp.group && sp.list) {\r\n const errmsg = ValidateSetting(sp.group, sp.list, sp.colset);\r\n if (errmsg === '') {\r\n PutRealtimeGroupSetting(sp.group, sp.list)\r\n .then((count: number) => {\r\n console.log(count);\r\n\r\n resolve('done');\r\n })\r\n .catch((reason) => reject(reason));\r\n } else {\r\n setDlgmsg(errmsg);\r\n actMsgDlg.open().apply((_) => setDlgmsg(''));\r\n }\r\n } else {\r\n reject('data nothing');\r\n }\r\n });\r\n };\r\n const deleteCurrentSetting = (param: object): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const sp = param as SaveParameter;\r\n if (sp && sp.group && sp.list) {\r\n PutRealtimeGroupSetting(sp.group, sp.list)\r\n .then((count: number) => {\r\n console.log(count);\r\n\r\n resolve('done');\r\n })\r\n .catch((reason) => reject(reason));\r\n } else {\r\n reject('data nothing');\r\n }\r\n });\r\n };\r\n const itemUpdate = (item: V_RT_TREND_SETTING_ITEM) => {\r\n console.debug(['itemUpdate,itemList,targetItem', itemList, item]);\r\n const idx = itemList.findIndex((itm) => itm.PEN_NO === item.PEN_NO);\r\n if (idx >= 0) {\r\n const temp = itemList.concat(); // 画面更新のためArrayの再生成\r\n\r\n let findCol;\r\n if (item.SPEED === SpeedKind.SPEED_CONAN) {\r\n findCol = colSetInfo.find(\r\n (csi) => csi.DEV_INDEX === item.DEV_INDEX && csi.SPEED === item.SPEED && csi.ITM_NAME_NO === item.ITM_NAME_NO\r\n );\r\n\r\n if (findCol) {\r\n item.PLC_NO = findCol.PLC_NO;\r\n item.AI_CARD = findCol.AI_CARD;\r\n item.AI_CH = findCol.AI_CH;\r\n item.UNIT = findCol.UNIT;\r\n }\r\n } else {\r\n findCol = colSetInfo.find(\r\n (csi) =>\r\n csi.KIND_NO === item.KIND_NO && csi.DEV_INDEX === item.DEV_INDEX && csi.ITM_NAME_NO === item.ITM_NAME_NO\r\n );\r\n if (findCol) {\r\n item.PLC_NO = findCol.PLC_NO;\r\n item.AI_CARD = findCol.AI_CARD;\r\n item.AI_CH = findCol.AI_CH;\r\n item.SET_NO = findCol.SET_NO;\r\n item.UNIT = findCol.UNIT;\r\n item.KIND_NO = findCol.KIND_NO;\r\n }\r\n }\r\n\r\n temp[idx] = item;\r\n setItemList(temp);\r\n\r\n const grp = editList.find((ed) => ed.GROUP_NO === groupNo);\r\n props.editData.Target = { group: grp, list: temp, colset: colSetInfo };\r\n props.editData.IsUpdate = true;\r\n }\r\n };\r\n\r\n const updateCursorColor = (color: number) => {\r\n setCursorColor(color);\r\n\r\n const grp = editList.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n grp.DSP_COLOR = color;\r\n\r\n props.editData.Target = { group: grp, list: itemList, colset: colSetInfo };\r\n props.editData.IsUpdate = true;\r\n }\r\n };\r\n\r\n const getInitialItem = (): V_RT_TREND_SETTING_ITEM => {\r\n return {\r\n GROUP_NO: groupNo,\r\n PEN_NO: 0,\r\n DSP_FLG: 0,\r\n DSP_COLOR: 0,\r\n GRP_LOW: 0,\r\n GRP_HIGH: 0,\r\n SCALE_ON: 0,\r\n PLC_NO: 0,\r\n AI_CARD: 0,\r\n AI_CH: 0,\r\n TYP_NO: 0,\r\n MCLC_TYP_ID: 0,\r\n SET_NO: 0,\r\n DEV_INDEX: 0,\r\n DEV_NO: '',\r\n DEV_NAME: '',\r\n ITM_NAME_NO: 0,\r\n ITM_NAME: '',\r\n CLC: 0,\r\n RT_LMT_H: 0,\r\n RT_LMT_HH: 0,\r\n KIND_NO: 0,\r\n KIND: 0,\r\n UNIT: '',\r\n RH: 0,\r\n RL: 0,\r\n COL_RT_LMT_H: 0,\r\n COL_RT_LMT_HH: 0,\r\n MUL: 0,\r\n SPEED: 0,\r\n MES_NAME: '',\r\n LOG_INT: 0,\r\n };\r\n };\r\n\r\n //指定したアイテムが行データとして有効か確認\r\n const checkValidityItem = (item: V_RT_TREND_SETTING_ITEM): boolean => {\r\n if (item.SPEED !== 0 && item.KIND_NO !== 0) {\r\n return true;\r\n }\r\n if (item.DEV_INDEX !== 0) {\r\n return true;\r\n }\r\n if (item.ITM_NAME_NO !== 0) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n const conditionRow = (source: V_RT_TREND_SETTING_ITEM[]): V_RT_TREND_SETTING_ITEM[] => {\r\n const temp = source.concat();\r\n if (temp.length < MaxSettingRow) {\r\n temp.push(getInitialItem());\r\n } else if (temp.length > MaxSettingRow) {\r\n temp.pop();\r\n }\r\n temp.forEach((item, idx) => (item.PEN_NO = idx + 1));\r\n return temp;\r\n };\r\n\r\n //行挿入\r\n const insertRow = () => {\r\n if (selectIdx == -1) {\r\n return;\r\n }\r\n const last = itemList.slice(-1)[0];\r\n if (checkValidityItem(last)) {\r\n //インサートできない\r\n return;\r\n }\r\n //指定した行へ空データインサート\r\n itemList.splice(selectIdx, 0, getInitialItem());\r\n //末尾を削除\r\n itemList.pop();\r\n //ペンNo振りなおし\r\n itemList.forEach((item, idx) => (item.PEN_NO = idx + 1));\r\n for (let i = 0; i < itemList.length; i++) {\r\n if (itemList[i].DEV_INDEX === 0) {\r\n itemList[i].DSP_COLOR = GetDefaultPenColor(i + 1);\r\n }\r\n }\r\n console.debug(['setItemList', itemList]);\r\n setItemList(itemList.concat());\r\n\r\n const grp = editList.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n props.editData.Target = { group: grp, list: itemList, colset: colSetInfo };\r\n props.editData.IsUpdate = true;\r\n }\r\n };\r\n\r\n //行削除\r\n const deleteRow = () => {\r\n if (selectIdx == -1) {\r\n return;\r\n }\r\n //指定行を削除\r\n itemList.splice(selectIdx, 1);\r\n //末尾に行追加\r\n itemList.push(getInitialItem());\r\n //ペンNo振りなおし\r\n itemList.forEach((item, idx) => (item.PEN_NO = idx + 1));\r\n for (let i = 0; i < itemList.length; i++) {\r\n if (itemList[i].DEV_INDEX === 0) {\r\n itemList[i].DSP_COLOR = GetDefaultPenColor(i + 1);\r\n }\r\n }\r\n\r\n setItemList(itemList.concat());\r\n\r\n const grp = editList.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n props.editData.Target = { group: grp, list: itemList, colset: colSetInfo };\r\n props.editData.IsUpdate = true;\r\n }\r\n };\r\n const upRow = () => {\r\n if (selectIdx == -1) {\r\n setSelectIdx(0);\r\n return;\r\n }\r\n if (selectIdx > 0) {\r\n const trg = itemList[selectIdx];\r\n itemList[selectIdx] = itemList[selectIdx - 1];\r\n itemList[selectIdx - 1] = trg;\r\n if (itemList[selectIdx].DEV_INDEX === 0) {\r\n itemList[selectIdx].DSP_COLOR = GetDefaultPenColor(selectIdx + 1);\r\n }\r\n setItemList(conditionRow(itemList));\r\n setSelectIdx(selectIdx - 1);\r\n\r\n const grp = editList.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n props.editData.Target = { group: grp, list: itemList, colset: colSetInfo };\r\n props.editData.IsUpdate = true;\r\n }\r\n }\r\n };\r\n const downRow = () => {\r\n if (selectIdx == -1) {\r\n setSelectIdx(0);\r\n return;\r\n }\r\n if (selectIdx < MaxSettingRow - 1) {\r\n const trg = itemList[selectIdx];\r\n itemList[selectIdx] = itemList[selectIdx + 1];\r\n itemList[selectIdx + 1] = trg;\r\n if (itemList[selectIdx].DEV_INDEX === 0) {\r\n itemList[selectIdx].DSP_COLOR = GetDefaultPenColor(selectIdx + 1);\r\n }\r\n setItemList(conditionRow(itemList));\r\n setSelectIdx(selectIdx + 1);\r\n\r\n const grp = editList.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n props.editData.Target = { group: grp, list: itemList, colset: colSetInfo };\r\n props.editData.IsUpdate = true;\r\n }\r\n }\r\n };\r\n const updateDisp = (disp: boolean) => {\r\n setDispFlg(disp);\r\n const grp = editList.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n grp.DSP_FLG = disp ? 1 : 0;\r\n\r\n props.editData.Target = { group: grp, list: itemList, colset: colSetInfo };\r\n props.editData.IsUpdate = true;\r\n }\r\n };\r\n const updatePeriod = (val: number) => {\r\n setPeriod(val);\r\n const grp = editList.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n grp.DSP_SPAN = val;\r\n\r\n props.editData.Target = { group: grp, list: itemList, colset: colSetInfo };\r\n props.editData.IsUpdate = true;\r\n }\r\n };\r\n const updateAutoUpdate = (flag: boolean) => {\r\n setAutoUpdate(flag);\r\n const grp = editList.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n grp.AUT_UPDATE = flag ? 1 : 0;\r\n\r\n props.editData.Target = { group: grp, list: itemList, colset: colSetInfo };\r\n props.editData.IsUpdate = true;\r\n }\r\n };\r\n\r\n const allDisp = () => {\r\n itemList.forEach((itm) => {\r\n itm.DSP_FLG = 1;\r\n });\r\n const temp = itemList.concat(); // 画面更新のためArrayの再生成\r\n setItemList(temp);\r\n\r\n const grp = editList.find((ed) => ed.GROUP_NO === groupNo);\r\n props.editData.Target = { group: grp, list: temp, colset: colSetInfo };\r\n props.editData.IsUpdate = true;\r\n };\r\n\r\n const ValidateSetting = (\r\n group: RT_TRD_GROUP_SET,\r\n items: V_RT_TREND_SETTING_ITEM[],\r\n colsets: ColSetInfo[]\r\n ): string => {\r\n if (group.GROUP_NAME == '') {\r\n return t('RealtimeSetting.グループ名必須', 'グループ名は必須です');\r\n }\r\n /* 全行の空チェック */\r\n if (items.filter((r) => r.DEV_INDEX !== 0).length === 0) {\r\n return t('TrendSetting.リストが空のためグループが削除されます', 'リストが空のためグループが削除されます');\r\n }\r\n\r\n for (var idx = 0; idx < items.length; idx++) {\r\n const item = items[idx];\r\n const itemNoInfo: string = 'no:' + String(idx + 1) + ' ';\r\n //console.debug(['checkValidityItem() res:', checkValidityItem(item), item]);\r\n if (checkValidityItem(item)) {\r\n let trg;\r\n if (item.SPEED === SpeedKind.SPEED_CONAN) {\r\n //コナンエアの場合\r\n trg = colsets.find((colset) => {\r\n return (\r\n colset.DEV_INDEX === item.DEV_INDEX &&\r\n colset.SPEED === item.SPEED &&\r\n colset.ITM_NAME_NO === item.ITM_NAME_NO\r\n );\r\n });\r\n } else {\r\n trg = colsets.find((colset) => {\r\n return (\r\n colset.KIND_NO === item.KIND_NO &&\r\n colset.DEV_INDEX === item.DEV_INDEX &&\r\n colset.ITM_NAME_NO === item.ITM_NAME_NO &&\r\n colset.SPEED === item.SPEED\r\n );\r\n });\r\n }\r\n\r\n // console.debug(['colsets', colsets]);\r\n // var dbg = colsets.filter((r) => r.KIND_NO == 3 && r.DEV_INDEX === 125);\r\n // console.debug(['dbg', dbg]);\r\n if (trg) {\r\n if (item.KIND_NO !== 0 && item.DEV_INDEX !== 0 && item.ITM_NAME_NO !== 0) {\r\n if (item.CLC === 0) {\r\n return (\r\n itemNoInfo +\r\n t('RealtimeSetting.登録データが不正です。(データ種別)', '登録データが不正です。(データ種別)')\r\n );\r\n }\r\n if (item.MCLC_TYP_ID === 0) {\r\n return (\r\n itemNoInfo + t('RealtimeSetting.登録データが不正です。(演算種別)', '登録データが不正です。(演算種別)')\r\n );\r\n }\r\n if (item.TYP_NO === 0) {\r\n return (\r\n itemNoInfo + t('RealtimeSetting.登録データが不正です。(異常内容)', '登録データが不正です。(異常内容)')\r\n );\r\n }\r\n\r\n if (item.SPEED != 1) {\r\n if (item.RT_LMT_H === 0 && item.RT_LMT_HH === 0) {\r\n return (\r\n itemNoInfo +\r\n t(\r\n 'RealtimeSetting.登録データが不正です。警報閾値(軽故障、重故障 両値0)',\r\n '登録データが不正です。警報閾値(軽故障、重故障 両値0)'\r\n )\r\n );\r\n } else if (item.RT_LMT_H > item.RT_LMT_HH) {\r\n return (\r\n itemNoInfo +\r\n t(\r\n 'RealtimeSetting.登録データが不正です。警報閾値(軽故障>重故障)',\r\n '登録データが不正です。警報閾値(軽故障>重故障)'\r\n )\r\n );\r\n }\r\n } else {\r\n if (item.COL_RT_LMT_H === 0 && item.COL_RT_LMT_HH === 0) {\r\n return (\r\n itemNoInfo +\r\n t(\r\n 'RealtimeSetting.登録データが不正です。警報閾値(軽故障、重故障 両値0)',\r\n '登録データが不正です。警報閾値(軽故障、重故障 両値0)'\r\n )\r\n );\r\n } else if (item.COL_RT_LMT_H > item.COL_RT_LMT_HH) {\r\n return (\r\n itemNoInfo +\r\n t(\r\n 'RealtimeSetting.登録データが不正です。警報閾値(軽故障>重故障)',\r\n '登録データが不正です。警報閾値(軽故障>重故障)'\r\n )\r\n );\r\n }\r\n }\r\n\r\n // if (item.GRP_LOW >= item.GRP_HIGH) {\r\n // return (\r\n // itemNoInfo +\r\n // t(\r\n // 'RealtimeSetting.登録データが不正です。(グラフ最小値>=グラフ最大値)',\r\n // '登録データが不正です。(グラフ最小値>=グラフ最大値)'\r\n // )\r\n // );\r\n // }\r\n }\r\n } else {\r\n console.debug(['colsets,item, index', colsets, item, idx]);\r\n return (\r\n itemNoInfo +\r\n t(\r\n 'RealtimeSetting.指定された項目が見つかりません。(機器番号・項目名称からPLCNo.、AIカードNo.、CHNo.を検索)',\r\n '指定された項目が見つかりません。(機器番号・項目名称からPLCNo.、AIカードNo.、CHNo.を検索)'\r\n )\r\n );\r\n }\r\n }\r\n }\r\n return '';\r\n };\r\n\r\n return (\r\n
\r\n \r\n
\r\n
{t('RealtimeSetting.グループNo', 'グループNo')}
\r\n
\r\n {\r\n if (typeof e.target.value === 'number') {\r\n setGroupNo(e.target.value);\r\n } else if (typeof e.target.value === 'string') {\r\n setGroupNo(parseInt(e.target.value));\r\n }\r\n }}\r\n />\r\n
\r\n
{t('RealtimeSetting.グループ名称', 'グループ名称')}
\r\n
\r\n {\r\n groupNameChange(e.target.value);\r\n }}\r\n />\r\n
\r\n
\r\n
\r\n {/*
{t('RealtimeSetting.表示', '表示')}
\r\n
\r\n {\r\n updateDisp(e.target.checked);\r\n }}\r\n />\r\n
*/}\r\n
\r\n {\r\n if (typeof e.target.value === 'string') {\r\n updatePeriod(parseInt(e.target.value));\r\n }\r\n }}\r\n />\r\n
\r\n {/*
{t('RealtimeSetting.カーソル', 'カーソル')}
\r\n
\r\n \r\n
\r\n
{t('RealtimeSetting.自動更新', '自動更新')}
\r\n
\r\n {\r\n updateAutoUpdate(e.target.checked);\r\n }}\r\n />\r\n
*/}\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n \r\n {t('RealtimeSetting.表示', '表示')}\r\n \r\n \r\n {t('RealtimeSetting.計測種別', '計測種別')}\r\n \r\n \r\n {t('RealtimeSetting.機器番号_機器名称', '機器番号・機器名称')}\r\n \r\n \r\n {t('RealtimeSetting.項目名称', '項目名称')}\r\n \r\n \r\n {t('RealtimeSetting.データ種別', 'データ種別')}\r\n \r\n \r\n {t('RealtimeSetting.演算種別', '演算種別')}\r\n \r\n \r\n {t('RealtimeSetting.異常種別', '異常種別')}\r\n \r\n \r\n {t('RealtimeSetting.警報閾値', '警報閾値')}\r\n \r\n {/* \r\n {t('RealtimeSetting.グラフ最小値', 'グラフ最小値')}\r\n \r\n \r\n {t('RealtimeSetting.グラフ最大値', 'グラフ最大値')}\r\n */}\r\n \r\n {t('RealtimeSetting.単位', '単位')}\r\n \r\n \r\n \r\n {t('RealtimeSetting.有', '有')}\r\n {t('RealtimeSetting.線', '線')}\r\n {t('RealtimeSetting.軽故障', '軽故障')}\r\n {t('RealtimeSetting.重故障', '重故障')}\r\n \r\n \r\n \r\n {itemList.map((item, idx) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n insertRow()}\r\n deleteAction={() => deleteRow()}\r\n upAction={() => upRow()}\r\n downAction={() => downRow()}\r\n />\r\n
\r\n
\r\n {\r\n allDisp();\r\n }}\r\n >\r\n {t('RealtimeSetting.すべて表示', 'すべて表示')}\r\n \r\n\r\n {\r\n setDlgmsg(t('RealtimeSetting.保存しますか?', '保存しますか?'));\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n const grp = editList.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n saveCurrentSetting({ group: grp, list: itemList, colset: colSetInfo }).then((_) => {\r\n props.editData.IsSaveClose = true;\r\n props.editData.IsUpdate = false;\r\n if (props.isDialog) {\r\n props.editData.CloseSetting();\r\n }\r\n });\r\n }\r\n })\r\n .cancel(() => { });\r\n }}\r\n cancelAction={() => {\r\n if (props.editData.IsUpdate) {\r\n setDlgmsg(\r\n t(\r\n 'RealtimeSetting.保存していないデータを破棄します。\\nよろしいですか?',\r\n '保存していないデータを破棄します。\\nよろしいですか?'\r\n )\r\n );\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n if (props.isDialog) {\r\n props.editData.IsUpdate = false;\r\n props.editData.CloseSetting();\r\n } else {\r\n setEditList([]);\r\n setGroupNo(0);\r\n props.editData.UpdateCancel();\r\n }\r\n })\r\n .cancel(() => { });\r\n } else {\r\n if (props.isDialog) {\r\n props.editData.CloseSetting();\r\n }\r\n }\r\n }}\r\n createAction={() => {\r\n actCrtDlg.open().apply((info) => {\r\n const grp = editList.find((ed) => ed.GROUP_NO == info.no);\r\n if (!grp) {\r\n const newGrp: RT_TRD_GROUP_SET = {\r\n GROUP_NO: info.no,\r\n GROUP_NAME: '',\r\n DSP_FLG: 1,\r\n DSP_COLOR: cursorColor,\r\n AUT_UPDATE: 0,\r\n DSP_SPAN: 1,\r\n };\r\n const newList = editList.concat(newGrp).sort((g1, g2) => g1.GROUP_NO - g2.GROUP_NO);\r\n setEditList(newList);\r\n }\r\n setGroupNo(info.no);\r\n });\r\n }}\r\n deleteAction={() => {\r\n setDlgmsg(t('RealtimeSetting.削除しますか?', '削除しますか?'));\r\n actCfmDlg.open().apply((_) => {\r\n const grp = editList.find((ed) => ed.GROUP_NO == groupNo);\r\n if (grp) {\r\n grp.GROUP_NAME = '';\r\n deleteCurrentSetting({ group: grp, list: [], colset: colSetInfo }).then((_) => {\r\n props.editData.IsSaveClose = true;\r\n props.editData.IsUpdate = false;\r\n const newEditList = editList.filter((ed) => ed.GROUP_NO != groupNo);\r\n setEditList(newEditList);\r\n });\r\n }\r\n });\r\n }}\r\n />\r\n
\r\n
\r\n {cfmdlg}\r\n {msgdlg}\r\n {crtdlg}\r\n
\r\n );\r\n};\r\n\r\nRealtimeSettingPage.defaultProps = { isDialog: false };\r\n\r\nexport default RealtimeSettingPage;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { Dialog, DialogTitle, DialogContent } from '@material-ui/core';\r\nimport { DialogAction } from '../../../function/useModal';\r\nimport { useTranslation } from 'react-i18next';\r\nimport RealtimeSetting from '../../Pages/GroupSettings/RealTimeSetting/RealtimeSettingPage';\r\nimport { SettingsState } from '../../organisms/SelectSettings';\r\n\r\ntype RealtimeSettingDialogProps = {\r\n dialog: DialogAction;\r\n groupNo: number;\r\n};\r\n\r\nexport type RealtimeSettingDialogResponse = {};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n dialog: {\r\n background: '#FFFFEE',\r\n },\r\n })\r\n);\r\n\r\nconst RealtimeSettingDialog: React.FC = (props: RealtimeSettingDialogProps) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [isOpen, setIsOpen] = useState(true);\r\n const [mode, setMode] = useState(true);\r\n const [no, setNo] = useState(props.groupNo);\r\n const [editData, setEditData] = useState(new SettingsState());\r\n const [dummyIdx, setDummyIdx] = useState(0);\r\n\r\n useEffect(() => {\r\n editData.DispatchIndex = setDummyIdx;\r\n }, [editData]);\r\n\r\n useEffect(() => {\r\n if (dummyIdx < 0) {\r\n setIsOpen(false);\r\n setMode(editData.IsSaveClose);\r\n }\r\n }, [dummyIdx]);\r\n\r\n return (\r\n <>\r\n {}}\r\n onExited={(e) => {\r\n if (mode) {\r\n props.dialog.apply({});\r\n } else {\r\n props.dialog.cancel();\r\n }\r\n }}\r\n PaperProps={{ className: classes.dialog }}\r\n >\r\n \r\n {t('RealtimeSettingDialog.リアルタイムトレンドグループ設定', 'リアルタイムトレンドグループ設定')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default RealtimeSettingDialog;\r\n\r\n//import TrendSettingDialog, { TrendSettingDialogResponse } from '../../molecules/Dialog/TrendSettingDialog';\r\n//const [flgTSDlg, actTSDlg] = useModal();\r\n// const tsdlg = flgTSDlg ? : null;\r\n","import React, { useEffect, useState } from 'react';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport dayjs from 'dayjs';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport Box from '@material-ui/core/Box';\r\n\r\nimport ItemCalenderTimeEx from '../../atoms/Calendar/ItemCalenderTimeEx';\r\nimport { RT_TRD_GROUP_SET } from '../../../function/GroupDataModel';\r\nimport RealTimeTrendGraphPageComboBox from './RealTimeTrendGraphPageComboBox';\r\nimport RealTimeTrendGraphItemInfoHeader from './RealTimeTrendGraphItemInfoHeader';\r\nimport RealTimeTrendGraphChart, { ChartInitType } from './RealTimeTrendGraphChart';\r\nimport {\r\n RealTimeTrendSettingModel,\r\n CreateDefaltRealTimeTrendSettingModel,\r\n GetRealTimeTrendSettingModelList,\r\n} from './RealTimeTrendGraph';\r\nimport RealTimeTrendGraphItemInfoList from './RealTimeTrendGraphItemInfoList';\r\nimport RealTimeTrendGraphButtonList from './RealTimeTrendGraphButtonList';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useModal } from '../../../function/useModal';\r\nimport RealtimeSettingDialog, { RealtimeSettingDialogResponse } from '../../molecules/Dialog/RealtimeSettingDialog';\r\nimport RangeInputNumber from '../../molecules/Range/RangeInputNumber';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n responsiveContainer: {\r\n minHeight: 'calc(100vh - 440px)',\r\n maxHeight: 'calc(100vh - 440px)',\r\n },\r\n paper: {\r\n background: '#FFFFEE',\r\n },\r\n labelStyle: {\r\n fontSize: '15px',\r\n },\r\n })\r\n);\r\n\r\nconst createDefaltTrandSettingData = (count: number): RealTimeTrendSettingModel[] => {\r\n var list: RealTimeTrendSettingModel[] = [];\r\n for (let i = 0; i < count; i++) {\r\n list.push(CreateDefaltRealTimeTrendSettingModel());\r\n }\r\n return list;\r\n};\r\n\r\ntype Props = {\r\n location: { state: RT_TRD_GROUP_SET };\r\n};\r\n\r\nconst RealTimeTrendGraphPage: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const selectDay: string = dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss');\r\n console.debug(['--- selectDay', selectDay]);\r\n\r\n const [chartInitData, setChartInitData] = useState({\r\n selectGroupNo: 0,\r\n targetDay: '',\r\n trendSettingList: [],\r\n });\r\n\r\n //画面選択中のグループ番号\r\n const [selectGroupNo, setSelectGroupNo] = useState(\r\n props.location.state != undefined ? props.location.state.GROUP_NO : 1\r\n );\r\n\r\n //カーソル日付\r\n const [targetDay, setTargetDay] = useState(selectDay);\r\n\r\n const [trendSettingList, setTrendSettingList] = useState(\r\n createDefaltTrandSettingData(8)\r\n ); //画面選択中のグループアイテム\r\n\r\n const [flgRTTDlg, actRTTDlg] = useModal();\r\n\r\n const [yMax, setYMax] = useState(0);\r\n const [yMin, setYMin] = useState(0);\r\n\r\n const onYMinMaxChange = (min: number, max: number) => {\r\n if (min == Infinity) {\r\n return;\r\n }\r\n if (max == Infinity) {\r\n return;\r\n }\r\n console.debug(['min max', min, max]);\r\n setYMax(max);\r\n setYMin(min);\r\n };\r\n\r\n useEffect(() => {\r\n GetRealTimeTrendSettingModelList(selectGroupNo.toString()).then((result) => {\r\n console.log(['GetRealTimeTrendSettingModelList - useEffect', result]);\r\n //左側アイテムをデフォルト選択\r\n if (result.length && result[0].PLCNo !== '0') {\r\n result.forEach((row) => (row.IsRowSelect = false));\r\n result[0].IsRowSelect = true;\r\n }\r\n setTrendSettingList([...result]);\r\n setChartInitData({ selectGroupNo: selectGroupNo, targetDay: targetDay, trendSettingList: result });\r\n });\r\n }, [selectGroupNo]);\r\n\r\n const changeGroupSelect = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n setSelectGroupNo(Number(event.target.value));\r\n };\r\n\r\n const changeTrendSettingData = (datas: RealTimeTrendSettingModel[]) => {\r\n //console.log([\"★★★datas\", datas]);\r\n setTrendSettingList([...datas]);\r\n };\r\n\r\n //リアルタイムトレンドダイアログ\r\n const showRealTimeTrendSettingDialog = () => {\r\n console.debug(['★ showRealTimeTrendSettingDialog ★', selectGroupNo]);\r\n\r\n actRTTDlg\r\n .open()\r\n .apply((resp) => {\r\n console.debug(['apply()', resp]);\r\n GetRealTimeTrendSettingModelList(selectGroupNo.toString()).then((result) => {\r\n //console.log(['GetRealTimeTrendSettingModelList - actRTTDlg', result]);\r\n //左側アイテムをデフォルト選択\r\n if (result.length && result[0].PLCNo !== '0') {\r\n result.forEach((row) => (row.IsRowSelect = false));\r\n result[0].IsRowSelect = true;\r\n }\r\n setTrendSettingList([...result]);\r\n setChartInitData({ selectGroupNo: selectGroupNo, targetDay: targetDay, trendSettingList: result });\r\n });\r\n })\r\n .cancel((resp) => {\r\n //console.debug(['cancel()',]);\r\n });\r\n };\r\n const rttdlg = flgRTTDlg ? : null;\r\n\r\n const changeCalendarValue = (value: string) => {\r\n console.debug(['★changeCalendarValue★', value]);\r\n setTargetDay(value);\r\n setChartInitData({ selectGroupNo: selectGroupNo, targetDay: value, trendSettingList: trendSettingList });\r\n };\r\n\r\n return (\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {rttdlg}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default RealTimeTrendGraphPage;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\n\r\nimport ColorLineText from '../../atoms/Text/ColorLineText';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableCell: {\r\n //borderWidth: '1px',\r\n //borderColor: '#dcdcdc',\r\n //borderStyle: 'solid',\r\n padding: '0px',\r\n borderBottomWidth: '0px',\r\n },\r\n })\r\n);\r\n\r\ntype Props = {\r\n itemName: string;\r\n color: string;\r\n isCheckd: boolean;\r\n onChange: (event: React.ChangeEvent) => void;\r\n};\r\n\r\nconst PhaseCurrentCheckBox: React.FC = (props) => {\r\n const classes = useStyles();\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n props.onChange(e)} checked={props.isCheckd} />\r\n {props.itemName}\r\n
\r\n {props.color != '' ? :
 
}\r\n
\r\n );\r\n};\r\n\r\nexport default PhaseCurrentCheckBox;\r\n","import React, { useState, useEffect } from 'react';\r\nimport PhaseCurrentCheckBox from './PhaseCurrentCheckBox';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nexport type PhaseCurrentCheckBoxData = {\r\n isRDisp: boolean; //R相表示\r\n isSDisp: boolean; //S相表示\r\n isTDisp: boolean; //T相表示\r\n isPileup: boolean; //重ね合わせ\r\n isDCRemoval: boolean; //直流成分除去 DC component removal\r\n};\r\n\r\ntype Props = {\r\n selectData: PhaseCurrentCheckBoxData;\r\n onSelectDataChangeEvent: (data: PhaseCurrentCheckBoxData) => void;\r\n};\r\n\r\nconst PhaseCurrentCheckBoxList: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const tdStyle: React.CSSProperties = {};\r\n const tableStyle: React.CSSProperties = {\r\n borderCollapse: `collapse`,\r\n };\r\n\r\n const onRCheckBoxChange = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n console.debug('onRCheckBoxChange ' + event.target.value);\r\n var sDt = props.selectData;\r\n sDt.isRDisp = !sDt.isRDisp;\r\n props.onSelectDataChangeEvent(sDt);\r\n };\r\n const onSCheckBoxChange = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n console.debug('onSCheckBoxChange ' + event.target.value);\r\n var sDt = props.selectData;\r\n sDt.isSDisp = !sDt.isSDisp;\r\n props.onSelectDataChangeEvent(sDt);\r\n };\r\n const onTCheckBoxChange = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n console.debug('onTCheckBoxChange ' + event.target.value);\r\n var sDt = props.selectData;\r\n sDt.isTDisp = !sDt.isTDisp;\r\n props.onSelectDataChangeEvent(sDt);\r\n };\r\n const onPileupChange = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n console.debug('onPileupChange ' + event.target.value);\r\n var sDt = props.selectData;\r\n sDt.isPileup = !sDt.isPileup;\r\n props.onSelectDataChangeEvent(sDt);\r\n };\r\n const onDCRemovalChange = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n console.debug('onDCRemovalChange ' + event.target.value);\r\n var sDt = props.selectData;\r\n sDt.isDCRemoval = !sDt.isDCRemoval;\r\n props.onSelectDataChangeEvent(sDt);\r\n };\r\n\r\n return (\r\n <>\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n {t('PhaseCurrentCheckBoxList.重ね合わせ', '重ね合わせ')}\r\n
\r\n \r\n {t('PhaseCurrentCheckBoxList.直流成分除去', '直流成分除去')}\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default PhaseCurrentCheckBoxList;\r\n","import {TM_TRD_GROUP_SET} from \"../../../function/GroupDataModel\";\r\nimport { LogD } from \"../../../function/LogLapper\";\r\n\r\n//ライン情報\r\nexport type GraphLineData = {\r\n XValues: number[],\r\n YValues: string[],\r\n PLCNo: string,\r\n AICardNo: string,\r\n ChannelNo:string ,\r\n ItemName:string ,\r\n FileName: string,\r\n MaxValue : number,\r\n MinValue : number,\r\n YaxisOffset: number,\r\n XaxisStartIndex: number,\r\n XaxisSpanCount: number,\r\n SamplingCount: number,\r\n SamplingPeriod: number,\r\n Unit : string,\r\n}\r\n\r\n//ライン情報\r\nexport type GraphLineDatas = {\r\n RGrahData: GraphLineData;\r\n SGrahData: GraphLineData;\r\n TGrahData: GraphLineData;\r\n};\r\n\r\n//CSVファイルの存在する時間リストを取得\r\nexport const GetTimeList = (devIndex: string, targetDay : string ) : Promise => {\r\n return new Promise((resolve, reject) => {\r\n const url = \"api/PhaseCurrent/GetDataTimeList\";\r\n const param = `?devIndex=${devIndex}&targetTime=${targetDay}`;\r\n //console.debug(url + param);\r\n fetch(url + param)\r\n .then((res) => res.json())\r\n .then((result: string[]) => {\r\n //console.debug(['result', result]);\r\n if (TimeListValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\nconst TimeListValidate = (data: string[]) => {\r\n LogD(`GetTimeListValidate ckeck ${data}`,true);\r\n if (data == undefined) return false;\r\n LogD(\"GetTimeListValidate ckeck ok\",true);\r\n return true;\r\n};\r\n\r\n//CSVファイルの存在する時間リストを取得\r\nexport const GetLatesTime = (devIndex: string) : Promise => {\r\n return new Promise((resolve, reject) => {\r\n const url = \"api/PhaseCurrent/GetDataLatesTime\";\r\n console.debug(\"1★\");\r\n const param = `?devIndex=${devIndex}`;\r\n console.debug(url + param);\r\n fetch(url + param)\r\n .then((res) => res.json())\r\n .then((result: string) => {\r\n console.debug(\"2★\");\r\n console.debug(result);\r\n if (LatesTimeValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\nconst LatesTimeValidate = (data: string) => {\r\n console.debug(\"LatesTimeValidate ckeck\");\r\n if (data == undefined) return false;\r\n LogD(\"LatesTimeValidate ckeck ok\",true);\r\n return true;\r\n};\r\n\r\n//CSVファイルの取得\r\nexport const GetPhaseCurrentGraph = (devIndex: string, targetDay: string , millisecond : number): Promise => {\r\n //console.debug(['GetPhaseCurrentGraph()', devIndex, targetDay]);\r\n\r\n return new Promise((resolve, reject) => {\r\n const url = \"api/PhaseCurrent/GetPhaseCurrentGraph\";\r\n const param = `?devIndex=${devIndex}&targetTime=${targetDay}&millisecond=${millisecond}`;\r\n fetch(url + param)\r\n .then((res) => res.json())\r\n .then((result: GraphLineDatas) => {\r\n //console.debug(['result', result]);\r\n if (PhaseCurrentGraphValidate(result)) {\r\n resolve(result);\r\n }\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\nconst PhaseCurrentGraphValidate = (data: GraphLineDatas) => {\r\n if (data.RGrahData === null || data.SGrahData === null || data.TGrahData === null) {\r\n return false;\r\n }\r\n return true;\r\n};\r\n","import React, { useEffect, useState } from 'react';\r\nimport dayjs from 'dayjs';\r\nimport { GetNameDevSetList, NAME_DEV_SET } from '../../../function/NameDevSetModel';\r\nimport { ItemComboBox, ComboBoxItemType } from '../../atoms/ComboBox/ItemComboBox';\r\nimport Calender2 from '../../atoms/Calendar/ItemCalenderEx';\r\nimport { GetTimeList } from './PhaseCurrent';\r\n\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { useTranslation } from 'react-i18next';\r\nimport DateInput from '../../atoms/Calendar/DateInput';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n labelStyle: {\r\n padding: '0px,50px,0px,0px',\r\n },\r\n itemBoxStyle: {\r\n marggin: '0px,0px,10px,10px',\r\n },\r\n })\r\n);\r\n\r\n//画面情報\r\nexport type PhaseCurrentSelectData = {\r\n devIndex: string; //デバイスインデックス\r\n selectDay: string; //選択日時\r\n selectTime: string; //選択時間\r\n minSec: number; //時間軸範囲\r\n maxSec: number; //時間軸範囲\r\n};\r\n\r\n//画面リフレッシュタイプ\r\nexport type InitDataType = {\r\n nameDevList: NAME_DEV_SET[];\r\n selectData: PhaseCurrentSelectData;\r\n};\r\n\r\ntype Props = {\r\n selectData: PhaseCurrentSelectData;\r\n initData: InitDataType;\r\n onSelectDataChangeEvent: (data: PhaseCurrentSelectData) => void;\r\n};\r\nconst PhaseCurrentSelectItem: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n //console.debug(props);\r\n\r\n const [nameDebSetList, setNameDevSetList] = useState();\r\n const [selectDevid, setSelectDevid] = useState(props.selectData.devIndex);\r\n const [timeList, setTimeList] = useState();\r\n const [selectDay, setSelectDay] = useState(props.selectData.selectDay);\r\n const [selectTimeid, setSelectTimeid] = useState(0);\r\n\r\n useEffect(() => {\r\n console.debug(['リフレッシュデータ', props.initData]);\r\n\r\n if (props.initData.selectData.devIndex == '0') {\r\n //初期化時は何もしない\r\n return;\r\n }\r\n var nameDevList = props.initData.nameDevList;\r\n var selData = props.initData.selectData;\r\n var cmdList: ComboBoxItemType[] = [];\r\n for (let i = 0; i < nameDevList.length; i++) {\r\n cmdList.push({\r\n index: nameDevList[i].DEV_INDEX,\r\n name: nameDevList[i].DEV_NO + ' ' + nameDevList[i].DEV_NAME,\r\n });\r\n }\r\n setNameDevSetList([...cmdList]);\r\n GetTimeList(selData.devIndex, selData.selectDay)\r\n .then((ret) => {\r\n var cmdList2: ComboBoxItemType[] = [];\r\n for (let i = 0; i < ret.length; i++) {\r\n cmdList2.push({\r\n index: i + 1,\r\n name: dayjs(ret[i]).format('HH:mm:ss'),\r\n });\r\n }\r\n //時間でソートを行う\r\n cmdList2.sort(function (a, b) {\r\n if (a.name > b.name) {\r\n return 1;\r\n } else {\r\n return -1;\r\n }\r\n });\r\n setTimeList([...cmdList2]);\r\n setSelectDevid(selData.devIndex);\r\n setSelectDay(selData.selectDay);\r\n\r\n var time = cmdList2.find((row) => row.name == selData.selectTime);\r\n setSelectTimeid(time?.index ?? 0);\r\n })\r\n .catch((r) => {\r\n console.debug(['useEffect リフレッシュデータ catch', r]);\r\n })\r\n .finally(() => { });\r\n }, [props.initData]);\r\n\r\n useEffect(() => {\r\n setSelectDevid(props.selectData.devIndex);\r\n setSelectDay(props.selectData.selectDay);\r\n }, [props.selectData]);\r\n\r\n //選択データ変更時\r\n const setTimeLists = (devIndex: string, selectDay: string) => {\r\n console.debug(['■setTimeLists - devIndex', devIndex]);\r\n var timeList: ComboBoxItemType[] = [];\r\n if (devIndex != '0' && selectDay != '') {\r\n GetTimeList(devIndex, selectDay)\r\n .then((ret) => {\r\n //console.debug(['==ret==', ret]);\r\n for (let i = 0; i < ret.length; i++) {\r\n timeList.push({\r\n index: i + 1,\r\n name: dayjs(ret[i]).format('HH:mm:ss'),\r\n });\r\n }//時間でソートを行う\r\n timeList.sort(function (a, b) {\r\n if (a.name > b.name) {\r\n return 1;\r\n } else {\r\n return -1;\r\n }\r\n })\r\n setTimeList([...timeList]);\r\n\r\n var tmp = props.selectData;\r\n tmp.devIndex = devIndex;\r\n tmp.selectDay = selectDay;\r\n if (timeList.length == 0) {\r\n tmp.selectTime = '';\r\n } else {\r\n tmp.selectTime = timeList[0].name;\r\n }\r\n props.onSelectDataChangeEvent(tmp);\r\n })\r\n .catch((r) => {\r\n console.debug(['useEffect ■setTimeLists catch', r]);\r\n })\r\n .finally(() => { });\r\n }\r\n };\r\n\r\n const ChangeDevSelect = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n setSelectDevid(String(event.target.value));\r\n setTimeLists(String(event.target.value), selectDay);\r\n console.debug('★ChangeDevSelect ' + event.target.value);\r\n };\r\n\r\n const onChangeCalendarValue = (value: string) => {\r\n setSelectDay(value);\r\n setTimeLists(selectDevid, value);\r\n console.debug(['★onChangeCalendarValue ', value, selectDevid]);\r\n };\r\n\r\n const ChangeTimeSelect = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n var time = timeList?.find((row) => row.index == event.target.value);\r\n if (time) {\r\n var tmp = props.selectData;\r\n tmp.devIndex = selectDevid;\r\n tmp.selectDay = selectDay;\r\n tmp.selectTime = time.name;\r\n setSelectTimeid(time.index);\r\n props.onSelectDataChangeEvent(tmp);\r\n console.debug('ChangeTimeSelect ' + time?.name);\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\nexport default PhaseCurrentSelectItem;\r\n","\r\n\r\n/**\r\n * \r\n * @param min \r\n * @param max \r\n * @param lineCount \r\n * @returns \r\n */\r\nexport const GetMemoryScaleByNumber = (min:number ,max:number ,lineCount:number ) : number[] =>\r\n{\r\n var ans : number[] = [];\r\n var xaxisAvarage = Math.floor((max-min)/lineCount);\r\n ans.push(min);\r\n\r\n for(let i = 0 ; i < lineCount; i++){\r\n ans.push(min+(xaxisAvarage* i));\r\n }\r\n ans.push(max);\r\n // console.debug(['GetMemoryScaleByNumber',ans]);\r\n return ans;\r\n};","import React, { useEffect, useState } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport {\r\n LineChart,\r\n Line,\r\n XAxis,\r\n YAxis,\r\n CartesianGrid,\r\n Label,\r\n Tooltip,\r\n Legend,\r\n ResponsiveContainer,\r\n ReferenceLine,\r\n} from 'recharts';\r\nimport PhaseCurrentSelectItem, { PhaseCurrentSelectData } from './PhaseCurrentSelectItem';\r\nimport { GetPhaseCurrentGraph, GraphLineData, GraphLineDatas } from './PhaseCurrent';\r\nimport { PhaseCurrentCheckBoxData } from './PhaseCurrentCheckBoxList';\r\nimport { SelectMsecondType } from './PhaseCurrentPage';\r\nimport * as Constant from '../../../Constant';\r\nimport { ToValueRoundInternal, ToPowIndex, ToValueMaxRound, ToValueMinRound } from '../../../function/CalculationModel';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { GetMemoryScaleByNumber } from '../../../function/ChartCommon';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n customTooltip: {\r\n background: '#FFFFEE',\r\n fontSize: '14px',\r\n padding: '10px 10px 0px 20px',\r\n },\r\n })\r\n);\r\n\r\ntype GraphData = {\r\n lineNo: number;\r\n lineName: string;\r\n points: GraphPoint[];\r\n valueUpper: number;\r\n valueUpperLimit: number;\r\n selectFlg: boolean;\r\n infoColor: string;\r\n};\r\ntype GraphPoint = {\r\n xValue: number;\r\n yValue: number;\r\n};\r\n\r\ntype GraphSetting = {\r\n upper: number;\r\n upperLimit: number;\r\n yMin: number;\r\n yMax: number;\r\n xMin: number;\r\n xMax: number;\r\n backColor: string;\r\n memoryFontColor: string;\r\n yUnit: string;\r\n yUnitColor: string;\r\n xUnitColor: string;\r\n gridColor: string;\r\n};\r\n\r\ntype Props = {\r\n selectMSecondData: SelectMsecondType;\r\n selectData: PhaseCurrentSelectData;\r\n checkBoxData: PhaseCurrentCheckBoxData;\r\n chartUpDate: string;\r\n chartContainerStyle: string;\r\n updateLoadginState: (value: boolean) => void;\r\n};\r\n\r\nconst PhaseCurrentChart: React.FC = (props) => {\r\n console.debug(['PhaseCurrentChart props', props]);\r\n const { t } = useTranslation();\r\n\r\n const classes = useStyles();\r\n const [graphData, setGraphData] = useState([]);\r\n const [graphLineData, setGraphLineData] = useState();\r\n const [graphSetting, setGraphSetting] = useState({\r\n upper: 0,\r\n upperLimit: 0,\r\n yMax: 0,\r\n yMin: 0,\r\n xMax: 0,\r\n xMin: 0,\r\n backColor: Constant.GraphThemeLight.BACK_COLOR,\r\n memoryFontColor: Constant.GraphThemeLight.MEMORY_FONT_COLOR,\r\n yUnit: '',\r\n yUnitColor: Constant.GraphThemeLight.UNIT_COLOR,\r\n xUnitColor: Constant.GraphThemeLight.UNIT_COLOR,\r\n gridColor: Constant.GraphThemeLight.GRID_COLOR,\r\n });\r\n\r\n useEffect(() => {\r\n console.debug(['useEffect -- props.chartUpDate', props.chartUpDate, props.selectData.devIndex]);\r\n if (props.selectData.devIndex == '0') {\r\n //初期化時は呼ばない\r\n return;\r\n }\r\n getGraphData(props.selectMSecondData.maxSec);\r\n }, [props.chartUpDate]);\r\n\r\n useEffect(() => {\r\n console.debug(['useEffect -- graphLineData']);\r\n dispGraphData(props.checkBoxData.isPileup, props.checkBoxData.isDCRemoval);\r\n }, [graphLineData]);\r\n\r\n useEffect(() => {\r\n console.debug([\r\n 'useEffect -- props.checkBoxData, props.selectMSecondData',\r\n props.checkBoxData,\r\n props.selectMSecondData,\r\n graphLineData,\r\n ]);\r\n //時間軸最大値が10000越え時、 全点数取得処理\r\n if (\r\n graphLineData !== undefined &&\r\n graphLineData.RGrahData.SamplingCount == 100000 &&\r\n props.selectMSecondData.maxSec > 10000\r\n ) {\r\n getGraphData(props.selectMSecondData.maxSec);\r\n return;\r\n }\r\n //表示更新\r\n props.updateLoadginState(true);\r\n dispGraphData(props.checkBoxData.isPileup, props.checkBoxData.isDCRemoval);\r\n }, [props.checkBoxData, props.selectMSecondData]);\r\n\r\n /**\r\n * グラフデータを返す\r\n * @param maxMSec 時間軸最大値が10000以上の場合は全データ取得\r\n */\r\n const getGraphData = (maxMSec: number) => {\r\n props.updateLoadginState(true);\r\n var selData = props.selectData;\r\n\r\n console.debug(['call getGraphData()', selData]);\r\n const ms = maxMSec > 10000 ? -1 : 10000;\r\n GetPhaseCurrentGraph(selData.devIndex, selData.selectDay + ' ' + selData.selectTime, ms)\r\n .then((ret) => {\r\n console.debug([`${ms == 10000 ? '10000点' : '全点'} 取得 selData,ret`, selData, ret]);\r\n if (ret.RGrahData == null || ret.SGrahData == null || ret.TGrahData == null) {\r\n //console.debug([\"★★RGrahData,SGrahData,TGrahData\"], ret.RGrahData, ret.SGrahData, ret.TGrahData)\r\n } else {\r\n //console.debug([\"★★RGrahData,SGrahData,TGrahData\"], ret.RGrahData, ret.SGrahData, ret.TGrahData)\r\n setGraphLineData({ ...ret });\r\n }\r\n })\r\n .catch((error) => {\r\n console.error('error : ' + error);\r\n props.updateLoadginState(false);\r\n });\r\n };\r\n\r\n /**\r\n * Y軸範囲検索\r\n * @param data データ\r\n * @param isDCRemoval 直流成分除去フラグ\r\n * @returns\r\n */\r\n const getMaxYValue = (data: GraphLineDatas, isDCRemoval: boolean): number => {\r\n const rMax = isDCRemoval ? data.RGrahData.MaxValue - data.RGrahData.YaxisOffset : data.RGrahData.MaxValue;\r\n const sMax = isDCRemoval ? data.SGrahData.MaxValue - data.SGrahData.YaxisOffset : data.SGrahData.MaxValue;\r\n const tMax = isDCRemoval ? data.TGrahData.MaxValue - data.TGrahData.YaxisOffset : data.TGrahData.MaxValue;\r\n console.debug(['rMax,sMax,tMax', rMax, sMax, tMax]);\r\n\r\n const rMin = isDCRemoval ? data.RGrahData.MinValue - data.RGrahData.YaxisOffset : data.RGrahData.MinValue;\r\n const sMin = isDCRemoval ? data.SGrahData.MinValue - data.SGrahData.YaxisOffset : data.SGrahData.MinValue;\r\n const tMin = isDCRemoval ? data.TGrahData.MinValue - data.TGrahData.YaxisOffset : data.TGrahData.MinValue;\r\n\r\n var aMax = Math.max(rMax, sMax, tMax);\r\n var aMin = Math.min(rMin, sMin, tMin);\r\n\r\n aMax = ToValueMaxRound(aMax);\r\n aMin = ToValueMinRound(aMin);\r\n aMax = Math.abs(aMax);\r\n aMin = Math.abs(aMin);\r\n\r\n const yMax = Math.max(aMax, aMin);\r\n //console.debug(['Y軸最大、最小値計算結果', aMax, aMin, yMax]);\r\n return yMax;\r\n };\r\n\r\n /**\r\n *オートスケールの最大値を取得します\r\n * @param ymax\r\n * @returns\r\n */\r\n\r\n const toAutoScaleMax = (ymax: number): number => {\r\n var resultMax: number;\r\n var tempMaxValue: number;\r\n var i: number;\r\n resultMax = ymax;\r\n\r\n for (i = 0; i < 9; i++) {\r\n tempMaxValue = resultMax * Math.pow(10, i);\r\n if (tempMaxValue >= 1) {\r\n resultMax = Math.round(Math.ceil(tempMaxValue) / Math.pow(10, i));\r\n }\r\n }\r\n //console.debug(['オートスケールの最大値', resultMax]);\r\n return resultMax;\r\n };\r\n\r\n const dispGraphData = (isPileup: boolean, isDCRemoval: boolean) => {\r\n console.debug(['call dispGraphData()', isPileup]);\r\n var setDt: GraphData[] = [];\r\n var tmp: GraphLineData[] = [];\r\n\r\n var gSetting = graphSetting;\r\n if (graphLineData !== undefined) {\r\n var yMax = getMaxYValue(graphLineData, isDCRemoval);\r\n var scaledMax = toAutoScaleMax(yMax);\r\n var offset = scaledMax * 0.5;\r\n //console.debug(['オフセット', offset]);\r\n gSetting.yMax = scaledMax;\r\n gSetting.yMin = scaledMax * -1;\r\n\r\n gSetting.yUnit = graphLineData.RGrahData.Unit;\r\n console.debug(['dispGraphData - graphLineData', graphLineData]);\r\n\r\n tmp.push(graphLineData.RGrahData);\r\n tmp.push(graphLineData.SGrahData);\r\n tmp.push(graphLineData.TGrahData);\r\n\r\n const axisMin: number = props.selectMSecondData.minSec;\r\n const axisMax: number = props.selectMSecondData.maxSec;\r\n gSetting.xMin = axisMin;\r\n gSetting.xMax = axisMax;\r\n\r\n // console.debug(['gSetting', gSetting]);\r\n for (let i = 0; i < tmp.length; i++) {\r\n var color = '#ff0000';\r\n var isDisp = '#ff0000';\r\n if (i === 1) color = '#0000ff';\r\n if (i === 2) color = '#008000';\r\n\r\n var item: GraphData = {\r\n lineNo: Number(i),\r\n valueUpper: 0,\r\n valueUpperLimit: 0,\r\n selectFlg: true,\r\n points: [],\r\n infoColor: color,\r\n lineName: String(i + 1),\r\n };\r\n\r\n var startIndex = graphLineData.RGrahData.XaxisStartIndex;\r\n var endIndex = startIndex + graphLineData.RGrahData.XaxisSpanCount * 6;\r\n console.debug(['開始点,終了点', startIndex, endIndex]);\r\n if (isPileup) {\r\n startIndex = tmp[i].XaxisStartIndex;\r\n endIndex = startIndex + tmp[i].XaxisSpanCount * 6;\r\n }\r\n\r\n var startSampleIndex = startIndex + Math.ceil(axisMin / tmp[i].SamplingPeriod);\r\n var endSampleIndex = startIndex + Math.trunc(axisMax / tmp[i].SamplingPeriod);\r\n startSampleIndex = startSampleIndex >= tmp[i].XValues.length ? tmp[i].XValues.length - 1 : startSampleIndex;\r\n endSampleIndex = endSampleIndex >= tmp[i].XValues.length ? tmp[i].XValues.length - 1 : endSampleIndex;\r\n console.debug(['開始点2,終了点2', startSampleIndex, endSampleIndex]);\r\n for (let j = startSampleIndex; j < endSampleIndex; j++) {\r\n const xLabel = (j - startSampleIndex) * tmp[i].SamplingPeriod + axisMin;\r\n item.points.push({\r\n xValue: xLabel,\r\n yValue: isDCRemoval ? Number(tmp[i].YValues[j]) - Number(tmp[i].YaxisOffset) : Number(tmp[i].YValues[j]),\r\n });\r\n }\r\n setDt.push(item);\r\n\r\n // console.debug(item.points);\r\n }\r\n\r\n for (let i = 0; i < setDt.length; i++) {\r\n if (i === 0) {\r\n setDt[i].selectFlg = props.checkBoxData.isRDisp;\r\n setDt[i].lineName = graphLineData.RGrahData.ItemName;\r\n } else if (i === 1) {\r\n setDt[i].selectFlg = props.checkBoxData.isSDisp;\r\n setDt[i].lineName = graphLineData.SGrahData.ItemName;\r\n } else if (i === 2) {\r\n setDt[i].selectFlg = props.checkBoxData.isTDisp;\r\n setDt[i].lineName = graphLineData.TGrahData.ItemName;\r\n }\r\n }\r\n\r\n console.debug(['grahp data ', setDt]);\r\n setGraphData([...setDt]);\r\n setGraphSetting(gSetting);\r\n }\r\n props.updateLoadginState(false);\r\n };\r\n\r\n const CustomTooltip = ({ active, payload, label }: any) => {\r\n if (active) {\r\n return (\r\n
\r\n
{`${t('PhaseCurrentChart.時間', '時間')} : ${Number(label).toFixed(3)}`}
\r\n {payload?.map((r: any, index: any) => {\r\n return (\r\n
\r\n {r.name} : {Number(r.value).toFixed(3)}\r\n
\r\n );\r\n })}\r\n
\r\n );\r\n }\r\n return null;\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n String(Math.ceil(props))}\r\n domain={[graphSetting.xMin, graphSetting.xMax]}\r\n height={50}\r\n ticks={GetMemoryScaleByNumber(graphSetting.xMin, graphSetting.xMax, 10)}\r\n // tickCount={6}\r\n tick={{ dy: 10 }}\r\n padding={{ right: 0, left: 0 }}\r\n >\r\n \r\n \r\n props.toFixed(2)}\r\n stroke={graphSetting.memoryFontColor}\r\n domain={[graphSetting.yMin, graphSetting.yMax]}\r\n width={85}\r\n >\r\n \r\n \r\n } />\r\n {graphData?.map((row, index) => (\r\n \r\n ))}\r\n \r\n \r\n );\r\n};\r\nexport default PhaseCurrentChart;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useHistory } from 'react-router-dom';\r\n\r\nimport { FFT_CMP_GROUP_SET } from '../../../function/GroupDataModel';\r\nimport { LogD } from '../../../function/LogLapper';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport Button from '@material-ui/core/Button';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { GetGroupDeviceSelect } from '../../../function/GroupDataModel';\r\nimport PhaseCurrentSelectItem, { PhaseCurrentSelectData, InitDataType } from './PhaseCurrentSelectItem';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport SimpleDialog from '../../atoms/Dialog/SimpleDialog';\r\nimport { MeasureHighKind } from '../../../Constant';\r\n\r\n/**引数 */\r\ntype Props = {\r\n phaseCurrentSelectData: PhaseCurrentSelectData;\r\n};\r\n\r\nconst PhaseCurrentButtonList: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const history = useHistory();\r\n\r\n const buttonStyle = {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n };\r\n\r\n const [simpleDialogOpen, setSimpleDialogOpen] = React.useState(false);\r\n const [showMessage, setShowMessage] = React.useState('');\r\n\r\n /** FFT比較ボタン処理 */\r\n const handleFftComparisonPageOpen = () => {\r\n let plc1: number = 0;\r\n let plc2: number = 0;\r\n let set1: number = 0;\r\n let set2: number = 0;\r\n\r\n const selectDt = props.phaseCurrentSelectData;\r\n\r\n GetGroupDeviceSelect().then((r) => {\r\n console.debug(['=GetGroupDeviceSelect=', r]);\r\n var targetRows = r.filter((rr) => rr.DEV_INDEX === Number(selectDt.devIndex));\r\n\r\n console.debug(['=targetRows=', targetRows]);\r\n if (targetRows.length == 0) {\r\n //エラーメッセージ\r\n setShowMessage(t('PhaseCurrentButtonList.項目が選択されていません', '項目が選択されていません'));\r\n setSimpleDialogOpen(true);\r\n return;\r\n } else {\r\n var rtRow = targetRows.find((rt) => rt.NAME_NO == MeasureHighKind.R_CURRENT);\r\n var stRow = targetRows.find((rt) => rt.NAME_NO == MeasureHighKind.S_CURRENT);\r\n var ttRow = targetRows.find((rt) => rt.NAME_NO == MeasureHighKind.T_CURRENT);\r\n\r\n var fftgroupSet: FFT_CMP_GROUP_SET = {\r\n GROUP_NO: 99,\r\n GROUP_NAME: '',\r\n DSP_FLG: 0,\r\n PLC_NO1: rtRow === undefined ? 0 : rtRow.PLC_NO,\r\n SET_NO1: rtRow === undefined ? 0 : rtRow.SET_NO,\r\n PLC_NO2: stRow === undefined ? 0 : stRow.PLC_NO,\r\n SET_NO2: stRow === undefined ? 0 : stRow.SET_NO,\r\n PLC_NO3: ttRow === undefined ? 0 : ttRow.PLC_NO,\r\n SET_NO3: ttRow === undefined ? 0 : ttRow.SET_NO,\r\n KIND1: 0,\r\n KIND2: 0,\r\n KIND3: 0,\r\n\r\n Time_No1: selectDt.selectDay + selectDt.selectTime,\r\n Time_No2: selectDt.selectDay + selectDt.selectTime,\r\n Time_No3: selectDt.selectDay + selectDt.selectTime,\r\n };\r\n\r\n //画面遷移\r\n history.push({\r\n pathname: '/FFTComparisonPage',\r\n state: fftgroupSet,\r\n });\r\n }\r\n });\r\n };\r\n\r\n /**メッセージボックス閉じる */\r\n const handleSimpleDialogClose = () => {\r\n setSimpleDialogOpen(false);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n {t('PhaseCurrentButtonList.FFT比較', 'FFT比較')}\r\n \r\n \r\n \r\n {showMessage}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default PhaseCurrentButtonList;\r\n","import { SpeedKind } from '../Constant';\r\n//\r\nexport type NAME_DEV_SET = {\r\n //機器 INDEX を取得または設定します。機器INDEX 1~384\r\n DEV_INDEX: number;\r\n //実装を取得または設定します。\r\n EST: number;\r\n //機器番号を取得または設定します。\r\n DEV_NO: string;\r\n //機器名称を取得または設定します。\r\n DEV_NAME: string;\r\n //電動機フラグを取得または設定します。\r\n FLG_MOTOR: number;\r\n //電流値補正乗数を取得または設定します。\r\n REV_VAL: number;\r\n // 定格電流 (A) を取得または設定します。\r\n RATED_CUR: number;\r\n //ベアリング呼び番号 (負荷側) を取得または設定します。\r\n BEARING_LD: string;\r\n //ベアリング呼び番号 (反負荷側) を取得または設定します。\r\n BEARING_ANTI_LD: string;\r\n //定格回転数 (min-1) を取得または設定します。\r\n RATED_SPEED: number;\r\n //定格出力 (kW) を取得または設定します。\r\n RATED_POWER: number;\r\n //Pole 数を取得または設定します。\r\n POLE: number;\r\n //電圧 (V) を取得または設定します。\r\n VOLTAGE: number;\r\n //電源周波数 (Hz) を取得または設定します。\r\n PWR_FREQ: number;\r\n //励磁電流 (A) を取得または設定します。\r\n EXC_CUR: number;\r\n //インバータキャリア周波数 (Hz) を取得または設定します。\r\n INV_FREQ: number;\r\n //裕度 (%) を取得または設定します。\r\n WEALTH: number;\r\n //起動判定電流閾値 (A) を取得または設定します。\r\n START_JDG_CUR: number;\r\n //備考を取得または設定します。\r\n NOTE: string;\r\n //キャリア周波数マスクを取得または設定します。\r\n CAREER_MASK: number;\r\n // 波形生成を取得または設定します。\r\n WAV_MAKE: number;\r\n //インバータ駆動を取得または設定します。\r\n INV_DRV_ON: number;\r\n //EMC 識別を取得または設定します。\r\n EMC_TYPE: number;\r\n //平滑化窓幅w0\r\n SMOOTH_W0: (number | null);\r\n //平滑化短い窓幅w1\r\n SMOOTH_W1: (number | null);\r\n //平滑化長い窓幅w2\r\n SMOOTH_W2: (number | null);\r\n //閾値xσ\r\n TH_SIGMA: (number | null);\r\n //軽故障閾値R相\r\n TH_L_R: (number | null);\r\n //軽故障閾値S相\r\n TH_L_S: (number | null);\r\n //軽故障閾値T相\r\n TH_L_T: (number | null);\r\n //重故障閾値R相\r\n TH_H_R: (number | null);\r\n //重故障閾値S相\r\n TH_H_S: (number | null);\r\n //重故障閾値T相\r\n TH_H_T: (number | null);\r\n //振動(速度)上限周波数\r\n SPD_UP_FREQ: (number | null);\r\n //振動(速度)下限周波数\r\n SPD_LO_FREQ: (number | null);\r\n //振動(変位)上限周波数\r\n DSP_UP_FREQ: (number | null);\r\n //振動(変位)下限周波数\r\n DSP_LO_FREQ: (number | null);\r\n //起動判定電流閾値 (A)を(%)に変換した値\r\n startJdgCurPer: number;\r\n};\r\n\r\n/** レスポンス情報 */\r\nexport type ResponceDataType = {\r\n ResponseCode: number;\r\n ErrorCode: number;\r\n ResponseMessage: string;\r\n ErrorMessage: string;\r\n};\r\n\r\n/**\r\n * EMC設定画面で使用する機器番号・機器名称情報取得\r\n * @returns\r\n */\r\nexport const GetNameDevSetEMCList = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/NameDevSet/q?filter=EST eq 1 and EMC_TYPE eq 1\")\r\n .then((res) => {\r\n if (!res.ok) {\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n reject(new Error(message));\r\n }\r\n else {\r\n return res.json();\r\n }\r\n })\r\n .then((result: NAME_DEV_SET[]) => {\r\n if (NameDevSetListValidate(result)) {\r\n result.forEach((dev) => {\r\n //起動判定電流閾値 (%) に変換\r\n dev.START_JDG_CUR = dev.RATED_CUR != 0 ? Math.round((dev.START_JDG_CUR / dev.RATED_CUR) * 100) : 0;\r\n });\r\n resolve(result);\r\n }\r\n else {\r\n reject('Invalidate response');\r\n }\r\n })\r\n .catch((error) => {\r\n console.log(error);\r\n reject(error);\r\n })\r\n });\r\n};\r\n\r\n\r\n/**\r\n * EST=1(実装)だけの機器番号・名称リスト取得\r\n * @returns\r\n */\r\nexport const GetNameDevSetListByDevIndex = (devIndex: string): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(`api/NameDevSet/q?filter=DEV_INDEX eq ${devIndex}`)\r\n .then((res) => res.json())\r\n .then((result: NAME_DEV_SET[]) => {\r\n //console.debug([\"api/NameDevSet\", result]);\r\n if (NameDevSetListValidate(result)) {\r\n result.forEach((dev) => {\r\n dev.START_JDG_CUR = dev.RATED_CUR != 0 ? Math.round((dev.START_JDG_CUR / dev.RATED_CUR) * 100) : 0;\r\n });\r\n resolve(result);\r\n }\r\n\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\n/**\r\n * EST=1(実装)だけの機器番号・名称リスト取得\r\n * @returns\r\n */\r\nexport const GetNameDevSetListByEst1 = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/NameDevSet/q?filter=EST eq 1\")\r\n .then((res) => res.json())\r\n .then((result: NAME_DEV_SET[]) => {\r\n //console.debug([\"api/NameDevSet\", result]);\r\n if (NameDevSetListValidate(result)) {\r\n result.forEach((dev) => {\r\n dev.START_JDG_CUR = dev.RATED_CUR != 0 ? Math.round((dev.START_JDG_CUR / dev.RATED_CUR) * 100) : 0;\r\n });\r\n resolve(result);\r\n }\r\n\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\n//デバイス名称一覧を取得\r\nexport const GetNameDevSetList = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/NameDevSet\")\r\n .then((res) => res.json())\r\n .then((result: NAME_DEV_SET[]) => {\r\n console.debug([\"api/NameDevSet\", result]);\r\n if (NameDevSetListValidate(result)) {\r\n result.forEach((dev) => {\r\n //起動判定電流閾値 (%) に変換\r\n dev.startJdgCurPer = dev.RATED_CUR != 0 ? Math.round((dev.START_JDG_CUR / dev.RATED_CUR) * 100) : 0;\r\n });\r\n resolve(result);\r\n }\r\n else {\r\n reject('Invalidate response');\r\n }\r\n }).catch((error) => {\r\n console.log(error);\r\n reject(error);\r\n })\r\n });\r\n};\r\n\r\n//グループ一覧取得データ検証\r\nconst NameDevSetListValidate = (data: NAME_DEV_SET[]): boolean => {\r\n if (data == undefined) {\r\n console.debug(`GetNameDevSetList NG `);\r\n return false;\r\n }\r\n console.debug(`GetNameDevSetList OK `);\r\n return true;\r\n};\r\n\r\nexport const SetNameDevSetList = (list: NAME_DEV_SET[]): Promise => {\r\n //console.debug(['SetNameDevSetList()', list]);\r\n return new Promise((resolve, reject) => {\r\n //起動判定電流閾値 (%) を元に戻す\r\n //console.debug(`devList check 1st:`, list)\r\n list.forEach((dev) => { dev.START_JDG_CUR = dev.RATED_CUR * (dev.startJdgCurPer / 100) });\r\n //console.debug(`devList check 2nd:`, list)\r\n fetch(\"api/NameDevSet\", {\r\n method: 'put',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(list),\r\n })\r\n .then((res) => resolve(res.status))\r\n .catch(reason => reject(reason));\r\n });\r\n}\r\n\r\n/**\r\n * 選択した機器番号の行のデータを取得\r\n * @param devIndex \r\n * @returns \r\n */\r\nexport const GetNameDevSetRow = (devIndex: number): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const url = 'api/NameDevSet'.concat(`/${devIndex}`)\r\n console.debug(['GetNameDevSetRow url', url])\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: NAME_DEV_SET) => resolve(result))\r\n .catch((error) => {\r\n console.log(error);\r\n reject(error);\r\n })\r\n });\r\n}\r\n\r\n/**\r\n * NAME_DEV_SETテーブルから1行データを更新する\r\n * @param devSet \r\n * @returns \r\n */\r\nexport const SetNameDevSetRow = (devSet: NAME_DEV_SET): Promise => {\r\n console.debug(['SetNameDevSetRow check', devSet])\r\n return new Promise((resolve, reject) => {\r\n\r\n fetch(\"api/NameDevSet/devSetRow\", {\r\n method: 'put',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(devSet),\r\n })\r\n .then((res) => res.json())\r\n .then((result: ResponceDataType) => resolve(result))\r\n .catch(reason => reject(reason));\r\n\r\n });\r\n}\r\n\r\n\r\n/**\r\n * FFT 比較として有効かを取得します。\r\n */\r\nexport const IsValidKindOfFftCmp = (speed: number, measure: number): boolean => {\r\n return speed === SpeedKind.SPEED_KIND_HIGHT || speed === SpeedKind.SPEED_KIND_CALC ? true : false;\r\n};\r\n\r\n/**\r\n * コナンエアとして有効かを取得します。\r\n */\r\nexport const IsValidKindOfFftCmpConan = (speed: number, measure: number): boolean => {\r\n return speed === SpeedKind.SPEED_CONAN ? true : false;\r\n};\r\n","import React, { useEffect, useState } from 'react';\r\n\r\ntype Props = {\r\n label: string;\r\n minValue: number;\r\n maxValue: number;\r\n minValueLimit?: number;\r\n maxValueLimit?: number;\r\n limitValue: number;\r\n textBoxWidth: string;\r\n onChange?: (minValue: number, maxValue: number) => void;\r\n};\r\n\r\nconst CheckMin = (min: number, max: number, minLimit?: number): number => {\r\n var ret = 0;\r\n if (max >= min) {\r\n ret = min;\r\n } else {\r\n ret = max;\r\n }\r\n if (minLimit != null) {\r\n if (ret < minLimit) {\r\n ret = minLimit;\r\n }\r\n }\r\n console.debug(['min,max,minLimit,ret', min, max, minLimit, ret]);\r\n return ret;\r\n};\r\n\r\nconst CheckMax = (min: number, max: number, maxLimit?: number): number => {\r\n var ret = 0;\r\n if (max >= min) {\r\n ret = max;\r\n } else {\r\n ret = min;\r\n }\r\n if (maxLimit != null) {\r\n if (ret > maxLimit) {\r\n ret = maxLimit;\r\n }\r\n }\r\n return ret;\r\n};\r\n\r\n/**\r\n * 範囲入力の範囲のふり幅が固定の場合に使用する\r\n * LimitValueの設定がふり幅設定\r\n * min maxの差がLimitValue以内である事\r\n * @param props\r\n * @returns\r\n */\r\nconst RangeInputNumberLimit: React.FC = (props) => {\r\n const [fromValue, setFromValue] = React.useState(String(props.minValue));\r\n const [toValue, setToValue] = React.useState(String(props.maxValue));\r\n\r\n useEffect(() => {\r\n setFromValue(String(props.minValue));\r\n setToValue(String(props.maxValue));\r\n }, [props.minValue, props.maxValue]);\r\n\r\n const onChangefromValue = (event: React.ChangeEvent) => {\r\n setFromValue(event.target.value);\r\n };\r\n const onChangetoValue = (event: React.ChangeEvent) => {\r\n setToValue(event.target.value);\r\n };\r\n\r\n const handlefromFocusEvent = () => {\r\n var f = Number(fromValue);\r\n var t = Number(toValue);\r\n var l = Number(props.limitValue);\r\n if (isNaN(f)) {\r\n setFromValue('0');\r\n } else {\r\n f = CheckMin(f, t, props.minValueLimit);\r\n setFromValue(String(f));\r\n if (t - f > l) {\r\n t = f + l;\r\n setToValue(String(t));\r\n }\r\n if (props.onChange) {\r\n props.onChange(f, t);\r\n }\r\n }\r\n };\r\n const handletoFocusEvent = () => {\r\n var f = Number(fromValue);\r\n var t = Number(toValue);\r\n var l = Number(props.limitValue);\r\n console.debug(t);\r\n if (isNaN(t)) {\r\n setToValue('0');\r\n } else {\r\n t = CheckMax(f, t, props.maxValueLimit);\r\n setToValue(String(t));\r\n if (t - f > l) {\r\n f = t - l;\r\n setFromValue(String(f));\r\n }\r\n\r\n if (props.onChange) {\r\n props.onChange(f, t);\r\n }\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
{props.label}\r\n {\r\n if (e.key == 'Enter') {\r\n handlefromFocusEvent();\r\n }\r\n }}\r\n />\r\n ~ \r\n {\r\n if (e.key == 'Enter') {\r\n handletoFocusEvent();\r\n }\r\n }}\r\n />\r\n
\r\n );\r\n};\r\n\r\nexport default RangeInputNumberLimit;\r\n","import React, { useEffect, useState } from 'react';\r\nimport dayjs from 'dayjs';\r\n\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Button from '@material-ui/core/Button';\r\nimport Box from '@mui/material/Box';\r\nimport LoadingButton from '@mui/lab/LoadingButton';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\n\r\nimport PhaseCurrentCheckBoxList, { PhaseCurrentCheckBoxData } from './PhaseCurrentCheckBoxList';\r\nimport PhaseCurrentSelectItem, { PhaseCurrentSelectData, InitDataType } from './PhaseCurrentSelectItem';\r\nimport PhaseCurrentChart from './PhaseCurrentChart';\r\nimport { GetLatesTime } from './PhaseCurrent';\r\nimport PhaseCurrentButtonList from './PhaseCurrentButtonList';\r\nimport { PH_CUR_GROUP_SET } from '../../../function/GroupDataModel';\r\nimport { GetNameDevSetList, NAME_DEV_SET } from '../../../function/NameDevSetModel';\r\nimport RangeInputNumberLimit from '../../molecules/Range/RangeInputNumberLimit';\r\nimport { useTranslation } from 'react-i18next';\r\nimport MessageDialog, { MessageDialogResponse } from '../../atoms/Dialog/MessageDialog';\r\nimport { useModal } from '../../../function/useModal';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n responsiveContainer: {\r\n minHeight: 'calc(100vh - 346px)',\r\n maxHeight: 'calc(100vh - 346px)',\r\n },\r\n paper: {\r\n background: '#FFFFEE',\r\n },\r\n buttonStyle: {\r\n Width: '180px',\r\n Height: '45px',\r\n },\r\n flexBox: {\r\n display: 'flex',\r\n eight: '45px',\r\n alignItems: 'flex-end',\r\n },\r\n flexBoxItem: {\r\n padding: '0px 50px 0px 0;',\r\n margin: '1px' /* 外側の余白 */,\r\n },\r\n })\r\n);\r\n\r\n/**\r\n * 時間範囲選択格納タイプ\r\n */\r\nexport type SelectMsecondType = {\r\n maxSec: number;\r\n minSec: number;\r\n};\r\n\r\ntype Props = {\r\n location: { state: PH_CUR_GROUP_SET };\r\n};\r\n\r\nconst PhaseCurrentPage: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [loading, setLoading] = React.useState(false);\r\n const [selectMSecond, setSelectMSecond] = React.useState({\r\n maxSec: 100,\r\n minSec: 0,\r\n });\r\n const [initData, setInitData] = React.useState({\r\n selectData: {\r\n devIndex: '0',\r\n selectTime: '',\r\n selectDay: dayjs(new Date()).format('YYYY-MM-DD'),\r\n maxSec: 100,\r\n minSec: 0,\r\n },\r\n nameDevList: [],\r\n });\r\n const [selectData, setSelectData] = useState({\r\n devIndex: '0',\r\n selectTime: '',\r\n selectDay: dayjs(new Date()).format('YYYY-MM-DD'),\r\n maxSec: 100,\r\n minSec: 0,\r\n });\r\n const [checkBoxData, setCheckBoxData] = useState({\r\n isRDisp: true,\r\n isSDisp: true,\r\n isTDisp: true,\r\n isPileup: false,\r\n isDCRemoval: true,\r\n });\r\n const [chartUpdate, setChartUpdate] = React.useState('');\r\n\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n\r\n const msgdlg = flgMsgDlg ? : null;\r\n\r\n const handleLoadingStateChange = (value: boolean): void => setLoading(value);\r\n\r\n const handleSelectDataChange = (data: PhaseCurrentSelectData): void => {\r\n console.debug(['PhaseCurrentPage-handleSelectDataChange , data', data]);\r\n setSelectData({ ...data });\r\n };\r\n\r\n const handleCheckBoxDataChange = (data: PhaseCurrentCheckBoxData): void => {\r\n setCheckBoxData({ ...data });\r\n };\r\n\r\n const handleChartUpdate = (): void => {\r\n console.debug(['handleChartUpdate - selectData', selectData]);\r\n if (selectData.selectTime != '') {\r\n setChartUpdate(dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss'));\r\n } else {\r\n setDlgmsg(t('PhaseCurrentPage.計測ファイル日時を指定してください', '計測ファイル日時を指定してください。'));\r\n actMsgDlg.open();\r\n }\r\n };\r\n\r\n const handleSelectSecDataChagne = (min: number, max: number) => {\r\n console.debug(`min=${min},max=${max}`);\r\n setSelectMSecond({ maxSec: max, minSec: min });\r\n };\r\n\r\n useEffect(() => {\r\n var devindex = props.location.state != undefined ? props.location.state.DEV_INDEX : 1;\r\n GetNameDevSetList().then((ret) => {\r\n console.debug(['useEffect -- GetNameDevSetList ret', ret]);\r\n const nameDevSets = ret.filter((output, index) => {\r\n return output.EST === 1;\r\n });\r\n\r\n const indexCheck = nameDevSets.find((r) => r.DEV_INDEX == devindex);\r\n console.debug(['useEffect -- indexCheck', indexCheck]);\r\n if (indexCheck !== undefined) {\r\n GetLatesTime(String(devindex)).then((ret) => {\r\n console.debug(['useEffect -- GetLatesTime ret', ret]);\r\n if (dayjs(new Date(ret)).format('YYYY-MM-DD') == '1-01-01') {\r\n var tmp = selectData;\r\n tmp.devIndex = String(devindex);\r\n tmp.selectTime = '';\r\n tmp.selectDay = dayjs(new Date()).format('YYYY-MM-DD');\r\n console.debug(['PhaseCurrentPage-handleSelectDataChange , tmp 1-01-01', tmp]);\r\n setSelectData({ ...tmp });\r\n //データが見つからなかった、画面表示の更新はしなくてもいい\r\n //setInitData({ selectData: tmp, nameDevList: nameDevSets });\r\n //setChartUpdate(dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss'));\r\n } else {\r\n var tmp = selectData;\r\n tmp.devIndex = String(devindex);\r\n tmp.selectTime = dayjs(new Date(ret)).format('HH:mm:ss');\r\n tmp.selectDay = dayjs(new Date(ret)).format('YYYY-MM-DD');\r\n\r\n console.debug(['PhaseCurrentPage-handleSelectDataChange , tmp HH:mm:ss', tmp]);\r\n setSelectData({ ...tmp });\r\n setInitData({ selectData: tmp, nameDevList: nameDevSets });\r\n setChartUpdate(dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss'));\r\n }\r\n });\r\n }\r\n else {\r\n var tmp = selectData;\r\n tmp.devIndex = String(nameDevSets[0].DEV_INDEX);\r\n tmp.selectTime = '';\r\n tmp.selectDay = dayjs(new Date()).format('YYYY-MM-DD');\r\n console.debug(['PhaseCurrentPage-target DEV_INDEX EST==0 ', tmp]);\r\n setSelectData({ ...tmp });\r\n setInitData({ selectData: tmp, nameDevList: nameDevSets });\r\n }\r\n\r\n });\r\n }, []);\r\n\r\n //console.debug(['- 画面描画開始 -', selectMSecond, chartUpdate, ]);\r\n return (\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n }\r\n onClick={handleChartUpdate}\r\n >\r\n {t('PhaseCurrentPage.表示', '表示')}\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {msgdlg}\r\n
\r\n );\r\n};\r\n\r\nexport default PhaseCurrentPage;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { PH_CUR_GROUP_SET, GetPhaseCurrentGroupList, GroupListType } from '../../../function/GroupDataModel';\r\nimport GroupSelectGrid, { SelectGroupType } from '../../organisms/Pages/GroupSelectGrid';\r\nimport { useHistory } from 'react-router-dom';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n paper: {\r\n padding: '10px',\r\n background: '#FFFFEE',\r\n },\r\n tableContainer: { maxHeight: 'calc(100vh - 210px)' },\r\n })\r\n);\r\n\r\nconst PhaseCurrentGroupSelectPage: React.FC = () => {\r\n const history = useHistory();\r\n const classes = useStyles();\r\n\r\n const [groupDt, setGroupDt] = useState([]);\r\n const [groupList, setGroupList] = useState([]);\r\n\r\n useEffect(() => {\r\n GetPhaseCurrentGroupList().then((ret) => {\r\n var fillter = ret.PH_CUR_GROUP_SETs.filter((item) => item.DSP_FLG == 1);\r\n setGroupDt(fillter);\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n var lists: SelectGroupType[] = [];\r\n for (var i in groupDt) {\r\n lists.push({ index: Number(i) + 1, groupName: groupDt[i].GROUP_NAME, groupNo: groupDt[i].GROUP_NO });\r\n }\r\n setGroupList(lists);\r\n console.debug(lists);\r\n }, [groupDt]);\r\n\r\n const groupSelect = (selectdata: SelectGroupType) => {\r\n var target = groupDt.find((row) => row.GROUP_NO == selectdata.groupNo);\r\n history.push({\r\n pathname: '/PhaseCurrentPage',\r\n state: target,\r\n });\r\n };\r\n\r\n return ;\r\n};\r\n\r\nexport default PhaseCurrentGroupSelectPage;\r\n","import {RT_TRD_GROUP_SET} from \"../../../function/GroupDataModel\";\r\nimport { LogD } from \"../../../function/LogLapper\";\r\n\r\nexport type SelectDataType = {\r\n mesid: number;\r\n devid: number;\r\n itemid: number;\r\n selectDate: Date;\r\n selectTime: string;\r\n isSelect: boolean;\r\n isShow: boolean;\r\n}\r\n\r\n\r\nexport type MeasureInfoType = {\r\n AiCard: number;\r\n AiCh: number;\r\n DevIndex: number;\r\n DevName: string;\r\n DevNo: string;\r\n EntryNo: number;\r\n ItemName: string;\r\n ItemNameNo: number;\r\n KindNo: number;\r\n LogStart: string;\r\n MesName: string;\r\n PlcNo : number;\r\n FftInvalid : number;\r\n\r\n SetNo: number;\r\n Speed: number;\r\n selectDay: string;\r\n selectTime: string;\r\n name: string;\r\n id: number;\r\n};\r\n\r\nexport type LineInfo = {\r\n FileName: string;\r\n MaxValue: number;\r\n MinValue: number;\r\n YaxisOffset: number;\r\n XaxisStartIndex: number;\r\n XaxisSpanCount: number;\r\n SamplingRate: number;\r\n XValues: number[];\r\n YValues: number[];\r\n UnitSymbol: string;\r\n ItemName: string;\r\n}\r\n\r\nexport type RawWaveComparisonData = {\r\n OneLineData: LineInfo;\r\n TowLineData: LineInfo;\r\n YaxisMax: number;\r\n YaxisMin: number;\r\n XaxisMax: number;\r\n XaxisMin: number;\r\n}\r\n\r\n\r\nexport const GetMeasureInfoType = () : Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/MeasuleInfo\")\r\n .then((res) => res.json())\r\n .then((result: MeasureInfoType[]) => {\r\n console.debug(result);\r\n if (MeasureInfoTypeListValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\nconst MeasureInfoTypeListValidate = (data: MeasureInfoType[]) => {\r\n LogD(`MeasureInfoTypeTypeListValidate ckeck ${data}`,true);\r\n if (data == undefined) return false;\r\n LogD(\"MeasureInfoTypeTypeListValidate ckeck ok\",true);\r\n return true;\r\n };\r\n\r\n\r\nexport const GetDataTimeList = (plcNo: number, aiNo: number, chNo: number ,targetDay : string ): Promise => {\r\n console.debug(\"GetDataTimeList exec\");\r\n const url = `api/RawWaveComparison/GetDataTimeList?plcNo=${plcNo}&&aiCardNo=${aiNo}&&channelNo=${chNo}&&targetTime=${targetDay}`;\r\n console.debug(url);\r\n return new Promise((resolve, reject) => {\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: string[]) => {\r\n console.debug(result);\r\n if (DataTimeListValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\nconst DataTimeListValidate = (data: string[]) => {\r\n LogD(`DataTimeListValidate ckeck ${data}`,true);\r\n if (data == undefined) return false;\r\n LogD(\"DataTimeListValidate ckeck ok\",true);\r\n return true;\r\n};\r\n\r\n//CSVファイルの存在する時間リストを取得\r\nexport const GetLatesTime = (plcNo? : number, aiCardNo? : number , channelNo? : number) : Promise => {\r\n return new Promise((resolve, reject) => {\r\n const url = `api/RawWaveComparison/GetDataLatestTime?plcNo=${plcNo}&&aiCardNo=${aiCardNo}&&channelNo=${channelNo}`;\r\n console.debug(url);\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: string) => {\r\n console.debug(result);\r\n if (LatesTimeValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\nconst LatesTimeValidate = (data: string) => {\r\n console.debug(\"LatesTimeValidate ckeck\");\r\n if (data == undefined) return false;\r\n LogD(\"LatesTimeValidate ckeck ok\",true);\r\n return true;\r\n};\r\n\r\n\r\n\r\n\r\nexport const GetGraphLineData = (\r\n plcNo1: number, aiNo1: number, chNo1: number, targetDay1: string,\r\n plcNo2: number, aiNo2: number, chNo2: number, targetDay2: string): Promise => {\r\n console.debug(\"GetDataTimeList exec\");\r\n const url = `api/RawWaveComparison/GetGraphLineData?plcNo1=${plcNo1}&&aiCardNo1=${aiNo1}&&channelNo1=${chNo1}&&targetTime1=${targetDay1}&&plcNo2=${plcNo2}&aiCardNo2=${aiNo2}&&channelNo2=${chNo2}&&targetTime2=${targetDay2}`;\r\n //const param1 = `?plcNo1=${plcNo1}&aiCardNo1=${aiNo1}&channelNo1=${chNo1}&targetTime1=${targetDay1}`;\r\n //const param2 = `&plcNo2=${plcNo2}&aiCardNo2=${aiNo2}&channelNo2=${chNo2}&targetTime2=${targetDay2}`;\r\n console.debug(url);\r\n return new Promise((resolve, reject) => {\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: RawWaveComparisonData) => {\r\n console.debug(result);\r\n if (GraphLineDataValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\nconst GraphLineDataValidate = (data: RawWaveComparisonData) => {\r\n LogD(`GraphLineDataValidate ckeck ${data}`,true);\r\n if (data == undefined) return false;\r\n LogD(\"GraphLineDataValidate ckeck ok\",true);\r\n return true;\r\n};\r\n\r\n\r\n/**\r\n *MeasureInfoTypeのリストより、選択データのデータのMeasureInfoTypeを見つける\r\n * @param measureInfos measureInfoリスト\r\n * @param selectData 選択データ\r\n * @returns\r\n */\r\nexport const FindMeasureInfo = (measureInfos: MeasureInfoType[], selectData: SelectDataType): MeasureInfoType | undefined => {\r\n var mes = measureInfos.find((item) => item.id === selectData.mesid);\r\n var dev = measureInfos.find((item) => item.id === selectData.devid);\r\n var itm = measureInfos.find((item) => item.id === selectData.itemid);\r\n var target = measureInfos.find((item) =>\r\n item.KindNo === mes?.KindNo\r\n && item.DevIndex === dev?.DevIndex\r\n && item.ItemNameNo === itm?.ItemNameNo\r\n );\r\n return target;\r\n};\r\n","import React, { useEffect, useState } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport {\r\n LineChart,\r\n Line,\r\n XAxis,\r\n YAxis,\r\n Label,\r\n CartesianGrid,\r\n Tooltip,\r\n Legend,\r\n ResponsiveContainer,\r\n ReferenceLine,\r\n} from 'recharts';\r\nimport { LogD } from '../../../function/LogLapper';\r\nimport {\r\n MeasureInfoType,\r\n GetMeasureInfoType,\r\n SelectDataType,\r\n GetGraphLineData,\r\n LineInfo,\r\n RawWaveComparisonData,\r\n} from './RawWaveformComparison';\r\nimport dayjs from 'dayjs';\r\nimport { Minimize } from '@material-ui/icons';\r\nimport * as Constant from '../../../Constant';\r\nimport { ToValueRoundInternal, ToPowIndex, ToValueMaxRound, ToValueMinRound } from '../../../function/CalculationModel';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { GetMemoryScaleByNumber } from '../../../function/ChartCommon';\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n customTooltip: {\r\n background: '#FFFFEE',\r\n fontSize: '14px',\r\n padding: '10px 10px 0px 20px',\r\n },\r\n })\r\n);\r\n\r\nexport type GraphDispSetting = {\r\n y1Min: number;\r\n y1Max: number;\r\n y2Min: number;\r\n y2Max: number;\r\n xMin: number;\r\n xMax: number;\r\n isPileup: boolean;\r\n isDCRemoval: boolean;\r\n};\r\n\r\ntype GraphData = {\r\n lineNo: number;\r\n lineName: string;\r\n points: GraphPoint[];\r\n valueUpper: number;\r\n valueUpperLimit: number;\r\n selectFlg: boolean;\r\n infoColor: string;\r\n};\r\ntype GraphPoint = {\r\n xValue: number;\r\n yValue: number;\r\n};\r\n\r\ntype GraphSetting = {\r\n upper: number;\r\n upperLimit: number;\r\n y1Min: number;\r\n y1Max: number;\r\n y2Min: number;\r\n y2Max: number;\r\n xMin: number;\r\n xMax: number;\r\n backColor: string;\r\n memoryFontColor: string;\r\n yUnit1: string;\r\n yUnit2: string;\r\n xUnit: string;\r\n yUnitColor: string;\r\n xUnitColor: string;\r\n gridColor: string;\r\n};\r\n\r\ntype Props = {\r\n line1: SelectDataType;\r\n line2: SelectDataType;\r\n isLineShows: boolean[];\r\n mesList: MeasureInfoType[];\r\n update: string;\r\n graphDispSetting: GraphDispSetting;\r\n onLoading: (isFlg: boolean) => void;\r\n onChagneYMinMax: (min1: number, max1: number, min2: number, max2: number) => void;\r\n chartContainerStyle: string;\r\n isAutoRangeRef: boolean;\r\n onAutoRangeSet: (data: boolean) => void;\r\n};\r\n\r\nconst aryMax = function (a: number, b: number): number {\r\n return Math.max(a, b);\r\n};\r\nconst aryMin = function (a: number, b: number): number {\r\n return Math.min(a, b);\r\n};\r\n/**\r\n * グラフスケールメモリ配列を返す\r\n * @param min\r\n * @param max\r\n * @returns\r\n */\r\nconst getTicks = (min: number, max: number): number[] => {\r\n if (min < 0 && max < 0) {\r\n return [min, max];\r\n }\r\n if (min > 0 && max > 0) {\r\n return [min, max];\r\n }\r\n return [min, 0, max];\r\n};\r\n\r\n/**\r\n * Y軸の値の最大値を取得\r\n * @param waveData\r\n * @returns\r\n */\r\nconst getLineInfoYMax = (waveData: GraphData): number => {\r\n let max = 0;\r\n\r\n if (waveData && waveData.points.length !== 0) {\r\n max = waveData.points.map((r) => r.yValue).reduce(aryMax);\r\n }\r\n if (max === 0) {\r\n return 1;\r\n } else {\r\n return max;\r\n }\r\n return 1;\r\n};\r\n\r\n/**\r\n * Y軸の値の最小値を取得\r\n * @param waveData\r\n * @returns\r\n */\r\nconst getLineInfoYMin = (waveData: GraphData): number => {\r\n let min = 0;\r\n\r\n if (waveData && waveData.points.length !== 0) {\r\n min = waveData.points.map((r) => r.yValue).reduce(aryMin);\r\n }\r\n if (min === 0) {\r\n return 0;\r\n } else {\r\n return min;\r\n }\r\n return 0;\r\n};\r\n\r\n/**\r\n * 二つの数字を受け取って、絶対値で比較して大きい値を返す関数\r\n * @param number1\r\n * @param number2\r\n * @returns\r\n */\r\nconst getMaxAbsoluteValue = (number1: number, number2: number): number => {\r\n const absolute1 = Math.abs(number1);\r\n const absolute2 = Math.abs(number2);\r\n\r\n if (absolute1 > absolute2) {\r\n return absolute1;\r\n } else if (absolute2 > absolute1) {\r\n return absolute2;\r\n } else {\r\n return absolute1;\r\n }\r\n};\r\nconst createChartPoints = (\r\n chartDt: LineInfo,\r\n pointCount: number,\r\n startIndex: number,\r\n xOffset: number,\r\n isDCRemoval: boolean\r\n): Array => {\r\n console.debug(`chartDt=${chartDt} pointCount=${pointCount} startIndex=${startIndex} xOffset=${xOffset}`);\r\n var points = new Array();\r\n var sIdex = startIndex === -1 ? chartDt.XaxisStartIndex : startIndex;\r\n\r\n chartDt.XValues.filter((tmp) => tmp > sIdex + xOffset).forEach((item, index) => {\r\n if (pointCount > index) {\r\n points.push({\r\n xValue: (item - sIdex) * chartDt.SamplingRate,\r\n yValue: isDCRemoval ? chartDt.YValues[item] - chartDt.YaxisOffset : chartDt.YValues[item],\r\n });\r\n }\r\n });\r\n console.debug(['★points', points]);\r\n return points;\r\n};\r\nconst GetChartPointCount = (min: number, max: number, samplingRate: number): number => {\r\n console.debug(`(${max} - ${min}) / ${samplingRate}`);\r\n return (max - min) / samplingRate;\r\n};\r\n\r\nconst UpDateGraphData = (\r\n data: RawWaveComparisonData | undefined,\r\n xmin: number,\r\n xmax: number,\r\n isPileup: boolean,\r\n isDCRemoval: boolean\r\n): GraphData[] => {\r\n console.debug(['UpDateGraphData data , isPileup,isDCRemoval', data, isPileup, isDCRemoval]);\r\n\r\n var ret: GraphData[] = [];\r\n\r\n if (data?.OneLineData != undefined) {\r\n var item: GraphData = {\r\n lineNo: 1,\r\n valueUpper: 0,\r\n valueUpperLimit: 0,\r\n selectFlg: true,\r\n points: [],\r\n infoColor: 'red',\r\n lineName: '1',\r\n };\r\n\r\n item.lineName = data.OneLineData.ItemName;\r\n var rowCount = GetChartPointCount(xmin, xmax, data.OneLineData.SamplingRate);\r\n\r\n var startIndex = data.OneLineData.XaxisStartIndex;\r\n var xoffset = xmin / data.OneLineData.SamplingRate;\r\n\r\n var points = createChartPoints(data.OneLineData, rowCount, startIndex, xoffset, isDCRemoval);\r\n item.points = points;\r\n ret.push(item);\r\n console.debug(['★item', item]);\r\n }\r\n\r\n if (data?.TowLineData != undefined) {\r\n var item: GraphData = {\r\n lineNo: 2,\r\n valueUpper: 0,\r\n valueUpperLimit: 0,\r\n selectFlg: true,\r\n points: [],\r\n infoColor: 'blue',\r\n lineName: '2',\r\n };\r\n item.lineName = data.TowLineData.ItemName;\r\n var rowCount = GetChartPointCount(xmin, xmax, data.TowLineData.SamplingRate);\r\n\r\n var startIndex = 0;\r\n if (data?.OneLineData == null) {\r\n startIndex = data.TowLineData.XaxisStartIndex;\r\n } else {\r\n startIndex = isPileup === true ? data.TowLineData.XaxisStartIndex : data.OneLineData.XaxisStartIndex;\r\n }\r\n\r\n var xoffset = xmin / data.TowLineData.SamplingRate;\r\n\r\n var points = createChartPoints(data.TowLineData, rowCount, startIndex, xoffset, isDCRemoval);\r\n item.points = points;\r\n ret.push(item);\r\n console.debug(item);\r\n }\r\n console.debug(['★ret', ret]);\r\n return ret;\r\n};\r\n\r\n//対象レコード取得\r\nconst GetTargetData = (mesList: MeasureInfoType[], selectDt: SelectDataType): MeasureInfoType | undefined => {\r\n var mes = mesList.find((item) => item.id == selectDt.mesid);\r\n var dev = mesList.find((item) => item.id == selectDt.devid);\r\n var itemdt = mesList.find((item) => item.id == selectDt.itemid);\r\n\r\n if (mes && dev && itemdt) {\r\n var target = mesList.find((item) => {\r\n return item.KindNo === mes?.KindNo && item.DevIndex === dev?.DevIndex && item.ItemNameNo === itemdt?.ItemNameNo;\r\n });\r\n\r\n return target;\r\n }\r\n return undefined;\r\n};\r\n\r\nconst RawWaveformComparisonChart: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [graphData, setGraphData] = useState([]);\r\n const [fetchData, setFetchData] = useState();\r\n\r\n const [graphSetting, setGraphSetting] = useState({\r\n upper: 0,\r\n upperLimit: 0,\r\n y1Max: 0,\r\n y1Min: 0,\r\n y2Max: 0,\r\n y2Min: 0,\r\n xMax: 0,\r\n xMin: 0,\r\n backColor: Constant.GraphThemeLight.BACK_COLOR,\r\n memoryFontColor: Constant.GraphThemeLight.MEMORY_FONT_COLOR,\r\n yUnit1: '',\r\n yUnit2: '',\r\n xUnit: '',\r\n yUnitColor: Constant.GraphThemeLight.UNIT_COLOR,\r\n xUnitColor: Constant.GraphThemeLight.UNIT_COLOR,\r\n gridColor: Constant.GraphThemeLight.GRID_COLOR,\r\n });\r\n\r\n const isLineShow = (index: number): boolean => {\r\n console.debug(['isLineShow - index,isLineShows', index, props.isLineShows]);\r\n if (props.isLineShows.length > index) {\r\n return props.isLineShows[index];\r\n }\r\n return true;\r\n };\r\n //表示ボタン押下時\r\n useEffect(() => {\r\n console.debug(['mesList,line1Setting,line2Setting', props.mesList, props.line1, props.line2]);\r\n props.onLoading(true);\r\n var target1 = GetTargetData(props.mesList, props.line1);\r\n var day1 = dayjs(props.line1.selectDate).format('YYYY-MM-DD');\r\n var time1 = props.line1.selectTime;\r\n\r\n var target2 = GetTargetData(props.mesList, props.line2);\r\n var day2 = dayjs(props.line2.selectDate).format('YYYY-MM-DD');\r\n var time2 = props.line2.selectTime;\r\n GetGraphLineData(\r\n Number(target1?.PlcNo),\r\n Number(target1?.AiCard),\r\n Number(target1?.AiCh),\r\n `${day1} ${time1}`,\r\n Number(target2?.PlcNo),\r\n Number(target2?.AiCard),\r\n Number(target2?.AiCh),\r\n `${day2} ${time2}`\r\n ).then((ret) => {\r\n setFetchData(ret);\r\n props.onLoading(false);\r\n });\r\n }, [props.update]);\r\n\r\n //グラフデータ取得後処理\r\n useEffect(() => {\r\n var gdata = UpDateGraphData(\r\n fetchData,\r\n props.graphDispSetting.xMin,\r\n props.graphDispSetting.xMax,\r\n props.graphDispSetting.isPileup,\r\n props.graphDispSetting.isDCRemoval\r\n );\r\n\r\n if (fetchData?.OneLineData || fetchData?.TowLineData) {\r\n if (props.isAutoRangeRef === true) {\r\n props.onAutoRangeSet(false);\r\n //console.debug(\"★isAutoRange\");\r\n var y1Max = getLineInfoYMax(gdata[0]);\r\n var y1Min = getLineInfoYMin(gdata[0]);\r\n //console.debug([\"★★y1Max,y1Min\", y1Max, y1Min]);\r\n\r\n var y2Max = getLineInfoYMax(gdata[1]);\r\n var y2Min = getLineInfoYMin(gdata[1]);\r\n //console.debug([\"★★y2Max,y2Min\", y2Max, y2Min]);\r\n\r\n //小数点切り捨て\r\n y1Max = Math.round(y1Max * 100) / 100;\r\n y1Min = Math.round(y1Min * 100) / 100;\r\n y2Max = Math.round(y2Max * 100) / 100;\r\n y2Min = Math.round(y2Min * 100) / 100;\r\n //console.debug([\"★y1Max,y1Min,y2Max,y2Min\", y1Max, y1Min, y2Max, y2Min]);\r\n y1Max = ToValueMaxRound(y1Max);\r\n y1Min = ToValueMinRound(y1Min);\r\n y2Max = ToValueMaxRound(y2Max);\r\n y2Min = ToValueMinRound(y2Min);\r\n //console.debug([\"★★y1Max,y1Min,y2Max,y2Min\", y1Max, y1Min, y2Max, y2Min]);\r\n\r\n const y1 = getMaxAbsoluteValue(y1Max, y1Min);\r\n y1Max = y1;\r\n y1Min = -y1;\r\n\r\n const y2 = getMaxAbsoluteValue(y2Max, y2Min);\r\n y2Max = y2;\r\n y2Min = -y2;\r\n\r\n var unit1 = fetchData?.OneLineData != null ? fetchData.OneLineData.UnitSymbol : '';\r\n var unit2 = fetchData?.TowLineData != null ? fetchData.TowLineData.UnitSymbol : '';\r\n //console.debug([\"★unit1,unit2\", unit1, unit2]);\r\n\r\n setGraphSetting({\r\n ...graphSetting,\r\n y1Max: y1Max,\r\n y1Min: y1Min,\r\n y2Max: y2Max,\r\n y2Min: y2Min,\r\n yUnit1: unit1,\r\n yUnit2: unit2,\r\n xUnit: 'msec',\r\n });\r\n console.debug(['fetchData', 'y1Max', 'y1Min', 'y2Max', 'y2Min', fetchData, y1Max, y1Min, y2Max, y2Min]);\r\n props.onChagneYMinMax(y1Min, y1Max, y2Min, y2Max);\r\n } else {\r\n var unit1 = fetchData?.OneLineData != null ? fetchData.OneLineData.UnitSymbol : '';\r\n var unit2 = fetchData?.TowLineData != null ? fetchData.TowLineData.UnitSymbol : '';\r\n\r\n setGraphSetting({\r\n ...graphSetting,\r\n yUnit1: unit1,\r\n yUnit2: unit2,\r\n xUnit: 'msec',\r\n });\r\n }\r\n }\r\n\r\n setGraphData(gdata);\r\n }, [fetchData]);\r\n\r\n //グラフデータ取得後処理\r\n useEffect(() => {\r\n var gdata = UpDateGraphData(\r\n fetchData,\r\n props.graphDispSetting.xMin,\r\n props.graphDispSetting.xMax,\r\n props.graphDispSetting.isPileup,\r\n props.graphDispSetting.isDCRemoval\r\n );\r\n\r\n if (fetchData) {\r\n var y1Max = props.graphDispSetting.y1Max;\r\n var y1Min = props.graphDispSetting.y1Min;\r\n var y2Max = props.graphDispSetting.y2Max;\r\n var y2Min = props.graphDispSetting.y2Min;\r\n\r\n setGraphSetting({ ...graphSetting, y1Max: y1Max, y1Min: y1Min, y2Max: y2Max, y2Min: y2Min });\r\n console.debug(['y1Max,y1Min,y2Max,y2Min', y1Max, y1Min, y2Max, y2Min]);\r\n }\r\n\r\n setGraphData(gdata);\r\n }, [props.graphDispSetting]);\r\n\r\n const CustomTooltip = ({ active, payload, label }: any) => {\r\n if (active) {\r\n return (\r\n
\r\n
{`${t('RawWaveformComparisonChart.時間', '時間')} : ${Number(label).toFixed(3)}`}
\r\n {payload?.map((r: any, index: any) => {\r\n if (index <= 2 && r.name !== 'yValue') {\r\n return (\r\n
\r\n {r.name} : {Number(r.value).toFixed(3)}\r\n
\r\n );\r\n }\r\n })}\r\n
\r\n );\r\n }\r\n return null;\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n props.toFixed(2)}\r\n ticks={getTicks(graphSetting.y1Min, graphSetting.y1Max)}\r\n domain={[graphSetting.y1Min, graphSetting.y1Max]}\r\n width={95}\r\n >\r\n \r\n \r\n props.toFixed(2)}\r\n ticks={getTicks(graphSetting.y2Min, graphSetting.y2Max)}\r\n domain={[graphSetting.y2Min, graphSetting.y2Max]}\r\n width={95}\r\n >\r\n \r\n \r\n } />\r\n \r\n \r\n {/* {graphData?.map((row, index) => (\r\n \r\n ))} */}\r\n \r\n \r\n );\r\n};\r\nexport default RawWaveformComparisonChart;\r\n","import React, { useEffect, useState } from 'react';\r\n\r\nconst isDispLog: boolean = false;\r\n\r\ntype Props = {\r\n label: string;\r\n value?: boolean;\r\n labelPosition?: number;\r\n labelStyle?: string;\r\n onChangeEvent: (event: React.ChangeEvent) => void;\r\n};\r\n\r\nexport const ItemCheckBox: React.FC = (props) => {\r\n return (\r\n \r\n \r\n \r\n {props.labelPosition === 1 && }\r\n \r\n {props.labelPosition === 2 && }\r\n \r\n \r\n
{props.label}\r\n props.onChangeEvent(e)} />\r\n {props.label}
\r\n );\r\n};\r\nexport default ItemCheckBox;\r\n","import React, { useEffect, useState } from 'react';\r\nimport dayjs from 'dayjs';\r\n\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\n\r\nimport ColorLineText from '../../atoms/Text/ColorLineText';\r\n\r\nimport { ItemComboBox, ComboBoxItemType } from '../../atoms/ComboBox/ItemComboBox';\r\nimport { MeasureInfoType, GetMeasureInfoType, GetDataTimeList, SelectDataType } from './RawWaveformComparison';\r\nimport ItemCalender from '../../atoms/Calendar/ItemCalender';\r\nimport ItemCheckBox from '../../atoms/CheckBox/ItemCheckBox';\r\nimport DateInput from '../../atoms/Calendar/DateInput';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '0px 0px 0px 4px',\r\n borderBottomWidth: '0px',\r\n },\r\n labelStyle: {\r\n fontSize: '13px',\r\n },\r\n itemBoxStyle: {\r\n fontSize: '13px',\r\n },\r\n })\r\n);\r\n\r\ntype Props = {\r\n selectData: SelectDataType;\r\n itemColor: string;\r\n mesInfoList: MeasureInfoType[];\r\n itemName: string;\r\n onChangeSelectDataEvent: (selectData: SelectDataType) => void;\r\n isBlankSelect: boolean;\r\n onChnageIsShowSelect: (selectData: SelectDataType) => void;\r\n onAutoRangeSet: (data: boolean) => void;\r\n};\r\n\r\n//計測種別リスト作成\r\nconst CreateMeasureList = (data: MeasureInfoType[], isBlankSelect: boolean): ComboBoxItemType[] => {\r\n var ret: ComboBoxItemType[] = [];\r\n if (data != null) {\r\n //speed2でfilter後、groupby\r\n var measureList = data.filter(\r\n (el: MeasureInfoType, index, self) =>\r\n self.findIndex(\r\n (e: MeasureInfoType) => (e.Speed === 2 || e.Speed === 4) && e.KindNo === el.KindNo && e.MesName === el.MesName\r\n ) === index\r\n );\r\n console.debug(['RawWaveformComparisonSelectItem - MeasureList,CreateMeasureList', data, measureList]);\r\n for (var i in measureList) {\r\n ret.push({ index: measureList[i].id, name: measureList[i].MesName });\r\n }\r\n\r\n if (isBlankSelect) ret.push({ index: -1, name: '' });\r\n }\r\n return ret;\r\n};\r\n\r\n//機器種別リスト作成\r\nconst CreateDevList = (data: MeasureInfoType[], measureId: number): ComboBoxItemType[] => {\r\n var ret: ComboBoxItemType[] = [];\r\n if (data != null) {\r\n var mes = data.find((item) => item.id === measureId);\r\n //speed2,4でfilter後、groupby\r\n var devList = data.filter(\r\n (el: MeasureInfoType, index, self) =>\r\n self.findIndex((e: MeasureInfoType) => (e.Speed === 2 || e.Speed === 4) && e.DevIndex === el.DevIndex) === index\r\n );\r\n console.debug(['CreateDevList', devList]);\r\n console.debug(devList);\r\n for (var i in devList) {\r\n ret.push({\r\n index: devList[i].id,\r\n name: devList[i].DevNo + devList[i].DevName,\r\n });\r\n }\r\n }\r\n return ret;\r\n};\r\n\r\n//項目種別リスト作成\r\nconst CreateItemList = (data: MeasureInfoType[], measureId: number, devId: number): ComboBoxItemType[] => {\r\n var ret: ComboBoxItemType[] = [];\r\n if (data != null) {\r\n var mes = data.find((item) => item.id === measureId);\r\n var dev = data.find((item) => item.id === devId);\r\n //speed2,4でfilter後、groupby\r\n var itemNameList = data.filter(\r\n (el: MeasureInfoType, index, self) =>\r\n self.findIndex(\r\n (e: MeasureInfoType) =>\r\n (e.Speed === 2 || e.Speed === 4) &&\r\n e.KindNo === mes?.KindNo &&\r\n e.Speed === mes?.Speed &&\r\n e.DevIndex === dev?.DevIndex &&\r\n e.ItemNameNo == el.ItemNameNo &&\r\n e.ItemName == el.ItemName\r\n ) === index\r\n );\r\n\r\n for (var i in itemNameList) {\r\n ret.push({ index: itemNameList[i].id, name: itemNameList[i].ItemName });\r\n }\r\n }\r\n return ret;\r\n};\r\n\r\nexport const CreateTimeList = (data: string[]): ComboBoxItemType[] => {\r\n var ret: ComboBoxItemType[] = [];\r\n\r\n for (var i in data) {\r\n var time = dayjs(data[i]).format('HH:mm:ss');\r\n ret.push({ index: Number(i + 1), name: time });\r\n }\r\n return ret;\r\n};\r\n\r\nconst RawWaveformComparisonSelectItem: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n\r\n const [selectDay, setSelectDay] = React.useState(new Date());\r\n const [mesList, setMesList] = React.useState([]);\r\n const [devList, setDevList] = React.useState([]);\r\n const [itemList, setItemList] = React.useState([]);\r\n const [timeList, setTimeList] = useState();\r\n const [selectData, setSelectData] = useState(props.selectData);\r\n const [selectTimeid, setSelectTimeid] = useState(0);\r\n\r\n //コンボボックスデータ作成\r\n useEffect(() => {\r\n if (props.mesInfoList.length != 0) {\r\n console.debug('★★★初期表示でのCrete');\r\n console.debug(props.selectData);\r\n var sdt = props.selectData;\r\n var mesList = CreateMeasureList(props.mesInfoList, props.isBlankSelect);\r\n var devList = CreateDevList(props.mesInfoList, sdt.mesid);\r\n var itemList = CreateItemList(props.mesInfoList, sdt.mesid, sdt.devid);\r\n\r\n setMesList(mesList);\r\n setDevList(devList);\r\n setItemList(itemList);\r\n setSelectDay(sdt.selectDate);\r\n\r\n createTimeList(sdt.mesid, sdt.devid, sdt.itemid, sdt.selectDate, sdt.selectTime);\r\n }\r\n }, [props.mesInfoList]);\r\n\r\n const createTimeList = (mesid: number, devid: number, itemid: number, date: Date, time: string) => {\r\n console.debug(['createTimeList', mesid]);\r\n\r\n if (mesid === -1) {\r\n var sdt: SelectDataType = {\r\n ...selectData,\r\n mesid: -1,\r\n devid: -1,\r\n itemid: -1,\r\n selectDate: date,\r\n selectTime: '',\r\n };\r\n setTimeList([]);\r\n setSelectData(sdt);\r\n props.onChangeSelectDataEvent(sdt);\r\n console.debug(['std', sdt]);\r\n return;\r\n }\r\n\r\n if (props.mesInfoList.length != 0) {\r\n var mes = props.mesInfoList.find((item) => item.id == mesid);\r\n var dev = props.mesInfoList.find((item) => item.id == devid);\r\n var itemdt = props.mesInfoList.find((item) => item.id == itemid);\r\n var day = dayjs(date).format('YYYY-MM-DD');\r\n\r\n if (mes && dev && itemdt) {\r\n //対象レコード取得\r\n var target = props.mesInfoList.find((item) => {\r\n return (\r\n item.KindNo === mes?.KindNo && item.DevIndex === dev?.DevIndex && item.ItemNameNo === itemdt?.ItemNameNo\r\n );\r\n });\r\n if (target) {\r\n //時間リスト取得\r\n GetDataTimeList(Number(target?.PlcNo), Number(target?.AiCard), Number(target?.AiCh), day).then((ret) => {\r\n if (ret) {\r\n var sTime: string = '';\r\n var timeList = CreateTimeList(ret);\r\n\r\n //時間でソートを行う\r\n timeList.sort(function (a, b) {\r\n if (a.name > b.name) {\r\n return 1;\r\n } else {\r\n return -1;\r\n }\r\n });\r\n setTimeList(timeList);\r\n if (timeList.length != 0) {\r\n var t = timeList.find((row) => row.name === time);\r\n if (t) {\r\n setSelectTimeid(t.index);\r\n } else {\r\n setSelectTimeid(timeList[0].index);\r\n time = timeList[0].name;\r\n }\r\n }\r\n var sdt: SelectDataType = {\r\n ...selectData,\r\n mesid: mesid,\r\n devid: devid,\r\n itemid: itemid,\r\n selectDate: date,\r\n selectTime: time,\r\n };\r\n setSelectData(sdt);\r\n props.onChangeSelectDataEvent(sdt);\r\n console.debug(['std', sdt]);\r\n }\r\n });\r\n } else {\r\n var sdt: SelectDataType = {\r\n ...selectData,\r\n mesid: -1,\r\n devid: -1,\r\n itemid: -1,\r\n selectDate: date,\r\n selectTime: '',\r\n };\r\n setSelectData(sdt);\r\n props.onChangeSelectDataEvent(sdt);\r\n console.debug(['std', sdt]);\r\n }\r\n }\r\n }\r\n };\r\n\r\n const handleShowChange = () => {\r\n var target = selectData;\r\n target.isShow = !target.isShow;\r\n setSelectData({ ...target });\r\n props.onChnageIsShowSelect(target);\r\n };\r\n\r\n const ChangeMesSelect = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n var selectId = Number(event.target.value);\r\n props.onAutoRangeSet(true);\r\n if (selectId == -1) {\r\n var devList = CreateDevList(props.mesInfoList, -1);\r\n var itemList = CreateItemList(props.mesInfoList, -1, -1);\r\n setDevList(devList);\r\n setItemList(itemList);\r\n createTimeList(-1, -1, -1, selectDay, '');\r\n } else {\r\n var mes = props.mesInfoList.find((item) => item.id === Number(event.target.value));\r\n if (mes != undefined) {\r\n var devList = CreateDevList(props.mesInfoList, mes.id);\r\n var itemList = CreateItemList(props.mesInfoList, mes.id, devList[0].index);\r\n setDevList(devList);\r\n setItemList(itemList);\r\n createTimeList(mes.id, devList[0].index, itemList[0].index, selectDay, '');\r\n }\r\n }\r\n };\r\n const ChangeDevSelect = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n var mes = props.mesInfoList.find((item) => item.id === selectData.mesid);\r\n var dev = props.mesInfoList.find((item) => item.id === Number(event.target.value));\r\n if (mes != undefined && dev != undefined) {\r\n var itemList = CreateItemList(props.mesInfoList, mes.id, dev.id);\r\n setItemList(itemList);\r\n if (itemList.length != 0) {\r\n createTimeList(mes.id, dev.id, itemList[0].index, selectDay, '');\r\n }\r\n }\r\n };\r\n const ChangeitemSelect = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n var mes = props.mesInfoList.find((item) => item.id === selectData.mesid);\r\n var dev = props.mesInfoList.find((item) => item.id === selectData.devid);\r\n var itm = props.mesInfoList.find((item) => item.id === Number(event.target.value));\r\n if (mes != undefined && dev != undefined && itm != undefined) {\r\n createTimeList(mes.id, dev.id, itm.id, selectDay, '');\r\n }\r\n };\r\n\r\n const onChangeCalendarValue = (value: string) => {\r\n var s = new Date(value);\r\n setSelectDay(s);\r\n createTimeList(selectData.mesid, selectData.devid, selectData.itemid, s, '');\r\n };\r\n\r\n const ChangeTimeSelect = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n var time = timeList?.find((row) => row.index == Number(event.target.value));\r\n if (time) {\r\n var sdt: SelectDataType = {\r\n ...selectData,\r\n selectTime: time?.name,\r\n };\r\n setSelectData(sdt);\r\n props.onChangeSelectDataEvent(sdt);\r\n setSelectTimeid(time.index);\r\n }\r\n };\r\n\r\n const handleIsSelectChange = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n console.debug(['handleIsSelectChange - selectData=', selectData]);\r\n setSelectData({ ...selectData, isSelect: !selectData.isSelect });\r\n props.onChangeSelectDataEvent({\r\n ...selectData,\r\n isSelect: !selectData.isSelect,\r\n });\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {props.itemName}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* // */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default RawWaveformComparisonSelectItem;\r\n","import React, { useState, useEffect } from 'react';\r\nimport RangeInputNumber from '../../molecules/Range/RangeInputNumber';\r\nimport RangeInputNumberLimit from '../../molecules/Range/RangeInputNumberLimit';\r\nimport ItemCheckBox from '../../atoms/CheckBox/ItemCheckBox';\r\nimport { GraphDispSetting } from './RawWaveformComparisonChart';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport { useTranslation } from 'react-i18next';\r\nimport Box from '@material-ui/core/Box';\r\n\r\ntype Props = {\r\n settingData: GraphDispSetting;\r\n onChange: (data: GraphDispSetting) => void;\r\n};\r\n\r\nconst RawWaveformComparisonChartSetting: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const buttonStyle = {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n };\r\n const xMinMaxOn = (min: number, max: number) => {\r\n console.debug(`min=${min},max=${max}`);\r\n var tmp = props.settingData;\r\n tmp.xMin = min;\r\n tmp.xMax = max;\r\n props.onChange(tmp);\r\n };\r\n const yMinMaxOn = (min: number, max: number, lineNo: number) => {\r\n console.debug(`min=${min},max=${max}`);\r\n var tmp = props.settingData;\r\n if (lineNo == 1) {\r\n tmp.y1Min = min;\r\n tmp.y1Max = max;\r\n } else {\r\n tmp.y2Min = min;\r\n tmp.y2Max = max;\r\n }\r\n\r\n props.onChange(tmp);\r\n };\r\n\r\n const onPileupChangeCheckBox = (event: React.ChangeEvent) => {\r\n var tmp = props.settingData;\r\n tmp.isPileup = tmp.isPileup == true ? false : true;\r\n props.onChange(tmp);\r\n };\r\n const onDCRemovalChangeCheckBox = (event: React.ChangeEvent) => {\r\n var tmp = props.settingData;\r\n tmp.isDCRemoval = tmp.isDCRemoval == true ? false : true;\r\n props.onChange(tmp);\r\n };\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n
\r\n yMinMaxOn(max, min, 1)}\r\n />\r\n yMinMaxOn(max, min, 2)}\r\n />\r\n
\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default RawWaveformComparisonChartSetting;\r\n","import React from 'react';\r\nimport { useHistory } from 'react-router-dom';\r\nimport dayjs from 'dayjs';\r\n\r\nimport { makeStyles, createStyles, Theme } from '@material-ui/core/styles';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Button from '@material-ui/core/Button';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport { FFT_CMP_GROUP_SET } from '../../../function/GroupDataModel';\r\nimport { GetTrendGroupTableByItemSet } from '../../../function/GroupDataModel';\r\nimport SimpleDialog from '../../atoms/Dialog/SimpleDialog';\r\nimport TrendGraphGroupSelectPage from '../../Pages/TrendGraph/TrendGraphGroupSelectPage';\r\nimport RealTimeTrendGraphGroupSelectPage from '../../Pages/RealTimeTrendGraph/RealTimeTrendGraphGroupSelectPage';\r\n\r\nimport { MeasureInfoType, SelectDataType, FindMeasureInfo } from './RawWaveformComparison';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n buttonStyle: {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n },\r\n })\r\n);\r\n\r\n/**ダイアログ表示モードキー */\r\nconst DialogKindKey = {\r\n None: 'None',\r\n RealTime: 'realTime',\r\n Trend: 'trend',\r\n} as const;\r\n/**ダイアログ表示タイプ */\r\ntype DialgKindType = typeof DialogKindKey[keyof typeof DialogKindKey];\r\n\r\n/**引数 */\r\ntype Props = {\r\n selectDatas: SelectDataType[];\r\n measureInfo: MeasureInfoType[];\r\n};\r\n\r\nconst RawWaveformComparisonButtonList: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const history = useHistory();\r\n const classes = useStyles();\r\n\r\n const { selectDatas, measureInfo } = props;\r\n\r\n const [simpleDialogOpen, setSimpleDialogOpen] = React.useState(false);\r\n const [fftErrDialogOpen, setFftErrDialogOpen] = React.useState(false);\r\n const [gropuSelectDialogOpen, setGropuSelectDialogOpen] = React.useState(false);\r\n const [dialogKind, setDialogKind] = React.useState(DialogKindKey.None);\r\n const [selectGroupNos, setSelectGroupNos] = React.useState([]);\r\n\r\n /** FFT比較ボタン処理 */\r\n const handleFftComparisonPageOpen = () => {\r\n let plc1: number = 0;\r\n let plc2: number = 0;\r\n let time1: string = '';\r\n let set1: number = 0;\r\n let set2: number = 0;\r\n let time2: string = '';\r\n\r\n const sDatas = selectDatas.filter((row) => row.isSelect === true);\r\n\r\n console.debug(['sDatas', sDatas]);\r\n if (!sDatas) {\r\n console.debug(['selectData none']);\r\n setFftErrDialogOpen(true);\r\n return;\r\n }\r\n for (let i = 0; i < sDatas.length; i++) {\r\n var target = FindMeasureInfo(measureInfo, sDatas[i]);\r\n if (!target) {\r\n continue;\r\n }\r\n if (i == 0) {\r\n plc1 = target.PlcNo;\r\n set1 = target.SetNo;\r\n if (sDatas[i].selectDate != null) {\r\n time1 = dayjs(sDatas[i].selectDate).format('YYYY/MM/DD') + ' ' + sDatas[i].selectTime;\r\n } else {\r\n time1 = '';\r\n }\r\n } else {\r\n plc2 = target.PlcNo;\r\n set2 = target.SetNo;\r\n if (sDatas[i].selectDate != null) {\r\n time2 = dayjs(sDatas[i].selectDate).format('YYYY/MM/DD') + ' ' + sDatas[i].selectTime;\r\n } else {\r\n time2 = '';\r\n }\r\n }\r\n }\r\n\r\n //console.debug(['plc1', plc1, 'plc2', plc2]);\r\n if (plc1 === 0 && plc2 === 0) {\r\n console.debug(['selectData none']);\r\n setFftErrDialogOpen(true);\r\n return;\r\n }\r\n\r\n var fftgroupSet: FFT_CMP_GROUP_SET = {\r\n GROUP_NO: 99,\r\n GROUP_NAME: '',\r\n DSP_FLG: 0,\r\n PLC_NO1: plc1,\r\n SET_NO1: set1,\r\n PLC_NO2: plc2,\r\n SET_NO2: set2,\r\n PLC_NO3: 0,\r\n SET_NO3: 0,\r\n KIND1: 0,\r\n KIND2: 0,\r\n KIND3: 0,\r\n\r\n Time_No1: time1,\r\n Time_No2: time2,\r\n Time_No3: '',\r\n };\r\n\r\n console.debug(['passData', fftgroupSet]);\r\n\r\n //画面遷移\r\n history.push({\r\n pathname: '/FFTComparisonPage',\r\n state: fftgroupSet,\r\n });\r\n };\r\n\r\n /**\r\n *傾向管理ボタン処理\r\n */\r\n const handleTrendPageOpen = () => {\r\n const sData = selectDatas.find((row) => row.isSelect === true);\r\n if (!sData) {\r\n console.debug(['selectData none']);\r\n handleSimpleDialogClickOpen();\r\n return;\r\n }\r\n\r\n setDialogKind(DialogKindKey.Trend);\r\n\r\n var target = FindMeasureInfo(measureInfo, sData);\r\n\r\n GetTrendGroupTableByItemSet().then((ret) => {\r\n var gpInfo = ret.filter(\r\n (row) => row.trdItemSet.PLC_NO == target?.PlcNo && row.trdItemSet.SET_NO === target.SetNo\r\n );\r\n console.debug(['getgpItem=', gpInfo]);\r\n\r\n if (gpInfo.length !== 0) {\r\n var gpNos: number[] = [];\r\n for (var i in gpInfo) {\r\n gpNos.push(gpInfo[i].trdGroupSet.GROUP_NO);\r\n }\r\n setSelectGroupNos(gpNos);\r\n } else {\r\n handleSimpleDialogClickOpen();\r\n return;\r\n }\r\n handleGroupSelectDialogShow();\r\n });\r\n };\r\n\r\n /**\r\n * グループ選択ダイアログ表示\r\n */\r\n const handleGroupSelectDialogShow = () => {\r\n setGropuSelectDialogOpen(true);\r\n };\r\n\r\n /**\r\n * グループ選択ダイアログ閉じる\r\n */\r\n const handleGroupSelectDialogClose = () => {\r\n setGropuSelectDialogOpen(false);\r\n };\r\n\r\n /**\r\n * メッセージボックス表示\r\n */\r\n const handleSimpleDialogClickOpen = () => {\r\n setSimpleDialogOpen(true);\r\n };\r\n\r\n /**メッセージボックス閉じる */\r\n const handleSimpleDialogClose = () => {\r\n setSimpleDialogOpen(false);\r\n };\r\n return (\r\n \r\n \r\n \r\n {t('RawWaveformComparisonButtonList.傾向管理', '傾向管理')}\r\n \r\n \r\n \r\n \r\n {t('RawWaveformComparisonButtonList.FFT比較', 'FFT比較')}\r\n \r\n \r\n \r\n {dialogKind == DialogKindKey.RealTime ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n グループが見つかりませんでした\r\n \r\n\r\n setFftErrDialogOpen(false)}\r\n title={t('RawWaveformComparisonButtonList.FFT比較', 'FFT比較')}\r\n okText={t('RawWaveformComparisonButtonList.閉じる', '閉じる')}\r\n maxWidth={'sm'}\r\n >\r\n 項目が選択されていません\r\n \r\n \r\n );\r\n};\r\n\r\nexport default RawWaveformComparisonButtonList;\r\n","import React, { useEffect, useState } from 'react';\r\nimport dayjs from 'dayjs';\r\n\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport LoadingButton from '@mui/lab/LoadingButton';\r\n\r\nimport { SIG_CMP_GROUP_SET } from '../../../function/GroupDataModel';\r\nimport RawWaveformComparisonChart, { GraphDispSetting } from './RawWaveformComparisonChart';\r\nimport RawWaveformComparisonSelectItem from './RawWaveformComparisonSelectItem';\r\nimport RawWaveformComparisonChartSetting from './RawWaveformComparisonChartSetting';\r\nimport RawWaveformComparisonButtonList from './RawWaveformComparisonButtonList';\r\nimport {\r\n MeasureInfoType,\r\n GetMeasureInfoType,\r\n SelectDataType,\r\n GetLatesTime,\r\n GetDataTimeList,\r\n} from './RawWaveformComparison';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport { useTranslation } from 'react-i18next';\r\nimport Box from '@material-ui/core/Box';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n responsiveContainer: {\r\n minHeight: 'calc(100vh - 434px)',\r\n maxHeight: 'calc(100vh - 434px)',\r\n },\r\n paper: {\r\n background: '#FFFFEE',\r\n },\r\n buttonStyle: {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n },\r\n })\r\n);\r\n\r\nconst CreateSelectData = (meslist: MeasureInfoType[], target?: MeasureInfoType): SelectDataType => {\r\n var ret: SelectDataType = {\r\n devid: -1,\r\n mesid: -1,\r\n itemid: -1,\r\n selectDate: new Date(),\r\n selectTime: '',\r\n isSelect: false,\r\n isShow: true,\r\n };\r\n\r\n if (target == undefined) {\r\n return ret;\r\n } else {\r\n var mid = meslist.find(\r\n (row) => (row.Speed === 2 || row.Speed === 4) && row.KindNo == target.KindNo && row.MesName == target.MesName\r\n );\r\n ret.mesid = mid != undefined ? mid.id : ret.mesid;\r\n\r\n var did = meslist.find((row) => (row.Speed === 2 || row.Speed === 4) && row.DevIndex == target.DevIndex);\r\n ret.devid = did != undefined ? did.id : ret.devid;\r\n\r\n var iid = meslist.find(\r\n (row) =>\r\n (row.Speed === 2 || row.Speed === 4) &&\r\n row.KindNo === target.KindNo &&\r\n row.DevIndex === target.DevIndex &&\r\n row.ItemNameNo == target.ItemNameNo &&\r\n row.ItemName == target.ItemName\r\n );\r\n ret.itemid = iid != undefined ? iid.id : ret.itemid;\r\n\r\n return ret;\r\n }\r\n};\r\n\r\ntype Props = {\r\n location: { state: SIG_CMP_GROUP_SET };\r\n};\r\n\r\nconst RawWaveformComparisonPage: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [loading, setLoading] = React.useState(false);\r\n const [chartUpdate, setChartUpdate] = React.useState('');\r\n const [measureInfo, setMeasereInfo] = React.useState([]);\r\n const [isLineShows, setIsLineShow] = React.useState([true, true]);\r\n const [selectData1, setSelectData1] = React.useState({\r\n devid: 1,\r\n mesid: 1,\r\n itemid: 1,\r\n selectDate: new Date(),\r\n selectTime: '',\r\n isSelect: false,\r\n isShow: true,\r\n });\r\n const [selectData2, setSelectData2] = React.useState({\r\n devid: 1,\r\n mesid: 1,\r\n itemid: 1,\r\n selectDate: new Date(),\r\n selectTime: '',\r\n isSelect: false,\r\n isShow: true,\r\n });\r\n const [graphDispSetting, SetGraphDispSetting] = React.useState({\r\n xMin: 0,\r\n xMax: 100,\r\n y1Min: -0.02,\r\n y1Max: 0.02,\r\n y2Min: -0.02,\r\n y2Max: 0.02,\r\n isPileup: false,\r\n isDCRemoval: true,\r\n });\r\n const isAutoRangeRef = React.useRef(true);\r\n\r\n useEffect(() => {\r\n setLoading(true);\r\n GetMeasureInfoType().then((mesRet) => {\r\n //生波形画面では不要な項目を排除\r\n mesRet = mesRet.filter((r) => r.FftInvalid === 0);\r\n\r\n for (var i in mesRet) {\r\n mesRet[i].id = Number(i + 1);\r\n }\r\n\r\n var s1: SelectDataType = {\r\n devid: 1,\r\n mesid: 1,\r\n itemid: 1,\r\n selectDate: new Date(),\r\n selectTime: '',\r\n isSelect: false,\r\n isShow: true,\r\n };\r\n var s2: SelectDataType = {\r\n devid: 1,\r\n mesid: 1,\r\n itemid: 1,\r\n selectDate: new Date(),\r\n selectTime: '',\r\n isSelect: false,\r\n isShow: true,\r\n };\r\n\r\n if (props.location.state != null) {\r\n var gp = props.location.state;\r\n var dt1 = mesRet.find((item) => item.PlcNo == gp.PLC_NO1 && item.SetNo == gp.SET_NO1);\r\n var dt2 = mesRet.find((item) => item.PlcNo == gp.PLC_NO2 && item.SetNo == gp.SET_NO2);\r\n\r\n if (gp.Time_No1 !== undefined) {\r\n console.debug(['reseve SIG_CMP_GROUP_SET', gp, gp.Time_No1]);\r\n s1 = CreateSelectData(mesRet, dt1);\r\n s1.selectDate = gp.Time_No1 == '' ? new Date() : dayjs(gp.Time_No1).toDate();\r\n s1.selectTime = '';\r\n\r\n s2 = CreateSelectData(mesRet, dt2);\r\n s2.selectDate = gp.Time_No2 == '' ? new Date() : dayjs(gp.Time_No2).toDate();\r\n s2.selectTime = '';\r\n\r\n var c = GetDataTimeList(\r\n Number(dt1?.PlcNo),\r\n Number(dt1?.AiCard),\r\n Number(dt1?.AiCh),\r\n dayjs(s1.selectDate).format('YYYY-MM-DD')\r\n );\r\n var d = GetDataTimeList(\r\n Number(dt2?.PlcNo),\r\n Number(dt2?.AiCard),\r\n Number(dt2?.AiCh),\r\n dayjs(s2.selectDate).format('YYYY-MM-DD')\r\n );\r\n Promise.all([c, d]).then((ret) => {\r\n if (ret) {\r\n if (ret[0] && ret[0][0]) {\r\n s1.selectTime = dayjs(ret[0][0]).format('HH:mm:ss');\r\n }\r\n if (ret[1] && ret[1][0]) {\r\n s2.selectTime = dayjs(ret[1][0]).format('HH:mm:ss');\r\n }\r\n }\r\n\r\n console.debug(['★★sData1', dt1, s1]);\r\n console.debug(['★★sData2', dt2, s2]);\r\n setSelectData1({ ...s1 });\r\n setSelectData2({ ...s2 });\r\n setMeasereInfo(mesRet);\r\n setChartUpdate('start');\r\n setLoading(true);\r\n });\r\n } else {\r\n var a = GetLatesTime(dt1?.PlcNo, dt1?.AiCard, dt1?.AiCh);\r\n var b = GetLatesTime(dt2?.PlcNo, dt2?.AiCard, dt2?.AiCh);\r\n Promise.all([a, b]).then((ret) => {\r\n s1 = CreateSelectData(mesRet, dt1);\r\n if (dayjs(new Date(ret[0])).format('YYYY-MM-DD') == '1-01-01') {\r\n s1.selectDate = new Date();\r\n s1.selectTime = '';\r\n } else {\r\n s1.selectDate = new Date(ret[0]);\r\n s1.selectTime = dayjs(new Date(ret[0])).format('HH:mm:ss');\r\n }\r\n\r\n s2 = CreateSelectData(mesRet, dt2);\r\n if (dayjs(new Date(ret[1])).format('YYYY-MM-DD') == '1-01-01') {\r\n s2.selectDate = new Date();\r\n s2.selectTime = '';\r\n } else {\r\n s2.selectDate = new Date(ret[1]);\r\n s2.selectTime = dayjs(new Date(ret[1])).format('HH:mm:ss');\r\n }\r\n\r\n console.debug(['★★sData1', dt1, s1]);\r\n console.debug(['★★sData2', dt2, s2]);\r\n\r\n setSelectData1({ ...s1 });\r\n setSelectData2({ ...s2 });\r\n setMeasereInfo(mesRet);\r\n setChartUpdate('start');\r\n setLoading(true);\r\n });\r\n }\r\n } else {\r\n setSelectData1({ ...s1 });\r\n setSelectData2({ ...s2 });\r\n setMeasereInfo(mesRet);\r\n }\r\n });\r\n }, []);\r\n\r\n const handleLoadingStateChange = (value: boolean): void => setLoading(value);\r\n\r\n const handleisShowSelectChange1 = (value: SelectDataType) => {\r\n setIsLineShow([value.isShow, isLineShows[1]]);\r\n setSelectData1({ ...value });\r\n };\r\n const handleisShowSelectChange2 = (value: SelectDataType) => {\r\n setIsLineShow([isLineShows[0], value.isShow]);\r\n setSelectData2({ ...value });\r\n };\r\n\r\n const handleonSelectData1Change = (value: SelectDataType) => {\r\n setSelectData1({ ...value });\r\n };\r\n const handleonSelectData2Change = (value: SelectDataType) => {\r\n setSelectData2({ ...value });\r\n };\r\n const handleChartUpdate = () => {\r\n setChartUpdate(dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss'));\r\n };\r\n\r\n const handleGraphSettingChange = (data: GraphDispSetting) => {\r\n SetGraphDispSetting({ ...data });\r\n };\r\n const handleYMinMaxChange = (min1: number, max1: number, min2: number, max2: number) => {\r\n SetGraphDispSetting({ ...graphDispSetting, y1Min: min1, y1Max: max1, y2Min: min2, y2Max: max2 });\r\n };\r\n\r\n const handleLoading = (isFlg: boolean) => {\r\n setLoading(isFlg);\r\n };\r\n const handoleAutoRangeSet = (data: boolean) => {\r\n isAutoRangeRef.current = data;\r\n };\r\n\r\n return (\r\n
\r\n \r\n
{' '}\r\n
\r\n \r\n \r\n \r\n
{' '}\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n }\r\n onClick={handleChartUpdate}\r\n >\r\n {t('RawWaveformComparisonPage.表示', '表示 ')}\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default RawWaveformComparisonPage;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { SIG_CMP_GROUP_SET, GetRawWaveformsComparisonGroupList, GroupListType } from '../../../function/GroupDataModel';\r\nimport GroupSelectGrid, { SelectGroupType } from '../../organisms/Pages/GroupSelectGrid';\r\nimport { useHistory } from 'react-router-dom';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n paper: {\r\n padding: '10px',\r\n background: '#FFFFEE',\r\n },\r\n tableContainer: { maxHeight: 'calc(100vh - 210px)' },\r\n })\r\n);\r\n\r\nconst RawWaveformComparisonGroupSelectPage: React.FC = () => {\r\n const history = useHistory();\r\n const classes = useStyles();\r\n\r\n const [groupDt, setGroupDt] = useState([]);\r\n const [groupList, setGroupList] = useState([]);\r\n\r\n useEffect(() => {\r\n GetRawWaveformsComparisonGroupList().then((ret) => {\r\n var fillter = ret.SIG_CMP_GROUP_SETs.filter((item) => item.DSP_FLG == 1);\r\n setGroupDt(fillter);\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n var lists: SelectGroupType[] = [];\r\n for (var i in groupDt) {\r\n lists.push({ index: Number(i) + 1, groupName: groupDt[i].GROUP_NAME, groupNo: groupDt[i].GROUP_NO });\r\n }\r\n setGroupList(lists);\r\n console.debug(lists);\r\n }, [groupDt]);\r\n\r\n const groupSelect = (selectdata: SelectGroupType) => {\r\n var target = groupDt.find((row) => row.GROUP_NO == selectdata.groupNo);\r\n history.push({\r\n pathname: '/RawWaveformComparisonPage',\r\n state: target,\r\n });\r\n };\r\n\r\n return ;\r\n};\r\n\r\nexport default RawWaveformComparisonGroupSelectPage;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { SIGC_CMP_GROUP_SET, GetRawWaveformsComparisonConanGroupList, GroupListType } from '../../../function/GroupDataModel';\r\nimport GroupSelectGrid, { SelectGroupType } from '../../organisms/Pages/GroupSelectGrid';\r\nimport { useHistory } from 'react-router-dom';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n paper: {\r\n padding: '10px',\r\n background: '#FFFFEE',\r\n },\r\n tableContainer: { maxHeight: 'calc(100vh - 210px)' },\r\n })\r\n);\r\n\r\nconst RawWaveformComparisonConanairGroupSelectPage: React.FC = () => {\r\n const history = useHistory();\r\n const classes = useStyles();\r\n\r\n const [groupDt, setGroupDt] = useState([]);\r\n const [groupList, setGroupList] = useState([]);\r\n\r\n useEffect(() => {\r\n GetRawWaveformsComparisonConanGroupList().then((ret) => {\r\n const gpDt = ret.SIGC_CMP_GROUP_SETs.filter((item) => item.DSP_FLG == 1);\r\n console.debug([\"★gpDt\", gpDt]);\r\n const gpList: SelectGroupType[] = [];\r\n gpDt.forEach((row, index) => {\r\n gpList.push({ index: Number(index) + 1, groupName: row.GROUP_NAME, groupNo: row.GROUP_NO });\r\n });\r\n console.debug([\"★gpList\", gpList]);\r\n setGroupDt(gpDt);\r\n setGroupList(gpList);\r\n });\r\n }, []);\r\n\r\n const groupSelectAction = (selectdata: SelectGroupType) => {\r\n var target = groupDt.find((row) => row.GROUP_NO == selectdata.groupNo);\r\n history.push({\r\n pathname: '/RawWaveformComparisonConanairPage',\r\n state: target,\r\n });\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default RawWaveformComparisonConanairGroupSelectPage;\r\n","import { RT_TRD_GROUP_SET, SIGC_CMP_GROUP_SET } from \"../../../function/GroupDataModel\";\r\nimport { LogD } from \"../../../function/LogLapper\";\r\nimport { ComboBoxItemType } from \"../../atoms/ComboBox/ItemComboBox\";\r\nimport LearnResultDialog from \"../../molecules/Dialog/LearnResultDialog\";\r\n\r\nexport type SelectDataType = {\r\n mesid: number;\r\n devid: number;\r\n itemid: number;\r\n selectDate: Date;\r\n selectTime: string;\r\n isSelect: boolean;\r\n isShow: boolean;\r\n}\r\n\r\nexport type MeasureInfoType = {\r\n AiCard: number;\r\n AiCh: number;\r\n DevIndex: number;\r\n DevName: string;\r\n DevNo: string;\r\n EntryNo: number;\r\n ItemName: string;\r\n ItemNameNo: number;\r\n KindNo: number;\r\n LogStart: string;\r\n MesName: string;\r\n PlcNo: number;\r\n FftInvalid: number;\r\n\r\n SetNo: number;\r\n Speed: number;\r\n selectDay: string;\r\n selectTime: string;\r\n name: string;\r\n id: number;\r\n};\r\n\r\nexport type LineInfo = {\r\n FileName: string;\r\n MaxValue: number;\r\n MinValue: number;\r\n YaxisOffset: number;\r\n XaxisStartIndex: number;\r\n XaxisSpanCount: number;\r\n SamplingRate: number;\r\n XValues: number[];\r\n YValues: number[];\r\n UnitSymbol: string;\r\n ItemName: string;\r\n}\r\n\r\nexport type RawWaveComparisonData = {\r\n OneLineData: LineInfo;\r\n TowLineData: LineInfo;\r\n YaxisMax: number;\r\n YaxisMin: number;\r\n XaxisMax: number;\r\n XaxisMin: number;\r\n}\r\n\r\n\r\n/**\r\n *選択データ初期値作成\r\n * @returns\r\n */\r\nexport const CreateDefalutSelectDataType = (): SelectDataType => {\r\n return ({\r\n devid: 1,\r\n mesid: 1,\r\n itemid: 1,\r\n selectDate: new Date(),\r\n selectTime: '',\r\n isSelect: false,\r\n isShow: true,\r\n })\r\n}\r\n\r\n/**\r\n *デバイス情報を取得\r\n * @returns\r\n */\r\nexport const GetMeasureInfoType = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/MeasuleInfo\")\r\n .then((res) => {\r\n if (!res.ok) {\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n reject(message);\r\n }\r\n else {\r\n return res.json();\r\n }\r\n })\r\n .then((result: MeasureInfoType[]) => {\r\n if (result != null) {\r\n console.debug([\"api/MeasuleInfo - ok\", result]);\r\n resolve(result);\r\n }\r\n else {\r\n reject('Invalidate response');\r\n }\r\n }).catch((error) => {\r\n console.log(error);\r\n reject(error);\r\n })\r\n });\r\n};\r\n\r\n/**\r\n * 指定されたデータの直近のファイル時間取得\r\n * @param plcNo\r\n * @param aiNo\r\n * @param chNo\r\n * @param targetDay\r\n * @returns\r\n */\r\nexport const GetDataTimeList = (plcNo: number, aiNo: number, chNo: number, targetDay: string, conanNameNo: number): Promise => {\r\n const query_params = new URLSearchParams({\r\n plcNo: String(plcNo),\r\n aiCardNo: String(aiNo),\r\n channelNo: String(chNo),\r\n targetTime: targetDay,\r\n conanNameNo: String(conanNameNo),\r\n });\r\n console.debug([\"GetDataTimeList - ulr\", \"api/RawWaveComparison/GetDataTimeList?\" + query_params])\r\n const url = `api/RawWaveComparisonConan/GetConanDataTimeList?${query_params}`;\r\n console.debug(url);\r\n return new Promise((resolve, reject) => {\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: string[]) => {\r\n console.debug(result);\r\n if (DataTimeListValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\nconst DataTimeListValidate = (data: string[]) => {\r\n LogD(`DataTimeListValidate ckeck ${data}`, true);\r\n if (data == undefined) return false;\r\n LogD(\"DataTimeListValidate ckeck ok\", true);\r\n return true;\r\n};\r\n\r\n//CSVファイルの存在する時間リストを取得\r\nexport const GetLatesTime = (conanNameNo: number, plcNo?: number, aiCardNo?: number, channelNo?: number): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const url = `api/RawWaveComparisonConan/GetConanDataLatestTime?plcNo=${plcNo}&&aiCardNo=${aiCardNo}&&channelNo=${channelNo}&&conanNameNo=${conanNameNo}`;\r\n console.debug(url);\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: string) => {\r\n console.debug(result);\r\n if (LatesTimeValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\nconst LatesTimeValidate = (data: string) => {\r\n console.debug(\"LatesTimeValidate ckeck\");\r\n if (data == undefined) return false;\r\n LogD(\"LatesTimeValidate ckeck ok\", true);\r\n return true;\r\n};\r\n\r\n\r\n\r\n\r\nexport const GetGraphLineData = (\r\n plcNo1: number, aiNo1: number, chNo1: number, targetDay1: string, conanNameNo1: number,\r\n plcNo2: number, aiNo2: number, chNo2: number, targetDay2: string, conanNameNo2: number): Promise => {\r\n console.debug(\"GetDataTimeList exec\");\r\n const url = `api/RawWaveComparisonConan/GetConanGraphLineData?plcNo1=${plcNo1}&&aiCardNo1=${aiNo1}&&channelNo1=${chNo1}&&targetTime1=${targetDay1}&&conanNameNo1=${conanNameNo1}\r\n &&plcNo2=${plcNo2}&aiCardNo2=${aiNo2}&&channelNo2=${chNo2}&&targetTime2=${targetDay2}&&conanNameNo2=${conanNameNo2}`;\r\n //const param1 = `?plcNo1=${plcNo1}&aiCardNo1=${aiNo1}&channelNo1=${chNo1}&targetTime1=${targetDay1}`;\r\n //const param2 = `&plcNo2=${plcNo2}&aiCardNo2=${aiNo2}&channelNo2=${chNo2}&targetTime2=${targetDay2}`;\r\n console.debug(url);\r\n return new Promise((resolve, reject) => {\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: RawWaveComparisonData) => {\r\n console.debug(result);\r\n if (GraphLineDataValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\nconst GraphLineDataValidate = (data: RawWaveComparisonData) => {\r\n LogD(`GraphLineDataValidate ckeck ${data}`, true);\r\n if (data == undefined) return false;\r\n LogD(\"GraphLineDataValidate ckeck ok\", true);\r\n return true;\r\n};\r\n\r\n\r\n/**\r\n *MeasureInfoTypeのリストより、選択データのデータのMeasureInfoTypeを見つける\r\n * @param measureInfos measureInfoリスト\r\n * @param selectData 選択データ\r\n * @returns\r\n */\r\nexport const FindMeasureInfo = (measureInfos: MeasureInfoType[], selectData: SelectDataType): MeasureInfoType | undefined => {\r\n var mes = measureInfos.find((item) => item.id === selectData.mesid);\r\n var dev = measureInfos.find((item) => item.id === selectData.devid);\r\n var itm = measureInfos.find((item) => item.id === selectData.itemid);\r\n var target = measureInfos.find((item) =>\r\n item.KindNo === mes?.KindNo\r\n && item.DevIndex === dev?.DevIndex\r\n && item.ItemNameNo === itm?.ItemNameNo\r\n );\r\n return target;\r\n};\r\n\r\n/**\r\n *\r\n * @param meslist\r\n * @param target\r\n * @returns\r\n */\r\nexport const CreateSelectData = (meslist: MeasureInfoType[], indexNo: number, target?: MeasureInfoType, gp?: SIGC_CMP_GROUP_SET): SelectDataType => {\r\n var ret: SelectDataType = {\r\n devid: -1,\r\n mesid: -1,\r\n itemid: -1,\r\n selectDate: new Date(),\r\n selectTime: '',\r\n isSelect: false,\r\n isShow: true,\r\n };\r\n\r\n if (target == undefined) {\r\n return ret;\r\n } else {\r\n //計測種別の書込み\r\n if (gp !== undefined) {\r\n if (indexNo === 1) {\r\n ret.mesid = gp.SET_NO1;\r\n } else {\r\n ret.mesid = gp.SET_NO2;\r\n }\r\n }\r\n\r\n //var mid = meslist.find((row) => row.PlcNo === target.PlcNo);\r\n //ret.mesid = mid != undefined ? mid.id : ret.mesid;\r\n\r\n var did = meslist.find((row) => row.DevIndex === target.DevIndex)\r\n ret.devid = did != undefined ? did.id : ret.devid;\r\n\r\n var iid = meslist.find((row) => row.PlcNo === target.PlcNo);\r\n ret.itemid = iid != undefined ? iid.id : ret.itemid;\r\n\r\n return ret;\r\n }\r\n};\r\n","import React, { useEffect, useState } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport {\r\n LineChart,\r\n Line,\r\n XAxis,\r\n YAxis,\r\n Label,\r\n CartesianGrid,\r\n Tooltip,\r\n Legend,\r\n ResponsiveContainer,\r\n ReferenceLine,\r\n} from 'recharts';\r\nimport { LogD } from '../../../function/LogLapper';\r\nimport {\r\n MeasureInfoType,\r\n GetMeasureInfoType,\r\n SelectDataType,\r\n GetGraphLineData,\r\n LineInfo,\r\n RawWaveComparisonData,\r\n} from './RawWaveformComparisonConanair';\r\nimport dayjs from 'dayjs';\r\nimport { Minimize } from '@material-ui/icons';\r\nimport * as Constant from '../../../Constant';\r\nimport { ToValueRoundInternal, ToPowIndex, ToValueMaxRound, ToValueMinRound } from '../../../function/CalculationModel';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { GetMemoryScaleByNumber } from '../../../function/ChartCommon';\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n customTooltip: {\r\n background: '#FFFFEE',\r\n fontSize: '14px',\r\n padding: '10px 10px 0px 20px',\r\n },\r\n })\r\n);\r\n\r\nexport type GraphDispSetting = {\r\n y1Min: number;\r\n y1Max: number;\r\n y2Min: number;\r\n y2Max: number;\r\n xMin: number;\r\n xMax: number;\r\n isPileup: boolean;\r\n isDCRemoval: boolean;\r\n};\r\n\r\ntype GraphData = {\r\n lineNo: number;\r\n lineName: string;\r\n points: GraphPoint[];\r\n valueUpper: number;\r\n valueUpperLimit: number;\r\n selectFlg: boolean;\r\n infoColor: string;\r\n};\r\ntype GraphPoint = {\r\n xValue: number;\r\n yValue: number;\r\n};\r\n\r\ntype GraphSetting = {\r\n upper: number;\r\n upperLimit: number;\r\n y1Min: number;\r\n y1Max: number;\r\n y2Min: number;\r\n y2Max: number;\r\n xMin: number;\r\n xMax: number;\r\n backColor: string;\r\n memoryFontColor: string;\r\n yUnit1: string;\r\n yUnit2: string;\r\n xUnit: string;\r\n yUnitColor: string;\r\n xUnitColor: string;\r\n gridColor: string;\r\n};\r\n\r\ntype Props = {\r\n line1: SelectDataType;\r\n line2: SelectDataType;\r\n isLineShows: boolean[];\r\n mesList: MeasureInfoType[];\r\n update: string;\r\n graphDispSetting: GraphDispSetting;\r\n onLoading: (isFlg: boolean) => void;\r\n onChagneYMinMax: (min1: number, max1: number, min2: number, max2: number) => void;\r\n chartContainerStyle: string;\r\n isAutoRangeRef: boolean;\r\n onAutoRangeSet: (data: boolean) => void;\r\n};\r\n\r\nconst aryMax = function (a: number, b: number): number {\r\n return Math.max(a, b);\r\n};\r\nconst aryMin = function (a: number, b: number): number {\r\n return Math.min(a, b);\r\n};\r\n\r\n/**\r\n * グラフスケールメモリ配列を返す\r\n * @param a\r\n * @param b\r\n * @returns\r\n */\r\nconst getTicks = (min: number, max: number): number[] => {\r\n if (min < 0 && max < 0) {\r\n return [min, max];\r\n }\r\n if (min > 0 && max > 0) {\r\n return [min, max];\r\n }\r\n return [min, 0, max];\r\n};\r\n\r\n/**\r\n * Y軸の値の最大値を取得\r\n * @param waveData\r\n * @returns\r\n */\r\nconst getLineInfoYMax = (waveData: RawWaveComparisonData, lineNo: number): number => {\r\n var max1 = 0;\r\n var max2 = 0;\r\n if (lineNo == 1) {\r\n if (waveData && waveData.OneLineData && waveData.OneLineData.YValues.length !== 0) {\r\n max1 = waveData.OneLineData.YValues.reduce(aryMax);\r\n //console.debug([\"★ymax1\", max1]);\r\n }\r\n } else {\r\n if (waveData && waveData.TowLineData && waveData.TowLineData.YValues.length !== 0) {\r\n max2 = waveData.TowLineData.YValues.reduce(aryMax);\r\n //console.debug([\"★ymax2\", max2]);\r\n }\r\n }\r\n\r\n const ret = Math.max(max1, max2);\r\n if (ret === 0) {\r\n return 1;\r\n } else {\r\n return ret;\r\n }\r\n return 1;\r\n};\r\n\r\n/**\r\n * Y軸の値の最大値を取得\r\n * @param waveData\r\n * @returns\r\n */\r\nconst getLineInfoYMin = (waveData: RawWaveComparisonData, lineNo: number): number => {\r\n var min1 = 0;\r\n var min2 = 0;\r\n if (lineNo == 1) {\r\n if (waveData && waveData.OneLineData && waveData.OneLineData.YValues.length !== 0) {\r\n min1 = waveData.OneLineData.YValues.reduce(aryMin);\r\n //console.debug([\"★ymax1\", max1]);\r\n }\r\n } else {\r\n if (waveData && waveData.TowLineData && waveData.TowLineData.YValues.length !== 0) {\r\n min2 = waveData.TowLineData.YValues.reduce(aryMin);\r\n //console.debug([\"★ymax2\", max2]);\r\n }\r\n }\r\n\r\n const ret = Math.max(min1, min2);\r\n if (ret === 0) {\r\n return 1;\r\n } else {\r\n return ret;\r\n }\r\n return 1;\r\n};\r\n/**\r\n * 二つの数字を受け取って、絶対値で比較して大きい値を返す関数\r\n * @param number1\r\n * @param number2\r\n * @returns\r\n */\r\nconst getMaxAbsoluteValue = (number1: number, number2: number): number => {\r\n const absolute1 = Math.abs(number1);\r\n const absolute2 = Math.abs(number2);\r\n\r\n if (absolute1 > absolute2) {\r\n return absolute1;\r\n } else if (absolute2 > absolute1) {\r\n return absolute2;\r\n } else {\r\n return absolute1;\r\n }\r\n};\r\n\r\nconst createChartPoints = (\r\n chartDt: LineInfo,\r\n pointCount: number,\r\n startIndex: number,\r\n xOffset: number,\r\n isDCRemoval: boolean\r\n): Array => {\r\n console.debug(`chartDt=${chartDt} pointCount=${pointCount} startIndex=${startIndex} xOffset=${xOffset}`);\r\n var points = new Array();\r\n var sIdex = startIndex === -1 ? chartDt.XaxisStartIndex : startIndex;\r\n\r\n chartDt.XValues.filter((tmp) => tmp > sIdex + xOffset).forEach((item, index) => {\r\n if (pointCount > index) {\r\n points.push({\r\n xValue: (item - sIdex) * chartDt.SamplingRate,\r\n yValue: isDCRemoval ? chartDt.YValues[item] - chartDt.YaxisOffset : chartDt.YValues[item],\r\n });\r\n }\r\n });\r\n\r\n return points;\r\n};\r\nconst GetChartPointCount = (min: number, max: number, samplingRate: number): number => {\r\n console.debug(`(${max} - ${min}) / ${samplingRate}`);\r\n return (max - min) / samplingRate;\r\n};\r\n\r\nconst UpDateGraphData = (\r\n data: RawWaveComparisonData | undefined,\r\n xmin: number,\r\n xmax: number,\r\n isPileup: boolean,\r\n isDCRemoval: boolean\r\n): GraphData[] => {\r\n console.debug(['UpDateGraphData data , isPileup,isDCRemoval', data, isPileup, isDCRemoval]);\r\n\r\n var ret: GraphData[] = [];\r\n\r\n if (data?.OneLineData != undefined) {\r\n var item: GraphData = {\r\n lineNo: 1,\r\n valueUpper: 0,\r\n valueUpperLimit: 0,\r\n selectFlg: true,\r\n points: [],\r\n infoColor: 'red',\r\n lineName: '1',\r\n };\r\n\r\n item.lineName = data.OneLineData.ItemName;\r\n var rowCount = GetChartPointCount(xmin, xmax, data.OneLineData.SamplingRate);\r\n\r\n var startIndex = data.OneLineData.XaxisStartIndex;\r\n var xoffset = xmin / data.OneLineData.SamplingRate;\r\n\r\n var points = createChartPoints(data.OneLineData, rowCount, startIndex, xoffset, isDCRemoval);\r\n item.points = points;\r\n ret.push(item);\r\n console.debug(item);\r\n }\r\n\r\n if (data?.TowLineData != undefined) {\r\n var item: GraphData = {\r\n lineNo: 2,\r\n valueUpper: 0,\r\n valueUpperLimit: 0,\r\n selectFlg: true,\r\n points: [],\r\n infoColor: 'blue',\r\n lineName: '2',\r\n };\r\n item.lineName = data.TowLineData.ItemName;\r\n var rowCount = GetChartPointCount(xmin, xmax, data.TowLineData.SamplingRate);\r\n\r\n var startIndex = 0;\r\n if (data?.OneLineData == null) {\r\n startIndex = data.TowLineData.XaxisStartIndex;\r\n } else {\r\n startIndex = isPileup === true ? data.TowLineData.XaxisStartIndex : data.OneLineData.XaxisStartIndex;\r\n }\r\n\r\n var xoffset = xmin / data.TowLineData.SamplingRate;\r\n\r\n var points = createChartPoints(data.TowLineData, rowCount, startIndex, xoffset, isDCRemoval);\r\n item.points = points;\r\n ret.push(item);\r\n console.debug(item);\r\n }\r\n\r\n return ret;\r\n};\r\n\r\n//対象レコード取得\r\nconst GetTargetData = (mesList: MeasureInfoType[], selectDt: SelectDataType): MeasureInfoType | undefined => {\r\n //var mes = mesList.find((item) => item.id == selectDt.mesid);\r\n var dev = mesList.find((item) => item.id == selectDt.devid);\r\n var itemdt = mesList.find((item) => item.id == selectDt.itemid);\r\n if (dev && itemdt) {\r\n var target = mesList.find((item) => {\r\n return item.DevIndex === dev?.DevIndex && item.ItemNameNo === itemdt?.ItemNameNo;\r\n });\r\n return target;\r\n }\r\n return undefined;\r\n};\r\n\r\nconst RawWaveformComparisonConanairChart: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [graphData, setGraphData] = useState([]);\r\n const [fetchData, setFetchData] = useState();\r\n\r\n const [graphSetting, setGraphSetting] = useState({\r\n upper: 0,\r\n upperLimit: 0,\r\n y1Max: 0,\r\n y1Min: 0,\r\n y2Max: 0,\r\n y2Min: 0,\r\n xMax: 0,\r\n xMin: 0,\r\n backColor: Constant.GraphThemeLight.BACK_COLOR,\r\n memoryFontColor: Constant.GraphThemeLight.MEMORY_FONT_COLOR,\r\n yUnit1: '',\r\n yUnit2: '',\r\n xUnit: '',\r\n yUnitColor: Constant.GraphThemeLight.UNIT_COLOR,\r\n xUnitColor: Constant.GraphThemeLight.UNIT_COLOR,\r\n gridColor: Constant.GraphThemeLight.GRID_COLOR,\r\n });\r\n\r\n const isLineShow = (index: number): boolean => {\r\n console.debug(['isLineShow - index,isLineShows', index, props.isLineShows, props]);\r\n if (props.isLineShows.length > index) {\r\n return props.isLineShows[index];\r\n }\r\n return true;\r\n };\r\n //表示ボタン押下時\r\n useEffect(() => {\r\n console.debug(['mesList,line1Setting,line2Setting', props.mesList, props.line1, props.line2]);\r\n props.onLoading(true);\r\n var mes1 = props.line1.mesid;\r\n var target1 = GetTargetData(props.mesList, props.line1);\r\n var day1 = dayjs(props.line1.selectDate).format('YYYY-MM-DD');\r\n var time1 = props.line1.selectTime;\r\n var mes2 = props.line2.mesid;\r\n var target2 = GetTargetData(props.mesList, props.line2);\r\n var day2 = dayjs(props.line2.selectDate).format('YYYY-MM-DD');\r\n var time2 = props.line2.selectTime;\r\n GetGraphLineData(\r\n Number(target1?.PlcNo),\r\n Number(target1?.AiCard),\r\n Number(target1?.AiCh),\r\n `${day1} ${time1}`,\r\n mes1,\r\n Number(target2?.PlcNo),\r\n Number(target2?.AiCard),\r\n Number(target2?.AiCh),\r\n `${day2} ${time2}`,\r\n mes2\r\n ).then((ret) => {\r\n setFetchData(ret);\r\n props.onLoading(false);\r\n });\r\n }, [props.update]);\r\n\r\n //グラフデータ取得後処理\r\n useEffect(() => {\r\n var gdata = UpDateGraphData(\r\n fetchData,\r\n props.graphDispSetting.xMin,\r\n props.graphDispSetting.xMax,\r\n props.graphDispSetting.isPileup,\r\n props.graphDispSetting.isDCRemoval\r\n );\r\n\r\n if (fetchData?.OneLineData || fetchData?.TowLineData) {\r\n if (props.isAutoRangeRef === true) {\r\n props.onAutoRangeSet(false);\r\n console.debug('isAutoRange');\r\n var y1Max = getLineInfoYMax(fetchData, 1);\r\n var y1Min = getLineInfoYMin(fetchData, 1);\r\n\r\n var y2Max = getLineInfoYMax(fetchData, 2);\r\n var y2Min = getLineInfoYMin(fetchData, 2);\r\n\r\n y1Max = Math.abs(Number(y1Max)) * 1.5;\r\n y2Max = Math.abs(Number(y2Max)) * 1.5;\r\n\r\n //小数点切り捨て\r\n y1Max = Math.round(y1Max * 100) / 100;\r\n y1Min = Math.round(y1Min * 100) / 100;\r\n y2Max = Math.round(y2Max * 100) / 100;\r\n y2Min = Math.round(y2Min * 100) / 100;\r\n\r\n y1Max = ToValueMaxRound(y1Max);\r\n y1Min = ToValueMinRound(y1Min);\r\n y2Max = ToValueMaxRound(y2Max);\r\n y2Min = ToValueMinRound(y2Min);\r\n\r\n const y1 = getMaxAbsoluteValue(y1Max, y1Min);\r\n y1Max = y1;\r\n y1Min = -y1;\r\n\r\n const y2 = getMaxAbsoluteValue(y2Max, y2Min);\r\n y2Max = y2;\r\n y2Min = -y2;\r\n\r\n var unit1 = fetchData?.OneLineData != null ? fetchData.OneLineData.UnitSymbol : '';\r\n var unit2 = fetchData?.TowLineData != null ? fetchData.TowLineData.UnitSymbol : '';\r\n\r\n setGraphSetting({\r\n ...graphSetting,\r\n y1Max: y1Max,\r\n y1Min: y1Min,\r\n y2Max: y2Max,\r\n y2Min: y2Min,\r\n yUnit1: unit1,\r\n yUnit2: unit2,\r\n xUnit: 'msec',\r\n });\r\n console.debug(['fetchData', 'y1Max', 'y1Min', 'y2Max', 'y2Min', fetchData, y1Max, y1Min, y2Max, y2Min]);\r\n props.onChagneYMinMax(y1Min, y1Max, y2Min, y2Max);\r\n } else {\r\n var unit1 = fetchData?.OneLineData != null ? fetchData.OneLineData.UnitSymbol : '';\r\n var unit2 = fetchData?.TowLineData != null ? fetchData.TowLineData.UnitSymbol : '';\r\n\r\n setGraphSetting({\r\n ...graphSetting,\r\n yUnit1: unit1,\r\n yUnit2: unit2,\r\n xUnit: 'msec',\r\n });\r\n }\r\n }\r\n\r\n setGraphData(gdata);\r\n }, [fetchData]);\r\n\r\n //グラフデータ取得後処理\r\n useEffect(() => {\r\n var gdata = UpDateGraphData(\r\n fetchData,\r\n props.graphDispSetting.xMin,\r\n props.graphDispSetting.xMax,\r\n props.graphDispSetting.isPileup,\r\n props.graphDispSetting.isDCRemoval\r\n );\r\n\r\n if (fetchData) {\r\n var y1Max = props.graphDispSetting.y1Max;\r\n var y1Min = props.graphDispSetting.y1Min;\r\n var y2Max = props.graphDispSetting.y2Max;\r\n var y2Min = props.graphDispSetting.y2Min;\r\n\r\n setGraphSetting({ ...graphSetting, y1Max: y1Max, y1Min: y1Min, y2Max: y2Max, y2Min: y2Min });\r\n console.debug(['y1Max,y1Min,y2Max,y2Min', y1Max, y1Min, y2Max, y2Min]);\r\n }\r\n\r\n setGraphData(gdata);\r\n }, [props.graphDispSetting]);\r\n\r\n const CustomTooltip = ({ active, payload, label }: any) => {\r\n if (active) {\r\n return (\r\n
\r\n
{`${t('RawWaveformComparisonConanairChart.時間', '時間')} : ${Number(label).toFixed(\r\n 3\r\n )}`}
\r\n {payload?.map((r: any, index: any) => {\r\n if (index <= 2 && r.name !== 'yValue') {\r\n return (\r\n
\r\n {r.name} : {Number(r.value).toFixed(3)}\r\n
\r\n );\r\n }\r\n })}\r\n
\r\n );\r\n }\r\n return null;\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n props.toFixed(2)}\r\n ticks={getTicks(graphSetting.y1Min, graphSetting.y1Max)}\r\n domain={[graphSetting.y1Min, graphSetting.y1Max]}\r\n width={95}\r\n >\r\n \r\n \r\n props.toFixed(2)}\r\n ticks={getTicks(graphSetting.y2Min, graphSetting.y2Max)}\r\n domain={[graphSetting.y2Min, graphSetting.y2Max]}\r\n width={95}\r\n >\r\n \r\n \r\n } />\r\n \r\n \r\n {/* {graphData?.map((row, index) => (\r\n \r\n ))} */}\r\n \r\n \r\n );\r\n};\r\nexport default RawWaveformComparisonConanairChart;\r\n","import React, { useEffect, useState } from 'react';\r\nimport dayjs from 'dayjs';\r\n\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\n\r\nimport ColorLineText from '../../atoms/Text/ColorLineText';\r\n\r\nimport { ItemComboBox, ComboBoxItemType } from '../../atoms/ComboBox/ItemComboBox';\r\nimport { MeasureInfoType, GetMeasureInfoType, GetDataTimeList, SelectDataType } from './RawWaveformComparisonConanair';\r\nimport ItemCalender from '../../atoms/Calendar/ItemCalender';\r\nimport ItemCheckBox from '../../atoms/CheckBox/ItemCheckBox';\r\nimport DateInput from '../../atoms/Calendar/DateInput';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { IsValidKindOfFftCmpConan } from '../../../function/NameDevSetModel';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '0px 0px 0px 4px',\r\n borderBottomWidth: '0px',\r\n },\r\n labelStyle: {\r\n fontSize: '13px',\r\n },\r\n itemBoxStyle: {\r\n fontSize: '13px',\r\n },\r\n })\r\n);\r\n\r\ntype Props = {\r\n selectData: SelectDataType;\r\n itemColor: string;\r\n mesInfoList: MeasureInfoType[];\r\n itemName: string;\r\n onChangeSelectDataEvent: (selectData: SelectDataType) => void;\r\n isBlankSelect: boolean;\r\n onChnageIsShowSelect: (selectData: SelectDataType) => void;\r\n onAutoRangeSet: (data: boolean) => void;\r\n rawWaveCombobox: ComboBoxItemType[];\r\n};\r\n\r\n//機器種別リスト作成\r\nconst CreateDevList = (data: MeasureInfoType[], measureId: number): ComboBoxItemType[] => {\r\n var ret: ComboBoxItemType[] = [];\r\n if (data != null) {\r\n var data = data.filter((r) => IsValidKindOfFftCmpConan(r.Speed, 0))\r\n\r\n var devList = data.filter(\r\n (el: MeasureInfoType, index, self) =>\r\n self.findIndex(\r\n (e: MeasureInfoType) =>\r\n e.DevIndex === el.DevIndex\r\n ) === index\r\n );\r\n\r\n if (measureId !== -1) {\r\n for (var i in devList) {\r\n ret.push({\r\n index: devList[i].id,\r\n name: devList[i].DevNo + devList[i].DevName,\r\n });\r\n }\r\n }\r\n //console.debug([\"★★createDevList - ret\", ret, data]);\r\n }\r\n return ret;\r\n};\r\n\r\n/**\r\n * 項目種別リスト作成\r\n * @param data \r\n * @param measureId \r\n * @param devId \r\n * @returns \r\n */\r\nconst CreateItemList = (data: MeasureInfoType[], measureId: number, devId: number): ComboBoxItemType[] => {\r\n var ret: ComboBoxItemType[] = [];\r\n if (data != null) {\r\n let targetDatas = data.filter((r) => IsValidKindOfFftCmpConan(r.Speed, 0));\r\n //var mes = data.find((item) => item.id === measureId);\r\n var dev = targetDatas.find((item) => item.id === devId);\r\n //speed2,4でfilter後、groupby\r\n var itemNameList = targetDatas.filter(\r\n (el: MeasureInfoType, index, self) =>\r\n self.findIndex(\r\n (e: MeasureInfoType) =>\r\n // (e.Speed === 2 || e.Speed === 4) &&\r\n // e.KindNo === mes?.KindNo &&\r\n // e.Speed === mes?.Speed &&\r\n e.DevIndex === dev?.DevIndex &&\r\n e.ItemNameNo == el.ItemNameNo &&\r\n e.ItemName == el.ItemName\r\n ) === index\r\n );\r\n\r\n for (var i in itemNameList) {\r\n ret.push({ index: itemNameList[i].id, name: itemNameList[i].ItemName });\r\n }\r\n }\r\n return ret;\r\n};\r\n\r\n/**\r\n * 時間リスト作成\r\n * @param data \r\n * @returns \r\n */\r\nexport const CreateTimeList = (data: string[]): ComboBoxItemType[] => {\r\n var ret: ComboBoxItemType[] = [];\r\n\r\n for (var i in data) {\r\n var time = dayjs(data[i]).format('HH:mm:ss');\r\n ret.push({ index: Number(i + 1), name: time });\r\n }\r\n return ret;\r\n};\r\n\r\nconst RawWaveformComparisonConanairSelectItem: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n\r\n const [selectDay, setSelectDay] = React.useState(new Date());\r\n const [mesList, setMesList] = React.useState([]);\r\n const [devList, setDevList] = React.useState([]);\r\n const [itemList, setItemList] = React.useState([]);\r\n const [timeList, setTimeList] = useState();\r\n const [selectData, setSelectData] = useState(props.selectData);\r\n const [selectTimeid, setSelectTimeid] = useState(0);\r\n const [mesInfoList, setMesInfoList] = React.useState([]);\r\n\r\n //コンボボックスデータ作成\r\n useEffect(() => {\r\n\r\n if (props.mesInfoList.length != 0) {\r\n console.debug('初期表示でのCrete');\r\n //console.debug([\"★props\", props]);\r\n var sdt = props.selectData;\r\n //var mesList = CreateMeasureList(props.mesInfoList, props.isBlankSelect);\r\n var devList = CreateDevList(props.mesInfoList, sdt.mesid);\r\n var itemList = CreateItemList(props.mesInfoList, sdt.mesid, sdt.devid);\r\n //console.debug('★devList,itemList', devList, itemList);\r\n\r\n setMesList(props.rawWaveCombobox);\r\n setDevList(devList);\r\n setItemList(itemList);\r\n setSelectDay(sdt.selectDate);\r\n setMesInfoList(props.mesInfoList);\r\n createTimeList(sdt.mesid, sdt.devid, sdt.itemid, sdt.selectDate, sdt.selectTime);\r\n }\r\n }, [props.mesInfoList]);\r\n\r\n const createTimeList = (mesid: number, devid: number, itemid: number, date: Date, time: string) => {\r\n console.debug(['createTimeList', mesid]);\r\n\r\n if (mesid === -1) {\r\n var sdt: SelectDataType = {\r\n ...selectData,\r\n mesid: -1,\r\n devid: -1,\r\n itemid: -1,\r\n selectDate: date,\r\n selectTime: '',\r\n };\r\n setTimeList([]);\r\n setSelectData(sdt);\r\n props.onChangeSelectDataEvent(sdt);\r\n console.debug(['std', sdt]);\r\n return;\r\n }\r\n\r\n if (props.mesInfoList.length != 0) {\r\n //var mes = props.mesInfoList.find((item) => item.id == mesid);\r\n var dev = props.mesInfoList.find((item) => item.id == devid);\r\n var itemdt = props.mesInfoList.find((item) => item.id == itemid);\r\n var day = dayjs(date).format('YYYY-MM-DD');\r\n\r\n if (dev && itemdt) {\r\n //対象レコード取得\r\n var target = props.mesInfoList.find((item) => {\r\n return (\r\n item.DevIndex === dev?.DevIndex && item.ItemNameNo === itemdt?.ItemNameNo\r\n );\r\n });\r\n //console.debug([\"★★target, day\", target, day]);\r\n if (target) {\r\n //時間リスト取得\r\n GetDataTimeList(Number(target?.PlcNo), Number(target?.AiCard), Number(target?.AiCh), day, mesid).then((ret) => {\r\n //console.debug([\"★★ret\", ret]);\r\n if (ret) {\r\n var sTime: string = '';\r\n var timeList = CreateTimeList(ret);\r\n setTimeList(timeList);\r\n\r\n //時間でソートを行う\r\n timeList.sort(function (a, b) {\r\n if (a.name > b.name) {\r\n return 1;\r\n } else {\r\n return -1;\r\n }\r\n });\r\n if (timeList.length != 0) {\r\n var t = timeList.find((row) => row.name === time);\r\n if (t) {\r\n setSelectTimeid(t.index);\r\n } else {\r\n setSelectTimeid(timeList[0].index);\r\n time = timeList[0].name;\r\n }\r\n }\r\n var sdt: SelectDataType = {\r\n ...selectData,\r\n mesid: mesid,\r\n devid: devid,\r\n itemid: itemid,\r\n selectDate: date,\r\n selectTime: time,\r\n };\r\n setSelectData(sdt);\r\n props.onChangeSelectDataEvent(sdt);\r\n console.debug(['std', sdt]);\r\n }\r\n });\r\n } else {\r\n var sdt: SelectDataType = {\r\n ...selectData,\r\n mesid: -1,\r\n devid: -1,\r\n itemid: -1,\r\n selectDate: date,\r\n selectTime: '',\r\n };\r\n setSelectData(sdt);\r\n props.onChangeSelectDataEvent(sdt);\r\n console.debug(['std', sdt]);\r\n }\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * \r\n */\r\n const handleShowChange = () => {\r\n var target = selectData;\r\n target.isShow = !target.isShow;\r\n setSelectData({ ...target });\r\n props.onChnageIsShowSelect(target);\r\n };\r\n\r\n /**\r\n * 計測種別変更event\r\n */\r\n const ChangeMesSelect = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n var selectId = Number(event.target.value);\r\n props.onAutoRangeSet(true);\r\n if (selectId == -1) {\r\n //console.debug([\"★★noSelect\", selectId]);\r\n var devList = CreateDevList(mesInfoList, -1);\r\n var itemList = CreateItemList(mesInfoList, -1, -1);\r\n setDevList(devList);\r\n setItemList(itemList);\r\n createTimeList(-1, -1, -1, selectDay, '');\r\n } else {\r\n //var mes = props.mesInfoList.find((item) => item.id === Number(event.target.value));\r\n\r\n var devList = CreateDevList(props.mesInfoList, 0);\r\n var itemList = CreateItemList(props.mesInfoList, 0, devList[0].index);\r\n setDevList(devList);\r\n setItemList(itemList);\r\n createTimeList(Number(event.target.value), devList[0].index, itemList[0].index, selectDay, '');\r\n\r\n }\r\n };\r\n /**\r\n * 機器選択変更event\r\n * @param event \r\n */\r\n const ChangeDevSelect = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n //var mes = props.mesInfoList.find((item) => item.id === selectData.mesid);\r\n let mesId = selectData.mesid;\r\n var dev = props.mesInfoList.find((item) => item.id === Number(event.target.value));\r\n if (dev != undefined) {\r\n var itemList = CreateItemList(mesInfoList, mesId, dev.id);\r\n setItemList(itemList);\r\n createTimeList(mesId, dev.id, itemList[0].index, selectDay, '');\r\n }\r\n };\r\n /**\r\n * 項目選択変更event\r\n * @param event \r\n */\r\n const ChangeitemSelect = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n //ar mes = props.mesInfoList.find((item) => item.id === selectData.mesid);\r\n var dev = mesInfoList.find((item) => item.id === selectData.devid);\r\n var itm = mesInfoList.find((item) => item.id === Number(event.target.value));\r\n if (dev != undefined && itm != undefined) {\r\n createTimeList(selectData.mesid, dev.id, itm.id, selectDay, '');\r\n }\r\n };\r\n /**\r\n * \r\n * @param value カレンダー選択変更event\r\n */\r\n const onChangeCalendarValue = (value: string) => {\r\n var s = new Date(value);\r\n setSelectDay(s);\r\n createTimeList(selectData.mesid, selectData.devid, selectData.itemid, s, '');\r\n };\r\n /**\r\n * 時間変更event\r\n * @param event \r\n */\r\n const ChangeTimeSelect = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n var time = timeList?.find((row) => row.index == Number(event.target.value));\r\n if (time) {\r\n var sdt: SelectDataType = {\r\n ...selectData,\r\n selectTime: time?.name,\r\n };\r\n setSelectData({ ...sdt });\r\n props.onChangeSelectDataEvent(sdt);\r\n setSelectTimeid(time.index);\r\n }\r\n };\r\n /**\r\n * 項目選択変更event\r\n * @param event \r\n */\r\n const handleIsSelectChange = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n console.debug(['handleIsSelectChange - selectData=', selectData]);\r\n setSelectData({ ...selectData, isSelect: !selectData.isSelect });\r\n props.onChangeSelectDataEvent({\r\n ...selectData,\r\n isSelect: !selectData.isSelect,\r\n });\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {props.itemName}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default RawWaveformComparisonConanairSelectItem;\r\n","import React, { useState, useEffect } from 'react';\r\nimport RangeInputNumber from '../../molecules/Range/RangeInputNumber';\r\nimport RangeInputNumberLimit from '../../molecules/Range/RangeInputNumberLimit';\r\nimport ItemCheckBox from '../../atoms/CheckBox/ItemCheckBox';\r\nimport { GraphDispSetting } from './RawWaveformComparisonConanairChart';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport { useTranslation } from 'react-i18next';\r\nimport Box from '@material-ui/core/Box';\r\n\r\ntype Props = {\r\n settingData: GraphDispSetting;\r\n onChange: (data: GraphDispSetting) => void;\r\n};\r\n\r\nconst RawWaveformComparisonConanairChartSetting: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const buttonStyle = {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n };\r\n const xMinMaxOn = (min: number, max: number) => {\r\n console.debug(`min=${min},max=${max}`);\r\n var tmp = props.settingData;\r\n tmp.xMin = min;\r\n tmp.xMax = max;\r\n props.onChange(tmp);\r\n };\r\n const yMinMaxOn = (min: number, max: number, lineNo: number) => {\r\n console.debug(`min=${min},max=${max}`);\r\n var tmp = props.settingData;\r\n if (lineNo == 1) {\r\n tmp.y1Min = min;\r\n tmp.y1Max = max;\r\n } else {\r\n tmp.y2Min = min;\r\n tmp.y2Max = max;\r\n }\r\n\r\n props.onChange(tmp);\r\n };\r\n\r\n const onPileupChangeCheckBox = (event: React.ChangeEvent) => {\r\n var tmp = props.settingData;\r\n tmp.isPileup = tmp.isPileup == true ? false : true;\r\n props.onChange(tmp);\r\n };\r\n const onDCRemovalChangeCheckBox = (event: React.ChangeEvent) => {\r\n var tmp = props.settingData;\r\n tmp.isDCRemoval = tmp.isDCRemoval == true ? false : true;\r\n props.onChange(tmp);\r\n };\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n
\r\n yMinMaxOn(max, min, 1)}\r\n />\r\n yMinMaxOn(max, min, 2)}\r\n />\r\n
\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default RawWaveformComparisonConanairChartSetting;\r\n","import React from 'react';\r\nimport { useHistory } from 'react-router-dom';\r\nimport dayjs from 'dayjs';\r\n\r\nimport { makeStyles, createStyles, Theme } from '@material-ui/core/styles';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Button from '@material-ui/core/Button';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport { FFT_CMP_GROUP_SET } from '../../../function/GroupDataModel';\r\nimport { GetTrendGroupTableByItemSet } from '../../../function/GroupDataModel';\r\nimport SimpleDialog from '../../atoms/Dialog/SimpleDialog';\r\nimport TrendGraphGroupSelectPage from '../TrendGraph/TrendGraphGroupSelectPage';\r\nimport RealTimeTrendGraphGroupSelectPage from '../RealTimeTrendGraph/RealTimeTrendGraphGroupSelectPage';\r\n\r\nimport { MeasureInfoType, SelectDataType, FindMeasureInfo } from './RawWaveformComparisonConanair';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n buttonStyle: {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n },\r\n })\r\n);\r\n\r\n/**ダイアログ表示モードキー */\r\nconst DialogKindKey = {\r\n None: 'None',\r\n RealTime: 'realTime',\r\n Trend: 'trend',\r\n} as const;\r\n/**ダイアログ表示タイプ */\r\ntype DialgKindType = typeof DialogKindKey[keyof typeof DialogKindKey];\r\n\r\n/**引数 */\r\ntype Props = {\r\n selectDatas: SelectDataType[];\r\n measureInfo: MeasureInfoType[];\r\n};\r\n\r\nconst RawWaveformComparisonConanairButtonList: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const history = useHistory();\r\n const classes = useStyles();\r\n\r\n const { selectDatas, measureInfo } = props;\r\n\r\n const [simpleDialogOpen, setSimpleDialogOpen] = React.useState(false);\r\n const [fftErrDialogOpen, setFftErrDialogOpen] = React.useState(false);\r\n const [gropuSelectDialogOpen, setGropuSelectDialogOpen] = React.useState(false);\r\n const [dialogKind, setDialogKind] = React.useState(DialogKindKey.None);\r\n const [selectGroupNos, setSelectGroupNos] = React.useState([]);\r\n\r\n /** FFT比較ボタン処理 */\r\n const handleFftComparisonPageOpen = () => {\r\n let plc1: number = 0;\r\n let plc2: number = 0;\r\n let time1: string = '';\r\n let set1: number = 0;\r\n let set2: number = 0;\r\n let time2: string = '';\r\n\r\n const sDatas = selectDatas.filter((row) => row.isSelect === true);\r\n\r\n console.debug(['sDatas', sDatas]);\r\n if (!sDatas) {\r\n console.debug(['selectData none']);\r\n setFftErrDialogOpen(true);\r\n return;\r\n }\r\n for (let i = 0; i < sDatas.length; i++) {\r\n var target = FindMeasureInfo(measureInfo, sDatas[i]);\r\n if (!target) {\r\n continue;\r\n }\r\n if (i == 0) {\r\n plc1 = target.PlcNo;\r\n set1 = target.SetNo;\r\n if (sDatas[i].selectDate != null) {\r\n time1 = dayjs(sDatas[i].selectDate).format('YYYY/MM/DD') + ' ' + sDatas[i].selectTime;\r\n } else {\r\n time1 = '';\r\n }\r\n } else {\r\n plc2 = target.PlcNo;\r\n set2 = target.SetNo;\r\n if (sDatas[i].selectDate != null) {\r\n time2 = dayjs(sDatas[i].selectDate).format('YYYY/MM/DD') + ' ' + sDatas[i].selectTime;\r\n } else {\r\n time2 = '';\r\n }\r\n }\r\n }\r\n\r\n //console.debug(['plc1', plc1, 'plc2', plc2]);\r\n if (plc1 === 0 && plc2 === 0) {\r\n console.debug(['selectData none']);\r\n setFftErrDialogOpen(true);\r\n return;\r\n }\r\n\r\n var fftgroupSet: FFT_CMP_GROUP_SET = {\r\n GROUP_NO: 99,\r\n GROUP_NAME: '',\r\n DSP_FLG: 0,\r\n PLC_NO1: plc1,\r\n SET_NO1: set1,\r\n PLC_NO2: plc2,\r\n SET_NO2: set2,\r\n PLC_NO3: 0,\r\n SET_NO3: 0,\r\n KIND1: 0,\r\n KIND2: 0,\r\n KIND3: 0,\r\n\r\n Time_No1: time1,\r\n Time_No2: time2,\r\n Time_No3: '',\r\n };\r\n\r\n console.debug(['passData', fftgroupSet]);\r\n\r\n //画面遷移\r\n history.push({\r\n pathname: '/FFTComparisonPage',\r\n state: fftgroupSet,\r\n });\r\n };\r\n\r\n /**\r\n *傾向管理ボタン処理\r\n */\r\n const handleTrendPageOpen = () => {\r\n const sData = selectDatas.find((row) => row.isSelect === true);\r\n if (!sData) {\r\n console.debug(['selectData none']);\r\n handleSimpleDialogClickOpen();\r\n return;\r\n }\r\n\r\n setDialogKind(DialogKindKey.Trend);\r\n\r\n var target = FindMeasureInfo(measureInfo, sData);\r\n\r\n GetTrendGroupTableByItemSet().then((ret) => {\r\n var gpInfo = ret.filter(\r\n (row) => row.trdItemSet.PLC_NO == target?.PlcNo && row.trdItemSet.SET_NO === target.SetNo\r\n );\r\n console.debug(['getgpItem=', gpInfo]);\r\n\r\n if (gpInfo.length !== 0) {\r\n var gpNos: number[] = [];\r\n for (var i in gpInfo) {\r\n gpNos.push(gpInfo[i].trdGroupSet.GROUP_NO);\r\n }\r\n setSelectGroupNos(gpNos);\r\n } else {\r\n handleSimpleDialogClickOpen();\r\n return;\r\n }\r\n handleGroupSelectDialogShow();\r\n });\r\n };\r\n\r\n /**\r\n * グループ選択ダイアログ表示\r\n */\r\n const handleGroupSelectDialogShow = () => {\r\n setGropuSelectDialogOpen(true);\r\n };\r\n\r\n /**\r\n * グループ選択ダイアログ閉じる\r\n */\r\n const handleGroupSelectDialogClose = () => {\r\n setGropuSelectDialogOpen(false);\r\n };\r\n\r\n /**\r\n * メッセージボックス表示\r\n */\r\n const handleSimpleDialogClickOpen = () => {\r\n setSimpleDialogOpen(true);\r\n };\r\n\r\n /**メッセージボックス閉じる */\r\n const handleSimpleDialogClose = () => {\r\n setSimpleDialogOpen(false);\r\n };\r\n return (\r\n \r\n {/* \r\n \r\n {t('RawWaveformComparisonConanairButtonList.傾向管理', '傾向管理')}\r\n \r\n \r\n \r\n \r\n {t('RawWaveformComparisonConanairButtonList.FFT比較', 'FFT比較')}\r\n \r\n */}\r\n \r\n {dialogKind == DialogKindKey.RealTime ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n グループが見つかりませんでした\r\n \r\n\r\n setFftErrDialogOpen(false)}\r\n title={t('RawWaveformComparisonConanairButtonList.FFT比較', 'FFT比較')}\r\n okText={t('RawWaveformComparisonConanairButtonList.閉じる', '閉じる')}\r\n maxWidth={'sm'}\r\n >\r\n 項目が選択されていません\r\n \r\n \r\n );\r\n};\r\n\r\nexport default RawWaveformComparisonConanairButtonList;\r\n","import { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\n\r\nexport const TableBaseStyle = makeStyles(\r\n createStyles({\r\n //テーブルヘッダセル\r\n headerCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n },\r\n bodyCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n padding: '4px',\r\n height: '30px',\r\n },\r\n bodyCellCenter: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n padding: '4px',\r\n height: '30px',\r\n },\r\n //テキスト\r\n textField: {\r\n flexGrow: 1,\r\n height: '100%',\r\n width: '100%',\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n textAlign: \"center\",\r\n },\r\n })\r\n);\r\n\r\nexport const RawWaveformComparisonConanairStyle = makeStyles(\r\n createStyles({\r\n responsiveContainer: {\r\n minHeight: 'calc(100vh - 434px)',\r\n maxHeight: 'calc(100vh - 434px)',\r\n },\r\n paper: {\r\n background: '#FFFFEE',\r\n },\r\n })\r\n);\r\n\r\nexport const FooterBaseStyle = makeStyles(\r\n createStyles({\r\n buttonStyle: {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n },\r\n })\r\n);\r\n","import { ErrorCode, ResponceDataType } from \"../../../../ErrorCode\";\r\nimport { SpeedKind, MeasureHighKind } from '../../../../Constant';\r\n\r\n\r\nexport type KIND_NO_NAME_SET = {\r\n SPEED: number;\r\n NAME_NO: number;\r\n MES_NAME: string;\r\n FFT_INVALID: number;\r\n}\r\n\r\nexport type NAME_ITEM_SET = {\r\n ITM_NAME_NO: number;\r\n EST: number;\r\n ITM_NAME: string;\r\n}\r\n\r\nexport type LOG_INT_SET = {\r\n SPEED: number;\r\n LOG_INT: number;\r\n DSP_STR: string;\r\n}\r\n\r\nexport type DATA_UNIT = {\r\n NO: number;\r\n UNIT_STR: string;\r\n}\r\n\r\n\r\n//計測設定Type\r\nexport type PLCcollectSettingType = {\r\n /// 収集設定行データ\r\n //ColRow :COL_SET ;\r\n /// ユニット情報\r\n //PlcUnitSetRow :PLC_UNIT_SET ;\r\n /// 機器設定行データ\r\n //NameDevSetRow :NAME_DEV_SET ;PLCcollectSettingType\r\n /// PLCNo\r\n PLCNo: string;\r\n /// 実行フラグ\r\n IsExecute: boolean;\r\n /// ユニット型式名\r\n UnitName: string;\r\n /// AIカードNo\r\n AICardNo: string;\r\n /// チャンネルNo\r\n ChannelNo: string;\r\n /// 計測種別No colSet.KIND_NO\r\n MeasureKindNo: string;\r\n /// 計測種別名\r\n MeasureKindName: string;\r\n /// AIユニット登録番号\r\n AIUnit: number;\r\n /// 収集時間\r\n CollectionTime: string;\r\n /// 機器INDEX\r\n MachineIndex: string;\r\n /// 機器No\r\n MachineNo: string;\r\n /// 機器名称\r\n MachineName: string;\r\n /// 項目名称No\r\n ItemNameNo: number;\r\n /// 名称No.\r\n NameNo: number;\r\n /// 項目名称\r\n ItemName: string;\r\n /// ロギング周期\r\n LoggingPeriod: string;\r\n /// ロギング周期(分)\r\n LoggingPeriodMinute: number;\r\n /// ロギング周期開始時間\r\n LoggingStartTime: Date;\r\n /// 上書きフラグ\r\n IsOverwrite: boolean;\r\n /// デジタル値下限値\r\n DigitalValueLower: string;\r\n /// デジタル値上限値\r\n DigitalValueUpper: string;\r\n /// 工学値下限値\r\n EngineeringValueLower: string;\r\n /// 工学値上限値\r\n EngineeringValueUpper: string;\r\n /// 乗率 設定値\r\n Mul: number;\r\n /// 乗率\r\n MultiplicationFactor: number;\r\n /// 単位記号\r\n UnitSymbol: string;\r\n /// PLCデータ格納ZR点数(設定画面で計算してセット)\r\n ZRChCount: number;\r\n /// オフセット電圧\r\n OffsetVoltage: string;\r\n /// 判定ボタン\r\n JudgmentButtonEnable: boolean;\r\n /// グラフ表示ボタン\r\n GraphButtonEnable: boolean;\r\n /// メモ\r\n Note: string;\r\n /// モータ起動状態検出フラグ モータ起動状態検出信号の際1とする。(線電流か零相電流)\r\n StartDet: number;\r\n /// ユニット種別 1:低速 2:高速 3:EMC-B 4:計算タグ plcUnitSet.SPEED\r\n Speed: number;\r\n DataUnitStr: string;\r\n\r\n /// アベレージング処理\r\n AvgPrc: number;\r\n /// エンベロープ処理\r\n EnvSav: boolean;\r\n /// 回転周波数算出センサ\r\n RotClc: boolean;\r\n /// リアルタイムトレンド上限値\r\n RealtimeTrendValueUpper: string;\r\n /// リアルタイムトレンド上上限値\r\n RealtimeTrendValueUpperUpper: string;\r\n /**\r\n * 速度・変位判定マスク\r\n */\r\n DispMaskOn: number;\r\n\r\n // 定格回転数\r\n RatedSpeed: number;\r\n\r\n ValID: number;\r\n\r\n //変更フラグ\r\n isEdit: boolean;\r\n //IoTLocal_Sav更新フラグ\r\n //AWSへ通知が必要なフラグ\r\n isIotEdit: boolean;\r\n //連番\r\n id: number;\r\n};\r\n\r\nexport type PLCcollectSettingUpdateType = {\r\n /// PLCNo\r\n PLCNo: string;\r\n /// AIカードNo\r\n AICardNo: string;\r\n /// チャンネルNo\r\n ChannelNo: string;\r\n /// 有効フラグ\r\n ValID: number;\r\n /// 実行フラグ\r\n IsExecute: boolean;\r\n // /// セット番号\r\n // SetNo: number;\r\n /// 計測種別No\r\n MeasureKindNo: string;\r\n /// 機器INDEX\r\n MachineIndex: string;\r\n /// 項目名称No\r\n ItemNameNo: number;\r\n /// ロギング周期(分)\r\n LoggingPeriodMinute: number;\r\n /// ロギング周期開始時間\r\n LoggingStartTime: Date;\r\n /// 上書きフラグ\r\n IsOverwrite: boolean;\r\n /// デジタル値下限値\r\n DigitalValueLower: string;\r\n /// デジタル値上限値\r\n DigitalValueUpper: string;\r\n /// 工学値下限値\r\n EngineeringValueLower: string;\r\n /// 工学値上限値\r\n EngineeringValueUpper: string;\r\n /// 乗率 設定値\r\n Mul: number;\r\n /// 単位記号\r\n UnitSymbol: string;\r\n /// PLCデータ格納ZR点数(設定画面で計算してセット)\r\n ZRChCount: number;\r\n /// メモ\r\n Note: string;\r\n /// モータ起動状態検出フラグ モータ起動状態検出信号の際1とする。(線電流か零相電流)\r\n StartDet: number;\r\n /// アベレージング処理\r\n AvgPrc: number;\r\n /// エンベロープ処理\r\n EnvSav: boolean;\r\n /// 回転周波数算出センサ\r\n RotClc: boolean;\r\n /// リアルタイムトレンド上限値\r\n RealtimeTrendValueUpper: string;\r\n /// リアルタイムトレンド上上限値\r\n RealtimeTrendValueUpperUpper: string;\r\n};\r\n\r\nexport const GetKindNoNameSetType = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const url = \"api/KindNoNameSet\";\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: KIND_NO_NAME_SET[]) => {\r\n console.debug(result);\r\n if (KindNoNameSetTypeValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\nconst KindNoNameSetTypeValidate = (data: KIND_NO_NAME_SET[]) => {\r\n if (data == undefined) return false;\r\n return true;\r\n};\r\n\r\n// NAME_ITEM_SET\r\nexport const GetNameItemSetType = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const url = \"api/NameItemSet\";\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: NAME_ITEM_SET[]) => {\r\n console.debug(result);\r\n if (NameItemSetTypeValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\nconst NameItemSetTypeValidate = (data: NAME_ITEM_SET[]) => {\r\n if (data == undefined) return false;\r\n return true;\r\n};\r\n\r\nexport const SetNameItemSetType = (list: NAME_ITEM_SET[]): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch('api/NameItemSet', {\r\n method: 'put',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(list),\r\n })\r\n .then(res => resolve())\r\n .catch(reason => reject(reason));\r\n });\r\n}\r\n\r\nexport const GetLogIntSetType = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const url = \"api/LogIntSet\";\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: LOG_INT_SET[]) => {\r\n console.debug(result);\r\n if (LogIntSetTypeValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\nconst LogIntSetTypeValidate = (data: LOG_INT_SET[]) => {\r\n if (data == undefined) return false;\r\n return true;\r\n};\r\n\r\n\r\n//乗率\r\nexport type MulDataType = {\r\n code: number;\r\n value: string;\r\n}\r\n\r\nexport const GetmulItems = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n var ret: MulDataType[] = [\r\n { code: -5, value: '0.00001' },\r\n { code: -4, value: '0.0001' },\r\n { code: -3, value: '0.001' },\r\n { code: -2, value: '0.01' },\r\n { code: -1, value: '0.1' },\r\n { code: 0, value: '1' },\r\n { code: 1, value: '10' },\r\n { code: 2, value: '100' },\r\n ];\r\n resolve(ret);\r\n });\r\n}\r\n\r\n\r\n\r\nexport const GetDataUnitType = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const url = \"api/DataUnit\";\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: DATA_UNIT[]) => {\r\n console.debug(result);\r\n if (DataUnitTypeValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\nconst DataUnitTypeValidate = (data: DATA_UNIT[]) => {\r\n if (data == undefined) return false;\r\n return true;\r\n};\r\n\r\n\r\nexport const GetPLCcollectSettingType = (plcNo: number): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const url = 'api/PLCcollectSettingModels'.concat(plcNo == 0 ? '' : `/${plcNo}`);\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: PLCcollectSettingType[]) => {\r\n if (PLCcollectSettingTypeValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\nconst PLCcollectSettingTypeValidate = (data: PLCcollectSettingType[]) => {\r\n if (data == undefined) return false;\r\n return true;\r\n};\r\n\r\nexport const SetPLCcollectSetting = (settings: PLCcollectSettingType[]): Promise => {\r\n const saveSettings = settings.map((setting) => {\r\n return {\r\n PLCNo: setting.PLCNo,\r\n AICardNo: setting.AICardNo,\r\n ChannelNo: setting.ChannelNo,\r\n ValID: 1,\r\n IsExecute: setting.IsExecute,\r\n MeasureKindNo: setting.MeasureKindNo,\r\n MachineIndex: setting.MachineIndex,\r\n ItemNameNo: setting.ItemNameNo,\r\n LoggingPeriodMinute: setting.LoggingPeriodMinute,\r\n LoggingStartTime: setting.LoggingStartTime,\r\n IsOverwrite: setting.IsOverwrite,\r\n DigitalValueLower: setting.DigitalValueLower,\r\n DigitalValueUpper: setting.DigitalValueUpper,\r\n EngineeringValueLower: setting.EngineeringValueLower,\r\n EngineeringValueUpper: setting.EngineeringValueUpper,\r\n Mul: setting.Mul,\r\n UnitSymbol: setting.UnitSymbol,\r\n ZRChCount: setting.ZRChCount,\r\n Note: setting.Note,\r\n StartDet: setting.StartDet > 0 ? 1 : 0,\r\n AvgPrc: setting.AvgPrc,\r\n EnvSav: setting.EnvSav,\r\n RotClc: setting.RotClc,\r\n RealtimeTrendValueUpper: setting.RealtimeTrendValueUpper,\r\n RealtimeTrendValueUpperUpper: setting.RealtimeTrendValueUpperUpper,\r\n AIUnit: 0,\r\n DispMaskOn: setting.DispMaskOn,\r\n IsIotEdit: setting.isIotEdit,\r\n };\r\n });\r\n return new Promise((resolve, reject) => {\r\n const url = \"api/PLCcollectSettingModels\";\r\n fetch(url, {\r\n method: 'put',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(saveSettings),\r\n })\r\n .then((res) => res.json())\r\n .then((res: ResponceDataType) => {\r\n if (res.ErrorCode === ErrorCode.ERR_CODE_NONE) {\r\n resolve(res.ErrorCode);\r\n }\r\n else {\r\n console.error(res.ErrorMessage);\r\n resolve(res.ErrorCode);\r\n }\r\n })\r\n .catch(reason => {\r\n reject(reason)\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * 判定値設定が行えるかチェック\r\n * @param settings\r\n * @returns\r\n */\r\nexport const IsJudgeSetting = (settings: PLCcollectSettingType): boolean => {\r\n\r\n if (settings.AIUnit === 1) {\r\n return true;\r\n }\r\n if (settings.AIUnit === 8) {\r\n return true;\r\n }\r\n //コナンエア\r\n if (settings.AIUnit === 12) {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * コナンエアの計測種別表示に表示する文字列を返す\r\n */\r\nexport const GetConanMeasureName = (kindNoNameList: KIND_NO_NAME_SET[]): string => {\r\n let name = kindNoNameList.find(\r\n (item) => item.SPEED === SpeedKind.SPEED_KIND_HIGHT && item.NAME_NO === MeasureHighKind.VIBRATION\r\n )?.MES_NAME;\r\n return name ?? \"\";\r\n}\r\n\r\n/**\r\n * IoTBoxデータの項目名称が零相、逆相対象のチャンネルかどうかを返す\r\n * @param settings\r\n * @returns\r\n */\r\nexport const IsIoTZeroGyakuSetting = (settings: PLCcollectSettingType): boolean => {\r\n\r\n //零相、逆相\r\n var array = ['39', '40'];\r\n if (array.includes(settings.ChannelNo)) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * PLC版で計算タグデータかを返す\r\n * @param settings\r\n * @returns\r\n */\r\nexport const IsPLCCalcSetting = (settings: PLCcollectSettingType): boolean => {\r\n\r\n //AUユニットセットのENT_NOが8の項目は計算\r\n if (settings.AIUnit === 8) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n}\r\n","import React, { useEffect, useState } from 'react';\r\nimport dayjs from 'dayjs';\r\n\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport LoadingButton from '@mui/lab/LoadingButton';\r\n\r\nimport { SIGC_CMP_GROUP_SET } from '../../../function/GroupDataModel';\r\nimport RawWaveformComparisonConanChart, { GraphDispSetting } from './RawWaveformComparisonConanairChart';\r\nimport RawWaveformComparisonSelectItem from './RawWaveformComparisonConanairSelectItem';\r\nimport RawWaveformComparisonChartSetting from './RawWaveformComparisonConanairChartSetting';\r\nimport RawWaveformComparisonButtonList from './RawWaveformComparisonConanairButtonList';\r\nimport {\r\n MeasureInfoType,\r\n GetMeasureInfoType,\r\n SelectDataType,\r\n GetLatesTime,\r\n GetDataTimeList,\r\n CreateSelectData,\r\n CreateDefalutSelectDataType,\r\n} from './RawWaveformComparisonConanair';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport { useTranslation } from 'react-i18next';\r\nimport Box from '@material-ui/core/Box';\r\n\r\nimport { RawWaveformComparisonConanairStyle } from './RawWaveformComparisonConanairStyle';\r\nimport { SpeedKind } from '../../../Constant';\r\nimport { GetKindNoNameSetType, KIND_NO_NAME_SET } from '../MeasureSetting/CollectSetting/CollectSettingDefine';\r\nimport { ComboBoxItemType } from '../../atoms/ComboBox/ItemComboBox';\r\n\r\ntype RawWaveformComparisonConanairPageProps = {\r\n location: { state: SIGC_CMP_GROUP_SET };\r\n};\r\n\r\nconst RawWaveformComparisonConanairPage: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const pageStyle = RawWaveformComparisonConanairStyle();\r\n\r\n const [loading, setLoading] = React.useState(false);\r\n const [chartUpdate, setChartUpdate] = React.useState('');\r\n const [measureInfo, setMeasereInfo] = React.useState([]);\r\n const [isLineShows, setIsLineShow] = React.useState([true, true]);\r\n const [selectData1, setSelectData1] = React.useState(CreateDefalutSelectDataType());\r\n const [selectData2, setSelectData2] = React.useState(CreateDefalutSelectDataType());\r\n const [conanRawWaveComboList, setConanRawWaveComboList] = useState([]);\r\n const [graphDispSetting, SetGraphDispSetting] = React.useState({\r\n xMin: 0,\r\n xMax: 100,\r\n y1Min: -0.02,\r\n y1Max: 0.02,\r\n y2Min: -0.02,\r\n y2Max: 0.02,\r\n isPileup: false,\r\n isDCRemoval: true,\r\n });\r\n const isAutoRangeRef = React.useRef(true);\r\n\r\n useEffect(() => {\r\n let mesRet: MeasureInfoType[] = [];\r\n let kindNoNameSet: KIND_NO_NAME_SET[] = [];\r\n let conanRawWaveTypList: ComboBoxItemType[] = [];\r\n\r\n setLoading(true);\r\n GetMeasureInfoType()\r\n .then((res) => {\r\n mesRet = res\r\n //console.debug(['★mesRet1', mesRet]);\r\n //CollectSettingDefine.tsからKIND_NO_NAME_SETをとってくる\r\n return GetKindNoNameSetType();\r\n }).then((res) => {\r\n kindNoNameSet = res;\r\n conanRawWaveTypList.push({ index: -1, name: \"\" });\r\n //生波形(コナン)で必要ない項目は省く\r\n kindNoNameSet.forEach((r) => {\r\n if (r.SPEED === SpeedKind.SPEED_CONAN && r.FFT_INVALID === 1) {\r\n conanRawWaveTypList.push({ index: r.NAME_NO, name: r.MES_NAME });\r\n }\r\n })\r\n\r\n //コレクションを使ってComboBoxにする\r\n setConanRawWaveComboList(conanRawWaveTypList);\r\n //生波形画面では不要な項目を排除\r\n //mesRet = mesRet.filter((r) => r.FftInvalid === 0);\r\n mesRet = mesRet.filter((r) => r.Speed === SpeedKind.SPEED_CONAN);\r\n //console.debug(['★mesRet2', mesRet]);\r\n\r\n for (var i in mesRet) {\r\n mesRet[i].id = Number(i + 1);\r\n }\r\n var s1: SelectDataType = CreateDefalutSelectDataType();\r\n var s2: SelectDataType = CreateDefalutSelectDataType();\r\n\r\n if (props.location.state !== null) {\r\n var gp = props.location.state;\r\n var dt1 = mesRet.find((item) => item.PlcNo === gp.PLC_NO1);\r\n var dt2 = mesRet.find((item) => item.PlcNo === gp.PLC_NO2);\r\n //console.debug(['★dt1,dt2,gp', dt1, dt2, gp]);\r\n\r\n if (gp.Time_No1 !== undefined) {\r\n console.debug(['reseve SIGC_CMP_GROUP_SET', gp, gp.Time_No1]);\r\n s1 = CreateSelectData(mesRet, 1, dt1, gp);\r\n s1.selectDate = gp.Time_No1 === '' ? new Date() : dayjs(gp.Time_No1).toDate();\r\n s1.selectTime = '';\r\n\r\n s2 = CreateSelectData(mesRet, 2, dt2, gp);\r\n s2.selectDate = gp.Time_No2 === '' ? new Date() : dayjs(gp.Time_No2).toDate();\r\n s2.selectTime = '';\r\n\r\n var c = GetDataTimeList(\r\n Number(dt1?.PlcNo),\r\n Number(dt1?.AiCard),\r\n Number(dt1?.AiCh),\r\n dayjs(s1.selectDate).format('YYYY-MM-DD'),\r\n s1.mesid,\r\n );\r\n var d = GetDataTimeList(\r\n Number(dt2?.PlcNo),\r\n Number(dt2?.AiCard),\r\n Number(dt2?.AiCh),\r\n dayjs(s2.selectDate).format('YYYY-MM-DD'),\r\n s2.mesid,\r\n );\r\n Promise.all([c, d]).then((ret) => {\r\n if (ret) {\r\n if (ret[0] && ret[0][0]) {\r\n s1.selectTime = dayjs(ret[0][0]).format('HH:mm:ss');\r\n }\r\n if (ret[1] && ret[1][0]) {\r\n s2.selectTime = dayjs(ret[1][0]).format('HH:mm:ss');\r\n }\r\n }\r\n\r\n console.debug(['sData1', dt1, s1]);\r\n console.debug(['sData2', dt2, s2]);\r\n setSelectData1({ ...s1 });\r\n setSelectData2({ ...s2 });\r\n setMeasereInfo(mesRet);\r\n setChartUpdate('start');\r\n setLoading(true);\r\n });\r\n } else {\r\n var a = GetLatesTime(gp.SET_NO1, dt1?.PlcNo, dt1?.AiCard, dt1?.AiCh);\r\n var b = GetLatesTime(gp.SET_NO2, dt2?.PlcNo, dt2?.AiCard, dt2?.AiCh);\r\n //console.debug(['★GetLatesTime', a, b]);\r\n\r\n Promise.all([a, b]).then((ret) => {\r\n s1 = CreateSelectData(mesRet, 1, dt1, gp);\r\n if (dayjs(new Date(ret[0])).format('YYYY-MM-DD') == '1-01-01') {\r\n s1.selectDate = new Date();\r\n s1.selectTime = '';\r\n } else {\r\n s1.selectDate = new Date(ret[0]);\r\n s1.selectTime = dayjs(new Date(ret[0])).format('HH:mm:ss');\r\n }\r\n\r\n s2 = CreateSelectData(mesRet, 2, dt2, gp);\r\n if (dayjs(new Date(ret[1])).format('YYYY-MM-DD') == '1-01-01') {\r\n s2.selectDate = new Date();\r\n s2.selectTime = '';\r\n } else {\r\n s2.selectDate = new Date(ret[1]);\r\n s2.selectTime = dayjs(new Date(ret[1])).format('HH:mm:ss');\r\n }\r\n\r\n console.debug(['sData1', dt1, s1]);\r\n console.debug(['sData2', dt2, s2]);\r\n\r\n setSelectData1({ ...s1 });\r\n setSelectData2({ ...s2 });\r\n setMeasereInfo(mesRet);\r\n setChartUpdate('start');\r\n setLoading(true);\r\n });\r\n }\r\n } else {\r\n setSelectData1({ ...s1 });\r\n setSelectData2({ ...s2 });\r\n setMeasereInfo(mesRet);\r\n }\r\n })\r\n .catch((r) => { });\r\n }, []);\r\n\r\n const handleLoadingStateChange = (value: boolean): void => setLoading(value);\r\n\r\n const handleisShowSelectChange1 = (value: SelectDataType) => {\r\n setIsLineShow([value.isShow, isLineShows[1]]);\r\n setSelectData1({ ...value });\r\n };\r\n const handleisShowSelectChange2 = (value: SelectDataType) => {\r\n setIsLineShow([isLineShows[0], value.isShow]);\r\n setSelectData2({ ...value });\r\n };\r\n\r\n const handleonSelectData1Change = (value: SelectDataType) => {\r\n setSelectData1({ ...value });\r\n };\r\n const handleonSelectData2Change = (value: SelectDataType) => {\r\n setSelectData2({ ...value });\r\n };\r\n const handleChartUpdate = () => {\r\n setChartUpdate(dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss'));\r\n };\r\n\r\n const handleGraphSettingChange = (data: GraphDispSetting) => {\r\n SetGraphDispSetting({ ...data });\r\n };\r\n const handleYMinMaxChange = (min1: number, max1: number, min2: number, max2: number) => {\r\n SetGraphDispSetting({ ...graphDispSetting, y1Min: min1, y1Max: max1, y2Min: min2, y2Max: max2 });\r\n };\r\n\r\n const handleLoading = (isFlg: boolean) => {\r\n setLoading(isFlg);\r\n };\r\n const handoleAutoRangeSet = (data: boolean) => {\r\n isAutoRangeRef.current = data;\r\n };\r\n\r\n return (\r\n
\r\n \r\n
{' '}\r\n
\r\n \r\n \r\n \r\n
{' '}\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n }\r\n onClick={handleChartUpdate}\r\n >\r\n {t('RawWaveformComparisonConanairPage.表示', '表示 ')}\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default RawWaveformComparisonConanairPage;\r\n","import React, { useEffect, useState, Dispatch, SetStateAction } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport {\r\n Grid,\r\n Paper,\r\n Table,\r\n TableContainer,\r\n TableBody,\r\n TableRow,\r\n TableCell,\r\n TextField,\r\n Button,\r\n TableHead,\r\n} from '@material-ui/core';\r\nimport GroupTitle from '../GroupTitle';\r\nimport { XYDeviceSelectItem, XYItemSelectItem, XY_CMP_GROUP_SET } from '../../../../function/GroupDataModel';\r\nimport ItemComboBox, { ComboBoxItemType } from '../../../atoms/ComboBox/ItemComboBox';\r\nimport { useMemo } from 'react';\r\nimport { debug } from '../../../../function/LogLapper';\r\n\r\ntype XYDeviceItemProps = {\r\n selectList: XYDeviceSelectItem[];\r\n deviceIdx: number;\r\n groupNo: number;\r\n plcNoX: number;\r\n setNoX: number;\r\n plcNoY: number;\r\n setNoY: number;\r\n plcSetFunc: (devIdx: number, plcX: number, setX: number, plcY: number, setY: number) => void;\r\n};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableStyle: {\r\n width: '400px',\r\n borderStyle: 'none',\r\n },\r\n rowStyle: {\r\n borderStyle: 'none',\r\n },\r\n cellStyle: {\r\n borderStyle: 'none',\r\n },\r\n cellName: {\r\n width: '140px',\r\n },\r\n cellData: {\r\n width: '220px',\r\n },\r\n selectNo: {\r\n width: '120px',\r\n },\r\n selectName: {\r\n width: '200px',\r\n },\r\n dropdownStyle: {\r\n maxHeight: 300,\r\n },\r\n gridStyle: {\r\n borderStyle: 'solid',\r\n },\r\n tableItem: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n orderBottomStyle: 'inset',\r\n borderLeftStyle: 'solid',\r\n borderRightStyle: 'solid',\r\n textAlign: 'center',\r\n minWidth: '80px',\r\n height: '8px',\r\n padding: '1px',\r\n },\r\n })\r\n);\r\n\r\nconst XYDeviceItem: React.FC = (props: XYDeviceItemProps) => {\r\n const classes = useStyles();\r\n const [devIdx, setDevIdx] = useState(0);\r\n const [devCombos, setDevCombos] = useState([]);\r\n const [itemXCombos, setItemXCombos] = useState([]);\r\n const [itemNameCombos, setItemNameCombos] = useState([]);\r\n const [itemNameNoX, setItemNameNoX] = useState(0);\r\n const [itemNameNoY, setItemNameNoY] = useState(0);\r\n const [itemXIdx, setItemXIdx] = useState(0);\r\n const [itemYCombos, setItemYCombos] = useState([]);\r\n const [itemYIdx, setItemYIdx] = useState(0);\r\n const [listItem, setListItem] = useState([]);\r\n const checkCombos: ComboBoxItemType[] = []\r\n\r\n const careteDevCombos = (): ComboBoxItemType[] => {\r\n console.debug(['careteDevCombos - ', 'props', props, props.selectList]);\r\n props.selectList.forEach((r) => console.debug([r]));\r\n const defPara: ComboBoxItemType = { index: 0, name: '---' };\r\n const devList = [defPara].concat(\r\n props.selectList.map((sel, idx) => {\r\n return { index: idx + 1, name: sel.DEV_NO, tag: sel };\r\n })\r\n );\r\n\r\n return devList;\r\n };\r\n const searchDevCombosIndex = (devIndex: number, devList: ComboBoxItemType[]): number => {\r\n let ans = devList.find((r) => {\r\n let tgt = r.tag as XYDeviceSelectItem;\r\n if (tgt == null) return false;\r\n if (tgt.DEV_INDEX === devIndex) return true;\r\n return false;\r\n });\r\n return ans == null ? 0 : ans.index;\r\n };\r\n\r\n /**\r\n *計測種別のコンボボックスリストを作成\r\n * @returns\r\n */\r\n const crateItemNameCombos = (devConbo: ComboBoxItemType): ComboBoxItemType[] => {\r\n if (devConbo == null) return [];\r\n const v = devConbo.tag as XYDeviceSelectItem;\r\n if (v == null) return [];\r\n\r\n const tmp = v.ItemSelects.filter(function (x, i, array) {\r\n return (\r\n v.ItemSelects.findIndex(function (y) {\r\n return y.SPEED === x.SPEED && y.NAME_NO === x.NAME_NO;\r\n }) === i\r\n );\r\n });\r\n\r\n const itemNameList = tmp.map((r, idx) => {\r\n return { index: idx, name: r.MES_NAME, tag: r };\r\n });\r\n return itemNameList;\r\n };\r\n\r\n const searchItemNameCombosIndex = (\r\n itemSelectDatas: XYDeviceSelectItem,\r\n itemNameConbos: ComboBoxItemType[],\r\n plcNo: number,\r\n setNo: number\r\n ): number => {\r\n if (itemSelectDatas == null) return 0;\r\n\r\n let itemTarget = itemSelectDatas.ItemSelects.find((r) => r.PLC_NO === plcNo && r.SET_NO === setNo);\r\n if (itemTarget == null) return 0;\r\n\r\n let ans = itemNameConbos.find((r) => {\r\n let tgt = r.tag as XYItemSelectItem;\r\n if (tgt == null) return false;\r\n if (tgt.NAME_NO === itemTarget?.NAME_NO && tgt.SPEED === itemTarget.SPEED) return true;\r\n return false;\r\n });\r\n return ans == null ? 0 : ans.index;\r\n };\r\n\r\n const crateItemCombos = (devCombo: ComboBoxItemType, itemNameCombo: ComboBoxItemType): ComboBoxItemType[] => {\r\n if (devCombo == null || itemNameCombo == null) return [];\r\n\r\n const v = itemNameCombo.tag as XYItemSelectItem;\r\n const vv = devCombo.tag as XYDeviceSelectItem;\r\n if (v == null || vv == null) return [];\r\n\r\n // //項目x選択Index検索\r\n const tmp = vv.ItemSelects.filter((r) => {\r\n if (r.NAME_NO === v.NAME_NO && r.SPEED === v.SPEED) return true;\r\n return false;\r\n });\r\n\r\n const itemList = tmp.map((r, idx) => {\r\n return { index: idx, name: r.ITM_NAME, tag: r };\r\n });\r\n\r\n return itemList;\r\n };\r\n\r\n const searchItemCombosIndex = (itemConbos: ComboBoxItemType[], plcNo: number, setNo: number): number => {\r\n let ans = itemConbos.find((r) => {\r\n let tgt = r.tag as XYItemSelectItem;\r\n if (tgt == null) return false;\r\n if (tgt.PLC_NO === plcNo && tgt.SET_NO === setNo) return true;\r\n return false;\r\n });\r\n return ans == null ? 0 : ans.index;\r\n };\r\n\r\n useEffect(() => {\r\n if (props.selectList == null) return;\r\n const devCombos = careteDevCombos();\r\n const devListIndex = searchDevCombosIndex(props.deviceIdx, devCombos);\r\n const v = devCombos[devListIndex].tag as XYDeviceSelectItem;\r\n\r\n const itemNameCombos = crateItemNameCombos(devCombos[devListIndex]);\r\n const itemNameComboIndexX = searchItemNameCombosIndex(v, itemNameCombos, props.plcNoX, props.setNoX);\r\n const itemNameComboIndexY = searchItemNameCombosIndex(v, itemNameCombos, props.plcNoY, props.setNoY);\r\n\r\n const itemCombosX = crateItemCombos(devCombos[devListIndex], itemNameCombos[itemNameComboIndexX]);\r\n const itemCombosY = crateItemCombos(devCombos[devListIndex], itemNameCombos[itemNameComboIndexY]);\r\n\r\n const itemComboIndexX = searchItemCombosIndex(itemCombosX, props.plcNoX, props.setNoX);\r\n const itemComboIndexY = searchItemCombosIndex(itemCombosY, props.plcNoY, props.setNoY);\r\n\r\n const lstItem = v == null ? [] : v.ItemSelects;\r\n\r\n setListItem(lstItem);\r\n\r\n setDevCombos(devCombos);\r\n setDevIdx(devListIndex);\r\n\r\n setItemNameCombos(itemNameCombos);\r\n setItemNameNoX(itemNameComboIndexX);\r\n setItemNameNoY(itemNameComboIndexY);\r\n\r\n //X項目コンボボックスアイテムセット\r\n setItemXCombos(itemCombosX);\r\n setItemYCombos(itemCombosY);\r\n\r\n setItemXIdx(itemComboIndexX);\r\n setItemYIdx(itemComboIndexY);\r\n\r\n console.debug([\r\n 'useEffect - selectList ',\r\n 'props',\r\n props,\r\n 'devCombos',\r\n devCombos,\r\n 'devListIndex',\r\n devListIndex,\r\n 'itemNameCombos',\r\n itemNameCombos,\r\n 'itemNameComboIndexX',\r\n itemNameComboIndexX,\r\n 'itemNameComboIndexY',\r\n itemNameComboIndexY,\r\n 'itemCombosX',\r\n itemCombosX,\r\n 'itemCombosY',\r\n itemCombosY,\r\n 'itemComboIndexX',\r\n itemComboIndexX,\r\n 'itemComboIndexY',\r\n itemComboIndexY,\r\n ]);\r\n }, [props.selectList, props.groupNo]);\r\n\r\n /**\r\n * 機器番号コンボボックス選択変更\r\n * @param idx\r\n */\r\n const deviceChange = (idx: number) => {\r\n if (idx === 0) {\r\n props.plcSetFunc(0, 0, 0, 0, 0);\r\n\r\n setDevIdx(idx);\r\n setItemNameCombos([]);\r\n setItemNameNoX(0);\r\n setItemNameNoY(0);\r\n\r\n setItemXCombos([]);\r\n setItemYCombos([]);\r\n setItemXIdx(0);\r\n setItemYIdx(0);\r\n\r\n return;\r\n } else {\r\n const itemNameCombos = crateItemNameCombos(devCombos[idx]);\r\n const itemCombosX = crateItemCombos(devCombos[idx], itemNameCombos[0]);\r\n const itemCombosY = crateItemCombos(devCombos[idx], itemNameCombos[0]);\r\n\r\n let tgt = itemCombosX === checkCombos ? { PLC_NO: 0, SET_NO: 0 } : (itemCombosX[0].tag as XYItemSelectItem);\r\n\r\n setDevIdx(idx);\r\n\r\n setItemNameCombos(itemNameCombos);\r\n setItemNameNoX(0);\r\n setItemNameNoY(0);\r\n\r\n //X項目コンボボックスアイテムセット\r\n setItemXCombos(itemCombosX);\r\n setItemYCombos(itemCombosY);\r\n\r\n setItemXIdx(0);\r\n setItemYIdx(0);\r\n\r\n props.plcSetFunc(props.selectList[idx - 1].DEV_INDEX, tgt.PLC_NO, tgt.SET_NO, tgt.PLC_NO, tgt.SET_NO);\r\n }\r\n };\r\n\r\n /**\r\n * 計測種別Xコンボボックス選択変更\r\n * @param idx\r\n */\r\n const itemNameChangeX = (index: number) => {\r\n const itemCombosX = crateItemCombos(devCombos[devIdx], itemNameCombos[index]);\r\n\r\n setItemNameNoX(index);\r\n //X項目コンボボックスアイテムセット\r\n setItemXCombos(itemCombosX);\r\n setItemXIdx(0);\r\n\r\n let tgtX = itemCombosX === checkCombos ? { PLC_NO: 0, SET_NO: 0 } : (itemCombosX[0].tag as XYItemSelectItem);\r\n let tgtY = itemYCombos === checkCombos ? { PLC_NO: 0, SET_NO: 0 } : (itemYCombos[itemYIdx].tag as XYItemSelectItem);\r\n\r\n props.plcSetFunc(props.selectList[devIdx - 1].DEV_INDEX, tgtX.PLC_NO, tgtX.SET_NO, tgtY.PLC_NO, tgtY.SET_NO);\r\n };\r\n\r\n /**\r\n * 計測種別Yコンボボックス選択変更\r\n * @param idx\r\n */\r\n const itemNameChangeY = (index: number) => {\r\n const itemCombosY = crateItemCombos(devCombos[devIdx], itemNameCombos[index]);\r\n\r\n setItemNameNoY(index);\r\n //X項目コンボボックスアイテムセット\r\n setItemYCombos(itemCombosY);\r\n setItemYIdx(0);\r\n\r\n let tgtX = itemXCombos === checkCombos ? { PLC_NO: 0, SET_NO: 0 } : (itemXCombos[itemXIdx].tag as XYItemSelectItem);\r\n let tgtY = itemCombosY === checkCombos ? { PLC_NO: 0, SET_NO: 0 } : (itemCombosY[0].tag as XYItemSelectItem);\r\n\r\n props.plcSetFunc(props.selectList[devIdx - 1].DEV_INDEX, tgtX.PLC_NO, tgtX.SET_NO, tgtY.PLC_NO, tgtY.SET_NO);\r\n };\r\n\r\n const itemChangeX = (idx: number) => {\r\n let tgtX = itemXCombos === checkCombos ? { PLC_NO: 0, SET_NO: 0 } : (itemXCombos[idx].tag as XYItemSelectItem);\r\n let tgtY = itemYCombos === checkCombos ? { PLC_NO: 0, SET_NO: 0 } : (itemYCombos[itemYIdx].tag as XYItemSelectItem);\r\n\r\n setItemXIdx(idx);\r\n\r\n props.plcSetFunc(props.selectList[devIdx - 1].DEV_INDEX, tgtX.PLC_NO, tgtX.SET_NO, tgtY.PLC_NO, tgtY.SET_NO);\r\n };\r\n\r\n const itemChangeY = (idx: number) => {\r\n let tgtX = itemXCombos === checkCombos ? { PLC_NO: 0, SET_NO: 0 } : (itemXCombos[itemXIdx].tag as XYItemSelectItem);\r\n let tgtY = itemYCombos === checkCombos ? { PLC_NO: 0, SET_NO: 0 } : (itemYCombos[idx].tag as XYItemSelectItem);\r\n\r\n setItemYIdx(idx);\r\n props.plcSetFunc(props.selectList[devIdx - 1].DEV_INDEX, tgtX.PLC_NO, tgtX.SET_NO, tgtY.PLC_NO, tgtY.SET_NO);\r\n };\r\n\r\n return (\r\n \r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n deviceChange(parseInt(e.target.value));\r\n }\r\n }}\r\n />\r\n \r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n itemNameChangeX(parseInt(e.target.value));\r\n }\r\n }}\r\n />\r\n \r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n itemChangeX(parseInt(e.target.value));\r\n }\r\n }}\r\n />\r\n \r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n itemNameChangeY(parseInt(e.target.value));\r\n }\r\n }}\r\n />\r\n \r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n itemChangeY(parseInt(e.target.value));\r\n }\r\n }}\r\n />\r\n \r\n \r\n );\r\n};\r\n\r\nexport default XYDeviceItem;\r\n","import { createStyles, makeStyles, Theme, createTheme } from '@material-ui/core/styles';\r\n\r\nconst defaultTheme = createTheme({});\r\nconst { pxToRem } = defaultTheme.typography;\r\n\r\n\r\nexport const TableBaseStyle = makeStyles(\r\n createStyles({\r\n //テーブルヘッダセル\r\n headerCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n padding: '1px',\r\n minWidth: '50px',\r\n borderCollapse: `collapse`,\r\n },\r\n headerCell_s: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n padding: '1px',\r\n minWidth: '0px',\r\n borderCollapse: `collapse`,\r\n },\r\n bodyCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '0.5px',\r\n height: '10px',\r\n },\r\n bodyCellCenter: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n orderBottomStyle: 'inset',\r\n borderLeftStyle: 'solid',\r\n borderRightStyle: 'solid',\r\n textAlign: 'center',\r\n minWidth: '40px',\r\n height: '8px',\r\n padding: '1px',\r\n },\r\n bodyCellCenterColor: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n orderBottomStyle: 'inset',\r\n borderLeftStyle: 'solid',\r\n borderRightStyle: 'solid',\r\n textAlign: 'center',\r\n minWidth: '30px',\r\n height: '8px',\r\n padding: '1px',\r\n transform: 'translate(20%, 0%)', // 真ん中に配置\r\n },\r\n fixColumn: {\r\n borderWidth: '0px',\r\n outlineWidth: '1px',\r\n outlineColor: '#dcdcdc',\r\n outlineStyle: 'solid',\r\n padding: '0px',\r\n paddingLeft: '5px',\r\n position: 'sticky',\r\n zIndex: 10,\r\n backgroundColor: 'white',\r\n },\r\n bodyRow: {\r\n '&.Mui-selected, &.Mui-selected:hover': {\r\n //背景色\r\n backgroundColor: 'yellow',\r\n '& > .MuiTableCell-root': {\r\n //文字色\r\n color: 'brack',\r\n },\r\n },\r\n },\r\n cellName: {\r\n borderStyle: 'none',\r\n width: '60px',\r\n },\r\n cellData: {\r\n borderStyle: 'none',\r\n width: '220px',\r\n },\r\n //テキスト\r\n textField: {\r\n flexGrow: 1,\r\n height: '100%',\r\n width: '98%',\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n borderBottom: '1px solid #000000',\r\n borderTop: 'none',\r\n borderLeft: 'none',\r\n borderRight: 'none',\r\n textAlign: \"center\",\r\n },\r\n gridStyle: {\r\n borderStyle: 'solid',\r\n maxWidth: '600px',\r\n },\r\n gridStyle2: {\r\n borderStyle: 'solid',\r\n maxWidth: '1300px',\r\n },\r\n tableStyle: {\r\n width: '400px',\r\n borderStyle: 'none',\r\n }, rowStyle: {\r\n borderStyle: 'none',\r\n },\r\n cellStyle: {\r\n borderStyle: 'none',\r\n },\r\n selectNo: {\r\n width: '120px',\r\n },\r\n })\r\n);\r\n\r\nexport const ChartBaseStyle = makeStyles(\r\n createStyles({\r\n tooltip: {\r\n background: '#FFFFEE',\r\n fontSize: '14px',\r\n padding: '10px 10px 0px 20px',\r\n },\r\n })\r\n);\r\n\r\nexport const TrendSettingStyle = makeStyles(\r\n createStyles({\r\n activeRow: {\r\n background: 'yellow',\r\n },\r\n itemRow: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n height: '60px',\r\n },\r\n itemSelLabel: {\r\n marginTop: '2px',\r\n marginLeft: '16px',\r\n },\r\n itemSelData: {\r\n marginTop: '2px',\r\n marginLeft: '16px',\r\n },\r\n entryLabel: {\r\n marginTop: '4px',\r\n },\r\n gridStyle: {\r\n borderStyle: 'solid',\r\n //maxWidth: '1200px',\r\n // height: 'calc(100vh - 400px)',\r\n },\r\n settingContainer: {\r\n display: 'flex',\r\n alignItems: 'flex-start',\r\n margin: '4px',\r\n },\r\n entry: {\r\n marginLeft: '8px',\r\n marginRight: '8px',\r\n width: '64px',\r\n },\r\n container: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n margin: '4px',\r\n },\r\n button: {\r\n width: '150px',\r\n marginTop: '2px',\r\n marginRight: '20px',\r\n height: '35px',\r\n },\r\n })\r\n);\r\n\r\nexport const FooterBaseStyle = makeStyles(\r\n createStyles({\r\n buttonStyle: {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n },\r\n })\r\n);\r\n","import React, { useEffect, useState, Dispatch, SetStateAction } from 'react';\r\nimport {\r\n Grid,\r\n Paper,\r\n Table,\r\n TableContainer,\r\n TableBody,\r\n TableRow,\r\n TableCell,\r\n TextField,\r\n Button,\r\n TableHead,\r\n Checkbox,\r\n} from '@material-ui/core';\r\nimport DateInput from '../../../atoms/Calendar/DateInput';\r\nimport ColorPicker from '../ColorPicker';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { XYDeviceSelectItem, XYItemSelectItem, XY_CMP_GROUP_SET } from '../../../../function/GroupDataModel';\r\nimport ItemComboBox, { ComboBoxItemType } from '../../../atoms/ComboBox/ItemComboBox';\r\nimport { TableBaseStyle } from './XYCompansonSettingSytle';\r\n\r\ntype XYDateSettingsProps = {\r\n selectData: XY_CMP_GROUP_SET;\r\n onChangeSelectDataEvent: (xyGroupSetData: XY_CMP_GROUP_SET) => void;\r\n}\r\n\r\n/**\r\n * 月選択用リスト\r\n * @returns \r\n */\r\nconst getMonthList = (): ComboBoxItemType[] => {\r\n\r\n let monthList: ComboBoxItemType[] = [];\r\n\r\n for (let i = 0; i <= 12; i++) {\r\n let item: ComboBoxItemType = {\r\n index: i,\r\n name: i === 0 ? '' : `${i}`,\r\n tag: ''\r\n };\r\n monthList.push(item)\r\n }\r\n\r\n return monthList;\r\n}\r\n\r\nconst XYDateSettings: React.FC = (props: XYDateSettingsProps) => {\r\n const { t } = useTranslation();\r\n const classes = TableBaseStyle();\r\n const [changeEventFlg, setChangeEventFlg] = useState(false);\r\n const [selectData, setSelectData] = useState(props.selectData)\r\n\r\n /**\r\n * 選択グループデータ取得\r\n */\r\n useEffect(() => {\r\n const groupData = props.selectData && props.selectData ? props.selectData : null;\r\n if (groupData) {\r\n setSelectData(groupData);\r\n }\r\n console.debug(['XYDateSettingsProps', props.selectData])\r\n }, [props.selectData]);\r\n\r\n /**\r\n * 変更処理\r\n */\r\n useEffect(() => {\r\n console.debug(['XYDateSettings onChangeEvent', selectData])\r\n props.onChangeSelectDataEvent(selectData);\r\n setChangeEventFlg(false)\r\n }, [changeEventFlg]);\r\n\r\n /**\r\n * 変更イベント\r\n */\r\n const changeEvent = () => {\r\n setChangeEventFlg(true)\r\n }\r\n\r\n /**\r\n * 月設定項目\r\n */\r\n const monthCol = (\r\n <>\r\n \r\n {t('XYComparisonSetting.色', '色')}\r\n \r\n \r\n {t('XYComparisonSetting.開始月', '開始月')}\r\n \r\n \r\n {t('XYComparisonSetting.終了月', '終了月')}\r\n \r\n \r\n )\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {t('XYDateSettings.表示', '表示')}\r\n \r\n \r\n {t('XYDateSettings.年設定', '年設定')}\r\n \r\n \r\n {t('XYDateSettings.月設定1', '月設定1')}\r\n \r\n \r\n {t('XYDateSettings.月設定2', '月設定2')}\r\n \r\n \r\n {t('XYDateSettings.月設定3', '月設定3')}\r\n \r\n \r\n {t('XYDateSettings.月設定4', '月設定4')}\r\n \r\n \r\n \r\n {t('XYDateSettings.年設定', '年設定')}\r\n {t('XYDateSettings.月設定', '月設定')}\r\n {t('XYDateSettings.開始日', '開始日')}\r\n {t('XYDateSettings.終了日', '終了日')}\r\n {monthCol}\r\n {monthCol}\r\n {monthCol}\r\n {monthCol}\r\n \r\n \r\n \r\n \r\n {/**年設定 */}\r\n \r\n {\r\n const newYearFlg = e.target.checked ? 1 : 0;\r\n setSelectData((prevData) => ({ ...prevData, YEAR_FLG: newYearFlg }));\r\n changeEvent()\r\n }}\r\n />\r\n \r\n {/**月設定 */}\r\n \r\n {\r\n const newMonthFlg = e.target.checked ? 1 : 0;\r\n setSelectData((prevData) => ({ ...prevData, MONTH_FLG: newMonthFlg }));\r\n changeEvent();\r\n }}\r\n />\r\n \r\n {/**年設定 開始日 */}\r\n \r\n {\r\n setSelectData((prevData) => ({ ...prevData, START_DATE: e }))\r\n changeEvent();\r\n }}\r\n >\r\n \r\n {/**年設定 終了日 */}\r\n \r\n {\r\n setSelectData((prevData) => ({ ...prevData, END_DATE: e }))\r\n changeEvent();\r\n }}\r\n >\r\n \r\n {/**月設定1 色 */}\r\n \r\n {\r\n setSelectData((prevData) => ({ ...prevData, DSP_COLOR1: col }));\r\n changeEvent()\r\n }}\r\n />\r\n \r\n {/**月設定1 開始月 */}\r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n setSelectData((prevData) => ({ ...prevData, START_MONTH1: Number(e.target.value) }));\r\n changeEvent();\r\n }\r\n }}\r\n />\r\n \r\n {/**月設定1 終了月 */}\r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n setSelectData((prevData) => ({ ...prevData, END_MONTH1: Number(e.target.value) }));\r\n changeEvent();\r\n }\r\n }}\r\n />\r\n \r\n {/**月設定2 色 */}\r\n \r\n {\r\n setSelectData((prevData) => ({ ...prevData, DSP_COLOR2: col }));\r\n changeEvent();\r\n }}\r\n />\r\n \r\n {/**月設定2 開始月 */}\r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n setSelectData((prevData) => ({ ...prevData, START_MONTH2: Number(e.target.value) }));\r\n changeEvent();\r\n }\r\n }}\r\n />\r\n \r\n {/**月設定2 終了月 */}\r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n setSelectData((prevData) => ({ ...prevData, END_MONTH2: Number(e.target.value) }));\r\n changeEvent();\r\n }\r\n }}\r\n />\r\n \r\n {/**月設定3 色 */}\r\n \r\n {\r\n setSelectData((prevData) => ({ ...prevData, DSP_COLOR3: col }));\r\n changeEvent();\r\n }}\r\n />\r\n \r\n {/**月設定3 開始月 */}\r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n setSelectData((prevData) => ({ ...prevData, START_MONTH3: Number(e.target.value) }));\r\n changeEvent();\r\n }\r\n }}\r\n />\r\n \r\n {/**月設定3 終了月 */}\r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n setSelectData((prevData) => ({ ...prevData, END_MONTH3: Number(e.target.value) }));\r\n changeEvent();\r\n }\r\n }}\r\n />\r\n \r\n {/**月設定4 色 */}\r\n \r\n {\r\n setSelectData((prevData) => ({ ...prevData, DSP_COLOR4: col }));\r\n changeEvent();\r\n }}\r\n />\r\n \r\n {/**月設定4 開始月 */}\r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n setSelectData((prevData) => ({ ...prevData, START_MONTH4: Number(e.target.value) }));\r\n changeEvent();\r\n }\r\n }}\r\n />\r\n \r\n {/**月設定4 終了月 */}\r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n setSelectData((prevData) => ({ ...prevData, END_MONTH4: Number(e.target.value) }));\r\n changeEvent();\r\n }\r\n }}\r\n />\r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default XYDateSettings;","import React, { useEffect, useState, Dispatch, SetStateAction } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { SettingsState } from '../../../organisms/SelectSettings';\r\nimport {\r\n Grid,\r\n Paper,\r\n Table,\r\n TableContainer,\r\n TableBody,\r\n TableRow,\r\n TableCell,\r\n TextField,\r\n Button,\r\n TableHead,\r\n} from '@material-ui/core';\r\nimport GroupTitle from '../GroupTitle';\r\nimport {\r\n GroupListType,\r\n XY_CMP_GROUP_SET,\r\n XYDeviceSelectItem,\r\n GetXYComparisonGroupList,\r\n XYItemSelectItem,\r\n PutXYComparisonGroupList,\r\n} from '../../../../function/GroupDataModel';\r\nimport dayjs from 'dayjs';\r\nimport ItemComboBox, { ComboBoxItemType } from '../../../atoms/ComboBox/ItemComboBox';\r\nimport XYDeviceItem from './XYDeviceItem';\r\nimport SaveCancel from '../SaveCancel';\r\nimport { useModal, DialogAction } from '../../../../function/useModal';\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../../atoms/Dialog/ConfirmDialog';\r\nimport MessageDialog, { MessageDialogResponse } from '../../../atoms/Dialog/MessageDialog';\r\nimport { useTranslation } from 'react-i18next';\r\nimport CreateGroupDialog, { CreateGroupDialogResponse } from '../CreateGroupDialog';\r\n\r\nimport { TableBaseStyle } from './XYCompansonSettingSytle';\r\nimport XYDateSettingsProps from './XYDateSettings';\r\n\r\ntype XYComparisonSettingProps = {\r\n editData: SettingsState;\r\n groupNo?: number;\r\n isDialog: boolean;\r\n};\r\n\r\ntype SaveParameter = {\r\n list: XY_CMP_GROUP_SET[];\r\n};\r\n\r\nconst MaxGroup: number = 256;\r\n\r\n/**赤色 */\r\nexport const DspColor1: number = 255;\r\n/**青色 */\r\nexport const DspColor2: number = 16711680;\r\n/**緑色 */\r\nexport const DspColor3: number = 65280;\r\n/**水色 */\r\nexport const DspColor4: number = 16776960;\r\n\r\n//カレンダー\r\nconst fromCalendar: Date = new Date();\r\n(fromCalendar.setFullYear(fromCalendar.getFullYear() - 1)).toString().padStart(4, '0');\r\n(fromCalendar.setDate(fromCalendar.getDate() + 1)).toString().padStart(2, '0');\r\nconst toCalendar: Date = new Date();\r\n\r\nconst XYComparisonSetting: React.FC = (props: XYComparisonSettingProps) => {\r\n const { t } = useTranslation();\r\n const classes = TableBaseStyle();\r\n const [groupNo, setGroupNo] = useState(0);\r\n const [editList, setEditList] = useState([]);\r\n const [groupName, setGroupName] = useState('');\r\n const [selectList, setSelectList] = useState([]);\r\n const [groupCombos, setGroupCombos] = useState();\r\n const [devIdx, setDevIdx] = useState(0);\r\n const [plcNoX, setPlcNoX] = useState(0);\r\n const [setNoX, setSetNoX] = useState(0);\r\n const [plcNoY, setPlcNoY] = useState(0);\r\n const [setNoY, setSetNoY] = useState(0);\r\n const [flgCfmDlg, actCfmDlg] = useModal();\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n const [flgCrtDlg, actCrtDlg] = useModal();\r\n\r\n const [edit, setEdit] = useState(() => {\r\n const defaulltData: XY_CMP_GROUP_SET = {\r\n GROUP_NO: 0,\r\n GROUP_NAME: '',\r\n DSP_FLG: 0,\r\n DEV_INDEX: 0,\r\n PLC_NO_X: 0,\r\n SET_NO_X: 0,\r\n PLC_NO_Y: 0,\r\n SET_NO_Y: 0,\r\n YEAR_FLG: 0,\r\n MONTH_FLG: 0,\r\n START_DATE: '',\r\n END_DATE: '',\r\n START_MONTH1: 0,\r\n END_MONTH1: 0,\r\n DSP_COLOR1: DspColor1, //赤色\r\n START_MONTH2: 0,\r\n END_MONTH2: 0,\r\n DSP_COLOR2: DspColor2, //青色\r\n START_MONTH3: 0,\r\n END_MONTH3: 0,\r\n DSP_COLOR3: DspColor3, //緑色\r\n START_MONTH4: 0,\r\n END_MONTH4: 0,\r\n DSP_COLOR4: DspColor4, //水色\r\n };\r\n return defaulltData;\r\n })\r\n\r\n const cfmdlg = flgCfmDlg ? (\r\n \r\n ) : null;\r\n const msgdlg = flgMsgDlg ? : null;\r\n const crtdlg = flgCrtDlg ? (\r\n ((gc) => gc.index)} maxGroup={MaxGroup} />\r\n ) : null;\r\n\r\n console.log('-- XYComparisonSetting --');\r\n\r\n //初期表示\r\n useEffect(() => {\r\n console.log('-- fetch xy comparison settings --');\r\n GetXYComparisonGroupList().then((result: GroupListType) => {\r\n const groupList: XY_CMP_GROUP_SET[] = result.XY_CMP_GROUP_SETs.filter((xy) => xy.GROUP_NAME !== '');\r\n\r\n const groups = groupList.map((grp) => {\r\n return { index: grp.GROUP_NO, name: grp.GROUP_NO.toString() };\r\n });\r\n setGroupCombos(groups);\r\n setEditList(groupList);\r\n\r\n result.XYDeviceSelects.forEach((r) => {\r\n r.ItemSelects.forEach((r, index) => {\r\n r.index = index + 1;\r\n });\r\n });\r\n\r\n if (groupList.length > 0) {\r\n let startGroupNo = 0;\r\n //X-Y分布図のグラフ表示からのグループ設定呼び出し\r\n if (props.groupNo) {\r\n // console.debug(['props.groupNo', props.groupNo])\r\n startGroupNo = props.groupNo - 1;\r\n }\r\n\r\n const grp = groupList[startGroupNo];\r\n console.debug(['grp', grp, groupList]);\r\n\r\n setGroupName(grp.GROUP_NAME);\r\n\r\n setDevIdx(grp.DEV_INDEX);\r\n setPlcNoX(grp.PLC_NO_X);\r\n setSetNoX(grp.SET_NO_X);\r\n setPlcNoY(grp.PLC_NO_Y);\r\n setSetNoY(grp.SET_NO_Y);\r\n setGroupNo(grp.GROUP_NO);\r\n\r\n let xyGroupSetData: XY_CMP_GROUP_SET = {\r\n GROUP_NO: grp.GROUP_NO,\r\n GROUP_NAME: grp.GROUP_NAME,\r\n DSP_FLG: grp.DSP_FLG,\r\n DEV_INDEX: grp.DEV_INDEX,\r\n PLC_NO_X: grp.PLC_NO_X,\r\n SET_NO_X: grp.SET_NO_X,\r\n PLC_NO_Y: grp.PLC_NO_Y,\r\n SET_NO_Y: grp.SET_NO_Y,\r\n YEAR_FLG: grp.YEAR_FLG,\r\n MONTH_FLG: grp.MONTH_FLG,\r\n START_DATE: (grp.START_DATE === null ? dayjs(fromCalendar).format('YYYY-MM-DD') : grp.START_DATE),\r\n END_DATE: (grp.END_DATE === null ? dayjs(toCalendar).format('YYYY-MM-DD') : grp.END_DATE),\r\n START_MONTH1: grp.START_MONTH1,\r\n END_MONTH1: grp.END_MONTH1,\r\n DSP_COLOR1: grp.DSP_COLOR1 === null ? DspColor1 : grp.DSP_COLOR1,\r\n START_MONTH2: grp.START_MONTH2,\r\n END_MONTH2: grp.END_MONTH2,\r\n DSP_COLOR2: grp.DSP_COLOR2 === null ? DspColor2 : grp.DSP_COLOR2,\r\n START_MONTH3: grp.START_MONTH3,\r\n END_MONTH3: grp.END_MONTH3,\r\n DSP_COLOR3: grp.DSP_COLOR3 === null ? DspColor3 : grp.DSP_COLOR3,\r\n START_MONTH4: grp.START_MONTH4,\r\n END_MONTH4: grp.END_MONTH4,\r\n DSP_COLOR4: grp.DSP_COLOR4 === null ? DspColor4 : grp.DSP_COLOR4,\r\n }\r\n setEdit(xyGroupSetData);\r\n }\r\n setSelectList(result.XYDeviceSelects);\r\n\r\n props.editData.SaveFunction = saveCurrentSetting;\r\n props.editData.IsUpdate = false;\r\n });\r\n }, [props.editData.CancelCondition]);\r\n\r\n useEffect(() => {\r\n // const groups = editList.map((grp) => {\r\n // return { index: grp.GROUP_NO, name: grp.GROUP_NO.toString() };\r\n // });\r\n // setGroupCombos(groups);\r\n // if (!editList.find((el) => el.GROUP_NO == groupNo)) {\r\n // if (editList.length > 0) {\r\n // const grp = editList[0];\r\n // setDevIdx(grp.DEV_INDEX);\r\n // setPlcNoX(grp.PLC_NO_X);\r\n // setSetNoX(grp.SET_NO_X);\r\n // setPlcNoY(grp.PLC_NO_Y);\r\n // setSetNoY(grp.SET_NO_Y);\r\n // setGroupNo(grp.GROUP_NO);\r\n // }\r\n // }\r\n }, [editList]);\r\n\r\n /**\r\n * グループNo変更イベント\r\n * @param no \r\n */\r\n const groupChange = (no: number) => {\r\n updateDispFlg();\r\n const grp = editList?.find((ed) => ed.GROUP_NO === no);\r\n if (grp) {\r\n setGroupName(grp.GROUP_NAME ?? '');\r\n\r\n if (selectList) {\r\n setDevIdx(grp.DEV_INDEX);\r\n setPlcNoX(grp.PLC_NO_X);\r\n setSetNoX(grp.SET_NO_X);\r\n setPlcNoY(grp.PLC_NO_Y);\r\n setSetNoY(grp.SET_NO_Y);\r\n\r\n let xyGroupSetData: XY_CMP_GROUP_SET = {\r\n GROUP_NO: grp.GROUP_NO,\r\n GROUP_NAME: grp.GROUP_NAME,\r\n DSP_FLG: grp.DSP_FLG,\r\n DEV_INDEX: grp.DEV_INDEX,\r\n PLC_NO_X: grp.PLC_NO_X,\r\n SET_NO_X: grp.SET_NO_X,\r\n PLC_NO_Y: grp.PLC_NO_Y,\r\n SET_NO_Y: grp.SET_NO_Y,\r\n YEAR_FLG: grp.YEAR_FLG,\r\n MONTH_FLG: grp.MONTH_FLG,\r\n START_DATE: (grp.START_DATE === null ? dayjs(fromCalendar).format('YYYY-MM-DD') : grp.START_DATE),\r\n END_DATE: (grp.END_DATE === null ? dayjs(toCalendar).format('YYYY-MM-DD') : grp.END_DATE),\r\n START_MONTH1: grp.START_MONTH1,\r\n END_MONTH1: grp.END_MONTH1,\r\n DSP_COLOR1: grp.DSP_COLOR1 === null ? DspColor1 : grp.DSP_COLOR1,\r\n START_MONTH2: grp.START_MONTH2,\r\n END_MONTH2: grp.END_MONTH2,\r\n DSP_COLOR2: grp.DSP_COLOR2 === null ? DspColor2 : grp.DSP_COLOR2,\r\n START_MONTH3: grp.START_MONTH3,\r\n END_MONTH3: grp.END_MONTH3,\r\n DSP_COLOR3: grp.DSP_COLOR3 === null ? DspColor3 : grp.DSP_COLOR3,\r\n START_MONTH4: grp.START_MONTH4,\r\n END_MONTH4: grp.END_MONTH4,\r\n DSP_COLOR4: grp.DSP_COLOR4 === null ? DspColor4 : grp.DSP_COLOR4,\r\n }\r\n setEdit(xyGroupSetData);\r\n }\r\n }\r\n setGroupNo(no);\r\n };\r\n\r\n const updateDispFlg = () => {\r\n const grp = editList?.find((ed) => ed.GROUP_NO == groupNo);\r\n if (grp) {\r\n if (grp.GROUP_NAME == '' && grp.PLC_NO_X == 0 && grp.PLC_NO_Y == 0) {\r\n grp.DSP_FLG = 0;\r\n } else {\r\n grp.DSP_FLG = 1;\r\n }\r\n }\r\n };\r\n /**\r\n * グループ名称変更イベント\r\n * @param name \r\n */\r\n const groupNameChange = (name: string) => {\r\n const grp = editList?.find((ed) => ed.GROUP_NO == groupNo);\r\n if (grp) {\r\n setGroupName(name);\r\n grp.GROUP_NAME = name;\r\n updateDispFlg();\r\n\r\n props.editData.Target = { list: editList };\r\n props.editData.IsUpdate = true;\r\n }\r\n };\r\n /**\r\n * \r\n * @param devIdx \r\n * @param plcX \r\n * @param setX \r\n * @param plcY \r\n * @param setY \r\n */\r\n const groupPlcSet = (devIdx: number, plcX: number, setX: number, plcY: number, setY: number) => {\r\n console.debug(['DataUpdate--', 'devIdx', devIdx, 'plcX', plcX, 'setX', setX, 'plcY', plcY, 'setY', setY]);\r\n const grp = editList?.find((ed) => ed.GROUP_NO == groupNo);\r\n if (grp) {\r\n grp.DEV_INDEX = devIdx;\r\n grp.PLC_NO_X = plcX;\r\n grp.SET_NO_X = setX;\r\n grp.PLC_NO_Y = plcY;\r\n grp.SET_NO_Y = setY;\r\n updateDispFlg();\r\n\r\n if (selectList) {\r\n setDevIdx(grp.DEV_INDEX);\r\n setPlcNoX(grp.PLC_NO_X);\r\n setSetNoX(grp.SET_NO_X);\r\n setPlcNoY(grp.PLC_NO_Y);\r\n setSetNoY(grp.SET_NO_Y);\r\n }\r\n\r\n props.editData.Target = { list: editList };\r\n props.editData.IsUpdate = true;\r\n }\r\n };\r\n /**\r\n * 保存\r\n * @param param \r\n * @returns \r\n */\r\n const saveCurrentSetting = (param: object): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const sp = param as SaveParameter;\r\n //console.debug([\"SaveParameter\", sp])\r\n if (sp && sp.list) {\r\n //保存前チェック\r\n const errmsg = validateSetting(sp.list);\r\n if (errmsg === '') {\r\n PutXYComparisonGroupList(sp.list)\r\n .then((count: number) => {\r\n console.log(count);\r\n\r\n resolve('done');\r\n })\r\n .catch((reasone) => reject(reasone));\r\n } else {\r\n setDlgmsg(errmsg);\r\n actMsgDlg.open().apply((_) => setDlgmsg(''));\r\n reject('not save');\r\n }\r\n } else {\r\n reject('data nothing');\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * nullか0を判定する関数\r\n * @param value \r\n * @returns \r\n */\r\n function isNullOrZero(value: number | null): boolean {\r\n return value === null || value === 0;\r\n }\r\n /**\r\n * 保存前のエラーメッセージ\r\n * @param groups \r\n * @returns \r\n */\r\n const validateSetting = (groups: XY_CMP_GROUP_SET[]): string => {\r\n for (var idx = 0; idx < groups.length; idx++) {\r\n //グループ名\r\n if (groups[idx].GROUP_NAME == '') {\r\n return t('XYComparisonSetting.グループ名必須', 'グループ名は必須です');\r\n }\r\n /**\r\n * カレンダー確認処理\r\n */\r\n if (groups[idx].YEAR_FLG !== null) {\r\n if (groups[idx].START_DATE >= groups[idx].END_DATE) {\r\n return t('XYComparisonSetting.グループNo', 'グループNo.') +\r\n `${groups[idx].GROUP_NO}:` + t('XYComparisonSetting.開始日_>_終了日になっています', '開始日 > 終了日になっています');\r\n }\r\n //設定範囲が5年を超過していないか確認\r\n let startDate = new Date(groups[idx].START_DATE);\r\n let endDate = new Date(groups[idx].END_DATE);\r\n //終了日と開始日の差分を計算し日数に置換え\r\n let diff = (endDate.getTime() - startDate.getTime()) / (24 * 60 * 60 * 1000);\r\n console.debug(['X-Ygroup year setting check', startDate, endDate, diff]);\r\n if (diff > 1826) {\r\n return t('XYComparisonSetting.グループNo', 'グループNo.') +\r\n `${groups[idx].GROUP_NO}:` + t('XYComparisonSetting.年設定の期間が5年を超過しています', '年設定の期間が5年を超過しています');\r\n }\r\n }\r\n\r\n //月設定ONの場合\r\n if (groups[idx].MONTH_FLG == 1) {\r\n //各月設定グループで設定があるか確認\r\n if (isNullOrZero(groups[idx].START_MONTH1) &&\r\n isNullOrZero(groups[idx].END_MONTH1) &&\r\n isNullOrZero(groups[idx].START_MONTH2) &&\r\n isNullOrZero(groups[idx].END_MONTH2) &&\r\n isNullOrZero(groups[idx].START_MONTH3) &&\r\n isNullOrZero(groups[idx].END_MONTH3) &&\r\n isNullOrZero(groups[idx].START_MONTH4) &&\r\n isNullOrZero(groups[idx].END_MONTH4)\r\n ) {\r\n //\r\n return t('XYComparisonSetting.グループNo', 'グループNo.') +\r\n `${groups[idx].GROUP_NO}:` + t('XYComparisonSetting.月設定が行われていません', '月設定が行われていません');\r\n }\r\n //色設定が全てnullの場合\r\n if (groups[idx].DSP_COLOR1 === null &&\r\n groups[idx].DSP_COLOR2 === null &&\r\n groups[idx].DSP_COLOR3 === null &&\r\n groups[idx].DSP_COLOR4 === null\r\n ) {\r\n return t('XYComparisonSetting.グループNo', 'グループNo.') +\r\n `${groups[idx].GROUP_NO}:` + t('XYComparisonSetting.色設定が行われていません', '色設定が行われていません');\r\n }\r\n }\r\n //月設定1\r\n if (!(isNullOrZero(groups[idx].START_MONTH1)) && (isNullOrZero(groups[idx].END_MONTH1)) ||\r\n (isNullOrZero(groups[idx].START_MONTH1)) && !(isNullOrZero(groups[idx].END_MONTH1))\r\n ) {\r\n return t('XYComparisonSetting.グループNo', 'グループNo.') +\r\n `${groups[idx].GROUP_NO}:` + t('XYComparisonSetting.月設定1が片方のみ設定されています', '月設定1が片方のみ設定されています');\r\n }\r\n //同色確認\r\n if (groups[idx].DSP_COLOR1 !== null) {\r\n console.debug(['color check1', groups[idx]])\r\n if (groups[idx].DSP_COLOR1 === groups[idx].DSP_COLOR2 ||\r\n groups[idx].DSP_COLOR1 === groups[idx].DSP_COLOR3 ||\r\n groups[idx].DSP_COLOR1 === groups[idx].DSP_COLOR4\r\n ) {\r\n return t('XYComparisonSetting.グループNo', 'グループNo.') +\r\n `${groups[idx].GROUP_NO}:` + t('XYComparisonSetting.同じ色が設定されています', '同じ色が設定されています');\r\n }\r\n }\r\n //月設定2\r\n if (!(isNullOrZero(groups[idx].START_MONTH2)) && (isNullOrZero(groups[idx].END_MONTH2)) ||\r\n (isNullOrZero(groups[idx].START_MONTH2)) && !(isNullOrZero(groups[idx].END_MONTH2))\r\n ) {\r\n return t('XYComparisonSetting.グループNo', 'グループNo.') +\r\n `${groups[idx].GROUP_NO}:` + t('XYComparisonSetting.月設定2が片方のみ設定されています', '月設定2が片方のみ設定されています');\r\n }\r\n //同色確認\r\n if (groups[idx].DSP_COLOR2 !== null) {\r\n console.debug(['color check2', groups[idx]])\r\n if (groups[idx].DSP_COLOR2 === groups[idx].DSP_COLOR1 ||\r\n groups[idx].DSP_COLOR2 === groups[idx].DSP_COLOR3 ||\r\n groups[idx].DSP_COLOR2 === groups[idx].DSP_COLOR4\r\n ) {\r\n return t('XYComparisonSetting.グループNo', 'グループNo.') +\r\n `${groups[idx].GROUP_NO}:` + t('XYComparisonSetting.同じ色が設定されています', '同じ色が設定されています');\r\n }\r\n }\r\n //月設定3 \r\n if (!(isNullOrZero(groups[idx].START_MONTH3)) && (isNullOrZero(groups[idx].END_MONTH3)) ||\r\n isNullOrZero(groups[idx].START_MONTH3) && !(isNullOrZero(groups[idx].END_MONTH3))\r\n ) {\r\n return t('XYComparisonSetting.グループNo', 'グループNo.') +\r\n `${groups[idx].GROUP_NO}:` + t('XYComparisonSetting.月設定3が片方のみ設定されています', '月設定3が片方のみ設定されています');\r\n }\r\n //同色確認\r\n if (groups[idx].DSP_COLOR3 !== null) {\r\n console.debug(['color check3', groups[idx]])\r\n if (groups[idx].DSP_COLOR3 === groups[idx].DSP_COLOR1 ||\r\n groups[idx].DSP_COLOR3 === groups[idx].DSP_COLOR2 ||\r\n groups[idx].DSP_COLOR3 === groups[idx].DSP_COLOR4\r\n ) {\r\n return t('XYComparisonSetting.グループNo', 'グループNo.') +\r\n `${groups[idx].GROUP_NO}:` + t('XYComparisonSetting.同じ色が設定されています', '同じ色が設定されています');\r\n }\r\n }\r\n //月設定4\r\n if (!(isNullOrZero(groups[idx].START_MONTH4)) && (isNullOrZero(groups[idx].END_MONTH4)) ||\r\n (isNullOrZero(groups[idx].START_MONTH4)) && !(isNullOrZero(groups[idx].END_MONTH4))\r\n ) {\r\n return t('XYComparisonSetting.グループNo', 'グループNo.') +\r\n `${groups[idx].GROUP_NO}:` + t('XYComparisonSetting.月設定4が片方のみ設定されています', '月設定4が片方のみ設定されています');\r\n }\r\n //同色確認\r\n if (groups[idx].DSP_COLOR4 !== null) {\r\n console.debug(['color check4', groups[idx]])\r\n if (groups[idx].DSP_COLOR4 === groups[idx].DSP_COLOR1 ||\r\n groups[idx].DSP_COLOR4 === groups[idx].DSP_COLOR2 ||\r\n groups[idx].DSP_COLOR4 === groups[idx].DSP_COLOR3\r\n ) {\r\n return t('XYComparisonSetting.グループNo', 'グループNo.') +\r\n `${groups[idx].GROUP_NO}:` + t('XYComparisonSetting.同じ色が設定されています', '同じ色が設定されています');\r\n }\r\n }\r\n\r\n //月設定範囲の重複チェック\r\n let checkMsg = checkMonthSettings(groups[idx]);\r\n if (checkMsg !== '') {\r\n return t('XYComparisonSetting.グループNo', 'グループNo.') +\r\n `${groups[idx].GROUP_NO}:` + checkMsg;\r\n }\r\n }\r\n return '';\r\n };\r\n /**\r\n * 削除処理\r\n * @param param \r\n * @returns \r\n */\r\n const deleteCurrentSetting = (param: object): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const sp = param as SaveParameter;\r\n if (sp && sp.list) {\r\n PutXYComparisonGroupList(sp.list)\r\n .then((count: number) => {\r\n console.log(count);\r\n\r\n resolve('done');\r\n })\r\n .catch((reasone) => reject(reasone));\r\n } else {\r\n reject('data nothing');\r\n }\r\n });\r\n };\r\n\r\n const updateFormData = (target: XY_CMP_GROUP_SET) => {\r\n setGroupName(target.GROUP_NAME);\r\n setDevIdx(target.DEV_INDEX);\r\n setPlcNoX(target.PLC_NO_X);\r\n setSetNoX(target.SET_NO_X);\r\n setPlcNoY(target.PLC_NO_Y);\r\n setSetNoY(target.SET_NO_Y);\r\n setGroupNo(target.GROUP_NO);\r\n\r\n let xyGroupSetData: XY_CMP_GROUP_SET = {\r\n GROUP_NO: target.GROUP_NO,\r\n GROUP_NAME: target.GROUP_NAME,\r\n DSP_FLG: target.DSP_FLG,\r\n DEV_INDEX: target.DEV_INDEX,\r\n PLC_NO_X: target.PLC_NO_X,\r\n SET_NO_X: target.SET_NO_X,\r\n PLC_NO_Y: target.PLC_NO_Y,\r\n SET_NO_Y: target.SET_NO_Y,\r\n YEAR_FLG: target.YEAR_FLG,\r\n MONTH_FLG: target.MONTH_FLG,\r\n START_DATE: (target.START_DATE === null ? dayjs(fromCalendar).format('YYYY-MM-DD') : target.START_DATE),\r\n END_DATE: (target.END_DATE === null ? dayjs(toCalendar).format('YYYY-MM-DD') : target.END_DATE),\r\n START_MONTH1: target.START_MONTH1,\r\n END_MONTH1: target.END_MONTH1,\r\n DSP_COLOR1: target.DSP_COLOR1 === null ? DspColor1 : target.DSP_COLOR1,\r\n START_MONTH2: target.START_MONTH2,\r\n END_MONTH2: target.END_MONTH2,\r\n DSP_COLOR2: target.DSP_COLOR2 === null ? DspColor2 : target.DSP_COLOR2,\r\n START_MONTH3: target.START_MONTH3,\r\n END_MONTH3: target.END_MONTH3,\r\n DSP_COLOR3: target.DSP_COLOR3 === null ? DspColor3 : target.DSP_COLOR3,\r\n START_MONTH4: target.START_MONTH4,\r\n END_MONTH4: target.END_MONTH4,\r\n DSP_COLOR4: target.DSP_COLOR4 === null ? DspColor4 : target.DSP_COLOR4,\r\n }\r\n setEdit(xyGroupSetData);\r\n };\r\n\r\n /**\r\n * 日付設定変更処理\r\n * @param value \r\n */\r\n const onChangeSelectDataUpdate = (value: XY_CMP_GROUP_SET) => {\r\n //console.debug(['onChangeSelectDataUpdate check1', editList])\r\n editList.map((r) => {\r\n if (r.GROUP_NO === value.GROUP_NO) {\r\n r.YEAR_FLG = value.YEAR_FLG;\r\n r.MONTH_FLG = value.MONTH_FLG;\r\n r.START_DATE = value.START_DATE\r\n r.END_DATE = value.END_DATE\r\n r.DSP_COLOR1 = value.DSP_COLOR1;\r\n r.DSP_COLOR2 = value.DSP_COLOR2;\r\n r.DSP_COLOR3 = value.DSP_COLOR3;\r\n r.DSP_COLOR4 = value.DSP_COLOR4;\r\n r.START_MONTH1 = value.START_MONTH1;\r\n r.START_MONTH2 = value.START_MONTH2;\r\n r.START_MONTH3 = value.START_MONTH3;\r\n r.START_MONTH4 = value.START_MONTH4;\r\n r.END_MONTH1 = value.END_MONTH1;\r\n r.END_MONTH2 = value.END_MONTH2;\r\n r.END_MONTH3 = value.END_MONTH3;\r\n r.END_MONTH4 = value.END_MONTH4;\r\n }\r\n });\r\n\r\n console.debug(['onChangeSelectDataUpdate check', editList])\r\n setEditList(editList);\r\n props.editData.Target = { list: editList };\r\n props.editData.IsUpdate = true;\r\n };\r\n\r\n /**\r\n * 月設定重複チェック\r\n * @param value \r\n * @returns \r\n */\r\n const checkMonthSettings = (value: XY_CMP_GROUP_SET): string => {\r\n let errorMsg = t('XYComparisonSetting.月設定の範囲が重複している箇所があります', '月設定の範囲が重複している箇所があります');\r\n //月設定1との重複チェック\r\n if (!isNullOrZero(value.START_MONTH1) && !isNullOrZero(value.END_MONTH1)) {\r\n if (!isNullOrZero(value.START_MONTH2) && !isNullOrZero(value.END_MONTH2)) {\r\n let result = checkMonths(value.START_MONTH1, value.START_MONTH2, value.END_MONTH1, value.END_MONTH2)\r\n if (result == true) {\r\n return errorMsg;\r\n }\r\n }\r\n if (!isNullOrZero(value.START_MONTH3) && !isNullOrZero(value.END_MONTH3)) {\r\n let result = checkMonths(value.START_MONTH1, value.START_MONTH3, value.END_MONTH1, value.END_MONTH3)\r\n if (result == true) {\r\n return errorMsg;\r\n }\r\n }\r\n if (!isNullOrZero(value.START_MONTH4) && !isNullOrZero(value.END_MONTH4)) {\r\n let result = checkMonths(value.START_MONTH1, value.START_MONTH4, value.END_MONTH1, value.END_MONTH4)\r\n if (result == true) {\r\n return errorMsg;\r\n }\r\n }\r\n }\r\n //月設定2との重複チェック\r\n if (!isNullOrZero(value.START_MONTH2) && !isNullOrZero(value.END_MONTH2)) {\r\n if (!isNullOrZero(value.START_MONTH3) && !isNullOrZero(value.END_MONTH3)) {\r\n let result = checkMonths(value.START_MONTH2, value.START_MONTH3, value.END_MONTH2, value.END_MONTH3)\r\n if (result == true) {\r\n return errorMsg;\r\n }\r\n }\r\n if (!isNullOrZero(value.START_MONTH4) && !isNullOrZero(value.END_MONTH4)) {\r\n let result = checkMonths(value.START_MONTH2, value.START_MONTH4, value.END_MONTH2, value.END_MONTH4)\r\n if (result == true) {\r\n return errorMsg;\r\n }\r\n }\r\n }\r\n //月設定3との重複チェック\r\n if (!isNullOrZero(value.START_MONTH3) && !isNullOrZero(value.END_MONTH3)) {\r\n if (!isNullOrZero(value.START_MONTH4) && !isNullOrZero(value.END_MONTH4)) {\r\n let result = checkMonths(value.START_MONTH3, value.START_MONTH4, value.END_MONTH3, value.END_MONTH4)\r\n if (result == true) {\r\n return errorMsg;\r\n }\r\n }\r\n }\r\n return ''\r\n }\r\n\r\n /**\r\n * 月設定範囲の共通重複チェック\r\n * @param startMonth1 比較元\r\n * @param startMonth2 比較対象\r\n * @param endMonth1 比較元\r\n * @param endMonth2 比較対象\r\n * @returns \r\n */\r\n const checkMonths = (startMonth1: number, startMonth2: number, endMonth1: number, endMonth2: number): boolean => {\r\n let spansYear1 = endMonth1 < startMonth1; // 1側の終了月が年をまたぐか\r\n let spansYear2 = endMonth2 < startMonth2; // 2側の終了月が年をまたぐか\r\n console.debug(['checkMonths input datas', startMonth1, endMonth1, startMonth2, endMonth2])\r\n if (spansYear1 && spansYear2) {\r\n //両方年をまたいでいる場合 => 重複\r\n return true;\r\n }\r\n else if (spansYear1) {\r\n //片方が年をまたいでいる場合 => 範囲内に重複があるか確認\r\n return (\r\n (startMonth1 <= endMonth2 || endMonth1 >= startMonth2)\r\n );\r\n }\r\n else if (spansYear2) {\r\n //片方が年をまたいでいる場合 => 範囲内に重複があるか確認\r\n return (\r\n (startMonth2 <= endMonth1 || endMonth2 >= startMonth1)\r\n );\r\n }\r\n // 年をまたがない場合の通常の重複チェック\r\n return (\r\n (startMonth1 >= startMonth2 && startMonth1 <= endMonth2) ||\r\n (endMonth1 >= startMonth2 && endMonth1 <= endMonth2) ||\r\n (startMonth1 <= startMonth2 && endMonth1 >= endMonth2)\r\n );\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {t('XYComparisonSetting.グループNo', 'グループNo')}\r\n \r\n \r\n {\r\n if (typeof e.target.value === 'number') {\r\n groupChange(e.target.value);\r\n } else if (typeof e.target.value === 'string') {\r\n groupChange(parseInt(e.target.value));\r\n }\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n {t('XYComparisonSetting.グループ名称', 'グループ名称')}\r\n \r\n \r\n {\r\n groupNameChange(e.target.value);\r\n }}\r\n />\r\n \r\n \r\n \r\n
\r\n {/** 機器番号・XY項目設定 */}\r\n \r\n \r\n \r\n \r\n {t('XYComparisonSetting.機器番号', '機器番号')}\r\n \r\n \r\n {t('XYComparisonSetting.計測種別X', '計測種別X')}\r\n \r\n \r\n {t('XYComparisonSetting.計測種別', '計測種別')}\r\n \r\n \r\n {t('XYComparisonSetting.計測種別Y', '計測種別Y')}\r\n \r\n \r\n {t('XYComparisonSetting.項目', ' 項目')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {/** 余白 */}\r\n
\r\n {/**カレンダー設定 */}\r\n { onChangeSelectDataUpdate(e)}\r\n />}\r\n {\r\n setDlgmsg(t('XYComparisonSetting.保存しますか?', '保存しますか?'));\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n updateDispFlg();\r\n saveCurrentSetting({ list: editList }).then((_) => {\r\n console.debug([\"test test\", props.isDialog])\r\n props.editData.IsUpdate = false; //X-Y分布図のグラフ表示側でapplyを使用するために必要\r\n if (props.isDialog) {\r\n props.editData.IsSaveClose = true;\r\n props.editData.CloseSetting();\r\n }\r\n });\r\n })\r\n .cancel(() => { });\r\n }}\r\n /**\r\n * キャンセル処理\r\n */\r\n cancelAction={() => {\r\n if (props.editData.IsUpdate) {\r\n setDlgmsg(\r\n t(\r\n 'XYComparisonSetting.保存していないデータを破棄します。\\nよろしいですか?',\r\n '保存していないデータを破棄します。\\nよろしいですか?'\r\n )\r\n );\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n\r\n if (props.isDialog) {\r\n props.editData.IsUpdate = false;\r\n props.editData.CloseSetting();\r\n }\r\n else {\r\n props.editData.UpdateCancel();\r\n //props.editData.CloseSetting();\r\n }\r\n })\r\n .cancel(() => { });\r\n } else {\r\n if (props.isDialog) {\r\n props.editData.CloseSetting();\r\n }\r\n }\r\n }}\r\n /**\r\n * 新規作成\r\n */\r\n createAction={() => {\r\n actCrtDlg.open().apply((info) => {\r\n const grp = editList.find((ed) => ed.GROUP_NO == info.no);\r\n if (!grp) {\r\n const newGrp: XY_CMP_GROUP_SET = {\r\n GROUP_NO: info.no,\r\n GROUP_NAME: '',\r\n DSP_FLG: 0,\r\n DEV_INDEX: 0,\r\n PLC_NO_X: 0,\r\n SET_NO_X: 0,\r\n PLC_NO_Y: 0,\r\n SET_NO_Y: 0,\r\n YEAR_FLG: 0,\r\n MONTH_FLG: 0,\r\n START_DATE: dayjs(fromCalendar).format('YYYY-MM-DD'),\r\n END_DATE: dayjs(toCalendar).format('YYYY-MM-DD'),\r\n START_MONTH1: 0,\r\n END_MONTH1: 0,\r\n DSP_COLOR1: DspColor1, //赤色\r\n START_MONTH2: 0,\r\n END_MONTH2: 0,\r\n DSP_COLOR2: DspColor2, //青色\r\n START_MONTH3: 0,\r\n END_MONTH3: 0,\r\n DSP_COLOR3: DspColor3, //緑色\r\n START_MONTH4: 0,\r\n END_MONTH4: 0,\r\n DSP_COLOR4: DspColor4, //水色\r\n };\r\n const newList = editList.concat(newGrp).sort((g1, g2) => g1.GROUP_NO - g2.GROUP_NO);\r\n setEditList([...newList]);\r\n\r\n const groups = newList.map((grp) => {\r\n return { index: grp.GROUP_NO, name: grp.GROUP_NO.toString() };\r\n });\r\n setGroupCombos(groups);\r\n updateFormData(newGrp);\r\n }\r\n });\r\n }}\r\n /**\r\n * 削除処理\r\n */\r\n deleteAction={() => {\r\n setDlgmsg(t('XYComparisonSetting.削除しますか?', '削除しますか?'));\r\n actCfmDlg.open().apply((_) => {\r\n const grp = editList.find((ed) => ed.GROUP_NO == groupNo);\r\n if (grp) {\r\n grp.GROUP_NAME = '';\r\n deleteCurrentSetting({ list: editList }).then((_) => {\r\n props.editData.IsSaveClose = true;\r\n props.editData.IsUpdate = false;\r\n let newList = editList.filter((ph) => ph.GROUP_NAME !== '');\r\n setEditList([...newList]);\r\n const groups = newList.map((grp) => {\r\n return { index: grp.GROUP_NO, name: grp.GROUP_NO.toString() };\r\n });\r\n setGroupCombos(groups);\r\n if (newList.length !== 0) {\r\n updateFormData(newList[0]);\r\n }\r\n });\r\n }\r\n });\r\n }}\r\n />\r\n \r\n {cfmdlg}\r\n {msgdlg}\r\n {crtdlg}\r\n
\r\n );\r\n};\r\nXYComparisonSetting.defaultProps = { isDialog: false };\r\n\r\nexport default XYComparisonSetting;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { Dialog, DialogTitle, DialogContent } from '@material-ui/core';\r\nimport { DialogAction } from '../../../function/useModal';\r\nimport { useTranslation } from 'react-i18next';\r\nimport XYComparisonSetting from '../../Pages/GroupSettings/XYCompansonSetting/XYComparisonSetting';\r\nimport { SettingsState } from '../../organisms/SelectSettings';\r\n\r\ntype XYSettingDialogProps = {\r\n dialog: DialogAction;\r\n groupNo: number;\r\n}\r\n\r\nexport type XYSettingDialogResponse = {};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n dialog: {\r\n background: '#FFFFEE',\r\n },\r\n })\r\n);\r\n\r\nconst XYSettingDialog: React.FC = (props: XYSettingDialogProps) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [isOpen, setIsOpen] = useState(true);\r\n const [mode, setMode] = useState(true);\r\n const [no, setNo] = useState(props.groupNo);\r\n const [editData, setEditData] = useState(new SettingsState());\r\n const [dummyIdx, setDummyIdx] = useState(0);\r\n\r\n useEffect(() => {\r\n //console.debug('-- useEffect editData --', editData)\r\n editData.DispatchIndex = setDummyIdx;\r\n }, [editData]);\r\n\r\n useEffect(() => {\r\n console.debug(['-- useEffect dummyIdx --', editData.IsUpdate, dummyIdx])\r\n if (dummyIdx < 0) {\r\n setIsOpen(false);\r\n setMode(editData.IsSaveClose);\r\n }\r\n }, [dummyIdx]);\r\n\r\n return (\r\n <>\r\n { }}\r\n onExited={(e) => {\r\n if (mode) {\r\n //console.debug('props.dialog.apply() test')\r\n props.dialog.apply({});\r\n } else {\r\n //console.debug('props.dialog.cancel() test')\r\n props.dialog.cancel();\r\n }\r\n }}\r\n PaperProps={{ className: classes.dialog }}\r\n >\r\n {t('XYSettingDialog.XY分布グループ設定', 'X-Y分布グループ設定')}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default XYSettingDialog;","import { LogD } from \"../../../function/LogLapper\";\r\nimport dayjs from 'dayjs';\r\nimport { SpeedKind, MeasureLowKind, MeasureHighKind } from '../../../Constant';\r\n\r\nexport type SelectDataType = {\r\n devid: number;\r\n xid: number;\r\n yid: number;\r\n fromDay: Date;\r\n toDay: Date;\r\n}\r\n\r\nexport type MeasureInfoType = {\r\n AiCard: number;\r\n AiCh: number;\r\n DevIndex: number;\r\n DevName: string;\r\n DevNo: string;\r\n EntryNo: number;\r\n ItemName: string;\r\n ItemNameNo: number;\r\n KindNo: number;\r\n LogStart: string;\r\n MesName: string;\r\n PlcNo: number;\r\n Unit: string;\r\n\r\n SetNo: number;\r\n Speed: number;\r\n selectDay: string;\r\n selectTime: string;\r\n name: string;\r\n id: number;\r\n};\r\n\r\nexport type GraphDataType = {\r\n RegressionValue: number;\r\n XValue: number;\r\n YValue: number;\r\n ValueColDate: string;\r\n};\r\n\r\nexport type GraphDataInfoType = {\r\n GraphDatas: Array\r\n};\r\n\r\nexport type XYSymbolSettingModel = {\r\n /**記号 */\r\n SymbolName: string;\r\n /**設定開始日 */\r\n fromDate: string;\r\n /**設定終了日 */\r\n toDate: string;\r\n};\r\nexport type XYColorSettinModel = {\r\n /**カラーパレット選択 */\r\n ColorPalette: number;\r\n /**散布図のカラー */\r\n ScatterColor: string;\r\n /**開始月 */\r\n StartMonth: number | null;\r\n /**終了月 */\r\n EndMonth: number | null;\r\n /**色のグループNo */\r\n ColorGroupNo: number;\r\n /**月設定 設定開始日 */\r\n MonthFromDate: string;\r\n /**月設定 設定終了日 */\r\n MonthToDate: string;\r\n}\r\n\r\nexport type XYDiagramDateSettingModel = {\r\n GraphDatas: Array;\r\n YearDateSetting: XYSymbolSettingModel;\r\n ColorDataSetting: XYColorSettinModel;\r\n}\r\n\r\nexport type XYDiagramSettingModel = {\r\n GraphDataItems: Array;\r\n YearFlg: number;\r\n MonthFlg: number;\r\n};\r\n\r\n\r\n/**\r\n * 温度のデータかどうかを返す\r\n * @param target 判定対象データ\r\n * @returns\r\n */\r\nexport const IsTemperatureItem = (target?: MeasureInfoType): boolean => {\r\n if (target != null) {\r\n if (target.Speed == 1 && target.KindNo == 3) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * デバイス情報を取得\r\n * @returns \r\n */\r\nexport const GetMeasureInfoType = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/MeasuleInfo\")\r\n .then((res) => res.json())\r\n .then((result: MeasureInfoType[]) => {\r\n console.debug(result);\r\n if (MeasureInfoTypeListValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\nconst MeasureInfoTypeListValidate = (data: MeasureInfoType[]) => {\r\n LogD(`MeasureInfoTypeTypeListValidate ckeck ${data}`, true);\r\n if (data == undefined) return false;\r\n LogD(\"MeasureInfoTypeTypeListValidate ckeck ok\", true);\r\n return true;\r\n};\r\n\r\n/**\r\n * X-Y分布図 年設定/月設定のグラフデータ取得\r\n * @param groupNo \r\n * @param xPlcNo \r\n * @param xSetNo \r\n * @param xSpeed \r\n * @param xKindNo \r\n * @param yPlcNo \r\n * @param ySetNo \r\n * @param ySpeed \r\n * @param yKindNo \r\n * @returns \r\n */\r\nexport const GetXYDiagramData = (groupNo: number, xPlcNo: number, xSetNo: number, xSpeed: number, xKindNo: number, yPlcNo: number,\r\n ySetNo: number, ySpeed: number, yKindNo: number, fromTime: Date, toTime: Date): Promise => {\r\n const url = `api/XYDiagramModel/GetXYDiagramData`;\r\n var param = \"\";\r\n param += `groupNo=${groupNo}&&xPlcNo=${xPlcNo}&&xSetNo=${xSetNo}&&xSpeed=${xSpeed}&&xKindNo=${xKindNo}&&`;\r\n param += `yPlcNo=${yPlcNo}&&ySetNo=${ySetNo}&&ySpeed=${ySpeed}&&yKindNo=${yKindNo}&&`;\r\n param += `fromTime=${dayjs(fromTime).format(\"YYYY-MM-DD HH:mm:ss\")}&&toTime=${dayjs(toTime).format(\"YYYY-MM-DD HH:mm:ss\")}`;\r\n\r\n console.debug(`${url}?${param}`);\r\n\r\n return new Promise((resolve, reject) => {\r\n fetch(`${url}?${param}`)\r\n .then((res) => res.json())\r\n .then((result: XYDiagramSettingModel) => {\r\n console.debug([\"GetXYDiagramData result\", result]);\r\n if (XYDiagramDataModelValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n });\r\n });\r\n}\r\n\r\nconst XYDiagramDataModelValidate = (data: XYDiagramSettingModel) => {\r\n LogD(`XYDiagramDataModelValidate ckeck ${data}`, true);\r\n if (data == undefined) return false;\r\n LogD(\"XYDiagramDataModelValidate ckeck ok\", true);\r\n return true;\r\n};\r\n\r\n/**\r\n * X-Y 分布比較として有効かをチェック\r\n * @param speed\r\n * @param measure\r\n * @returns\r\n */\r\nexport const IsValidKindOfXyCmp = (speed: number, measure: number): boolean => {\r\n if (speed === SpeedKind.SPEED_KIND_LOW && measure === MeasureLowKind.TEMPERATURE) {\r\n return true;\r\n }\r\n if (\r\n speed === SpeedKind.SPEED_KIND_HIGHT &&\r\n (measure === MeasureHighKind.R_CURRENT ||\r\n measure === MeasureHighKind.S_CURRENT ||\r\n measure === MeasureHighKind.T_CURRENT ||\r\n measure === MeasureHighKind.VIBRATION ||\r\n measure === MeasureHighKind.TEMPERATURE_IOT)\r\n ) {\r\n return true;\r\n }\r\n\r\n return false;\r\n};\r\n","import * as React from 'react';\r\nimport dayjs from 'dayjs';\r\nimport DateInput from '../../atoms/Calendar/DateInput';\r\n\r\nconst isDispLog: boolean = true;\r\n\r\nconst checkFromTo = (from: Date, to: Date): boolean => {\r\n console.debug(`checkFrom from = ${from} to=${to}`, isDispLog);\r\n const f = dayjs(new Date(from));\r\n const t = dayjs(new Date(to));\r\n if (f.format('YYYY-MM-DD') === t.format('YYYY-MM-DD')) {\r\n return true;\r\n } else {\r\n return t.isAfter(f);\r\n }\r\n};\r\n\r\ntype Props = {\r\n fromDate: Date;\r\n toDate: Date;\r\n onChange?: (fromDate: Date, toDate: Date) => void;\r\n};\r\n\r\nconst RangeInputCalendar: React.FC = (props) => {\r\n const [fromData, setFromData] = React.useState(props.fromDate);\r\n const [toData, setToData] = React.useState(props.toDate);\r\n\r\n /**\r\n * カレンダー変更イベント(開始日)\r\n * @param value \r\n */\r\n const onChangeFromCalendarValue = (value: string) => {\r\n var f = new Date(value);\r\n var t = toData;\r\n if (checkFromTo(f, t)) {\r\n setFromData(f);\r\n if (props.onChange) props.onChange(f, t);\r\n } else {\r\n setFromData(t);\r\n }\r\n };\r\n /**\r\n * カレンダー変更イベント(終了日)\r\n * @param value \r\n */\r\n const onChangeToCalendarValue = (value: string) => {\r\n var f = fromData;\r\n var t = new Date(value);\r\n if (checkFromTo(f, t)) {\r\n setToData(t);\r\n if (props.onChange) props.onChange(f, t);\r\n } else {\r\n setToData(f);\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n onChangeFromCalendarValue(e)}\r\n >\r\n ~ \r\n onChangeToCalendarValue(e)}\r\n >\r\n
\r\n );\r\n};\r\n\r\nexport default RangeInputCalendar;\r\n","import React, { MouseEventHandler } from 'react';\r\nimport { TableCell } from '@material-ui/core';\r\n\r\ntype StackCellProps = {\r\n container: CellSizeContainer;\r\n className: string;\r\n style?: object;\r\n width: number;\r\n top: number;\r\n onClick?: ()=>void;\r\n onDoubleClick?: ()=>void;\r\n};\r\n\r\nexport class CellSizeContainer {\r\n private ptr: number = 0;\r\n\r\n constructor(start: number = 0){\r\n this.ptr = start;\r\n }\r\n\r\n Add(add: number){\r\n this.ptr += add;\r\n }\r\n\r\n get Current(): number {\r\n return this.ptr;\r\n }\r\n}\r\n \r\nconst StackCell: React.FC = (props) => {\r\n const pos = props.container.Current;\r\n props.container.Add(props.width);\r\n const top = props.top >= 0 ? {top: props.top} : null;\r\n const style = {...props.style, ...top, left: `${pos}px`, minWidth: `${props.width}px`, width: `${props.width}px`};\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n}\r\n \r\nexport default StackCell;","import React, { useEffect, useState } from 'react';\r\nimport CalendarRangeInput from './RangeInputCalendar';\r\nimport { MeasureInfoType, SelectDataType, IsValidKindOfXyCmp, GetXYDiagramData, XYDiagramSettingModel } from './XYDiagram';\r\nimport { ItemComboBox, ComboBoxItemType } from '../../atoms/ComboBox/ItemComboBox';\r\nimport ColorLineText from '../../atoms/Text/ColorLineText';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { XY_CMP_GROUP_SET } from '../../../function/GroupDataModel';\r\nimport StackCell, { CellSizeContainer } from '../../atoms/Cell/StackCell';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n labelStyle: {\r\n fontSize: '12px',\r\n },\r\n itemBoxStyle: {\r\n fontSize: '13px',\r\n },\r\n })\r\n);\r\n\r\n//計測種別リスト作成\r\nconst CreateDevList = (data: MeasureInfoType[]): ComboBoxItemType[] => {\r\n var ret: ComboBoxItemType[] = [];\r\n if (data != null) {\r\n //フィルタをして計測種別リスト作成\r\n var devNameList = data.filter((output) => {\r\n return IsValidKindOfXyCmp(output.Speed, output.KindNo);\r\n });\r\n\r\n // 重複を取り除く処理\r\n devNameList = devNameList.filter(\r\n (el: MeasureInfoType, index, self) => self.findIndex((e: MeasureInfoType) => e.DevIndex === el.DevIndex) === index\r\n );\r\n console.debug(devNameList);\r\n for (var i in devNameList) {\r\n ret.push({ index: devNameList[i].id, name: devNameList[i].DevNo + devNameList[i].DevName });\r\n }\r\n }\r\n return ret;\r\n};\r\n//計測種別リスト作成\r\nconst CreateXYList = (data: MeasureInfoType[], devId: number): ComboBoxItemType[] => {\r\n var ret: ComboBoxItemType[] = [];\r\n if (data != null) {\r\n var dev = data.find((item) => item.id === devId);\r\n var xList = data.filter((output) => {\r\n return IsValidKindOfXyCmp(output.Speed, output.KindNo);\r\n });\r\n console.debug(['CreateXYList', xList, data, devId, dev]);\r\n\r\n xList = xList.filter((r) => r.DevIndex == dev?.DevIndex);\r\n //console.debug(['xList 2', xList]);\r\n xList = xList.sort((a, b) => {\r\n if (a.Speed < b.Speed) return -1;\r\n if (a.Speed > b.Speed) return 1;\r\n return 0;\r\n });\r\n for (var i in xList) {\r\n ret.push({ index: xList[i].id, name: xList[i].ItemName });\r\n }\r\n }\r\n return ret;\r\n};\r\n\r\ntype Props = {\r\n mesInfoList: MeasureInfoType[];\r\n selectData: SelectDataType;\r\n xyDiagramSettingModel: XYDiagramSettingModel;\r\n xyCmpGroupSet: XY_CMP_GROUP_SET;\r\n changeSelectFlg: boolean;\r\n onChangeSelectDataEvent: (target: SelectDataType) => void;\r\n onChangeSelectFlg: (target: boolean) => void;\r\n};\r\n\r\nconst XYDiagramSelectItem: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [devList, setDevList] = React.useState([]);\r\n const [xList, setXList] = React.useState([]);\r\n const [yList, setYList] = React.useState([]);\r\n const [selectData, setSelectData] = useState(props.selectData);\r\n const [colorLabel, setColorLabel] = useState('■');\r\n\r\n const cnt = new CellSizeContainer();\r\n\r\n //コンボボックスデータ作成\r\n useEffect(() => {\r\n if (props.mesInfoList.length != 0) {\r\n var devList = CreateDevList(props.mesInfoList);\r\n var xList = CreateXYList(props.mesInfoList, props.selectData.devid);\r\n setDevList(devList);\r\n setXList(xList);\r\n setYList(xList);\r\n setSelectData({\r\n ...selectData,\r\n devid: props.selectData.devid,\r\n xid: props.selectData.xid,\r\n yid: props.selectData.yid,\r\n });\r\n console.debug(['devList', devList, 'xList', xList, 'props.selectData', props.selectData]);\r\n }\r\n }, [props.mesInfoList]);\r\n\r\n /**\r\n * 設定ボタン保存時に機器を更新する処理\r\n */\r\n useEffect(() => {\r\n if (props.changeSelectFlg) {\r\n setSelectData({\r\n ...selectData,\r\n devid: props.selectData.devid,\r\n xid: props.selectData.xid,\r\n yid: props.selectData.yid,\r\n });\r\n }\r\n\r\n console.debug(['change selectData', props.selectData]);\r\n props.onChangeSelectFlg(false);\r\n }, [props.changeSelectFlg]);\r\n\r\n //選択データ変更通知\r\n useEffect(() => {\r\n console.debug(['onChangeSelectDataEvent', selectData]);\r\n props.onChangeSelectDataEvent(selectData);\r\n }, [selectData]);\r\n\r\n //カレンダー変更イベント\r\n useEffect(() => {\r\n !(isNullOrZero(props.xyCmpGroupSet.START_MONTH1)) &&\r\n !(isNullOrZero(props.xyCmpGroupSet.END_MONTH1)) ?\r\n setColorLabel('■') :\r\n setColorLabel('');\r\n\r\n }, [props.xyCmpGroupSet]);\r\n\r\n /**\r\n * 機器変更イベント\r\n * @param event \r\n */\r\n const ChangeDevSelect = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n var mes = props.mesInfoList.find((item) => item.id === Number(event.target.value));\r\n //console.debug([' props.mesInfoList', props.mesInfoList, ' vent.target.value', event.target.value]);\r\n if (mes != null) {\r\n var xList = CreateXYList(props.mesInfoList, mes.id);\r\n //console.debug(['xList', xList]);\r\n if (xList?.length) {\r\n setXList(xList);\r\n setYList(xList);\r\n if (xList.length > 1) {\r\n setSelectData({ ...selectData, devid: mes.id, xid: xList[1].index, yid: xList[0].index });\r\n } else {\r\n setSelectData({ ...selectData, devid: mes.id, xid: xList[0].index, yid: xList[0].index });\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * X側のアイテム変更イベント\r\n * @param event \r\n */\r\n const ChangeXSelect = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n var mes = props.mesInfoList.find((item) => item.id === Number(event.target.value));\r\n if (mes != null) {\r\n setSelectData({ ...selectData, xid: mes.id });\r\n }\r\n };\r\n /**\r\n * y側のアイテム変更イベント\r\n * @param event \r\n */\r\n const ChangeYSelect = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n var mes = props.mesInfoList.find((item) => item.id === Number(event.target.value));\r\n if (mes != null) {\r\n setSelectData({ ...selectData, yid: mes.id });\r\n }\r\n };\r\n\r\n /**\r\n * カレンダー変更イベント\r\n * @param fromDay \r\n * @param toDay \r\n */\r\n const onChangeCalenderSelectData = (fromDay: Date, toDay: Date) => {\r\n setSelectData({ ...selectData, fromDay: fromDay, toDay: toDay });\r\n };\r\n\r\n /**\r\n * nullか0を判定する関数\r\n * @param value \r\n * @returns \r\n */\r\n function isNullOrZero(value: number | null): boolean {\r\n return value === null || value === 0;\r\n }\r\n\r\n /**\r\n * カラーパレット\r\n * @param colorVaue \r\n * @returns \r\n */\r\n const handleColorChange = (colorVaue: number): string => {\r\n let setColR: number = colorVaue & 0xff;\r\n let setColG: number = colorVaue & 0xff00;\r\n let setColB: number = colorVaue & 0xff0000;\r\n console.debug(['handleColorChange', setColR, setColG, setColB])\r\n return `rgb(${setColR},${setColG},${setColB})`;\r\n };\r\n\r\n /**\r\n * 年月設定を表示\r\n */\r\n const settingItems = () => {\r\n let ans: JSX.Element[] = [];\r\n console.debug(['test settingItems', props.xyDiagramSettingModel.GraphDataItems]);\r\n //年:ON、月:ON\r\n if (props.xyDiagramSettingModel.YearFlg === 1 &&\r\n props.xyDiagramSettingModel.MonthFlg === 1) {\r\n let checkItem = '';\r\n //記号・年表示\r\n props.xyDiagramSettingModel.GraphDataItems.forEach((r) => {\r\n if (r.YearDateSetting !== null) {\r\n if (checkItem !== r.YearDateSetting.fromDate) {\r\n let temp = \r\n \r\n \r\n checkItem = r.YearDateSetting.fromDate;\r\n ans.push(temp);\r\n }\r\n }\r\n });\r\n let checkColorGroupList: number[] = [0];\r\n //色・月表示\r\n props.xyDiagramSettingModel.GraphDataItems.forEach((r) => {\r\n if (r.ColorDataSetting.StartMonth !== 0 && r.ColorDataSetting.EndMonth !== 0) {\r\n let temp = \r\n {/**ドッドのカラー表示 */}\r\n \r\n {/**月設定の範囲を表示 */}\r\n \r\n \r\n if (!checkColorGroupList.find((rr) => rr === r.ColorDataSetting.ColorGroupNo)) {\r\n ans.push(temp);\r\n checkColorGroupList.push(r.ColorDataSetting.ColorGroupNo);\r\n }\r\n }\r\n });\r\n }\r\n //年:ON、月:OFF\r\n if (props.xyDiagramSettingModel.YearFlg === 1 &&\r\n props.xyDiagramSettingModel.MonthFlg === 0) {\r\n props.xyDiagramSettingModel.GraphDataItems.forEach((r) => {\r\n let temp = \r\n \r\n \r\n ans.push(temp);\r\n });\r\n };\r\n //年:OFF、月:ON\r\n if (props.xyDiagramSettingModel.YearFlg === 0 &&\r\n props.xyDiagramSettingModel.MonthFlg === 1) {\r\n props.xyDiagramSettingModel.GraphDataItems.forEach((r) => {\r\n if (r.ColorDataSetting.StartMonth !== 0 && r.ColorDataSetting.EndMonth !== 0) {\r\n let temp = \r\n {/**ドッドのカラー表示 */}\r\n \r\n {/**月設定の範囲を表示 */}\r\n \r\n \r\n ans.push(temp);\r\n }\r\n });\r\n }\r\n return ans;\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n {/**年・月がOFFの場合のみ表示 */}\r\n {props.xyDiagramSettingModel.YearFlg === 0 && props.xyDiagramSettingModel.MonthFlg === 0 ?\r\n \r\n : null\r\n }\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n <>\r\n {/**年表示 */}\r\n \r\n \r\n {/**月表示 */}\r\n \r\n \r\n {/**年月設定 */}\r\n {settingItems()}\r\n \r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nexport default XYDiagramSelectItem;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { ComposedChart, Line, Scatter, XAxis, YAxis, ZAxis, CartesianGrid, ResponsiveContainer, Label, Tooltip, Legend, ScatterChart, Dot } from 'recharts';\r\nimport { MeasureInfoType, GraphDataInfoType, SelectDataType, IsTemperatureItem, GraphDataType, XYDiagramSettingModel, XYDiagramDateSettingModel } from './XYDiagram';\r\nimport * as Constant from '../../../Constant';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nconst isDispLog: boolean = true;\r\n\r\nexport type GraphDispSetting = {\r\n yMin: number;\r\n yMax: number;\r\n xMin: number;\r\n xMax: number;\r\n isPileup: boolean;\r\n};\r\n\r\ntype GraphData = {\r\n lineNo: number;\r\n lineName: string;\r\n points: GraphPoint[];\r\n valueUpper: number;\r\n valueUpperLimit: number;\r\n selectFlg: boolean;\r\n infoColor: string;\r\n};\r\ntype GraphPoint = {\r\n xValue: number;\r\n yValue: number;\r\n regressionValue: number;\r\n valueColDate: string;\r\n};\r\n\r\ntype GraphSetting = {\r\n upper: number;\r\n upperLimit: number;\r\n yMin: number;\r\n yMax: number;\r\n xMin: number;\r\n xMax: number;\r\n backColor: string;\r\n memoryFontColor: string;\r\n yUnit: string;\r\n xUnit: string;\r\n yUnitColor: string;\r\n xUnitColor: string;\r\n gridColor: string;\r\n};\r\n\r\ntype Props = {\r\n selectData: SelectDataType;\r\n mesInfoList: MeasureInfoType[];\r\n update: string;\r\n groupNo: number;\r\n updateLoadginState: (value: boolean) => void;\r\n chartContainerStyle: string;\r\n xyDiagramSettingModel: XYDiagramSettingModel;\r\n};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n customTooltip: {\r\n background: '#FFFFEE',\r\n fontSize: '14px',\r\n padding: '10px 10px 0px 20px',\r\n },\r\n })\r\n);\r\n\r\nconst UpDateGraphData = (data: GraphDataInfoType): GraphData => {\r\n var item: GraphData = {\r\n lineNo: 1,\r\n valueUpper: 0,\r\n valueUpperLimit: 0,\r\n selectFlg: true,\r\n points: [],\r\n infoColor: 'red',\r\n lineName: '1',\r\n };\r\n\r\n for (let i = 0; i < data.GraphDatas.length; i++) {\r\n item.points.push({\r\n xValue: data.GraphDatas[i].XValue,\r\n yValue: data.GraphDatas[i].YValue,\r\n regressionValue: data.GraphDatas[i].RegressionValue,\r\n valueColDate: data.GraphDatas[i].ValueColDate\r\n });\r\n }\r\n return item;\r\n};\r\n\r\nconst XYDiagramChart: React.FC = (props) => {\r\n //console.debug(['XYDiagramChart()', props]);\r\n const classes = useStyles();\r\n\r\n const [graphData, setGraphData] = useState();\r\n\r\n const [graphDataInfoType, setGraphDataInfoType] = useState({ GraphDatas: [] });\r\n const [xyDiagramSettingModel, setXyDiagramSettingModel] = useState(props.xyDiagramSettingModel);\r\n\r\n const [graphSetting, setGraphSetting] = useState({\r\n upper: 0,\r\n upperLimit: 0,\r\n yMax: 0,\r\n yMin: 0,\r\n xMax: 0,\r\n xMin: 0,\r\n backColor: Constant.GraphThemeLight.BACK_COLOR,\r\n memoryFontColor: Constant.GraphThemeLight.MEMORY_FONT_COLOR,\r\n yUnit: '',\r\n xUnit: '',\r\n yUnitColor: Constant.GraphThemeLight.UNIT_COLOR,\r\n xUnitColor: Constant.GraphThemeLight.UNIT_COLOR,\r\n gridColor: Constant.GraphThemeLight.GRID_COLOR,\r\n });\r\n\r\n //表示ボタン押下時\r\n useEffect(() => {\r\n if (props.update === \"\") {\r\n console.debug(\"update no use\");\r\n return;\r\n }\r\n console.debug(['useEffect GetXYDiagramModel Start']);\r\n setXyDiagramSettingModel(props.xyDiagramSettingModel)\r\n\r\n var x = props.mesInfoList.find((item) => item.id === props.selectData.xid);\r\n var y = props.mesInfoList.find((item) => item.id === props.selectData.yid);\r\n graphSetting.xUnit = x?.Unit ?? '';\r\n graphSetting.yUnit = y?.Unit ?? '';\r\n\r\n if (IsTemperatureItem(x)) {\r\n //温度のデータの場合\r\n graphSetting.xMax = 150;\r\n graphSetting.xMin = 0;\r\n } else {\r\n graphSetting.xMax = 0;\r\n graphSetting.xMin = 0;\r\n }\r\n\r\n if (IsTemperatureItem(y)) {\r\n //温度のデータの場合\r\n graphSetting.yMax = 150;\r\n graphSetting.yMin = 0;\r\n } else {\r\n graphSetting.yMax = 0;\r\n graphSetting.yMin = 0;\r\n }\r\n //グラフデータ目盛り設定\r\n console.debug([\"useEffect XYDiagramChart\", props.xyDiagramSettingModel]);\r\n\r\n //グラフの軸範囲を取得\r\n //複数のラインデータから最小値と最大値を収集\r\n let ymin = 0;\r\n let ymax = 0;\r\n let xmin = 0;\r\n let xmax = 0;\r\n props.xyDiagramSettingModel.GraphDataItems.forEach((r) => {\r\n // console.debug([\"useEffect XYDiagramChart row\", r]);\r\n let graphDataInfoType: GraphDataInfoType = { GraphDatas: r.GraphDatas };\r\n let items = updateGraphDomain(graphDataInfoType, ymin, ymax, xmin, xmax);\r\n ymin = items[0];\r\n ymax = items[1];\r\n xmin = items[2];\r\n xmax = items[3];\r\n })\r\n //console.debug(['gettemp vaues', ymin, ymin, xmin, xmax])\r\n //ラインデータ取得\r\n graphSetting.yMin = ymin;\r\n graphSetting.yMax = ymax;\r\n graphSetting.xMin = xmin;\r\n graphSetting.xMax = xmax;\r\n setGraphSetting({ ...graphSetting });\r\n setGraphData(UpDateGraphData(graphDataInfoType));\r\n\r\n props.updateLoadginState(false);\r\n console.debug(['useEffect GetXYDiagramModel catch']);\r\n\r\n }, [props.update]);\r\n\r\n /**\r\n * 目盛りの最大値と最小値を調整します。\r\n * @param max\r\n * @param min\r\n * @returns\r\n */\r\n const adjustValue = (max: number, min: number, axisType: string): [Max: number, Min: number] => {\r\n //console.debug(['max, min', max, min]);\r\n let diff = max - min;\r\n if (diff === 0) {\r\n max = 10;\r\n min = -10;\r\n diff = 20;\r\n }\r\n\r\n const logValue = Math.pow(10, Math.floor(Math.log10(Math.abs(diff / 10)))) * 5;\r\n console.debug(['adjustValue diff', diff, logValue]);\r\n\r\n // 差分値により調整します。\r\n const maxBaseValue = Math.round((max - (max % logValue)) / logValue);\r\n const minBaseValue = Math.round((min - (min % logValue)) / logValue);\r\n let maxValue = 0.0;\r\n let minValue = 0.0;\r\n\r\n for (let ii = 0; ii <= 10; ii++) {\r\n if (max <= (maxBaseValue + ii - 1) * logValue) {\r\n let xyMaxValue = (maxBaseValue + ii - 1) * logValue;\r\n maxValue = Number(xyMaxValue.toFixed(3));\r\n break;\r\n }\r\n }\r\n\r\n for (let ii = 0; ii <= 10; ii++) {\r\n if (min >= (minBaseValue - ii + 1) * logValue) {\r\n minValue = (minBaseValue - ii + 1) * logValue;\r\n break;\r\n }\r\n }\r\n //console.debug(maxBaseValue, minBaseValue, maxValue, minValue);\r\n return [maxValue, minValue];\r\n };\r\n\r\n /**\r\n * グラフデータ目盛り設定\r\n * @param gData\r\n */\r\n const updateGraphDomain = (gData: GraphDataInfoType, tempYmin: number, tempYmax: number, tempXmin: number, tempXmax: number):\r\n [tempYmin: number, tempYmax: number, tempXmin: number, tempXmax: number] => {\r\n console.debug(['updateGraphDomain Data', gData, tempYmin, tempYmax, tempXmin, tempXmax]);\r\n if (gData.GraphDatas === null) {\r\n return [0, 0, 0, 0];\r\n }\r\n if (gData.GraphDatas.length === 1) {\r\n const yMin = gData.GraphDatas[0].YValue - 10;\r\n const yMax = gData.GraphDatas[0].YValue + 10;\r\n const xMin = gData.GraphDatas[0].XValue - 10;\r\n const xMax = gData.GraphDatas[0].XValue + 10;\r\n\r\n const adjustValueY = adjustValue(yMax, yMin, 'y');\r\n graphSetting.yMax = adjustValueY[0];\r\n graphSetting.yMin = adjustValueY[1];\r\n\r\n const adjustValueX = adjustValue(xMax, xMin, 'X');\r\n graphSetting.xMax = adjustValueX[0];\r\n graphSetting.xMin = adjustValueX[1];\r\n\r\n console.debug(['- データが1点時、XYメモリ設定 -', graphSetting]);\r\n return [graphSetting.yMin, graphSetting.yMax, graphSetting.xMin, graphSetting.xMax]\r\n } else {\r\n let xmin = graphSetting.xMin;\r\n let xmax = graphSetting.xMax;\r\n let ymin = graphSetting.yMin;\r\n let ymax = graphSetting.yMax;\r\n\r\n //Y軸\r\n let maxValue = Math.max(...gData.GraphDatas?.map((p) => p.YValue))\r\n let minValue = Math.min(...gData.GraphDatas?.map((p) => p.YValue))\r\n minValue = (minValue > tempYmin || minValue < 0) ? tempYmin : minValue;\r\n maxValue = maxValue <= tempYmax ? tempYmax : maxValue;\r\n\r\n const adjustValueY = adjustValue(\r\n maxValue,\r\n minValue,\r\n 'y'\r\n );\r\n console.debug(['adjustValueY', adjustValueY]);\r\n if (adjustValueY[0] > adjustValueY[1]) {\r\n // TODO 2022年 未対応\r\n // 温度:0~150\r\n // 電流:0~Auto\r\n\r\n ymax = graphSetting.yMax < adjustValueY[0] ? adjustValueY[0] : graphSetting.yMax;\r\n graphSetting.yMax = ymax;\r\n ymin = graphSetting.yMax > 0 ? 0 : adjustValueY[1];\r\n graphSetting.yMin = ymin;\r\n\r\n //X軸\r\n let maxValue = Math.max(...gData.GraphDatas?.map((p) => p.XValue))\r\n let minValue = Math.min(...gData.GraphDatas?.map((p) => p.XValue))\r\n minValue = (minValue > tempXmin || minValue < 0) ? tempXmin : minValue;\r\n maxValue = maxValue <= tempXmax ? tempXmax : maxValue;\r\n\r\n const adjustValueX = adjustValue(\r\n Math.max(maxValue),\r\n Math.min(minValue),\r\n 'x'\r\n );\r\n console.debug(['adjustValueX', adjustValueX]);\r\n // TODO 2022年 未対応\r\n // 温度:0~150\r\n // 電流:0~Auto\r\n\r\n xmax = graphSetting.xMax < adjustValueX[0] ? adjustValueX[0] : graphSetting.xMax;\r\n graphSetting.xMax = xmax;\r\n xmin = graphSetting.xMax > 0 ? 0 : adjustValueX[1];\r\n graphSetting.xMin = xmin;\r\n\r\n // console.debug(['change graphSetting', graphSetting])\r\n }\r\n return [ymin, ymax, xmin, xmax]\r\n }\r\n };\r\n\r\n /**\r\n * ツールチップ表示\r\n * @param param0\r\n * @returns\r\n */\r\n const CustomTooltip = ({ active, payload, label }: any) => {\r\n console.debug(['CustomTooltip payload', payload, label]);\r\n if (active) {\r\n return (\r\n
\r\n {xyDiagramSettingModel.GraphDataItems.map((r: any, index: any) => {\r\n console.debug(['xyDiagramSettingModel.GraphDataItems', r]);\r\n let pointDate: string = \"\";\r\n if (r.GraphDatas !== null) {\r\n r.GraphDatas.map((rr: any, index2: any) => {\r\n //console.debug(['xyDiagramSettingModel.GraphDataItems[].GraphDatas', rr]);\r\n //payloadと一致する場合、日付を取得\r\n if (rr.XValue === payload[0].payload.xValue && rr.YValue === payload[0].payload.yValue && rr.ValueColDate === payload[0].payload.valueColDate) {\r\n //console.debug(['CustomTooltip index', index, payload[0]]);\r\n return pointDate = rr.ValueColDate;\r\n }\r\n })\r\n }\r\n\r\n //日付が取得できていたらツールチップ表示する\r\n if (pointDate !== \"\") {\r\n return (\r\n
\r\n {r.YearDateSetting.SymbolName} : {(pointDate)}\r\n
)\r\n }\r\n })}\r\n
\r\n );\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * 記号取得\r\n * @param symbolName\r\n * @returns\r\n */\r\n const getSymbol = (symbolName: string): any => {\r\n if (symbolName === \"▲\") {\r\n return \"triangle\";\r\n }\r\n if (symbolName === \"■\") {\r\n return \"square\";\r\n }\r\n if (symbolName === \"♦\") {\r\n return \"diamond\";\r\n }\r\n if (symbolName === \"★\") {\r\n return \"star\";\r\n }\r\n return \"circle\";\r\n\r\n }\r\n\r\n /**\r\n * ラインデータ取得\r\n * @returns\r\n */\r\n const getLineData = (): any => {\r\n let graphPoint: GraphPoint[] = []\r\n let tempGraphPoint: GraphPoint[] = []\r\n xyDiagramSettingModel.GraphDataItems.map((row, index) => {\r\n if (row.GraphDatas !== null) {\r\n if (Object.keys(row.GraphDatas).length !== 0) {\r\n row.GraphDatas.map((r) => {\r\n tempGraphPoint.push({\r\n xValue: r.XValue,\r\n yValue: r.RegressionValue, //分布図(Scatter)ではregressionValueが使用できなかったのでyValueに代入する\r\n regressionValue: r.RegressionValue,\r\n valueColDate: r.ValueColDate\r\n })\r\n })\r\n }\r\n }\r\n })\r\n //console.debug(['getLineData regressionValue', tempGraphPoint]);\r\n let xValueList: number[] = []\r\n tempGraphPoint.map((r) => {\r\n xValueList.push(r.xValue)\r\n })\r\n if (xValueList !== undefined) {\r\n let tempMin = Math.min(...xValueList);\r\n let tempMax = Math.max(...xValueList);\r\n //X軸の最小値を取得\r\n let temp = tempGraphPoint.find((r) => r.xValue === tempMin);\r\n if (temp !== undefined) {\r\n //console.debug(['getLineData xMin value', temp]);\r\n graphPoint.push(temp)\r\n }\r\n //X軸の最大値を取得\r\n temp = tempGraphPoint.find((r) => r.xValue === tempMax);\r\n if (temp !== undefined) {\r\n //console.debug(['getLineData xMax value', temp]);\r\n graphPoint.push(temp)\r\n }\r\n }\r\n console.debug(['getLineData regressionValue', graphPoint]);\r\n return graphPoint\r\n }\r\n\r\n /**\r\n * 分布図データ取得\r\n * @param item\r\n * @returns\r\n */\r\n const getDistributionMapData = (item: Array): any => {\r\n let graphPoint: GraphPoint[] = []\r\n item.map((row, index) => {\r\n graphPoint.push({\r\n xValue: row.XValue,\r\n yValue: row.YValue,\r\n regressionValue: row.RegressionValue,\r\n valueColDate: row.ValueColDate\r\n })\r\n })\r\n return graphPoint;\r\n }\r\n /**\r\n * ライン側のドットサイズ変更処理\r\n * @param param0 \r\n * @returns \r\n */\r\n const RenderDot: React.FC<{ cx: number, cy: number }> = ({ cx, cy }) => {\r\n return (\r\n \r\n )\r\n }\r\n\r\n //console.debug(['- 画面描画開始 -', graphSetting, props]);\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {/**ツールチップ表示 */}\r\n } />\r\n\r\n {/**ライン表示 */}\r\n } />\r\n\r\n {/**分布図表示 */}\r\n {xyDiagramSettingModel.GraphDataItems.map((row, index) => {\r\n console.debug([\"GraphDataItems row\", row, index]);\r\n if (row.GraphDatas !== null) {\r\n //if (Object.keys(row.GraphDatas).length !== 0) {\r\n //console.debug(['xyDiagramSettingModel row item', row]);\r\n return (\r\n \r\n )\r\n //}\r\n }\r\n })}\r\n \r\n \r\n );\r\n};\r\nexport default XYDiagramChart;\r\n","import React, { useContext, useState, useEffect } from 'react';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Button from '@material-ui/core/Button';\r\nimport { SelectDataType, MeasureInfoType } from './XYDiagram';\r\n\r\nimport { makeStyles, createStyles, Theme } from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport { GetRealTimeTrendGroupTableByItemSet, GetTrendGroupTableByItemSet } from '../../../function/GroupDataModel';\r\nimport RealTimeTrendGraphGroupSelectPage from '../../Pages/RealTimeTrendGraph/RealTimeTrendGraphGroupSelectPage';\r\nimport TrendGraphGroupSelectPage from '../../Pages/TrendGraph/TrendGraphGroupSelectPage';\r\nimport SimpleDialog from '../../atoms/Dialog/SimpleDialog';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { AppContext } from '../../../App';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n buttonStyle: {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n },\r\n })\r\n);\r\n\r\n/**ダイアログ表示モードキー */\r\nconst DialogKindKey = {\r\n None: 'None',\r\n RealTime: 'realTime',\r\n Trend: 'trend',\r\n} as const;\r\n\r\n/**ダイアログ表示タイプ */\r\ntype DialgKindType = typeof DialogKindKey[keyof typeof DialogKindKey];\r\n\r\n/**引数 */\r\ntype Props = {\r\n selectData: SelectDataType;\r\n measureInfo: MeasureInfoType[];\r\n};\r\n\r\n/**XY分布下部ボタンコンポーネント */\r\nconst XYDiagramButtonList: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const { login } = useContext(AppContext);\r\n\r\n const { selectData, measureInfo } = props;\r\n const classes = useStyles();\r\n const [gropuSelectDialogOpen, setGropuSelectDialogOpen] = React.useState(false);\r\n const [simpleDialogOpen, setSimpleDialogOpen] = React.useState(false);\r\n\r\n const [dialogKind, setDialogKind] = React.useState(DialogKindKey.None);\r\n const [selectGroupNos, setSelectGroupNos] = React.useState([0]);\r\n\r\n /**\r\n *リアルタイムトレンドボタン処理\r\n */\r\n const handleRealTimeTrendPageOpen = () => {\r\n setDialogKind(DialogKindKey.RealTime);\r\n var xDt = measureInfo.find((row) => row.id === selectData.xid);\r\n var yDt = measureInfo.find((row) => row.id === selectData.yid);\r\n\r\n GetRealTimeTrendGroupTableByItemSet().then((ret) => {\r\n var xDts = ret?.filter((row) => row.trdItemSet.PLC_NO == xDt?.PlcNo && row.trdItemSet.SET_NO === xDt?.SetNo);\r\n var yDts = ret?.filter((row) => row.trdItemSet.PLC_NO == yDt?.PlcNo && row.trdItemSet.SET_NO === yDt?.SetNo);\r\n\r\n console.debug(['selectDt,xDt,yDt', selectData, xDt, yDt]);\r\n console.debug(['itemSet , xDts,yDts', ret, xDts, yDts]);\r\n var targets = xDts.concat(yDts);\r\n console.debug(['targets', targets]);\r\n\r\n if (targets.length !== 0) {\r\n var gpNos: number[] = [];\r\n for (var i in targets) {\r\n gpNos.push(targets[i].trdGroupSet.GROUP_NO);\r\n }\r\n setSelectGroupNos(gpNos);\r\n } else {\r\n handleSimpleDialogClickOpen();\r\n return;\r\n }\r\n handleGroupSelectDialogShow();\r\n });\r\n };\r\n\r\n /**\r\n *傾向管理ボタン処理\r\n */\r\n const handleTrendPageOpen = () => {\r\n setDialogKind(DialogKindKey.Trend);\r\n var xDt = measureInfo.find((row) => row.id === selectData.xid);\r\n var yDt = measureInfo.find((row) => row.id === selectData.yid);\r\n\r\n GetTrendGroupTableByItemSet().then((ret) => {\r\n var xDts = ret.filter((row) => row.trdItemSet.PLC_NO == xDt?.PlcNo && row.trdItemSet.SET_NO === xDt.SetNo);\r\n var yDts = ret.filter((row) => row.trdItemSet.PLC_NO == yDt?.PlcNo && row.trdItemSet.SET_NO === yDt.SetNo);\r\n\r\n console.debug(['selectDt,xDt,yDt', selectData, xDt, yDt]);\r\n console.debug(['itemSet , xDts,yDts', ret, xDts, yDts]);\r\n var targets = xDts.concat(yDts);\r\n console.debug(['targets', targets]);\r\n\r\n if (targets.length !== 0) {\r\n var gpNos: number[] = [];\r\n for (var i in targets) {\r\n gpNos.push(targets[i].trdGroupSet.GROUP_NO);\r\n }\r\n setSelectGroupNos(gpNos);\r\n } else {\r\n handleSimpleDialogClickOpen();\r\n return;\r\n }\r\n handleGroupSelectDialogShow();\r\n });\r\n };\r\n\r\n /**\r\n * グループ選択ダイアログ表示\r\n */\r\n const handleGroupSelectDialogShow = () => {\r\n setGropuSelectDialogOpen(true);\r\n };\r\n\r\n /**\r\n * グループ選択ダイアログ閉じる\r\n */\r\n const handleGroupSelectDialogClose = () => {\r\n setGropuSelectDialogOpen(false);\r\n };\r\n\r\n /**メッセージボックス表示 */\r\n const handleSimpleDialogClickOpen = () => {\r\n setSimpleDialogOpen(true);\r\n };\r\n\r\n /**メッセージボックス閉じる */\r\n const handleSimpleDialogClose = () => {\r\n setSimpleDialogOpen(false);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {login.IsIoT === true ? (\r\n ''\r\n ) : (\r\n \r\n \r\n {t('XYDiagramButtonList.リアルタイムトレンド', 'リアルタイムトレンド')}\r\n \r\n \r\n )}\r\n\r\n \r\n {dialogKind == DialogKindKey.RealTime ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n {t('XYDiagramButtonList.グループが見つかりませんでした', 'グループが見つかりませんでした')}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default XYDiagramButtonList;\r\n","import React, { useEffect, useState } from 'react';\r\nimport dayjs from 'dayjs';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport LoadingButton from '@mui/lab/LoadingButton';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport Button from '@material-ui/core/Button';\r\nimport Box from '@material-ui/core/Box';\r\n\r\nimport MessageDialog, { MessageDialogResponse } from '../../atoms/Dialog/MessageDialog';\r\nimport XYSettingDialog, { XYSettingDialogResponse } from '../../molecules/Dialog/XYSettingDialog';\r\nimport { useModal } from '../../../function/useModal';\r\nimport { XY_CMP_GROUP_SET, GetXYComparisonGroupList } from '../../../function/GroupDataModel';\r\n\r\nimport { SpeedKind, MeasureLowKind, MeasureHighKind } from '../../../Constant';\r\n\r\nimport { MeasureInfoType, GetMeasureInfoType, SelectDataType, IsValidKindOfXyCmp, GetXYDiagramData, XYDiagramSettingModel } from './XYDiagram';\r\nimport XYDiagramSelectItem from './XYDiagramSelectItem';\r\nimport XYDiagramChart from './XYDiagramChart';\r\nimport XYDiagramButtonList from './XYDiagramButtonList';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n responsiveContainer: {\r\n minHeight: 'calc(100vh - 350px)',\r\n maxHeight: 'calc(100vh - 350px)',\r\n },\r\n paper: {\r\n background: '#FFFFEE',\r\n },\r\n buttonStyle: {\r\n width: '100px',\r\n maxHeight: '35px',\r\n minHeight: '35px',\r\n marginLeft: '40px',\r\n alignItems: 'center',\r\n },\r\n })\r\n);\r\n\r\nconst getDevalutXid = (meslist: MeasureInfoType[]): number => {\r\n var defX = meslist.find((row) => row.Speed === SpeedKind.SPEED_KIND_HIGHT);\r\n if (defX) {\r\n return defX.id;\r\n } else {\r\n return 1;\r\n }\r\n};\r\n\r\nconst getDevalutYid = (meslist: MeasureInfoType[]): number => {\r\n var defY = meslist.find((row) => row.Speed === SpeedKind.SPEED_KIND_LOW);\r\n if (defY) {\r\n return defY.id;\r\n } else {\r\n return 1;\r\n }\r\n};\r\n\r\nconst CreateSelectData = (\r\n meslist: MeasureInfoType[],\r\n orgDt: SelectDataType,\r\n xDt?: MeasureInfoType,\r\n yDt?: MeasureInfoType\r\n): SelectDataType => {\r\n var fDevList = meslist.filter((output) => {\r\n return IsValidKindOfXyCmp(output.Speed, output.KindNo);\r\n });\r\n var xid = getDevalutXid(fDevList);\r\n var yid = getDevalutYid(fDevList);\r\n\r\n orgDt.devid = 1;\r\n\r\n orgDt.xid = xid;\r\n orgDt.yid = yid;\r\n\r\n var devList = fDevList.filter(\r\n (el: MeasureInfoType, index, self) => self.findIndex((e: MeasureInfoType) => e.DevIndex === el.DevIndex) === index\r\n );\r\n\r\n var searchDevIndex: number = 1;\r\n if (xDt != undefined) {\r\n searchDevIndex = xDt.DevIndex;\r\n }\r\n var dev = devList.find((row) => row.DevIndex === searchDevIndex);\r\n orgDt.devid = dev != undefined ? dev.id : orgDt.devid;\r\n\r\n var xyList = fDevList.filter((output) => {\r\n return output.DevIndex == dev?.DevIndex && IsValidKindOfXyCmp(output.Speed, output.KindNo);\r\n });\r\n\r\n if (xDt != undefined) {\r\n var xValue = xyList.find(\r\n (row) => row.DevIndex === xDt.DevIndex && row.KindNo == xDt.KindNo && row.ItemNameNo == xDt.ItemNameNo\r\n );\r\n orgDt.xid = xValue != undefined ? xValue.id : getDevalutXid(xyList);\r\n }\r\n\r\n if (yDt != undefined) {\r\n var yValue = xyList.find(\r\n (row) => row.DevIndex === yDt.DevIndex && row.KindNo == yDt.KindNo && row.ItemNameNo == yDt.ItemNameNo\r\n );\r\n orgDt.yid = yValue != undefined ? yValue.id : getDevalutYid(xyList);\r\n }\r\n\r\n return orgDt;\r\n};\r\n\r\ntype Props = {\r\n location: { state: XY_CMP_GROUP_SET };\r\n};\r\n\r\nconst XYDiagramPage: React.FC = (props) => {\r\n //console.debug(['XYDiagramPage()', props]);\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const yesterDay: Date = dayjs(new Date()).subtract(1, 'day').toDate();\r\n const [loading, setLoading] = React.useState(false);\r\n const [chartUpdate, setChartUpdate] = React.useState('');\r\n const [measureInfo, setMeasereInfo] = React.useState([]);\r\n const [selectData, setSelectData] = React.useState({\r\n devid: 0,\r\n xid: 0,\r\n yid: 0,\r\n //うるう年考慮\r\n fromDay: dayjs(yesterDay).subtract(1, 'year').add(1, 'day').toDate(),\r\n toDay: yesterDay,\r\n });\r\n const [xyCmpGroupSet, SetXyCmpGroupSet] = React.useState(props.location.state);\r\n const [selectSettingFlg, setSelectSettingFlg] = React.useState(false);\r\n\r\n const [xyDiagramSetting, setXyDiagramSetting] = React.useState({\r\n GraphDataItems: [],\r\n YearFlg: 0,\r\n MonthFlg: 0\r\n });\r\n\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n const [dlgmsg, setDlgmsg] = React.useState('');\r\n\r\n const msgdlg = flgMsgDlg ? : null;\r\n const [flgXYDlg, actXYDlg] = useModal();\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n useEffect(() => {\r\n getMeasurInfoData();\r\n }, []);\r\n\r\n /**\r\n * デバイス情報を取得\r\n */\r\n const getMeasurInfoData = () => {\r\n GetMeasureInfoType().then((mesRet) => {\r\n for (var i in mesRet) {\r\n mesRet[i].id = Number(i + 1);\r\n }\r\n\r\n var s1: SelectDataType = {\r\n devid: 1,\r\n xid: 1,\r\n yid: 1,\r\n fromDay: dayjs(yesterDay).subtract(1, 'year').add(1, 'day').toDate(),\r\n toDay: yesterDay,\r\n };\r\n if (props.location.state) {\r\n var gp = props.location.state;\r\n console.debug(['XYInit - param ', gp]);\r\n var xdt = mesRet.find((item) => item.PlcNo == gp.PLC_NO_X && item.SetNo == gp.SET_NO_X);\r\n var ydt = mesRet.find((item) => item.PlcNo == gp.PLC_NO_Y && item.SetNo == gp.SET_NO_Y);\r\n\r\n s1 = CreateSelectData(mesRet, s1, xdt, ydt);\r\n console.debug(['XYInit', mesRet, s1, xdt, ydt]);\r\n\r\n if (xdt === undefined || ydt === undefined) {\r\n setDlgmsg(t('XYDiagramPage.指定したデータが見つかりませんでした', '指定したデータが見つかりませんでした'));\r\n console.warn(['data find error ', gp]);\r\n actMsgDlg.open();\r\n } else {\r\n setSelectData(s1);\r\n //setMeasereInfo(mesRet);\r\n //XYのグループ設定読込み\r\n if (isOpen) {\r\n //設定でグループ内容更新時に使用\r\n GetXYComparisonGroupList().then((ret) => {\r\n var fillter = ret.XY_CMP_GROUP_SETs.filter((item) => item.GROUP_NO == gp.GROUP_NO);\r\n console.debug(['Groupitems chenge', fillter, ret]);\r\n SetXyCmpGroupSet(fillter[0]);\r\n\r\n xdt = mesRet.find((item) => item.PlcNo == fillter[0].PLC_NO_X && item.SetNo == fillter[0].SET_NO_X)\r\n ydt = mesRet.find((item) => item.PlcNo == fillter[0].PLC_NO_Y && item.SetNo == fillter[0].SET_NO_Y);\r\n s1 = CreateSelectData(mesRet, s1, xdt, ydt);\r\n setSelectData(\r\n s1\r\n )\r\n }).finally(() => {\r\n console.debug(['Groupitems chenge2', selectData]);\r\n setMeasereInfo(mesRet);\r\n setSelectSettingFlg(true);\r\n })\r\n }\r\n else {\r\n //初期読込み\r\n SetXyCmpGroupSet(gp);\r\n setMeasereInfo(mesRet);\r\n }\r\n //年・月設定とグラフデータ取得\r\n getXYDiagrams(mesRet, s1);\r\n setIsOpen(false);\r\n }\r\n } else {\r\n setMeasereInfo(mesRet);\r\n setIsOpen(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * 年・月設定とグラフデータ取得処理\r\n * @param mesInfo \r\n * @returns \r\n */\r\n const getXYDiagrams = (mesInfo: MeasureInfoType[], s1: SelectDataType) => {\r\n console.debug([\"getXYDiagrams mesInfo\", mesInfo]);\r\n if (mesInfo.length === 0) {\r\n console.debug([\"getXYDiagrams mesInfo empty\"]);\r\n return;\r\n }\r\n var x = mesInfo.find((item) => item.id === s1.xid);\r\n var y = mesInfo.find((item) => item.id === s1.yid);\r\n\r\n if (x == null || y == null) {\r\n console.debug([\"getXYDiagrams x or y null\"]);\r\n return;\r\n }\r\n //年・月設定とグラフデータ取得\r\n GetXYDiagramData(xyCmpGroupSet.GROUP_NO, x.PlcNo, x.SetNo, x.Speed,\r\n x.KindNo, y.PlcNo, y.SetNo, y.Speed, y.KindNo, s1.fromDay, s1.toDay).then((xyDiagram) => {\r\n if (xyDiagram !== undefined) {\r\n setXyDiagramSetting(xyDiagram);\r\n }\r\n setChartUpdate(dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss'));\r\n console.debug([\"getXYDiagrams check\", xyDiagram]);\r\n });\r\n }\r\n\r\n /**\r\n * 機器設定変更\r\n * @param target \r\n */\r\n const onChangeSelectData = (target: SelectDataType) => {\r\n console.debug([\"--onChangeSelectData-- select\", target]);\r\n setSelectData({ ...target });\r\n };\r\n\r\n /**\r\n * 表示ボタンクリック\r\n */\r\n const onClickDisplayButton = () => {\r\n console.debug([\"--onClickDisplayButton-- click\", selectData, measureInfo]);\r\n let measureInfoRow = measureInfo.find((r) => r.id == selectData.devid)\r\n if (measureInfoRow != undefined) {\r\n var x = measureInfo.find((item) => item.id === selectData.xid);\r\n var y = measureInfo.find((item) => item.id === selectData.yid);\r\n\r\n if (x == null || y == null) {\r\n console.debug([\"getXYDiagrams x or y null\"]);\r\n return;\r\n }\r\n\r\n /**グラフ更新 */\r\n console.debug([`--onClickDisplayButton-- items GROUP:${xyCmpGroupSet.GROUP_NO},PLC_NO:${measureInfoRow.PlcNo},x.SetNo:${x.SetNo},` +\r\n `x.Speed:${x.Speed},x.KindNo:${x.KindNo},y.SetNo:${y.SetNo},y.Speed:${y.Speed},y.KindNo:${y.KindNo}`]);\r\n GetXYDiagramData(xyCmpGroupSet.GROUP_NO, measureInfoRow.PlcNo, x.SetNo, x.Speed,\r\n x.KindNo, measureInfoRow.PlcNo, y.SetNo, y.Speed, y.KindNo, selectData.fromDay, selectData.toDay).then((xyDiagram) => {\r\n if (xyDiagram !== undefined) {\r\n setXyDiagramSetting(xyDiagram);\r\n }\r\n setChartUpdate(dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss'));\r\n console.debug([\"onClickDisplayButton check\", xyDiagram])\r\n\r\n });\r\n }\r\n };\r\n\r\n //グループ設定ダイアログ操作\r\n useEffect(() => {\r\n //console.debug([\"isOpen check\", isOpen]);\r\n if (isOpen) {\r\n console.debug([\"isOpen ok\"]);\r\n actXYDlg\r\n .open()\r\n .apply((_) => {\r\n console.debug([\"showXYSettingDiaog\"]);\r\n getMeasurInfoData();\r\n })\r\n .cancel((_) => {\r\n console.debug([\"showXYSettingDiaog cancel\"]);\r\n\r\n setIsOpen(false);\r\n });\r\n }\r\n }, [isOpen])\r\n\r\n /**\r\n * 設定ボタンクリック\r\n */\r\n const showXYSettingDiaog = () => {\r\n setIsOpen(true)\r\n };\r\n\r\n /**\r\n * 設定更新処理\r\n * @param target \r\n */\r\n const onChangeSettingData = (target: boolean) => {\r\n console.debug([\"--onChangeSettingData--\", target]);\r\n if (!target) {\r\n setSelectSettingFlg(target);\r\n onClickDisplayButton();\r\n }\r\n };\r\n\r\n //グループ設定画面表示\r\n const xydlg = flgXYDlg ? : null;\r\n\r\n\r\n const handleLoadingStateChange = (value: boolean): void => setLoading(value);\r\n\r\n //console.debug(['- 画面描画開始 -', measureInfo, selectData]);\r\n return (\r\n <>\r\n \r\n \r\n {/**グラフの上の機器設定箇所 */}\r\n \r\n \r\n \r\n {/**表示ボタン */}\r\n \r\n }\r\n onClick={onClickDisplayButton}\r\n >\r\n {t('XYDiagramPage.表示', '表示')}\r\n \r\n {/**設定ボタン */}\r\n \r\n {t('XYDiagramPage.設定', '設定')}\r\n \r\n \r\n {/**グラフ表示 */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {msgdlg}\r\n {xydlg}\r\n \r\n );\r\n};\r\n\r\nexport default XYDiagramPage;\r\n","import React from 'react';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Button from '@material-ui/core/Button';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ntype AlarmSummaryFooterProps = {\r\n graphButton: () => void;\r\n bulkButton: () => void;\r\n deleteButton: () => void;\r\n count: number;\r\n};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n button: {\r\n marginTop: '15px',\r\n marginLeft: '40px',\r\n alignItems: 'center',\r\n },\r\n countBox: {\r\n margin: '0px 8px',\r\n borderStyle: 'solid',\r\n borderWidth: 'thin',\r\n borderColor: 'black',\r\n borderRadius: '6px',\r\n padding: '2px 12px',\r\n },\r\n })\r\n);\r\n\r\nconst AlarmSummaryFooter: React.FC = (props: AlarmSummaryFooterProps) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n {/* \r\n \r\n */}\r\n \r\n
\r\n {t('AlarmSummaryFooter.未確認件数','未確認件数')}\r\n {props.count}\r\n {t('AlarmSummaryFooter.件','件')}\r\n
\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default AlarmSummaryFooter;\r\n","import { Dispatch, SetStateAction } from 'react';\r\n\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Box } from '@material-ui/core';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { ALM_KIND_SET, ALM_SMM_DAT } from '../../molecules/Grid/AlarmGrid';\r\nimport AlarmKindDiv from '../../molecules/Div/AlarmKindDiv';\r\nimport AlarmStateDiv from '../../molecules/Div/AlarmStateDiv';\r\nimport DateTImeDiv from '../../atoms/Div/DateTImeDiv';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nexport type AlarmSummaryGridProps = {\r\n alarmContainerStyle: string;\r\n alarmArray?: AlarmDatas;\r\n selectIndex: number;\r\n setSelectIndex: Dispatch>;\r\n};\r\n\r\nexport type AlarmDatas = Array<{\r\n ALM_SMM_DAT: ALM_SMM_DAT;\r\n ALM_KIND_SET: ALM_KIND_SET;\r\n rowno: number;\r\n}>;\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n '@global': {\r\n '.MuiTableCell-body': { color: 'inherit' },\r\n },\r\n //テーブル外枠\r\n tableStyle: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n },\r\n tableHeader: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n padding: '1px',\r\n minWidth: '80px',\r\n borderCollapse: `collapse`,\r\n },\r\n tableItem: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n orderBottomStyle: 'inset',\r\n borderLeftStyle: 'solid',\r\n borderRightStyle: 'solid',\r\n textAlign: 'center',\r\n minWidth: '80px',\r\n height: '8px',\r\n padding: '1px',\r\n },\r\n tableItemSub: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderLeftStyle: 'solid',\r\n borderRightStyle: 'solid',\r\n textAlign: 'center',\r\n verticalAlign: 'middle',\r\n width: '50%',\r\n minWidth: '80px',\r\n height: '100%',\r\n padding: '1px',\r\n },\r\n alarmValue: {\r\n textAlign: 'center',\r\n padding: '0px',\r\n verticalAlign: 'bottom',\r\n },\r\n cellNo: {\r\n width: '30px',\r\n },\r\n cellDateTime: {\r\n width: '180px',\r\n },\r\n cellKubun: {\r\n width: '140px',\r\n },\r\n cellDeviceNo: {\r\n width: '100px',\r\n },\r\n cellDeviceName: {\r\n width: '160px',\r\n },\r\n cellItemName: {\r\n width: '160px',\r\n },\r\n cellAlertType: {\r\n width: '220px',\r\n },\r\n cellMessage: {\r\n width: '420px',\r\n },\r\n cellStatus: {\r\n width: '100px',\r\n },\r\n cellAlarm: {\r\n width: '140px',\r\n },\r\n cellAlarmSub: {\r\n height: '29px',\r\n paddingLeft: '1em',\r\n },\r\n alertRoll: {\r\n overflow: 'auto',\r\n },\r\n isNormal: {\r\n color: 'green',\r\n },\r\n isNormalNC: {\r\n color: 'green',\r\n background: '#c0ffc0',\r\n },\r\n isNormalWS: {\r\n color: 'green',\r\n background: '#7fffd4',\r\n },\r\n hasAlert: {\r\n color: 'red',\r\n },\r\n hasAlertLFault: {\r\n color: '#FFA50A',\r\n },\r\n hasAlertHFault: {\r\n color: 'red',\r\n },\r\n hasAlertSFault: {\r\n color: 'red',\r\n },\r\n hasAlertNC: {\r\n color: 'red',\r\n background: '#ffc0c0', //淡い赤系\r\n },\r\n hasAlertNCLFault: {\r\n //軽故障\r\n color: '#FFA50A', //オレンジ色\r\n background: '#ffc0c0',\r\n },\r\n hasAlertNCHFault: {\r\n //重故障\r\n color: 'red',\r\n background: '#ffc0c0',\r\n },\r\n hasAlertNCSFault: {\r\n //システム異常\r\n color: 'red',\r\n background: '#ffc0c0',\r\n },\r\n hasAlertWS: {\r\n color: 'red',\r\n background: '#7fffd4', //あざやかな青緑系\r\n },\r\n hasAlertWSLFault: {\r\n //軽故障\r\n color: '#FFA50A', //オレンジ色\r\n background: '#7fffd4',\r\n },\r\n hasAlertWSHFault: {\r\n //重故障\r\n color: 'red',\r\n background: '#7fffd4',\r\n },\r\n hasAlertWSSFault: {\r\n //システム異常\r\n color: 'red',\r\n background: '#7fffd4',\r\n },\r\n })\r\n);\r\n\r\n/**\r\n * 状態が復帰の場合メッセージを空白にする\r\n * @param data\r\n * @returns\r\n */\r\nconst getAlarmMessage = (data: ALM_SMM_DAT): string => {\r\n if (data.STAT === 2) {\r\n return '';\r\n }\r\n return data.MESSAGE;\r\n};\r\n//少数第3位出力\r\nexport const alertValueFormat = (val: Number): string => {\r\n //console.debug(['val', val, 'val && !Number.isNaN(val) ?', val != null && !Number.isNaN(val)]);\r\n if (val != null && !Number.isNaN(val)) {\r\n return val.toFixed(4);\r\n }\r\n return '-';\r\n};\r\n\r\nconst AlarmSummaryGrid = (props: AlarmSummaryGridProps) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n\r\n const selectRow = (idx: number) => {\r\n props.setSelectIndex(idx);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n {t('AlarmSummaryGrid.No', 'No.')}\r\n \r\n \r\n {t('AlarmSummaryGrid.日時', '日時')}\r\n \r\n \r\n {t('AlarmSummaryGrid.区分', '区分')}\r\n \r\n \r\n {t('AlarmSummaryGrid.機器番号', '機器番号')}\r\n \r\n \r\n {t('AlarmSummaryGrid.機器名称', '機器名称')}\r\n \r\n \r\n {t('AlarmSummaryGrid.項目名称', '項目名称')}\r\n \r\n \r\n {t('AlarmSummaryGrid.異常種別', '異常種別')}\r\n \r\n \r\n {t('AlarmSummaryGrid.メッセージ', 'メッセージ')}\r\n \r\n \r\n {t('AlarmSummaryGrid.状態', '状態')}\r\n \r\n \r\n
\r\n
{t('AlarmSummaryGrid.警報', '警報')}
\r\n
\r\n
\r\n {t('AlarmSummaryGrid.検出値', '検出値')}\r\n
\r\n
\r\n {t('AlarmSummaryGrid.閾値', '閾値')}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n {props.alarmArray?.map((item) => {\r\n let lineAttr = '';\r\n if (item.ALM_SMM_DAT.STAT === 1) {\r\n //検出\r\n if (props.selectIndex === item.rowno) {\r\n //各異常内容ごとに色変更\r\n if (item.ALM_SMM_DAT.ALM_KIND == 1) {\r\n lineAttr = classes.hasAlertWSHFault;\r\n } else if (item.ALM_SMM_DAT.ALM_KIND == 2) {\r\n lineAttr = classes.hasAlertWSLFault;\r\n } else if (item.ALM_SMM_DAT.ALM_KIND == 3) {\r\n lineAttr = classes.hasAlertWSSFault;\r\n } else {\r\n lineAttr = classes.hasAlertWS;\r\n }\r\n } else if (!item.ALM_SMM_DAT.CHECKED) {\r\n //各異常内容ごとに色変更\r\n if (item.ALM_SMM_DAT.ALM_KIND == 1) {\r\n lineAttr = classes.hasAlertNCHFault;\r\n } else if (item.ALM_SMM_DAT.ALM_KIND == 2) {\r\n lineAttr = classes.hasAlertNCLFault;\r\n } else if (item.ALM_SMM_DAT.ALM_KIND == 3) {\r\n lineAttr = classes.hasAlertNCSFault;\r\n } else {\r\n lineAttr = classes.hasAlertNC;\r\n }\r\n } else {\r\n if (item.ALM_SMM_DAT.ALM_KIND == 1) {\r\n lineAttr = classes.hasAlertHFault;\r\n } else if (item.ALM_SMM_DAT.ALM_KIND == 2) {\r\n lineAttr = classes.hasAlertLFault;\r\n } else if (item.ALM_SMM_DAT.ALM_KIND == 3) {\r\n lineAttr = classes.hasAlertSFault;\r\n } else {\r\n lineAttr = classes.hasAlert;\r\n }\r\n }\r\n } else {\r\n //復帰\r\n if (props.selectIndex === item.rowno) {\r\n lineAttr = classes.isNormalWS;\r\n } else if (!item.ALM_SMM_DAT.CHECKED) {\r\n lineAttr = classes.isNormalNC;\r\n } else {\r\n lineAttr = classes.isNormal;\r\n }\r\n }\r\n\r\n return (\r\n \r\n selectRow(item.rowno)}>\r\n {item.rowno}\r\n \r\n selectRow(item.rowno)}>\r\n \r\n \r\n selectRow(item.rowno)}>\r\n \r\n \r\n selectRow(item.rowno)}>\r\n {item.ALM_SMM_DAT.DEV_NO}\r\n \r\n selectRow(item.rowno)}>\r\n {item.ALM_SMM_DAT.DEV_NAME}\r\n \r\n selectRow(item.rowno)}>\r\n {item.ALM_SMM_DAT.ITM_NAME}\r\n \r\n selectRow(item.rowno)}>\r\n {item.ALM_KIND_SET?.TYP_NAME}\r\n \r\n selectRow(item.rowno)}>\r\n {getAlarmMessage(item.ALM_SMM_DAT)}\r\n \r\n selectRow(item.rowno)}>\r\n \r\n \r\n {/* 警報 */}\r\n selectRow(item.rowno)}>\r\n
\r\n
{alertValueFormat(item.ALM_SMM_DAT.DATA)}
\r\n
{alertValueFormat(item.ALM_SMM_DAT.LIMIT)}
\r\n
\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default AlarmSummaryGrid;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport AlarmSummaryFooter from './AlarmSummaryFooter';\r\nimport { ALM_SMM_DAT } from '../../molecules/Grid/AlarmGrid';\r\nimport { useModal } from '../../../function/useModal';\r\nimport ImageDialog, { ImageDialogResponse } from '../../molecules/Dialog/ImageDialog';\r\nimport AlarmSummaryGrid, { AlarmDatas } from './AlarmSummaryGrid';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\n\r\ntype AlarmSummaryProps = {};\r\n\r\ntype ImageResponse = {\r\n Filepath: string;\r\n};\r\n\r\ntype UpdateCheckResponse = {\r\n COL_DATE: Date;\r\n DEV_NO: string;\r\n DEV_NAME: string;\r\n ITM_NAME: string;\r\n JUDGE_NO: Number;\r\n};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 278px)',\r\n overflowY: 'scroll',\r\n },\r\n })\r\n);\r\n\r\nconst AlarmSummaryPage: React.FC = (props: AlarmSummaryProps) => {\r\n const classes = useStyles();\r\n console.log('== AlarmSummary ==');\r\n const [alarmArray, setAlarmArray] = useState();\r\n const [selIdx, setSelIdx] = useState(0);\r\n const [noCheckCount, setNoCheckCount] = useState(0);\r\n const [flgDlg, actDlg] = useModal();\r\n const [imgPath, setImgPath] = useState('');\r\n\r\n const getData = () => {\r\n fetch('api/AlarmSummary')\r\n .then((res) => res.json())\r\n .then(\r\n (result: AlarmDatas) => {\r\n console.debug(['result', result]);\r\n result.forEach((item, idx) => {\r\n item.rowno = idx + 1;\r\n });\r\n setAlarmArray(result);\r\n setNoCheckCount(result.filter((item) => !item.ALM_SMM_DAT.CHECKED).length);\r\n },\r\n (error) => {\r\n console.log(error);\r\n }\r\n );\r\n };\r\n\r\n useEffect(() => {\r\n getData();\r\n }, []);\r\n\r\n const dlg = flgDlg ? (\r\n \r\n ) : null;\r\n\r\n // 三次元グラフ表示\r\n const graphButtonAction = () => {\r\n console.log();\r\n // ファイル名を取得するAPIを呼び出し\r\n if (alarmArray) {\r\n const dt: ALM_SMM_DAT | undefined = alarmArray.find((item) => item.rowno === selIdx)?.ALM_SMM_DAT;\r\n if (dt) {\r\n var url = `api/AlarmSummary/${dt.PLC_NO}/${dt.AI_CARD}/${dt.AI_CH}/${dt.DEV_NO}/${dt.DEV_NAME}/${dt.ITM_NAME}/${dt.COL_DATE}`;\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: ImageResponse) => {\r\n console.log(result);\r\n setImgPath(result.Filepath);\r\n actDlg\r\n .open()\r\n .apply((resp: ImageDialogResponse) => {})\r\n .cancel(() => {});\r\n });\r\n }\r\n }\r\n };\r\n // 一括確認\r\n const bulkButtonAction = () => {\r\n if (alarmArray) {\r\n // 状態更新処理呼び出し\r\n fetch('api/AlarmSummary/BulkUpdate', {\r\n method: 'post',\r\n })\r\n .then((resp) => {\r\n console.log(resp);\r\n getData();\r\n })\r\n .catch((err) => {\r\n console.log(err);\r\n });\r\n }\r\n };\r\n // 削除\r\n const deleteButtonAction = () => {\r\n if (alarmArray) {\r\n const deleteTarget: ALM_SMM_DAT | undefined = alarmArray.find((item) => item.rowno === selIdx)?.ALM_SMM_DAT;\r\n if (deleteTarget) {\r\n // 削除処理呼び出し\r\n fetch('api/AlarmSummary/DeleteAlarm', {\r\n method: 'delete',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(deleteTarget),\r\n })\r\n .then((resp) => {\r\n getData();\r\n setSelIdx(0); // 選択をリセット\r\n })\r\n .catch((err) => {\r\n console.log(err);\r\n });\r\n }\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {dlg}\r\n \r\n );\r\n};\r\n\r\nexport default AlarmSummaryPage;\r\n","import React, { useState, useEffect, ChangeEvent } from 'react';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Box from '@material-ui/core/Box';\r\n\r\ninterface DateTimeInputProps {\r\n initialValue: string;\r\n onDateTimeChange: (value: string) => void;\r\n}\r\n\r\nconst DateTimeInput: React.FC = ({ initialValue, onDateTimeChange }) => {\r\n const [selectedDateTime, setSelectedDateTime] = useState(initialValue);\r\n\r\n useEffect(() => {\r\n if (isValidDateTime(initialValue)) {\r\n setSelectedDateTime(initialValue);\r\n }\r\n }, [initialValue]);\r\n\r\n const handleDateTimeChange = (event: ChangeEvent) => {\r\n const value = event.target.value;\r\n console.debug(value);\r\n setSelectedDateTime(value);\r\n };\r\n\r\n const isValidDateTime = (value: string) => {\r\n const minDateTime = new Date('1900-01-01T00:00').getTime();\r\n const maxDateTime = new Date('2999-01-01T00:00').getTime();\r\n const selectedDateTime = new Date(value).getTime();\r\n return selectedDateTime >= minDateTime && selectedDateTime <= maxDateTime;\r\n };\r\n\r\n return (\r\n \r\n {\r\n const value = event.target.value;\r\n if (isValidDateTime(value)) {\r\n onDateTimeChange(value);\r\n } else {\r\n //console.debug(['reset', selectedDateTimeDef]);\r\n setSelectedDateTime(initialValue);\r\n }\r\n }}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default DateTimeInput;\r\n","import React from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\n\r\ntype GroupBoxProps = {\r\n name: string;\r\n children: React.ReactNode;\r\n style?: React.CSSProperties;\r\n};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n box: {\r\n display: 'flex',\r\n borderStyle: 'solid',\r\n borderWidth: 'thin',\r\n borderColor: 'gray',\r\n borderRadius: '4px',\r\n alignItems: 'center',\r\n padding: '0px',\r\n height: '36px',\r\n },\r\n header: {\r\n color: 'white',\r\n fontWeight: 'bold',\r\n background: 'gray',\r\n padding: '4px 8px',\r\n height: '30px',\r\n borderRadius: '4px 0px 0px 4px',\r\n },\r\n body: {\r\n padding: '2px 8px',\r\n margin: '0px',\r\n },\r\n })\r\n);\r\n\r\nconst GroupBox: React.FC = (props: GroupBoxProps) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n
\r\n
{props.name}
\r\n
{props.children}
\r\n
\r\n );\r\n};\r\n\r\nexport default GroupBox;\r\n","import React, { useState } from 'react';\r\nimport { makeStyles, createStyles, Theme, withStyles } from '@material-ui/core/styles';\r\nimport { Button, Dialog, IconButton } from '@material-ui/core';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport MuiDialogTitle from '@material-ui/core/DialogTitle';\r\nimport MuiDialogContent from '@material-ui/core/DialogContent';\r\nimport MuiDialogActions from '@material-ui/core/DialogActions';\r\n\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport { DialogAction } from '../../../function/useModal';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n margin: 0,\r\n padding: theme.spacing(2),\r\n },\r\n closeButton: {\r\n position: 'absolute',\r\n right: theme.spacing(1),\r\n top: theme.spacing(1),\r\n color: theme.palette.grey[500],\r\n },\r\n })\r\n);\r\n\r\ntype DialogTitleProps = {\r\n children: React.ReactNode;\r\n onClose: () => void;\r\n};\r\n\r\nconst DialogTitle: React.FC = (props) => {\r\n const { children, onClose, ...other } = props;\r\n const classes = useStyles(props);\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\nconst DialogContent = withStyles((theme: Theme) => ({\r\n root: {\r\n padding: theme.spacing(2),\r\n },\r\n}))(MuiDialogContent);\r\n\r\nconst DialogActions = withStyles((theme: Theme) => ({\r\n root: {\r\n margin: 0,\r\n padding: theme.spacing(1),\r\n },\r\n}))(MuiDialogActions);\r\n\r\ntype MessageDialogProps = {\r\n dialog: DialogAction;\r\n title?: string;\r\n message: string;\r\n action?: string;\r\n};\r\n\r\nexport type MessageStyleDialogResponse = {};\r\n\r\nconst MessageStyleDialog: React.FC = (props: MessageDialogProps) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [isOpen, setIsOpen] = useState(true);\r\n const [mode, setMode] = useState(true);\r\n\r\n const msgs = props.message.split('\\n');\r\n\r\n return (\r\n <>\r\n {}}\r\n onExited={(e) => {\r\n if (mode) {\r\n props.dialog.apply({});\r\n } else {\r\n props.dialog.cancel();\r\n }\r\n }}\r\n >\r\n {\r\n props.dialog.apply([]);\r\n }}\r\n >\r\n {props.title ?? t('MessageDialog.確認', '確認')}\r\n \r\n \r\n
\r\n {msgs.map((msg, index) => (\r\n
{msg}
\r\n ))}\r\n
\r\n
\r\n \r\n }\r\n onClick={(e) => {\r\n setIsOpen(false);\r\n setMode(true);\r\n }}\r\n >\r\n {props.action ?? 'OK'}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default MessageStyleDialog;\r\n","import React, { useEffect, useState, Dispatch, SetStateAction } from 'react';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Button from '@material-ui/core/Button';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { FormControlLabel, Checkbox } from '@material-ui/core';\r\nimport { TextField } from '@material-ui/core';\r\nimport ItemCalenderTime from '../../atoms/Calendar/ItemCalenderTime';\r\nimport DateTimeInput from '../../atoms/Calendar/DateTimeInput';\r\nimport { AlarmDatas } from '../AlarmSummary/AlarmSummaryGrid';\r\nimport dayjs from 'dayjs';\r\nimport GroupBox from './GroupBox';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useModal } from '../../../function/useModal';\r\nimport MessageStyleDialog, { MessageStyleDialogResponse } from '../../atoms/Dialog/MessageStyleDialog';\r\n\r\ntype AlarmHistoryHeaderProps = {\r\n setAlarmList: Dispatch>;\r\n setSearchRange: Dispatch>;\r\n exportButton: () => void;\r\n};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n title: {\r\n textAlign: 'center',\r\n marginTop: '8px',\r\n },\r\n button: {\r\n maxWidth: '100px',\r\n maxHeight: '35px',\r\n minWidth: '100px',\r\n minHeight: '35px',\r\n marginTop: '15px',\r\n marginLeft: '40px',\r\n alignItems: 'center',\r\n },\r\n container: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n },\r\n checkstyle: {\r\n height: '5px',\r\n },\r\n searchName: {\r\n margin: '4px',\r\n },\r\n })\r\n);\r\n\r\nconst AlarmHistoryHeader: React.FC = (props: AlarmHistoryHeaderProps) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [rangeFrom, setRangeFrom] = useState('');\r\n const [rangeTo, setRangeTo] = useState('');\r\n const [flgHeavy, setFlgHeavy] = useState(true);\r\n const [flgLight, setFlgLight] = useState(true);\r\n const [flgSystem, setFlgSystem] = useState(true);\r\n //const [flgMotor, setFlgMotor] = useState(true);\r\n const [devNo, setDevNo] = useState('');\r\n const [devName, setDevName] = useState('');\r\n const [itmName, setItmName] = useState('');\r\n const [search, setSearch] = useState('');\r\n const [count, setCount] = useState(100);\r\n const [enableExport, setEnableExport] = useState(false);\r\n\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n const [dlgtitle, setDlgtitle] = useState('');\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n const msgdlg = flgMsgDlg ? : null;\r\n\r\n useEffect(() => {\r\n const now: Date = new Date();\r\n const from = dayjs(now).subtract(1, 'month').format('YYYY-MM-DD HH:mm');\r\n const to = dayjs(now).format('YYYY-MM-DD HH:mm');\r\n\r\n setRangeFrom(from);\r\n setRangeTo(to);\r\n }, []);\r\n\r\n const updateCount = (prm: string) => {\r\n if (prm) {\r\n /* 数値以外が入ってきた場合は0を返す */\r\n if (isNaN(parseInt(prm))) {\r\n setCount(0);\r\n } else {\r\n setCount(parseInt(prm));\r\n }\r\n } else {\r\n setCount(0);\r\n }\r\n };\r\n\r\n const searchAlarm = () => {\r\n console.log(\r\n 'search:',\r\n rangeFrom,\r\n rangeTo,\r\n count,\r\n flgHeavy,\r\n flgLight,\r\n flgSystem,\r\n //flgMotor,\r\n devNo,\r\n devName,\r\n itmName,\r\n search\r\n );\r\n\r\n const devNoP = devNo === '' ? '-' : devNo;\r\n const devNameP = devName === '' ? '-' : devName;\r\n const itmNameP = itmName === '' ? '-' : itmName;\r\n const searchP = search === '' ? '-' : search;\r\n\r\n var url = `api/AlarmHistory/${rangeFrom}/${rangeTo}/${count}/${flgHeavy ? '1' : '0'}/${flgLight ? '1' : '0'}/${flgSystem ? '1' : '0'\r\n }/${devNoP}/${devNameP}/${itmNameP}/${searchP}`;\r\n console.debug(` AlarmHistoryHeader -- ${url}`);\r\n fetch(url)\r\n .then((res) => {\r\n if (!res.ok) throw new Error(` ${url} : get data server error status:${res.status}`);\r\n return res.json();\r\n })\r\n .then((result: AlarmDatas) => {\r\n console.debug(result);\r\n result.forEach((item, idx) => {\r\n item.rowno = idx + 1;\r\n item.ALM_SMM_DAT.CHECKED = 1;\r\n });\r\n props.setAlarmList(result);\r\n props.setSearchRange(`${rangeFrom}_${rangeTo}`);\r\n setEnableExport(result.length > 0);\r\n })\r\n .catch((error) => {\r\n setDlgtitle(t('AlarmHistoryHeader.データ取得エラー', 'データ取得エラー'));\r\n let msg = t('AlarmHistoryHeader.データ取得中にエラーが発生', 'データ取得中にエラーが発生しました') + '\\r\\n';\r\n msg += error;\r\n setDlgmsg(msg);\r\n actMsgDlg.open();\r\n console.error(error);\r\n });\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n setFlgHeavy(e.target.checked)}\r\n checked={flgHeavy}\r\n className={classes.checkstyle}\r\n />\r\n }\r\n label={t('AlarmHistoryHeader.重故障', '重故障')}\r\n />\r\n setFlgLight(e.target.checked)}\r\n checked={flgLight}\r\n className={classes.checkstyle}\r\n />\r\n }\r\n label={t('AlarmHistoryHeader.軽故障', '軽故障')}\r\n />\r\n setFlgSystem(e.target.checked)}\r\n checked={flgSystem}\r\n className={classes.checkstyle}\r\n />\r\n }\r\n label={t('AlarmHistoryHeader.システム異常', 'システム異常')}\r\n />\r\n {/* setFlgMotor(e.target.checked)}\r\n checked={flgMotor}\r\n className={classes.checkstyle}\r\n />\r\n }\r\n label={t('AlarmHistoryHeader.モータ停止', 'モータ停止')}\r\n /> */}\r\n \r\n \r\n \r\n \r\n props.exportButton()}\r\n >\r\n {t('AlarmHistoryHeader.CSV出力', 'CSV出力')}\r\n \r\n \r\n \r\n \r\n \r\n {t('AlarmHistoryHeader.機器番号', '機器番号')}\r\n setDevNo(e.target.value)} value={devNo} style={{ width: '80px' }} />\r\n {t('AlarmHistoryHeader.機器名称', '機器名称')}\r\n setDevName(e.target.value)}\r\n value={devName}\r\n style={{ width: '100px' }}\r\n />\r\n {t('AlarmHistoryHeader.項目名称', '項目名称')}\r\n setItmName(e.target.value)}\r\n value={itmName}\r\n style={{ width: '120px' }}\r\n />\r\n {t('AlarmHistoryHeader.検索文字', '検索文字')}\r\n setSearch(e.target.value)}\r\n value={search}\r\n style={{ width: '120px' }}\r\n />\r\n {t('AlarmHistoryHeader.を含む', 'を含む')}\r\n {t('AlarmHistoryHeader.最大', '最大')}\r\n updateCount(e.target.value)}\r\n value={count}\r\n inputProps={{ maxlength: 5, style: { textAlign: 'center' } }}\r\n style={{ width: '60px', textAlign: 'center' }}\r\n />\r\n {t('AlarmHistoryHeader.件', '件')}\r\n \r\n \r\n \r\n {msgdlg}\r\n \r\n );\r\n};\r\n\r\nexport default AlarmHistoryHeader;\r\n","import React from 'react';\r\n\r\ntype CSVDownloadProps = {\r\n}\r\n\r\nexport const CSVDownload: React.FC = (props) => {\r\n\r\n return (\r\n <>\r\n \r\n \r\n );\r\n}\r\n\r\nexport const DownloadFile = (filename: string, content: Blob) => {\r\n let link = document.getElementById(\"download\") as HTMLAnchorElement;\r\n \r\n if(link){\r\n link.href = URL.createObjectURL(content);\r\n link.download = filename;\r\n link.click();\r\n }\r\n}\r\n","import React, { useState } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport AlarmHistoryHeader from './AlarmHistoryHeader';\r\nimport { ALM_SMM_DAT } from '../../molecules/Grid/AlarmGrid';\r\nimport { useModal } from '../../../function/useModal';\r\nimport ImageDialog, { ImageDialogResponse } from '../../molecules/Dialog/ImageDialog';\r\nimport AlarmSummaryGrid, { AlarmDatas } from '../AlarmSummary/AlarmSummaryGrid';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport { DownloadFile } from '../../molecules/CSVExport/CSVDownload';\r\nimport dayjs from 'dayjs';\r\nimport { ConvertKind } from '../../molecules/Div/AlarmKindDiv';\r\nimport { ConvertState } from '../../molecules/Div/AlarmStateDiv';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ntype AlarmHistoryProps = {};\r\n\r\ntype ImageResponse = {\r\n Filepath: string;\r\n};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 326px)',\r\n overflowY: 'scroll',\r\n },\r\n })\r\n);\r\n\r\nconst AlarmHistoryPage: React.FC = (props: AlarmHistoryProps) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n console.log('== AlarmHistory ==');\r\n const [alarmArray, setAlarmArray] = useState();\r\n const [selIdx, setSelIdx] = useState(0);\r\n const [flgDlg, actDlg] = useModal();\r\n const [imgPath, setImgPath] = useState('');\r\n const [searchRange, setSearchRange] = useState('');\r\n\r\n const dlg = flgDlg ? (\r\n \r\n ) : null;\r\n\r\n // CSV出力\r\n const exportButtonAction = () => {\r\n if (alarmArray) {\r\n let bom = new Uint8Array([0xef, 0xbb, 0xbf]);\r\n let header = `${t('AlarmSummaryGrid.日時', '日時')},${t('AlarmSummaryGrid.区分', '区分')},${t(\r\n 'AlarmSummaryGrid.機器番号',\r\n '機器番号'\r\n )},${t('AlarmSummaryGrid.機器名称', '機器名称')},${t('AlarmSummaryGrid.項目名称', '項目名称')},${t(\r\n 'AlarmSummaryGrid.異常種別',\r\n '異常種別'\r\n )},${t('AlarmSummaryGrid.メッセージ', 'メッセージ')},${t('AlarmSummaryGrid.状態', '状態')},${t(\r\n 'AlarmSummaryGrid.検出値',\r\n '検出値'\r\n )},${t('AlarmSummaryGrid.閾値', '閾値')},${t('AlarmSummaryGrid.判定条件番号', '判定条件番号')},${t(\r\n 'AlarmSummaryGrid.PLCNo',\r\n 'PLCNo.'\r\n )},${t('AlarmSummaryGrid.AIカード', 'AIカード')},${t('AlarmSummaryGrid.CH番号', 'CH番号')}\\n`;\r\n let alarms = alarmArray.map((alm) => {\r\n let day = dayjs(alm.ALM_SMM_DAT.COL_DATE);\r\n let kind = ConvertKind(alm.ALM_SMM_DAT.ALM_KIND, t);\r\n let stat = ConvertState(alm.ALM_SMM_DAT.STAT, alm.ALM_SMM_DAT.DEV_NAME, t);\r\n return `${day.format('YY/MM/DD HH:mm:ss')},${kind},${alm.ALM_SMM_DAT.DEV_NO},${alm.ALM_SMM_DAT.DEV_NAME},${\r\n alm.ALM_SMM_DAT.ITM_NAME\r\n },${alm.ALM_KIND_SET?.TYP_NAME ?? ''},${alm.ALM_SMM_DAT.MESSAGE},${stat},${alm.ALM_SMM_DAT.DATA},${\r\n alm.ALM_SMM_DAT.LIMIT\r\n },${alm.ALM_SMM_DAT.JUDGE_NO},${alm.ALM_SMM_DAT.PLC_NO},${alm.ALM_SMM_DAT.AI_CARD},${alm.ALM_SMM_DAT.AI_CH}\\n`;\r\n });\r\n let blob = new Blob([bom, header].concat(alarms), { type: 'text/csv' });\r\n let range = searchRange.replaceAll('-', '').replaceAll(' ', '').replaceAll(':', '');\r\n let filename = `AlarmHistory_${range}.csv`;\r\n DownloadFile(filename, blob);\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {dlg}\r\n \r\n );\r\n};\r\n\r\nexport default AlarmHistoryPage;\r\n","import { GetVibrationSpecialString, MeasureHighKind } from '../../../Constant';\r\nimport { FFT_CMP_GROUP_SET, MeasureSelectItem } from '../../../function/GroupDataModel';\r\n\r\nexport type MeasureInfoType = {\r\n AiCard: number;\r\n AiCh: number;\r\n DevIndex: number;\r\n DevName: string;\r\n DevNo: string;\r\n FftInvalid: number;\r\n EntryNo: number;\r\n ItemName: string;\r\n ItemNameNo: number;\r\n KindNo: number;\r\n LogStart: string;\r\n MesName: string;\r\n PlcNo: number;\r\n SetNo: number;\r\n Speed: number;\r\n\r\n selectDay: string;\r\n selectTime: string;\r\n name: string;\r\n id: number;\r\n};\r\n\r\nexport type SelectDataType = {\r\n mesid: number;\r\n devid: number;\r\n itemid: number;\r\n selectDate: Date;\r\n selectTime: string;\r\n //itemName: string;\t//計測データ1~3ラベル表示\r\n lineColor: string;\r\n isSelect: boolean;\r\n isShow: boolean;\r\n isThreshold: boolean;\r\n envelopeNo: number;\r\n lineNo: number;\r\n}\r\n\r\n\r\nexport type JudgeSettingType = {\r\n PLCNo: string;\r\n AICardNo: string;\r\n ChannelNo: string;\r\n //診断タイプ\r\n JudgeTypeName: string;\r\n //周波数 下限\r\n FrequencyLower: string;\r\n //周波数 上限\r\n FrequencyUpper: string;\r\n //演算方法\r\n OperationProcess: string;\r\n //軽故障\r\n MinorFailure: string;\r\n //重故障\r\n SeriousFailure: string;\r\n //異常種別\r\n AbnormalKind: string;\r\n //演算No\r\n ClcTypeNo: number;\r\n //裕度\r\n BandValue: number;\r\n //中心周波数\r\n FreqCenter: number;\r\n //演算種別ID\r\n MclcTypeID: number;\r\n}\r\n\r\nexport type GraphLineDataType = {\r\n XValues: string[],\r\n YValues: number[],\r\n YValuesString: string[],\r\n //Y 軸最大値を取得または設定します。\r\n ValueMax: number,\r\n //Y 軸最小値を取得または設定します。\r\n ValueMin: number,\r\n PLCNo: string,\r\n AICardNo: string,\r\n ChannelNo: string,\r\n //機器INDEX\r\n MachineIndex: string,\r\n //機器No\r\n MachineNo: string,\r\n //機器名称\r\n MachineName: string,\r\n //項目名称\r\n ItemName: string,\r\n //エンベロープ項目\r\n EnveNameNo: number,\r\n //データ時刻\r\n GraphDataTime: Date,\r\n //開始位置\r\n StartIndex: string,\r\n //信号点数\r\n SignalCount: number,\r\n //サイズ\r\n SignalSize: number,\r\n //サンプリング周期\r\n SampleSpan: number,\r\n //ユニット\r\n Unit: string,\r\n /**\r\n * OA値\r\n * TRD_DAT_OAVからファイル時間で抽出。\r\n */\r\n OAValue: string,\r\n //判定値情報\r\n JudgeSettingModel: JudgeSettingType[];\r\n //インバータ駆動フラグにチェックがある場合の周波数\r\n TrddatChrModels: TrddatChrModel[];\r\n //インバータ駆動\r\n INV_DRV_ON: number;\r\n //ライン番号\r\n lineNo: number;\r\n}\r\n\r\n/**\r\n * 側帯波診断 表示パラメータ\r\n */\r\nexport type SideBandParam = {\r\n /**\r\n * 理論計算値 f\r\n */\r\n Freq: string,\r\n /**\r\n * 理論計算値 すべり(%)\r\n */\r\n Slide: string,\r\n /**\r\n * 理論計算値 2sf\r\n */\r\n BandWidth: string,\r\n /**\r\n * 理論計算値 -側\r\n */\r\n LowerSideBand: string,\r\n /**\r\n * 理論計算値 +側\r\n */\r\n UpperSideBand: string,\r\n /**\r\n * f 周波数\r\n */\r\n DBFreq: string,\r\n /**\r\n * f dB値\r\n */\r\n DBValue: string,\r\n}\r\n\r\n/**\r\n * 側帯波診断 計算結果\r\n */\r\nexport type SideBandCalc =\r\n {\r\n /**\r\n * ー側 周波数\r\n */\r\n FreqMinus: string,\r\n /**\r\n * ー側 dB値\r\n */\r\n DBMinus: string,\r\n /**\r\n * ー側 差分dB値\r\n */\r\n DBDiffMinus: string,\r\n /**\r\n * +側 周波数\r\n */\r\n FreqPlus: string,\r\n /**\r\n * +側 dB値\r\n */\r\n DBPlus: string,\r\n /**\r\n * +側 差分dB値\r\n */\r\n DBDiffPlus: string,\r\n }\r\n\r\n/**\r\n * X軸 初期値\r\n */\r\nexport type FFTGraphInitialWidth =\r\n {\r\n /**\r\n * X軸最小値 初期値\r\n */\r\n XMinInitial: number,\r\n /**\r\n * X軸最大値 初期値\r\n */\r\n XMaxInitial: number,\r\n }\r\n/**\r\n * インバータ駆動フラグがONの際に使用\r\n */\r\nexport type TrddatChrModel = {\r\n LOG_DATE: Date,\r\n COL_DATE: Date,\r\n PLC_NO: number,\r\n TYP_NO: number,\r\n MCLC_TYP_ID: number,\r\n FREQ?: number,\r\n}\r\n\r\nexport const CreateDefalutMeasureInfoType = (): MeasureInfoType => {\r\n\r\n var dt: MeasureInfoType =\r\n {\r\n AiCard: 0,\r\n AiCh: 0,\r\n DevIndex: 0,\r\n DevName: \"\",\r\n DevNo: \"\",\r\n FftInvalid: 0,\r\n EntryNo: 0,\r\n ItemName: \"\",\r\n ItemNameNo: 0,\r\n KindNo: 0,\r\n LogStart: \"\",\r\n MesName: \"\",\r\n PlcNo: 0,\r\n SetNo: 0,\r\n Speed: 0,\r\n\r\n selectDay: \"\",\r\n selectTime: \"\",\r\n name: \"\",\r\n id: -1,\r\n };\r\n return dt;\r\n}\r\n\r\nexport const CreateDefalutGraphLineDataType = (): GraphLineDataType => {\r\n\r\n var dt: GraphLineDataType =\r\n {\r\n XValues: [],\r\n YValues: [],\r\n YValuesString: [],\r\n ValueMax: 0,\r\n ValueMin: 0,\r\n PLCNo: '',\r\n AICardNo: '',\r\n ChannelNo: '',\r\n MachineIndex: '',\r\n MachineNo: '',\r\n MachineName: '',\r\n ItemName: '',\r\n EnveNameNo: 0,\r\n GraphDataTime: new Date(),\r\n StartIndex: '',\r\n SignalCount: 0,\r\n SignalSize: 0,\r\n SampleSpan: 0,\r\n Unit: '',\r\n OAValue: \"\",\r\n JudgeSettingModel: [],\r\n TrddatChrModels: [],\r\n INV_DRV_ON: 0,\r\n lineNo: 0,\r\n };\r\n return dt;\r\n}\r\n\r\n/**\r\n *\r\n * @param itemName 計測データ1~3ラベル表示 未使用\r\n * @param lineColor\r\n * @returns\r\n */\r\nexport const CreateDefalutSelectDataType = (itemName: string, lineColor: string, lineNo: number): SelectDataType => {\r\n var dt: SelectDataType =\r\n {\r\n devid: -1,\r\n mesid: -1,\r\n itemid: -1,\r\n selectDate: new Date(),\r\n selectTime: '',\r\n //itemName: itemName,\r\n lineColor: lineColor,\r\n isSelect: false,\r\n isThreshold: false,\r\n isShow: true,\r\n envelopeNo: 0,\r\n lineNo: lineNo,\r\n };\r\n return dt;\r\n}\r\n\r\n/**\r\n * 速度と変位の対応\r\n * @returns\r\n */\r\nexport const GetComparisonNo = (target?: MeasureInfoType): string => {\r\n var comparisonNo = '0';\r\n if (target?.KindNo == MeasureHighKind.VIBRATION_SPD) {\r\n comparisonNo = String(MeasureHighKind.VIBRATION_SPD);\r\n } else if (target?.KindNo == MeasureHighKind.VIBRATION_DSP) {\r\n comparisonNo = String(MeasureHighKind.VIBRATION_DSP);\r\n }\r\n return comparisonNo\r\n}\r\n\r\n/**\r\n * 計測リストに付加情報追加\r\n */\r\nexport const GetAdditionalMeasureInfoType = (translation: any, target?: MeasureInfoType[]): MeasureInfoType[] => {\r\n if (target == null) {\r\n return [];\r\n }\r\n //番号付与\r\n for (let i = 0; i < target.length; i++) {\r\n target[i].id = i + 1;\r\n }\r\n\r\n //特殊機器追加\r\n var copys = target.filter((r) => r.Speed == 2 && r.KindNo == 1);\r\n if (copys != null) {\r\n for (var i in copys) {\r\n var test1 = Object.assign(CreateDefalutMeasureInfoType(), copys[i]);\r\n test1.KindNo = MeasureHighKind.VIBRATION_SPD;\r\n test1.MesName = GetVibrationSpecialString(test1.KindNo, translation);\r\n test1.id = target.length + 1;\r\n target.push(test1);\r\n var test2 = Object.assign(CreateDefalutMeasureInfoType(), copys[i]);\r\n test2.KindNo = MeasureHighKind.VIBRATION_DSP;\r\n test2.MesName = GetVibrationSpecialString(test2.KindNo, translation);\r\n test2.id = target.length + 1;\r\n target.push(test2);\r\n //console.debug(['mesRt,test1,test2,mesRet', test1, test2, target]);\r\n }\r\n }\r\n //空行対応の為、デフォルト値を追加\r\n target.push(CreateDefalutMeasureInfoType());\r\n\r\n return target;\r\n};\r\n\r\n/**\r\n * 計測リストから、指定したグループデータと一致する計測データを取得\r\n * @param measureList 計測リスト\r\n * @param groupRow 選択グループアイテム\r\n * @param itemIndex ライン番号画面で表示できる3本のうちのどれなのかを指定\r\n * @returns\r\n */\r\nexport const FindMeasureInfoType =\r\n (measureList: MeasureInfoType[], groupRow: FFT_CMP_GROUP_SET, itemIndex: number)\r\n : MeasureInfoType | undefined => {\r\n\r\n var plcNo = 0;\r\n var setNo = 0;\r\n var kindInfo = 0;\r\n var kindNo = 0;\r\n\r\n //ライン番号によって取得するカラムを変更\r\n switch (itemIndex) {\r\n case 1:\r\n kindInfo = groupRow.KIND1;\r\n plcNo = groupRow.PLC_NO1;\r\n setNo = groupRow.SET_NO1;\r\n break;\r\n case 2:\r\n kindInfo = groupRow.KIND2;\r\n plcNo = groupRow.PLC_NO2;\r\n setNo = groupRow.SET_NO2;\r\n break;\r\n case 3:\r\n kindInfo = groupRow.KIND3;\r\n plcNo = groupRow.PLC_NO3;\r\n setNo = groupRow.SET_NO3;\r\n break;\r\n default:\r\n kindInfo = groupRow.KIND3;\r\n plcNo = 0;\r\n setNo = 0;\r\n }\r\n\r\n var ret: MeasureInfoType | undefined = undefined;\r\n //対象データ検索\r\n //特殊データの場合KindNoを特殊データに入れ替えて検索\r\n switch (kindInfo) {\r\n case 1:\r\n kindNo = MeasureHighKind.VIBRATION_SPD;\r\n ret = measureList.find((item) => item.PlcNo === plcNo && item.SetNo === setNo && item.KindNo === kindNo);\r\n break;\r\n case 2:\r\n kindNo = MeasureHighKind.VIBRATION_DSP;\r\n ret = measureList.find((item) => item.PlcNo === plcNo && item.SetNo === setNo && item.KindNo === kindNo);\r\n break;\r\n default:\r\n ret = measureList.find((item) => item.PlcNo === plcNo && item.SetNo === setNo && item.SetNo === setNo);\r\n break;\r\n\r\n }\r\n return ret;\r\n };\r\n\r\nexport const GetMeasureInfoType = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/MeasuleInfo\")\r\n .then((res) => res.json())\r\n .then((result: MeasureInfoType[]) => {\r\n if (MeasureInfoTypeListValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\nconst MeasureInfoTypeListValidate = (data: MeasureInfoType[]) => {\r\n\r\n if (data === undefined) return false;\r\n\r\n return true;\r\n};\r\n\r\nexport const GetDataTimeList = (plcNo: number, aiNo: number, chNo: number, targetDay: string, comparisonNo: string, envelopeNo: number): Promise => {\r\n\r\n const url = `api/FFTDataInfo/GetDataTimeList?plcNo=${plcNo}&&aiCardNo=${aiNo}&&channelNo=${chNo}&&targetTime=${targetDay}&&comparisonNo=${comparisonNo}`;\r\n console.debug(url);\r\n return new Promise((resolve, reject) => {\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: string[]) => {\r\n if (DataTimeListValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.error(`error : ${error}`);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\nconst DataTimeListValidate = (data: string[]) => {\r\n\r\n if (data === undefined) return false;\r\n\r\n return true;\r\n};\r\n\r\n//\r\n/**\r\n * CSVファイルの存在する時間リストを取得,\r\n * 失敗しても””を返す\r\n * @param plcNo\r\n * @param aiCardNo\r\n * @param channelNo\r\n * @param comparisonNo\r\n * @returns\r\n */\r\nexport const GetLatesTime = (envelopeNo: number, plcNo?: number, aiCardNo?: number, channelNo?: number, comparisonNo?: string): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const url = `api/FFTDataInfo/GetDataLatestTime?plcNo=${plcNo}&&aiCardNo=${aiCardNo}&&channelNo=${channelNo}&&comparisonNo=${comparisonNo}&&envelopeNo=${envelopeNo}`;\r\n console.debug(url);\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: string) => {\r\n console.debug(result);\r\n if (LatesTimeValidate(result)) resolve(result);\r\n resolve(\"\");\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n resolve(\"\");\r\n }\r\n );\r\n });\r\n};\r\n\r\nconst LatesTimeValidate = (data: string) => {\r\n console.debug(\"LatesTimeValidate ckeck\");\r\n if (data === undefined) return false;\r\n\r\n return true;\r\n};\r\n\r\n\r\nexport const GetJudgeSetting = (plcNo: number, aiNo: number, chNo: number): Promise => {\r\n\r\n const url = `api/JudgeSettingModels/${plcNo}/${aiNo}/${chNo}`;\r\n console.debug(url);\r\n return new Promise((resolve, reject) => {\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: JudgeSettingType[]) => {\r\n console.debug([\"GetJudgeSetting fetch\", result]);\r\n if (JudgeSettingValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\nconst JudgeSettingValidate = (data: JudgeSettingType[]) => {\r\n\r\n if (data === undefined) return false;\r\n\r\n return true;\r\n};\r\n\r\n/**\r\n * FFTデータ取得処理\r\n * @param plcNo \r\n * @param aiNo \r\n * @param chNo \r\n * @param targetDay \r\n * @param comparisonNo \r\n * @param envelopeNo \r\n * @returns \r\n */\r\nexport const GetChartData = (plcNo: number, aiNo: number, chNo: number, targetDay: string, comparisonNo: string, envelopeNo: number): Promise => {\r\n console.debug([\"envelopeNo\", envelopeNo]);\r\n const url = `api/FFTDataInfo/GetGraphLineData?plcNo=${plcNo}&&aiCardNo=${aiNo}&&channelNo=${chNo}&&targetTime=${targetDay}&&comparisonNo=${comparisonNo}&&envelopeNo=${envelopeNo}`;\r\n console.debug([\"url: \", url]);\r\n return new Promise((resolve, reject) => {\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: GraphLineDataType) => {\r\n //console.debug([\"GetChartData result\", result]);\r\n if (GetChartDataValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\nconst GetChartDataValidate = (data: GraphLineDataType) => {\r\n\r\n if (data === undefined) return false;\r\n\r\n return true;\r\n};\r\n/**\r\n * 側帯波診断 初期画面表示パラメータ取得\r\n * @param plcNo \r\n * @param aiNo \r\n * @param chNo \r\n * @param targetDay \r\n * @returns \r\n */\r\nexport const GetSideBandParam = (plcNo: number, aiNo: number, chNo: number, targetDay: string): Promise => {\r\n const url = `api/FFTDataInfo/GetSidebandParam?plcNo=${plcNo}&&aiCardNo=${aiNo}&&channelNo=${chNo}&&targetTime=${targetDay}`;\r\n console.debug(url);\r\n return new Promise((resolve, reject) => {\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: SideBandParam) => {\r\n if (GetSideBandParamValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n })\r\n .catch(reason => {\r\n console.log(reason);\r\n reject(reason);\r\n });\r\n });\r\n}\r\nconst GetSideBandParamValidate = (data: SideBandParam) => {\r\n\r\n if (data === undefined) return false;\r\n\r\n return true;\r\n}\r\n/**\r\n * 側帯波診断 計算結果取得\r\n * @param plcNo \r\n * @param aiNo \r\n * @param chNo \r\n * @param targetDay \r\n * @param band \r\n * @returns \r\n */\r\nexport const GetSideBandCalc = (plcNo: number, aiNo: number, chNo: number, targetDay: string, band: number): Promise => {\r\n const url = `api/FFTDataInfo/GetSidebandCalc?plcNo=${plcNo}&&aiCardNo=${aiNo}&&channelNo=${chNo}&&targetTime=${targetDay}&&band=${band}`;\r\n console.debug(url);\r\n return new Promise((resolve, reject) => {\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: SideBandCalc) => {\r\n if (GetSideBandCalcValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n })\r\n .catch(reason => {\r\n console.log(reason);\r\n reject(reason);\r\n });\r\n });\r\n}\r\nconst GetSideBandCalcValidate = (data: SideBandCalc) => {\r\n\r\n if (data === undefined) return false;\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * FFTグラフの横軸初期値取得処理\r\n * @param groupNo \r\n * @returns \r\n */\r\nexport const GetFFTInitialWidth = (groupNo: number): Promise => {\r\n const url = `api/FFTDataInfo/GetFFTInitialWidth?groupNo=${groupNo}`;\r\n console.debug(url);\r\n return new Promise((resolve, reject) => {\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: FFTGraphInitialWidth) => {\r\n console.debug(['GetFFTInitialWidth responce', result]);\r\n if (GetFFTInitialWidthValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n })\r\n .catch(reason => {\r\n console.log(reason);\r\n reject(reason);\r\n });\r\n });\r\n}\r\nconst GetFFTInitialWidthValidate = (data: FFTGraphInitialWidth) => {\r\n\r\n if (data === undefined) return false;\r\n\r\n return true;\r\n}","import React, { useEffect, useState } from 'react';\r\nimport NativeSelect from '@material-ui/core/NativeSelect';\r\nimport Box from '@material-ui/core/Box';\r\n\r\nexport type ComboBoxItemTypeS = {\r\n key: string;\r\n name: string;\r\n tag?: any;\r\n};\r\n\r\ntype Props = {\r\n itemList: ComboBoxItemTypeS[] | undefined;\r\n label: string;\r\n value?: string;\r\n itemBoxStyle?: string;\r\n labelStyle?: string;\r\n onChangeEvent?: (event: React.ChangeEvent<{ name?: string; value: unknown }>) => void;\r\n};\r\n\r\nexport const ItemComboBoxStr: React.FC = (props) => {\r\n return (\r\n \r\n
{props.label}
\r\n
\r\n \r\n {props.itemList?.map((row, index) => (\r\n \r\n ))}\r\n \r\n
\r\n
\r\n );\r\n};\r\nexport default ItemComboBoxStr;\r\n","import React, { useEffect, useState } from 'react';\r\nimport InputBase from '@material-ui/core/InputBase';\r\nimport Input from '@material-ui/core/Input';\r\nimport FormControl from '@material-ui/core/FormControl';\r\n\r\nexport type NumericEntryProps = {\r\n value: number;\r\n onChange?: (value: number) => void;\r\n fixed?: number;\r\n isNofixed?: boolean; //小数点有り無し設定\r\n className?: string;\r\n};\r\n\r\nconst NumericEntry: React.FC = (props: NumericEntryProps) => {\r\n const initVal = props.fixed ? props.value.toFixed(props.fixed) : props.value.toString();\r\n const isNoFixed = props.isNofixed === null ? false : props.isNofixed;\r\n const [val, setVal] = useState(initVal);\r\n\r\n useEffect(() => {\r\n setVal(initVal);\r\n }, [props.value]);\r\n\r\n return (\r\n \r\n {\r\n if (!isNoFixed) {\r\n const iv = parseFloat(e.target.value);\r\n if (!isNaN(iv)) {\r\n setVal(e.target.value);\r\n } else {\r\n setVal('0');\r\n }\r\n } else {\r\n const iv = parseInt(e.target.value, 10);\r\n if (!isNaN(iv)) {\r\n setVal(String(iv));\r\n } else {\r\n setVal('0');\r\n }\r\n }\r\n }}\r\n onBlur={(e) => {\r\n if (!isNoFixed) {\r\n const cv = parseFloat(val);\r\n if (!isNaN(cv)) {\r\n }\r\n setVal(props.fixed ? cv.toFixed(props.fixed) : cv.toString());\r\n if (props.onChange) {\r\n props.onChange(cv);\r\n }\r\n } else {\r\n const cv = parseInt(val, 10);\r\n if (!isNaN(cv)) {\r\n }\r\n setVal(props.fixed ? cv.toFixed(props.fixed) : cv.toString());\r\n if (props.onChange) {\r\n props.onChange(cv);\r\n }\r\n }\r\n }}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default NumericEntry;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { DialogAction } from '../../../function/useModal';\r\nimport { Button, Dialog, DialogTitle, DialogContent, DialogActions } from '@material-ui/core';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { GetSideBandParam, SideBandParam, GetSideBandCalc, SideBandCalc } from './FFTComparison';\r\nimport NumericEntry from '../../atoms/Input/NumericEntry';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ntype FFTSideBandDiagDialogProps = {\r\n dialog: DialogAction;\r\n plcNo: number;\r\n aiCard: number;\r\n aiCh: number;\r\n target: string;\r\n};\r\n\r\nexport type FFTSideBandDiagDialogResponse = {};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 300px)',\r\n },\r\n tableHeader: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n padding: '1px',\r\n minWidth: '80px',\r\n borderCollapse: `collapse`,\r\n whiteSpace: 'pre-line',\r\n },\r\n tableCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n orderBottomStyle: 'inset',\r\n borderLeftStyle: 'solid',\r\n borderRightStyle: 'solid',\r\n textAlign: 'center',\r\n minWidth: '80px',\r\n height: '8px',\r\n padding: '1px',\r\n },\r\n bandSet: {\r\n marginBottom: '4px',\r\n },\r\n entryBand: {\r\n width: '40px',\r\n },\r\n button: {\r\n width: '150px',\r\n },\r\n })\r\n);\r\n\r\nconst FFTSideBandDiagDialog: React.FC = (props: FFTSideBandDiagDialogProps) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [isOpen, setIsOpen] = useState(true);\r\n const [mode, setMode] = useState(true);\r\n const [freq, setFreq] = useState('');\r\n const [slide, setSlide] = useState('');\r\n const [bandWidth, setBandWidth] = useState('');\r\n const [lowerSideBand, setLowerSideBand] = useState('');\r\n const [upperSideBand, setUpperSideBand] = useState('');\r\n const [dbFreq, setDbFreq] = useState('');\r\n const [dbValue, setDbValue] = useState('');\r\n const [freqMinus, setFreqMinus] = useState('');\r\n const [dbMinus, setDbMinus] = useState('');\r\n const [dbMinusDiff, setDbMinusDiff] = useState('');\r\n const [freqPlus, setFreqPlus] = useState('');\r\n const [dbPlus, setDbPlus] = useState('');\r\n const [dbPlusDiff, setDbPlusDiff] = useState('');\r\n const [entBand, setEntBand] = useState(0);\r\n\r\n useEffect(() => {\r\n GetSideBandParam(props.plcNo, props.aiCard, props.aiCh, props.target).then((prm: SideBandParam) => {\r\n setFreq(prm.Freq);\r\n setSlide(prm.Slide);\r\n setBandWidth(prm.BandWidth);\r\n setLowerSideBand(prm.LowerSideBand);\r\n setUpperSideBand(prm.UpperSideBand);\r\n setDbFreq(prm.DBFreq);\r\n setDbValue(prm.DBValue);\r\n });\r\n }, [props.plcNo, props.aiCard, props.aiCh, props.target]);\r\n\r\n const calcSideband = (band: number) => {\r\n GetSideBandCalc(props.plcNo, props.aiCard, props.aiCh, props.target, entBand).then((prm: SideBandCalc) => {\r\n setFreqMinus(prm.FreqMinus);\r\n setDbMinus(prm.DBMinus);\r\n setDbMinusDiff(prm.DBDiffMinus);\r\n setFreqPlus(prm.FreqPlus);\r\n setDbPlus(prm.DBPlus);\r\n setDbPlusDiff(prm.DBDiffPlus);\r\n });\r\n };\r\n\r\n return (\r\n <>\r\n {}}\r\n onExited={(e) => {\r\n if (mode) {\r\n props.dialog.apply({});\r\n } else {\r\n props.dialog.cancel();\r\n }\r\n }}\r\n >\r\n {t('FFTSideBandDiagDialog.側帯波診断','側帯波診断')}\r\n \r\n
\r\n {t('FFTSideBandDiagDialog.帯域設定 ±','帯域設定 ±')}\r\n setEntBand(val)} />\r\n \r\n {\r\n calcSideband(entBand);\r\n }}\r\n >\r\n {t('FFTSideBandDiagDialog.算出','算出')}\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n {t('FFTSideBandDiagDialog.理論計算値','理論計算値')}\r\n \r\n \r\n f\r\n \r\n \r\n (1-2s)f\r\n \r\n \r\n (1+2s)f\r\n \r\n \r\n \r\n {t('FFTSideBandDiagDialog.f','f')} \r\n \r\n {t('FFTSideBandDiagDialog.すべり','すべり')} \r\n \r\n {t('FFTSideBandDiagDialog.2sf','2sf')} \r\n \r\n {t('FFTSideBandDiagDialog.-側','-側')}\r\n \r\n {t('FFTSideBandDiagDialog.+側','+側')}\r\n \r\n {t('FFTSideBandDiagDialog.周波数','周波数')}\r\n \r\n {t('FFTSideBandDiagDialog.dB値','dB値')}\r\n {t('FFTSideBandDiagDialog.周波数','周波数')}\r\n \r\n {t('FFTSideBandDiagDialog.dB値','dB値')}\r\n \r\n {t('FFTSideBandDiagDialog.差分','差分')}\r\n
\r\n {t('FFTSideBandDiagDialog.dB値','dB値')}\r\n
\r\n {t('FFTSideBandDiagDialog.周波数','周波数')}\r\n \r\n {t('FFTSideBandDiagDialog.dB値','dB値')}\r\n \r\n {t('FFTSideBandDiagDialog.差分','差分')}\r\n
\r\n {t('FFTSideBandDiagDialog.dB値','dB値')}\r\n
\r\n
\r\n
\r\n \r\n \r\n {freq}\r\n {slide}\r\n {bandWidth}\r\n {lowerSideBand}\r\n {upperSideBand}\r\n {dbFreq}\r\n {dbValue}\r\n {freqMinus}\r\n {dbMinus}\r\n {dbMinusDiff}\r\n {freqPlus}\r\n {dbPlus}\r\n {dbPlusDiff}\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n {\r\n setIsOpen(false);\r\n setMode(false);\r\n }}\r\n >\r\n {t('FFTSideBandDiagDialog.閉じる','閉じる')}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default FFTSideBandDiagDialog;\r\n","import React, { useEffect, useState } from 'react';\r\n\r\nimport ColorLineText from '../../atoms/Text/ColorLineText';\r\nimport { ItemComboBox, ComboBoxItemType } from '../../atoms/ComboBox/ItemComboBox';\r\nimport { ItemComboBoxStr, ComboBoxItemTypeS } from '../../atoms/ComboBox/ItemComboBoxStr';\r\nimport {\r\n MeasureInfoType,\r\n SelectDataType,\r\n GetDataTimeList,\r\n GetComparisonNo,\r\n CreateDefalutMeasureInfoType,\r\n} from './FFTComparison';\r\nimport ItemCalender from '../../atoms/Calendar/ItemCalender';\r\nimport dayjs from 'dayjs';\r\nimport ItemCheckBox from '../../atoms/CheckBox/ItemCheckBox';\r\nimport Button from '@material-ui/core/Button';\r\nimport { Table, TableBody, TableCell, TableRow } from '@material-ui/core';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { useModal } from '../../../function/useModal';\r\nimport FFTSideBandDiagDialog, { FFTSideBandDiagDialogResponse } from './FFTSideBandDiagDialog';\r\nimport DateInput from '../../atoms/Calendar/DateInput';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { IsValidKindOfFftCmp } from '../../../function/NameDevSetModel';\r\nimport Box from '@material-ui/core/Box';\r\nimport { GetVibrationSpecialString, MeasureHighKind, SpeedKind } from '../../../Constant';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n cellStyle: {\r\n padding: '0px',\r\n borderBottomWidth: '0px',\r\n fontSize: '12px',\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n },\r\n cellStyleNoBorder: {\r\n padding: '0px',\r\n borderBottomWidth: '0px',\r\n fontSize: '12px',\r\n cursor: 'pointer' /* マウスポインタの形状 */,\r\n },\r\n cellSelectStyle: {\r\n background: 'gold',\r\n padding: '0px',\r\n borderBottomWidth: '0px',\r\n fontSize: '12px',\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n },\r\n buttonStyle: {\r\n maxWidth: '180px',\r\n maxHeight: '25px',\r\n minWidth: '50px',\r\n minHeight: '25px',\r\n },\r\n sokuButtonStyle: {\r\n maxWidth: '200px',\r\n maxHeight: '25px',\r\n minWidth: '100px',\r\n minHeight: '25px',\r\n fontSize: '12px',\r\n padding: '1',\r\n },\r\n labelStyle: {\r\n fontSize: '12px',\r\n },\r\n itemBoxStyle: {\r\n fontSize: '12px',\r\n },\r\n })\r\n);\r\n\r\nexport type SelectItemRefreshData = {\r\n selectData: SelectDataType;\r\n mesInfoList: MeasureInfoType[];\r\n};\r\n\r\ntype Props = {\r\n refreshData: SelectItemRefreshData;\r\n selectData: SelectDataType;\r\n itemColor: string;\r\n measurementName: string;\r\n onChangeSelectDataEvent: (selectData: SelectDataType) => void;\r\n onChangeSelectDataDispUpDateEvent: (selectData: SelectDataType) => void;\r\n isBlankSelect: boolean;\r\n isUnitSelect: boolean;\r\n onClickUnitSelect: () => void;\r\n onAutoRangeSet: (data: boolean) => void;\r\n};\r\n\r\n//計測種別リスト作成\r\nconst createMeasureList = (data: MeasureInfoType[], isBlankSelect: boolean): ComboBoxItemType[] => {\r\n var ret: ComboBoxItemType[] = [];\r\n if (data != null) {\r\n //FFT表示として 有効化を返す\r\n var targetList = data.filter((r) => IsValidKindOfFftCmp(r.Speed, 0));\r\n var measureList = targetList.filter(\r\n (el: MeasureInfoType, index, self) =>\r\n self.findIndex((e: MeasureInfoType) => e.KindNo === el.KindNo && e.MesName === el.MesName) === index\r\n );\r\n console.debug(['CreateMeasureList', 'measureList', measureList, 'targetList', targetList]);\r\n for (var i in measureList) {\r\n ret.push({ index: measureList[i].id, name: measureList[i].MesName });\r\n }\r\n\r\n //空行追加\r\n if (isBlankSelect) ret.push({ index: -1, name: '' });\r\n }\r\n return ret;\r\n};\r\n\r\n//機器種別リスト作成\r\nconst createDevList = (data: MeasureInfoType[], measureId: number): ComboBoxItemType[] => {\r\n var ret: ComboBoxItemType[] = [];\r\n if (data != null) {\r\n var data = data.filter((r) => IsValidKindOfFftCmp(r.Speed, 0));\r\n\r\n var mes = data.find((item) => item.id === measureId);\r\n //speed2でfilter後、groupby\r\n var itemNameList = data.filter(\r\n (el: MeasureInfoType, index, self) =>\r\n self.findIndex((e: MeasureInfoType) => e.KindNo === mes?.KindNo && e.DevIndex === el.DevIndex) === index\r\n );\r\n for (var i in itemNameList) {\r\n ret.push({\r\n index: itemNameList[i].id,\r\n name: itemNameList[i].DevNo + itemNameList[i].DevName,\r\n });\r\n }\r\n }\r\n return ret;\r\n};\r\n\r\n/**\r\n * 項目種別リスト作成\r\n * @param data\r\n * @param measureId\r\n * @param devId\r\n * @returns\r\n */\r\nconst createItemList = (data: MeasureInfoType[], measureId: number, devId: number): ComboBoxItemType[] => {\r\n let ret: ComboBoxItemType[] = [];\r\n if (data === null) {\r\n return ret;\r\n }\r\n\r\n let targetDatas = data.filter((r) => IsValidKindOfFftCmp(r.Speed, 0));\r\n let mes = targetDatas.find((item) => item.id === measureId);\r\n let dev = targetDatas.find((item) => item.id === devId);\r\n\r\n //speed2でfilter後、groupby\r\n var itemNameList = targetDatas.filter(\r\n (el: MeasureInfoType, index, self) =>\r\n self.findIndex(\r\n (e: MeasureInfoType) =>\r\n e.KindNo === mes?.KindNo &&\r\n e.Speed === mes?.Speed &&\r\n e.DevIndex === dev?.DevIndex &&\r\n e.ItemNameNo === el.ItemNameNo &&\r\n e.ItemName === el.ItemName\r\n ) === index\r\n );\r\n\r\n for (var i in itemNameList) {\r\n ret.push({ index: itemNameList[i].id, name: itemNameList[i].ItemName });\r\n }\r\n return ret;\r\n};\r\n\r\n/**\r\n * 時間リスト作成\r\n * @param data\r\n * @returns\r\n */\r\nexport const createTimeList = (data: string[]): ComboBoxItemTypeS[] => {\r\n var ret: ComboBoxItemTypeS[] = [];\r\n for (var i in data) {\r\n var time = dayjs(data[i]).format('HH:mm:ss');\r\n ret.push({ key: time, name: time });\r\n }\r\n return ret;\r\n};\r\n\r\nconst FFTComparisonSelectItem: React.FC = (props) => {\r\n const { t, i18n } = useTranslation();\r\n const classes = useStyles();\r\n const [mesInfoList, setMesInfoList] = React.useState([]);\r\n\r\n const [mesList, setMesList] = React.useState([]);\r\n const [devList, setDevList] = React.useState([]);\r\n const [itemList, setItemList] = React.useState([]);\r\n const [envelopeList, setEnvelopeList] = React.useState([]);\r\n const [timeList, setTimeList] = useState();\r\n const [selectData, setSelectData] = useState(props.selectData);\r\n const [flgSideBand, actSideBand] = useModal();\r\n const [sbPlcNo, setSbPlcNo] = useState(0);\r\n const [sbAiCard, setSbAiCard] = useState(0);\r\n const [sbAiCh, setSbAiCh] = useState(0);\r\n const [sbTarget, setSbTarget] = useState('');\r\n\r\n /**\r\n * エンベロープ切替\r\n */\r\n useEffect(() => {\r\n let envelopeList: ComboBoxItemType[] = [];\r\n envelopeList.push({ index: 0, name: t('FFTComparisonSelectItem.なし', 'なし') });\r\n envelopeList.push({ index: 1, name: t('FFTComparisonSelectItem.あり', 'あり') });\r\n setEnvelopeList(envelopeList);\r\n }, []);\r\n\r\n /**\r\n * 計測種別\r\n * 振動(速度)、振動(変位)のみ多言語切替\r\n */\r\n const changeLangMeasCombos = (items: ComboBoxItemType[]) => {\r\n console.debug(['-- useEffect changeLangMeasCombos --', 'items', items, 'mesInfoList', mesInfoList]);\r\n if (items?.length) {\r\n //振動(速度)\r\n const fftSpd = items.find((item) =>\r\n mesInfoList.find(({ id, KindNo }) => item.index === id && KindNo === MeasureHighKind.VIBRATION_SPD)\r\n );\r\n if (fftSpd) {\r\n fftSpd.name = GetVibrationSpecialString(MeasureHighKind.VIBRATION_SPD, t);\r\n }\r\n //振動(変位)\r\n const fftDsp = items.find((item) =>\r\n mesInfoList.find(({ id, KindNo }) => item.index === id && KindNo === MeasureHighKind.VIBRATION_DSP)\r\n );\r\n if (fftDsp) {\r\n fftDsp.name = GetVibrationSpecialString(MeasureHighKind.VIBRATION_DSP, t);\r\n }\r\n\r\n console.debug(['fftSpd:', fftSpd, 'fftDsp:', fftDsp]);\r\n setMesList([...items]);\r\n }\r\n };\r\n\r\n // 言語切替\r\n useEffect(() => {\r\n console.debug(['FFTComparisonSetting useEffect i18n']);\r\n changeLangMeasCombos(mesList);\r\n }, [i18n.language]);\r\n\r\n //コンボボックスデータ作成\r\n useEffect(() => {\r\n var dt = props.refreshData;\r\n console.debug(['FFTComparisonSelectItem useEffect props.refreshData', dt]);\r\n if (dt !== undefined && dt.mesInfoList.length !== 0) {\r\n console.debug(dt.selectData);\r\n var sdt = dt.selectData;\r\n var mesList: ComboBoxItemType[] = [];\r\n var devList: ComboBoxItemType[] = [];\r\n var itemList: ComboBoxItemType[] = [];\r\n\r\n mesList = createMeasureList(dt.mesInfoList, props.isBlankSelect);\r\n //console.debug('FFTComparisonSelectItem useEffect -- mesList --', mesList);\r\n if (mesList.length !== 0) {\r\n devList = createDevList(dt.mesInfoList, sdt.mesid);\r\n }\r\n if (devList.length !== 0) {\r\n itemList = createItemList(dt.mesInfoList, sdt.mesid, sdt.devid);\r\n }\r\n setMesInfoList(dt.mesInfoList);\r\n setMesList(mesList);\r\n setDevList(devList);\r\n setItemList(itemList);\r\n\r\n upDateTimeList(dt.mesInfoList, sdt.mesid, sdt.devid, sdt.itemid, sdt.selectDate, sdt.selectTime);\r\n\r\n props.onChangeSelectDataEvent(dt.selectData);\r\n }\r\n }, [props.refreshData]);\r\n\r\n /**\r\n * 時間選択コンボボックスデータ更新\r\n * @param measureList\r\n * @param mesid\r\n * @param devid\r\n * @param itemid\r\n * @param date\r\n * @param time\r\n * @returns\r\n */\r\n const upDateTimeList = (\r\n measureList: MeasureInfoType[],\r\n mesid: number,\r\n devid: number,\r\n itemid: number,\r\n date: Date,\r\n time: string\r\n ) => {\r\n const initSelectData = { ...selectData, mesid: -1, devid: -1, itemid: -1, selectDate: date, selectTime: '' };\r\n if (measureList.length === 0) {\r\n setSelectData({ ...initSelectData });\r\n props.onChangeSelectDataEvent(initSelectData);\r\n return;\r\n }\r\n\r\n let mes = measureList.find((item) => item.id === mesid);\r\n let dev = measureList.find((item) => item.id === devid);\r\n let itemdt = measureList.find((item) => item.id === itemid);\r\n let day = dayjs(date).format('YYYY-MM-DD');\r\n\r\n if (mes === undefined || dev === undefined || itemdt === undefined) {\r\n setSelectData({ ...initSelectData });\r\n props.onChangeSelectDataEvent(initSelectData);\r\n return;\r\n }\r\n\r\n //対象レコード取得\r\n let target = measureList.find((item) => {\r\n return item.KindNo === mes?.KindNo && item.DevIndex === dev?.DevIndex && item.ItemNameNo === itemdt?.ItemNameNo;\r\n });\r\n\r\n if (target === undefined) {\r\n setSelectData({ ...initSelectData });\r\n props.onChangeSelectDataEvent(initSelectData);\r\n return;\r\n }\r\n\r\n let comparisonNo = GetComparisonNo(target);\r\n\r\n //時間リスト取得\r\n GetDataTimeList(\r\n Number(target.PlcNo),\r\n Number(target.AiCard),\r\n Number(target.AiCh),\r\n day,\r\n comparisonNo,\r\n selectData.envelopeNo\r\n ).then((ret) => {\r\n if (ret) {\r\n let timeList = createTimeList(ret);\r\n\r\n if (timeList.length === 0) {\r\n time = '';\r\n } else {\r\n if (time !== '') {\r\n let t = timeList.find((row) => row.key === time);\r\n if (t === undefined) {\r\n time = timeList[0].key;\r\n }\r\n } else {\r\n time = timeList[0].key;\r\n }\r\n }\r\n //時間でソートを行う\r\n timeList.sort(function (a, b) {\r\n if (a.name > b.name) {\r\n return 1;\r\n } else {\r\n return -1;\r\n }\r\n });\r\n\r\n setTimeList(timeList);\r\n\r\n let tmp = { ...selectData, mesid: mesid, devid: devid, itemid: itemid, selectDate: date, selectTime: time };\r\n setSelectData({ ...tmp });\r\n props.onChangeSelectDataEvent(tmp);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n *計測種別変更event\r\n * @param event\r\n */\r\n const onChangeMesSelect = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n props.onAutoRangeSet(true);\r\n if (Number(event.target.value) == -1) {\r\n let devList = createDevList(mesInfoList, -1);\r\n let itemList = createItemList(mesInfoList, -1, -1);\r\n setDevList(devList);\r\n setItemList(itemList);\r\n upDateTimeList(mesInfoList, -1, -1, -1, selectData.selectDate, '');\r\n } else {\r\n var mes = mesInfoList.find((item) => item.id === Number(event.target.value));\r\n if (mes !== undefined) {\r\n var devList = createDevList(mesInfoList, mes.id);\r\n var itemList = createItemList(mesInfoList, mes.id, devList[0].index);\r\n setDevList(devList);\r\n setItemList(itemList);\r\n upDateTimeList(mesInfoList, mes.id, devList[0].index, itemList[0].index, selectData.selectDate, '');\r\n }\r\n }\r\n };\r\n\r\n /**\r\n *機器選択変更event\r\n * @param event\r\n */\r\n const onChangeDevSelect = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n var mes = mesInfoList.find((item) => item.id === selectData.mesid);\r\n var dev = mesInfoList.find((item) => item.id === Number(event.target.value));\r\n if (mes !== undefined && dev !== undefined) {\r\n var itemList = createItemList(mesInfoList, mes.id, dev.id);\r\n setItemList(itemList);\r\n upDateTimeList(mesInfoList, mes.id, dev.id, itemList[0].index, selectData.selectDate, '');\r\n }\r\n };\r\n\r\n /**\r\n *項目選択変更event\r\n * @param event\r\n */\r\n const onChangeItemSelect = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n var mes = mesInfoList.find((item) => item.id === selectData.mesid);\r\n var dev = mesInfoList.find((item) => item.id === selectData.devid);\r\n var itm = mesInfoList.find((item) => item.id === Number(event.target.value));\r\n if (mes !== undefined && dev !== undefined && itm !== undefined) {\r\n upDateTimeList(mesInfoList, mes.id, dev.id, itm.id, selectData.selectDate, '');\r\n }\r\n };\r\n\r\n /**\r\n * エンベロープ変更event\r\n * @param event\r\n */\r\n const onChangeEnvelopeSelect = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n // console.debug(['mes--', mes]);\r\n var tmp = { ...selectData, envelopeNo: Number(event.target.value) };\r\n setSelectData({ ...tmp });\r\n\r\n console.debug(['handleTimeSelectChange - old,new', selectData, tmp]);\r\n props.onChangeSelectDataEvent(tmp);\r\n };\r\n\r\n /**\r\n * カレンダー選択変更event\r\n */\r\n const onCnageSelectCalendarValue = (value: string) => {\r\n var selectDay = new Date(value);\r\n upDateTimeList(mesInfoList, selectData.mesid, selectData.devid, selectData.itemid, selectDay, '');\r\n };\r\n /**\r\n * 時間変更event\r\n * @param event\r\n */\r\n const onChangeSelectTime = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n var time = timeList?.find((row) => row.key === event.target.value);\r\n if (time) {\r\n var tmp = { ...selectData, selectTime: time.key };\r\n setSelectData({ ...tmp });\r\n console.debug(['handleTimeSelectChange - old,new', selectData, tmp]);\r\n props.onChangeSelectDataEvent(tmp);\r\n }\r\n };\r\n\r\n /**\r\n *表示チェックボックス状態変更時\r\n */\r\n const handleIsShowChange = () => {\r\n var tmp = { ...selectData, isShow: !selectData.isShow };\r\n setSelectData({ ...tmp });\r\n props.onChangeSelectDataDispUpDateEvent(tmp);\r\n };\r\n\r\n const handleIsSelectChange = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n var tmp = { ...selectData, isSelect: !selectData.isSelect };\r\n setSelectData({ ...tmp });\r\n props.onChangeSelectDataEvent(tmp);\r\n };\r\n\r\n /**\r\n * 閾値設定\r\n * @param event\r\n */\r\n const handleIsThresholdChange = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n var tmp = { ...selectData, isThreshold: !selectData.isThreshold };\r\n setSelectData({ ...tmp });\r\n props.onChangeSelectDataDispUpDateEvent(tmp);\r\n };\r\n\r\n const sideBandDiag = flgSideBand ? (\r\n \r\n ) : null;\r\n\r\n /**\r\n * エンペローブ表示設定\r\n * @returns \r\n */\r\n const envelopeDisp = () => {\r\n var mes = mesInfoList.find((item) => item.id === selectData.mesid);\r\n if (mes?.KindNo == MeasureHighKind.VIBRATION && mes.Speed == SpeedKind.SPEED_KIND_HIGHT) {\r\n return (\r\n \r\n )\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n handleIsShowChange()} />\r\n \r\n {\r\n props.onClickUnitSelect();\r\n }}\r\n >\r\n {props.measurementName} \r\n \r\n \r\n
\r\n \r\n \r\n handleIsThresholdChange(e)}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n handleIsSelectChange(e)}\r\n />\r\n \r\n \r\n {envelopeDisp()}\r\n \r\n \r\n \r\n \r\n {sideBandDiag}\r\n \r\n );\r\n};\r\n\r\nexport default FFTComparisonSelectItem;\r\n","import React, { useEffect } from 'react';\r\nimport { GraphData, GraphPoint } from './FFTComparisonChart';\r\nimport { Table, TableBody, TableCell, TableHead, TableRow } from '@material-ui/core';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { useTranslation } from 'react-i18next';\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableStyle: {\r\n borderWidth: '1px',\r\n borderColor: '#000000',\r\n borderStyle: 'solid',\r\n borderCollapse: `collapse`,\r\n },\r\n headerStyle: {\r\n borderWidth: '1px',\r\n borderColor: '#000000',\r\n borderStyle: 'solid',\r\n padding: '0px',\r\n textAlign: 'center',\r\n },\r\n tdStyle: {\r\n borderWidth: '1px',\r\n borderColor: '#000000',\r\n borderStyle: 'solid',\r\n padding: '2px',\r\n },\r\n })\r\n);\r\n\r\nexport type FrequencyDataType = {\r\n frequency: number;\r\n value: number;\r\n};\r\n\r\nconst getFrequencyData = (data: GraphData): GraphPoint[] => {\r\n type tmpType = {\r\n prev: GraphPoint;\r\n current: GraphPoint;\r\n next: GraphPoint;\r\n };\r\n var tmpList: tmpType[] = [];\r\n var pTempList: GraphPoint[] = [];\r\n\r\n //前、今、次の3点の組み合わせのコレクションを作成\r\n if (data !== undefined) {\r\n data.points.pop();\r\n var a = data.points;\r\n var b = data.points.slice(1);\r\n var c = data.points.slice(2);\r\n for (var i in c) {\r\n tmpList.push({ prev: a[i], current: b[i], next: c[i] });\r\n }\r\n\r\n const fill = tmpList.filter((v, index) => {\r\n return v.prev.yValue < v.current.yValue && v.next.yValue < v.current.yValue;\r\n });\r\n\r\n //カレントデータ取得\r\n\r\n for (var j in fill) {\r\n pTempList.push(fill[j].current);\r\n }\r\n\r\n //ソート降順\r\n pTempList.sort(function (a, b) {\r\n if (a.yValue > b.yValue) return -1;\r\n if (a.yValue < b.yValue) return 1;\r\n return 0;\r\n });\r\n\r\n // console.debug('==TEST==');\r\n // console.debug(`==fill==count ${fill.length} `);\r\n // console.debug(pTempList);\r\n }\r\n return pTempList;\r\n};\r\n\r\ntype Props = {\r\n graphData: GraphData | undefined;\r\n};\r\n\r\nconst FFTComparisonFrequency: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n\r\n const [frequencyDataList, setFrequencyDataList] = React.useState([]);\r\n\r\n useEffect(() => {\r\n var dt: FrequencyDataType[] = [];\r\n dt.push({ frequency: 0, value: 0 });\r\n dt.push({ frequency: 0, value: 0 });\r\n dt.push({ frequency: 0, value: 0 });\r\n dt.push({ frequency: 0, value: 0 });\r\n dt.push({ frequency: 0, value: 0 });\r\n setFrequencyDataList(dt);\r\n }, []);\r\n\r\n useEffect(() => {\r\n var dt: FrequencyDataType[] = [];\r\n dt.push({ frequency: 0, value: 0 });\r\n dt.push({ frequency: 0, value: 0 });\r\n dt.push({ frequency: 0, value: 0 });\r\n dt.push({ frequency: 0, value: 0 });\r\n dt.push({ frequency: 0, value: 0 });\r\n\r\n if (props.graphData) {\r\n var points = getFrequencyData(props.graphData);\r\n for (let i = 0; i < dt.length; ++i) {\r\n if (points.length > i) {\r\n dt[i].frequency = points[i].xValue;\r\n dt[i].value = points[i].yValue;\r\n }\r\n }\r\n }\r\n setFrequencyDataList(dt);\r\n }, [props.graphData]);\r\n\r\n return (\r\n \r\n \r\n \r\n No.\r\n {t('FFTComparisonFrequency.周波数(Hz)', '周波数(Hz)')}\r\n {t('FFTComparisonFrequency.値', '値')}\r\n \r\n \r\n \r\n {frequencyDataList?.map((row, index) => (\r\n \r\n {index + 1}\r\n {row.frequency === 0 ? '' : row.frequency.toFixed(1)}\r\n \r\n {row.value === 0 ? '' : row.value.toExponential(3)}\r\n \r\n \r\n ))}\r\n \r\n \r\n {t('FFTComparisonFrequency.OA値', 'OA値:')}\r\n {props.graphData != null ? props.graphData.oaValue : ''}\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default FFTComparisonFrequency;\r\n","import React, { useEffect, useState, useMemo } from 'react';\r\nimport FFTComparisonSelectItem, { SelectItemRefreshData } from './FFTComparisonSelectItem';\r\nimport FFTComparisonFrequency from './FFTComparisonFrequency';\r\nimport { SelectDataType } from './FFTComparison';\r\nimport { GraphData } from './FFTComparisonChart';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { Table, TableBody, TableCell, TableRow } from '@material-ui/core';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tdStyle: {\r\n padding: 0,\r\n },\r\n })\r\n);\r\n\r\ntype Props = {\r\n refreshData: SelectItemRefreshData;\r\n selectData: SelectDataType;\r\n measurementName: string;\r\n graphData: GraphData | undefined;\r\n onChangeSelectDataEvent: (selectData: SelectDataType) => void;\r\n onChangeSelectDataDispUpDateEvent: (selectData: SelectDataType) => void;\r\n isBlankSelect: boolean;\r\n isUnitSelect: boolean;\r\n onClickUnitSelect: () => void;\r\n onAutoRangeSet: (data: boolean) => void;\r\n};\r\n\r\nconst FFTComparisonInfo: React.FC = (props) => {\r\n const classes = useStyles();\r\n\r\n //console.debug(['FFTComparisonInfo - 画面描画開始 -', props]);\r\n return (\r\n \r\n \r\n \r\n \r\n props.onChangeSelectDataEvent(e)}\r\n onChangeSelectDataDispUpDateEvent={(e) => props.onChangeSelectDataDispUpDateEvent(e)}\r\n itemColor={props.selectData.lineColor}\r\n isBlankSelect={props.isBlankSelect}\r\n isUnitSelect={props.isUnitSelect}\r\n onClickUnitSelect={() => {\r\n props.onClickUnitSelect();\r\n }}\r\n onAutoRangeSet={props.onAutoRangeSet}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default FFTComparisonInfo;\r\n","import React, { useEffect, useContext } from 'react';\r\nimport { ItemComboBox, ComboBoxItemType } from '../../atoms/ComboBox/ItemComboBox';\r\nimport RangeInputNumber from '../../molecules/Range/RangeInputNumber';\r\nimport Radio from '@material-ui/core/Radio';\r\n\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { TFunction, useTranslation } from 'react-i18next';\r\nimport { AppContext } from '../../../App';\r\nimport { FFT_MAX_VALUE_ONPRE, FFT_MAX_VALUE_CLUDO } from '../../../Constant';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableStyle: {\r\n fontSize: '13px',\r\n },\r\n labelStyle: {\r\n fontSize: '13px',\r\n },\r\n itemBoxStyle: {\r\n fontSize: '13px',\r\n },\r\n })\r\n);\r\n\r\nexport type RangeType = {\r\n id: number;\r\n min: number;\r\n max: number;\r\n splitsCount: number;\r\n};\r\n\r\nexport type RangeSelectDataType = {\r\n rengeId: number;\r\n rengeMin: number;\r\n rengeMax: number;\r\n dbId: number;\r\n dbMin: number;\r\n dbMax: number;\r\n selectAxis: string;\r\n yMin: number; //Y軸設定最小値\r\n yMax: number; //Y軸設定最大値\r\n holdLinearValueMin: number;\r\n holdLinearValueMax: number;\r\n yUnit: string; //Y軸の範囲\r\n};\r\n\r\n//計測種別リスト作成\r\nconst createRengeList = (data: RangeType[], t: TFunction<'translation'>): ComboBoxItemType[] => {\r\n var ret: ComboBoxItemType[] = [];\r\n if (data != null) {\r\n for (var i in data) {\r\n ret.push({\r\n index: data[i].id,\r\n name: data[i].id === -1 ? t('FFTComparisonChartSetting.任意', '任意') : `${data[i].min} ~ ${data[i].max}`,\r\n });\r\n }\r\n }\r\n return ret;\r\n};\r\n\r\ntype Props = {\r\n rangeSelectData: RangeSelectDataType;\r\n onChangeRangeSelectDataEvent: (selectData: RangeSelectDataType) => void;\r\n};\r\n\r\nconst FFTComparisonChartSetting: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n console.debug('FFTComparisonChartSetting -- props', props);\r\n\r\n const [frequencyRangeList, setFrequencyRangeList] = React.useState([]);\r\n const [frequencyRengeCmd, setFrequencyRengeCmd] = React.useState([]);\r\n\r\n const [dBRangeList, setdBRangeList] = React.useState([]);\r\n const [dBRangeCmd, setdBRangeCmd] = React.useState([]);\r\n\r\n const [rangeSelectData, setRangeSelectData] = React.useState(props.rangeSelectData);\r\n\r\n const [selectAxis, setSelectAxis] = React.useState('r');\r\n const { login } = useContext(AppContext);\r\n\r\n useEffect(() => {\r\n var dt: RangeType[] = [];\r\n dt.push({ id: 1, min: 0, max: 100, splitsCount: 10 });\r\n dt.push({ id: 2, min: 0, max: 500, splitsCount: 10 });\r\n dt.push({ id: 3, min: 0, max: 600, splitsCount: 10 });\r\n dt.push({ id: -1, min: 0, max: 0, splitsCount: 0 });\r\n setFrequencyRangeList(dt);\r\n setRangeSelectData({ ...rangeSelectData, rengeId: -1, rengeMin: 0, rengeMax: 100 });\r\n\r\n var dt2: RangeType[] = [];\r\n dt2.push({ id: 1, min: -80, max: 0, splitsCount: 4 });\r\n dt2.push({ id: 2, min: -100, max: 0, splitsCount: 5 });\r\n setdBRangeList(dt2);\r\n\r\n setFrequencyRengeCmd(createRengeList(dt, t));\r\n setdBRangeCmd(createRengeList(dt2, t));\r\n }, []);\r\n\r\n useEffect(() => {\r\n setRangeSelectData({ ...props.rangeSelectData });\r\n }, [props.rangeSelectData]);\r\n useEffect(() => {\r\n //console.debug('tyousa - useEffect - rangeSelectData', rangeSelectData);\r\n //props.onChangeRangeSelectDataEvent(rangeSelectData);\r\n }, [rangeSelectData]);\r\n\r\n const ChangeRRengeSelect = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n var renge = frequencyRangeList.find((item) => item.id === Number(event.target.value));\r\n if (renge !== undefined) {\r\n if (renge.id === -1) {\r\n renge.min = rangeSelectData.rengeMin;\r\n renge.max = rangeSelectData.rengeMax;\r\n }\r\n rangeSelectData.rengeId = renge.id;\r\n rangeSelectData.rengeMin = renge.min;\r\n rangeSelectData.rengeMax = renge.max;\r\n setRangeSelectData({ ...rangeSelectData });\r\n props.onChangeRangeSelectDataEvent(rangeSelectData);\r\n }\r\n };\r\n\r\n const ChangeBRengeSelect = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n var renge = dBRangeList.find((item) => item.id === Number(event.target.value));\r\n //console.debug(['tyousa ChangeBRengeSelect', renge, selectAxis]);\r\n if (renge !== undefined) {\r\n rangeSelectData.dbId = renge.id;\r\n rangeSelectData.dbMin = renge.min;\r\n rangeSelectData.dbMax = renge.max;\r\n\r\n setRangeSelectData({ ...rangeSelectData });\r\n props.onChangeRangeSelectDataEvent(rangeSelectData);\r\n }\r\n };\r\n\r\n /**\r\n * レンジ設定変更event\r\n * @param min\r\n * @param max\r\n * @returns\r\n */\r\n const onChangeInputRenge = (min: number, max: number) => {\r\n if (rangeSelectData.rengeMin === min && rangeSelectData.rengeMax === max) {\r\n return;\r\n }\r\n console.debug(['onChangeInputRenge', min, max, rangeSelectData]);\r\n if (rangeSelectData.rengeId === -1) {\r\n let tmp = { ...rangeSelectData, rengeMin: min, rengeMax: max };\r\n setRangeSelectData({ ...tmp });\r\n props.onChangeRangeSelectDataEvent(tmp);\r\n }\r\n };\r\n\r\n /**\r\n * Y軸レンジ変更event\r\n * @param min\r\n * @param max\r\n * @returns\r\n */\r\n const onChangeYRenge = (min: number, max: number) => {\r\n if (rangeSelectData.yMin === min && rangeSelectData.yMax === max) {\r\n return;\r\n }\r\n console.debug(['onChangeYRenge', min, max, rangeSelectData]);\r\n let tmp = { ...rangeSelectData, yMin: min, yMax: max };\r\n setRangeSelectData({ ...tmp });\r\n props.onChangeRangeSelectDataEvent(tmp);\r\n };\r\n\r\n const changeAxis = (event: React.ChangeEvent) => {\r\n //console.debug('■■■tyousa changeAxis() Start val:', event.target.value, rangeSelectData);\r\n\r\n setSelectAxis(event.target.value);\r\n let tmp = { ...rangeSelectData, selectAxis: event.target.value };\r\n setRangeSelectData({ ...tmp });\r\n props.onChangeRangeSelectDataEvent(tmp);\r\n //console.debug('■■■tyousa changeAxis() End');\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
{t('FFTComparisonChartSetting.周波数軸範囲', '周波数軸範囲:')}\r\n \r\n Hz
{t('FFTComparisonChartSetting.グラフ縦軸範囲', 'グラフ縦軸範囲:')}\r\n \r\n {rangeSelectData.yUnit}
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
{t('FFTComparisonChartSetting.振動幅', '振動幅:')}\r\n \r\n {t('FFTComparisonChartSetting.リニア', 'リニア')}\r\n \r\n dB\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default FFTComparisonChartSetting;\r\n","import React, { useEffect, useState, useMemo, useRef } from 'react';\r\nimport { LineChart, Line, XAxis, YAxis, CartesianGrid, ResponsiveContainer, Label, Tooltip } from 'recharts';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\n\r\nimport {\r\n MeasureInfoType,\r\n SelectDataType,\r\n GetJudgeSetting,\r\n GetChartData,\r\n GraphLineDataType,\r\n JudgeSettingType,\r\n GetComparisonNo,\r\n} from './FFTComparison';\r\nimport dayjs from 'dayjs';\r\nimport * as Constant from '../../../Constant';\r\nimport { ToValueMaxRound, ToValueMinRound } from '../../../function/CalculationModel';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { CcTypKind } from '../../../Constant';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n customTooltip: {\r\n background: '#FFFFEE',\r\n fontSize: '14px',\r\n padding: '10px 10px 0px 20px',\r\n },\r\n })\r\n);\r\n\r\nexport type GraphDispSetting = {\r\n yMin: number;\r\n yMax: number;\r\n xMin: number;\r\n xMax: number;\r\n selectAxis: string;\r\n isPileup: boolean;\r\n\r\n isThreshold1: boolean;\r\n isThreshold2: boolean;\r\n isThreshold3: boolean;\r\n\r\n isShow1: boolean;\r\n isShow2: boolean;\r\n isShow3: boolean;\r\n\r\n unitSelectIndex: number;\r\n};\r\n\r\nexport type GraphData = {\r\n lineNo: number;\r\n lineName: string;\r\n points: GraphPoint[];\r\n valueUpper: number;\r\n valueUpperLimit: number;\r\n selectFlg: boolean;\r\n infoColor: string;\r\n yValueMax: number; // 表示対象の範囲内での最大値\r\n yValueMin: number; // 表示対象の範囲内での最大値\r\n tooltipColor: string;\r\n /**\r\n * OA値\r\n */\r\n oaValue: string;\r\n};\r\nexport type GraphPoint = {\r\n xValue: number;\r\n yValue: number;\r\n};\r\n\r\nexport type ChartUpDateInfo = {\r\n line1: SelectDataType;\r\n line2: SelectDataType;\r\n line3: SelectDataType;\r\n mesList: MeasureInfoType[];\r\n isInitDisp: boolean; //初期表示フラグ(画面遷移から来た時の表示時にtrue,ボタン表示時false)\r\n};\r\n\r\ntype GraphSetting = {\r\n yMin: number;\r\n yMax: number;\r\n xMin: number;\r\n xMax: number;\r\n backColor: string;\r\n memoryFontColor: string;\r\n yUnit: string;\r\n xUnit: string;\r\n yUnitColor: string;\r\n xUnitColor: string;\r\n gridColor: string;\r\n};\r\n\r\ntype FetchDataType = {\r\n lineDatas: GraphLineDataType[];\r\n chartDataInfo: ChartUpDateInfo;\r\n};\r\n\r\ntype Props = {\r\n chartInfo: ChartUpDateInfo;\r\n graphDispSetting: GraphDispSetting;\r\n onChangeGraphDataEvent: (GraphDatas: GraphData[], yMin: number, yMax: number, yUnit: string) => void;\r\n chartContainerStyle: string;\r\n updateLoadginState: (value: boolean) => void;\r\n isFFTAutoRangeRef: boolean;\r\n onFFTAutoRamgeSet: (data: boolean) => void;\r\n};\r\n\r\n/**\r\n * 重、軽故障ライン DB差分時値変換処理\r\n * @param valueMax\r\n * @param value\r\n * @param isdb\r\n * @returns\r\n */\r\nconst getLIMValue = (value: number, isdb: boolean): number => {\r\n if (isdb) {\r\n return value === 0 ? 0 : value * -1;\r\n } else {\r\n return value;\r\n }\r\n};\r\n\r\n\r\n\r\n/**\r\n *グラフのポイントリストを作成して返します\r\n * @param data\r\n * @param minValue\r\n * @param maxValue\r\n * @param size\r\n * @param samplingRate\r\n * @param isdb\r\n * @returns\r\n */\r\n\r\nconst createChartPoints = (\r\n data: GraphLineDataType,\r\n minValue: number,\r\n maxValue: number,\r\n size: number,\r\n samplingRate: number,\r\n isdb: boolean\r\n): Array => {\r\n //console.debug(['==createChartPoints==', data]);\r\n var points = new Array();\r\n var skip = Math.ceil(minValue * size * samplingRate * 2);\r\n var count = Math.ceil((maxValue - minValue) * size * samplingRate * 2) + 1;\r\n var yValueMax = Math.max(...data.YValues?.map((p) => p));\r\n\r\n var index = 0;\r\n for (let i = 0; i < data.XValues.length; i++) {\r\n if (skip <= i) {\r\n if (index <= count) {\r\n var x = Number(data.XValues[i]);\r\n var y = data.YValues[i];\r\n if (isdb) {\r\n y = y === 0 ? 0 : Math.log10(Math.abs(y) / yValueMax) * 20;\r\n }\r\n points.push({\r\n xValue: x,\r\n yValue: y,\r\n });\r\n index++;\r\n }\r\n }\r\n }\r\n return points;\r\n};\r\n\r\n/**\r\n * グラフの線データを更新します\r\n * @param data グラフラインデータ\r\n * @param lineColor\r\n * @param xmin\r\n * @param xmax\r\n * @param isdb\r\n * @returns\r\n */\r\nconst upDateGraphData = (\r\n lineNo: number,\r\n data: GraphLineDataType,\r\n lineColor: string,\r\n xmin: number,\r\n xmax: number,\r\n isdb: boolean,\r\n isShow: boolean\r\n): Promise => {\r\n return new Promise((resolve, reject) => {\r\n if (data !== undefined) {\r\n var item: GraphData = {\r\n lineNo: lineNo,\r\n valueUpper: 0,\r\n valueUpperLimit: 0,\r\n selectFlg: isShow,\r\n points: [],\r\n infoColor: lineColor,\r\n tooltipColor: lineColor,\r\n lineName: data.ItemName,\r\n yValueMax: 0,\r\n yValueMin: 0,\r\n oaValue: '',\r\n };\r\n\r\n var points = createChartPoints(data, xmin, xmax, data.SignalSize, data.SampleSpan, isdb);\r\n item.points = points;\r\n item.oaValue = data.OAValue;\r\n console.debug(item);\r\n resolve(item);\r\n }\r\n resolve(undefined);\r\n });\r\n};\r\n\r\n/**\r\n *\r\n * @param mesList\r\n * @param selectDt\r\n * @returns\r\n */\r\nconst getTargetData = (\r\n mesList: MeasureInfoType[],\r\n selectDt: SelectDataType\r\n): Promise => {\r\n return new Promise((resolve, reject) => {\r\n var mes = mesList.find((item) => item.id === selectDt.mesid);\r\n var dev = mesList.find((item) => item.id === selectDt.devid);\r\n var itm = mesList.find((item) => item.id === selectDt.itemid);\r\n var day = dayjs(selectDt.selectDate).format('YYYY-MM-DD');\r\n var time = selectDt.selectTime;\r\n var enve = selectDt.envelopeNo;\r\n\r\n if (time === undefined) resolve(undefined);\r\n\r\n var target = mesList.find(\r\n (item) => item.KindNo === mes?.KindNo && item.DevIndex === dev?.DevIndex && item.ItemNameNo === itm?.ItemNameNo //&& item.EnveNameNo === itm?.ItemNameNo\r\n );\r\n\r\n var comparisonNo = GetComparisonNo(target);\r\n\r\n if (target !== undefined) {\r\n //console.debug([\"★test target1 \", target]);\r\n if (target.PlcNo == 0) {\r\n resolve(undefined);\r\n }\r\n GetChartData(target.PlcNo, target.AiCard, target.AiCh, `${day} ${time}`, comparisonNo, enve).then((ret) => {\r\n if (ret !== undefined) {\r\n //console.debug(['GetTargetDataEx End', ret]);\r\n ret.lineNo = selectDt.lineNo;\r\n resolve(ret);\r\n } else {\r\n reject('Invalidate response');\r\n }\r\n });\r\n } else {\r\n reject('Invalidate response');\r\n }\r\n });\r\n};\r\n\r\n/**\r\n * 計測種別で単位を更新します。\r\n * @param kindNo 計測種別\r\n * @param unit 単位\r\n * @returns\r\n */\r\nconst updateUnitByMesKind = (/* speed: number, */ kindNo: number, unit: string): string => {\r\n //if (speed == SpeedKind.High)\r\n switch (kindNo) {\r\n case Constant.MeasureHighKind.VIBRATION_SPD:\r\n // 振動(速度)\r\n return 'mm/s';\r\n case Constant.MeasureHighKind.VIBRATION_DSP:\r\n // 振動(変位)\r\n return 'µm';\r\n }\r\n //}\r\n return unit;\r\n};\r\n\r\n/**\r\n * FFT比較画面のチャートobject\r\n * @param props\r\n * @returns\r\n */\r\nconst FFTComparisonChart: React.FC = (props) => {\r\n useEffect(() => {\r\n console.debug(['FFTComparisonChart ', props]);\r\n });\r\n\r\n const { t } = useTranslation();\r\n\r\n const classes = useStyles();\r\n const { onChangeGraphDataEvent } = props;\r\n // 1本分のグラフデータの配列\r\n const [graphData, setGraphData] = useState([]);\r\n // 閾値グラフデータ\r\n const [thresholdgraphData, setThresholdgraphData] = useState([]);\r\n // 閾値グラフラインをホールド\r\n const thresholdgraphLine = useRef(null);\r\n // 閾値グラフのカラー\r\n const thresholdgrapColor = useRef('black');\r\n // 閾値グラフのy軸の値\r\n const thresholdgraphYPoint = useRef(null);\r\n // グラフデータを作成するための情報\r\n const [fetchData, setFetchData] = useState({\r\n lineDatas: [],\r\n chartDataInfo: props.chartInfo,\r\n });\r\n\r\n // グラフ表示スタイル設定\r\n const [graphSetting, SetGraphSetting] = useState({\r\n yMin: 0,\r\n yMax: 1,\r\n xMin: 0,\r\n xMax: 100,\r\n backColor: Constant.GraphThemeLight.BACK_COLOR,\r\n memoryFontColor: Constant.GraphThemeLight.MEMORY_FONT_COLOR,\r\n yUnit: 'A',\r\n xUnit: 'Hz',\r\n yUnitColor: Constant.GraphThemeLight.UNIT_COLOR,\r\n xUnitColor: Constant.GraphThemeLight.UNIT_COLOR,\r\n gridColor: Constant.GraphThemeLight.GRID_COLOR,\r\n });\r\n\r\n //初期表示判定フラグ\r\n const isInitDisp = useRef(false);\r\n\r\n /**\r\n *閾値のグラフデータ作成\r\n * @param data ラインデータ\r\n * @param isdb 振幅軸の表示モード\r\n */\r\n const createGraphThreshold = (\r\n lineIndex: number,\r\n lineHide: boolean,\r\n data: GraphLineDataType,\r\n isdb: boolean\r\n ): GraphData[] | undefined => {\r\n var ret: GraphData[] = [];\r\n if (data == undefined || data.JudgeSettingModel == undefined) {\r\n return undefined;\r\n }\r\n\r\n console.debug(['createGraphThreshold ', data.JudgeSettingModel])\r\n\r\n //診断タイプがdbかそれ以外か\r\n let selectGraphItems: JudgeSettingType[] = [];\r\n if (isdb) {\r\n selectGraphItems = data.JudgeSettingModel.filter((r) => r.ClcTypeNo === CcTypKind.DBD);\r\n } else {\r\n selectGraphItems = data.JudgeSettingModel.filter((r) => r.ClcTypeNo !== CcTypKind.DBD);\r\n }\r\n\r\n\r\n for (let i = 0; i < selectGraphItems.length; i++) {\r\n var graphPoints: GraphPoint[] = [];\r\n var jset = selectGraphItems[i];\r\n let freqValue: number = -1;\r\n\r\n if (data.INV_DRV_ON === 0) {\r\n //インバータ駆動フラグOFFの場合\r\n freqValue = jset.FreqCenter;\r\n console.debug([\"INV_DRV_ON:OFF\", freqValue]);\r\n }\r\n else {\r\n //インバータ駆動フラグONの場合\r\n let temp = data.TrddatChrModels.filter((r) => r.MCLC_TYP_ID == selectGraphItems[i].MclcTypeID);\r\n if (temp.length != 0) {\r\n freqValue = temp[0].FREQ !== undefined ? temp[0].FREQ : -1;\r\n console.debug([\"INV_DRV_ON:ON\", freqValue]);\r\n }\r\n\r\n }\r\n\r\n if (jset.BandValue > 0) {\r\n if (freqValue !== -1) {\r\n let x = freqValue - jset.BandValue;\r\n let y = getLIMValue(Number(jset.SeriousFailure), isdb);\r\n graphPoints.push({ xValue: x, yValue: y });\r\n\r\n x = freqValue + jset.BandValue;\r\n y = getLIMValue(Number(jset.SeriousFailure), isdb);\r\n\r\n graphPoints.push({ xValue: x, yValue: y });\r\n }\r\n // console.debug([\r\n // 'createGraphThreshold - valueMax, SeriousFailure(value), isdb,ans',\r\n // 'value === 0 ? 0 : Math.log10(Math.abs(value) / valueMax) * 20',\r\n // data.ValueMax,\r\n // Number(jset.SeriousFailure),\r\n // isdb,\r\n // y,\r\n // ]);\r\n } else {\r\n if (freqValue !== -1) {\r\n x = freqValue;\r\n y = getLIMValue(Number(jset.SeriousFailure), isdb);\r\n graphPoints.push({ xValue: x, yValue: y });\r\n }\r\n }\r\n\r\n var almLine: GraphData = {\r\n lineNo: 10 + lineIndex + i,\r\n lineName: t('FFTComparisonChart.計測データ', '計測データ') + `${lineIndex}_${jset.AbnormalKind}_` + t('FFTComparisonChart.重故障', '重故障'),\r\n points: graphPoints,\r\n valueUpper: 0,\r\n valueUpperLimit: 0,\r\n selectFlg: lineHide,\r\n infoColor: '#f8bbd0', //ffccbc\r\n tooltipColor: '#f76397',\r\n yValueMax: 0,\r\n yValueMin: 0,\r\n oaValue: '',\r\n };\r\n\r\n ret.push(almLine);\r\n\r\n graphPoints = [];\r\n if (jset.BandValue > 0) {\r\n if (freqValue !== -1) {\r\n var x = freqValue - jset.BandValue;\r\n var y = getLIMValue(Number(jset.MinorFailure), isdb);\r\n graphPoints.push({ xValue: x, yValue: y });\r\n x = freqValue + jset.BandValue;\r\n y = getLIMValue(Number(jset.MinorFailure), isdb);\r\n graphPoints.push({ xValue: x, yValue: y });\r\n }\r\n // console.debug([\r\n // 'createGraphThreshold - valueMax, MinorFailure(value), isdb,ans',\r\n // 'value === 0 ? 0 : Math.log10(Math.abs(value) / valueMax) * 20',\r\n // data.ValueMax,\r\n // Number(jset.MinorFailure),\r\n // isdb,\r\n // y,\r\n // ]);\r\n } else {\r\n if (freqValue !== -1) {\r\n x = freqValue;\r\n y = getLIMValue(Number(jset.MinorFailure), isdb);\r\n graphPoints.push({ xValue: x, yValue: y });\r\n }\r\n }\r\n\r\n var wrmLine: GraphData = {\r\n lineNo: 20 + lineIndex + i,\r\n lineName: t('FFTComparisonChart.計測データ', '計測データ') + `${lineIndex}_${jset.AbnormalKind}_` + t('FFTComparisonChart.軽故障', '軽故障'),\r\n points: graphPoints,\r\n valueUpper: 0,\r\n valueUpperLimit: 0,\r\n selectFlg: lineHide,\r\n infoColor: '#ffccbc',\r\n tooltipColor: '#ff8080',\r\n yValueMax: 0,\r\n yValueMin: 0,\r\n oaValue: '',\r\n };\r\n\r\n //console.debug(['createGraphThreshold - wrmLine', wrmLine]);\r\n ret.push(wrmLine);\r\n }\r\n\r\n return ret;\r\n };\r\n\r\n //閾値のラインにマウスが乗った際の処理\r\n const handleMouseEnter = (dataKey: string, color: string, yPoint: string) => {\r\n thresholdgraphLine.current = dataKey;\r\n thresholdgrapColor.current = color;\r\n thresholdgraphYPoint.current = yPoint;\r\n };\r\n //閾値のラインからマウスが離れた際の処理\r\n const handleMouseLeave = () => {\r\n thresholdgraphLine.current = null;\r\n };\r\n\r\n //表示ボタン押下時\r\n useEffect(() => {\r\n console.debug(['FFTComparisonChart Update', props.chartInfo]);\r\n const chinf = props.chartInfo;\r\n\r\n if (chinf.line1.devid == -1 && chinf.line2.devid == -1 && chinf.line3.devid == -1) {\r\n props.updateLoadginState(false);\r\n console.debug('表示データ無し');\r\n return;\r\n }\r\n\r\n //props.updateLoadginState(true);\r\n var a = getTargetData(chinf.mesList, chinf.line1);\r\n var b = getTargetData(chinf.mesList, chinf.line2);\r\n var c = getTargetData(chinf.mesList, chinf.line3);\r\n console.debug(['updateLoadginState a b c ', a, b, c]);\r\n Promise.all([a, b, c])\r\n .then((ret) => {\r\n console.debug(['updateLoadginState ret', ret]);\r\n var dt: GraphLineDataType[] = [];\r\n if (ret[0]) dt.push(ret[0]);\r\n if (ret[1]) dt.push(ret[1]);\r\n if (ret[2]) dt.push(ret[2]);\r\n\r\n console.debug(['setFetchData , lineDatas, chartDataInfo', dt, chinf]);\r\n setFetchData({ lineDatas: dt, chartDataInfo: chinf });\r\n })\r\n .finally(() => {\r\n console.debug(['FFTComparisonChart Update finally']);\r\n //props.updateLoadginState(false);\r\n });\r\n }, [props.chartInfo]);\r\n\r\n //グラフ描画処理\r\n useEffect(() => {\r\n props.updateLoadginState(true);\r\n console.debug(['グラフ描画処理開始', fetchData, props.graphDispSetting]);\r\n const chinf = fetchData.chartDataInfo;\r\n if (chinf.line1.devid == -1 && chinf.line2.devid == -1 && chinf.line3.devid == -1) {\r\n return;\r\n }\r\n const gSetting = props.graphDispSetting;\r\n const isdb = gSetting.selectAxis === 'r' ? false : true;\r\n\r\n const promises: Promise[] = [];\r\n fetchData.lineDatas.forEach((r) => {\r\n if (r) {\r\n let color = '';\r\n let show: boolean = false;\r\n switch (r.lineNo) {\r\n case 1:\r\n color = chinf.line1.lineColor;\r\n show = gSetting.isShow1;\r\n break;\r\n case 2:\r\n color = chinf.line2.lineColor;\r\n show = gSetting.isShow2;\r\n break;\r\n case 3:\r\n color = chinf.line3.lineColor;\r\n show = gSetting.isShow3;\r\n break;\r\n }\r\n const tmp = upDateGraphData(r.lineNo, r, color, gSetting.xMin, gSetting.xMax, isdb, show);\r\n promises.push(tmp);\r\n }\r\n });\r\n\r\n console.debug(['グラフデータ取得準備 promises', promises]);\r\n Promise.all(promises)\r\n .then((ret) => {\r\n const dt: GraphData[] = [];\r\n ret.forEach((r) => {\r\n if (r) dt.push(r);\r\n });\r\n\r\n console.debug(['グラフデータ取得', ret, dt]);\r\n var dt2: GraphData[] = [];\r\n fetchData.lineDatas.forEach((r) => {\r\n if (r) {\r\n let isThreshold: boolean = false;\r\n switch (r.lineNo) {\r\n case 1:\r\n isThreshold = props.graphDispSetting.isThreshold1;\r\n break;\r\n case 2:\r\n isThreshold = props.graphDispSetting.isThreshold2;\r\n break;\r\n case 3:\r\n isThreshold = props.graphDispSetting.isThreshold3;\r\n break;\r\n }\r\n //閾値グラフデータ取得\r\n let tmp = createGraphThreshold(r.lineNo, isThreshold, r, isdb);\r\n if (tmp) {\r\n dt2 = dt2.concat(tmp);\r\n }\r\n console.debug(['-ThresholdgraphData-tmp', tmp]);\r\n }\r\n });\r\n console.debug(['-GraphData-ThresholdgraphData', dt, dt2]);\r\n setGraphData(dt);\r\n setThresholdgraphData(dt2);\r\n\r\n var ans = setYMinMaxEx(dt, gSetting, props.isFFTAutoRangeRef);\r\n props.onFFTAutoRamgeSet(false);\r\n\r\n const unit = () => {\r\n if (props.graphDispSetting.selectAxis == 'r') {\r\n //リニア\r\n\r\n if (!fetchData.lineDatas.length) return '';\r\n\r\n let unitIndex = props.graphDispSetting.unitSelectIndex;\r\n\r\n let devId: number = 0;\r\n console.debug(['グラフデータ取得 単位', fetchData]);\r\n let unit: string = fetchData.lineDatas.find((r) => r.lineNo === unitIndex)?.Unit ?? '';\r\n switch (unitIndex) {\r\n case 1:\r\n devId = fetchData.chartDataInfo.line1.devid;\r\n break;\r\n case 2:\r\n devId = fetchData.chartDataInfo.line2.devid;\r\n break;\r\n case 3:\r\n devId = fetchData.chartDataInfo.line3.devid;\r\n break;\r\n }\r\n console.debug(['グラフデータ取得 単位 確定', unit]);\r\n if (devId != null) {\r\n const mes = fetchData.chartDataInfo.mesList.find((v) => v.id === devId);\r\n const kindNo = mes ? mes.KindNo : 0;\r\n return updateUnitByMesKind(kindNo, unit);\r\n }\r\n return unit;\r\n } else if (props.graphDispSetting.selectAxis == 'd') {\r\n //dB\r\n return 'dB';\r\n }\r\n return '';\r\n };\r\n //console.debug(['fetchData ,GraphData,ThresholdgraphData', fetchData, dt, dt2]);\r\n\r\n const yunit = unit();\r\n\r\n onChangeGraphDataEvent(dt, ans[0], ans[1], yunit);\r\n\r\n SetGraphSetting({\r\n ...graphSetting,\r\n yMin: ans[0],\r\n yMax: ans[1],\r\n xMin: gSetting.xMin,\r\n xMax: gSetting.xMax,\r\n yUnit: yunit,\r\n });\r\n })\r\n .finally(() => {\r\n console.debug(['グラフ描画処理終了 finally']);\r\n props.updateLoadginState(false);\r\n });\r\n }, [fetchData, props.graphDispSetting]);\r\n\r\n /**\r\n *Y軸最大、最小値計算\r\n * @param data\r\n * @param dispSetting\r\n */\r\n const setYMinMax = (data: GraphLineDataType[], dispSetting: GraphDispSetting): [number, number] => {\r\n var max = 0;\r\n var min = 0;\r\n const a = data[0]?.ValueMax;\r\n const b = data[1]?.ValueMax;\r\n const c = data[2]?.ValueMax;\r\n const array1 = [a, b, c];\r\n max = Math.max(...array1);\r\n\r\n if (dispSetting.selectAxis !== 'r') {\r\n max = dispSetting.yMax;\r\n min = dispSetting.yMin;\r\n }\r\n //max = ToValueMaxRound(max);\r\n //min = ToValueMinRound(min);\r\n return [min, max];\r\n };\r\n\r\n /**\r\n *Y軸最大、最小値計算 表示している領域内で算出\r\n * @param data\r\n * @param dispSetting\r\n */\r\n const setYMinMaxEx = (datas: GraphData[], dispSetting: GraphDispSetting, isAutoRange: boolean): [number, number] => {\r\n var max = 0;\r\n var min = 0;\r\n let a: number = 0;\r\n let b: number = 0;\r\n let c: number = 0;\r\n if (datas[0]?.points.length !== 0) {\r\n var line1List = datas[0]?.points.map((r) => r.yValue);\r\n a = line1List == null ? 0 : Math.max.apply(null, line1List);\r\n }\r\n if (datas[1]?.points.length !== 0) {\r\n var line2List = datas[1]?.points.map((r) => r.yValue);\r\n b = line2List == null ? 0 : Math.max.apply(null, line2List);\r\n }\r\n if (datas[2]?.points.length !== 0) {\r\n var line3List = datas[2]?.points.map((r) => r.yValue);\r\n c = line3List == null ? 0 : Math.max.apply(null, line3List);\r\n }\r\n\r\n const array1 = [a, b, c];\r\n max = Math.max(...array1);\r\n\r\n if (dispSetting.selectAxis !== 'r') {\r\n max = dispSetting.yMax;\r\n min = dispSetting.yMin;\r\n } else {\r\n if (!isAutoRange) {\r\n //初期表示ではない場合、画面でセットされた値を使用\r\n max = dispSetting.yMax;\r\n min = dispSetting.yMin;\r\n }\r\n }\r\n //max = ToValueMaxRound(max);\r\n //min = ToValueMinRound(min);\r\n return [min, max];\r\n };\r\n\r\n /**\r\n * ツールチップ表示処理\r\n * @param param0 \r\n * @returns \r\n */\r\n const CustomTooltip = ({ active, payload, label }: any) => {\r\n //console.debug(['payload', payload]); \r\n if (active) {\r\n //閾値のカラーを取得\r\n let colorItem = thresholdgrapColor.current !== null ? thresholdgrapColor.current : 'black';\r\n console.debug('CustomTooltip1', [thresholdgraphLine, thresholdgraphLine.current, colorItem]);\r\n\r\n return (\r\n
\r\n {/** 閾値表示 */}\r\n {thresholdgraphLine.current !== null &&\r\n
\r\n {`${thresholdgraphLine.current} : ${thresholdgraphYPoint.current}`}\r\n
\r\n }\r\n {payload?.map((r: any, index: any) => {\r\n if (index <= 2 && r.name !== 'yValue' && (r.name.includes('計測データ') || r.name.includes('Measure Data'))) {\r\n return (\r\n thresholdgraphLine.current === null &&\r\n
\r\n {r.name} : {Number(r.value).toFixed(3)}\r\n
\r\n );\r\n }\r\n })}\r\n {/**周波数 */}\r\n
{`${t('FFTComparisonChart.周波数', '周波数')} : ${Number(label).toFixed(3)}`}
\r\n {/** 各計測データの選択した周波数地点の値を表示 */}\r\n {payload?.map((r: any, index: any) => {\r\n if (index <= 2 && r.name !== 'yValue' && (!r.name.includes('計測データ') && !r.name.includes('Measure Data'))) {\r\n return (\r\n
\r\n {r.name} : {Number(r.value).toFixed(3)}\r\n
\r\n );\r\n }\r\n })}\r\n
\r\n );\r\n } else {\r\n {/** 閾値表示 */ }\r\n console.debug('CustomTooltip2', [thresholdgraphLine]);\r\n return (\r\n
\r\n {thresholdgraphLine.current !== null &&\r\n
{`${thresholdgraphLine.current} : ${thresholdgraphYPoint.current}`}\r\n
\r\n }\r\n
\r\n )\r\n }\r\n };\r\n /**\r\n * ドットの閾値の文字色\r\n * @param color \r\n * @returns \r\n */\r\n const tooltipColorSelect = (color: any): any => {\r\n if (color == '#f8bbd0') {\r\n return '#f76397';\r\n }\r\n if (color == '#ffccbc') {\r\n return '#ff8080';\r\n }\r\n return color;\r\n }\r\n\r\n const chartControlMemo = useMemo(() => {\r\n console.debug(['FFTComparisonChart childMemo', graphData, thresholdgraphData, graphSetting]);\r\n return (\r\n <>\r\n \r\n {\r\n if (props.isTooltipActive) {\r\n if (props.activePayload?.length != 1) {\r\n console.debug(['onMouseMove props', props]);\r\n }\r\n }\r\n }}\r\n >\r\n \r\n Number(e).toFixed(0)}\r\n allowDataOverflow={true}\r\n height={50}\r\n tick={{ dy: 10 }}\r\n padding={{ right: 0, left: 1 }}\r\n >\r\n \r\n \r\n Number(e).toFixed(3)}\r\n stroke={graphSetting.memoryFontColor}\r\n domain={[graphSetting.yMin, graphSetting.yMax]}\r\n //domain={['auto', 'auto']}\r\n allowDataOverflow={true}\r\n >\r\n \r\n \r\n {/**ツールチップ表示 */}\r\n } />\r\n {/**閾値表示 */}\r\n {thresholdgraphData?.map((row, index) => (\r\n {\r\n console.debug('onMouseEnter');\r\n handleMouseEnter(row.lineName, row.tooltipColor, row.points[0].yValue.toString());\r\n }}\r\n onMouseLeave={() => {\r\n console.debug('onMouseLeave');\r\n handleMouseLeave();\r\n }}\r\n />\r\n ))}\r\n {/**計測データグラフ表示 */}\r\n {graphData?.map((row, index) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n );\r\n }, [graphData, thresholdgraphData, graphSetting]);\r\n\r\n return <>{chartControlMemo};\r\n};\r\nexport default FFTComparisonChart;\r\n","import React from 'react';\r\n\r\nimport { makeStyles, createStyles, Theme } from '@material-ui/core/styles';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Button from '@material-ui/core/Button';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport { MeasureInfoType, SelectDataType } from './FFTComparison';\r\nimport { GetTrendGroupTableByItemSet } from '../../../function/GroupDataModel';\r\nimport SimpleDialog from '../../atoms/Dialog/SimpleDialog';\r\nimport RealTimeTrendGraphGroupSelectPage from '../../Pages/RealTimeTrendGraph/RealTimeTrendGraphGroupSelectPage';\r\nimport TrendGraphGroupSelectPage from '../../Pages/TrendGraph/TrendGraphGroupSelectPage';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n buttonStyle: {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n },\r\n })\r\n);\r\n/**ダイアログ表示モードキー */\r\nconst DialogKindKey = {\r\n None: 'None',\r\n RealTime: 'realTime',\r\n Trend: 'trend',\r\n} as const;\r\n/**ダイアログ表示タイプ */\r\ntype DialgKindType = typeof DialogKindKey[keyof typeof DialogKindKey];\r\n\r\n/**引数 */\r\ntype Props = {\r\n measureInfo: MeasureInfoType[];\r\n getSelectDatas: () => SelectDataType[];\r\n};\r\n\r\nconst FFTComparisonButtonList: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const { measureInfo } = props;\r\n\r\n const classes = useStyles();\r\n const [simpleDialogOpen, setSimpleDialogOpen] = React.useState(false);\r\n const [gropuSelectDialogOpen, setGropuSelectDialogOpen] = React.useState(false);\r\n\r\n const [dialogKind, setDialogKind] = React.useState(DialogKindKey.None);\r\n const [selectGroupNos, setSelectGroupNos] = React.useState([0]);\r\n const [showMessage, setShowMessage] = React.useState('');\r\n\r\n /**\r\n *選択データを取得\r\n * @param SelectDataType 画面遷移時に渡す選択データを返す\r\n */\r\n const getIsSelectData = (): SelectDataType | undefined => {\r\n const datas = props.getSelectDatas();\r\n return datas.find((row) => row.isSelect === true);\r\n };\r\n\r\n /**\r\n *傾向管理ボタン処理\r\n */\r\n const handleTrendPageOpen = () => {\r\n console.debug('★★★handleTrendPageOpen');\r\n const sData = getIsSelectData();\r\n console.debug(['selectDatas=', sData]);\r\n if (sData) {\r\n setDialogKind(DialogKindKey.Trend);\r\n var mes = measureInfo.find((item) => item.id === sData.mesid);\r\n var dev = measureInfo.find((item) => item.id === sData.devid);\r\n var itm = measureInfo.find((item) => item.id === sData.itemid);\r\n var target = measureInfo.find(\r\n (item) => item.KindNo === mes?.KindNo && item.DevIndex === dev?.DevIndex && item.ItemNameNo === itm?.ItemNameNo\r\n );\r\n console.debug(['selectDt=', sData, 'target', target]);\r\n GetTrendGroupTableByItemSet().then((ret) => {\r\n var gpInfo = ret.filter(\r\n (row) => row.trdItemSet.PLC_NO == target?.PlcNo && row.trdItemSet.SET_NO === target.SetNo\r\n );\r\n console.debug(['getgpItem=', gpInfo]);\r\n\r\n if (gpInfo.length !== 0) {\r\n var gpNos: number[] = [];\r\n for (var i in gpInfo) {\r\n gpNos.push(gpInfo[i].trdGroupSet.GROUP_NO);\r\n }\r\n setSelectGroupNos(gpNos);\r\n handleGroupSelectDialogShow();\r\n } else {\r\n setShowMessage(t('FFTComparisonButtonList.グループが見つかりませんでした', 'グループが見つかりませんでした'));\r\n handleSimpleDialogClickOpen();\r\n return;\r\n }\r\n });\r\n } else {\r\n setShowMessage(t('FFTComparisonButtonList.項目が選択されていません', '項目が選択されていません'));\r\n handleSimpleDialogClickOpen();\r\n }\r\n };\r\n\r\n /**\r\n * グループ選択ダイアログ表示\r\n */\r\n const handleGroupSelectDialogShow = () => {\r\n setGropuSelectDialogOpen(true);\r\n };\r\n\r\n /**\r\n * グループ選択ダイアログ閉じる\r\n */\r\n const handleGroupSelectDialogClose = () => {\r\n setGropuSelectDialogOpen(false);\r\n };\r\n\r\n /**\r\n * メッセージボックス表示\r\n */\r\n const handleSimpleDialogClickOpen = () => {\r\n setSimpleDialogOpen(true);\r\n };\r\n\r\n /**メッセージボックス閉じる */\r\n const handleSimpleDialogClose = () => {\r\n setSimpleDialogOpen(false);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n {t('FFTComparisonButtonList.傾向管理', '傾向管理')}\r\n \r\n \r\n \r\n {dialogKind == DialogKindKey.RealTime ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n {showMessage}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default FFTComparisonButtonList;\r\n","import React, { useEffect, useState, useMemo, useRef, useContext } from 'react';\r\nimport dayjs from 'dayjs';\r\n\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport Button from '@material-ui/core/Button';\r\nimport LoadingButton from '@mui/lab/LoadingButton';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport Box from '@material-ui/core/Box';\r\n\r\nimport { AppContext } from '../../../App';\r\nimport { FFT_MAX_VALUE_ONPRE, FFT_MAX_VALUE_CLUDO } from '../../../Constant';\r\n\r\nimport { FFT_CMP_GROUP_SET } from '../../../function/GroupDataModel';\r\nimport {\r\n MeasureInfoType,\r\n GetMeasureInfoType,\r\n SelectDataType,\r\n CreateDefalutMeasureInfoType,\r\n GetLatesTime,\r\n CreateDefalutSelectDataType,\r\n GetAdditionalMeasureInfoType,\r\n FindMeasureInfoType,\r\n GetComparisonNo,\r\n GetDataTimeList,\r\n GetFFTInitialWidth,\r\n} from './FFTComparison';\r\nimport FFTComparisonInfo from './FFTComparisonInfo';\r\nimport FFTComparisonChartSetting, { RangeSelectDataType } from './FFTComparisonChartSetting';\r\nimport FFTComparisonChart, { GraphDispSetting, GraphData, ChartUpDateInfo } from './FFTComparisonChart';\r\nimport FFTComparisonButtonList from './FFTComparisonButtonList';\r\nimport { SelectItemRefreshData } from './FFTComparisonSelectItem';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { IsValidKindOfFftCmp } from '../../../function/NameDevSetModel';\r\nimport { Typography } from '@material-ui/core';\r\nimport SimpleDialog from '../../atoms/Dialog/SimpleDialog';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n responsiveContainer: {\r\n minHeight: 'calc(100vh - 447px)',\r\n maxHeight: 'calc(100vh - 447px)',\r\n },\r\n paper: {\r\n background: '#FFFFEE',\r\n },\r\n paperChild: {\r\n background: '#FFFFEE',\r\n },\r\n buttonStyle: {\r\n width: '100px',\r\n maxHeight: '35px',\r\n minHeight: '35px',\r\n marginRight: '4px',\r\n },\r\n })\r\n);\r\n\r\nconst createSelectData = (\r\n meslist: MeasureInfoType[],\r\n orgData: SelectDataType,\r\n target?: MeasureInfoType\r\n): SelectDataType => {\r\n if (target === undefined) {\r\n return orgData;\r\n } else {\r\n var mid = meslist.find(\r\n (row) => IsValidKindOfFftCmp(row.Speed, 0) && row.KindNo === target.KindNo && row.MesName === target.MesName\r\n );\r\n orgData.mesid = mid !== undefined ? mid.id : orgData.mesid;\r\n\r\n var did = meslist.find(\r\n (row) => IsValidKindOfFftCmp(row.Speed, 0) && row.KindNo === target.KindNo && row.DevIndex === target.DevIndex\r\n );\r\n orgData.devid = did !== undefined ? did.id : orgData.devid;\r\n\r\n var iid = meslist.find(\r\n (row) =>\r\n IsValidKindOfFftCmp(row.Speed, 0) &&\r\n row.KindNo === target.KindNo &&\r\n row.DevIndex === target.DevIndex &&\r\n row.ItemNameNo === target.ItemNameNo &&\r\n row.ItemName === target.ItemName\r\n );\r\n orgData.itemid = iid !== undefined ? iid.id : orgData.itemid;\r\n\r\n return orgData;\r\n }\r\n};\r\n\r\ntype Props = {\r\n location: { state: FFT_CMP_GROUP_SET };\r\n};\r\n\r\nconst FFTComparisonPage: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [graphData, setGraphData] = useState([]);\r\n const [loading, setLoading] = React.useState(false);\r\n\r\n console.debug(['FFTComparisonPage() -- loading', loading, props]);\r\n\r\n const [measureInfo, setMeasereInfo] = React.useState([]);\r\n\r\n const selectData1Ref = React.useRef(\r\n CreateDefalutSelectDataType(t('FFTComparisonPage.計測データ1', '計測データ1'), 'red', 1)\r\n );\r\n const selectData2Ref = React.useRef(\r\n CreateDefalutSelectDataType(t('FFTComparisonPage.計測データ2', '計測データ2'), 'blue', 2)\r\n );\r\n const selectData3Ref = React.useRef(\r\n CreateDefalutSelectDataType(t('FFTComparisonPage.計測データ3', '計測データ3'), 'green', 3)\r\n );\r\n\r\n const isFFTAutoRangeRef = React.useRef(true);\r\n\r\n const { login } = useContext(AppContext);\r\n\r\n const [chartInfo, setChartInfo] = React.useState({\r\n line1: selectData1Ref.current,\r\n line2: selectData2Ref.current,\r\n line3: selectData3Ref.current,\r\n mesList: measureInfo,\r\n isInitDisp: true,\r\n });\r\n\r\n const [selectItemRefreshDatas, setSelectItemRefreshDatas] = React.useState([]);\r\n\r\n const [graphDispSetting, SetGraphDispSetting] = React.useState({\r\n xMin: 0,\r\n xMax: 100,\r\n yMin: 0,\r\n yMax: 0,\r\n selectAxis: 'r',\r\n isPileup: false,\r\n isThreshold1: false,\r\n isThreshold2: false,\r\n isThreshold3: false,\r\n\r\n isShow1: true,\r\n isShow2: true,\r\n isShow3: true,\r\n unitSelectIndex: 1,\r\n });\r\n\r\n //ユニット表示選択情報\r\n const [selectUnit, setSelectUnit] = React.useState([true, false, false]);\r\n\r\n //メッセージダイアログ\r\n const [messageDialogOpen, setMessageDialogOpen] = React.useState(false);\r\n const [showMessage, setShowMessage] = React.useState('');\r\n\r\n const [rangeSelectData, setRangeSelectData] = React.useState({\r\n rengeMin: 0,\r\n rengeMax: 100,\r\n rengeId: -1,\r\n dbId: 0,\r\n dbMin: -80,\r\n dbMax: 0,\r\n selectAxis: 'r',\r\n yMin: 0,\r\n yMax: 100,\r\n holdLinearValueMin: 0,\r\n holdLinearValueMax: 0,\r\n yUnit: 'A',\r\n });\r\n\r\n useEffect(() => {\r\n console.debug(['change --graphDispSetting-- ', graphDispSetting]);\r\n }, [graphDispSetting]);\r\n\r\n useEffect(() => {\r\n GetMeasureInfoType()\r\n .then((mesRet) => {\r\n //データリストに特殊データを追加して返す\r\n mesRet = GetAdditionalMeasureInfoType(t, mesRet);\r\n\r\n //FFT画面では不要な項目を排除\r\n mesRet = mesRet.filter((r) => r.FftInvalid === 0);\r\n\r\n //選択データ初期化 3本分\r\n var sList: SelectDataType[] = [\r\n CreateDefalutSelectDataType(t('FFTComparisonPage.計測データ1', '計測データ1'), 'red', 1),\r\n CreateDefalutSelectDataType(t('FFTComparisonPage.計測データ2', '計測データ2'), 'blue', 2),\r\n CreateDefalutSelectDataType(t('FFTComparisonPage.計測データ3', '計測データ3'), 'green', 3),\r\n ];\r\n\r\n if (props.location.state != null) {\r\n var gp = props.location.state;\r\n\r\n console.debug(['props.location.state'], props.location.state);\r\n //わたってきたデータアイテムを計測リストより検索して格納 3本分\r\n var dtList: (MeasureInfoType | undefined)[] = [\r\n FindMeasureInfoType(mesRet, gp, 1),\r\n FindMeasureInfoType(mesRet, gp, 2),\r\n FindMeasureInfoType(mesRet, gp, 3),\r\n ];\r\n\r\n //特殊情報の特定データ作成(振動速度、振動変位用) 3本分\r\n var compartionList: string[] = [\r\n GetComparisonNo(dtList[0]),\r\n GetComparisonNo(dtList[1]),\r\n GetComparisonNo(dtList[2]),\r\n ];\r\n\r\n //選択データに計測情報を反映 3本分\r\n sList.map((row, index) => {\r\n row = createSelectData(mesRet, row, dtList[index]);\r\n });\r\n\r\n //イニシャル時に計測種別が振動(速度)か振動(変位)の場合、最小値と最大値をNAME_DEV_SETテーブルから取得する\r\n //選択されたグループNoを使用してFFT_CMP_GROUP_SETから振動(速度)か振動(変位)を使用しているか確認\r\n GetFFTInitialWidth(gp.GROUP_NO)\r\n .then((xItems) => {\r\n let maxValue = login.IsIoT ? FFT_MAX_VALUE_CLUDO : FFT_MAX_VALUE_ONPRE;\r\n //最小値+100の値がmaxを超える場合は、最大値を入力する\r\n if (xItems.XMinInitial + 100 > maxValue) {\r\n rangeSelectData.rengeMin = xItems.XMinInitial;\r\n rangeSelectData.rengeMax = maxValue;\r\n graphDispSetting.xMin = xItems.XMinInitial;\r\n graphDispSetting.xMax = maxValue;\r\n }\r\n else {\r\n rangeSelectData.rengeMin = xItems.XMinInitial;\r\n rangeSelectData.rengeMax = xItems.XMaxInitial;\r\n graphDispSetting.xMin = xItems.XMinInitial;\r\n graphDispSetting.xMax = xItems.XMaxInitial;\r\n }\r\n\r\n console.debug(['change --GetFFTInitialWidth-- ', rangeSelectData, graphDispSetting]);\r\n setRangeSelectData(rangeSelectData);\r\n SetGraphDispSetting(graphDispSetting);\r\n })\r\n .catch(\r\n (reason) => {\r\n console.error(['GetFFTInitialWidth error', reason]);\r\n }\r\n );\r\n\r\n //console.debug(['trace', gp, mesRet]);\r\n if (gp.Time_No1 !== undefined) {\r\n //console.debug(['trace 1', gp.Time_No1]);\r\n //わたってきたデータに日付指定がある場合\r\n const gpTimeList: string[] = [gp.Time_No1, gp.Time_No2, gp.Time_No3];\r\n sList.map((row, index) => {\r\n row.selectDate = gpTimeList[index] == '' ? new Date() : dayjs(gpTimeList[index]).toDate();\r\n });\r\n\r\n if (gp.Time_No1.length > 'yyyy-mm-dd'.length) {\r\n //console.debug(['trace 2', gp.Time_No1.length, 'yyyy-mm-dd'.length]);\r\n //わたってきたデータに時間指定がある場合\r\n sList.map((row, index) => {\r\n row.selectTime = dayjs(gpTimeList[index]).format('HH:mm:ss');\r\n });\r\n console.debug(['s1,s2,s3', sList]);\r\n setMeasereInfo(mesRet);\r\n setSelectItemRefreshDatas([\r\n { mesInfoList: mesRet, selectData: sList[0] },\r\n { mesInfoList: mesRet, selectData: sList[1] },\r\n { mesInfoList: mesRet, selectData: sList[2] },\r\n ]);\r\n setChartInfo({ line1: sList[0], line2: sList[1], line3: sList[2], mesList: mesRet, isInitDisp: true });\r\n } else {\r\n //console.debug(['trace 3', dtList]);\r\n //わたってきたデータが日付指定のみの場合\r\n Promise.all(\r\n dtList.map((dtRow, index) =>\r\n //指定した日時で最新のファイルがある時間を検索する\r\n GetDataTimeList(\r\n Number(dtRow?.PlcNo),\r\n Number(dtRow?.AiCard),\r\n Number(dtRow?.AiCh),\r\n gpTimeList[index],\r\n compartionList[index],\r\n sList[index].envelopeNo\r\n )\r\n )\r\n ).then((ret) => {\r\n var msg = '';\r\n //console.debug(['trace 4 sList', sList, 'ret', ret]);\r\n sList.map((row, index) => {\r\n //console.debug(['trace 4-1 index', index]);\r\n var retTimes: string[] = ret[index] ?? [];\r\n //console.debug(['trace 4-2 retTimes', retTimes]);\r\n if (retTimes.length !== 0) {\r\n row.selectTime = dayjs(retTimes[0]).format('HH:mm:ss');\r\n } else {\r\n //指定した日時で時間ファイルが存在しない ダイアログ表示\r\n console.debug(['trace 4-3 error! retTimes', retTimes]);\r\n msg +=\r\n t('FFTComparisonPage.表示データが存在しません。', '表示データが存在しません。') +\r\n ' ' +\r\n dtList[index]?.MesName +\r\n ' ' +\r\n dtList[index]?.DevNo +\r\n ' ' +\r\n dtList[index]?.DevName +\r\n ' ' +\r\n dtList[index]?.ItemName +\r\n ' ' +\r\n gpTimeList[index] +\r\n ' /n';\r\n }\r\n });\r\n\r\n if (msg !== '') {\r\n setShowMessage(msg);\r\n setMessageDialogOpen(true);\r\n }\r\n console.debug(['s1,s2,s3', sList]);\r\n setMeasereInfo(mesRet);\r\n setSelectItemRefreshDatas([\r\n { mesInfoList: mesRet, selectData: sList[0] },\r\n { mesInfoList: mesRet, selectData: sList[1] },\r\n { mesInfoList: mesRet, selectData: sList[2] },\r\n ]);\r\n setChartInfo({ line1: sList[0], line2: sList[1], line3: sList[2], mesList: mesRet, isInitDisp: true });\r\n });\r\n }\r\n } else {\r\n //console.debug(['trace -- gp.Time_No1 == undefined']);\r\n Promise.all(\r\n dtList.map((dtRow, index) =>\r\n //最新のファイルがある時間を検索する\r\n GetLatesTime(sList[index].envelopeNo, dtRow?.PlcNo, dtRow?.AiCard, dtRow?.AiCh, compartionList[index])\r\n )\r\n ).then((ret) => {\r\n //console.debug(['GetLatesTime', ret]);\r\n\r\n //最新のファイルがある時間を検索する\r\n sList.map((row, index) => {\r\n //console.debug(['GetLatesTime - row', ret[index]]);\r\n if (dayjs(new Date(ret[index])).format('YYYY-MM-DD') === '1-01-01') {\r\n row.selectDate = new Date();\r\n row.selectTime = '';\r\n } else {\r\n row.selectDate = new Date(ret[index]);\r\n row.selectTime = dayjs(new Date(ret[index])).format('HH:mm:ss');\r\n }\r\n });\r\n console.debug(['s1,s2,s3', sList]);\r\n setMeasereInfo(mesRet);\r\n setSelectItemRefreshDatas([\r\n { mesInfoList: mesRet, selectData: sList[0] },\r\n { mesInfoList: mesRet, selectData: sList[1] },\r\n { mesInfoList: mesRet, selectData: sList[2] },\r\n ]);\r\n setChartInfo({ line1: sList[0], line2: sList[1], line3: sList[2], mesList: mesRet, isInitDisp: true });\r\n });\r\n }\r\n }\r\n })\r\n .then((ret) => { })\r\n .catch((reason) => { });\r\n }, [props.location.state]);\r\n\r\n /**\r\n * 選択データ変更event 画面再描画無し\r\n * @param value\r\n * @param dataNo\r\n */\r\n const onChangeSelectData = (value: SelectDataType, dataNo: number) => {\r\n switch (dataNo) {\r\n case 1:\r\n console.debug(['onChangeSelectData - old,new', selectData1Ref.current, value]);\r\n selectData1Ref.current = { ...value };\r\n break;\r\n case 2:\r\n console.debug(['onChangeSelectData - old,new', selectData2Ref.current, value]);\r\n selectData2Ref.current = { ...value };\r\n break;\r\n case 3:\r\n console.debug(['onChangeSelectData - old,new', selectData3Ref.current, value]);\r\n selectData3Ref.current = { ...value };\r\n break;\r\n default:\r\n }\r\n };\r\n\r\n /**\r\n * グラフに表示する単位情報を選択によって切り替える\r\n * @param no 計測情報コントロール番号\r\n */\r\n const unitSelectClickAction = (no: number) => {\r\n switch (no) {\r\n case 1:\r\n setSelectUnit([true, false, false]);\r\n SetGraphDispSetting({ ...graphDispSetting, unitSelectIndex: 1 });\r\n break;\r\n case 2:\r\n setSelectUnit([false, true, false]);\r\n SetGraphDispSetting({ ...graphDispSetting, unitSelectIndex: 2 });\r\n break;\r\n case 3:\r\n setSelectUnit([false, false, true]);\r\n SetGraphDispSetting({ ...graphDispSetting, unitSelectIndex: 3 });\r\n break;\r\n }\r\n };\r\n\r\n /**\r\n * 選択データ変更event 画面再描画\r\n * @param value\r\n * @param dataNo\r\n */\r\n const onChangeSelectDataUpdate = (value: SelectDataType, dataNo: number) => {\r\n onChangeSelectData(value, dataNo);\r\n console.debug(['onChangeSelectDataUpdate']);\r\n switch (dataNo) {\r\n case 1:\r\n SetGraphDispSetting({ ...graphDispSetting, isThreshold1: value.isThreshold, isShow1: value.isShow });\r\n break;\r\n case 2:\r\n SetGraphDispSetting({ ...graphDispSetting, isThreshold2: value.isThreshold, isShow2: value.isShow });\r\n break;\r\n case 3:\r\n SetGraphDispSetting({ ...graphDispSetting, isThreshold3: value.isThreshold, isShow3: value.isShow });\r\n break;\r\n default:\r\n }\r\n };\r\n\r\n const handleGraphDataChange = (datas: GraphData[], yMin: number, yMax: number, yUnit: string) => {\r\n console.debug(['datas,yMax,yMin,yUnit', datas, yMax, yMin, yUnit]);\r\n setRangeSelectData({ ...rangeSelectData, yMin: yMin, yMax: yMax, yUnit: yUnit });\r\n graphDispSetting.yMax = yMax;\r\n graphDispSetting.yMin = yMin;\r\n setGraphData({ ...datas });\r\n };\r\n\r\n //表示ボタン押下\r\n const handleChartUpDate = () => {\r\n setLoading(true);\r\n setChartInfo({\r\n line1: selectData1Ref.current,\r\n line2: selectData2Ref.current,\r\n line3: selectData3Ref.current,\r\n mesList: measureInfo,\r\n isInitDisp: false,\r\n });\r\n };\r\n\r\n /**\r\n * レンジ設定変更event\r\n * @param data\r\n */\r\n const handleRengeSelectDataChange = (data: RangeSelectDataType) => {\r\n console.debug(['tyousa FFTComparisonPage handleRengeSelectDataChange()', data]);\r\n\r\n setLoading(true);\r\n\r\n rangeSelectData.rengeMin = data.rengeMin;\r\n rangeSelectData.rengeMax = data.rengeMax;\r\n rangeSelectData.rengeId = data.rengeId;\r\n rangeSelectData.dbId = data.dbId;\r\n rangeSelectData.dbMin = data.dbMin;\r\n rangeSelectData.dbMax = data.dbMax;\r\n if (rangeSelectData.selectAxis !== data.selectAxis && rangeSelectData.selectAxis === 'r') {\r\n //リニアからdbに変わったときはセットします\r\n rangeSelectData.holdLinearValueMin = data.yMin;\r\n rangeSelectData.holdLinearValueMax = data.yMax;\r\n rangeSelectData.yMin = data.yMin;\r\n rangeSelectData.yMax = data.yMax;\r\n } else if (rangeSelectData.selectAxis !== data.selectAxis && rangeSelectData.selectAxis === 'd') {\r\n //dbからリニアに変わったときは保持しているデータの入れ替え\r\n data.yMin = rangeSelectData.holdLinearValueMin;\r\n data.yMax = rangeSelectData.holdLinearValueMax;\r\n rangeSelectData.yMin = data.yMin;\r\n rangeSelectData.yMax = data.yMax;\r\n } else {\r\n //ラジオボタンを変えていないときの処理\r\n rangeSelectData.yMin = data.yMin;\r\n rangeSelectData.yMax = data.yMax;\r\n }\r\n rangeSelectData.selectAxis = data.selectAxis;\r\n\r\n SetGraphDispSetting({\r\n ...graphDispSetting,\r\n selectAxis: data.selectAxis,\r\n xMin: data.rengeMin,\r\n xMax: data.rengeMax,\r\n yMin: data.selectAxis === 'r' ? data.yMin : data.dbMin,\r\n yMax: data.selectAxis === 'r' ? data.yMax : data.dbMax,\r\n });\r\n };\r\n\r\n const handleLoadingStateChange = (value: boolean): void => {\r\n //console.debug('tyousa FFTComparisonPage handleLoadingStateChange()', value);\r\n setLoading(value);\r\n };\r\n\r\n const handoleAutoRangeSet = (data: boolean) => {\r\n isFFTAutoRangeRef.current = data;\r\n };\r\n\r\n const chartControlMemo = useMemo(() => {\r\n return (\r\n \r\n );\r\n }, [graphDispSetting, chartInfo]);\r\n\r\n /**\r\n * ライン番号と一致するグラフデータを返す\r\n * @param lineNo\r\n * @returns\r\n */\r\n const getGraphData = (lineNo: number): GraphData | undefined => {\r\n if (graphData) {\r\n const arr = [graphData[0], graphData[1], graphData[2]];\r\n let tmp = arr.find((r) => r?.lineNo === lineNo);\r\n return tmp;\r\n } else {\r\n return undefined;\r\n }\r\n };\r\n return (\r\n
\r\n \r\n
{' '}\r\n \r\n onChangeSelectData(e, 1)}\r\n onChangeSelectDataDispUpDateEvent={(e) => onChangeSelectDataUpdate(e, 1)}\r\n isBlankSelect={false}\r\n isUnitSelect={selectUnit[0]}\r\n onClickUnitSelect={() => unitSelectClickAction(1)}\r\n onAutoRangeSet={handoleAutoRangeSet}\r\n />\r\n \r\n
{' '}\r\n \r\n onChangeSelectData(e, 2)}\r\n onChangeSelectDataDispUpDateEvent={(e) => onChangeSelectDataUpdate(e, 2)}\r\n isBlankSelect={true}\r\n isUnitSelect={selectUnit[1]}\r\n onClickUnitSelect={() => unitSelectClickAction(2)}\r\n onAutoRangeSet={handoleAutoRangeSet}\r\n />\r\n \r\n
{' '}\r\n \r\n onChangeSelectData(e, 3)}\r\n onChangeSelectDataDispUpDateEvent={(e) => onChangeSelectDataUpdate(e, 3)}\r\n isBlankSelect={true}\r\n isUnitSelect={selectUnit[2]}\r\n onClickUnitSelect={() => unitSelectClickAction(3)}\r\n onAutoRangeSet={handoleAutoRangeSet}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n }\r\n onClick={handleChartUpDate}\r\n >\r\n {t('FFTComparisonPage.表示', '表示')}\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n {chartControlMemo}\r\n \r\n \r\n {\r\n return [selectData1Ref.current, selectData2Ref.current, selectData3Ref.current];\r\n }}\r\n >\r\n \r\n \r\n {/* エラーダイアログ */}\r\n setMessageDialogOpen(false)}\r\n title={t('FFTComparisonPage.確認', '確認')}\r\n okText={'OK'}\r\n maxWidth={'sm'}\r\n >\r\n {showMessage.split('/n').map((r) => {\r\n return
{r}
;\r\n })}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default FFTComparisonPage;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { FFT_CMP_GROUP_SET, GetFFTComparisonGroupList } from '../../../function/GroupDataModel';\r\nimport GroupSelectGrid, { SelectGroupType } from '../../organisms/Pages/GroupSelectGrid';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n paper: {\r\n padding: '10px',\r\n background: '#FFFFEE',\r\n },\r\n tableContainer: { maxHeight: 'calc(100vh - 210px)' },\r\n })\r\n);\r\n\r\nconst FFTComparisonGroupSelectPage: React.FC = () => {\r\n const history = useHistory();\r\n const classes = useStyles();\r\n\r\n const [groupDt, setGroupDt] = useState([]);\r\n const [groupList, setGroupList] = useState([]);\r\n\r\n useEffect(() => {\r\n GetFFTComparisonGroupList().then((ret) => {\r\n var fillter = ret.FFT_CMP_GROUP_SETs.filter((item) => item.DSP_FLG === 1);\r\n setGroupDt(fillter);\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n var lists: SelectGroupType[] = [];\r\n for (var i in groupDt) {\r\n lists.push({ index: Number(i) + 1, groupName: groupDt[i].GROUP_NAME, groupNo: groupDt[i].GROUP_NO });\r\n }\r\n setGroupList(lists);\r\n console.debug(lists);\r\n }, [groupDt]);\r\n\r\n const groupSelect = (selectdata: SelectGroupType) => {\r\n var target = groupDt.find((row) => row.GROUP_NO === selectdata.groupNo);\r\n history.push({\r\n pathname: '/FFTComparisonPage',\r\n state: target,\r\n });\r\n };\r\n\r\n return ;\r\n};\r\n\r\nexport default FFTComparisonGroupSelectPage;\r\n","import { GetVibrationSpecialString, MeasureHighKind, SpeedKind } from '../../../Constant';\r\nimport { FFTC_CMP_GROUP_SET, MeasureSelectItem } from '../../../function/GroupDataModel';\r\n\r\nexport type MeasureInfoType = {\r\n AiCard: number;\r\n AiCh: number;\r\n DevIndex: number;\r\n DevName: string;\r\n DevNo: string;\r\n FftInvalid: number;\r\n EntryNo: number;\r\n ItemName: string;\r\n ItemNameNo: number;\r\n KindNo: number;\r\n LogStart: string;\r\n MesName: string;\r\n PlcNo: number;\r\n SetNo: number;\r\n Speed: number;\r\n\r\n selectDay: string;\r\n selectTime: string;\r\n name: string;\r\n id: number;\r\n};\r\n\r\nexport type SelectDataType = {\r\n mesid: number;\r\n devid: number;\r\n itemid: number;\r\n selectDate: Date;\r\n selectTime: string;\r\n //itemName: string;\t//計測データ1~3ラベル表示\r\n lineColor: string;\r\n isSelect: boolean;\r\n isShow: boolean;\r\n isThreshold: boolean;\r\n envelopeNo: number;\r\n lineNo: number;\r\n}\r\n\r\n\r\nexport type JudgeSettingType = {\r\n PLCNo: string;\r\n AICardNo: string;\r\n ChannelNo: string;\r\n //診断タイプ\r\n JudgeTypeName: string;\r\n //周波数 下限\r\n FrequencyLower: string;\r\n //周波数 上限\r\n FrequencyUpper: string;\r\n //演算方法\r\n OperationProcess: string;\r\n //軽故障\r\n MinorFailure: string;\r\n //重故障\r\n SeriousFailure: string;\r\n //異常種別\r\n AbnormalKind: string;\r\n //演算No\r\n ClcTypeNo: number;\r\n //裕度\r\n BandValue: number;\r\n //中心周波数\r\n FreqCenter: number;\r\n\r\n}\r\n\r\nexport type GraphLineDataType = {\r\n XValues: string[],\r\n YValues: number[],\r\n YValuesString: string[],\r\n //Y 軸最大値を取得または設定します。\r\n ValueMax: number,\r\n //Y 軸最小値を取得または設定します。\r\n ValueMin: number,\r\n PLCNo: string,\r\n AICardNo: string,\r\n ChannelNo: string,\r\n //機器INDEX\r\n MachineIndex: string,\r\n //機器No\r\n MachineNo: string,\r\n //機器名称\r\n MachineName: string,\r\n //項目名称\r\n ItemName: string,\r\n //エンベロープ項目\r\n EnveNameNo: number,\r\n //データ時刻\r\n GraphDataTime: Date,\r\n //開始位置\r\n StartIndex: string,\r\n //信号点数\r\n SignalCount: number,\r\n //サイズ\r\n SignalSize: number,\r\n //サンプリング周期\r\n SampleSpan: number,\r\n //ユニット\r\n Unit: string,\r\n /**\r\n * OA値\r\n * TRD_DAT_OAVからファイル時間で抽出。\r\n */\r\n OAValue: string,\r\n //判定値情報\r\n JudgeSettingModel: JudgeSettingType[];\r\n //ライン番号\r\n lineNo: number;\r\n}\r\n\r\nexport type ConanGraphLineDataType = {\r\n XValues: string[],\r\n YValues: number[],\r\n YValuesString: string[],\r\n //Y 軸最大値を取得または設定します。\r\n ValueMax: number,\r\n //Y 軸最小値を取得または設定します。\r\n ValueMin: number,\r\n PLCNo: string,\r\n //機器INDEX\r\n MachineIndex: string,\r\n //機器No\r\n MachineNo: string,\r\n //記号\r\n SymbolName: string,\r\n //種別\r\n KindName: string,\r\n //軸\r\n BearingName: string\r\n //エンベロープ項目\r\n EnveNameNo: number,\r\n //データ時刻\r\n GraphDataTime: Date,\r\n //開始位置\r\n StartIndex: string,\r\n //信号点数\r\n SignalCount: number,\r\n //サイズ\r\n SignalSize: number,\r\n //サンプリング周期\r\n SampleSpan: number,\r\n //ユニット\r\n Unit: string,\r\n /**\r\n * OA値\r\n * TRD_DAT_OAVからファイル時間で抽出。\r\n */\r\n OAValue: string,\r\n //判定値情報\r\n JudgeSettingModel: JudgeSettingType[];\r\n //ライン番号\r\n lineNo: number;\r\n}\r\n\r\n/**\r\n * 側帯波診断 表示パラメータ\r\n */\r\nexport type SideBandParam = {\r\n /**\r\n * 理論計算値 f\r\n */\r\n Freq: string,\r\n /**\r\n * 理論計算値 すべり(%)\r\n */\r\n Slide: string,\r\n /**\r\n * 理論計算値 2sf\r\n */\r\n BandWidth: string,\r\n /**\r\n * 理論計算値 -側\r\n */\r\n LowerSideBand: string,\r\n /**\r\n * 理論計算値 +側\r\n */\r\n UpperSideBand: string,\r\n /**\r\n * f 周波数\r\n */\r\n DBFreq: string,\r\n /**\r\n * f dB値\r\n */\r\n DBValue: string,\r\n}\r\n\r\n/**\r\n * 側帯波診断 計算結果\r\n */\r\nexport type SideBandCalc =\r\n {\r\n /**\r\n * ー側 周波数\r\n */\r\n FreqMinus: string,\r\n /**\r\n * ー側 dB値\r\n */\r\n DBMinus: string,\r\n /**\r\n * ー側 差分dB値\r\n */\r\n DBDiffMinus: string,\r\n /**\r\n * +側 周波数\r\n */\r\n FreqPlus: string,\r\n /**\r\n * +側 dB値\r\n */\r\n DBPlus: string,\r\n /**\r\n * +側 差分dB値\r\n */\r\n DBDiffPlus: string,\r\n }\r\n\r\nexport const CreateDefalutMeasureInfoType = (): MeasureInfoType => {\r\n\r\n var dt: MeasureInfoType =\r\n {\r\n AiCard: 0,\r\n AiCh: 0,\r\n DevIndex: 0,\r\n DevName: \"\",\r\n DevNo: \"\",\r\n FftInvalid: 0,\r\n EntryNo: 0,\r\n ItemName: \"\",\r\n ItemNameNo: 0,\r\n KindNo: 0,\r\n LogStart: \"\",\r\n MesName: \"\",\r\n PlcNo: 0,\r\n SetNo: 0,\r\n Speed: 0,\r\n\r\n selectDay: \"\",\r\n selectTime: \"\",\r\n name: \"\",\r\n id: -1,\r\n\r\n };\r\n return dt;\r\n}\r\n\r\nexport const CreateDefalutGraphLineDataType = (): GraphLineDataType => {\r\n\r\n var dt: GraphLineDataType =\r\n {\r\n XValues: [],\r\n YValues: [],\r\n YValuesString: [],\r\n ValueMax: 0,\r\n ValueMin: 0,\r\n PLCNo: '',\r\n AICardNo: '',\r\n ChannelNo: '',\r\n MachineIndex: '',\r\n MachineNo: '',\r\n MachineName: '',\r\n ItemName: '',\r\n EnveNameNo: 0,\r\n GraphDataTime: new Date(),\r\n StartIndex: '',\r\n SignalCount: 0,\r\n SignalSize: 0,\r\n SampleSpan: 0,\r\n Unit: '',\r\n OAValue: \"\",\r\n JudgeSettingModel: [],\r\n lineNo: 0,\r\n };\r\n return dt;\r\n}\r\n\r\n/**\r\n *\r\n * @param itemName 計測データ1~3ラベル表示 未使用\r\n * @param lineColor\r\n * @returns\r\n */\r\nexport const CreateDefalutSelectDataType = (itemName: string, lineColor: string, lineNo: number): SelectDataType => {\r\n var dt: SelectDataType =\r\n {\r\n devid: -1,\r\n mesid: -1,\r\n itemid: -1,\r\n selectDate: new Date(),\r\n selectTime: '',\r\n //itemName: itemName,\r\n lineColor: lineColor,\r\n isSelect: false,\r\n isThreshold: false,\r\n isShow: true,\r\n envelopeNo: 0,\r\n lineNo: lineNo,\r\n };\r\n return dt;\r\n}\r\n\r\n/**\r\n * 速度と変位の対応\r\n * @returns\r\n */\r\nexport const GetComparisonNo = (target?: MeasureInfoType): string => {\r\n var comparisonNo = '0';\r\n if (target?.KindNo == MeasureHighKind.VIBRATION_SPD) {\r\n comparisonNo = String(MeasureHighKind.VIBRATION_SPD);\r\n } else if (target?.KindNo == MeasureHighKind.VIBRATION_DSP) {\r\n comparisonNo = String(MeasureHighKind.VIBRATION_DSP);\r\n }\r\n return comparisonNo\r\n}\r\n\r\n/**\r\n * 計測リストに付加情報追加\r\n */\r\nexport const GetAdditionalMeasureInfoType = (translation: any, target?: MeasureInfoType[]): MeasureInfoType[] => {\r\n if (target == null) {\r\n return [];\r\n }\r\n //番号付与\r\n for (let i = 0; i < target.length; i++) {\r\n target[i].id = i + 1;\r\n }\r\n\r\n //特殊機器追加\r\n // var copys = target.filter((r) => r.Speed == 2 && r.KindNo == 1);\r\n // if (copys != null) {\r\n // for (var i in copys) {\r\n // var test1 = Object.assign(CreateDefalutMeasureInfoType(), copys[i]);\r\n // test1.KindNo = MeasureHighKind.VIBRATION_SPD;\r\n // test1.MesName = GetVibrationSpecialString(test1.KindNo, translation);\r\n // test1.id = target.length + 1;\r\n // target.push(test1);\r\n // var test2 = Object.assign(CreateDefalutMeasureInfoType(), copys[i]);\r\n // test2.KindNo = MeasureHighKind.VIBRATION_DSP;\r\n // test2.MesName = GetVibrationSpecialString(test2.KindNo, translation);\r\n // test2.id = target.length + 1;\r\n // target.push(test2);\r\n // //console.debug(['mesRt,test1,test2,mesRet', test1, test2, target]);\r\n // }\r\n // }\r\n //空行対応の為、デフォルト値を追加\r\n target.push(CreateDefalutMeasureInfoType());\r\n\r\n return target;\r\n};\r\n\r\n/**\r\n * 計測リストから、指定したグループデータと一致する計測データを取得\r\n * @param measureList 計測リスト\r\n * @param groupRow 選択グループアイテム\r\n * @param itemIndex ライン番号画面で表示できる3本のうちのどれなのかを指定\r\n * @returns\r\n */\r\nexport const FindMeasureInfoType =\r\n (measureList: MeasureInfoType[], groupRow: FFTC_CMP_GROUP_SET, itemIndex: number)\r\n : MeasureInfoType | undefined => {\r\n\r\n var plcNo = 0;\r\n var setNo = 0;\r\n var kindInfo = 0;\r\n var kindNo = 0;\r\n\r\n //ライン番号によって取得するカラムを変更\r\n switch (itemIndex) {\r\n case 1:\r\n kindInfo = groupRow.KIND1;\r\n plcNo = groupRow.PLC_NO1;\r\n setNo = 1;\r\n break;\r\n case 2:\r\n kindInfo = groupRow.KIND2;\r\n plcNo = groupRow.PLC_NO2;\r\n setNo = 1;\r\n break;\r\n case 3:\r\n kindInfo = groupRow.KIND3;\r\n plcNo = groupRow.PLC_NO3;\r\n setNo = 1;\r\n break;\r\n default:\r\n kindInfo = 0;\r\n plcNo = 0;\r\n setNo = 0;\r\n }\r\n\r\n var ret: MeasureInfoType | undefined = undefined;\r\n //対象データ検索\r\n //特殊データの場合KindNoを特殊データに入れ替えて検索\r\n switch (kindInfo) {\r\n default:\r\n ret = measureList.find((item) => item.PlcNo === plcNo);\r\n break;\r\n\r\n }\r\n return ret;\r\n };\r\n\r\nexport const GetMeasureInfoType = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/MeasuleInfo\")\r\n .then((res) => res.json())\r\n .then((result: MeasureInfoType[]) => {\r\n if (MeasureInfoTypeListValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\nconst MeasureInfoTypeListValidate = (data: MeasureInfoType[]) => {\r\n\r\n if (data === undefined) return false;\r\n\r\n return true;\r\n};\r\n\r\nexport const GetDataTimeList = (plcNo: number, aiNo: number, chNo: number, targetDay: string, comparisonNo: string, envelopeNo: number, conanNameNo: number): Promise => {\r\n\r\n const url = `api/FFTConanDataInfo/GetConanDataTimeList?plcNo=${plcNo}&&aiCardNo=${aiNo}&&channelNo=${chNo}&&targetTime=${targetDay}&&comparisonNo=${comparisonNo}&&envelopeNo=${envelopeNo}&&conanNameNo=${conanNameNo}`;\r\n console.debug(url);\r\n return new Promise((resolve, reject) => {\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: string[]) => {\r\n if (DataTimeListValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.error(`error : ${error}`);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\nconst DataTimeListValidate = (data: string[]) => {\r\n\r\n if (data === undefined) return false;\r\n\r\n return true;\r\n};\r\n\r\n//\r\n/**\r\n * CSVファイルの存在する時間リストを取得,\r\n * 失敗しても””を返す\r\n * @param plcNo\r\n * @param aiCardNo\r\n * @param channelNo\r\n * @param comparisonNo\r\n * @returns\r\n */\r\nexport const GetLatesTime = (envelopeNo: number, conanNameNo: number, plcNo?: number, aiCardNo?: number, channelNo?: number, comparisonNo?: string): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const url = `api/FFTConanDataInfo/GetConanDataLatestTime?plcNo=${plcNo}&&aiCardNo=${aiCardNo}&&channelNo=${channelNo}&&comparisonNo=${comparisonNo}&&envelopeNo=${envelopeNo}&&conanNameNo=${conanNameNo}`;\r\n console.debug(url);\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: string) => {\r\n console.debug(result);\r\n if (LatesTimeValidate(result)) resolve(result);\r\n resolve(\"\");\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n resolve(\"\");\r\n }\r\n );\r\n });\r\n};\r\n\r\nconst LatesTimeValidate = (data: string) => {\r\n console.debug(\"LatesTimeValidate ckeck\");\r\n if (data === undefined) return false;\r\n\r\n return true;\r\n};\r\n\r\n\r\nexport const GetJudgeSetting = (plcNo: number, aiNo: number, chNo: number): Promise => {\r\n\r\n const url = `api/JudgeSettingModels/${plcNo}/${aiNo}/${chNo}`;\r\n console.debug(url);\r\n return new Promise((resolve, reject) => {\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: JudgeSettingType[]) => {\r\n console.debug([\"GetJudgeSetting fetch\", result]);\r\n if (JudgeSettingValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\nconst JudgeSettingValidate = (data: JudgeSettingType[]) => {\r\n\r\n if (data === undefined) return false;\r\n\r\n return true;\r\n};\r\n\r\n\r\nexport const GetConanChartData = (plcNo: number, aiNo: number, chNo: number, targetDay: string, comparisonNo: string, envelopeNo: number, conanNameNo: number): Promise => {\r\n console.debug([\"envelopeNo\", envelopeNo]);\r\n const url = `api/FFTConanDataInfo/GetConanGraphLineData?plcNo=${plcNo}&&aiCardNo=${aiNo}&&channelNo=${chNo}&&targetTime=${targetDay}&&comparisonNo=${comparisonNo}&&envelopeNo=${envelopeNo}&&conanNameNo=${conanNameNo}`;\r\n console.debug([\"url: \", url]);\r\n return new Promise((resolve, reject) => {\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: GraphLineDataType) => {\r\n //console.debug([\"GetChartData result\", result]);\r\n if (GetChartDataValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\nconst GetChartDataValidate = (data: GraphLineDataType) => {\r\n\r\n if (data === undefined) return false;\r\n\r\n return true;\r\n};\r\n\r\nexport const GetSideBandParam = (plcNo: number, aiNo: number, chNo: number, targetDay: string): Promise => {\r\n const url = `api/FFTConanDataInfo/GetConanSidebandParam?plcNo=${plcNo}&&aiCardNo=${aiNo}&&channelNo=${chNo}&&targetTime=${targetDay}`;\r\n console.debug(url);\r\n return new Promise((resolve, reject) => {\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: SideBandParam) => {\r\n if (GetSideBandParamValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n })\r\n .catch(reason => {\r\n console.log(reason);\r\n reject(reason);\r\n });\r\n });\r\n}\r\nconst GetSideBandParamValidate = (data: SideBandParam) => {\r\n\r\n if (data === undefined) return false;\r\n\r\n return true;\r\n}\r\n\r\nexport const GetSideBandCalc = (plcNo: number, aiNo: number, chNo: number, targetDay: string, band: number): Promise => {\r\n const url = `api/FFTConanDataInfo/GetConanSidebandCalc?plcNo=${plcNo}&&aiCardNo=${aiNo}&&channelNo=${chNo}&&targetTime=${targetDay}&&band=${band}`;\r\n console.debug(url);\r\n return new Promise((resolve, reject) => {\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: SideBandCalc) => {\r\n if (GetSideBandCalcValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n })\r\n .catch(reason => {\r\n console.log(reason);\r\n reject(reason);\r\n });\r\n });\r\n}\r\nconst GetSideBandCalcValidate = (data: SideBandCalc) => {\r\n\r\n if (data === undefined) return false;\r\n\r\n return true;\r\n}\r\n","import React, { useEffect, useState } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { DialogAction } from '../../../function/useModal';\r\nimport { Button, Dialog, DialogTitle, DialogContent, DialogActions } from '@material-ui/core';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { GetSideBandParam, SideBandParam, GetSideBandCalc, SideBandCalc } from './FFTComparisonConanair';\r\nimport NumericEntry from '../../atoms/Input/NumericEntry';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ntype FFTSideBandDiagDialogProps = {\r\n dialog: DialogAction;\r\n plcNo: number;\r\n aiCard: number;\r\n aiCh: number;\r\n target: string;\r\n};\r\n\r\nexport type FFTSideBandDiagDialogResponse = {};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 300px)',\r\n },\r\n tableHeader: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n padding: '1px',\r\n minWidth: '80px',\r\n borderCollapse: `collapse`,\r\n whiteSpace: 'pre-line',\r\n },\r\n tableCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n orderBottomStyle: 'inset',\r\n borderLeftStyle: 'solid',\r\n borderRightStyle: 'solid',\r\n textAlign: 'center',\r\n minWidth: '80px',\r\n height: '8px',\r\n padding: '1px',\r\n },\r\n bandSet: {\r\n marginBottom: '4px',\r\n },\r\n entryBand: {\r\n width: '40px',\r\n },\r\n button: {\r\n width: '150px',\r\n },\r\n })\r\n);\r\n\r\nconst FFTConanairSideBandDiagDialog: React.FC = (props: FFTSideBandDiagDialogProps) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [isOpen, setIsOpen] = useState(true);\r\n const [mode, setMode] = useState(true);\r\n const [freq, setFreq] = useState('');\r\n const [slide, setSlide] = useState('');\r\n const [bandWidth, setBandWidth] = useState('');\r\n const [lowerSideBand, setLowerSideBand] = useState('');\r\n const [upperSideBand, setUpperSideBand] = useState('');\r\n const [dbFreq, setDbFreq] = useState('');\r\n const [dbValue, setDbValue] = useState('');\r\n const [freqMinus, setFreqMinus] = useState('');\r\n const [dbMinus, setDbMinus] = useState('');\r\n const [dbMinusDiff, setDbMinusDiff] = useState('');\r\n const [freqPlus, setFreqPlus] = useState('');\r\n const [dbPlus, setDbPlus] = useState('');\r\n const [dbPlusDiff, setDbPlusDiff] = useState('');\r\n const [entBand, setEntBand] = useState(0);\r\n\r\n useEffect(() => {\r\n GetSideBandParam(props.plcNo, props.aiCard, props.aiCh, props.target).then((prm: SideBandParam) => {\r\n setFreq(prm.Freq);\r\n setSlide(prm.Slide);\r\n setBandWidth(prm.BandWidth);\r\n setLowerSideBand(prm.LowerSideBand);\r\n setUpperSideBand(prm.UpperSideBand);\r\n setDbFreq(prm.DBFreq);\r\n setDbValue(prm.DBValue);\r\n });\r\n }, [props.plcNo, props.aiCard, props.aiCh, props.target]);\r\n\r\n const calcSideband = (band: number) => {\r\n GetSideBandCalc(props.plcNo, props.aiCard, props.aiCh, props.target, entBand).then((prm: SideBandCalc) => {\r\n setFreqMinus(prm.FreqMinus);\r\n setDbMinus(prm.DBMinus);\r\n setDbMinusDiff(prm.DBDiffMinus);\r\n setFreqPlus(prm.FreqPlus);\r\n setDbPlus(prm.DBPlus);\r\n setDbPlusDiff(prm.DBDiffPlus);\r\n });\r\n };\r\n\r\n return (\r\n <>\r\n { }}\r\n onExited={(e) => {\r\n if (mode) {\r\n props.dialog.apply({});\r\n } else {\r\n props.dialog.cancel();\r\n }\r\n }}\r\n >\r\n {t('FFTConanairSideBandDiagDialog.側帯波診断', '側帯波診断')}\r\n \r\n
\r\n {t('FFTConanairSideBandDiagDialog.帯域設定 ±', '帯域設定 ±')}\r\n setEntBand(val)} />\r\n \r\n {\r\n calcSideband(entBand);\r\n }}\r\n >\r\n {t('FFTConanairSideBandDiagDialog.算出', '算出')}\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n {t('FFTConanairSideBandDiagDialog.理論計算値', '理論計算値')}\r\n \r\n \r\n f\r\n \r\n \r\n (1-2s)f\r\n \r\n \r\n (1+2s)f\r\n \r\n \r\n \r\n {t('FFTConanairSideBandDiagDialog.f', 'f')}\r\n \r\n {t('FFTConanairSideBandDiagDialog.すべり', 'すべり')}\r\n \r\n {t('FFTConanairSideBandDiagDialog.2sf', '2sf')}\r\n \r\n {t('FFTConanairSideBandDiagDialog.-側', '-側')}\r\n \r\n {t('FFTConanairSideBandDiagDialog.+側', '+側')}\r\n \r\n {t('FFTConanairSideBandDiagDialog.周波数', '周波数')}\r\n \r\n {t('FFTConanairSideBandDiagDialog.dB値', 'dB値')}\r\n {t('FFTConanairSideBandDiagDialog.周波数', '周波数')}\r\n \r\n {t('FFTSideBandDiagDialog.dB値', 'dB値')}\r\n \r\n {t('FFTConanairSideBandDiagDialog.差分', '差分')}\r\n
\r\n {t('FFTConanairSideBandDiagDialog.dB値', 'dB値')}\r\n
\r\n {t('FFTConanairSideBandDiagDialog.周波数', '周波数')}\r\n \r\n {t('FFTConanairSideBandDiagDialog.dB値', 'dB値')}\r\n \r\n {t('FFTConanairSideBandDiagDialog.差分', '差分')}\r\n
\r\n {t('FFTConanairSideBandDiagDialog.dB値', 'dB値')}\r\n
\r\n
\r\n
\r\n \r\n \r\n {freq}\r\n {slide}\r\n {bandWidth}\r\n {lowerSideBand}\r\n {upperSideBand}\r\n {dbFreq}\r\n {dbValue}\r\n {freqMinus}\r\n {dbMinus}\r\n {dbMinusDiff}\r\n {freqPlus}\r\n {dbPlus}\r\n {dbPlusDiff}\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n {\r\n setIsOpen(false);\r\n setMode(false);\r\n }}\r\n >\r\n {t('FFTConanairSideBandDiagDialog.閉じる', '閉じる')}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default FFTConanairSideBandDiagDialog;\r\n","import React, { useEffect, useState } from 'react';\r\n\r\nimport ColorLineText from '../../atoms/Text/ColorLineText';\r\nimport { ItemComboBox, ComboBoxItemType } from '../../atoms/ComboBox/ItemComboBox';\r\nimport { ItemComboBoxStr, ComboBoxItemTypeS } from '../../atoms/ComboBox/ItemComboBoxStr';\r\nimport {\r\n MeasureInfoType,\r\n SelectDataType,\r\n GetDataTimeList,\r\n GetComparisonNo,\r\n CreateDefalutMeasureInfoType,\r\n} from './FFTComparisonConanair';\r\nimport ItemCalender from '../../atoms/Calendar/ItemCalender';\r\nimport dayjs from 'dayjs';\r\nimport ItemCheckBox from '../../atoms/CheckBox/ItemCheckBox';\r\nimport Button from '@material-ui/core/Button';\r\nimport { Table, TableBody, TableCell, TableRow } from '@material-ui/core';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { useModal } from '../../../function/useModal';\r\nimport FFTSideBandDiagDialog, { FFTSideBandDiagDialogResponse } from './FFTConanairSideBandDiagDialog';\r\nimport DateInput from '../../atoms/Calendar/DateInput';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { IsValidKindOfFftCmpConan } from '../../../function/NameDevSetModel';\r\nimport Box from '@material-ui/core/Box';\r\nimport { GetVibrationSpecialString, MeasureHighKind } from '../../../Constant';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n cellStyle: {\r\n padding: '0px',\r\n borderBottomWidth: '0px',\r\n fontSize: '12px',\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n },\r\n cellStyleNoBorder: {\r\n padding: '0px',\r\n borderBottomWidth: '0px',\r\n fontSize: '12px',\r\n cursor: 'pointer' /* マウスポインタの形状 */,\r\n },\r\n cellSelectStyle: {\r\n background: 'gold',\r\n padding: '0px',\r\n borderBottomWidth: '0px',\r\n fontSize: '12px',\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n },\r\n buttonStyle: {\r\n maxWidth: '180px',\r\n maxHeight: '25px',\r\n minWidth: '50px',\r\n minHeight: '25px',\r\n },\r\n sokuButtonStyle: {\r\n maxWidth: '200px',\r\n maxHeight: '25px',\r\n minWidth: '100px',\r\n minHeight: '25px',\r\n fontSize: '12px',\r\n padding: '1',\r\n },\r\n labelStyle: {\r\n fontSize: '12px',\r\n },\r\n itemBoxStyle: {\r\n fontSize: '12px',\r\n },\r\n })\r\n);\r\n\r\nexport type SelectItemRefreshData = {\r\n selectData: SelectDataType;\r\n mesInfoList: MeasureInfoType[];\r\n fftConanComboBoxList: ComboBoxItemType[];\r\n};\r\n\r\ntype Props = {\r\n refreshData: SelectItemRefreshData;\r\n selectData: SelectDataType;\r\n itemColor: string;\r\n measurementName: string;\r\n onChangeSelectDataEvent: (selectData: SelectDataType) => void;\r\n onChangeSelectDataDispUpDateEvent: (selectData: SelectDataType) => void;\r\n isBlankSelect: boolean;\r\n isUnitSelect: boolean;\r\n onClickUnitSelect: () => void;\r\n onAutoRangeSet: (data: boolean) => void;\r\n};\r\n\r\n//計測種別リスト作成\r\nconst createMeasureList = (data: MeasureInfoType[], isBlankSelect: boolean): ComboBoxItemType[] => {\r\n var ret: ComboBoxItemType[] = [];\r\n if (data != null) {\r\n //コナンエア表示として 有効化を返す\r\n var targetList = data.filter((r) => IsValidKindOfFftCmpConan(r.Speed, 0));\r\n\r\n var measureList = targetList.filter(\r\n (el: MeasureInfoType, index, self) =>\r\n self.findIndex((e: MeasureInfoType) => e.KindNo === el.KindNo && e.MesName === el.MesName) === index\r\n );\r\n console.debug(['★★CreateMeasureList', 'measureList', measureList, 'targetList', targetList]);\r\n for (var i in measureList) {\r\n ret.push({ index: measureList[i].id, name: measureList[i].MesName });\r\n }\r\n\r\n //空行追加\r\n if (isBlankSelect) ret.push({ index: -1, name: '' });\r\n }\r\n return ret;\r\n};\r\n\r\n//機器種別リスト作成\r\nconst createDevList = (data: MeasureInfoType[], measureId: number): ComboBoxItemType[] => {\r\n var ret: ComboBoxItemType[] = [];\r\n if (data != null) {\r\n var data = data.filter((r) => IsValidKindOfFftCmpConan(r.Speed, 0));\r\n\r\n // var mes = data.find((item) => item.id === measureId);\r\n // console.debug([\"★★createDevList - data,mes\", data, mes]);\r\n // //speed2でfilter後、groupby\r\n var itemNameList = data.filter(\r\n (el: MeasureInfoType, index, self) =>\r\n self.findIndex((e: MeasureInfoType) => e.DevIndex === el.DevIndex) === index\r\n );\r\n // console.debug([\"★★createDevList - itemNameList\", itemNameList]);\r\n if (measureId !== -1) {\r\n for (var i in itemNameList) {\r\n ret.push({\r\n index: itemNameList[i].id,\r\n name: itemNameList[i].DevNo + itemNameList[i].DevName,\r\n });\r\n }\r\n }\r\n console.debug([\"createDevList - ret\", ret]);\r\n }\r\n return ret;\r\n};\r\n\r\n/**\r\n * 項目種別リスト作成\r\n * @param data\r\n * @param measureId\r\n * @param devId\r\n * @returns\r\n */\r\nconst createItemList = (data: MeasureInfoType[], measureId: number, devId: number): ComboBoxItemType[] => {\r\n let ret: ComboBoxItemType[] = [];\r\n if (data === null) {\r\n return ret;\r\n }\r\n\r\n let targetDatas = data.filter((r) => IsValidKindOfFftCmpConan(r.Speed, 0));\r\n // let mes = targetDatas.find((item) => item.id === measureId);\r\n let dev = targetDatas.find((item) => item.id === devId);\r\n\r\n //speed2でfilter後、groupby\r\n var itemNameList = targetDatas.filter(\r\n (el: MeasureInfoType, index, self) =>\r\n self.findIndex(\r\n (e: MeasureInfoType) =>\r\n // e.KindNo === mes?.KindNo &&\r\n e.DevIndex === dev?.DevIndex &&\r\n e.ItemNameNo === el.ItemNameNo &&\r\n e.ItemName === el.ItemName\r\n ) === index\r\n );\r\n\r\n for (var i in itemNameList) {\r\n ret.push({ index: itemNameList[i].id, name: itemNameList[i].ItemName });\r\n }\r\n return ret;\r\n};\r\n\r\n/**\r\n * 時間リスト作成\r\n * @param data\r\n * @returns\r\n */\r\nexport const createTimeList = (data: string[]): ComboBoxItemTypeS[] => {\r\n var ret: ComboBoxItemTypeS[] = [];\r\n for (var i in data) {\r\n var time = dayjs(data[i]).format('HH:mm:ss');\r\n ret.push({ key: time, name: time });\r\n }\r\n return ret;\r\n};\r\n\r\nconst FFTComparisonConanairSelectItem: React.FC = (props) => {\r\n const { t, i18n } = useTranslation();\r\n const classes = useStyles();\r\n const [mesInfoList, setMesInfoList] = React.useState([]);\r\n\r\n const [mesList, setMesList] = React.useState([]);\r\n const [devList, setDevList] = React.useState([]);\r\n const [itemList, setItemList] = React.useState([]);\r\n const [envelopeList, setEnvelopeList] = React.useState([]);\r\n const [timeList, setTimeList] = useState();\r\n const [selectData, setSelectData] = useState(props.selectData);\r\n const [flgSideBand, actSideBand] = useModal();\r\n const [sbPlcNo, setSbPlcNo] = useState(0);\r\n const [sbAiCard, setSbAiCard] = useState(0);\r\n const [sbAiCh, setSbAiCh] = useState(0);\r\n const [sbTarget, setSbTarget] = useState('');\r\n\r\n /**\r\n * エンベロープ切替\r\n */\r\n useEffect(() => {\r\n let envelopeList: ComboBoxItemType[] = [];\r\n envelopeList.push({ index: 0, name: \"なし\" });\r\n envelopeList.push({ index: 1, name: \"あり\" });\r\n setEnvelopeList(envelopeList);\r\n\r\n }, []);\r\n\r\n /**\r\n * 計測種別\r\n * 振動(速度)、振動(変位)のみ多言語切替\r\n */\r\n const changeLangMeasCombos = (items: ComboBoxItemType[]) => {\r\n console.debug(['-- useEffect changeLangMeasCombos --', 'items', items, 'mesInfoList', mesInfoList]);\r\n if (items?.length) {\r\n\r\n // //振動(速度)\r\n // const fftSpd = items.find((item) =>\r\n // mesInfoList.find(({ id, KindNo }) => item.index === id && KindNo === MeasureHighKind.VIBRATION_SPD)\r\n // );\r\n // if (fftSpd) {\r\n // fftSpd.name = GetVibrationSpecialString(MeasureHighKind.VIBRATION_SPD, t);\r\n // }\r\n // //振動(変位)\r\n // const fftDsp = items.find((item) =>\r\n // mesInfoList.find(({ id, KindNo }) => item.index === id && KindNo === MeasureHighKind.VIBRATION_DSP)\r\n // );\r\n // if (fftDsp) {\r\n // fftDsp.name = GetVibrationSpecialString(MeasureHighKind.VIBRATION_DSP, t);\r\n // }\r\n\r\n // console.debug(['fftSpd:', fftSpd, 'fftDsp:', fftDsp]);\r\n setMesList([...items]);\r\n }\r\n };\r\n\r\n // 言語切替\r\n useEffect(() => {\r\n console.debug(['FFTComparisonConanairSetting useEffect i18n']);\r\n changeLangMeasCombos(mesList);\r\n }, [i18n.language]);\r\n\r\n //コンボボックスデータ作成\r\n useEffect(() => {\r\n var dt = props.refreshData;\r\n console.debug(['FFTComparisonConanairSelectItem useEffect props.refreshData', dt]);\r\n if (dt !== undefined && dt.mesInfoList.length !== 0) {\r\n console.debug(dt.selectData);\r\n var sdt = dt.selectData;\r\n var mesList: ComboBoxItemType[] = [];\r\n var devList: ComboBoxItemType[] = [];\r\n var itemList: ComboBoxItemType[] = [];\r\n\r\n //mesList = createMeasureList(dt.mesInfoList, props.isBlankSelect);\r\n mesList = props.refreshData.fftConanComboBoxList;\r\n\r\n\r\n //console.debug('FFTComparisonSelectItem useEffect -- mesList --', mesList);\r\n if (mesList.length !== 0) {\r\n devList = createDevList(dt.mesInfoList, sdt.mesid);\r\n }\r\n if (devList.length !== 0) {\r\n itemList = createItemList(dt.mesInfoList, sdt.mesid, sdt.devid);\r\n }\r\n setMesInfoList(dt.mesInfoList);\r\n setMesList(mesList);\r\n setDevList(devList);\r\n setItemList(itemList);\r\n\r\n upDateTimeList(dt.mesInfoList, sdt.mesid, sdt.devid, sdt.itemid, sdt.selectDate, sdt.selectTime);\r\n\r\n props.onChangeSelectDataEvent(dt.selectData);\r\n }\r\n }, [props.refreshData]);\r\n\r\n\r\n\r\n /**\r\n * 時間選択コンボボックスデータ更新\r\n * @param measureList\r\n * @param mesid\r\n * @param devid\r\n * @param itemid\r\n * @param date\r\n * @param time\r\n * @returns\r\n */\r\n const upDateTimeList = (\r\n measureList: MeasureInfoType[],\r\n mesid: number,\r\n devid: number,\r\n itemid: number,\r\n date: Date,\r\n time: string\r\n ) => {\r\n const initSelectData = { ...selectData, mesid: mesid, devid: -1, itemid: -1, selectDate: date, selectTime: '' };\r\n if (measureList.length === 0) {\r\n setSelectData({ ...initSelectData });\r\n props.onChangeSelectDataEvent(initSelectData);\r\n return;\r\n }\r\n\r\n //let mes = measureList.find((item) => item.id === mesid);\r\n let dev = measureList.find((item) => item.id === devid);\r\n let itemdt = measureList.find((item) => item.id === itemid);\r\n let day = dayjs(date).format('YYYY-MM-DD');\r\n\r\n if (dev === undefined || itemdt === undefined) {\r\n setSelectData({ ...initSelectData });\r\n props.onChangeSelectDataEvent(initSelectData);\r\n //console.debug([\"setSelectData\", initSelectData, measureList, selectData]);\r\n return;\r\n }\r\n\r\n //対象レコード取得\r\n let target = measureList.find((item) => {\r\n return item.DevIndex === dev?.DevIndex && item.ItemNameNo === itemdt?.ItemNameNo && item.Speed === 6;\r\n });\r\n console.debug([\"★★target, measureList, selectData, day\", target, measureList, selectData, day]);\r\n if (target === undefined) {\r\n setSelectData({ ...initSelectData });\r\n props.onChangeSelectDataEvent(initSelectData);\r\n return;\r\n }\r\n\r\n let comparisonNo = GetComparisonNo(target);\r\n //console.debug([\"★★target2\", Number(target.PlcNo), Number(target.AiCard), Number(target.AiCh), day, comparisonNo, selectData.envelopeNo, mesid])\r\n //時間リスト取得\r\n GetDataTimeList(Number(target.PlcNo), Number(target.AiCard), Number(target.AiCh), day, comparisonNo, selectData.envelopeNo, mesid).then((ret) => {\r\n if (ret) {\r\n let timeList = createTimeList(ret);\r\n\r\n if (timeList.length === 0) {\r\n time = '';\r\n } else {\r\n if (time !== '') {\r\n let t = timeList.find((row) => row.key === time);\r\n if (t === undefined) {\r\n time = timeList[0].key;\r\n }\r\n } else {\r\n time = timeList[0].key;\r\n }\r\n }\r\n //時間でソートを行う\r\n timeList.sort(function (a, b) {\r\n if (a.name > b.name) {\r\n return 1;\r\n } else {\r\n return -1;\r\n }\r\n });\r\n\r\n setTimeList(timeList);\r\n\r\n let tmp = { ...selectData, mesid: mesid, devid: devid, itemid: itemid, selectDate: date, selectTime: time };\r\n setSelectData({ ...tmp });\r\n props.onChangeSelectDataEvent(tmp);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n *計測種別変更event\r\n * @param event\r\n */\r\n const onChangeMesSelect = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n props.onAutoRangeSet(true);\r\n if (Number(event.target.value) == -1) {\r\n console.debug([\"★★noSelect\", Number(event.target.value)]);\r\n let devList = createDevList(mesInfoList, -1);\r\n let itemList = createItemList(mesInfoList, -1, -1);\r\n setDevList(devList);\r\n setItemList(itemList);\r\n upDateTimeList(mesInfoList, -1, -1, -1, selectData.selectDate, '');\r\n } else {\r\n // var mes = mesInfoList.find((item) => item.id === Number(event.target.value));\r\n var devList = createDevList(mesInfoList, 0);\r\n var itemList = createItemList(mesInfoList, 0, devList[0].index);\r\n setDevList(devList);\r\n setItemList(itemList);\r\n upDateTimeList(mesInfoList, Number(event.target.value), devList[0].index, itemList[0].index, selectData.selectDate, '');\r\n }\r\n };\r\n\r\n /**\r\n *機器選択変更event\r\n * @param event\r\n */\r\n const onChangeDevSelect = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n // var mes = mesInfoList.find((item) => item.id === selectData.mesid);\r\n let mesId = selectData.mesid;\r\n var dev = mesInfoList.find((item) => item.id === Number(event.target.value));\r\n if (dev !== undefined) {\r\n var itemList = createItemList(mesInfoList, mesId, dev.id);\r\n setItemList(itemList);\r\n upDateTimeList(mesInfoList, mesId, dev.id, itemList[0].index, selectData.selectDate, '');\r\n }\r\n };\r\n\r\n /**\r\n *項目選択変更event\r\n * @param event\r\n */\r\n const onChangeItemSelect = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n // var mes = mesInfoList.find((item) => item.id === selectData.mesid);\r\n var dev = mesInfoList.find((item) => item.id === selectData.devid);\r\n var itm = mesInfoList.find((item) => item.id === Number(event.target.value));\r\n if (dev !== undefined && itm !== undefined) {\r\n upDateTimeList(mesInfoList, selectData.mesid, dev.id, itm.id, selectData.selectDate, '');\r\n }\r\n };\r\n\r\n /**\r\n * エンベロープ変更event\r\n * @param event \r\n */\r\n const onChangeEnvelopeSelect = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n // console.debug(['mes--', mes]);\r\n var tmp = { ...selectData, envelopeNo: Number(event.target.value) };\r\n setSelectData({ ...tmp });\r\n\r\n console.debug(['handleTimeSelectChange - old,new', selectData, tmp]);\r\n props.onChangeSelectDataEvent(tmp);\r\n };\r\n\r\n /**\r\n * カレンダー選択変更event\r\n */\r\n const onCnageSelectCalendarValue = (value: string) => {\r\n var selectDay = new Date(value);\r\n upDateTimeList(mesInfoList, selectData.mesid, selectData.devid, selectData.itemid, selectDay, '');\r\n };\r\n /**\r\n * 時間変更event\r\n * @param event\r\n */\r\n const onChangeSelectTime = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n var time = timeList?.find((row) => row.key === event.target.value);\r\n if (time) {\r\n var tmp = { ...selectData, selectTime: time.key };\r\n setSelectData({ ...tmp });\r\n console.debug(['handleTimeSelectChange - old,new', selectData, tmp]);\r\n props.onChangeSelectDataEvent(tmp);\r\n }\r\n };\r\n\r\n /**\r\n *表示チェックボックス状態変更時\r\n */\r\n const handleIsShowChange = () => {\r\n var tmp = { ...selectData, isShow: !selectData.isShow };\r\n setSelectData({ ...tmp });\r\n props.onChangeSelectDataDispUpDateEvent(tmp);\r\n };\r\n\r\n const handleIsSelectChange = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n var tmp = { ...selectData, isSelect: !selectData.isSelect };\r\n setSelectData({ ...tmp });\r\n props.onChangeSelectDataEvent(tmp);\r\n };\r\n\r\n /**\r\n * 閾値設定\r\n * @param event\r\n */\r\n const handleIsThresholdChange = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n var tmp = { ...selectData, isThreshold: !selectData.isThreshold };\r\n setSelectData({ ...tmp });\r\n props.onChangeSelectDataDispUpDateEvent(tmp);\r\n };\r\n\r\n const sideBandDiag = flgSideBand ? (\r\n \r\n ) : null;\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n handleIsShowChange()} />\r\n \r\n {\r\n props.onClickUnitSelect();\r\n }}\r\n >\r\n {props.measurementName} \r\n \r\n \r\n
\r\n \r\n \r\n handleIsThresholdChange(e)}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n handleIsSelectChange(e)}\r\n />\r\n \r\n {/* \r\n \r\n */}\r\n \r\n \r\n \r\n {sideBandDiag}\r\n \r\n );\r\n};\r\n\r\nexport default FFTComparisonConanairSelectItem;\r\n","import React, { useEffect } from 'react';\r\nimport { GraphData, GraphPoint } from './FFTComparisonConanairChart';\r\nimport { Table, TableBody, TableCell, TableHead, TableRow } from '@material-ui/core';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { useTranslation } from 'react-i18next';\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n\r\n headerStyle: {\r\n borderWidth: '1px',\r\n borderColor: '#000000',\r\n borderStyle: 'solid',\r\n padding: '0px',\r\n textAlign: 'center',\r\n },\r\n tdStyle: {\r\n borderWidth: '1px',\r\n borderColor: '#000000',\r\n borderStyle: 'solid',\r\n padding: '2px',\r\n },\r\n })\r\n);\r\n\r\nexport type FrequencyDataType = {\r\n frequency: number;\r\n value: number;\r\n};\r\n\r\nconst getFrequencyData = (data: GraphData): GraphPoint[] => {\r\n type tmpType = {\r\n prev: GraphPoint;\r\n current: GraphPoint;\r\n next: GraphPoint;\r\n };\r\n var tmpList: tmpType[] = [];\r\n var pTempList: GraphPoint[] = [];\r\n\r\n //前、今、次の3点の組み合わせのコレクションを作成\r\n if (data !== undefined) {\r\n data.points.pop();\r\n var a = data.points;\r\n var b = data.points.slice(1);\r\n var c = data.points.slice(2);\r\n for (var i in c) {\r\n tmpList.push({ prev: a[i], current: b[i], next: c[i] });\r\n }\r\n\r\n const fill = tmpList.filter((v, index) => {\r\n return v.prev.yValue < v.current.yValue && v.next.yValue < v.current.yValue;\r\n });\r\n\r\n //カレントデータ取得\r\n\r\n for (var j in fill) {\r\n pTempList.push(fill[j].current);\r\n }\r\n\r\n //ソート降順\r\n pTempList.sort(function (a, b) {\r\n if (a.yValue > b.yValue) return -1;\r\n if (a.yValue < b.yValue) return 1;\r\n return 0;\r\n });\r\n\r\n // console.debug('==TEST==');\r\n // console.debug(`==fill==count ${fill.length} `);\r\n // console.debug(pTempList);\r\n }\r\n return pTempList;\r\n};\r\n\r\ntype Props = {\r\n graphData: GraphData | undefined;\r\n};\r\n\r\nconst FFTComparisonConanairFrequency: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n\r\n const [frequencyDataList, setFrequencyDataList] = React.useState([]);\r\n\r\n useEffect(() => {\r\n var dt: FrequencyDataType[] = [];\r\n dt.push({ frequency: 0, value: 0 });\r\n dt.push({ frequency: 0, value: 0 });\r\n dt.push({ frequency: 0, value: 0 });\r\n dt.push({ frequency: 0, value: 0 });\r\n dt.push({ frequency: 0, value: 0 });\r\n setFrequencyDataList(dt);\r\n }, []);\r\n\r\n useEffect(() => {\r\n var dt: FrequencyDataType[] = [];\r\n dt.push({ frequency: 0, value: 0 });\r\n dt.push({ frequency: 0, value: 0 });\r\n dt.push({ frequency: 0, value: 0 });\r\n dt.push({ frequency: 0, value: 0 });\r\n dt.push({ frequency: 0, value: 0 });\r\n\r\n if (props.graphData) {\r\n var points = getFrequencyData(props.graphData);\r\n for (let i = 0; i < dt.length; ++i) {\r\n if (points.length > i) {\r\n dt[i].frequency = points[i].xValue;\r\n dt[i].value = points[i].yValue;\r\n }\r\n }\r\n }\r\n setFrequencyDataList(dt);\r\n }, [props.graphData]);\r\n\r\n return (\r\n \r\n \r\n \r\n No.\r\n {t('FFTComparisonConanairFrequency.周波数(Hz)', '周波数(Hz)')}\r\n {t('FFTComparisonConanairFrequency.値', '値')}\r\n \r\n \r\n \r\n {frequencyDataList?.map((row, index) => (\r\n \r\n {index + 1}\r\n {row.frequency === 0 ? '' : row.frequency.toFixed(1)}\r\n \r\n {row.value === 0 ? '' : row.value.toExponential(3)}\r\n \r\n \r\n ))}\r\n {/* //将来用\r\n \r\n {t('FFTComparisonConanairFrequency.OA値', 'OA値:')}\r\n {props.graphData != null ? props.graphData.oaValue : ''}\r\n \r\n */}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default FFTComparisonConanairFrequency;\r\n","import React, { useEffect, useState, useMemo } from 'react';\r\nimport FFTComparisonConanairSelectItem, { SelectItemRefreshData } from './FFTComparisonConanairSelectItem';\r\nimport FFTComparisonConanairFrequency from './FFTComparisonConanairFrequency';\r\nimport { SelectDataType } from './FFTComparisonConanair';\r\nimport { GraphData } from './FFTComparisonConanairChart';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { Table, TableBody, TableCell, TableRow } from '@material-ui/core';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tdStyle: {\r\n padding: 0,\r\n },\r\n })\r\n);\r\n\r\ntype Props = {\r\n refreshData: SelectItemRefreshData;\r\n selectData: SelectDataType;\r\n measurementName: string;\r\n graphData: GraphData | undefined;\r\n onChangeSelectDataEvent: (selectData: SelectDataType) => void;\r\n onChangeSelectDataDispUpDateEvent: (selectData: SelectDataType) => void;\r\n isBlankSelect: boolean;\r\n isUnitSelect: boolean;\r\n onClickUnitSelect: () => void;\r\n onAutoRangeSet: (data: boolean) => void;\r\n};\r\n\r\nconst FFTComparisonConanairInfo: React.FC = (props) => {\r\n const classes = useStyles();\r\n\r\n //console.debug(['FFTComparisonInfo - 画面描画開始 -', props]);\r\n return (\r\n \r\n \r\n \r\n \r\n props.onChangeSelectDataEvent(e)}\r\n onChangeSelectDataDispUpDateEvent={(e) => props.onChangeSelectDataDispUpDateEvent(e)}\r\n itemColor={props.selectData.lineColor}\r\n isBlankSelect={props.isBlankSelect}\r\n isUnitSelect={props.isUnitSelect}\r\n onClickUnitSelect={() => {\r\n props.onClickUnitSelect();\r\n }}\r\n onAutoRangeSet={props.onAutoRangeSet}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default FFTComparisonConanairInfo;\r\n","import React, { useEffect } from 'react';\r\nimport { ItemComboBox, ComboBoxItemType } from '../../atoms/ComboBox/ItemComboBox';\r\nimport RangeInputNumber from '../../molecules/Range/RangeInputNumber';\r\nimport Radio from '@material-ui/core/Radio';\r\n\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { TFunction, useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableStyle: {\r\n fontSize: '13px',\r\n },\r\n labelStyle: {\r\n fontSize: '13px',\r\n },\r\n itemBoxStyle: {\r\n fontSize: '13px',\r\n },\r\n })\r\n);\r\n\r\nexport type RangeType = {\r\n id: number;\r\n min: number;\r\n max: number;\r\n splitsCount: number;\r\n};\r\n\r\nexport type RangeSelectDataType = {\r\n rengeId: number;\r\n rengeMin: number;\r\n rengeMax: number;\r\n dbId: number;\r\n dbMin: number;\r\n dbMax: number;\r\n selectAxis: string;\r\n yMin: number; //Y軸設定最小値\r\n yMax: number; //Y軸設定最大値\r\n holdLinearValueMin: number;\r\n holdLinearValueMax: number;\r\n yUnit: string; //Y軸の範囲\r\n};\r\n\r\n//計測種別リスト作成\r\nconst createRengeList = (data: RangeType[], t: TFunction<'translation'>): ComboBoxItemType[] => {\r\n var ret: ComboBoxItemType[] = [];\r\n if (data != null) {\r\n for (var i in data) {\r\n ret.push({\r\n index: data[i].id,\r\n name: data[i].id === -1 ? t('FFTComparisonConanairChartSetting.任意', '任意') : `${data[i].min} ~ ${data[i].max}`,\r\n });\r\n }\r\n }\r\n return ret;\r\n};\r\n\r\ntype Props = {\r\n rangeSelectData: RangeSelectDataType;\r\n onChangeRangeSelectDataEvent: (selectData: RangeSelectDataType) => void;\r\n};\r\n\r\nconst FFTComparisonConanairChartSetting: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n console.debug('FFTComparisonConanairChartSetting -- props', props);\r\n\r\n const [frequencyRangeList, setFrequencyRangeList] = React.useState([]);\r\n const [frequencyRengeCmd, setFrequencyRengeCmd] = React.useState([]);\r\n\r\n const [dBRangeList, setdBRangeList] = React.useState([]);\r\n const [dBRangeCmd, setdBRangeCmd] = React.useState([]);\r\n\r\n const [rangeSelectData, setRangeSelectData] = React.useState(props.rangeSelectData);\r\n\r\n const [selectAxis, setSelectAxis] = React.useState('r');\r\n\r\n useEffect(() => {\r\n var dt: RangeType[] = [];\r\n dt.push({ id: 1, min: 0, max: 100, splitsCount: 10 });\r\n dt.push({ id: 2, min: 0, max: 500, splitsCount: 10 });\r\n dt.push({ id: 3, min: 0, max: 600, splitsCount: 10 });\r\n dt.push({ id: -1, min: 0, max: 0, splitsCount: 0 });\r\n setFrequencyRangeList(dt);\r\n setRangeSelectData({ ...rangeSelectData, rengeId: -1, rengeMin: 0, rengeMax: 100 });\r\n\r\n var dt2: RangeType[] = [];\r\n dt2.push({ id: 1, min: -80, max: 0, splitsCount: 4 });\r\n dt2.push({ id: 2, min: -100, max: 0, splitsCount: 5 });\r\n setdBRangeList(dt2);\r\n\r\n setFrequencyRengeCmd(createRengeList(dt, t));\r\n setdBRangeCmd(createRengeList(dt2, t));\r\n }, []);\r\n\r\n useEffect(() => {\r\n setRangeSelectData({ ...props.rangeSelectData });\r\n }, [props.rangeSelectData]);\r\n useEffect(() => {\r\n //console.debug('tyousa - useEffect - rangeSelectData', rangeSelectData);\r\n //props.onChangeRangeSelectDataEvent(rangeSelectData);\r\n }, [rangeSelectData]);\r\n\r\n const ChangeRRengeSelect = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n var renge = frequencyRangeList.find((item) => item.id === Number(event.target.value));\r\n if (renge !== undefined) {\r\n if (renge.id === -1) {\r\n renge.min = rangeSelectData.rengeMin;\r\n renge.max = rangeSelectData.rengeMax;\r\n }\r\n rangeSelectData.rengeId = renge.id;\r\n rangeSelectData.rengeMin = renge.min;\r\n rangeSelectData.rengeMax = renge.max;\r\n setRangeSelectData({ ...rangeSelectData });\r\n props.onChangeRangeSelectDataEvent(rangeSelectData);\r\n }\r\n };\r\n\r\n const ChangeBRengeSelect = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n var renge = dBRangeList.find((item) => item.id === Number(event.target.value));\r\n //console.debug(['tyousa ChangeBRengeSelect', renge, selectAxis]);\r\n if (renge !== undefined) {\r\n rangeSelectData.dbId = renge.id;\r\n rangeSelectData.dbMin = renge.min;\r\n rangeSelectData.dbMax = renge.max;\r\n\r\n setRangeSelectData({ ...rangeSelectData });\r\n props.onChangeRangeSelectDataEvent(rangeSelectData);\r\n }\r\n };\r\n\r\n /**\r\n * レンジ設定変更event\r\n * @param min\r\n * @param max\r\n * @returns\r\n */\r\n const onChangeInputRenge = (min: number, max: number) => {\r\n if (rangeSelectData.rengeMin === min && rangeSelectData.rengeMax === max) {\r\n return;\r\n }\r\n console.debug(['onChangeInputRenge', min, max, rangeSelectData]);\r\n if (rangeSelectData.rengeId === -1) {\r\n let tmp = { ...rangeSelectData, rengeMin: min, rengeMax: max };\r\n setRangeSelectData({ ...tmp });\r\n props.onChangeRangeSelectDataEvent(tmp);\r\n }\r\n };\r\n\r\n /**\r\n * Y軸レンジ変更event\r\n * @param min\r\n * @param max\r\n * @returns\r\n */\r\n const onChangeYRenge = (min: number, max: number) => {\r\n if (rangeSelectData.yMin === min && rangeSelectData.yMax === max) {\r\n return;\r\n }\r\n console.debug(['onChangeYRenge', min, max, rangeSelectData]);\r\n let tmp = { ...rangeSelectData, yMin: min, yMax: max };\r\n setRangeSelectData({ ...tmp });\r\n props.onChangeRangeSelectDataEvent(tmp);\r\n };\r\n\r\n const changeAxis = (event: React.ChangeEvent) => {\r\n //console.debug('■■■tyousa changeAxis() Start val:', event.target.value, rangeSelectData);\r\n\r\n setSelectAxis(event.target.value);\r\n let tmp = { ...rangeSelectData, selectAxis: event.target.value };\r\n setRangeSelectData({ ...tmp });\r\n props.onChangeRangeSelectDataEvent(tmp);\r\n //console.debug('■■■tyousa changeAxis() End');\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
{t('FFTComparisonConanairChartSetting.周波数軸範囲', '周波数軸範囲:')}\r\n \r\n Hz
{t('FFTComparisonConanairChartSetting.グラフ縦軸範囲', 'グラフ縦軸範囲:')}\r\n \r\n {rangeSelectData.yUnit}
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
{t('FFTComparisonConanairChartSetting.振動幅', '振動幅:')}\r\n \r\n {t('FFTComparisonConanairChartSetting.リニア', 'リニア')}\r\n \r\n dB\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default FFTComparisonConanairChartSetting;\r\n","import React, { useEffect, useState, useMemo, useRef } from 'react';\r\nimport { LineChart, Line, XAxis, YAxis, CartesianGrid, ResponsiveContainer, Label, Tooltip } from 'recharts';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\n\r\nimport {\r\n MeasureInfoType,\r\n SelectDataType,\r\n GetJudgeSetting,\r\n GetConanChartData,\r\n GraphLineDataType,\r\n JudgeSettingType,\r\n GetComparisonNo,\r\n} from './FFTComparisonConanair';\r\nimport dayjs from 'dayjs';\r\nimport * as Constant from '../../../Constant';\r\nimport { ToValueMaxRound, ToValueMinRound } from '../../../function/CalculationModel';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { CcTypKind } from '../../../Constant';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n customTooltip: {\r\n background: '#FFFFEE',\r\n fontSize: '14px',\r\n padding: '10px 10px 0px 20px',\r\n },\r\n })\r\n);\r\n\r\nexport type GraphDispSetting = {\r\n yMin: number;\r\n yMax: number;\r\n xMin: number;\r\n xMax: number;\r\n selectAxis: string;\r\n isPileup: boolean;\r\n\r\n isThreshold1: boolean;\r\n isThreshold2: boolean;\r\n isThreshold3: boolean;\r\n\r\n isShow1: boolean;\r\n isShow2: boolean;\r\n isShow3: boolean;\r\n\r\n unitSelectIndex: number;\r\n};\r\n\r\nexport type GraphData = {\r\n lineNo: number;\r\n lineName: string;\r\n points: GraphPoint[];\r\n valueUpper: number;\r\n valueUpperLimit: number;\r\n selectFlg: boolean;\r\n infoColor: string;\r\n yValueMax: number; // 表示対象の範囲内での最大値\r\n yValueMin: number; // 表示対象の範囲内での最大値\r\n /**\r\n * OA値\r\n */\r\n oaValue: string;\r\n};\r\nexport type GraphPoint = {\r\n xValue: number;\r\n yValue: number;\r\n};\r\n\r\nexport type ChartUpDateInfo = {\r\n line1: SelectDataType;\r\n line2: SelectDataType;\r\n line3: SelectDataType;\r\n mesList: MeasureInfoType[];\r\n isInitDisp: boolean; //初期表示フラグ(画面遷移から来た時の表示時にtrue,ボタン表示時false)\r\n};\r\n\r\ntype GraphSetting = {\r\n yMin: number;\r\n yMax: number;\r\n xMin: number;\r\n xMax: number;\r\n backColor: string;\r\n memoryFontColor: string;\r\n yUnit: string;\r\n xUnit: string;\r\n yUnitColor: string;\r\n xUnitColor: string;\r\n gridColor: string;\r\n};\r\n\r\ntype FetchDataType = {\r\n lineDatas: GraphLineDataType[];\r\n chartDataInfo: ChartUpDateInfo;\r\n};\r\n\r\ntype Props = {\r\n chartInfo: ChartUpDateInfo;\r\n graphDispSetting: GraphDispSetting;\r\n onChangeGraphDataEvent: (GraphDatas: GraphData[], yMin: number, yMax: number, yUnit: string) => void;\r\n chartContainerStyle: string;\r\n updateLoadginState: (value: boolean) => void;\r\n isFFTAutoRangeRef: boolean;\r\n onFFTAutoRamgeSet: (data: boolean) => void;\r\n};\r\n\r\n/**\r\n * 重、軽故障ライン DB差分時値変換処理\r\n * @param valueMax\r\n * @param value\r\n * @param isdb\r\n * @returns\r\n */\r\nconst getLIMValue = (value: number, isdb: boolean): number => {\r\n if (isdb) {\r\n return value === 0 ? 0 : value * -1;\r\n } else {\r\n return value;\r\n }\r\n};\r\n\r\n/**\r\n *閾値のグラフデータ作成\r\n * @param data ラインデータ\r\n * @param isdb 振幅軸の表示モード\r\n */\r\nconst createGraphThreshold = (\r\n lineIndex: number,\r\n lineHide: boolean,\r\n data: GraphLineDataType,\r\n isdb: boolean\r\n): GraphData[] | undefined => {\r\n var ret: GraphData[] = [];\r\n if (data == undefined || data.JudgeSettingModel == undefined) {\r\n return undefined;\r\n }\r\n\r\n //診断タイプがdbかそれ以外か\r\n let selectGraphItems: JudgeSettingType[] = [];\r\n\r\n if (isdb) {\r\n selectGraphItems = data.JudgeSettingModel.filter((r) => r.ClcTypeNo === CcTypKind.DBD);\r\n } else {\r\n selectGraphItems = data.JudgeSettingModel.filter((r) => r.ClcTypeNo !== CcTypKind.DBD);\r\n }\r\n\r\n for (let i = 0; i < selectGraphItems.length; i++) {\r\n var graphPoints: GraphPoint[] = [];\r\n var jset = selectGraphItems[i];\r\n\r\n if (jset.BandValue > 0) {\r\n let x = jset.FreqCenter - (jset.FreqCenter * jset.BandValue) / 100;\r\n let y = getLIMValue(Number(jset.SeriousFailure), isdb);\r\n graphPoints.push({ xValue: x, yValue: y });\r\n\r\n x = jset.FreqCenter + (jset.FreqCenter * jset.BandValue) / 100;\r\n y = getLIMValue(Number(jset.SeriousFailure), isdb);\r\n\r\n graphPoints.push({ xValue: x, yValue: y });\r\n\r\n console.debug([\r\n 'createGraphThreshold - valueMax, SeriousFailure(value), isdb,ans',\r\n 'value === 0 ? 0 : Math.log10(Math.abs(value) / valueMax) * 20',\r\n data.ValueMax,\r\n Number(jset.SeriousFailure),\r\n isdb,\r\n y,\r\n graphPoints\r\n ]);\r\n } else {\r\n x = jset.FreqCenter;\r\n y = getLIMValue(Number(jset.SeriousFailure), isdb);\r\n graphPoints.push({ xValue: x, yValue: y });\r\n }\r\n\r\n var almLine: GraphData = {\r\n lineNo: 10 + lineIndex + i,\r\n lineName: `ALM_LIM_${lineIndex}_${i}`,\r\n points: graphPoints,\r\n valueUpper: 0,\r\n valueUpperLimit: 0,\r\n selectFlg: lineHide,\r\n infoColor: '#f8bbd0', //ffccbc\r\n yValueMax: 0,\r\n yValueMin: 0,\r\n oaValue: '',\r\n };\r\n\r\n ret.push(almLine);\r\n\r\n graphPoints = [];\r\n if (jset.BandValue > 0) {\r\n var x = jset.FreqCenter - (jset.FreqCenter * jset.BandValue) / 100;\r\n var y = getLIMValue(Number(jset.MinorFailure), isdb);\r\n graphPoints.push({ xValue: x, yValue: y });\r\n x = jset.FreqCenter + (jset.FreqCenter * jset.BandValue) / 100;\r\n y = getLIMValue(Number(jset.MinorFailure), isdb);\r\n graphPoints.push({ xValue: x, yValue: y });\r\n\r\n console.debug([\r\n 'createGraphThreshold - valueMax, MinorFailure(value), isdb,ans',\r\n 'value === 0 ? 0 : Math.log10(Math.abs(value) / valueMax) * 20',\r\n data.ValueMax,\r\n Number(jset.MinorFailure),\r\n isdb,\r\n y,\r\n graphPoints\r\n ]);\r\n } else {\r\n x = jset.FreqCenter;\r\n y = getLIMValue(Number(jset.MinorFailure), isdb);\r\n graphPoints.push({ xValue: x, yValue: y });\r\n }\r\n\r\n var wrmLine: GraphData = {\r\n lineNo: 20 + lineIndex + i,\r\n lineName: `WRM_LIM_${lineIndex}_${i}`,\r\n points: graphPoints,\r\n valueUpper: 0,\r\n valueUpperLimit: 0,\r\n selectFlg: lineHide,\r\n infoColor: '#ffccbc',\r\n yValueMax: 0,\r\n yValueMin: 0,\r\n oaValue: '',\r\n };\r\n\r\n console.debug(['createGraphThreshold - wrmLine', wrmLine]);\r\n ret.push(wrmLine);\r\n }\r\n\r\n return ret;\r\n};\r\n\r\n/**\r\n *グラフのポイントリストを作成して返します\r\n * @param data\r\n * @param minValue\r\n * @param maxValue\r\n * @param size\r\n * @param samplingRate\r\n * @param isdb\r\n * @returns\r\n */\r\n\r\nconst createChartPoints = (\r\n data: GraphLineDataType,\r\n minValue: number,\r\n maxValue: number,\r\n size: number,\r\n samplingRate: number,\r\n isdb: boolean\r\n): Array => {\r\n //console.debug(['==createChartPoints==', data]);\r\n var points = new Array();\r\n var skip = Math.ceil(minValue * size * samplingRate * 2);\r\n var count = Math.ceil((maxValue - minValue) * size * samplingRate * 2) + 1;\r\n var yValueMax = Math.max(...data.YValues?.map((p) => p));\r\n //console.debug(['★createChartPoints -', points, skip, count, yValueMax]);\r\n var index = 0;\r\n for (let i = 0; i < data.XValues.length; i++) {\r\n if (skip <= i) {\r\n if (index <= count) {\r\n var x = Number(data.XValues[i]);\r\n var y = data.YValues[i];\r\n if (isdb) {\r\n y = y === 0 ? 0 : Math.log10(Math.abs(y) / yValueMax) * 20;\r\n }\r\n points.push({\r\n xValue: x,\r\n yValue: y,\r\n });\r\n index++;\r\n }\r\n }\r\n }\r\n return points;\r\n};\r\n\r\n/**\r\n * グラフの線データを更新します\r\n * @param data グラフラインデータ\r\n * @param lineColor\r\n * @param xmin\r\n * @param xmax\r\n * @param isdb\r\n * @returns\r\n */\r\nconst upDateGraphData = (\r\n lineNo: number,\r\n data: GraphLineDataType,\r\n lineColor: string,\r\n xmin: number,\r\n xmax: number,\r\n isdb: boolean,\r\n isShow: boolean\r\n): Promise => {\r\n return new Promise((resolve, reject) => {\r\n //console.debug([\"data\", data])\r\n if (data !== undefined) {\r\n var item: GraphData = {\r\n lineNo: lineNo,\r\n valueUpper: 0,\r\n valueUpperLimit: 0,\r\n selectFlg: isShow,\r\n points: [],\r\n infoColor: lineColor,\r\n lineName: data.ItemName,\r\n yValueMax: 0,\r\n yValueMin: 0,\r\n oaValue: '',\r\n };\r\n //console.debug([\"lineName\", item])\r\n var points = createChartPoints(data, xmin, xmax, data.SignalSize, data.SampleSpan, isdb);\r\n item.points = points;\r\n item.oaValue = data.OAValue;\r\n console.debug(item);\r\n resolve(item);\r\n }\r\n resolve(undefined);\r\n });\r\n};\r\n\r\n/**\r\n *\r\n * @param mesList\r\n * @param selectDt\r\n * @returns\r\n */\r\nconst getTargetData = (\r\n mesList: MeasureInfoType[],\r\n selectDt: SelectDataType\r\n): Promise => {\r\n return new Promise((resolve, reject) => {\r\n //var mes = mesList.find((item) => item.id === selectDt.mesid); //selectDt.mesidのみにする\r\n var dev = mesList.find((item) => item.id === selectDt.devid);\r\n var itm = mesList.find((item) => item.id === selectDt.itemid);\r\n var day = dayjs(selectDt.selectDate).format('YYYY-MM-DD');\r\n var time = selectDt.selectTime;\r\n var enve = selectDt.envelopeNo;\r\n\r\n if (time === undefined) resolve(undefined);\r\n\r\n var target = mesList.find(\r\n (item) => item.DevIndex === dev?.DevIndex && item.ItemNameNo === itm?.ItemNameNo //&& item.EnveNameNo === itm?.ItemNameNo\r\n );\r\n\r\n var comparisonNo = GetComparisonNo(target);\r\n console.debug(['★target0 ', target]);\r\n if (target === undefined) resolve(undefined);\r\n if (target !== undefined) {\r\n //console.debug([\"★test target1 \", target]);\r\n if (target.PlcNo == 0) {\r\n resolve(undefined);\r\n }\r\n GetConanChartData(\r\n target.PlcNo,\r\n target.AiCard,\r\n target.AiCh,\r\n `${day} ${time}`,\r\n comparisonNo,\r\n enve,\r\n selectDt.mesid\r\n ).then((ret) => {\r\n if (ret !== undefined) {\r\n //console.debug(['GetTargetDataEx End', ret]);\r\n ret.lineNo = selectDt.lineNo;\r\n resolve(ret);\r\n } else {\r\n reject('Invalidate response');\r\n }\r\n });\r\n } else {\r\n reject('Invalidate response');\r\n }\r\n });\r\n};\r\n\r\n/**\r\n * 計測種別で単位を更新します。\r\n * @param kindNo 計測種別\r\n * @param unit 単位\r\n * @returns\r\n */\r\nconst updateUnitByMesKind = (/* speed: number, */ kindNo: number, unit: string): string => {\r\n //if (speed == SpeedKind.High)\r\n switch (kindNo) {\r\n case Constant.MeasureHighKind.VIBRATION_SPD:\r\n // 振動(速度)\r\n return 'mm/s';\r\n case Constant.MeasureHighKind.VIBRATION_DSP:\r\n // 振動(変位)\r\n return 'µm';\r\n }\r\n //}\r\n return unit;\r\n};\r\n\r\n/**\r\n * FFT比較画面のチャートobject\r\n * @param props\r\n * @returns\r\n */\r\nconst FFTComparisonConanairChart: React.FC = (props) => {\r\n useEffect(() => {\r\n console.debug(['★★FFTComparisonChart ', props]);\r\n });\r\n\r\n const { t } = useTranslation();\r\n\r\n const classes = useStyles();\r\n const { onChangeGraphDataEvent } = props;\r\n // 1本分のグラフデータの配列\r\n const [graphData, setGraphData] = useState([]);\r\n // 閾値グラフデータ\r\n const [thresholdgraphData, setThresholdgraphData] = useState([]);\r\n // グラフデータを作成するための情報\r\n const [fetchData, setFetchData] = useState({\r\n lineDatas: [],\r\n chartDataInfo: props.chartInfo,\r\n });\r\n\r\n // グラフ表示スタイル設定\r\n const [graphSetting, SetGraphSetting] = useState({\r\n yMin: 0,\r\n yMax: 1,\r\n xMin: 0,\r\n xMax: 100,\r\n backColor: Constant.GraphThemeLight.BACK_COLOR,\r\n memoryFontColor: Constant.GraphThemeLight.MEMORY_FONT_COLOR,\r\n yUnit: 'A',\r\n xUnit: 'Hz',\r\n yUnitColor: Constant.GraphThemeLight.UNIT_COLOR,\r\n xUnitColor: Constant.GraphThemeLight.UNIT_COLOR,\r\n gridColor: Constant.GraphThemeLight.GRID_COLOR,\r\n });\r\n\r\n //初期表示判定フラグ\r\n const isInitDisp = useRef(false);\r\n\r\n //表示ボタン押下時\r\n useEffect(() => {\r\n console.debug(['FFTComparisonChart Update', props.chartInfo]);\r\n const chinf = props.chartInfo;\r\n\r\n if (chinf.line1.devid == -1 && chinf.line2.devid == -1 && chinf.line3.devid == -1) {\r\n props.updateLoadginState(false);\r\n console.debug('表示データ無し');\r\n return;\r\n }\r\n\r\n //props.updateLoadginState(true);\r\n var a = getTargetData(chinf.mesList, chinf.line1);\r\n var b = getTargetData(chinf.mesList, chinf.line2);\r\n var c = getTargetData(chinf.mesList, chinf.line3);\r\n console.debug(['updateLoadginState a b c ', a, b, c]);\r\n Promise.all([a, b, c])\r\n .then((ret) => {\r\n console.debug(['updateLoadginState ret', ret]);\r\n var dt: GraphLineDataType[] = [];\r\n if (ret[0]) dt.push(ret[0]);\r\n if (ret[1]) dt.push(ret[1]);\r\n if (ret[2]) dt.push(ret[2]);\r\n\r\n console.debug(['setFetchData , lineDatas, chartDataInfo', dt, chinf]);\r\n setFetchData({ lineDatas: dt, chartDataInfo: chinf });\r\n })\r\n .finally(() => {\r\n console.debug(['FFTComparisonChart Update finally']);\r\n //props.updateLoadginState(false);\r\n });\r\n }, [props.chartInfo]);\r\n\r\n //グラフ描画処理\r\n useEffect(() => {\r\n props.updateLoadginState(true);\r\n console.debug(['グラフ描画処理開始', fetchData, props.graphDispSetting]);\r\n const chinf = fetchData.chartDataInfo;\r\n if (chinf.line1.devid == -1 && chinf.line2.devid == -1 && chinf.line3.devid == -1) {\r\n return;\r\n }\r\n const gSetting = props.graphDispSetting;\r\n const isdb = gSetting.selectAxis === 'r' ? false : true;\r\n\r\n const promises: Promise[] = [];\r\n fetchData.lineDatas.forEach((r) => {\r\n if (r) {\r\n let color = '';\r\n let show: boolean = false;\r\n switch (r.lineNo) {\r\n case 1:\r\n color = chinf.line1.lineColor;\r\n show = gSetting.isShow1;\r\n break;\r\n case 2:\r\n color = chinf.line2.lineColor;\r\n show = gSetting.isShow2;\r\n break;\r\n case 3:\r\n color = chinf.line3.lineColor;\r\n show = gSetting.isShow3;\r\n break;\r\n }\r\n //console.debug(['★ r', r]);\r\n const tmp = upDateGraphData(r.lineNo, r, color, gSetting.xMin, gSetting.xMax, isdb, show);\r\n promises.push(tmp);\r\n }\r\n });\r\n\r\n console.debug(['グラフデータ取得準備 promises', promises]);\r\n Promise.all(promises)\r\n .then((ret) => {\r\n const dt: GraphData[] = [];\r\n ret.forEach((r) => {\r\n if (r) dt.push(r);\r\n });\r\n\r\n console.debug(['グラフデータ取得', ret, dt, fetchData]);\r\n var dt2: GraphData[] = [];\r\n fetchData.lineDatas.forEach((r) => {\r\n if (r) {\r\n let isThreshold: boolean = false;\r\n switch (r.lineNo) {\r\n case 1:\r\n isThreshold = props.graphDispSetting.isThreshold1;\r\n break;\r\n case 2:\r\n isThreshold = props.graphDispSetting.isThreshold2;\r\n break;\r\n case 3:\r\n isThreshold = props.graphDispSetting.isThreshold3;\r\n break;\r\n }\r\n let tmp = createGraphThreshold(r.lineNo, isThreshold, r, isdb);\r\n if (tmp) {\r\n dt2 = dt2.concat(tmp);\r\n }\r\n //console.debug([\"★-tmp\", tmp]);\r\n }\r\n });\r\n //console.debug([\"★-dt-dt2\", dt, dt2]);\r\n setGraphData(dt);\r\n setThresholdgraphData(dt2);\r\n\r\n var ans = setYMinMaxEx(dt, gSetting, props.isFFTAutoRangeRef);\r\n props.onFFTAutoRamgeSet(false);\r\n\r\n const unit = () => {\r\n if (props.graphDispSetting.selectAxis == 'r') {\r\n //リニア\r\n\r\n if (!fetchData.lineDatas.length) return '';\r\n\r\n let unitIndex = props.graphDispSetting.unitSelectIndex;\r\n\r\n let devId: number = 0;\r\n console.debug(['グラフデータ取得 単位', fetchData]);\r\n let unit: string = fetchData.lineDatas.find((r) => r.lineNo === unitIndex)?.Unit ?? '';\r\n switch (unitIndex) {\r\n case 1:\r\n devId = fetchData.chartDataInfo.line1.devid;\r\n break;\r\n case 2:\r\n devId = fetchData.chartDataInfo.line2.devid;\r\n break;\r\n case 3:\r\n devId = fetchData.chartDataInfo.line3.devid;\r\n break;\r\n }\r\n console.debug(['グラフデータ取得 単位 確定', unit]);\r\n if (devId != null) {\r\n const mes = fetchData.chartDataInfo.mesList.find((v) => v.id === devId);\r\n const kindNo = mes ? mes.KindNo : 0;\r\n return updateUnitByMesKind(kindNo, unit);\r\n }\r\n return unit;\r\n } else if (props.graphDispSetting.selectAxis == 'd') {\r\n //dB\r\n return 'dB';\r\n }\r\n return '';\r\n };\r\n //console.debug(['fetchData ,GraphData,ThresholdgraphData', fetchData, dt, dt2]);\r\n\r\n const yunit = unit();\r\n\r\n onChangeGraphDataEvent(dt, ans[0], ans[1], yunit);\r\n\r\n SetGraphSetting({\r\n ...graphSetting,\r\n yMin: ans[0],\r\n yMax: ans[1],\r\n xMin: gSetting.xMin,\r\n xMax: gSetting.xMax,\r\n yUnit: yunit,\r\n });\r\n })\r\n .finally(() => {\r\n console.debug(['グラフ描画処理終了 finally']);\r\n props.updateLoadginState(false);\r\n });\r\n }, [fetchData, props.graphDispSetting]);\r\n\r\n /**\r\n *Y軸最大、最小値計算\r\n * @param data\r\n * @param dispSetting\r\n */\r\n const setYMinMax = (data: GraphLineDataType[], dispSetting: GraphDispSetting): [number, number] => {\r\n var max = 0;\r\n var min = 0;\r\n const a = data[0]?.ValueMax;\r\n const b = data[1]?.ValueMax;\r\n const c = data[2]?.ValueMax;\r\n const array1 = [a, b, c];\r\n max = Math.max(...array1);\r\n\r\n if (dispSetting.selectAxis !== 'r') {\r\n max = dispSetting.yMax;\r\n min = dispSetting.yMin;\r\n }\r\n //max = ToValueMaxRound(max);\r\n //min = ToValueMinRound(min);\r\n return [min, max];\r\n };\r\n\r\n /**\r\n *Y軸最大、最小値計算 表示している領域内で算出\r\n * @param data\r\n * @param dispSetting\r\n */\r\n const setYMinMaxEx = (datas: GraphData[], dispSetting: GraphDispSetting, isAutoRange: boolean): [number, number] => {\r\n var max = 0;\r\n var min = 0;\r\n let a: number = 0;\r\n let b: number = 0;\r\n let c: number = 0;\r\n if (datas[0]?.points.length !== 0) {\r\n var line1List = datas[0]?.points.map((r) => r.yValue);\r\n a = line1List == null ? 0 : Math.max.apply(null, line1List);\r\n }\r\n if (datas[1]?.points.length !== 0) {\r\n var line2List = datas[1]?.points.map((r) => r.yValue);\r\n b = line2List == null ? 0 : Math.max.apply(null, line2List);\r\n }\r\n if (datas[2]?.points.length !== 0) {\r\n var line3List = datas[2]?.points.map((r) => r.yValue);\r\n c = line3List == null ? 0 : Math.max.apply(null, line3List);\r\n }\r\n\r\n const array1 = [a, b, c];\r\n max = Math.max(...array1);\r\n\r\n if (dispSetting.selectAxis !== 'r') {\r\n max = dispSetting.yMax;\r\n min = dispSetting.yMin;\r\n } else {\r\n if (!isAutoRange) {\r\n //初期表示ではない場合、画面でセットされた値を使用\r\n max = dispSetting.yMax;\r\n min = dispSetting.yMin;\r\n }\r\n }\r\n //max = ToValueMaxRound(max);\r\n //min = ToValueMinRound(min);\r\n return [min, max];\r\n };\r\n\r\n const CustomTooltip = ({ active, payload, label }: any) => {\r\n //console.debug(['payload', payload]);\r\n if (active) {\r\n return (\r\n
\r\n
{`${t('FFTComparisonChart.周波数', '周波数')} : ${Number(label).toFixed(3)}`}
\r\n {payload?.map((r: any, index: any) => {\r\n if (index <= 2 && r.name !== 'yValue') {\r\n return (\r\n
\r\n {r.name} : {Number(r.value).toFixed(3)}\r\n
\r\n );\r\n }\r\n })}\r\n
\r\n );\r\n }\r\n return null;\r\n };\r\n\r\n const chartControlMemo = useMemo(() => {\r\n console.debug(['FFTComparisonChart childMemo', graphData, thresholdgraphData, graphSetting]);\r\n return (\r\n <>\r\n \r\n \r\n \r\n Number(e).toFixed(0)}\r\n allowDataOverflow={true}\r\n height={50}\r\n tick={{ dy: 10 }}\r\n padding={{ right: 0, left: 1 }}\r\n >\r\n \r\n \r\n Number(e).toFixed(3)}\r\n stroke={graphSetting.memoryFontColor}\r\n domain={[graphSetting.yMin, graphSetting.yMax]}\r\n //domain={['auto', 'auto']}\r\n allowDataOverflow={true}\r\n >\r\n \r\n \r\n } />\r\n {thresholdgraphData?.map((row, index) => (\r\n \r\n ))}\r\n {graphData?.map((row, index) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n );\r\n }, [graphData, thresholdgraphData, graphSetting]);\r\n\r\n return <>{chartControlMemo};\r\n};\r\nexport default FFTComparisonConanairChart;\r\n","import React from 'react';\r\n\r\nimport { makeStyles, createStyles, Theme } from '@material-ui/core/styles';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Button from '@material-ui/core/Button';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport { MeasureInfoType, SelectDataType } from './FFTComparisonConanair';\r\nimport { GetTrendGroupTableByItemSet } from '../../../function/GroupDataModel';\r\nimport SimpleDialog from '../../atoms/Dialog/SimpleDialog';\r\nimport RealTimeTrendGraphGroupSelectPage from '../RealTimeTrendGraph/RealTimeTrendGraphGroupSelectPage';\r\nimport TrendGraphGroupSelectPage from '../TrendGraph/TrendGraphGroupSelectPage';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n buttonStyle: {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n },\r\n })\r\n);\r\n/**ダイアログ表示モードキー */\r\nconst DialogKindKey = {\r\n None: 'None',\r\n RealTime: 'realTime',\r\n Trend: 'trend',\r\n} as const;\r\n/**ダイアログ表示タイプ */\r\ntype DialgKindType = typeof DialogKindKey[keyof typeof DialogKindKey];\r\n\r\n/**引数 */\r\ntype Props = {\r\n measureInfo: MeasureInfoType[];\r\n getSelectDatas: () => SelectDataType[];\r\n};\r\n\r\nconst FFTComparisonConanairButtonList: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const { measureInfo } = props;\r\n\r\n const classes = useStyles();\r\n const [simpleDialogOpen, setSimpleDialogOpen] = React.useState(false);\r\n const [gropuSelectDialogOpen, setGropuSelectDialogOpen] = React.useState(false);\r\n\r\n const [dialogKind, setDialogKind] = React.useState(DialogKindKey.None);\r\n const [selectGroupNos, setSelectGroupNos] = React.useState([0]);\r\n const [showMessage, setShowMessage] = React.useState('');\r\n\r\n /**\r\n *選択データを取得\r\n * @param SelectDataType 画面遷移時に渡す選択データを返す\r\n */\r\n const getIsSelectData = (): SelectDataType | undefined => {\r\n const datas = props.getSelectDatas();\r\n return datas.find((row) => row.isSelect === true);\r\n };\r\n\r\n /**\r\n *傾向管理ボタン処理\r\n */\r\n const handleTrendPageOpen = () => {\r\n console.debug('★★★handleTrendPageOpen');\r\n const sData = getIsSelectData();\r\n console.debug(['selectDatas=', sData]);\r\n if (sData) {\r\n setDialogKind(DialogKindKey.Trend);\r\n var mes = measureInfo.find((item) => item.id === sData.mesid);\r\n var dev = measureInfo.find((item) => item.id === sData.devid);\r\n var itm = measureInfo.find((item) => item.id === sData.itemid);\r\n var target = measureInfo.find(\r\n (item) => item.KindNo === mes?.KindNo && item.DevIndex === dev?.DevIndex && item.ItemNameNo === itm?.ItemNameNo\r\n );\r\n console.debug(['selectDt=', sData, 'target', target]);\r\n GetTrendGroupTableByItemSet().then((ret) => {\r\n var gpInfo = ret.filter(\r\n (row) => row.trdItemSet.PLC_NO == target?.PlcNo && row.trdItemSet.SET_NO === target.SetNo\r\n );\r\n console.debug(['getgpItem=', gpInfo]);\r\n\r\n if (gpInfo.length !== 0) {\r\n var gpNos: number[] = [];\r\n for (var i in gpInfo) {\r\n gpNos.push(gpInfo[i].trdGroupSet.GROUP_NO);\r\n }\r\n setSelectGroupNos(gpNos);\r\n handleGroupSelectDialogShow();\r\n } else {\r\n setShowMessage(\r\n t('FFTComparisonConanairButtonList.グループが見つかりませんでした', 'グループが見つかりませんでした')\r\n );\r\n handleSimpleDialogClickOpen();\r\n return;\r\n }\r\n });\r\n } else {\r\n setShowMessage(t('FFTComparisonConanairButtonList.項目が選択されていません', '項目が選択されていません'));\r\n handleSimpleDialogClickOpen();\r\n }\r\n };\r\n\r\n /**\r\n * グループ選択ダイアログ表示\r\n */\r\n const handleGroupSelectDialogShow = () => {\r\n setGropuSelectDialogOpen(true);\r\n };\r\n\r\n /**\r\n * グループ選択ダイアログ閉じる\r\n */\r\n const handleGroupSelectDialogClose = () => {\r\n setGropuSelectDialogOpen(false);\r\n };\r\n\r\n /**\r\n * メッセージボックス表示\r\n */\r\n const handleSimpleDialogClickOpen = () => {\r\n setSimpleDialogOpen(true);\r\n };\r\n\r\n /**メッセージボックス閉じる */\r\n const handleSimpleDialogClose = () => {\r\n setSimpleDialogOpen(false);\r\n };\r\n\r\n return (\r\n \r\n {/* \r\n \r\n {t('FFTComparisonConanairButtonList.傾向管理', '傾向管理')}\r\n \r\n */}\r\n \r\n {dialogKind == DialogKindKey.RealTime ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n {showMessage}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default FFTComparisonConanairButtonList;\r\n","import React, { useEffect, useState, useMemo, useRef } from 'react';\r\nimport dayjs from 'dayjs';\r\n\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport Button from '@material-ui/core/Button';\r\nimport LoadingButton from '@mui/lab/LoadingButton';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport Box from '@material-ui/core/Box';\r\n\r\nimport { GetVibrationSpecialString, SpeedKind } from '../../../Constant';\r\n\r\nimport { FFTC_CMP_GROUP_SET } from '../../../function/GroupDataModel';\r\nimport {\r\n MeasureInfoType,\r\n GetMeasureInfoType,\r\n SelectDataType,\r\n CreateDefalutMeasureInfoType,\r\n GetLatesTime,\r\n CreateDefalutSelectDataType,\r\n GetAdditionalMeasureInfoType,\r\n FindMeasureInfoType,\r\n GetComparisonNo,\r\n GetDataTimeList,\r\n} from './FFTComparisonConanair';\r\nimport FFTComparisonConanairInfo from './FFTComparisonConanairInfo';\r\nimport FFTComparisonConanairChartSetting, { RangeSelectDataType } from './FFTComparisonConanairChartSetting';\r\nimport FFTComparisonConanairChart, { GraphDispSetting, GraphData, ChartUpDateInfo } from './FFTComparisonConanairChart';\r\nimport FFTComparisonConanairButtonList from './FFTComparisonConanairButtonList';\r\nimport { SelectItemRefreshData } from './FFTComparisonConanairSelectItem';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { IsValidKindOfFftCmpConan } from '../../../function/NameDevSetModel';\r\nimport { Typography } from '@material-ui/core';\r\nimport SimpleDialog from '../../atoms/Dialog/SimpleDialog';\r\nimport { GetKindNoNameSetType, KIND_NO_NAME_SET } from '../MeasureSetting/CollectSetting/CollectSettingDefine';\r\nimport { ComboBoxItemType } from '../../atoms/ComboBox/ItemComboBox';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n responsiveContainer: {\r\n minHeight: 'calc(100vh - 446px)',\r\n maxHeight: 'calc(100vh - 446px)',\r\n },\r\n paper: {\r\n background: '#FFFFEE',\r\n },\r\n paperChild: {\r\n background: '#FFFFEE',\r\n },\r\n buttonStyle: {\r\n width: '100px',\r\n maxHeight: '35px',\r\n minHeight: '35px',\r\n marginRight: '4px',\r\n },\r\n })\r\n);\r\n\r\nconst createSelectData = (\r\n meslist: MeasureInfoType[],\r\n orgData: SelectDataType,\r\n indexNo: number,\r\n target?: MeasureInfoType,\r\n gp?: FFTC_CMP_GROUP_SET\r\n): SelectDataType => {\r\n if (target === undefined) {\r\n return orgData;\r\n } else {\r\n //計測種別の書込み\r\n if (gp !== undefined) {\r\n if (indexNo === 1) {\r\n orgData.mesid = gp.SET_NO1;\r\n } else if (indexNo === 2) {\r\n orgData.mesid = gp.SET_NO2;\r\n } else {\r\n orgData.mesid = gp.SET_NO3;\r\n }\r\n }\r\n\r\n var did = meslist.find((row) => row.DevIndex === target.DevIndex);\r\n // orgData.mesid = did !== undefined ? did.conanSetNo : 0;\r\n orgData.devid = did !== undefined ? did.id : orgData.devid;\r\n\r\n var iid = meslist.find((row) => row.PlcNo === target.PlcNo);\r\n orgData.itemid = iid !== undefined ? iid.id : orgData.itemid;\r\n\r\n return orgData;\r\n }\r\n};\r\n\r\ntype Props = {\r\n location: { state: FFTC_CMP_GROUP_SET };\r\n};\r\n\r\nconst FFTComparisonConanairPage: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [graphData, setGraphData] = useState([]);\r\n const [loading, setLoading] = React.useState(false);\r\n const [conanFFTComboList, setConanFFTComboList] = useState([]);\r\n\r\n console.debug(['★★FFTComparisonPage() -- loading', loading, props]);\r\n\r\n const [measureInfo, setMeasereInfo] = React.useState([]);\r\n\r\n const selectData1Ref = React.useRef(\r\n CreateDefalutSelectDataType(t('FFTComparisonConanairPage.計測データ1', '計測データ1'), 'red', 1)\r\n );\r\n const selectData2Ref = React.useRef(\r\n CreateDefalutSelectDataType(t('FFTComparisonConanairPage.計測データ2', '計測データ2'), 'blue', 2)\r\n );\r\n const selectData3Ref = React.useRef(\r\n CreateDefalutSelectDataType(t('FFTComparisonConanairPage.計測データ3', '計測データ3'), 'green', 3)\r\n );\r\n\r\n const isFFTAutoRangeRef = React.useRef(true);\r\n\r\n const [chartInfo, setChartInfo] = React.useState({\r\n line1: selectData1Ref.current,\r\n line2: selectData2Ref.current,\r\n line3: selectData3Ref.current,\r\n mesList: measureInfo,\r\n isInitDisp: true,\r\n });\r\n\r\n const [selectItemRefreshDatas, setSelectItemRefreshDatas] = React.useState([]);\r\n\r\n const [graphDispSetting, SetGraphDispSetting] = React.useState({\r\n xMin: 0,\r\n xMax: 100,\r\n yMin: 0,\r\n yMax: 0,\r\n selectAxis: 'r',\r\n isPileup: false,\r\n isThreshold1: false,\r\n isThreshold2: false,\r\n isThreshold3: false,\r\n\r\n isShow1: true,\r\n isShow2: true,\r\n isShow3: true,\r\n unitSelectIndex: 1,\r\n });\r\n\r\n //ユニット表示選択情報\r\n const [selectUnit, setSelectUnit] = React.useState([true, false, false]);\r\n\r\n //メッセージダイアログ\r\n const [messageDialogOpen, setMessageDialogOpen] = React.useState(false);\r\n const [showMessage, setShowMessage] = React.useState('');\r\n\r\n const [rangeSelectData, setRangeSelectData] = React.useState({\r\n rengeMin: 0,\r\n rengeMax: 100,\r\n rengeId: -1,\r\n dbId: 0,\r\n dbMin: -80,\r\n dbMax: 0,\r\n selectAxis: 'r',\r\n yMin: 0,\r\n yMax: 100,\r\n holdLinearValueMin: 0,\r\n holdLinearValueMax: 0,\r\n yUnit: 'A',\r\n });\r\n\r\n useEffect(() => {\r\n console.debug(['change --graphDispSetting-- ', graphDispSetting]);\r\n }, [graphDispSetting]);\r\n\r\n useEffect(() => {\r\n let mesRet: MeasureInfoType[] = [];\r\n let kindNoNameSet: KIND_NO_NAME_SET[] = [];\r\n let conanFFTTypList: ComboBoxItemType[] = [];\r\n GetMeasureInfoType()\r\n .then((res) => {\r\n //console.debug(['★res', res]);\r\n mesRet = res;\r\n //CollectSettingDefine.tsからKIND_NO_NAME_SETをとってくる\r\n return GetKindNoNameSetType();\r\n })\r\n .then((res) => {\r\n kindNoNameSet = res;\r\n conanFFTTypList.push({ index: -1, name: '' });\r\n //FFT(コナン)で必要ない項目は省く\r\n kindNoNameSet.forEach((r) => {\r\n if (r.SPEED === SpeedKind.SPEED_CONAN && r.FFT_INVALID === 0) {\r\n conanFFTTypList.push({ index: r.NAME_NO, name: r.MES_NAME });\r\n }\r\n });\r\n\r\n //コレクションを使ってComboBoxにする\r\n setConanFFTComboList(conanFFTTypList);\r\n\r\n //データリストに特殊データを追加して返す\r\n mesRet = GetAdditionalMeasureInfoType(t, mesRet);\r\n\r\n //FFT画面では不要な項目を排除\r\n //mesRet = mesRet.filter((r) => r.FftInvalid === 0);\r\n //console.debug(['★mesRet1', mesRet]);\r\n mesRet = mesRet.filter((r) => r.Speed === SpeedKind.SPEED_CONAN);\r\n console.debug(['★mesRet2', mesRet]);\r\n //選択データ初期化 3本分\r\n var sList: SelectDataType[] = [\r\n CreateDefalutSelectDataType(t('FFTComparisonConanairPage.計測データ1', '計測データ1'), 'red', 1),\r\n CreateDefalutSelectDataType(t('FFTComparisonConanairPage.計測データ2', '計測データ2'), 'blue', 2),\r\n CreateDefalutSelectDataType(t('FFTComparisonConanairPage.計測データ3', '計測データ3'), 'green', 3),\r\n ];\r\n\r\n if (props.location.state != null) {\r\n var gp = props.location.state;\r\n\r\n console.debug(['props.location.state'], props.location.state);\r\n //わたってきたデータアイテムを計測リストより検索して格納 3本分\r\n var dtList: (MeasureInfoType | undefined)[] = [\r\n FindMeasureInfoType(mesRet, gp, 1),\r\n FindMeasureInfoType(mesRet, gp, 2),\r\n FindMeasureInfoType(mesRet, gp, 3),\r\n ];\r\n console.debug(['★★trace dtList', dtList]);\r\n\r\n //特殊情報の特定データ作成(振動速度、振動変位用) 3本分\r\n var compartionList: string[] = [\r\n GetComparisonNo(dtList[0]),\r\n GetComparisonNo(dtList[1]),\r\n GetComparisonNo(dtList[2]),\r\n ];\r\n\r\n //選択データに計測情報を反映 3本分\r\n sList.map((row, index) => {\r\n row = createSelectData(mesRet, row, index + 1, dtList[index], gp);\r\n });\r\n\r\n //console.debug(['trace', gp, mesRet]);\r\n if (gp.Time_No1 !== undefined) {\r\n //console.debug(['trace 1', gp.Time_No1]);\r\n //わたってきたデータに日付指定がある場合\r\n const gpTimeList: string[] = [gp.Time_No1, gp.Time_No2, gp.Time_No3];\r\n sList.map((row, index) => {\r\n row.selectDate = gpTimeList[index] == '' ? new Date() : dayjs(gpTimeList[index]).toDate();\r\n });\r\n\r\n if (gp.Time_No1.length > 'yyyy-mm-dd'.length) {\r\n //console.debug(['trace 2', gp.Time_No1.length, 'yyyy-mm-dd'.length]);\r\n //わたってきたデータに時間指定がある場合\r\n sList.map((row, index) => {\r\n row.selectTime = dayjs(gpTimeList[index]).format('HH:mm:ss');\r\n });\r\n console.debug(['s1,s2,s3', sList]);\r\n setMeasereInfo(mesRet);\r\n setSelectItemRefreshDatas([\r\n { mesInfoList: mesRet, selectData: sList[0], fftConanComboBoxList: conanFFTTypList },\r\n { mesInfoList: mesRet, selectData: sList[1], fftConanComboBoxList: conanFFTTypList },\r\n { mesInfoList: mesRet, selectData: sList[2], fftConanComboBoxList: conanFFTTypList },\r\n ]);\r\n setChartInfo({ line1: sList[0], line2: sList[1], line3: sList[2], mesList: mesRet, isInitDisp: true });\r\n } else {\r\n console.debug(['★★trace 3', dtList]);\r\n //わたってきたデータが日付指定のみの場合\r\n Promise.all(\r\n dtList.map((dtRow, index) =>\r\n //指定した日時で最新のファイルがある時間を検索する\r\n GetDataTimeList(\r\n Number(dtRow?.PlcNo),\r\n Number(dtRow?.AiCard),\r\n Number(dtRow?.AiCh),\r\n gpTimeList[index],\r\n compartionList[index],\r\n sList[index].envelopeNo,\r\n sList[index].mesid\r\n )\r\n )\r\n ).then((ret) => {\r\n var msg = '';\r\n //console.debug(['trace 4 sList', sList, 'ret', ret]);\r\n sList.map((row, index) => {\r\n //console.debug(['trace 4-1 index', index]);\r\n var retTimes: string[] = ret[index] ?? [];\r\n //console.debug(['trace 4-2 retTimes', retTimes]);\r\n if (retTimes.length !== 0) {\r\n row.selectTime = dayjs(retTimes[0]).format('HH:mm:ss');\r\n } else {\r\n //指定した日時で時間ファイルが存在しない ダイアログ表示\r\n console.debug(['trace 4-3 error! retTimes', retTimes]);\r\n msg +=\r\n t('FFTComparisonConanairPage.表示データが存在しません。', '表示データが存在しません。') +\r\n ' ' +\r\n dtList[index]?.MesName +\r\n ' ' +\r\n dtList[index]?.DevNo +\r\n ' ' +\r\n dtList[index]?.DevName +\r\n ' ' +\r\n dtList[index]?.ItemName +\r\n ' ' +\r\n gpTimeList[index] +\r\n ' /n';\r\n }\r\n });\r\n\r\n if (msg !== '') {\r\n setShowMessage(msg);\r\n setMessageDialogOpen(true);\r\n }\r\n console.debug(['s1,s2,s3', sList]);\r\n setMeasereInfo(mesRet);\r\n setSelectItemRefreshDatas([\r\n { mesInfoList: mesRet, selectData: sList[0], fftConanComboBoxList: conanFFTTypList },\r\n { mesInfoList: mesRet, selectData: sList[1], fftConanComboBoxList: conanFFTTypList },\r\n { mesInfoList: mesRet, selectData: sList[2], fftConanComboBoxList: conanFFTTypList },\r\n ]);\r\n setChartInfo({ line1: sList[0], line2: sList[1], line3: sList[2], mesList: mesRet, isInitDisp: true });\r\n });\r\n }\r\n } else {\r\n //console.debug(['trace -- gp.Time_No1 == undefined']);\r\n Promise.all(\r\n dtList.map((dtRow, index) =>\r\n //最新のファイルがある時間を検索する\r\n GetLatesTime(\r\n sList[index].envelopeNo,\r\n sList[index].mesid,\r\n dtRow?.PlcNo,\r\n dtRow?.AiCard,\r\n dtRow?.AiCh,\r\n compartionList[index]\r\n )\r\n )\r\n ).then((ret) => {\r\n //console.debug(['GetLatesTime', ret]);\r\n\r\n //最新のファイルがある時間を検索する\r\n sList.map((row, index) => {\r\n //console.debug(['GetLatesTime - row', ret[index]]);\r\n if (dayjs(new Date(ret[index])).format('YYYY-MM-DD') === '1-01-01') {\r\n row.selectDate = new Date();\r\n row.selectTime = '';\r\n } else {\r\n row.selectDate = new Date(ret[index]);\r\n row.selectTime = dayjs(new Date(ret[index])).format('HH:mm:ss');\r\n }\r\n });\r\n console.debug(['s1,s2,s3', sList]);\r\n setMeasereInfo(mesRet);\r\n setSelectItemRefreshDatas([\r\n { mesInfoList: mesRet, selectData: sList[0], fftConanComboBoxList: conanFFTTypList },\r\n { mesInfoList: mesRet, selectData: sList[1], fftConanComboBoxList: conanFFTTypList },\r\n { mesInfoList: mesRet, selectData: sList[2], fftConanComboBoxList: conanFFTTypList },\r\n ]);\r\n setChartInfo({ line1: sList[0], line2: sList[1], line3: sList[2], mesList: mesRet, isInitDisp: true });\r\n });\r\n }\r\n }\r\n })\r\n .then((ret) => { })\r\n .catch((reason) => { });\r\n }, [props.location.state]);\r\n\r\n /**\r\n * 選択データ変更event 画面再描画無し\r\n * @param value\r\n * @param dataNo\r\n */\r\n const onChangeSelectData = (value: SelectDataType, dataNo: number) => {\r\n switch (dataNo) {\r\n case 1:\r\n console.debug(['onChangeSelectData - old,new', selectData1Ref.current, value]);\r\n selectData1Ref.current = { ...value };\r\n break;\r\n case 2:\r\n console.debug(['onChangeSelectData - old,new', selectData2Ref.current, value]);\r\n selectData2Ref.current = { ...value };\r\n break;\r\n case 3:\r\n console.debug(['onChangeSelectData - old,new', selectData3Ref.current, value]);\r\n selectData3Ref.current = { ...value };\r\n break;\r\n default:\r\n }\r\n };\r\n\r\n /**\r\n * グラフに表示する単位情報を選択によって切り替える\r\n * @param no 計測情報コントロール番号\r\n */\r\n const unitSelectClickAction = (no: number) => {\r\n switch (no) {\r\n case 1:\r\n setSelectUnit([true, false, false]);\r\n SetGraphDispSetting({ ...graphDispSetting, unitSelectIndex: 1 });\r\n break;\r\n case 2:\r\n setSelectUnit([false, true, false]);\r\n SetGraphDispSetting({ ...graphDispSetting, unitSelectIndex: 2 });\r\n break;\r\n case 3:\r\n setSelectUnit([false, false, true]);\r\n SetGraphDispSetting({ ...graphDispSetting, unitSelectIndex: 3 });\r\n break;\r\n }\r\n };\r\n\r\n /**\r\n * 選択データ変更event 画面再描画\r\n * @param value\r\n * @param dataNo\r\n */\r\n const onChangeSelectDataUpdate = (value: SelectDataType, dataNo: number) => {\r\n onChangeSelectData(value, dataNo);\r\n console.debug(['onChangeSelectDataUpdate']);\r\n switch (dataNo) {\r\n case 1:\r\n SetGraphDispSetting({ ...graphDispSetting, isThreshold1: value.isThreshold, isShow1: value.isShow });\r\n break;\r\n case 2:\r\n SetGraphDispSetting({ ...graphDispSetting, isThreshold2: value.isThreshold, isShow2: value.isShow });\r\n break;\r\n case 3:\r\n SetGraphDispSetting({ ...graphDispSetting, isThreshold3: value.isThreshold, isShow3: value.isShow });\r\n break;\r\n default:\r\n }\r\n };\r\n\r\n const handleGraphDataChange = (datas: GraphData[], yMin: number, yMax: number, yUnit: string) => {\r\n console.debug(['datas,yMax,yMin,yUnit', datas, yMax, yMin, yUnit]);\r\n setRangeSelectData({ ...rangeSelectData, yMin: yMin, yMax: yMax, yUnit: yUnit });\r\n graphDispSetting.yMax = yMax;\r\n graphDispSetting.yMin = yMin;\r\n setGraphData({ ...datas });\r\n };\r\n\r\n //表示ボタン押下\r\n const handleChartUpDate = () => {\r\n setLoading(true);\r\n setChartInfo({\r\n line1: selectData1Ref.current,\r\n line2: selectData2Ref.current,\r\n line3: selectData3Ref.current,\r\n mesList: measureInfo,\r\n isInitDisp: false,\r\n });\r\n };\r\n\r\n /**\r\n * レンジ設定変更event\r\n * @param data\r\n */\r\n const handleRengeSelectDataChange = (data: RangeSelectDataType) => {\r\n console.debug(['tyousa FFTComparisonConanairPage handleRengeSelectDataChange()', data]);\r\n\r\n setLoading(true);\r\n\r\n rangeSelectData.rengeMin = data.rengeMin;\r\n rangeSelectData.rengeMax = data.rengeMax;\r\n rangeSelectData.rengeId = data.rengeId;\r\n rangeSelectData.dbId = data.dbId;\r\n rangeSelectData.dbMin = data.dbMin;\r\n rangeSelectData.dbMax = data.dbMax;\r\n if (rangeSelectData.selectAxis !== data.selectAxis && rangeSelectData.selectAxis === 'r') {\r\n //リニアからdbに変わったときはセットします\r\n rangeSelectData.holdLinearValueMin = data.yMin;\r\n rangeSelectData.holdLinearValueMax = data.yMax;\r\n rangeSelectData.yMin = data.yMin;\r\n rangeSelectData.yMax = data.yMax;\r\n } else if (rangeSelectData.selectAxis !== data.selectAxis && rangeSelectData.selectAxis === 'd') {\r\n //dbからリニアに変わったときは保持しているデータの入れ替え\r\n data.yMin = rangeSelectData.holdLinearValueMin;\r\n data.yMax = rangeSelectData.holdLinearValueMax;\r\n rangeSelectData.yMin = data.yMin;\r\n rangeSelectData.yMax = data.yMax;\r\n } else {\r\n //ラジオボタンを変えていないときの処理\r\n rangeSelectData.yMin = data.yMin;\r\n rangeSelectData.yMax = data.yMax;\r\n }\r\n rangeSelectData.selectAxis = data.selectAxis;\r\n\r\n SetGraphDispSetting({\r\n ...graphDispSetting,\r\n selectAxis: data.selectAxis,\r\n xMin: data.rengeMin,\r\n xMax: data.rengeMax,\r\n yMin: data.selectAxis === 'r' ? data.yMin : data.dbMin,\r\n yMax: data.selectAxis === 'r' ? data.yMax : data.dbMax,\r\n });\r\n };\r\n\r\n const handleLoadingStateChange = (value: boolean): void => {\r\n //console.debug('tyousa FFTComparisonPage handleLoadingStateChange()', value);\r\n setLoading(value);\r\n };\r\n\r\n const handoleAutoRangeSet = (data: boolean) => {\r\n isFFTAutoRangeRef.current = data;\r\n };\r\n\r\n const chartControlMemo = useMemo(() => {\r\n return (\r\n \r\n );\r\n }, [graphDispSetting, chartInfo]);\r\n\r\n /**\r\n * ライン番号と一致するグラフデータを返す\r\n * @param lineNo\r\n * @returns\r\n */\r\n const getGraphData = (lineNo: number): GraphData | undefined => {\r\n if (graphData) {\r\n const arr = [graphData[0], graphData[1], graphData[2]];\r\n let tmp = arr.find((r) => r?.lineNo === lineNo);\r\n return tmp;\r\n } else {\r\n return undefined;\r\n }\r\n };\r\n return (\r\n
\r\n \r\n
{' '}\r\n \r\n onChangeSelectData(e, 1)}\r\n onChangeSelectDataDispUpDateEvent={(e) => onChangeSelectDataUpdate(e, 1)}\r\n isBlankSelect={false}\r\n isUnitSelect={selectUnit[0]}\r\n onClickUnitSelect={() => unitSelectClickAction(1)}\r\n onAutoRangeSet={handoleAutoRangeSet}\r\n />\r\n \r\n
{' '}\r\n \r\n onChangeSelectData(e, 2)}\r\n onChangeSelectDataDispUpDateEvent={(e) => onChangeSelectDataUpdate(e, 2)}\r\n isBlankSelect={true}\r\n isUnitSelect={selectUnit[1]}\r\n onClickUnitSelect={() => unitSelectClickAction(2)}\r\n onAutoRangeSet={handoleAutoRangeSet}\r\n />\r\n \r\n
{' '}\r\n \r\n onChangeSelectData(e, 3)}\r\n onChangeSelectDataDispUpDateEvent={(e) => onChangeSelectDataUpdate(e, 3)}\r\n isBlankSelect={true}\r\n isUnitSelect={selectUnit[2]}\r\n onClickUnitSelect={() => unitSelectClickAction(3)}\r\n onAutoRangeSet={handoleAutoRangeSet}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n }\r\n onClick={handleChartUpDate}\r\n >\r\n {t('FFTComparisonConanairPage.表示', '表示')}\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n {chartControlMemo}\r\n \r\n \r\n {\r\n return [selectData1Ref.current, selectData2Ref.current, selectData3Ref.current];\r\n }}\r\n >\r\n \r\n \r\n {/* エラーダイアログ */}\r\n setMessageDialogOpen(false)}\r\n title={t('FFTComparisonConanairPage.確認', '確認')}\r\n okText={'OK'}\r\n maxWidth={'sm'}\r\n >\r\n {showMessage.split('/n').map((r) => {\r\n return
{r}
;\r\n })}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default FFTComparisonConanairPage;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { FFTC_CMP_GROUP_SET, GetFFTComparisonConanGroupList } from '../../../function/GroupDataModel';\r\nimport GroupSelectGrid, { SelectGroupType } from '../../organisms/Pages/GroupSelectGrid';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n paper: {\r\n padding: '10px',\r\n background: '#FFFFEE',\r\n },\r\n tableContainer: { maxHeight: 'calc(100vh - 210px)' },\r\n })\r\n);\r\n\r\nconst FFTComparisonConanairGroupSelectPage: React.FC = () => {\r\n const history = useHistory();\r\n const classes = useStyles();\r\n\r\n const [groupDt, setGroupDt] = useState([]);\r\n const [groupList, setGroupList] = useState([]);\r\n\r\n useEffect(() => {\r\n GetFFTComparisonConanGroupList().then((ret) => {\r\n var fillter = ret.FFTC_CMP_GROUP_SETs.filter((item) => item.DSP_FLG === 1);\r\n setGroupDt(fillter);\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n var lists: SelectGroupType[] = [];\r\n for (var i in groupDt) {\r\n lists.push({ index: Number(i) + 1, groupName: groupDt[i].GROUP_NAME, groupNo: groupDt[i].GROUP_NO });\r\n }\r\n setGroupList(lists);\r\n console.debug(lists);\r\n }, [groupDt]);\r\n\r\n const groupSelect = (selectdata: SelectGroupType) => {\r\n var target = groupDt.find((row) => row.GROUP_NO === selectdata.groupNo);\r\n history.push({\r\n pathname: '/FFTComparisonConanairPage',\r\n state: target,\r\n });\r\n };\r\n\r\n return ;\r\n};\r\n\r\nexport default FFTComparisonConanairGroupSelectPage;\r\n","import { ErrorCode, ResponceDataType} from \"../../../ErrorCode\"\r\nexport type MeasureLogDataType = {\r\n ///計測時刻\r\n /// MEASURE_LOG MSR_DATE\r\n MSR_DATE: Date;\r\n\r\n ///IMSI No.\r\n /// IOT_SET IMSI_NO\r\n IMSI_NO: string;\r\n\r\n ///PLCNo\r\n /// MEASURE_LOG PLC_NO\r\n PLC_NO: number;\r\n ///カード No.。\r\n /// MEASURE_LOG AI_CARD\r\n AI_CARD: number;\r\n ///CHNo.\r\n /// MEASURE_LOG AI_CH\r\n AI_CH: number;\r\n ///収集時間 (秒)\r\n /// MEASURE_LOG COL_TIME\r\n COL_TIME: number;\r\n ///ロギング開始日時\r\n /// MEASURE_LOG LOG_START\r\n LOG_START: string;\r\n ///状態\r\n /// MEASURE_LOG STATUS\r\n STATUS: string;\r\n ///自動 / 手動\r\n /// MEASURE_LOG MANUAL\r\n MANUAL: number;\r\n ///機器番号\r\n /// NAME_DEV_SET DEV_NO\r\n DEV_NO: string;\r\n ///機器名称\r\n /// NAME_DEV_SET DEV_NAME\r\n DEV_NAME: string;\r\n ///項目名称\r\n /// NAME_ITEM_SET ITM_NAME\r\n ITM_NAME: string;\r\n ///ロギング周期\r\n /// LOG_INT_SET DSP_STR\r\n DSP_STR: string;\r\n}\r\n\r\nexport type ImageFileType = {\r\n FilePath: string;\r\n SearchFileName: string;\r\n ResponceData: ResponceDataType;\r\n Base64ImageData: string;\r\n}\r\n\r\n\r\n/**\r\n * 計測ログ情報取得(PLC版)\r\n * @returns\r\n */\r\nexport const GetMeasureModel = () : Promise => {\r\n return new Promise((resolve, reject) => {\r\n const url = \"api/MeasureLog\";\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: MeasureLogDataType[]) => {\r\n console.debug(['GetMeasureModel res', result]);\r\n if (MeasureModelValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\n/**\r\n * 計測ログ情報取得(IOT版)\r\n * @returns\r\n */\r\nexport const GetMeasureIoTBoxModel = () : Promise => {\r\n return new Promise((resolve, reject) => {\r\n const url = \"api/MeasureLog/IoT\";\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: MeasureLogDataType[]) => {\r\n console.debug(['GetMeasureIoTBoxModel res', result]);\r\n if (MeasureModelValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\n\r\nconst MeasureModelValidate = (data: MeasureLogDataType[]) => {\r\n if (data == undefined) return false;\r\n return true;\r\n};\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ntype Props = {\r\n state: string;\r\n manual: number;\r\n};\r\n\r\nconst MeasureLogStatusManualDev: React.FC = (props) => {\r\n const { t, i18n } = useTranslation();\r\n let label = '';\r\n switch (props.state) {\r\n case '1':\r\n switch (props.manual) {\r\n case 1:\r\n label = t('MeasureLogStatusManualDev.OK(手動)', 'OK(手動)');\r\n break;\r\n default:\r\n label = 'OK';\r\n }\r\n break;\r\n default:\r\n label = `NG${props.state}`;\r\n }\r\n\r\n return
{label}
;\r\n};\r\n\r\nexport default MeasureLogStatusManualDev;\r\n","import { createStyles, makeStyles, Theme, createTheme } from '@material-ui/core/styles';\r\n\r\nconst defaultTheme = createTheme({});\r\nconst { pxToRem } = defaultTheme.typography;\r\n\r\n\r\nexport const tableUseStyles = makeStyles(\r\n createStyles({\r\n //テーブルヘッダセル\r\n headerCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n },\r\n bodyCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '0.5px',\r\n height: '10px',\r\n minWidth: '100px',\r\n },\r\n bodyCellCenter: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '0.5px',\r\n height: '10px',\r\n minWidth: '100px',\r\n textAlign: 'center',\r\n },\r\n bodySelectCellCenter: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '0.5px',\r\n height: '10px',\r\n minWidth: '100px',\r\n textAlign: 'center',\r\n backgroundColor: 'yellow',\r\n },\r\n bodyRow: {\r\n '&.Mui-selected, &.Mui-selected:hover': {\r\n //背景色\r\n backgroundColor: '#7fffd4',\r\n '& > .MuiTableCell-root': {\r\n //文字色\r\n color: 'brack',\r\n },\r\n },\r\n },\r\n })\r\n);\r\n\r\n\r\nexport const MeasureLogStyle = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 250px)',\r\n },\r\n })\r\n);\r\n\r\nexport const FooterBaseStyle = makeStyles(\r\n createStyles({\r\n buttonStyle: {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n },\r\n })\r\n);\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport dayjs from 'dayjs';\r\n\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\n\r\nimport { TableBaseStyle } from '../../../baseStyle/tableBaseStyle';\r\n\r\nimport { GetMeasureModel, MeasureLogDataType } from './MeasureLog';\r\nimport DateTImeDiv from '../../atoms/Div/DateTImeDiv';\r\nimport MeasureLogStatusManualDev from '../../molecules/Div/MeasureLogStatusManualDev';\r\nimport { tableUseStyles, MeasureLogStyle } from './MeasureLogStyle';\r\n\r\ntype MeasureLogGridProps = {\r\n onChangeData: (plcNo: string, aiCardNo: string, aiChannelNo: string, selectDate: string) => void;\r\n};\r\n\r\n/**\r\n * 計測一覧(for PLC ver)\r\n * @param props\r\n * @returns\r\n */\r\nconst MeasureLogGrid: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const tableBaseStyle = tableUseStyles();\r\n const baseClasses = TableBaseStyle();\r\n const pageStyle = MeasureLogStyle();\r\n const [selectedID, setSelectedID] = useState(0);\r\n const [measureLoglList, setMeasureLoglList] = useState([]);\r\n\r\n useEffect(() => {\r\n GetMeasureModel().then((ret) => {\r\n setMeasureLoglList([...ret]);\r\n });\r\n\r\n const interval = setInterval(() => {\r\n GetMeasureModel().then((ret) => {\r\n setMeasureLoglList([...ret]);\r\n });\r\n }, 10000);\r\n return () => {\r\n clearInterval(interval);\r\n };\r\n }, []);\r\n\r\n /**\r\n * グリッド選択行クリック\r\n * @param targetData\r\n * @param index\r\n */\r\n const rowClickAction = (targetData: MeasureLogDataType, index: number) => {\r\n setSelectedID(index + 1);\r\n props.onChangeData(\r\n String(targetData.PLC_NO),\r\n String(targetData.AI_CARD),\r\n String(targetData.AI_CH),\r\n dayjs(targetData.LOG_START).format('YYYY/MM/DD HH:mm:ss')\r\n );\r\n };\r\n\r\n //行選択の背景色一時置き\r\n let lineSelection = '';\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n {t('MeasureLogGrid.日時', '日時')}\r\n PLC\r\n {t('MeasureLogGrid.AIカード', 'AIカード')}\r\n CH\r\n {t('MeasureLogGrid.収集時間', '収集時間')}\r\n {t('MeasureLogGrid.機器番号', '機器番号')}\r\n {t('MeasureLogGrid.機器名称', '機器名称')}\r\n {t('MeasureLogGrid.項目名称', '項目名称')}\r\n {/* {t('MeasureLogGrid.周期', '周期')} */}\r\n {t('MeasureLogGrid.開始日時', '開始日時')}\r\n {t('MeasureLogGrid.状態', '状態')}\r\n \r\n \r\n \r\n {measureLoglList?.map((item, index) => (\r\n {\r\n rowClickAction(item, index);\r\n }}\r\n selected={selectedID === index + 1}\r\n className={lineSelection}\r\n >\r\n \r\n \r\n \r\n {item.PLC_NO}\r\n {item.AI_CARD}\r\n {item.AI_CH}\r\n \r\n {item.COL_TIME}\r\n {t('MeasureLogGrid.秒', '秒')}\r\n \r\n {item.DEV_NO}\r\n {item.DEV_NAME}\r\n {item.ITM_NAME}\r\n {/* {item.DSP_STR} */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default MeasureLogGrid;\r\n","import React, { useEffect, useState } from 'react';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { useTranslation } from 'react-i18next';\r\nimport dayjs from 'dayjs';\r\n\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\n\r\nimport { GetMeasureIoTBoxModel, MeasureLogDataType } from './MeasureLog';\r\nimport DateTImeDiv from '../../atoms/Div/DateTImeDiv';\r\nimport MeasureLogStatusManualDev from '../../molecules/Div/MeasureLogStatusManualDev';\r\nimport { tableUseStyles, MeasureLogStyle } from './MeasureLogStyle';\r\n\r\ntype MeasureLogGridIoTBoxProps = {\r\n onChangeData: (plcNo: string, aiCardNo: string, aiChannelNo: string, selectDate: string) => void;\r\n};\r\n\r\n/**\r\n * 計測一覧(for IoTBox ver)\r\n * @param props\r\n * @returns\r\n */\r\nconst MeasureLogGridIoTBox: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const tableBaseStyle = tableUseStyles();\r\n const pageStyle = MeasureLogStyle();\r\n\r\n const [selectedID, setSelectedID] = useState(0);\r\n const [measureLoglList, setMeasureLoglList] = useState([]);\r\n\r\n useEffect(() => {\r\n GetMeasureIoTBoxModel().then((ret) => {\r\n setMeasureLoglList([...ret]);\r\n });\r\n\r\n const interval = setInterval(() => {\r\n GetMeasureIoTBoxModel().then((ret) => {\r\n setMeasureLoglList([...ret]);\r\n });\r\n }, 10000);\r\n\r\n return () => {\r\n clearInterval(interval);\r\n };\r\n }, []);\r\n\r\n /**\r\n * グリッド選択行クリック\r\n * @param targetData\r\n * @param index\r\n */\r\n const rowClickAction = (targetData: MeasureLogDataType, index: number) => {\r\n setSelectedID(index + 1);\r\n props.onChangeData(\r\n String(targetData.PLC_NO),\r\n String(targetData.AI_CARD),\r\n String(targetData.AI_CH),\r\n dayjs(targetData.LOG_START).format('YYYY/MM/DD HH:mm:ss')\r\n );\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {t('MeasureLogGrid.日時', '日時')}\r\n {t('MeasureLogGrid.IMSI', 'IMSI')}\r\n {t('MeasureLogGrid.CH', 'CH')}\r\n {t('MeasureLogGrid.収集時間', '収集時間')}\r\n {t('MeasureLogGrid.機器番号', '機器番号')}\r\n {t('MeasureLogGrid.機器名称', '機器名称')}\r\n {t('MeasureLogGrid.項目名称', '項目名称')}\r\n {/* {t('MeasureLogGrid.周期', '周期')} */}\r\n {t('MeasureLogGrid.開始日時', '開始日時')}\r\n {t('MeasureLogGrid.状態', '状態')}\r\n \r\n \r\n \r\n {measureLoglList?.map((item, index) => (\r\n {\r\n rowClickAction(item, index);\r\n }}\r\n selected={selectedID === index + 1}\r\n className={tableBaseStyle.bodyRow}\r\n >\r\n \r\n \r\n \r\n {item.IMSI_NO}\r\n {item.AI_CH}\r\n \r\n {item.COL_TIME !== -1 ? String(item.COL_TIME) + t('MeasureLogGrid.秒', '秒') : ''}\r\n \r\n {item.DEV_NO}\r\n {item.DEV_NAME}\r\n {item.ITM_NAME}\r\n {/* {item.DSP_STR} */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default MeasureLogGridIoTBox;\r\n","import React, { useContext, useEffect, useState } from 'react';\r\nimport Button from '@material-ui/core/Button';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { FooterBaseStyle, MeasureLogStyle } from './MeasureLogStyle';\r\nimport { AppContext } from '../../../App';\r\ntype MeasureLogFooterProps = {\r\n buttonEnable: boolean;\r\n onClickDispImageFile: () => void;\r\n};\r\n\r\nconst MeasureLogFooter: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const footerBaseStyle = FooterBaseStyle();\r\n const { login } = useContext(AppContext);\r\n\r\n //3次元ボタン有効フラグ\r\n const threeDButtonEnabled: boolean = login.GetSystemSettingModel.ThreeDButtonEnabled === 1 ? true : false;\r\n\r\n return (\r\n <>\r\n {threeDButtonEnabled ? (\r\n \r\n props.onClickDispImageFile()}\r\n >\r\n {t('MeasureLogFooter.三次元グラフ', '三次元グラフ')}\r\n \r\n \r\n ) : null}\r\n \r\n );\r\n};\r\n\r\nexport default MeasureLogFooter;\r\n","import React, { useContext, useEffect, useState } from 'react';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\n\r\nimport MeasureLogGrid from './MeasureLogGrid';\r\nimport MeasureLogGridIoTBox from './MeasureLogGridIoTBox';\r\nimport { AppContext } from '../../../App';\r\nimport MeasureLogFooter from './MeasureLogFooter';\r\nimport { MeasureLogStyle } from './MeasureLogStyle';\r\nimport { GetMeasureModel, MeasureLogDataType } from './MeasureLog';\r\nimport ImageDialog, { ImageDialogResponse } from '../../molecules/Dialog/ImageDialog';\r\nimport { useModal } from '../../../function/useModal';\r\nimport { ImageFileType, GetThreeDimensionImagePath, GetThreeDimensionImageTitle } from '../../../function/ImageFileModel';\r\nimport { useTranslation } from 'react-i18next';\r\nimport SimpleDialog from '../../atoms/Dialog/SimpleDialog';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport { CollectSettingItemDialogResponse } from '../MeasureSetting/CollectSetting/CollectSettingItemDialog';\r\nimport { PLCcollectSettingType } from '../MeasureSetting/CollectSetting/CollectSettingDefine';\r\n\r\nconst MeasureLogPage: React.FC = () => {\r\n const { t } = useTranslation();\r\n const pageStyle = MeasureLogStyle();\r\n const { login } = useContext(AppContext);\r\n\r\n const [simpleDialogOpen, setSimpleDialogOpen] = React.useState(false);\r\n const [showMessage, setShowMessage] = React.useState('');\r\n const [imagePath, setImagePath] = React.useState('');\r\n const [imageName, setImageName] = React.useState('');\r\n const [imageDlg, actImageDlg] = useModal();\r\n const [imageCollectSetting, setImageCollectSetting] = React.useState();\r\n const [imageFileDate, setImageFileDate] = React.useState('');\r\n const [selectData, setSelectData] = useState({\r\n plcNo: '',\r\n aiCardNo: '',\r\n aiChannelNo: '',\r\n selectDate: '',\r\n });\r\n\r\n const imgDlg = imageDlg ? (\r\n \r\n ) : null;\r\n\r\n /**\r\n *選択内容変更\r\n * @param value\r\n */\r\n const onSelectDataChange = (plcNo: string, aiCardNo: string, aiChannelNo: string, selectDate: string) => {\r\n selectData.plcNo = plcNo;\r\n selectData.aiCardNo = aiCardNo;\r\n selectData.aiChannelNo = aiChannelNo;\r\n selectData.selectDate = selectDate;\r\n };\r\n /**メッセージボックス閉じる */\r\n const handleSimpleDialogClose = () => {\r\n setSimpleDialogOpen(false);\r\n };\r\n\r\n /**\r\n *3次元グラフ表示ダイアログ表示\r\n * @returns\r\n */\r\n const dispImageFileAction = () => {\r\n //選択項目を取得\r\n if (selectData.plcNo === '') {\r\n setShowMessage(t('MeasureLogPage.項目が選択されていません', '項目が選択されていません'));\r\n setSimpleDialogOpen(true);\r\n return;\r\n }\r\n GetThreeDimensionImagePath(selectData.plcNo, selectData.aiCardNo, selectData.aiChannelNo, selectData.selectDate, 0)\r\n .then((r) => {\r\n if (r.FilePath === '') {\r\n setShowMessage(t('MeasureLogPage.ファイルがありません', 'ファイルがありません') + '\\n' + r.SearchFileName);\r\n setSimpleDialogOpen(true);\r\n } else {\r\n setImageName(r.FilePath);\r\n setImagePath(`data:image/bmp;base64,${r.Base64ImageData}`);\r\n setImageCollectSetting(r.CollectSettingModel);\r\n setImageFileDate(r.FileDate);\r\n actImageDlg\r\n .open()\r\n .apply((resp: ImageDialogResponse) => {})\r\n .cancel(() => {});\r\n }\r\n })\r\n .catch((error) => {\r\n setShowMessage(\r\n t('MeasureLogPage.ファイル取得中ににエラーが発生しました', 'ファイル取得中ににエラーが発生しました')\r\n );\r\n setSimpleDialogOpen(true);\r\n })\r\n .finally(() => {});\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n {login.IsIoT ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {showMessage}\r\n \r\n {imgDlg}\r\n \r\n );\r\n};\r\n\r\nexport default MeasureLogPage;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { SettingsState } from '../../organisms/SelectSettings';\r\nimport { Paper, Table, TableContainer, TableHead, TableBody, TableRow, TableCell, TextField } from '@material-ui/core';\r\nimport {\r\n GroupListType,\r\n PH_CUR_GROUP_SET,\r\n PhaseCurrentSelectItem,\r\n GetPhaseCurrentGroupList,\r\n PutPhaseCurrentGroupList,\r\n} from '../../../function/GroupDataModel';\r\nimport ItemComboBox, { ComboBoxItemType } from '../../atoms/ComboBox/ItemComboBox';\r\nimport SaveCancel from './SaveCancel';\r\nimport { useModal } from '../../../function/useModal';\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../atoms/Dialog/ConfirmDialog';\r\nimport MessageDialog, { MessageDialogResponse } from '../../atoms/Dialog/MessageDialog';\r\nimport { useTranslation } from 'react-i18next';\r\nimport CreateGroupDialog, { CreateGroupDialogResponse } from './CreateGroupDialog';\r\n\r\ntype PhaseCurrentSettingProps = {\r\n editData: SettingsState;\r\n};\r\n\r\ntype SaveParameter = {\r\n list: PH_CUR_GROUP_SET[];\r\n};\r\n\r\nconst MaxGroup: number = 128;\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableStyle: {\r\n width: '400px',\r\n borderStyle: 'none',\r\n },\r\n tableHeader: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n padding: '1px',\r\n minWidth: '80px',\r\n borderCollapse: `collapse`,\r\n },\r\n rowStyle: {\r\n borderStyle: 'none',\r\n },\r\n cellStyle: {\r\n borderStyle: 'none',\r\n },\r\n cellName: {\r\n width: '140px',\r\n },\r\n cellData: {\r\n width: '220px',\r\n },\r\n selectNo: {\r\n width: '120px',\r\n },\r\n selectName: {\r\n width: '200px',\r\n },\r\n dropdownStyle: {\r\n maxHeight: 300,\r\n },\r\n gridStyle: {\r\n borderStyle: 'solid',\r\n maxWidth: '500px',\r\n },\r\n tableItem: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n orderBottomStyle: 'inset',\r\n borderLeftStyle: 'solid',\r\n borderRightStyle: 'solid',\r\n textAlign: 'center',\r\n minWidth: '80px',\r\n height: '8px',\r\n padding: '1px',\r\n },\r\n fixedCell: {\r\n backgroundColor: '#eeeeee',\r\n },\r\n })\r\n);\r\n\r\nconst PhaseCurrentSetting: React.FC = (props: PhaseCurrentSettingProps) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [groupNo, setGroupNo] = useState(0);\r\n const [groupName, setGroupName] = useState('');\r\n const [editList, setEditList] = useState([]);\r\n const [selectList, setSelectList] = useState();\r\n const [devIdx, setDevIdx] = useState(0);\r\n const [groupCombos, setGroupCombos] = useState();\r\n const [selectCombos, setSelectCombos] = useState();\r\n const [flgCfmDlg, actCfmDlg] = useModal();\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n const [kindR, setKindR] = useState('');\r\n const [kindS, setKindS] = useState('');\r\n const [kindT, setKindT] = useState('');\r\n const [itemR, setItemR] = useState('');\r\n const [itemS, setItemS] = useState('');\r\n const [itemT, setItemT] = useState('');\r\n const [flgCrtDlg, actCrtDlg] = useModal();\r\n\r\n const cfmdlg = flgCfmDlg ? (\r\n \r\n ) : null;\r\n const msgdlg = flgMsgDlg ? : null;\r\n const crtdlg = flgCrtDlg ? (\r\n ((gc) => gc.index)} maxGroup={MaxGroup} />\r\n ) : null;\r\n\r\n console.log('-- CurrentSetting --');\r\n\r\n useEffect(() => {\r\n console.log('-- fetch current settings --');\r\n GetPhaseCurrentGroupList().then((result: GroupListType) => {\r\n const groupList: PH_CUR_GROUP_SET[] = result.PH_CUR_GROUP_SETs.filter((ph) => ph.GROUP_NAME !== '');\r\n setEditList(groupList);\r\n setSelectList(result.PhCurSelectItems);\r\n\r\n const selects = result.PhCurSelectItems.map((sel) => {\r\n return { index: sel.DEV_INDEX, name: sel.GROUP_NAME };\r\n });\r\n selects.unshift({ index: 0, name: '---' });\r\n setSelectCombos(selects);\r\n\r\n if (groupList.length > 0) {\r\n setGroupNo(groupList[0].GROUP_NO);\r\n setGroupName(groupList[0].GROUP_NAME);\r\n setDevIdx(groupList[0].DEV_INDEX);\r\n var sel = result.PhCurSelectItems.find((si) => si.DEV_INDEX == groupList[0].DEV_INDEX);\r\n setKindR(sel?.KIND_R ?? '');\r\n setKindS(sel?.KIND_S ?? '');\r\n setKindT(sel?.KIND_T ?? '');\r\n setItemR(sel?.ITEM_R ?? '');\r\n setItemS(sel?.ITEM_S ?? '');\r\n setItemT(sel?.ITEM_T ?? '');\r\n }\r\n\r\n props.editData.SaveFunction = saveCurrentSetting;\r\n props.editData.IsUpdate = false;\r\n });\r\n }, [props.editData, props.editData.CancelCondition]);\r\n\r\n useEffect(() => {\r\n const groups = editList.map((grp) => {\r\n return { index: grp.GROUP_NO, name: grp.GROUP_NO.toString() };\r\n });\r\n setGroupCombos(groups);\r\n\r\n if (!editList.find((el) => el.GROUP_NO == groupNo)) {\r\n if (editList.length > 0) {\r\n const grp = editList[0];\r\n setGroupNo(grp.GROUP_NO);\r\n }\r\n }\r\n }, [editList]);\r\n\r\n useEffect(() => {\r\n const dev = editList?.find((ed) => ed.GROUP_NO === groupNo);\r\n setGroupName(dev?.GROUP_NAME ?? '');\r\n setDevIdx(dev?.DEV_INDEX ?? 0);\r\n }, [groupNo]);\r\n\r\n useEffect(() => {\r\n var sel = selectList?.find((si) => si.DEV_INDEX == devIdx);\r\n setKindR(sel?.KIND_R ?? '');\r\n setKindS(sel?.KIND_S ?? '');\r\n setKindT(sel?.KIND_T ?? '');\r\n setItemR(sel?.ITEM_R ?? '');\r\n setItemS(sel?.ITEM_S ?? '');\r\n setItemT(sel?.ITEM_T ?? '');\r\n }, [devIdx]);\r\n\r\n const groupNameChange = (name: string) => {\r\n const grp = editList?.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n setGroupName(name);\r\n grp.GROUP_NAME = name;\r\n\r\n props.editData.Target = { list: editList };\r\n props.editData.IsUpdate = true;\r\n }\r\n };\r\n const targetChange = (idx: number) => {\r\n const sel = selectList?.find((ss) => ss.DEV_INDEX === idx);\r\n const edt = editList?.find((ed) => ed.GROUP_NO === groupNo);\r\n if (edt) {\r\n if (sel) {\r\n edt.DEV_INDEX = sel.DEV_INDEX;\r\n // edt.GROUP_NAME = sel.GROUP_NAME;\r\n edt.PLC_NO = sel.PLC_NO;\r\n edt.SET_NO_R = sel.SET_NO_R;\r\n edt.SET_NO_S = sel.SET_NO_S;\r\n edt.SET_NO_T = sel.SET_NO_T;\r\n edt.DSP_FLG = 1;\r\n } else {\r\n // 先頭を選択\r\n edt.DEV_INDEX = 0;\r\n // edt.GROUP_NAME = '';\r\n edt.PLC_NO = 0;\r\n edt.SET_NO_R = 0;\r\n edt.SET_NO_S = 0;\r\n edt.SET_NO_T = 0;\r\n edt.DSP_FLG = 0;\r\n }\r\n setEditList(editList.concat());\r\n setDevIdx(edt.DEV_INDEX);\r\n props.editData.Target = { list: editList };\r\n props.editData.IsUpdate = true;\r\n }\r\n };\r\n const saveCurrentSetting = (param: object): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const sp = param as SaveParameter;\r\n if (sp && sp.list) {\r\n const errmsg = validateSetting(sp.list);\r\n if (errmsg === '') {\r\n PutPhaseCurrentGroupList(sp.list)\r\n .then((count: number) => {\r\n console.log(count);\r\n\r\n resolve('done');\r\n })\r\n .catch((reasone) => reject(reasone));\r\n } else {\r\n setDlgmsg(errmsg);\r\n actMsgDlg.open().apply((_) => setDlgmsg(''));\r\n reject('not save');\r\n }\r\n } else {\r\n reject('data nothing');\r\n }\r\n });\r\n };\r\n const validateSetting = (groups: PH_CUR_GROUP_SET[]): string => {\r\n for (var idx = 0; idx < groups.length; idx++) {\r\n if (groups[idx].GROUP_NAME == '') {\r\n return t('PhaseCurrentSetting.グループ名必須', 'グループ名は必須です');\r\n }\r\n }\r\n return '';\r\n };\r\n const deleteCurrentSetting = (param: object): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const sp = param as SaveParameter;\r\n if (sp && sp.list) {\r\n PutPhaseCurrentGroupList(sp.list)\r\n .then((count: number) => {\r\n console.log(count);\r\n\r\n resolve('done');\r\n })\r\n .catch((reasone) => reject(reasone));\r\n } else {\r\n reject('data nothing');\r\n }\r\n });\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {t('PhaseCurrentSetting.グループNo', 'グループNo')}\r\n \r\n \r\n {\r\n if (typeof e.target.value === 'number') {\r\n setGroupNo(e.target.value);\r\n } else if (typeof e.target.value === 'string') {\r\n setGroupNo(parseInt(e.target.value));\r\n }\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n {t('PhaseCurrentSetting.グループ名称', 'グループ名称')}\r\n \r\n \r\n {\r\n groupNameChange(e.target.value);\r\n }}\r\n />\r\n \r\n \r\n {/* \r\n {t('PhaseCurrentSetting.グループ名称','グループ名称')}\r\n \r\n {\r\n if (typeof e.target.value === 'number') {\r\n targetChange(e.target.value);\r\n } else if (typeof e.target.value === 'string') {\r\n targetChange(parseInt(e.target.value));\r\n }\r\n }}\r\n />\r\n \r\n */}\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {t('RawWaveformsComparisonSetting.機器番号', '機器番号')}\r\n \r\n \r\n {t('RawWaveformsComparisonSetting.計測種別', '計測種別')}\r\n \r\n \r\n {t('RawWaveformsComparisonSetting.項目', '項目')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {\r\n setDlgmsg(t('PhaseCurrentSetting.保存しますか?', '保存しますか?'));\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n saveCurrentSetting({ list: editList }).then((_) => {\r\n props.editData.IsUpdate = false;\r\n // props.editData.CloseSetting();\r\n });\r\n })\r\n .cancel(() => {});\r\n }}\r\n cancelAction={() => {\r\n if (props.editData.IsUpdate) {\r\n setDlgmsg(\r\n t(\r\n 'PhaseCurrentSetting.保存していないデータを破棄します。\\nよろしいですか?',\r\n '保存していないデータを破棄します。\\nよろしいですか?'\r\n )\r\n );\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n //props.editData.IsUpdate = false;\r\n props.editData.UpdateCancel();\r\n // props.editData.CloseSetting();\r\n })\r\n .cancel(() => {});\r\n } else {\r\n // props.editData.CloseSetting();\r\n }\r\n }}\r\n createAction={() => {\r\n actCrtDlg.open().apply((info) => {\r\n const grp = editList.find((ed) => ed.GROUP_NO == info.no);\r\n if (!grp) {\r\n const newGrp: PH_CUR_GROUP_SET = {\r\n GROUP_NO: info.no,\r\n GROUP_NAME: '',\r\n DSP_FLG: 0,\r\n DEV_INDEX: 0,\r\n PLC_NO: 0,\r\n SET_NO_R: 0,\r\n SET_NO_S: 0,\r\n SET_NO_T: 0,\r\n };\r\n const newList = editList.concat(newGrp).sort((g1, g2) => g1.GROUP_NO - g2.GROUP_NO);\r\n setEditList(newList);\r\n }\r\n setGroupNo(info.no);\r\n });\r\n }}\r\n deleteAction={() => {\r\n setDlgmsg(t('PhaseCurrentSetting.削除しますか?', '削除しますか?'));\r\n actCfmDlg.open().apply((_) => {\r\n const grp = editList.find((ed) => ed.GROUP_NO == groupNo);\r\n if (grp) {\r\n grp.GROUP_NAME = '';\r\n deleteCurrentSetting({ list: editList }).then((_) => {\r\n props.editData.IsSaveClose = true;\r\n props.editData.IsUpdate = false;\r\n setEditList(editList.filter((ph) => ph.GROUP_NAME !== ''));\r\n });\r\n }\r\n });\r\n }}\r\n />\r\n
\r\n {cfmdlg}\r\n {msgdlg}\r\n {crtdlg}\r\n
\r\n );\r\n};\r\n\r\ntype DeviceSelectSubProps = {\r\n selectCombos: ComboBoxItemType[] | undefined;\r\n devIdx: number;\r\n targetChange: (idx: number) => void;\r\n kind: string;\r\n item: string;\r\n};\r\n\r\nconst DeviceSelectSub: React.FC = (props) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n {\r\n if (typeof e.target.value === 'number') {\r\n props.targetChange(e.target.value);\r\n } else if (typeof e.target.value === 'string') {\r\n props.targetChange(parseInt(e.target.value));\r\n }\r\n }}\r\n />\r\n \r\n \r\n
{props.kind}
\r\n
\r\n \r\n
{props.item}
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default PhaseCurrentSetting;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { TableRow, TableCell } from '@material-ui/core';\r\nimport { DeviceSelectItem, MeasureSelectItem, ItemSelectItem } from '../../../function/GroupDataModel';\r\nimport ItemComboBox, { ComboBoxItemType } from '../../atoms/ComboBox/ItemComboBox';\r\nimport { useMemo } from 'react';\r\n\r\ntype DeviceMeasItemProps = {\r\n selectList: DeviceSelectItem[];\r\n plcNo: number;\r\n setNo: number;\r\n kind: number;\r\n plcSetFunc: (plc: number, set: number, kind: number) => void;\r\n};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableStyle: {\r\n width: '400px',\r\n borderStyle: 'none',\r\n },\r\n rowStyle: {\r\n borderStyle: 'none',\r\n },\r\n cellStyle: {\r\n borderStyle: 'none',\r\n },\r\n cellName: {\r\n width: '140px',\r\n },\r\n cellData: {\r\n width: '220px',\r\n },\r\n selectNo: {\r\n width: '120px',\r\n },\r\n selectName: {\r\n width: '200px',\r\n },\r\n dropdownStyle: {\r\n maxHeight: 300,\r\n },\r\n gridStyle: {\r\n borderStyle: 'solid',\r\n },\r\n tableItem: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n orderBottomStyle: 'inset',\r\n borderLeftStyle: 'solid',\r\n borderRightStyle: 'solid',\r\n textAlign: 'center',\r\n minWidth: '80px',\r\n height: '8px',\r\n padding: '1px',\r\n },\r\n })\r\n);\r\n\r\n/**\r\n * コンボボックス情報取得(設定からの取得)\r\n * @param devsel 機器選択情報一式\r\n * @param plc PLC番号\r\n * @param no セット番号\r\n * @param kind 種類番号\r\n * @returns\r\n * @description PLC番号、セット番号、種類番号からコンボボックスの情報を取得します。\r\n * PLC番号、セット番号、種類番号が決まっている状態から適切なコンボボックスを選択します。\r\n */\r\nconst getComboInfoFromSetting = (\r\n devsel: DeviceSelectItem[],\r\n plc: number,\r\n no: number,\r\n kind: number\r\n): [number, number, MeasureSelectItem[], number, ItemSelectItem[]] => {\r\n return getDevMeasItmIdxCore(\r\n devsel,\r\n plc,\r\n no,\r\n kind,\r\n (ms: MeasureSelectItem, idx: number): [boolean, number, ItemSelectItem[]] => {\r\n const iidx = ms.ItemSelects.findIndex((is) => {\r\n return is.PLC_NO === plc && is.SET_NO === no && is.KIND === kind;\r\n });\r\n if (iidx !== -1) {\r\n return [true, iidx, ms.ItemSelects];\r\n } else {\r\n return [false, -1, []];\r\n }\r\n }\r\n );\r\n};\r\n/**\r\n * コンボボックス情報取得(機器切り替え時)\r\n * @param devsel コンボボックス情報取得\r\n * @param devIdx 機器インデックス\r\n * @returns\r\n * @description 機器情報を切り替えた際のデフォルトの選択肢を取得します。\r\n */\r\nconst getComboInfoOnDeviceChange = (\r\n devsel: DeviceSelectItem[],\r\n devIdx: number\r\n): [number, number, MeasureSelectItem[], number, ItemSelectItem[]] => {\r\n const targetDev = devsel.find((ds) => ds.DEV_INDEX === devIdx);\r\n if (targetDev) {\r\n return getDevMeasItmIdxCore(\r\n [targetDev],\r\n 0,\r\n 0,\r\n 0,\r\n (ms: MeasureSelectItem, idx: number): [boolean, number, ItemSelectItem[]] => {\r\n // 無条件で最初の計測を選択\r\n return [true, 0, ms.ItemSelects];\r\n }\r\n );\r\n }\r\n return [-1, 0, [], 0, []];\r\n};\r\n/**\r\n * コンボボックス情報取得(計測切り替え時)\r\n * @param device 対象機器\r\n * @param measIdx 計測インデックス\r\n * @returns\r\n * @description 計測を切り替えた際のデフォルトの選択肢を取得します。\r\n */\r\nconst getComboInfoOnMeasChange = (\r\n device: DeviceSelectItem,\r\n measIdx: number\r\n): [number, number, MeasureSelectItem[], number, ItemSelectItem[]] => {\r\n return getDevMeasItmIdxCore(\r\n [device],\r\n 0,\r\n 0,\r\n 0,\r\n (ms: MeasureSelectItem, idx: number): [boolean, number, ItemSelectItem[]] => {\r\n if (idx === measIdx) {\r\n // 指定の測定インデックスの先頭を選択\r\n return [true, 0, ms.ItemSelects];\r\n } else {\r\n return [false, -1, []];\r\n }\r\n }\r\n );\r\n};\r\n/**\r\n *\r\n * @param devsel 機器選択情報一式\r\n * @param plc PLC番号\r\n * @param no セット番号\r\n * @param kind 種類番号\r\n * @param func 項目選択処理\r\n * @returns [機器インデックス,計測インデックス,計測選択肢,項目インデックス,項目選択肢]\r\n */\r\nconst getDevMeasItmIdxCore = (\r\n devsel: DeviceSelectItem[],\r\n plc: number,\r\n no: number,\r\n kind: number,\r\n func: (ms: MeasureSelectItem, idx: number) => [boolean, number, ItemSelectItem[]]\r\n): [number, number, MeasureSelectItem[], number, ItemSelectItem[]] => {\r\n let mno = -1,\r\n ino = -1;\r\n let mlist: MeasureSelectItem[] = [];\r\n let ilist: ItemSelectItem[] = [];\r\n const dno = devsel.findIndex((ds) => {\r\n const midx = ds.MeasureSelects.findIndex((ms, idx) => {\r\n let ires = false;\r\n [ires, ino, ilist] = func(ms, idx);\r\n return ires;\r\n });\r\n if (midx !== -1) {\r\n mno = midx;\r\n mlist = ds.MeasureSelects;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n });\r\n\r\n return [dno, mno, mlist, ino, ilist];\r\n};\r\n\r\nconst DeviceMeasItem: React.FC = (props: DeviceMeasItemProps) => {\r\n const classes = useStyles();\r\n const [devIdx, setDevIdx] = useState(0);\r\n const [measCombos, setMeasCombos] = useState([]);\r\n const [measIdx, setMeasIdx] = useState(0);\r\n const [itemCombos, setItemCombos] = useState([]);\r\n const [itemIdx, setItemIdx] = useState(0);\r\n\r\n console.log(['-- DeviceMeasItem --', measCombos]);\r\n\r\n // 機器選択用の選択肢作成\r\n const devCombos = useMemo(() => {\r\n const selects = props.selectList.map((sel, idx) => {\r\n return { index: idx + 1, name: sel.DEV_NO };\r\n });\r\n selects.unshift({ index: 0, name: '---' });\r\n\r\n return selects;\r\n }, [props.selectList]);\r\n\r\n useEffect(() => {\r\n const [dno, mno, mlst, ino, ilst] = getComboInfoFromSetting(props.selectList, props.plcNo, props.setNo, props.kind);\r\n\r\n setDevIdx(dno + 1);\r\n const meas = mlst.map((m, idx) => {\r\n return { index: idx, name: m.MES_NAME };\r\n });\r\n setMeasCombos(meas);\r\n setMeasIdx(mno);\r\n const item = ilst.map((i, idx) => {\r\n return { index: idx, name: i.ITM_NAME };\r\n });\r\n setItemCombos(item);\r\n setItemIdx(ino);\r\n }, [props.plcNo, props.setNo, props.kind, props.selectList]);\r\n\r\n const deviceChange = (idx: number) => {\r\n if (idx > 0 && props.selectList.length > idx - 1) {\r\n const [dno1, mno1, mlist, ino1, ilist] = getComboInfoOnDeviceChange(\r\n props.selectList,\r\n props.selectList[idx - 1].DEV_INDEX\r\n );\r\n if (ilist.length > 0) {\r\n setDevIdx(idx);\r\n const meas = mlist.map((sm, sidx) => {\r\n return { index: sidx, name: sm.MES_NAME };\r\n });\r\n setMeasCombos(meas);\r\n setMeasIdx(mno1);\r\n const item = ilist.map((si, sidx2) => {\r\n return { index: sidx2, name: si.ITM_NAME };\r\n });\r\n setItemCombos(item);\r\n setItemIdx(ino1);\r\n\r\n props.plcSetFunc(ilist[0].PLC_NO, ilist[0].SET_NO, ilist[0].KIND);\r\n return;\r\n }\r\n }\r\n props.plcSetFunc(0, 0, 0);\r\n };\r\n const measureChange = (idx: number, plcidx: number) => {\r\n if (plcidx > 0 && props.selectList.length > plcidx - 1) {\r\n const ds = props.selectList[plcidx - 1];\r\n const [dno, mno, mlist, ino, ilist] = getComboInfoOnMeasChange(ds, idx);\r\n\r\n if (ilist.length > 0) {\r\n props.plcSetFunc(ilist[0].PLC_NO, ilist[0].SET_NO, ilist[0].KIND);\r\n return;\r\n }\r\n }\r\n props.plcSetFunc(0, 0, 0);\r\n };\r\n const itemChange = (idx: number, plcidx: number, measidx: number) => {\r\n if (plcidx > 0 && props.selectList.length > plcidx - 1) {\r\n const ds = props.selectList[plcidx - 1];\r\n const ms = ds.MeasureSelects[measidx];\r\n\r\n //setItemIdx(idx);\r\n props.plcSetFunc(ms.ItemSelects[idx].PLC_NO, ms.ItemSelects[idx].SET_NO, ms.ItemSelects[idx].KIND);\r\n return;\r\n }\r\n props.plcSetFunc(0, 0, 0);\r\n };\r\n\r\n return (\r\n \r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n deviceChange(parseInt(e.target.value));\r\n }\r\n }}\r\n />\r\n \r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n measureChange(parseInt(e.target.value), devIdx);\r\n }\r\n }}\r\n />\r\n \r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n itemChange(parseInt(e.target.value), devIdx, measIdx);\r\n }\r\n }}\r\n />\r\n \r\n \r\n );\r\n};\r\n\r\nexport default DeviceMeasItem;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { SettingsState } from '../../organisms/SelectSettings';\r\nimport { Paper, Table, TableContainer, TableBody, TableRow, TableCell, TextField, TableHead } from '@material-ui/core';\r\nimport {\r\n GroupListType,\r\n SIG_CMP_GROUP_SET,\r\n DeviceSelectItem,\r\n GetRawWaveformsComparisonGroupList,\r\n PutRawWaveformsComparisonGroupList,\r\n} from '../../../function/GroupDataModel';\r\nimport ItemComboBox, { ComboBoxItemType } from '../../atoms/ComboBox/ItemComboBox';\r\nimport DeviceMeasItem from './DeviceMeasItem';\r\nimport SaveCancel from './SaveCancel';\r\nimport { useModal } from '../../../function/useModal';\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../atoms/Dialog/ConfirmDialog';\r\nimport MessageDialog, { MessageDialogResponse } from '../../atoms/Dialog/MessageDialog';\r\nimport { useTranslation } from 'react-i18next';\r\nimport CreateGroupDialog, { CreateGroupDialogResponse } from './CreateGroupDialog';\r\n\r\ntype RawWaveformsComparisonSettingProps = {\r\n editData: SettingsState;\r\n};\r\n\r\ntype SaveParameter = {\r\n list: SIG_CMP_GROUP_SET[];\r\n};\r\n\r\nconst MaxGroup: number = 256;\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableStyle: {\r\n width: '400px',\r\n borderStyle: 'none',\r\n },\r\n tableHeader: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n padding: '1px',\r\n minWidth: '80px',\r\n borderCollapse: `collapse`,\r\n },\r\n rowStyle: {\r\n borderStyle: 'none',\r\n },\r\n cellStyle: {\r\n borderStyle: 'none',\r\n },\r\n cellName: {\r\n width: '140px',\r\n },\r\n cellData: {\r\n width: '220px',\r\n },\r\n selectNo: {\r\n width: '120px',\r\n },\r\n selectName: {\r\n width: '200px',\r\n },\r\n dropdownStyle: {\r\n maxHeight: 300,\r\n },\r\n gridStyle: {\r\n borderStyle: 'solid',\r\n maxWidth: '500px',\r\n },\r\n })\r\n);\r\n\r\nconst RawWaveformsComparisonSetting: React.FC = (\r\n props: RawWaveformsComparisonSettingProps\r\n) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [groupNo, setGroupNo] = useState(0);\r\n const [editList, setEditList] = useState([]);\r\n const [groupName, setGroupName] = useState('');\r\n const [selectList, setSelectList] = useState([]);\r\n const [groupCombos, setGroupCombos] = useState();\r\n const [plcNo1, setPlcNo1] = useState(0);\r\n const [setNo1, setSetNo1] = useState(0);\r\n const [plcNo2, setPlcNo2] = useState(0);\r\n const [setNo2, setSetNo2] = useState(0);\r\n const [flgCfmDlg, actCfmDlg] = useModal();\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n const [flgCrtDlg, actCrtDlg] = useModal();\r\n\r\n const cfmdlg = flgCfmDlg ? (\r\n \r\n ) : null;\r\n const msgdlg = flgMsgDlg ? : null;\r\n const crtdlg = flgCrtDlg ? (\r\n ((gc) => gc.index)} maxGroup={MaxGroup} />\r\n ) : null;\r\n\r\n console.log('-- RawWaveformsComparisonSetting --');\r\n\r\n useEffect(() => {\r\n console.log('-- fetch raw waveform settings --');\r\n GetRawWaveformsComparisonGroupList().then((result: GroupListType) => {\r\n const groupList: SIG_CMP_GROUP_SET[] = result.SIG_CMP_GROUP_SETs.filter((ph) => ph.GROUP_NAME !== '');\r\n setEditList(groupList);\r\n \r\n console.debug([\"v-----setSelectList----\",result]);\r\n //生波形で必要ない項目は省く\r\n result.DeviceSelects.forEach((r) => (r.MeasureSelects = r.MeasureSelects.filter((rr) => rr.FFT_INVALID === 0)));\r\n \r\n setSelectList(result.DeviceSelects);\r\n console.debug([\"setSelectList----\",result]);\r\n\r\n if (groupList.length > 0) {\r\n const grp = groupList[0];\r\n setGroupNo(grp.GROUP_NO);\r\n setGroupName(grp.GROUP_NAME);\r\n\r\n setPlcNo1(grp.PLC_NO1);\r\n setSetNo1(grp.SET_NO1);\r\n setPlcNo2(grp.PLC_NO2);\r\n setSetNo2(grp.SET_NO2);\r\n }\r\n\r\n props.editData.SaveFunction = saveCurrentSetting;\r\n props.editData.IsUpdate = false;\r\n });\r\n }, [props.editData, props.editData.CancelCondition]);\r\n\r\n useEffect(() => {\r\n const groups = editList?.map((grp) => {\r\n return { index: grp.GROUP_NO, name: grp.GROUP_NO.toString() };\r\n });\r\n setGroupCombos(groups);\r\n\r\n if (!editList.find((el) => el.GROUP_NO == groupNo)) {\r\n if (editList.length > 0) {\r\n const grp = editList[0];\r\n setGroupNo(grp.GROUP_NO);\r\n }\r\n }\r\n }, [editList]);\r\n\r\n useEffect(() => {\r\n const grp = editList.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n setGroupName(grp.GROUP_NAME ?? '');\r\n\r\n if (selectList) {\r\n setPlcNo1(grp.PLC_NO1);\r\n setSetNo1(grp.SET_NO1);\r\n setPlcNo2(grp.PLC_NO2);\r\n setSetNo2(grp.SET_NO2);\r\n }\r\n }\r\n }, [groupNo]);\r\n\r\n const groupChange = (no: number) => {\r\n updateDispFlg();\r\n setGroupNo(no);\r\n };\r\n const updateDispFlg = () => {\r\n const grp = editList?.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n if (grp.GROUP_NAME === '' && grp.PLC_NO1 === 0 && grp.PLC_NO2 === 0) {\r\n grp.DSP_FLG = 0;\r\n } else {\r\n grp.DSP_FLG = 1;\r\n }\r\n }\r\n };\r\n const groupNameChange = (name: string) => {\r\n const grp = editList?.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n setGroupName(name);\r\n grp.GROUP_NAME = name;\r\n\r\n props.editData.Target = { list: editList };\r\n props.editData.IsUpdate = true;\r\n }\r\n };\r\n const groupPlcSet1 = (plc: number, set: number, kind: number) => {\r\n const grp = editList?.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n grp.PLC_NO1 = plc;\r\n grp.SET_NO1 = set;\r\n\r\n props.editData.Target = { list: editList };\r\n props.editData.IsUpdate = true;\r\n\r\n updateDispFlg();\r\n setPlcNo1(plc);\r\n setSetNo1(set);\r\n }\r\n };\r\n const groupPlcSet2 = (plc: number, set: number, kind: number) => {\r\n const grp = editList?.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n grp.PLC_NO2 = plc;\r\n grp.SET_NO2 = set;\r\n\r\n props.editData.Target = { list: editList };\r\n props.editData.IsUpdate = true;\r\n\r\n updateDispFlg();\r\n setPlcNo2(plc);\r\n setSetNo2(set);\r\n }\r\n };\r\n const saveCurrentSetting = (param: object): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const sp = param as SaveParameter;\r\n if (sp && sp.list) {\r\n const errmsg = validateSetting(sp.list);\r\n if (errmsg === '') {\r\n PutRawWaveformsComparisonGroupList(sp.list)\r\n .then((count: number) => {\r\n console.log(count);\r\n\r\n resolve('done');\r\n })\r\n .catch((reasone) => reject(reasone));\r\n } else {\r\n setDlgmsg(errmsg);\r\n actMsgDlg.open().apply((_) => setDlgmsg(''));\r\n reject('not save');\r\n }\r\n } else {\r\n reject('data nothing');\r\n }\r\n });\r\n };\r\n const validateSetting = (groups: SIG_CMP_GROUP_SET[]): string => {\r\n for (var idx = 0; idx < groups.length; idx++) {\r\n if (groups[idx].GROUP_NAME == '') {\r\n return t('RawWaveformsComparisonSetting.グループ名必須', 'グループ名は必須です');\r\n }\r\n }\r\n return '';\r\n };\r\n const deleteCurrentSetting = (param: object): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const sp = param as SaveParameter;\r\n if (sp && sp.list) {\r\n PutRawWaveformsComparisonGroupList(sp.list)\r\n .then((count: number) => {\r\n console.log(count);\r\n\r\n resolve('done');\r\n })\r\n .catch((reasone) => reject(reasone));\r\n } else {\r\n reject('data nothing');\r\n }\r\n });\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {t('RawWaveformsComparisonSetting.グループNo', 'グループNo')}\r\n \r\n \r\n {\r\n if (typeof e.target.value === 'number') {\r\n groupChange(e.target.value);\r\n } else if (typeof e.target.value === 'string') {\r\n groupChange(parseInt(e.target.value));\r\n }\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n {t('RawWaveformsComparisonSetting.グループ名称', 'グループ名称')}\r\n \r\n \r\n {\r\n groupNameChange(e.target.value);\r\n }}\r\n />\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n {t('RawWaveformsComparisonSetting.機器番号', '機器番号')}\r\n \r\n \r\n {t('RawWaveformsComparisonSetting.計測種別', '計測種別')}\r\n \r\n \r\n {t('RawWaveformsComparisonSetting.項目', '項目')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {\r\n setDlgmsg(t('RawWaveformsComparisonSetting.保存しますか?', '保存しますか?'));\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n saveCurrentSetting({ list: editList }).then((_) => {\r\n props.editData.IsUpdate = false;\r\n // props.editData.CloseSetting();\r\n });\r\n })\r\n .cancel(() => {});\r\n }}\r\n cancelAction={() => {\r\n if (props.editData.IsUpdate) {\r\n setDlgmsg(\r\n t(\r\n 'RawWaveformsComparisonSetting.保存していないデータを破棄します。\\nよろしいですか?',\r\n '保存していないデータを破棄します。\\nよろしいですか?'\r\n )\r\n );\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n // props.editData.IsUpdate = false;\r\n props.editData.UpdateCancel();\r\n // props.editData.CloseSetting();\r\n })\r\n .cancel(() => {});\r\n } else {\r\n // props.editData.CloseSetting();\r\n }\r\n }}\r\n createAction={() => {\r\n actCrtDlg.open().apply((info) => {\r\n const grp = editList.find((ed) => ed.GROUP_NO == info.no);\r\n if (!grp) {\r\n const newGrp: SIG_CMP_GROUP_SET = {\r\n GROUP_NO: info.no,\r\n GROUP_NAME: '',\r\n DSP_FLG: 0,\r\n PLC_NO1: 0,\r\n SET_NO1: 0,\r\n PLC_NO2: 0,\r\n SET_NO2: 0,\r\n Time_No1: '',\r\n Time_No2: '',\r\n };\r\n const newList = editList.concat(newGrp).sort((g1, g2) => g1.GROUP_NO - g2.GROUP_NO);\r\n setEditList(newList);\r\n }\r\n setGroupNo(info.no);\r\n });\r\n }}\r\n deleteAction={() => {\r\n setDlgmsg(t('RawWaveformsComparisonSetting.削除しますか?', '削除しますか?'));\r\n actCfmDlg.open().apply((_) => {\r\n const grp = editList.find((ed) => ed.GROUP_NO == groupNo);\r\n if (grp) {\r\n grp.GROUP_NAME = '';\r\n deleteCurrentSetting({ list: editList }).then((_) => {\r\n props.editData.IsSaveClose = true;\r\n props.editData.IsUpdate = false;\r\n setEditList(editList.filter((ph) => ph.GROUP_NAME !== ''));\r\n });\r\n }\r\n });\r\n }}\r\n />\r\n
\r\n {cfmdlg}\r\n {msgdlg}\r\n {crtdlg}\r\n
\r\n );\r\n};\r\n\r\nexport default RawWaveformsComparisonSetting;\r\n","import { createStyles, makeStyles, Theme, createTheme } from '@material-ui/core/styles';\r\n\r\nconst defaultTheme = createTheme({});\r\nconst { pxToRem } = defaultTheme.typography;\r\n\r\n\r\nexport const TableBaseStyle = makeStyles(\r\n createStyles({\r\n //テーブルヘッダセル\r\n headerCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n padding: '1px',\r\n minWidth: '80px',\r\n borderCollapse: `collapse`,\r\n },\r\n bodyCell: {\r\n\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '0.5px',\r\n height: '10px',\r\n },\r\n bodyCellCenter: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n orderBottomStyle: 'inset',\r\n borderLeftStyle: 'solid',\r\n borderRightStyle: 'solid',\r\n textAlign: 'center',\r\n minWidth: '80px',\r\n height: '8px',\r\n padding: '1px',\r\n },\r\n bodyRow: {\r\n '&.Mui-selected, &.Mui-selected:hover': {\r\n //背景色\r\n backgroundColor: 'yellow',\r\n '& > .MuiTableCell-root': {\r\n //文字色\r\n color: 'brack',\r\n },\r\n },\r\n },\r\n cellName: {\r\n borderStyle: 'none',\r\n width: '60px',\r\n },\r\n cellData: {\r\n borderStyle: 'none',\r\n width: '220px',\r\n },\r\n //テキスト\r\n textField: {\r\n flexGrow: 1,\r\n height: '100%',\r\n width: '100%',\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n textAlign: \"center\",\r\n },\r\n gridStyle: {\r\n borderStyle: 'solid',\r\n maxWidth: '600px',\r\n },\r\n\r\n })\r\n);\r\n\r\nexport const ChartBaseStyle = makeStyles(\r\n createStyles({\r\n tooltip: {\r\n background: '#FFFFEE',\r\n fontSize: '14px',\r\n padding: '10px 10px 0px 20px',\r\n },\r\n })\r\n);\r\n\r\nexport const EMCTrendStyle = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 276px)',\r\n },\r\n chartContainer: {\r\n minHeight: 'calc(100vh - 276px)',\r\n maxHeight: 'calc(100vh - 276px)',\r\n },\r\n //画面ヘッダ部ペーパ^\r\n paperRoot: {\r\n maxWidth: '1100px',\r\n minWidth: '1100px',\r\n padding: '3px',\r\n },\r\n buttonRoot: {\r\n minWidth: '130px',\r\n },\r\n //画面ヘッダ部ラジオボタン\r\n muiTypography: {\r\n fontSize: pxToRem(14),\r\n lineHeight: 1.66,\r\n },\r\n //画面で使用しているチェックボックス\r\n checkBox: {\r\n padding: '0px',\r\n },\r\n spacingXs1: {\r\n minWidth: '1440px',\r\n },\r\n })\r\n);\r\n\r\nexport const FooterBaseStyle = makeStyles(\r\n createStyles({\r\n buttonStyle: {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n },\r\n })\r\n);\r\n","import React, { useEffect, useState } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { TableRow, TableCell } from '@material-ui/core';\r\nimport { DeviceSelectItem, MeasureSelectItem, ItemSelectItem } from '../../../../function/GroupDataModel';\r\nimport ItemComboBox, { ComboBoxItemType } from '../../../atoms/ComboBox/ItemComboBox';\r\nimport { useMemo } from 'react';\r\nimport { TableBaseStyle } from './RawWaveformComparisonConanSettingStyle';\r\n\r\ntype DeviceMeasConanItemProps = {\r\n selectList: DeviceSelectItem[];\r\n plcNo: number;\r\n setNo: number;\r\n kind: number;\r\n plcSetFunc: (plc: number, set: number, kind: number) => void;\r\n};\r\n\r\n/**\r\n * コンボボックス情報取得(設定からの取得)\r\n * @param devsel 機器選択情報一式\r\n * @param plc PLC番号\r\n * @param no セット番号 Name No\r\n * @param kind 種類番号\r\n * @returns\r\n * @description PLC番号、セット番号、種類番号からコンボボックスの情報を取得します。\r\n * PLC番号、セット番号、種類番号が決まっている状態から適切なコンボボックスを選択します。\r\n */\r\nconst getComboInfoFromSetting = (\r\n devsel: DeviceSelectItem[],\r\n plc: number,\r\n no: number,\r\n kind: number\r\n): [number, number, MeasureSelectItem[], number, ItemSelectItem[]] => {\r\n return getDevMeasItmIdxCore(\r\n devsel,\r\n plc,\r\n no,\r\n kind,\r\n (ms: MeasureSelectItem, idx: number): [boolean, number, ItemSelectItem[]] => {\r\n const iidx = ms.ItemSelects.findIndex((is) => {\r\n return is.PLC_NO === plc && is.SET_NO === no && is.KIND === kind;\r\n });\r\n if (iidx !== -1) {\r\n return [true, iidx, ms.ItemSelects];\r\n } else {\r\n return [false, -1, []];\r\n }\r\n }\r\n );\r\n};\r\n\r\n/**\r\n * コンボボックス情報取得(機器切り替え時)\r\n * @param devsel コンボボックス情報取得\r\n * @param devIdx 機器インデックス\r\n * @returns\r\n * @description 機器情報を切り替えた際のデフォルトの選択肢を取得します。\r\n */\r\nconst getComboInfoOnDeviceChange = (\r\n devsel: DeviceSelectItem[],\r\n devIdx: number\r\n): [number, number, MeasureSelectItem[], number, ItemSelectItem[]] => {\r\n const targetDev = devsel.find((ds) => ds.DEV_INDEX === devIdx);\r\n if (targetDev) {\r\n return getDevMeasItmIdxCore(\r\n [targetDev],\r\n 0,\r\n 0,\r\n 0,\r\n (ms: MeasureSelectItem, idx: number): [boolean, number, ItemSelectItem[]] => {\r\n // 無条件で最初の計測を選択\r\n return [true, 0, ms.ItemSelects];\r\n }\r\n );\r\n }\r\n return [-1, 0, [], 0, []];\r\n};\r\n/**\r\n * コンボボックス情報取得(計測切り替え時)\r\n * @param device 対象機器\r\n * @param measIdx 計測インデックス\r\n * @returns\r\n * @description 計測を切り替えた際のデフォルトの選択肢を取得します。\r\n */\r\nconst getComboInfoOnMeasChange = (\r\n device: DeviceSelectItem,\r\n measIdx: number\r\n): [number, number, MeasureSelectItem[], number, ItemSelectItem[]] => {\r\n return getDevMeasItmIdxCore(\r\n [device],\r\n 0,\r\n 0,\r\n 0,\r\n (ms: MeasureSelectItem, idx: number): [boolean, number, ItemSelectItem[]] => {\r\n if (idx === measIdx) {\r\n // 指定の測定インデックスの先頭を選択\r\n return [true, 0, ms.ItemSelects];\r\n } else {\r\n return [false, -1, []];\r\n }\r\n }\r\n );\r\n};\r\n/**\r\n *\r\n * @param devsel 機器選択情報一式\r\n * @param plc PLC番号\r\n * @param no セット番号\r\n * @param kind 種類番号\r\n * @param func 項目選択処理\r\n * @returns [機器インデックス,計測インデックス,計測選択肢,項目インデックス,項目選択肢]\r\n */\r\nconst getDevMeasItmIdxCore = (\r\n devsel: DeviceSelectItem[],\r\n plc: number,\r\n no: number,\r\n kind: number,\r\n func: (ms: MeasureSelectItem, idx: number) => [boolean, number, ItemSelectItem[]])\r\n : [number, number, MeasureSelectItem[], number, ItemSelectItem[]] => {\r\n let mno = -1;\r\n let ino = -1;\r\n let mlist: MeasureSelectItem[] = [];\r\n let ilist: ItemSelectItem[] = [];\r\n const dno = devsel.findIndex((ds) => {\r\n const midx = ds.MeasureSelects.findIndex((ms, idx) => {\r\n let ires = false;\r\n [ires, ino, ilist] = func(ms, idx);\r\n return ires;\r\n });\r\n if (midx !== -1) {\r\n mno = midx;\r\n mlist = ds.MeasureSelects;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n });\r\n\r\n return [dno, mno, mlist, ino, ilist];\r\n};\r\n\r\nconst DeviceMeasConanItem: React.FC = (props: DeviceMeasConanItemProps) => {\r\n const tableStyle = TableBaseStyle();\r\n\r\n const [devIdx, setDevIdx] = useState(0);\r\n const [measCombos, setMeasCombos] = useState([]);\r\n const [measIdx, setMeasIdx] = useState(0);\r\n const [itemCombos, setItemCombos] = useState([]);\r\n const [itemIdx, setItemIdx] = useState(0);\r\n\r\n console.log(['-- DeviceMeasConanItem --', measCombos]);\r\n\r\n // 機器選択用の選択肢作成\r\n const devCombos = useMemo(() => {\r\n const selects = props.selectList.map((sel, idx) => {\r\n return { index: idx + 1, name: sel.DEV_NO };\r\n });\r\n selects.unshift({ index: 0, name: '---' });\r\n\r\n return selects;\r\n }, [props.selectList]);\r\n\r\n /**\r\n * データ更新読込\r\n */\r\n useEffect(() => {\r\n //console.debug([\"★★★\"])\r\n const [dno, mno, mlst, ino, ilst] = getComboInfoFromSetting(props.selectList, props.plcNo, props.setNo, props.kind);\r\n //console.debug([\"useEffect ★---dno, mno, mlst, ino, ilst:\", dno, mno, mlst, ino, ilst]);\r\n setDevIdx(dno + 1);\r\n const meas = mlst.map((m, idx) => {\r\n return { index: idx, name: m.MES_NAME };\r\n });\r\n setMeasCombos(meas);\r\n setMeasIdx(mno);\r\n const item = ilst.map((i, idx) => {\r\n return { index: idx, name: i.ITM_NAME };\r\n });\r\n setItemCombos(item);\r\n setItemIdx(ino);\r\n }, [props.plcNo, props.setNo, props.kind, props.selectList]);\r\n\r\n /**\r\n * データ変更時\r\n * @param idx \r\n * @returns \r\n */\r\n const deviceChange = (idx: number) => {\r\n if (idx > 0 && props.selectList.length > idx - 1) {\r\n const [dno1, mno1, mlist, ino1, ilist] = getComboInfoOnDeviceChange(\r\n props.selectList,\r\n props.selectList[idx - 1].DEV_INDEX\r\n );\r\n if (ilist.length > 0) {\r\n setDevIdx(idx);\r\n const meas = mlist.map((sm, sidx) => {\r\n return { index: sidx, name: sm.MES_NAME };\r\n });\r\n setMeasCombos(meas);\r\n setMeasIdx(mno1);\r\n const item = ilist.map((si, sidx2) => {\r\n return { index: sidx2, name: si.ITM_NAME };\r\n });\r\n setItemCombos(item);\r\n setItemIdx(ino1);\r\n\r\n props.plcSetFunc(ilist[0].PLC_NO, ilist[0].SET_NO, ilist[0].KIND);\r\n return;\r\n }\r\n }\r\n props.plcSetFunc(0, 0, 0);\r\n };\r\n const measureChange = (idx: number, plcidx: number) => {\r\n if (plcidx > 0 && props.selectList.length > plcidx - 1) {\r\n const ds = props.selectList[plcidx - 1];\r\n const [dno, mno, mlist, ino, ilist] = getComboInfoOnMeasChange(ds, idx);\r\n\r\n //console.debug(\"[measureChange] dno, mno, mlist, ino, ilist:\", dno, mno, mlist, ino, ilist)\r\n if (ilist.length > 0) {\r\n props.plcSetFunc(ilist[0].PLC_NO, ilist[0].SET_NO, ilist[0].KIND);\r\n //console.debug(\"[measureChange] ilist[0].PLC_NO, ilist[0].SET_NO, ilist[0].KIND:\", ilist[0].PLC_NO, ilist[0].SET_NO, ilist[0].KIND)\r\n return;\r\n }\r\n }\r\n props.plcSetFunc(0, 0, 0);\r\n };\r\n const itemChange = (idx: number, plcidx: number, measidx: number) => {\r\n if (plcidx > 0 && props.selectList.length > plcidx - 1) {\r\n const ds = props.selectList[plcidx - 1];\r\n const ms = ds.MeasureSelects[measidx];\r\n\r\n //setItemIdx(idx);\r\n props.plcSetFunc(ms.ItemSelects[idx].PLC_NO, ms.ItemSelects[idx].SET_NO, ms.ItemSelects[idx].KIND);\r\n return;\r\n }\r\n props.plcSetFunc(0, 0, 0);\r\n };\r\n\r\n return (\r\n \r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n deviceChange(parseInt(e.target.value));\r\n }\r\n }}\r\n />\r\n \r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n measureChange(parseInt(e.target.value), devIdx);\r\n }\r\n }}\r\n />\r\n \r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n itemChange(parseInt(e.target.value), devIdx, measIdx);\r\n }\r\n }}\r\n />\r\n \r\n \r\n );\r\n};\r\n\r\nexport default DeviceMeasConanItem;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { SettingsState } from '../../../organisms/SelectSettings';\r\nimport { Paper, Table, TableContainer, TableBody, TableRow, TableCell, TextField, TableHead } from '@material-ui/core';\r\nimport {\r\n GroupListType,\r\n SIGC_CMP_GROUP_SET,\r\n DeviceSelectItem,\r\n GetRawWaveformsComparisonConanGroupList,\r\n PutRawWaveformsComparisonConanGroupList,\r\n} from '../../../../function/GroupDataModel';\r\nimport ItemComboBox, { ComboBoxItemType } from '../../../atoms/ComboBox/ItemComboBox';\r\nimport DeviceMeasConanItem from './DeviceMeasConanItem';\r\nimport SaveCancel from './../SaveCancel';\r\nimport { useModal } from '../../../../function/useModal';\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../../atoms/Dialog/ConfirmDialog';\r\nimport MessageDialog, { MessageDialogResponse } from '../../../atoms/Dialog/MessageDialog';\r\nimport { useTranslation } from 'react-i18next';\r\nimport CreateGroupDialog, { CreateGroupDialogResponse } from './../CreateGroupDialog';\r\nimport { TableBaseStyle } from './RawWaveformComparisonConanSettingStyle';\r\n\r\ntype RawWaveformComparisonConanSettingProps = {\r\n editData: SettingsState;\r\n};\r\n\r\ntype SaveParameter = {\r\n list: SIGC_CMP_GROUP_SET[];\r\n};\r\n\r\nconst MaxGroup: number = 256;\r\n\r\nconst RawWaveformComparisonConanSetting: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const tableStyle = TableBaseStyle();\r\n const [groupNo, setGroupNo] = useState(0);\r\n const [editList, setEditList] = useState([]);\r\n const [groupName, setGroupName] = useState('');\r\n const [selectList, setSelectList] = useState([]);\r\n const [groupCombos, setGroupCombos] = useState();\r\n const [plcNo1, setPlcNo1] = useState(0);\r\n const [setNo1, setSetNo1] = useState(0);\r\n const [plcNo2, setPlcNo2] = useState(0);\r\n const [setNo2, setSetNo2] = useState(0);\r\n const [flgCfmDlg, actCfmDlg] = useModal();\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n const [flgCrtDlg, actCrtDlg] = useModal();\r\n\r\n const cfmdlg = flgCfmDlg ? (\r\n \r\n ) : null;\r\n const msgdlg = flgMsgDlg ? : null;\r\n const crtdlg = flgCrtDlg ? (\r\n ((gc) => gc.index)} maxGroup={MaxGroup} />\r\n ) : null;\r\n\r\n useEffect(() => {\r\n GetRawWaveformsComparisonConanGroupList().then((result: GroupListType) => {\r\n const groupList: SIGC_CMP_GROUP_SET[] = result.SIGC_CMP_GROUP_SETs.filter((ph) => ph.GROUP_NAME !== '');\r\n setEditList(groupList);\r\n\r\n console.debug(['v-----setSelectList----', result]);\r\n //生波形で必要ない項目は省く\r\n result.DeviceSelects.forEach((r) => (r.MeasureSelects = r.MeasureSelects.filter((rr) => rr.FFT_INVALID === 1)));\r\n\r\n setSelectList(result.DeviceSelects);\r\n console.debug(['setSelectList----', result]);\r\n\r\n if (groupList.length > 0) {\r\n const grp = groupList[0];\r\n setGroupNo(grp.GROUP_NO);\r\n setGroupName(grp.GROUP_NAME);\r\n\r\n setPlcNo1(grp.PLC_NO1);\r\n setSetNo1(grp.SET_NO1);\r\n setPlcNo2(grp.PLC_NO2);\r\n setSetNo2(grp.SET_NO2);\r\n }\r\n\r\n props.editData.SaveFunction = saveCurrentSetting;\r\n props.editData.IsUpdate = false;\r\n });\r\n }, [props.editData, props.editData.CancelCondition]);\r\n\r\n useEffect(() => {\r\n const groups = editList?.map((grp) => {\r\n return { index: grp.GROUP_NO, name: grp.GROUP_NO.toString() };\r\n });\r\n setGroupCombos(groups);\r\n\r\n if (!editList.find((el) => el.GROUP_NO == groupNo)) {\r\n if (editList.length > 0) {\r\n const grp = editList[0];\r\n setGroupNo(grp.GROUP_NO);\r\n }\r\n }\r\n }, [editList]);\r\n\r\n useEffect(() => {\r\n const grp = editList.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n setGroupName(grp.GROUP_NAME ?? '');\r\n\r\n if (selectList) {\r\n setPlcNo1(grp.PLC_NO1);\r\n setSetNo1(grp.SET_NO1);\r\n setPlcNo2(grp.PLC_NO2);\r\n setSetNo2(grp.SET_NO2);\r\n }\r\n }\r\n }, [groupNo]);\r\n\r\n const groupChange = (no: number) => {\r\n updateDispFlg();\r\n setGroupNo(no);\r\n };\r\n const updateDispFlg = () => {\r\n const grp = editList?.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n if (grp.GROUP_NAME === '' && grp.PLC_NO1 === 0 && grp.PLC_NO2 === 0) {\r\n grp.DSP_FLG = 0;\r\n } else {\r\n grp.DSP_FLG = 1;\r\n }\r\n }\r\n };\r\n const groupNameChange = (name: string) => {\r\n const grp = editList?.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n setGroupName(name);\r\n grp.GROUP_NAME = name;\r\n\r\n props.editData.Target = { list: editList };\r\n props.editData.IsUpdate = true;\r\n }\r\n };\r\n const groupPlcSet1 = (plc: number, set: number, kind: number) => {\r\n const grp = editList?.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n grp.PLC_NO1 = plc;\r\n grp.SET_NO1 = set;\r\n\r\n props.editData.Target = { list: editList };\r\n props.editData.IsUpdate = true;\r\n\r\n updateDispFlg();\r\n setPlcNo1(plc);\r\n setSetNo1(set);\r\n }\r\n };\r\n const groupPlcSet2 = (plc: number, set: number, kind: number) => {\r\n const grp = editList?.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n grp.PLC_NO2 = plc;\r\n grp.SET_NO2 = set;\r\n\r\n props.editData.Target = { list: editList };\r\n props.editData.IsUpdate = true;\r\n\r\n updateDispFlg();\r\n setPlcNo2(plc);\r\n setSetNo2(set);\r\n }\r\n };\r\n const saveCurrentSetting = (param: object): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const sp = param as SaveParameter;\r\n if (sp && sp.list) {\r\n const errmsg = validateSetting(sp.list);\r\n if (errmsg === '') {\r\n PutRawWaveformsComparisonConanGroupList(sp.list)\r\n .then((count: number) => {\r\n console.log(count);\r\n\r\n resolve('done');\r\n })\r\n .catch((reasone) => reject(reasone));\r\n } else {\r\n setDlgmsg(errmsg);\r\n actMsgDlg.open().apply((_) => setDlgmsg(''));\r\n reject('not save');\r\n }\r\n } else {\r\n reject('data nothing');\r\n }\r\n });\r\n };\r\n const validateSetting = (groups: SIGC_CMP_GROUP_SET[]): string => {\r\n for (var idx = 0; idx < groups.length; idx++) {\r\n if (groups[idx].GROUP_NAME == '') {\r\n return t('RawWaveformsComparisonConanSetting.グループ名必須', 'グループ名は必須です');\r\n }\r\n }\r\n return '';\r\n };\r\n const deleteCurrentSetting = (param: object): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const sp = param as SaveParameter;\r\n if (sp && sp.list) {\r\n PutRawWaveformsComparisonConanGroupList(sp.list)\r\n .then((count: number) => {\r\n console.log(count);\r\n\r\n resolve('done');\r\n })\r\n .catch((reasone) => reject(reasone));\r\n } else {\r\n reject('data nothing');\r\n }\r\n });\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n {t('RawWaveformsComparisonConanSetting.グループNo', 'グループNo')}\r\n \r\n \r\n {\r\n if (typeof e.target.value === 'number') {\r\n groupChange(e.target.value);\r\n } else if (typeof e.target.value === 'string') {\r\n groupChange(parseInt(e.target.value));\r\n }\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n {t('RawWaveformsComparisonConanSetting.グループ名称', 'グループ名称')}\r\n \r\n \r\n {\r\n groupNameChange(e.target.value);\r\n }}\r\n />\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n {t('RawWaveformsComparisonConanSetting.機器番号', '機器番号')}\r\n \r\n \r\n {t('RawWaveformsComparisonConanSetting.計測種別', '計測種別')}\r\n \r\n \r\n {t('RawWaveformsComparisonConanSetting.項目', '項目')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {\r\n setDlgmsg(t('RawWaveformsComparisonConanSetting.保存しますか', '保存しますか?'));\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n saveCurrentSetting({ list: editList }).then((_) => {\r\n props.editData.IsUpdate = false;\r\n // props.editData.CloseSetting();\r\n });\r\n })\r\n .cancel(() => { });\r\n }}\r\n cancelAction={() => {\r\n if (props.editData.IsUpdate) {\r\n setDlgmsg(\r\n t(\r\n 'RawWaveformsComparisonConanSetting.保存していないデータを破棄します_nよろしいですか',\r\n '保存していないデータを破棄します。\\nよろしいですか?'\r\n )\r\n );\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n // props.editData.IsUpdate = false;\r\n props.editData.UpdateCancel();\r\n // props.editData.CloseSetting();\r\n })\r\n .cancel(() => { });\r\n } else {\r\n // props.editData.CloseSetting();\r\n }\r\n }}\r\n createAction={() => {\r\n actCrtDlg.open().apply((info) => {\r\n const grp = editList.find((ed) => ed.GROUP_NO == info.no);\r\n if (!grp) {\r\n const newGrp: SIGC_CMP_GROUP_SET = {\r\n GROUP_NO: info.no,\r\n GROUP_NAME: '',\r\n DSP_FLG: 0,\r\n PLC_NO1: 0,\r\n SET_NO1: 0,\r\n PLC_NO2: 0,\r\n SET_NO2: 0,\r\n Time_No1: '',\r\n Time_No2: '',\r\n };\r\n const newList = editList.concat(newGrp).sort((g1, g2) => g1.GROUP_NO - g2.GROUP_NO);\r\n setEditList(newList);\r\n }\r\n setGroupNo(info.no);\r\n });\r\n }}\r\n deleteAction={() => {\r\n setDlgmsg(t('RawWaveformsComparisonConanSetting.削除しますか', '削除しますか?'));\r\n actCfmDlg.open().apply((_) => {\r\n const grp = editList.find((ed) => ed.GROUP_NO == groupNo);\r\n if (grp) {\r\n grp.GROUP_NAME = '';\r\n deleteCurrentSetting({ list: editList }).then((_) => {\r\n props.editData.IsSaveClose = true;\r\n props.editData.IsUpdate = false;\r\n setEditList(editList.filter((ph) => ph.GROUP_NAME !== ''));\r\n });\r\n }\r\n });\r\n }}\r\n />\r\n {cfmdlg}\r\n {msgdlg}\r\n {crtdlg}\r\n
\r\n );\r\n};\r\n\r\nexport default RawWaveformComparisonConanSetting;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { SettingsState } from '../../organisms/SelectSettings';\r\nimport { Paper, Table, TableContainer, TableBody, TableRow, TableCell, TextField, TableHead } from '@material-ui/core';\r\nimport {\r\n GroupListType,\r\n FFT_CMP_GROUP_SET,\r\n DeviceSelectItem,\r\n GetFFTComparisonGroupList,\r\n PutFFTComparisonGroupList,\r\n} from '../../../function/GroupDataModel';\r\nimport ItemComboBox, { ComboBoxItemType } from '../../atoms/ComboBox/ItemComboBox';\r\nimport DeviceMeasItem from './DeviceMeasItem';\r\nimport SaveCancel from './SaveCancel';\r\nimport { useModal } from '../../../function/useModal';\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../atoms/Dialog/ConfirmDialog';\r\nimport MessageDialog, { MessageDialogResponse } from '../../atoms/Dialog/MessageDialog';\r\nimport { useTranslation } from 'react-i18next';\r\nimport CreateGroupDialog, { CreateGroupDialogResponse } from './CreateGroupDialog';\r\nimport { DefaultKindNo, GetVibrationSpecialStringByKindNo } from '../../../Constant';\r\n\r\ntype FFTComparisonSettingProps = {\r\n editData: SettingsState;\r\n};\r\n\r\ntype SaveParameter = {\r\n list: FFT_CMP_GROUP_SET[];\r\n};\r\n\r\nconst MaxGroup: number = 256;\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableStyle: {\r\n width: '400px',\r\n borderStyle: 'none',\r\n },\r\n rowStyle: {\r\n borderStyle: 'none',\r\n },\r\n cellStyle: {\r\n borderStyle: 'none',\r\n },\r\n cellName: {\r\n width: '140px',\r\n },\r\n cellData: {\r\n width: '220px',\r\n },\r\n selectNo: {\r\n width: '120px',\r\n },\r\n selectName: {\r\n width: '200px',\r\n },\r\n dropdownStyle: {\r\n maxHeight: 300,\r\n },\r\n gridStyle: {\r\n borderStyle: 'solid',\r\n maxWidth: '500px',\r\n },\r\n tableHeader: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n padding: '1px',\r\n minWidth: '80px',\r\n borderCollapse: `collapse`,\r\n },\r\n })\r\n);\r\n\r\nconst FFTComparisonSetting: React.FC = (props: FFTComparisonSettingProps) => {\r\n const { t, i18n } = useTranslation();\r\n const classes = useStyles();\r\n const [groupNo, setGroupNo] = useState(0);\r\n const [editList, setEditList] = useState([]);\r\n const [groupName, setGroupName] = useState('');\r\n const [selectList, setSelectList] = useState([]);\r\n const [groupCombos, setGroupCombos] = useState();\r\n const [plcNo1, setPlcNo1] = useState(0);\r\n const [setNo1, setSetNo1] = useState(0);\r\n const [kind1, setKind1] = useState(0);\r\n const [plcNo2, setPlcNo2] = useState(0);\r\n const [setNo2, setSetNo2] = useState(0);\r\n const [kind2, setKind2] = useState(0);\r\n const [plcNo3, setPlcNo3] = useState(0);\r\n const [setNo3, setSetNo3] = useState(0);\r\n const [kind3, setKind3] = useState(0);\r\n const [flgCfmDlg, actCfmDlg] = useModal();\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n const [flgCrtDlg, actCrtDlg] = useModal();\r\n\r\n const cfmdlg = flgCfmDlg ? (\r\n \r\n ) : null;\r\n const msgdlg = flgMsgDlg ? : null;\r\n const crtdlg = flgCrtDlg ? (\r\n ((gc) => gc.index)} maxGroup={MaxGroup} />\r\n ) : null;\r\n\r\n console.log('-- FFTComparisonSetting --');\r\n\r\n /**\r\n * 計測種別\r\n * 振動(速度)、振動(変位)のみ多言語切替\r\n */\r\n const changeLangMeasCombos = (items: DeviceSelectItem[]) => {\r\n let kindNo = -1;\r\n for (const [i, deviceSelectItem] of Object.entries(items)) {\r\n //console.debug(`この配列${i}は${deviceSelectItem.DEV_INDEX}-${deviceSelectItem.DEV_NO}です`);\r\n for (const [j, measureSelect] of Object.entries(deviceSelectItem.MeasureSelects)) {\r\n //console.debug(`この配列${j}は${measureSelect.MES_NAME}です`);\r\n for (const [k, itemSelect] of Object.entries(measureSelect.ItemSelects)) {\r\n //console.debug(`この配列${k}のKINDは${itemSelect.KIND}です`);\r\n if (itemSelect.KIND === DefaultKindNo.VIBRATION_SPD || itemSelect.KIND === DefaultKindNo.VIBRATION_DSP) {\r\n kindNo = itemSelect.KIND;\r\n break;\r\n }\r\n }\r\n if (kindNo === DefaultKindNo.VIBRATION_SPD || kindNo === DefaultKindNo.VIBRATION_DSP) {\r\n measureSelect.MES_NAME = GetVibrationSpecialStringByKindNo(kindNo, t);\r\n kindNo = -1;\r\n }\r\n }\r\n }\r\n\r\n //FFTで必要ない項目は省く\r\n items.forEach((r) => (r.MeasureSelects = r.MeasureSelects.filter((rr) => rr.FFT_INVALID === 0)));\r\n\r\n console.debug(['changeLangMeasCombos useEffect', items]);\r\n setSelectList([...items]);\r\n };\r\n\r\n // 言語切替\r\n useEffect(() => {\r\n console.debug(['FFTComparisonSetting useEffect i18n', i18n]);\r\n changeLangMeasCombos(selectList);\r\n }, [i18n.language]);\r\n\r\n useEffect(() => {\r\n //console.log('-- fetch FFTComparison settings --');\r\n GetFFTComparisonGroupList().then((result: GroupListType) => {\r\n console.debug(['FFTComparisonSetting useEffect result', result]);\r\n const groupList: FFT_CMP_GROUP_SET[] = result.FFT_CMP_GROUP_SETs.filter((fft) => fft.GROUP_NAME !== '');\r\n setEditList(groupList);\r\n //多言語設定\r\n changeLangMeasCombos(result.DeviceSelects);\r\n\r\n if (groupList.length > 0) {\r\n const grp = groupList[0];\r\n setGroupNo(grp.GROUP_NO);\r\n setGroupName(grp.GROUP_NAME);\r\n\r\n setPlcNo1(grp.PLC_NO1);\r\n setSetNo1(grp.SET_NO1);\r\n setKind1(grp.KIND1 ?? 0);\r\n setPlcNo2(grp.PLC_NO2);\r\n setSetNo2(grp.SET_NO2);\r\n setKind2(grp.KIND2 ?? 0);\r\n setPlcNo3(grp.PLC_NO3);\r\n setSetNo3(grp.SET_NO3);\r\n setKind3(grp.KIND3 ?? 0);\r\n }\r\n\r\n props.editData.SaveFunction = saveCurrentSetting;\r\n props.editData.IsUpdate = false;\r\n });\r\n }, [props.editData, props.editData.CancelCondition]);\r\n\r\n useEffect(() => {\r\n const groups = editList.map((grp) => {\r\n return { index: grp.GROUP_NO, name: grp.GROUP_NO.toString() };\r\n });\r\n setGroupCombos(groups);\r\n\r\n if (!editList.find((el) => el.GROUP_NO == groupNo)) {\r\n if (editList.length > 0) {\r\n const grp = editList[0];\r\n setGroupNo(grp.GROUP_NO);\r\n }\r\n }\r\n }, [editList]);\r\n\r\n useEffect(() => {\r\n const grp = editList?.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n setGroupName(grp.GROUP_NAME ?? '');\r\n\r\n if (selectList) {\r\n setPlcNo1(grp.PLC_NO1);\r\n setSetNo1(grp.SET_NO1);\r\n setKind1(grp.KIND1 ?? 0);\r\n setPlcNo2(grp.PLC_NO2);\r\n setSetNo2(grp.SET_NO2);\r\n setKind2(grp.KIND2 ?? 0);\r\n setPlcNo3(grp.PLC_NO3);\r\n setSetNo3(grp.SET_NO3);\r\n setKind3(grp.KIND3 ?? 0);\r\n }\r\n }\r\n }, [groupNo]);\r\n\r\n const groupChange = (no: number) => {\r\n updateDispFlg();\r\n setGroupNo(no);\r\n };\r\n const updateDispFlg = () => {\r\n const grp = editList?.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n if (grp.GROUP_NAME === '' && grp.PLC_NO1 === 0 && grp.PLC_NO2 === 0 && grp.PLC_NO3 === 0) {\r\n grp.DSP_FLG = 0;\r\n } else {\r\n grp.DSP_FLG = 1;\r\n }\r\n }\r\n console.debug(['updateDispFlg', grp]);\r\n };\r\n const groupNameChange = (name: string) => {\r\n const grp = editList?.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n setGroupName(name);\r\n grp.GROUP_NAME = name;\r\n\r\n props.editData.Target = { list: editList };\r\n props.editData.IsUpdate = true;\r\n }\r\n };\r\n const groupPlcSet1 = (plc: number, set: number, kind: number) => {\r\n const grp = editList?.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n grp.PLC_NO1 = plc;\r\n grp.SET_NO1 = set;\r\n grp.KIND1 = kind;\r\n\r\n props.editData.Target = { list: editList };\r\n props.editData.IsUpdate = true;\r\n\r\n updateDispFlg();\r\n setPlcNo1(plc);\r\n setSetNo1(set);\r\n setKind1(kind);\r\n }\r\n };\r\n const groupPlcSet2 = (plc: number, set: number, kind: number) => {\r\n const grp = editList?.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n grp.PLC_NO2 = plc;\r\n grp.SET_NO2 = set;\r\n grp.KIND2 = kind;\r\n\r\n props.editData.Target = { list: editList };\r\n props.editData.IsUpdate = true;\r\n\r\n updateDispFlg();\r\n setPlcNo2(plc);\r\n setSetNo2(set);\r\n setKind2(kind);\r\n }\r\n };\r\n const groupPlcSet3 = (plc: number, set: number, kind: number) => {\r\n const grp = editList?.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n grp.PLC_NO3 = plc;\r\n grp.SET_NO3 = set;\r\n grp.KIND3 = kind;\r\n\r\n props.editData.Target = { list: editList };\r\n props.editData.IsUpdate = true;\r\n\r\n updateDispFlg();\r\n setPlcNo3(plc);\r\n setSetNo3(set);\r\n setKind3(kind);\r\n }\r\n };\r\n const saveCurrentSetting = (param: object): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const sp = param as SaveParameter;\r\n if (sp && sp.list) {\r\n const errmsg = validateSetting(sp.list);\r\n if (errmsg === '') {\r\n PutFFTComparisonGroupList(sp.list)\r\n .then((count: number) => {\r\n console.log(count);\r\n\r\n resolve('done');\r\n })\r\n .catch((reasone) => reject(reasone));\r\n } else {\r\n setDlgmsg(errmsg);\r\n actMsgDlg.open().apply((_) => setDlgmsg(''));\r\n reject('not save');\r\n }\r\n } else {\r\n reject('data nothing');\r\n }\r\n });\r\n };\r\n const validateSetting = (groups: FFT_CMP_GROUP_SET[]): string => {\r\n for (var idx = 0; idx < groups.length; idx++) {\r\n if (groups[idx].GROUP_NAME == '') {\r\n return t('FFTComparisonSetting.グループ名必須', 'グループ名は必須です');\r\n }\r\n }\r\n return '';\r\n };\r\n const deleteCurrentSetting = (param: object): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const sp = param as SaveParameter;\r\n if (sp && sp.list) {\r\n PutFFTComparisonGroupList(sp.list)\r\n .then((count: number) => {\r\n console.log(count);\r\n\r\n resolve('done');\r\n })\r\n .catch((reasone) => reject(reasone));\r\n } else {\r\n reject('data nothing');\r\n }\r\n });\r\n };\r\n\r\n //console.debug(['- 画面描画開始 -', selectList]);\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {t('FFTComparisonSetting.グループNo', 'グループNo')}\r\n \r\n \r\n {\r\n if (typeof e.target.value === 'number') {\r\n groupChange(e.target.value);\r\n } else if (typeof e.target.value === 'string') {\r\n groupChange(parseInt(e.target.value));\r\n }\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n {t('FFTComparisonSetting.グループ名称', 'グループ名称')}\r\n \r\n \r\n {\r\n groupNameChange(e.target.value);\r\n }}\r\n />\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n {t('FFTComparisonSetting.機器番号', '機器番号')}\r\n \r\n \r\n {t('FFTComparisonSetting.計測種別', '計測種別')}\r\n \r\n \r\n {t('FFTComparisonSetting.項目', '項目')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {\r\n updateDispFlg();\r\n setDlgmsg(t('FFTComparisonSetting.保存しますか?', '保存しますか?'));\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n saveCurrentSetting({ list: editList }).then((_) => {\r\n props.editData.IsUpdate = false;\r\n // props.editData.CloseSetting();\r\n });\r\n })\r\n .cancel(() => {});\r\n }}\r\n cancelAction={() => {\r\n if (props.editData.IsUpdate) {\r\n setDlgmsg(\r\n t(\r\n 'FFTComparisonSetting.保存していないデータを破棄します。\\nよろしいですか?',\r\n '保存していないデータを破棄します。\\nよろしいですか?'\r\n )\r\n );\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n // props.editData.IsUpdate = false;\r\n props.editData.UpdateCancel();\r\n // props.editData.CloseSetting();\r\n })\r\n .cancel(() => {});\r\n } else {\r\n // props.editData.CloseSetting();\r\n }\r\n }}\r\n createAction={() => {\r\n actCrtDlg.open().apply((info) => {\r\n const grp = editList.find((ed) => ed.GROUP_NO == info.no);\r\n if (!grp) {\r\n const newGrp: FFT_CMP_GROUP_SET = {\r\n GROUP_NO: info.no,\r\n GROUP_NAME: '',\r\n DSP_FLG: 0,\r\n PLC_NO1: 0,\r\n SET_NO1: 0,\r\n PLC_NO2: 0,\r\n SET_NO2: 0,\r\n PLC_NO3: 0,\r\n SET_NO3: 0,\r\n KIND1: 0,\r\n KIND2: 0,\r\n KIND3: 0,\r\n Time_No1: '',\r\n Time_No2: '',\r\n Time_No3: '',\r\n };\r\n const newList = editList.concat(newGrp).sort((g1, g2) => g1.GROUP_NO - g2.GROUP_NO);\r\n setEditList(newList);\r\n }\r\n setGroupNo(info.no);\r\n });\r\n }}\r\n deleteAction={() => {\r\n setDlgmsg(t('FFTComparisonSetting.削除しますか?', '削除しますか?'));\r\n actCfmDlg.open().apply((_) => {\r\n const grp = editList.find((ed) => ed.GROUP_NO == groupNo);\r\n if (grp) {\r\n grp.GROUP_NAME = '';\r\n deleteCurrentSetting({ list: editList }).then((_) => {\r\n props.editData.IsSaveClose = true;\r\n props.editData.IsUpdate = false;\r\n setEditList(editList.filter((ph) => ph.GROUP_NAME !== ''));\r\n });\r\n }\r\n });\r\n }}\r\n />\r\n
\r\n {cfmdlg}\r\n {msgdlg}\r\n {crtdlg}\r\n
\r\n );\r\n};\r\n\r\nexport default FFTComparisonSetting;\r\n","import { createStyles, makeStyles, Theme, createTheme } from '@material-ui/core/styles';\r\n\r\nexport const TableBaseStyle = makeStyles(\r\n createStyles({\r\n tableStyle: {\r\n width: '400px',\r\n borderStyle: 'none',\r\n },\r\n rowStyle: {\r\n borderStyle: 'none',\r\n },\r\n cellStyle: {\r\n borderStyle: 'none',\r\n },\r\n cellName: {\r\n width: '140px',\r\n },\r\n cellData: {\r\n width: '220px',\r\n },\r\n selectNo: {\r\n width: '120px',\r\n },\r\n selectName: {\r\n width: '200px',\r\n },\r\n dropdownStyle: {\r\n maxHeight: 300,\r\n },\r\n gridStyle: {\r\n borderStyle: 'solid',\r\n maxWidth: '600px',\r\n },\r\n tableHeader: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n padding: '1px',\r\n minWidth: '80px',\r\n borderCollapse: `collapse`,\r\n },\r\n })\r\n);","import React, { useEffect, useState } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { SettingsState } from '../../../organisms/SelectSettings';\r\nimport { Paper, Table, TableContainer, TableBody, TableRow, TableCell, TextField, TableHead } from '@material-ui/core';\r\nimport {\r\n GroupListType,\r\n FFTC_CMP_GROUP_SET,\r\n DeviceSelectItem,\r\n GetFFTComparisonConanGroupList,\r\n PutFFTComparisonConanGroupList,\r\n} from '../../../../function/GroupDataModel';\r\nimport { TableBaseStyle } from './FFTComparisonConanSettingStyle';\r\nimport ItemComboBox, { ComboBoxItemType } from '../../../atoms/ComboBox/ItemComboBox';\r\nimport DeviceMeasConanItem from './../RawWaveformComparisonConanSetting/DeviceMeasConanItem';\r\nimport SaveCancel from './../SaveCancel';\r\nimport { useModal } from '../../../../function/useModal';\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../../atoms/Dialog/ConfirmDialog';\r\nimport MessageDialog, { MessageDialogResponse } from '../../../atoms/Dialog/MessageDialog';\r\nimport { useTranslation } from 'react-i18next';\r\nimport CreateGroupDialog, { CreateGroupDialogResponse } from './../CreateGroupDialog';\r\nimport { DefaultKindNo, GetVibrationSpecialStringByKindNo } from '../../../../Constant';\r\n\r\ntype FFTComparisonConanSettingProps = {\r\n editData: SettingsState;\r\n};\r\n\r\ntype SaveParameter = {\r\n list: FFTC_CMP_GROUP_SET[];\r\n};\r\n\r\nconst MaxGroup: number = 256;\r\n\r\nconst FFTComparisonConanSetting: React.FC = (props: FFTComparisonConanSettingProps) => {\r\n const { t, i18n } = useTranslation();\r\n const classes = TableBaseStyle();\r\n const [groupNo, setGroupNo] = useState(0);\r\n const [editList, setEditList] = useState([]);\r\n const [groupName, setGroupName] = useState('');\r\n const [selectList, setSelectList] = useState([]);\r\n const [groupCombos, setGroupCombos] = useState();\r\n const [plcNo1, setPlcNo1] = useState(0);\r\n const [setNo1, setSetNo1] = useState(0);\r\n const [kind1, setKind1] = useState(0);\r\n const [plcNo2, setPlcNo2] = useState(0);\r\n const [setNo2, setSetNo2] = useState(0);\r\n const [kind2, setKind2] = useState(0);\r\n const [plcNo3, setPlcNo3] = useState(0);\r\n const [setNo3, setSetNo3] = useState(0);\r\n const [kind3, setKind3] = useState(0);\r\n const [flgCfmDlg, actCfmDlg] = useModal();\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n const [flgCrtDlg, actCrtDlg] = useModal();\r\n\r\n const cfmdlg = flgCfmDlg ? (\r\n \r\n ) : null;\r\n const msgdlg = flgMsgDlg ? : null;\r\n const crtdlg = flgCrtDlg ? (\r\n ((gc) => gc.index)} maxGroup={MaxGroup} />\r\n ) : null;\r\n\r\n console.log('-- FFTComparisonConanSetting --');\r\n\r\n /**\r\n * 計測種別\r\n * 言語切替\r\n */\r\n const changeLangMeasCombos = (items: DeviceSelectItem[]) => {\r\n let kindNo = -1;\r\n //console.debug([\"★★test\", items]);\r\n for (const [i, deviceSelectItem] of Object.entries(items)) {\r\n //console.debug(`この配列${i}は${deviceSelectItem.DEV_INDEX}-${deviceSelectItem.DEV_NO}です`);\r\n for (const [j, measureSelect] of Object.entries(deviceSelectItem.MeasureSelects)) {\r\n //console.debug(`この配列${j}は${measureSelect.MES_NAME}です`);\r\n for (const [k, itemSelect] of Object.entries(measureSelect.ItemSelects)) {\r\n //console.debug(`この配列${k}のKINDは${itemSelect.KIND}です`);\r\n if (itemSelect.KIND === DefaultKindNo.VIBRATION_SPD || itemSelect.KIND === DefaultKindNo.VIBRATION_DSP) {\r\n kindNo = itemSelect.KIND;\r\n break;\r\n }\r\n }\r\n if (kindNo === DefaultKindNo.VIBRATION_SPD || kindNo === DefaultKindNo.VIBRATION_DSP) {\r\n measureSelect.MES_NAME = GetVibrationSpecialStringByKindNo(kindNo, t);\r\n kindNo = -1;\r\n }\r\n }\r\n }\r\n\r\n //FFTで必要ない項目は省く(FFT_INVALIDが0のものを残す)\r\n items.forEach((r) => (r.MeasureSelects = r.MeasureSelects.filter((rr) => rr.FFT_INVALID === 0)));\r\n\r\n console.debug(['changeLangMeasCombos useEffect', items]);\r\n setSelectList([...items]);\r\n };\r\n\r\n // 言語切替\r\n useEffect(() => {\r\n console.debug(['FFTComparisonConanSetting useEffect i18n', i18n]);\r\n changeLangMeasCombos(selectList);\r\n }, [i18n.language]);\r\n\r\n useEffect(() => {\r\n console.log('-- fetch FFTComparison settings --');\r\n GetFFTComparisonConanGroupList().then((result: GroupListType) => {\r\n console.debug(['FFTComparisonConanSetting useEffect result', result]);\r\n const groupList: FFTC_CMP_GROUP_SET[] = result.FFTC_CMP_GROUP_SETs.filter((fft) => fft.GROUP_NAME !== '');\r\n setEditList(groupList);\r\n //多言語設定\r\n changeLangMeasCombos(result.DeviceConanSelects);\r\n\r\n if (groupList.length > 0) {\r\n const grp = groupList[0];\r\n setGroupNo(grp.GROUP_NO);\r\n setGroupName(grp.GROUP_NAME);\r\n\r\n setPlcNo1(grp.PLC_NO1);\r\n setSetNo1(grp.SET_NO1);\r\n setKind1(grp.KIND1 ?? 0);\r\n setPlcNo2(grp.PLC_NO2);\r\n setSetNo2(grp.SET_NO2);\r\n setKind2(grp.KIND2 ?? 0);\r\n setPlcNo3(grp.PLC_NO3);\r\n setSetNo3(grp.SET_NO3);\r\n setKind3(grp.KIND3 ?? 0);\r\n }\r\n\r\n props.editData.SaveFunction = saveCurrentSetting;\r\n props.editData.IsUpdate = false;\r\n });\r\n }, [props.editData, props.editData.CancelCondition]);\r\n\r\n useEffect(() => {\r\n const groups = editList.map((grp) => {\r\n return { index: grp.GROUP_NO, name: grp.GROUP_NO.toString() };\r\n });\r\n setGroupCombos(groups);\r\n\r\n if (!editList.find((el) => el.GROUP_NO == groupNo)) {\r\n if (editList.length > 0) {\r\n const grp = editList[0];\r\n setGroupNo(grp.GROUP_NO);\r\n }\r\n }\r\n }, [editList]);\r\n\r\n useEffect(() => {\r\n const grp = editList?.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n setGroupName(grp.GROUP_NAME ?? '');\r\n\r\n if (selectList) {\r\n setPlcNo1(grp.PLC_NO1);\r\n setSetNo1(grp.SET_NO1);\r\n setKind1(grp.KIND1 ?? 0);\r\n setPlcNo2(grp.PLC_NO2);\r\n setSetNo2(grp.SET_NO2);\r\n setKind2(grp.KIND2 ?? 0);\r\n setPlcNo3(grp.PLC_NO3);\r\n setSetNo3(grp.SET_NO3);\r\n setKind3(grp.KIND3 ?? 0);\r\n }\r\n }\r\n }, [groupNo]);\r\n\r\n const groupChange = (no: number) => {\r\n updateDispFlg();\r\n setGroupNo(no);\r\n };\r\n const updateDispFlg = () => {\r\n const grp = editList?.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n if (grp.GROUP_NAME === '' && grp.PLC_NO1 === 0 && grp.PLC_NO2 === 0 && grp.PLC_NO3 === 0) {\r\n grp.DSP_FLG = 0;\r\n } else {\r\n grp.DSP_FLG = 1;\r\n }\r\n }\r\n console.debug(['updateDispFlg', grp]);\r\n };\r\n const groupNameChange = (name: string) => {\r\n const grp = editList?.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n setGroupName(name);\r\n grp.GROUP_NAME = name;\r\n\r\n props.editData.Target = { list: editList };\r\n props.editData.IsUpdate = true;\r\n }\r\n };\r\n const groupPlcSet1 = (plc: number, set: number, kind: number) => {\r\n const grp = editList?.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n grp.PLC_NO1 = plc;\r\n grp.SET_NO1 = set;\r\n grp.KIND1 = kind;\r\n\r\n props.editData.Target = { list: editList };\r\n props.editData.IsUpdate = true;\r\n\r\n updateDispFlg();\r\n setPlcNo1(plc);\r\n setSetNo1(set);\r\n setKind1(kind);\r\n console.debug([\"groupPlcSet1\", plc, set, kind]);\r\n }\r\n };\r\n const groupPlcSet2 = (plc: number, set: number, kind: number) => {\r\n const grp = editList?.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n grp.PLC_NO2 = plc;\r\n grp.SET_NO2 = set;\r\n grp.KIND2 = kind;\r\n\r\n props.editData.Target = { list: editList };\r\n props.editData.IsUpdate = true;\r\n\r\n updateDispFlg();\r\n setPlcNo2(plc);\r\n setSetNo2(set);\r\n setKind2(kind);\r\n }\r\n };\r\n const groupPlcSet3 = (plc: number, set: number, kind: number) => {\r\n const grp = editList?.find((ed) => ed.GROUP_NO === groupNo);\r\n if (grp) {\r\n grp.PLC_NO3 = plc;\r\n grp.SET_NO3 = set;\r\n grp.KIND3 = kind;\r\n\r\n props.editData.Target = { list: editList };\r\n props.editData.IsUpdate = true;\r\n\r\n updateDispFlg();\r\n setPlcNo3(plc);\r\n setSetNo3(set);\r\n setKind3(kind);\r\n }\r\n };\r\n\r\n /**\r\n * 保存\r\n * @param param \r\n * @returns \r\n */\r\n const saveCurrentSetting = (param: object): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const sp = param as SaveParameter;\r\n if (sp && sp.list) {\r\n const errmsg = validateSetting(sp.list);\r\n if (errmsg === '') {\r\n PutFFTComparisonConanGroupList(sp.list)\r\n .then((count: number) => {\r\n console.log(count);\r\n\r\n resolve('done');\r\n })\r\n .catch((reasone) => reject(reasone));\r\n } else {\r\n setDlgmsg(errmsg);\r\n actMsgDlg.open().apply((_) => setDlgmsg(''));\r\n reject('not save');\r\n }\r\n } else {\r\n reject('data nothing');\r\n }\r\n });\r\n };\r\n const validateSetting = (groups: FFTC_CMP_GROUP_SET[]): string => {\r\n for (var idx = 0; idx < groups.length; idx++) {\r\n if (groups[idx].GROUP_NAME == '') {\r\n return t('FFTComparisonConanSetting.グループ名必須', 'グループ名は必須です');\r\n }\r\n }\r\n return '';\r\n };\r\n /**\r\n * グループ削除\r\n * @param param \r\n * @returns \r\n */\r\n const deleteCurrentSetting = (param: object): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const sp = param as SaveParameter;\r\n if (sp && sp.list) {\r\n PutFFTComparisonConanGroupList(sp.list)\r\n .then((count: number) => {\r\n console.log(count);\r\n\r\n resolve('done');\r\n })\r\n .catch((reasone) => reject(reasone));\r\n } else {\r\n reject('data nothing');\r\n }\r\n });\r\n };\r\n\r\n //console.debug(['- 画面描画開始 -', selectList]);\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {t('FFTComparisonConanSetting.グループNo', 'グループNo')}\r\n \r\n \r\n {\r\n if (typeof e.target.value === 'number') {\r\n groupChange(e.target.value);\r\n } else if (typeof e.target.value === 'string') {\r\n groupChange(parseInt(e.target.value));\r\n }\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n {t('FFTComparisonConanSetting.グループ名称', 'グループ名称')}\r\n \r\n \r\n {\r\n groupNameChange(e.target.value);\r\n }}\r\n />\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n {t('FFTComparisonConanSetting.機器番号', '機器番号')}\r\n \r\n \r\n {t('FFTComparisonConanSetting.計測種別', '計測種別')}\r\n \r\n \r\n {t('FFTComparisonConanSetting.項目', '項目')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {\r\n updateDispFlg();\r\n setDlgmsg(t('FFTComparisonConanSetting.保存しますか?', '保存しますか?'));\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n saveCurrentSetting({ list: editList }).then((_) => {\r\n props.editData.IsUpdate = false;\r\n // props.editData.CloseSetting();\r\n });\r\n })\r\n .cancel(() => { });\r\n }}\r\n cancelAction={() => {\r\n if (props.editData.IsUpdate) {\r\n setDlgmsg(\r\n t(\r\n 'FFTComparisonConanSetting.保存していないデータを破棄します。\\nよろしいですか?',\r\n '保存していないデータを破棄します。\\nよろしいですか?'\r\n )\r\n );\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n // props.editData.IsUpdate = false;\r\n props.editData.UpdateCancel();\r\n // props.editData.CloseSetting();\r\n })\r\n .cancel(() => { });\r\n } else {\r\n // props.editData.CloseSetting();\r\n }\r\n }}\r\n createAction={() => {\r\n actCrtDlg.open().apply((info) => {\r\n const grp = editList.find((ed) => ed.GROUP_NO == info.no);\r\n if (!grp) {\r\n const newGrp: FFTC_CMP_GROUP_SET = {\r\n GROUP_NO: info.no,\r\n GROUP_NAME: '',\r\n DSP_FLG: 0,\r\n PLC_NO1: 0,\r\n SET_NO1: 0,\r\n PLC_NO2: 0,\r\n SET_NO2: 0,\r\n PLC_NO3: 0,\r\n SET_NO3: 0,\r\n KIND1: 0,\r\n KIND2: 0,\r\n KIND3: 0,\r\n Time_No1: '',\r\n Time_No2: '',\r\n Time_No3: '',\r\n };\r\n const newList = editList.concat(newGrp).sort((g1, g2) => g1.GROUP_NO - g2.GROUP_NO);\r\n setEditList(newList);\r\n }\r\n setGroupNo(info.no);\r\n });\r\n }}\r\n deleteAction={() => {\r\n setDlgmsg(t('FFTComparisonConanSetting.削除しますか?', '削除しますか?'));\r\n actCfmDlg.open().apply((_) => {\r\n const grp = editList.find((ed) => ed.GROUP_NO == groupNo);\r\n if (grp) {\r\n grp.GROUP_NAME = '';\r\n deleteCurrentSetting({ list: editList }).then((_) => {\r\n props.editData.IsSaveClose = true;\r\n props.editData.IsUpdate = false;\r\n setEditList(editList.filter((ph) => ph.GROUP_NAME !== ''));\r\n });\r\n }\r\n });\r\n }}\r\n />\r\n
\r\n {cfmdlg}\r\n {msgdlg}\r\n {crtdlg}\r\n
\r\n );\r\n};\r\n\r\nexport default FFTComparisonConanSetting;\r\n","import React, { Dispatch, SetStateAction, useEffect, useState, useContext } from 'react';\r\nimport SelectSettings, { MenuContents } from '../../organisms/SelectSettings';\r\nimport TrendSettingPage from './TrendSetting/TrendSettingPage';\r\nimport RealtimeSettingPage from './RealTimeSetting/RealtimeSettingPage';\r\nimport PhaseCurrentSetting from './PhaseCurrentSetting';\r\nimport RawWaveformsComparisonSetting from './RawWaveformsComparisonSetting';\r\nimport RawWaveformComparisonConanSetting from './RawWaveformComparisonConanSetting/RawWaveformComparisonConanSetting';\r\nimport FFTComparisonSetting from './FFTComparisonSetting';\r\nimport FFTComparisonConanSetting from './FFTComparisonConanSetting/FFTComparisonConanSetting';\r\nimport XYComparisonSetting from './XYCompansonSetting/XYComparisonSetting';\r\n\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { AppContext } from '../../../App';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 300px)',\r\n },\r\n paper: {\r\n background: '#FFFFEE',\r\n },\r\n })\r\n);\r\n\r\ntype GroupSettingsProps = {};\r\n\r\nconst GroupSettingsPage: React.FC = (props: GroupSettingsProps) => {\r\n const { login } = useContext(AppContext);\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n console.log('== GroupSettings ==');\r\n\r\n //コナンエア画面有効フラグ\r\n const conanairEnabled: boolean = login.GetSystemSettingModel.ConanairEnabled === 1 ? true : false;\r\n\r\n const menuList: MenuContents[] = [];\r\n\r\n menuList.push({ name: t('GroupSettingsPage.傾向管理', '傾向管理'), component: TrendSettingPage, tag: 'Trend' });\r\n\r\n if (!login.IsIoT) {\r\n menuList.push({\r\n name: t('GroupSettingsPage.リアルタイムトレンド', 'リアルタイムトレンド'),\r\n component: RealtimeSettingPage,\r\n tag: 'Realtime',\r\n });\r\n }\r\n\r\n menuList.push({ name: t('GroupSettingsPage.電流診断', '電流診断'), component: PhaseCurrentSetting, tag: 'Current' });\r\n\r\n menuList.push({\r\n name: t('GroupSettingsPage.生波形比較', '生波形比較'),\r\n component: RawWaveformsComparisonSetting,\r\n tag: 'Raw',\r\n });\r\n\r\n if (conanairEnabled) {\r\n menuList.push({\r\n name: t('GroupSettingsPage.生波形比較_コナン', '生波形比較(コナン)'),\r\n component: RawWaveformComparisonConanSetting,\r\n tag: 'RawConan',\r\n });\r\n }\r\n\r\n menuList.push({ name: t('GroupSettingsPage.FFT比較', 'FFT比較'), component: FFTComparisonSetting, tag: 'FFT' });\r\n\r\n if (conanairEnabled) {\r\n menuList.push({\r\n name: t('GroupSettingsPage.FFT比較_コナン', 'FFT比較(コナン)'),\r\n component: FFTComparisonConanSetting,\r\n tag: 'FFTConan',\r\n });\r\n }\r\n\r\n menuList.push({ name: t('GroupSettingsPage.X-Y分布', 'X-Y分布'), component: XYComparisonSetting, tag: 'XY' });\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default GroupSettingsPage;\r\n","import dayjs from 'dayjs';\r\n\r\nexport type SelectDataType = {\r\n mesid: number;\r\n devIndex: number;\r\n year: number;\r\n month: number;\r\n}\r\n\r\nexport type FeatureParameterDayData = {\r\n Day: Date;\r\n Value: string;\r\n Judgement: number;\r\n}\r\n\r\nexport type FeatureParameterDatas = {\r\n FeatureParameterDatas: FeatureParameterDayData[];\r\n ItemName: string;\r\n ItemSpeed: number;\r\n}\r\n\r\nexport type FeatureParameterDataType = {\r\n DeviceInfo: MeasureInfoType;\r\n Datas: FeatureParameterDatas[];\r\n}\r\n\r\nexport type MeasureInfoType = {\r\n AiCard: number;\r\n AiCh: number;\r\n DevIndex: number;\r\n DevName: string;\r\n DevNo: string;\r\n EntryNo: number;\r\n ItemName: string;\r\n ItemNameNo: number;\r\n KindNo: number;\r\n LogStart: string;\r\n MesName: string;\r\n PlcNo : number;\r\n SetNo: number;\r\n Speed: number;\r\n\r\n selectDay: string;\r\n selectTime: string;\r\n name: string;\r\n id: number;\r\n};\r\n\r\nexport const CreateDefalutMeasureInfoType = (): MeasureInfoType => {\r\n\r\n var dt: MeasureInfoType =\r\n {\r\n AiCard: 0,\r\n AiCh: 0,\r\n DevIndex: 0,\r\n DevName: \"\",\r\n DevNo: \"\",\r\n EntryNo: 0,\r\n ItemName: \"\",\r\n ItemNameNo: 0,\r\n KindNo: 0,\r\n LogStart: \"\",\r\n MesName:\"\",\r\n PlcNo : 0,\r\n SetNo: 0,\r\n Speed: 0,\r\n\r\n selectDay: \"\",\r\n selectTime: \"\",\r\n name: \"\",\r\n id: -1,\r\n };\r\n return dt;\r\n}\r\n\r\n\r\nexport const GetMeasureInfoType = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/MeasuleInfo\")\r\n .then((res) => res.json())\r\n .then((result: MeasureInfoType[]) => {\r\n if (MeasureInfoTypeListValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\nconst MeasureInfoTypeListValidate = (data: MeasureInfoType[]) => {\r\n if (data === undefined) return false;\r\n return true;\r\n };\r\n\r\nexport const GetFeatureParameterDataType = (deviceNo: number, from: Date): Promise => {\r\n const url = `api/FeatureParameter?`;\r\n var param = \"\";\r\n param += `deviceNo=${deviceNo}&&`;\r\n param += `from=${dayjs(from).format(\"YYYY-MM-DD HH:mm:ss\")}`;\r\n return new Promise((resolve, reject) => {\r\n fetch(`${ url }${ param }`)\r\n .then((res) => res.json())\r\n .then((result: FeatureParameterDataType[]) => {\r\n console.debug(`${ url }${ param }`);\r\n console.debug(result);\r\n if (FeatureParameterDataTypeValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\nconst FeatureParameterDataTypeValidate = (data: FeatureParameterDataType[]) => {\r\n if (data === undefined) return false;\r\n return true;\r\n };\r\n","import React, { useEffect, useState } from 'react';\r\nimport dayjs from 'dayjs';\r\n\r\nimport LoadingButton from '@mui/lab/LoadingButton';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport Box from '@material-ui/core/Box';\r\n\r\nimport { MeasureInfoType, SelectDataType } from './FeatureParameter';\r\nimport { ItemComboBox, ComboBoxItemType } from '../../atoms/ComboBox/ItemComboBox';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n buttonStyle: {\r\n width: '100px',\r\n },\r\n })\r\n);\r\n\r\n//計測種別リスト作成\r\nconst CreateMeasureList = (data: MeasureInfoType[]): ComboBoxItemType[] => {\r\n var ret: ComboBoxItemType[] = [];\r\n if (data != null) {\r\n // 重複を取り除く処理\r\n console.debug(data);\r\n\r\n var devNameList = data.filter(\r\n (el: MeasureInfoType, index, self) =>\r\n self.findIndex(\r\n (e: MeasureInfoType) => e.DevNo === el.DevNo && e.DevIndex === el.DevIndex && e.DevName === el.DevName\r\n ) === index\r\n );\r\n\r\n console.debug(devNameList);\r\n\r\n for (var i in devNameList) {\r\n ret.push({ index: devNameList[i].id, name: `${devNameList[i].DevNo} ${devNameList[i].DevName}` });\r\n }\r\n }\r\n return ret;\r\n};\r\n\r\n//年選択コンボボックス作成\r\nconst CreateYearList = (): ComboBoxItemType[] => {\r\n var ret: ComboBoxItemType[] = [];\r\n var n = new Date();\r\n var y = dayjs(n).format('YYYY');\r\n\r\n for (let i = 0; i < 100; i++) {\r\n y = dayjs(n).format('YYYY');\r\n ret.push({ index: Number(y), name: y });\r\n console.debug(y);\r\n if (y === '2019') {\r\n break;\r\n }\r\n n = dayjs(n).subtract(1, 'year').toDate();\r\n }\r\n\r\n console.debug(ret);\r\n return ret;\r\n};\r\n\r\n//月選択コンボボックス作成\r\nconst CreateMonthList = (): ComboBoxItemType[] => {\r\n var ret: ComboBoxItemType[] = [];\r\n for (let i = 0; i < 12; i++) {\r\n ret.push({ index: i + 1, name: `${i + 1}` });\r\n }\r\n console.debug(ret);\r\n return ret;\r\n};\r\n\r\ntype Props = {\r\n selectData: SelectDataType;\r\n mesInfoList: MeasureInfoType[];\r\n onChangeSelectDataEvent: (selectData: SelectDataType) => void;\r\n loading: boolean;\r\n};\r\n\r\nconst FeatureParameterSelectItem: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [mesList, setMesList] = React.useState([]);\r\n const [yearList, setYearList] = React.useState([]);\r\n const [monthList, setMonthList] = React.useState([]);\r\n const [selectData, setSelectData] = useState(props.selectData);\r\n\r\n //コンボボックスデータ作成\r\n useEffect(() => {\r\n if (props.mesInfoList.length !== 0) {\r\n var mesList: ComboBoxItemType[] = [];\r\n var yList: ComboBoxItemType[] = [];\r\n var mList: ComboBoxItemType[] = [];\r\n\r\n mesList = CreateMeasureList(props.mesInfoList);\r\n yList = CreateYearList();\r\n mList = CreateMonthList();\r\n\r\n setMesList(mesList);\r\n setYearList(yList);\r\n setMonthList(mList);\r\n }\r\n }, [props.mesInfoList]);\r\n\r\n const handleMesSelectChange = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n var mes = props.mesInfoList.find((item) => item.id === Number(event.target.value));\r\n if (mes !== undefined) {\r\n setSelectData({\r\n ...selectData,\r\n mesid: mes.id,\r\n });\r\n }\r\n };\r\n const handleYearSelectChange = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n setSelectData({ ...selectData, year: Number(event.target.value) });\r\n };\r\n\r\n const hadleMonthSelectChange = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n console.debug(event.target.value);\r\n setSelectData({ ...selectData, month: Number(event.target.value) });\r\n };\r\n\r\n const handleDispButtonClick = () => {\r\n props.onChangeSelectDataEvent(selectData);\r\n };\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n }\r\n onClick={handleDispButtonClick}\r\n >\r\n {t('FeatureParameterSelectItem.表示','表示')}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default FeatureParameterSelectItem;\r\n","import React, { useEffect } from 'react';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { GetFeatureParameterDataType, FeatureParameterDataType, SelectDataType } from './FeatureParameter';\r\nimport dayjs from 'dayjs';\r\n\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { SpeedKind } from '../../../Constant';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n //テーブル外枠\r\n tableStyle: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n },\r\n //テーブルヘッダセル\r\n tableHeaderCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n minWidth: '80px',\r\n padding: '1px',\r\n height: '50px',\r\n borderCollapse: 'collapse',\r\n },\r\n //テーブルボディーセル\r\n tableCell: {\r\n borderWidth: '1px',\r\n borderLeftStyle: 'solid',\r\n borderBottomStyle: 'inset',\r\n padding: '0px',\r\n minWidth: '80px',\r\n borderColor: '#dcdcdc',\r\n textAlign: 'right',\r\n },\r\n //テーブルボディー日付セル\r\n tableDateCell: {\r\n borderWidth: '1px',\r\n borderLeftStyle: 'solid',\r\n borderBottomStyle: 'inset',\r\n padding: '0px',\r\n paddingRight: '4px',\r\n minWidth: '80px',\r\n borderColor: '#dcdcdc',\r\n textAlign: 'right',\r\n },\r\n // tableHeader: {\r\n // borderWidth: '1px',\r\n // padding: '0px',\r\n // borderStyle: 'inset',\r\n // borderCollapse: 'collapse',\r\n // borderColor: '#dcdcdc',\r\n // },\r\n })\r\n);\r\n\r\nexport type RefreshGridDataType = {\r\n selectDataType: SelectDataType;\r\n};\r\n\r\ntype BodyDataProps = {\r\n fpData: FeatureParameterDataType;\r\n index: number;\r\n};\r\n\r\ntype Props = {\r\n tableContainerStyle: string;\r\n refreshGridData: RefreshGridDataType;\r\n updateLoadginState: (value: boolean) => void;\r\n};\r\n\r\ntype rowData = {\r\n day: string[];\r\n fData: FeatureParameterDataType[];\r\n};\r\n\r\nconst FeatureParameterGrid: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [featureParameter, setFeatureParameterList] = React.useState([]);\r\n const [selectData, setSelectData] = React.useState({\r\n mesid: 0,\r\n devIndex: 0,\r\n year: 2021,\r\n month: 1,\r\n });\r\n const [dayList, setDayList] = React.useState();\r\n\r\n // 四捨五入\r\n const roundDecimal = (value: string, n: number): string => {\r\n var num = Number(value);\r\n var ans = Math.round(num * Math.pow(10, n)) / Math.pow(10, n);\r\n\r\n return value === '' ? '' : String(ans);\r\n };\r\n\r\n const HeaderData: React.FC = (props) => {\r\n if (props.Datas.length === 1) {\r\n return (\r\n \r\n \r\n \r\n {props.DeviceInfo.MesName + ' ' + props.DeviceInfo.ItemName}\r\n \r\n \r\n \r\n {t('FeatureParameterGrid.瞬時値', '瞬時値')}\r\n \r\n
\r\n );\r\n } else if (props.Datas.length === 3) {\r\n if (props.Datas[0].ItemSpeed === SpeedKind.SPEED_CONAN) {\r\n return (\r\n \r\n \r\n \r\n {props.DeviceInfo.MesName + ' ' + props.DeviceInfo.ItemName}\r\n \r\n \r\n \r\n \r\n {t('FeatureParameterGrid.振動最大値', '最大値')}\r\n \r\n \r\n {t('FeatureParameterGrid.振動実行値', '実行値')}\r\n \r\n {t('FeatureParameterGrid.振動速度', '速度')}\r\n \r\n
\r\n );\r\n } else {\r\n return (\r\n \r\n \r\n \r\n {props.DeviceInfo.MesName + ' ' + props.DeviceInfo.ItemName}\r\n \r\n \r\n \r\n \r\n {t('FeatureParameterGrid.電流最大値', '最大値')}\r\n \r\n \r\n {t('FeatureParameterGrid.電流実行値', '実行値')}\r\n \r\n {t('FeatureParameterGrid.電流OA値', 'OA値')}\r\n \r\n
\r\n );\r\n }\r\n console.debug(['props.Datas', props.Datas]);\r\n } else if (props.Datas.length === 5) {\r\n return (\r\n \r\n \r\n \r\n {props.DeviceInfo.MesName + ' ' + props.DeviceInfo.ItemName}\r\n \r\n \r\n \r\n {t('FeatureParameterGrid.振動最大値', '最大値')}\r\n {t('FeatureParameterGrid.振動実行値', '実行値')}\r\n {t('FeatureParameterGrid.振動OA値', 'OA値')}\r\n {t('FeatureParameterGrid.振動速度', '速度')}\r\n {t('FeatureParameterGrid.振動変位', '変位')}\r\n \r\n
\r\n );\r\n } else {\r\n return
;\r\n }\r\n };\r\n\r\n const BodyData: React.FC = (props) => {\r\n //判定値\r\n const judgementValue = (n: number): string => {\r\n return n === 0 ? '[]' : `[${String(n)}]`;\r\n };\r\n /**\r\n * 判定スタイル\r\n * @returns\r\n */\r\n const judgementColorStyle = (sate: number): { color: string; background: string } => {\r\n if (sate == undefined) return { color: 'black', background: 'white' };\r\n\r\n /*\r\n 3:重故障\r\n 2:軽故障\r\n 1:復帰\r\n 0:正常 実際、正常は登録されないため、\r\n */\r\n\r\n switch (sate) {\r\n case 0: //正常\r\n return { color: 'black', background: 'white' };\r\n case 1: //復帰\r\n return { color: 'white', background: 'Green' };\r\n case 2: //軽故障\r\n return { color: 'black', background: 'yellow' };\r\n case 3: //重故障\r\n return { color: 'white', background: 'red' };\r\n default:\r\n //不明\r\n return { color: 'black', background: 'white' };\r\n }\r\n };\r\n\r\n /**\r\n * 値表示セル\r\n * @returns\r\n */\r\n const body_value_cell_disp = (p: BodyDataProps, dataIndex: number) => {\r\n return (\r\n \r\n \r\n {roundDecimal(p.fpData.Datas[dataIndex].FeatureParameterDatas[p.index].Value, 4)} \r\n
\r\n \r\n );\r\n };\r\n\r\n if (props.index > props.fpData.Datas[0].FeatureParameterDatas.length) {\r\n return
;\r\n }\r\n if (props.fpData.Datas.length === 1) {\r\n return (\r\n \r\n {body_value_cell_disp(props, 0)}\r\n
\r\n );\r\n } else if (props.fpData.Datas.length === 3) {\r\n return (\r\n \r\n \r\n {body_value_cell_disp(props, 0)}\r\n {body_value_cell_disp(props, 1)}\r\n {body_value_cell_disp(props, 2)}\r\n \r\n
\r\n );\r\n } else if (props.fpData.Datas.length === 5) {\r\n return (\r\n \r\n \r\n {body_value_cell_disp(props, 0)}\r\n {body_value_cell_disp(props, 1)}\r\n {body_value_cell_disp(props, 2)}\r\n {body_value_cell_disp(props, 3)}\r\n {body_value_cell_disp(props, 4)}\r\n \r\n
\r\n );\r\n } else {\r\n return
;\r\n }\r\n };\r\n\r\n //表示ボタン押下時\r\n useEffect(() => {\r\n props.updateLoadginState(true);\r\n var selectData = props.refreshGridData.selectDataType;\r\n // 月は 0 起点\r\n var time = dayjs(new Date(selectData.year, selectData.month - 1, 1, 0, 0, 0)).toDate();\r\n GetFeatureParameterDataType(selectData.devIndex, time).then((ret) => {\r\n var dList: string[] = [];\r\n if (ret.length !== 0) {\r\n for (var i in ret[0].Datas[0].FeatureParameterDatas) {\r\n dList.push(dayjs(ret[0].Datas[0].FeatureParameterDatas[i].Day).format('MM/DD'));\r\n }\r\n }\r\n\r\n console.debug(['表示ボタン押下', ret]);\r\n var rowDt: rowData = {\r\n day: dList,\r\n fData: ret,\r\n };\r\n setDayList(rowDt);\r\n setFeatureParameterList(ret);\r\n setSelectData({ ...selectData });\r\n props.updateLoadginState(false);\r\n });\r\n }, [props.refreshGridData]);\r\n\r\n //console.debug('画面描画開始 -- dayList:', dayList);\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {selectData?.year + t('FeatureParameterGrid.年', '年')}\r\n \r\n {featureParameter?.map((item, index) => (\r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n {dayList?.day?.map((item, index) => (\r\n \r\n {item}\r\n {dayList?.fData?.map((row2) => (\r\n \r\n \r\n \r\n ))}\r\n \r\n ))}\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default FeatureParameterGrid;\r\n","import React, { useState } from 'react';\r\nimport dayjs from 'dayjs';\r\n\r\nimport LoadingButton from '@mui/lab/LoadingButton';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\n\r\nimport { useTranslation, TFunction } from 'react-i18next';\r\nimport { RefreshGridDataType } from './FeatureParameterGrid';\r\nimport { GetFeatureParameterDataType, FeatureParameterDataType, SelectDataType } from './FeatureParameter';\r\nimport { DownloadFile } from '../../molecules/CSVExport/CSVDownload';\r\nimport { SpeedKind } from '../../../Constant';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n buttonStyle: {\r\n width: '100%',\r\n },\r\n })\r\n);\r\n\r\ntype Props = {\r\n refreshGridData: RefreshGridDataType;\r\n selectData: SelectDataType;\r\n targetName: string;\r\n};\r\n\r\ntype rowData = {\r\n day: string[];\r\n fData: FeatureParameterDataType[];\r\n};\r\n\r\nconst FeatureParameterCreateCSV = (\r\n refreshGridData: RefreshGridDataType,\r\n t: TFunction<'translation'>\r\n): Promise => {\r\n return new Promise((resolve, reject) => {\r\n // 四捨五入\r\n const roundDecimal = (value: string, n: number): string => {\r\n var num = Number(value);\r\n var ans = Math.round(num * Math.pow(10, n)) / Math.pow(10, n);\r\n\r\n return value === '' ? '' : String(ans);\r\n };\r\n\r\n const Header1Data = (data: FeatureParameterDataType): string => {\r\n if (data.Datas.length === 1) {\r\n return `${data.DeviceInfo.MesName} ${data.DeviceInfo.ItemName}`;\r\n } else if (data.Datas.length === 3) {\r\n let head = `${data.DeviceInfo.MesName} ${data.DeviceInfo.ItemName}`;\r\n return `${head},${head},${head}`;\r\n } else if (data.Datas.length === 5) {\r\n let head = `${data.DeviceInfo.MesName} ${data.DeviceInfo.ItemName}`;\r\n return `${head},${head},${head},${head},${head}`;\r\n } else {\r\n return '';\r\n }\r\n };\r\n\r\n const Header2Data = (data: FeatureParameterDataType): string => {\r\n if (data.Datas.length === 1) {\r\n return t('FeatureParameterGrid.瞬時値', '瞬時値');\r\n } else if (data.Datas.length === 3) {\r\n if (data.Datas[0].ItemSpeed === SpeedKind.SPEED_CONAN) {\r\n return `${t('FeatureParameterGrid.振動最大値', '最大値')},${t(\r\n 'FeatureParameterGrid.振動実行値',\r\n '実行値'\r\n )},${t('FeatureParameterGrid.振動速度', '速度')}`;\r\n } else {\r\n return `${t('FeatureParameterGrid.電流最大値', '最大値')},${t(\r\n 'FeatureParameterGrid.電流実行値',\r\n '実行値'\r\n )},${t('FeatureParameterGrid.電流OA値', 'OA値')}`;\r\n }\r\n } else if (data.Datas.length === 5) {\r\n return `${t('FeatureParameterGrid.振動最大値', '最大値')},${t('FeatureParameterGrid.振動実行値', '実行値')},${t(\r\n 'FeatureParameterGrid.振動OA値',\r\n 'OA値'\r\n )},${t('FeatureParameterGrid.振動速度', '速度')},${t('FeatureParameterGrid.振動変位', '変位')}`;\r\n } else {\r\n return '';\r\n }\r\n };\r\n\r\n const BodyData = (fpData: FeatureParameterDataType, index: number): string => {\r\n if (index > fpData.Datas[0].FeatureParameterDatas.length) {\r\n return '';\r\n }\r\n if (fpData.Datas.length === 1) {\r\n return roundDecimal(fpData.Datas[0].FeatureParameterDatas[index].Value, 4);\r\n } else if (fpData.Datas.length === 3) {\r\n return `${roundDecimal(fpData.Datas[0].FeatureParameterDatas[index].Value, 4)},${roundDecimal(\r\n fpData.Datas[1].FeatureParameterDatas[index].Value,\r\n 4\r\n )},${roundDecimal(fpData.Datas[2].FeatureParameterDatas[index].Value, 4)}`;\r\n } else if (fpData.Datas.length === 5) {\r\n return `${roundDecimal(fpData.Datas[0].FeatureParameterDatas[index].Value, 4)},${roundDecimal(\r\n fpData.Datas[1].FeatureParameterDatas[index].Value,\r\n 4\r\n )},${roundDecimal(fpData.Datas[2].FeatureParameterDatas[index].Value, 4)},${roundDecimal(\r\n fpData.Datas[3].FeatureParameterDatas[index].Value,\r\n 4\r\n )},${roundDecimal(fpData.Datas[4].FeatureParameterDatas[index].Value, 4)}`;\r\n } else {\r\n return '';\r\n }\r\n };\r\n\r\n var selectData = refreshGridData.selectDataType;\r\n var time = dayjs(new Date(selectData.year, selectData.month - 1, 1, 0, 0, 0)).toDate();\r\n GetFeatureParameterDataType(selectData.devIndex, time)\r\n .then((featureParameter) => {\r\n var dList: string[] = [];\r\n if (featureParameter.length !== 0) {\r\n for (var i in featureParameter[0].Datas[0].FeatureParameterDatas) {\r\n dList.push(dayjs(featureParameter[0].Datas[0].FeatureParameterDatas[i].Day).format('MM/DD'));\r\n }\r\n }\r\n\r\n var dayList: rowData = {\r\n day: dList,\r\n fData: featureParameter,\r\n };\r\n\r\n var header1s = `,${featureParameter?.map((item) => Header1Data(item)).join(',')}\\n`;\r\n header1s = header1s.replace(/\\r?\\n/g, '') + '\\n';\r\n var header2s = `${selectData.year + t('FeatureParameterExportCSV.年', '年')},${featureParameter\r\n ?.map((item) => Header2Data(item))\r\n .join(',')}`;\r\n header2s = header2s.replace(/\\n/g, '') + '\\n';\r\n var bodys = dayList?.day?.map((item, index) => {\r\n return `${item},${dayList?.fData\r\n ?.map((row2) => {\r\n return BodyData(row2, index);\r\n })\r\n .join(',')}\\n`;\r\n });\r\n\r\n resolve([header1s, header2s].concat(bodys));\r\n })\r\n .catch((reason) => reject(reason));\r\n });\r\n};\r\n\r\nconst FeatureParameterExportCSV: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [loading, setLoading] = useState(false);\r\n\r\n const handleCSVClick = () => {\r\n setLoading(true);\r\n FeatureParameterCreateCSV(props.refreshGridData, t).then((csvs: string[]) => {\r\n let bom = new Uint8Array([0xef, 0xbb, 0xbf]);\r\n let blob = new Blob([bom, ''].concat(csvs), { type: 'text/csv' });\r\n let filename = `${props.targetName}_${props.selectData.year}${('00' + props.selectData.month).slice(-2)}.csv`;\r\n DownloadFile(filename, blob);\r\n setLoading(false);\r\n });\r\n };\r\n\r\n return (\r\n \r\n {t('FeatureParameterExportCSV.CSV出力', 'CSV出力')}\r\n \r\n );\r\n};\r\n\r\nexport default FeatureParameterExportCSV;\r\n","import React, { useEffect, useState } from 'react';\r\nimport dayjs from 'dayjs';\r\n\r\nimport Grid from '@material-ui/core/Grid';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\n\r\nimport { GetMeasureInfoType, MeasureInfoType, SelectDataType } from './FeatureParameter';\r\nimport FeatureParameterSelectItem from './FeatureParameterSelectItem';\r\nimport FeatureParameterGrid, { RefreshGridDataType } from './FeatureParameterGrid';\r\nimport FeatureParameterExportCSV from './FeatureParameterExportCSV';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 258px)',\r\n },\r\n paper: {\r\n background: '#FFFFEE',\r\n },\r\n })\r\n);\r\n\r\nconst FeatureParameterPage: React.FC = () => {\r\n const classes = useStyles();\r\n const [loading, setLoading] = React.useState(false);\r\n const [measureInfo, setMeasereInfo] = useState([]);\r\n const [selectData, setSelectData] = useState({\r\n mesid: 1,\r\n devIndex: 1,\r\n year: Number(dayjs(new Date()).format('YYYY')),\r\n month: Number(dayjs(new Date()).format('MM')),\r\n });\r\n const [refreshGridData, setRefreshGridData] = useState({\r\n selectDataType: {\r\n mesid: 1,\r\n devIndex: 1,\r\n year: Number(dayjs(new Date()).format('YYYY')),\r\n month: Number(dayjs(new Date()).format('MM')),\r\n },\r\n });\r\n const [targetName, setTargetName] = useState('');\r\n\r\n useEffect(() => {\r\n GetMeasureInfoType().then((ret) => {\r\n for (var i in ret) {\r\n ret[i].id = Number(i + 1);\r\n }\r\n var target = ret.find((row) => row.id === 1);\r\n /* 画面表示時に先頭の機器名を読み込む */\r\n setTargetName(`${target?.DevNo} ${target?.DevName}`);\r\n setMeasereInfo(ret);\r\n });\r\n }, []);\r\n\r\n const handleSelectDataChange = (value: SelectDataType) => {\r\n var target = measureInfo.find((row) => row.id === value.mesid);\r\n console.debug(['handleSelectDataChange', target]);\r\n value.devIndex = target?.DevIndex ?? 0;\r\n setSelectData({ ...value });\r\n setRefreshGridData({ selectDataType: value });\r\n setTargetName(`${target?.DevNo} ${target?.DevName}`);\r\n };\r\n\r\n const handleLoadingStateChange = (value: boolean): void => setLoading(value);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default FeatureParameterPage;\r\n","import React, { useEffect, useState, useContext } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { useTranslation } from 'react-i18next';\r\nimport StackCell, { CellSizeContainer } from '../../../atoms/Cell/StackCell';\r\n\r\ntype CollectGridHeaderProps = {\r\n isDispPLC: boolean;\r\n};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableHeader: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n padding: '1px',\r\n minWidth: '120px',\r\n zIndex: 10,\r\n },\r\n fixHeader: {\r\n color: 'white',\r\n borderWidth: '0px',\r\n backgroundColor: 'gray',\r\n outlineWidth: '1px',\r\n outlineColor: '#dcdcdc',\r\n outlineStyle: 'solid',\r\n padding: 0,\r\n margin: 0,\r\n textAlign: 'center',\r\n position: 'sticky',\r\n zIndex: 20,\r\n minWidth: '80px',\r\n borderCollapse: `collapse`,\r\n },\r\n })\r\n);\r\n\r\nconst CollectGridHeader: React.FC = (props: CollectGridHeaderProps) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const cnt = new CellSizeContainer();\r\n\r\n const fixNo = (\r\n \r\n No\r\n \r\n );\r\n const fix0 = (\r\n \r\n {t('CollectGridHeader.実行', '実行')}\r\n \r\n );\r\n const fix1 = props.isDispPLC ? (\r\n \r\n {t('CollectGridHeader.PLC', 'PLC')}\r\n \r\n ) : null;\r\n const fix2 = props.isDispPLC ? (\r\n \r\n {t('CollectGridHeader.ユニット', 'ユニット')}\r\n
\r\n {t('CollectGridHeader.形式', '形式')}\r\n
\r\n ) : null;\r\n const fix3 = props.isDispPLC ? (\r\n \r\n {t('CollectGridHeader.AIカード', 'AIカード')}\r\n \r\n ) : null;\r\n const fix4 = props.isDispPLC ? (\r\n \r\n {t('CollectGridHeader.CH', 'CH')}\r\n \r\n ) : null;\r\n const fix5 = (\r\n \r\n {t('CollectGridHeader.計測種別', '計測種別')}\r\n \r\n );\r\n const fix6 = (\r\n \r\n {t('CollectGridHeader.機器番号', '機器番号')}\r\n \r\n );\r\n const fix7 = (\r\n \r\n {t('CollectGridHeader.機器名称', '機器名称')}\r\n \r\n );\r\n\r\n const colDig = (\r\n \r\n \r\n \r\n \r\n {t('CollectGridHeader.デジタル値', 'デジタル値')}\r\n \r\n \r\n \r\n {t('CollectGridHeader.上限値', '上限値')}\r\n {t('CollectGridHeader.下限値', '下限値')}\r\n \r\n
\r\n
\r\n );\r\n const colEng = (\r\n \r\n \r\n \r\n \r\n {t('CollectGridHeader.工学値', '工学値')}\r\n \r\n \r\n \r\n {t('CollectGridHeader.上限値', '上限値')}\r\n {t('CollectGridHeader.下限値', '下限値')}\r\n \r\n
\r\n
\r\n );\r\n const colMul = {t('CollectGridHeader.乗率', '乗率')};\r\n\r\n return (\r\n \r\n {fixNo}\r\n {fix0}\r\n {fix1}\r\n {fix2}\r\n {fix3}\r\n {fix4}\r\n {fix5}\r\n {fix6}\r\n {fix7}\r\n {t('CollectGridHeader.項目名称', '項目名称')}\r\n {t('CollectGridHeader.ロギング周期', 'ロギング周期')}\r\n \r\n {t('CollectGridHeader.ロギング開始時刻', 'ロギング開始時刻')}\r\n \r\n \r\n {t('CollectGridHeader.単位', '単位')}\r\n \r\n {/* {t('CollectGridHeader.判定値設定','判定値設定')} */}\r\n \r\n {t('CollectGridHeader.アベレージング処理', 'アベレージング処理')}\r\n \r\n {/* \r\n {t('CollectGridHeader.エンベロープ処理', 'エンベロープ処理')}\r\n */}\r\n \r\n {t('CollectGridHeader.モータ起動状態', 'モータ起動状態')}\r\n
\r\n {t('CollectGridHeader.検出センサ指定', '検出センサ指定')}\r\n
\r\n \r\n {t('CollectGridHeader.回転周波数', '回転周波数')}\r\n
\r\n {t('CollectGridHeader.算出センサ', '算出センサ')}\r\n
\r\n {props.isDispPLC ? colDig : null}\r\n {props.isDispPLC ? colEng : null}\r\n {props.isDispPLC ? colMul : null}\r\n MEMO\r\n
\r\n );\r\n};\r\n\r\nexport default CollectGridHeader;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Box from '@material-ui/core/Box';\r\nimport { debug, LogD } from '../../../function/LogLapper';\r\nimport dayjs from 'dayjs';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n container: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n },\r\n tableTd: {\r\n fontSize: '15px',\r\n },\r\n textField: {\r\n width: 200,\r\n },\r\n //style for font size\r\n resize: {\r\n fontSize: '15px',\r\n },\r\n })\r\n);\r\n\r\ntype Props = {\r\n labelCssString?: string;\r\n textCssString?: string;\r\n label: string;\r\n labelPosition?: number;\r\n defaultValue: string;\r\n onChange: (value: string) => void;\r\n marginString?: string;\r\n};\r\n\r\n/**\r\n * カレンダーに時刻を追加したコンポーネント\r\n * @param props\r\n * @returns\r\n */\r\nconst ItemCalenderTime: React.FC = (props) => {\r\n const { labelPosition = 1 } = props;\r\n const classes = useStyles();\r\n\r\n //console.debug(['- ItemCalenderTime props -', props]);\r\n\r\n /**\r\n * 時刻を yyyy-MM-ddThh:mm フォーマットで返す\r\n * @param value\r\n * @returns\r\n */\r\n const convertDatetimeLocalFormat = (value: string) => {\r\n const timeStr = dayjs(value).format('YYYY-MM-DDTHH:mm');\r\n //console.debug(['convertDatetimeLocalFormat', value, timeStr]);\r\n return timeStr;\r\n };\r\n\r\n const [editValue, setEditValue] = useState(props.defaultValue);\r\n useEffect(() => {\r\n setEditValue(props.defaultValue);\r\n }, [props.defaultValue]);\r\n\r\n return (\r\n \r\n {labelPosition === 1 &&
{props.label}
}\r\n
\r\n {\r\n console.debug(['-- onChange --', event.target.value]);\r\n if (event.target.value !== '') {\r\n setEditValue(dayjs(event.target.value).format('YYYY-MM-DD HH:mm'));\r\n // props.onChange(dayjs(event.target.value).format('YYYY-MM-DD HH:mm'));\r\n }\r\n }}\r\n className={classes.textField}\r\n onBlur={(e) => {\r\n console.log('datetime blur', editValue);\r\n props.onChange(dayjs(editValue).format('YYYY-MM-DD HH:mm'));\r\n }}\r\n />\r\n \r\n {labelPosition === 2 &&
{props.label}
}\r\n
\r\n );\r\n};\r\nexport default ItemCalenderTime;\r\n","\r\n\r\nimport { PLCcollectSettingType } from '../CollectSetting/CollectSettingDefine';\r\nimport { SpeedKind, MeasureHighKind, MeasureCalcKind } from \"../../../../Constant\";\r\nimport { JudgeSettingSelectType } from \"../../../../function/JudgeSettingSelectModel\";\r\nimport { IsConanAirPlc } from \"../../../../function/PlcNoModel\";\r\n\r\nexport type JudgeSettingItem = {\r\n /** PLC No */\r\n PLC_NO: number;\r\n /** AI Card */\r\n AI_CARD: number;\r\n /** AI Ch */\r\n AI_CH: number;\r\n /** 判定番号 */\r\n JDG_NO: number;\r\n /** 使用 */\r\n USE_ON: number;\r\n /** 診断タイプ */\r\n JDG_TYP: number;\r\n /** 周波数 */\r\n FREQ_C: number;\r\n /** 演算方法 */\r\n CLC_TYP: number;\r\n /** 演算種別ID */\r\n MCLC_TYP_ID: number;\r\n /** 閾値 軽故障 */\r\n WRN_LIM: number;\r\n /** 閾値 重故障 */\r\n ALM_LIM: number;\r\n /** 裕度 */\r\n BAND_VAL: number;\r\n /** 補正 */\r\n ADJ_ROT_ON: number;\r\n /** 異常種別 */\r\n ALM_TYP_NO: number;\r\n\r\n /** 高調波判定実行 */\r\n HRM_JDG_ON: number;\r\n /** EMC-B ワード位置 */\r\n EMC_W_POS: number;\r\n /** EMC-B DIビット位置 */\r\n EMC_B_POS: number;\r\n /** 0:有効,1:無効 有効時,判定値設定画面の全項目が変更可能。*/\r\n CHANGE_INVALID: number;\r\n /** 0: 無効, 1:有効*/\r\n F2_CANCEL: number;\r\n};\r\n\r\nexport type JudgeSettingSaveModel = {\r\n JudgeSettingItems: JudgeSettingItem[];\r\n /** 異常内容チェックフラグ false:チェックを実施,true:チェックを無視 */\r\n isAlmTypNoCheck: boolean;\r\n};\r\n\r\n\r\n\r\n/**\r\n * 演算種別マスタ\r\n */\r\nexport type MST_CLC_TYPE = {\r\n /**\r\n * 演算種別ID\r\n */\r\n MCLC_TYP_ID: number;\r\n /**\r\n * 演算名称\r\n */\r\n MCLC_TYP_NAME: string;\r\n /**\r\n * 表示順\r\n */\r\n SORT_NO: number;\r\n /**\r\n * ユニット識別\r\n */\r\n SPEED: number;\r\n}\r\n\r\nexport type JudgeAutoSettingItem = {\r\n KindNameNo: number;\r\n KindName: number;\r\n JogTypeNo: number;\r\n JogTypeName: number;\r\n ClcTypeNo: number;\r\n ClcTypeName: number;\r\n WrnLim: number;\r\n AlmLim: number;\r\n AlmKindTypeNo: number;\r\n AlmKindName: number;\r\n RatedSpeedUseFlg: number;\r\n RatedSpeed: number;\r\n};\r\n\r\n/** レスポンス情報 */\r\nexport type ResponceDataType = {\r\n ResponseCode: number;\r\n ErrorCode: number;\r\n ResponseMessage: string;\r\n ErrorMessage: string;\r\n};\r\n\r\n/** エラーレスポンス詳細 */\r\nexport type JudgeSettingErrorData = {\r\n Min: number;\r\n Max: number;\r\n ErrorItem: JudgeSettingItem;\r\n}\r\n\r\n/**\r\n * 判定値設定画面 APIレスポンス\r\n */\r\nexport type JudgeSettingItemModel = {\r\n UpdCnt: number;\r\n JdgSetItems: JudgeSettingItem[];\r\n ResponceData: ResponceDataType;\r\n JdgSetErrData: JudgeSettingErrorData;\r\n};\r\n\r\n/**\r\n * 判定値設定画面 選択肢\r\n */\r\nexport type JudgeSettingParameter = {\r\n /** 診断タイプ 選択肢 */\r\n JudgeTypes: ComboItem[];\r\n /** 演算方法 選択肢 */\r\n CLCTypes: ComboItem[];\r\n /** 異常種別 選択肢 */\r\n AlarmKinds: ComboItem[];\r\n /**演算方法種別 */\r\n MClcTypes: ComboItem[];\r\n};\r\nexport type ComboItem = {\r\n Key: number;\r\n Disp: string;\r\n Tag?: any; // 付加情報\r\n}\r\n\r\nexport const GetJudgeSettingItems = (plcNo: number, aiNo: number, chNo: number): Promise => {\r\n\r\n const url = `api/JudgeSetting/Items/${plcNo}/${aiNo}/${chNo}`;\r\n console.debug(url);\r\n return new Promise((resolve, reject) => {\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: JudgeSettingItem[]) => {\r\n if (JudgeSettingValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\nconst JudgeSettingValidate = (data: JudgeSettingItem[]) => {\r\n //LogD(`JudgeSetting ckeck ${data}`,true);\r\n if (data == undefined) return false;\r\n //LogD(\"JudgeSetting ckeck ok\",true);\r\n return true;\r\n};\r\n\r\nexport const GetJudgeAutoSettingItems = ()\r\n : Promise<{ JudgeAutoSettingList: JudgeAutoSettingItem[], ResponceDataModel: ResponceDataType }> => {\r\n const url = `api/JudgeSetting/AutoSetting/`;\r\n console.debug(url);\r\n return new Promise((resolve, reject) => {\r\n fetch(url)\r\n .then((res) => {\r\n if (!res.ok) {\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n reject(message);\r\n }\r\n else {\r\n return res.json();\r\n }\r\n })\r\n .then((result: { JudgeAutoSettingList: JudgeAutoSettingItem[], ResponceDataModel: ResponceDataType }) => {\r\n resolve(result);\r\n }).catch((error) => {\r\n console.error(error);\r\n reject(error);\r\n });\r\n });\r\n};\r\n\r\n\r\n/**\r\n * 設定保存\r\n*/\r\nexport const SetJudgeSettingItems = (items: JudgeSettingItem[]): Promise => {\r\n const param: JudgeSettingSaveModel = { JudgeSettingItems: items, isAlmTypNoCheck: false };\r\n console.debug(['SetJudgeSettingItems()', param]);\r\n\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/JudgeSetting/Items\", {\r\n method: 'put',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(param),\r\n })\r\n .then((res) => res.json())\r\n .then((result: JudgeSettingItemModel) => {\r\n //console.debug(['result', result]);\r\n if (SetJudgeSettingValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n })\r\n .catch(reason => reject(reason));\r\n });\r\n}\r\n\r\n\r\nconst SetJudgeSettingValidate = (data: JudgeSettingItemModel) => {\r\n if (data == undefined) return false;\r\n return true;\r\n};\r\n\r\nexport const GetJudgeSettingParameter = (): Promise => {\r\n\r\n const url = 'api/JudgeSetting/Parameter';\r\n console.debug(url);\r\n return new Promise((resolve, reject) => {\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: JudgeSettingParameter) => {\r\n resolve(result);\r\n })\r\n .catch(reason => reject(reason));\r\n });\r\n};\r\n\r\n\r\n/**\r\n * 軸受特徴周波数自動設定 一覧取得\r\n * @param plcNo\r\n * @param aiNo\r\n * @param chNo\r\n * @returns\r\n */\r\nexport const GethandleBearingFeaturesFreqItems = (plcNo: number, aiNo: number, chNo: number, itemNameNo: number): Promise => {\r\n const url = `api/JudgeSetting/bearingFeaturesFreqItems/${plcNo}/${aiNo}/${chNo}/${itemNameNo}`;\r\n return new Promise((resolve, reject) => {\r\n fetch(url)\r\n .then((res) => {\r\n if (!res.ok) {\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n reject(message);\r\n }\r\n else {\r\n return res.json();\r\n }\r\n })\r\n .then((result: JudgeSettingItemModel) => {\r\n if (GethandleBearingFeaturesFreqValidate(result)) {\r\n resolve(result);\r\n } else {\r\n reject('Invalidate response');\r\n }\r\n }).catch((error) => {\r\n console.error(error);\r\n reject(error);\r\n });\r\n })\r\n};\r\n\r\n/** 軸受特徴周波数自動設定 リスト件数確認 */\r\nconst GethandleBearingFeaturesFreqValidate = (data: JudgeSettingItemModel) => {\r\n if (data == undefined) return false;\r\n return true;\r\n};\r\n\r\n/**\r\n * 側帯波周波数自動設定 一覧取得\r\n * @param plcNo\r\n * @param aiNo\r\n * @param chNo\r\n * @returns\r\n */\r\nexport const GetSideBandFreqItems = (plcNo: number, aiNo: number, chNo: number): Promise => {\r\n\r\n const url = `api/JudgeSetting/sideBandFreqItems/${plcNo}/${aiNo}/${chNo}`;\r\n console.debug(url);\r\n return new Promise((resolve, reject) => {\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: JudgeSettingItemModel) => {\r\n if (SideBandFreqValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\n/** 側帯波周波数自動設定 リスト件数確認 */\r\nconst SideBandFreqValidate = (data: JudgeSettingItemModel) => {\r\n //console.debug(`JudgeSetting ckeck ${data}`);\r\n if (data == undefined) return false;\r\n //console.debug(\"JudgeSetting ckeck ok\");\r\n return true;\r\n};\r\n\r\n/**\r\n * 自動設定の値を設定\r\n * @param targetData\r\n * @param autoSettings\r\n * @param plcCol\r\n * @returns\r\n */\r\nexport const SetJusgeAutoSetting = (targetData: JudgeSettingItem, autoSettings: JudgeAutoSettingItem[], plcCol: PLCcollectSettingType)\r\n : { WRN_LIM: number | null, ALM_LIM: number | null } => {\r\n\r\n let ret: { WRN_LIM: number | null, ALM_LIM: number | null } = { WRN_LIM: null, ALM_LIM: null }\r\n\r\n console.debug([\"targetData,autoSettings,plcCol\", targetData, autoSettings, plcCol]);\r\n let f1 = autoSettings.filter((r) => String(r.KindNameNo) == plcCol.MeasureKindNo);\r\n let f2 = f1.filter((r) => r.JogTypeNo == targetData.JDG_TYP);\r\n let f3 = f2.filter((r) => r.ClcTypeNo == targetData.CLC_TYP);\r\n let f4 = f3.filter((r) => r.AlmKindTypeNo == targetData.MCLC_TYP_ID);\r\n console.debug([\"f1,f2,f3,f4\", f1, f2, f3, f4]);\r\n if (f4.length !== 0) {\r\n for (let i = 0; i < f4.length; i++) {\r\n const r = f4[i];\r\n if (r.RatedSpeedUseFlg) {\r\n if (r.RatedSpeed >= plcCol.RatedSpeed) {\r\n console.debug([\"r.RatedSpeed >= plcCol.RatedSpeed\", r.RatedSpeed, plcCol.RatedSpeed]);\r\n ret = { WRN_LIM: Number(r.WrnLim), ALM_LIM: Number(r.AlmLim) };\r\n break;\r\n }\r\n }\r\n else {\r\n ret = { WRN_LIM: Number(r.WrnLim), ALM_LIM: Number(r.AlmLim) };\r\n break;\r\n }\r\n }\r\n console.debug([\"autoValue - WRN_LIM , ALM_LIM\", ret]);\r\n }\r\n return ret;\r\n}\r\n\r\n\r\n/**\r\n * 軸受特徴周波数自動設定ボタン有効チェック\r\n */\r\nexport const IsBearingFeaturesFreqButton = (targetData: PLCcollectSettingType): boolean => {\r\n if (targetData.Speed == SpeedKind.SPEED_KIND_HIGHT && targetData.MeasureKindNo == MeasureHighKind.VIBRATION.toString()) {\r\n return true;\r\n }\r\n if (IsConanAirPlc(targetData.PLCNo)) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n *側帯波周波数自動設定ボタン有効チェック\r\n */\r\nexport const IsSideBandFreqItemButton = (targetData: PLCcollectSettingType): boolean => {\r\n if (targetData.Speed == SpeedKind.SPEED_KIND_HIGHT) {\r\n if (targetData.MeasureKindNo == MeasureHighKind.R_CURRENT.toString() ||\r\n targetData.MeasureKindNo == MeasureHighKind.S_CURRENT.toString() ||\r\n targetData.MeasureKindNo == MeasureHighKind.T_CURRENT.toString()) {\r\n return true;\r\n }\r\n }\r\n else if (targetData.Speed == SpeedKind.SPEED_KIND_HIGHT) {\r\n if (targetData.MeasureKindNo == MeasureCalcKind.ZERO_CURRENT.toString() ||\r\n targetData.MeasureKindNo == MeasureCalcKind.SEI_CURRENT.toString() ||\r\n targetData.MeasureKindNo == MeasureCalcKind.GYAKU_CURRENT.toString()) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * ColDataを元に自分のデータの判定設定で使用する選択項目の情報を返す。\r\n */\r\nexport const GetJudgeSelectItemInfo = (\r\n selectList: JudgeSettingSelectType[],\r\n colData: PLCcollectSettingType\r\n): JudgeSettingSelectType[] => {\r\n //KindNoNameSet のSpeedとNameNoが一致するデータ\r\n\r\n if (IsConanAirPlc(colData.PLCNo)) {\r\n return selectList.filter((r) => r.SPEED == colData.Speed);\r\n } else {\r\n return selectList.filter((r) => r.SPEED == colData.Speed && r.NAME_NO.toString() == colData.MeasureKindNo);\r\n }\r\n};\r\n","import { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\n\r\nexport const TableBaseStyle = makeStyles(\r\n createStyles({\r\n //テーブルヘッダセル\r\n headerCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n },\r\n bodyCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '4px',\r\n height: '25px',\r\n },\r\n bodyCellCenter: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n padding: '4px',\r\n height: '25px',\r\n },\r\n bodyCellRight: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'right',\r\n padding: '4px',\r\n height: '25px',\r\n },\r\n bodyCellLeft: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'left',\r\n padding: '4px',\r\n height: '25px',\r\n },\r\n bodyRow: {\r\n '&.Mui-selected, &.Mui-selected:hover': {\r\n //背景色\r\n backgroundColor: 'yellow',\r\n '& > .MuiTableCell-root': {\r\n //文字色\r\n color: 'brack',\r\n },\r\n },\r\n\r\n\r\n },\r\n //テキスト\r\n textField: {\r\n flexGrow: 1,\r\n height: '100%',\r\n width: '98%',\r\n borderBottom: '1px solid #000000',\r\n borderTop: 'none',\r\n borderLeft:'none',\r\n borderRight:'none',\r\n backgroundColor: 'transparent',\r\n textAlign: \"center\",\r\n },\r\n })\r\n);\r\n\r\nexport const JudgeSettingStyle = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 300px)',\r\n },\r\n paper: {\r\n background: '#FFFFEE',\r\n },\r\n buttonStyle: {\r\n maxWidth: '200px',\r\n maxHeight: '35px',\r\n minWidth: '200px',\r\n minHeight: '35px',\r\n },\r\n })\r\n);\r\n","import React, { useEffect, useState } from 'react';\r\nimport { Checkbox, Tab, Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { JudgeSettingItem, JudgeAutoSettingItem, SetJusgeAutoSetting } from './JudgeSetting';\r\nimport ItemComboBox, { ComboBoxItemType } from '../../../atoms/ComboBox/ItemComboBox';\r\nimport NumericEntry from '../../../atoms/Input/NumericEntry';\r\nimport { TableBaseStyle } from './JudgeSettingStyle';\r\nimport { PLCcollectSettingType } from '../CollectSetting/CollectSettingDefine';\r\nimport { JdgTypKind, AlmTypKind, MeasureClcType, CcTypKind, MOVING_AVERAGE_METHOD } from '../../../../Constant';\r\nimport NumericEntry_inputEx from './../../../atoms/Input/NumericEntry_inputEx';\r\nimport { MST_CLC_TYP } from '../../../../function/MstClcTypModels';\r\nimport { ALM_KIND_SET } from '../../../../function/AlmKindSetModel';\r\nimport { JudgeSettingSelectType } from '../../../../function/JudgeSettingSelectModel';\r\n\r\ntype CLC_TYP_SET = {\r\n TYP_NO: number;\r\n TYP_NAME: string;\r\n TYP_INVALID: number;\r\n};\r\ntype JudgeSettingItemRowProps = {\r\n judgeSettingItem: JudgeSettingItem;\r\n judgeAutoSettings: JudgeAutoSettingItem[];\r\n judgeItemSelectInfo: JudgeSettingSelectType[]; //各選択項目の情報\r\n plcCollectSetting: PLCcollectSettingType;\r\n onChangeData: (item: JudgeSettingItem) => void;\r\n mclcTypeCombos: ComboBoxItemType[];\r\n jdgCombos: ComboBoxItemType[];\r\n clcCombos: ComboBoxItemType[];\r\n almCombos: ComboBoxItemType[];\r\n};\r\n\r\nconst JudgeSettingItemRow: React.FC = (props: JudgeSettingItemRowProps) => {\r\n const tableBaseStyle = TableBaseStyle();\r\n const [judgeSet, setJudgeSet] = useState(props.judgeSettingItem);\r\n\r\n //console.debug(['★JudgeSettingItemRow - props, judgeSet', props, judgeSet]);\r\n\r\n /**\r\n * 演算種別アイテム取得\r\n * @returns\r\n */\r\n const mclcTypeFilterCombos = (): ComboBoxItemType[] => {\r\n console.debug(['演算種別アイテム取得', props.judgeItemSelectInfo, props.mclcTypeCombos]);\r\n if (judgeSet.CHANGE_INVALID === 1) {\r\n return props.mclcTypeCombos.filter((r) => {\r\n if (r.index === 0 || props.judgeItemSelectInfo.findIndex((rr) => judgeSet.MCLC_TYP_ID === r.index) !== -1) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n });\r\n } else {\r\n return props.mclcTypeCombos.filter((r) => {\r\n //移動平均法はコンボボックスに表示しない\r\n if (r.index !== MOVING_AVERAGE_METHOD) {\r\n if (r.index === 0 || props.judgeItemSelectInfo.findIndex((rr) => rr.MCLC_TYP_ID === r.index) !== -1) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * 診断タイプ選択アイテム取得\r\n * @returns\r\n */\r\n const jdgFilterCombos = (): ComboBoxItemType[] => {\r\n //console.debug(['選択候補リスト情報', props.judgeItemSelectInfo]);\r\n if (judgeSet.CHANGE_INVALID === 1) {\r\n return props.jdgCombos.filter((r) => {\r\n if (r.index === 0 || props.judgeItemSelectInfo.findIndex((rr) => judgeSet.JDG_TYP === r.index) !== -1) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n });\r\n } else {\r\n const jdgList = props.judgeItemSelectInfo.filter((r) => r.MCLC_TYP_ID === judgeSet.MCLC_TYP_ID);\r\n return props.jdgCombos.filter((r) => {\r\n if (r.index === 0 || jdgList.findIndex((rr) => rr.TYP_NO_JDG === r.index) !== -1) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * 演算方法選択アイテム取得\r\n * @returns\r\n */\r\n const clcFilterFCombos = (): ComboBoxItemType[] => {\r\n //console.debug(['演算方法リスト', props.clcCombos]);\r\n if (judgeSet.CHANGE_INVALID === 1) {\r\n return props.clcCombos;\r\n } else {\r\n let clcf = props.clcCombos.filter((r) => {\r\n let v = r.tag as CLC_TYP_SET;\r\n if (v) {\r\n if (v.TYP_INVALID === 0 || v.TYP_INVALID === null) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return true;\r\n }\r\n });\r\n //console.debug(['演算方法リスト2', props.clcCombos, clcf, judgeSet]);\r\n\r\n const clcList = props.judgeItemSelectInfo.filter(\r\n (r) => r.MCLC_TYP_ID === judgeSet.MCLC_TYP_ID && r.TYP_NO_JDG === judgeSet.JDG_TYP\r\n );\r\n //console.debug(['演算方法リスト3', props.clcCombos, clcList]);\r\n return clcf.filter((r) => {\r\n if (r.index === 0 || clcList.findIndex((rr) => rr.TYP_NO_CLC === r.index) !== -1) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * 異常種別選択アイテム取得\r\n * @returns\r\n */\r\n const almFilterCombos = (): ComboBoxItemType[] => {\r\n //console.debug(['異常種別選択アイテム1', props.almCombos]);\r\n return props.almCombos.filter((r) => {\r\n let alm = r.tag as ALM_KIND_SET;\r\n //console.debug(['異常種別選択アイテム3', alm]);\r\n if (r.index === 0 || alm.MCLC_TYP_ID === judgeSet.MCLC_TYP_ID) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n setJudgeSet({ ...props.judgeSettingItem });\r\n }, [props.judgeSettingItem]);\r\n\r\n /**\r\n * JudgeSetObjectを更新する汎用関数\r\n * @param key\r\n * @param value\r\n */\r\n const onChangeCell = (key: K, value: V) => {\r\n let tmp = { ...judgeSet, [key]: value };\r\n setJudgeSet(tmp);\r\n console.debug(['onChangeCell - old,new', judgeSet, tmp]);\r\n props.onChangeData(tmp);\r\n };\r\n /**\r\n * 値を変更すると、自動で、重故障軽故障の内容を変える\r\n * @param key\r\n * @param value\r\n */\r\n const onChangeCellAutoValue = (key: K, value: V) => {\r\n let tmp = { ...judgeSet, [key]: value };\r\n let autoValue = SetJusgeAutoSetting(tmp, props.judgeAutoSettings, props.plcCollectSetting);\r\n if (autoValue.ALM_LIM !== null && autoValue.WRN_LIM !== null) {\r\n tmp.ALM_LIM = autoValue.ALM_LIM;\r\n tmp.WRN_LIM = autoValue.WRN_LIM;\r\n }\r\n setJudgeSet(tmp);\r\n console.debug(['onChangeCell - old,new', judgeSet, tmp]);\r\n props.onChangeData(tmp);\r\n };\r\n\r\n /**\r\n * 周波数\r\n * @returns\r\n */\r\n const freq_c_disp = () => {\r\n if (judgeSet.MCLC_TYP_ID === 0) {\r\n return null;\r\n } else if (judgeSet.CHANGE_INVALID === 1) {\r\n return <>{judgeSet.FREQ_C.toFixed(4)};\r\n } else if (judgeSet.CHANGE_INVALID === 2) {\r\n //移動平均は周波数不使用\r\n return null;\r\n } else if (judgeSet.JDG_TYP !== JdgTypKind.RAW) {\r\n return (\r\n <>\r\n {\r\n onChangeCell('FREQ_C', val);\r\n }}\r\n >\r\n \r\n );\r\n } else {\r\n return null;\r\n }\r\n };\r\n\r\n /**\r\n * 裕度\r\n * @returns\r\n */\r\n const band_val_disp = () => {\r\n if (judgeSet.MCLC_TYP_ID === 0) {\r\n return null;\r\n } else if (judgeSet.JDG_TYP !== JdgTypKind.RAW && judgeSet.JDG_TYP !== JdgTypKind.KASHIKA) {\r\n if (judgeSet.CHANGE_INVALID === 2) {\r\n //移動平均は裕度不使用\r\n return null;\r\n }\r\n return (\r\n <>\r\n {\r\n onChangeCell('BAND_VAL', val);\r\n }}\r\n >\r\n \r\n );\r\n } else {\r\n return null;\r\n }\r\n };\r\n\r\n /**\r\n * 軽故障\r\n * @returns\r\n */\r\n const wrn_lim_disp = () => {\r\n if (judgeSet.MCLC_TYP_ID === 0) {\r\n return null;\r\n } else if (judgeSet.CHANGE_INVALID === 2) {\r\n //移動平均は変更不可\r\n return judgeSet.WRN_LIM.toFixed(4);\r\n } else {\r\n return (\r\n <>\r\n {\r\n onChangeCell('WRN_LIM', val);\r\n }}\r\n >\r\n \r\n );\r\n }\r\n };\r\n\r\n /**\r\n * 重故障\r\n * @returns\r\n */\r\n const alm_lim_disp = () => {\r\n if (judgeSet.MCLC_TYP_ID === 0) {\r\n return null;\r\n } else if (judgeSet.CHANGE_INVALID === 2) {\r\n //移動平均は変更不可\r\n return judgeSet.ALM_LIM.toFixed(4);\r\n } else {\r\n return (\r\n <>\r\n {\r\n onChangeCell('ALM_LIM', val);\r\n }}\r\n >\r\n \r\n );\r\n }\r\n };\r\n /**\r\n * 演算方法\r\n * @returns\r\n */\r\n const clc_typ_disp = () => {\r\n if (judgeSet.MCLC_TYP_ID === 0) {\r\n return null;\r\n } else if (judgeSet.CHANGE_INVALID === 1) {\r\n let clcList = clcFilterFCombos();\r\n let num = clcList.findIndex((r) => r.index == judgeSet.CLC_TYP);\r\n if (num === -1) {\r\n return null;\r\n } else {\r\n return <>{clcList[num].name};\r\n }\r\n } else if (judgeSet.CHANGE_INVALID === 2) {\r\n //移動平均は固定表示\r\n let clcList = clcFilterFCombos();\r\n let num = clcList.findIndex((r) => r.index == judgeSet.CLC_TYP);\r\n if (num === -1) {\r\n return null;\r\n } else {\r\n return <>{clcList[num].name};\r\n }\r\n } else {\r\n return (\r\n <>\r\n {\r\n if (typeof e.target.value === 'string') {\r\n const val = parseInt(e.target.value);\r\n onChangeClcType(val);\r\n }\r\n }}\r\n >\r\n \r\n );\r\n }\r\n };\r\n\r\n /**\r\n * 異常種別\r\n * @returns\r\n */\r\n const alm_typ_no_disp = () => {\r\n if (judgeSet.MCLC_TYP_ID === 0) {\r\n return null;\r\n } else {\r\n return (\r\n <>\r\n {\r\n if (typeof e.target.value === 'string') {\r\n const val = parseInt(e.target.value);\r\n onChangeCellAutoValue('ALM_TYP_NO', val);\r\n }\r\n }}\r\n >\r\n \r\n );\r\n }\r\n };\r\n\r\n /**\r\n * 診断タイプ\r\n * @returns \r\n */\r\n const jdg_type_disp = () => {\r\n if (judgeSet.CHANGE_INVALID === 2) {\r\n //移動平均を固定表示\r\n let clcList = jdgFilterCombos();\r\n let num = clcList.findIndex((r) => r.index == judgeSet.JDG_TYP);\r\n if (num === -1) {\r\n return null;\r\n } else {\r\n return <>{clcList[num].name};\r\n }\r\n }\r\n else {\r\n return (\r\n <>\r\n {\r\n if (typeof e.target.value === 'string') {\r\n const val = parseInt(e.target.value);\r\n onChangeJogType(val);\r\n }\r\n }}\r\n />\r\n \r\n );\r\n }\r\n };\r\n\r\n /**\r\n * 演算種別\r\n * @returns \r\n */\r\n const mclc_typ_id_disp = () => {\r\n if (judgeSet.CHANGE_INVALID === 2) {\r\n //移動平均方を固定表示\r\n let clcList = props.mclcTypeCombos;\r\n let num = clcList.findIndex((r) => r.index == judgeSet.MCLC_TYP_ID);\r\n if (num === -1) {\r\n return null;\r\n } else {\r\n return <>{clcList[num].name};\r\n }\r\n }\r\n else {\r\n return (\r\n <>\r\n {\r\n if (typeof e.target.value === 'string') {\r\n const val = parseInt(e.target.value);\r\n onChangemClcType(val);\r\n }\r\n }}\r\n />\r\n \r\n )\r\n }\r\n }\r\n\r\n /**\r\n * 演算種別変更event\r\n */\r\n const onChangemClcType = (value: number) => {\r\n if (judgeSet.MCLC_TYP_ID === value) {\r\n return;\r\n }\r\n judgeSet.MCLC_TYP_ID = value;\r\n\r\n if (judgeSet.MCLC_TYP_ID === 0) {\r\n //未設定\r\n judgeSet.JDG_TYP = 0;\r\n judgeSet.FREQ_C = 0;\r\n judgeSet.CLC_TYP = 0;\r\n judgeSet.BAND_VAL = 0;\r\n judgeSet.WRN_LIM = 0;\r\n judgeSet.ALM_LIM = 0;\r\n\r\n judgeSet.HRM_JDG_ON = 0;\r\n judgeSet.ADJ_ROT_ON = 0;\r\n judgeSet.EMC_W_POS = 0;\r\n judgeSet.EMC_B_POS = 0;\r\n judgeSet.ALM_TYP_NO = 0;\r\n judgeSet.CHANGE_INVALID = 0;\r\n judgeSet.F2_CANCEL = 0;\r\n } else {\r\n const judgest = props.judgeItemSelectInfo.filter((r) => r.MCLC_TYP_ID === judgeSet.MCLC_TYP_ID);\r\n if (judgest.length !== 0) {\r\n judgeSet.JDG_TYP = judgest[0].TYP_NO_JDG;\r\n } else {\r\n judgeSet.JDG_TYP = 0;\r\n }\r\n\r\n //コンボボックスデフォルト設定\r\n const clcList = props.judgeItemSelectInfo.filter(\r\n (r) => r.MCLC_TYP_ID === judgeSet.MCLC_TYP_ID && r.TYP_NO_JDG === judgeSet.JDG_TYP\r\n );\r\n if (clcList.length !== 0) {\r\n judgeSet.CLC_TYP = clcList[0].TYP_NO_CLC;\r\n } else {\r\n judgeSet.CLC_TYP = 0;\r\n }\r\n\r\n if (judgeSet.JDG_TYP === JdgTypKind.RAW) {\r\n //生波形\r\n judgeSet.FREQ_C = 0;\r\n judgeSet.BAND_VAL = 0;\r\n judgeSet.ADJ_ROT_ON = 0;\r\n } else if (judgeSet.JDG_TYP === JdgTypKind.KASHIKA) {\r\n //可視化処理2\r\n judgeSet.BAND_VAL = 0;\r\n judgeSet.ADJ_ROT_ON = 0;\r\n }\r\n }\r\n onChangeCellAutoValue('MCLC_TYP_ID', value);\r\n };\r\n /**\r\n * 診断タイプ変更event\r\n */\r\n const onChangeJogType = (value: number) => {\r\n if (judgeSet.JDG_TYP === value) {\r\n return;\r\n }\r\n judgeSet.JDG_TYP = value;\r\n\r\n if (judgeSet.JDG_TYP === 0) {\r\n //未設定\r\n judgeSet.FREQ_C = 0;\r\n judgeSet.CLC_TYP = 0;\r\n judgeSet.BAND_VAL = 0;\r\n judgeSet.WRN_LIM = 0;\r\n judgeSet.ALM_LIM = 0;\r\n\r\n judgeSet.HRM_JDG_ON = 0;\r\n judgeSet.ADJ_ROT_ON = 0;\r\n judgeSet.EMC_W_POS = 0;\r\n judgeSet.EMC_B_POS = 0;\r\n judgeSet.ALM_TYP_NO = 0;\r\n judgeSet.CHANGE_INVALID = 0;\r\n judgeSet.F2_CANCEL = 0;\r\n } else {\r\n //コンボボックスデフォルト設定\r\n const clcList = props.judgeItemSelectInfo.filter((r) => r.TYP_NO_JDG === judgeSet.JDG_TYP);\r\n if (clcList.length !== 0) {\r\n judgeSet.CLC_TYP = clcList[0].TYP_NO_CLC;\r\n } else {\r\n judgeSet.CLC_TYP = 0;\r\n }\r\n\r\n const almList = props.judgeItemSelectInfo.filter(\r\n (r) => r.TYP_NO_JDG === judgeSet.JDG_TYP && r.TYP_NO_CLC === judgeSet.CLC_TYP\r\n );\r\n if (almList.length !== 0) {\r\n judgeSet.ALM_TYP_NO = clcList[0].TYP_NO_ALM;\r\n } else {\r\n judgeSet.ALM_TYP_NO = 0;\r\n }\r\n\r\n if (judgeSet.JDG_TYP === JdgTypKind.RAW) {\r\n //生波形\r\n judgeSet.FREQ_C = 0;\r\n judgeSet.BAND_VAL = 0;\r\n judgeSet.ADJ_ROT_ON = 0;\r\n } else if (judgeSet.JDG_TYP === JdgTypKind.KASHIKA) {\r\n //可視化処理2\r\n judgeSet.BAND_VAL = 0;\r\n judgeSet.ADJ_ROT_ON = 0;\r\n }\r\n }\r\n onChangeCellAutoValue('JDG_TYP', value);\r\n };\r\n\r\n /**\r\n * 演算方法タイプ変更event\r\n * @param value\r\n * @returns\r\n */\r\n const onChangeClcType = (value: number) => {\r\n console.debug(['onChangeClcType judgeSet, clcValue', judgeSet, value]);\r\n if (judgeSet.JDG_TYP === JdgTypKind.RAW) {\r\n if (value === MeasureClcType.eSpd) {\r\n //「生波形」,「速度」を選択したとき,「生波形 速度」自動反映\r\n judgeSet.ALM_TYP_NO = AlmTypKind.eRawSpd;\r\n }\r\n }\r\n if (judgeSet.JDG_TYP === JdgTypKind.RAW) {\r\n if (value === MeasureClcType.eDsp) {\r\n //「生波形」,「変位」を選択したとき,「生波形 変位」自動反映\r\n judgeSet.ALM_TYP_NO = AlmTypKind.eRawDsp;\r\n }\r\n }\r\n onChangeCellAutoValue('CLC_TYP', value);\r\n };\r\n\r\n //console.debug(['- 画面描画開始 -', props.judgeSettingItem,]);\r\n return (\r\n \r\n {props.judgeSettingItem.JDG_NO}\r\n \r\n {\r\n let v = judgeSet.USE_ON === 1 ? 0 : 1;\r\n onChangeCell('USE_ON', v);\r\n }}\r\n />\r\n \r\n {/* 演算種別 */}\r\n {mclc_typ_id_disp()}\r\n {/* 診断タイプNo. */}\r\n {jdg_type_disp()}\r\n {/* 周波数 */}\r\n {freq_c_disp()}\r\n {/* 裕度 */}\r\n {band_val_disp()}\r\n {/* 演算方法 */}\r\n {clc_typ_disp()}\r\n {/* 軽故障 */}\r\n {wrn_lim_disp()}\r\n {/* 重故障 */}\r\n {alm_lim_disp()}\r\n\r\n {/* 高調波判定実行 */}\r\n \r\n {judgeSet.JDG_TYP > 0 ? (\r\n {\r\n let v = judgeSet.HRM_JDG_ON === 1 ? 0 : 1;\r\n onChangeCell('HRM_JDG_ON', v);\r\n }}\r\n />\r\n ) : null}\r\n \r\n {/**2fキャンセル */}\r\n \r\n {judgeSet.JDG_TYP > 0 ? (\r\n {\r\n let v = judgeSet.F2_CANCEL === 1 ? 0 : 1;\r\n onChangeCell('F2_CANCEL', v);\r\n }}\r\n />\r\n ) : null}\r\n \r\n {/**異常内容 */}\r\n {alm_typ_no_disp()}\r\n \r\n );\r\n};\r\n\r\nexport default JudgeSettingItemRow;\r\n","import React, { useEffect, useContext, useState, useRef } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { Button, Dialog, DialogTitle, DialogContent, DialogActions, Typography } from '@material-ui/core';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\n\r\nimport {\r\n GetJudgeSettingItems,\r\n SetJudgeSettingItems,\r\n JudgeSettingItem,\r\n GetJudgeSettingParameter,\r\n JudgeSettingParameter,\r\n GetSideBandFreqItems,\r\n GethandleBearingFeaturesFreqItems,\r\n JudgeSettingItemModel,\r\n JudgeSettingErrorData,\r\n GetJudgeAutoSettingItems,\r\n JudgeAutoSettingItem,\r\n SetJusgeAutoSetting,\r\n IsBearingFeaturesFreqButton,\r\n IsSideBandFreqItemButton,\r\n GetJudgeSelectItemInfo,\r\n} from './JudgeSetting';\r\nimport JudgeSettingItemRow from './JudgeSettingItemRowEx';\r\nimport { TableBaseStyle, JudgeSettingStyle } from './JudgeSettingStyle';\r\n\r\nimport { DialogAction, useModal } from '../../../../function/useModal';\r\nimport { PLCcollectSettingType } from '../CollectSetting/CollectSettingDefine';\r\nimport ItemComboBox, { ComboBoxItemType } from '../../../atoms/ComboBox/ItemComboBox';\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../../atoms/Dialog/ConfirmDialog';\r\nimport { ErrorCode } from '../../../../ErrorCode';\r\nimport SimpleDialog from '../../../atoms/Dialog/SimpleDialog';\r\nimport { AppContext } from '../../../../App';\r\nimport { MST_CLC_TYP, GetMstClcTyp } from '../../../../function/MstClcTypModels';\r\nimport {\r\n JudgeSettingSelectType,\r\n GetJudgeSettingSelectItems,\r\n GetJudgeSettingSelectConanItems,\r\n} from '../../../../function/JudgeSettingSelectModel';\r\nimport { IsConanAirPlc } from '../../../../function/PlcNoModel';\r\nimport { NameItemKind, AlmTypKind } from '../../../../Constant';\r\n\r\ntype JudgeSettingDialogProps = {\r\n dialog: DialogAction;\r\n plcCollectSetting: PLCcollectSettingType;\r\n plcNo: number;\r\n aiCard: number;\r\n aiCh: number;\r\n /**\r\n *速度・変位判定マスク変更通知\r\n */\r\n onChangeDspMskOn: (value: number) => void;\r\n};\r\n\r\nexport type JudgeSettingDialogResponse = {};\r\n\r\nconst JudgeSettingDialog: React.FC = (props: JudgeSettingDialogProps) => {\r\n const { login } = useContext(AppContext);\r\n\r\n const { t } = useTranslation();\r\n const tableBaseStyle = TableBaseStyle();\r\n const judgeSettingStyle = JudgeSettingStyle();\r\n\r\n const [isOpen, setIsOpen] = useState(true);\r\n const [mode, setMode] = useState(true);\r\n const [items, setItems] = useState([]);\r\n const [mclcTypeCombos, setMclcTypeCombos] = useState([]);\r\n const [jdgCombos, setJdgCombos] = useState([]);\r\n const [clcCombos, setClcCombos] = useState([]);\r\n const [almCombos, setAlmCombos] = useState([]);\r\n const [flgUpdate, setFlgUpdate] = useState(false);\r\n const [flgConfirm, confirmDlg] = useModal();\r\n const [msgConfirm, setMsgConfirm] = useState();\r\n\r\n // 指定した型の値で書き替えられる。nullは不可。\r\n const judgeAutoSettings = useRef(null!);\r\n //各コンボボックスの選択候補の絞り込み条件設定\r\n const judgeItemSelectInfo = useRef(null!);\r\n\r\n //APIレスポンスダイアログ\r\n const [messageDialogOpen, setMessageDialogOpen] = React.useState(false);\r\n const [showTitle, setShowTitle] = React.useState('');\r\n const [showMessage, setShowMessage] = React.useState('');\r\n\r\n const isBearingFeaturesFreqButton = IsBearingFeaturesFreqButton(props.plcCollectSetting);\r\n const isSideBandFreqItemButton = IsSideBandFreqItemButton(props.plcCollectSetting);\r\n const [dispMaskOn, setDispMaskOn] = React.useState(props.plcCollectSetting.DispMaskOn);\r\n\r\n useEffect(() => {\r\n var judgeItems: JudgeSettingItem[] = [];\r\n GetJudgeSettingItems(props.plcNo, props.aiCard, props.aiCh)\r\n .then((resp: JudgeSettingItem[]) => {\r\n judgeItems = resp;\r\n if (IsConanAirPlc(String(props.plcNo) ?? '0')) {\r\n return GetJudgeSettingSelectConanItems();\r\n } else {\r\n return GetJudgeSettingSelectItems();\r\n }\r\n })\r\n .then((r) => {\r\n if (r.ResponceDataModel.ErrorCode != ErrorCode.ERR_CODE_NONE) {\r\n setShowTitle(t('JudgeSettingDialog.判定値設定', '判定値設定'));\r\n setShowMessage(\r\n t('JudgeSettingDialog.判定値項目自動選択設定取得失敗', '判定値項目自動選択設定取得に失敗しました。')\r\n );\r\n setMessageDialogOpen(true);\r\n } else {\r\n judgeItemSelectInfo.current = r.JudgeSettingSelectItems;\r\n }\r\n console.debug(['GetJudgeSettingSelectItems', r]);\r\n return GetJudgeAutoSettingItems();\r\n })\r\n .then((r) => {\r\n if (r.ResponceDataModel.ErrorCode != ErrorCode.ERR_CODE_NONE) {\r\n setShowTitle(t('JudgeSettingDialog.判定値設定', '判定値設定'));\r\n setShowMessage(\r\n t(\r\n 'JudgeSettingDialog.判定値自動設定CSVファイル取得に失敗しました',\r\n '判定値自動設定CSVファイル取得に失敗しました。'\r\n )\r\n );\r\n setMessageDialogOpen(true);\r\n } else {\r\n judgeAutoSettings.current = r.JudgeAutoSettingList;\r\n }\r\n console.debug(['GetJudgeAutoSettingItems', r]);\r\n\r\n judgeItems.forEach((r) => {\r\n if (r.MCLC_TYP_ID === 0) {\r\n r.CHANGE_INVALID = 0;\r\n }\r\n //異常内容検討\r\n });\r\n setItems(judgeItems);\r\n })\r\n .catch((error) => {\r\n setShowTitle(t('JudgeSettingDialog.判定値設定', '判定値設定'));\r\n setShowMessage(\r\n t('JudgeSettingDialog.データ取得時にエラーが発生しました', 'データ取得時にエラーが発生しました')\r\n );\r\n console.error(error);\r\n })\r\n .finally(() => { });\r\n }, []);\r\n\r\n useEffect(() => {\r\n GetJudgeSettingParameter().then((prm: JudgeSettingParameter) => {\r\n console.debug(['--GetJudgeSettingParameter--', prm]);\r\n setJdgCombos(\r\n prm.JudgeTypes.map((ci) => {\r\n return { index: ci.Key, name: ci.Disp };\r\n })\r\n );\r\n setClcCombos(\r\n prm.CLCTypes.map((ci) => {\r\n return { index: ci.Key, name: ci.Disp, tag: ci.Tag };\r\n })\r\n );\r\n setAlmCombos(\r\n prm.AlarmKinds.map((ci) => {\r\n return { index: ci.Key, name: ci.Disp, tag: ci.Tag };\r\n })\r\n );\r\n setMclcTypeCombos(\r\n prm.MClcTypes.map((ci) => {\r\n return { index: ci.Key, name: ci.Disp, tag: ci.Tag };\r\n })\r\n );\r\n });\r\n }, []);\r\n\r\n /**\r\n * 値変更event\r\n * @param item\r\n */\r\n const updateItem = (item: JudgeSettingItem) => {\r\n const idx = items.findIndex((it) => it.JDG_NO == item.JDG_NO);\r\n if (idx >= 0) {\r\n items[idx] = item;\r\n console.debug(['updateItem - ', items[idx]]);\r\n if (flgUpdate === false) {\r\n setFlgUpdate(true);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * リストから軸受特徴周波数自動設定されている項目を探す\r\n * @returns\r\n */\r\n const getBearingFeaturesFreqData = (): JudgeSettingItem[] => {\r\n let ret: JudgeSettingItem[] = [];\r\n if (IsConanAirPlc(props.plcCollectSetting.PLCNo)) {\r\n if (props.plcCollectSetting.ItemNameNo === NameItemKind.LOADSIDE) {\r\n ret = items.filter(\r\n (row) =>\r\n row.JDG_TYP == 5 &&\r\n row.MCLC_TYP_ID >= AlmTypKind.eConanfft3dSpd1_loadside &&\r\n row.MCLC_TYP_ID <= AlmTypKind.eConanfft3dSpd4_loadside\r\n );\r\n } else if (props.plcCollectSetting.ItemNameNo === NameItemKind.ANTI_LOADSIDE) {\r\n ret = items.filter(\r\n (row) =>\r\n row.JDG_TYP == 5 &&\r\n row.MCLC_TYP_ID >= AlmTypKind.eConanfft3dSpd1_aloadside &&\r\n row.MCLC_TYP_ID <= AlmTypKind.eConanfft3dSpd4_aloadside\r\n );\r\n } else if (props.plcCollectSetting.ItemNameNo === NameItemKind.FLAME) {\r\n ret = items.filter(\r\n (row) =>\r\n row.JDG_TYP == 5 &&\r\n ((row.MCLC_TYP_ID >= AlmTypKind.eConanfft3dSpd1_loadside &&\r\n row.MCLC_TYP_ID <= AlmTypKind.eConanfft3dSpd4_loadside) ||\r\n (row.MCLC_TYP_ID >= AlmTypKind.eConanfft3dSpd1_aloadside &&\r\n row.MCLC_TYP_ID <= AlmTypKind.eConanfft3dSpd4_aloadside))\r\n );\r\n }\r\n } else {\r\n ret = items.filter(\r\n (row) =>\r\n row.CHANGE_INVALID === 1 &&\r\n row.JDG_TYP == 5 &&\r\n row.MCLC_TYP_ID >= AlmTypKind.eChr1 &&\r\n row.MCLC_TYP_ID <= AlmTypKind.eChr4\r\n );\r\n }\r\n\r\n return ret;\r\n };\r\n\r\n /**\r\n * 軸受特徴周波数自動設定\r\n */\r\n const BearingFeaturesFreqButtonAction = () => {\r\n //console.debug(['- flgUpdate -', flgUpdate]);\r\n\r\n if (getBearingFeaturesFreqData().length === 0) {\r\n if (IsConanAirPlc(props.plcCollectSetting.PLCNo)) {\r\n if (props.plcCollectSetting.ItemNameNo === NameItemKind.LOADSIDE) {\r\n handleBearingFeaturesFreq(NameItemKind.LOADSIDE);\r\n } else if (props.plcCollectSetting.ItemNameNo === NameItemKind.ANTI_LOADSIDE) {\r\n handleBearingFeaturesFreq(NameItemKind.ANTI_LOADSIDE);\r\n } else if (props.plcCollectSetting.ItemNameNo === NameItemKind.FLAME) {\r\n handleBearingFeaturesFreqByFrame();\r\n } else {\r\n handleBearingFeaturesFreq(NameItemKind.LOADSIDE);\r\n }\r\n } else {\r\n //初回追加の場合\r\n handleBearingFeaturesFreq(NameItemKind.LOADSIDE);\r\n }\r\n } else {\r\n if (flgUpdate) {\r\n setMsgConfirm(t('JudgeSettingDialog.設定を更新しますか?', '設定を更新しますか?'));\r\n confirmDlg\r\n .open()\r\n .apply((_) => {\r\n if (IsConanAirPlc(props.plcCollectSetting.PLCNo)) {\r\n if (props.plcCollectSetting.ItemNameNo === NameItemKind.LOADSIDE) {\r\n handleBearingFeaturesFreq(NameItemKind.LOADSIDE);\r\n } else if (props.plcCollectSetting.ItemNameNo === NameItemKind.ANTI_LOADSIDE) {\r\n handleBearingFeaturesFreq(NameItemKind.ANTI_LOADSIDE);\r\n } else if (props.plcCollectSetting.ItemNameNo === NameItemKind.FLAME) {\r\n handleBearingFeaturesFreqByFrame();\r\n } else {\r\n handleBearingFeaturesFreq(NameItemKind.LOADSIDE);\r\n }\r\n } else {\r\n handleBearingFeaturesFreq(NameItemKind.LOADSIDE);\r\n }\r\n })\r\n .cancel((_) => { });\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * 軸受特徴周波数自動設定\r\n * (内輪・外輪・転動体・保持器)を自動で追加\r\n * @param typeid_first 追加対象の演算種別ID 開始ID\r\n * @param typeid_end 追加対象の演算種別ID 終了ID\r\n */\r\n const handleBearingFeaturesFreq = (itemNameNo: number) => {\r\n GethandleBearingFeaturesFreqItems(props.plcNo, props.aiCard, props.aiCh, itemNameNo).then(\r\n (resp: JudgeSettingItemModel) => {\r\n setBearingFeaturesFreq(resp);\r\n }\r\n );\r\n };\r\n /**\r\n * 軸受特徴周波数自動設定(コナンエアフレーム対応)\r\n * 負荷側、反負荷側の順番で呼出\r\n * (内輪・外輪・転動体・保持器)を自動で追加\r\n * @param typeid_first 追加対象の演算種別ID 開始ID\r\n * @param typeid_end 追加対象の演算種別ID 終了ID\r\n */\r\n const handleBearingFeaturesFreqByFrame = () => {\r\n GethandleBearingFeaturesFreqItems(props.plcNo, props.aiCard, props.aiCh, NameItemKind.LOADSIDE)\r\n .then((resp: JudgeSettingItemModel) => {\r\n setBearingFeaturesFreq(resp);\r\n return GethandleBearingFeaturesFreqItems(props.plcNo, props.aiCard, props.aiCh, NameItemKind.ANTI_LOADSIDE);\r\n })\r\n .then((resp: JudgeSettingItemModel) => {\r\n setBearingFeaturesFreq(resp);\r\n });\r\n };\r\n\r\n /**\r\n *軸受特徴周波数自動設定データ画面セット\r\n * @param resp\r\n * @returns\r\n */\r\n const setBearingFeaturesFreq = (resp: JudgeSettingItemModel) => {\r\n if (resp.ResponceData.ErrorCode == ErrorCode.ERR_CODE_NONE) {\r\n addBearingFeaturesFreqItem(resp.JdgSetItems);\r\n return undefined;\r\n }\r\n //エラー\r\n setShowTitle(t('JudgeSettingDialog.軸受特徴周波数自動設定', '軸受特徴周波数自動設定'));\r\n if (resp.ResponceData.ErrorCode == ErrorCode.ERR_CODE_JSET_NO_BEARING_FILE) {\r\n setShowMessage(t('JudgeSettingDialog.CSVファイルを読み込めませんでした', 'CSVファイルを読み込めませんでした'));\r\n } else if (resp.ResponceData.ErrorCode == ErrorCode.ERR_CODE_JSET_NO_BEARING_INFO) {\r\n setShowMessage(t('JudgeSettingDialog.軸受情報が未登録です', '軸受情報が未登録です'));\r\n } else {\r\n setShowMessage(t('JudgeSettingDialog.システムエラーが発生しました', 'システムエラーが発生しました'));\r\n }\r\n setMessageDialogOpen(true);\r\n };\r\n\r\n // 側帯波周波数自動設定\r\n const handleSideBandFreq = () => {\r\n console.debug(['handleSideBandFreq()', props.plcNo, props.aiCard, props.aiCh]);\r\n GetSideBandFreqItems(props.plcNo, props.aiCard, props.aiCh).then((resp: JudgeSettingItemModel) => {\r\n if (resp.ResponceData.ErrorCode == ErrorCode.ERR_CODE_NONE) {\r\n addSideBandFreqItem(resp.JdgSetItems);\r\n return;\r\n } else {\r\n //エラー\r\n setShowTitle(t('JudgeSettingDialog.側帯波周波数自動設定', '側帯波周波数自動設定'));\r\n setShowMessage(t('JudgeSettingDialog.システムエラーが発生しました', 'システムエラーが発生しました'));\r\n setMessageDialogOpen(true);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * 軸受特徴周波数自動設定 リスト追加\r\n * @param bearingItems\r\n */\r\n const addBearingFeaturesFreqItem = (bearingItems: JudgeSettingItem[]) => {\r\n const regs: Array = [];\r\n bearingItems.forEach((bi) => {\r\n //console.debug(bi);\r\n //異常種別登録済みチェック FFT(ENV)(内輪損傷、外輪損傷、転動体損傷、保持器損傷)\r\n let regedIdx = items.findIndex(\r\n (row) => row.CHANGE_INVALID === bi.CHANGE_INVALID && row.JDG_TYP == 5 && row.MCLC_TYP_ID == bi.MCLC_TYP_ID\r\n );\r\n console.debug(`Registered idx:${regedIdx}, ${items[regedIdx]}`);\r\n if (regedIdx >= 0) {\r\n //上書き\r\n items[regedIdx] = { ...items[regedIdx], FREQ_C: bi.FREQ_C };\r\n let autoValue = SetJusgeAutoSetting(items[regedIdx], judgeAutoSettings.current, props.plcCollectSetting);\r\n if (autoValue.ALM_LIM !== null && autoValue.WRN_LIM !== null) {\r\n items[regedIdx].ALM_LIM = autoValue.ALM_LIM;\r\n items[regedIdx].WRN_LIM = autoValue.WRN_LIM;\r\n }\r\n setFlgUpdate(true);\r\n\r\n return;\r\n }\r\n\r\n //演算種別タイプが未使用(0)の行をアップデートする\r\n const idx = items.findIndex((it) => it.MCLC_TYP_ID == 0);\r\n console.debug(`find idx:${idx}`);\r\n if (idx >= 0) {\r\n bi.JDG_NO = items[idx].JDG_NO;\r\n items[idx] = bi;\r\n let autoValue = SetJusgeAutoSetting(items[idx], judgeAutoSettings.current, props.plcCollectSetting);\r\n if (autoValue.ALM_LIM !== null && autoValue.WRN_LIM !== null) {\r\n items[idx].ALM_LIM = autoValue.ALM_LIM;\r\n items[idx].WRN_LIM = autoValue.WRN_LIM;\r\n }\r\n setFlgUpdate(true);\r\n }\r\n });\r\n setItems([...items]);\r\n };\r\n\r\n /**\r\n * 側帯波周波数自動設定 リスト追加\r\n * @param freqItems\r\n */\r\n const addSideBandFreqItem = (freqItems: JudgeSettingItem[]) => {\r\n const regs: Array = [];\r\n\r\n freqItems.forEach((fi) => {\r\n //console.debug(fi);\r\n //異常種別登録済みチェック FFT(側帯波周波数(-側)、電流側帯波周波数(+側))\r\n let regedIdx = items.findIndex(\r\n (row) =>\r\n row.CHANGE_INVALID === 1 &&\r\n row.JDG_TYP == 4 &&\r\n (row.MCLC_TYP_ID == 9 || row.MCLC_TYP_ID == 10) &&\r\n row.MCLC_TYP_ID == fi.MCLC_TYP_ID\r\n );\r\n if (regedIdx >= 0) {\r\n //上書き\r\n items[regedIdx] = { ...items[regedIdx], FREQ_C: fi.FREQ_C };\r\n let autoValue = SetJusgeAutoSetting(items[regedIdx], judgeAutoSettings.current, props.plcCollectSetting);\r\n if (autoValue.ALM_LIM !== null && autoValue.WRN_LIM !== null) {\r\n items[regedIdx].ALM_LIM = autoValue.ALM_LIM;\r\n items[regedIdx].WRN_LIM = autoValue.WRN_LIM;\r\n }\r\n console.debug(['異常種別登録済みのデータを上書き更新']);\r\n setFlgUpdate(true);\r\n return;\r\n }\r\n\r\n //診断タイプが未使用(0)の行をアップデートする\r\n const idx = items.findIndex((it) => it.JDG_TYP == 0);\r\n console.debug(`find idx:${idx}`);\r\n if (idx >= 0) {\r\n fi.JDG_NO = items[idx].JDG_NO;\r\n items[idx] = fi;\r\n let autoValue = SetJusgeAutoSetting(items[idx], judgeAutoSettings.current, props.plcCollectSetting);\r\n if (autoValue.ALM_LIM !== null && autoValue.WRN_LIM !== null) {\r\n items[idx].ALM_LIM = autoValue.ALM_LIM;\r\n items[idx].WRN_LIM = autoValue.WRN_LIM;\r\n }\r\n setFlgUpdate(true);\r\n }\r\n });\r\n\r\n setItems([...items]);\r\n };\r\n\r\n /**\r\n * エラーレスポンス メッセージ変換\r\n * @param errCode\r\n * @param data\r\n * @returns\r\n */\r\n const ConvErrorMessage = (errCode: number, data: JudgeSettingErrorData) => {\r\n console.debug(`ConvErrorMessage() ${errCode}, ${data}`);\r\n switch (errCode) {\r\n case ErrorCode.ERR_CODE_JSET_JDG_TYP_REQUIRED_ITEMS:\r\n //診断タイプ:必須項目\r\n return `No:${data.ErrorItem.JDG_NO} ${t('JudgeSettingDialog.診断タイプ', '診断タイプ')}:${t(\r\n 'JudgeSettingDialog.必須項目',\r\n '必須項目'\r\n )}`;\r\n case ErrorCode.ERR_CODE_JSET_FREQ_C_INVALID_VALUE:\r\n //周波数:不正値\r\n return `No:${data.ErrorItem.JDG_NO} ${t('JudgeSettingDialog.周波数', '周波数')}:${t(\r\n 'JudgeSettingDialog.不正値',\r\n '不正値'\r\n )}`;\r\n case ErrorCode.ERR_CODE_JSET_FREQ_C_CANNOT_BE_SET:\r\n //周波数:設定不可\r\n return `No:${data.ErrorItem.JDG_NO} ${t('JudgeSettingDialog.周波数', '周波数')}:${t(\r\n 'JudgeSettingDialog.設定不可',\r\n '設定不可'\r\n )}`;\r\n case ErrorCode.ERR_CODE_JSET_FREQ_C_20TO6000:\r\n //周波数:20~6000\r\n return `No:${data.ErrorItem.JDG_NO} ${t('JudgeSettingDialog.周波数', '周波数')}:${data.Min}~${data.Max}`;\r\n case ErrorCode.ERR_CODE_JSET_FREQ_C_1TO6000:\r\n //周波数:1~6000\r\n return `No:${data.ErrorItem.JDG_NO} ${t('JudgeSettingDialog.周波数', '周波数')}:${data.Min}~${data.Max}`;\r\n case ErrorCode.ERR_CODE_JSET_CLC_TYP_REQUIRED_ITEMS:\r\n //演算方法:必須項目\r\n return `No:${data.ErrorItem.JDG_NO} ${t('JudgeSettingDialog.演算方法', '演算方法')}:${t(\r\n 'JudgeSettingDialog.必須項目',\r\n '必須項目'\r\n )}`;\r\n case ErrorCode.ERR_CODE_JSET_CLC_TYP_CANNOT_BE_SET:\r\n //演算方法:入力範囲エラー\r\n return `No:${data.ErrorItem.JDG_NO} ${t('JudgeSettingDialog.演算方法', '演算方法')}:${t(\r\n 'JudgeSettingDialog.入力範囲エラー',\r\n '入力範囲エラー'\r\n )}`;\r\n case ErrorCode.ERR_CODE_JSET_TWRN_LIM_INVALIDVALUE:\r\n //閾値_軽故障:不正値\r\n return `No:${data.ErrorItem.JDG_NO} ${t('JudgeSettingDialog.閾値_軽故障', '閾値_軽故障')}:${t(\r\n 'JudgeSettingDialog.不正値',\r\n '不正値'\r\n )}`;\r\n case ErrorCode.ERR_CODE_JSET_TWRN_LIM_0TO10000:\r\n //閾値_軽故障:0~10000\r\n return `No:${data.ErrorItem.JDG_NO} ${t('JudgeSettingDialog.閾値_軽故障', '閾値_軽故障')}:${data.Min}~${data.Max\r\n }`;\r\n case ErrorCode.ERR_CODE_JSET_ALM_LIM_INVALID_VALUE:\r\n //閾値_重故障:不正値\r\n return `No:${data.ErrorItem.JDG_NO} ${t('JudgeSettingDialog.閾値_重故障', '閾値_重故障')}:${t(\r\n 'JudgeSettingDialog.不正値',\r\n '不正値'\r\n )}`;\r\n case ErrorCode.ERR_CODE_JSET_ALM_LIM_0TO10000:\r\n //閾値_重故障:0~10000\r\n return `No:${data.ErrorItem.JDG_NO} ${t('JudgeSettingDialog.閾値_重故障', '閾値_重故障')}:${data.Min}~${data.Max\r\n }`;\r\n case ErrorCode.ERR_CODE_JSET_BAND_VAL_INVALID_VALUE:\r\n //裕度(%):不正値\r\n return `No:${data.ErrorItem.JDG_NO} ${t('JudgeSettingDialog.裕度', '裕度')}}:${t(\r\n 'JudgeSettingDialog.不正値',\r\n '不正値'\r\n )}`;\r\n case ErrorCode.ERR_CODE_JSET_BAND_VAL_CANNOT_BE_SET:\r\n //裕度(%):設定不可\r\n return `No:${data.ErrorItem.JDG_NO} ${t('JudgeSettingDialog.裕度', '裕度')}:${t(\r\n 'JudgeSettingDialog.設定不可',\r\n '設定不可'\r\n )}`;\r\n case ErrorCode.ERR_CODE_JSET_BAND_VAL_0TO10:\r\n //裕度(%):0~10\r\n return `No:${data.ErrorItem.JDG_NO} ${t('JudgeSettingDialog.裕度', '裕度')}:${data.Min}~${data.Max}`;\r\n case ErrorCode.ERR_CODE_JSET_ADJ_ROT_ON_INCORRECT_VALUE:\r\n //補正:回転数:不正値\r\n return `No:${data.ErrorItem.JDG_NO} ${t('JudgeSettingDialog.補正:回転数', '補正:回転数')}:${t(\r\n 'JudgeSettingDialog.不正値',\r\n '不正値'\r\n )}`;\r\n case ErrorCode.ERR_CODE_JSET_ADJ_ROT_ON_CANNOT_BE_SET:\r\n //補正:回転数:設定不可\r\n return `No:${data.ErrorItem.JDG_NO} ${t('JudgeSettingDialog.補正:回転数', '補正:回転数')}:${t(\r\n 'JudgeSettingDialog.設定不可',\r\n '設定不可'\r\n )}`;\r\n case ErrorCode.ERR_CODE_JSET_ALM_TYP_NO_REQUIRED_ITEM:\r\n //異常種別:必須項目\r\n return `No:${data.ErrorItem.JDG_NO} ${t('JudgeSettingDialog.異常種別', '異常種別')}:${t(\r\n 'JudgeSettingDialog.必須項目',\r\n '必須項目'\r\n )}`;\r\n case ErrorCode.ERR_CODE_JSET_ALM_TYP_NO_CANNOT_BE_SET:\r\n //異常種別:設定不可\r\n return `No:${data.ErrorItem.JDG_NO} ${t('JudgeSettingDialog.異常種別', '異常種別')}:${t(\r\n 'JudgeSettingDialog.設定不可',\r\n '設定不可'\r\n )}`;\r\n default:\r\n return t('JudgeSettingDialog.システムエラーが発生しました', 'システムエラーが発生しました');\r\n }\r\n };\r\n\r\n const confirm = flgConfirm ? (\r\n \r\n ) : null;\r\n\r\n console.debug(['- 画面描画開始 -', items]);\r\n return (\r\n <>\r\n { }}\r\n onExited={(e) => {\r\n if (mode) {\r\n props.dialog.apply({});\r\n } else {\r\n props.dialog.cancel();\r\n }\r\n }}\r\n >\r\n {t('JudgeSettingDialog.判定値設定', '判定値設定')}\r\n \r\n {login.IsIoT ? null : (\r\n \r\n PLC:{props.plcNo} {t('JudgeSettingDialog.- AIカード', '- AIカード')}:{props.aiCard} - CH:{props.aiCh}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n No\r\n \r\n \r\n {t('JudgeSettingDialog.使用', '使用')}\r\n \r\n \r\n {t('JudgeSettingDialog.演算種別', '演算種別')}\r\n \r\n \r\n {t('JudgeSettingDialog.診断タイプ', '診断タイプ')}\r\n \r\n \r\n {t('JudgeSettingDialog.周波数', '周波数')}\r\n \r\n \r\n {t('JudgeSettingDialog.裕度', '裕度')}\r\n \r\n \r\n {t('JudgeSettingDialog.演算方法', '演算方法')}\r\n \r\n \r\n {t('JudgeSettingDialog.軽故障', '軽故障')}\r\n \r\n \r\n {t('JudgeSettingDialog.重故障', '重故障')}\r\n \r\n {/* {t('JudgeSettingDialog.補正', '補正')} */}\r\n \r\n {t('JudgeSettingDialog.高調波判定', '高調波判定')}\r\n \r\n \r\n {t('JudgeSettingDialog.2f\\nキャンセル', '2f\\nキャンセル')}\r\n \r\n \r\n {t('JudgeSettingDialog.異常種別', '異常種別')}\r\n \r\n \r\n \r\n \r\n {items.map((item) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n
\r\n
\r\n \r\n {/* changeDispMaskOn()} checked={dispMaskOn === 0 ? false : true} />\r\n {t('JudgeSettingDialog.速度_変位判定マスク', '変位(前日値)比較')} */}\r\n {\r\n BearingFeaturesFreqButtonAction();\r\n }}\r\n >\r\n {t('JudgeSettingDialog.軸受特徴周波数自動設定', '軸受特徴周波数自動設定')}\r\n \r\n {\r\n //console.debug(['- flgUpdate -', flgUpdate]);\r\n let regedIdx = items.findIndex(\r\n (row) => row.CHANGE_INVALID === 1 && row.JDG_TYP == 4 && (row.MCLC_TYP_ID == 9 || row.MCLC_TYP_ID == 10)\r\n );\r\n if (regedIdx === -1) {\r\n //初回追加の場合\r\n handleSideBandFreq();\r\n } else {\r\n if (flgUpdate) {\r\n setMsgConfirm(t('JudgeSettingDialog.設定を更新しますか?', '設定を更新しますか?'));\r\n confirmDlg\r\n .open()\r\n .apply((_) => {\r\n handleSideBandFreq();\r\n })\r\n .cancel((_) => { });\r\n }\r\n }\r\n }}\r\n >\r\n {t('JudgeSettingDialog.側帯波周波数自動設定', '側帯波周波数自動設定')}\r\n \r\n\r\n {\r\n console.debug(['- flgUpdate -', flgUpdate]);\r\n if (flgUpdate) {\r\n setMsgConfirm(t('JudgeSettingDialog.設定を保存しますか?', '設定を保存しますか?'));\r\n confirmDlg\r\n .open()\r\n .apply((resp) => {\r\n // 保存処理\r\n SetJudgeSettingItems(items).then((resp: JudgeSettingItemModel) => {\r\n console.debug(['resp', resp]);\r\n if (resp.ResponceData.ErrorCode == ErrorCode.ERR_CODE_NONE) {\r\n //COL_SETのため、更新は上位に任せる\r\n props.onChangeDspMskOn(dispMaskOn);\r\n setIsOpen(false);\r\n setMode(true);\r\n return;\r\n } else {\r\n // エラーハンドリング\r\n setShowTitle(t('JudgeSettingDialog.設定エラー', '設定エラー'));\r\n setShowMessage(ConvErrorMessage(resp.ResponceData.ErrorCode, resp.JdgSetErrData));\r\n setMessageDialogOpen(true);\r\n }\r\n });\r\n })\r\n .cancel((_) => { });\r\n } else {\r\n setIsOpen(false);\r\n setMode(false);\r\n }\r\n }}\r\n >\r\n {t('JudgeSettingDialog.設定', '設定')}\r\n \r\n {\r\n if (flgUpdate) {\r\n setMsgConfirm(\r\n t(\r\n 'JudgeSettingDialog.保存していないデータを破棄します。\\nよろしいですか?',\r\n '保存していないデータを破棄します。\\nよろしいですか?'\r\n )\r\n );\r\n confirmDlg\r\n .open()\r\n .apply((resp) => {\r\n setIsOpen(false);\r\n setMode(true);\r\n })\r\n .cancel((_) => { });\r\n } else {\r\n setIsOpen(false);\r\n setMode(false);\r\n }\r\n }}\r\n >\r\n {t('JudgeSettingDialog.キャンセル', 'キャンセル')}\r\n \r\n \r\n \r\n {confirm}\r\n setMessageDialogOpen(false)}\r\n title={showTitle}\r\n okText={'OK'}\r\n maxWidth={'sm'}\r\n >\r\n {showMessage}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default JudgeSettingDialog;\r\n","/**\r\n *判定値選択絞り込み情報\r\n */\r\nexport type JudgeSettingSelectType = {\r\n // バージョン\r\n /*1:PLC版 2:IOT版*/\r\n VER: number;\r\n // インデックス\r\n JDG_INDEX: number;\r\n // 非表示フラグ\r\n /**0:表示,1:非表示 */\r\n TYP_INVALID: number;\r\n // メモ1\r\n MEMO1: string;\r\n // メモ2\r\n MEMO2: string;\r\n // メモ3\r\n MEMO3: string;\r\n // メモ4\r\n MEMO4: string;\r\n // メモ5\r\n MEMO5: string;\r\n // 【計測種別文字列】ユニット種別\r\n /**KIND_NO_NAME_SET */\r\n SPEED: number;\r\n // 【計測種別文字列】名称No.\r\n /**KIND_NO_NAME_SET */\r\n NAME_NO: number;\r\n // 【項目名称】項目名称\r\n /**NAME_ITME_SET */\r\n ITM_NAME_NO: number;\r\n // 【診断タイプ】診断タイプNo.\r\n /**JDG_TYP_SET */\r\n TYP_NO_JDG: number;\r\n // 【演算方法】演算No.\r\n /**CLC_TYP_SET */\r\n TYP_NO_CLC: number;\r\n // 【異常種別】異常種別No.\r\n /**ALM_KIND_SET */\r\n TYP_NO_ALM: number;\r\n // 【演算種別】演算種別ID\r\n /**MCLC_TYP_ID */\r\n MCLC_TYP_ID: number;\r\n // 参照テーブル\r\n /***/\r\n REF_TB_NAME: string;\r\n\r\n};\r\n/** レスポンス情報 */\r\nexport type ResponceDataType = {\r\n ResponseCode: number;\r\n ErrorCode: number;\r\n ResponseMessage: string;\r\n ErrorMessage: string;\r\n};\r\n\r\n/**\r\n * 判定値選択絞り込み情報取得\r\n * @returns\r\n */\r\nexport const GetJudgeSettingSelectItems = ()\r\n : Promise<{ JudgeSettingSelectItems: JudgeSettingSelectType[], ResponceDataModel: ResponceDataType }> => {\r\n const url = `api/JugeSetSelect/`;\r\n console.debug(url);\r\n return new Promise((resolve, reject) => {\r\n fetch(url)\r\n .then((res) => {\r\n if (!res.ok) {\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n reject(message);\r\n }\r\n else {\r\n return res.json();\r\n }\r\n })\r\n .then((result: { JudgeSettingSelectItems: JudgeSettingSelectType[], ResponceDataModel: ResponceDataType }) => {\r\n resolve(result);\r\n }).catch((error) => {\r\n console.error(error);\r\n reject(error);\r\n });\r\n });\r\n};\r\n\r\n/**\r\n * コナンエア用判定値選択絞り込み情報取得\r\n * @returns\r\n */\r\nexport const GetJudgeSettingSelectConanItems = ()\r\n : Promise<{ JudgeSettingSelectItems: JudgeSettingSelectType[], ResponceDataModel: ResponceDataType }> => {\r\n const url = `api/JugeSetSelect/Conan`;\r\n console.debug(url);\r\n return new Promise((resolve, reject) => {\r\n fetch(url)\r\n .then((res) => {\r\n if (!res.ok) {\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n reject(message);\r\n }\r\n else {\r\n return res.json();\r\n }\r\n })\r\n .then((result: { JudgeSettingSelectItems: JudgeSettingSelectType[], ResponceDataModel: ResponceDataType }) => {\r\n resolve(result);\r\n }).catch((error) => {\r\n console.error(error);\r\n reject(error);\r\n });\r\n });\r\n};\r\n\r\n/**\r\n * 移動平均を追加・書換処理\r\n * @param devIndex \r\n * @returns \r\n */\r\nexport const SetJudgeSettingLayerShort = (devIndex: number): Promise => {\r\n console.debug(['SetJudgeSettingLayerShort check', devIndex])\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/JudgeSetting/LayerShort\", {\r\n method: 'put',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(devIndex),\r\n })\r\n .then((res) => res.json())\r\n .then((result: ResponceDataType) => resolve(result))\r\n .catch(reason => reject(reason));\r\n });\r\n}\r\n\r\n","import React, { useEffect, useState } from 'react';\r\nimport { NumericFormat } from 'react-number-format';\r\n\r\nconst defaultMinValue: string = '-9999999';\r\nconst defaultMinValueMainasu: string = '-9999998'; //マイナスのみの入力の場合\r\n\r\ntype Props = {\r\n value: number;\r\n /**\r\n * 小数以下の設定\r\n * 0の場合小数点入力不可\r\n */\r\n decimalScale?: number;\r\n /**\r\n * true を指定すると、小数点以下の桁数が常に0で表示\r\n */\r\n fixedDecimalScale?: boolean;\r\n /**\r\n * 入力最小値\r\n */\r\n minValue?: number;\r\n /**\r\n * 入力最大値\r\n */\r\n maxValue?: number;\r\n /**\r\n * true の場合、負数の入力を許可します。\r\n */\r\n allowNegative?: boolean;\r\n /**\r\n * スタイル\r\n */\r\n className?: string;\r\n\r\n /**\r\n * 変更event\r\n */\r\n onChange?: (value: number) => void;\r\n};\r\n\r\n/**\r\n * 入力値を判定して文字列として返す\r\n * -だけだった場合\r\n * 空だった場合\r\n * 数字ではなかった場合\r\n * @param value\r\n * @returns\r\n */\r\nconst checkValueConvert = (value: string): string => {\r\n let setV: string;\r\n if (value === '-') {\r\n setV = defaultMinValueMainasu;\r\n //console.debug(['mainasu a Number', setV]);\r\n } else if (value === '') {\r\n setV = defaultMinValue;\r\n //console.debug(['null a Number', props.minValue ?? 0]);\r\n } else {\r\n const numValue = Number(value);\r\n if (isNaN(numValue)) {\r\n setV = defaultMinValue;\r\n //console.debug(['Not a Number', props.minValue ?? 0]);\r\n } else {\r\n //console.debug(['Set Number', numValue]);\r\n setV = String(numValue);\r\n }\r\n }\r\n return setV;\r\n};\r\n\r\n/**\r\n * 数値入力用コンポーネント\r\n * @param props\r\n * @returns\r\n */\r\nconst NumericFormatEntry_input: React.FC = (props: Props) => {\r\n const [val, setVal] = useState(String(props.value));\r\n\r\n useEffect(() => {\r\n setVal(checkValueConvert(String(props.value)));\r\n }, [props.value]);\r\n\r\n useEffect(() => {\r\n //console.debug(['- useEffect - NumericFormatEntry_input', props]);\r\n //入力値表示更新の為0をセットした値を再セットしてレンダリングする\r\n if (val === defaultMinValue) {\r\n setVal(props.minValue == null ? '0' : String(props.minValue));\r\n } else if (val === defaultMinValueMainasu) {\r\n setVal('-');\r\n }\r\n }, [val]);\r\n\r\n return (\r\n <>\r\n {\r\n const numValue = Number(values.value);\r\n if (isNaN(numValue)) return true;\r\n return numValue >= (props.minValue ?? -9999999) && numValue <= (props.maxValue ?? 9999999);\r\n }}\r\n onBlur={(e) => {\r\n if (props.onChange) {\r\n if (val === '-') {\r\n setVal('0');\r\n props.onChange(0);\r\n } else {\r\n props.onChange(Number(val));\r\n }\r\n }\r\n }}\r\n onValueChange={(values, sourceInfo) => {\r\n //console.debug(['values.value', values.value]);\r\n //console.debug(['values.formattedValue', values.formattedValue]);\r\n //console.debug(['values.floatValue', values.floatValue]);\r\n let setV = checkValueConvert(values.value);\r\n setVal(setV);\r\n }}\r\n className={props.className ?? ''}\r\n onFocus={(e) => e.target.select()} //全選択\r\n style={{ textAlign: 'right' }} //右寄せ\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default NumericFormatEntry_input;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { DialogAction, useModal } from '../../../../function/useModal';\r\nimport { Button, Dialog, DialogTitle, DialogContent, DialogActions, Typography } from '@material-ui/core';\r\nimport { JudgeSettingItem } from '../JudgeSetting/JudgeSetting';\r\nimport ItemComboBox, { ComboBoxItemType } from '../../../atoms/ComboBox/ItemComboBox';\r\nimport ItemComboBoxStr, { ComboBoxItemTypeS } from '../../../atoms/ComboBox/ItemComboBoxStr';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { Checkbox, TextField } from '@material-ui/core';\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../../atoms/Dialog/ConfirmDialog';\r\nimport { useTranslation } from 'react-i18next';\r\nimport SimpleDialog from '../../../atoms/Dialog/SimpleDialog';\r\nimport {\r\n PLCcollectSettingType,\r\n KIND_NO_NAME_SET,\r\n NAME_ITEM_SET,\r\n LOG_INT_SET,\r\n MulDataType,\r\n DATA_UNIT,\r\n IsJudgeSetting,\r\n GetConanMeasureName,\r\n IsPLCCalcSetting,\r\n} from './CollectSettingDefine';\r\nimport { NAME_DEV_SET } from '../../../../function/NameDevSetModel';\r\nimport dayjs from 'dayjs';\r\nimport ItemCalenderTime from '../../../atoms/Calendar/ItemCalenderTime';\r\nimport JudgeSettingDialog, { JudgeSettingDialogResponse } from './../JudgeSetting/JudgeSettingDialog';\r\nimport NumericEntry_inputEx from './../../../atoms/Input/NumericEntry_inputEx';\r\nimport NumericFormatEntry_input from './../../../atoms/Input/NumericFormatEntry_input';\r\nimport { IsConanAirPlc } from '../../../../function/PlcNoModel';\r\nimport { SpeedKind, MeasureHighKind } from '../../../../Constant';\r\n\r\ntype CollectSettingItemDialogProps = {\r\n dialog: DialogAction;\r\n target: PLCcollectSettingType;\r\n index: number;\r\n kindNoNameList: KIND_NO_NAME_SET[];\r\n nameDevList: NAME_DEV_SET[];\r\n nameItemList: NAME_ITEM_SET[];\r\n logIntList: LOG_INT_SET[];\r\n mulList: MulDataType[];\r\n dataUnitList: DATA_UNIT[];\r\n measCombos: ComboBoxItemTypeS[];\r\n devCombos: ComboBoxItemTypeS[];\r\n itemCombos: ComboBoxItemTypeS[];\r\n mulCombos: ComboBoxItemTypeS[];\r\n unitCombos: ComboBoxItemTypeS[];\r\n logIntCombos: ComboBoxItemTypeS[];\r\n avgCombos: ComboBoxItemType[];\r\n updateMotorSensor: (target: PLCcollectSettingType, index: number, chk: boolean) => boolean;\r\n updateRotClc: (target: PLCcollectSettingType, index: number, chk: boolean) => boolean;\r\n};\r\n\r\nexport type CollectSettingItemDialogResponse = {\r\n result: PLCcollectSettingType;\r\n};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 300px)',\r\n },\r\n tableScroll: {\r\n overflowX: 'scroll',\r\n overflowY: 'auto',\r\n },\r\n tableHeader: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n padding: '1px',\r\n minWidth: '120px',\r\n borderCollapse: `collapse`,\r\n },\r\n textAlignRightCell: {\r\n textAlign: 'right',\r\n },\r\n textAlignCenterCell: {\r\n textAlign: 'center',\r\n },\r\n tableTd: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '0px',\r\n paddingLeft: '5px',\r\n borderCollapse: `collapse`,\r\n zIndex: 0,\r\n textAlign: 'center',\r\n },\r\n table_no_border_td: {\r\n borderTop: '0px',\r\n borderBottom: '0px',\r\n borderLeft: '0px',\r\n borderRight: '1px',\r\n borderRightStyle: 'solid',\r\n borderRightColor: '#dcdcdc',\r\n padding: '0px',\r\n minWidth: '80px',\r\n height: '30px',\r\n borderCollapse: `collapse`,\r\n },\r\n table_td_noValue: {\r\n borderTop: '0px',\r\n borderBottom: '0px',\r\n borderLeft: '0px',\r\n borderRight: '1px',\r\n borderRightStyle: 'solid',\r\n borderRightColor: '#dcdcdc',\r\n padding: '0px',\r\n height: '30px',\r\n borderCollapse: `collapse`,\r\n background: 'silver',\r\n },\r\n button: {\r\n width: '150px',\r\n },\r\n labelStyle: {\r\n fontSize: '12px',\r\n },\r\n textField: {\r\n flexGrow: 1,\r\n height: '100%',\r\n width: '98%',\r\n borderBottom: '1px solid #000000',\r\n borderTop: 'none',\r\n borderLeft: 'none',\r\n borderRight: 'none',\r\n padding: '0px',\r\n backgroundColor: 'transparent',\r\n },\r\n // buttonAutoFreqSet: {\r\n // width: '200px',\r\n // },\r\n })\r\n);\r\n/**\r\n * 回転周波数算出センサ&モータ起動状態検出センサ指定 項目チェック\r\n */\r\nconst IsItemRST = (itemNo: number): boolean => {\r\n return itemNo >= 3 && itemNo <= 5;\r\n};\r\n/**\r\n * エンベロープ処理 項目チェック\r\n * @param itemNo\r\n * @returns\r\n */\r\nconst IsItemVibration = (itemNo: number): boolean => {\r\n return itemNo == 1 || itemNo == 2 || itemNo == 7 || itemNo == 8;\r\n};\r\n/**\r\n * 回転周波数算出センサ インバータ駆動チェック\r\n * @param devs\r\n * @param devIndex\r\n * @returns\r\n */\r\nconst IsInverter = (devs: NAME_DEV_SET[], devIndex: string): boolean => {\r\n const dno = parseInt(devIndex);\r\n const nds = devs.find((dv) => dv.DEV_INDEX === dno);\r\n if (nds) {\r\n return nds.INV_DRV_ON > 0;\r\n }\r\n return false;\r\n};\r\n\r\nconst CollectSettingItemDialog: React.FC = (props: CollectSettingItemDialogProps) => {\r\n console.debug([`-- CollectSettingItemDialog --`, props]);\r\n\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [isOpen, setIsOpen] = useState(true);\r\n const [mode, setMode] = useState(true);\r\n const [items, setItems] = useState([]);\r\n const [item, setItem] = useState({ ...props.target });\r\n\r\n const [isExecute, setIsExecute] = useState(props.target.IsExecute);\r\n const [kind, setKind] = useState(`${props.target.NameNo}_${props.target.Speed}`);\r\n const [machineIdx, setMachineIdx] = useState(props.target.MachineIndex);\r\n const [itemNameNo, setItemNameNo] = useState(props.target.ItemNameNo);\r\n const [logPeriod, setLogPeriod] = useState(props.target.LoggingPeriodMinute);\r\n const [startTime, setStartTime] = useState(\r\n props.target.LoggingStartTime == undefined ? '' : dayjs(props.target.LoggingStartTime).format('YYYY-MM-DD HH:mm:ss')\r\n );\r\n const [dUpper, setDUpeer] = useState(parseFloat(props.target.DigitalValueUpper));\r\n const [dLower, setDLower] = useState(parseFloat(props.target.DigitalValueLower));\r\n const [eUpper, setEUpeer] = useState(parseFloat(props.target.EngineeringValueUpper));\r\n const [eLower, setELower] = useState(parseFloat(props.target.EngineeringValueLower));\r\n const [rTUpper, setRTUpper] = useState(parseFloat(props.target.RealtimeTrendValueUpper));\r\n const [rTUpperUpper, setRTUpperUpper] = useState(parseFloat(props.target.RealtimeTrendValueUpperUpper));\r\n const [mul, setMul] = useState(props.target.Mul);\r\n const [unit, setUnit] = useState(props.target.UnitSymbol);\r\n const [isMotor, setIsMotor] = useState(props.target.StartDet === 1);\r\n const [avg, setAvg] = useState(props.target.AvgPrc);\r\n const [isEnvSav, setIsEnvSav] = useState(props.target.EnvSav);\r\n const [isRotClc, setIsRotClc] = useState(props.target.RotClc);\r\n const [note, setNote] = useState(props.target.Note);\r\n\r\n const measSubCombos = props.measCombos\r\n .filter((cmb) => {\r\n return cmb.key.endsWith(props.target.Speed.toString());\r\n })\r\n .concat({ key: `0_${props.target.Speed}`, name: '-' });\r\n const logIntCombos = props.logIntCombos.filter((cmb) => {\r\n let v = cmb.tag as LOG_INT_SET;\r\n if (v) {\r\n return v.SPEED === item.Speed;\r\n } else {\r\n return false;\r\n }\r\n });\r\n\r\n const [flgJdg, jdgDlg] = useModal();\r\n\r\n const [flgUpdate, setFlgUpdate] = useState(false);\r\n const [flgConfirm, confirmDlg] = useModal();\r\n const [msgConfirm, setMsgConfirm] = useState();\r\n\r\n //APIレスポンスダイアログ\r\n const [messageDialogOpen, setMessageDialogOpen] = React.useState(false);\r\n const [showTitle, setShowTitle] = React.useState('');\r\n const [showMessage, setShowMessage] = React.useState('');\r\n\r\n useEffect(() => {\r\n //ロギング周期初期値設定\r\n let sindex = logIntCombos.findIndex((r) => r.key === item.LoggingPeriod);\r\n if (sindex === -1 && logIntCombos.length !== 0) {\r\n changeLogPeriod(Number(logIntCombos[0].key));\r\n }\r\n }, []);\r\n\r\n const changeExecute = (exec: boolean) => {\r\n setItem({ ...item, IsExecute: exec });\r\n setIsExecute(exec);\r\n setFlgUpdate(true);\r\n };\r\n const changeKind = (kind: string) => {\r\n const prm = kind.split('_');\r\n setItem({ ...item, MeasureKindNo: prm[0], NameNo: parseInt(prm[0]), Speed: parseInt(prm[1]) });\r\n // item.MeasureKindNo = prm[0];\r\n // item.NameNo = parseInt(prm[0]);\r\n // item.Speed = parseInt(prm[1]);\r\n setKind(kind);\r\n setFlgUpdate(true);\r\n };\r\n /**\r\n * 機器番号変更時の初期化処理\r\n * @param midx\r\n */\r\n const changeMachineIdx = (midx: string) => {\r\n //console.debug('changeMachineIdx : ', midx);\r\n setMsgConfirm(\r\n t(\r\n 'CollectSettingItemDialog.選択したタグの情報をすべて削除',\r\n '選択したタグの情報をすべて削除しますがよろしいですか?'\r\n )\r\n );\r\n confirmDlg\r\n .open()\r\n .apply((_) => {\r\n const ino = parseInt(props.itemCombos[0].key);\r\n const stdate = new Date(2001, 0, 1);\r\n const period = logIntCombos.length > 0 ? parseInt(logIntCombos[0].key) : 0;\r\n setItem({\r\n ...item,\r\n MachineIndex: midx,\r\n ItemNameNo: ino,\r\n LoggingPeriodMinute: period,\r\n LoggingStartTime: stdate,\r\n DigitalValueUpper: '0',\r\n DigitalValueLower: '0',\r\n EngineeringValueUpper: '0',\r\n EngineeringValueLower: '0',\r\n Mul: 0,\r\n UnitSymbol: '',\r\n StartDet: 0,\r\n AvgPrc: 0,\r\n EnvSav: false,\r\n RotClc: false,\r\n Note: '',\r\n });\r\n setMachineIdx(midx);\r\n setItemNameNo(ino);\r\n setLogPeriod(period);\r\n setStartTime(dayjs(stdate).format('YYYY-MM-DD HH:mm:ss'));\r\n setDUpeer(0);\r\n setDLower(0);\r\n setEUpeer(0);\r\n setELower(0);\r\n setMul(0);\r\n setUnit('');\r\n setIsMotor(false);\r\n setAvg(0);\r\n setIsEnvSav(false);\r\n setIsRotClc(false);\r\n setNote('');\r\n setFlgUpdate(true);\r\n })\r\n .cancel((_) => {});\r\n };\r\n const changeItemNameNo = (ino: number) => {\r\n //console.debug('changeItemNameNo : ', ino);\r\n setItem({ ...item, ItemNameNo: ino });\r\n // item.ItemNameNo = ino;\r\n setItemNameNo(ino);\r\n setFlgUpdate(true);\r\n };\r\n const changeLogPeriod = (period: number) => {\r\n setItem({ ...item, LoggingPeriodMinute: period });\r\n // item.LoggingPeriodMinute = period;\r\n setLogPeriod(period);\r\n setFlgUpdate(true);\r\n };\r\n const changeStartTime = (time: Date) => {\r\n setItem({ ...item, LoggingStartTime: dayjs(time).toDate() });\r\n // item.LoggingStartTime = dayjs(time).toDate();\r\n setStartTime(dayjs(time).format('YYYY-MM-DD HH:mm:ss'));\r\n setFlgUpdate(true);\r\n };\r\n const changeDUpper = (val: number) => {\r\n setItem({ ...item, DigitalValueUpper: val.toString() });\r\n // item.DigitalValueUpper = val.toString();\r\n setDUpeer(val);\r\n setFlgUpdate(true);\r\n };\r\n const changeDLower = (val: number) => {\r\n setItem({ ...item, DigitalValueLower: val.toString() });\r\n // item.DigitalValueLower = val.toString();\r\n setDLower(val);\r\n setFlgUpdate(true);\r\n };\r\n const changeEUpper = (val: number) => {\r\n setItem({ ...item, EngineeringValueUpper: val.toString() });\r\n // item.EngineeringValueUpper = val.toString();\r\n setEUpeer(val);\r\n setFlgUpdate(true);\r\n };\r\n const changeELower = (val: number) => {\r\n setItem({ ...item, EngineeringValueLower: val.toString() });\r\n // item.EngineeringValueLower = val.toString();\r\n setELower(val);\r\n setFlgUpdate(true);\r\n };\r\n // const changeRTUpper = (val: number) => {\r\n // setItem({...item,RealtimeTrendValueUpper: val.toString()});\r\n // // item.RealtimeTrendValueUpper = val.toString();\r\n // setRTUpper(val);\r\n // setFlgUpdate(true);\r\n // };\r\n // const changeRTUpperUpper = (val: number) => {\r\n // setItem({...item,RealtimeTrendValueUpperUpper: val.toString()});\r\n // // item.RealtimeTrendValueUpperUpper = val.toString();\r\n // setRTUpperUpper(val);\r\n // setFlgUpdate(true);\r\n // };\r\n const changeMul = (val: number) => {\r\n setItem({ ...item, Mul: val });\r\n // item.Mul = val;\r\n setMul(val);\r\n setFlgUpdate(true);\r\n };\r\n const changeUnit = (val: string) => {\r\n setItem({ ...item, UnitSymbol: val });\r\n // item.UnitSymbol = val;\r\n setUnit(val);\r\n setFlgUpdate(true);\r\n };\r\n /**\r\n * モータ起動状態検出センサ指定チェック\r\n * @param chk\r\n */\r\n const changeMotor = (chk: boolean) => {\r\n if (chk) {\r\n if (IsItemRST(item.ItemNameNo)) {\r\n if (props.updateMotorSensor(item, props.index, chk)) {\r\n setItem({ ...item, StartDet: 1 });\r\n setIsMotor(true);\r\n setFlgUpdate(true);\r\n }\r\n }\r\n } else {\r\n setItem({ ...item, StartDet: 0 });\r\n setIsMotor(false);\r\n setFlgUpdate(true);\r\n }\r\n };\r\n const changeAvg = (val: number) => {\r\n setItem({ ...item, AvgPrc: val });\r\n // item.AvgPrc = val;\r\n setAvg(val);\r\n setFlgUpdate(true);\r\n };\r\n /**\r\n * エンベロープ処理チェック\r\n * @param chk\r\n */\r\n // const changeEnvSav = (chk: boolean) => {\r\n // if (chk) {\r\n // if (IsItemVibration(item.ItemNameNo)) {\r\n // setItem({ ...item, EnvSav: chk });\r\n // setIsEnvSav(chk);\r\n // setFlgUpdate(true);\r\n // }\r\n // } else {\r\n // setItem({ ...item, EnvSav: chk });\r\n // setIsEnvSav(chk);\r\n // setFlgUpdate(true);\r\n // }\r\n // };\r\n /**\r\n * 回転周波数算出センサチェック\r\n * @param chk\r\n */\r\n const changeRotClc = (chk: boolean) => {\r\n if (chk) {\r\n if (IsItemRST(item.ItemNameNo)) {\r\n if (IsInverter(props.nameDevList, item.MachineIndex)) {\r\n if (props.updateRotClc(item, props.index, chk)) {\r\n setItem({ ...item, RotClc: chk });\r\n setIsRotClc(chk);\r\n setFlgUpdate(true);\r\n }\r\n }\r\n }\r\n } else {\r\n props.updateRotClc(item, props.index, chk);\r\n setItem({ ...item, RotClc: chk });\r\n setIsRotClc(chk);\r\n setFlgUpdate(true);\r\n }\r\n };\r\n const changeNote = (text: string) => {\r\n setItem({ ...item, Note: text });\r\n // item.Note = text;\r\n setNote(text);\r\n setFlgUpdate(true);\r\n };\r\n const dispJudge = () => {\r\n jdgDlg\r\n .open()\r\n .apply((resp) => {})\r\n .cancel((resp) => {});\r\n };\r\n /**\r\n * 速度・変位判定マスク変更event\r\n * @param text\r\n */\r\n const changeDspMskOn = (value: number) => {\r\n console.debug(['changeDspMskOn', value, item]);\r\n setItem({ ...item, DispMaskOn: value });\r\n setFlgUpdate(true);\r\n };\r\n\r\n const jdgdlgElem = flgJdg ? (\r\n \r\n ) : null;\r\n\r\n const confirm = flgConfirm ? (\r\n \r\n ) : null;\r\n\r\n /**\r\n * 計測種別セル表示\r\n * @returns\r\n */\r\n const mesureCell = () => {\r\n if (IsConanAirPlc(props.target.PLCNo)) {\r\n return {GetConanMeasureName(props.kindNoNameList)};\r\n } else {\r\n return (\r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n changeKind(e.target.value);\r\n }\r\n }}\r\n />\r\n \r\n );\r\n }\r\n };\r\n\r\n /**\r\n * 機器番号セル表示\r\n * @returns\r\n */\r\n const devNoCell = () => {\r\n if (IsConanAirPlc(props.target.PLCNo)) {\r\n let devNo = props.nameDevList.find((item) => item.DEV_INDEX === Number(props.target.MachineIndex))?.DEV_NO;\r\n return {devNo ?? ''};\r\n } else {\r\n return (\r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n changeMachineIdx(e.target.value);\r\n }\r\n }}\r\n />\r\n \r\n );\r\n }\r\n };\r\n /**\r\n * 項目名称セル表示\r\n * @returns\r\n */\r\n const itemNameCell = () => {\r\n if (IsConanAirPlc(props.target.PLCNo)) {\r\n let itemName = props.nameItemList.find((item) => item.ITM_NAME_NO === Number(props.target.ItemNameNo))?.ITM_NAME;\r\n return {itemName ?? ''};\r\n } else {\r\n return (\r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n changeItemNameNo(parseInt(e.target.value));\r\n } else if (typeof e.target.value === 'number') {\r\n changeItemNameNo(e.target.value);\r\n }\r\n }}\r\n />\r\n \r\n );\r\n }\r\n };\r\n\r\n /**\r\n * デジタル値\r\n * @returns\r\n */\r\n const digitalCell = () => {\r\n if (IsConanAirPlc(props.target.PLCNo) || IsPLCCalcSetting(props.target)) {\r\n return ;\r\n } else {\r\n return (\r\n \r\n \r\n \r\n \r\n {\r\n changeDUpper(val);\r\n }}\r\n />\r\n \r\n \r\n {\r\n changeDLower(val);\r\n }}\r\n />\r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n };\r\n /**\r\n * 工学値\r\n * @returns\r\n */\r\n const engineeringCell = () => {\r\n if (IsConanAirPlc(props.target.PLCNo) || IsPLCCalcSetting(props.target)) {\r\n return ;\r\n } else {\r\n return (\r\n \r\n \r\n \r\n \r\n {\r\n changeEUpper(val);\r\n }}\r\n />\r\n \r\n \r\n {\r\n changeELower(val);\r\n }}\r\n />\r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n };\r\n /**\r\n * 乗率\r\n * @returns\r\n */\r\n const mulCell = () => {\r\n if (IsConanAirPlc(props.target.PLCNo) || IsPLCCalcSetting(props.target)) {\r\n return ;\r\n } else {\r\n return (\r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n changeMul(parseInt(e.target.value));\r\n } else if (typeof e.target.value === 'number') {\r\n changeMul(e.target.value);\r\n }\r\n }}\r\n />\r\n \r\n );\r\n }\r\n };\r\n\r\n console.debug(['- 画面描画開始 -', items]);\r\n return (\r\n <>\r\n {}}\r\n onExited={(e) => {\r\n if (mode) {\r\n props.dialog.apply({ result: item });\r\n } else {\r\n props.dialog.cancel();\r\n }\r\n }}\r\n >\r\n {t('CollectSettingItemDialog.設定編集', '設定編集')}\r\n \r\n
\r\n \r\n \r\n \r\n {t('CollectGridHeader.実行', '実行')}\r\n {t('CollectGridHeader.PLC', 'PLC')}\r\n \r\n {t('CollectGridHeader.ユニット', 'ユニット')}\r\n
\r\n {t('CollectGridHeader.形式', '形式')}\r\n
\r\n {t('CollectGridHeader.AIカード', 'AIカード')}\r\n {t('CollectGridHeader.CH', 'CH')}\r\n {t('CollectGridHeader.計測種別', '計測種別')}\r\n {t('CollectGridHeader.機器番号', '機器番号')}\r\n {t('CollectGridHeader.機器名称', '機器名称')}\r\n {t('CollectGridHeader.項目名称', '項目名称')}\r\n \r\n {t('CollectGridHeader.ロギング周期', 'ロギング周期')}\r\n \r\n \r\n {t('CollectGridHeader.ロギング開始時刻', 'ロギング開始時刻')}\r\n \r\n {t('CollectGridHeader.単位', '単位')}\r\n \r\n {t('CollectGridHeader.判定値設定', '判定値設定')}\r\n \r\n\r\n \r\n {t('CollectGridHeader.アベレージング処理', 'アベレージング処理')}\r\n \r\n {/* \r\n {t('CollectGridHeader.エンベロープ処理', 'エンベロープ処理')}\r\n */}\r\n \r\n {t('CollectGridHeader.モータ起動状態', 'モータ起動状態')}\r\n
\r\n {t('CollectGridHeader.検出センサ指定', '検出センサ指定')}\r\n
\r\n \r\n {t('CollectGridHeader.回転周波数', '回転周波数')}\r\n
\r\n {t('CollectGridHeader.算出センサ', '算出センサ')}\r\n
\r\n \r\n
\r\n \r\n \r\n {t('CollectGridHeader.デジタル値', 'デジタル値')}\r\n \r\n \r\n \r\n {t('CollectGridHeader.上限値', '上限値')}\r\n {t('CollectGridHeader.下限値', '下限値')}\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n {t('CollectGridHeader.工学値', '工学値')}\r\n \r\n \r\n \r\n {t('CollectGridHeader.上限値', '上限値')}\r\n {t('CollectGridHeader.下限値', '下限値')}\r\n \r\n
\r\n
\r\n {t('CollectGridHeader.乗率', '乗率')}\r\n MEMO\r\n \r\n \r\n \r\n \r\n {\r\n changeExecute(chk);\r\n }}\r\n />\r\n \r\n {props.target.PLCNo}\r\n {props.target.UnitName}\r\n {props.target.AICardNo}\r\n {props.target.ChannelNo}\r\n {/* 計測種別 */}\r\n {mesureCell()}\r\n {/* 機器番号 */}\r\n {devNoCell()}\r\n {/* 機器名称 */}\r\n \r\n {props.nameDevList.find((item) => item.DEV_INDEX === Number(props.target.MachineIndex))?.DEV_NAME}\r\n \r\n {/* 項目名称 */}\r\n {itemNameCell()}\r\n {/* ロギング周期 */}\r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n changeLogPeriod(parseInt(e.target.value));\r\n }\r\n }}\r\n />\r\n \r\n {/* ロギング開始時刻 */}\r\n \r\n {\r\n changeStartTime(dayjs(e).toDate());\r\n }}\r\n defaultValue={dayjs(startTime).format('YYYY-MM-DD HH:mm:ss')}\r\n />\r\n \r\n {/* 単位*/}\r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n changeUnit(e.target.value);\r\n }\r\n }}\r\n />\r\n \r\n {/* 判定値設定ボタン*/}\r\n \r\n dispJudge()}\r\n disabled={!IsJudgeSetting(props.target)}\r\n >\r\n {t('CollectGridBody.変更', '変更')}\r\n \r\n \r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n changeAvg(parseInt(e.target.value));\r\n } else if (typeof e.target.value === 'number') {\r\n changeAvg(e.target.value);\r\n }\r\n }}\r\n />\r\n \r\n {/* \r\n changeEnvSav(chk)} />\r\n */}\r\n \r\n changeMotor(chk)} />\r\n \r\n \r\n changeRotClc(chk)} />\r\n \r\n {/* デジタル値*/}\r\n {digitalCell()}\r\n {/* 工学値*/}\r\n {engineeringCell()}\r\n {/* 乗率*/}\r\n {mulCell()}\r\n \r\n changeNote(e.target.value)}\r\n />\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n {\r\n console.debug(['- flgUpdate -', flgUpdate]);\r\n if (flgUpdate) {\r\n setMsgConfirm(t('CollectSettingItemDialog.設定を更新しますか?', '設定を更新しますか?'));\r\n confirmDlg\r\n .open()\r\n .apply((_) => {\r\n setIsOpen(false);\r\n setMode(true);\r\n })\r\n .cancel((_) => {});\r\n } else {\r\n setIsOpen(false);\r\n setMode(false);\r\n }\r\n }}\r\n >\r\n {t('CollectSettingItemDialog.設定', '設定')}\r\n \r\n {\r\n if (flgUpdate) {\r\n setMsgConfirm(\r\n t(\r\n 'CollectSettingItemDialog.編集したデータを破棄します。\\nよろしいですか?',\r\n '編集したデータを破棄します。\\nよろしいですか?'\r\n )\r\n );\r\n confirmDlg\r\n .open()\r\n .apply((resp) => {\r\n setIsOpen(false);\r\n setMode(false);\r\n })\r\n .cancel((_) => {});\r\n } else {\r\n setIsOpen(false);\r\n setMode(false);\r\n }\r\n }}\r\n >\r\n {t('CollectSettingItemDialog.キャンセル', 'キャンセル')}\r\n \r\n \r\n \r\n {jdgdlgElem}\r\n {confirm}\r\n setMessageDialogOpen(false)}\r\n title={showTitle}\r\n okText={'OK'}\r\n maxWidth={'sm'}\r\n >\r\n {showMessage}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default CollectSettingItemDialog;\r\n","import React, { useEffect, useState, useContext, useMemo, MouseEventHandler } from 'react';\r\nimport { Table, TableCell, TableRow } from '@material-ui/core';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport {\r\n GetKindNoNameSetType,\r\n GetNameItemSetType,\r\n GetLogIntSetType,\r\n GetmulItems,\r\n GetDataUnitType,\r\n PLCcollectSettingType,\r\n KIND_NO_NAME_SET,\r\n NAME_ITEM_SET,\r\n LOG_INT_SET,\r\n MulDataType,\r\n DATA_UNIT,\r\n GetConanMeasureName,\r\n} from './CollectSettingDefine';\r\nimport { NAME_DEV_SET, GetNameDevSetList } from '../../../../function/NameDevSetModel';\r\nimport dayjs from 'dayjs';\r\n\r\nimport { useTranslation, UseTranslationResponse } from 'react-i18next';\r\nimport StackCell, { CellSizeContainer } from '../../../atoms/Cell/StackCell';\r\nimport ItemComboBox, { ComboBoxItemType } from '../../../atoms/ComboBox/ItemComboBox';\r\nimport ItemComboBoxStr, { ComboBoxItemTypeS } from '../../../atoms/ComboBox/ItemComboBoxStr';\r\nimport { TFunction } from 'i18next';\r\nimport JudgeSettingDialog, { JudgeSettingDialogResponse } from '../JudgeSetting/JudgeSettingDialog';\r\nimport { useModal } from '../../../../function/useModal';\r\nimport CollectSettingItemDialog, { CollectSettingItemDialogResponse } from './CollectSettingItemDialog';\r\n\r\nimport { SpeedKind, MeasureHighKind } from '../../../../Constant';\r\n\r\ntype CollectGridBodyProps = {\r\n plcSettingList: PLCcollectSettingType[];\r\n isDispPLC: boolean;\r\n isOrderDevice: boolean;\r\n update: (target: PLCcollectSettingType, index: number) => void;\r\n updateStartTime: (devIndex: string, startTime: Date) => void;\r\n updateMotorSensor: (target: PLCcollectSettingType, index: number, chk: boolean) => boolean;\r\n updateRotClc: (target: PLCcollectSettingType, index: number, chk: boolean) => boolean;\r\n};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n '@global': {\r\n '.MuiTableCell-body': { color: 'inherit' },\r\n },\r\n tableHeader: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n borderCollapse: `collapse`,\r\n },\r\n fixColumn: {\r\n borderWidth: '0px',\r\n outlineWidth: '1px',\r\n outlineColor: '#dcdcdc',\r\n outlineStyle: 'solid',\r\n padding: '0px',\r\n paddingLeft: '5px',\r\n position: 'sticky',\r\n zIndex: 10,\r\n backgroundColor: 'white',\r\n },\r\n tableTd: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '0px',\r\n paddingLeft: '5px',\r\n borderCollapse: `collapse`,\r\n zIndex: 0,\r\n },\r\n table_no_border_td: {\r\n borderTop: '0px',\r\n borderBottom: '0px',\r\n borderLeft: '0px',\r\n borderRight: '1px',\r\n borderRightStyle: 'solid',\r\n borderRightColor: '#dcdcdc',\r\n padding: '0px',\r\n minWidth: '80px',\r\n borderCollapse: `collapse`,\r\n },\r\n textAlignRightCell: {\r\n textAlign: 'right',\r\n },\r\n textAlignCenterCell: {\r\n textAlign: 'center',\r\n },\r\n labelStyle: {\r\n fontSize: '12px',\r\n },\r\n //テキスト\r\n textField: {\r\n flexGrow: 1,\r\n height: '100%',\r\n width: '98%',\r\n border: 'none',\r\n padding: '0px',\r\n backgroundColor: 'transparent',\r\n },\r\n selectRow: {\r\n background: '#7fffd4',\r\n },\r\n })\r\n);\r\n\r\nconst CollectGridBody: React.FC = (props: CollectGridBodyProps) => {\r\n //console.debug(['CollectGridBody()', props]);\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n // const [plcSettingList, setPlcSettingList] = React.useState([]);\r\n const [kindNoNameList, setKindNoNameList] = React.useState([]);\r\n const [nameDevList, setNameDevList] = React.useState([]);\r\n const [nameItemList, setNameItemList] = React.useState([]);\r\n const [logIntList, setLogIntList] = React.useState([]);\r\n const [mulList, setMULList] = React.useState([]);\r\n const [dataUnitList, setDataUnitList] = React.useState([]);\r\n const [measCombos, setMeasCombos] = useState([]);\r\n const [devCombos, setDevCombos] = useState([]);\r\n const [itemCombos, setItemCombos] = useState([]);\r\n const [mulCombos, setMulCombos] = useState([]);\r\n const [unitCombos, setUnitCombos] = useState([]);\r\n const [logIntCombos, setLogIntCombos] = useState([]);\r\n const avgCombos: ComboBoxItemType[] = [\r\n { index: 0, name: t('CollectGridBody.加算平均', '加算平均') },\r\n { index: 1, name: t('CollectGridBody.指数平均', '指数平均') },\r\n { index: 2, name: t('CollectGridBody.ピークホールド', 'ピークホールド') },\r\n ];\r\n const [plcNo, setPlcNo] = useState(0);\r\n const [aiCard, setAiCard] = useState(0);\r\n const [aiCh, setAiCh] = useState(0);\r\n const [cursorIndex, setCursorIndex] = useState(-1);\r\n\r\n console.debug('MeasureGridBody');\r\n console.debug(props.plcSettingList.length);\r\n\r\n useEffect(() => {\r\n var a = GetKindNoNameSetType();\r\n var b = GetNameDevSetList();\r\n var c = GetNameItemSetType();\r\n var d = GetLogIntSetType();\r\n var e = GetmulItems();\r\n var f = GetDataUnitType();\r\n\r\n Promise.all([a, b, c, d, e, f]).then((ret) => {\r\n //console.debug(['Promise.all : ret', ret]);\r\n console.debug(ret[0]);\r\n console.debug(ret[1]);\r\n console.debug(ret[2]);\r\n console.debug(ret[3]);\r\n console.debug(ret[4]);\r\n console.debug(ret[5]);\r\n\r\n setKindNoNameList(ret[0]);\r\n setNameDevList(ret[1]);\r\n setNameItemList(ret[2]);\r\n setLogIntList(ret[3]);\r\n setMULList(ret[4]);\r\n setDataUnitList(ret[5]);\r\n\r\n //振動Row取得\r\n //コナンエアの場合SPEED2の振動と同じ名前を付ける\r\n let conaMesName = GetConanMeasureName(ret[0]);\r\n setMeasCombos(\r\n ret[0].map((ci) => {\r\n if (ci.SPEED === SpeedKind.SPEED_CONAN) {\r\n return { key: `${ci.NAME_NO}_${ci.SPEED}`, name: conaMesName };\r\n } else {\r\n return { key: `${ci.NAME_NO}_${ci.SPEED}`, name: ci.MES_NAME };\r\n }\r\n })\r\n );\r\n //機器番号 実装のみ選択可\r\n setDevCombos(\r\n ret[1]\r\n .filter((ci) => ci.EST === 1)\r\n .map((ci) => {\r\n return { key: `${ci.DEV_INDEX}`, name: ci.DEV_NO };\r\n })\r\n .concat({ key: '0', name: '-' })\r\n );\r\n //項目名称 実装のみ選択可\r\n setItemCombos(\r\n ret[2]\r\n .filter((ci) => ci.EST === 1)\r\n .map((ci) => {\r\n return { key: `${ci.ITM_NAME_NO}`, name: ci.ITM_NAME };\r\n })\r\n );\r\n setLogIntCombos(\r\n ret[3].map((ci) => {\r\n return { key: `${ci.LOG_INT}`, name: ci.DSP_STR, tag: ci };\r\n })\r\n );\r\n setMulCombos(\r\n ret[4].map((ci) => {\r\n return { key: `${ci.code}`, name: ci.value };\r\n })\r\n );\r\n setUnitCombos(\r\n ret[5].map((ci) => {\r\n return { key: ci.UNIT_STR, name: ci.UNIT_STR };\r\n })\r\n );\r\n });\r\n }, []);\r\n\r\n const updateCursor = (index: number) => {\r\n setCursorIndex(index);\r\n };\r\n\r\n // \r\n return (\r\n \r\n {props.plcSettingList?.map((row, idx) => (\r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\ntype CollectGridRowProps = {\r\n item: PLCcollectSettingType;\r\n index: number;\r\n selectIndex: number;\r\n isDispPLC: boolean;\r\n kindNoNameList: KIND_NO_NAME_SET[];\r\n nameDevList: NAME_DEV_SET[];\r\n nameItemList: NAME_ITEM_SET[];\r\n logIntList: LOG_INT_SET[];\r\n mulList: MulDataType[];\r\n dataUnitList: DATA_UNIT[];\r\n measCombos: ComboBoxItemTypeS[];\r\n devCombos: ComboBoxItemTypeS[];\r\n itemCombos: ComboBoxItemTypeS[];\r\n mulCombos: ComboBoxItemTypeS[];\r\n unitCombos: ComboBoxItemTypeS[];\r\n logIntCombos: ComboBoxItemTypeS[];\r\n avgCombos: ComboBoxItemType[];\r\n t: TFunction;\r\n update: (target: PLCcollectSettingType, index: number) => void;\r\n updateStartTime: (devIndex: string, startTime: Date) => void;\r\n updateMotorSensor: (target: PLCcollectSettingType, index: number, chk: boolean) => boolean;\r\n updateRotClc: (target: PLCcollectSettingType, index: number, chk: boolean) => boolean;\r\n updateCursor: (index: number) => void;\r\n};\r\n\r\nconst CollectGridRow: React.FC = (props) => {\r\n //console.debug(['CollectGridRow()', props]);\r\n const classes = useStyles();\r\n\r\n const [forceUpd, setForceUpd] = useState(0);\r\n const [item, setItem] = useState(props.item);\r\n const [selectIndex, setSelectIndex] = useState(-1);\r\n\r\n const cnt = new CellSizeContainer();\r\n\r\n useEffect(() => {\r\n // setStartTime(dayjs(props.item.LoggingStartTime).format('YYYY-MM-DD HH:mm:ss'));\r\n }, [props.item.LoggingStartTime]);\r\n\r\n useEffect(() => {\r\n console.log([`CollectGridRow - ${props.item.PLCNo}`, props.item]);\r\n }, [props.item]);\r\n\r\n const [flgEdit, editDlg] = useModal();\r\n const editdlgElem = flgEdit ? (\r\n \r\n ) : null;\r\n\r\n const doubleClick = () => {\r\n console.log('mouse dbl click');\r\n editDlg.open().apply((resp) => {\r\n props.update(resp.result, props.index);\r\n props.updateStartTime(resp.result.MachineIndex, resp.result.LoggingStartTime);\r\n setItem(resp.result);\r\n });\r\n };\r\n\r\n const selectRow = () => {\r\n props.updateCursor(props.index);\r\n };\r\n\r\n const lineAttr = props.index == props.selectIndex ? classes.selectRow : '';\r\n\r\n const fix1 = (\r\n \r\n {props.item.PLCNo}\r\n \r\n );\r\n const fix2 = (\r\n \r\n {props.item.UnitName}\r\n \r\n );\r\n const fix3 = (\r\n \r\n {props.item.AICardNo}\r\n \r\n );\r\n const fix4 = (\r\n \r\n {props.item.ChannelNo}\r\n \r\n );\r\n\r\n const colDig = (\r\n \r\n \r\n \r\n \r\n {item.NameNo != 0 ? item.DigitalValueUpper : ''}\r\n \r\n \r\n {item.NameNo != 0 ? item.DigitalValueLower : ''}\r\n \r\n \r\n
\r\n
\r\n );\r\n const colEng = (\r\n \r\n \r\n \r\n \r\n {item.NameNo != 0 ? item.EngineeringValueUpper : ''}\r\n \r\n \r\n {item.NameNo != 0 ? item.EngineeringValueLower : ''}\r\n \r\n \r\n
\r\n
\r\n );\r\n const colMul = (\r\n \r\n {item.NameNo != 0 ? props.mulCombos.find((ml) => ml.key == item.Mul.toString())?.name : ''}\r\n \r\n );\r\n\r\n return (\r\n <>\r\n \r\n \r\n {props.index + 1}\r\n \r\n \r\n {/* */}\r\n
{item.IsExecute == true ? '✔' : ''}
\r\n \r\n {props.isDispPLC ? fix1 : null}\r\n {props.isDispPLC ? fix2 : null}\r\n {props.isDispPLC ? fix3 : null}\r\n {props.isDispPLC ? fix4 : null}\r\n \r\n {props.measCombos.find((d) => d.key == `${item.NameNo}_${item.Speed}`)?.name}\r\n \r\n \r\n {item.NameNo != 0 ? props.devCombos.find((d) => d.key === item.MachineIndex)?.name : ''}\r\n \r\n \r\n {item.NameNo != 0 ? props.nameDevList.find((it) => it.DEV_INDEX === Number(item.MachineIndex))?.DEV_NAME : ''}\r\n \r\n \r\n {item.NameNo != 0 ? props.itemCombos.find((it) => it.key === item.ItemNameNo.toString())?.name : ''}\r\n \r\n \r\n {item.NameNo != 0\r\n ? props.logIntCombos.find((lg) => {\r\n let v = lg.tag as LOG_INT_SET;\r\n if (v) {\r\n return v.SPEED === item.Speed && v.LOG_INT === item.LoggingPeriodMinute;\r\n } else {\r\n return false;\r\n }\r\n })?.name\r\n : ''}\r\n \r\n \r\n {item.NameNo == 0 || item.LoggingStartTime == undefined\r\n ? ''\r\n : dayjs(item.LoggingStartTime).format('YYYY-MM-DD HH:mm:ss')}\r\n \r\n \r\n {item.NameNo != 0 ? props.unitCombos.find((un) => un.key === item.UnitSymbol)?.name : ''}\r\n \r\n {/* \r\n {props.t('CollectGridBody.変更', '変更')}\r\n */}\r\n \r\n {item.NameNo != 0 ? props.avgCombos.find((av) => av.index === item.AvgPrc)?.name : ''}\r\n \r\n {/* \r\n
{item.NameNo != 0 && item.EnvSav == true ? '✔' : ''}
\r\n \r\n */}\r\n \r\n
{item.NameNo != 0 && item.StartDet == 1 ? '✔' : ''}
\r\n {/* */}\r\n \r\n \r\n
{item.NameNo != 0 && item.RotClc == true ? '✔' : ''}
\r\n {/* */}\r\n \r\n {props.isDispPLC ? colDig : null}\r\n {props.isDispPLC ? colEng : null}\r\n {props.isDispPLC ? colMul : null}\r\n \r\n {item.NameNo != 0 ? item.Note : ''}\r\n \r\n
\r\n {editdlgElem}\r\n \r\n );\r\n};\r\n\r\nexport default CollectGridBody;\r\n","import React, { useEffect, useState, useContext } from 'react';\r\nimport Button from '@material-ui/core/Button';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport Radio, { RadioProps } from '@material-ui/core/Radio';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { AppContext } from '../../../../App';\r\n\r\nconst buttonStyle = {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n marginLeft: '4px',\r\n};\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableHeader: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n borderCollapse: `collapse`,\r\n },\r\n tableTd: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '0px',\r\n textAlign: 'center',\r\n },\r\n colTime: {\r\n textAlign: 'center',\r\n },\r\n })\r\n);\r\n\r\ntype Props = {\r\n onClickSaveButton: () => void;\r\n onClickCancelButton: () => void;\r\n onClickAllStartTimeSetButton: () => void;\r\n onChangeSortItem: (value: string) => void;\r\n onChangePLCDisp: (value: string) => void;\r\n};\r\n\r\nconst CollectSettingFooter: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [sortItem, setSortItem] = React.useState('m');\r\n const [plcDisp, setPLCDisp] = React.useState('e');\r\n const { login } = useContext(AppContext);\r\n\r\n const changeSortItem = (event: React.ChangeEvent) => {\r\n setSortItem(event.target.value);\r\n props.onChangeSortItem(event.target.value);\r\n };\r\n const changePLCDispItem = (event: React.ChangeEvent) => {\r\n setPLCDisp(event.target.value);\r\n props.onChangePLCDisp(event.target.value);\r\n };\r\n\r\n return (\r\n \r\n {login.IsIoT ? (\r\n <>\r\n \r\n props.onClickSaveButton()}\r\n >\r\n {t('CollectSettingFooter.保存', '保存')}\r\n \r\n \r\n \r\n props.onClickCancelButton()}\r\n >\r\n {t('CollectSettingFooter.中止', '中止')}\r\n \r\n \r\n ) : (\r\n <>\r\n \r\n props.onClickSaveButton()}\r\n >\r\n {t('CollectSettingFooter.保存', '保存')}\r\n \r\n \r\n \r\n props.onClickCancelButton()}\r\n >\r\n {t('CollectSettingFooter.中止', '中止')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {t('CollectSettingFooter.並び順', '並び順')}\r\n \r\n \r\n {t('CollectSettingFooter.機器', '機器')}\r\n \r\n \r\n \r\n PLC\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n {t('CollectSettingFooter.PLC情報', 'PLC情報')}\r\n \r\n \r\n {t('CollectSettingFooter.非表示', '非表示')}\r\n \r\n \r\n \r\n {t('CollectSettingFooter.表示', '表示')}\r\n \r\n \r\n \r\n
\r\n
\r\n ) }\r\n \r\n );\r\n};\r\n\r\nexport default CollectSettingFooter;\r\n","import React, { useEffect, useState, useContext } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { useTranslation } from 'react-i18next';\r\nimport StackCell, { CellSizeContainer } from '../../../atoms/Cell/StackCell';\r\n\r\ntype CollectGridHeaderIoTProps = {\r\n //isDispPLC: boolean;\r\n};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableHeader: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n padding: '1px',\r\n minWidth: '80px',\r\n zIndex: 10,\r\n },\r\n fixHeader: {\r\n color: 'white',\r\n borderWidth: '0px',\r\n backgroundColor: 'gray',\r\n outlineWidth: '1px',\r\n outlineColor: '#dcdcdc',\r\n outlineStyle: 'solid',\r\n padding: 0,\r\n margin: 0,\r\n textAlign: 'center',\r\n position: 'sticky',\r\n zIndex: 20,\r\n minWidth: '80px',\r\n borderCollapse: `collapse`,\r\n },\r\n })\r\n);\r\n\r\nconst CollectGridHeaderIoT: React.FC = (props: CollectGridHeaderIoTProps) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const cnt = new CellSizeContainer();\r\n\r\n const fixNo = (\r\n \r\n No\r\n \r\n );\r\n const fix0 = (\r\n \r\n {t('CollectGridHeader.実行', '実行')}\r\n \r\n );\r\n const fix1 = null;\r\n const fix2 = null;\r\n const fix3 = (\r\n \r\n {t('CollectGridHeader.項目名称', '項目名称')}\r\n \r\n );\r\n const fix4 = (\r\n \r\n {t('CollectGridHeader.CH', 'CH')}\r\n \r\n );\r\n const fix5 = (\r\n \r\n {t('CollectGridHeader.信号種別', '信号種別')}\r\n \r\n );\r\n const fix6 = (\r\n \r\n {t('CollectGridHeader.機器番号', '機器番号')}\r\n \r\n );\r\n const fix7 = (\r\n \r\n {t('CollectGridHeader.機器名称', '機器名称')}\r\n \r\n );\r\n\r\n const fix8 = (\r\n \r\n {t('CollectGridHeader.ユニット', 'ユニット')}\r\n
\r\n {t('CollectGridHeader.形式', '形式')}\r\n
\r\n );\r\n\r\n const colDig = (\r\n \r\n \r\n \r\n \r\n {t('CollectGridHeader.デジタル値', 'デジタル値')}\r\n \r\n \r\n \r\n {t('CollectGridHeader.上限値', '上限値')}\r\n {t('CollectGridHeader.下限値', '下限値')}\r\n \r\n
\r\n
\r\n );\r\n const colEng = (\r\n \r\n \r\n \r\n \r\n {t('CollectGridHeader.工学値', '工学値')}\r\n \r\n \r\n \r\n {t('CollectGridHeader.上限値', '上限値')}\r\n {t('CollectGridHeader.下限値', '下限値')}\r\n \r\n
\r\n
\r\n );\r\n const colMul = (\r\n \r\n {t('CollectGridHeader.乗率', '乗率')}\r\n \r\n );\r\n\r\n return (\r\n \r\n {fixNo}\r\n {fix0}\r\n {fix1}\r\n {fix2}\r\n {fix6}\r\n {fix7}\r\n {fix4}\r\n {fix8}\r\n {fix5}\r\n {fix3}\r\n {colDig}\r\n {colEng}\r\n {colMul}\r\n \r\n {t('CollectGridHeader.単位', '単位')}\r\n \r\n {/* {t('CollectGridHeader.判定値設定','判定値設定')} */}\r\n {/* \r\n {t('CollectGridHeader.温度', '温度')}\r\n
\r\n {t('CollectGridHeader.上限異常', '上限異常')}\r\n
\r\n \r\n {t('CollectGridHeader.温度', '温度')}\r\n
\r\n {t('CollectGridHeader.上上限異常', '上上限異常')}\r\n
*/}\r\n\r\n \r\n {t('CollectGridHeader.アベレージング処理', 'アベレージング処理')}\r\n \r\n {/* \r\n {t('CollectGridHeader.エンベロープ処理', 'エンベロープ処理')}\r\n */}\r\n \r\n {t('CollectGridHeader.モータ起動状態', 'モータ起動状態')}\r\n
\r\n {t('CollectGridHeader.検出センサ指定', '検出センサ指定')}\r\n
\r\n \r\n {t('CollectGridHeader.回転周波数', '回転周波数')}\r\n
\r\n {t('CollectGridHeader.算出センサ', '算出センサ')}\r\n
\r\n MEMO\r\n
\r\n );\r\n};\r\n\r\nexport default CollectGridHeaderIoT;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { DialogAction, useModal } from '../../../../function/useModal';\r\nimport { Button, Dialog, DialogTitle, DialogContent, DialogActions, Typography } from '@material-ui/core';\r\nimport { JudgeSettingItem } from '../JudgeSetting/JudgeSetting';\r\nimport ItemComboBox, { ComboBoxItemType } from '../../../atoms/ComboBox/ItemComboBox';\r\nimport ItemComboBoxStr, { ComboBoxItemTypeS } from '../../../atoms/ComboBox/ItemComboBoxStr';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { Checkbox, TextField } from '@material-ui/core';\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../../atoms/Dialog/ConfirmDialog';\r\nimport { useTranslation } from 'react-i18next';\r\nimport SimpleDialog from '../../../atoms/Dialog/SimpleDialog';\r\nimport {\r\n PLCcollectSettingType,\r\n KIND_NO_NAME_SET,\r\n NAME_ITEM_SET,\r\n LOG_INT_SET,\r\n MulDataType,\r\n DATA_UNIT,\r\n GetConanMeasureName,\r\n IsIoTZeroGyakuSetting,\r\n} from './CollectSettingDefine';\r\nimport { NAME_DEV_SET } from '../../../../function/NameDevSetModel';\r\nimport dayjs from 'dayjs';\r\nimport JudgeSettingDialog, { JudgeSettingDialogResponse } from '../JudgeSetting/JudgeSettingDialog';\r\nimport NumericEntry_inputEx from '../../../atoms/Input/NumericEntry_inputEx';\r\nimport NumericFormatEntry_input from '../../../atoms/Input/NumericFormatEntry_input';\r\nimport { SpeedKind, MeasureHighKind } from '../../../../Constant';\r\nimport { IsConanAirPlc } from '../../../../function/PlcNoModel';\r\n\r\ntype CollectSettingItemIoTDialogProps = {\r\n dialog: DialogAction;\r\n target: PLCcollectSettingType;\r\n index: number;\r\n kindNoNameList: KIND_NO_NAME_SET[];\r\n nameDevList: NAME_DEV_SET[];\r\n nameItemList: NAME_ITEM_SET[];\r\n logIntList: LOG_INT_SET[];\r\n mulList: MulDataType[];\r\n dataUnitList: DATA_UNIT[];\r\n measCombos: ComboBoxItemTypeS[];\r\n devCombos: ComboBoxItemTypeS[];\r\n itemCombos: ComboBoxItemTypeS[];\r\n mulCombos: ComboBoxItemTypeS[];\r\n unitCombos: ComboBoxItemTypeS[];\r\n logIntCombos: ComboBoxItemTypeS[];\r\n avgCombos: ComboBoxItemType[];\r\n updateMotorSensor: (target: PLCcollectSettingType, index: number, chk: boolean) => boolean;\r\n updateRotClc: (target: PLCcollectSettingType, index: number, chk: boolean) => boolean;\r\n};\r\n\r\nexport type CollectSettingItemIoTDialogResponse = {\r\n result: PLCcollectSettingType;\r\n};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 300px)',\r\n },\r\n tableScroll: {\r\n overflowX: 'scroll',\r\n overflowY: 'auto',\r\n },\r\n tableHeader: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n padding: '1px',\r\n minWidth: '120px',\r\n borderCollapse: `collapse`,\r\n },\r\n textAlignRightCell: {\r\n textAlign: 'right',\r\n },\r\n textAlignCenterCell: {\r\n textAlign: 'center',\r\n },\r\n tableTd: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '0px',\r\n paddingLeft: '5px',\r\n borderCollapse: `collapse`,\r\n zIndex: 0,\r\n textAlign: 'center',\r\n },\r\n table_no_border_td: {\r\n borderTop: '0px',\r\n borderBottom: '0px',\r\n borderLeft: '0px',\r\n borderRight: '1px',\r\n borderRightStyle: 'solid',\r\n borderRightColor: '#dcdcdc',\r\n padding: '0px',\r\n minWidth: '80px',\r\n height: '30px',\r\n borderCollapse: `collapse`,\r\n },\r\n table_td_noValue: {\r\n borderTop: '0px',\r\n borderBottom: '0px',\r\n borderLeft: '0px',\r\n borderRight: '1px',\r\n borderRightStyle: 'solid',\r\n borderRightColor: '#dcdcdc',\r\n padding: '0px',\r\n height: '30px',\r\n borderCollapse: `collapse`,\r\n background: 'silver',\r\n },\r\n button: {\r\n width: '150px',\r\n },\r\n labelStyle: {\r\n fontSize: '12px',\r\n },\r\n textField: {\r\n flexGrow: 1,\r\n height: '100%',\r\n width: '98%',\r\n borderBottom: '1px solid #000000',\r\n borderTop: 'none',\r\n borderLeft: 'none',\r\n borderRight: 'none',\r\n border: 'none',\r\n padding: '0px',\r\n backgroundColor: 'transparent',\r\n },\r\n // buttonAutoFreqSet: {\r\n // width: '200px',\r\n // },\r\n })\r\n);\r\nconst IsItemRST = (itemNo: number): boolean => {\r\n return itemNo >= 3 && itemNo <= 5;\r\n};\r\nconst IsItemVibration = (itemNo: number): boolean => {\r\n return itemNo == 1 || itemNo == 2 || itemNo == 7 || itemNo == 8;\r\n};\r\nconst IsInverter = (devs: NAME_DEV_SET[], devIndex: string): boolean => {\r\n const dno = parseInt(devIndex);\r\n const nds = devs.find((dv) => dv.DEV_INDEX === dno);\r\n if (nds) {\r\n return nds.INV_DRV_ON > 0;\r\n }\r\n return false;\r\n};\r\n\r\nconst CollectSettingItemIoTDialog: React.FC = (\r\n props: CollectSettingItemIoTDialogProps\r\n) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [isOpen, setIsOpen] = useState(true);\r\n const [mode, setMode] = useState(true);\r\n const [items, setItems] = useState([]);\r\n const [item, setItem] = useState({ ...props.target });\r\n\r\n const [isExecute, setIsExecute] = useState(props.target.IsExecute);\r\n const [kind, setKind] = useState(`${props.target.NameNo}_${props.target.Speed}`);\r\n const [machineIdx, setMachineIdx] = useState(props.target.MachineIndex);\r\n const [itemNameNo, setItemNameNo] = useState(props.target.ItemNameNo);\r\n const [logPeriod, setLogPeriod] = useState(props.target.LoggingPeriodMinute);\r\n const [startTime, setStartTime] = useState(\r\n props.target.LoggingStartTime == undefined ? '' : dayjs(props.target.LoggingStartTime).format('YYYY-MM-DD HH:mm:ss')\r\n );\r\n const [dUpper, setDUpeer] = useState(parseFloat(props.target.DigitalValueUpper));\r\n const [dLower, setDLower] = useState(parseFloat(props.target.DigitalValueLower));\r\n const [eUpper, setEUpeer] = useState(parseFloat(props.target.EngineeringValueUpper));\r\n const [eLower, setELower] = useState(parseFloat(props.target.EngineeringValueLower));\r\n const [rTUpper, setRTUpper] = useState(parseFloat(props.target.RealtimeTrendValueUpper));\r\n const [rTUpperUpper, setRTUpperUpper] = useState(parseFloat(props.target.RealtimeTrendValueUpperUpper));\r\n const [mul, setMul] = useState(props.target.Mul);\r\n const [unit, setUnit] = useState(props.target.UnitSymbol);\r\n const [isMotor, setIsMotor] = useState(props.target.StartDet === 1);\r\n const [avg, setAvg] = useState(props.target.AvgPrc);\r\n const [isEnvSav, setIsEnvSav] = useState(props.target.EnvSav);\r\n const [isRotClc, setIsRotClc] = useState(props.target.RotClc);\r\n const [note, setNote] = useState(props.target.Note);\r\n\r\n const measSubCombos = props.measCombos\r\n .filter((cmb) => {\r\n return cmb.key.endsWith(props.target.Speed.toString());\r\n })\r\n .concat({ key: `0_${props.target.Speed}`, name: '-' });\r\n\r\n const [flgJdg, jdgDlg] = useModal();\r\n\r\n const [jdgCombos, setJdgCombos] = useState([]);\r\n const [clcCombos, setClcCombos] = useState([]);\r\n const [almCombos, setAlmCombos] = useState([]);\r\n\r\n const [flgUpdate, setFlgUpdate] = useState(false);\r\n const [flgConfirm, confirmDlg] = useModal();\r\n const [msgConfirm, setMsgConfirm] = useState();\r\n\r\n //APIレスポンスダイアログ\r\n const [messageDialogOpen, setMessageDialogOpen] = React.useState(false);\r\n const [showTitle, setShowTitle] = React.useState('');\r\n const [showMessage, setShowMessage] = React.useState('');\r\n\r\n const changeExecute = (exec: boolean) => {\r\n setItem({ ...item, IsExecute: exec, isIotEdit: true });\r\n setIsExecute(exec);\r\n setFlgUpdate(true);\r\n };\r\n const changeKind = (kind: string) => {\r\n const prm = kind.split('_');\r\n setItem({ ...item, MeasureKindNo: prm[0], NameNo: parseInt(prm[0]), Speed: parseInt(prm[1]) });\r\n // item.MeasureKindNo = prm[0];\r\n // item.NameNo = parseInt(prm[0]);\r\n // item.Speed = parseInt(prm[1]);\r\n setKind(kind);\r\n setFlgUpdate(true);\r\n };\r\n const changeMachineIdx = (midx: string) => {\r\n setMsgConfirm(\r\n t(\r\n 'CollectSettingItemDialog.選択したタグの情報をすべて削除',\r\n '選択したタグの情報をすべて削除しますがよろしいですか?'\r\n )\r\n );\r\n confirmDlg\r\n .open()\r\n .apply((_) => {\r\n setItem({\r\n ...item,\r\n MachineIndex: midx,\r\n DigitalValueUpper: '0',\r\n DigitalValueLower: '0',\r\n EngineeringValueUpper: '0',\r\n EngineeringValueLower: '0',\r\n Mul: 0,\r\n UnitSymbol: '',\r\n RealtimeTrendValueUpper: '0',\r\n RealtimeTrendValueUpperUpper: '0',\r\n AvgPrc: 0,\r\n EnvSav: false,\r\n Note: '',\r\n });\r\n setMachineIdx(midx);\r\n setDUpeer(0);\r\n setDLower(0);\r\n setEUpeer(0);\r\n setELower(0);\r\n setMul(0);\r\n setUnit('');\r\n // setIsMotor(false);\r\n setRTUpper(0);\r\n setRTUpperUpper(0);\r\n setAvg(0);\r\n setIsEnvSav(false);\r\n setIsRotClc(false);\r\n setNote('');\r\n setFlgUpdate(true);\r\n })\r\n .cancel((_) => { });\r\n };\r\n const changeItemNameNo = (ino: number) => {\r\n setItem({ ...item, ItemNameNo: ino });\r\n // item.ItemNameNo = ino;\r\n setItemNameNo(ino);\r\n setFlgUpdate(true);\r\n };\r\n // const changeLogPeriod = (period: number) => {\r\n // setItem({...item, LoggingPeriodMinute: period});\r\n // // item.LoggingPeriodMinute = period;\r\n // setLogPeriod(period);\r\n // setFlgUpdate(true);\r\n // };\r\n // const changeStartTime = (time: Date) => {\r\n // setItem({...item, LoggingStartTime:dayjs(time).toDate()});\r\n // // item.LoggingStartTime = dayjs(time).toDate();\r\n // setStartTime(dayjs(time).format('YYYY-MM-DD HH:mm:ss'));\r\n // setFlgUpdate(true);\r\n // };\r\n const changeDUpper = (val: number) => {\r\n setItem({ ...item, DigitalValueUpper: val.toString() });\r\n // item.DigitalValueUpper = val.toString();\r\n setDUpeer(val);\r\n setFlgUpdate(true);\r\n };\r\n const changeDLower = (val: number) => {\r\n setItem({ ...item, DigitalValueLower: val.toString() });\r\n // item.DigitalValueLower = val.toString();\r\n setDLower(val);\r\n setFlgUpdate(true);\r\n };\r\n const changeEUpper = (val: number) => {\r\n setItem({ ...item, EngineeringValueUpper: val.toString() });\r\n // item.EngineeringValueUpper = val.toString();\r\n setEUpeer(val);\r\n setFlgUpdate(true);\r\n };\r\n const changeELower = (val: number) => {\r\n setItem({ ...item, EngineeringValueLower: val.toString() });\r\n // item.EngineeringValueLower = val.toString();\r\n setELower(val);\r\n setFlgUpdate(true);\r\n };\r\n const changeRTUpper = (val: number) => {\r\n setItem({ ...item, RealtimeTrendValueUpper: val.toString() });\r\n // item.RealtimeTrendValueUpper = val.toString();\r\n setRTUpper(val);\r\n setFlgUpdate(true);\r\n };\r\n const changeRTUpperUpper = (val: number) => {\r\n setItem({ ...item, RealtimeTrendValueUpperUpper: val.toString() });\r\n // item.RealtimeTrendValueUpperUpper = val.toString();\r\n setRTUpperUpper(val);\r\n setFlgUpdate(true);\r\n };\r\n const changeMul = (val: number) => {\r\n setItem({ ...item, Mul: val });\r\n // item.Mul = val;\r\n setMul(val);\r\n setFlgUpdate(true);\r\n };\r\n const changeUnit = (val: string) => {\r\n setItem({ ...item, UnitSymbol: val });\r\n // item.UnitSymbol = val;\r\n setUnit(val);\r\n setFlgUpdate(true);\r\n };\r\n /**\r\n * モータ起動状態検出センサ指定チェック\r\n * @param chk\r\n */\r\n const changeMotor = (chk: boolean) => {\r\n if (chk) {\r\n if (IsItemRST(item.ItemNameNo)) {\r\n if (props.updateMotorSensor(item, props.index, chk)) {\r\n setItem({ ...item, StartDet: 1 });\r\n setIsMotor(true);\r\n setFlgUpdate(true);\r\n }\r\n }\r\n } else {\r\n setItem({ ...item, StartDet: 0 });\r\n setIsMotor(false);\r\n setFlgUpdate(true);\r\n }\r\n };\r\n const changeAvg = (val: number) => {\r\n setItem({ ...item, AvgPrc: val });\r\n // item.AvgPrc = val;\r\n setAvg(val);\r\n setFlgUpdate(true);\r\n };\r\n /**\r\n * エンベロープ処理チェック\r\n * @param chk\r\n */\r\n // const changeEnvSav = (chk: boolean) => {\r\n // setFlgUpdate(true);\r\n // if (chk) {\r\n // if (IsItemVibration(item.ItemNameNo)) {\r\n // setItem({ ...item, EnvSav: chk });\r\n // setIsEnvSav(chk);\r\n // setFlgUpdate(true);\r\n // }\r\n // } else {\r\n // setItem({ ...item, EnvSav: chk });\r\n // setIsEnvSav(chk);\r\n // setFlgUpdate(true);\r\n // }\r\n // };\r\n /**\r\n * 回転周波数算出センサチェック\r\n * @param chk\r\n */\r\n const changeRotClc = (chk: boolean) => {\r\n if (chk) {\r\n if (IsItemRST(item.ItemNameNo)) {\r\n if (IsInverter(props.nameDevList, item.MachineIndex)) {\r\n if (props.updateRotClc(item, props.index, chk)) {\r\n setItem({ ...item, RotClc: chk });\r\n setIsRotClc(chk);\r\n setFlgUpdate(true);\r\n }\r\n }\r\n }\r\n } else {\r\n props.updateRotClc(item, props.index, chk);\r\n setItem({ ...item, RotClc: chk });\r\n setIsRotClc(chk);\r\n setFlgUpdate(true);\r\n }\r\n };\r\n const changeNote = (text: string) => {\r\n setItem({ ...item, Note: text });\r\n // item.Note = text;\r\n setNote(text);\r\n setFlgUpdate(true);\r\n };\r\n const dispJudge = () => {\r\n jdgDlg\r\n .open()\r\n .apply((resp) => { })\r\n .cancel((resp) => { });\r\n };\r\n /**\r\n * 速度・変位判定マスク変更event\r\n * @param text\r\n */\r\n const changeDspMskOn = (value: number) => {\r\n console.debug(['changeDspMskOn', value]);\r\n setItem({ ...item, DispMaskOn: value });\r\n setFlgUpdate(true);\r\n };\r\n\r\n const jdgdlgElem = flgJdg ? (\r\n \r\n ) : null;\r\n\r\n const confirm = flgConfirm ? (\r\n \r\n ) : null;\r\n\r\n /**\r\n * 計測種別セル表示\r\n * @returns\r\n */\r\n const mesureCell = () => {\r\n if (IsConanAirPlc(props.target.PLCNo)) {\r\n return {GetConanMeasureName(props.kindNoNameList)};\r\n }\r\n else if (IsIoTZeroGyakuSetting(props.target)) {\r\n return {measSubCombos.find((row) => row.key === kind)?.name ?? \"\"}\r\n }\r\n else {\r\n return (\r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n changeKind(e.target.value);\r\n }\r\n }}\r\n />\r\n \r\n );\r\n }\r\n };\r\n\r\n /**\r\n * 機器番号セル表示\r\n * @returns\r\n */\r\n const devNoCell = () => {\r\n let devNo = props.nameDevList.find((item) => item.DEV_INDEX === Number(props.target.MachineIndex))?.DEV_NO;\r\n return {devNo ?? ''};\r\n };\r\n\r\n /**\r\n * 項目名称セル表示\r\n * @returns\r\n */\r\n const itemNameCell = () => {\r\n if (IsConanAirPlc(props.target.PLCNo)) {\r\n let itemName = props.nameItemList.find((item) => item.ITM_NAME_NO === Number(props.target.ItemNameNo))?.ITM_NAME;\r\n return {itemName ?? ''};\r\n } else if (IsIoTZeroGyakuSetting(props.target)) {\r\n return {props.itemCombos.find((row) => row.key === itemNameNo.toString())?.name ?? \"\"}\r\n }\r\n else {\r\n return (\r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n changeItemNameNo(parseInt(e.target.value));\r\n } else if (typeof e.target.value === 'number') {\r\n changeItemNameNo(e.target.value);\r\n }\r\n }}\r\n />\r\n \r\n );\r\n }\r\n };\r\n /**\r\n * デジタル値\r\n * @returns\r\n */\r\n const digitalCell = () => {\r\n if (IsConanAirPlc(props.target.PLCNo) || IsIoTZeroGyakuSetting(props.target)) {\r\n return ;\r\n } else {\r\n return (\r\n \r\n \r\n \r\n \r\n {\r\n changeDUpper(val);\r\n }}\r\n />\r\n \r\n \r\n {\r\n changeDLower(val);\r\n }}\r\n />\r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n };\r\n /**\r\n * 工学値\r\n * @returns\r\n */\r\n const engineeringCell = () => {\r\n if (IsConanAirPlc(props.target.PLCNo) || IsIoTZeroGyakuSetting(props.target)) {\r\n return ;\r\n } else {\r\n return (\r\n \r\n \r\n \r\n \r\n {\r\n changeEUpper(val);\r\n }}\r\n />\r\n \r\n \r\n {\r\n changeELower(val);\r\n }}\r\n />\r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n };\r\n /**\r\n * 乗率\r\n * @returns\r\n */\r\n const mulCell = () => {\r\n if (IsConanAirPlc(props.target.PLCNo) || IsIoTZeroGyakuSetting(props.target)) {\r\n return ;\r\n } else {\r\n return (\r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n changeMul(parseInt(e.target.value));\r\n } else if (typeof e.target.value === 'number') {\r\n changeMul(e.target.value);\r\n }\r\n }}\r\n />\r\n \r\n );\r\n }\r\n };\r\n return (\r\n <>\r\n { }}\r\n onExited={(e) => {\r\n if (mode) {\r\n props.dialog.apply({ result: item });\r\n } else {\r\n props.dialog.cancel();\r\n }\r\n }}\r\n >\r\n {t('CollectSettingItemDialog.設定編集', '設定編集')}\r\n \r\n
\r\n \r\n \r\n \r\n {t('CollectGridHeader.実行', '実行')}\r\n {/* \r\n {t('CollectGridHeader.PLC','PLC')}\r\n */}\r\n {/* \r\n {t('CollectGridHeader.ユニット','ユニット')}
{t('CollectGridHeader.形式','形式')}\r\n
*/}\r\n {/* \r\n {t('CollectGridHeader.AIカード','AIカード')}\r\n */}\r\n {t('CollectGridHeader.機器番号', '機器番号')}\r\n {t('CollectGridHeader.機器名称', '機器名称')}\r\n {t('CollectGridHeader.CH', 'CH')}\r\n {t('CollectGridHeader.信号種別', '信号種別')}\r\n {t('CollectGridHeader.項目名称', '項目名称')}\r\n \r\n
\r\n \r\n \r\n {t('CollectGridHeader.デジタル値', 'デジタル値')}\r\n \r\n \r\n \r\n {t('CollectGridHeader.上限値', '上限値')}\r\n {t('CollectGridHeader.下限値', '下限値')}\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n {t('CollectGridHeader.工学値', '工学値')}\r\n \r\n \r\n \r\n {t('CollectGridHeader.上限値', '上限値')}\r\n {t('CollectGridHeader.下限値', '下限値')}\r\n \r\n
\r\n
\r\n {/* {t('CollectGridHeader.ロギング周期','ロギング周期')} */}\r\n {/* {t('CollectGridHeader.ロギング開始時刻','ロギング開始時刻')} */}\r\n {t('CollectGridHeader.乗率', '乗率')}\r\n {t('CollectGridHeader.単位', '単位')}\r\n \r\n {t('CollectGridHeader.判定値設定', '判定値設定')}\r\n \r\n\r\n {/* \r\n {t('CollectGridHeader.温度', '温度')}\r\n
\r\n {t('CollectGridHeader.上限異常', '上限異常')}\r\n
\r\n \r\n {t('CollectGridHeader.温度', '温度')}\r\n
\r\n {t('CollectGridHeader.上上限異常', '上上限異常')}\r\n
*/}\r\n \r\n {t('CollectGridHeader.アベレージング処理', 'アベレージング処理')}\r\n \r\n {/* \r\n {t('CollectGridHeader.エンベロープ処理', 'エンベロープ処理')}\r\n */}\r\n \r\n {t('CollectGridHeader.モータ起動状態', 'モータ起動状態')}\r\n
\r\n {t('CollectGridHeader.検出センサ指定', '検出センサ指定')}\r\n
\r\n \r\n {t('CollectGridHeader.回転周波数', '回転周波数')}\r\n
\r\n {t('CollectGridHeader.算出センサ', '算出センサ')}\r\n
\r\n MEMO\r\n \r\n \r\n \r\n \r\n {\r\n changeExecute(chk);\r\n }}\r\n />\r\n \r\n {/* \r\n {props.target.PLCNo}\r\n \r\n \r\n {props.target.UnitName}\r\n \r\n \r\n {props.target.AICardNo}\r\n */}\r\n {/* 機器番号 */}\r\n {devNoCell()}\r\n {/* 機器名称 */}\r\n \r\n {props.nameDevList.find((item) => item.DEV_INDEX === Number(props.target.MachineIndex))?.DEV_NAME}\r\n \r\n {props.target.ChannelNo}\r\n {/* 計測種別 */}\r\n {mesureCell()}\r\n {/* 項目名称 */}\r\n {itemNameCell()}\r\n {/* デジタル値 */}\r\n {digitalCell()}\r\n {/* 工学値 */}\r\n {engineeringCell()}\r\n {/* 乗率 */}\r\n {mulCell()}\r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n changeUnit(e.target.value);\r\n }\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n {/* 温度上限異常 */}\r\n {/* \r\n {\r\n changeRTUpper(val);\r\n }}\r\n />\r\n */}\r\n {/* 温度上上限異常 */}\r\n {/* \r\n {\r\n changeRTUpperUpper(val);\r\n }}\r\n />\r\n */}\r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n changeAvg(parseInt(e.target.value));\r\n } else if (typeof e.target.value === 'number') {\r\n changeAvg(e.target.value);\r\n }\r\n }}\r\n />\r\n \r\n {/* \r\n changeEnvSav(chk)} />\r\n */}\r\n {/* \r\n {\r\n if (typeof e.target.value === 'string') {\r\n changeItemNameNo(parseInt(e.target.value));\r\n }else if(typeof e.target.value === 'number'){\r\n changeItemNameNo(e.target.value);\r\n }\r\n }}\r\n />\r\n */}\r\n {/* \r\n {\r\n if (typeof e.target.value === 'string') {\r\n changeLogPeriod(parseInt(e.target.value));\r\n }\r\n }}\r\n />\r\n */}\r\n {/* \r\n {\r\n changeStartTime(dayjs(e).toDate());\r\n }}\r\n defaultValue={dayjs(startTime).format('YYYY-MM-DD HH:mm:ss')}\r\n />\r\n */}\r\n \r\n changeMotor(chk)} />\r\n \r\n \r\n changeRotClc(chk)} />\r\n \r\n \r\n changeNote(e.target.value)}\r\n />\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n {\r\n console.debug(['- flgUpdate -', flgUpdate]);\r\n if (flgUpdate) {\r\n setMsgConfirm(t('CollectSettingItemDialog.設定を更新しますか?', '設定を更新しますか?'));\r\n confirmDlg\r\n .open()\r\n .apply((_) => {\r\n setIsOpen(false);\r\n setMode(true);\r\n })\r\n .cancel((_) => { });\r\n } else {\r\n setIsOpen(false);\r\n setMode(false);\r\n }\r\n }}\r\n >\r\n {t('CollectSettingItemDialog.設定', '設定')}\r\n \r\n {\r\n if (flgUpdate) {\r\n setMsgConfirm(\r\n t(\r\n 'CollectSettingItemDialog.編集したデータを破棄します。\\nよろしいですか?',\r\n '編集したデータを破棄します。\\nよろしいですか?'\r\n )\r\n );\r\n confirmDlg\r\n .open()\r\n .apply((resp) => {\r\n setIsOpen(false);\r\n setMode(false);\r\n })\r\n .cancel((_) => { });\r\n } else {\r\n setIsOpen(false);\r\n setMode(false);\r\n }\r\n }}\r\n >\r\n {t('CollectSettingItemDialog.キャンセル', 'キャンセル')}\r\n \r\n \r\n \r\n {jdgdlgElem}\r\n {confirm}\r\n setMessageDialogOpen(false)}\r\n title={showTitle}\r\n okText={'OK'}\r\n maxWidth={'sm'}\r\n >\r\n {showMessage}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default CollectSettingItemIoTDialog;\r\n","import React, { useEffect, useState, useContext } from 'react';\r\nimport { Table, TableCell, TableRow } from '@material-ui/core';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport {\r\n GetKindNoNameSetType,\r\n GetNameItemSetType,\r\n GetLogIntSetType,\r\n GetmulItems,\r\n GetDataUnitType,\r\n PLCcollectSettingType,\r\n KIND_NO_NAME_SET,\r\n NAME_ITEM_SET,\r\n LOG_INT_SET,\r\n MulDataType,\r\n DATA_UNIT,\r\n GetConanMeasureName,\r\n} from './CollectSettingDefine';\r\nimport { NAME_DEV_SET, GetNameDevSetList } from '../../../../function/NameDevSetModel';\r\n\r\nimport { useTranslation, UseTranslationResponse } from 'react-i18next';\r\nimport StackCell, { CellSizeContainer } from '../../../atoms/Cell/StackCell';\r\nimport ItemComboBox, { ComboBoxItemType } from '../../../atoms/ComboBox/ItemComboBox';\r\nimport ItemComboBoxStr, { ComboBoxItemTypeS } from '../../../atoms/ComboBox/ItemComboBoxStr';\r\nimport { TFunction } from 'i18next';\r\nimport { useModal } from '../../../../function/useModal';\r\nimport CollectSettingItemIoTDialog, { CollectSettingItemIoTDialogResponse } from './CollectSettingItemIoTDialog';\r\nimport { SpeedKind, MeasureHighKind } from '../../../../Constant';\r\n\r\ntype CollectGridBodyIoTProps = {\r\n plcSettingList: PLCcollectSettingType[];\r\n isDispPLC: boolean;\r\n isOrderDevice: boolean;\r\n update: (target: PLCcollectSettingType, index: number) => void;\r\n updateStartTime: (devIndex: string, startTime: Date) => void;\r\n updateMotorSensor: (target: PLCcollectSettingType, index: number, chk: boolean) => boolean;\r\n updateRotClc: (target: PLCcollectSettingType, index: number, chk: boolean) => boolean;\r\n};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n '@global': {\r\n '.MuiTableCell-body': { color: 'inherit' },\r\n },\r\n tableHeader: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n borderCollapse: `collapse`,\r\n },\r\n fixColumn: {\r\n borderWidth: '0px',\r\n outlineWidth: '1px',\r\n outlineColor: '#dcdcdc',\r\n outlineStyle: 'solid',\r\n padding: '0px',\r\n paddingLeft: '5px',\r\n position: 'sticky',\r\n zIndex: 10,\r\n backgroundColor: 'white',\r\n },\r\n tableTd: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '0px',\r\n paddingLeft: '5px',\r\n borderCollapse: `collapse`,\r\n zIndex: 0,\r\n },\r\n table_no_border_td: {\r\n borderTop: '0px',\r\n borderBottom: '0px',\r\n borderLeft: '0px',\r\n borderRight: '1px',\r\n borderRightStyle: 'solid',\r\n borderRightColor: '#dcdcdc',\r\n padding: '0px',\r\n minWidth: '80px',\r\n borderCollapse: `collapse`,\r\n },\r\n textAlignRightCell: {\r\n textAlign: 'right',\r\n },\r\n textAlignCenterCell: {\r\n textAlign: 'center',\r\n },\r\n labelStyle: {\r\n fontSize: '12px',\r\n },\r\n //テキスト\r\n textField: {\r\n flexGrow: 1,\r\n height: '100%',\r\n width: '98%',\r\n border: 'none',\r\n padding: '0px',\r\n backgroundColor: 'transparent',\r\n },\r\n selectRow: {\r\n background: '#7fffd4',\r\n },\r\n })\r\n);\r\n\r\nconst CollectGridBodyIoT: React.FC = (props: CollectGridBodyIoTProps) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n // const [plcSettingList, setPlcSettingList] = React.useState([]);\r\n const [kindNoNameList, setKindNoNameList] = React.useState([]);\r\n const [nameDevList, setNameDevList] = React.useState([]);\r\n const [nameItemList, setNameItemList] = React.useState([]);\r\n const [logIntList, setLogIntList] = React.useState([]);\r\n const [mulList, setMULList] = React.useState([]);\r\n const [dataUnitList, setDataUnitList] = React.useState([]);\r\n const [measCombos, setMeasCombos] = useState([]);\r\n const [devCombos, setDevCombos] = useState([]);\r\n const [itemCombos, setItemCombos] = useState([]);\r\n const [mulCombos, setMulCombos] = useState([]);\r\n const [unitCombos, setUnitCombos] = useState([]);\r\n const [logIntCombos, setLogIntCombos] = useState([]);\r\n const avgCombos: ComboBoxItemType[] = [\r\n { index: 0, name: t('CollectGridBody.加算平均', '加算平均') },\r\n { index: 1, name: t('CollectGridBody.指数平均', '指数平均') },\r\n { index: 2, name: t('CollectGridBody.ピークホールド', 'ピークホールド') },\r\n ];\r\n const [plcNo, setPlcNo] = useState(0);\r\n const [aiCard, setAiCard] = useState(0);\r\n const [aiCh, setAiCh] = useState(0);\r\n const [cursorIndex, setCursorIndex] = useState(-1);\r\n\r\n console.debug('MeasureGridBody');\r\n console.debug(props.plcSettingList.length);\r\n\r\n useEffect(() => {\r\n var a = GetKindNoNameSetType();\r\n var b = GetNameDevSetList();\r\n var c = GetNameItemSetType();\r\n var d = GetLogIntSetType();\r\n var e = GetmulItems();\r\n var f = GetDataUnitType();\r\n\r\n Promise.all([a, b, c, d, e, f]).then((ret) => {\r\n //console.debug(['Promise.all : ret', ret]);\r\n console.debug(ret[0]);\r\n console.debug(ret[1]);\r\n console.debug(ret[2]);\r\n console.debug(ret[3]);\r\n console.debug(ret[4]);\r\n console.debug(ret[5]);\r\n\r\n setKindNoNameList(ret[0]);\r\n setNameDevList(ret[1]);\r\n setNameItemList(ret[2]);\r\n setLogIntList(ret[3]);\r\n setMULList(ret[4]);\r\n setDataUnitList(ret[5]);\r\n\r\n //振動Row取得\r\n //コナンエアの場合SPEED2の振動と同じ名前を付ける\r\n let conaMesName = GetConanMeasureName(ret[0]);\r\n setMeasCombos(\r\n ret[0].map((ci) => {\r\n if (ci.SPEED === SpeedKind.SPEED_CONAN) {\r\n return { key: `${ci.NAME_NO}_${ci.SPEED}`, name: conaMesName };\r\n } else {\r\n return { key: `${ci.NAME_NO}_${ci.SPEED}`, name: ci.MES_NAME };\r\n }\r\n })\r\n );\r\n //機器番号 実装のみ選択可\r\n setDevCombos(\r\n ret[1]\r\n .filter((ci) => ci.EST === 1)\r\n .map((ci) => {\r\n return { key: `${ci.DEV_INDEX}`, name: ci.DEV_NO };\r\n })\r\n );\r\n //項目名称 実装のみ選択可\r\n setItemCombos(\r\n ret[2]\r\n .filter((ci) => ci.EST === 1)\r\n .map((ci) => {\r\n return { key: `${ci.ITM_NAME_NO}`, name: ci.ITM_NAME };\r\n })\r\n );\r\n setLogIntCombos(\r\n ret[3].map((ci) => {\r\n return { key: `${ci.LOG_INT}`, name: ci.DSP_STR };\r\n })\r\n );\r\n setMulCombos(\r\n ret[4].map((ci) => {\r\n return { key: `${ci.code}`, name: ci.value };\r\n })\r\n );\r\n setUnitCombos(\r\n ret[5].map((ci) => {\r\n return { key: ci.UNIT_STR, name: ci.UNIT_STR };\r\n })\r\n );\r\n });\r\n }, []);\r\n\r\n const updateCursor = (index: number) => {\r\n setCursorIndex(index);\r\n };\r\n\r\n // \r\n const buttonFace = t('CollectGridBody.変更', '変更');\r\n return (\r\n \r\n {props.plcSettingList?.map((row, idx) => (\r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\ntype CollectGridRowProps = {\r\n item: PLCcollectSettingType;\r\n index: number;\r\n selectIndex: number;\r\n isDispPLC: boolean;\r\n kindNoNameList: KIND_NO_NAME_SET[];\r\n nameDevList: NAME_DEV_SET[];\r\n nameItemList: NAME_ITEM_SET[];\r\n logIntList: LOG_INT_SET[];\r\n mulList: MulDataType[];\r\n dataUnitList: DATA_UNIT[];\r\n measCombos: ComboBoxItemTypeS[];\r\n devCombos: ComboBoxItemTypeS[];\r\n itemCombos: ComboBoxItemTypeS[];\r\n mulCombos: ComboBoxItemTypeS[];\r\n unitCombos: ComboBoxItemTypeS[];\r\n logIntCombos: ComboBoxItemTypeS[];\r\n avgCombos: ComboBoxItemType[];\r\n t: TFunction;\r\n update: (target: PLCcollectSettingType, index: number) => void;\r\n updateStartTime: (devIndex: string, startTime: Date) => void;\r\n updateMotorSensor: (target: PLCcollectSettingType, index: number, chk: boolean) => boolean;\r\n updateRotClc: (target: PLCcollectSettingType, index: number, chk: boolean) => boolean;\r\n buttonFace: string;\r\n updateCursor: (index: number) => void;\r\n};\r\n\r\nconst IsEditItemDev = (isIoT: boolean): boolean => {\r\n return !isIoT;\r\n};\r\nconst IsEditItemSignal = (ch: string): boolean => {\r\n return '345'.indexOf(ch) >= 0;\r\n};\r\nconst IsItemRST = (itemNo: number): boolean => {\r\n return itemNo >= 3 && itemNo <= 5;\r\n};\r\n\r\nconst CollectGridRow: React.FC = (props) => {\r\n const classes = useStyles();\r\n\r\n const [item, setItem] = useState(props.item);\r\n\r\n const cnt = new CellSizeContainer();\r\n\r\n const [flgEdit, editDlg] = useModal();\r\n const editdlgElem = flgEdit ? (\r\n \r\n ) : null;\r\n\r\n const doubleClick = () => {\r\n console.log('mouse dbl click');\r\n editDlg.open().apply((resp) => {\r\n props.update(resp.result, props.index);\r\n setItem(resp.result);\r\n });\r\n };\r\n\r\n const selectRow = () => {\r\n props.updateCursor(props.index);\r\n };\r\n\r\n const lineAttr = props.index == props.selectIndex ? classes.selectRow : '';\r\n\r\n return (\r\n <>\r\n \r\n \r\n {props.index + 1}\r\n \r\n \r\n
{item.IsExecute == true ? '✔' : ''}
\r\n \r\n \r\n {/* {props.devCombos.find((d) => d.key == item.MachineIndex)?.name} */}\r\n {props.nameDevList.find((it) => it.DEV_INDEX === Number(item.MachineIndex))?.DEV_NO}\r\n \r\n \r\n {props.nameDevList.find((it) => it.DEV_INDEX === Number(item.MachineIndex))?.DEV_NAME}\r\n \r\n \r\n {item.ChannelNo}\r\n \r\n \r\n {props.item.UnitName}\r\n \r\n \r\n {props.measCombos.find((d) => d.key == `${item.NameNo}_${item.Speed}`)?.name}\r\n \r\n {/*項目名称 */}\r\n \r\n {item.NameNo != 0 ? props.itemCombos.find((it) => it.key == item.ItemNameNo.toString())?.name : ''}\r\n \r\n \r\n \r\n \r\n \r\n
{item.NameNo != 0 ? item.DigitalValueUpper : ''}
\r\n
\r\n \r\n
{item.NameNo != 0 ? item.DigitalValueLower : ''}
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
{item.NameNo != 0 ? item.EngineeringValueUpper : ''}
\r\n
\r\n \r\n
{item.NameNo != 0 ? item.EngineeringValueLower : ''}
\r\n
\r\n
\r\n
\r\n
\r\n \r\n {item.NameNo != 0 ? props.mulCombos.find((ml) => ml.key == item.Mul.toString())?.name : ''}\r\n \r\n \r\n {item.NameNo != 0 ? props.unitCombos.find((un) => un.key == item.UnitSymbol)?.name : ''}\r\n \r\n {/* \r\n { props.buttonFace}\r\n {/* \r\n */}\r\n {/* 温度上限異常 */}\r\n {/* \r\n
{item.NameNo != 0 ? item.RealtimeTrendValueUpper : ''}
\r\n */}\r\n {/* 温度上上限異常 */}\r\n {/* \r\n
{item.NameNo != 0 ? item.RealtimeTrendValueUpperUpper : ''}
\r\n */}\r\n \r\n {item.NameNo != 0 ? props.avgCombos.find((av) => av.index == item.AvgPrc)?.name : ''}\r\n \r\n {/* \r\n
{item.NameNo != 0 && item.EnvSav == true ? '✔' : ''}
\r\n \r\n */}\r\n \r\n
{item.NameNo != 0 && item.StartDet == 1 ? '✔' : ''}
\r\n {/* */}\r\n \r\n \r\n
{item.NameNo != 0 && item.RotClc == true ? '✔' : ''}
\r\n {/* */}\r\n \r\n \r\n {item.NameNo != 0 ? item.Note : ''}\r\n \r\n
\r\n {/* {jdgdlgElem} */}\r\n {editdlgElem}\r\n \r\n );\r\n};\r\n\r\nexport default CollectGridBodyIoT;\r\n","import React, { useEffect, useState, useMemo, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { ErrorCode, ResponceDataType } from \"../../../../ErrorCode\";\r\n\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\n\r\nimport { AppContext } from '../../../../App';\r\nimport { SettingsState } from '../../../organisms/SelectSettings';\r\nimport { useModal } from '../../../../function/useModal';\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../../atoms/Dialog/ConfirmDialog';\r\nimport MessageDialog, { MessageDialogResponse } from '../../../atoms/Dialog/MessageDialog';\r\n\r\nimport { GetPLCcollectSettingType, PLCcollectSettingType, SetPLCcollectSetting } from './CollectSettingDefine';\r\nimport CollectGridHeader from './CollectGridHeader';\r\nimport CollectGridBody from './CollectGridBody';\r\nimport CollectSettingFooter from './CollectSettingFooter';\r\nimport CollectGridHeaderIoT from './CollectGridHeaderIoT';\r\nimport CollectGridBodyIoT from './CollectGridBodyIoT';\r\n\r\ntype CollectSettingProps = {\r\n editData: SettingsState;\r\n};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 315px)',\r\n overflowX: 'scroll',\r\n },\r\n tableContainerIoT: {\r\n maxHeight: 'calc(100vh - 298px)',\r\n overflowX: 'scroll',\r\n },\r\n })\r\n);\r\n\r\nconst setAllStartTime = () => {\r\n console.debug('saveAction');\r\n};\r\n\r\nconst orderDevice = (source: PLCcollectSettingType[], plcOn: boolean, isDevice: boolean): PLCcollectSettingType[] => {\r\n //console.debug(['orderDevice() -START source,plcOn,isDevice', source, plcOn, isDevice]);\r\n let plcs = source;\r\n if (!plcOn) {\r\n plcs = plcs.filter((plc) => parseInt(plc.MachineIndex) > 0);\r\n }\r\n if (isDevice) {\r\n const listDev = plcs\r\n .filter((plc) => parseInt(plc.MachineIndex) > 0)\r\n .sort((plc1, plc2) => (plc1.MachineNo < plc2.MachineNo ? -1 : 0));\r\n const listNone = plcs.filter((plc) => parseInt(plc.MachineIndex) <= 0);\r\n plcs = listDev.concat(listNone);\r\n }\r\n //console.debug(['orderDevice() -END ', plcs]);\r\n return plcs;\r\n};\r\n\r\nconst CollectSetting: React.FC = (props: CollectSettingProps) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [flgCfmDlg, actCfmDlg] = useModal();\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n const [isOrderDevice, setIsOrderDevice] = useState(true);\r\n const [isDispPLC, setIsDispPLC] = useState(false);\r\n const [plcSettingList, setPlcSettingList] = useState([]);\r\n const [plcSettingSource, setPlcSettingSource] = useState([]);\r\n const { login } = useContext(AppContext);\r\n\r\n const cfmdlg = flgCfmDlg ? (\r\n \r\n ) : null;\r\n const msgdlg = flgMsgDlg ? : null;\r\n\r\n useEffect(() => {\r\n let plcNo = 0;\r\n if (props.editData.PageParam && 'plcNo' in props.editData.PageParam) {\r\n const prm = props.editData.PageParam as { plcNo: number };\r\n if (prm) {\r\n plcNo = prm.plcNo;\r\n }\r\n props.editData.PageParam = undefined;\r\n }\r\n\r\n GetPLCcollectSettingType(plcNo).then((resp: PLCcollectSettingType[]) => {\r\n resp.forEach((item, index) => {\r\n item.id = index + 1;\r\n item.MachineIndex = item.MachineIndex === '' ? '0' : item.MachineIndex;\r\n item.UnitSymbol = item.UnitSymbol === '' ? '0' : item.UnitSymbol;\r\n item.LoggingPeriod = item.LoggingPeriod === '' ? '0' : item.LoggingPeriod;\r\n item.isEdit = false;\r\n });\r\n let temp = resp.filter((r) => r.ValID === 1);\r\n setPlcSettingSource(temp);\r\n console.debug(['GetColList,plcNo', temp, plcNo]);\r\n\r\n setPlcSettingList(orderDevice(temp, isDispPLC, isOrderDevice));\r\n\r\n props.editData.SaveFunction = saveProc;\r\n props.editData.IsUpdate = false;\r\n });\r\n }, [props.editData.CancelCondition]);\r\n\r\n const saveAction = () => {\r\n setDlgmsg(t('CollectSetting.保存しますか?', '保存しますか?'));\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n saveProc(plcSettingSource);\r\n })\r\n .cancel(() => { });\r\n };\r\n const saveProc = (target: object): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const settingSource = target as PLCcollectSettingType[];\r\n if (settingSource) {\r\n SetPLCcollectSetting(settingSource.filter((item) => item.isEdit)).then((ret: number) => {\r\n if (ret == ErrorCode.ERR_CODE_SYSTEM_ERROR) {\r\n setDlgmsg(t('CollectSetting.保存時エラーが発生しました', '保存時エラーが発生しました'));\r\n actMsgDlg.open();\r\n } else if (ret == ErrorCode.ERR_CODE_RUNFLG_CHECK_ERROR) {\r\n setDlgmsg(t('CollectSetting.TMBee-Boxの振動行とコナンエアーが重複しています\\n実行フラグを確認してください', 'TMBee-Boxの『振動』行とコナンエアーが重複しています\\n実行フラグを確認してください'));\r\n actMsgDlg.open();\r\n } else {\r\n if (settingSource.filter((item) => item.isIotEdit).length !== 0) {\r\n setDlgmsg(\r\n t(\r\n 'CollectSetting.AWSへのUPLOADを実行してください',\r\n '実行フラグを編集したため、AWSへのUPLOADを実行してください。'\r\n )\r\n );\r\n actMsgDlg.open();\r\n }\r\n }\r\n props.editData.IsUpdate = false;\r\n // props.editData.CloseSetting();\r\n resolve('done');\r\n });\r\n } else {\r\n reject('data error');\r\n }\r\n });\r\n };\r\n\r\n const cancelAction = () => {\r\n if (props.editData.IsUpdate) {\r\n setDlgmsg(\r\n t(\r\n 'CollectSetting.保存していないデータを破棄します。\\nよろしいですか?',\r\n '保存していないデータを破棄します。\\nよろしいですか?'\r\n )\r\n );\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n // props.editData.IsUpdate = false;\r\n setPlcSettingList([]);\r\n props.editData.UpdateCancel();\r\n // props.editData.CloseSetting();\r\n })\r\n .cancel(() => { });\r\n } else {\r\n // props.editData.CloseSetting();\r\n }\r\n };\r\n\r\n const setSortItem = (value: string) => {\r\n const cond = value == 'm';\r\n setIsOrderDevice(cond);\r\n\r\n setPlcSettingList(orderDevice(plcSettingSource, isDispPLC, cond));\r\n };\r\n\r\n const setPlcDisp = (value: string) => {\r\n const cond = value == 'd';\r\n setIsDispPLC(cond);\r\n\r\n setPlcSettingList(orderDevice(plcSettingSource, cond, isOrderDevice));\r\n };\r\n\r\n const updateFunction = (target: PLCcollectSettingType, index: number) => {\r\n target.isEdit = true;\r\n plcSettingList[index] = target;\r\n const sidx = plcSettingSource.findIndex(\r\n (item) => item.PLCNo == target.PLCNo && item.AICardNo == target.AICardNo && item.ChannelNo == target.ChannelNo\r\n );\r\n if (sidx >= 0) {\r\n plcSettingSource[sidx] = target;\r\n\r\n props.editData.Target = plcSettingSource;\r\n props.editData.IsUpdate = true;\r\n }\r\n };\r\n\r\n const updateStartTime = (devIndex: string, startTime: Date) => {\r\n plcSettingSource.forEach((item) => {\r\n if (item.MachineIndex == devIndex) {\r\n item.LoggingStartTime = startTime;\r\n item.isEdit = true;\r\n }\r\n });\r\n setPlcSettingList(orderDevice(plcSettingSource, isDispPLC, isOrderDevice));\r\n\r\n props.editData.Target = plcSettingSource;\r\n props.editData.IsUpdate = true;\r\n };\r\n\r\n /**\r\n * RSTのどれか1つしかモータ起動状態検出フラグはチェックができない\r\n * @param target\r\n * @param index\r\n * @param chk\r\n * @returns\r\n */\r\n const updateMotorSensor = (target: PLCcollectSettingType, index: number, chk: boolean): boolean => {\r\n // 機器で唯一の判定\r\n let result = false;\r\n const motorActive = plcSettingSource.find((item) => item.MachineNo == target.MachineNo && item.StartDet > 0);\r\n if (motorActive) {\r\n result = false;\r\n } else {\r\n target.StartDet = chk ? 1 : 0;\r\n updateFunction(target, index);\r\n result = true;\r\n }\r\n return result;\r\n };\r\n /**\r\n * RSTのどれか1つしか回転周波数算出センサはチェックができない\r\n * @param target\r\n * @param index\r\n * @param chk\r\n * @returns\r\n */\r\n const updateRotClc = (target: PLCcollectSettingType, index: number, chk: boolean): boolean => {\r\n let result = false;\r\n if (chk) {\r\n // 機器で唯一の判定\r\n const rotClcActive = plcSettingSource.find((item) => item.MachineNo == target.MachineNo && item.RotClc);\r\n if (rotClcActive) {\r\n result = false;\r\n } else {\r\n target.RotClc = chk;\r\n updateFunction(target, index);\r\n result = true;\r\n }\r\n return result;\r\n } else {\r\n target.RotClc = chk;\r\n updateFunction(target, index);\r\n result = true;\r\n return result;\r\n }\r\n };\r\n\r\n //console.debug(['- 画面描画開始 -', plcSettingList]);\r\n return (\r\n <>\r\n \r\n \r\n {login.IsIoT ? (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n ) : (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n )}\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n {cfmdlg}\r\n {msgdlg}\r\n \r\n );\r\n};\r\n\r\nexport default CollectSetting;\r\n","import React, { useEffect, useState, useContext } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { AppContext } from '../../../../App';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableHeader: {\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n padding: '1px',\r\n borderCollapse: `collapse`,\r\n minWidth: '80px',\r\n zIndex: 10,\r\n },\r\n tableFixHead: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n position: 'sticky',\r\n top: 0,\r\n left: 0,\r\n },\r\n tableFixC0: {\r\n borderWidth: '0px',\r\n outlineColor: '#dcdcdc',\r\n outlineWidth: '1px',\r\n outlineStyle: 'solid',\r\n width: '80px',\r\n position: 'sticky',\r\n zIndex: 20,\r\n top: 0,\r\n left: 0,\r\n },\r\n tableFixC1: {\r\n borderWidth: '0px',\r\n outlineColor: '#dcdcdc',\r\n outlineWidth: '1px',\r\n outlineStyle: 'solid',\r\n width: '80px',\r\n position: 'sticky',\r\n zIndex: 20,\r\n top: 0,\r\n left: 83,\r\n },\r\n tableFixC2: {\r\n borderWidth: '0px',\r\n outlineColor: '#dcdcdc',\r\n outlineWidth: '1px',\r\n outlineStyle: 'solid',\r\n width: '80px',\r\n position: 'sticky',\r\n zIndex: 20,\r\n top: 0,\r\n left: 166,\r\n },\r\n tableFixC3: {\r\n borderWidth: '0px',\r\n outlineColor: '#dcdcdc',\r\n outlineWidth: '1px',\r\n outlineStyle: 'solid',\r\n width: '80px',\r\n position: 'sticky',\r\n zIndex: 20,\r\n top: 0,\r\n left: 249,\r\n },\r\n tableTd: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '0px',\r\n minWidth: '80px',\r\n },\r\n colTime: {\r\n textAlign: 'center',\r\n },\r\n })\r\n);\r\n\r\nconst DeviceRegistGridHeader: React.FC = () => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const { login } = useContext(AppContext);\r\n return (\r\n \r\n No\r\n \r\n {t('DeviceRegistGridHeader.実装', '実装')}\r\n \r\n \r\n {t('DeviceRegistGridHeader.機器番号', '機器番号')}\r\n \r\n \r\n {t('DeviceRegistGridHeader.機器名称', '機器名称')}\r\n \r\n \r\n {t('DeviceRegistGridHeader.定格出力(kW)', '定格出力(kW)')}\r\n \r\n \r\n {t('DeviceRegistGridHeader.Pole数', 'Pole数')}\r\n \r\n \r\n {t('DeviceRegistGridHeader.電圧(V)', '電圧(V)')}\r\n \r\n \r\n {t('DeviceRegistGridHeader.電源周波数(Hz)', '電源周波数(Hz)')}\r\n \r\n \r\n {t('DeviceRegistGridHeader.定格電流値(A)', '定格電流値(A)')}\r\n \r\n \r\n {t('DeviceRegistGridHeader.定格回転数(min-1)', '定格回転数(min-1)')}\r\n \r\n \r\n {t('DeviceRegistGridHeader.励磁電流(A)', '励磁電流(A)')}\r\n \r\n \r\n {t('DeviceRegistGridHeader.起動判定', '起動判定')}\r\n
\r\n {t('DeviceRegistGridHeader.電流閾値', '電流閾値')}\r\n
\r\n \r\n {t('DeviceRegistGridHeader.ベアリング呼び番号', 'ベアリング呼び番号')}\r\n
\r\n {t('DeviceRegistGridHeader.(負荷側)', '(負荷側)')}\r\n
\r\n \r\n {t('DeviceRegistGridHeader.ベアリング呼び番号', 'ベアリング呼び番号')}\r\n
\r\n {t('DeviceRegistGridHeader.(反負荷側)', '(反負荷側)')}\r\n
\r\n \r\n {t('DeviceRegistGridHeader.インバータ', 'インバータ駆動モータ')}\r\n
\r\n {t('DeviceRegistGridHeader.駆動モータ', '駆動モータ')}\r\n
\r\n {login.IsIoT ? null : (\r\n \r\n {t('DeviceRegistGridHeader.EMC適用', 'EMC適用')}\r\n \r\n )}\r\n \r\n {t('DeviceRegistGridHeader.インバータキャリア', 'インバータキャリア')}\r\n
\r\n {t('DeviceRegistGridHeader.周波数(Hz)', '周波数(Hz)')}\r\n
\r\n {/* \r\n {t('DeviceRegistGridHeader.補正乗数', '補正乗数')}\r\n */}\r\n \r\n {t('DeviceRegistGridHeader.裕度(%)', '裕度(%)')}\r\n \r\n \r\n {t('DeviceRegistGridHeader.キャリア', 'キャリア')}\r\n
\r\n {t('DeviceRegistGridHeader.周波数マスク', '周波数マスク')}\r\n
\r\n {/* \r\n {t('DeviceRegistGridHeader.零相電流', '零相電流')}\r\n
\r\n {t('DeviceRegistGridHeader.演算', '演算')}\r\n
\r\n \r\n {t('DeviceRegistGridHeader.正相電流', '正相電流')}\r\n
\r\n {t('DeviceRegistGridHeader.演算', '演算')}\r\n
\r\n \r\n {t('DeviceRegistGridHeader.逆相電流', '逆相電流')}\r\n
\r\n {t('DeviceRegistGridHeader.演算', '演算')}\r\n
\r\n \r\n {t('DeviceRegistGridHeader.正相電流', '正相電流')}\r\n
\r\n {t('DeviceRegistGridHeader.FFT', 'FFT')}\r\n
\r\n \r\n {t('DeviceRegistGridHeader.逆相電流', '逆相電流')}\r\n
\r\n {t('DeviceRegistGridHeader.FFT', 'FFT')}\r\n
\r\n \r\n {t('DeviceRegistGridHeader.振動変位', '振動変位')}\r\n
\r\n {t('DeviceRegistGridHeader.FFT', 'FFT')}\r\n
\r\n \r\n {t('DeviceRegistGridHeader.振動速度', '振動速度')}\r\n
\r\n {t('DeviceRegistGridHeader.FFT', 'FFT')}\r\n
*/}\r\n \r\n {t('DeviceRegistGridHeader.個別設定', '個別設定')}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default DeviceRegistGridHeader;\r\n","import React, { useEffect, useState, useContext } from 'react';\r\nimport { Checkbox, Tab, Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport Button from '@material-ui/core/Button';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { NAME_DEV_SET } from '../../../../function/NameDevSetModel';\r\nimport NumericEntry_inputEx from '../../../atoms/Input/NumericEntry_inputEx';\r\nimport { AppContext } from '../../../../App';\r\nimport { TableBaseStyle } from '../../../../baseStyle/tableBaseStyle';\r\n\r\ntype DeviceRegistGridBodyProps = {\r\n item: NAME_DEV_SET;\r\n seectId: number;\r\n updateItem: (item: NAME_DEV_SET) => void;\r\n onClickSettingButton: (indexNo: number) => void;\r\n selectedID: (indexNo: number) => void;\r\n};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableItem: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n orderBottomStyle: 'inset',\r\n borderLeftStyle: 'solid',\r\n borderRightStyle: 'solid',\r\n textAlign: 'center',\r\n height: '8px',\r\n padding: '1px',\r\n },\r\n tableTd: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '0px',\r\n minWidth: '80px',\r\n },\r\n tableFixC0: {\r\n width: '80px',\r\n outlineColor: '#dcdcdc',\r\n outlineWidth: '1px',\r\n outlineStyle: 'solid',\r\n // backgroundColor: 'white',\r\n position: 'sticky',\r\n zIndex: 10,\r\n top: 0,\r\n left: 0,\r\n },\r\n tableFixC1: {\r\n width: '80px',\r\n outlineColor: '#dcdcdc',\r\n outlineWidth: '1px',\r\n outlineStyle: 'solid',\r\n // backgroundColor: 'white',\r\n position: 'sticky',\r\n zIndex: 10,\r\n top: 0,\r\n left: 83,\r\n },\r\n tableFixC2: {\r\n width: '80px',\r\n outlineColor: '#dcdcdc',\r\n outlineWidth: '1px',\r\n outlineStyle: 'solid',\r\n // backgroundColor: 'white',\r\n position: 'sticky',\r\n zIndex: 10,\r\n top: 0,\r\n left: 166,\r\n },\r\n tableFixC3: {\r\n width: '150px',\r\n outlineColor: '#dcdcdc',\r\n outlineWidth: '1px',\r\n outlineStyle: 'solid',\r\n // backgroundColor: 'white',\r\n position: 'sticky',\r\n zIndex: 10,\r\n top: 0,\r\n left: 249,\r\n },\r\n table_no_border_td: {\r\n borderTop: '0px',\r\n borderBottom: '0px',\r\n borderLeft: '0px',\r\n borderRight: '1px',\r\n borderRightStyle: 'solid',\r\n borderRightColor: '#dcdcdc',\r\n padding: '0px',\r\n minWidth: '80px',\r\n },\r\n colTime: {\r\n textAlign: 'center',\r\n },\r\n //テキスト\r\n textField: {\r\n flexGrow: 1,\r\n height: '100%',\r\n width: '98%',\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n },\r\n buttonStyle: {\r\n maxWidth: '140px',\r\n maxHeight: '25px',\r\n minWidth: '180px',\r\n minHeight: '25px',\r\n color: \"white\",\r\n backgroundColor: \"green\"\r\n },\r\n selectRow: {\r\n background: '#7fffd4',\r\n },\r\n })\r\n);\r\n\r\nconst DeviceRegistGridBody: React.FC = (props: DeviceRegistGridBodyProps) => {\r\n const classes = useStyles();\r\n const [est, setEst] = useState(props.item.EST != 0);\r\n const [devNo, setDevNo] = useState(props.item.DEV_NO);\r\n const [devName, setDevName] = useState(props.item.DEV_NAME);\r\n const [ratedPower, setRatedPower] = useState(props.item.RATED_POWER);\r\n const [pole, setPole] = useState(props.item.POLE);\r\n const [voltage, setVoltage] = useState(props.item.VOLTAGE);\r\n const [pwrFreq, setPwrFreq] = useState(props.item.PWR_FREQ);\r\n const [ratedCur, setRatedCur] = useState(props.item.RATED_CUR);\r\n const [ratedSpeed, setRatedSpeed] = useState(props.item.RATED_SPEED);\r\n const [excCur, setExcCur] = useState(props.item.EXC_CUR);\r\n const [startJdgCur, setStartJdgCur] = useState(props.item.startJdgCurPer);\r\n const [bearingLd, setBearingLd] = useState(props.item.BEARING_LD);\r\n const [bearingAntiLd, setBearingAntiLd] = useState(props.item.BEARING_ANTI_LD);\r\n const [invFreq, setInvFreq] = useState(props.item.INV_FREQ);\r\n const [wealth, setWealth] = useState(props.item.WEALTH);\r\n const [isCareer, setIsCareer] = useState(props.item.CAREER_MASK > 0);\r\n const [isInvDrv, setIsInvDrv] = useState(props.item.INV_DRV_ON > 0);\r\n const [isEmcType, setIsEmcType] = useState(props.item.EMC_TYPE > 0);\r\n const { login } = useContext(AppContext);\r\n const { t } = useTranslation();\r\n const baseClasses = TableBaseStyle();\r\n\r\n\r\n //行選択の背景色一時置き\r\n let lineSelection = '';\r\n\r\n // 行選択ハンドラ\r\n const selectRow = () => {\r\n console.debug(['selectRow()', props.item.DEV_INDEX]);\r\n props.selectedID(props.item.DEV_INDEX);\r\n };\r\n\r\n\r\n\r\n return (\r\n <>\r\n
\r\n {\r\n selectRow();\r\n }}\r\n selected={props.seectId === props.item.DEV_INDEX}\r\n className={lineSelection}\r\n >\r\n {props.item.DEV_INDEX}\r\n \r\n {\r\n setEst(e.target.checked);\r\n props.item.EST = e.target.checked ? 1 : 0;\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n \r\n \r\n {\r\n setDevNo(e.target.value);\r\n props.item.DEV_NO = e.target.value;\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n \r\n \r\n {\r\n setDevName(e.target.value);\r\n props.item.DEV_NAME = e.target.value;\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n \r\n {/* 定格出力(kW) */}\r\n \r\n {\r\n setRatedPower(val);\r\n props.item.RATED_POWER = val;\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n \r\n {/* pole数 */}\r\n \r\n {\r\n setPole(val);\r\n props.item.POLE = val;\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n \r\n {/* 電圧(V) */}\r\n \r\n {\r\n setVoltage(val);\r\n props.item.VOLTAGE = val;\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n \r\n {/* 電源周波数(Hz) */}\r\n \r\n {\r\n setPwrFreq(val);\r\n props.item.PWR_FREQ = val;\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n \r\n {/* 定格電流 */}\r\n \r\n {\r\n setRatedCur(val);\r\n props.item.RATED_CUR = val;\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n \r\n {/* 定格回転数(min-1) */}\r\n \r\n {\r\n setRatedSpeed(val);\r\n props.item.RATED_SPEED = val;\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n \r\n {/* 励磁電流(A) */}\r\n \r\n {\r\n setExcCur(val);\r\n props.item.EXC_CUR = val;\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n \r\n {/* 起動判定電流閾値(%) */}\r\n \r\n {\r\n setStartJdgCur(val);\r\n props.item.startJdgCurPer = val;\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n \r\n \r\n {\r\n setBearingLd(e.target.value);\r\n props.item.BEARING_LD = e.target.value;\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n \r\n \r\n {\r\n setBearingAntiLd(e.target.value);\r\n props.item.BEARING_ANTI_LD = e.target.value;\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n \r\n {/* インバータ駆動モータ */}\r\n \r\n {\r\n setIsInvDrv(e.target.checked);\r\n props.item.INV_DRV_ON = e.target.checked ? 1 : 0;\r\n if (!e.target.checked) {\r\n setIsCareer(false);\r\n props.item.CAREER_MASK = 0;\r\n }\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n \r\n {/* EMC適用 */}\r\n {login.IsIoT ? null : (\r\n \r\n {\r\n setIsEmcType(e.target.checked);\r\n props.item.EMC_TYPE = e.target.checked ? 1 : 0;\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n \r\n )}\r\n\r\n {/* インバータキャリア周波数(Hz) */}\r\n \r\n {\r\n setInvFreq(val);\r\n props.item.INV_FREQ = val;\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n \r\n {/* \r\n {\r\n setRevVal(val);\r\n props.item.REV_VAL = val;\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n */}\r\n {/* 裕度 */}\r\n \r\n {\r\n setWealth(val);\r\n props.item.WEALTH = val;\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n \r\n {/* キャリア周波数マスク */}\r\n \r\n {\r\n setIsCareer(e.target.checked);\r\n props.item.CAREER_MASK = e.target.checked ? 1 : 0;\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n \r\n\r\n {/** レアショートと振動(速度)&振動(変位)の設定*/}\r\n \r\n {\r\n //設定画面を開く\r\n props.onClickSettingButton(props.item.DEV_INDEX);\r\n }}\r\n >\r\n {t('DeviceRegistGridBody.設定', '設定')}\r\n \r\n \r\n \r\n \r\n\r\n );\r\n};\r\n\r\nexport default DeviceRegistGridBody;\r\n","import { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\n\r\nexport const TableBaseStyle = makeStyles(\r\n createStyles({\r\n //テーブルヘッダセル\r\n headerCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n },\r\n bodyCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '0.5px',\r\n height: '10px',\r\n },\r\n bodyCellCenter: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n padding: '4px',\r\n height: '10px',\r\n },\r\n dialogBodyCell: {\r\n borderWidth: '1px',\r\n borderColor: 'black',\r\n borderStyle: 'solid',\r\n backgroundColor: 'white',\r\n padding: '1px',\r\n textAlign: 'center',\r\n height: '40px',\r\n },\r\n dialogBodyCellLeft: {\r\n borderWidth: '1px',\r\n borderColor: 'black',\r\n borderStyle: 'solid',\r\n backgroundColor: 'white',\r\n padding: '1px',\r\n paddingLeft: '10px',\r\n textAlign: 'left',\r\n height: '40px',\r\n },\r\n bodyRow: {\r\n '&.Mui-selected, &.Mui-selected:hover': {\r\n //背景色\r\n backgroundColor: 'yellow',\r\n '& > .MuiTableCell-root': {\r\n //文字色\r\n color: 'brack',\r\n },\r\n },\r\n\r\n\r\n },\r\n //テキスト\r\n textField: {\r\n flexGrow: 1,\r\n height: '100%',\r\n width: '100%',\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n textAlign: \"center\",\r\n },\r\n textFieldDialog: {\r\n flexGrow: 1,\r\n height: '100%',\r\n width: '95%',\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n textAlign: \"center\",\r\n },\r\n })\r\n);\r\n\r\nexport const DeviceRegistPageStyle = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 316px)',\r\n overflowX: 'scroll',\r\n },\r\n tableDialgContainer: {\r\n maxHeight: 'calc(100vh - 276px)',\r\n },\r\n paper: {\r\n background: '#FFFFEE',\r\n },\r\n buttonStyle: {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n },\r\n })\r\n);\r\n","import React, { useEffect, useState, ChangeEvent } from 'react';\r\nimport Button from '@material-ui/core/Button';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport Radio, { RadioProps } from '@material-ui/core/Radio';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { DeviceRegistPageStyle } from './DeviceRegistStyle';\r\n\r\nconst buttonStyle = {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n};\r\n\r\ntype Props = {\r\n onClickSaveButton: () => void;\r\n onClickCancelButton: () => void;\r\n onClickReadCSVButton: (fileObject: File) => void;\r\n buttonEnable: boolean;\r\n};\r\n\r\nconst DeviceRegistFooter: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const pageStyle = DeviceRegistPageStyle();\r\n\r\n /**\r\n * ファイル選択ダイアログ処理\r\n * @param e\r\n * @returns\r\n */\r\n const OnFileSelectAction = (e: ChangeEvent) => {\r\n console.debug(['DeviceRegistFooter - OnFileSelectAction']);\r\n if (!e.target.files || e.target.files.length === 0) {\r\n return;\r\n } else {\r\n const file: File = e.target.files[0];\r\n props.onClickReadCSVButton(file);\r\n e.target.value = '';\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n {t('DeviceRegistFooter.管理台帳読込', '管理台帳読込')}\r\n \r\n \r\n \r\n \r\n {\r\n props.onClickSaveButton();\r\n }}\r\n >\r\n {t('DeviceRegistFooter.保存', '保存')}\r\n \r\n \r\n \r\n props.onClickCancelButton()}\r\n >\r\n {t('DeviceRegistFooter.中止', '中止')}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default DeviceRegistFooter;\r\n","import React, { useEffect, useState, ChangeEvent } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { NameDevSetModel } from './ReadDevCsvDialog';\r\n\r\ntype ReadDevCsvDialogGridRowProps = {\r\n nameDevRow: NameDevSetModel;\r\n onChangeData: (targetRow: NameDevSetModel) => void;\r\n bodyCellStyle: string;\r\n textFieldStyle: string;\r\n};\r\n\r\nconst ReadDevCsvDialogGridRow: React.FC = (props) => {\r\n const [nameDevRow, setNameDevRow] = useState(props.nameDevRow); //データ初期値\r\n const [isEdit, setIsEdit] = useState(false); //変更フラグ データを編集したらtrue\r\n\r\n /**\r\n * データ変更通知\r\n */\r\n useEffect(() => {\r\n //データ初期値にセットされている内容を再描画時に変えたい場合、useEffectが必要\r\n setNameDevRow({ ...props.nameDevRow });\r\n setIsEdit(false);\r\n }, [props.nameDevRow]);\r\n\r\n /**\r\n * 値を変更した内容を管理\r\n * @param key\r\n * @returns\r\n */\r\n const onChangeCell = (key: string) => (event: React.ChangeEvent) => {\r\n console.debug(['onChangeCell - key', key]);\r\n setIsEdit(true);\r\n setNameDevRow({ ...nameDevRow, [key]: event.target.value });\r\n };\r\n\r\n /**\r\n * 上位にデータ変更通知\r\n * @param editRow 編集対象データ\r\n * @param isEdit 編集フラグ\r\n * @returns\r\n */\r\n const onChangeData = (editRow: NameDevSetModel, editFlg: boolean) => (event: React.ChangeEvent) => {\r\n if (editFlg) {\r\n props.onChangeData(editRow);\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n \r\n {nameDevRow.indexNo}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ReadDevCsvDialogGridRow;\r\n","import React, { useEffect, useState, ChangeEvent } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport Button from '@material-ui/core/Button';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport iconv from 'iconv-lite';\r\nimport { parse } from 'csv-parse/lib/sync';\r\nimport {\r\n NameDevSetModel,\r\n PutNameDevSetCsvData,\r\n CheckInputData,\r\n ReadAsCsvReader,\r\n CreateNameDevSetList,\r\n} from './ReadDevCsvDialog';\r\nimport ReadDevDialogGridRow from './ReadDevCsvDialogGridRow';\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../../atoms/Dialog/ConfirmDialog';\r\nimport MessageDialog, { MessageDialogResponse } from '../../../atoms/Dialog/MessageDialog';\r\nimport { useModal } from '../../../../function/useModal';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { ResponceDataType, ErrorCode } from '../../../../ErrorCode';\r\n\r\ntype ReadDevCsvDialogPageProps = {\r\n open: boolean;\r\n onClose: (updateFlg: boolean) => void;\r\n tableContainerStyle: string;\r\n headerCellStyle: string;\r\n bodyCellStyle: string;\r\n textFieldStyle: string;\r\n fileObject: File | undefined;\r\n};\r\n\r\nconst ReadDevCsvDialogPage: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const [filename, setFilename] = useState('');\r\n const [readDevList, setReadDevList] = useState([]);\r\n const [buttonEnable, setButtonEnable] = useState(false);\r\n\r\n const [flgCfmDlg, actCfmDlg] = useModal();\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n\r\n const cfmdlg = flgCfmDlg ? (\r\n \r\n ) : null;\r\n\r\n const msgdlg = flgMsgDlg ? : null;\r\n\r\n useEffect(() => {\r\n if (props.open === true && props.fileObject != null) {\r\n console.debug(['ダイアログOpen event'], props);\r\n const file: File = props.fileObject;\r\n console.debug(['fileObjectData'], file);\r\n\r\n ReadAsCsvReader(file)\r\n .then((r) => {\r\n if (r instanceof ArrayBuffer) {\r\n return CreateNameDevSetList(r);\r\n } else {\r\n throw new Error('');\r\n }\r\n })\r\n .then((r) => {\r\n setFilename(file.name);\r\n setReadDevList([...r]);\r\n })\r\n .catch((error) => {\r\n setFilename('');\r\n setReadDevList([]);\r\n setDlgmsg(\r\n t(\r\n 'ReadDevCsvDialogPage.CSVファイル読込に失敗しました。CSVファイルの内容を確認してください',\r\n 'CSVファイル読込に失敗しました。CSVファイルの内容を確認してください'\r\n )\r\n );\r\n actMsgDlg.open();\r\n console.error(error);\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n }\r\n }, [props.open]);\r\n\r\n /**\r\n * ファイル選択ダイアログ処理\r\n * @param e\r\n * @returns\r\n */\r\n const onFileSelectAction = (e: ChangeEvent) => {\r\n //console.debug(['ReadDevCsvDialogPage - onFileSelectAction']);\r\n setButtonEnable(false);\r\n if (!e.target.files) {\r\n setButtonEnable(true);\r\n return;\r\n }\r\n const file: File = e.target.files[0];\r\n fileSelectAction(file);\r\n\r\n //選択はクリアする\r\n e.target.value = '';\r\n };\r\n\r\n /**\r\n *ファイルobjectより、画面でセットする値を読込\r\n * @param file\r\n */\r\n const fileSelectAction = (file: File) => {\r\n console.debug(['fileObjectData'], file);\r\n ReadAsCsvReader(file)\r\n .then((r) => {\r\n if (r instanceof ArrayBuffer) {\r\n return CreateNameDevSetList(r);\r\n } else {\r\n throw new Error('');\r\n }\r\n })\r\n .then((r) => {\r\n setFilename(file.name);\r\n setReadDevList([...r]);\r\n })\r\n .catch((error) => {\r\n setFilename('');\r\n setReadDevList([]);\r\n setDlgmsg(\r\n t(\r\n 'ReadDevCsvDialogPage.CSVファイル読込に失敗しました。CSVファイルの内容を確認してください',\r\n 'CSVファイル読込に失敗しました。CSVファイルの内容を確認してください'\r\n )\r\n );\r\n actMsgDlg.open();\r\n console.error(error);\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n };\r\n\r\n /**\r\n *保存処理\r\n * @returns\r\n */\r\n const saveAction = (target: NameDevSetModel[]) => {\r\n console.debug(['saveAction - start', target]);\r\n //入力チェック\r\n console.debug(['saveAction - CheckInputData']);\r\n const messages = CheckInputData(target, t);\r\n if (messages.length !== 0) {\r\n console.debug(['saveAction - CheckInputData error', messages]);\r\n setDlgmsg(messages.join('\\n'));\r\n actMsgDlg.open();\r\n return;\r\n }\r\n setButtonEnable(false);\r\n PutNameDevSetCsvData(target)\r\n .then((r) => {\r\n console.debug(t('ReadDevCsvDialogPage.機器登録処理実施結果 OK', '機器登録処理実施結果 OK'));\r\n setDlgmsg(t('ReadDevCsvDialogPage.保存が正常に終了しました', '保存が正常に終了しました'));\r\n actMsgDlg.open().apply(() => {\r\n setFilename('');\r\n setReadDevList([]);\r\n props.onClose(true);\r\n });\r\n })\r\n .catch((error) => {\r\n console.debug(t('ReadDevCsvDialogPage.機器登録処理実施結果 NG', '機器登録処理実施結果 NG'));\r\n setDlgmsg(t('ReadDevCsvDialogPage.保存中にエラーが発生しました', '保存中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n console.error(['saveAction error', error]);\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n console.debug(['saveAction - end', readDevList, target]);\r\n };\r\n\r\n /**\r\n *データ変更通知\r\n * @returns\r\n */\r\n const changeAction = (target: NameDevSetModel) => {\r\n console.debug(['changeAction - start', readDevList, target]);\r\n var index = readDevList.findIndex((r) => r.indexNo === target.indexNo);\r\n readDevList[index] = target;\r\n console.debug(['changeAction - end', readDevList, target]);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n {t('ReadDevCsvDialogPage.機器管理台帳読込', '機器管理台帳読込')}\r\n {`[${filename}]`}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {'No'}\r\n \r\n {t('ReadDevCsvDialogPage.機器番号', '機器番号')}\r\n \r\n \r\n {' '}\r\n {t('ReadDevCsvDialogPage.機器名称', '機器名称')}\r\n \r\n \r\n \r\n \r\n {readDevList.map((row, index) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n {t('ReadDevCsvDialogPage.機器台帳読込', '機器台帳読込')}\r\n \r\n \r\n saveAction(readDevList)}\r\n >\r\n {t('ReadDevCsvDialogPage.保存', '保存')}\r\n \r\n {\r\n setFilename('');\r\n setReadDevList([]);\r\n props.onClose(false);\r\n }}\r\n disabled={!buttonEnable}\r\n >\r\n {t('ReadDevCsvDialogPage.閉じる', '閉じる')}\r\n \r\n \r\n
\r\n {msgdlg}\r\n \r\n );\r\n};\r\n\r\nexport default ReadDevCsvDialogPage;\r\n","import React, { useEffect, useState } from 'react';\r\n\r\nexport type NumericEntry_inputExProps = {\r\n value: number | null;\r\n minValueLimit?: number;\r\n maxValueLimit?: number;\r\n onChange?: (value: number | null) => void;\r\n fixed?: number; //小数点桁数指定\r\n className?: string;\r\n};\r\n\r\n/**\r\n * 上下限値に応じた値を設定\r\n * @param val\r\n * @param minLimit\r\n * @param maxLimit\r\n * @returns\r\n */\r\nconst CheckValLimit = (val: number | null, minLimit?: number, maxLimit?: number): number | null => {\r\n console.debug([`CheckValLimit val = ${val} minLimit=${minLimit} maxLimit=${maxLimit}`]);\r\n var ret = val;\r\n if (ret !== null) {\r\n if (minLimit != null && ret < minLimit) {\r\n ret = minLimit;\r\n }\r\n if (maxLimit != null && ret > maxLimit) {\r\n ret = maxLimit;\r\n }\r\n }\r\n return ret;\r\n};\r\n\r\n/**\r\n * 数値入力 最大値 最小値 設定可能コンポーネント\r\n * @param props\r\n * @returns\r\n */\r\nconst NumericEntry_input_EmptyUse: React.FC = (props: NumericEntry_inputExProps) => {\r\n console.debug(['NumericEntry_input_EmptyUse - props', props]);\r\n const initVal = props.fixed != undefined ?\r\n (props.value == undefined || props.value == null ? '' : props.value.toFixed(props.fixed)) :\r\n (props.value == undefined || props.value == null ? '' : props.value.toString());\r\n const [val, setVal] = useState('');\r\n //console.debug(['NumericEntry_input_EmptyUse - initVal', initVal, val]);\r\n useEffect(() => {\r\n console.debug(['NumericEntry_input_EmptyUse - useEffect', initVal, val]);\r\n }, [props.value]);\r\n\r\n useEffect(() => {\r\n setVal(initVal ?? '');\r\n console.debug(['-NumericEntry_input_EmptyUse - useEffect first', initVal, val]);\r\n }, []);\r\n\r\n return (\r\n {\r\n const inputValue = e.target.value;\r\n //console.debug(['-NumericEntry_inputExCopy input', inputValue]);\r\n\r\n if (props.onChange) {\r\n if (inputValue.trim() === '') {\r\n //props.onChange(null); // ブランクはnullとして扱う\r\n console.debug(['-NumericEntry_input_EmptyUse brank', inputValue]);\r\n setVal('');\r\n } else {\r\n const parsedValue = parseFloat(inputValue);\r\n if (!isNaN(parsedValue)) {\r\n console.debug(['-NumericEntry_input_EmptyUse not empty-', inputValue]);\r\n setVal(inputValue);\r\n }\r\n else {\r\n console.debug(['-NumericEntry_input_EmptyUse empty-', inputValue]);\r\n setVal('');\r\n }\r\n }\r\n }\r\n }}\r\n onBlur={(e) => {\r\n //入力値が空の場合\r\n if (val.trim() === '') {\r\n if (props.onChange) {\r\n props.onChange(null);\r\n }\r\n }\r\n else {\r\n //入力値が空でない場合\r\n const cv = CheckValLimit(val !== '' ? parseFloat(val) : null, props.minValueLimit, props.maxValueLimit);\r\n const ret = props.fixed != undefined ? (cv !== null ? cv.toFixed(props.fixed) : '') : (cv !== null ? cv.toString() : '');\r\n console.debug(`-NumericEntry_input_EmptyUse onBlur - props.fixed:${props.fixed}, setval:${ret}`);\r\n setVal(ret);\r\n\r\n if (props.onChange) {\r\n props.onChange(Number(ret));\r\n }\r\n }\r\n }}\r\n onFocus={(e) => e.target.select()}\r\n />\r\n );\r\n};\r\n\r\nexport default NumericEntry_input_EmptyUse;\r\n","import { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\n\r\nexport const TableBaseStyle = makeStyles(\r\n createStyles({\r\n tableHeader: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n padding: '1px',\r\n minWidth: '80px',\r\n borderCollapse: `collapse`,\r\n },\r\n tableTd: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '0px',\r\n minWidth: '80px',\r\n },\r\n colTime: {\r\n textAlign: 'center',\r\n },\r\n })\r\n);","import React, { useEffect, useState } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { TableBaseStyle } from './LayerShortSettingStyle';\r\n\r\n\r\nconst LayerShortSettingHeader: React.FC = () => {\r\n const { t } = useTranslation();\r\n const classes = TableBaseStyle();\r\n\r\n return (\r\n \r\n {t('LayerShortSettingHeader.項目', '項目')}\r\n {t('LayerShortSettingHeader.設定値', '設定値')}\r\n \r\n )\r\n};\r\n\r\nexport default LayerShortSettingHeader;","import React, { useEffect, useState } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { TableBaseStyle } from './LayerShortSettingStyle';\r\n\r\n\r\nconst LayerShortSettingHeader2: React.FC = () => {\r\n const { t } = useTranslation();\r\n const classes = TableBaseStyle();\r\n\r\n return (\r\n \r\n {t('LayerShortSettingHeader2.閾値', '閾値(割合)')}\r\n {t('LayerShortSettingHeader2.R相', 'R相')}\r\n {t('LayerShortSettingHeader2.S相', 'S相')}\r\n {t('LayerShortSettingHeader2.T相', 'T相')}\r\n \r\n )\r\n};\r\n\r\nexport default LayerShortSettingHeader2;","import React, { useEffect, useState, useContext, useMemo, MouseEventHandler } from 'react';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport NumericEntry_input_EmptyUse from '../../../../atoms/Input/NumericEntry_input_EmptyUse';\r\nimport { NAME_DEV_SET, GetNameDevSetList } from '../../../../../function/NameDevSetModel';\r\n\r\nimport { DeviceRegistPageStyle, TableBaseStyle } from '../DeviceRegistStyle';\r\nimport LayerShortSettingHeader from './LayerShortSettingHeader';\r\nimport LayerShortSettingHeader2 from './LayerShortSettingHeader2';\r\n\r\nexport type LayerShortSettingDialogBodyProps = {\r\n nameDevSetRow: NAME_DEV_SET;\r\n updateItem: (item: NAME_DEV_SET) => void;\r\n};\r\n\r\nexport type LayerShortSettingDialogBodyResponse = { devindex: number; };\r\n\r\n\r\nconst LayerShortSettingDialogBody: React.FC = (props: LayerShortSettingDialogBodyProps) => {\r\n const { t } = useTranslation();\r\n const tableBaseStyle = TableBaseStyle();\r\n const pageStyle = DeviceRegistPageStyle();\r\n\r\n const [smoothW0, setSmoothW0] = useState(props.nameDevSetRow.SMOOTH_W0 !== null ? String(props.nameDevSetRow.SMOOTH_W0) : '');\r\n const [smoothW1, setSmoothW1] = useState(props.nameDevSetRow.SMOOTH_W1 !== null ? String(props.nameDevSetRow.SMOOTH_W1) : '');\r\n const [smoothW2, setSmoothW2] = useState(props.nameDevSetRow.SMOOTH_W2 !== null ? String(props.nameDevSetRow.SMOOTH_W2) : '');\r\n const [thSigma, setThSigma] = useState(props.nameDevSetRow.TH_SIGMA !== null ? String(props.nameDevSetRow.TH_SIGMA) : '');\r\n const [thLR, setThLR] = useState(props.nameDevSetRow.TH_L_R !== null ? String(props.nameDevSetRow.TH_L_R) : '');\r\n const [thLS, setThLS] = useState(props.nameDevSetRow.TH_L_S !== null ? String(props.nameDevSetRow.TH_L_S) : '');\r\n const [thLT, setThLT] = useState(props.nameDevSetRow.TH_L_T !== null ? String(props.nameDevSetRow.TH_L_T) : '');\r\n const [thHR, setThHR] = useState(props.nameDevSetRow.TH_H_R !== null ? String(props.nameDevSetRow.TH_H_R) : '');\r\n const [thHS, setThHS] = useState(props.nameDevSetRow.TH_H_S !== null ? String(props.nameDevSetRow.TH_H_S) : '');\r\n const [thHT, setThHT] = useState(props.nameDevSetRow.TH_H_T !== null ? String(props.nameDevSetRow.TH_H_T) : '');\r\n\r\n useEffect(() => {\r\n console.debug(\"LayerShortSettingDialogBody useEffect body\", props.nameDevSetRow.SMOOTH_W0);\r\n setSmoothW0(props.nameDevSetRow.SMOOTH_W0 !== null ? String(props.nameDevSetRow.SMOOTH_W0) : '');\r\n setSmoothW1(props.nameDevSetRow.SMOOTH_W1 !== null ? String(props.nameDevSetRow.SMOOTH_W1) : '');\r\n setSmoothW2(props.nameDevSetRow.SMOOTH_W2 !== null ? String(props.nameDevSetRow.SMOOTH_W2) : '');\r\n setThSigma(props.nameDevSetRow.TH_SIGMA !== null ? String(props.nameDevSetRow.TH_SIGMA) : '');\r\n setThLR(props.nameDevSetRow.TH_L_R !== null ? String(props.nameDevSetRow.TH_L_R) : '');\r\n setThLS(props.nameDevSetRow.TH_L_S !== null ? String(props.nameDevSetRow.TH_L_S) : '');\r\n setThLT(props.nameDevSetRow.TH_L_T !== null ? String(props.nameDevSetRow.TH_L_T) : '');\r\n setThHR(props.nameDevSetRow.TH_H_R !== null ? String(props.nameDevSetRow.TH_H_R) : '');\r\n setThHS(props.nameDevSetRow.TH_H_S !== null ? String(props.nameDevSetRow.TH_H_S) : '');\r\n setThHT(props.nameDevSetRow.TH_H_T !== null ? String(props.nameDevSetRow.TH_H_T) : '');\r\n }, [])\r\n\r\n console.debug(['NumericEntry_inputExCopy loop']);\r\n\r\n console.debug('LayerShortSettingDialogBody check', props.nameDevSetRow);\r\n\r\n return (\r\n <>\r\n {/**レアショート判定のボディーの呼び出し */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/** 窓幅設定 */}\r\n \r\n \r\n {t('LayerShortSettingDialogBody.生波形の平滑化 窓幅', '生波形の平滑化 窓幅W0')}\r\n \r\n \r\n {\r\n setSmoothW0(String(val === null ? '' : val));\r\n props.nameDevSetRow.SMOOTH_W0 = val;\r\n props.updateItem(props.nameDevSetRow);\r\n }}\r\n />\r\n \r\n \r\n {/** 短い窓幅設定 */}\r\n \r\n \r\n {t('LayerShortSettingDialogBody.生波形の平滑化 短い窓幅', '生波形の平滑化 短い窓幅W1')}\r\n \r\n \r\n {\r\n setSmoothW1(String(val === null ? '' : val));\r\n props.nameDevSetRow.SMOOTH_W1 = val;\r\n props.updateItem(props.nameDevSetRow);\r\n }}\r\n />\r\n \r\n \r\n {/** 長い窓幅設定 */}\r\n \r\n \r\n {t('LayerShortSettingDialogBody.生波形の平滑化 長い窓幅', '生波形の平滑化 長い窓幅W2')}\r\n \r\n \r\n {\r\n setSmoothW2(String(val === null ? '' : val));\r\n props.nameDevSetRow.SMOOTH_W2 = val;\r\n props.updateItem(props.nameDevSetRow);\r\n }}\r\n />\r\n \r\n \r\n {/** 閾値設定 */}\r\n \r\n \r\n {t('LayerShortSettingDialogBody.閾値Xα', '閾値Xα')}\r\n \r\n \r\n {\r\n setThSigma(String(val === null ? '' : val));\r\n props.nameDevSetRow.TH_SIGMA = val;\r\n props.updateItem(props.nameDevSetRow);\r\n }}\r\n />\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n {/** 上の項目と引き離す処理 */}\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {/** 閾値設定 軽故障*/}\r\n \r\n \r\n {t('LayerShortSettingDialogBody.軽故障', '軽故障(%)')}\r\n \r\n {/**R相 */}\r\n \r\n {\r\n console.debug(['NumericEntry_inputExCopy use onchange', val]);\r\n setThLR(String(val === null ? '' : val));\r\n props.nameDevSetRow.TH_L_R = val;\r\n props.updateItem(props.nameDevSetRow);\r\n }}\r\n />\r\n \r\n {/**S相 */}\r\n \r\n {\r\n console.debug(['NumericEntry_inputExCopy use thLS', val, thLS])\r\n setThLS(String(val === null ? '' : val));\r\n props.nameDevSetRow.TH_L_S = val;\r\n props.updateItem(props.nameDevSetRow);\r\n }}\r\n />\r\n \r\n {/**T相 */}\r\n \r\n {\r\n setThLT(val === null ? '' : String(val));\r\n props.nameDevSetRow.TH_L_T = val;\r\n props.updateItem(props.nameDevSetRow);\r\n\r\n }}\r\n />\r\n \r\n \r\n {/** 閾値設定 */}\r\n \r\n \r\n {t('LayerShortSettingDialogBody.重故障', '重故障(%)')}\r\n \r\n {/**R相 */}\r\n \r\n {\r\n setThHR(String(val === null ? '' : val));\r\n props.nameDevSetRow.TH_H_R = val;\r\n props.updateItem(props.nameDevSetRow);\r\n }}\r\n />\r\n \r\n {/**S相 */}\r\n \r\n {\r\n setThHS(String(val === null ? '' : val));\r\n props.nameDevSetRow.TH_H_S = val;\r\n props.updateItem(props.nameDevSetRow);\r\n }}\r\n />\r\n \r\n {/**T相 */}\r\n \r\n {\r\n setThHT(String(val === null ? '' : val));\r\n props.nameDevSetRow.TH_H_T = val;\r\n props.updateItem(props.nameDevSetRow);\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\nexport default LayerShortSettingDialogBody;","import React, { useEffect, useState, useContext } from 'react';\r\nimport { DialogAction, useModal } from '../../../../../function/useModal';\r\nimport {\r\n Button,\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n DialogActions,\r\n TextField,\r\n Box,\r\n Typography,\r\n} from '@material-ui/core';\r\nimport SimpleDialog from '../../../../atoms/Dialog/SimpleDialog';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { SettingsState } from '../../../../organisms/SelectSettings';\r\nimport { NAME_DEV_SET, GetNameDevSetRow, SetNameDevSetRow } from '../../../../../function/NameDevSetModel';\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../../../atoms/Dialog/ConfirmDialog';\r\nimport MessageDialog, { MessageDialogResponse } from '../../../../atoms/Dialog/MessageDialog';\r\nimport { ErrorCode } from '../../../../../ErrorCode';\r\n\r\nimport { DeviceRegistPageStyle, TableBaseStyle } from '../DeviceRegistStyle';\r\nimport LayerShortSettingDialogBody from './LayerShortSettingDialogBody';\r\nimport { SetJudgeSettingLayerShort } from '../../../../../function/JudgeSettingSelectModel';\r\n\r\nexport type LayerShortSettingDialogProps = {\r\n editData: SettingsState;\r\n};\r\n\r\nexport type LayerShortSettingDialogResponse = { devindex: number; };\r\n\r\n\r\nconst LayerShortSettingDialog: React.FC = (props: LayerShortSettingDialogProps) => {\r\n const { t } = useTranslation();\r\n const pageStyle = DeviceRegistPageStyle();\r\n const [flgCfmDlg, actCfmDlg] = useModal();\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n const [isUpdateDisp, setIsUpdateDisp] = useState(false);\r\n const [devRow, setDevRow] = useState({\r\n DEV_INDEX: 0,\r\n EST: 0,\r\n DEV_NO: '',\r\n DEV_NAME: '',\r\n FLG_MOTOR: 0,\r\n REV_VAL: 0,\r\n RATED_CUR: 0,\r\n BEARING_LD: '',\r\n BEARING_ANTI_LD: '',\r\n RATED_SPEED: 0,\r\n RATED_POWER: 0,\r\n POLE: 0,\r\n VOLTAGE: 0,\r\n PWR_FREQ: 0,\r\n EXC_CUR: 0,\r\n INV_FREQ: 0,\r\n WEALTH: 0,\r\n START_JDG_CUR: 0,\r\n NOTE: '',\r\n CAREER_MASK: 0,\r\n WAV_MAKE: 0,\r\n INV_DRV_ON: 0,\r\n EMC_TYPE: 0,\r\n SMOOTH_W0: 0,\r\n SMOOTH_W1: 0,\r\n SMOOTH_W2: 0,\r\n TH_SIGMA: 0,\r\n TH_L_R: 0,\r\n TH_L_S: 0,\r\n TH_L_T: 0,\r\n TH_H_R: 0,\r\n TH_H_S: 0,\r\n TH_H_T: 0,\r\n SPD_UP_FREQ: 0,\r\n SPD_LO_FREQ: 0,\r\n DSP_UP_FREQ: 0,\r\n DSP_LO_FREQ: 0,\r\n startJdgCurPer: 0,\r\n });\r\n\r\n const [buttonEnable, setButtonEnable] = useState(true);\r\n\r\n\r\n\r\n const cfmdlg = flgCfmDlg ? (\r\n \r\n ) : null;\r\n const msgdlg = flgMsgDlg ? : null;\r\n\r\n console.debug('loop count', devRow);\r\n // useEffect(() => {\r\n // /** 初期設定 */\r\n // // setDevNo(1);\r\n // // setItemName(1);\r\n // console.debug(['LayerShortSettingDialog useEffect Check devIndex No', props.editData.selectIndexNo]);\r\n // }, []);\r\n\r\n /**\r\n * NAME_DEV_SETテーブルからデータを取得\r\n */\r\n useEffect(() => {\r\n setButtonEnable(false);\r\n GetNameDevSetRow(props.editData.selectIndexNo !== undefined ? props.editData.selectIndexNo : 0)\r\n .then((res) => {\r\n if (res !== undefined) {\r\n console.debug(['GetNameDevSetRow check', res]);\r\n setDevRow(res);\r\n }\r\n props.editData.IsUpdate = false;\r\n setButtonEnable(true);\r\n })\r\n .catch((e) => {\r\n setDlgmsg(t('LayerShortSettingDialog.データ取得中にエラーが発生しました', 'データ取得中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n })\r\n .finally(() => {\r\n\r\n setButtonEnable(true);\r\n });\r\n }, []);//isUpdateDisp, props.editData.CancelCondition\r\n\r\n /**\r\n * タブ遷移時の保存\r\n */\r\n useEffect(() => {\r\n props.editData.SaveFunction = saveAction2;\r\n props.editData.IsUpdate = false;\r\n }, [props.editData.CancelCondition]);\r\n\r\n /**\r\n * NAME_DEV_SETの更新処理\r\n * @param item\r\n */\r\n const updateDev = (item: NAME_DEV_SET) => {\r\n if (item.DEV_INDEX === devRow.DEV_INDEX) {\r\n setDevRow(item);\r\n props.editData.Target = item;\r\n props.editData.IsUpdate = true;\r\n }\r\n };\r\n\r\n /**\r\n * キャンセル処理\r\n */\r\n const cancelAction = () => {\r\n //編集済みの場合確認する\r\n if (props.editData.IsUpdate) {\r\n setDlgmsg(\r\n t(\r\n 'LayerShortSettingDialog.保存していないデータを破棄しますよろしいですか',\r\n '保存していないデータを破棄します。\\nよろしいですか?'\r\n )\r\n );\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n props.editData.IsUpdate = false;\r\n console.debug(t('LayerShortSettingDialog.実行', '実行'));\r\n\r\n if (props.editData.CloseDialog !== undefined) {\r\n console.debug('LayerShortSettingDialog closeAction complete');\r\n props.editData.CloseDialog();\r\n }\r\n else {\r\n console.debug('LayerShortSettingDialog closeAction failuer');\r\n }\r\n\r\n })\r\n .cancel(() => {\r\n console.debug(t('LayerShortSettingDialog.キャンセル', 'キャンセル'));\r\n });\r\n } else {\r\n if (props.editData.CloseDialog !== undefined) {\r\n console.debug('LayerShortSettingDialog closeAction complete');\r\n props.editData.CloseDialog();\r\n }\r\n else {\r\n console.debug('LayerShortSettingDialog closeAction failuer');\r\n }\r\n }\r\n };\r\n\r\n\r\n /**\r\n * 保存処理\r\n */\r\n const saveAction = () => {\r\n //未編修なら実行しない\r\n if (props.editData.IsUpdate === false) {\r\n console.debug(\"LayerShortSettingDialog not edited\");\r\n return;\r\n }\r\n\r\n //保存前チェック\r\n if (!checkInputData(devRow)) {\r\n return;\r\n }\r\n setDlgmsg(t('LayerShortSettingDialog.保存しますか?', '保存しますか?'));\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n setButtonEnable(false);\r\n saveProc(devRow).finally(() => {\r\n setButtonEnable(true);\r\n });\r\n })\r\n .cancel(() => { });\r\n }\r\n\r\n /**\r\n * 保存\r\n */\r\n const saveProc = (target: object): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const devItem = target as NAME_DEV_SET;\r\n if (devItem) {\r\n SetNameDevSetRow(devRow)\r\n .then((res) => {\r\n console.debug(`LayerShortSettingDialog SetNameDevSetRow res : ${res}`);\r\n if (res.ErrorCode === ErrorCode.ERR_CODE_NONE) {\r\n\r\n //判定値設定に移動平均法を追加・書換\r\n SetJudgeSettingLayerShort(devItem.DEV_INDEX)\r\n .then((res2) => {\r\n console.debug(`LayerShortSettingDialog SetLayerShortItem res : ${res2}`);\r\n if (res2.ErrorCode == ErrorCode.ERR_CODE_NONE) {\r\n props.editData.IsUpdate = false;\r\n setIsUpdateDisp(!isUpdateDisp);\r\n setDlgmsg(t('LayerShortSettingDialog.保存が完了しました\\nダイアログを閉じますか', '保存が完了しました\\nダイアログを閉じますか'));\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n props.editData.IsUpdate = false;\r\n console.debug(t('LayerShortSettingDialog.実行', '実行'));\r\n\r\n if (props.editData.CloseDialog !== undefined) {\r\n console.debug('LayerShortSettingDialog closeAction complete');\r\n props.editData.CloseDialog();\r\n }\r\n else {\r\n console.debug('LayerShortSettingDialog closeAction failuer');\r\n }\r\n })\r\n .cancel(() => {\r\n console.debug(t('LayerShortSettingDialog.キャンセル', 'キャンセル'));\r\n });\r\n\r\n // props.editData.CloseSetting();\r\n resolve('done');\r\n } else {\r\n if (res2.ErrorCode === ErrorCode.ERR_CODE_JSET_MOVE_AVERAGE_ADD_CHANGE) {\r\n if (res2.ErrorMessage == \"移動平均の追加に失敗しました\") {\r\n setDlgmsg(t('LayerShortSettingDialog.移動平均の追加に失敗しました', '移動平均の追加に失敗しました'));\r\n actMsgDlg.open();\r\n console.error(['LayerShortSettingDialog Moving average addition failure']);\r\n reject('data error');\r\n }\r\n else {\r\n //res2.ErrorMessageにPLC_NOとAI_CARD、AI_CHが渡ってきている\r\n setDlgmsg(res2.ErrorMessage + t('LayerShortSettingDialog.に空き行がなかったため\\n判定値設定に移動平均の追加ができませんでした', 'に空き行がなかったため\\n判定値設定に移動平均の追加ができませんでした'));\r\n actMsgDlg.open();\r\n console.error(['LayerShortSettingDialog Moving average addition failure', res2.ErrorMessage]);\r\n reject('data error');\r\n }\r\n }\r\n else if (res2.ErrorCode === ErrorCode.ERR_CODE_JSET_MOVE_AVERAGE_RST) {\r\n if (res2.ErrorMessage === '移動平均の行の初期化に失敗しました') {\r\n setDlgmsg(t('LayerShortSettingDialog.移動平均の行の初期化に失敗しました', '移動平均の行の初期化に失敗しました'));\r\n actMsgDlg.open();\r\n console.error(['LayerShortSettingDialog Moving average reset failure']);\r\n reject('data error');\r\n }\r\n else {\r\n setDlgmsg(res2.ErrorMessage + t('LayerShortSettingDialog.の移動平均行の初期化に失敗しました', 'の移動平均行の初期化に失敗しました'));\r\n actMsgDlg.open();\r\n console.error(['LayerShortSettingDialog Moving average reset failure', res2.ErrorMessage]);\r\n reject('data error');\r\n }\r\n }\r\n }\r\n })\r\n } else {\r\n setDlgmsg(t('LayerShortSettingDialog.移動平均の保存に失敗しました', '移動平均の保存に失敗しました'));\r\n actMsgDlg.open();\r\n console.error(['LayerShortSettingDialog save failed']);\r\n reject('update fault');\r\n }\r\n })\r\n .catch((error) => {\r\n console.error('LayerShortSettingDialog SetNameDevSetRow : ' + error);\r\n });\r\n } else {\r\n reject('data error');\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * タブ遷移時の保存処理\r\n * @param param \r\n * @returns \r\n */\r\n const saveAction2 = (param: object): Promise => {\r\n console.debug([\"--LayerShortSettingDialog saveAction2 strat--\"]);\r\n return new Promise((resolve, reject) => {\r\n const devItem = param as NAME_DEV_SET;\r\n //保存前チェック\r\n if (!checkInputData(devItem)) {\r\n return;\r\n }\r\n setButtonEnable(false);\r\n\r\n SetNameDevSetRow(devItem)\r\n .then((r) => {\r\n props.editData.IsUpdate = false;\r\n console.debug('saveAction ok');\r\n resolve('done');\r\n })\r\n .catch((r) => {\r\n setDlgmsg(t('LayerShortSettingDialog.保存中にエラーが発生しました', '保存中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n console.error(['saveAction error', r]);\r\n reject('data error');\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n\r\n })\r\n }\r\n\r\n /**\r\n * 入力値が奇数か確認\r\n * 短い窓幅と長い窓幅の大きさチェック\r\n * nullチェック\r\n * @returns \r\n */\r\n const checkInputData = (nameDevRow: NAME_DEV_SET): boolean => {\r\n console.debug(\"LayerShortSettingDialog input check Start\");\r\n {/**窓幅 */ }\r\n if (nameDevRow.SMOOTH_W0 !== null) {\r\n if (nameDevRow.SMOOTH_W0 < 1) {\r\n setDlgmsg(t('LayerShortSettingDialog.窓幅の値が最小値より小さいです', '窓幅の値が最小値より小さいです'));\r\n actMsgDlg.open();\r\n console.warn(\"LayerShortSettingDialog SMOOTH_W0 < minValue\");\r\n return false;\r\n }\r\n else if (nameDevRow.SMOOTH_W0 > 199) {\r\n setDlgmsg(t('LayerShortSettingDialog.窓幅の値が最大値より大きいです', '窓幅の値が最大値より大きいです'));\r\n actMsgDlg.open();\r\n console.warn(\"LayerShortSettingDialog SMOOTH_W0 > minValue\");\r\n return false;\r\n }\r\n if (nameDevRow.SMOOTH_W0 % 2 == 0) {\r\n setDlgmsg(t('LayerShortSettingDialog.窓幅の値が偶数です', '窓幅の値が偶数です。奇数を入力してください'));\r\n actMsgDlg.open();\r\n console.warn(\"LayerShortSettingDialog input check NG\");\r\n return false;\r\n }\r\n }\r\n else {\r\n setDlgmsg(t('LayerShortSettingDialog.窓幅の値が空です\\n値を入力してください', '窓幅の値が空です\\n値を入力してください'));\r\n actMsgDlg.open();\r\n console.warn(\"LayerShortSettingDialog input check NG\");\r\n return false;\r\n }\r\n {/**短い窓幅 */ }\r\n if (nameDevRow.SMOOTH_W1 !== null) {\r\n if (nameDevRow.SMOOTH_W1 < 1) {\r\n setDlgmsg(t('LayerShortSettingDialog.短い窓幅の値が最小値より小さいです', '短い窓幅の値が最小値より小さいです'));\r\n actMsgDlg.open();\r\n console.warn(\"LayerShortSettingDialog SMOOTH_W1 < minValue\");\r\n return false;\r\n }\r\n else if (nameDevRow.SMOOTH_W1 > 199) {\r\n setDlgmsg(t('LayerShortSettingDialog.短い窓幅の値が最大値より大きいです', '短い窓幅の値が最大値より大きいです'));\r\n actMsgDlg.open();\r\n console.warn(\"LayerShortSettingDialog SMOOTH_W1 > minValue\");\r\n return false;\r\n }\r\n\r\n if (nameDevRow.SMOOTH_W1 % 2 == 0) {\r\n setDlgmsg(t('LayerShortSettingDialog.短い窓幅の値が偶数です', '短い窓幅の値が偶数です。奇数を入力してください'));\r\n actMsgDlg.open();\r\n console.warn(\"LayerShortSettingDialog input check NG\");\r\n return false;\r\n }\r\n }\r\n else {\r\n setDlgmsg(t('LayerShortSettingDialog.短い窓幅の値が空です\\n値を入力してください', '短い窓幅の値が空です\\n値を入力してください'));\r\n actMsgDlg.open();\r\n console.warn(\"LayerShortSettingDialog input check NG\");\r\n return false;\r\n }\r\n {/**長い窓幅 */ }\r\n if (nameDevRow.SMOOTH_W2 !== null) {\r\n if (nameDevRow.SMOOTH_W2 < 1) {\r\n setDlgmsg(t('LayerShortSettingDialog.長い窓幅の値が最小値より小さいです', '長い窓幅の値が最小値より小さいです'));\r\n actMsgDlg.open();\r\n console.warn(\"LayerShortSettingDialog SMOOTH_W2 < minValue\");\r\n return false;\r\n }\r\n else if (nameDevRow.SMOOTH_W2 > 199) {\r\n setDlgmsg(t('LayerShortSettingDialog.長い窓幅の値が最大値より大きいです', '長い窓幅の値が最大値より大きいです'));\r\n actMsgDlg.open();\r\n console.warn(\"LayerShortSettingDialog SMOOTH_W2 > minValue\");\r\n return false;\r\n }\r\n\r\n if (nameDevRow.SMOOTH_W2 % 2 == 0) {\r\n setDlgmsg(t('LayerShortSettingDialog.長い窓幅の値が偶数です', '長い窓幅の値が偶数です。奇数を入力してください'));\r\n actMsgDlg.open();\r\n console.warn(\"LayerShortSettingDialog input check NG\");\r\n return false;\r\n }\r\n }\r\n else {\r\n setDlgmsg(t('LayerShortSettingDialog.長い窓幅の値が空です\\n値を入力してください', '長い窓幅の値が空です\\n値を入力してください'));\r\n actMsgDlg.open();\r\n console.warn(\"LayerShortSettingDialog input check NG\");\r\n return false;\r\n }\r\n {/**閾値xσ */ }\r\n if (nameDevRow.TH_SIGMA === null) {\r\n setDlgmsg(t('LayerShortSettingDialog.閾値xσが空です\\n値を入力してください', '閾値xσが空です\\n値を入力してください'));\r\n actMsgDlg.open();\r\n console.warn(\"LayerShortSettingDialog input check NG\");\r\n return false;\r\n }\r\n else {\r\n if (nameDevRow.TH_SIGMA < 0.01) {\r\n setDlgmsg(t('LayerShortSettingDialog.閾値xσの値が最小値より小さいです', '閾値xσの値が最小値より小さいです'));\r\n actMsgDlg.open();\r\n console.warn(\"LayerShortSettingDialog TH_SIGMA < minValue\");\r\n return false;\r\n }\r\n else if (nameDevRow.TH_SIGMA > 9.99) {\r\n setDlgmsg(t('LayerShortSettingDialog.閾値xσの値が最大値より大きいです', '閾値xσの値が最大値より大きいです'));\r\n actMsgDlg.open();\r\n console.warn(\"LayerShortSettingDialog TH_SIGMA > minValue\");\r\n return false;\r\n }\r\n }\r\n {/**軽故障閾値R相 */ }\r\n if (nameDevRow.TH_L_R !== null) {\r\n if (nameDevRow.TH_L_R < 0.1) {\r\n setDlgmsg(t('LayerShortSettingDialog.軽故障R相の値が最小値より小さいです', '軽故障R相の値が最小値より小さいです'));\r\n actMsgDlg.open();\r\n console.warn(\"LayerShortSettingDialog TH_L_R < minValue\");\r\n return false;\r\n }\r\n else if (nameDevRow.TH_L_R > 99.9) {\r\n setDlgmsg(t('LayerShortSettingDialog.軽故障R相の値が最大値より大きいです', '軽故障R相の値が最大値より大きいです'));\r\n actMsgDlg.open();\r\n console.warn(\"LayerShortSettingDialog TH_L_R > minValue\");\r\n return false;\r\n }\r\n }\r\n // else{\r\n // setDlgmsg(t('LayerHortSettingDialog.軽故障閾値R相が空です\\n値を入力してください', '軽故障閾値R相が空です\\n値を入力してください'));\r\n // actMsgDlg.open();\r\n // console.warn(\"LayerShortSettingDialog input check NG\");\r\n // return false;\r\n // }\r\n\r\n {/**軽故障閾値S相 */ }\r\n if (nameDevRow.TH_L_S !== null) {\r\n if (nameDevRow.TH_L_S < 0.1) {\r\n setDlgmsg(t('LayerShortSettingDialog.軽故障S相の値が最小値より小さいです', '軽故障S相の値が最小値より小さいです'));\r\n actMsgDlg.open();\r\n console.warn(\"LayerShortSettingDialog TH_L_S < minValue\");\r\n return false;\r\n }\r\n else if (nameDevRow.TH_L_S > 99.9) {\r\n setDlgmsg(t('LayerShortSettingDialog.軽故障S相の値が最大値より大きいです', '軽故障S相の値が最大値より大きいです'));\r\n actMsgDlg.open();\r\n console.warn(\"LayerShortSettingDialog TH_L_S > minValue\");\r\n return false;\r\n }\r\n }\r\n // else{\r\n // setDlgmsg(t('LayerHortSettingDialog.軽故障閾値S相が空です\\n値を入力してください', '軽故障閾値S相が空です\\n値を入力してください'));\r\n // actMsgDlg.open();\r\n // console.warn(\"LayerShortSettingDialog input check NG\");\r\n // return false;\r\n // }\r\n\r\n {/**軽故障閾値T相 */ }\r\n if (nameDevRow.TH_L_T !== null) {\r\n if (nameDevRow.TH_L_T < 0.1) {\r\n setDlgmsg(t('LayerShortSettingDialog.軽故障T相の値が最小値より小さいです', '軽故障T相の値が最小値より小さいです'));\r\n actMsgDlg.open();\r\n console.warn(\"LayerShortSettingDialog TH_L_T < minValue\");\r\n return false;\r\n }\r\n else if (nameDevRow.TH_L_T > 99.9) {\r\n setDlgmsg(t('LayerShortSettingDialog.軽故障T相の値が最大値より大きいです', '軽故障T相の値が最大値より大きいです'));\r\n actMsgDlg.open();\r\n console.warn(\"LayerShortSettingDialog TH_L_T > minValue\");\r\n return false;\r\n }\r\n }\r\n // else{\r\n // setDlgmsg(t('LayerHortSettingDialog.軽故障閾値T相が空です\\n値を入力してください', '軽故障閾値T相が空です\\n値を入力してください'));\r\n // actMsgDlg.open();\r\n // console.warn(\"LayerShortSettingDialog input check NG\");\r\n // return false;\r\n // }\r\n\r\n {/**重故障閾値R相 */ }\r\n if (nameDevRow.TH_H_R !== null) {\r\n if (nameDevRow.TH_H_R < 0.1) {\r\n setDlgmsg(t('LayerShortSettingDialog.重故障R相の値が最小値より小さいです', '重故障R相の値が最小値より小さいです'));\r\n actMsgDlg.open();\r\n console.warn(\"LayerShortSettingDialog TH_H_R < minValue\");\r\n return false;\r\n }\r\n else if (nameDevRow.TH_H_R > 99.9) {\r\n setDlgmsg(t('LayerShortSettingDialog.重故障R相の値が最大値より大きいです', '重故障R相の値が最大値より大きいです'));\r\n actMsgDlg.open();\r\n console.warn(\"LayerShortSettingDialog TH_H_R > minValue\");\r\n return false;\r\n }\r\n }\r\n // else {\r\n // setDlgmsg(t('LayerHortSettingDialog.重故障閾値R相が空です\\n値を入力してください', '重故障閾値R相が空です\\n値を入力してください'));\r\n // actMsgDlg.open();\r\n // console.warn(\"LayerShortSettingDialog input check NG\");\r\n // return false;\r\n // }\r\n\r\n {/**重故障閾値S相 */ }\r\n if (nameDevRow.TH_H_S !== null) {\r\n if (nameDevRow.TH_H_S < 0.1) {\r\n setDlgmsg(t('LayerShortSettingDialog.重故障S相の値が最小値より小さいです', '重故障S相の値が最小値より小さいです'));\r\n actMsgDlg.open();\r\n console.warn(\"LayerShortSettingDialog TH_H_S < minValue\");\r\n return false;\r\n }\r\n else if (nameDevRow.TH_H_S > 99.9) {\r\n setDlgmsg(t('LayerShortSettingDialog.重故障S相の値が最大値より大きいです', '重故障S相の値が最大値より大きいです'));\r\n actMsgDlg.open();\r\n console.warn(\"LayerShortSettingDialog TH_H_S > minValue\");\r\n return false;\r\n }\r\n }\r\n // else{\r\n // setDlgmsg(t('LayerHortSettingDialog.重故障閾値S相が空です\\n値を入力してください', '重故障閾値S相が空です\\n値を入力してください'));\r\n // actMsgDlg.open();\r\n // console.warn(\"LayerShortSettingDialog input check NG\");\r\n // return false;\r\n // }\r\n\r\n {/**重故障閾値T相 */ }\r\n if (nameDevRow.TH_H_T !== null) {\r\n if (nameDevRow.TH_H_T < 0.1) {\r\n setDlgmsg(t('LayerShortSettingDialog.重故障T相の値が最小値より小さいです', '重故障T相の値が最小値より小さいです'));\r\n actMsgDlg.open();\r\n console.warn(\"LayerShortSettingDialog TH_H_T < minValue\");\r\n return false;\r\n }\r\n else if (nameDevRow.TH_H_T > 99.9) {\r\n setDlgmsg(t('LayerShortSettingDialog.重故障T相の値が最大値より大きいです', '重故障T相の値が最大値より大きいです'));\r\n actMsgDlg.open();\r\n console.warn(\"LayerShortSettingDialog TH_H_T > minValue\");\r\n return false;\r\n }\r\n }\r\n // else{\r\n // setDlgmsg(t('LayerHortSettingDialog.重故障閾値T相が空です\\n値を入力してください', '重故障閾値T相が空です\\n値を入力してください'));\r\n // actMsgDlg.open();\r\n // console.warn(\"LayerShortSettingDialog input check NG\");\r\n // return false;\r\n // }\r\n\r\n if (nameDevRow.SMOOTH_W1 >= nameDevRow.SMOOTH_W2) {\r\n setDlgmsg(t('LayerShortSettingDialog.短い窓幅>=長い窓幅です', '短い窓幅 >= 長い窓幅です。短い窓幅 < 長い窓幅に修正してください'));\r\n actMsgDlg.open();\r\n console.warn(\"LayerShortSettingDialog input check NG\");\r\n return false;\r\n }\r\n console.debug(\"LayerShortSettingDialog input check OK\");\r\n return true;\r\n }\r\n\r\n\r\n return (\r\n <>\r\n {/**ボディーの呼び出し処理 */}\r\n {devRow.DEV_INDEX !== 0 ?\r\n :\r\n null\r\n }\r\n\r\n \r\n {\r\n saveAction();\r\n }}\r\n >\r\n {t('LayerShortSettingDialog.保存', '保存')}\r\n \r\n {\r\n cancelAction();\r\n }}\r\n >\r\n {t('LayerShortSettingDialog.キャンセル', 'キャンセル')}\r\n \r\n \r\n {cfmdlg}\r\n {msgdlg}\r\n \r\n )\r\n}\r\n\r\nexport default LayerShortSettingDialog;","import { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\n\r\nexport const TableBaseStyle = makeStyles(\r\n createStyles({\r\n tableHeader: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n padding: '1px',\r\n minWidth: '80px',\r\n borderCollapse: `collapse`,\r\n },\r\n tableTd: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '0px',\r\n minWidth: '80px',\r\n },\r\n colTime: {\r\n textAlign: 'center',\r\n },\r\n })\r\n);","import React, { useEffect, useState } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { TableBaseStyle } from './VibrationSettingStyle';\r\n\r\n\r\nconst VibrationSettingHeader: React.FC = () => {\r\n const { t } = useTranslation();\r\n const classes = TableBaseStyle();\r\n\r\n return (\r\n \r\n {t('VibrationSettingHeader.種別', '種別')}\r\n {t('VibrationSettingHeader.上限周波数', '上限周波数(Hz)')}\r\n {t('VibrationSettingHeader.下限周波数', '下限周波数(Hz)')}\r\n \r\n )\r\n};\r\n\r\nexport default VibrationSettingHeader;","import React, { useEffect, useState, useContext } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport NumericEntry_input_EmptyUse from '../../../../atoms/Input/NumericEntry_input_EmptyUse';\r\nimport { AppContext } from '../../../../../App';\r\nimport { FFT_MAX_VALUE_CLUDO, FFT_MAX_VALUE_ONPRE } from '../../../../../Constant';\r\n\r\nimport { NAME_DEV_SET } from '../../../../../function/NameDevSetModel';\r\nimport { DeviceRegistPageStyle, TableBaseStyle } from './../DeviceRegistStyle';\r\nimport VibrationSettingHeader from './VibrationSettingHeader';\r\n\r\nexport type VibrationSettingDialogBodyProps = {\r\n nameDevSetRow: NAME_DEV_SET;\r\n updateItem: (item: NAME_DEV_SET) => void;\r\n};\r\n\r\nconst VibrationSettingDialogBody: React.FC = (props: VibrationSettingDialogBodyProps) => {\r\n const { t } = useTranslation();\r\n const pageStyle = DeviceRegistPageStyle();\r\n const tableBaseStyle = TableBaseStyle();\r\n const { login } = useContext(AppContext);\r\n\r\n const [spdUpFreq, setSpdUpFreq] = useState(props.nameDevSetRow.SPD_UP_FREQ !== null ? String(props.nameDevSetRow.SPD_UP_FREQ) : ''); //速度上限\r\n const [spdLoFreq, setSpdLoFreq] = useState(props.nameDevSetRow.SPD_LO_FREQ !== null ? String(props.nameDevSetRow.SPD_LO_FREQ) : ''); //速度下限\r\n const [dspUpFreq, setDspUpFreq] = useState(props.nameDevSetRow.DSP_UP_FREQ !== null ? String(props.nameDevSetRow.DSP_UP_FREQ) : ''); //変位上限\r\n const [dspLoFreq, setDspLoFreq] = useState(props.nameDevSetRow.DSP_LO_FREQ !== null ? String(props.nameDevSetRow.DSP_LO_FREQ) : ''); //変位下限下\r\n\r\n useEffect(() => {\r\n console.debug(\"VibrationSettingDialogBody useEffect body\", props.nameDevSetRow.SMOOTH_W0);\r\n setSpdUpFreq(props.nameDevSetRow.SPD_UP_FREQ !== null ? String(props.nameDevSetRow.SPD_UP_FREQ) : '');\r\n setSpdLoFreq(props.nameDevSetRow.SPD_LO_FREQ !== null ? String(props.nameDevSetRow.SPD_LO_FREQ) : '');\r\n setDspUpFreq(props.nameDevSetRow.DSP_UP_FREQ !== null ? String(props.nameDevSetRow.DSP_UP_FREQ) : '');\r\n setDspLoFreq(props.nameDevSetRow.DSP_LO_FREQ !== null ? String(props.nameDevSetRow.DSP_LO_FREQ) : '');\r\n }, [])\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {t('VibrationSettingDialogBody.振動速度', '振動(速度)')}\r\n \r\n {/** 振動(速度) 上限周波数 */}\r\n \r\n {\r\n setSpdUpFreq(String(val === null ? '' : val));\r\n props.nameDevSetRow.SPD_UP_FREQ = val;\r\n props.updateItem(props.nameDevSetRow);\r\n }}\r\n />\r\n \r\n {/** 振動(速度) 下限周波数 */}\r\n \r\n {\r\n setSpdLoFreq(String(val === null ? '' : val));\r\n props.nameDevSetRow.SPD_LO_FREQ = val;\r\n props.updateItem(props.nameDevSetRow);\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n {t('VibrationSettingDialogBody.振動変位', '振動(変位)')}\r\n \r\n {/** 振動(変位) 上限周波数 */}\r\n \r\n {\r\n setDspUpFreq(String(val === null ? '' : val));\r\n props.nameDevSetRow.DSP_UP_FREQ = val;\r\n props.updateItem(props.nameDevSetRow);\r\n }}\r\n />\r\n \r\n {/** 振動(変位) 下限周波数 */}\r\n \r\n {\r\n setDspLoFreq(String(val === null ? '' : val));\r\n props.nameDevSetRow.DSP_LO_FREQ = val;\r\n props.updateItem(props.nameDevSetRow);\r\n }}\r\n />\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n )\r\n}\r\nexport default VibrationSettingDialogBody;","import React, { useEffect, useState, useContext } from 'react';\r\nimport { DialogAction, useModal } from '../../../../../function/useModal';\r\nimport {\r\n Button,\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n DialogActions,\r\n TextField,\r\n Box,\r\n Typography,\r\n} from '@material-ui/core';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport { useTranslation } from 'react-i18next';\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../../../atoms/Dialog/ConfirmDialog';\r\nimport MessageDialog, { MessageDialogResponse } from '../../../../atoms/Dialog/MessageDialog';\r\nimport { SettingsState } from '../../../../organisms/SelectSettings';\r\nimport { NAME_DEV_SET, GetNameDevSetRow, SetNameDevSetRow } from '../../../../../function/NameDevSetModel';\r\nimport { ErrorCode } from '../../../../../ErrorCode';\r\nimport { AppContext } from '../../../../../App';\r\nimport { FFT_MAX_VALUE_CLUDO, FFT_MAX_VALUE_ONPRE } from '../../../../../Constant';\r\n\r\nimport { DeviceRegistPageStyle, TableBaseStyle } from './../DeviceRegistStyle';\r\nimport VibrationSettingDialogBody from './VibrationSettingDialogBody';\r\n\r\n\r\nexport type VibrationSettingDialogProps = {\r\n editData: SettingsState;\r\n};\r\n\r\nexport type VibrationSettingDialogResponse = {};\r\n\r\n\r\nconst VibrationSettingDialog: React.FC = (props: VibrationSettingDialogProps) => {\r\n const { t } = useTranslation();\r\n const pageStyle = DeviceRegistPageStyle();\r\n\r\n const [flgCfmDlg, actCfmDlg] = useModal();\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n const [isUpdateDisp, setIsUpdateDisp] = useState(false);\r\n const [devRow, setDevRow] = useState({\r\n DEV_INDEX: 0,\r\n EST: 0,\r\n DEV_NO: '',\r\n DEV_NAME: '',\r\n FLG_MOTOR: 0,\r\n REV_VAL: 0,\r\n RATED_CUR: 0,\r\n BEARING_LD: '',\r\n BEARING_ANTI_LD: '',\r\n RATED_SPEED: 0,\r\n RATED_POWER: 0,\r\n POLE: 0,\r\n VOLTAGE: 0,\r\n PWR_FREQ: 0,\r\n EXC_CUR: 0,\r\n INV_FREQ: 0,\r\n WEALTH: 0,\r\n START_JDG_CUR: 0,\r\n NOTE: '',\r\n CAREER_MASK: 0,\r\n WAV_MAKE: 0,\r\n INV_DRV_ON: 0,\r\n EMC_TYPE: 0,\r\n SMOOTH_W0: 0,\r\n SMOOTH_W1: 0,\r\n SMOOTH_W2: 0,\r\n TH_SIGMA: 0,\r\n TH_L_R: 0,\r\n TH_L_S: 0,\r\n TH_L_T: 0,\r\n TH_H_R: 0,\r\n TH_H_S: 0,\r\n TH_H_T: 0,\r\n SPD_UP_FREQ: 0,\r\n SPD_LO_FREQ: 0,\r\n DSP_UP_FREQ: 0,\r\n DSP_LO_FREQ: 0,\r\n startJdgCurPer: 0,\r\n });\r\n\r\n const [buttonEnable, setButtonEnable] = useState(true);\r\n const { login } = useContext(AppContext);\r\n\r\n const cfmdlg = flgCfmDlg ? (\r\n \r\n ) : null;\r\n const msgdlg = flgMsgDlg ? : null;\r\n\r\n useEffect(() => {\r\n /** 初期設定 */\r\n // setDevNo(1);\r\n // setItemName(1);\r\n }, []);\r\n\r\n /**\r\n * NAME_DEV_SETテーブルからデータを取得\r\n */\r\n useEffect(() => {\r\n setButtonEnable(false);\r\n GetNameDevSetRow(props.editData.selectIndexNo !== undefined ? props.editData.selectIndexNo : 0)\r\n .then((res) => {\r\n if (res !== undefined) {\r\n setDevRow(res);\r\n console.debug(['GetNameDevSetRow check', res]);\r\n }\r\n props.editData.IsUpdate = false;\r\n setButtonEnable(true);\r\n })\r\n .catch((e) => {\r\n setDlgmsg(t('VibrationSettingDialog.データ取得中にエラーが発生しました', 'データ取得中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n }, []);\r\n\r\n /**\r\n * タブ遷移時の保存\r\n */\r\n useEffect(() => {\r\n props.editData.SaveFunction = saveAction2;\r\n props.editData.IsUpdate = false;\r\n }, [props.editData.CancelCondition]);\r\n\r\n /**\r\n * NAME_DEV_SETの更新処理\r\n * @param item\r\n */\r\n const updateDev = (item: NAME_DEV_SET) => {\r\n if (item.DEV_INDEX === devRow.DEV_INDEX) {\r\n setDevRow(item);\r\n props.editData.Target = item;\r\n props.editData.IsUpdate = true;\r\n }\r\n };\r\n\r\n /**\r\n * キャンセル処理\r\n */\r\n const cancelAction = () => {\r\n //編集済みの場合確認する\r\n if (props.editData.IsUpdate) {\r\n setDlgmsg(\r\n t(\r\n 'VibrationSettingDialog.保存していないデータを破棄しますよろしいですか',\r\n '保存していないデータを破棄します。\\nよろしいですか?'\r\n )\r\n );\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n props.editData.IsUpdate = false;\r\n console.debug(t('VibrationSettingDialog.実行', '実行'));\r\n\r\n if (props.editData.CloseDialog !== undefined) {\r\n console.debug('VibrationSettingDialog closeAction complete');\r\n props.editData.CloseDialog();\r\n }\r\n else {\r\n console.debug('VibrationSettingDialog closeAction failuer');\r\n }\r\n })\r\n .cancel(() => {\r\n console.debug(t('VibrationSettingDialog.キャンセル', 'キャンセル'));\r\n });\r\n } else {\r\n if (props.editData.CloseDialog !== undefined) {\r\n console.debug('VibrationSettingDialog closeAction complete');\r\n props.editData.CloseDialog();\r\n }\r\n else {\r\n console.debug('VibrationSettingDialog closeAction failuer');\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * 保存処理\r\n */\r\n const saveAction = () => {\r\n //未編修なら実行しない\r\n if (props.editData.IsUpdate === false) {\r\n console.debug(\"VibrationSettingDialog not edited\");\r\n return;\r\n }\r\n\r\n //保存前チェック\r\n if (!checkInputData(devRow)) {\r\n return;\r\n }\r\n\r\n setDlgmsg(t('VibrationSettingDialog.保存しますか?', '保存しますか?'));\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n setButtonEnable(false);\r\n saveProc(devRow).finally(() => {\r\n setButtonEnable(true);\r\n });\r\n })\r\n .cancel(() => { });\r\n }\r\n\r\n /**\r\n * 保存\r\n */\r\n const saveProc = (target: object): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const devItem = target as NAME_DEV_SET;\r\n if (devItem) {\r\n SetNameDevSetRow(devRow)\r\n .then((res) => {\r\n console.debug(`VibrationSettingDialog SetNameDevSetRow res : ${res}`);\r\n //保存完了後にダイアログを閉じるか確認\r\n if (res.ErrorCode == ErrorCode.ERR_CODE_NONE) {\r\n props.editData.IsUpdate = false;\r\n setIsUpdateDisp(!isUpdateDisp);\r\n setDlgmsg(t('VibrationSettingDialog.保存が完了しました\\nダイアログを閉じますか', '保存が完了しました\\nダイアログを閉じますか'));\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n props.editData.IsUpdate = false;\r\n console.debug(t('VibrationSettingDialog.実行', '実行'));\r\n\r\n if (props.editData.CloseDialog !== undefined) {\r\n console.debug('VibrationSettingDialog closeAction complete');\r\n props.editData.CloseDialog();\r\n }\r\n else {\r\n console.debug('VibrationSettingDialog closeAction failuer');\r\n }\r\n })\r\n .cancel(() => {\r\n console.debug(t('VibrationSettingDialog.キャンセル', 'キャンセル'));\r\n });\r\n\r\n // props.editData.CloseSetting();\r\n resolve('done');\r\n } else {\r\n setDlgmsg(t('LayerShortSettingDialog.周波数範囲設定の保存に失敗しました', '周波数範囲設定の保存に失敗しました'));\r\n actMsgDlg.open();\r\n console.error(['LayerShortSettingDialog save failed']);\r\n reject('update fault');\r\n }\r\n })\r\n .catch((error) => {\r\n console.error('VibrationSettingDialog SetNameDevSetRow : ' + error);\r\n });\r\n } else {\r\n reject('data error');\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * タブ遷移時の保存処理\r\n * @param param \r\n * @returns \r\n */\r\n const saveAction2 = (param: object): Promise => {\r\n console.debug([\"--VibrationSettingDialog saveAction2 strat--\"]);\r\n\r\n return new Promise((resolve, reject) => {\r\n const devItem = param as NAME_DEV_SET;\r\n //保存前チェック\r\n if (!checkInputData(devItem)) {\r\n return;\r\n }\r\n //console.debug([\"--sp--\", sp]);\r\n setButtonEnable(false);\r\n\r\n SetNameDevSetRow(devItem)\r\n .then((r) => {\r\n props.editData.IsUpdate = false;\r\n console.debug('saveAction ok');\r\n resolve('done');\r\n\r\n })\r\n .catch((r) => {\r\n setDlgmsg(t('VibrationSettingDialog.保存中にエラーが発生しました', '保存中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n console.error(['saveAction error', r]);\r\n reject('data error');\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n\r\n })\r\n }\r\n\r\n /**\r\n * 下限周波数 < 上限周波数か確認\r\n * @returns \r\n */\r\n const checkInputData = (nameDevRow: NAME_DEV_SET): boolean => {\r\n console.debug(\"VibrationSettingDialog input check Start\", nameDevRow);\r\n let maxValue = login.IsIoT ? FFT_MAX_VALUE_CLUDO : FFT_MAX_VALUE_ONPRE;\r\n\r\n //振動(速度)\r\n console.debug(\"devRow.SPD_LO_FREQ < devRow.SPD_UP_FREQ check\", nameDevRow.SPD_LO_FREQ, nameDevRow.SPD_UP_FREQ);\r\n if (nameDevRow.SPD_LO_FREQ === null) {\r\n setDlgmsg(t('VibrationSettingDialog.振動速度で下限周波数の値が空です\\n値を入力してください', '振動(速度)で下限周波数の値が空です\\n値を入力してください'));\r\n actMsgDlg.open();\r\n console.warn(\"VibrationSettingDialog input check NG\");\r\n return false;\r\n }\r\n else if (nameDevRow.SPD_UP_FREQ === null) {\r\n setDlgmsg(t('VibrationSettingDialog.振動速度で上限周波数の値が空です\\n値を入力してください', '振動(速度)で上限周波数の値が空です\\n値を入力してください'));\r\n actMsgDlg.open();\r\n console.warn(\"VibrationSettingDialog input check NG\");\r\n return false;\r\n }\r\n else {\r\n //DBで直接値を変更された場合のチェック\r\n if (nameDevRow.SPD_LO_FREQ < 1) {\r\n setDlgmsg(t('VibrationSettingDialog.振動速度の下限周波数の値が最小値より小さいです', '振動(速度)の下限周波数の値が最小値より小さいです'));\r\n actMsgDlg.open();\r\n console.warn(\"VibrationSettingDialog SPD_LO_FREQ < minValue\");\r\n return false;\r\n }\r\n else if (nameDevRow.SPD_LO_FREQ > maxValue) {\r\n setDlgmsg(t('VibrationSettingDialog.振動速度の下限周波数の値が最大値より大きいです', '振動(速度)の下限周波数の値が最大値より大きいです'));\r\n actMsgDlg.open();\r\n console.warn(\"VibrationSettingDialog SPD_LO_FREQ > maxValue\");\r\n return false;\r\n }\r\n\r\n if (nameDevRow.SPD_UP_FREQ < 1) {\r\n setDlgmsg(t('VibrationSettingDialog.振動速度の上限周波数の値が最小値より小さいです', '振動(速度)の上限周波数の値が最小値より小さいです'));\r\n actMsgDlg.open();\r\n console.warn(\"VibrationSettingDialog SPD_UP_FREQ < minValue\");\r\n return false;\r\n }\r\n else if (nameDevRow.SPD_UP_FREQ > maxValue) {\r\n setDlgmsg(t('VibrationSettingDialog.振動速度の上限周波数の値が最大値より大きいです', '振動(速度)の上限周波数の値が最大値より大きいです'));\r\n actMsgDlg.open();\r\n console.warn(\"VibrationSettingDialog SPD_UP_FREQ > maxValue\");\r\n return false;\r\n }\r\n\r\n if (nameDevRow.SPD_LO_FREQ >= nameDevRow.SPD_UP_FREQ) {\r\n setDlgmsg(t('VibrationSettingDialog.振動速度で下限周波数が上限周波数より大きいです', '振動(速度)で下限周波数が上限周波数より大きいです'));\r\n actMsgDlg.open();\r\n console.warn(\"VibrationSettingDialog input check NG\");\r\n return false;\r\n }\r\n }\r\n\r\n //振動(変位)\r\n console.debug(\"devRow.DSP_LO_FREQ < devRow.DSP_UP_FREQ check\", nameDevRow.DSP_LO_FREQ, nameDevRow.DSP_UP_FREQ);\r\n if (nameDevRow.DSP_LO_FREQ === null) {\r\n setDlgmsg(t('VibrationSettingDialog.振動変位で下限周波数の値が空です\\n値を入力してください', '振動(変位)で下限周波数の値が空です\\n値を入力してください'));\r\n actMsgDlg.open();\r\n console.warn(\"VibrationSettingDialog input check NG\");\r\n return false;\r\n }\r\n else if (nameDevRow.DSP_UP_FREQ === null) {\r\n setDlgmsg(t('VibrationSettingDialog.振動変位で上限周波数の値が空です\\n値を入力してください', '振動(変位)で上限周波数の値が空です\\n値を入力してください'));\r\n actMsgDlg.open();\r\n console.warn(\"VibrationSettingDialog input check NG\");\r\n return false;\r\n }\r\n else {\r\n if (nameDevRow.DSP_LO_FREQ < 1) {\r\n setDlgmsg(t('VibrationSettingDialog.振動変位の下限周波数の値が最小値より小さいです', '振動(変位)の下限周波数の値が最小値より小さいです'));\r\n actMsgDlg.open();\r\n console.warn(\"VibrationSettingDialog DSP_LO_FREQ < minValue\");\r\n return false;\r\n }\r\n else if (nameDevRow.DSP_LO_FREQ > maxValue) {\r\n setDlgmsg(t('VibrationSettingDialog.振動変位の下限周波数の値が最大値より大きいです', '振動(変位)の下限周波数の値が最大値より大きいです'));\r\n actMsgDlg.open();\r\n console.warn(\"VibrationSettingDialog DSP_LO_FREQ > maxValue\");\r\n return false;\r\n }\r\n\r\n if (nameDevRow.DSP_UP_FREQ < 1) {\r\n setDlgmsg(t('VibrationSettingDialog.振動変位の上限周波数の値が最小値より小さいです', '振動(変位)の上限周波数の値が最小値より小さいです'));\r\n actMsgDlg.open();\r\n console.warn(\"VibrationSettingDialog DSP_UP_FREQ < minValue\");\r\n return false;\r\n }\r\n else if (nameDevRow.DSP_UP_FREQ > maxValue) {\r\n setDlgmsg(t('VibrationSettingDialog.振動変位の上限周波数の値が最大値より大きいです', '振動(変位)の上限周波数の値が最大値より大きいです'));\r\n actMsgDlg.open();\r\n console.warn(\"VibrationSettingDialog DSP_UP_FREQ > maxValue\");\r\n return false;\r\n }\r\n\r\n if (nameDevRow.DSP_LO_FREQ >= nameDevRow.DSP_UP_FREQ) {\r\n setDlgmsg(t('VibrationSettingDialog.振動変位で下限周波数が上限周波数より大きいです', '振動(変位)で下限周波数が上限周波数より大きいです'));\r\n actMsgDlg.open();\r\n console.warn(\"VibrationSettingDialog input check NG\");\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n {/**ボディーの呼び出し処理 */}\r\n {devRow.DEV_INDEX !== 0 ?\r\n :\r\n null\r\n }\r\n {/** 上の項目と引き離す処理 */}\r\n
\r\n \r\n \r\n\r\n \r\n {\r\n saveAction();\r\n }}\r\n >\r\n {t('VibrationSettingDialog.保存', '保存')}\r\n \r\n {\r\n cancelAction();\r\n }}\r\n >\r\n {t('VibrationSettingDialog.キャンセル', 'キャンセル')}\r\n \r\n \r\n {cfmdlg}\r\n {msgdlg}\r\n \r\n )\r\n}\r\n\r\nexport default VibrationSettingDialog;\r\n\r\n\r\n","import React, { useEffect, useState, useContext } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { Grid } from '@material-ui/core';\r\nimport { DialogAction, useModal } from '../../../../function/useModal';\r\nimport {\r\n Button,\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n DialogActions,\r\n TextField,\r\n Box,\r\n Typography,\r\n} from '@material-ui/core';\r\n\r\nimport { useTranslation } from 'react-i18next';\r\nimport SelectSettings, { MenuContents } from '../../../organisms/SelectSettings';\r\n// import SelectSettings, { MenuContents } from '../../../organisms/SelectSettings_copy';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\n\r\nimport LayerShortSettingDialog, { LayerShortSettingDialogResponse } from './LayerShort/LayerShortSettingDialog';\r\nimport VibrationSettingDialog, { VibrationSettingDialogResponse } from './Vibration/VibrationSettingDialog';\r\nimport { DeviceRegistPageStyle } from './DeviceRegistStyle';\r\nimport DeviceRegistSettingDialogFooter from './DeviceRegistSettingDialogFooter';\r\n\r\nexport type DeviceRegistNewDialogProps = {\r\n dialog: DialogAction;\r\n index: number;\r\n};\r\n\r\nexport type DeviceRegistNewDialogResponse = {\r\n};\r\n\r\n\r\nconst DeviceRegistSettingDialog: React.FC = (props: DeviceRegistNewDialogProps) => {\r\n const { t } = useTranslation();\r\n const tableBaseStyle = DeviceRegistPageStyle();\r\n const [isOpen, setOpen] = useState(true);\r\n\r\n const [mode, setMode] = useState(true);\r\n\r\n const [cancelflg, setCancelflg] = useState(true);\r\n\r\n const menuList: MenuContents[] = [];\r\n\r\n const [flgVibrationSettingRowDlg, vibrationSettingRowDlg] = useModal();\r\n\r\n\r\n useEffect(() => {\r\n /** 初期設定 */\r\n // setDevNo(1);\r\n // setItemName(1);\r\n //setCancelflg(false);\r\n console.debug(['DeviceRegistSettingDialog useEffect Check devIndex No', props.index])\r\n }, []);\r\n\r\n /**\r\n * キャンセル処理\r\n */\r\n const cancelAction = () => {\r\n console.debug('handleDialogConsole()');\r\n setOpen(false);\r\n setMode(false);\r\n };\r\n\r\n menuList.push({\r\n name: t('DeviceRegistSettingDialog.移動平均法設定', '移動平均法設定'),\r\n component: LayerShortSettingDialog,\r\n tag: 'LayerShortSetting',\r\n });\r\n menuList.push({\r\n name: t('DeviceRegistSettingDialog.周波数範囲設定', '周波数範囲設定'),\r\n component: VibrationSettingDialog,\r\n tag: 'VibrationSetting',\r\n });\r\n\r\n return (\r\n <>\r\n {\r\n if (mode) {\r\n props.dialog.apply({});\r\n } else {\r\n props.dialog.cancel();\r\n }\r\n }}\r\n >\r\n {/* \r\n {t('DeviceRegistSettingDialog.設定画面', '設定画面')}\r\n */}\r\n \r\n {/** メニュータブの表示 */}\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n\r\n );\r\n\r\n}\r\n\r\n\r\n\r\nexport default DeviceRegistSettingDialog;","import React, { useEffect, useState, useRef } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport DeviceRegistGridHeader from './DeviceRegistGridHeader';\r\nimport DeviceRegistGridBody from './DeviceRegistGridBody';\r\nimport DeviceRegistFooter from './DeviceRegistFooter';\r\nimport { SettingsState } from '../../../organisms/SelectSettings';\r\nimport { NAME_DEV_SET, GetNameDevSetList, SetNameDevSetList } from '../../../../function/NameDevSetModel';\r\nimport { useModal } from '../../../../function/useModal';\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../../atoms/Dialog/ConfirmDialog';\r\nimport MessageDialog, { MessageDialogResponse } from '../../../atoms/Dialog/MessageDialog';\r\nimport { useTranslation } from 'react-i18next';\r\nimport ReadDevCsvDialog from './../../../molecules/Dialog/ReadDevCsvDialog/ReadDevCsvDialogPage';\r\nimport { DeviceRegistPageStyle, TableBaseStyle } from './DeviceRegistStyle';\r\nimport DeviceRegistSettingDialog, { DeviceRegistNewDialogResponse } from './DeviceRegistSettingDialog';\r\ntype DeviceRegistProps = {\r\n editData: SettingsState;\r\n};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 316px)',\r\n },\r\n tableDialgContainer: {\r\n maxHeight: 'calc(100vh - 276px)',\r\n },\r\n tableHeader: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n borderCollapse: `collapse`,\r\n },\r\n headerCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n },\r\n bodyCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '0.5px',\r\n height: '10px',\r\n textAlign: 'center',\r\n },\r\n tableTd: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '0px',\r\n minWidth: '80px',\r\n },\r\n colTime: {\r\n textAlign: 'center',\r\n },\r\n //テキスト\r\n textField: {\r\n flexGrow: 1,\r\n height: '100%',\r\n width: '98%',\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n textAlign: 'center',\r\n },\r\n })\r\n);\r\n\r\nconst DeviceRegist: React.FC = (props: DeviceRegistProps) => {\r\n const { t } = useTranslation();\r\n const pageStyle = DeviceRegistPageStyle();\r\n const tableBaseStyle = TableBaseStyle();\r\n const [devList, setDevList] = useState([]);\r\n const [flgCfmDlg, actCfmDlg] = useModal();\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n const [buttonEnable, setButtonEnable] = useState(true);\r\n const [index, setIndex] = useState(0);\r\n const [selectedID, setSelectedID] = useState(0);\r\n\r\n const [openReadCSVDlg, setOpenReadCSVDlg] = useState(false); //危機管理台帳読込\r\n\r\n const fileObjectData = useRef();\r\n const [isUpdateDisp, setIsUpdateDisp] = useState(false);\r\n const cfmdlg = flgCfmDlg ? (\r\n \r\n ) : null;\r\n const msgdlg = flgMsgDlg ? : null;\r\n\r\n // レアショート/振動(速度)&振動(変位)設定ダイアログ\r\n const [flgSettingRowDlg, settingRowDlg] = useModal();\r\n\r\n useEffect(() => {\r\n setButtonEnable(false);\r\n GetNameDevSetList()\r\n .then((res) => {\r\n setDevList(res);\r\n props.editData.SaveFunction = saveProc;\r\n props.editData.IsUpdate = false;\r\n setButtonEnable(true);\r\n })\r\n .catch((e) => {\r\n setDlgmsg(t('DeviceRegist.データ取得中にエラーが発生しました', 'データ取得中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n })\r\n .finally(() => {\r\n\r\n setButtonEnable(true);\r\n });\r\n }, [isUpdateDisp, props.editData.CancelCondition]);\r\n\r\n const updateDev = (item: NAME_DEV_SET) => {\r\n const idx = devList.findIndex((srch) => srch.DEV_INDEX == item.DEV_INDEX);\r\n if (idx >= 0) {\r\n devList[idx] = item;\r\n props.editData.Target = devList;\r\n props.editData.IsUpdate = true;\r\n }\r\n };\r\n\r\n const saveAction = () => {\r\n setDlgmsg(t('DeviceRegist.保存しますか?', '保存しますか?'));\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n setButtonEnable(false);\r\n saveProc(devList).finally(() => {\r\n setButtonEnable(true);\r\n });\r\n })\r\n .cancel(() => { });\r\n };\r\n\r\n /**\r\n * 保存\r\n */\r\n const saveProc = (target: object): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const devList = target as NAME_DEV_SET[];\r\n if (devList) {\r\n SetNameDevSetList(devList)\r\n .then((res) => {\r\n console.debug(`SetNameDevSetList res : ${res}`);\r\n if (res == 200) {\r\n props.editData.IsUpdate = false;\r\n setIsUpdateDisp(!isUpdateDisp);\r\n\r\n // props.editData.CloseSetting();\r\n resolve('done');\r\n } else {\r\n reject('update fault');\r\n }\r\n })\r\n .catch((error) => {\r\n console.error('SetNameDevSetList : ' + error);\r\n });\r\n } else {\r\n reject('data error');\r\n }\r\n });\r\n };\r\n /**\r\n * キャンセル\r\n */\r\n const cancelAction = () => {\r\n if (props.editData.IsUpdate) {\r\n setDlgmsg(\r\n t(\r\n 'DeviceRegist.保存していないデータを破棄します。\\nよろしいですか?',\r\n '保存していないデータを破棄します。\\nよろしいですか?'\r\n )\r\n );\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n // props.editData.IsUpdate = false;\r\n setDevList([]);\r\n props.editData.UpdateCancel();\r\n // props.editData.CloseSetting();\r\n })\r\n .cancel(() => { });\r\n } else {\r\n // props.editData.CloseSetting();\r\n }\r\n };\r\n /**\r\n * レアショート/振動(速度)&振動(変位)選択画面\r\n * @param devIndex \r\n */\r\n const newAction = (devIndex: number) => {\r\n //ダイアログに機器番号を渡す\r\n setIndex(devIndex);\r\n settingRowDlg\r\n .open()\r\n .apply(() => {\r\n // API実行成功後のコールバック\r\n\r\n console.debug('apply()');\r\n //updateData();\r\n })\r\n .cancel(() => {\r\n console.debug('cancel()');\r\n //updateData();\r\n });\r\n }\r\n /**\r\n * 機器管理台帳読込ボタン押下\r\n */\r\n const readDevCsvDlgOpenAction = (fileObject: File) => {\r\n fileObjectData.current = fileObject;\r\n setOpenReadCSVDlg(true);\r\n console.debug(['DeviceRegist - readDevCsvDlgOpenActionEx']);\r\n };\r\n /**\r\n * 機器管理台帳読込閉じる\r\n */\r\n const readDevCsvDlgCloseAction = (updateFlg: boolean) => {\r\n setOpenReadCSVDlg(false);\r\n if (updateFlg) {\r\n setDevList([]);\r\n props.editData.UpdateCancel();\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {devList.map((dev, index) => {\r\n return ;\r\n })}\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n {/* レアショート/振動(速度)&振動(変位)設定画面 */}\r\n {flgSettingRowDlg ? (\r\n \r\n ) : null}\r\n {cfmdlg}\r\n {msgdlg}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default DeviceRegist;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableHeader: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n padding: '1px',\r\n minWidth: '80px',\r\n borderCollapse: `collapse`,\r\n },\r\n tableTd: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '0px',\r\n minWidth: '80px',\r\n },\r\n colTime: {\r\n textAlign: 'center',\r\n },\r\n })\r\n);\r\n\r\nconst ItemRegistGridHeader: React.FC = () => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n return (\r\n \r\n {t('ItemRegistGridHeader.No', 'No')}\r\n {t('ItemRegistGridHeader.実装', '実装')}\r\n {t('ItemRegistGridHeader.項目名称', '項目名称')}\r\n \r\n );\r\n};\r\n\r\nexport default ItemRegistGridHeader;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { Checkbox, Tab, Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { NAME_DEV_SET } from '../../../function/NameDevSetModel';\r\nimport { TextField } from '@material-ui/core';\r\nimport { NAME_ITEM_SET } from './CollectSetting/CollectSettingDefine';\r\n\r\ntype ItemRegistGridBodyProps = {\r\n indexNo: number;\r\n item: NAME_ITEM_SET;\r\n updateItem: (item: NAME_ITEM_SET) => void;\r\n};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableHeader: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n borderCollapse: `collapse`,\r\n },\r\n tableItem: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n orderBottomStyle: 'inset',\r\n borderLeftStyle: 'solid',\r\n borderRightStyle: 'solid',\r\n textAlign: 'center',\r\n minWidth: '80px',\r\n height: '8px',\r\n padding: '1px',\r\n },\r\n tableItemL: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n orderBottomStyle: 'inset',\r\n borderLeftStyle: 'solid',\r\n borderRightStyle: 'solid',\r\n textAlign: 'left',\r\n minWidth: '80px',\r\n height: '8px',\r\n padding: '1px',\r\n },\r\n //テキスト\r\n textField: {\r\n flexGrow: 1,\r\n height: '100%',\r\n width: '98%',\r\n border: 'none',\r\n },\r\n })\r\n);\r\n\r\nconst ItemRegistGridBody: React.FC = (props: ItemRegistGridBodyProps) => {\r\n const classes = useStyles();\r\n const [est, setEst] = useState(props.item.EST != 0);\r\n const [itemName, setItemName] = useState(props.item.ITM_NAME);\r\n\r\n useEffect(() => {}, []);\r\n\r\n return (\r\n \r\n \r\n {props.indexNo + 1}\r\n \r\n \r\n {\r\n setEst(e.target.checked);\r\n props.item.EST = e.target.checked ? 1 : 0;\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n \r\n \r\n {\r\n setItemName(e.target.value);\r\n props.item.ITM_NAME = e.target.value;\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n \r\n \r\n );\r\n};\r\n\r\nexport default ItemRegistGridBody;\r\n","import React, { useEffect, useState } from 'react';\r\nimport Button from '@material-ui/core/Button';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport Radio, { RadioProps } from '@material-ui/core/Radio';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst buttonStyle = {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n marginBottom: '8px',\r\n};\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableHeader: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n borderCollapse: `collapse`,\r\n },\r\n tableTd: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '0px',\r\n },\r\n colTime: {\r\n textAlign: 'center',\r\n },\r\n })\r\n);\r\n\r\ntype Props = {\r\n onClickSaveButton: () => void;\r\n onClickCancelButton: () => void;\r\n};\r\n\r\nconst ItemRegistFooter: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n {\r\n props.onClickSaveButton()\r\n }}\r\n >\r\n {t('ItemRegistFooter.保存','保存')}\r\n \r\n \r\n \r\n props.onClickCancelButton()}\r\n >\r\n {t('ItemRegistFooter.中止','中止')}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ItemRegistFooter;\r\n","import React, { useEffect, useState, useContext } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport ItemRegistGridHeader from './ItemRegistGridHeader';\r\nimport ItemRegistGridBody from './ItemRegistGridBody';\r\nimport ItemRegistFooter from './ItemRegistFooter';\r\nimport { SettingsState } from '../../organisms/SelectSettings';\r\nimport { NAME_ITEM_SET, GetNameItemSetType, SetNameItemSetType } from './CollectSetting/CollectSettingDefine';\r\nimport { useModal } from '../../../function/useModal';\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../atoms/Dialog/ConfirmDialog';\r\nimport MessageDialog, { MessageDialogResponse } from '../../atoms/Dialog/MessageDialog';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { AppContext } from '../../../App';\r\n\r\ntype ItemRegistProps = {\r\n editData: SettingsState;\r\n};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 315px)',\r\n },\r\n tableTd: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '0px',\r\n minWidth: '80px',\r\n },\r\n colTime: {\r\n textAlign: 'center',\r\n },\r\n })\r\n);\r\n\r\nconst cancelAction = () => {\r\n console.debug('saveAction');\r\n};\r\n\r\nconst ItemRegist: React.FC = (props: ItemRegistProps) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [itemList, setItemList] = useState([]);\r\n const [flgCfmDlg, actCfmDlg] = useModal();\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n const { login } = useContext(AppContext);\r\n\r\n const cfmdlg = flgCfmDlg ? (\r\n \r\n ) : null;\r\n const msgdlg = flgMsgDlg ? : null;\r\n\r\n useEffect(() => {\r\n getData();\r\n props.editData.SaveFunction = saveProc;\r\n props.editData.IsUpdate = false;\r\n }, [props.editData.CancelCondition]);\r\n /**\r\n * データ取得処理\r\n */\r\n const getData = () => {\r\n GetNameItemSetType().then((res) => {\r\n //console.debug(['useEffect GetNameItemSetType', res]);\r\n if (login.IsIoT) {\r\n //Iotの場合項目は7項目まで\r\n setItemList(res.slice(0, 7));\r\n } else {\r\n setItemList(res);\r\n }\r\n }).catch((e) => {\r\n setDlgmsg(t('ItemRegist.データ取得時にエラーが発生しました', 'データ取得時にエラーが発生しました'));\r\n actMsgDlg.open();\r\n });\r\n };\r\n\r\n const updateDev = (item: NAME_ITEM_SET) => {\r\n const idx = itemList.findIndex((srch) => srch.ITM_NAME_NO == item.ITM_NAME_NO);\r\n if (idx >= 0) {\r\n itemList[idx] = item;\r\n props.editData.Target = itemList;\r\n props.editData.IsUpdate = true;\r\n }\r\n };\r\n\r\n const saveAction = () => {\r\n setDlgmsg(t('ItemRegist.保存しますか?', '保存しますか?'));\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n saveProc(itemList);\r\n })\r\n .cancel(() => { });\r\n };\r\n const saveProc = (target: object): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const itemList = target as NAME_ITEM_SET[];\r\n itemList.forEach((r) => {\r\n if (r.ITM_NAME === '') {\r\n r.EST = 0;\r\n }\r\n });\r\n console.debug(['saveProc - ItemList', itemList]);\r\n if (itemList) {\r\n SetNameItemSetType(itemList).then(() => {\r\n props.editData.IsUpdate = false;\r\n // props.editData.CloseSetting();\r\n setItemList([]);\r\n getData();\r\n resolve('done');\r\n });\r\n } else {\r\n reject('data error');\r\n }\r\n });\r\n };\r\n\r\n const cancelAction = () => {\r\n if (props.editData.IsUpdate) {\r\n setDlgmsg(\r\n t(\r\n 'ItemRegist.保存していないデータを破棄します。\\nよろしいですか?',\r\n '保存していないデータを破棄します。\\nよろしいですか?'\r\n )\r\n );\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n // props.editData.IsUpdate = false;\r\n setItemList([]);\r\n props.editData.UpdateCancel();\r\n // props.editData.CloseSetting();\r\n })\r\n .cancel(() => { });\r\n } else {\r\n // props.editData.CloseSetting();\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {itemList.map((dev, index) => {\r\n return ;\r\n })}\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n {cfmdlg}\r\n {msgdlg}\r\n \r\n );\r\n};\r\n\r\nexport default ItemRegist;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableHeader: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n padding: '1px',\r\n minWidth: '80px',\r\n borderCollapse: `collapse`,\r\n },\r\n tableTd: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '0px',\r\n minWidth: '80px',\r\n },\r\n colTime: {\r\n textAlign: 'center',\r\n },\r\n })\r\n);\r\n\r\nconst AlmKindRegistGridHeader: React.FC = () => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n return (\r\n \r\n No\r\n {t('AlmKindRegistGridHeader.演算種別', '演算種別')}\r\n {t('AlmKindRegistGridHeader.異常内容', '異常内容')}\r\n {t('AlmKindRegistGridHeader.重故障メッセージ', '重故障メッセージ')}\r\n {t('AlmKindRegistGridHeader.軽故障メッセージ', '軽故障メッセージ')}\r\n \r\n );\r\n};\r\n\r\nexport default AlmKindRegistGridHeader;\r\n","import { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\n\r\nexport const TableBaseStyle = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 310px)',\r\n },\r\n buttonStyle: {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n marginBottom: '8px',\r\n },\r\n tableHeader: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n borderCollapse: `collapse`,\r\n },\r\n tableTd: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '0px',\r\n },\r\n colTime: {\r\n textAlign: 'center',\r\n },\r\n tableItem: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n orderBottomStyle: 'inset',\r\n borderLeftStyle: 'solid',\r\n borderRightStyle: 'solid',\r\n textAlign: 'center',\r\n minWidth: '80px',\r\n height: '8px',\r\n padding: '1px',\r\n },\r\n tableItemL: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n orderBottomStyle: 'inset',\r\n borderLeftStyle: 'solid',\r\n borderRightStyle: 'solid',\r\n textAlign: 'left',\r\n minWidth: '80px',\r\n height: '8px',\r\n padding: '1px',\r\n },\r\n //テキスト\r\n textField: {\r\n flexGrow: 1,\r\n height: '100%',\r\n width: '98%',\r\n border: 'none',\r\n },\r\n })\r\n);","import React, { useEffect, useState } from 'react';\r\nimport { Checkbox, Tab, Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { TextField } from '@material-ui/core';\r\nimport { ALM_KIND_SET } from '../../../../function/AlmKindSetModel';\r\nimport ItemComboBox, { ComboBoxItemType } from '../../../atoms/ComboBox/ItemComboBox';\r\nimport { TableBaseStyle } from './AlmKindRegistStyle';\r\n\r\ntype AlmKindRegistGridBodyProps = {\r\n almKindSetItem: ALM_KIND_SET;\r\n updateItem: (item: ALM_KIND_SET) => void;\r\n mclcTypList: ComboBoxItemType[];\r\n};\r\n\r\nconst AlmKindRegistGridBody: React.FC = (props: AlmKindRegistGridBodyProps) => {\r\n const classes = TableBaseStyle();\r\n const [itemName, setItemName] = useState(props.almKindSetItem.TYP_NAME);\r\n const [message, setMessage] = useState(props.almKindSetItem.GUIDE_MSG);\r\n const [messageL, setMessageL] = useState(props.almKindSetItem.GUIDE_MSGL);\r\n const [mclcTypId, setMclcTypeId] = useState(props.almKindSetItem.MCLC_TYP_ID);\r\n\r\n useEffect(() => {}, []);\r\n\r\n return (\r\n \r\n {/* No */}\r\n \r\n {props.almKindSetItem.TYP_NO}\r\n \r\n {/* 演算種別 */}\r\n \r\n {\r\n if (typeof e.target.value == 'string') {\r\n setMclcTypeId(parseInt(e.target.value));\r\n props.almKindSetItem.MCLC_TYP_ID = parseInt(e.target.value);\r\n\r\n if (parseInt(e.target.value) === 0) {\r\n props.almKindSetItem.TYP_NAME = '';\r\n props.almKindSetItem.GUIDE_MSG = '';\r\n props.almKindSetItem.GUIDE_MSGL = '';\r\n setMessage('');\r\n setMessageL('');\r\n setItemName('');\r\n }\r\n props.updateItem(props.almKindSetItem);\r\n }\r\n }}\r\n />\r\n \r\n {/* 異常内容 */}\r\n \r\n {\r\n setItemName(e.target.value);\r\n props.almKindSetItem.TYP_NAME = e.target.value;\r\n props.updateItem(props.almKindSetItem);\r\n }}\r\n />\r\n \r\n {/* 重故障メッセージ */}\r\n \r\n {\r\n setMessage(e.target.value);\r\n props.almKindSetItem.GUIDE_MSG = e.target.value;\r\n props.updateItem(props.almKindSetItem);\r\n }}\r\n />\r\n \r\n {/* 軽故障メッセージ */}\r\n \r\n {\r\n setMessageL(e.target.value);\r\n props.almKindSetItem.GUIDE_MSGL = e.target.value;\r\n props.updateItem(props.almKindSetItem);\r\n }}\r\n />\r\n \r\n \r\n );\r\n};\r\n\r\nexport default AlmKindRegistGridBody;\r\n","import React, { useEffect, useState } from 'react';\r\nimport Button from '@material-ui/core/Button';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport Radio, { RadioProps } from '@material-ui/core/Radio';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { TableBaseStyle } from './AlmKindRegistStyle';\r\n\r\ntype Props = {\r\n onClickSaveButton: () => void;\r\n onClickCancelButton: () => void;\r\n buttonEnable: boolean;\r\n};\r\n\r\nconst AlmKindRegistFooter: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = TableBaseStyle();\r\n\r\n return (\r\n \r\n \r\n {\r\n props.onClickSaveButton()\r\n }}\r\n >\r\n {t('AlmKindRegistFooter.保存', '保存')}\r\n \r\n \r\n \r\n props.onClickCancelButton()}\r\n >\r\n {t('AlmKindRegistFooter.中止', '中止')}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default AlmKindRegistFooter;\r\n","import { ResponceDataType } from \"../ErrorCode\";\r\n\r\nexport type ALM_KIND_SET = {\r\n TYP_NO: number;\r\n MCLC_TYP_ID: number;\r\n TYP_NAME: string;\r\n GUIDE_MSG: string;\r\n GUIDE_MSGL: string;\r\n\r\n isEdit: boolean;\r\n}\r\n\r\n// ALM_KIND_SET\r\nexport const GetAlmKindSetType = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const url = \"api/AlmKindSet\";\r\n fetch(url)\r\n .then((res) => res.json())\r\n .then((result: ALM_KIND_SET[]) => {\r\n console.debug(result);\r\n if (result != null) {\r\n if (result.length !== 0) {\r\n result.map((row, index) => {\r\n row.isEdit = false;\r\n });\r\n console.debug([\"--result--\", result]);\r\n }\r\n resolve(result);\r\n if (AlmKindSetTypeValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n }\r\n else {\r\n reject('Invalidate response');\r\n }\r\n\r\n }\r\n ).catch((error) => {\r\n console.error(error);\r\n reject(error);\r\n });\r\n });\r\n};\r\n\r\nconst AlmKindSetTypeValidate = (data: ALM_KIND_SET[]) => {\r\n if (data == undefined) return false;\r\n return true;\r\n};\r\n\r\nexport const SetAlmKindSetType = (list: ALM_KIND_SET[]): Promise => {\r\n return new Promise((resolve, reject) => {\r\n list = list.filter((r) => r.isEdit == true);\r\n fetch('api/AlmKindSet', {\r\n method: 'put',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(list),\r\n }).then((res) => {\r\n if (!res.ok) {\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n reject(message);\r\n }\r\n return res.json();\r\n }).then((result: ResponceDataType) => {\r\n console.debug([\"SetAlmKindSetType -result\", result])\r\n resolve(result);\r\n },\r\n (error) => {\r\n console.error(error);\r\n reject(error);\r\n })\r\n });\r\n}","export type MST_CLC_TYP = {\r\n /** 演算種別IDを取得または設定します。 */\r\n MCLC_TYP_ID: number;\r\n /** 演算名称を取得または設定します。 */\r\n MCLC_TYP_NAME: string;\r\n /** 表示順を取得または設定します。 */\r\n SORT_NO: number;\r\n\r\n /** リスト編集フラグ */\r\n isEdit: boolean;\r\n}\r\n\r\n/**\r\n * デバイス名称一覧を取得\r\n * @returns \r\n */\r\nexport const GetMstClcTyp = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/MstClcTyp/\")\r\n .then((res) => {\r\n if (!res.ok) {\r\n console.error(res);\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n reject(message);\r\n }\r\n else {\r\n return res.json();\r\n }\r\n })\r\n .then((result: MST_CLC_TYP[]) => {\r\n console.debug([\"GetMstClcTyp - ok ret \", result]);\r\n if (MstClcTypListListValidate(result)) {\r\n result.forEach((dev) => {\r\n\r\n });\r\n resolve(result);\r\n }\r\n else {\r\n reject('Invalidate response');\r\n }\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n reject(error);\r\n })\r\n })\r\n};\r\n\r\n/**\r\n * グループ一覧取得データ検証\r\n * @param data \r\n * @returns \r\n */\r\nconst MstClcTypListListValidate = (data: MST_CLC_TYP[]): boolean => {\r\n if (data == undefined) {\r\n console.debug(`MstClcTypListList NG `);\r\n return false;\r\n }\r\n console.debug(`MstClcTypListList OK `);\r\n return true;\r\n};","import React, { useEffect, useState } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport AlmKindRegistGridHeader from './AlmKindRegistGridHeader';\r\nimport AlmKindRegistGridBody from './AlmKindRegistGridBody';\r\nimport AlmKindRegistFooter from './AlmKindRegistFooter';\r\nimport { TableBaseStyle } from './AlmKindRegistStyle';\r\nimport { SettingsState } from '../../../organisms/SelectSettings';\r\nimport { ALM_KIND_SET, GetAlmKindSetType, SetAlmKindSetType } from '../../../../function/AlmKindSetModel';\r\nimport { useModal } from '../../../../function/useModal';\r\nimport { MST_CLC_TYP, GetMstClcTyp } from '../../../../function/MstClcTypModels';\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../../atoms/Dialog/ConfirmDialog';\r\nimport MessageDialog, { MessageDialogResponse } from '../../../atoms/Dialog/MessageDialog';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { ComboBoxItemType } from '../../../atoms/ComboBox/ItemComboBox';\r\nimport { ErrorCode } from '../../../../ErrorCode';\r\n\r\ntype AlmKindRegistProps = {\r\n editData: SettingsState;\r\n};\r\n\r\nconst AlmKindRegistPage: React.FC = (props: AlmKindRegistProps) => {\r\n const { t } = useTranslation();\r\n const classes = TableBaseStyle();\r\n const [itemList, setItemList] = useState([]);\r\n const [mclcItemList, setMclcItemList] = useState([]);\r\n const [mclcComboList, setMclcComboList] = useState([]);\r\n const [flgCfmDlg, actCfmDlg] = useModal();\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n const [buttonEnable, setButtonEnable] = useState(true);\r\n\r\n const cfmdlg = flgCfmDlg ? (\r\n \r\n ) : null;\r\n const msgdlg = flgMsgDlg ? : null;\r\n\r\n /**\r\n * 初期表示\r\n */\r\n useEffect(() => {\r\n updateData();\r\n }, []);\r\n\r\n useEffect(() => {\r\n props.editData.SaveFunction = saveProc;\r\n props.editData.IsUpdate = false;\r\n }, [props.editData.CancelCondition]);\r\n\r\n /**\r\n *\r\n * @param item\r\n */\r\n const updateDev = (item: ALM_KIND_SET) => {\r\n const idx = itemList.findIndex((srch) => srch.TYP_NO == item.TYP_NO);\r\n if (idx >= 0) {\r\n item.isEdit = true;\r\n itemList[idx] = item;\r\n props.editData.Target = itemList;\r\n props.editData.IsUpdate = true;\r\n }\r\n };\r\n /**\r\n * 各データの呼び出し\r\n */\r\n const updateData = () => {\r\n setButtonEnable(false);\r\n let mstClcTyp: MST_CLC_TYP[] = [];\r\n let mstClcTypList: ComboBoxItemType[] = [];\r\n\r\n GetMstClcTyp()\r\n .then((res) => {\r\n mstClcTyp = res;\r\n mstClcTypList.push({ index: 0, name: '' });\r\n\r\n mstClcTyp.forEach((r) => {\r\n if (r.SORT_NO !== null) {\r\n mstClcTypList.push({ index: r.MCLC_TYP_ID, name: r.MCLC_TYP_NAME });\r\n }\r\n });\r\n\r\n setMclcItemList(mstClcTyp);\r\n setMclcComboList(mstClcTypList);\r\n\r\n return GetAlmKindSetType();\r\n })\r\n .then((res) => {\r\n setItemList(res);\r\n })\r\n .catch((r) => {\r\n setDlgmsg(t('AlmKindRegistPage.データ取得中にエラーが発生しました', 'データ取得中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n console.error(['saveAction error', r]);\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n props.editData.IsUpdate = false;\r\n };\r\n\r\n /**\r\n * 入力チェック\r\n * @param target\r\n * @returns\r\n */\r\n const checkAlmKindRegistFlg = (target: ALM_KIND_SET[]): boolean => {\r\n if (target == null || target.length == 0) {\r\n return false;\r\n }\r\n if (target.findIndex((r) => r.isEdit == true) === -1) {\r\n return false;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n /**\r\n * 異常種別登録チェック\r\n * @param target\r\n * @returns\r\n */\r\n const checkTypeName = (target: ALM_KIND_SET[]): string[] => {\r\n let message: string[] = [];\r\n\r\n target.forEach((r) => {\r\n if (r.MCLC_TYP_ID !== null) {\r\n if (r.MCLC_TYP_ID === 0) {\r\n if (r.TYP_NAME.trim() !== '' || r.GUIDE_MSG.trim() !== '' || r.GUIDE_MSGL.trim() !== '') {\r\n let errorMessage =\r\n `No.${r.TYP_NO}:` + t('AlmKindRegistPage.演算種別を設定してください', '演算種別を設定してください');\r\n message.push(errorMessage);\r\n }\r\n } else {\r\n if (r.TYP_NAME === '') {\r\n let errorMessage =\r\n `No.${r.TYP_NO}` +\r\n t('AlmKindRegistPage.の異常内容が登録されていません', 'の異常内容が登録されていません');\r\n message.push(errorMessage);\r\n }\r\n }\r\n }\r\n else {\r\n if (r.TYP_NAME.trim() !== '' || r.GUIDE_MSG.trim() !== '' || r.GUIDE_MSGL.trim() !== '') {\r\n let errorMessage =\r\n `No.${r.TYP_NO}:` + t('AlmKindRegistPage.演算種別を設定してください', '演算種別を設定してください');\r\n message.push(errorMessage);\r\n }\r\n }\r\n });\r\n return message;\r\n };\r\n\r\n /**\r\n * 保存アクション\r\n */\r\n const saveAction = () => {\r\n if (checkAlmKindRegistFlg(itemList) === false) {\r\n return;\r\n }\r\n let message = checkTypeName(itemList);\r\n if (message.length !== 0) {\r\n setDlgmsg(message.join('\\n'));\r\n actMsgDlg.open();\r\n return;\r\n }\r\n\r\n setDlgmsg(t('AlmKindRegistPage.保存しますか', '保存しますか?'));\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n let editList = itemList.filter((r) => r.isEdit === true);\r\n setButtonEnable(false);\r\n saveProc(editList);\r\n })\r\n .cancel(() => {\r\n console.debug(t('AlmKindRegistPage.キャンセル', 'キャンセル'));\r\n });\r\n };\r\n\r\n /**\r\n * 保存処理\r\n * @param target\r\n * @returns\r\n */\r\n const saveProc = (target: object): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const itemList = target as ALM_KIND_SET[];\r\n let message = checkTypeName(itemList);\r\n if (message.length !== 0) {\r\n setDlgmsg(message.join('\\n'));\r\n actMsgDlg.open();\r\n reject('data error');\r\n return;\r\n }\r\n\r\n SetAlmKindSetType(itemList)\r\n .then((r) => {\r\n if (r.ErrorCode === ErrorCode.ERR_CODE_NONE) {\r\n setDlgmsg(t('AlmKindRegistPage.保存が正常に終了しました', '保存が正常に終了しました'));\r\n actMsgDlg.open();\r\n updateData();\r\n console.debug('saveAction ok');\r\n resolve('done');\r\n } else {\r\n setDlgmsg(t('AlmKindRegistPage.異常が発生したため中断しました', '異常が発生したため中断しました'));\r\n actMsgDlg.open();\r\n reject('data error');\r\n }\r\n })\r\n .catch((r) => {\r\n setDlgmsg(t('AlmKindRegistPage.保存中にエラーが発生しました', '保存中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n console.error(['saveAction error', r]);\r\n reject('data error');\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * 中止アクション\r\n */\r\n const cancelAction = () => {\r\n if (checkAlmKindRegistFlg(itemList)) {\r\n if (props.editData.IsUpdate) {\r\n setDlgmsg(\r\n t(\r\n 'AlmKindRegistPage.保存していないデータを破棄します。\\nよろしいですか?',\r\n '保存していないデータを破棄します。\\nよろしいですか?'\r\n )\r\n );\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n updateData();\r\n setItemList([]);\r\n props.editData.UpdateCancel();\r\n })\r\n .cancel(() => { });\r\n }\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {itemList.map((dev) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n {cfmdlg}\r\n {msgdlg}\r\n \r\n );\r\n};\r\n\r\nexport default AlmKindRegistPage;\r\n","import { NAME_DEV_SET } from \"../../../../function/NameDevSetModel\";\r\nimport dayjs from \"dayjs\";\r\n\r\n/**\r\n * IoTBox設定Type\r\n */\r\nexport type IOT_SET = {\r\n /** IMSI No.*/\r\n IMSI_NO: string;\r\n /** 機器INDEX*/\r\n DEV_INDEX: number;\r\n /** 自動収集フラグ*/\r\n RUN_FLG: string;\r\n /** 自動収集開始時刻 秒*/\r\n LOG_SEC: string;\r\n /** 自動収集開始時刻 分*/\r\n LOG_MIN: string;\r\n /** 自動収集開始時刻 時*/\r\n LOG_HOUR: string;\r\n /** 自動収集開始時刻 日*/\r\n LOG_DAY: string;\r\n /** 自動収集開始時刻 月*/\r\n LOG_MONTH: string;\r\n /** 自動収集開始時刻 曜日*/\r\n LOG_DOW: string;\r\n /** 産業用バッテリ寿命*/\r\n MOBILE_BATTERY?: number;\r\n /** リチウムバッテリ寿命*/\r\n LITHIUM_BATTERY?: number;\r\n /** 最新収集日時*/\r\n LOG_NEW?: Date;\r\n /** 次回収集日時*/\r\n LOG_NEXT?: Date;\r\n /** 設定バージョン*/\r\n SET_VER: string;\r\n /** 収集状態フラグ*/\r\n GET_FLG?: number;\r\n /** 設定状態フラグ*/\r\n IOT_SET_FLG?: number;\r\n /** 学習モードフラグ*/\r\n STUDY_FLG?: number;\r\n /** 学習モード設定*/\r\n STUDY_SET?: number;\r\n /** メモ*/\r\n MEMO: string;\r\n /** PLCNo.*/\r\n PLC_NO: number;\r\n /** ヘルシー最新収集日時*/\r\n HEALTH_NEW?: Date;\r\n /** ヘルシー次回収集日時*/\r\n HEALTH_NEXT?: Date;\r\n /** エラーログ最新収集日時*/\r\n ERRORLOG_NEW?: Date;\r\n /** エラーログ次回収集日時*/\r\n ERRORLOG_NEXT?: Date;\r\n /** IotBoxエラーログ エラーコード*/\r\n ERROR_CODE?: string\r\n /** ヘルシーチェック収集状態フラグ*/\r\n HEALTH_FLG?: number;\r\n /** エラーログ状態フラグ*/\r\n ERRORLOG_FLG?: number;\r\n /** ヘルスチェック エラーコード*/\r\n HEALTH_CODE: string;\r\n /** ヘルシーチェック異常区分 */\r\n ALM_KIND: number;\r\n STUDY_NEW?: Date;\r\n STUDY_NEXT?: Date;\r\n STUDY_COUNT?: number;\r\n STUDY_STATUS?: number;\r\n};\r\n\r\n\r\n/**\r\n * IoTBox設定 画面(編集)項目\r\n */\r\nexport type V_IOTBOX_SETTING_ITEM = {\r\n /** IMSI No.*/\r\n IMSI_NO: string;\r\n /** 自動収集フラグ*/\r\n RUN_FLG: string;\r\n /** 機器INDEX*/\r\n DEV_INDEX: number;\r\n DEV_NO: string;\r\n DEV_NAME: string;\r\n /** 自動収集開始時刻 秒*/\r\n LOG_SEC: string;\r\n /** 自動収集開始時刻 分*/\r\n LOG_MIN: string;\r\n /** 自動収集開始時刻 時*/\r\n LOG_HOUR: string;\r\n /** 産業用バッテリ寿命(最大使用日数)*/\r\n MOBILE_BATTERY?: number;\r\n /** リチウムバッテリ寿命(最大使用日数)*/\r\n LITHIUM_BATTERY?: number;\r\n /** 設定バージョン*/\r\n SET_VER: string;\r\n /** 設定状態フラグ TODO 設定ファイルDLボタンと値は併用。完了=DL完了、編集不可=DL未実施?*/\r\n IOT_SET_FLG?: number;\r\n /** PLCNo.*/\r\n PLC_NO: number;\r\n IOT_SET?: IOT_SET;\r\n /**機器番号・機器名称*/\r\n NAME_DEV_SET?: NAME_DEV_SET;\r\n /**リチウムバッテリ現在電圧値*/\r\n LITHIUM_VOLT: number,\r\n /**モバイルバッテリ現在電圧値*/\r\n MOBILE_VOLT: number,\r\n /**リチウム交換日時*/\r\n LITHIUM_CHANGE_DAYTIME?: Date,\r\n\r\n\r\n /** 設定ファイルDL 可能フラグ*/\r\n DL_ENABLE: boolean;\r\n /** 設定状態フラグ表示文字*/\r\n IOT_SET_FLG_Disp: string;\r\n /** 設定ファイルDL ボタン表示文字*/\r\n DL_Disp: string;\r\n /**モバイルバッテリ残量パーセント変換文字*/\r\n mobileVoltLevel: string,\r\n /**リチウムバッテリ残日数文字\r\n * 残日数=最大使用日数-(現在日時ー交換日時)\r\n */\r\n lithiumVoltRemainingDays: string,\r\n\r\n //リスト編集フラグ\r\n IS_EDITED?: boolean;\r\n}\r\n\r\n/**\r\n * バッテリー残量変換設定\r\n */\r\nexport type BATTERY_CONVERT_SET = {\r\n /**電圧レベル区分 1:7.2V(産業用バッテリの出力電圧のモニタ値)、2:3.6V(塩化チオニルリチウムバッテリの出力電圧のモニタ値) */\r\n VOLT_INDEX: number;\r\n /**下限電圧(V)*/\r\n LOWER_VOLT: number;\r\n /**上限限電圧(V)*/\r\n UPPER_VOLT: number;\r\n /**残量パーセント(%)*/\r\n BATTERY_PERCENT: number;\r\n}\r\n\r\nexport type IoTBoxSettingType = {\r\n V_IOTBOX_SETTING_ITEMS: V_IOTBOX_SETTING_ITEM[];\r\n}\r\n\r\n/**\r\n * APIレスポンスコード\r\n */\r\nexport const ApiResponseCode = {\r\n DEFAULT: 200,\r\n SUCCESS: 204, //新規登録要求待ちレコード追加\r\n BAD_REQUEST: 400, //パラメータ異常\r\n NOT_ACCEPTABLE: 406, //状態チェック\r\n DevIndexConanRegistered: 412, //コナンエアー管理側で登録済みの機器Index\r\n PLC_NO_FULL_ERROR: 413, //TMBee-Boxで登録できるPLC_NOに空き番が存在しない\r\n UPDATE_FAILURE: 500, //更新失敗\r\n SERVICE_UNAVAILABLE: 503, //ネットワーク接続失敗\r\n} as const;\r\ntype ApiResponseCode = typeof ApiResponseCode[keyof typeof ApiResponseCode];\r\n\r\n\r\n/**\r\n * IoTBox設定一覧取得\r\n * @returns\r\n */\r\nexport const GetIoTBoxSettingLists = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const url = 'api/IoTBoxSetting?';\r\n var param = \"\";\r\n console.debug(`${url}${param}`);\r\n fetch(`${url}${param}`)\r\n .then((res) => res.json())\r\n .then((result: IoTBoxSettingType) => {\r\n console.debug(['result', result]);\r\n if (IoTBoxSettingTypeValidate(result)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\nconst IoTBoxSettingTypeValidate = (data: IoTBoxSettingType) => {\r\n console.debug(`IoTBoxSetting ckeck ${data}`);\r\n if (data == undefined) return false;\r\n\r\n // if (data.V_IOTBOX_SETTING_ITEMS == undefined || data.V_IOTBOX_SETTING_ITEMS.length == 0) {\r\n // data.V_IOTBOX_SETTING_ITEMS = new Array(createDefaltIoTBoxSetting());\r\n // }\r\n console.debug(\"IoTBoxSetting ckeck ok\");\r\n return true;\r\n};\r\n\r\n\r\n/**\r\n * バッテリー残量変換設定リスト取得\r\n * API呼出 api/BatteryConvertSet\r\n * @returns BATTERY_CONVERT_SET[]\r\n */\r\nexport const GetBatteryConvertSet = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const url = 'api/BatteryConvertSet?';\r\n var param = \"\";\r\n console.debug(`${url}${param}`);\r\n fetch(`${url}${param}`)\r\n .then((res) => {\r\n if (!res.ok) {\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n reject(message);\r\n }\r\n else {\r\n return res.json();\r\n }\r\n })\r\n .then((result: BATTERY_CONVERT_SET[]) => {\r\n console.debug(['result', result]);\r\n resolve(result);\r\n }).catch((error) => {\r\n console.error(error);\r\n reject(error);\r\n });\r\n });\r\n};\r\n\r\n\r\n/**\r\n * バッテリ交換押下時の日時を登録する。\r\n * API呼出 api/lithiumChagenDayTime\r\n * @param imsiNo 更新対象のimsiNo\r\n * @returns 更新結果 正常時 204\r\n */\r\nexport const PutLithiumChagenDayTime = (imsiNo: string): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const url = 'api/IoTBoxSetting/lithiumChagenDayTime';\r\n fetch(url, {\r\n method: 'put',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(imsiNo),\r\n })\r\n .then(res => {\r\n console.debug(['res', res]);\r\n resolve(res.status)\r\n })\r\n .catch(error => {\r\n console.debug(['error', error]);\r\n reject(error)\r\n });\r\n });\r\n};\r\n\r\n\r\n/**\r\n * IoTSet 新規登録\r\n * @param data\r\n * @returns statusCode\r\n */\r\nexport const InsertIoTSet = (data: IOT_SET): Promise => {\r\n console.debug(['InsertIoTSet', data]);\r\n\r\n return new Promise((resolve, reject) => {\r\n fetch('api/IoTBoxSetting', {\r\n method: 'post',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(data),\r\n })\r\n .then(res => {\r\n console.debug(['res', res]);\r\n resolve(res.status)\r\n })\r\n .catch(reason => {\r\n console.debug(['reason', reason]);\r\n reject(reason)\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * IoTSet 削除\r\n * @param imsiNo\r\n * @returns\r\n */\r\nexport const deleteIoTSet = (imsiNo: string): Promise => {\r\n console.debug(['deleteIoTSet', imsiNo]);\r\n\r\n return new Promise((resolve, reject) => {\r\n fetch('api/IoTBoxSetting', {\r\n method: 'delete',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(imsiNo),\r\n })\r\n .then(res => {\r\n console.debug(['res', res]);\r\n resolve(res.status)\r\n })\r\n .catch(reason => {\r\n console.debug(['reason', reason]);\r\n reject(reason)\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * IoTSet を変更\r\n * @param data\r\n * @returns\r\n */\r\nexport const SetIoTSetType = (data: V_IOTBOX_SETTING_ITEM): Promise => {\r\n console.debug(['SetIoTSetType', data]);\r\n\r\n return new Promise((resolve, reject) => {\r\n fetch('api/IoTBoxSetting', {\r\n method: 'put',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(data),\r\n })\r\n .then(res => {\r\n console.debug(['res', res]);\r\n resolve(res.status);\r\n })\r\n .catch(reason => {\r\n console.debug(['reason', reason]);\r\n reject(reason)\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * IoTSet を変更\r\n * @param list\r\n * @returns\r\n */\r\nexport const SetIoTSetListType = (list: V_IOTBOX_SETTING_ITEM[]): Promise => {\r\n console.debug(['SetIoTSetListType', list]);\r\n\r\n return new Promise((resolve, reject) => {\r\n fetch('api/IoTBoxSetting/IotSetList', {\r\n method: 'put',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(list),\r\n })\r\n .then(res => {\r\n console.debug(['res', res]);\r\n resolve(res.status);\r\n })\r\n .catch(reason => {\r\n console.debug(['reason', reason]);\r\n reject(reason)\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * 産業用バッテリの現在の電圧値より、変換テーブルを使用して残量(%)を取得(モバイル)\r\n * @param target コンバート対象データ\r\n * @param convertList コンバート用の配列\r\n * @returns バッテリー残量(%)\r\n */\r\nexport const GetMobileBatteryLevel = (target: V_IOTBOX_SETTING_ITEM, convertList: BATTERY_CONVERT_SET[]): string => {\r\n\r\n if (target == null || convertList == null) {\r\n return \"0.0\";\r\n }\r\n\r\n if (convertList.length === 0) {\r\n return \"0.0\";\r\n }\r\n\r\n const rowIndex = convertList.findIndex(\r\n //r.VOLT_INDEX == 1でモバイル用\r\n (r) => r.VOLT_INDEX == 1 && r.LOWER_VOLT <= target.MOBILE_VOLT && target.MOBILE_VOLT < r.UPPER_VOLT);\r\n\r\n if (rowIndex === -1) {\r\n return \"0.0\";\r\n }\r\n\r\n console.debug([\"target.MOBILE_VOLT,convertList[rowIndex]\", target.MOBILE_VOLT, convertList[rowIndex]])\r\n //電池残量を計算\r\n //範囲内の%+10*(測定電圧-下限電圧)/(上限電圧ー下限電圧)=残量(%)\r\n let batteryPer: number = convertList[rowIndex].BATTERY_PERCENT\r\n + 10 * (target.MOBILE_VOLT - convertList[rowIndex].LOWER_VOLT)\r\n / (convertList[rowIndex].UPPER_VOLT - convertList[rowIndex].LOWER_VOLT);\r\n\r\n console.debug([\"batteryPer\", batteryPer])\r\n if (batteryPer > 100) {\r\n batteryPer = 100;\r\n }\r\n return batteryPer.toFixed(1);\r\n}\r\n/**\r\n * リチウムバッテリの残り日数を計算して取得\r\n * @param target コンバート対象データ\r\n * @returns バッテリー残量(%)\r\n */\r\nexport const GetLithiumVoltRemainingDays = (target: V_IOTBOX_SETTING_ITEM): string => {\r\n\r\n if (target == null) {\r\n return \"--\";\r\n }\r\n if (target.LITHIUM_CHANGE_DAYTIME == null) {\r\n return \"0\";\r\n }\r\n if (target.LITHIUM_BATTERY == null) {\r\n return \"--\";\r\n }\r\n\r\n //バッテリー変更日数\r\n const changeDate = dayjs(target.LITHIUM_CHANGE_DAYTIME);\r\n //現在日時\r\n const nowDate = dayjs();\r\n //経過日数 -〇日\r\n const passDay = nowDate.diff(changeDate, 'day', false);\r\n //残り日数\r\n let daysLeft = target.LITHIUM_BATTERY - passDay;\r\n if (daysLeft < 0) {\r\n daysLeft = 0;\r\n }\r\n\r\n return daysLeft.toString();\r\n}\r\n","import React, { useEffect, useState } from 'react';\r\nimport { TextField } from '@material-ui/core';\r\n\r\nexport type TimeEntry = {\r\n value: string;\r\n maxValue: number;\r\n minValue: number;\r\n onChange?: (value: string) => void;\r\n className?: string;\r\n};\r\n\r\n/**\r\n * @param props 時刻もしくは不正時は’0’文字を入力します\r\n * @returns\r\n */\r\nconst TimeEntry: React.FC = (props: TimeEntry) => {\r\n const [val, setVal] = useState(props.value);\r\n\r\n useEffect(() => {\r\n //console.debug(['- useEffect - props.value', props.value]);\r\n setVal(props.value);\r\n }, [props.value]);\r\n\r\n //console.debug(['- 画面描画開始 -', val]);\r\n return (\r\n {\r\n const num = parseInt(event.target.value);\r\n console.debug(`onChange() val:${event.target.value} num:${num}`);\r\n\r\n if (!isNaN(num)) {\r\n if (props.minValue <= num && num <= props.maxValue) {\r\n //指定時間内\r\n setVal(num.toString());\r\n if (props.onChange) {\r\n props.onChange(num.toString());\r\n }\r\n }\r\n } else {\r\n console.debug(['-- NaN --', num]);\r\n setVal('0');\r\n if (props.onChange) {\r\n props.onChange('0');\r\n }\r\n }\r\n }}\r\n onFocus={(e) => e.target.select()}\r\n />\r\n );\r\n};\r\n\r\nexport default TimeEntry;\r\n","import { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\n\r\nexport const TableUseStyle = makeStyles(\r\n createStyles({\r\n\r\n //テーブルヘッダセル\r\n headerCell: {\r\n padding: '2px',\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n minWidth: '80px',\r\n borderCollapse: `collapse`,\r\n },\r\n bodyCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '1px',\r\n height: '40px',\r\n },\r\n bodyCellCenter: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n padding: '1px',\r\n height: '40px',\r\n },\r\n bodyRow: {\r\n '&.Mui-selected, &.Mui-selected:hover': {\r\n //背景色\r\n backgroundColor: '#7fffd4',\r\n '& > .MuiTableCell-root': {\r\n //文字色\r\n color: 'brack',\r\n },\r\n },\r\n },\r\n //テキスト\r\n textField: {\r\n flexGrow: 1,\r\n height: '100%',\r\n width: '98%',\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n textAlign: \"center\",\r\n },\r\n\r\n logTimeField: {\r\n paddingLeft: \"2px\",\r\n width: '24px',\r\n },\r\n })\r\n);\r\n\r\nexport const IoTBoxSettingStyle = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 324px)',\r\n //overflowX: 'scroll',\r\n },\r\n flexBox: {\r\n display: \"flex\",\r\n },\r\n tableDialgContainer: {\r\n maxHeight: 'calc(100vh - 276px)',\r\n },\r\n paper: {\r\n background: '#FFFFEE',\r\n },\r\n buttonStyle: {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n },\r\n })\r\n);\r\n","import React, { useEffect, useState } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { DialogAction, useModal } from '../../../../function/useModal';\r\nimport {\r\n Button,\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n DialogActions,\r\n TextField,\r\n Box,\r\n Typography,\r\n} from '@material-ui/core';\r\nimport ItemComboBox, { ComboBoxItemType } from '../../../atoms/ComboBox/ItemComboBox';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../../atoms/Dialog/ConfirmDialog';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { ApiResponseCode, InsertIoTSet, IOT_SET } from './IoTBoxSetting';\r\nimport { GetNameDevSetList, NAME_DEV_SET } from '../../../../function/NameDevSetModel';\r\nimport TimeEntry from '../../../atoms/Input/TimeEntry';\r\nimport NumericWithNullEntry from '../../../atoms/Input/NumericWithNullEntry';\r\nimport SimpleDialog from '../../../atoms/Dialog/SimpleDialog';\r\nimport NumericEntry_inputEx from '../../../atoms/Input/NumericEntry_inputEx';\r\nimport { TableUseStyle, IoTBoxSettingStyle } from './IoTBoxSettingStyle';\r\n\r\nexport type IoTBoxSettingRowNewDialogProps = {\r\n dialog: DialogAction;\r\n};\r\n\r\nexport type IoTBoxSettingRowNewDialogResponse = {};\r\n\r\n/**\r\n * IoTBox設定 新規登録ダイアログ\r\n * @param props\r\n * @returns\r\n */\r\nconst IoTBoxSettingRowNewDialog: React.FC = (props: IoTBoxSettingRowNewDialogProps) => {\r\n const tableBaseStyle = TableUseStyle();\r\n const pageStyle = IoTBoxSettingStyle();\r\n\r\n const { t } = useTranslation();\r\n\r\n const [imsiNo, setImsiNo] = useState('');\r\n // 機器番号\r\n const [devNoTyp, setDevNoTyp] = useState();\r\n // 収集時間\r\n const [logHour, setLogHour] = useState('0');\r\n const [logMin, setlogMin] = useState('0');\r\n const [logSec, setLogSec] = useState('0');\r\n\r\n const [lithiumBattery, setLithiumBattery] = useState();\r\n\r\n const [isOpen, setOpen] = useState(true);\r\n const [mode, setMode] = useState(true);\r\n const [nameDevCombos, setNameDevCombos] = useState([]);\r\n //APIレスポンスダイアログ\r\n const [messageDialogOpen, setMessageDialogOpen] = React.useState(false);\r\n const [showTitle, setShowTitle] = React.useState('');\r\n const [showMessage, setShowMessage] = React.useState('');\r\n\r\n //機器番号取得\r\n useEffect(() => {\r\n GetNameDevSetList().then((res) => {\r\n console.debug(['res', res]);\r\n //実装のみ選択可\r\n setNameDevCombos(\r\n res\r\n .filter((ci) => ci.EST === 1)\r\n .map((ci) => {\r\n return { index: ci.DEV_INDEX, name: ci.DEV_NO };\r\n })\r\n );\r\n setDevNoTyp(res.length == 0 ? 0 : 1);\r\n });\r\n }, []);\r\n\r\n const handleDialogClose = () => {\r\n console.debug('handleDialogClose()');\r\n setOpen(false);\r\n setMode(false);\r\n };\r\n\r\n /**\r\n * 新規登録状態更新処理呼び出し\r\n */\r\n const newBtnAction = () => {\r\n let data = {} as IOT_SET;\r\n data.IMSI_NO = imsiNo;\r\n data.DEV_INDEX = devNoTyp == undefined ? 0 : devNoTyp;\r\n data.LOG_HOUR = logHour;\r\n data.LOG_MIN = logMin;\r\n data.LOG_SEC = logSec;\r\n data.MOBILE_BATTERY = 0;\r\n data.LITHIUM_BATTERY = lithiumBattery;\r\n data.PLC_NO = 0;\r\n console.debug(['--- newBtnAction ---', data]);\r\n\r\n InsertIoTSet(data).then((status: number) => {\r\n console.debug(['status', status]);\r\n if (status == ApiResponseCode.SUCCESS) {\r\n // 新規登録要求をレコード追加 新規登録非同期待ち\r\n setOpen(false);\r\n setMode(true);\r\n return;\r\n }\r\n // エラー\r\n setShowTitle(t('IoTBoxSettingRowNewDialog.新規登録エラー', '新規登録エラー'));\r\n if (status == ApiResponseCode.BAD_REQUEST) {\r\n // パラメータ異常時\r\n setShowMessage(t('IoTBoxSettingRowNewDialog.パラメータに誤りがあります', 'パラメータに誤りがあります'));\r\n } else if (status == ApiResponseCode.DevIndexConanRegistered) {\r\n // 既に登録済み\r\n setShowMessage(\r\n t(\r\n 'IoTBoxSettingRowNewDialog.コナンエアー管理画面側で使用中の機器番号と重複したため中断しました',\r\n 'コナンエアー管理画面側で使用中の「機器番号」と重複したため中断しました'\r\n )\r\n );\r\n } else if (status == ApiResponseCode.NOT_ACCEPTABLE) {\r\n // 既に登録済み\r\n setShowMessage(\r\n t(\r\n 'IoTBoxSettingRowNewDialog.「IMSI」もしくは「PLCNo」が既に登録済みです',\r\n '「IMSI」もしくは [機器番号]もしくは「PLCNo」が既に登録済みです'\r\n )\r\n );\r\n } else if (status == ApiResponseCode.PLC_NO_FULL_ERROR) {\r\n setShowMessage(\r\n t(\r\n 'IoTBoxSettingRowNewDialog.TMBee_Boxで登録できるTMBee_BoxNOに空きがありません',\r\n 'TMBee-Boxで登録できる「TMBee-BoxNO」に空きがありません'\r\n )\r\n )\r\n }\r\n else {\r\n // 更新失敗時\r\n setShowMessage(t('IoTBoxSettingRowNewDialog.システムエラーが発生しました', 'システムエラーが発生しました'));\r\n }\r\n setMessageDialogOpen(true);\r\n });\r\n };\r\n\r\n console.debug(['- 画面描画開始 -', 'mode:', mode]);\r\n return (\r\n <>\r\n {\r\n if (mode) {\r\n props.dialog.apply({});\r\n } else {\r\n props.dialog.cancel();\r\n }\r\n }}\r\n >\r\n \r\n {t('IoTBoxSettingRowNewDialog.IoTBox新規登録', 'IoTBox新規登録')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n IMSI\r\n \r\n \r\n {\r\n const re = /^[0-9\\b]+$/;\r\n if (e.target.value === '' || re.test(e.target.value)) {\r\n setImsiNo(e.target.value);\r\n }\r\n }}\r\n />\r\n \r\n \r\n {/* 機器番号 プルダウン */}\r\n \r\n \r\n {t('IoTBoxSettingRowNewDialog.機器番号', '機器番号')}\r\n \r\n \r\n {\r\n console.debug(['onChangeEvent', e.target.value]);\r\n if (typeof e.target.value === 'string') {\r\n const val = parseInt(e.target.value);\r\n setDevNoTyp(val);\r\n }\r\n }}\r\n />\r\n \r\n \r\n {/* 収集時間 */}\r\n \r\n \r\n {t('IoTBoxSettingRowNewDialog.収集時間', '収集時間')}\r\n \r\n \r\n
\r\n {\r\n setLogHour(val);\r\n }}\r\n />\r\n :\r\n {\r\n setlogMin(val);\r\n }}\r\n />\r\n :\r\n {\r\n setLogSec(val);\r\n }}\r\n />\r\n
\r\n
\r\n
\r\n \r\n \r\n {t('IoTBoxSettingRowNewDialog.リチウムバッテリ寿命', 'リチウムバッテリ寿命')}\r\n \r\n \r\n {\r\n console.debug(['onChange()', val]);\r\n setLithiumBattery(val);\r\n }}\r\n //maxLen={4}\r\n />\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {t('IoTBoxSettingRowNewDialog.キャンセル', 'キャンセル')}\r\n \r\n {\r\n newBtnAction();\r\n }}\r\n >\r\n {t('IoTBoxSettingRowNewDialog.新規登録', '新規登録')}\r\n \r\n \r\n \r\n setMessageDialogOpen(false)}\r\n title={showTitle}\r\n okText={'OK'}\r\n maxWidth={'sm'}\r\n >\r\n {showMessage}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default IoTBoxSettingRowNewDialog;\r\n","import React, { Dispatch, SetStateAction, useMemo } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { TableRow, TableCell, Checkbox, TextField, Button } from '@material-ui/core';\r\nimport Tooltip from '@mui/material/Tooltip';\r\n\r\nimport ItemComboBox, { ComboBoxItemType } from '../../../atoms/ComboBox/ItemComboBox';\r\nimport NumericEntry_inputEx from '../../../atoms/Input/NumericEntry_inputEx';\r\nimport TimeEntry from '../../../atoms/Input/TimeEntry';\r\n\r\nimport { V_IOTBOX_SETTING_ITEM } from './IoTBoxSetting';\r\nimport { TableUseStyle, IoTBoxSettingStyle } from './IoTBoxSettingStyle';\r\nimport { TableBaseStyle } from '../../../../baseStyle/tableBaseStyle';\r\n\r\ntype IoTBoxSettingGridItemProps = {\r\n rowno: number;\r\n selectIdx: number;\r\n setSelectIdx: Dispatch>;\r\n item: V_IOTBOX_SETTING_ITEM;\r\n updateItem: (item: V_IOTBOX_SETTING_ITEM) => void;\r\n collectSetting: (item: V_IOTBOX_SETTING_ITEM) => void;\r\n saveRowAction: (item: V_IOTBOX_SETTING_ITEM) => void;\r\n lithiumChangeDaytimeAction: (item: V_IOTBOX_SETTING_ITEM) => void;\r\n devNoLists: ComboBoxItemType[];\r\n devNameLists: ComboBoxItemType[];\r\n};\r\n\r\n/**\r\n * IoTBox設定 ListRow\r\n * @param props\r\n * @returns\r\n */\r\nconst IoTBoxSettingGridItem: React.FC = (props: IoTBoxSettingGridItemProps) => {\r\n const tableBaseStyle = TableUseStyle();\r\n const pageStyle = IoTBoxSettingStyle();\r\n const baseClasses = TableBaseStyle();\r\n const { t } = useTranslation();\r\n // 行選択ハンドラ\r\n const selectRow = () => {\r\n console.debug(['selectRow()', props.rowno]);\r\n props.setSelectIdx(props.rowno);\r\n };\r\n\r\n //行選択の背景色一時置き\r\n let lineSelection = '';\r\n\r\n return (\r\n <>\r\n
\r\n {\r\n selectRow();\r\n }}\r\n selected={props.selectIdx === props.rowno}\r\n className={lineSelection}\r\n >\r\n {/* No */}\r\n {props.rowno + 1}\r\n {/* 自動収集 */}\r\n \r\n {\r\n props.item.RUN_FLG = e.target.checked ? '1' : '0';\r\n props.updateItem(props.item);\r\n }}\r\n />\r\n \r\n {/* 機器番号 */}\r\n \r\n {\r\n //console.debug(`DEV_INDEX:${e.target.value}`);\r\n if (typeof e.target.value === 'string') {\r\n props.item.DEV_INDEX = parseInt(e.target.value);\r\n props.updateItem(props.item);\r\n }\r\n }}\r\n />\r\n \r\n {/* 機器名称 */}\r\n {props.item.DEV_NAME}\r\n {/* IMSI */}\r\n \r\n \r\n
{props.item.IMSI_NO}
\r\n
\r\n
\r\n {/* 収集時刻 */}\r\n \r\n
\r\n {\r\n props.item.LOG_HOUR = val;\r\n props.updateItem(props.item);\r\n }}\r\n className={tableBaseStyle.logTimeField}\r\n />\r\n :\r\n {\r\n props.item.LOG_MIN = val;\r\n props.updateItem(props.item);\r\n }}\r\n className={tableBaseStyle.logTimeField}\r\n />\r\n :\r\n {\r\n props.item.LOG_SEC = val;\r\n props.updateItem(props.item);\r\n }}\r\n className={tableBaseStyle.logTimeField}\r\n />\r\n
\r\n
\r\n {/* 産業用バッテリー残量 */}\r\n {props.item.mobileVoltLevel}\r\n {/* リチウムバッテリ残り日数 */}\r\n {props.item.lithiumVoltRemainingDays}\r\n {/* リチウムバッテリ最大使用日数 */}\r\n \r\n {\r\n console.debug(['onChange()', val]);\r\n props.item.LITHIUM_BATTERY = val;\r\n props.updateItem(props.item);\r\n }}\r\n >\r\n \r\n {/* リチウムバッテリ交換 */}\r\n \r\n {\r\n props.lithiumChangeDaytimeAction(props.item);\r\n }}\r\n >\r\n {t('IoTBoxSettingGridItem.実行', '実行')}\r\n \r\n \r\n {/* 設定バージョン */}\r\n {props.item.SET_VER}\r\n {/* 設定結果 */}\r\n {props.item.IOT_SET_FLG_Disp}\r\n {/* 収集設定 画面遷移*/}\r\n \r\n {\r\n props.collectSetting(props.item);\r\n }}\r\n >\r\n {t('IoTBoxSettingGridItem.表示', '表示')}\r\n \r\n \r\n {/* 設定ファイルDL */}\r\n \r\n {\r\n props.saveRowAction(props.item);\r\n }}\r\n >\r\n {props.item.DL_Disp}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default IoTBoxSettingGridItem;\r\n","import React, { useEffect, useState } from 'react';\r\nimport Button from '@material-ui/core/Button';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { V_IOTBOX_SETTING_ITEM } from './IoTBoxSetting';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { IoTBoxSettingStyle } from './IoTBoxSettingStyle';\r\n\r\n/**\r\n * IoTBox設定 フッターボタン\r\n */\r\ntype Props = {\r\n items: V_IOTBOX_SETTING_ITEM[];\r\n onClickUpdateScreenButton: () => void;\r\n onClickAllDLButton: () => void;\r\n onClickNewButton: () => void;\r\n onClickDelButton: () => void;\r\n};\r\n\r\nconst IoTBoxSettingFooter: React.FC = (props) => {\r\n //const [imsiNo, setImsiNo] = useState('');\r\n const pageStyle = IoTBoxSettingStyle();\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n \r\n props.onClickUpdateScreenButton()}\r\n >\r\n {t('IoTBoxSettingFooter.画面更新', '画面更新')}\r\n \r\n \r\n \r\n !item.DL_ENABLE)}\r\n className={pageStyle.buttonStyle}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n disableElevation\r\n onClick={(e) => {\r\n props.onClickAllDLButton();\r\n }}\r\n >\r\n {t('IoTBoxSettingFooter.一括設定ファイルDL', '一括設定ファイルDL')}\r\n \r\n \r\n\r\n \r\n {\r\n props.onClickNewButton(/* imsiNo */);\r\n }}\r\n >\r\n {t('IoTBoxSettingFooter.新規登録', '新規登録')}\r\n \r\n \r\n\r\n \r\n props.onClickDelButton(/* imsiNo */)}\r\n >\r\n {t('IoTBoxSettingFooter.削除', '削除')}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default IoTBoxSettingFooter;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { DialogAction, useModal } from '../../../../function/useModal';\r\nimport { Button, Dialog, DialogTitle, DialogContent, DialogActions, TextField, Box } from '@material-ui/core';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { ApiResponseCode, deleteIoTSet, IOT_SET, V_IOTBOX_SETTING_ITEM } from './IoTBoxSetting';\r\nimport { TableUseStyle, IoTBoxSettingStyle } from './IoTBoxSettingStyle';\r\n\r\nexport type IoTBoxSettingRowDelDialogProps = {\r\n dialog: DialogAction;\r\n item: V_IOTBOX_SETTING_ITEM | undefined;\r\n //devNoCombos: ComboBoxItemType[] | undefined;\r\n};\r\n\r\nexport type IoTBoxSettingRowDelDialogResponse = {};\r\n\r\n/**\r\n * IoTBox設定 削除ダイアログ\r\n * @param props\r\n * @returns\r\n */\r\nconst IoTBoxSettingRowDelDialog: React.FC = (props: IoTBoxSettingRowDelDialogProps) => {\r\n const { t } = useTranslation();\r\n\r\n const tableBaseStyle = TableUseStyle();\r\n const pageStyle = IoTBoxSettingStyle();\r\n\r\n const [isOpen, setOpen] = useState(true);\r\n const [mode, setMode] = useState(true);\r\n\r\n useEffect(() => { }, []);\r\n\r\n const handleDialogClose = () => {\r\n console.debug('handleDialogClose()');\r\n setOpen(false);\r\n setMode(false);\r\n };\r\n\r\n /**\r\n * 削除登録状態更新処理呼び出し\r\n */\r\n const delBtnAction = () => {\r\n console.debug(['--- delBtnAction ---', props.item?.IMSI_NO]);\r\n\r\n deleteIoTSet(props.item ? props.item.IMSI_NO : '').then((status: number) => {\r\n console.debug(['status', status]);\r\n if (status == ApiResponseCode.SUCCESS) {\r\n // 削除登録要求をレコード追加 非同期待ち\r\n setOpen(false);\r\n setMode(true);\r\n }\r\n });\r\n };\r\n\r\n console.debug(['- 画面描画開始 -', 'mode:', mode, props.item?.IMSI_NO]);\r\n return (\r\n <>\r\n {\r\n if (mode) {\r\n props.dialog.apply({});\r\n } else {\r\n props.dialog.cancel();\r\n }\r\n }}\r\n >\r\n {t('IoTBoxSettingRowDelDialog.IoTBox削除', 'IoTBox削除')}\r\n \r\n {`IMSI「${props.item?.IMSI_NO}」\r\n ${t('IoTBoxSettingRowDelDialog.IoTBoxの登録を削除しますか?', 'IoTBoxの登録を削除しますか?')}`}\r\n \r\n\r\n \r\n \r\n {t('IoTBoxSettingRowDelDialog.キャンセル', 'キャンセル')}\r\n \r\n {\r\n delBtnAction();\r\n }}\r\n >\r\n {t('IoTBoxSettingRowDelDialog.削除', '削除')}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default IoTBoxSettingRowDelDialog;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\n\r\nimport { SettingsState } from '../../../organisms/SelectSettings';\r\nimport { useTranslation } from 'react-i18next';\r\nimport {\r\n //createDefaltIoTBoxSetting,\r\n GetIoTBoxSettingLists,\r\n SetIoTSetListType,\r\n SetIoTSetType,\r\n V_IOTBOX_SETTING_ITEM,\r\n BATTERY_CONVERT_SET,\r\n GetBatteryConvertSet,\r\n GetMobileBatteryLevel,\r\n GetLithiumVoltRemainingDays,\r\n PutLithiumChagenDayTime,\r\n ApiResponseCode,\r\n} from './IoTBoxSetting';\r\nimport { ComboBoxItemType } from '../../../atoms/ComboBox/ItemComboBox';\r\nimport IoTBoxSettingRowNewDialog, { IoTBoxSettingRowNewDialogResponse } from './IoTBoxSettingRowNewDialog';\r\nimport { useModal } from '../../../../function/useModal';\r\nimport { Grid, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Typography } from '@material-ui/core';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport IoTBoxSettingGridItem from './IoTBoxSettingGridItem';\r\nimport IoTBoxSettingFooter from './IoTBoxSettingFooter';\r\nimport IoTBoxSettingRowDelDialog from './IoTBoxSettingRowDelDialog';\r\nimport { GetNameDevSetList, NAME_DEV_SET } from '../../../../function/NameDevSetModel';\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../../atoms/Dialog/ConfirmDialog';\r\nimport SimpleDialog from '../../../atoms/Dialog/SimpleDialog';\r\nimport { TableUseStyle, IoTBoxSettingStyle } from './IoTBoxSettingStyle';\r\n\r\ntype IoTBoxSettingProps = { editData: SettingsState };\r\n\r\n/**\r\n * IoTBox設定メインページ\r\n * @param props\r\n * @returns\r\n */\r\nconst IoTBoxSettingPage: React.FC = (props: IoTBoxSettingProps) => {\r\n const tableBaseStyle = TableUseStyle();\r\n const pageStyle = IoTBoxSettingStyle();\r\n const { t } = useTranslation();\r\n\r\n // 設定画面リスト\r\n const [itemList, setItemList] = useState([]);\r\n // バッテリー情報\r\n const [batteryConvertList, setBatteryConvertList] = useState([]);\r\n const [selectIdx, setSelectIdx] = useState(-1);\r\n const [devNoComboList, setDevNoComboList] = useState([]);\r\n const [devNameComboList, setDevNameComboList] = useState([]);\r\n\r\n // 新規登録ダイアログ\r\n const [flgNewRow, newRowDlg] = useModal();\r\n // 削除登録ダイアログ\r\n const [flgDelRow, delRowDlg] = useModal();\r\n // 保存確認ダイアログ\r\n const [flgCfmDlg, actCfmDlg] = useModal();\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n const cfmdlg = flgCfmDlg ? (\r\n \r\n ) : null;\r\n // エラーダイアログ\r\n const [messageDialogOpen, setMessageDialogOpen] = React.useState(false);\r\n const [showMessage, setShowMessage] = React.useState(t('IoTBoxSetting.警告', '警告'));\r\n const [showMessageTitle, setShowMessageTitle] = React.useState('');\r\n\r\n const [updateMap, setUpdateMap] = useState>(new Map());\r\n\r\n /**\r\n * 設定結果\r\n * @param iotSetFlg\r\n * @returns\r\n */\r\n const getIotSetFlgRes = (iotSetFlg?: number): string => {\r\n //if (!btnEnable) return t('IoTBoxSettingGrid.編集不可', '編集不可');\r\n\r\n if (iotSetFlg == undefined) return t('IoTBoxSettingGrid.不明', '不明');\r\n\r\n switch (iotSetFlg) {\r\n case 0:\r\n return t('IoTBoxSettingGrid.設定中', '設定中');\r\n case 1:\r\n return t('IoTBoxSettingGrid.完了', '完了');\r\n case 2:\r\n return t('IoTBoxSettingGrid.失敗', '失敗');\r\n case 3: //新規追加中\r\n return t('IoTBoxSettingGrid.新規追加中', '新規追加中');\r\n case 4: //削除中\r\n return t('IoTBoxSettingGrid.削除中', '削除中');\r\n case 5: //新規追加失敗\r\n return t('IoTBoxSettingGrid.新規追加失敗', '新規追加失敗');\r\n case 6: //削除失敗\r\n return t('IoTBoxSettingGrid.削除失敗', '削除失敗');\r\n default:\r\n return t('IoTBoxSettingGrid.不明', '不明');\r\n }\r\n };\r\n /**\r\n * 設定ファイルULボタン表示文字\r\n * @param iotSetFlg\r\n * @returns\r\n */\r\n const getIotSetFlgDL = (iotSetFlg?: number): string => {\r\n if (iotSetFlg == undefined) return t('IoTBoxSettingGrid.DL未実施', 'DL未実施');\r\n switch (iotSetFlg) {\r\n case 0:\r\n return t('IoTBoxSettingGrid.DL中', 'DL中');\r\n case 1:\r\n return t('IoTBoxSettingGrid.DL完了', 'DL完了');\r\n case 2:\r\n return t('IoTBoxSettingGrid.DL失敗', 'DL失敗');\r\n case 3: //新規追加中\r\n return t('IoTBoxSettingGrid.DL中', 'DL中');\r\n case 4: //削除中\r\n return t('IoTBoxSettingGrid.DL中', 'DL中');\r\n default:\r\n //TODO\r\n return t('IoTBoxSettingGrid.DL未実施', 'DL未実施');\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n //console.log('-- useEffect --');\r\n setSelectIdx(-1);\r\n\r\n props.editData.SaveFunction = saveProc;\r\n props.editData.IsUpdate = false;\r\n\r\n getData();\r\n }, [props.editData.CancelCondition]);\r\n\r\n /**\r\n * IoTBox設定リスト取得\r\n */\r\n const getData = () => {\r\n let nameDevSets: NAME_DEV_SET[] = [];\r\n let iotBoxSettingList: V_IOTBOX_SETTING_ITEM[] = [];\r\n let batteryConvertList: BATTERY_CONVERT_SET[] = [];\r\n\r\n GetNameDevSetList()\r\n .then((res) => {\r\n nameDevSets = res;\r\n return GetIoTBoxSettingLists();\r\n })\r\n .then((res) => {\r\n res.V_IOTBOX_SETTING_ITEMS.forEach((r) => {\r\n if (r.IOT_SET_FLG != null) {\r\n r.IOT_SET_FLG_Disp = getIotSetFlgRes(r.IOT_SET_FLG);\r\n r.DL_Disp = getIotSetFlgDL(r.IOT_SET_FLG);\r\n }\r\n });\r\n\r\n res.V_IOTBOX_SETTING_ITEMS.sort((a, b) => a.DEV_INDEX - b.DEV_INDEX);\r\n iotBoxSettingList = res.V_IOTBOX_SETTING_ITEMS;\r\n return GetBatteryConvertSet();\r\n })\r\n .then((res) => {\r\n batteryConvertList = res;\r\n iotBoxSettingList.forEach((r) => {\r\n r.mobileVoltLevel = GetMobileBatteryLevel(r, res);\r\n r.lithiumVoltRemainingDays = GetLithiumVoltRemainingDays(r);\r\n });\r\n console.debug(['iotBoxSettingList,batteryConvertList', iotBoxSettingList, batteryConvertList]);\r\n\r\n //機器番号リストフィルター\r\n nameDevSets = nameDevSets.filter((row) => {\r\n if (iotBoxSettingList.findIndex((row2) => row2.DEV_INDEX === row.DEV_INDEX) !== -1) {\r\n return true;\r\n }\r\n if (row.EST === 1) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n setDevNoComboList(\r\n nameDevSets.map((ci) => {\r\n return { index: ci.DEV_INDEX, name: ci.DEV_NO };\r\n })\r\n );\r\n setDevNameComboList(\r\n nameDevSets.map((ci) => {\r\n return { index: ci.DEV_INDEX, name: ci.DEV_NAME };\r\n })\r\n );\r\n setItemList(iotBoxSettingList);\r\n setBatteryConvertList(batteryConvertList);\r\n })\r\n .catch((error) => {\r\n setShowMessageTitle(t('IoTBoxSetting.警告', '警告'));\r\n setShowMessage(t('IoTBoxSetting.データ取得中にエラーが発生しました', 'データ取得中にエラーが発生しました'));\r\n setMessageDialogOpen(true);\r\n console.error(['saveAction error', error]);\r\n })\r\n .finally(() => { });\r\n };\r\n\r\n /**\r\n * リスト編集\r\n * @param item\r\n */\r\n const itemUpdate = (item: V_IOTBOX_SETTING_ITEM) => {\r\n item.IS_EDITED = true;\r\n //機器番号/名称入れ替え\r\n const devNo = devNoComboList.find((e) => e.index == item.DEV_INDEX);\r\n if (devNo != undefined) item.DEV_NO = devNo.name;\r\n const devName = devNameComboList.find((e) => e.index == item.DEV_INDEX);\r\n if (devName != undefined) item.DEV_NAME = devName.name;\r\n\r\n const idx = itemList.findIndex((itm) => itm.IMSI_NO === item.IMSI_NO);\r\n //console.debug(['itemUpdate()', item, idx]);\r\n if (idx >= 0) {\r\n const temp = itemList.concat(); // 画面更新のためArrayの再生成\r\n temp[idx] = item;\r\n setItemList(temp);\r\n\r\n updateMap?.set(item.DEV_INDEX, true);\r\n setUpdateMap(updateMap);\r\n if (updateMap) {\r\n props.editData.Target = { map: updateMap, list: itemList };\r\n props.editData.IsUpdate = true;\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * 画面更新ボタン\r\n */\r\n const handleupdateScreenAction = () => {\r\n //console.debug('updateScreenAction()');\r\n getData();\r\n };\r\n\r\n /**\r\n * 保存処理呼び出し\r\n * 設定ファイルUP\r\n * @param item\r\n */\r\n const dlRowBtnAction = (item: V_IOTBOX_SETTING_ITEM) => {\r\n //console.debug(['--- dlRowBtnAction ---', item]);\r\n\r\n //APIコール\r\n SetIoTSetType(item).then((status: number) => {\r\n //console.debug(['status', status]);\r\n if (status == ApiResponseCode.SUCCESS) {\r\n // 保存(UL)要求をレコード追加 非同期待ち\r\n getData();\r\n\r\n if (updateMap) {\r\n if (updateMap.has(item.DEV_INDEX)) {\r\n updateMap.delete(item.DEV_INDEX);\r\n }\r\n if (updateMap.size == 0) {\r\n props.editData.IsUpdate = false;\r\n }\r\n }\r\n } else {\r\n setShowMessageTitle(t('IoTBoxSetting.警告', '警告'));\r\n if (status == ApiResponseCode.SERVICE_UNAVAILABLE) {\r\n setShowMessage(t('IoTBoxSetting.ネットワーク接続エラー', 'ネットワーク接続エラー'));\r\n }\r\n else if (status == ApiResponseCode.DevIndexConanRegistered) {\r\n setShowMessage(\r\n t(\r\n 'IoTBoxSetting.コナンエアー管理画面側で使用中の機器番号と重複したため中断しました\\n保存する場合はデータ収集設定画面にて変換元の計測種別振動行か対象機器番号を使用しているコナンエアーの実行フラグを外すことが必要です',\r\n 'コナンエアー管理画面側で使用中の「機器番号」と重複したため中断しました\\n保存する場合は、データ収集設定画面にて変換元の計測種別『振動』行か対象機器番号を使用しているコナンエアーの実行フラグを外すことが必要です'\r\n )\r\n );\r\n }\r\n else {\r\n setShowMessage(t('IoTBoxSetting.設定ファイルUP実行不可', '設定ファイルUP実行不可'));\r\n }\r\n setMessageDialogOpen(true);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * 保存処理呼び出し\r\n * 一括設定ファイルUP\r\n */\r\n const dlAllBtnAction = () => {\r\n //UP可能なデータのみ更新\r\n const sendItems = itemList.filter((item) => /* item.IS_EDITED && */ item.DL_ENABLE);\r\n //console.debug(['--- dlAllBtnAction ---', itemList, 'sendItems', sendItems]);\r\n\r\n //APIコール\r\n SetIoTSetListType(sendItems).then((status: number) => {\r\n //console.debug(['status', status]);\r\n if (status == ApiResponseCode.SUCCESS) {\r\n // 保存(UL)要求をレコード追加 非同期待ち\r\n getData();\r\n\r\n props.editData.IsUpdate = false; // すべてアップロードした場合は編集フラグをリセット\r\n } else {\r\n setShowMessageTitle(t('IoTBoxSetting.警告', '警告'));\r\n if (status == ApiResponseCode.SERVICE_UNAVAILABLE) {\r\n setShowMessage(t('IoTBoxSetting.ネットワーク接続エラー', 'ネットワーク接続エラー'));\r\n } else if (status == ApiResponseCode.DevIndexConanRegistered) {\r\n setShowMessage(\r\n t(\r\n 'IoTBoxSetting.コナンエアー管理画面側で使用中の機器番号と重複したため中断しました\\n保存する場合はデータ収集設定画面にて変換元の計測種別振動行か対象機器番号を使用しているコナンエアーの実行フラグを外すことが必要です',\r\n 'コナンエアー管理画面側で使用中の「機器番号」と重複したため中断しました\\n保存する場合は、データ収集設定画面にて変換元の計測種別『振動』行か対象機器番号を使用しているコナンエアーの実行フラグを外すことが必要です'\r\n )\r\n );\r\n }\r\n else {\r\n setShowMessage(t('IoTBoxSetting.設定ファイルUP実行不可', '設定ファイルUP実行不可'));\r\n }\r\n setMessageDialogOpen(true);\r\n }\r\n });\r\n };\r\n\r\n /** データ収集設定 */\r\n const handleCollectSettingShow = (item: V_IOTBOX_SETTING_ITEM) => {\r\n //console.debug('handleCollectSettingShow()', item);\r\n\r\n const plcParam = { plcNo: item.PLC_NO };\r\n props.editData.JumpMenu('Collect', plcParam);\r\n\r\n // if (itemList.find((itm) => itm.IS_EDITED)) {\r\n // setDlgmsg('変更したデータが失われますが,\\nよろしいですか?\\n保存する場合は,設定ファイルDLを実行してください。');\r\n // actCfmDlg\r\n // .open()\r\n // .apply((_) => {\r\n // console.debug(['apply']);\r\n\r\n // setColSetItem(item);\r\n // collectSettingDsp\r\n // .open()\r\n // .apply(() => {\r\n // //TODO データ収集設定 API実行成功後のコールバック\r\n // console.debug('apply()');\r\n // getData();\r\n // })\r\n // .cancel(() => {\r\n // console.debug('cancel()');\r\n // });\r\n // })\r\n // .cancel(() => {});\r\n // } else {\r\n // // IoT設定 未編集\r\n // setColSetItem(item);\r\n // collectSettingDsp\r\n // .open()\r\n // .apply(() => {\r\n // //TODO データ収集設定 API実行成功後のコールバック\r\n // console.debug('apply()');\r\n // getData();\r\n // })\r\n // .cancel(() => {\r\n // console.debug('cancel()');\r\n // });\r\n // }\r\n };\r\n\r\n /** 新規登録ダイアログ */\r\n const handleNewDialogShow = () => {\r\n console.debug('handleNewDialogShow()');\r\n newRowDlg\r\n .open()\r\n .apply(() => {\r\n // API実行成功後のコールバック\r\n console.debug('apply()');\r\n getData();\r\n })\r\n .cancel(() => {\r\n console.debug('cancel()');\r\n });\r\n };\r\n\r\n /** 削除登録ダイアログ */\r\n const handleDelDialogShow = () => {\r\n console.debug(['handleDelDialogShow()', itemList, selectIdx, itemList[selectIdx]?.DL_ENABLE]);\r\n\r\n if (selectIdx >= 0 && itemList[selectIdx].DL_ENABLE) {\r\n delRowDlg\r\n .open()\r\n .apply(() => {\r\n // API実行成功後のコールバック\r\n console.debug('apply()');\r\n getData();\r\n })\r\n .cancel(() => {\r\n console.debug('cancel()');\r\n });\r\n }\r\n };\r\n\r\n const saveProc = (target: object): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const target = props.editData.Target as { map: Map; list: V_IOTBOX_SETTING_ITEM[] };\r\n\r\n if (target) {\r\n const sendItems = target.list.filter((item) => item.DL_ENABLE && target.map.has(item.DEV_INDEX));\r\n\r\n SetIoTSetListType(sendItems)\r\n .then((status: number) => {\r\n if (status == ApiResponseCode.SUCCESS) {\r\n resolve('done'); // 要求が成功すれば完了\r\n }\r\n reject('request error');\r\n })\r\n .catch((reason) => reject(reason));\r\n } else {\r\n reject('data error');\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * リチウムバッテリ交換アクション\r\n * 設定ファイルUP\r\n * @param item\r\n */\r\n const lithiumChangeDaytimeAction = (item: V_IOTBOX_SETTING_ITEM) => {\r\n setDlgmsg(\r\n t(\r\n 'IoTBoxSetting.バッテリ最大使用日数_残日数を更新しますか',\r\n 'バッテリ最大使用日数,残日数を更新しますか?\\n保存していないデータは破棄されます。'\r\n )\r\n );\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n PutLithiumChagenDayTime(item.IMSI_NO).then((status: number) => {\r\n console.debug(['status', status]);\r\n if (status == ApiResponseCode.SUCCESS) {\r\n setShowMessageTitle(t('IoTBoxSetting.確認', '確認'));\r\n setShowMessage(\r\n t('IoTBoxSetting.バッテリ最大使用日数_残日数を更新します', 'バッテリ最大使用日数_残日数を更新しました')\r\n );\r\n setMessageDialogOpen(true);\r\n getData();\r\n return;\r\n } else {\r\n setShowMessageTitle(t('IoTBoxSetting.警告', '警告'));\r\n setShowMessage(t('IoTBoxSetting.データ更新中にエラーが発生しました', 'データ更新中にエラーが発生しました'));\r\n setMessageDialogOpen(true);\r\n console.error(['lithiumChangeDaytimeAction ApiResponseCode', status]);\r\n }\r\n });\r\n })\r\n .cancel(() => { });\r\n };\r\n\r\n //console.debug(['- 画面描画開始 -', itemList, 'selectIdx', selectIdx]);\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n No\r\n \r\n \r\n {t('IoTBoxSetting.自動収集', '自動収集')}\r\n \r\n \r\n {t('IoTBoxSetting.機器番号', '機器番号')}\r\n \r\n \r\n {t('IoTBoxSetting.機器名称', '機器名称')}\r\n \r\n \r\n IMSI\r\n \r\n \r\n {t('IoTBoxSetting.収集時刻', '収集時刻')}\r\n \r\n \r\n {t('IoTBoxSetting.産業用バッテリー残量', '産業用バッテリー残量\\n(%)')}\r\n \r\n \r\n {t('IoTBoxSetting.リチウムバッテリ残り日数', 'リチウムバッテリ残り日数')}\r\n \r\n \r\n {t('IoTBoxSetting.リチウムバッテリ最大使用日数', 'リチウムバッテリ最大使用日数')}\r\n \r\n \r\n {t('IoTBoxSetting.リチウムバッテリ交換', 'リチウムバッテリ交換')}\r\n \r\n \r\n {t('IoTBoxSetting.設定バージョン', '設定バージョン')}\r\n \r\n \r\n {t('IoTBoxSetting.設定結果', '設定結果')}\r\n \r\n \r\n {t('IoTBoxSetting.収集設定', '収集設定')}\r\n \r\n \r\n {t('IoTBoxSetting.設定ファイルDL', '設定ファイルDL')}\r\n \r\n \r\n \r\n \r\n {itemList.map((item, idx) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n\r\n {/* IoTBox新規登録 */}\r\n {flgNewRow ? : null}\r\n {/* IoTBox削除 */}\r\n {flgDelRow ? : null}\r\n {/* 収集設定画面遷移 */}\r\n {cfmdlg}\r\n {/* エラーダイアログ */}\r\n setMessageDialogOpen(false)}\r\n title={showMessageTitle}\r\n okText={'OK'}\r\n maxWidth={'sm'}\r\n >\r\n {showMessage}\r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nexport default IoTBoxSettingPage;\r\n","import { ComboBoxItemTypeSOD } from \"../components/atoms/ComboBox/ItemComboBoxStrOD\"\r\nimport { ComboBoxItemTypeS } from \"../components/atoms/ComboBox/ItemComboBoxStr\"\r\nimport { NAME_DEV_SET } from './NameDevSetModel';\r\nimport { ResponceDataType } from \"../ErrorCode\";\r\nimport dayjs from 'dayjs';\r\nimport i18next from 'i18next';\r\n\r\n\r\n/**\r\n * EMCエラーログ情報\r\n */\r\nexport type EMCAlarmLogType = {\r\n ///収集時刻 を取得または設定します。\r\n COL_DATE: Date,\r\n ///異常種別No. を取得又は設定します\r\n ALM_TYPE_NO: number,\r\n ///異常区分 1を取得又は設定します。\r\n ALM_KIND: number,\r\n ///異常種別名\r\n TYP_NAME: string,\r\n //機器番号を取得または設定します。\r\n DEV_NO: string,\r\n //機器名称を取得または設定します。\r\n DEV_NAME: string,\r\n //PLCNo. を取得または設定します。\r\n PLC_NO: number,\r\n //AI カード No. を取得または設定します。\r\n AI_CARD: number,\r\n //CHNo. を取得または設定します。\r\n AI_CH: number,\r\n //機器 INDEX を取得または設定します。\r\n DEV_INDEX: number,\r\n\r\n ///連番付与\r\n rowIndex: number,\r\n\r\n}\r\n\r\n/**\r\n * EMC設定情報\r\n */\r\nexport type EMCSettingType = {\r\n ///PLCNo. を取得または設定します\r\n /// COL_SET PLC_NO\r\n PLC_NO: number;\r\n ///AI カード No. を取得または設定します\r\n /// COL_SET AI_CARD\r\n AI_CARD: number;\r\n /// CHNo. を取得または設定します\r\n /// COL_SET AI_CH\r\n AI_CH: number;\r\n /// 有効フラグを取得または設定します\r\n /// COL_SET VALID\r\n VALID: number;\r\n /// 実行フラグを取得または設定します\r\n /// COL_SET RUN_FLG\r\n RUN_FLG: number;\r\n /// センサー No. を取得または設定します\r\n /// COL_SET SET_NO\r\n SET_NO: number;\r\n /// 機器 INDEX を取得または設定します\r\n /// NAME_DEV_SET DEV_INDEX\r\n DEV_INDEX: number;\r\n /// 機器番号を取得または設定します\r\n /// NAME_DEV_SET DEV_NO\r\n DEV_NO: string;\r\n /// 機器名称を取得または設定します\r\n /// NAME_DEV_SET DEV_NAME\r\n DEV_NAME: string;\r\n /// 電圧(V)を取得または設定します\r\n /// NAME_DEV_SET VOLTAGE\r\n VOLTAGE: number;\r\n /// 定格電流を取得または設定します\r\n /// NAME_DEV_SET RATED_CUR\r\n RATED_CUR: number;\r\n /// ユニット登録 No. を取得または設定します\r\n /// COL_SET AI_UNIT\r\n AI_UNIT: number;\r\n /// 計測種別 No. を取得または設定します\r\n /// COL_SET KIND_NO\r\n KIND_NO: number;\r\n /// 収集時間を取得または設定します\r\n /// COL_SET SMP_TIME\r\n SMP_TIME: number;\r\n /// 項目名称 No. を取得または設定します\r\n /// COL_SET ITM_NAME_NO\r\n ITM_NAME_NO: number;\r\n /// ロギング周期を取得または設定します\r\n /// COL_SET LOG_INT\r\n LOG_INT: number;\r\n /// ロギング開始時刻を取得または設定します\r\n /// COL_SET LOG_START\r\n LOG_START?: Date;\r\n /// 上書フラグを取得または設定します\r\n /// COL_SET OVERWRITE\r\n OVERWRITE: number;\r\n /// デジタル値 (上限) を取得または設定します\r\n /// COL_SET DIG_HIGH\r\n DIG_HIGH: number;\r\n /// 工学値 (下限) を取得または設定します\r\n /// COL_SET RL\r\n RL: number;\r\n /// 工学値 (上限) を取得または設定します。\r\n /// COL_SET RH\r\n RH: number;\r\n /// 乗率を取得または設定します\r\n /// COL_SET MUL\r\n MUL: number;\r\n /// 単位を取得または設定します\r\n /// COL_SET UNIT\r\n UNIT: string;\r\n /// リアルタイムトレンド上限値を取得または設定します\r\n /// COL_SET RT_LMT_H\r\n RT_LMT_H: number;\r\n /// リアルタイムトレンド上上限値を取得または設定します\r\n /// COL_SET RT_LMT_HH\r\n RT_LMT_HH: number;\r\n /// データ格納 ZR 点数を取得または設定します\r\n /// COL_SET ZRCH_CNT\r\n ZRCH_CNT: number;\r\n /// メモを取得または設定します\r\n /// COL_SET MEMO\r\n MEMO: string;\r\n /// モータ起動状態検出フラグを取得または設定します\r\n /// COL_SET START_DET\r\n START_DETO: number;\r\n /// アベレージ処理方法を取得または設定します\r\n /// COL_SET AVG_PRC\r\n AVG_PRC: number;\r\n /// エンベロープ後波形保存を取得または設定します\r\n /// COL_SET ENV_SAV\r\n ENV_SAV: number;\r\n /// 回転周波数算出センサーを取得または設定します\r\n /// COL_SET ROT_CLC\r\n ROT_CLC: number;\r\n /// ユニット No. を取得または設定します\r\n UnitNo: number;\r\n /// 局番を取得または設定します\r\n AreaNo: number;\r\n /// 有効フラグを取得または設定します\r\n ValidFlg: boolean;\r\n /// 実行フラグを取得または設定します\r\n RunFlg: boolean;\r\n\r\n //インデックス番号付与\r\n indexNo: number;\r\n //編集通知\r\n isEdit: boolean;\r\n};\r\n\r\nexport const CreateDefalutEMCSettingType = (): EMCSettingType => {\r\n var ret: EMCSettingType = {\r\n PLC_NO: 0,\r\n AI_CARD: 0,\r\n AI_CH: 0,\r\n VALID: 0,\r\n RUN_FLG: 0,\r\n SET_NO: 0,\r\n DEV_INDEX: 0,\r\n DEV_NO: \"\",\r\n DEV_NAME: \"\",\r\n VOLTAGE: 0,\r\n RATED_CUR: 0,\r\n AI_UNIT: 0,\r\n KIND_NO: 0,\r\n SMP_TIME: 0,\r\n ITM_NAME_NO: 0,\r\n LOG_INT: 0,\r\n LOG_START: new Date(),\r\n OVERWRITE: 0,\r\n DIG_HIGH: 0,\r\n RL: 0,\r\n RH: 0,\r\n MUL: 0,\r\n UNIT: \"\",\r\n RT_LMT_H: 0,\r\n RT_LMT_HH: 0,\r\n ZRCH_CNT: 0,\r\n MEMO: \"\",\r\n START_DETO: 0,\r\n AVG_PRC: 0,\r\n ENV_SAV: 0,\r\n ROT_CLC: 0,\r\n UnitNo: 0,\r\n AreaNo: 0,\r\n ValidFlg: false,\r\n RunFlg: false,\r\n indexNo: 0,\r\n isEdit: false,\r\n };\r\n return ret;\r\n}\r\n\r\n//EMC設定データ取得\r\nexport const GetEMCSettings = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/EMCSetting/\")\r\n .then((res) => {\r\n if (!res.ok) {\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n //console.error(message);\r\n reject(message);\r\n }\r\n else {\r\n res.json()\r\n .then((result: EMCSettingType[]) => {\r\n //console.debug([\"GetEMCSettings - result\",result]);\r\n if (result != null) {\r\n if (result.length !== 0) {\r\n result.map((row, index) => {\r\n //連番付与\r\n row.indexNo = index + 1;\r\n });\r\n }\r\n resolve(result);\r\n }\r\n reject('Invalidate response');\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n reject(error);\r\n })\r\n }\r\n })\r\n });\r\n};\r\n\r\n//EMC設定データ取得(実装データのみ\r\nexport const GetEMCSettingsEst = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/EMCSetting/Est\")\r\n .then((res) => {\r\n if (!res.ok) {\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n //console.error(message);\r\n reject(message);\r\n }\r\n else {\r\n res.json()\r\n .then((result: EMCSettingType[]) => {\r\n //console.debug([\"GetEMCSettings - result\",result]);\r\n if (result != null) {\r\n if (result.length !== 0) {\r\n result.map((row, index) => {\r\n //連番付与\r\n row.indexNo = index + 1;\r\n });\r\n }\r\n resolve(result);\r\n }\r\n reject('Invalidate response');\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n reject(error);\r\n })\r\n }\r\n })\r\n });\r\n};\r\n\r\n/**\r\n *EMC設定データ更新\r\n * @returns\r\n */\r\nexport const PutEMCSettings = (settings: EMCSettingType[]): Promise => {\r\n return new Promise((resolve, reject) => {\r\n let updateRows = settings.filter((r) => r.isEdit == true);\r\n console.debug([\"PutEMCSettings - settings updateRows\", settings, updateRows]);\r\n fetch(\"api/EMCSetting/\", {\r\n method: \"put\",\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(updateRows)\r\n }).then((res) => {\r\n if (!res.ok) {\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n reject(message);\r\n }\r\n return res.json();\r\n }).then((result: ResponceDataType) => {\r\n console.debug([\"PutEMCSettings - result \", result])\r\n resolve(result);\r\n },\r\n (error) => {\r\n console.error(error);\r\n reject(error);\r\n })\r\n });\r\n}\r\n\r\n\r\n/**\r\n * EMCアラームデータ取得\r\n * @returns\r\n */\r\nexport const GetEMCAlarmLogs = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/EMCTrend/EMCAlarmLogs\")\r\n .then((res) => {\r\n if (!res.ok) {\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n //console.error(message);\r\n reject(message);\r\n }\r\n else {\r\n res.json()\r\n .then((result: EMCAlarmLogType[]) => {\r\n console.debug([\"GetEMCAlarmLogss - result\", result]);\r\n if (result != null) {\r\n //連番付与\r\n result.forEach((r, index) => r.rowIndex = (index + 1));\r\n resolve(result);\r\n }\r\n else {\r\n reject('Invalidate response');\r\n }\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n reject(error);\r\n })\r\n }\r\n })\r\n });\r\n};\r\n\r\n\r\n/**\r\n * 設定画面で使用するコンボボックスアイテムリストを作成\r\n * @param settings EMC設定データリスt\r\n * @param nameDevSets NameDevSetリスト\r\n * @returns コンボボックスリスト\r\n */\r\nexport const CreateSettingCombBoxItems = (settings: EMCSettingType[], nameDevSets: NAME_DEV_SET[], translation: any): ComboBoxItemTypeSOD[] => {\r\n\r\n let comboItems: ComboBoxItemTypeSOD[] = [];\r\n\r\n //空白を追加\r\n comboItems.push({ key: \"0\", name: \"-\" });\r\n\r\n nameDevSets.forEach((r) => {\r\n let item: ComboBoxItemTypeSOD = {\r\n key: r.DEV_INDEX.toString(),\r\n name: `${r.DEV_NO} ${r.DEV_NAME}`\r\n }\r\n comboItems.push(item);\r\n });\r\n\r\n let msg = i18next.t('EMCSetting.未実装', '(未実装)');\r\n //未実装を追加\r\n settings.forEach((r) => {\r\n if (r.DEV_INDEX !== null &&\r\n r.DEV_INDEX !== 0\r\n && nameDevSets.findIndex((rr) => rr.DEV_INDEX === r.DEV_INDEX) === -1) {\r\n comboItems.push({ key: r.DEV_INDEX.toString(), name: `${msg} [${r.DEV_NO} ${r.DEV_NAME}]` });\r\n }\r\n return;\r\n });\r\n return comboItems;\r\n};\r\n\r\n/**\r\n * 選択画面で使用するコンボボックスアイテムリストを作成\r\n * @param settings EMC設定データリスt\r\n * @param nameDevSets NameDevSetリスト\r\n * @returns コンボボックスリスト\r\n */\r\nexport const CreateSelectCombBoxItems = (settings: EMCSettingType[]): ComboBoxItemTypeS[] => {\r\n\r\n let comboItems: ComboBoxItemTypeS[] = [];\r\n const selectDt = settings.filter((r) => r.DEV_INDEX != 0);\r\n selectDt.forEach((r) => {\r\n let item: ComboBoxItemTypeS = {\r\n key: r.DEV_INDEX.toString(),\r\n name: `${r.DEV_NO} ${r.DEV_NAME}`\r\n }\r\n comboItems.push(item);\r\n });\r\n\r\n return comboItems;\r\n};\r\n\r\n/**\r\n * 選択画面で使用するアラームの日付リストを作成\r\n * @param settings EMC設定データリスt\r\n * @param nameDevSets NameDevSetリスト\r\n * @returns コンボボックスリスト\r\n */\r\nexport const CreateSelectAlarmItems = (devIndex: number, alarmLogList: EMCAlarmLogType[]): string[] => {\r\n\r\n let alramList: string[] = [];\r\n let setAlarmList = alarmLogList.filter((r) => r.DEV_INDEX === devIndex);\r\n setAlarmList.forEach((r) => {\r\n alramList.push(dayjs(r.COL_DATE).format('YYYY-MM-DD'));\r\n });\r\n //重複を削除\r\n alramList = alramList.filter((x, i, self) => self.indexOf(x) === i);\r\n\r\n return alramList;\r\n};\r\n\r\n/**\r\n * 選択画面で使用するアラームの日付コンボボックスデータを作成\r\n * @param settings EMC設定データリスt\r\n * @param nameDevSets NameDevSetリスト\r\n * @returns コンボボックスリスト\r\n */\r\nexport const CreateSelectAlarmCombBoxItems = (devIndex: number, alarmLogList: EMCAlarmLogType[]): ComboBoxItemTypeS[] => {\r\n\r\n var logs = CreateSelectAlarmItems(devIndex, alarmLogList);\r\n let alramComboBox: ComboBoxItemTypeS[] = [];\r\n logs.forEach((r) => {\r\n let item: ComboBoxItemTypeS = {\r\n key: dayjs(r).format('YYYYMMDD'),\r\n name: dayjs(r).format('YYYY-MM-DD')\r\n }\r\n alramComboBox.push(item);\r\n });\r\n return alramComboBox;\r\n};\r\n/**\r\n * 選択画面で使用するアラームの日付データ作成\r\n * @param settings EMC設定データリスt\r\n * @param nameDevSets NameDevSetリスト\r\n * @returns コンボボックスリスト\r\n */\r\nexport const CreateSelectAlarmLogList = (devIndex: number, alarmLogList: EMCAlarmLogType[]): EMCAlarmLogType[] => {\r\n let alramLogList: EMCAlarmLogType[] = []\r\n alramLogList = alarmLogList.filter((r) => r.DEV_INDEX === devIndex);\r\n return alramLogList;\r\n};\r\n\r\n\r\n/**\r\n *編集フラグがOnになっているかを確認\r\n * @param settings EMC設定配列\r\n * @returns\r\n */\r\nexport const CheckEMCSettingEditFlg = (settings: EMCSettingType[]): boolean => {\r\n if (settings == null || settings.length == 0) {\r\n return false;\r\n }\r\n if (settings.findIndex((r) => r.isEdit == true) == -1) {\r\n return false;\r\n }\r\n return true;\r\n};\r\n\r\n\r\n/**\r\n * 入力値チェック\r\n * @param setting\r\n */\r\nexport const CheckInputData = (setting: EMCSettingType[], translation: any): string[] => {\r\n let message: string[] = [];\r\n\r\n //DEVINDEXの重複チェック\r\n let cRow = setting.filter((r) => r.DEV_INDEX > 0);\r\n\r\n cRow.forEach((r, index) => {\r\n let f = cRow.findIndex((rr) => rr.DEV_INDEX === r.DEV_INDEX);\r\n if (f !== index) {\r\n console.debug([\"CheckInputData - error \", r]);\r\n message.push(`${r.indexNo} ` + i18next.t('messages.重複エラー', 'INDEX_NO 重複エラー'));\r\n }\r\n });\r\n return message;\r\n};\r\n","import React, { useEffect, useState, useMemo, useRef } from 'react';\r\nimport NativeSelect from '@material-ui/core/NativeSelect';\r\nimport Box from '@material-ui/core/Box';\r\n\r\nexport type ComboBoxItemTypeSOD = {\r\n key: string;\r\n name: string;\r\n};\r\n\r\ntype Props = {\r\n itemList: ComboBoxItemTypeSOD[] | undefined;\r\n label: string;\r\n value?: string;\r\n itemBoxStyle?: string;\r\n spanStyle?: string;\r\n labelStyle?: string;\r\n onChangeEvent?: (event: { name?: string; value: unknown }) => void;\r\n};\r\n\r\nexport const ItemComboBoxStrOD: React.FC = (props) => {\r\n const [isEdit, setIsEdit] = useState(false);\r\n const [val, setVal] = useState(props.value ?? '');\r\n const inputEl = useRef(null);\r\n\r\n const innerChange = (value: string) => {\r\n setVal(value);\r\n };\r\n\r\n useEffect(() => {\r\n if (isEdit) {\r\n inputEl.current?.focus();\r\n }\r\n }, [isEdit]);\r\n\r\n return (\r\n \r\n
{props.label}
\r\n
\r\n {isEdit ? (\r\n innerChange(e.target.value)}\r\n className={props.itemBoxStyle ?? ''}\r\n value={val}\r\n onBlur={() => {\r\n if (props.onChangeEvent) {\r\n props.onChangeEvent({ value: val });\r\n }\r\n setIsEdit(false);\r\n }}\r\n >\r\n {props.itemList?.map((row, index) => (\r\n \r\n ))}\r\n \r\n ) : (\r\n ) => {\r\n setIsEdit(true);\r\n }}\r\n >\r\n {props.itemList?.find((row) => row.key == props.value)?.name}\r\n \r\n )}\r\n
\r\n
\r\n );\r\n};\r\nexport default ItemComboBoxStrOD;\r\n","import React from 'react';\r\n\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { GetEMCSettings, EMCSettingType, CreateDefalutEMCSettingType } from '../../../../function/EMCModel';\r\nimport { ItemCheckBox } from '../../../atoms/CheckBox/ItemCheckBox';\r\nimport { ComboBoxItemTypeSOD, ItemComboBoxStrOD } from './../../../atoms/ComboBox/ItemComboBoxStrOD';\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n //テーブルボディーセル\r\n tableCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n minWidth: '100px',\r\n padding: 1,\r\n },\r\n itemBoxStyle: {\r\n width: '300px',\r\n },\r\n spanStyle: {\r\n display: 'inline-block',\r\n width: '300px',\r\n },\r\n })\r\n);\r\n\r\ntype EMCSettingGridRowProps = {\r\n emcSettingRow: EMCSettingType;\r\n onChangeEvent: (value: EMCSettingType) => void;\r\n cmoboBoxItemList: ComboBoxItemTypeSOD[];\r\n};\r\n\r\nconst EMCSettingGridRow: React.FC = (props) => {\r\n const classes = useStyles();\r\n\r\n const onInputChackBoxChenge = (e: React.ChangeEvent) => {\r\n //console.debug(['onInputChackBoxChenge', e]);\r\n let editData = Object.assign({}, props.emcSettingRow);\r\n editData.RunFlg = !editData.RunFlg;\r\n //console.debug(['onInputChackBoxChenge editData.RunFlg', editData.RunFlg]);\r\n props.onChangeEvent(editData);\r\n };\r\n const onInputConboBoxChenge = (event: { name?: string; value: unknown }) => {\r\n console.debug(['onInputConboBoxChenge name value', event.name, event.value]);\r\n let editData = Object.assign({}, props.emcSettingRow);\r\n editData.DEV_INDEX = Number(event.value);\r\n //console.debug(['onInputChackBoxChenge editData.RunFlg', editData.RunFlg]);\r\n props.onChangeEvent(editData);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n {props.emcSettingRow.indexNo}\r\n \r\n \r\n \r\n {props.emcSettingRow.UnitNo}\r\n {props.emcSettingRow.AreaNo}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default EMCSettingGridRow;\r\n","import React from 'react';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\n\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { GetEMCSettings, EMCSettingType, CreateDefalutEMCSettingType } from '../../../../function/EMCModel';\r\nimport ECMSettingGridRow from './EMCSettingGridRow';\r\n\r\nimport { ComboBoxItemTypeSOD } from './../../../atoms/ComboBox/ItemComboBoxStrOD';\r\n\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n //テーブルヘッダセル\r\n tableHeaderCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n },\r\n })\r\n);\r\n\r\ntype EMCSettingGridProps = {\r\n tableStyle: string;\r\n emcSettingList: EMCSettingType[];\r\n onChangeEvent: (value: EMCSettingType) => void;\r\n cmoboBoxItemList: ComboBoxItemTypeSOD[];\r\n};\r\n\r\nconst EMCSettingGrid: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n\r\n const classes = useStyles();\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n {t('EMCSettingGrid.No', 'No')}\r\n {t('EMCSettingGrid.実行', '実行')}\r\n {t('EMCSettingGrid.ユニットNo', 'ユニットNo')}\r\n {t('EMCSettingGrid.局番', '局番')}\r\n \r\n {t('EMCSettingGrid.機器番号名称', '機器番号・名称')}\r\n \r\n \r\n \r\n \r\n {props.emcSettingList.map((row, index) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default EMCSettingGrid;\r\n","import React from 'react';\r\nimport Button from '@material-ui/core/Button';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst buttonStyle = {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n};\r\n\r\ntype EMCSettingFooterProps = {\r\n onClickSaveButton: () => void;\r\n onClickCancelButton: () => void;\r\n buttonEnable: boolean;\r\n};\r\n\r\nconst EMCSettingFooter: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n return (\r\n \r\n \r\n {\r\n props.onClickSaveButton();\r\n }}\r\n >\r\n {t('EMCSettingFooter.保存', '保存')}\r\n \r\n \r\n \r\n props.onClickCancelButton()}\r\n >\r\n {t('EMCSettingFooter.中止', '中止')}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default EMCSettingFooter;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { SettingsState } from '../../../organisms/SelectSettings';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport {\r\n GetEMCSettings,\r\n EMCSettingType,\r\n CreateSettingCombBoxItems,\r\n CheckEMCSettingEditFlg,\r\n PutEMCSettings,\r\n CheckInputData,\r\n} from '../../../../function/EMCModel';\r\nimport EMCSettingGrid from './EMCSettingGrid';\r\n\r\nimport { GetNameDevSetEMCList, NAME_DEV_SET } from '../../../../function/NameDevSetModel';\r\n\r\nimport { ComboBoxItemTypeSOD } from './../../../atoms/ComboBox/ItemComboBoxStrOD';\r\nimport EMCSettingFooter from './EMCSettingFooter';\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../../atoms/Dialog/ConfirmDialog';\r\nimport MessageDialog, { MessageDialogResponse } from '../../../atoms/Dialog/MessageDialog';\r\nimport { useModal } from '../../../../function/useModal';\r\nimport { ResponceDataType, ErrorCode } from '../../../../ErrorCode';\r\n\r\ntype EMCSettingPageProps = { editData: SettingsState };\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 316px)',\r\n },\r\n paper: {\r\n background: '#FFFFEE',\r\n },\r\n })\r\n);\r\n\r\nconst EMCSettingPage: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [emcSettingData, setEMCSettingData] = useState<{ settings: EMCSettingType[]; cmbItems: ComboBoxItemTypeSOD[] }>(\r\n {\r\n settings: [],\r\n cmbItems: [],\r\n }\r\n );\r\n const [flgCfmDlg, actCfmDlg] = useModal();\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n const [buttonEnable, setButtonEnable] = useState(true);\r\n\r\n const cfmdlg = flgCfmDlg ? (\r\n \r\n ) : null;\r\n\r\n const msgdlg = flgMsgDlg ? : null;\r\n\r\n useEffect(() => {\r\n props.editData.SaveFunction = saveAction2;\r\n props.editData.IsUpdate = false;\r\n }, [props.editData.CancelCondition]);\r\n /**\r\n * 初期表示 useEffect\r\n */\r\n useEffect(() => {\r\n upDatePage();\r\n }, []);\r\n\r\n /**\r\n * 画面更新\r\n */\r\n const upDatePage = () => {\r\n //console.debug(['EMCSettingPage - useEffect']);\r\n setButtonEnable(false);\r\n let emcList: EMCSettingType[] = [];\r\n let nameDevSetList: NAME_DEV_SET[] = [];\r\n GetEMCSettings()\r\n .then((r: EMCSettingType[]) => {\r\n //console.debug(['EMCSettingPage - useEffect - GetEMCSettings', r]);\r\n //setEMCSettingList(r);\r\n emcList = r;\r\n return GetNameDevSetEMCList();\r\n })\r\n .then((r) => {\r\n console.debug(['EMCSettingPage - useEffect - GetNameDevSetEMCList', r, emcList]);\r\n nameDevSetList = r;\r\n let cmdItems = CreateSettingCombBoxItems(emcList, nameDevSetList, t);\r\n\r\n console.debug([\r\n 'EMCSettingPage - useEffect - setEMCSettingList({ settings: emcList, cmbItems: cmdItems })',\r\n emcList,\r\n cmdItems,\r\n ]);\r\n setEMCSettingData({ settings: emcList, cmbItems: cmdItems });\r\n })\r\n .catch((e) => {\r\n setDlgmsg(t('EMCSettingPage.データ取得中にエラーが発生しました', 'データ取得中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n console.error(['EMCSettingPage - useEffect - Error', e, emcList]);\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n };\r\n\r\n /**\r\n * 設定内容変更event\r\n * @param value\r\n */\r\n const onEMCSettingDataChange = (value: EMCSettingType) => {\r\n emcSettingData.settings.map((r) => {\r\n if (r.indexNo === value.indexNo) {\r\n r.isEdit = true; //変更フラグON\r\n r.RunFlg = value.RunFlg;\r\n r.DEV_INDEX = value.DEV_INDEX;\r\n }\r\n return r;\r\n });\r\n setEMCSettingData({ settings: emcSettingData.settings, cmbItems: emcSettingData.cmbItems });\r\n\r\n props.editData.Target = emcSettingData.settings;\r\n props.editData.IsUpdate = true;\r\n };\r\n\r\n /**\r\n * 保存ボタンアクション\r\n */\r\n const saveAction = () => {\r\n if (CheckEMCSettingEditFlg(emcSettingData.settings)) {\r\n let message = CheckInputData(emcSettingData.settings, t);\r\n console.debug(['重複エラー', message]);\r\n if (message.length !== 0) {\r\n setDlgmsg(message.join('\\n'));\r\n actMsgDlg.open();\r\n return;\r\n }\r\n setDlgmsg(t('EMCSettingPage.変更内容を保存しますか', '変更内容を、保存しますか?'));\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n setButtonEnable(false);\r\n console.debug(t('EMCSettingPage.実行', '実行'));\r\n PutEMCSettings(emcSettingData.settings)\r\n .then((r: ResponceDataType) => {\r\n if (r.ErrorCode === ErrorCode.ERR_CODE_NONE) {\r\n setDlgmsg(t('EMCSettingPage.設定を保存しました', '設定を保存しました'));\r\n actMsgDlg.open();\r\n upDatePage(); //再描画\r\n props.editData.IsUpdate = false;\r\n } else {\r\n setDlgmsg(t('EMCSettingPage.設定を保存できませんでした', '設定を保存できませんでした'));\r\n console.error(['PutEMCSettings error ', r]);\r\n actMsgDlg.open();\r\n }\r\n })\r\n .catch((e) => {\r\n setDlgmsg(t('EMCSettingPage.保存中にエラーが発生しました', '保存中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n console.error(['PutEMCSetting - useEffect - Error', e]);\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n })\r\n .cancel(() => {\r\n console.debug(t('EMCSettingPage.キャンセル', 'キャンセル'));\r\n });\r\n } else {\r\n }\r\n };\r\n\r\n /**\r\n * タブ切替時に動作\r\n * @param param\r\n * @returns\r\n */\r\n const saveAction2 = (param: object): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const sp = param as EMCSettingType[];\r\n console.debug(['★saveAction2', param]);\r\n if (CheckEMCSettingEditFlg(sp)) {\r\n let message = CheckInputData(sp, t);\r\n console.debug(['重複エラー', message]);\r\n if (message.length !== 0) {\r\n setDlgmsg(message.join('\\n'));\r\n actMsgDlg.open();\r\n reject('data error');\r\n return;\r\n }\r\n }\r\n\r\n setButtonEnable(false);\r\n console.debug(t('EMCSettingPage.実行', '実行'));\r\n PutEMCSettings(sp)\r\n .then((r: ResponceDataType) => {\r\n if (r.ErrorCode === ErrorCode.ERR_CODE_NONE) {\r\n console.debug('saveAction ok');\r\n resolve('done');\r\n } else {\r\n setDlgmsg(t('EMCSettingPage.設定を保存できませんでした', '設定を保存できませんでした'));\r\n console.error(['PutEMCSettings error ', r]);\r\n actMsgDlg.open();\r\n reject('data error');\r\n }\r\n })\r\n .catch((e) => {\r\n setDlgmsg(t('EMCSettingPage.保存中にエラーが発生しました', '保存中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n reject('data error');\r\n console.error(['PutEMCSetting - useEffect - Error', e]);\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * キャンセルボタンアクション\r\n */\r\n const cancelAction = () => {\r\n if (CheckEMCSettingEditFlg(emcSettingData.settings)) {\r\n setDlgmsg(\r\n t(\r\n 'EMCSettingPage.保存していないデータを破棄します。\\nよろしいですか?',\r\n '保存していないデータを破棄します。\\nよろしいですか?'\r\n )\r\n );\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n upDatePage(); //再描画\r\n props.editData.UpdateCancel();\r\n console.debug(t('EMCSettingPage.実行', '実行'));\r\n })\r\n .cancel(() => {\r\n console.debug(t('EMCSettingPage.キャンセル', 'キャンセル'));\r\n });\r\n } else {\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {cfmdlg}\r\n {msgdlg}\r\n \r\n );\r\n};\r\nexport default EMCSettingPage;\r\n","import { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\n\r\nexport const TableBaseStyle = makeStyles(\r\n createStyles({\r\n //テーブルヘッダセル\r\n headerCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n },\r\n bodyCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n padding: '4px',\r\n height: '30px',\r\n },\r\n bodyCellCenter: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n padding: '4px',\r\n height: '30px',\r\n },\r\n //テキスト\r\n textField: {\r\n flexGrow: 1,\r\n height: '100%',\r\n width: '98%',\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n textAlign: \"center\",\r\n },\r\n })\r\n);\r\n\r\nexport const StudySettingStyle = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 386px)',\r\n },\r\n paperRoot: {\r\n maxWidth: '700px',\r\n minWidth: '400px',\r\n padding: '5px',\r\n },\r\n })\r\n);\r\n\r\nexport const FooterBaseStyle = makeStyles(\r\n createStyles({\r\n buttonStyle: {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n },\r\n })\r\n);\r\n","import React from 'react';\r\nimport Button from '@material-ui/core/Button';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport { FooterBaseStyle } from './StudySettingStyle';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ntype PLMSettingFooterProps = {\r\n onClickSaveButton: () => void;\r\n onClickCancelButton: () => void;\r\n buttonEnable: boolean;\r\n};\r\n\r\nconst PLMSettingFooter: React.FC = (props) => {\r\n const footerStyle = FooterBaseStyle();\r\n const { t, i18n } = useTranslation();\r\n\r\n return (\r\n \r\n \r\n {\r\n props.onClickSaveButton();\r\n }}\r\n >\r\n {t('PLMSettingFooter.保存','保存')}\r\n \r\n \r\n \r\n props.onClickCancelButton()}\r\n >\r\n {t('PLMSettingFooter.中止','中止')}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default PLMSettingFooter;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { TableBaseStyle } from './StudySettingStyle';\r\nimport { STUDY_SET_1 } from './StudySetting';\r\nimport NumericEntry_inputEx from './../../../atoms/Input/NumericEntry_inputEx';\r\n\r\ntype StudySettingGridRowProps = {\r\n studySet1: STUDY_SET_1;\r\n rowIndexNo: number;\r\n onChangeData: (targetRow: STUDY_SET_1) => void;\r\n};\r\n\r\nconst StudySettingGridRow: React.FC = (props) => {\r\n const tableStyle = TableBaseStyle();\r\n const [studySetting1, setStudySetting1] = useState(props.studySet1); //データ初期値\r\n const [isEdit, setIsEdit] = useState(false); //変更フラグ データを編集したらtrue\r\n\r\n /**\r\n * データ変更通知\r\n */\r\n useEffect(() => {\r\n //データ初期値にセットされている内容を再描画時に変えたい場合、useEffectが必要\r\n //console.debug(['StudySettingGridRow - useEffect props.studySet1', props.studySet1]);\r\n setStudySetting1({ ...props.studySet1 });\r\n setIsEdit(false);\r\n }, [props.studySet1]);\r\n\r\n /**\r\n * 値を変更した内容を管理\r\n * @param key\r\n * @returns\r\n */\r\n const onChangeCell = (key: string, value: any) => {\r\n console.debug(['onChangeCell - key isEdit', key, isEdit]);\r\n setIsEdit(true);\r\n setStudySetting1({ ...studySetting1, [key]: value });\r\n };\r\n\r\n /**\r\n * 上位にデータ変更通知\r\n * @param editRow 編集対象データ\r\n * @param isEdit 編集フラグ\r\n * @returns\r\n */\r\n const onChangeData = (editRow: STUDY_SET_1, editFlg: boolean) => {\r\n if (editFlg) {\r\n //console.debug(['onChangeData - editRow,baseData', editRow, props.studySet1]);\r\n props.onChangeData(editRow);\r\n }\r\n };\r\n\r\n return (\r\n \r\n {/* No */}\r\n \r\n
{props.rowIndexNo}
\r\n
\r\n {/* 名称 */}\r\n \r\n
{studySetting1.CLC_TYPE_NAME}
\r\n
\r\n {/* 演算種別 */}\r\n \r\n
{studySetting1.TYP_NAME}
\r\n
\r\n {/* 軽故障 */}\r\n \r\n {\r\n if (props.studySet1.WRN_NUM !== val) {\r\n //コンポーネント側で値を更新しているの、描画しなおさなくてもいい為直接セット\r\n studySetting1.WRN_NUM = val;\r\n //上位に変更通知\r\n onChangeData(studySetting1, true);\r\n console.debug(['NumericEntry_inputEx - onChange - WRN_NUM', val, studySetting1]);\r\n }\r\n }}\r\n />\r\n \r\n {/* 重故障 */}\r\n \r\n {\r\n if (props.studySet1.ALM_NUM !== val) {\r\n //コンポーネント側で値を更新しているの、描画しなおさなくてもいい為直接セット\r\n studySetting1.ALM_NUM = val;\r\n //上位に変更通知\r\n onChangeData(studySetting1, true);\r\n console.debug(['NumericEntry_inputEx - onChange - ALM_NUM', val, studySetting1]);\r\n }\r\n }}\r\n />\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default StudySettingGridRow;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { TableBaseStyle, StudySettingStyle } from './StudySettingStyle';\r\nimport { STUDY_SET_1 } from './StudySetting';\r\nimport StudySettingGridRow from './StudySettingGridRow';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ntype StudySetting1GridProps = {\r\n studySet1List: STUDY_SET_1[];\r\n onChangeData: (targetRow: STUDY_SET_1) => void;\r\n};\r\n\r\nconst StudySetting1Grid: React.FC = (props) => {\r\n const tableStyle = TableBaseStyle();\r\n const studySettingStyle = StudySettingStyle();\r\n const { t, i18n } = useTranslation();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {'No'}\r\n {t('StudySetting1Grid.項目','項目')}\r\n {t('StudySetting1Grid.演算種別','演算種別')}\r\n {t('StudySetting1Grid.軽故障乗数','軽故障乗数')}\r\n {t('StudySetting1Grid.重故障乗数','重故障乗数')}\r\n \r\n \r\n \r\n {props.studySet1List.map((row, index) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default StudySetting1Grid;\r\n","import { ErrorCode, ResponceDataType } from \"../../../../ErrorCode\";\r\n/**\r\n * 学習設定1(乗数設定)\r\n */\r\nexport type STUDY_SET_1 = {\r\n\r\n //演算項目\r\n CLC_TYPE: string;\r\n ///演算項目名称\r\n CLC_TYPE_NAME: string;\r\n /// 速度\r\n SPD: number;\r\n /// 演算種別コード\r\n TYP_NO?: number;\r\n//演算種別名\r\n TYP_NAME: string;\r\n /// 軽故障乗数\r\n WRN_NUM?: number;\r\n /// 重故障乗数\r\n ALM_NUM?: number;\r\n\r\n /// 連番\r\n indexNo: number;\r\n /// 編集フラグ\r\n isEdit: boolean;\r\n\r\n};\r\n\r\n/**\r\n * 学習設定2(乗数設定)\r\n */\r\nexport type STUDY_SET_2 = {\r\n\r\n //項目名称No\r\n ITM_NAME_NO?: number;\r\n //項目名称\r\n ITM_NAME: string;\r\n ///演算項目名称\r\n THR_NUM?: number;\r\n\r\n /// 連番\r\n indexNo: number;\r\n /// 編集フラグ\r\n isEdit: boolean;\r\n\r\n};\r\n\r\n/**\r\n * 学習設定モデル\r\n */\r\nexport type StudySettingModel = {\r\n StudySet1List:STUDY_SET_1[],\r\n StudySet2List: STUDY_SET_2[],\r\n ResponceDataModel?:ResponceDataType\r\n}\r\n\r\n\r\n/**\r\n * デフォルトデータ作成\r\n * @returns\r\n */\r\nexport const CreateStudySettingModel = () : StudySettingModel => {\r\n let ret: StudySettingModel = {\r\n StudySet1List: [],\r\n StudySet2List: []\r\n };\r\n return ret;\r\n}\r\n\r\n//学習設定データ取得\r\nexport const GetStudySetting = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/StudySetting/\")\r\n .then((res) => {\r\n if (!res.ok) {\r\n console.error(res);\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n reject(message);\r\n }\r\n else {\r\n return res.json();\r\n }\r\n })\r\n .then((result: StudySettingModel) => {\r\n console.debug([\"GetStudySetting - ok ret \", result]);\r\n if (result != null ) {\r\n if (result.StudySet1List.length !== 0) {\r\n result.StudySet1List.map((row, index) => {\r\n //連番付与\r\n row.indexNo = index + 1;\r\n row.isEdit = false;\r\n });\r\n }\r\n if (result.StudySet2List.length !== 0) {\r\n result.StudySet2List.map((row, index) => {\r\n //連番付与\r\n row.indexNo = index + 1;\r\n row.isEdit = false;\r\n });\r\n }\r\n console.debug([\"GetStudySetting - ok ret \", result]);\r\n resolve(result);\r\n }\r\n else {\r\n reject('Invalidate response');\r\n }\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n reject(error);\r\n })\r\n })\r\n};\r\n\r\n/**\r\n *学習設定データ更新\r\n * @returns\r\n */\r\nexport const PutStudySetting = (settings : StudySettingModel): Promise => {\r\n return new Promise((resolve, reject) => {\r\n settings.StudySet1List = settings.StudySet1List.filter((r) => r.isEdit == true);\r\n settings.StudySet2List = settings.StudySet2List.filter((r) => r.isEdit == true);\r\n console.debug([\"PutStudySetting - updateSetting\",settings]);\r\n fetch(\"api/StudySetting/\", {\r\n method: \"put\",\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(settings)\r\n }).then((res) => {\r\n if (!res.ok) {\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n reject(message);\r\n }\r\n return res.json();\r\n }).then((result: ResponceDataType) => {\r\n console.debug([\"PutStudySetting - result \",result])\r\n resolve(result);\r\n },\r\n (error) => {\r\n console.error(error);\r\n reject(error);\r\n })\r\n });\r\n}\r\n\r\n\r\n/**\r\n * 編集チェック\r\n */\r\nexport const CheckStudySettingEditFlg = (targetModel: StudySettingModel): boolean => {\r\n\r\n if (targetModel.StudySet1List == null || targetModel.StudySet1List.length == 0) {\r\n return false;\r\n }\r\n\r\n if ((targetModel.StudySet1List.findIndex((r) => r.isEdit == true) == -1) &&\r\n (targetModel.StudySet2List.findIndex((r) => r.isEdit == true) == -1)) {\r\n return false;\r\n }\r\n\r\n return true;\r\n};\r\n\r\n/**\r\n * 画面で入力された値のチェック\r\n * @param targetList チェック対象の配列\r\n * @param translation 多言語化のオブジェクト\r\n * @returns エラーがあれば文字列で返す、なければ空\r\n */\r\nexport const CheckStudySettingInputData = (targetList: STUDY_SET_1[], translation: any) :string[] =>{\r\n let errorMsgs :string[] = [];\r\n\r\n targetList.forEach((r,index) =>{\r\n if(r.WRN_NUM != null && r.ALM_NUM != null){\r\n if (r.WRN_NUM > r.ALM_NUM) {\r\n errorMsgs.push(`No.${index+1} `+\r\n translation(\r\n 'StudySettingPage.登録データが不正です_警報閾値(軽故障乗数>重故障乗数)',\r\n '登録データが不正です。警報閾値(軽故障乗数>重故障乗数)'\r\n )\r\n );\r\n }\r\n }\r\n });\r\n return errorMsgs;\r\n};\r\n","import React, { useEffect, useState } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { TableBaseStyle, StudySettingStyle } from './StudySettingStyle';\r\nimport { STUDY_SET_2 } from './StudySetting';\r\nimport NumericEntry_inputEx from './../../../atoms/Input/NumericEntry_inputEx';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ntype StudySetting2EditBodyProps = {\r\n studySet2List: STUDY_SET_2[];\r\n onChangeData: (targetRow: STUDY_SET_2) => void;\r\n};\r\n\r\nconst StudySetting2EditBody: React.FC = (props) => {\r\n const tableStyle = TableBaseStyle();\r\n const studySettingStyle = StudySettingStyle();\r\n\r\n const [studySetting2, setStudySetting2] = useState(props.studySet2List); //データ初期値\r\n const [isEdit, setIsEdit] = useState(false); //変更フラグ データを編集したらtrue\r\n const { t, i18n } = useTranslation();\r\n\r\n /**\r\n * データ変更通知\r\n */\r\n useEffect(() => {\r\n //データ初期値にセットされている内容を再描画時に変えたい場合、useEffectが必要\r\n console.debug(['StudySetting2EditBody - useEffect props.studySet2List', props.studySet2List]);\r\n setStudySetting2([...props.studySet2List]);\r\n setIsEdit(false);\r\n }, [props.studySet2List]);\r\n /**\r\n * 上位にデータ変更通知\r\n * @param editRow 編集対象データ\r\n * @param isEdit 編集フラグ\r\n * @returns\r\n */\r\n const onChangeData = (editRow: STUDY_SET_2, editFlg: boolean) => {\r\n if (editFlg) {\r\n //console.debug(['onChangeData - editRow,baseData', editRow, props.studySet1]);\r\n props.onChangeData(editRow);\r\n }\r\n };\r\n /**\r\n * 係数閾値の名称取得\r\n */\r\n const getItemName = (index: number):string =>{\r\n if(index == 0){\r\n return t('StudySetting2EditBody.振動係数閾値', '振動係数閾値');\r\n }\r\n else{\r\n return t('StudySetting2EditBody.電流係数閾値', '電流係数閾値');\r\n }\r\n };\r\n return (\r\n \r\n \r\n \r\n \r\n {studySetting2.map((row, index) => {\r\n return (\r\n <>\r\n \r\n {getItemName(index)}\r\n \r\n \r\n {\r\n if (props.studySet2List[index].THR_NUM !== val) {\r\n row.THR_NUM = val;\r\n onChangeData(row, true);\r\n console.debug(['NumericEntry_inputEx - onChange - THR_NUM', val, studySetting2]);\r\n }\r\n }}\r\n />\r\n \r\n \r\n );\r\n })}\r\n\r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default StudySetting2EditBody;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { SettingsState } from '../../../organisms/SelectSettings';\r\nimport Grid from '@material-ui/core/Grid';\r\n\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../../atoms/Dialog/ConfirmDialog';\r\nimport MessageDialog, { MessageDialogResponse } from '../../../atoms/Dialog/MessageDialog';\r\nimport { useModal } from '../../../../function/useModal';\r\nimport { ResponceDataType, ErrorCode } from '../../../../ErrorCode';\r\nimport { useTranslation } from 'react-i18next';\r\nimport StudySettingFooter from './StudySettingFooter';\r\nimport StudySetting1Grid from './StudySetting1Grid';\r\nimport {\r\n StudySettingModel,\r\n CreateStudySettingModel,\r\n GetStudySetting,\r\n STUDY_SET_1,\r\n STUDY_SET_2,\r\n CheckStudySettingEditFlg,\r\n PutStudySetting,\r\n CheckStudySettingInputData,\r\n} from './StudySetting';\r\nimport StudySetting2EditBody from './StudySetting2EditBody';\r\n\r\ntype StudySettingPageProps = { editData: SettingsState };\r\n\r\n/**\r\n *学習設定画面\r\n * @returns\r\n */\r\nconst StudySettingPage: React.FC = (props) => {\r\n const [studySettingModel, setStudySettingModel] = useState(CreateStudySettingModel());\r\n\r\n const [flgCfmDlg, actCfmDlg] = useModal();\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n const [buttonEnable, setButtonEnable] = useState(true);\r\n const { t, i18n } = useTranslation();\r\n const cfmdlg = flgCfmDlg ? (\r\n \r\n ) : null;\r\n\r\n const msgdlg = flgMsgDlg ? : null;\r\n\r\n useEffect(() => {\r\n props.editData.SaveFunction = saveAction2;\r\n props.editData.IsUpdate = false;\r\n }, [props.editData.CancelCondition]);\r\n /**\r\n * 初期表示 useEffect\r\n */\r\n useEffect(() => {\r\n upDatePage();\r\n //GetStudySettingEx().then((r) => {});\r\n }, []);\r\n\r\n /**\r\n * 画面更新\r\n */\r\n const upDatePage = () => {\r\n setButtonEnable(false);\r\n let stdModel: StudySettingModel = CreateStudySettingModel();\r\n GetStudySetting()\r\n .then((r: StudySettingModel) => {\r\n console.debug(['StudySettingPage - upDatePage - GetStudySetting', r]);\r\n stdModel = r;\r\n setStudySettingModel(r);\r\n })\r\n .catch((e) => {\r\n setDlgmsg(t('StudySettingPage.データ取得中にエラーが発生しました', 'データ取得中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n console.error(['upDatePage - Error', e]);\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n };\r\n\r\n /**\r\n *保存ボタン\r\n * @param index\r\n */\r\n const saveAction = () => {\r\n if (CheckStudySettingEditFlg(studySettingModel)) {\r\n //inputチェック\r\n const messages = CheckStudySettingInputData(studySettingModel.StudySet1List, t);\r\n if (messages.length != 0) {\r\n setDlgmsg(messages.join('\\n'));\r\n actMsgDlg.open();\r\n return;\r\n }\r\n\r\n setDlgmsg(\r\n t('StudySettingPage.編集内容を保存します。\\nよろしいですか?', '編集内容を保存します。\\nよろしいですか?')\r\n );\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n setButtonEnable(false);\r\n PutStudySetting(studySettingModel)\r\n .then((r) => {\r\n setDlgmsg(t('StudySettingPage.保存が正常に終了しました', '保存が正常に終了しました'));\r\n actMsgDlg.open();\r\n props.editData.IsUpdate = false;\r\n upDatePage(); //再描画\r\n console.debug('saveAction ok');\r\n })\r\n .catch((r) => {\r\n setDlgmsg(t('StudySettingPage.保存中にエラーが発生しました', '保存中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n console.error(['saveAction error', r]);\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n })\r\n .cancel(() => {\r\n console.debug(t('StudySettingPage.キャンセル', 'キャンセル'));\r\n });\r\n } else {\r\n }\r\n };\r\n\r\n /**\r\n * タブ切替時に動作\r\n * @param param\r\n * @returns\r\n */\r\n const saveAction2 = (param: object): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const sp = param as StudySettingModel;\r\n console.debug(['★saveAction2', param]);\r\n setButtonEnable(false);\r\n PutStudySetting(sp)\r\n .then((r) => {\r\n props.editData.IsUpdate = false;\r\n console.debug('saveAction ok');\r\n resolve('done');\r\n })\r\n .catch((r) => {\r\n setDlgmsg(t('StudySettingPage.保存中にエラーが発生しました', '保存中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n console.error(['saveAction error', r]);\r\n reject('data error');\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n });\r\n };\r\n\r\n /**\r\n *キャンセルボタン押下\r\n */\r\n const cancelAction = () => {\r\n console.debug(['cancelAction', studySettingModel]);\r\n if (CheckStudySettingEditFlg(studySettingModel)) {\r\n setDlgmsg(\r\n t(\r\n 'StudySettingPage.保存していないデータを破棄します。\\nよろしいですか?',\r\n '保存していないデータを破棄します。\\nよろしいですか?'\r\n )\r\n );\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n upDatePage(); //再描画\r\n props.editData.IsUpdate = false;\r\n console.debug(t('StudySettingPage.実行', '実行'));\r\n })\r\n .cancel(() => {\r\n console.debug(t('StudySettingPage.キャンセル', 'キャンセル'));\r\n });\r\n } else {\r\n }\r\n };\r\n\r\n /**\r\n *学習設定(乗数設定)データ変更通知\r\n * @returns\r\n */\r\n const changeActionStudySetting1 = (target: STUDY_SET_1) => {\r\n console.debug(['changeActionStudySetting1 - start', studySettingModel, target]);\r\n target.isEdit = true;\r\n var index = studySettingModel.StudySet1List.findIndex((r) => r.indexNo === target.indexNo);\r\n studySettingModel.StudySet1List[index] = target;\r\n props.editData.Target = studySettingModel;\r\n props.editData.IsUpdate = true;\r\n //setPLMSettingList([...plmSettingList]);\r\n console.debug(['changeActionStudySetting1 - end', studySettingModel, target]);\r\n };\r\n\r\n /**\r\n *学習設定(ばらつき係数)データ変更通知\r\n * @returns\r\n */\r\n const changeActionStudySetting2 = (target: STUDY_SET_2) => {\r\n console.debug(['changeActionStudySetting2 - start', studySettingModel, target]);\r\n target.isEdit = true;\r\n var index = studySettingModel.StudySet2List.findIndex((r) => r.indexNo === target.indexNo);\r\n studySettingModel.StudySet2List[index] = target;\r\n props.editData.Target = studySettingModel;\r\n props.editData.IsUpdate = true;\r\n //setPLMSettingList([...plmSettingList]);\r\n console.debug(['changeActionStudySetting2 - end', studySettingModel, target]);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n {' '}\r\n \r\n \r\n \r\n {cfmdlg}\r\n {msgdlg}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default StudySettingPage;\r\n","\r\nexport type NAME_ITEM_SET = {\r\n //項目名称No.を取得または設定します。\r\n ITM_NAME_NO: number;\r\n //実装を取得または設定します。\r\n EST: number;\r\n //項目名称を取得または設定します。\r\n ITM_NAME: string;\r\n}\r\n\r\n//デバイス名称一覧を取得\r\nexport const GetNameItemSetList = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/NameItemSet\")\r\n .then((res) => res.json())\r\n .then((result: NAME_ITEM_SET[]) => {\r\n console.debug([\"api/NameItemSet\", result]);\r\n if (NameItemSetListValidate(result)){\r\n result.forEach((dev) => {\r\n //起動判定電流閾値 (%) に変換\r\n // dev.START_JDG_CUR = dev.RATED_CUR != 0 ? Math.round((dev.START_JDG_CUR / dev.RATED_CUR) * 100) : 0;\r\n });\r\n resolve(result);\r\n }\r\n else {\r\n reject('Invalidate response');\r\n }\r\n }).catch((error) => {\r\n console.log(error);\r\n reject(error);\r\n })\r\n });\r\n };\r\n\r\n//グループ一覧取得データ検証\r\nconst NameItemSetListValidate = (data: NAME_ITEM_SET[]): boolean => {\r\n if (data == undefined) {\r\n console.debug(`GetNameItemSetList NG `);\r\n return false;\r\n }\r\n console.debug(`GetNameItemSetList OK `);\r\n return true;\r\n };","import { Settings } from \"@material-ui/icons\";\r\nimport { context } from \"msw\";\r\nimport { ErrorCode, ResponceDataType } from \"../../../../ErrorCode\";\r\nimport { StudySettingModel } from \"../StudySetting/StudySetting\";\r\nimport { NAME_DEV_SET, GetNameDevSetList } from '../../../../function/NameDevSetModel';\r\nimport i18next from 'i18next';\r\n\r\n/**\r\n * コナンエア管理画面(編集)項目\r\n */\r\nexport type CONNAIR_SET = {\r\n /**コナンエアID */\r\n CNA_ID: string;\r\n /** 機器INDEX*/\r\n DEV_INDEX: number;\r\n /**項目名称No. */\r\n ITM_NAME_NO: number;\r\n PLC_NO: number;\r\n\r\n devName: string;\r\n /**取付箇所 */\r\n itemName: string;\r\n /** リスト編集フラグ */\r\n isEdit: boolean;\r\n /** 時刻設定 */\r\n logStart: string;\r\n}\r\n\r\nexport type ConanAirUpdateType = {\r\n /**コナンエアID */\r\n CNA_ID: string;\r\n /** 機器INDEX*/\r\n DEV_INDEX: number;\r\n /**項目名称No. */\r\n ITM_NAME_NO: number;\r\n\r\n devName: string;\r\n}\r\n/**\r\n * COL_SETの時刻設定編集項目\r\n */\r\nexport type ColSetLogModel = {\r\n PlcNo?: number;\r\n LogStart: string;\r\n}\r\n\r\nexport type ConanairManagementModel = {\r\n ConanairSetList: CONNAIR_SET[],\r\n ColSetLogList: ColSetLogModel[],\r\n ResponceDataModel?: ResponceDataType\r\n}\r\n\r\nexport type ConanAirSetModel = {\r\n ConanairSet: CONNAIR_SET,\r\n ColSetLog: ColSetLogModel\r\n}\r\n\r\n/**\r\n * APIレスポンスコード\r\n */\r\nexport const ApiResponseCode = {\r\n DEFAULT: 200,\r\n SUCCESS: 204, //新規登録要求待ちレコード追加\r\n BAD_REQUEST: 400, //パラメータ異常\r\n NOT_ACCEPTABLE: 406, //状態チェック\r\n DEVINDEX_IOT_REGISTERED: 412, //TMBEE-BOX管理画面側で、選択した機器番号の使用がある\r\n UPDATE_FAILURE: 500, //更新失敗\r\n SERVICE_UNAVAILABLE: 503, //ネットワーク接続失敗\r\n} as const;\r\ntype ApiResponseCode = typeof ApiResponseCode[keyof typeof ApiResponseCode];\r\n\r\n/**\r\n *\r\n * @returns デフォルトデータ作成\r\n */\r\nexport const CreateConanairManagementModel = (): ConanairManagementModel => {\r\n let ret: ConanairManagementModel = {\r\n ConanairSetList: [],\r\n ColSetLogList: []\r\n };\r\n return ret;\r\n}\r\n\r\n/**\r\n * コナンエア管理データ取得\r\n * @returns\r\n */\r\nexport const GetConanairManagement = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/ConanAirManagement/\")\r\n .then((res) => {\r\n console.debug([\"res\", res]);\r\n if (!res.ok) {\r\n console.error(res);\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n console.debug([\"message\", message]);\r\n throw new Error(message);\r\n }\r\n else {\r\n console.debug([\"res.json\", res]);\r\n return res.json();\r\n }\r\n })\r\n .then((result: ConanairManagementModel) => {\r\n console.debug([\"GetConanairManagement - ok ret \", result]);\r\n if (result != null) {\r\n if (result.ConanairSetList.length !== 0) {\r\n result.ConanairSetList.map((row, index) => {\r\n row.isEdit = false;\r\n });\r\n console.debug([\"--result.ConanairSetList--\", result.ConanairSetList]);\r\n }\r\n console.debug([\"GetConanairManagement - ok ret \", result]);\r\n resolve(result);\r\n }\r\n else {\r\n reject('Invalidate response');\r\n }\r\n })\r\n .catch((error) => {\r\n console.debug([\"error\", error]);\r\n console.error(error.status);\r\n console.error(error);\r\n reject(error);\r\n })\r\n })\r\n};\r\n\r\n/**\r\n * Conanair 新規登録\r\n * @param data\r\n * @returns\r\n */\r\nexport const InsertConanAirManagement = (data: ConanAirSetModel): Promise => {\r\n console.debug(['InsertConanAirManagement', data]);\r\n\r\n return new Promise((resolve, reject) => {\r\n fetch('api/ConanAirManagement', {\r\n method: 'post',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(data),\r\n })\r\n .then(res => {\r\n console.debug(['res', res]);\r\n resolve(res.status)\r\n })\r\n .catch(reason => {\r\n console.debug(['reason', reason]);\r\n reject(reason)\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Conanair 削除\r\n * @param conanairId\r\n * @returns\r\n */\r\nexport const DeleteConanAirManagement = (conanairId: string): Promise => {\r\n console.debug(['deleteConanairSet', conanairId]);\r\n\r\n return new Promise((resolve, reject) => {\r\n fetch('api/ConanAirManagement', {\r\n method: 'delete',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(conanairId),\r\n })\r\n .then(res => {\r\n console.debug(['res', res]);\r\n resolve(res.status)\r\n })\r\n .catch(reason => {\r\n console.debug(['reason', reason]);\r\n reject(reason)\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * コナンエアデータ更新\r\n * @param settings\r\n * @returns\r\n */\r\nexport const PutConanairManagement = (settings: ConanairManagementModel): Promise => {\r\n return new Promise((resolve, reject) => {\r\n settings.ConanairSetList = settings.ConanairSetList.filter((r) => r.isEdit == true);\r\n console.debug([\"PutConanairManagement - updateSetting\", settings]);\r\n fetch(\"api/ConanAirManagement/\", {\r\n method: \"put\",\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(settings)\r\n }).then((res) => {\r\n if (!res.ok) {\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n reject(message);\r\n }\r\n return res.json();\r\n }).then((result: ResponceDataType) => {\r\n console.debug([\"PutConanairManagement - result \", result])\r\n resolve(result);\r\n },\r\n (error) => {\r\n console.error(error);\r\n reject(error);\r\n })\r\n });\r\n}\r\n\r\n/**\r\n * 編集チェック\r\n */\r\nexport const CheckConanairManagementFlg = (targetModel: CONNAIR_SET[]): boolean => {\r\n //console.debug([\"★test1\",targetModel])\r\n if (targetModel == null || targetModel.length == 0) {\r\n return false;\r\n }\r\n if ((targetModel.findIndex((r) => r.isEdit == true) === -1)) {\r\n //console.debug([\"★test2\",targetModel]);\r\n\r\n return false;\r\n }\r\n //console.debug([\"★test3\",targetModel])\r\n return true;\r\n}\r\n\r\n/**\r\n * 入力値チェック\r\n * @param setting\r\n */\r\nexport const CheckInputData = (setting: CONNAIR_SET[], nameDev: NAME_DEV_SET[], translation: any): string[] => {\r\n let message: string[] = [];\r\n //DEVINDEX,ITM_NAME_NOの重複チェック\r\n let cRow = setting.filter((r) => r.DEV_INDEX > 0);\r\n\r\n cRow.forEach((r, index) => {\r\n let f = cRow.findIndex((rr) => rr.DEV_INDEX === r.DEV_INDEX && rr.ITM_NAME_NO === r.ITM_NAME_NO);\r\n if (f !== index) {\r\n let deveItem = nameDev.find((res) => res.DEV_INDEX === r.DEV_INDEX);\r\n console.debug([\"CheckInputData - error \", r]);\r\n message.push(`${deveItem?.DEV_NAME} ` + i18next.t('ConanairManagement.重複エラー', ':機器番号,取付箇所 重複エラー'));\r\n }\r\n });\r\n return message;\r\n};\r\n","import { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\n\r\nexport const TableUseStyle = makeStyles(\r\n createStyles({\r\n\r\n //テーブルヘッダセル\r\n headerCell: {\r\n padding: '2px',\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n minWidth: '80px',\r\n borderCollapse: `collapse`,\r\n },\r\n bodyCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '1px',\r\n height: '40px',\r\n },\r\n bodyCellCenter: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n padding: '1px',\r\n height: '40px',\r\n },\r\n bodyRow: {\r\n '&.Mui-selected, &.Mui-selected:hover': {\r\n //背景色\r\n backgroundColor: '#7fffd4',\r\n\r\n },\r\n },\r\n //テキスト\r\n textField: {\r\n flexGrow: 1,\r\n height: '100%',\r\n width: '98%',\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n textAlign: \"center\",\r\n },\r\n fixColumn: {\r\n borderWidth: '0px',\r\n outlineWidth: '1px',\r\n outlineColor: '#dcdcdc',\r\n outlineStyle: 'solid',\r\n padding: '0px',\r\n paddingLeft: '5px',\r\n position: 'sticky',\r\n zIndex: 10,\r\n backgroundColor: 'white',\r\n },\r\n logTimeField: {\r\n paddingLeft: \"2px\",\r\n width: '24px',\r\n },\r\n })\r\n);\r\n\r\nexport const ConanairManagementStyle = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 310px)',\r\n overflowX: 'scroll',\r\n },\r\n flexBox: {\r\n dispay: \"flex\",\r\n },\r\n tableDialgContainer: {\r\n maxHeight: 'calc(100vh - 276px)',\r\n },\r\n paper: {\r\n background: '#FFFFEE',\r\n },\r\n buttonStyle: {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n },\r\n fixHeader: {\r\n color: 'white',\r\n borderWidth: '0px',\r\n backgroundColor: 'gray',\r\n outlineWidth: '1px',\r\n outlineColor: '#dcdcdc',\r\n outlineStyle: 'solid',\r\n padding: 0,\r\n margin: 0,\r\n textAlign: 'center',\r\n position: 'sticky',\r\n zIndex: 20,\r\n minWidth: '80px',\r\n borderCollapse: `collapse`,\r\n },\r\n selectRow: {\r\n background: 'yellow',\r\n },\r\n })\r\n);\r\n","import React, { useEffect, useState } from 'react';\r\nimport Button from '@material-ui/core/Button';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\n\r\nimport { useTranslation } from 'react-i18next';\r\nimport { ConanairManagementStyle } from './ConanairManagementStyle';\r\n\r\ntype Props = {\r\n onClickSaveButton: () => void;\r\n onClickNewButton: () => void;\r\n onClickCancelButton: () => void;\r\n onClickDelButton: () => void;\r\n buttonEnable: boolean;\r\n};\r\n\r\nconst ConanairManagementFooter: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const pageStyle = ConanairManagementStyle();\r\n return (\r\n \r\n \r\n {\r\n props.onClickNewButton();\r\n }}\r\n >\r\n {t('ConanairManagementFooter.新規登録', '新規登録')}\r\n \r\n \r\n \r\n {\r\n props.onClickSaveButton();\r\n }}\r\n >\r\n {t('ConanairManagementFooter.保存', '保存')}\r\n \r\n \r\n \r\n {\r\n props.onClickCancelButton();\r\n }}\r\n >\r\n {t('ConanairManagementFooter.中止', '中止')}\r\n \r\n \r\n \r\n {\r\n props.onClickDelButton();\r\n }}\r\n >\r\n {t('ConanairManagementFooter.削除', '削除')}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ConanairManagementFooter;","import React, { useEffect, useState, useContext, Dispatch, SetStateAction } from 'react';\r\nimport { Table, TableCell, TableRow } from '@material-ui/core';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { AppContext } from '../../../../App';\r\nimport dayjs from 'dayjs';\r\nimport ItemComboBox, { ComboBoxItemType } from '../../../atoms/ComboBox/ItemComboBox';\r\nimport TimeEntry from '../../../atoms/Input/TimeEntry';\r\nimport { TableBaseStyle } from '../../../../baseStyle/tableBaseStyle';\r\nimport { TableUseStyle, ConanairManagementStyle } from './ConanairManagementStyle';\r\nimport { CONNAIR_SET, ColSetLogModel } from './ConanairManagement';\r\n\r\ntype ConanairManagementBodyProps = {\r\n rowno: number;\r\n selectIdx: number;\r\n conanItem: CONNAIR_SET;\r\n devCombList: ComboBoxItemType[];\r\n nameItemCombList: ComboBoxItemType[];\r\n setSelectIdx: Dispatch>;\r\n updateItem: (item: CONNAIR_SET) => void;\r\n};\r\nconst ConanairManagementBody: React.FC = (props: ConanairManagementBodyProps) => {\r\n const tableBaseStyle = TableUseStyle();\r\n const baseClasses = TableBaseStyle();\r\n const pageStyle = ConanairManagementStyle();\r\n const editRow: CONNAIR_SET = props.conanItem;\r\n const { login } = useContext(AppContext);\r\n const logtimer = new Date(props.conanItem.logStart !== \"\" ? props.conanItem.logStart : \"2023-01-01 00:00:00\");\r\n\r\n const logHour = logtimer.getHours().toString();\r\n const logMin = logtimer.getMinutes().toString();\r\n const logSec = logtimer.getSeconds().toString();\r\n\r\n //console.debug([\"logtimer check\", logtimer, logHour, logMin, logSec]);\r\n /**\r\n *行選択ハンドラ \r\n * @param selectRow \r\n */\r\n const selectRowAction = (selectRow: CONNAIR_SET) => {\r\n console.debug(['selectRow()', props.rowno]);\r\n props.setSelectIdx(props.rowno);\r\n };\r\n\r\n /**\r\n * item変更通知\r\n * @param editRow \r\n * @param editFlg \r\n */\r\n const ChangeItemDataAction = (editRow: CONNAIR_SET, editFlg: boolean) => {\r\n if (editFlg) {\r\n props.updateItem(editRow);\r\n }\r\n };\r\n\r\n /**\r\n * 収集時刻の更新\r\n */\r\n const ChangeLogStart = (hour: string, minute: string, sec: string) => {\r\n let dateTimeNow = new Date;\r\n let year = dateTimeNow.getFullYear();\r\n let month = dateTimeNow.getMonth();\r\n let date = dateTimeNow.getDate();\r\n\r\n let logStartItem = new Date(year, month, date, Number(hour), Number(minute), Number(sec));\r\n\r\n //現在時刻よりも収集時刻を後の時刻に設定\r\n editRow.logStart = logStartItem > dateTimeNow ?\r\n dayjs(logStartItem).format('YYYY-MM-DD HH:mm:ss') :\r\n dayjs(logStartItem.setDate(logStartItem.getDate() + 1)).format('YYYY-MM-DD HH:mm:ss');\r\n\r\n //console.debug([\"ChangeLogStart\", editRow, dateTimeNow, year, month, date, logStartItem, hour, minute, sec]);\r\n ChangeItemDataAction(editRow, true);\r\n }\r\n\r\n //行選択の背景色一時置き\r\n let lineSelection = '';\r\n\r\n return (\r\n <>\r\n
\r\n {\r\n selectRowAction(editRow);\r\n }}\r\n selected={props.selectIdx === props.rowno}\r\n className={lineSelection}\r\n >\r\n {/* No */}\r\n {props.rowno}\r\n {/* 機器番号 */}\r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n editRow.DEV_INDEX = parseInt(e.target.value);\r\n ChangeItemDataAction(editRow, true);\r\n }\r\n }}\r\n />\r\n \r\n {/* 機器名称 */}\r\n \r\n {editRow.devName}\r\n \r\n {/* 取付箇所 */}\r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n editRow.ITM_NAME_NO = parseInt(e.target.value);\r\n ChangeItemDataAction(editRow, true);\r\n }\r\n }}\r\n />\r\n \r\n {/**コナンエアID */}\r\n \r\n {editRow.CNA_ID}\r\n \r\n {/**収集時刻 */}\r\n {login.IsIoT === true ?\r\n {\r\n console.debug([\"onClick\"])\r\n if (props.conanItem.logStart === \"\") {\r\n ChangeLogStart(\"0\", \"0\", \"0\");\r\n }\r\n }}\r\n >\r\n {props.conanItem.logStart !== \"\" ?\r\n
\r\n {\r\n ChangeLogStart(val, logMin, logSec);\r\n }}\r\n className={tableBaseStyle.logTimeField}\r\n />\r\n :\r\n {\r\n ChangeLogStart(logHour, val, logSec);\r\n }}\r\n className={tableBaseStyle.logTimeField}\r\n />\r\n :\r\n {\r\n ChangeLogStart(logHour, logMin, val);\r\n }}\r\n className={tableBaseStyle.logTimeField}\r\n />\r\n
\r\n : ''\r\n }\r\n\r\n
\r\n : null\r\n }\r\n\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default ConanairManagementBody;","import React, { useEffect, useState, useContext } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { DialogAction, useModal } from '../../../../function/useModal';\r\nimport {\r\n Button,\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n DialogActions,\r\n TextField,\r\n Box,\r\n Typography,\r\n} from '@material-ui/core';\r\nimport { AppContext } from '../../../../App';\r\nimport dayjs from 'dayjs';\r\nimport ItemComboBox, { ComboBoxItemType } from '../../../atoms/ComboBox/ItemComboBox';\r\nimport TimeEntry from '../../../atoms/Input/TimeEntry';\r\nimport SimpleDialog from '../../../atoms/Dialog/SimpleDialog';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { TableUseStyle, ConanairManagementStyle } from './ConanairManagementStyle';\r\nimport { CONNAIR_SET, InsertConanAirManagement, ApiResponseCode, ConanAirSetModel, ColSetLogModel } from './ConanairManagement';\r\n\r\n\r\nexport type ConanairManagementGridRowNewDialogProps = {\r\n dialog: DialogAction;\r\n devNoComBox: ComboBoxItemType[];\r\n nameItemComBox: ComboBoxItemType[];\r\n};\r\n\r\nexport type ConanairManagementGridRowNewDialogResponse = {};\r\n\r\nconst ConanairManagementGridRowNewDialog: React.FC = (props: ConanairManagementGridRowNewDialogProps) => {\r\n const tableBaseStyle = TableUseStyle();\r\n const pageStyle = ConanairManagementStyle();\r\n const { t } = useTranslation();\r\n const { login } = useContext(AppContext);\r\n\r\n /** コナンエアーID */\r\n const [conanairId, setConanairId] = useState('');\r\n /** 機器番号 */\r\n const [devNo, setDevNo] = useState();\r\n /** 取付箇所 */\r\n const [itemName, setItemName] = useState();\r\n /** 収集時刻 時 */\r\n const [logHour, setLogHour] = useState('00');\r\n /** 収集時刻 分 */\r\n const [logMin, setLogMin] = useState('00');\r\n /** 収集時刻 秒 */\r\n const [logSec, setLogSec] = useState('00');\r\n\r\n const [isOpen, setOpen] = useState(true);\r\n const [mode, setMode] = useState(true);\r\n\r\n /** APIレスポンスダイアログ */\r\n const [messageDialogOpen, setMessageDialogOpen] = React.useState(false);\r\n const [showTitle, setShowTitle] = React.useState('');\r\n const [showMessage, setShowMessage] = React.useState('');\r\n\r\n useEffect(() => {\r\n /** 初期設定 */\r\n setDevNo(1);\r\n setItemName(1);\r\n }, []);\r\n\r\n /**\r\n * 収集時刻の設定\r\n * @param hour \r\n * @param minute \r\n * @param sec \r\n */\r\n const GetLogStartItem = (hour: string, minute: string, sec: string): string => {\r\n let dateTimeNow = new Date;\r\n\r\n let year = dateTimeNow.getFullYear();\r\n let month = dateTimeNow.getMonth();\r\n let date = dateTimeNow.getDate();\r\n\r\n let logStartItem = new Date(year, month, date, Number(hour), Number(minute), Number(sec));\r\n console.debug([\"GetLogStartItem\", logStartItem])\r\n\r\n //現在時刻よりも収集時刻を後の時刻に設定\r\n return logStartItem > dateTimeNow ?\r\n dayjs(logStartItem).format('YYYY-MM-DD HH:mm:ss') :\r\n dayjs(logStartItem.setDate(logStartItem.getDate() + 1)).format('YYYY-MM-DD HH:mm:ss')\r\n }\r\n\r\n /**\r\n * キャンセル処理\r\n */\r\n const cancelAction = () => {\r\n console.debug('handleDialogConsole()');\r\n setOpen(false);\r\n setMode(false);\r\n };\r\n\r\n /**\r\n * 新規登録\r\n */\r\n const newBtnAction = () => {\r\n let conanData = {} as CONNAIR_SET;\r\n conanData.CNA_ID = conanairId;\r\n conanData.DEV_INDEX = devNo == undefined ? 0 : devNo;\r\n conanData.ITM_NAME_NO = itemName == undefined ? 0 : itemName;\r\n\r\n\r\n\r\n let colSetLogData = {} as ColSetLogModel;\r\n colSetLogData.LogStart = GetLogStartItem(logHour, logMin, logSec);\r\n\r\n let data = { ConanairSet: conanData, ColSetLog: colSetLogData } as ConanAirSetModel\r\n console.debug(['--- newBtnAction ---', data]);\r\n\r\n InsertConanAirManagement(data).then((status: number) => {\r\n console.debug(['status', status]);\r\n if (status == ApiResponseCode.SUCCESS) {\r\n /** 新規登録要求のレコード追加 新規登録非同期待ち */\r\n setOpen(false);\r\n setMode(true);\r\n return;\r\n }\r\n /** エラー */\r\n setShowTitle(t('ConanairManagementGridRowNewDialog.新規登録エラー', '新規登録エラー'));\r\n if (status == ApiResponseCode.BAD_REQUEST) {\r\n /** パラメータ異常時 */\r\n setShowMessage(t('ConanairManagementGridRowNewDialog.パラメータに誤りがあります', 'パラメータに誤りがあります'));\r\n } else if (status == ApiResponseCode.NOT_ACCEPTABLE) {\r\n /** 既に登録済み */\r\n setShowMessage(\r\n t(\r\n 'ConanairManagementGridRowNewDialog.コナンエアIDか機器番号が既に登録済みです',\r\n '「コナンエアーID」か「機器番号」が既に登録済みです'\r\n )\r\n );\r\n } else if (login.IsIoT == true && status === ApiResponseCode.DEVINDEX_IOT_REGISTERED) {\r\n setShowMessage(\r\n t(\r\n 'ConanairManagementGridRowNewDialog.既にTMBEE-BOX管理画面で登録済みの機器番号です',\r\n '既にTMBEE-BOX管理画面で登録済みの「機器番号」です'\r\n )\r\n );\r\n } else {\r\n /** 更新失敗時 */\r\n setShowMessage(t('ConanairManagementGridRowNewDialog.システムエラーが発生しました', 'システムエラーが発生しました'));\r\n }\r\n setMessageDialogOpen(true);\r\n });\r\n };\r\n console.debug(['- 画面描画開始 -', 'mode:', mode]);\r\n return (\r\n <>\r\n {\r\n if (mode) {\r\n props.dialog.apply({});\r\n } else {\r\n props.dialog.cancel();\r\n }\r\n }}\r\n >\r\n \r\n {t('ConanairManagementGridRowNewDialog.コナンエアID新規登録', 'コナンエアーID新規登録')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {t('ConanairManagementGridRowNewDialog.コナンエアID', 'コナンエアーID')}\r\n \r\n \r\n {\r\n const re = /^[a-zA-Z0-9!-/:-¥[-`{-~\\b]+$/;\r\n if (e.target.value === '' || re.test(e.target.value)) {\r\n setConanairId(e.target.value);\r\n }\r\n }}\r\n />\r\n \r\n \r\n {/* 機器番号 プルダウン */}\r\n \r\n \r\n {t('ConanairManagementGridRowNewDialog.機器番号', '機器番号')}\r\n \r\n \r\n {\r\n console.debug(['onChangeEvent', e.target.value]);\r\n if (typeof e.target.value === 'string') {\r\n const val = parseInt(e.target.value);\r\n setDevNo(val);\r\n }\r\n }}\r\n />\r\n \r\n \r\n {/* 取付箇所 */}\r\n \r\n \r\n {t('ConanairManagementGridRowNewDialog.取付箇所', '取付箇所')}\r\n \r\n \r\n {\r\n console.debug(['onChangeEvent', e.target.value]);\r\n if (typeof e.target.value === 'string') {\r\n const val = parseInt(e.target.value);\r\n setItemName(val);\r\n }\r\n }}\r\n />\r\n \r\n \r\n {/* 収集時刻 */}\r\n {login.IsIoT === true ?\r\n \r\n \r\n {t('ConanairManagementGridRowNewDialog.収集時刻', '収集時刻')}\r\n \r\n \r\n
\r\n {\r\n setLogHour(val);\r\n }}\r\n className={tableBaseStyle.logTimeField}\r\n />\r\n :\r\n {\r\n setLogMin(val);\r\n }}\r\n className={tableBaseStyle.logTimeField}\r\n />\r\n :\r\n {\r\n setLogSec(val);\r\n }}\r\n className={tableBaseStyle.logTimeField}\r\n />\r\n
\r\n
\r\n
\r\n : null\r\n }\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n {\r\n newBtnAction();\r\n }}\r\n >\r\n {t('ConanairManagementGridRowNewDialog.新規登録', '新規登録')}\r\n \r\n \r\n {t('ConanairManagementGridRowNewDialog.キャンセル', 'キャンセル')}\r\n \r\n\r\n \r\n \r\n setMessageDialogOpen(false)}\r\n title={showTitle}\r\n okText={'OK'}\r\n maxWidth={'sm'}\r\n >\r\n {showMessage}\r\n \r\n \r\n );\r\n};\r\n\r\n\r\n\r\nexport default ConanairManagementGridRowNewDialog;","import React, { useEffect, useState, useContext, useRef } from 'react';\r\nimport { SettingsState } from '../../../organisms/SelectSettings';\r\n\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Paper from '@material-ui/core/Paper';\r\n\r\nimport { useTranslation } from 'react-i18next';\r\nimport { AppContext } from '../../../../App';\r\nimport { useModal } from '../../../../function/useModal';\r\nimport { NAME_DEV_SET, GetNameDevSetList } from '../../../../function/NameDevSetModel';\r\nimport { NAME_ITEM_SET, GetNameItemSetList } from '../../../../function/NameItemSetModel';\r\n\r\nimport { ComboBoxItemType } from '../../../atoms/ComboBox/ItemComboBox';\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../../atoms/Dialog/ConfirmDialog';\r\nimport MessageDialog, { MessageDialogResponse } from '../../../atoms/Dialog/MessageDialog';\r\nimport { ErrorCode } from '../../../../ErrorCode';\r\n\r\nimport {\r\n ApiResponseCode,\r\n CheckConanairManagementFlg,\r\n CheckInputData,\r\n CONNAIR_SET,\r\n CreateConanairManagementModel,\r\n DeleteConanAirManagement,\r\n GetConanairManagement,\r\n PutConanairManagement,\r\n ColSetLogModel,\r\n} from './ConanairManagement';\r\nimport ConanairManagementFooter from './ConanairManagementFooter';\r\nimport ConanairManagementGridRow from './ConanairManagementGridRow';\r\nimport { TableUseStyle, ConanairManagementStyle } from './ConanairManagementStyle';\r\n\r\nimport ConanairManagementGridRowNewDialog, {\r\n ConanairManagementGridRowNewDialogResponse,\r\n} from './ConanairManagementGridRowNewDialog';\r\nimport { Update } from '@material-ui/icons';\r\n\r\ntype ConanairManagementProps = {\r\n editData: SettingsState;\r\n};\r\n\r\n/**\r\n * Conanair管理画面メインページ\r\n * @param props\r\n */\r\nconst ConanairManagementPage: React.FC = (props: ConanairManagementProps) => {\r\n const { t } = useTranslation();\r\n const pageStyle = ConanairManagementStyle();\r\n const { login } = useContext(AppContext);\r\n\r\n // 設定画面リスト\r\n const [conanList, setConanList] = useState([]);\r\n const [colSetlogItemList, SetColSetlogItemList] = useState([]);\r\n const [nameDevSet, setNameDevSet] = useState([]);\r\n const [nameItemSet, setNameItemSet] = useState([]);\r\n const [devNoComboList, setDevNoComboList] = useState([]);\r\n const [nameItemComboList, setNameItemComboList] = useState([]);\r\n\r\n const [selectIdx, setSelectIdx] = useState(-1);\r\n const [flgCfmDlg, actCfmDlg] = useModal();\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n const [buttonEnable, setButtonEnable] = useState(true);\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n\r\n // 新規登録ダイアログ\r\n const [flgNewRow, newRowDlg] = useModal();\r\n\r\n const cfmdlg = flgCfmDlg ? (\r\n \r\n ) : null;\r\n const msgdlg = flgMsgDlg ? : null;\r\n\r\n /**\r\n * 初期表示\r\n */\r\n useEffect(() => {\r\n /** 行データの呼び出し */\r\n updateData();\r\n }, []);\r\n\r\n useEffect(() => {\r\n props.editData.SaveFunction = saveAction2;\r\n props.editData.IsUpdate = false;\r\n }, [props.editData.CancelCondition]);\r\n\r\n /**\r\n * 行データの呼び出し\r\n */\r\n const updateData = () => {\r\n //V_CONANAIR_MANAGEMENT_ITEMをとってくる\r\n //SetDevListに放り込む\r\n //NAME_DEV_SETの取得\r\n setButtonEnable(false);\r\n let devSet: NAME_DEV_SET[] = [];\r\n let itemSet: NAME_ITEM_SET[] = [];\r\n let devComList: ComboBoxItemType[] = [];\r\n let nameItemComList: ComboBoxItemType[] = [];\r\n let conanairItemList: CONNAIR_SET[] = [];\r\n let ColSetLogModelList: ColSetLogModel[] = [];\r\n\r\n GetNameDevSetList()\r\n .then((res) => {\r\n devSet = res;\r\n return GetNameItemSetList();\r\n })\r\n .then((res) => {\r\n itemSet = res;\r\n return GetConanairManagement();\r\n })\r\n .then((res) => {\r\n conanairItemList = res.ConanairSetList;\r\n ColSetLogModelList = res.ColSetLogList;\r\n\r\n //収集時刻の読込\r\n conanairItemList.forEach((r) => {\r\n let colItem = ColSetLogModelList.find((res) => res.PlcNo === r.PLC_NO);\r\n if (colItem !== undefined) {\r\n r.logStart = colItem.LogStart;\r\n }\r\n });\r\n console.debug(['test_ConanairSetList', res.ConanairSetList, ColSetLogModelList]);\r\n //機器番号リストフィルター\r\n devSet = devSet.filter((row) => {\r\n if (conanairItemList.findIndex((row2) => row2.DEV_INDEX === row.DEV_INDEX) !== -1) {\r\n return true;\r\n }\r\n if (row.EST === 1) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n\r\n devSet.forEach((r) => {\r\n devComList.push({ index: r.DEV_INDEX, name: r.DEV_NO });\r\n });\r\n itemSet\r\n .filter((r) => r.EST === 1 && (r.ITM_NAME_NO == 1 || r.ITM_NAME_NO == 2 || r.ITM_NAME_NO == 18))\r\n .forEach((row) => {\r\n //取付箇所のコンボボックス作成\r\n nameItemComList.push({ index: row.ITM_NAME_NO, name: row.ITM_NAME });\r\n });\r\n\r\n // console.debug([\"test_ConanairSetList\",res.ConanairSetList])\r\n conanairItemList.forEach((r) => {\r\n let temp = devSet.find((row) => {\r\n return row.DEV_INDEX === r.DEV_INDEX;\r\n });\r\n if (temp !== undefined) {\r\n r.devName = temp.DEV_NAME;\r\n }\r\n });\r\n setSelectIdx(-1);\r\n setNameDevSet(devSet);\r\n setNameItemSet(itemSet);\r\n setDevNoComboList(devComList);\r\n setNameItemComboList(nameItemComList);\r\n setConanList(conanairItemList);\r\n SetColSetlogItemList(ColSetLogModelList);\r\n // console.debug([\"test_conanairItemList\",conanairItemList])\r\n })\r\n .catch((r) => {\r\n setDlgmsg(t('ConanairManagementPage.データ取得中にエラーが発生しました', 'データ取得中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n console.error(['saveAction error', r]);\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n props.editData.IsUpdate = false;\r\n };\r\n\r\n /** 新規登録ダイアログ */\r\n const newAction = () => {\r\n if (conanList.length >= 100) {\r\n setDlgmsg(\r\n t('ConanairManagementPage.登録できるコナンエアIDは100までです', '登録できるコナンエアIDは100までです。')\r\n );\r\n actMsgDlg.open();\r\n return;\r\n }\r\n /** 編集途中の場合確認 */\r\n if (CheckConanairManagementFlg(conanList)) {\r\n setDlgmsg(\r\n t(\r\n 'ConanairManagementPage.編集中の内容が破棄されますが_よろしいですか',\r\n '編集中の内容が破棄されますが \\nよろしいですか?'\r\n )\r\n );\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n console.debug('handleNewDialogShow()');\r\n newRowDlg\r\n .open()\r\n .apply(() => {\r\n // API実行成功後のコールバック\r\n console.debug('apply()');\r\n updateData();\r\n })\r\n .cancel(() => {\r\n console.debug('cancel()');\r\n updateData();\r\n });\r\n })\r\n .cancel(() => {\r\n console.debug(t('ConanairManagementPage.キャンセル', 'キャンセル'));\r\n });\r\n } else {\r\n console.debug('handleNewDialogShow()');\r\n newRowDlg\r\n .open()\r\n .apply(() => {\r\n // API実行成功後のコールバック\r\n console.debug('apply()');\r\n updateData();\r\n })\r\n .cancel(() => {\r\n console.debug('cancel()');\r\n updateData();\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * 保存アクション\r\n */\r\n const saveAction = () => {\r\n if (CheckConanairManagementFlg(conanList)) {\r\n let message = CheckInputData(conanList, nameDevSet, t);\r\n if (message.length !== 0) {\r\n setDlgmsg(message.join('\\n'));\r\n actMsgDlg.open();\r\n return;\r\n }\r\n setDlgmsg(\r\n t('ConanairManagementPage.編集内容を保存します_よろしいですか', '編集内容を保存します。\\nよろしいですか?')\r\n );\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n let editModel = CreateConanairManagementModel();\r\n let editList = conanList.filter((r) => r.isEdit === true);\r\n editModel.ConanairSetList = editList;\r\n editModel.ColSetLogList = colSetlogItemList;\r\n setButtonEnable(false);\r\n PutConanairManagement(editModel)\r\n .then((r) => {\r\n if (r.ErrorCode === ErrorCode.ERR_CODE_NONE) {\r\n setDlgmsg(t('ConanairManagementPage.保存が正常に終了しました', '保存が正常に終了しました'));\r\n actMsgDlg.open();\r\n updateData();\r\n console.debug('saveAction ok');\r\n } else if (r.ErrorCode === ErrorCode.ERR_CODE_CONAN_DEVINDEX_IOT_REGISTERED) {\r\n setDlgmsg(\r\n t(\r\n 'ConanairManagementPage.TMBEE-BOX管理画面側で使用中の機器番号と重複したため中断しました\\n保存する場合はデータ収集設定画面にて対象機器番号の計測種別振動の実行フラグを外すことが必要です',\r\n 'TMBEE-BOX管理画面側で使用中の「機器番号」と重複したため中断しました\\n保存する場合は、データ収集設定画面にて対象機器番号の計測種別『振動』の実行フラグを外すことが必要です'\r\n )\r\n );\r\n actMsgDlg.open();\r\n } else if (r.ErrorCode === ErrorCode.ERR_CODE_CONAN_CONANAIRSET_NODATA) {\r\n setDlgmsg(\r\n t(\r\n 'ConanairManagementPage.CONANAIR_SETテーブルに変更対象が登録されていないため中断しました',\r\n 'CONANAIR_SETテーブルに変更対象が登録されていないため中断しました'\r\n )\r\n );\r\n actMsgDlg.open();\r\n } else if (r.ErrorCode === ErrorCode.ERR_CODE_CONAN_COLSET_NODATA) {\r\n setDlgmsg(\r\n t(\r\n 'ConanairManagementPage.COL_SETテーブルに変更対象が登録されていないため中断しました',\r\n 'COL_SETテーブルに変更対象が登録されていないため中断しました'\r\n )\r\n );\r\n actMsgDlg.open();\r\n } else if (r.ErrorCode === ErrorCode.ERR_CODE_IPADR_INCORRECT) {\r\n setDlgmsg(\r\n t(\r\n 'ConanairManagementPage.機器番号が重複しているため中断しました',\r\n '機器番号が重複しているため中断しました'\r\n )\r\n );\r\n actMsgDlg.open();\r\n }\r\n })\r\n .catch((r) => {\r\n setDlgmsg(t('ConanairManagementPage.保存中にエラーが発生しました', '保存中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n console.error(['saveAction error', r]);\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n })\r\n .cancel(() => {\r\n console.debug(t('ConanairManagementPage.キャンセル', 'キャンセル'));\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * タブ切替時に動作\r\n * @param param\r\n * @returns\r\n */\r\n const saveAction2 = (param: object): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const sp = param as { cList: CONNAIR_SET[]; nList: NAME_DEV_SET[]; csList: ColSetLogModel[] };\r\n let message = CheckInputData(sp.cList, sp.nList, t);\r\n console.debug(['--mssage1--', message, sp, param]);\r\n if (message.length !== 0) {\r\n console.debug(['--mssage2--', message]);\r\n setDlgmsg(message.join('\\n'));\r\n actMsgDlg.open();\r\n reject('data error');\r\n return;\r\n }\r\n let editModel = CreateConanairManagementModel();\r\n let editList = sp.cList.filter((r) => r.isEdit === true);\r\n editModel.ConanairSetList = editList;\r\n editModel.ColSetLogList = sp.csList;\r\n setButtonEnable(false);\r\n\r\n PutConanairManagement(editModel)\r\n .then((r) => {\r\n props.editData.IsUpdate = false;\r\n console.debug('saveAction ok');\r\n resolve('done');\r\n })\r\n .catch((r) => {\r\n setDlgmsg(t('ConanairManagementPage.保存中にエラーが発生しました', '保存中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n console.error(['saveAction error', r]);\r\n reject('data error');\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * 中止アクション\r\n */\r\n const cancelAction = () => {\r\n if (CheckConanairManagementFlg(conanList)) {\r\n setDlgmsg(\r\n t(\r\n 'ConanairManagementPage.保存していないデータを破棄します_よろしいですか',\r\n '保存していないデータを破棄します。\\nよろしいですか?'\r\n )\r\n );\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n updateData();\r\n props.editData.UpdateCancel();\r\n props.editData.IsUpdate = false;\r\n console.debug(t('ConanairManagementPage.実行', '実行'));\r\n })\r\n .cancel(() => {\r\n console.debug(t('ConanairManagementPage.キャンセル', 'キャンセル'));\r\n });\r\n }\r\n };\r\n /**\r\n *  削除アクション\r\n */\r\n const deleteAction = () => {\r\n if (selectIdx >= 0) {\r\n setButtonEnable(false);\r\n if (CheckConanairManagementFlg(conanList)) {\r\n setDlgmsg(`CNA_ID:${conanList[selectIdx - 1].CNA_ID}\r\n ${t(\r\n 'ConanairManagementPage.コナンエアの登録を削除しますか_編集中の内容は破棄されます',\r\n 'コナンエアの登録を削除しますか?(編集中の内容は破棄されます)'\r\n )}`);\r\n } else {\r\n setDlgmsg(`CNA_ID:${conanList[selectIdx - 1].CNA_ID}\r\n ${t('ConanairManagementPage.コナンエアの登録を削除しますか', 'コナンエアの登録を削除しますか?')}`);\r\n }\r\n\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n DeleteConanAirManagement(conanList[selectIdx - 1] ? conanList[selectIdx - 1].CNA_ID : '')\r\n .then((status: number) => {\r\n console.debug(['status', status]);\r\n if (status == ApiResponseCode.SUCCESS) {\r\n /** 削除登録要求をレコード追加 非同期待ち */\r\n updateData();\r\n // setButtonEnable(true); updateDataの中で行っているので不要\r\n }\r\n })\r\n .catch((r) => {\r\n setDlgmsg(t('ConanairManagementPage.削除中にエラーが発生しました', '削除中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n console.error(['saveAction error', r]);\r\n setButtonEnable(true);\r\n });\r\n })\r\n .cancel(() => {\r\n console.debug(t('ConanairManagementPage.キャンセル', 'キャンセル'));\r\n setButtonEnable(true);\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * データ変更アクション\r\n * @param item\r\n */\r\n const itemUpdateAction = (item: CONNAIR_SET) => {\r\n console.debug(['itemUpdateAction', item]);\r\n item.isEdit = true;\r\n props.editData.IsUpdate = true;\r\n /** 機器名称 */\r\n let temp = nameDevSet.find((row) => {\r\n return row.DEV_INDEX === item.DEV_INDEX;\r\n });\r\n if (temp !== undefined) {\r\n item.devName = temp.DEV_NAME;\r\n }\r\n /** コナンエアID */\r\n const idx = conanList.findIndex((itm) => itm.CNA_ID === item.CNA_ID);\r\n\r\n /**収集時刻 */\r\n if (login.IsIoT === true) {\r\n colSetlogItemList.forEach((r) => {\r\n r.LogStart = r.PlcNo === item.PLC_NO ? item.logStart : r.LogStart;\r\n });\r\n }\r\n\r\n if (idx >= 0) {\r\n /** 画面更新のためArrayの再生成 */\r\n const temp = conanList.concat();\r\n temp[idx] = item;\r\n setConanList(temp);\r\n }\r\n props.editData.Target = { cList: conanList, nList: nameDevSet, csList: colSetlogItemList };\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n No\r\n \r\n \r\n {t('ConanairManagementPage.機器番号', '機器番号')}\r\n \r\n \r\n {t('ConanairManagementPage.機器名称', '機器名称')}\r\n \r\n \r\n {t('ConanairManagementPage.取付箇所', '取付箇所')}\r\n \r\n \r\n {t('ConanairManagementPage.コナンエアID', 'コナンエアID')}\r\n \r\n {login.IsIoT === true ? (\r\n \r\n {t('ConanairManagementPage.収集時刻', '収集時刻')}\r\n \r\n ) : null}\r\n \r\n \r\n \r\n {conanList.map((item, idx) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n {/* コナンエアID新規登録 */}\r\n {flgNewRow ? (\r\n \r\n ) : null}\r\n {cfmdlg}\r\n {msgdlg}\r\n \r\n );\r\n};\r\n\r\nexport default ConanairManagementPage;\r\n","import { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\n\r\nexport const TableBaseStyle = makeStyles(\r\n createStyles({\r\n\r\n //テーブルヘッダセル\r\n headerCell: {\r\n padding: '2px',\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n minWidth: '80px',\r\n borderCollapse: `collapse`,\r\n },\r\n bodyCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '1px',\r\n height: '35px',\r\n },\r\n bodyCellCenter: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n padding: '1px',\r\n height: '30px',\r\n },\r\n bodyCellLeft: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '1px',\r\n height: '30px',\r\n extAlign: 'Left',\r\n },\r\n labelStyle: {\r\n fontSize: '12px',\r\n },\r\n itemBoxStyle: {\r\n fontSize: '13px',\r\n },\r\n bodyRow: {\r\n '&.Mui-selected, &.Mui-selected:hover': {\r\n //背景色\r\n backgroundColor: 'yellow',\r\n '& > .MuiTableCell-root': {\r\n //文字色\r\n color: 'brack',\r\n },\r\n },\r\n },\r\n tableTd: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '0px',\r\n paddingLeft: '5px',\r\n borderCollapse: `collapse`,\r\n zIndex: 0,\r\n },\r\n //テキスト\r\n textField: {\r\n flexGrow: 1,\r\n height: '100%',\r\n width: '98%',\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n textAlign: \"center\",\r\n },\r\n fixColumn: {\r\n borderWidth: '0px',\r\n outlineWidth: '1px',\r\n outlineColor: '#dcdcdc',\r\n outlineStyle: 'solid',\r\n padding: '0px',\r\n paddingLeft: '5px',\r\n position: 'sticky',\r\n zIndex: 10,\r\n backgroundColor: 'white',\r\n },\r\n logTimeField: {\r\n paddingLeft: \"2px\",\r\n width: '24px',\r\n },\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 310px)',\r\n overflowX: 'scroll',\r\n },\r\n flexBox: {\r\n dispay: \"flex\",\r\n },\r\n tableDialgContainer: {\r\n maxHeight: 'calc(100vh - 276px)',\r\n },\r\n paper: {\r\n background: '#FFFFEE',\r\n },\r\n buttonStyle: {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n },\r\n fixHeader: {\r\n color: 'white',\r\n borderWidth: '0px',\r\n backgroundColor: 'gray',\r\n outlineWidth: '1px',\r\n outlineColor: '#dcdcdc',\r\n outlineStyle: 'solid',\r\n padding: 0,\r\n margin: 0,\r\n textAlign: 'center',\r\n position: 'sticky',\r\n zIndex: 20,\r\n minWidth: '80px',\r\n borderCollapse: `collapse`,\r\n },\r\n selectRow: {\r\n background: 'yellow',\r\n },\r\n })\r\n);","import React, { useEffect, useState, useContext, useRef } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport dayjs from 'dayjs';\r\n\r\nimport { ItemComboBox, ComboBoxItemType } from '../../../atoms/ComboBox/ItemComboBox';\r\nimport NumericEntry_inputEx from '../../../atoms/Input/NumericEntry_inputEx';\r\nimport ItemCalenderTimeEx from '../../../atoms/Calendar/ItemCalenderTimeEx';\r\n\r\nimport { TableBaseStyle } from './PartialDischargeCollectionStyle';\r\nimport { SET_PART_DIS } from './PartialDischargeCollection';\r\n\r\ntype PartialDischargeCollectionBodyProps = {\r\n setPartDisItem: SET_PART_DIS;\r\n updateItem: (item: SET_PART_DIS) => void;\r\n nameDevComboBoxItemList: ComboBoxItemType[];\r\n mclcTypIdMaxComboBoxItemList: ComboBoxItemType[];\r\n mclcTypIdPdComboBoxItemList: ComboBoxItemType[];\r\n partialDischargeIpEnabled: boolean;\r\n};\r\n\r\nconst PartialDischargeCollectionBody: React.FC = (props: PartialDischargeCollectionBodyProps) => {\r\n const tableStyle = TableBaseStyle();\r\n const editRow: SET_PART_DIS = props.setPartDisItem;\r\n const selectDay: string = dayjs(editRow.LOG_START !== undefined ? editRow.LOG_START : new Date).format('YYYY-MM-DD HH:mm:ss');\r\n const MEASURE_ITEM_NO = 512;\r\n\r\n const [ipAdrSetting, setIpAdrSetting] = useState(props.setPartDisItem.IP_ADR); //データ初期値\r\n\r\n /**\r\n * 重故障変更処理\r\n * @param val \r\n */\r\n const changeLmtH = (val: number) => {\r\n editRow.LMT_H = val;\r\n editRow.isEdit = true;\r\n props.updateItem(editRow);\r\n };\r\n /**\r\n * 軽故障変更処理\r\n * @param val \r\n */\r\n const changeLmtL = (val: number) => {\r\n editRow.LMT_L = val;\r\n editRow.isEdit = true;\r\n props.updateItem(editRow);\r\n };\r\n /**\r\n * 収集開始時刻変更処理\r\n * @param value \r\n */\r\n const changeCalendarValue = (value: string) => {\r\n editRow.LOG_START = new Date(value);\r\n editRow.isEdit = true;\r\n console.debug([\"changeCalendarValue\", editRow, value]);\r\n props.updateItem(editRow);\r\n };\r\n /**\r\n * PD強度 重故障変更処理\r\n * @param val \r\n */\r\n const changeLmtHPd = (val: number) => {\r\n editRow.LMT_H_PD = val;\r\n editRow.isEdit = true;\r\n props.updateItem(editRow);\r\n };\r\n /**\r\n * PD強度 軽故障変更処理\r\n * @param val \r\n */\r\n const changeLmtLPd = (val: number) => {\r\n editRow.LMT_L_PD = val;\r\n editRow.isEdit = true;\r\n props.updateItem(editRow);\r\n };\r\n /**\r\n * IPアドレス変更処理\r\n * @param str \r\n */\r\n const changeIpAdr = (str: string) => {\r\n setIpAdrSetting(str);\r\n editRow.IP_ADR = str;\r\n editRow.isEdit = true;\r\n props.updateItem(editRow);\r\n }\r\n\r\n /**\r\n * 機器番号・名称の変更処理\r\n * @param idx \r\n */\r\n const changeMachineIdx = (idx: number) => {\r\n editRow.DEV_INDEX = idx;\r\n if (idx != 0) {\r\n editRow.ITM_NAME_NO = MEASURE_ITEM_NO;\r\n }\r\n editRow.isEdit = true;\r\n // console.debug([\"editRow.DEV_INDEX\", idx, editRow.DEV_INDEX]);\r\n props.updateItem(editRow);\r\n };\r\n\r\n /**\r\n * 最大値異常内容変更処理\r\n * @param idx \r\n */\r\n const changeTypNoMax = (idx: number) => {\r\n editRow.TYP_NO_MAX = idx;\r\n editRow.isEdit = true;\r\n props.updateItem(editRow);\r\n };\r\n\r\n /**\r\n * PD強度異常内容変更処理\r\n * @param idx \r\n */\r\n const changeTypNoPd = (idx: number) => {\r\n editRow.TYP_NO_PD = idx;\r\n editRow.isEdit = true;\r\n props.updateItem(editRow);\r\n }\r\n\r\n return (\r\n <>\r\n \r\n {/** No. */}\r\n {editRow.SET_NO}\r\n {/** 実行 */}\r\n \r\n {\r\n editRow.RUN_FLG = e.target.checked ? 1 : 0;\r\n editRow.isEdit = true;\r\n props.updateItem(editRow);\r\n }}\r\n />\r\n \r\n {/* 機器番号・名称 */}\r\n \r\n {\r\n if (typeof e.target.value === 'string') {\r\n console.debug([\"e.target.value\", e.target.value]);\r\n changeMachineIdx(parseInt(e.target.value));\r\n }\r\n }}\r\n />\r\n \r\n {/* IPアドレス */}\r\n {props.partialDischargeIpEnabled === false ?\r\n null :\r\n {\r\n console.debug([\"onClick\"])\r\n if (editRow.DEV_INDEX != 0 && editRow.IP_ADR == undefined) {\r\n changeIpAdr(\"0.0.0.0\");\r\n }\r\n }}\r\n >\r\n {editRow.IP_ADR != undefined && editRow.DEV_INDEX != 0 ?\r\n {\r\n console.debug(['onChangeEvent', e.target.value]);\r\n setIpAdrSetting(e.target.value)\r\n }}\r\n onBlur={() => {\r\n if (ipAdrSetting != undefined) {\r\n const ip = ipAdrSetting;\r\n if (ip.match(/^\\d{1,3}(\\.\\d{1,3}){3}$/)) {\r\n changeIpAdr(ipAdrSetting);\r\n }\r\n else {\r\n changeIpAdr(editRow.IP_ADR != undefined ? editRow.IP_ADR : '')\r\n }\r\n }\r\n\r\n }}\r\n /> : ''\r\n }\r\n \r\n }\r\n {/* 収集開始時刻 */}\r\n {\r\n console.debug([\"onClick\"])\r\n if (editRow.DEV_INDEX != 0 && editRow.LOG_START == undefined) {\r\n changeCalendarValue(dayjs(new Date).toString());\r\n }\r\n }}\r\n >\r\n {editRow.LOG_START != undefined && editRow.DEV_INDEX != 0 ?\r\n {\r\n console.debug([\"onChange date\", e])\r\n changeCalendarValue(e)\r\n }}\r\n />\r\n : ''\r\n }\r\n \r\n {/* しきい値 */}\r\n \r\n \r\n \r\n {/* 軽故障 */}\r\n {\r\n console.debug([\"onClick\"])\r\n if (editRow.DEV_INDEX != 0 && editRow.LMT_L == undefined) {\r\n //console.debug([\"changeLmtL\"])\r\n changeLmtL(0);\r\n }\r\n }}\r\n >\r\n {editRow.LMT_L != undefined && editRow.DEV_INDEX != 0 ?\r\n {\r\n changeLmtL(val);\r\n }}\r\n /> : ''\r\n }\r\n \r\n {/* 重故障 */}\r\n {\r\n console.debug([\"onClick\"])\r\n if (editRow.DEV_INDEX != 0 && editRow.LMT_H == undefined) {\r\n //console.debug([\"changeLmtH\"])\r\n changeLmtH(0);\r\n }\r\n }}\r\n >\r\n {editRow.LMT_H != undefined && editRow.DEV_INDEX != 0 ?\r\n {\r\n changeLmtH(val);\r\n }}\r\n /> : ''\r\n }\r\n \r\n \r\n
\r\n
\r\n {/* PD強度しきい値 */}\r\n \r\n \r\n \r\n {/* 軽故障 */}\r\n {\r\n console.debug([\"onClick\"])\r\n if (editRow.DEV_INDEX != 0 && editRow.LMT_L_PD == undefined) {\r\n //console.debug([\"changeLmtL\"])\r\n changeLmtLPd(0);\r\n }\r\n }}\r\n >\r\n {editRow.LMT_L_PD != undefined && editRow.DEV_INDEX != 0 ?\r\n {\r\n changeLmtLPd(val);\r\n }}\r\n /> : ''\r\n }\r\n \r\n {/* 重故障 */}\r\n {\r\n console.debug([\"onClick\"])\r\n if (editRow.DEV_INDEX != 0 && editRow.LMT_H_PD == undefined) {\r\n //console.debug([\"changeLmtH\"])\r\n changeLmtHPd(0);\r\n }\r\n }}\r\n >\r\n {editRow.LMT_H_PD != undefined && editRow.DEV_INDEX != 0 ?\r\n {\r\n changeLmtHPd(val);\r\n }}\r\n /> : ''\r\n }\r\n \r\n \r\n
\r\n
\r\n {/**部分放電判定_最大値異常内容No */}\r\n {\r\n console.debug([\"onClick\"])\r\n if (editRow.DEV_INDEX != 0 && editRow.TYP_NO_MAX == null) {\r\n if (props.mclcTypIdMaxComboBoxItemList.length > 0) {\r\n changeTypNoMax(props.mclcTypIdMaxComboBoxItemList[0].index); //初期表示用にコンボボックス先頭の番号を入力\r\n }\r\n }\r\n }}\r\n >\r\n {editRow.TYP_NO_MAX != undefined && editRow.DEV_INDEX != 0 ?\r\n {\r\n if (typeof e.target.value === 'string') {\r\n console.debug([\"e.target.value\", e.target.value]);\r\n changeTypNoMax(parseInt(e.target.value));\r\n }\r\n }}\r\n />\r\n : ''\r\n }\r\n \r\n {/**部分放電判定_PD強度異常内容No */}\r\n {\r\n console.debug([\"onClick\"])\r\n if (editRow.DEV_INDEX != 0 && editRow.TYP_NO_PD == null) {\r\n if (props.mclcTypIdPdComboBoxItemList.length > 0) {\r\n changeTypNoPd(props.mclcTypIdPdComboBoxItemList[0].index); //初期表示用にコンボボックス先頭の番号を入力\r\n }\r\n }\r\n }}\r\n >\r\n {editRow.TYP_NO_PD != undefined && editRow.DEV_INDEX != 0 ?\r\n {\r\n if (typeof e.target.value === 'string') {\r\n console.debug([\"e.target.value\", e.target.value]);\r\n changeTypNoPd(parseInt(e.target.value));\r\n }\r\n }}\r\n />\r\n : ''\r\n }\r\n \r\n\r\n
\r\n \r\n )\r\n}\r\n\r\nexport default PartialDischargeCollectionBody;","import React, { useEffect, useState, ChangeEvent } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Button from '@material-ui/core/Button';\r\nimport Grid from '@material-ui/core/Grid';\r\n\r\nimport { TableBaseStyle } from './PartialDischargeCollectionStyle';\r\n\r\ntype PartialDischargeCollectionFooterProps = {\r\n onClickSaveButton: () => void;\r\n onClickCancelButton: () => void;\r\n buttonEnable: boolean;\r\n}\r\n\r\nconst PartialDischargeCollectionFooter: React.FC = (props: PartialDischargeCollectionFooterProps) => {\r\n const { t } = useTranslation();\r\n const tableStyle = TableBaseStyle();\r\n\r\n return (\r\n \r\n \r\n {\r\n props.onClickSaveButton();\r\n }}\r\n >\r\n {t('PartialDischargeCollectionFooter.保存', '保存')}\r\n \r\n \r\n \r\n props.onClickCancelButton()}\r\n >\r\n {t('PartialDischargeCollectionFooter.キャンセル', 'キャンセル')}\r\n \r\n \r\n \r\n )\r\n\r\n}\r\nexport default PartialDischargeCollectionFooter;","import React, { useEffect, useState, useContext, useRef } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Paper from '@material-ui/core/Paper';\r\n\r\nimport { SettingsState } from '../../../organisms/SelectSettings';\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../../atoms/Dialog/ConfirmDialog';\r\nimport MessageDialog, { MessageDialogResponse } from '../../../atoms/Dialog/MessageDialog';\r\nimport { ItemComboBox, ComboBoxItemType } from '../../../atoms/ComboBox/ItemComboBox';\r\n\r\nimport { useModal } from '../../../../function/useModal';\r\nimport { ErrorCode } from '../../../../ErrorCode';\r\n\r\nimport { TableBaseStyle } from './PartialDischargeCollectionStyle';\r\nimport {\r\n GetPartialDischargeCollectionData\r\n , PutPartialDischargeCollectionData\r\n , SET_PART_DIS\r\n} from './PartialDischargeCollection';\r\nimport PartialDischargeCollectionBody from './PartialDischargeCollectionBody';\r\nimport PartialDischargeCollectionFooter from './PartialDischargeCollectionFooter';\r\n\r\n\r\n/**\r\n * タブ切替\r\n */\r\ntype PartialDischargeCollectionPageProps = {\r\n editData: SettingsState;\r\n};\r\n\r\ntype SaveParameter = {\r\n list: SET_PART_DIS[];\r\n};\r\n\r\nconst PartialDischargeCollectionPage: React.FC = (props: PartialDischargeCollectionPageProps) => {\r\n const { t } = useTranslation();\r\n const pageStyle = TableBaseStyle();\r\n\r\n const [setPartDisList, setSetPartDisList] = useState([]);\r\n const [nameDevSetComboBoxItemList, setNameDevSetComboBoxItemList] = useState([]);\r\n const [mclcTypIdMaxComboBoxItemList, setMclcTypIdMaxComboBoxItemList] = useState([]);\r\n const [mclcTypIdPdComboBoxItemList, setMclcTypIdPdComboBoxItemList] = useState([]);\r\n const [buttonEnable, setButtonEnable] = useState(true);\r\n const [flgCfmDlg, actCfmDlg] = useModal();\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n //部分放電画面有効フラグ\r\n const [partialDischargeIpEnabled, setPartialDischargeIpEnabled] = useState(true);\r\n\r\n const cfmdlg = flgCfmDlg ? (\r\n \r\n ) : null;\r\n\r\n const msgdlg = flgMsgDlg ? : null;\r\n\r\n /**\r\n * 初期表示\r\n */\r\n useEffect(() => {\r\n console.debug(['useEffect init', props]);\r\n updateData();\r\n }, []);\r\n\r\n /**\r\n * \r\n */\r\n useEffect(() => {\r\n props.editData.SaveFunction = saveAction2;\r\n props.editData.IsUpdate = false;\r\n }, [props.editData.CancelCondition]);\r\n\r\n /**\r\n * 画面更新\r\n */\r\n const updateData = () => {\r\n setButtonEnable(false);\r\n let setPartDisDataList: SET_PART_DIS[] = [];\r\n console.debug([\"update start\"]);\r\n //部分放電一覧の取得\r\n GetPartialDischargeCollectionData()\r\n .then((res) => {\r\n console.debug(['--partialDischargeCollectionModel--', res]);\r\n setPartDisDataList = res.PartialDischargeCollectionItems;\r\n setPartDisDataList.forEach((r) => {\r\n r.isEdit = false;\r\n })\r\n setSetPartDisList(setPartDisDataList);\r\n //機器番号・名称 ComboBox取得\r\n setNameDevSetComboBoxItemList(\r\n res.NameDevSetLists.map((ci) => {\r\n return { index: ci.Key, name: ci.Disp };\r\n })\r\n );\r\n //部分放電判定_最大値異常内容 ComboBox取得\r\n setMclcTypIdMaxComboBoxItemList(\r\n res.MclcTypIdMaxDataList.map((ci) => {\r\n return { index: ci.Key, name: ci.Disp };\r\n })\r\n );\r\n //部分放電判定_PD強度異常内容 ComboBox取得\r\n setMclcTypIdPdComboBoxItemList(\r\n res.MclcTypIdPdDataList.map((ci) => {\r\n return { index: ci.Key, name: ci.Disp };\r\n })\r\n );\r\n if (res.PartialDischargeCollectionType !== 0) {\r\n setPartialDischargeIpEnabled(false);\r\n }\r\n setButtonEnable(false);\r\n }).catch(e => {\r\n setDlgmsg(t('PartialDischargeCollectionPage.データ取得中にエラーが発生しました', 'データ取得中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n console.debug([\"e\", e]);\r\n setButtonEnable(false);\r\n }).finally(() => {\r\n //setButtonEnable(true);\r\n console.debug([\"update end\"]);\r\n });\r\n props.editData.Target = { list: setPartDisList }\r\n props.editData.IsUpdate = false;\r\n };\r\n\r\n /**\r\n * 行変更通知\r\n * @returns\r\n */\r\n const changeSetPartDis = (target: SET_PART_DIS) => {\r\n console.debug(['ChangeSetPartDis - start', setPartDisList, target]);\r\n setSetPartDisList(\r\n setPartDisList.map((r) => (r.SET_NO === target.SET_NO) ? target : r)\r\n )\r\n props.editData.Target = { list: setPartDisList }\r\n props.editData.IsUpdate = true;\r\n setButtonEnable(true);\r\n };\r\n\r\n /**\r\n * 保存アクション\r\n * @returns \r\n */\r\n const saveAction = () => {\r\n if (props.editData.IsUpdate === false) {\r\n return;\r\n }\r\n let changeSetPartDisList: SET_PART_DIS[] = [];\r\n changeSetPartDisList = setPartDisList.filter((r) => r.isEdit == true);\r\n changeSetPartDisList.forEach((r) => {\r\n if (r.DEV_INDEX == 0) {\r\n r.RUN_FLG = undefined;\r\n r.LOG_START = undefined;\r\n r.ITM_NAME_NO = undefined;\r\n r.LMT_L = undefined;\r\n r.LMT_H = undefined;\r\n r.MCLC_TYP_ID_MAX = undefined;\r\n r.TYP_NO_MAX = undefined;\r\n r.LMT_L_PD = undefined;\r\n r.LMT_H_PD = undefined;\r\n r.MCLC_TYP_ID_PD = undefined;\r\n r.TYP_NO_PD = undefined;\r\n r.IP_ADR = undefined;\r\n }\r\n });\r\n setDlgmsg(t('PartialDischargeCollectionPage.設定内容を保存しますか', '設定内容を保存しますか?'));\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n\r\n saveProc(changeSetPartDisList).finally(() => {\r\n setButtonEnable(false);\r\n });\r\n })\r\n .cancel(() => {\r\n console.debug(t('PartialDischargeCollectionPage.キャンセル', 'キャンセル'));\r\n });\r\n };\r\n\r\n /**\r\n * 保存処理\r\n */\r\n const saveProc = (target: object): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const setPartDis = target as SET_PART_DIS[];\r\n if (setPartDis) {\r\n PutPartialDischargeCollectionData(setPartDis)\r\n .then((res) => {\r\n console.debug(`setSetPartDisList res : ${res}`);\r\n if (res.ResponceData.ErrorCode === ErrorCode.ERR_CODE_NONE) {\r\n setDlgmsg(t('PartialDischargeCollectionPage.保存が正常に終了しました', '保存が正常に終了しました'));\r\n actMsgDlg.open();\r\n props.editData.IsUpdate = false;\r\n updateData();\r\n console.debug('saveAction ok');\r\n resolve('done');\r\n }\r\n else {\r\n if (res.ResponceData.ErrorCode === ErrorCode.ERR_CODE_DEV_INDEX_DUPLICATION) {\r\n setDlgmsg(t('PartialDischargeCollectionPage.設定内容が不正です', '設定内容が不正です。')\r\n + `\\nNo.${res.ErrorSetNo}: `\r\n + t('PartialDischargeCollectionPage.機器番号_名称_重複', '(機器番号・名称:重複)')\r\n );\r\n actMsgDlg.open();\r\n }\r\n else if (res.ResponceData.ErrorCode === ErrorCode.ERR_CODE_NODATE) {\r\n setDlgmsg(t('PartialDischargeCollectionPage.設定内容が不正です', '設定内容が不正です。')\r\n + `\\nNo.${res.ErrorSetNo}: `\r\n + t('PartialDischargeCollectionPage.収集開始時刻_必須項目', '(収集開始時刻:必須項目)')\r\n );\r\n actMsgDlg.open();\r\n }\r\n else if (res.ResponceData.ErrorCode === ErrorCode.ERR_CODE_NOLIML_VALUE) {\r\n setDlgmsg(t('PartialDischargeCollectionPage.設定内容が不正です', '設定内容が不正です。')\r\n + `\\nNo.${res.ErrorSetNo}: `\r\n + t('PartialDischargeCollectionPage.部分放電判定_しきい値_軽故障_必須項目', '(部分放電判定 しきい値 軽故障:必須項目)')\r\n );\r\n actMsgDlg.open();\r\n }\r\n else if (res.ResponceData.ErrorCode === ErrorCode.ERR_CODE_NOLIMH_VALUE) {\r\n setDlgmsg(t('PartialDischargeCollectionPage.設定内容が不正です', '設定内容が不正です。')\r\n + `\\nNo.${res.ErrorSetNo}: `\r\n + t('PartialDischargeCollectionPage.部分放電判定_しきい値_重故障_必須項目', '(部分放電判定 しきい値 重故障:必須項目)')\r\n );\r\n actMsgDlg.open();\r\n }\r\n else if (res.ResponceData.ErrorCode === ErrorCode.ERR_CODE_NOLIMLPD_VALUE) {\r\n setDlgmsg(t('PartialDischargeCollectionPage.設定内容が不正です', '設定内容が不正です。')\r\n + `\\nNo.${res.ErrorSetNo}: `\r\n + t('PartialDischargeCollectionPage.部分放電判定_PD強度しきい値_軽故障_必須項目', '(部分放電判定 PD強度しきい値 軽故障:必須項目)')\r\n );\r\n actMsgDlg.open();\r\n }\r\n else if (res.ResponceData.ErrorCode === ErrorCode.ERR_CODE_NOLIMHPD_VALUE) {\r\n setDlgmsg(t('PartialDischargeCollectionPage.設定内容が不正です', '設定内容が不正です。')\r\n + `\\nNo.${res.ErrorSetNo}: `\r\n + t('PartialDischargeCollectionPage.部分放電判定_PD強度しきい値_重故障_必須項目', '(部分放電判定 PD強度しきい値 重故障:必須項目)')\r\n );\r\n actMsgDlg.open();\r\n }\r\n else if (res.ResponceData.ErrorCode === ErrorCode.ERR_CODE_LIM_VALUE) {\r\n setDlgmsg(t('PartialDischargeCollectionPage.設定内容が不正です', '設定内容が不正です。')\r\n + `\\nNo.${res.ErrorSetNo}: `\r\n + t('PartialDischargeCollectionPage.部分放電判定_しきい値_軽故障_重故障', '(部分放電判定 しきい値 軽故障 < 重故障)')\r\n );\r\n actMsgDlg.open();\r\n }\r\n else if (res.ResponceData.ErrorCode === ErrorCode.ERR_CODE_LIMPD_VALUE) {\r\n setDlgmsg(t('PartialDischargeCollectionPage.設定内容が不正です', '設定内容が不正です。')\r\n + `\\nNo.${res.ErrorSetNo}: `\r\n + t('PartialDischargeCollectionPage.部分放電判定_PD強度しきい値_軽故障_重故障', '(部分放電判定 PD強度しきい値 軽故障 < 重故障)')\r\n );\r\n actMsgDlg.open();\r\n }\r\n else if (res.ResponceData.ErrorCode === ErrorCode.ERR_CODE_NOMCLC_TYP_ID_MAX) {\r\n setDlgmsg(t('PartialDischargeCollectionPage.設定内容が不正です', '設定内容が不正です。')\r\n + `\\nNo.${res.ErrorSetNo}: `\r\n + t('PartialDischargeCollectionPage.部分放電判定_最大値異常内容No_必須項目', '(部分放電判定 最大値異常内容No:必須項目)')\r\n );\r\n actMsgDlg.open();\r\n }\r\n else if (res.ResponceData.ErrorCode === ErrorCode.ERR_CODE_NOMCLC_TYP_ID_PD) {\r\n setDlgmsg(t('PartialDischargeCollectionPage.設定内容が不正です', '設定内容が不正です。')\r\n + `\\nNo.${res.ErrorSetNo}: `\r\n + t('PartialDischargeCollectionPage.部分放電判定_PD強度異常内容No_必須項目', '(部分放電判定 PD強度異常内容No:必須項目)')\r\n );\r\n actMsgDlg.open();\r\n }\r\n else if (res.ResponceData.ErrorCode === ErrorCode.ERR_CODE_NOIPADR && partialDischargeIpEnabled === true) {\r\n setDlgmsg(t('PartialDischargeCollectionPage.設定内容が不正です', '設定内容が不正です。')\r\n + `\\nNo.${res.ErrorSetNo}: `\r\n + t('PartialDischargeCollectionPage.IPアドレス_必須項目', '(IPアドレス:必須項目)')\r\n );\r\n actMsgDlg.open();\r\n }\r\n else if (res.ResponceData.ErrorCode === ErrorCode.ERR_CODE_IPADR_INCORRECT && partialDischargeIpEnabled === true) {\r\n setDlgmsg(t('PartialDischargeCollectionPage.設定内容が不正です', '設定内容が不正です。')\r\n + `\\nNo.${res.ErrorSetNo}: `\r\n + t('PartialDischargeCollectionPage.IPアドレス_書式不正', '(IPアドレス:書式不正)')\r\n );\r\n actMsgDlg.open();\r\n }\r\n setButtonEnable(true);\r\n }\r\n })\r\n .catch((error) => {\r\n setDlgmsg(t('PartialDischargeCollectionPage.保存中にエラーが発生しました', '保存中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n console.error('SetSetPartDisList : ' + error);\r\n setButtonEnable(true);\r\n })\r\n\r\n } else {\r\n reject('data error');\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * 画面遷移\r\n * @param param \r\n * @returns \r\n */\r\n const saveAction2 = (param: object): Promise => {\r\n //console.debug([\"--saveAction2 strat--\"]);\r\n return new Promise((resolve, reject) => {\r\n const sp = param as SaveParameter;\r\n //console.debug([\"--sp--\", sp]);\r\n let editList = sp.list.filter((r) => r.isEdit === true);\r\n editList.forEach((r) => {\r\n if (r.DEV_INDEX == 0) {\r\n r.RUN_FLG = undefined;\r\n r.LOG_START = undefined;\r\n r.ITM_NAME_NO = undefined;\r\n r.LMT_L = undefined;\r\n r.LMT_H = undefined;\r\n r.MCLC_TYP_ID_MAX = undefined;\r\n r.TYP_NO_MAX = undefined;\r\n r.LMT_L_PD = undefined;\r\n r.LMT_H_PD = undefined;\r\n r.MCLC_TYP_ID_PD = undefined;\r\n r.TYP_NO_PD = undefined;\r\n r.IP_ADR = undefined;\r\n }\r\n });\r\n // console.debug([\"--editList--\", editList]);\r\n setButtonEnable(false);\r\n saveProc(editList)\r\n .then((r) => {\r\n props.editData.IsUpdate = false;\r\n console.debug('saveAction ok');\r\n resolve('done');\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * 中止アクション\r\n */\r\n const cancelAction = () => {\r\n if (props.editData.IsUpdate) {\r\n setDlgmsg(\r\n t(\r\n 'PartialDischargeCollectionPage.保存していないデータを破棄します\\nよろしいですか',\r\n '保存していないデータを破棄します。\\nよろしいですか?'\r\n )\r\n );\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n props.editData.IsUpdate = false;\r\n updateData();\r\n props.editData.UpdateCancel();\r\n })\r\n .cancel(() => { });\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n No\r\n {t('PartialDischargeCollectionPage.実行', '実行')}\r\n {t('PartialDischargeCollectionPage.機器番号_名称', '機器番号・名称')}\r\n {partialDischargeIpEnabled === true ?\r\n {t('PartialDischargeCollectionPage.IPアドレス', 'IPアドレス')}\r\n : null\r\n }\r\n {t('PartialDischargeCollectionPage.収集開始時刻', '収集開始時刻')}\r\n \r\n
\r\n \r\n {t('PartialDischargeCollectionPage.部分放電判定_しきい値', '部分放電判定 しきい値[V]')}\r\n \r\n \r\n {t('PartialDischargeCollectionPage.軽故障', '軽故障')}\r\n {t('PartialDischargeCollectionPage.重故障', '重故障')}\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {t('PartialDischargeCollectionPage.部分放電判定_PD強度しきい値', '部分放電判定 PD強度しきい値[V]')}\r\n \r\n \r\n {t('PartialDischargeCollectionPage.軽故障', '軽故障')}\r\n {t('PartialDischargeCollectionPage.重故障', '重故障')}\r\n \r\n
\r\n
\r\n {t('PartialDischargeCollectionPage.部分放電判定_最大値異常内容No', '部分放電判定\\n最大値異常内容No')}\r\n {t('PartialDischargeCollectionPage.部分放電判定_PD強度異常内容No', '部分放電判定\\nPD強度異常内容No')}\r\n \r\n \r\n \r\n {setPartDisList.map((row, index) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {cfmdlg}\r\n {msgdlg}\r\n \r\n )\r\n}\r\n\r\nexport default PartialDischargeCollectionPage;","export type ComboItem = {\r\n Key: number;\r\n Disp: string;\r\n Tag?: any; //付加情報\r\n}\r\n\r\n/**\r\n * SET_PART_DISテーブル\r\n */\r\nexport type SET_PART_DIS = {\r\n /**PLCNo. を取得または設定します。 */\r\n PLC_NO: number;\r\n /**シーケンスNo. を取得または設定します。 */\r\n SET_NO: number;\r\n /**実行フラグ を取得または設定します。 */\r\n RUN_FLG?: number;\r\n /**機器INDEX を取得または設定します。 */\r\n DEV_INDEX?: number;\r\n /**項目名称No. を取得または設定します。 */\r\n ITM_NAME_NO?: number;\r\n /**ロギング開始時刻 を取得または設定します。 */\r\n LOG_START?: Date;\r\n /**部分放電判定閾値(軽故障) を取得または設定します。 */\r\n LMT_L?: number;\r\n /**部分放電判定閾値(重故障) を取得または設定します。 */\r\n LMT_H?: number;\r\n /**最大値演算種別ID */\r\n MCLC_TYP_ID_MAX?: number;\r\n /**最大値異常内容No. */\r\n TYP_NO_MAX?: number;\r\n /**部分放電判定PD強度閾値(軽故障) を取得または設定します。 */\r\n LMT_L_PD?: number;\r\n /**部分放電判定PD強度閾値(重故障) を取得または設定します。 */\r\n LMT_H_PD?: number;\r\n /**PD強度演算種別ID */\r\n MCLC_TYP_ID_PD?: number;\r\n /**PD強度異常内容No. */\r\n TYP_NO_PD?: number;\r\n /**IPアドレス を取得または設定します。 */\r\n IP_ADR?: string;\r\n\r\n //変更フラグ\r\n isEdit: boolean;\r\n};\r\n\r\n/** レスポンス情報 */\r\nexport type ResponceDataType = {\r\n ResponseCode: number;\r\n ErrorCode: number;\r\n ResponseMessage: string;\r\n ErrorMessage: string;\r\n};\r\n\r\nexport type PartialDischargeCollectionModel = {\r\n PartialDischargeCollectionItems: SET_PART_DIS[];\r\n NameDevSetLists: ComboItem[];\r\n MclcTypIdMaxDataList: ComboItem[];\r\n MclcTypIdPdDataList: ComboItem[];\r\n ResponceData: ResponceDataType;\r\n PartialDischargeCollectionType: number;\r\n}\r\n\r\nexport type PartialDischargeResponceDataModel = {\r\n ErrorSetNo: number;\r\n ResponceData: ResponceDataType;\r\n}\r\n/**\r\n * 部分放電一覧の取得\r\n * @returns \r\n */\r\nexport const GetPartialDischargeCollectionData = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/PartialDischargeCollection/\")\r\n .then((res) => {\r\n console.debug([\"res\", res]);\r\n if (!res.ok) {\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n console.debug([\"message\", message]);\r\n throw new Error(message);\r\n\r\n }\r\n else {\r\n console.debug([\"res.json\", res]);\r\n return res.json();\r\n }\r\n })\r\n .then((result: PartialDischargeCollectionModel) => {\r\n console.debug([\"then result\", result]);\r\n if (result != null) {\r\n if (result !== null) {\r\n console.debug([\"GetPartialDischargeCollectionData - ok\", result]);\r\n }\r\n resolve(result);\r\n }\r\n else {\r\n console.debug([\"Invalidate response\", result]);\r\n reject('Invalidate response');\r\n }\r\n })\r\n .catch((error) => {\r\n console.debug([\"error\", error]);\r\n console.error(error.status);\r\n console.error(error);\r\n reject(error);\r\n })\r\n })\r\n\r\n}\r\n\r\n/**\r\n * 部分放電一覧の書換え\r\n * @param setPartDisList \r\n * @returns \r\n */\r\nexport const PutPartialDischargeCollectionData = (setPartDisList: SET_PART_DIS[]): Promise => {\r\n //console.debug(['SetSetPartDisList()', list]);\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/PartialDischargeCollection\", {\r\n method: 'put',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(setPartDisList),\r\n })\r\n .then((res) => {\r\n if (!res.ok) {\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n reject(message);\r\n }\r\n return res.json();\r\n })\r\n .then((result: PartialDischargeResponceDataModel) => {\r\n console.debug([\"PutPartialDischargeCollectionData - result \", result])\r\n resolve(result);\r\n })\r\n .catch((error) => {\r\n console.debug([\"error\", error]);\r\n console.error(error.status);\r\n console.error(error);\r\n reject(error);\r\n })\r\n });\r\n\r\n\r\n}\r\n\r\n","import React, { FC, useEffect, useState, Dispatch, SetStateAction, useContext } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { LogD } from '../../../function/LogLapper';\r\nimport { Grid } from '@material-ui/core';\r\nimport SelectSettings, { MenuContents } from '../../organisms/SelectSettings';\r\nimport CollectSetting from './CollectSetting/CollectSetting';\r\nimport DeviceRegist from './DeviceRegist/DeviceRegist';\r\nimport ItemRegist from './ItemRegist';\r\nimport AlmKindRegistPage from './AlmKindRegist/AlmKindRegistPage';\r\nimport IoTBoxSettingPage from './IoTBoxSetting/IoTBoxSettingPage';\r\nimport EMCSettingPage from './EMCSetting/EMCSettingPage';\r\nimport StudySettingPage from './StudySetting/StudySettingPage';\r\nimport ConanairManagementPage from './ConanairManagement/ConanairManagementPage';\r\nimport PartialDischargeCollectionPage from './PartialDischargeCollection/PartialDischargeCollectionPage';\r\n\r\nimport { useTranslation } from 'react-i18next';\r\nimport { AppContext } from '../../../App';\r\n\r\ntype MeasureSettingsProps = {};\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 300px)',\r\n },\r\n })\r\n);\r\n\r\nconst MeasureSettingsPage: React.FC = (props: MeasureSettingsProps) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n console.log('== MeasureSettings ==');\r\n const { login } = useContext(AppContext);\r\n\r\n //コナンエア画面有効フラグ\r\n const conanairEnabled: boolean = login.GetSystemSettingModel.ConanairEnabled === 1 ? true : false;\r\n //Emcb画面有効フラグ\r\n const emcbEnabled: boolean = login.GetSystemSettingModel.EmcbEnabled === 1 ? true : false;\r\n //部分放電画面有効フラグ\r\n const partialDischargeEnabled: boolean = login.GetSystemSettingModel.PartialDischargeEnabled === 1 ? true : false;\r\n\r\n const menuList: MenuContents[] = [];\r\n\r\n menuList.push({\r\n name: t('MeasureSettingsPage.データ収集設定', 'データ収集設定'),\r\n component: CollectSetting,\r\n tag: 'Collect',\r\n });\r\n menuList.push({\r\n name: t('MeasureSettingsPage.異常種別登録', '異常種別登録'),\r\n component: AlmKindRegistPage,\r\n tag: 'AlarmKind',\r\n });\r\n menuList.push({\r\n name: t('MeasureSettingsPage.機器番号_名称登録', '機器番号・名称登録'),\r\n component: DeviceRegist,\r\n tag: 'Device',\r\n });\r\n menuList.push({ name: t('MeasureSettingsPage.項目名称登録', '項目名称登録'), component: ItemRegist, tag: 'Item' });\r\n if (emcbEnabled) {\r\n menuList.push({\r\n name: t('MeasureSettingsPage.EMCBPRO収集設定', 'EMCB-Pro-収集設定'),\r\n component: EMCSettingPage,\r\n tag: 'EMC',\r\n });\r\n }\r\n menuList.push({\r\n name: t('MeasureSettingsPage.学習設定', '学習設定'),\r\n component: StudySettingPage,\r\n tag: 'StudySetting',\r\n });\r\n if (conanairEnabled) {\r\n menuList.push({\r\n name: t('MeasureSettingsPage.コナンエアー管理画面', 'コナンエアー管理画面'),\r\n component: ConanairManagementPage,\r\n tag: 'ConanairManagement',\r\n });\r\n }\r\n if (partialDischargeEnabled) {\r\n menuList.push({\r\n name: t('MeasureSettingsPage.部分放電収集設定', '部分放電収集設定'),\r\n component: PartialDischargeCollectionPage,\r\n tag: 'PartialDischargeCollection',\r\n });\r\n }\r\n\r\n if (login.IsIoT) {\r\n // IoTの時は先頭に管理画面を追加\r\n menuList.splice(0, 0, {\r\n name: t('MeasureSettingsPage.IoTBox管理画面', 'IoTBox管理画面'),\r\n component: IoTBoxSettingPage,\r\n tag: 'IoT',\r\n });\r\n //console.debug(['★★★', index, menuList]);\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default MeasureSettingsPage;\r\n","import React, { useEffect, useState } from 'react';\r\nimport Button from '@material-ui/core/Button';\r\nimport { useTranslation } from 'react-i18next';\r\nimport OKCancelDialog from '../../atoms/Dialog/OKCancelDialog';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\ntype StudyButtonProps = {\r\n studyStatus: number;\r\n isStudyCheck: boolean;\r\n isStudyCancelCheck: boolean;\r\n isStudyCancelRun: boolean;\r\n studyCount: number;\r\n onClick: () => void;\r\n onCancelClick: () => void;\r\n};\r\n\r\nconst IoTDevListStudyButton: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const [studyStatus, setStudyStatus] = useState(props.studyStatus);\r\n const [isStudyCheck, setIsStudyCheck] = useState(props.isStudyCheck);\r\n const [isStudyCancelRun, setIsStudyCancelRun] = useState(props.isStudyCancelRun);\r\n //const [studyFlg, setStudyFlg] = useState(props.studyFlg);\r\n const [dialogOpen, setDialogOpen] = React.useState(false);\r\n const [showMessage, setShowMessage] = React.useState('');\r\n\r\n //学習 完了失敗未 以外の場合はキャンセル可能\r\n const isCancelCheck: boolean = props.isStudyCancelCheck;\r\n\r\n useEffect(() => {\r\n setStudyStatus(props.studyStatus);\r\n setIsStudyCheck(props.isStudyCheck);\r\n setIsStudyCancelRun(props.isStudyCancelRun);\r\n }, [props.studyStatus, props.isStudyCheck, props.isStudyCancelRun]);\r\n\r\n const getStudyButtonColor = (state?: number): string => {\r\n if (state == undefined) return 'silver';\r\n\r\n switch (state) {\r\n case 0: //学習中\r\n return 'royalblue';\r\n case 1: //学習完了\r\n return 'green';\r\n case 2: //学習前\r\n return 'royalblue';\r\n case 3: //次回学習待ち\r\n return 'royalblue';\r\n case 4: //学習失敗\r\n return 'red';\r\n case 5: //学習未\r\n return 'gray';\r\n default:\r\n return 'silver';\r\n }\r\n };\r\n\r\n const getStudyLabelColor = (state?: number): string => {\r\n if (state == undefined) return 'silver';\r\n\r\n switch (state) {\r\n case 0: //学習中\r\n return 'silver';\r\n case 1: //学習完了\r\n return 'silver';\r\n case 2: //学習前\r\n return 'silver';\r\n case 3: //次回学習待ち\r\n return 'silver';\r\n case 4: //学習失敗\r\n return 'silver';\r\n case 5: //学習未\r\n return 'silver';\r\n default:\r\n return 'silver';\r\n }\r\n };\r\n const getStudyButtonText = (state?: number, isStudyCancel?: boolean): string => {\r\n if (state == undefined) return t('StudyButton.不明', '不明');\r\n\r\n //学習キャンセル中はボタン名をキャンセル中とする\r\n if (isStudyCancel !== undefined && isStudyCancel === true) return t('StudyButton.キャンセル中', 'キャンセル中');\r\n\r\n switch (state) {\r\n case 0: //学習中\r\n return t('StudyButton.学習中', '学習中 ');\r\n case 1: //学習完了\r\n return t('StudyButton.学習完了', '学習完了');\r\n case 2: //学習前\r\n return t('StudyButton.学習前', '待機');\r\n case 3: //次回学習待ち\r\n return t('StudyButton.学習中', '学習中 ');\r\n case 4: //学習失敗\r\n return t('StudyButton.学習失敗', '学習失敗');\r\n case 5: //学習未\r\n return t('StudyButton.学習未', '学習未');\r\n case -1: //使用不可\r\n return t('StudyButton.使用不可', '使用不可');\r\n default:\r\n return t('StudyButton.不明', '不明');\r\n }\r\n };\r\n\r\n /**\r\n * OK処理\r\n */\r\n const handleDialogOkButton = () => {\r\n if (isCancelCheck) {\r\n setIsStudyCancelRun(true);\r\n props.onCancelClick();\r\n } else {\r\n props.onClick();\r\n //即学習中に状態を変える\r\n setStudyStatus(0);\r\n }\r\n setDialogOpen(false);\r\n };\r\n\r\n /**\r\n * 確認ダイアログ\r\n */\r\n const handleCheckDialogShow = () => {\r\n {\r\n isCancelCheck !== true\r\n ? setShowMessage(t('IoTDevListStudyButton.学習処理を実行します', '学習処理を実行しますか?'))\r\n : setShowMessage(t('IoTDevListStudyButton.学習処理をキャンセルしますか', '学習処理をキャンセルしますか?'));\r\n }\r\n\r\n setDialogOpen(true);\r\n };\r\n\r\n /**\r\n * ボタンラベル表示\r\n * @returns\r\n */\r\n const label_disv = () => {\r\n return (\r\n {\r\n handleCheckDialogShow();\r\n }}\r\n >\r\n {getStudyButtonText(studyStatus, isStudyCancelRun)}\r\n \r\n );\r\n };\r\n\r\n //console.debug(['- 画面描画開始 -', props]);\r\n //学習中の場合ボタン操作を可能に変更\r\n //次回学習待ちの時だけキャンセルができるため、ボタンを押せる状態にする\r\n return (\r\n
\r\n {isStudyCheck === true || isCancelCheck === true ? (\r\n {\r\n handleCheckDialogShow();\r\n }}\r\n >\r\n {getStudyButtonText(studyStatus, isStudyCancelRun)}\r\n \r\n ) : (\r\n label_disv()\r\n )}\r\n handleDialogOkButton()}\r\n onCancel={() => setDialogOpen(false)}\r\n title={t('IoTDevListStudyButton.確認', '確認')}\r\n okText={t('IoTDevListStudyButton.OK', 'OK')}\r\n cancelText={t('IoTDevListStudyButton.キャンセル', 'キャンセル')}\r\n maxWidth={'sm'}\r\n >\r\n {showMessage}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default IoTDevListStudyButton;\r\n","import { CollectionStatsuType, LearnStatType } from \"../../../Constant\";\r\nimport { NAME_DEV_SET } from '../../../function/NameDevSetModel';\r\nimport { ALM_KIND_SET, ALM_SMM_DAT } from '../../molecules/Grid/AlarmGrid';\r\n\r\nexport type IOT_SET = {\r\n IMSI_NO: string;\r\n DEV_INDEX: string;\r\n RUN_FLG: string;\r\n LOG_SEC: string;\r\n LOG_MIN: string;\r\n LOG_HOUR: string;\r\n LOG_DAY: string;\r\n LOG_MONTH: string;\r\n LOG_DOW: string;\r\n HEALTH_SEC: string;\r\n HEALTH_MIN: string;\r\n HEALTH_HOUR: string;\r\n HEALTH_DAY: string;\r\n HEALTH_MONTH: string;\r\n HEALTH_DOW: string;\r\n ERRORLOG_SEC: string;\r\n ERRORLOG_MIN: string;\r\n ERRORLOG_HOUR: string;\r\n ERRORLOG_DAY: string;\r\n ERRORLOG_MONTH: string;\r\n ERRORLOG_FLG: CollectionStatsuType;\r\n ERRORLOG_DOW: string;\r\n MOBILE_BATTERY: number;\r\n LITHIUM_BATTERY: number;\r\n LOG_NEW?: Date;\r\n LOG_NEXT?: Date;\r\n HEALTH_NEW?: Date;\r\n HEALTH_NEXT?: Date;\r\n ERRORLOG_NEW?: Date;\r\n ERRORLOG_NEXT?: Date;\r\n SET_VER: string;\r\n HEALTH_FLG: CollectionStatsuType;\r\n HEALTH_CODE: string;\r\n GET_FLG?: CollectionStatsuType;\r\n IOT_SET_FLG?: number;\r\n STUDY_FLG?: number;\r\n MEMO: string;\r\n STUDY_NEW?: Date;\r\n STUDY_NEXT?: Date;\r\n STUDY_COUNT?: number;\r\n STUDY_STATUS?: number;\r\n ALM_KIND?: number;\r\n LOCAL_VER: string;\r\n AUTO_RETRY_TIME?: Date;\r\n AUTO_RETRY_COUNT?: number;\r\n}\r\n\r\n\r\nexport type V_IOTBOX_DEV_LIST = {\r\n IMSI_NO: string;\r\n STUDY_FLG?: number;\r\n DEV_INDEX: number;\r\n DEV_NO: string;\r\n DEV_NAME: string;\r\n IOT_SET_FLG?: number;\r\n LOG_NEW?: Date;\r\n LOG_NEXT?: Date;\r\n GET_FLG?: CollectionStatsuType;\r\n IOT_SET: IOT_SET;\r\n NAME_DEV_SET: NAME_DEV_SET;\r\n IS_MANUAL_COLRECT: boolean;\r\n IS_STUDY_CHECK: boolean;\r\n IS_STUDY_CANCEL_CHECK: boolean;\r\n IS_STUDY_CANCEL_RUN: boolean;\r\n SENSOR_STATUS: number;\r\n //以下DEV_STATUS\r\n COL_MODE?: number;\r\n STATUS?: number;\r\n LEARN_STAT?: LearnStatType;\r\n};\r\nexport type IoTBoxDeviceLists = {\r\n //V_IOTBOX_DEV_LIST_DISP: V_IOTBOX_DEV_LIST;\r\n V_IOTBOX_DEV_LISTS: V_IOTBOX_DEV_LIST[];\r\n};\r\n\r\nexport type IotBoxAlarmData = {\r\n ALM_SMM_DAT: ALM_SMM_DAT;\r\n ALM_KIND_SET: ALM_KIND_SET;\r\n};\r\n\r\n/**\r\n * IoTBox機器一覧取得\r\n * @returns\r\n */\r\nexport const GetIoTBoxDeviceLists = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const url = 'api/IoTBoxDeviceList?';\r\n var param = \"\";\r\n fetch(`${url}${param}`)\r\n .then((res) => res.json())\r\n .then((result: IoTBoxDeviceLists) => {\r\n if (deviceListValidate(result)) {\r\n //機器INDEXソート\r\n const sortedList = result.V_IOTBOX_DEV_LISTS.sort(function (a, b) {\r\n return a.DEV_INDEX - b.DEV_INDEX;\r\n });\r\n result.V_IOTBOX_DEV_LISTS = sortedList;\r\n console.debug(['Get result Data', 'api/IoTBoxDeviceList?', result]);\r\n resolve(result);\r\n } else {\r\n reject('Invalidate response');\r\n }\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\nconst deviceListValidate = (data: IoTBoxDeviceLists) => {\r\n if (data == undefined) return false;\r\n return true;\r\n};\r\n\r\n/**\r\n * IoTBox データ収集(手動)開始\r\n * @param imsiNo\r\n * @returns\r\n */\r\nexport const SetInstructManualCollection = (imsiNo: string): Promise => {\r\n //console.debug(['data', imsiNo]);\r\n return new Promise((resolve, reject) => {\r\n fetch('api/IoTBoxSetting/InstructManualCollection', {\r\n method: 'put',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(imsiNo),\r\n })\r\n .then((res) => {\r\n console.debug(['res', res]);\r\n resolve(res.status);\r\n })\r\n .catch(err => {\r\n console.debug(['reason', err]);\r\n reject(err);\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * IoTBox 学習モード開始\r\n * @param imsiNo\r\n * @returns\r\n */\r\nexport const SetStudyCollection = (imsiNo: string): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch('api/IoTBoxSetting/StudyCollection', {\r\n method: 'put',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(imsiNo),\r\n })\r\n .then((res) => {\r\n console.debug(['res', res]);\r\n resolve(res.status);\r\n })\r\n .catch(err => {\r\n console.debug(['reason', err]);\r\n reject(err);\r\n });\r\n });\r\n}\r\n/**\r\n * 学習処理 キャンセル\r\n * @param imsiNo\r\n * @returns\r\n */\r\nexport const cancelStudyCollection = (imsiNo: string): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch('api/IoTBoxSetting/CancelStudyCollection', {\r\n method: 'put',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(imsiNo),\r\n })\r\n .then((res) => res.json())\r\n .then((res) => {\r\n console.debug(['res', res])\r\n resolve(res);\r\n })\r\n .catch(err => {\r\n console.debug(['reason', err]);\r\n reject(err);\r\n })\r\n\r\n })\r\n\r\n}\r\n\r\n/**\r\n * IotBoxエラー情報取得\r\n * @returns\r\n */\r\nexport const GetIoTBoxErrorList = (imsiNo: string): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const url = 'api/AlarmSummary/IoTAlarmList?';\r\n var param = `imsiNo=${imsiNo}`;\r\n fetch(`${url}${param}`)\r\n .then((res) => res.json())\r\n .then((result: IotBoxAlarmData[]) => {\r\n console.debug(`${url}${param}`);\r\n console.debug(['GetIoTBoxErrorList result', result]);\r\n resolve(result);\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\nexport const GetStatuserrorList = (imsiNo: string): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const url = 'api/AlarmSummary/StatusAlarmList?'\r\n var param = `imsiNo=${imsiNo}`;\r\n fetch(`${url}${param}`)\r\n .then((res) => res.json())\r\n .then((result: IotBoxAlarmData[]) => {\r\n console.debug(`${url}${param}`);\r\n console.debug(['GetStatuserrorList result', result]);\r\n resolve(result);\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n });\r\n });\r\n}\r\n","import { createStyles, makeStyles, Theme, createTheme } from '@material-ui/core/styles';\r\n\r\nconst defaultTheme = createTheme({});\r\nconst { pxToRem } = defaultTheme.typography;\r\n\r\n\r\nexport const TableUseStyle = makeStyles(\r\n createStyles({\r\n //テーブルヘッダセル\r\n headerCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n },\r\n bodyCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n padding: '5px',\r\n minWidth: '100px',\r\n },\r\n bodyCellCenter: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n padding: '0px',\r\n height: '10px',\r\n },\r\n //収集失敗\r\n bodyCellError: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n padding: '5px',\r\n minWidth: '100px',\r\n color: '#ff0000',\r\n },\r\n //収集中\r\n bodyCellRun: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n padding: '5px',\r\n minWidth: '100px',\r\n color: '#00008b',\r\n },\r\n //収集完了\r\n bodyCellEnd: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n padding: '5px',\r\n minWidth: '100px',\r\n color: '#006400',\r\n },\r\n bodyRow: {\r\n\r\n '&.Mui-selected, &.Mui-selected:hover': {\r\n //背景色\r\n backgroundColor: '#7fffd4',\r\n '& > .MuiTableCell-root': {\r\n //文字色\r\n color: 'brack',\r\n },\r\n },\r\n },\r\n //テキスト\r\n textField: {\r\n flexGrow: 1,\r\n height: '100%',\r\n width: '100%',\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n textAlign: \"center\",\r\n },\r\n })\r\n);\r\n\r\n\r\nexport const IoTDevListStyle = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 274px)',\r\n },\r\n //画面ヘッダ部ペーパ^\r\n paperRoot: {\r\n maxWidth: '1100px',\r\n minWidth: '1100px',\r\n padding: '3px',\r\n },\r\n buttonRoot: {\r\n minWidth: '130px',\r\n },\r\n //画面ヘッダ部ラジオボタン\r\n muiTypography: {\r\n fontSize: pxToRem(14),\r\n lineHeight: 1.66,\r\n },\r\n //画面で使用しているチェックボックス\r\n checkBox: {\r\n padding: '0px',\r\n },\r\n spacingXs1: {\r\n minWidth: '1440px',\r\n },\r\n buttonStyle: {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n },\r\n\r\n })\r\n);\r\n\r\nexport const FooterBaseStyle = makeStyles(\r\n createStyles({\r\n buttonStyle: {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n },\r\n })\r\n);\r\n","import React, { useEffect, useState } from 'react';\r\nimport Button from '@material-ui/core/Button';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport Radio, { RadioProps } from '@material-ui/core/Radio';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { IoTDevListStyle } from './IoTDevListStyle';\r\n\r\ntype Props = {\r\n onClickUUpdateScreenButton: () => void;\r\n};\r\n\r\nconst IoTDevListFooter: React.FC = (props) => {\r\n const pageStyle = IoTDevListStyle();\r\n const { t } = useTranslation();\r\n return (\r\n \r\n \r\n props.onClickUUpdateScreenButton()}\r\n >\r\n {t('IoTDevListFooter.画面更新', '画面更新')}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default IoTDevListFooter;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport Button from '@material-ui/core/Button';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { V_IOTBOX_DEV_LIST, GetIoTBoxErrorList, IotBoxAlarmData } from './IoTDevList';\r\n\r\nimport { IoTDevListStyle, TableUseStyle } from './IoTDevListStyle';\r\ntype IotDevListHealthyErrorListDialogProps = {\r\n open: boolean;\r\n onClose: () => void;\r\n iotBoxData: V_IOTBOX_DEV_LIST;\r\n};\r\n\r\nconst IotDevListHealthyErrorListDialog: React.FC = (props) => {\r\n const tableStyle = TableUseStyle();\r\n const pageStyle = IoTDevListStyle();\r\n const { t } = useTranslation();\r\n const [iotBoxAlarmDataList, setIoTBoxAlarmDataList] = useState([]);\r\n const [buttonEnable, setButtonEnable] = useState(true);\r\n\r\n useEffect(() => {\r\n if (props.open === true) {\r\n setButtonEnable(false);\r\n console.debug(['IotDevListHealthyErrorListDialog useEffect']);\r\n GetIoTBoxErrorList(props.iotBoxData.IMSI_NO)\r\n .then((r) => {\r\n setIoTBoxAlarmDataList(r);\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n } else {\r\n setIoTBoxAlarmDataList([]);\r\n }\r\n }, [props.open]);\r\n\r\n /**\r\n * エラー区分\r\n * @param sate\r\n * @returns\r\n */\r\n const getAlmKindText = (kind: Number): string => {\r\n if (kind == undefined) return t('IotDevListHealthyErrorListDialog.不明', '不明');\r\n switch (kind) {\r\n case 1:\r\n return t('IotDevListHealthyErrorListDialog.重故障', '重故障');\r\n case 2:\r\n return t('IotDevListHealthyErrorListDialog.軽故障', '軽故障');\r\n case 3:\r\n return t('IotDevListHealthyErrorListDialog.システム異常', 'システム異常');\r\n default:\r\n return t('IotDevListHealthyErrorListDialog.不明', '不明');\r\n }\r\n };\r\n return (\r\n \r\n \r\n {t('IotDevListHealthyErrorListDialog.TMBee-Boxアラームログ', 'TMBee-Boxアラームログ')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {t('IotDevListHealthyErrorListDialog.項目名', '項目名')}\r\n \r\n \r\n {' '}\r\n {t('IotDevListHealthyErrorListDialog.区分', '区分')}\r\n \r\n \r\n {t('IotDevListHealthyErrorListDialog.アラームコード', 'アラームコード')}\r\n \r\n \r\n {t('IotDevListHealthyErrorListDialog.アラーム内容', 'アラーム内容')}\r\n \r\n \r\n \r\n \r\n {iotBoxAlarmDataList.map((row, index) => {\r\n return (\r\n \r\n {row.ALM_SMM_DAT.ITM_NAME}\r\n {getAlmKindText(row.ALM_SMM_DAT.ALM_KIND)}\r\n {row.ALM_SMM_DAT.ALM_CODE}\r\n {row.ALM_SMM_DAT.MESSAGE}\r\n \r\n );\r\n })}\r\n \r\n
\r\n
\r\n
\r\n \r\n {\r\n props.onClose();\r\n }}\r\n >\r\n {t('IotDevListHealthyErrorListDialog.閉じる', '閉じる')}\r\n \r\n \r\n
\r\n );\r\n};\r\nexport default IotDevListHealthyErrorListDialog;\r\n","import React, { useEffect, useState } from 'react';\r\nimport Button from '@mui/material/Button';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport Radio, { RadioProps } from '@material-ui/core/Radio';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { IoTDevListStyle } from './IoTDevListStyle';\r\nimport {\r\n GetIoTBoxDeviceLists,\r\n IoTBoxDeviceLists,\r\n SetInstructManualCollection,\r\n V_IOTBOX_DEV_LIST,\r\n SetStudyCollection,\r\n} from './IoTDevList';\r\n\r\nimport IotDevListHealthyErrorListDialog from './IotDevListHealthyErrorListDialog';\r\n\r\ntype IoTDevListHealthyButtonProps = {\r\n iotBoxData: V_IOTBOX_DEV_LIST;\r\n};\r\n\r\n/**\r\n * ボタンの色と文字の色の設定\r\n * @param kind\r\n * @returns\r\n */\r\nconst getButtonColor = (kind: number | undefined): string => {\r\n if (kind == undefined) return 'gray';\r\n\r\n switch (kind) {\r\n case 0: //正常\r\n return 'green';\r\n case 1: //軽故障\r\n return '#E4C068';\r\n case 2: //重故障\r\n return 'red';\r\n case 3: //システム異常\r\n return 'red';\r\n case -1: //未応答\r\n return 'gray';\r\n default:\r\n //不明\r\n return 'gray';\r\n }\r\n};\r\n\r\nconst IoTDevListHealthyButton: React.FC = (props) => {\r\n const pageStyle = IoTDevListStyle();\r\n const { t } = useTranslation();\r\n const [openErrorList, setOpenErrorList] = useState(false);\r\n\r\n /**\r\n * ヘルシーチェック状態\r\n * @param sate\r\n * @returns\r\n */\r\n const getButtonText = (kind: number | undefined): string => {\r\n if (kind == undefined) return t('IoTDevListGrid.不明', '不明');\r\n switch (kind) {\r\n case 0:\r\n return t('IoTDevListGrid.正常', '正常');\r\n case 1:\r\n return t('IoTDevListGrid.軽故障', '軽故障');\r\n case 2:\r\n return t('IoTDevListGrid.重故障', '重故障');\r\n case 3:\r\n return t('IoTDevListGrid.システム異常', 'システム異常');\r\n case -1:\r\n return t('IoTDevListGrid.未応答', '未応答');\r\n default:\r\n return t('IoTDevListGrid.不明', '不明');\r\n }\r\n };\r\n /**\r\n * エラーログ日時選択ダイアログOPEN\r\n */\r\n const errorListDialogOpenAction = () => {\r\n setOpenErrorList(true);\r\n };\r\n\r\n /**\r\n * エラーログ日時選択閉じる\r\n */\r\n const errorListDialogCloseAction = () => {\r\n setOpenErrorList(false);\r\n };\r\n\r\n return (\r\n <>\r\n {(props.iotBoxData.IOT_SET.ALM_KIND ?? 0) == 0 ? (\r\n \r\n {getButtonText(props.iotBoxData.IOT_SET.ALM_KIND)}\r\n
\r\n ) : (\r\n errorListDialogOpenAction()}\r\n >\r\n {getButtonText(props.iotBoxData.IOT_SET.ALM_KIND)}\r\n \r\n )}\r\n\r\n \r\n \r\n );\r\n};\r\n\r\nexport default IoTDevListHealthyButton;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport Button from '@material-ui/core/Button';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { V_IOTBOX_DEV_LIST, GetStatuserrorList, IotBoxAlarmData } from './IoTDevList';\r\nimport { IoTDevListStyle, TableUseStyle } from './IoTDevListStyle';\r\n\r\ntype IotDevListStatErrorDialogProps = {\r\n open: boolean;\r\n onClose: () => void;\r\n iotBoxData: V_IOTBOX_DEV_LIST;\r\n};\r\n\r\nconst IotDevListStatErrorDialog: React.FC = (props) => {\r\n const tableStyle = TableUseStyle();\r\n const pageStyle = IoTDevListStyle();\r\n const { t } = useTranslation();\r\n const [buttonEnable, setButtonEnable] = useState(true);\r\n const [iotBoxAlarmDataList, setIoTBoxAlarmDataList] = useState([]);\r\n\r\n useEffect(() => {\r\n if (props.open === true) {\r\n setButtonEnable(false);\r\n console.debug(['IotDevListStatErrorDialog useEffect']);\r\n GetStatuserrorList(props.iotBoxData.IMSI_NO)\r\n .then((r) => {\r\n setIoTBoxAlarmDataList(r);\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n } else {\r\n setIoTBoxAlarmDataList([]);\r\n }\r\n }, [props.open]);\r\n\r\n /**\r\n * エラー区分\r\n * @param sate\r\n * @returns\r\n */\r\n const getAlmKindText = (kind: Number): string => {\r\n if (kind == undefined) return t('IotDevListStatErrorDialog.不明', '不明');\r\n switch (kind) {\r\n case 1:\r\n return t('IotDevListStatErrorDialog.重故障', '重故障');\r\n case 2:\r\n return t('IotDevListStatErrorDialog.軽故障', '軽故障');\r\n default:\r\n return t('IotDevListStatErrorDialog.不明', '不明');\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n {t('IotDevListStatErrorDialog.ステータスアラームログ', 'ステータスアラームログ')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {' '}\r\n {t('IotDevListStatErrorDialog.区分', '区分')}\r\n \r\n \r\n {t('IotDevListStatErrorDialog.項目名称', '項目名称')}\r\n \r\n \r\n {t('IotDevListStatErrorDialog.異常内容', '異常内容')}\r\n \r\n \r\n {t('IotDevListStatErrorDialog.メッセージ', 'メッセージ')}\r\n \r\n \r\n \r\n \r\n {iotBoxAlarmDataList.map((row, index) => {\r\n return (\r\n \r\n {getAlmKindText(row.ALM_SMM_DAT.ALM_KIND)}\r\n {row.ALM_SMM_DAT.ITM_NAME}\r\n {row.ALM_KIND_SET == null ? \"\" : row.ALM_KIND_SET.TYP_NAME}\r\n {row.ALM_SMM_DAT.MESSAGE}\r\n \r\n );\r\n })}\r\n \r\n
\r\n
\r\n
\r\n \r\n {\r\n props.onClose();\r\n }}\r\n >\r\n {t('IotDevListStatErrorDialog.閉じる', '閉じる')}\r\n \r\n \r\n
\r\n \r\n )\r\n}\r\n\r\nexport default IotDevListStatErrorDialog;","import React, { useEffect, useState } from 'react';\r\nimport Button from '@mui/material/Button';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { IoTDevListStyle } from './IoTDevListStyle';\r\nimport {\r\n GetIoTBoxDeviceLists,\r\n IoTBoxDeviceLists,\r\n SetInstructManualCollection,\r\n V_IOTBOX_DEV_LIST,\r\n SetStudyCollection,\r\n} from './IoTDevList';\r\nimport IotDevListStatErrorDialog from './IotDevListStatErrorDialog';\r\n\r\ntype IotDevListStatButtonProps = {\r\n iotBoxData: V_IOTBOX_DEV_LIST;\r\n};\r\n\r\nconst IotDevListStatButton: React.FC = (props) => {\r\n const pageStyle = IoTDevListStyle();\r\n const { t } = useTranslation();\r\n const [openErrorList, setOpenErrorList] = useState(false);\r\n\r\n /**\r\n * 状態の色\r\n * @param sate\r\n * @returns\r\n */\r\n const getSENSOR_COLMNGSStatusColor = (sate?: number): string => {\r\n if (sate == undefined) return 'silver';\r\n\r\n switch (sate) {\r\n case 0: //正常\r\n return 'green';\r\n case 1: //軽故障\r\n return '#E4C068';\r\n case 2: //重故障\r\n return 'red';\r\n case 4: //停止中\r\n return 'silver';\r\n default:\r\n //不明\r\n return 'silver';\r\n }\r\n };\r\n\r\n /**\r\n * ラベル時の文字色取得\r\n * @param sate\r\n * @returns\r\n */\r\n const getLabelTextColor = (sate?: number): string => {\r\n let displayColor = sate == 1 ? 'black' : 'white';\r\n return displayColor;\r\n };\r\n\r\n /**\r\n * ボタンの文字色取得\r\n * @param sate\r\n * @returns\r\n */\r\n const getButtonTextColor = (sate?: number): string => {\r\n if (sate == undefined) return 'silver';\r\n\r\n switch (sate) {\r\n case 0: //正常\r\n return 'green';\r\n case 1: //軽故障\r\n return '#E4C068';\r\n case 2: //重故障\r\n return 'red';\r\n case 4: //停止中\r\n return 'silver';\r\n default:\r\n //不明\r\n return 'silver';\r\n }\r\n };\r\n\r\n /**\r\n * 状態の表示文字\r\n * @param sate\r\n * @returns\r\n */\r\n const getSENSOR_COLMNGSStatus = (sate?: number): string => {\r\n if (sate == undefined) return t('IoTDevListGrid.不明', '不明');\r\n\r\n switch (sate) {\r\n case 0:\r\n return t('IoTDevListGrid.正常', '正常');\r\n case 1:\r\n return t('IoTDevListGrid.軽故障', '軽故障');\r\n case 2:\r\n return t('IoTDevListGrid.重故障', '重故障');\r\n case 4:\r\n return t('IoTDevListGrid.停止中', '停止中');\r\n default:\r\n return t('IoTDevListGrid.不明', '不明');\r\n }\r\n };\r\n\r\n /**\r\n * エラーログ日時選択ダイアログOPEN\r\n */\r\n const errorListDialogOpenAction = () => {\r\n setOpenErrorList(true);\r\n };\r\n\r\n /**\r\n * エラーログ日時選択閉じる\r\n */\r\n const errorListDialogCloseAction = () => {\r\n setOpenErrorList(false);\r\n };\r\n\r\n return (\r\n <>\r\n {/**軽故障・重故障の場合はボタンに変更、それ以外はラベル表示 */}\r\n {props.iotBoxData.SENSOR_STATUS !== 1 && props.iotBoxData.SENSOR_STATUS !== 2 ? (\r\n \r\n {getSENSOR_COLMNGSStatus(props.iotBoxData.SENSOR_STATUS)}\r\n
\r\n ) : (\r\n errorListDialogOpenAction()}\r\n >\r\n {getSENSOR_COLMNGSStatus(props.iotBoxData.SENSOR_STATUS)}\r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default IotDevListStatButton;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { Checkbox, Grid, Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Button from '@material-ui/core/Button';\r\nimport Button_mui from '@mui/material/Button';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport { GroupListType, GetAllGroupList } from '../../../function/GroupDataModel';\r\n\r\nimport DateTImeDiv from '../../atoms/Div/DateTImeDiv';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { TableBaseStyle } from '../../../baseStyle/tableBaseStyle';\r\n\r\nimport IoTDevListStudyButton from './IoTDevListStudyButton';\r\nimport IoTDevListLearnResultButton from '../../molecules/Button/DevListLearnResultButton';\r\nimport SimpleDialog from '../../atoms/Dialog/SimpleDialog';\r\nimport GropuListComGrid from '../../molecules/Grid/GropuListComGrid';\r\n\r\nimport { CollectionStatsuType, IOT_MACHINE_STATUS_OBSERVE_SPAN, LearnStatType } from '../../../Constant';\r\nimport {\r\n GetIoTBoxDeviceLists,\r\n IoTBoxDeviceLists,\r\n SetInstructManualCollection,\r\n V_IOTBOX_DEV_LIST,\r\n SetStudyCollection,\r\n cancelStudyCollection,\r\n} from './IoTDevList';\r\nimport IoTDevListFooter from './IoTDevListFooter';\r\nimport { useModal } from '../../../function/useModal';\r\nimport LearnResultDialog, { LearnResultDialogResponse } from '../../molecules/Dialog/LearnResultDialog';\r\nimport { IoTDevListStyle, TableUseStyle } from './IoTDevListStyle';\r\nimport IoTDevListHealthyButton from './IoTDevListHealthyButton';\r\nimport IotDevListStatButton from './IotDevListStatButton';\r\n\r\ntype Props = {\r\n tableContainerStyle: string;\r\n};\r\n\r\nconst ApiResponseCode = {\r\n DEFAULT: 200,\r\n SUCCESS: 204, //IoTBox手動収集 登録要求待ちレコード追加\r\n BAD_REQUEST: 400, //パラメータ異常\r\n NOT_ACCEPTABLE: 406, //状態チェック\r\n NOT_CANCEL_STATUDY_COUNT: 407, //学習カウント異常\r\n CANCEL_REQ_ALREADY_SEND: 408, //学習キャンセル済みエラー\r\n UPDATE_FAILURE: 500, //更新失敗\r\n SERVICE_UNAVAILABLE: 503, //ネットワーク接続失敗\r\n} as const;\r\ntype ApiResponseCode = typeof ApiResponseCode[keyof typeof ApiResponseCode];\r\n\r\n/**\r\n * IoTBox機器一覧\r\n * @param props\r\n * @returns\r\n */\r\nconst IoTDevListGrid: React.FC = (props) => {\r\n const tableBaseStyle = TableUseStyle();\r\n const baseClasses = TableBaseStyle();\r\n const pageStyle = IoTDevListStyle();\r\n const history = useHistory();\r\n const { t } = useTranslation(); //言語切り替え\r\n const [selectedID, setSelectedID] = useState(0);\r\n const [iotBoxdeviceArray, setIoTBoxDeviceArray] = useState();\r\n const [messageDialogOpen, setMessageDialogOpen] = React.useState(false);\r\n const [showMessage, setShowMessage] = React.useState('');\r\n const [open, setOpen] = React.useState(false);\r\n const [deviceIndex, setDeviceIndex] = React.useState(0);\r\n const [groupListInfo, setGroupListInfo] = useState({\r\n TM_TRD_GROUP_SETs: [],\r\n RT_TRD_GROUP_SETs: [],\r\n PH_CUR_GROUP_SETs: [],\r\n SIG_CMP_GROUP_SETs: [],\r\n SIGC_CMP_GROUP_SETs: [],\r\n FFT_CMP_GROUP_SETs: [],\r\n FFTC_CMP_GROUP_SETs: [],\r\n XY_CMP_GROUP_SETs: [],\r\n GroupListsComModels: [],\r\n TrendSettings: {\r\n MeasKinds: [],\r\n DeviceLists: [],\r\n ItemLists: [],\r\n DataKinds: [],\r\n AlarmKinds: [],\r\n AlarmLimits: [],\r\n DeviceUnitInfos: [],\r\n ColSetInfos: [],\r\n KIND_NO_NAME_SETs: [],\r\n JudgeSetSelect: [],\r\n MClcTypes: [],\r\n SetPartDisList: [],\r\n },\r\n PhCurSelectItems: [],\r\n DeviceSelects: [],\r\n DeviceConanSelects: [],\r\n XYDeviceSelects: [],\r\n });\r\n //学習結果ダイアログ\r\n const [flgLearnResDlg, learnResDlg] = useModal();\r\n\r\n useEffect(() => {\r\n console.debug('--- useEffect ---');\r\n getData();\r\n const interval = setInterval(() => {\r\n console.debug('--- setInterval ---');\r\n getData();\r\n }, IOT_MACHINE_STATUS_OBSERVE_SPAN); // intervals\r\n\r\n return () => {\r\n console.debug('--- clearInterval ---');\r\n clearInterval(interval);\r\n };\r\n }, []);\r\n\r\n /**\r\n * IoTBox機器一覧リスト取得\r\n */\r\n const getData = () => {\r\n GetIoTBoxDeviceLists().then((ret) => {\r\n //console.debug(['--- GetIoTBoxDeviceLists ret ---', ret]);\r\n setIoTBoxDeviceArray(ret);\r\n });\r\n };\r\n\r\n /**\r\n * 手動収集開始\r\n * @param e\r\n */\r\n const handleInstructManualCollection = (e: V_IOTBOX_DEV_LIST, index: number) => {\r\n console.debug(['handleInstructManualCollection()'], e.IMSI_NO, index);\r\n\r\n if (e.IOT_SET.LOCAL_VER !== e.IOT_SET.SET_VER) {\r\n setShowMessage(\r\n t(\r\n 'IoTDevListGrid.設定がAWSへUPLOADできていないため実行できません',\r\n '設定がAWSへUPLOADできていないため実行できません'\r\n )\r\n );\r\n setMessageDialogOpen(true);\r\n return;\r\n }\r\n // ボタンを無効化しておく\r\n if (iotBoxdeviceArray) {\r\n iotBoxdeviceArray.V_IOTBOX_DEV_LISTS[index].IS_MANUAL_COLRECT = false;\r\n iotBoxdeviceArray.V_IOTBOX_DEV_LISTS[index].IS_STUDY_CHECK = false;\r\n console.debug(['ボタン無効化 1', iotBoxdeviceArray.V_IOTBOX_DEV_LISTS]);\r\n setIoTBoxDeviceArray({ ...iotBoxdeviceArray });\r\n }\r\n\r\n SetInstructManualCollection(e.IMSI_NO)\r\n .then((status: number) => {\r\n console.debug(['status', status]);\r\n if (status != ApiResponseCode.SUCCESS) {\r\n // 手動収集開始失敗時\r\n if (iotBoxdeviceArray) {\r\n //iotBoxdeviceArray.V_IOTBOX_DEV_LISTS[index].GET_FLG = CollectionStatsuType.ERROR;\r\n iotBoxdeviceArray.V_IOTBOX_DEV_LISTS[index].IS_MANUAL_COLRECT = true;\r\n console.debug(['手動収集開始失敗', iotBoxdeviceArray.V_IOTBOX_DEV_LISTS]);\r\n setIoTBoxDeviceArray({ ...iotBoxdeviceArray });\r\n }\r\n // ダイアログ表示\r\n if (status == ApiResponseCode.SERVICE_UNAVAILABLE) {\r\n setShowMessage(t('IoTDevListGrid.ネットワーク接続エラー', 'ネットワーク接続エラー'));\r\n } else {\r\n setShowMessage(t('IoTDevListGrid.手動収集実行不可', '手動収集実行不可'));\r\n }\r\n setMessageDialogOpen(true);\r\n } else {\r\n // 手動収集開始成功時は収集中\r\n if (iotBoxdeviceArray) {\r\n iotBoxdeviceArray.V_IOTBOX_DEV_LISTS[index].GET_FLG = CollectionStatsuType.COLLECTING;\r\n iotBoxdeviceArray.V_IOTBOX_DEV_LISTS[index].IOT_SET.AUTO_RETRY_COUNT = 0;\r\n iotBoxdeviceArray.V_IOTBOX_DEV_LISTS[index].GET_FLG = CollectionStatsuType.COLLECTING;\r\n //console.debug(['手動収集開始成功', iotBoxdeviceArray.V_IOTBOX_DEV_LISTS]);\r\n setIoTBoxDeviceArray({ ...iotBoxdeviceArray });\r\n }\r\n }\r\n //resolve('done');\r\n })\r\n .catch((reason) => {\r\n //reject(reason);\r\n });\r\n };\r\n\r\n /**\r\n * 学習モード開始\r\n * @param e\r\n */\r\n const handleStudyCollection = (e: V_IOTBOX_DEV_LIST, index: number) => {\r\n console.debug(['handleStudyCollection()'], e.IMSI_NO, index);\r\n if (iotBoxdeviceArray) {\r\n iotBoxdeviceArray.V_IOTBOX_DEV_LISTS[index].IS_MANUAL_COLRECT = false;\r\n //iotBoxdeviceArray.V_IOTBOX_DEV_LISTS[index].IS_STUDY_CHECK = false;\r\n //iotBoxdeviceArray.V_IOTBOX_DEV_LISTS[index].STUDY_FLG = 1;\r\n iotBoxdeviceArray.V_IOTBOX_DEV_LISTS[index].IOT_SET.STUDY_STATUS = 2;\r\n setIoTBoxDeviceArray({ ...iotBoxdeviceArray });\r\n }\r\n\r\n SetStudyCollection(e.IMSI_NO)\r\n .then((status: number) => {\r\n console.debug(['status', status]);\r\n if (status !== ApiResponseCode.SUCCESS) {\r\n // ダイアログ表示\r\n if (status == ApiResponseCode.SERVICE_UNAVAILABLE) {\r\n setShowMessage(t('IoTDevListGrid.ネットワーク接続エラー', 'ネットワーク接続エラー'));\r\n } else {\r\n setShowMessage(t('IoTDevListStudyButton.学習機能実行不可', '学習機能実行条件がそろっていません'));\r\n }\r\n setMessageDialogOpen(true);\r\n }\r\n })\r\n .catch((reason) => {\r\n setShowMessage(t('IoTDevListStudyButton.学習機能実行不可', '学習機能実行条件がそろっていません'));\r\n setMessageDialogOpen(true);\r\n });\r\n };\r\n\r\n /**\r\n * 学習処理の中断処理\r\n * @param e\r\n * @param index\r\n */\r\n const CancelHandleStudyCollection = (e: V_IOTBOX_DEV_LIST, index: number) => {\r\n console.debug(['CancelHandleStudyCollection()'], e.IMSI_NO, index);\r\n\r\n cancelStudyCollection(e.IMSI_NO)\r\n .then((status: number) => {\r\n console.debug(['status', status]);\r\n if (status !== ApiResponseCode.DEFAULT) {\r\n // ダイアログ表示\r\n if (status == ApiResponseCode.SERVICE_UNAVAILABLE) {\r\n setShowMessage(t('IoTDevListGrid.ネットワーク接続エラー', 'ネットワーク接続エラー'));\r\n } else if (status == ApiResponseCode.NOT_CANCEL_STATUDY_COUNT) {\r\n setShowMessage(t('IoTDevListGrid.学習回数エラー', '最後の学習中の為キャンセルできません'));\r\n } else if (status == ApiResponseCode.CANCEL_REQ_ALREADY_SEND) {\r\n setShowMessage(t('IoTDevListGrid.学習キャンセル要求済み', '既に学習キャンセル要求済みです'));\r\n }\r\n } else {\r\n setShowMessage(t('IoTDevListStudyButton.学習機能キャンセル成功', '学習キャンセル要求をしました'));\r\n }\r\n setMessageDialogOpen(true);\r\n })\r\n .catch((reason) => {\r\n setShowMessage(t('IoTDevListStudyButton.学習機能キャンセル不可', '学習機能のキャンセルに失敗しました'));\r\n setMessageDialogOpen(true);\r\n });\r\n };\r\n\r\n /**\r\n * 画面更新ボタン\r\n */\r\n const handleupdateScreenAction = () => {\r\n console.debug('updateScreenAction()');\r\n getData();\r\n };\r\n\r\n /**\r\n * 収集結果\r\n * @param val\r\n * @returns\r\n */\r\n const collectionResult = (val?: CollectionStatsuType, retryStatus?: number): string => {\r\n if (val == undefined) return t('IoTDevListGrid.不明', '不明');\r\n\r\n let retryStatusVal: number = 0;\r\n if (retryStatus) {\r\n retryStatusVal = retryStatus;\r\n }\r\n\r\n switch (val) {\r\n case CollectionStatsuType.COLLECTING:\r\n switch (retryStatusVal) {\r\n case 0:\r\n return t('IoTDevListGrid.収集中', '収集中');\r\n default:\r\n return t('IoTDevListGrid.収集中_リトライ中', '収集中(リトライ中)');\r\n }\r\n\r\n case CollectionStatsuType.END:\r\n switch (retryStatusVal) {\r\n case 0:\r\n return t('IoTDevListGrid.完了', '完了');\r\n default:\r\n return t('IoTDevListGrid.リトライ中', 'リトライ中');\r\n }\r\n case CollectionStatsuType.ERROR:\r\n switch (retryStatusVal) {\r\n case 0:\r\n return t('IoTDevListGrid.失敗', '失敗');\r\n default:\r\n return t('IoTDevListGrid.リトライ中', 'リトライ中');\r\n }\r\n default:\r\n return t('IoTDevListGrid.不明', '不明');\r\n }\r\n };\r\n\r\n const getCollectionState = (row?: V_IOTBOX_DEV_LIST): string => {\r\n if (row == undefined) return tableBaseStyle.bodyCellError;\r\n if (row.IOT_SET.GET_FLG == 0) {\r\n return tableBaseStyle.bodyCellRun;\r\n }\r\n if (row.IOT_SET.GET_FLG == 1) {\r\n return tableBaseStyle.bodyCellEnd;\r\n }\r\n return tableBaseStyle.bodyCellError;\r\n };\r\n\r\n /**\r\n * 行クリックハンドラ\r\n * @param e\r\n * @param index\r\n */\r\n const handleTableCellClick = (e: V_IOTBOX_DEV_LIST, index: number) => {\r\n console.debug(['handleTableCellClick()'], selectedID, index);\r\n if (selectedID == index + 1) {\r\n setDeviceIndex(e.DEV_INDEX);\r\n GetAllGroupList(e.DEV_INDEX).then((ret) => {\r\n setGroupListInfo(ret);\r\n handleDialogShow();\r\n });\r\n }\r\n };\r\n const handleDialogShow = () => {\r\n setOpen(true);\r\n };\r\n\r\n const handleDialogClose = () => {\r\n console.debug('handleDialogClose');\r\n setOpen(false);\r\n };\r\n const handleTransitionPage = (pathname: string, state: any) => {\r\n history.push({\r\n pathname: pathname,\r\n state: state,\r\n });\r\n };\r\n\r\n const lrdlg = flgLearnResDlg ? : null;\r\n\r\n //行選択の背景色一時置き\r\n let lineSelection = '';\r\n\r\n console.debug(['- 画面描画開始 -', iotBoxdeviceArray?.V_IOTBOX_DEV_LISTS]);\r\n return (\r\n <>\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {t('IoTDevListGrid.No', 'No')}\r\n \r\n {t('IoTDevListGrid.機器番号_名称', '機器番号・名称')}\r\n \r\n {t('IoTDevListGrid.状態', '状態')}\r\n \r\n {t('IoTDevListGrid.IoTBox状態', 'IoTBox状態')}\r\n \r\n \r\n {t('IoTDevListGrid.最新収集時刻', '最新収集時刻')}\r\n \r\n \r\n {t('IoTDevListGrid.手動収集', '手動収集')}\r\n \r\n \r\n {t('IoTDevListGrid.次回収集予定', '次回収集予定')}\r\n \r\n \r\n {t('IoTDevListGrid.学習処理', '学習処理')}\r\n \r\n \r\n {t('IoTDevListGrid.学習結果', '学習結果')}\r\n \r\n\r\n \r\n {t('IoTDevListGrid.収集結果', '収集結果')}\r\n \r\n \r\n \r\n \r\n {iotBoxdeviceArray?.V_IOTBOX_DEV_LISTS.map((row, index) => (\r\n {\r\n setSelectedID(index + 1);\r\n }}\r\n selected={selectedID === index + 1}\r\n className={lineSelection}\r\n >\r\n {/* No */}\r\n handleTableCellClick(row, index)}>\r\n {index + 1}\r\n \r\n {/* 機器番号・名称 */}\r\n handleTableCellClick(row, index)}>\r\n {row.DEV_NO + row.DEV_NAME}\r\n \r\n {/* 状態 */}\r\n \r\n {}\r\n \r\n {/* IoTBox状態 */}\r\n {row.IMSI_NO === '-1' ? (\r\n \r\n {/**部分放電とコナンエアーの場合はハイフン表示 */}―\r\n \r\n ) : (\r\n \r\n {}\r\n \r\n )}\r\n {/* 最新収集日時 */}\r\n handleTableCellClick(row, index)}>\r\n \r\n \r\n {/* 手動収集 */}\r\n \r\n {/**部分放電とコナンエアーの場合収集不可にする */}\r\n handleInstructManualCollection(row, index)}\r\n >\r\n {row.IMSI_NO === '-1'\r\n ? t('IoTDevListGrid.収集不可', '収集不可')\r\n : t('IoTDevListGrid.開始', '開始')}\r\n \r\n \r\n {/* 次回収集時刻 */}\r\n \r\n \r\n \r\n {/* 学習処理 */}\r\n \r\n {\r\n if (row.IOT_SET.STUDY_STATUS !== undefined) {\r\n handleStudyCollection(row, index);\r\n }\r\n }}\r\n onCancelClick={() => {\r\n if (row.IOT_SET.STUDY_STATUS !== undefined) {\r\n CancelHandleStudyCollection(row, index);\r\n }\r\n }}\r\n />\r\n \r\n {/* 学習結果 */}\r\n {row.IMSI_NO === '-1' ? (\r\n \r\n {/**部分放電とコナンエアーの場合はハイフン表示 */}―\r\n \r\n ) : (\r\n \r\n {\r\n setDeviceIndex(row.DEV_INDEX);\r\n learnResDlg.open();\r\n }}\r\n />\r\n \r\n )}\r\n\r\n {/* 収集結果 */}\r\n \r\n {collectionResult(row.GET_FLG, row.IOT_SET.AUTO_RETRY_COUNT)}\r\n \r\n \r\n ))}\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n setMessageDialogOpen(false)}\r\n //title={t('IoTDevListGrid.警告', '警告')}\r\n okText={t('IoTDevListGrid.OK', 'OK')}\r\n maxWidth={'sm'}\r\n >\r\n {showMessage}\r\n \r\n {/**グループ一覧ダイアログ表示 */}\r\n \r\n {t('IoTDevListGrid.グループ一覧', 'グループ一覧')}\r\n \r\n \r\n \r\n \r\n \r\n {t('IoTDevListGrid.閉じる', '閉じる')}\r\n \r\n \r\n \r\n {lrdlg}\r\n \r\n );\r\n};\r\nexport default IoTDevListGrid;\r\n","import React, { useEffect, useState } from 'react';\r\n\r\nimport IoTDevListGrid from './IoTDevListGrid';\r\nimport { IoTDevListStyle } from './IoTDevListStyle';\r\n\r\n/**\r\n * IoTBox機器一覧\r\n * @returns\r\n */\r\nconst IoTDevListPage: React.FC = () => {\r\n const pageStyle = IoTDevListStyle();\r\n\r\n return ;\r\n};\r\n\r\nexport default IoTDevListPage;\r\n","import dayjs from 'dayjs';\r\n\r\nexport const ALRAM_MODE: string = 'alram';\r\nexport const DAY_MODE: string = 'day';\r\n\r\n/**\r\n * 選択モード\r\n */\r\nexport const SelectMode = {\r\n /* アラーム日選択モード*/\r\n ALRAM_MODE: 1,\r\n /* 日時選択モード*/\r\n DAY_MODE: 2,\r\n} as const;\r\nexport type SelectMode = typeof SelectMode[keyof typeof SelectMode];\r\n\r\nexport type SelectDataType = {\r\n devIndex: string; //選択機器番号\r\n alramDate: string; //選択アラーム発生日\r\n selectDate: string; //選択日時\r\n selectMode: SelectMode; //alram or day\r\n};\r\n\r\n/**\r\n *EMCトレンドデータ\r\n */\r\nexport type EMCTrendGraphData = {\r\n ColData: Date; //収集時間\r\n itemNameNo: number//ラインアイテムNo\r\n PercentValue: number//パーセント値\r\n RawValue: number//値\r\n};\r\n\r\n/**\r\n *EMCトレンド情報\r\n */\r\nexport type EMCAlarmInfoModel = {\r\n AlarmKind: string; //異常種別を取得します。\r\n ItemNo: string; //項目 No. を\r\n ItemName: string; //項目名を取得します。\r\n UNIT: string; //単位を取得または設定します。\r\n UnitNo: string; //ユニット No. を取得します。\r\n AreaNo: string; //局番を取得します。\r\n EmcDataType: string; //データタイプを取得します。\r\n IsDisplay: boolean; //表示するかを取得または設定します。\r\n ChartLineColor: string; //グラフ線色を取得または設定します\r\n OutputValue: string; //出力を取得または設定します。\r\n ChartSeriesIndex: string; //出力を取得または設定します。\r\n TrendGraphDatas: EMCTrendGraphData[]; //グラフデータを設定します\r\n};\r\n\r\n//EMC設定データ取得\r\nexport const GetEMCTrendDatas = (selectData : SelectDataType) : Promise => {\r\n let params = {\r\n devIndex: \"\",\r\n from: \"\",\r\n to: \"\",\r\n selectMode : \"\"\r\n };\r\n\r\n if (selectData.selectMode === SelectMode.ALRAM_MODE) {\r\n params.to = ConvertDateToStringByDate(dayjs(selectData.alramDate).add(1, \"d\").toDate());\r\n params.from = ConvertDateToStringByDate(dayjs(params.to).subtract(3, \"d\").toDate());\r\n params.selectMode = SelectMode.ALRAM_MODE.toString();\r\n }\r\n else {\r\n params.to = ConvertDateToStringByDate(dayjs(selectData.selectDate).toDate());\r\n params.from = ConvertDateToStringByDate(dayjs(params.to).subtract(3, \"d\").toDate());\r\n params.selectMode = SelectMode.DAY_MODE.toString();\r\n }\r\n params.devIndex = selectData.devIndex;\r\n\r\n console.debug([\"GetEMCTrendDatas - params \", params,selectData]);\r\n const query_params = new URLSearchParams(params);\r\n return new Promise((resolve, reject) => {\r\n //fetch(\"api/EMCTrend/EMCTrendDatas?devIndex=1&from=2022-02-01 00:00:00&to=2022-02-01 23:59:59\")\r\n fetch(\"api/EMCTrend/EMCTrendDatas?\" + query_params )\r\n .then((res) => {\r\n if (!res.ok) {\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n reject(message);\r\n }\r\n else {\r\n res.json()\r\n .then((result: EMCAlarmInfoModel[]) => {\r\n console.debug([\"GetEMCTrendDatas - result\",result]);\r\n if (result != null) {\r\n if (result.length !== 0) {\r\n result.forEach((r) => r.ItemName = r.ItemName === null ? \"(予備)\" : r.ItemName);\r\n resolve(result);\r\n }\r\n else {\r\n reject('Invalidate response');\r\n }\r\n }\r\n else {\r\n reject('Invalidate response');\r\n }\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n reject(error);\r\n })\r\n }\r\n })\r\n });\r\n};\r\n\r\n/**\r\n * 画面で使用する日時の表示フォーマット\r\n * @returns\r\n */\r\nexport const ConvertDateToStringByString = (target: string): string => {\r\n const isInvalidDate = (date: Date) => Number.isNaN(date.getTime());//Invalid Date 判定\r\n if (target !== null && target !== \"\") {\r\n if (isInvalidDate(dayjs(target).toDate())){\r\n return \"\";\r\n }\r\n else {\r\n return dayjs(target).format('YYYY/MM/DD HH:mm:ss');\r\n }\r\n }\r\n else {\r\n return \"\";\r\n }\r\n};\r\n\r\n/**\r\n * 画面で使用する日時の表示フォーマット\r\n * @returns\r\n */\r\nexport const ConvertDateToStringByDate = (target: Date): string => {\r\n if (target !== null) {\r\n return dayjs(target).format('YYYY/MM/DD HH:mm:ss');\r\n }\r\n else {\r\n return \"\";\r\n }\r\n};\r\n\r\n\r\n/**\r\n * 画面で使用する日時の表示フォーマット\r\n * 0~29分の場合0分00秒、30~59分の場合30分00秒を返す\r\n * @returns\r\n */\r\nexport const ConvertDateToStringByMarume = (target: Date): string => {\r\n if (target !== null) {\r\n let m = Number(dayjs(target).format('mm'));\r\n if (m < 30) {\r\n return dayjs(target).format('YYYY/MM/DD HH:00:00');\r\n }\r\n else {\r\n return dayjs(target).format('YYYY/MM/DD HH:30:00');\r\n }\r\n }\r\n else {\r\n return \"\";\r\n }\r\n};\r\n\r\n\r\n\r\n/**\r\n * グラフの縦線を引く場所を取得する\r\n * 選択したアラーム時間がトレンドデータに存在するかを確認\r\n * 存在した場合はそのまま返す\r\n * 存在しなかった場合は、一番近い時間を返す\r\n * @param data EMCトレンドデータ\r\n * @param selectAlramDate 選択アラーム時間\r\n * @returns\r\n */\r\nexport const GetAlaramBasePoint = (data: EMCAlarmInfoModel, selectAlramDate: string): string => {\r\n if (data.TrendGraphDatas.length === 0) {\r\n return \"\";\r\n }\r\n if (validate(selectAlramDate,\"YYYY/MM/DD HH:30:00\") ) {\r\n return \"\";\r\n }\r\n\r\n const sData = dayjs(selectAlramDate);\r\n const gList = data.TrendGraphDatas;\r\n\r\n let tempSa: number = 0;\r\n let tempData: Date = sData.toDate();\r\n gList.forEach((item,index) => {\r\n const sa = dayjs(item.ColData).diff(sData);\r\n if (index === 0) {\r\n tempSa = Math.abs(sa);\r\n tempData = item.ColData;\r\n }\r\n else {\r\n if (tempSa > Math.abs(sa)) {\r\n tempSa = Math.abs(sa);\r\n tempData = item.ColData;\r\n }\r\n }\r\n });\r\n\r\n console.debug([\"getAlaramBasePoint\",sData,tempSa,tempData]);\r\n return dayjs(tempData).format('YYYY-MM-DDTHH:mm:ss');\r\n };\r\n\r\n\r\n/**\r\n * 存在する日時かどうかを確認\r\n * validate('2020/02/31', 'YYYY/MM/DD') // false\r\n * @param date\r\n * @param format\r\n * @returns\r\n */\r\nconst validate = (date:string, format:string) => {\r\n return dayjs(date, format).format(format) === date;\r\n};\r\n","import { createStyles, makeStyles, Theme,createTheme } from '@material-ui/core/styles';\r\n\r\nconst defaultTheme = createTheme({});\r\nconst { pxToRem } = defaultTheme.typography;\r\n\r\n\r\nexport const TableBaseStyle = makeStyles(\r\n createStyles({\r\n //テーブルヘッダセル\r\n headerCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n padding: '1px',\r\n },\r\n bodyCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n padding: '0.5px',\r\n height: '10px',\r\n },\r\n bodyCellCenter: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n padding: '0px',\r\n height: '10px',\r\n },\r\n bodyRow: {\r\n '&.Mui-selected, &.Mui-selected:hover': {\r\n //背景色\r\n backgroundColor: 'yellow',\r\n '& > .MuiTableCell-root': {\r\n //文字色\r\n color: 'brack',\r\n },\r\n },\r\n },\r\n //テキスト\r\n textField: {\r\n flexGrow: 1,\r\n height: '100%',\r\n width: '100%',\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n textAlign: \"center\",\r\n },\r\n })\r\n);\r\n\r\nexport const ChartBaseStyle = makeStyles(\r\n createStyles({\r\n tooltip: {\r\n background: '#FFFFEE',\r\n fontSize: '14px',\r\n padding: '10px 10px 0px 20px',\r\n },\r\n })\r\n);\r\n\r\nexport const EMCTrendStyle = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 276px)',\r\n },\r\n chartContainer: {\r\n minHeight: 'calc(100vh - 276px)',\r\n maxHeight: 'calc(100vh - 276px)',\r\n },\r\n //画面ヘッダ部ペーパ^\r\n paperRoot: {\r\n maxWidth: '1100px',\r\n minWidth: '1100px',\r\n padding: '3px',\r\n },\r\n buttonRoot: {\r\n minWidth: '130px',\r\n },\r\n //画面ヘッダ部ラジオボタン\r\n muiTypography: {\r\n fontSize: pxToRem(14),\r\n lineHeight: 1.66,\r\n },\r\n //画面で使用しているチェックボックス\r\n checkBox: {\r\n padding: '0px',\r\n },\r\n spacingXs1: {\r\n minWidth: '1440px',\r\n },\r\n })\r\n);\r\n\r\nexport const FooterBaseStyle = makeStyles(\r\n createStyles({\r\n buttonStyle: {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n },\r\n })\r\n);\r\n","import React, { useEffect, useState, useRef } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { TableBaseStyle, EMCTrendStyle } from './EMCTrendStyle';\r\nimport {\r\n GetEMCTrendDatas,\r\n EMCAlarmInfoModel,\r\n ConvertDateToStringByString,\r\n ConvertDateToStringByDate,\r\n} from './EMCTrend';\r\nimport ColorLineText from '../../atoms/Text/ColorLineText';\r\nimport dayjs from 'dayjs';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ntype EMCTrendGridProps = {\r\n emcAlarmInfoModel: EMCAlarmInfoModel[];\r\n chartSelectData: string;\r\n onLineDispCkeckBoxChange: (itemNo: string) => void;\r\n onLineDispAllOff: () => void;\r\n};\r\nconst EMCTrendGrid: React.FC = (props) => {\r\n const tableStyle = TableBaseStyle();\r\n const emcTrendStyle = EMCTrendStyle();\r\n const { t } = useTranslation();\r\n\r\n const allDispCheckFlg = React.useRef(true);\r\n /**\r\n * 上位にデータ変更通知\r\n * @param editRow 編集対象データ\r\n * @param isEdit 編集フラグ\r\n * @returns\r\n */\r\n const onChangeData = (editRow: EMCAlarmInfoModel, editFlg: boolean) => {\r\n if (editFlg) {\r\n //console.debug(['onChangeData - editRow,baseData', editRow, props.studySet1]);\r\n //props.onChangeData(editRow);\r\n }\r\n };\r\n\r\n /**\r\n * 画面アラーム情報種類のグリッドデータ\r\n * @param target\r\n * @param kindNo\r\n * @param title\r\n * @returns\r\n */\r\n const getAlarmKindData = (target: EMCAlarmInfoModel[], kindNo: string, title: string) => {\r\n const list = target.filter((r) => r.AlarmKind === kindNo);\r\n\r\n /**\r\n * 出力列に出力するデータ\r\n * @param index\r\n * @returns\r\n */\r\n const getValue = (index: number): string => {\r\n var dIndex = list[index].TrendGraphDatas.findIndex(\r\n (r) => ConvertDateToStringByDate(r.ColData) === ConvertDateToStringByString(props.chartSelectData)\r\n );\r\n if (dIndex !== -1) {\r\n if (list[index].TrendGraphDatas[dIndex].RawValue === null) {\r\n return '';\r\n } else {\r\n return String(list[index].TrendGraphDatas[dIndex].RawValue.toFixed(0));\r\n }\r\n } else {\r\n return '';\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n {title}\r\n \r\n \r\n {list.map((row, index) => {\r\n return (\r\n \r\n \r\n props.onLineDispCkeckBoxChange(row.ItemNo)}\r\n checked={row.IsDisplay}\r\n />\r\n \r\n \r\n
\r\n \r\n
\r\n
{row.ItemName}
\r\n
\r\n \r\n {getValue(index)}\r\n \r\n \r\n {row.UNIT}\r\n \r\n
\r\n );\r\n })}\r\n \r\n );\r\n };\r\n\r\n return (\r\n <>\r\n
\r\n {ConvertDateToStringByString(props.chartSelectData) !== ''\r\n ? ConvertDateToStringByString(props.chartSelectData)\r\n : '----/--/-- --:--:--'}\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {t('EMCTrendGrid.異常', '異常')}\r\n \r\n \r\n {t('EMCTrendGrid.表示', '表示')}\r\n {\r\n allDispCheckFlg.current = !allDispCheckFlg.current;\r\n props.onLineDispAllOff();\r\n }}\r\n checked={allDispCheckFlg.current}\r\n />\r\n \r\n {t('EMCTrendGrid.項目', '項目')}\r\n {t('EMCTrendGrid.出力', '出力')}\r\n {t('EMCTrendGrid.単位', '単位')}\r\n \r\n \r\n \r\n {getAlarmKindData(props.emcAlarmInfoModel, '1', t('EMCTrendGrid.軸受', '軸受'))}\r\n {getAlarmKindData(props.emcAlarmInfoModel, '2', t('EMCTrendGrid.機械系', '機械系'))}\r\n {getAlarmKindData(props.emcAlarmInfoModel, '3', t('EMCTrendGrid.回転子', '回転子'))}\r\n {getAlarmKindData(props.emcAlarmInfoModel, '4', t('EMCTrendGrid.レアショート', 'レアショート'))}\r\n {getAlarmKindData(props.emcAlarmInfoModel, '5', t('EMCTrendGrid.トルク', 'トルク'))}\r\n {getAlarmKindData(props.emcAlarmInfoModel, '6', '')}\r\n \r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default EMCTrendGrid;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport Button from '@material-ui/core/Button';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { EMCAlarmLogType } from '../../../function/EMCModel';\r\nimport dayjs from 'dayjs';\r\nimport { TableBaseStyle, EMCTrendStyle } from './EMCTrendStyle';\r\nimport { ConvertDateToStringByDate } from './EMCTrend';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ntype EMCTrendErrorLogSelectDialogProps = {\r\n open: boolean;\r\n onClose: () => void;\r\n onSelect: (targetDate: string) => void;\r\n emcAlarmLogTypeList: EMCAlarmLogType[];\r\n};\r\n\r\nconst EMCTrendErrorLogSelectDialog: React.FC = (props) => {\r\n const tableStyle = TableBaseStyle();\r\n const emcTrendStyle = EMCTrendStyle();\r\n const [selectIndex, setSelectIndex] = useState(0);\r\n const { t } = useTranslation();\r\n\r\n return (\r\n <>\r\n \r\n {t('EMCTrendErrorLogSelectDialog.アラーム発生日一覧','アラーム発生日一覧')}\r\n \r\n \r\n \r\n \r\n \r\n {'No'}\r\n {t('EMCTrendErrorLogSelectDialog.アラーム発生日時','アラーム発生日時')}\r\n {t('EMCTrendErrorLogSelectDialog.異常種別','異常種別')}\r\n \r\n \r\n \r\n {props.emcAlarmLogTypeList.map((row, index) => {\r\n return (\r\n {\r\n setSelectIndex(row.rowIndex);\r\n }}\r\n onDoubleClick={(e) => {\r\n console.debug('onDoubleClick');\r\n props.onSelect(dayjs(row.COL_DATE).format());\r\n props.onClose();\r\n }}\r\n >\r\n {Number(index) + 1}\r\n {ConvertDateToStringByDate(row.COL_DATE)}\r\n {row.TYP_NAME}\r\n \r\n );\r\n })}\r\n \r\n
\r\n
\r\n
\r\n \r\n {\r\n props.onClose();\r\n }}\r\n >\r\n {t('EMCTrendErrorLogSelectDialog.閉じる','閉じる')}\r\n \r\n \r\n
\r\n \r\n );\r\n};\r\nexport default EMCTrendErrorLogSelectDialog;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { TableBaseStyle, EMCTrendStyle } from './EMCTrendStyle';\r\nimport { EMCAlarmInfoModel, ConvertDateToStringByDate, ConvertDateToStringByString } from './EMCTrend';\r\nimport ColorLineText from '../../atoms/Text/ColorLineText';\r\nimport ItemComboBoxStr, { ComboBoxItemTypeS } from '../../atoms/ComboBox/ItemComboBoxStr';\r\nimport {\r\n EMCSettingType,\r\n EMCAlarmLogType,\r\n GetEMCSettings,\r\n GetEMCAlarmLogs,\r\n CreateSelectCombBoxItems,\r\n CreateSelectAlarmItems,\r\n CreateSelectAlarmCombBoxItems,\r\n CreateSelectAlarmLogList,\r\n GetEMCSettingsEst,\r\n} from '../../../function/EMCModel';\r\nimport MessageDialog, { MessageDialogResponse } from '../../atoms/Dialog/MessageDialog';\r\nimport { useModal } from '../../../function/useModal';\r\nimport { SelectDataType, SelectMode, ConvertDateToStringByMarume } from './EMCTrend';\r\nimport dayjs from 'dayjs';\r\nimport Radio from '@material-ui/core/Radio';\r\nimport RadioGroup from '@material-ui/core/RadioGroup';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport Button from '@material-ui/core/Button';\r\nimport ItemCalenderTimeEx from '../../atoms/Calendar/ItemCalenderTimeEx';\r\nimport EMCTrendErrorLogSelectDialog from './EMCTrendErrorLogSelectDialog';\r\n\r\ntype EMCTrendSelectItemProps = {\r\n buttonEnable: boolean;\r\n onClickDispButton: (target: SelectDataType) => void;\r\n};\r\nconst EMCTrendSelectItem: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const tableStyle = TableBaseStyle();\r\n const emcTrendStyle = EMCTrendStyle();\r\n const [selectComboBoxList, setSelectComboBoxList] = useState([]);\r\n const [buttonEnable, setButtonEnable] = useState(props.buttonEnable);\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n const [emcAlarmLogs, setEmcAlarmLogs] = useState([]);\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n const msgdlg = flgMsgDlg ? : null;\r\n const [selectData, setSelectData] = useState({\r\n devIndex: '0',\r\n alramDate: '',\r\n selectDate: ConvertDateToStringByMarume(new Date()),\r\n selectMode: SelectMode.DAY_MODE,\r\n });\r\n const [openErrorLog, setOpenErrorLog] = useState(false);\r\n const [selectAlramList, setSelectAlramList] = useState([]);\r\n\r\n /**\r\n * 初期表示 useEffect\r\n */\r\n useEffect(() => {\r\n upDatePage(true);\r\n }, []);\r\n\r\n /**\r\n * 上位でボタン状態変更時、反映させる\r\n */\r\n useEffect(() => {\r\n setButtonEnable(props.buttonEnable);\r\n }, [props.buttonEnable]);\r\n\r\n /**\r\n * 画面更新\r\n */\r\n const upDatePage = (isInitDisp: boolean) => {\r\n if (!isInitDisp) {\r\n //初期表示字にボタンを自動で押下するためボタン操作は不要\r\n setButtonEnable(false);\r\n }\r\n let emcList: EMCSettingType[] = [];\r\n let emcAlarmList: EMCAlarmLogType[] = [];\r\n let cmdItems: ComboBoxItemTypeS[] = [];\r\n let selectDevIndex: number = 0;\r\n let selectAlramList: EMCAlarmLogType[] = [];\r\n let selectAlramIndex: string = '';\r\n\r\n GetEMCSettingsEst()\r\n .then((r: EMCSettingType[]) => {\r\n console.debug(['★EMCTrendSelectPage - useEffect - GetEMCSettings', r]);\r\n emcList = r;\r\n return GetEMCAlarmLogs();\r\n })\r\n .then((r) => {\r\n console.debug(['EMCTrendSelectPage - useEffect - GetEMCAlarmLogss', r, emcList]);\r\n emcAlarmList = r;\r\n\r\n cmdItems = CreateSelectCombBoxItems(emcList);\r\n if (cmdItems.length != 0) {\r\n selectDevIndex = Number(cmdItems[0].key);\r\n selectAlramList = CreateSelectAlarmLogList(selectDevIndex, emcAlarmList);\r\n if (selectAlramList.length != 0) {\r\n selectAlramIndex = dayjs(selectAlramList[0].COL_DATE).format('YYYYMMDD');\r\n } else {\r\n selectAlramIndex = '';\r\n }\r\n }\r\n console.debug(['EMCTrendSelectPage - useEffect - CreateSelectAlarmItems', r, emcList]);\r\n\r\n setEmcAlarmLogs(emcAlarmList);\r\n setSelectComboBoxList(cmdItems);\r\n setSelectAlramList(selectAlramList);\r\n\r\n selectData.devIndex = String(selectDevIndex);\r\n selectData.alramDate = selectAlramIndex;\r\n selectData.selectDate = ConvertDateToStringByMarume(new Date());\r\n selectData.devIndex = String(selectDevIndex);\r\n if (isInitDisp) {\r\n //初期表示字にボタンを自動で押下する\r\n props.onClickDispButton(selectData);\r\n }\r\n setSelectData({ ...selectData });\r\n })\r\n .catch((e) => {\r\n setDlgmsg(t('EMCSettingPage.データ取得中にエラーが発生しました', 'データ取得中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n console.error(['EMCSettingPage - useEffect - Error', e, emcList]);\r\n })\r\n .finally(() => {\r\n if (!isInitDisp) {\r\n //初期表示字にボタンを自動で押下するためボタン操作は不要\r\n setButtonEnable(false);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * 選択モード切替\r\n * @param e\r\n */\r\n const radioSelectAction = (e: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n selectData.selectMode = Number(e.target.value) === 1 ? SelectMode.ALRAM_MODE : SelectMode.DAY_MODE;\r\n setSelectData({ ...selectData });\r\n };\r\n /**\r\n * 機器選択変更Event\r\n * @param value\r\n */\r\n const onDevIndexSelectDataChange = (e: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n setButtonEnable(false);\r\n\r\n const selectDevIndex = Number(e.target.value);\r\n const selectAlramList = CreateSelectAlarmLogList(selectDevIndex, emcAlarmLogs);\r\n let selectAlramIndex: string = '';\r\n if (selectAlramList.length != 0) {\r\n selectAlramIndex = dayjs(selectAlramList[0].COL_DATE).format('YYYYMMDD');\r\n } else {\r\n selectAlramIndex = '';\r\n }\r\n\r\n setSelectAlramList([...selectAlramList]);\r\n selectData.devIndex = String(selectDevIndex);\r\n selectData.alramDate = '';\r\n setSelectData({ ...selectData });\r\n\r\n console.debug(['onDevIndexSelectDataChange selectDevIndex , selectData', selectDevIndex, selectData]);\r\n setButtonEnable(true);\r\n };\r\n /**\r\n * カレンダー値変更\r\n * @param value\r\n */\r\n const changeCalendarValueAction = (value: string) => {\r\n selectData.selectDate = value;\r\n setSelectData({ ...selectData });\r\n };\r\n\r\n /**\r\n * エラーログ日時選択ダイアログOPEN\r\n */\r\n const selectErrroLogDialogOpenAction = () => {\r\n setOpenErrorLog(true);\r\n };\r\n\r\n /**\r\n * エラーログ日時選択閉じる\r\n */\r\n const selectErrroLogDialogCloseAction = () => {\r\n setOpenErrorLog(false);\r\n };\r\n /**\r\n * エラーログ日時選択\r\n */\r\n const selectErrroLogDateAction = (target: string) => {\r\n setOpenErrorLog(false);\r\n selectData.alramDate = target;\r\n setSelectData({ ...selectData });\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n label={t('EMCTrendSelectItem.日付選択', '当日')}\r\n />\r\n }\r\n label={t('EMCTrendSelectItem.アラーム発生日選択', 'アラーム発生日')}\r\n />\r\n \r\n \r\n \r\n {selectData.selectMode === SelectMode.ALRAM_MODE ? (\r\n <>\r\n
\r\n {ConvertDateToStringByString(selectData.alramDate)}\r\n
\r\n
\r\n {\r\n selectErrroLogDialogOpenAction();\r\n }}\r\n >\r\n {t('EMCTrendSelectItem.選択', '選択')}\r\n \r\n
\r\n \r\n ) : (\r\n
{ConvertDateToStringByString(selectData.selectDate)}
\r\n // \r\n )}\r\n
\r\n \r\n {\r\n props.onClickDispButton(selectData);\r\n }}\r\n >\r\n {t('EMCTrendSelectItem.表示', '表示')}\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default EMCTrendSelectItem;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { TableBaseStyle, EMCTrendStyle, ChartBaseStyle } from './EMCTrendStyle';\r\nimport { EMCAlarmInfoModel, EMCTrendGraphData } from './EMCTrend';\r\nimport ColorLineText from '../../atoms/Text/ColorLineText';\r\nimport {\r\n LineChart,\r\n Line,\r\n XAxis,\r\n YAxis,\r\n Label,\r\n CartesianGrid,\r\n ResponsiveContainer,\r\n ReferenceLine,\r\n Brush,\r\n Tooltip,\r\n} from 'recharts';\r\n\r\nimport { GraphThemeLight } from '../../../Constant';\r\nimport dayjs from 'dayjs';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ntype EMCTrendChartProps = {\r\n emcAlarmInfoModel: EMCAlarmInfoModel[];\r\n onChartSelectDataChangeEvent: (target: string) => void;\r\n chartSelectData: string;\r\n chartAlramBasePointData: string;\r\n};\r\n\r\nconst EMCTrendChart: React.FC = (props) => {\r\n const tableStyle = TableBaseStyle();\r\n const emcTrendStyle = EMCTrendStyle();\r\n const chartStyle = ChartBaseStyle();\r\n const { t, i18n } = useTranslation();\r\n\r\n /**\r\n * グラフデータ加工処理\r\n * @param data\r\n * @returns\r\n */\r\n const convertGraphPoint = (data: EMCAlarmInfoModel[]) => {\r\n let ret: any = [];\r\n let obj1 = {};\r\n data.forEach((r) => {\r\n let tmp = { ['value_' + r.ItemNo]: 0 };\r\n obj1 = Object.assign(obj1, tmp);\r\n });\r\n data[0]?.TrendGraphDatas.map((r: EMCTrendGraphData) => {\r\n let tmp = { datetime: r.ColData };\r\n obj1 = Object.assign(obj1, tmp);\r\n //objectをコピーする\r\n const newObj = Object.assign({}, obj1);\r\n ret.push(newObj);\r\n });\r\n\r\n data.map((row, index) => {\r\n //console.debug(['row , index ', row, index]);\r\n row.TrendGraphDatas.map((row2, index2) => {\r\n ret[index2]['value_' + row.ItemNo] = row2.PercentValue;\r\n });\r\n });\r\n //console.debug(['convertGraphPoint', ret]);\r\n return ret;\r\n };\r\n\r\n /**\r\n * グラフクリックデータ取得\r\n * @param e\r\n */\r\n const chartControlClikAction = (e: any) => {\r\n //e: any CategoricalChartState\r\n if (e !== null && e.activeLabel !== null && e.activeLabel !== '') {\r\n props.onChartSelectDataChangeEvent(String(e.activeLabel));\r\n }\r\n };\r\n /**\r\n * Tooltip実装\r\n * active : true に設定すると、ツールチップが表示されます。false に設定すると、ツールチップは非表示になり、通常は内部で計算されます。\r\n * payload : ツールチップに表示されるコンテンツのソース データ。通常は内部で計算されます。\r\n * label : 現在アクティブなラベル値で、通常は内部で計算されます。\r\n * @param param0\r\n * @returns\r\n */\r\n\r\n const CustomTooltip = ({ active, payload, label }: any) => {\r\n if (active) {\r\n return (\r\n
\r\n
{dayjs(label).format('YY/MM/DD HH:mm')}
\r\n
\r\n );\r\n }\r\n return null;\r\n };\r\n\r\n return (\r\n <>\r\n \r\n {\r\n chartControlClikAction(e);\r\n console.debug(['LineChart- onClick', e]);\r\n }}\r\n >\r\n \r\n {\r\n return r === 0 || r === 'auto' || dayjs(r).isValid() === false ? '' : dayjs(r).format('MM/DD HH:mm');\r\n }}\r\n height={50}\r\n tick={{ dy: 8, fontSize: 11 }}\r\n padding={{ right: 0, left: 0 }}\r\n >\r\n \r\n \r\n props.toFixed(2)}\r\n width={100}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n } />\r\n {props.emcAlarmInfoModel?.map((row, index) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default EMCTrendChart;\r\n","import React, { useEffect, useState, useRef } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport Grid from '@material-ui/core/Grid';\r\n\r\nimport { SelectDataType, SelectMode } from './EMCTrend';\r\nimport dayjs from 'dayjs';\r\nimport MessageDialog, { MessageDialogResponse } from '../../atoms/Dialog/MessageDialog';\r\nimport EMCTrendGrid from './EMCTrendGrid';\r\nimport {\r\n GetEMCTrendDatas,\r\n EMCAlarmInfoModel,\r\n ConvertDateToStringByString,\r\n ConvertDateToStringByDate,\r\n ConvertDateToStringByMarume,\r\n GetAlaramBasePoint,\r\n} from './EMCTrend';\r\nimport EMCTrendSelectItem from './EMCTrendSelectItem';\r\nimport { useModal } from '../../../function/useModal';\r\nimport EMCTrendChart from './EMCTrendChart';\r\nimport { TableBaseStyle, EMCTrendStyle } from './EMCTrendStyle';\r\n\r\ntype EMCTrendPageProps = { selectData: SelectDataType };\r\nconst EMCTrendPage: React.FC = (Props) => {\r\n const { t } = useTranslation();\r\n const emcTrendStyle = EMCTrendStyle();\r\n\r\n const [selectData, setSelectData] = useState({\r\n devIndex: '0',\r\n alramDate: '',\r\n selectDate: ConvertDateToStringByMarume(new Date()),\r\n selectMode: SelectMode.DAY_MODE,\r\n });\r\n\r\n const [emcAlarmInfoModel, setEMCAlarmInfoModel] = useState([]);\r\n\r\n const [buttonEnable, setButtonEnable] = useState(false);\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n\r\n const [chartSelectData, setChartSelectData] = useState('');\r\n\r\n const msgdlg = flgMsgDlg ? : null;\r\n\r\n const allSelectCheckBox = React.useRef(true); //表示非表示のチェックボックス状態\r\n\r\n //データ選択基準日時設定(アラーム選択モードの時グラフに線を引く)\r\n const chartAlramBasePointData = React.useRef('');\r\n\r\n /**\r\n * 初期表示 useEffect\r\n */\r\n useEffect(() => {}, []);\r\n\r\n /**\r\n * 表示ボタンアクション\r\n */\r\n const dispAction = (target: SelectDataType) => {\r\n setButtonEnable(false);\r\n GetEMCTrendDatas(target)\r\n .then((r) => {\r\n setEMCAlarmInfoModel([...r]);\r\n setChartSelectData('');\r\n setSelectData({ ...target });\r\n\r\n let alramDate = target.alramDate;\r\n if (target.selectMode === SelectMode.ALRAM_MODE && r.length !== 0) {\r\n alramDate = GetAlaramBasePoint(r[0], target.alramDate);\r\n }\r\n chartAlramBasePointData.current = target.selectMode === SelectMode.DAY_MODE ? '' : alramDate;\r\n console.debug(['dispAction - chartAlramBasePointData', chartAlramBasePointData.current]);\r\n })\r\n .catch((e) => {\r\n setDlgmsg(t('EMCTrendPage.データ取得中にエラーが発生しました', 'データ取得中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n console.error(['dispAction error', e]);\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n };\r\n\r\n /**\r\n * グラフデータ選択処理\r\n */\r\n const chartControlClikAction = (target: string) => {\r\n setChartSelectData(target);\r\n };\r\n\r\n /**\r\n * グラフ線表示非表示切替アクション\r\n * @param indexNo\r\n */\r\n const lineDispFlgChangeAction = (itemNo: string) => {\r\n var index = emcAlarmInfoModel.findIndex((r) => r.ItemNo === itemNo);\r\n if (index !== -1) {\r\n emcAlarmInfoModel[index].IsDisplay = !emcAlarmInfoModel[index].IsDisplay;\r\n setEMCAlarmInfoModel([...emcAlarmInfoModel]);\r\n }\r\n };\r\n /**\r\n * グラフ線All非表示切替アクション\r\n * @param indexNo\r\n */\r\n const lineDispFlgAllOffAction = () => {\r\n if (allSelectCheckBox.current) {\r\n emcAlarmInfoModel.forEach((r) => (r.IsDisplay = false));\r\n } else {\r\n emcAlarmInfoModel.forEach((r) => (r.IsDisplay = true));\r\n }\r\n allSelectCheckBox.current = !allSelectCheckBox.current;\r\n setEMCAlarmInfoModel([...emcAlarmInfoModel]);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n dispAction(r)}>\r\n \r\n \r\n \r\n \r\n \r\n {emcAlarmInfoModel.length === 0 ? null : (\r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default EMCTrendPage;\r\n","import { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\n\r\nexport const TableBaseStyle = makeStyles(\r\n createStyles({\r\n //テーブルヘッダセル\r\n headerCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n },\r\n bodyCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n padding: '4px',\r\n height: '30px',\r\n },\r\n bodyCellCenter: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n padding: '4px',\r\n height: '30px',\r\n },\r\n //テキスト\r\n textField: {\r\n flexGrow: 1,\r\n height: '100%',\r\n width: '100%',\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n textAlign: \"center\",\r\n },\r\n })\r\n);\r\n\r\nexport const OffLineJudgeStyle = makeStyles(\r\n createStyles({\r\n paperRoot: {\r\n maxWidth: '600px',\r\n minWidth: '400px',\r\n padding: '5px',\r\n },\r\n })\r\n);\r\n\r\nexport const FooterBaseStyle = makeStyles(\r\n createStyles({\r\n buttonStyle: {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n },\r\n })\r\n);\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Button from '@material-ui/core/Button';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\n\r\nimport { FooterBaseStyle } from './OffLineJudgeStyle';\r\n\r\ntype OffLineJudgeFooterProps = {\r\n onClickSelectButton: () => void;\r\n buttonEnable: boolean;\r\n};\r\nconst OffLineJudgeFooter: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const footerStyle = FooterBaseStyle();\r\n return (\r\n \r\n \r\n {\r\n props.onClickSelectButton();\r\n }}\r\n >\r\n {t('OffLineJudgeFooter.実行','実行')}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default OffLineJudgeFooter;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport dayjs from 'dayjs';\r\n\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Paper from '@material-ui/core/Paper';\r\n\r\nimport { useModal } from '../../../function/useModal';\r\nimport { ResponceDataType, ErrorCode } from '../../../ErrorCode';\r\n\r\nimport MessageDialog, { MessageDialogResponse } from '../../atoms/Dialog/MessageDialog';\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../atoms/Dialog/ConfirmDialog';\r\nimport ItemComboBoxStr, { ComboBoxItemTypeS } from '../../atoms/ComboBox/ItemComboBoxStr';\r\nimport SimpleCalender from '../../atoms/Calendar/SimpleCalender';\r\nimport DateInput from '../../atoms/Calendar/DateInput';\r\nimport { SelectDataType } from './OffLineJudge';\r\nimport OffLineJudteFotter from './OffLineJudgeFooter';\r\nimport {\r\n GetOffLineJudgeData,\r\n OfflineJudgeDataType,\r\n CreateDevCombBoxItems,\r\n GetOffLineJudgeFileTimes,\r\n CreateTimeCombBoxItems,\r\n ExecuteCopyOffLineJudgeFile,\r\n} from './OffLineJudge';\r\nimport { OffLineJudgeStyle, TableBaseStyle } from './OffLineJudgeStyle';\r\nimport { useHistory } from 'react-router-dom';\r\ntype OffLineJudgePageProps = {};\r\n\r\nconst OffLineJudgePage: React.FC = () => {\r\n const history = useHistory();\r\n const { t } = useTranslation();\r\n const offLineJudgeStyle = OffLineJudgeStyle();\r\n const tableStyle = TableBaseStyle();\r\n\r\n const [offlineJudgeData, setOfflineJudgeData] = useState([]); //デバイス情報データ\r\n\r\n const [selectDevComboBoxList, setSelectDevComboBoxList] = useState([]); //デバイスコンボボックス\r\n const [selectTimeComboBoxList, setSelectTimeComboBoxList] = useState([]); //時間コンボボックス\r\n const [buttonEnable, setButtonEnable] = useState(true);\r\n const [selectData, setSelectData] = useState({\r\n devIndex: '0',\r\n selectDate: dayjs(new Date()).format('YYYY-MM-DD'),\r\n selectTime: '',\r\n });\r\n\r\n const [flgCfmDlg, actCfmDlg] = useModal();\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n\r\n const msgdlg = flgMsgDlg ? : null;\r\n\r\n const cfmdlg = flgCfmDlg ? (\r\n \r\n ) : null;\r\n\r\n /**\r\n * 初期表示\r\n */\r\n useEffect(() => {\r\n upDatePage();\r\n }, []);\r\n\r\n /**\r\n * 時間コンボボックス更新\r\n */\r\n const upDateSelectTimeList = () => {\r\n setButtonEnable(false);\r\n let cmdList: ComboBoxItemTypeS[];\r\n GetOffLineJudgeFileTimes(selectData.devIndex, selectData.selectDate)\r\n .then((r: Date[]) => {\r\n if (r != null && r.length != 0) {\r\n cmdList = CreateTimeCombBoxItems(r);\r\n } else {\r\n cmdList = [];\r\n }\r\n if (cmdList.length != 0) {\r\n selectData.selectTime = cmdList[0].key;\r\n setSelectData((prev) => ({ ...prev, selectTime: cmdList[0].key }));\r\n }\r\n setSelectTimeComboBoxList([...cmdList]);\r\n })\r\n .catch((e) => {\r\n setDlgmsg(t('OffLineJudgePage.データ取得中にエラーが発生しました', 'データ取得中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n console.error(['OffLineJudgePage - useEffect[selectData] - Error', e]);\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n };\r\n\r\n /**\r\n * 画面更新\r\n */\r\n const upDatePage = () => {\r\n let offlineList: OfflineJudgeDataType[] = [];\r\n let cmdList: ComboBoxItemTypeS[];\r\n let selectDevIndex = '0';\r\n let dt = dayjs(new Date()).format('YYYY-MM-DD');\r\n\r\n setButtonEnable(false);\r\n GetOffLineJudgeData()\r\n .then((r: OfflineJudgeDataType[]) => {\r\n offlineList = r;\r\n if (r.length !== 0) {\r\n cmdList = CreateDevCombBoxItems(r);\r\n selectDevIndex = cmdList[0].key;\r\n }\r\n\r\n console.debug(['OffLineJudgePage useEffect - result , cmdList', r, cmdList]);\r\n setOfflineJudgeData([...offlineList]);\r\n setSelectDevComboBoxList([...cmdList]);\r\n setSelectData({ devIndex: selectDevIndex, selectDate: dt, selectTime: '' });\r\n selectData.devIndex = selectDevIndex; //初期の時間を取得するのにここでセット\r\n changeCalendarValueAction(dt);\r\n })\r\n .catch((e) => {\r\n setDlgmsg(t('OffLineJudgePage.データ取得中にエラーが発生しました', 'データ取得中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n console.error(['OffLineJudgePage - upDatePage - Error', e]);\r\n setSelectData({ devIndex: selectDevIndex, selectDate: dt, selectTime: '' });\r\n setOfflineJudgeData([]);\r\n setSelectDevComboBoxList([]);\r\n\r\n throw new Error('Page3Child Throw Error');\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n };\r\n\r\n /**\r\n * 機器選択変更Event\r\n * @param value\r\n */\r\n const onDevIndexSelectDataChange = (e: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n const selectDevIndex = String(e.target.value);\r\n selectData.devIndex = selectDevIndex;\r\n upDateSelectTimeList();\r\n };\r\n /**\r\n * カレンダー値変更\r\n * @param value\r\n */\r\n const changeCalendarValueAction = (value: string) => {\r\n selectData.selectDate = value;\r\n selectData.selectTime = '';\r\n upDateSelectTimeList();\r\n };\r\n\r\n /**\r\n * 時間変更\r\n * @param value\r\n */\r\n const changeTimeValueAction = (e: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n const selectTimeIndex = String(e.target.value);\r\n setSelectData((prev) => ({ ...prev, selectTime: selectTimeIndex }));\r\n };\r\n\r\n /**\r\n * 選択ボタンアクション\r\n */\r\n const selectAction = () => {\r\n if (selectData.selectTime === '') {\r\n setDlgmsg(t('OffLineJudgePage.時刻を設定してください', '時刻を設定してください'));\r\n actMsgDlg.open();\r\n return;\r\n }\r\n setDlgmsg(t('OffLineJudgePage.選択した内容で、実行しますか?', '選択した内容で、実行しますか?'));\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n setButtonEnable(false);\r\n const devIndex = selectData.devIndex;\r\n const selectDate = `${selectData.selectDate} ${selectData.selectTime}`;\r\n ExecuteCopyOffLineJudgeFile(devIndex, selectDate)\r\n .then((r) => {\r\n if (r.ErrorCode !== ErrorCode.ERR_CODE_NONE) {\r\n setDlgmsg(\r\n t(\r\n 'OffLineJudgePage.オフライン判定実行中にエラーが発生しました',\r\n 'オフライン判定実行中にエラーが発生しました'\r\n )\r\n );\r\n actMsgDlg.open();\r\n console.error(r);\r\n } else {\r\n setDlgmsg(t('OffLineJudgePage.オフライン判定を開始しました', 'オフライン判定を開始しました'));\r\n actMsgDlg.open();\r\n }\r\n })\r\n .catch((e) => {\r\n console.error(e);\r\n setDlgmsg(t('OffLineJudgePage.オフライン判定を開始しました', 'オフライン判定を開始しました'));\r\n actMsgDlg.open();\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n })\r\n .cancel(() => {\r\n console.debug(t('OffLineJudgePage.キャンセル', 'キャンセル'));\r\n });\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {t('OffLineJudgePage.機器', '機器')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {t('OffLineJudgePage.計測日', '計測日')}\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n {/* */}\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n {msgdlg}\r\n {cfmdlg}\r\n \r\n );\r\n};\r\n\r\nexport default OffLineJudgePage;\r\n","import { ComboBoxItemTypeS } from \"../../atoms/ComboBox/ItemComboBoxStr\"\r\nimport dayjs from 'dayjs';\r\nimport { ResponceDataType } from \"../../../ErrorCode\";\r\n\r\nexport type SelectDataType = {\r\n devIndex: string; //選択機器番号\r\n selectDate: string; //選択日時\r\n selectTime: string; //選択時間\r\n};\r\n\r\n/**\r\n * オフライン判定データ\r\n */\r\nexport type OfflineJudgeDataType = {\r\n DEV_INDEX?: number; /// 機器 INDEX を取得または設定します\r\n DEV_NO: string; /// 機器番号を取得または設定します\r\n DEV_NAME: string; /// 機器名称を取得または設定します\r\n PLC_NO: number; ///PLCNo. を取得または設定します\r\n AI_CARD: number; ///AI カード No. を取得または設定します\r\n AI_CH: number; /// CHNo. を取得または設定します\r\n SET_NO?: number; /// センサー No. を取得または設定します\r\n SPEED: number; /// 低速/高速区分を取得または設定します\r\n NAME_NO: number; /// 名称 No を取得または設定します\r\n MES_NAME: string; /// 計測種別を取得または設定します\r\n ITM_NAME_NO: number; /// 項目名称 No を取得または設定します\r\n ITM_NAME: string; /// 項目名称を取得または設定します\r\n};\r\n\r\n\r\n//オフライン判定デバイス情報尾取得\r\nexport const GetOffLineJudgeData = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/OfflineJudge/\")\r\n .then((res) => {\r\n if (!res.ok) {\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n reject(message);\r\n }\r\n else {\r\n return res.json();\r\n }\r\n })\r\n .then((result: OfflineJudgeDataType[]) => {\r\n if (result != null) {\r\n if (result.length !== 0) {\r\n console.debug([\"GetOffLineJudgeData - ok\",result]);\r\n }\r\n resolve(result);\r\n }\r\n else {\r\n reject('Invalidate response');\r\n }\r\n })\r\n .catch((error) => {\r\n console.error(error.status);\r\n console.error(error);\r\n reject(error);\r\n })\r\n })\r\n};\r\n\r\n/**\r\n * オフライン判定データのファイル時間リストを取得\r\n * @param devIndex\r\n * @param date\r\n * @returns\r\n */\r\nexport const GetOffLineJudgeFileTimes = (devIndex : string , date : string ): Promise => {\r\n return new Promise((resolve, reject) => {\r\n\r\n const query_params = new URLSearchParams({\r\n devIndex: devIndex,\r\n selectDate: date\r\n });\r\n\r\n console.debug([\"GetOffLineJudgeFileTimes - ulr\",\"api/OfflineJudge/GetTime?\" + query_params])\r\n fetch(\"api/OfflineJudge/GetTimes?\" + query_params)\r\n .then((res) => {\r\n if (!res.ok) {\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n reject(message);\r\n }\r\n else {\r\n return res.json();\r\n }\r\n })\r\n .then((result: Date[]) => {\r\n if (result != null) {\r\n if (result.length !== 0) {\r\n console.debug([\"GetOffLineJudgeFileTimes - ok\",result]);\r\n }\r\n resolve(result);\r\n }\r\n else {\r\n reject('Invalidate response');\r\n }\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n reject(error);\r\n })\r\n })\r\n};\r\n\r\n/**\r\n * オフライン判定データをコピー\r\n * @param devIndex\r\n * @param date\r\n * @returns\r\n */\r\nexport const ExecuteCopyOffLineJudgeFile = (devIndex : string , date : string ): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const query_params = new URLSearchParams({\r\n devIndex: devIndex,\r\n selectDate: date\r\n });\r\n\r\n console.debug([\"ExecuteCopyOffLineJudgeFile - ulr\",\"api/OfflineJudge/CopyExecute?\" + query_params])\r\n fetch(\"api/OfflineJudge/CopyExecute?\" + query_params)\r\n .then((res) => {\r\n if (!res.ok) {\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n reject(message);\r\n }\r\n else {\r\n return res.json();\r\n }\r\n })\r\n .then((result: ResponceDataType) => {\r\n if (result != null) {\r\n console.debug([\"ExecuteCopyOffLineJudgeFile - ok\",result]);\r\n resolve(result);\r\n }\r\n else {\r\n reject('Invalidate response');\r\n }\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n reject(error);\r\n })\r\n })\r\n};\r\n\r\n/**\r\n * 画面で使用するコンボボックスアイテムリストを作成\r\n * @param settings OfflineJudgeデータリスt\r\n * @param nameDevSets NameDevSetリスト\r\n * @returns コンボボックスリスト\r\n */\r\nexport const CreateDevCombBoxItems = (offlineJudgeData: OfflineJudgeDataType[]) : ComboBoxItemTypeS[]=>{\r\n let comboItems: ComboBoxItemTypeS[] = [];\r\n\r\n //重複削除\r\n const unique = offlineJudgeData.filter(\r\n (element, index, self) => self.findIndex((e) => e.DEV_INDEX === element.DEV_INDEX) === index\r\n);\r\n unique.forEach((r) => {\r\n if (r.DEV_INDEX != null) {\r\n let item: ComboBoxItemTypeS = {\r\n key :r.DEV_INDEX.toString(),\r\n name : `${r.DEV_NO} ${r.DEV_NAME}`\r\n }\r\n comboItems.push(item);\r\n }\r\n });\r\n return comboItems;\r\n};\r\n\r\n/**\r\n * 画面で使用するコンボボックスアイテムリストを作成\r\n * @param settings FileTimeリスト\r\n * @param nameDevSets NameDevSetリスト\r\n * @returns コンボボックスリスト\r\n */\r\nexport const CreateTimeCombBoxItems = (fileTimes: Date[]) : ComboBoxItemTypeS[]=>{\r\n let comboItems: ComboBoxItemTypeS[] = [];\r\n\r\n fileTimes.forEach((r) => {\r\n const item: ComboBoxItemTypeS = {\r\n key :dayjs(r).format('HH:mm:ss'),\r\n name : dayjs(r).format('HH:mm:ss')\r\n }\r\n comboItems.push(item);\r\n });\r\n\r\n return comboItems;\r\n};\r\n","import { createStyles, makeStyles, Theme, createTheme } from '@material-ui/core/styles';\r\n\r\nexport const TableBaseStyle = makeStyles(\r\n createStyles({\r\n //テーブル外枠\r\n tableStyle: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n },\r\n //テーブルヘッダセル\r\n headerCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n padding: '1px',\r\n borderCollapse: `collapse`,\r\n },\r\n bodyCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n height: '15px',\r\n },\r\n bodyCell_left: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'left',\r\n paddingleft: 2,\r\n height: '15px',\r\n },\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 270px)',\r\n overflowX: 'scroll',\r\n },\r\n tableCell: {\r\n borderWidth: '1px',\r\n borderColor: '#FFFFEE',\r\n borderStyle: 'solid',\r\n padding: '0px 0px 0px 4px',\r\n borderBottomWidth: '0px',\r\n },\r\n itemBoxStyle: {\r\n fontSize: '13px',\r\n },\r\n button: {\r\n maxWidth: '180px',\r\n maxHeight: '45px',\r\n marginTop: '5px',\r\n marginLeft: '40px',\r\n alignItems: 'center',\r\n },\r\n manualButton: {\r\n maxWidth: '150px',\r\n maxHeight: '35px',\r\n minWidth: '150px',\r\n minHeight: '35px',\r\n marginTop: '5px',\r\n alignItems: 'center',\r\n color: \"Green\",\r\n borderColor: 'white',\r\n },\r\n })\r\n);","import React, { useEffect, useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport Button_mui from '@mui/material/Button';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport dayjs from 'dayjs';\r\n\r\nimport OKCancelDialog from '../../../atoms/Dialog/OKCancelDialog';\r\nimport { TableBaseStyle } from './../PartialDischargeStyle';\r\nimport { V_PARTIAL_DISCHARGE_STATUS_ITEM } from './../PartialDischarge';\r\n\r\ntype PartialDischargeGridRowProps = {\r\n indexNo: number\r\n partialDischargeType: V_PARTIAL_DISCHARGE_STATUS_ITEM;\r\n partialDischargeTypeList: V_PARTIAL_DISCHARGE_STATUS_ITEM[];\r\n onChangeData: (value: V_PARTIAL_DISCHARGE_STATUS_ITEM) => void;\r\n};\r\n\r\nconst PartialDischargeGridRow: React.FC = (props: PartialDischargeGridRowProps) => {\r\n const tableStyle = TableBaseStyle();\r\n const { t } = useTranslation();\r\n\r\n const [dialogOpen, setDialogOpen] = React.useState(false);\r\n const [showMessage, setShowMessage] = React.useState('');\r\n\r\n /**\r\n * データ更新通知\r\n */\r\n useEffect(() => {\r\n //データ初期値にセットされている内容を再描画時に変えたい場合、useEffectが必要\r\n console.debug(['PartialDischargeGridRow - useEffect props.PartialDischargeGridRow', props.partialDischargeType]);\r\n // console.debug([\"partialDischargeSetting\", partialDischargeSetting]);\r\n }, [props.partialDischargeType]);\r\n\r\n /**\r\n * 上位にデータ変更通知\r\n * @param editRow \r\n * @param editFlg \r\n */\r\n const onChangeData = (editRow: V_PARTIAL_DISCHARGE_STATUS_ITEM, editFlg: boolean) => {\r\n if (editFlg) {\r\n editRow.MAN_COLDATE = new Date;\r\n props.onChangeData(editRow);\r\n }\r\n }\r\n\r\n /**\r\n * 手動収集の状態一覧\r\n * @param sate \r\n * @returns \r\n */\r\n const getManualColectionString = (sate?: number): string => {\r\n console.debug(['getManualColectionString', sate]);\r\n if (sate == undefined) return t('PartialDischargeGridRow.不明', '不明');\r\n switch (sate) {\r\n case 0:\r\n return t('PartialDischargeGridRow.収集中', '収集中');\r\n case 1:\r\n return t('PartialDischargeGridRow.要求中', '要求中');\r\n case 2:\r\n return t('PartialDischargeGridRow.開始', '開始');\r\n case 3:\r\n return t('PartialDischargeGridRow.開始', '開始');\r\n default:\r\n return t('PartialDischargeGridRow.不明', '不明');\r\n }\r\n };\r\n /**\r\n * 手動収集 ラベルカラー\r\n * @param sate \r\n * @returns \r\n */\r\n const getManualColectionColor = (sate?: number): string => {\r\n\r\n if (sate == undefined) return 'LightGray';\r\n switch (sate) {\r\n case 0: //収集中\r\n return 'LightSkyBlue';\r\n case 1: //要求中\r\n return 'Orange';\r\n case 2: //開始(ラベル)\r\n return \"LightGray\";\r\n case 3: //開始(ボタン)\r\n return \"Green\";\r\n default: //不明\r\n return 'LightGray';\r\n }\r\n };\r\n\r\n /**\r\n * 状態一覧\r\n * @param sate \r\n * @returns \r\n */\r\n const GetStatusString = (sate?: number): string => {\r\n if (sate == undefined) return t('PartialDischargeGridRow.不明', '不明');\r\n\r\n switch (sate) {\r\n case 1:\r\n return t('PartialDischargeGridRow.軽故障', '軽故障');\r\n case 2:\r\n return t('PartialDischargeGridRow.重故障', '重故障');\r\n case 4:\r\n return t('PartialDischargeGridRow.システム故障', 'システム故障');\r\n case 0:\r\n return t('PartialDischargeGridRow.正常', '正常');\r\n default:\r\n return t('PartialDischargeGridRow.不明', '不明');\r\n }\r\n }\r\n\r\n /**\r\n * 状態表示を取得\r\n * @param sate \r\n * @returns \r\n */\r\n const GetStatusColor = (sate?: number): { color: string; background: string } => {\r\n if (sate == undefined) return { color: 'white', background: 'LightGray' };\r\n\r\n switch (sate) {\r\n case 1: //軽故障\r\n return { color: 'black', background: 'yellow' };\r\n case 2: //重故障\r\n return { color: 'white', background: 'red' };\r\n case 4: //システム故障\r\n return { color: 'white', background: 'red' };\r\n case 0:\r\n //正常\r\n return { color: 'white', background: 'green' };\r\n default:\r\n return { color: 'white', background: 'LightGray' };\r\n }\r\n };\r\n\r\n /**\r\n * OK処理\r\n */\r\n const handleDialogOkButton = () => {\r\n props.partialDischargeType.manualButtonStat = 1; //要求中に変更\r\n onChangeData(props.partialDischargeType, true);\r\n setDialogOpen(false);\r\n };\r\n /**\r\n * 確認ダイアログ\r\n */\r\n const handleCheckDialogShow = () => {\r\n setShowMessage(t('PartialDischargeGridRow.手動収集を要求しますか', '手動収集を要求しますか?'));\r\n setDialogOpen(true);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n {/** No. */}\r\n {props.indexNo + 1}\r\n {/** 機器番号機器名称 */}\r\n \r\n {props.partialDischargeType.Dev_NoName}\r\n \r\n {/** 状態 */}\r\n \r\n {props.partialDischargeType.Dev_NoName !== \" \" ? //機器番号が登録されていない場合非表示\r\n \r\n {GetStatusString(props.partialDischargeType.StatNo)}\r\n \r\n : null\r\n }\r\n \r\n {/** 最新収集時刻 */}\r\n \r\n {props.partialDischargeType.Coldate !== undefined && props.partialDischargeType.Coldate !== null ?\r\n dayjs(props.partialDischargeType.Coldate).format('YYYY-MM-DD HH:mm:ss') : \"\"\r\n }\r\n \r\n {/** 手動収集 */}\r\n \r\n {props.partialDischargeType.Dev_NoName !== \" \" ? //機器番号が登録されていない場合非表示\r\n props.partialDischargeType.manualButtonStat == 3 ? (\r\n {\r\n handleCheckDialogShow();\r\n\r\n }}\r\n disabled={props.partialDischargeType.manualButtonStat != 3}\r\n >\r\n {getManualColectionString(props.partialDischargeType.manualButtonStat)}\r\n \r\n ) : (\r\n \r\n {getManualColectionString(props.partialDischargeType.manualButtonStat)}\r\n \r\n )\r\n : null\r\n }\r\n handleDialogOkButton()}\r\n onCancel={() => setDialogOpen(false)}\r\n title={t('PartialDischargeGridRow.確認', '確認')}\r\n okText={t('PartialDischargeGridRow.OK', 'OK')}\r\n cancelText={t('PartialDischargeGridRow.キャンセル', 'キャンセル')}\r\n maxWidth={'sm'}\r\n >\r\n {showMessage}\r\n \r\n \r\n {/** 次回収集予定 */}\r\n \r\n {props.partialDischargeType.AUTO_NEXTDATE !== undefined && props.partialDischargeType.AUTO_NEXTDATE !== null ?\r\n dayjs(props.partialDischargeType.AUTO_NEXTDATE).format('YYYY-MM-DD HH:mm:ss') : \"\"\r\n }\r\n \r\n \r\n \r\n )\r\n}\r\nexport default PartialDischargeGridRow;","import React, { useEffect, useState, useContext } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport Paper from '@material-ui/core/Paper';\r\n\r\nimport { V_PARTIAL_DISCHARGE_STATUS_ITEM } from '../PartialDischarge';\r\nimport { TableBaseStyle } from '../PartialDischargeStyle';\r\nimport PartialDischargeGridRow from './PartialDischargeGridRow';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ntype PartialDischargeGridProps = {\r\n //isDispPLC: boolean;\r\n partialDischargeTypeList: V_PARTIAL_DISCHARGE_STATUS_ITEM[];\r\n onChangeRowData: (value: V_PARTIAL_DISCHARGE_STATUS_ITEM) => void;\r\n};\r\n\r\n\r\nconst PartialDischargeGrid = (props: PartialDischargeGridProps) => {\r\n\r\n const tableStyle = TableBaseStyle();\r\n const { t } = useTranslation();\r\n\r\n /**\r\n * 行変更通知\r\n * @returns\r\n */\r\n const changePartialDischargeType = (target: V_PARTIAL_DISCHARGE_STATUS_ITEM) => {\r\n\r\n props.onChangeRowData(target)\r\n };\r\n\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n {t('PartialDischargeGrid.No', 'No.')}\r\n \r\n \r\n {t('PartialDischargeGrid.機器番号_名称', '機器番号・名称')}\r\n \r\n \r\n {t('PartialDischargeGrid.状態', '状態')}\r\n \r\n \r\n {t('PartialDischargeGrid.最新収集時刻', '最新収集時刻')}\r\n \r\n \r\n {t('PartialDischargeGrid.手動収集', '手動収集')}\r\n \r\n \r\n {t('PartialDischargeGrid.次回収集予定', '次回収集予定')}\r\n \r\n \r\n \r\n \r\n {props.partialDischargeTypeList.map((row, index) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n
\r\n \r\n );\r\n}\r\nexport default PartialDischargeGrid;","import DateTimeInput from \"../../atoms/Calendar/DateTimeInput\";\r\nimport { ComboBoxItemTypeS } from \"../../atoms/ComboBox/ItemComboBoxStr\"\r\nimport dayjs from 'dayjs';\r\n\r\nimport { LogD } from \"../../../function/LogLapper\";\r\n\r\nexport const MAN_STAT = {\r\n /** 収集中 */\r\n Collection: 64,\r\n /** リトライ中 */\r\n Retry: 128,\r\n}\r\n\r\nexport type ComboItem = {\r\n Key: number;\r\n Disp: string;\r\n Tag?: any; //付加情報\r\n}\r\n\r\nexport type V_PARTIAL_DISCHARGE_STATUS_ITEM = {\r\n /**PLC NOを取得 */\r\n PLC_NO: number;\r\n\r\n /**SET_NOを取得 */\r\n SET_NO: number;\r\n\r\n /**機器 INDEX を取得 */\r\n DEV_INDEX: number;\r\n\r\n /**機器番号・名称を取得 */\r\n Dev_NoName: string;\r\n\r\n /**機器を取得または設定 */\r\n DEV_NAME: string;\r\n\r\n /**収集開始時刻を取得(自動or手動) */\r\n Coldate?: Date;\r\n\r\n /**手動収集開始時刻を取得 */\r\n MAN_COLDATE?: Date;\r\n\r\n /**次回収集開始時刻を取得 */\r\n AUTO_NEXTDATE?: Date;\r\n\r\n /**状態を取得 */\r\n StatNo: number;\r\n\r\n /**手動収集の状態を取得 */\r\n Man_ColStatNo: number;\r\n\r\n /**手動収集ボタンの状態 */\r\n manualButtonStat: number;\r\n};\r\n\r\n/**\r\n * 部分放電グラフアイテム\r\n */\r\nexport type PartialDischargeGraphXYDataModel = {\r\n /**X軸値 */\r\n XValue?: number;\r\n /**Y軸値 */\r\n YValue?: number;\r\n /**ドットサイズ */\r\n Size?: number;\r\n}\r\n\r\n/**\r\n * 部分放電グラフ画面 グラフアイテム\r\n */\r\nexport type PartialDischargeGraphDataModel = {\r\n /**位相特性グラフリスト */\r\n PhaseCharacteristicsGraphList: PartialDischargeGraphXYDataModel[];\r\n /**累積頻度グラフリスト */\r\n CumulativeFrequencyGraphList: PartialDischargeGraphXYDataModel[];\r\n /**PD 強度 */\r\n MeasureValue: number;\r\n}\r\n\r\n/** レスポンス情報 */\r\nexport type ResponceDataType = {\r\n ResponseCode: number;\r\n ErrorCode: number;\r\n ResponseMessage: string;\r\n ErrorMessage: string;\r\n};\r\n\r\nexport type PartialDischargeStatusModel = {\r\n PartialDischargeStatusItems: V_PARTIAL_DISCHARGE_STATUS_ITEM[],\r\n ResponceData: ResponceDataType\r\n}\r\n\r\n/**\r\n * 部分放電グラフ画面 機器情報一覧\r\n */\r\nexport type PartialDischargeGraphDevItemsModel = {\r\n /**機器番号・機器名称のリスト */\r\n NameDevSetLists: ComboItem[];\r\n /**エラー情報 */\r\n ResponceData: ResponceDataType;\r\n}\r\n\r\n/**\r\n * 部分放電グラフ画面 計測日の時間リスト\r\n */\r\nexport type PartialDischargeGraphDateItemModel = {\r\n /**時間リスト取得 */\r\n DateTimeList: string[];\r\n /**エラー情報 */\r\n ResponceData: ResponceDataType;\r\n}\r\n\r\nexport type SelectDataType = {\r\n /**選択機器番号 */\r\n devIndex: number;\r\n /**選択日時 */\r\n selectDate: string;\r\n /**選択時間 */\r\n selectTime: string;\r\n /**表示時間 */\r\n viwTime: number;\r\n}\r\n\r\nexport type SeectViewTimeType = {\r\n itemNo: number;\r\n selectViwTime: string;\r\n}\r\n\r\n/**\r\n * 部分放電 情報一覧表示 データ取得\r\n * @returns \r\n */\r\nexport const GetPartialDischargeStatusData = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/PartialDischargeStatus/\")\r\n .then((res) => {\r\n console.debug([\"res\", res]);\r\n if (!res.ok) {\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n console.debug([\"message\", message]);\r\n throw new Error(message);\r\n }\r\n else {\r\n console.debug([\"res.json\", res]);\r\n return res.json();\r\n }\r\n })\r\n .then((result: PartialDischargeStatusModel) => {\r\n console.debug([\"then result\", result]);\r\n if (result != null) {\r\n if (result !== null) {\r\n console.debug([\"GetPartialDischargeStatusData - ok\", result]);\r\n }\r\n resolve(result);\r\n }\r\n else {\r\n console.debug([\"Invalidate response\", result]);\r\n reject('Invalidate response');\r\n }\r\n })\r\n .catch((error) => {\r\n console.debug([\"error\", error]);\r\n console.error(error.status);\r\n console.error(error);\r\n reject(error);\r\n })\r\n })\r\n};\r\n/**\r\n * 部分放電 情報一覧表示 手動操作\r\n * @param statusItem \r\n * @returns \r\n */\r\nexport const PutPartialDischargeStatusData = (statusItem: V_PARTIAL_DISCHARGE_STATUS_ITEM): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/PartialDischargeStatus\", {\r\n method: 'put',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(statusItem),\r\n })\r\n .then((res) => {\r\n if (!res.ok) {\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n reject(message);\r\n }\r\n return res.json();\r\n })\r\n .then((result: ResponceDataType) => {\r\n console.debug([\"PutPartialDischargeCollectionData - result \", result])\r\n resolve(result);\r\n })\r\n .catch((error) => {\r\n console.debug([\"error\", error]);\r\n console.error(error.status);\r\n console.error(error);\r\n reject(error);\r\n })\r\n });\r\n}\r\n\r\n/**\r\n * 部分放電グラフ 機器情報取得\r\n * @returns \r\n */\r\nexport const GetPartialDischargeGraphDevListData = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/PartialDischargeGraph/GetPartialDischargeGraphDevListData\") //GetPartialDischargeGraphDevListData\r\n .then((res) => {\r\n console.debug([\"res\", res]);\r\n if (!res.ok) {\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n console.debug([\"message\", message]);\r\n throw new Error(message);\r\n }\r\n else {\r\n console.debug([\"res.json\", res]);\r\n return res.json();\r\n }\r\n })\r\n .then((result: PartialDischargeGraphDevItemsModel) => {\r\n console.debug([\"then result\", result]);\r\n if (result != null) {\r\n if (result !== null) {\r\n console.debug([\"GetPartialDischargeGraphDevListData - ok\", result]);\r\n }\r\n resolve(result);\r\n }\r\n else {\r\n console.debug([\"Invalidate response\", result]);\r\n reject('Invalidate response');\r\n }\r\n })\r\n .catch((error) => {\r\n console.debug([\"error\", error]);\r\n console.error(error.status);\r\n console.error(error);\r\n reject(error);\r\n })\r\n })\r\n\r\n};\r\n\r\n/**\r\n * 部分放電グラフ datファイルの存在する時間リストを取得\r\n * @param devIndex \r\n * @param targetDay \r\n * @returns \r\n */\r\nexport const GetDataTimeList = (devIndex: number, targetDay: string): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const url = \"api/PartialDischargeGraph/GetDataTimeList\";\r\n const param = `?devIndex=${devIndex}&targetTime=${targetDay}`;\r\n //console.debug(url + param);\r\n fetch(url + param)\r\n .then((res) => res.json())\r\n .then((result: PartialDischargeGraphDateItemModel) => {\r\n //console.debug(['result', result]);\r\n if (TimeListValidate(result.DateTimeList)) resolve(result);\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.debug([\"error\", error]);\r\n console.error(error.status);\r\n console.error(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\nconst TimeListValidate = (data: string[]) => {\r\n LogD(`GetTimeListValidate ckeck ${data}`, true);\r\n if (data == undefined) return false;\r\n LogD(\"GetTimeListValidate ckeck ok\", true);\r\n return true;\r\n};\r\n\r\n/**\r\n * 部分放電グラフ datファイルの存在する時間リストを取得\r\n * @param devIndex \r\n * @returns \r\n */\r\nexport const GetLatesTime = (devIndex: number): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const url = \"api/PartialDischargeGraph/GetDataLatesTime\";\r\n const param = `?devIndex=${devIndex}`;\r\n console.debug(url + param);\r\n fetch(url + param)\r\n .then((res) => res.json())\r\n .then((result: PartialDischargeGraphDateItemModel) => {\r\n console.debug(result);\r\n if (LatesTimeValidate(result.DateTimeList)) resolve(result);\r\n \r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.debug([\"error\", error]);\r\n console.error(error.status);\r\n console.error(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\nconst LatesTimeValidate = (data: string[]) => {\r\n console.debug(\"LatesTimeValidate ckeck\");\r\n if (data == undefined) return false;\r\n LogD(\"LatesTimeValidate ckeck ok\", true);\r\n return true;\r\n};\r\n\r\n/**\r\n * 部分放電グラフ グラフデータ取得\r\n * @param devIndex \r\n * @param targetDay \r\n * @param targetDate \r\n * @returns \r\n */\r\nexport const GetPartialDischargeGraphItemData = (devIndex: number, targetDay: string, measureTime: number): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const url = \"api/PartialDischargeGraph/GetPartialDischargeGraphItemData\";\r\n const param = `?devIndex=${devIndex}&targetTime=${targetDay}&measureTime=${measureTime}`;\r\n console.debug(url + param);\r\n fetch(url + param)\r\n .then((res) => res.json())\r\n .then((result: PartialDischargeGraphDataModel) => {\r\n console.debug(result);\r\n if (result != null) {\r\n if (result !== null) {\r\n console.debug([\"GetPartialDischargeGraphItemData - ok\", result]);\r\n }\r\n resolve(result);\r\n }\r\n else {\r\n console.debug([\"Invalidate response\", result]);\r\n reject('Invalidate response');\r\n }\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n\r\n\r\n\r\n};\r\n\r\n\r\n\r\n/**\r\n * 画面で使用するコンボボックスアイテムリストを作成\r\n * @param settings FileTimeリスト\r\n * @param nameDevSets NameDevSetリスト\r\n * @returns コンボボックスリスト\r\n */\r\nexport const CreateTimeCombBoxItems = (fileTimes: Date[]): ComboBoxItemTypeS[] => {\r\n let comboItems: ComboBoxItemTypeS[] = [];\r\n\r\n fileTimes.forEach((r) => {\r\n const item: ComboBoxItemTypeS = {\r\n key: dayjs(r).format('HH:mm:ss'),\r\n name: dayjs(r).format('HH:mm:ss')\r\n }\r\n comboItems.push(item);\r\n });\r\n\r\n return comboItems;\r\n};\r\n\r\n/**\r\n* 手動収集の状態を取得\r\n* @param stat \r\n*/\r\nexport const GetManCollectionStat = (rowList: V_PARTIAL_DISCHARGE_STATUS_ITEM[], row: V_PARTIAL_DISCHARGE_STATUS_ITEM): number => {\r\n console.debug([\"GetManCollectionStat1\", row]);\r\n if(row.StatNo === -1){\r\n //不明\r\n return -1;\r\n }\r\n if (row.Man_ColStatNo === MAN_STAT.Collection || row.Man_ColStatNo === MAN_STAT.Retry) {\r\n //収集中\r\n return 0;\r\n }\r\n else {\r\n let tempList = rowList\r\n .filter((r) => r.SET_NO !== row.SET_NO)\r\n .filter((r) => r.Man_ColStatNo === MAN_STAT.Collection\r\n || r.Man_ColStatNo === MAN_STAT.Retry\r\n )\r\n if (tempList.length !== 0) {\r\n //開始(ラベル)\r\n return 2;\r\n }\r\n else {\r\n //開始(ボタン)\r\n return 3;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * ボタン押下した行以外を開始(ラベル)に変更\r\n * @param rowList \r\n * @param row \r\n * @returns \r\n */\r\nexport const ChangeMancollectionStat = (rowList: V_PARTIAL_DISCHARGE_STATUS_ITEM[], row: V_PARTIAL_DISCHARGE_STATUS_ITEM): V_PARTIAL_DISCHARGE_STATUS_ITEM[] => {\r\n let retList: V_PARTIAL_DISCHARGE_STATUS_ITEM[] = [];\r\n rowList.forEach((r) => {\r\n if (r.SET_NO !== row.SET_NO) {\r\n r.manualButtonStat = 2;\r\n }\r\n retList.push(r);\r\n })\r\n return retList;\r\n}\r\n\r\n/**\r\n* 手動収集要求日時チェック\r\n* @param setNo \r\n* @param requestManualCollectionDateTime \r\n*/\r\nexport const CheckManualTime = (rowList: V_PARTIAL_DISCHARGE_STATUS_ITEM[], setNo: number, requestManualCollectionDateTime?: Date) => {\r\n if (requestManualCollectionDateTime !== undefined) {\r\n let rowData = rowList.find((r) => r.SET_NO === setNo);\r\n if (rowData !== undefined) {\r\n //MAN_CODATEがnullでないかつ、RequestManualCollectionDateTimeよりMAN_CODATEの方が後の時間の場合\r\n if (rowData.MAN_COLDATE !== undefined && requestManualCollectionDateTime !== undefined) {\r\n if (rowData.MAN_COLDATE > requestManualCollectionDateTime) {\r\n requestManualCollectionDateTime = undefined;\r\n }\r\n }\r\n if (rowData.Man_ColStatNo === MAN_STAT.Retry) {\r\n requestManualCollectionDateTime = undefined;\r\n }\r\n if (requestManualCollectionDateTime !== undefined) {\r\n requestManualCollectionDateTime.setSeconds(requestManualCollectionDateTime.getSeconds() + 30)\r\n if (requestManualCollectionDateTime < new Date) {\r\n requestManualCollectionDateTime = undefined;\r\n }\r\n }\r\n }\r\n }\r\n\r\n}\r\n\r\n/**\r\n* 部分放電グラフ 時間コンボボックス更新\r\n*/\r\nexport const upDateSelectTimeList = (selectTime: string): ComboBoxItemTypeS => {\r\n let selectDateList: ComboBoxItemTypeS;\r\n\r\n if (selectTime == \"\") {\r\n selectDateList = ({ key: \"\", name: \"\" })\r\n } else {\r\n selectDateList = ({\r\n key: dayjs(new Date(selectTime)).format('HH:mm:ss'),\r\n name: dayjs(new Date(selectTime)).format('HH:mm:ss')\r\n });\r\n }\r\n return selectDateList;\r\n};\r\n\r\n// export const graphTestData = [\r\n // { x: 3.56862745098039, y: 27295 },\r\n // { x: 3.72549019607843, y: 25873 },\r\n // { x: 3.49019607843137, y: 19991 },\r\n // { x: 3.64705882352941, y: 30124 },\r\n // { x: 3.84313725490196, y: 10682 },\r\n // { x: 3.92156862745098, y: 5265 },\r\n // { x: 4, y: 2083 },\r\n // { x: 3.68627450980392, y: 30096 },\r\n // { x: 3.80392156862745, y: 13557 },\r\n // { x: 3.76470588235294, y: 19702 },\r\n // { x: 3.6078431372549, y: 31988 },\r\n // { x: 3.29411764705882, y: 6234 },\r\n // { x: 3.37254901960784, y: 10241 },\r\n // { x: 3.33333333333333, y: 6816 },\r\n // { x: 3.01960784313725, y: 1192 },\r\n // { x: 3.09803921568627, y: 1952 },\r\n // { x: 3.25490196078431, y: 3926 },\r\n // { x: 3.45098039215686, y: 16863 },\r\n // { x: 3.52941176470588, y: 26676 },\r\n // { x: 2.70588235294118, y: 315 },\r\n // { x: 2.82352941176471, y: 544 },\r\n // { x: 2.94117647058824, y: 754 },\r\n // { x: 3.41176470588235, y: 12044 },\r\n // { x: 3.88235294117647, y: 7169 },\r\n // { x: 3.96078431372549, y: 2964 },\r\n // { x: 3.2156862745098, y: 3705 },\r\n // { x: 4.11764705882353, y: 381 },\r\n // { x: 4.03921568627451, y: 1225 },\r\n // { x: 3.17647058823529, y: 2879 },\r\n // { x: 2.50980392156863, y: 187 },\r\n // { x: 1.92156862745098, y: 32 },\r\n // { x: 2.19607843137255, y: 57 },\r\n // { x: 2.07843137254902, y: 22 },\r\n // { x: 3.05882352941176, y: 1535 },\r\n // { x: 2.90196078431373, y: 731 },\r\n // { x: 2.86274509803922, y: 545 },\r\n // { x: 2.74509803921569, y: 356 },\r\n // { x: 2.35294117647059, y: 115 },\r\n // { x: 2.43137254901961, y: 142 },\r\n // { x: 2.31372549019608, y: 69 },\r\n // { x: 3.13725490196078, y: 2381 },\r\n // { x: 2.66666666666667, y: 275 },\r\n // { x: 2.3921568627451, y: 113 },\r\n // { x: 2.47058823529412, y: 132 },\r\n // { x: 2.98039215686275, y: 1168 },\r\n // { x: 4.07843137254902, y: 743 },\r\n // { x: 2.7843137254902, y: 432 },\r\n // { x: 2.54901960784314, y: 179 },\r\n // { x: 2.62745098039216, y: 247 },\r\n // { x: 1.88235294117647, y: 30 },\r\n // { x: 2.58823529411765, y: 210 },\r\n // { x: 2.11764705882353, y: 60 },\r\n // { x: 2.03921568627451, y: 35 },\r\n // { x: 1.2156862745098, y: 10 },\r\n // { x: 1.96078431372549, y: 36 },\r\n // { x: 2.15686274509804, y: 65 },\r\n // { x: 2.27450980392157, y: 62 },\r\n // { x: 2.23529411764706, y: 46 },\r\n // { x: 1.05882352941176, y: 3 },\r\n // { x: 1.01960784313725, y: 9 },\r\n // { x: 0.980392156862745, y: 4 },\r\n // { x: 1.68627450980392, y: 15 },\r\n // { x: 1.84313725490196, y: 23 },\r\n // { x: 4.15686274509804, y: 228 },\r\n // { x: 1.64705882352941, y: 15 },\r\n // { x: 1.6078431372549, y: 7 },\r\n // { x: 1.37254901960784, y: 11 },\r\n // { x: 1.41176470588235, y: 13 },\r\n // { x: 1.25490196078431, y: 7 },\r\n // { x: 4.23529411764706, y: 89 },\r\n // { x: 2, y: 26 },\r\n // { x: 1.72549019607843, y: 16 },\r\n // { x: 1.56862745098039, y: 12 },\r\n // { x: 1.80392156862745, y: 14 },\r\n // { x: 1.76470588235294, y: 16 },\r\n // { x: 4.19607843137255, y: 124 },\r\n // { x: 1.49019607843137, y: 18 },\r\n // { x: 4.31372549019608, y: 14 },\r\n // { x: 0.666666666666667, y: 2 },\r\n // { x: 0.509803921568627, y: 1 },\r\n // { x: 0.901960784313726, y: 3 },\r\n // { x: 4.27450980392157, y: 37 },\r\n // { x: 1.45098039215686, y: 8 },\r\n // { x: 1.17647058823529, y: 7 },\r\n // { x: 1.52941176470588, y: 8 },\r\n // { x: 1.33333333333333, y: 6 },\r\n // { x: 0.784313725490196, y: 4 },\r\n // { x: 0.627450980392157, y: 2 },\r\n // { x: 1.09803921568627, y: 4 },\r\n // { x: 1.29411764705882, y: 5 },\r\n // { x: 4.35294117647059, y: 10 },\r\n // { x: 1.13725490196078, y: 7 },\r\n // { x: 0.823529411764706, y: 2 },\r\n // { x: 0.862745098039216, y: 3 },\r\n // { x: 0.705882352941177, y: 1 },\r\n // { x: 4.3921568627451, y: 4 },\r\n // { x: 0.941176470588235, y: 3 },\r\n // { x: 4.43137254901961, y: 1 },\r\n // ];\r\n\r\n\r\n // export const graphTestData2 = [\r\n // { x: 0, y: 3.64705882352941, size: 1 },\r\n // { x: 0.647482014388489, y: 3.72549019607843, size: 1 },\r\n // { x: 1.29496402877698, y: 3.80392156862745, size: 1 },\r\n // { x: 1.94244604316547, y: 3.92156862745098, size: 1 },\r\n // { x: 2.58992805755396, y: 3.64705882352941, size: 1 },\r\n // { x: 3.23741007194245, y: 3.84313725490196, size: 1 },\r\n // { x: 3.88489208633094, y: 3.84313725490196, size: 1 },\r\n // { x: 4.53237410071942, y: 3.76470588235294, size: 1 },\r\n // { x: 5.17985611510791, y: 3.76470588235294, size: 1 },\r\n // { x: 5.8273381294964, y: 3.72549019607843, size: 1 },\r\n // { x: 6.47482014388489, y: 3.80392156862745, size: 1 },\r\n // { x: 7.12230215827338, y: 3.80392156862745, size: 1 },\r\n // { x: 7.76978417266187, y: 3.68627450980392, size: 1 },\r\n // { x: 8.41726618705036, y: 3.68627450980392, size: 1 },\r\n // { x: 9.06474820143885, y: 3.84313725490196, size: 1 },\r\n // { x: 9.71223021582734, y: 3.72549019607843, size: 1 },\r\n // { x: 10.3597122302158, y: 3.6078431372549, size: 1 },\r\n // { x: 11.0071942446043, y: 3.29411764705882, size: 1 },\r\n // { x: 11.6546762589928, y: 3.37254901960784, size: 1 },\r\n // { x: 12.3021582733813, y: 3.33333333333333, size: 1 },\r\n // { x: 12.9496402877698, y: 3.01960784313725, size: 1 },\r\n // { x: 13.5971223021583, y: 3.09803921568627, size: 1 },\r\n // { x: 14.2446043165468, y: 3.64705882352941, size: 1 },\r\n // { x: 14.8920863309353, y: 3.72549019607843, size: 1 },\r\n // { x: 15.5395683453237, y: 3.49019607843137, size: 1 },\r\n // { x: 16.1870503597122, y: 3.68627450980392, size: 1 },\r\n // { x: 16.8345323741007, y: 3.25490196078431, size: 1 },\r\n // { x: 17.4820143884892, y: 3.72549019607843, size: 1 },\r\n // { x: 18.1294964028777, y: 3.68627450980392, size: 1 },\r\n // { x: 18.7769784172662, y: 3.45098039215686, size: 1 },\r\n // { x: 19.4244604316547, y: 3.6078431372549, size: 1 },\r\n // { x: 20.0719424460432, y: 3.49019607843137, size: 1 },\r\n // { x: 20.7194244604317, y: 3.64705882352941, size: 1 },\r\n // { x: 21.3669064748201, y: 3.33333333333333, size: 1 },\r\n // { x: 22.0143884892086, y: 3.68627450980392, size: 1 },\r\n // { x: 22.6618705035971, y: 3.6078431372549, size: 1 },\r\n // { x: 23.3093525179856, y: 3.45098039215686, size: 1 },\r\n // { x: 23.9568345323741, y: 3.33333333333333, size: 1 },\r\n // { x: 24.6043165467626, y: 3.6078431372549, size: 1 },\r\n // { x: 25.2517985611511, y: 3.45098039215686, size: 1 },\r\n // { x: 25.8992805755396, y: 3.45098039215686, size: 1 },\r\n // { x: 26.5467625899281, y: 3.64705882352941, size: 1 },\r\n // { x: 27.1942446043165, y: 3.56862745098039, size: 1 },\r\n // { x: 27.841726618705, y: 3.52941176470588, size: 1 },\r\n // { x: 28.4892086330935, y: 3.72549019607843, size: 1 },\r\n // { x: 29.136690647482, y: 3.68627450980392, size: 1 },\r\n // { x: 29.7841726618705, y: 3.49019607843137, size: 1 },\r\n // { x: 30.431654676259, y: 3.45098039215686, size: 1 },\r\n // { x: 31.0791366906475, y: 3.45098039215686, size: 1 },\r\n // { x: 31.726618705036, y: 3.52941176470588, size: 1 },\r\n // { x: 32.3741007194245, y: 3.52941176470588, size: 1 },\r\n // { x: 33.0215827338129, y: 3.29411764705882, size: 1 },\r\n // { x: 33.6690647482014, y: 3.49019607843137, size: 1 },\r\n // { x: 34.3165467625899, y: 2.70588235294118, size: 1 },\r\n // { x: 34.9640287769784, y: 2.82352941176471, size: 1 },\r\n // { x: 35.6115107913669, y: 2.94117647058824, size: 1 },\r\n // { x: 36.2589928057554, y: 2.94117647058824, size: 1 },\r\n // { x: 36.9064748201439, y: 3.09803921568627, size: 1 },\r\n // { x: 37.5539568345324, y: 3.76470588235294, size: 1 },\r\n // { x: 38.2014388489209, y: 3.6078431372549, size: 1 },\r\n // { x: 38.8489208633094, y: 3.52941176470588, size: 1 },\r\n // { x: 39.4964028776978, y: 3.37254901960784, size: 1 },\r\n // { x: 40.1438848920863, y: 3.52941176470588, size: 1 },\r\n // { x: 40.7913669064748, y: 3.52941176470588, size: 1 },\r\n // { x: 41.4388489208633, y: 3.37254901960784, size: 1 },\r\n // { x: 42.0863309352518, y: 3.45098039215686, size: 1 },\r\n // { x: 42.7338129496403, y: 3.45098039215686, size: 1 },\r\n // { x: 43.3812949640288, y: 3.56862745098039, size: 1 },\r\n // { x: 44.0287769784173, y: 3.6078431372549, size: 1 },\r\n // { x: 44.6762589928058, y: 3.68627450980392, size: 1 },\r\n // { x: 45.3237410071942, y: 3.68627450980392, size: 1 },\r\n // { x: 45.9712230215827, y: 3.41176470588235, size: 1 },\r\n // { x: 46.6187050359712, y: 3.49019607843137, size: 1 },\r\n // { x: 47.2661870503597, y: 3.56862745098039, size: 1 },\r\n // { x: 47.9136690647482, y: 3.37254901960784, size: 1 },\r\n // { x: 48.5611510791367, y: 3.41176470588235, size: 1 },\r\n // { x: 49.2086330935252, y: 3.45098039215686, size: 1 },\r\n // { x: 49.8561151079137, y: 3.49019607843137, size: 1 },\r\n // { x: 50.5035971223022, y: 3.56862745098039, size: 1 },\r\n // { x: 51.1510791366906, y: 3.49019607843137, size: 1 },\r\n // { x: 51.7985611510791, y: 3.52941176470588, size: 1 },\r\n // { x: 52.4460431654676, y: 3.49019607843137, size: 1 },\r\n // { x: 53.0935251798561, y: 3.72549019607843, size: 1 },\r\n // { x: 53.7410071942446, y: 3.52941176470588, size: 1 },\r\n // { x: 54.3884892086331, y: 3.92156862745098, size: 1 },\r\n // { x: 55.0359712230216, y: 3.92156862745098, size: 1 },\r\n // { x: 55.6834532374101, y: 3.88235294117647, size: 1 },\r\n // { x: 56.3309352517986, y: 3.68627450980392, size: 1 },\r\n // { x: 56.9784172661871, y: 3.76470588235294, size: 1 },\r\n // { x: 57.6258992805755, y: 3.76470588235294, size: 1 },\r\n // { x: 58.273381294964, y: 3.72549019607843, size: 1 },\r\n // { x: 58.9208633093525, y: 3.64705882352941, size: 1 },\r\n // { x: 59.568345323741, y: 3.76470588235294, size: 1 },\r\n // { x: 60.2158273381295, y: 3.80392156862745, size: 1 },\r\n // { x: 60.863309352518, y: 3.76470588235294, size: 1 },\r\n // { x: 61.5107913669065, y: 3.96078431372549, size: 1 },\r\n // { x: 62.158273381295, y: 3.6078431372549, size: 1 },\r\n // { x: 62.8057553956835, y: 3.6078431372549, size: 1 },\r\n // { x: 63.4532374100719, y: 3.92156862745098, size: 1 },\r\n // { x: 64.1007194244604, y: 3.92156862745098, size: 1 },\r\n // { x: 64.7482014388489, y: 3.84313725490196, size: 1 },\r\n // { x: 65.3956834532374, y: 3.76470588235294, size: 1 },\r\n // { x: 66.0431654676259, y: 3.96078431372549, size: 1 },\r\n // { x: 66.6906474820144, y: 3.88235294117647, size: 1 },\r\n // { x: 67.3381294964029, y: 3.56862745098039, size: 1 },\r\n // { x: 67.9856115107914, y: 3.92156862745098, size: 1 },\r\n // { x: 68.6330935251799, y: 3.88235294117647, size: 1 },\r\n // { x: 69.2805755395683, y: 4, size: 1 },\r\n // { x: 69.9280575539568, y: 3.64705882352941, size: 1 },\r\n // { x: 70.5755395683453, y: 3.72549019607843, size: 1 },\r\n // { x: 71.2230215827338, y: 3.68627450980392, size: 1 },\r\n // { x: 71.8705035971223, y: 3.72549019607843, size: 1 },\r\n // { x: 72.5179856115108, y: 4, size: 1 },\r\n // { x: 73.1654676258993, y: 3.68627450980392, size: 1 },\r\n // { x: 73.8129496402878, y: 3.76470588235294, size: 1 },\r\n // { x: 74.4604316546763, y: 3.72549019607843, size: 1 },\r\n // { x: 75.1079136690647, y: 3.76470588235294, size: 1 },\r\n // { x: 75.7553956834532, y: 3.76470588235294, size: 1 },\r\n // { x: 76.4028776978417, y: 3.84313725490196, size: 1 },\r\n // { x: 77.0503597122302, y: 3.49019607843137, size: 1 },\r\n // { x: 77.6978417266187, y: 3.37254901960784, size: 1 },\r\n // { x: 78.3453237410072, y: 3.72549019607843, size: 1 },\r\n // { x: 78.9928057553957, y: 3.68627450980392, size: 1 },\r\n // { x: 79.6402877697842, y: 3.80392156862745, size: 1 },\r\n // { x: 80.2877697841727, y: 3.88235294117647, size: 1 },\r\n // { x: 80.9352517985612, y: 3.76470588235294, size: 1 },\r\n // { x: 81.5827338129496, y: 3.72549019607843, size: 1 },\r\n // { x: 82.2302158273381, y: 3.68627450980392, size: 1 },\r\n // { x: 82.8776978417266, y: 3.76470588235294, size: 1 },\r\n // { x: 83.5251798561151, y: 3.72549019607843, size: 1 },\r\n // { x: 84.1726618705036, y: 3.84313725490196, size: 1 },\r\n // { x: 84.8201438848921, y: 3.72549019607843, size: 1 },\r\n // { x: 85.4676258992806, y: 3.80392156862745, size: 1 },\r\n // { x: 86.1151079136691, y: 3.64705882352941, size: 1 },\r\n // { x: 86.7625899280576, y: 3.76470588235294, size: 1 },\r\n // { x: 87.410071942446, y: 3.76470588235294, size: 1 },\r\n // { x: 88.0575539568345, y: 3.68627450980392, size: 1 },\r\n // { x: 88.705035971223, y: 3.72549019607843, size: 1 },\r\n // { x: 89.3525179856115, y: 3.72549019607843, size: 1 },\r\n // { x: 90, y: 3.80392156862745, size: 1 },\r\n // { x: 90.6474820143885, y: 3.96078431372549, size: 1 },\r\n // { x: 91.294964028777, y: 3.84313725490196, size: 1 },\r\n // { x: 91.9424460431655, y: 3.56862745098039, size: 1 },\r\n // { x: 92.589928057554, y: 3.88235294117647, size: 1 },\r\n // { x: 93.2374100719424, y: 3.84313725490196, size: 1 },\r\n // { x: 93.8848920863309, y: 3.80392156862745, size: 1 },\r\n // { x: 94.5323741007194, y: 3.72549019607843, size: 1 },\r\n // { x: 95.1798561151079, y: 3.76470588235294, size: 1 },\r\n // { x: 95.8273381294964, y: 3.80392156862745, size: 1 },\r\n // { x: 96.4748201438849, y: 3.88235294117647, size: 1 },\r\n // { x: 97.1223021582734, y: 3.56862745098039, size: 1 },\r\n // { x: 97.7697841726619, y: 3.6078431372549, size: 1 },\r\n // { x: 98.4172661870504, y: 3.52941176470588, size: 1 },\r\n // { x: 99.0647482014388, y: 3.25490196078431, size: 1 },\r\n // { x: 99.7122302158273, y: 3.2156862745098, size: 1 },\r\n // { x: 100.359712230216, y: 3.64705882352941, size: 1 },\r\n // { x: 101.007194244604, y: 3.88235294117647, size: 1 },\r\n // { x: 101.654676258993, y: 3.68627450980392, size: 1 },\r\n // { x: 102.302158273381, y: 3.92156862745098, size: 1 },\r\n // { x: 102.94964028777, y: 3.76470588235294, size: 1 },\r\n // { x: 103.597122302158, y: 3.80392156862745, size: 1 },\r\n // { x: 104.244604316547, y: 3.64705882352941, size: 1 },\r\n // { x: 104.892086330935, y: 3.68627450980392, size: 1 },\r\n // { x: 105.539568345324, y: 3.80392156862745, size: 1 },\r\n // { x: 106.187050359712, y: 3.88235294117647, size: 1 },\r\n // { x: 106.834532374101, y: 3.6078431372549, size: 1 },\r\n // { x: 107.482014388489, y: 3.76470588235294, size: 1 },\r\n // { x: 108.129496402878, y: 3.88235294117647, size: 1 },\r\n // { x: 108.776978417266, y: 3.76470588235294, size: 1 },\r\n // { x: 109.424460431655, y: 3.84313725490196, size: 1 },\r\n // { x: 110.071942446043, y: 3.92156862745098, size: 1 },\r\n // { x: 110.719424460432, y: 3.76470588235294, size: 1 },\r\n // { x: 111.36690647482, y: 3.84313725490196, size: 1 },\r\n // { x: 112.014388489209, y: 3.76470588235294, size: 1 },\r\n // { x: 112.661870503597, y: 3.84313725490196, size: 1 },\r\n // { x: 113.309352517986, y: 3.88235294117647, size: 1 },\r\n // { x: 113.956834532374, y: 3.92156862745098, size: 1 },\r\n // { x: 114.604316546763, y: 3.88235294117647, size: 1 },\r\n // { x: 115.251798561151, y: 3.52941176470588, size: 1 },\r\n // { x: 115.89928057554, y: 3.76470588235294, size: 1 },\r\n // { x: 116.546762589928, y: 3.68627450980392, size: 1 },\r\n // { x: 117.194244604317, y: 3.68627450980392, size: 1 },\r\n // { x: 117.841726618705, y: 3.6078431372549, size: 1 },\r\n // { x: 118.489208633094, y: 3.84313725490196, size: 1 },\r\n // { x: 119.136690647482, y: 3.25490196078431, size: 1 },\r\n // { x: 119.784172661871, y: 3.52941176470588, size: 1 },\r\n // { x: 120.431654676259, y: 3.49019607843137, size: 1 },\r\n // { x: 121.079136690647, y: 3.45098039215686, size: 1 },\r\n // { x: 121.726618705036, y: 3.52941176470588, size: 1 },\r\n // { x: 122.374100719424, y: 3.64705882352941, size: 1 },\r\n // { x: 123.021582733813, y: 3.84313725490196, size: 1 },\r\n // { x: 123.669064748201, y: 3.88235294117647, size: 1 },\r\n // { x: 124.31654676259, y: 3.72549019607843, size: 1 },\r\n // { x: 124.964028776978, y: 4.11764705882353, size: 1 },\r\n // { x: 125.611510791367, y: 3.76470588235294, size: 1 },\r\n // { x: 126.258992805755, y: 3.84313725490196, size: 1 },\r\n // { x: 126.906474820144, y: 3.84313725490196, size: 1 },\r\n // { x: 127.553956834532, y: 3.84313725490196, size: 1 },\r\n // { x: 128.201438848921, y: 3.68627450980392, size: 1 },\r\n // { x: 128.848920863309, y: 3.96078431372549, size: 1 },\r\n // { x: 129.496402877698, y: 3.72549019607843, size: 1 },\r\n // { x: 130.143884892086, y: 3.96078431372549, size: 1 },\r\n // { x: 130.791366906475, y: 3.76470588235294, size: 1 },\r\n // { x: 131.438848920863, y: 3.92156862745098, size: 1 },\r\n // { x: 132.086330935252, y: 3.72549019607843, size: 1 },\r\n // { x: 132.73381294964, y: 3.68627450980392, size: 1 },\r\n // { x: 133.381294964029, y: 3.80392156862745, size: 1 },\r\n // { x: 134.028776978417, y: 3.72549019607843, size: 1 },\r\n // { x: 134.676258992806, y: 3.68627450980392, size: 1 },\r\n // { x: 135.323741007194, y: 3.76470588235294, size: 1 },\r\n // { x: 135.971223021583, y: 3.76470588235294, size: 1 },\r\n // { x: 136.618705035971, y: 3.88235294117647, size: 1 },\r\n // { x: 137.26618705036, y: 3.80392156862745, size: 1 },\r\n // { x: 137.913669064748, y: 3.96078431372549, size: 1 },\r\n // { x: 138.561151079137, y: 3.80392156862745, size: 1 },\r\n // { x: 139.208633093525, y: 4.03921568627451, size: 1 },\r\n // { x: 139.856115107914, y: 3.68627450980392, size: 1 },\r\n // { x: 140.503597122302, y: 3.52941176470588, size: 1 },\r\n // { x: 141.151079136691, y: 3.68627450980392, size: 1 },\r\n // { x: 141.798561151079, y: 3.56862745098039, size: 1 },\r\n // { x: 142.446043165468, y: 3.33333333333333, size: 1 },\r\n // { x: 143.093525179856, y: 3.37254901960784, size: 1 },\r\n // { x: 143.741007194245, y: 3.88235294117647, size: 1 },\r\n // { x: 144.388489208633, y: 3.92156862745098, size: 1 },\r\n // { x: 145.035971223022, y: 3.76470588235294, size: 1 },\r\n // { x: 145.68345323741, y: 3.84313725490196, size: 1 },\r\n // { x: 146.330935251799, y: 3.72549019607843, size: 1 },\r\n // { x: 146.978417266187, y: 3.84313725490196, size: 1 },\r\n // { x: 147.625899280576, y: 4, size: 1 },\r\n // { x: 148.273381294964, y: 3.72549019607843, size: 1 },\r\n // { x: 148.920863309353, y: 3.92156862745098, size: 1 },\r\n // { x: 149.568345323741, y: 3.68627450980392, size: 1 },\r\n // { x: 150.215827338129, y: 3.84313725490196, size: 1 },\r\n // { x: 150.863309352518, y: 3.6078431372549, size: 1 },\r\n // { x: 151.510791366906, y: 3.68627450980392, size: 1 },\r\n // { x: 152.158273381295, y: 3.68627450980392, size: 1 },\r\n // { x: 152.805755395683, y: 3.68627450980392, size: 1 },\r\n // { x: 153.453237410072, y: 3.64705882352941, size: 1 },\r\n // { x: 154.10071942446, y: 3.72549019607843, size: 1 },\r\n // { x: 154.748201438849, y: 3.76470588235294, size: 1 },\r\n // { x: 155.395683453237, y: 3.84313725490196, size: 1 },\r\n // { x: 156.043165467626, y: 3.84313725490196, size: 1 },\r\n // { x: 156.690647482014, y: 3.72549019607843, size: 1 },\r\n // { x: 157.338129496403, y: 3.80392156862745, size: 1 },\r\n // { x: 157.985611510791, y: 3.64705882352941, size: 1 },\r\n // { x: 158.63309352518, y: 3.72549019607843, size: 1 },\r\n // { x: 159.280575539568, y: 3.76470588235294, size: 1 },\r\n // { x: 159.928057553957, y: 3.68627450980392, size: 1 },\r\n // { x: 160.575539568345, y: 3.88235294117647, size: 1 },\r\n // { x: 161.223021582734, y: 3.76470588235294, size: 1 },\r\n // { x: 161.870503597122, y: 3.80392156862745, size: 1 },\r\n // { x: 162.517985611511, y: 3.72549019607843, size: 1 },\r\n // { x: 163.165467625899, y: 3.17647058823529, size: 1 },\r\n // { x: 163.812949640288, y: 2.50980392156863, size: 1 },\r\n // { x: 164.460431654676, y: 1.92156862745098, size: 1 },\r\n // { x: 165.107913669065, y: 2.19607843137255, size: 1 },\r\n // { x: 165.755395683453, y: 2.07843137254902, size: 1 },\r\n // { x: 166.402877697842, y: 3.05882352941176, size: 1 },\r\n // { x: 167.05035971223, y: 3.49019607843137, size: 1 },\r\n // { x: 167.697841726619, y: 3.45098039215686, size: 1 },\r\n // { x: 168.345323741007, y: 3.09803921568627, size: 1 },\r\n // { x: 168.992805755396, y: 2.90196078431373, size: 1 },\r\n // { x: 169.640287769784, y: 3.56862745098039, size: 1 },\r\n // { x: 170.287769784173, y: 3.68627450980392, size: 1 },\r\n // { x: 170.935251798561, y: 3.52941176470588, size: 1 },\r\n // { x: 171.58273381295, y: 3.68627450980392, size: 1 },\r\n // { x: 172.230215827338, y: 3.76470588235294, size: 1 },\r\n // { x: 172.877697841727, y: 3.56862745098039, size: 1 },\r\n // { x: 173.525179856115, y: 2.86274509803922, size: 1 },\r\n // { x: 174.172661870504, y: 3.76470588235294, size: 1 },\r\n // { x: 174.820143884892, y: 3.72549019607843, size: 1 },\r\n // { x: 175.467625899281, y: 3.64705882352941, size: 1 },\r\n // { x: 176.115107913669, y: 3.68627450980392, size: 1 },\r\n // { x: 176.762589928058, y: 3.76470588235294, size: 1 },\r\n // { x: 177.410071942446, y: 3.76470588235294, size: 1 },\r\n // { x: 178.057553956835, y: 3.6078431372549, size: 1 },\r\n // { x: 178.705035971223, y: 3.6078431372549, size: 1 },\r\n // { x: 179.352517985612, y: 2.74509803921569, size: 1 },\r\n // { x: 180, y: 2.86274509803922, size: 1 },\r\n // { x: 180.647482014388, y: 3.29411764705882, size: 1 },\r\n // { x: 181.294964028777, y: 3.37254901960784, size: 1 },\r\n // { x: 181.942446043165, y: 3.45098039215686, size: 1 },\r\n // { x: 182.589928057554, y: 3.33333333333333, size: 1 },\r\n // { x: 183.237410071942, y: 3.41176470588235, size: 1 },\r\n // { x: 183.884892086331, y: 3.29411764705882, size: 1 },\r\n // { x: 184.532374100719, y: 3.37254901960784, size: 1 },\r\n // { x: 185.179856115108, y: 3.05882352941176, size: 1 },\r\n // { x: 185.827338129496, y: 2.74509803921569, size: 1 },\r\n // { x: 186.474820143885, y: 3.64705882352941, size: 1 },\r\n // { x: 187.122302158273, y: 3.76470588235294, size: 1 },\r\n // { x: 187.769784172662, y: 3.92156862745098, size: 1 },\r\n // { x: 188.41726618705, y: 3.84313725490196, size: 1 },\r\n // { x: 189.064748201439, y: 3.68627450980392, size: 1 },\r\n // { x: 189.712230215827, y: 3.68627450980392, size: 1 },\r\n // { x: 190.359712230216, y: 3.68627450980392, size: 1 },\r\n // { x: 191.007194244604, y: 3.72549019607843, size: 1 },\r\n // { x: 191.654676258993, y: 3.64705882352941, size: 1 },\r\n // { x: 192.302158273381, y: 3.80392156862745, size: 1 },\r\n // { x: 192.94964028777, y: 3.68627450980392, size: 1 },\r\n // { x: 193.597122302158, y: 3.68627450980392, size: 1 },\r\n // { x: 194.244604316547, y: 3.68627450980392, size: 1 },\r\n // { x: 194.892086330935, y: 3.84313725490196, size: 1 },\r\n // { x: 195.539568345324, y: 3.76470588235294, size: 1 },\r\n // { x: 196.187050359712, y: 3.84313725490196, size: 1 },\r\n // { x: 196.834532374101, y: 3.76470588235294, size: 1 },\r\n // { x: 197.482014388489, y: 3.92156862745098, size: 1 },\r\n // { x: 198.129496402878, y: 3.64705882352941, size: 1 },\r\n // { x: 198.776978417266, y: 3.84313725490196, size: 1 },\r\n // { x: 199.424460431655, y: 3.84313725490196, size: 1 },\r\n // { x: 200.071942446043, y: 3.68627450980392, size: 1 },\r\n // { x: 200.719424460432, y: 3.72549019607843, size: 1 },\r\n // { x: 201.36690647482, y: 3.76470588235294, size: 1 },\r\n // { x: 202.014388489209, y: 3.68627450980392, size: 1 },\r\n // { x: 202.661870503597, y: 3.76470588235294, size: 1 },\r\n // { x: 203.309352517986, y: 3.76470588235294, size: 1 },\r\n // { x: 203.956834532374, y: 3.72549019607843, size: 1 },\r\n // { x: 204.604316546763, y: 3.76470588235294, size: 1 },\r\n // { x: 205.251798561151, y: 3.49019607843137, size: 1 },\r\n // { x: 205.89928057554, y: 3.88235294117647, size: 1 },\r\n // { x: 206.546762589928, y: 3.41176470588235, size: 1 },\r\n // { x: 207.194244604317, y: 2.94117647058824, size: 1 },\r\n // { x: 207.841726618705, y: 3.37254901960784, size: 1 },\r\n // { x: 208.489208633094, y: 3.52941176470588, size: 1 },\r\n // { x: 209.136690647482, y: 3.37254901960784, size: 1 },\r\n // { x: 209.784172661871, y: 3.29411764705882, size: 1 },\r\n // { x: 210.431654676259, y: 3.52941176470588, size: 1 },\r\n // { x: 211.079136690647, y: 3.6078431372549, size: 1 },\r\n // { x: 211.726618705036, y: 3.6078431372549, size: 1 },\r\n // { x: 212.374100719424, y: 3.72549019607843, size: 1 },\r\n // { x: 213.021582733813, y: 3.49019607843137, size: 1 },\r\n // { x: 213.669064748201, y: 3.72549019607843, size: 1 },\r\n // { x: 214.31654676259, y: 3.52941176470588, size: 1 },\r\n // { x: 214.964028776978, y: 3.49019607843137, size: 1 },\r\n // { x: 215.611510791367, y: 3.52941176470588, size: 1 },\r\n // { x: 216.258992805755, y: 3.72549019607843, size: 1 },\r\n // { x: 216.906474820144, y: 3.45098039215686, size: 1 },\r\n // { x: 217.553956834532, y: 3.52941176470588, size: 1 },\r\n // { x: 218.201438848921, y: 3.64705882352941, size: 1 },\r\n // { x: 218.848920863309, y: 3.41176470588235, size: 1 },\r\n // { x: 219.496402877698, y: 3.68627450980392, size: 1 },\r\n // { x: 220.143884892086, y: 3.72549019607843, size: 1 },\r\n // { x: 220.791366906475, y: 3.41176470588235, size: 1 },\r\n // { x: 221.438848920863, y: 3.49019607843137, size: 1 },\r\n // { x: 222.086330935252, y: 3.72549019607843, size: 1 },\r\n // { x: 222.73381294964, y: 3.49019607843137, size: 1 },\r\n // { x: 223.381294964029, y: 3.6078431372549, size: 1 },\r\n // { x: 224.028776978417, y: 3.76470588235294, size: 1 },\r\n // { x: 224.676258992806, y: 3.45098039215686, size: 1 },\r\n // { x: 225.323741007194, y: 3.72549019607843, size: 1 },\r\n // { x: 225.971223021583, y: 3.37254901960784, size: 1 },\r\n // { x: 226.618705035971, y: 3.72549019607843, size: 1 },\r\n // { x: 227.26618705036, y: 3.33333333333333, size: 1 },\r\n // { x: 227.913669064748, y: 3.52941176470588, size: 1 },\r\n // { x: 228.561151079137, y: 2.35294117647059, size: 1 },\r\n // { x: 229.208633093525, y: 2.43137254901961, size: 1 },\r\n // { x: 229.856115107914, y: 3.49019607843137, size: 1 },\r\n // { x: 230.503597122302, y: 3.72549019607843, size: 1 },\r\n // { x: 231.151079136691, y: 3.88235294117647, size: 1 },\r\n // { x: 231.798561151079, y: 3.80392156862745, size: 1 },\r\n // { x: 232.446043165468, y: 3.68627450980392, size: 1 },\r\n // { x: 233.093525179856, y: 3.68627450980392, size: 1 },\r\n // { x: 233.741007194245, y: 3.76470588235294, size: 1 },\r\n // { x: 234.388489208633, y: 3.68627450980392, size: 1 },\r\n // { x: 235.035971223022, y: 3.76470588235294, size: 1 },\r\n // { x: 235.68345323741, y: 3.72549019607843, size: 1 },\r\n // { x: 236.330935251799, y: 3.64705882352941, size: 1 },\r\n // { x: 236.978417266187, y: 3.76470588235294, size: 1 },\r\n // { x: 237.625899280576, y: 3.72549019607843, size: 1 },\r\n // { x: 238.273381294964, y: 3.6078431372549, size: 1 },\r\n // { x: 238.920863309353, y: 3.80392156862745, size: 1 },\r\n // { x: 239.568345323741, y: 3.84313725490196, size: 1 },\r\n // { x: 240.215827338129, y: 3.80392156862745, size: 1 },\r\n // { x: 240.863309352518, y: 4.03921568627451, size: 1 },\r\n // { x: 241.510791366906, y: 3.72549019607843, size: 1 },\r\n // { x: 242.158273381295, y: 4, size: 1 },\r\n // { x: 242.805755395683, y: 3.64705882352941, size: 1 },\r\n // { x: 243.453237410072, y: 3.84313725490196, size: 1 },\r\n // { x: 244.10071942446, y: 3.84313725490196, size: 1 },\r\n // { x: 244.748201438849, y: 3.80392156862745, size: 1 },\r\n // { x: 245.395683453237, y: 3.68627450980392, size: 1 },\r\n // { x: 246.043165467626, y: 3.68627450980392, size: 1 },\r\n // { x: 246.690647482014, y: 3.72549019607843, size: 1 },\r\n // { x: 247.338129496403, y: 3.84313725490196, size: 1 },\r\n // { x: 247.985611510791, y: 4.11764705882353, size: 1 },\r\n // { x: 248.63309352518, y: 3.25490196078431, size: 1 },\r\n // { x: 249.280575539568, y: 3.25490196078431, size: 1 },\r\n // { x: 249.928057553957, y: 3.2156862745098, size: 1 },\r\n // { x: 250.575539568345, y: 2.31372549019608, size: 1 },\r\n // { x: 251.223021582734, y: 3.37254901960784, size: 1 },\r\n // { x: 251.870503597122, y: 3.80392156862745, size: 1 },\r\n // { x: 252.517985611511, y: 3.72549019607843, size: 1 },\r\n // { x: 253.165467625899, y: 3.84313725490196, size: 1 },\r\n // { x: 253.812949640288, y: 4, size: 1 },\r\n // { x: 254.460431654676, y: 3.76470588235294, size: 1 },\r\n // { x: 255.107913669065, y: 3.72549019607843, size: 1 },\r\n // { x: 255.755395683453, y: 3.84313725490196, size: 1 },\r\n // { x: 256.402877697842, y: 3.80392156862745, size: 1 },\r\n // { x: 257.05035971223, y: 3.68627450980392, size: 1 },\r\n // { x: 257.697841726619, y: 3.84313725490196, size: 1 },\r\n // { x: 258.345323741007, y: 3.84313725490196, size: 1 },\r\n // { x: 258.992805755396, y: 3.6078431372549, size: 1 },\r\n // { x: 259.640287769784, y: 3.72549019607843, size: 1 },\r\n // { x: 260.287769784173, y: 3.68627450980392, size: 1 },\r\n // { x: 260.935251798561, y: 3.92156862745098, size: 1 },\r\n // { x: 261.58273381295, y: 3.96078431372549, size: 1 },\r\n // { x: 262.230215827338, y: 3.68627450980392, size: 1 },\r\n // { x: 262.877697841727, y: 3.80392156862745, size: 1 },\r\n // { x: 263.525179856115, y: 3.72549019607843, size: 1 },\r\n // { x: 264.172661870504, y: 4.03921568627451, size: 1 },\r\n // { x: 264.820143884892, y: 3.68627450980392, size: 1 },\r\n // { x: 265.467625899281, y: 3.84313725490196, size: 1 },\r\n // { x: 266.115107913669, y: 3.6078431372549, size: 1 },\r\n // { x: 266.762589928058, y: 3.68627450980392, size: 1 },\r\n // { x: 267.410071942446, y: 3.72549019607843, size: 1 },\r\n // { x: 268.057553956835, y: 3.76470588235294, size: 1 },\r\n // { x: 268.705035971223, y: 3.72549019607843, size: 1 },\r\n // { x: 269.352517985611, y: 3.76470588235294, size: 1 },\r\n // { x: 270, y: 3.6078431372549, size: 1 },\r\n // { x: 270.647482014389, y: 3.49019607843137, size: 1 },\r\n // { x: 271.294964028777, y: 3.49019607843137, size: 1 },\r\n // { x: 271.942446043165, y: 3.13725490196078, size: 1 },\r\n // { x: 272.589928057554, y: 3.29411764705882, size: 1 },\r\n // { x: 273.237410071942, y: 3.76470588235294, size: 1 },\r\n // { x: 273.884892086331, y: 3.68627450980392, size: 1 },\r\n // { x: 274.532374100719, y: 3.6078431372549, size: 1 },\r\n // { x: 275.179856115108, y: 3.72549019607843, size: 1 },\r\n // { x: 275.827338129496, y: 3.6078431372549, size: 1 },\r\n // { x: 276.474820143885, y: 3.68627450980392, size: 1 },\r\n // { x: 277.122302158273, y: 3.68627450980392, size: 1 },\r\n // { x: 277.769784172662, y: 3.64705882352941, size: 1 },\r\n // { x: 278.41726618705, y: 3.72549019607843, size: 1 },\r\n // { x: 279.064748201439, y: 3.64705882352941, size: 1 },\r\n // { x: 279.712230215827, y: 4, size: 1 },\r\n // { x: 280.359712230216, y: 3.84313725490196, size: 1 },\r\n // { x: 281.007194244604, y: 3.6078431372549, size: 1 },\r\n // { x: 281.654676258993, y: 3.80392156862745, size: 1 },\r\n // { x: 282.302158273381, y: 3.92156862745098, size: 1 },\r\n // { x: 282.94964028777, y: 3.92156862745098, size: 1 },\r\n // { x: 283.597122302158, y: 3.64705882352941, size: 1 },\r\n // { x: 284.244604316547, y: 3.68627450980392, size: 1 },\r\n // { x: 284.892086330935, y: 3.64705882352941, size: 1 },\r\n // { x: 285.539568345324, y: 3.64705882352941, size: 1 },\r\n // { x: 286.187050359712, y: 3.68627450980392, size: 1 },\r\n // { x: 286.834532374101, y: 3.76470588235294, size: 1 },\r\n // { x: 287.482014388489, y: 3.64705882352941, size: 1 },\r\n // { x: 288.129496402878, y: 3.80392156862745, size: 1 },\r\n // { x: 288.776978417266, y: 3.76470588235294, size: 1 },\r\n // { x: 289.424460431655, y: 3.68627450980392, size: 1 },\r\n // { x: 290.071942446043, y: 3.68627450980392, size: 1 },\r\n // { x: 290.719424460432, y: 3.6078431372549, size: 1 },\r\n // { x: 291.36690647482, y: 3.52941176470588, size: 1 },\r\n // { x: 292.014388489209, y: 3.41176470588235, size: 1 },\r\n // { x: 292.661870503597, y: 3.37254901960784, size: 1 },\r\n // { x: 293.309352517986, y: 2.66666666666667, size: 1 },\r\n // { x: 293.956834532374, y: 2.50980392156863, size: 1 },\r\n // { x: 294.604316546763, y: 3.64705882352941, size: 1 },\r\n // { x: 295.251798561151, y: 3.68627450980392, size: 1 },\r\n // { x: 295.89928057554, y: 3.64705882352941, size: 1 },\r\n // { x: 296.546762589928, y: 3.68627450980392, size: 1 },\r\n // { x: 297.194244604317, y: 3.49019607843137, size: 1 },\r\n // { x: 297.841726618705, y: 3.76470588235294, size: 1 },\r\n // { x: 298.489208633094, y: 3.64705882352941, size: 1 },\r\n // { x: 299.136690647482, y: 3.84313725490196, size: 1 },\r\n // { x: 299.784172661871, y: 3.80392156862745, size: 1 },\r\n // { x: 300.431654676259, y: 3.6078431372549, size: 1 },\r\n // { x: 301.079136690647, y: 3.76470588235294, size: 1 },\r\n // { x: 301.726618705036, y: 3.68627450980392, size: 1 },\r\n // { x: 302.374100719424, y: 3.72549019607843, size: 1 },\r\n // { x: 303.021582733813, y: 3.84313725490196, size: 1 },\r\n // { x: 303.669064748201, y: 4, size: 1 },\r\n // { x: 304.31654676259, y: 3.76470588235294, size: 1 },\r\n // { x: 304.964028776978, y: 3.76470588235294, size: 1 },\r\n // { x: 305.611510791367, y: 3.72549019607843, size: 1 },\r\n // { x: 306.258992805755, y: 3.6078431372549, size: 1 },\r\n // { x: 306.906474820144, y: 3.64705882352941, size: 1 },\r\n // { x: 307.553956834532, y: 3.76470588235294, size: 1 },\r\n // { x: 308.201438848921, y: 3.6078431372549, size: 1 },\r\n // { x: 308.848920863309, y: 3.6078431372549, size: 1 },\r\n // { x: 309.496402877698, y: 3.52941176470588, size: 1 },\r\n // { x: 310.143884892086, y: 3.68627450980392, size: 1 },\r\n // { x: 310.791366906475, y: 3.56862745098039, size: 1 },\r\n // { x: 311.438848920863, y: 3.64705882352941, size: 1 },\r\n // { x: 312.086330935252, y: 3.45098039215686, size: 1 },\r\n // { x: 312.73381294964, y: 3.72549019607843, size: 1 },\r\n // { x: 313.381294964029, y: 3.2156862745098, size: 1 },\r\n // { x: 314.028776978417, y: 3.17647058823529, size: 1 },\r\n // { x: 314.676258992806, y: 3.09803921568627, size: 1 },\r\n // { x: 315.323741007194, y: 2.3921568627451, size: 1 },\r\n // { x: 315.971223021583, y: 3.56862745098039, size: 1 },\r\n // { x: 316.618705035971, y: 3.72549019607843, size: 1 },\r\n // { x: 317.26618705036, y: 3.68627450980392, size: 1 },\r\n // { x: 317.913669064748, y: 3.80392156862745, size: 1 },\r\n // { x: 318.561151079137, y: 3.52941176470588, size: 1 },\r\n // { x: 319.208633093525, y: 4, size: 1 },\r\n // { x: 319.856115107914, y: 3.72549019607843, size: 1 },\r\n // { x: 320.503597122302, y: 3.76470588235294, size: 1 },\r\n // { x: 321.151079136691, y: 3.68627450980392, size: 1 },\r\n // { x: 321.798561151079, y: 3.76470588235294, size: 1 },\r\n // { x: 322.446043165468, y: 3.52941176470588, size: 1 },\r\n // { x: 323.093525179856, y: 3.88235294117647, size: 1 },\r\n // { x: 323.741007194245, y: 3.49019607843137, size: 1 },\r\n // { x: 324.388489208633, y: 3.80392156862745, size: 1 },\r\n // { x: 325.035971223022, y: 3.72549019607843, size: 1 },\r\n // { x: 325.68345323741, y: 3.80392156862745, size: 1 },\r\n // { x: 326.330935251799, y: 3.80392156862745, size: 1 },\r\n // { x: 326.978417266187, y: 3.68627450980392, size: 1 },\r\n // { x: 327.625899280576, y: 3.68627450980392, size: 1 },\r\n // { x: 328.273381294964, y: 3.84313725490196, size: 1 },\r\n // { x: 328.920863309353, y: 3.80392156862745, size: 1 },\r\n // { x: 329.568345323741, y: 3.64705882352941, size: 1 },\r\n // { x: 330.215827338129, y: 3.76470588235294, size: 1 },\r\n // { x: 330.863309352518, y: 3.92156862745098, size: 1 },\r\n // { x: 331.510791366906, y: 3.64705882352941, size: 1 },\r\n // { x: 332.158273381295, y: 3.80392156862745, size: 1 },\r\n // { x: 332.805755395683, y: 3.96078431372549, size: 1 },\r\n // { x: 333.453237410072, y: 3.72549019607843, size: 1 },\r\n // { x: 334.10071942446, y: 3.64705882352941, size: 1 },\r\n // { x: 334.748201438849, y: 3.45098039215686, size: 1 },\r\n // { x: 335.395683453237, y: 3.37254901960784, size: 1 },\r\n // { x: 336.043165467626, y: 3.01960784313725, size: 1 },\r\n // { x: 336.690647482014, y: 2.47058823529412, size: 1 },\r\n // { x: 337.338129496403, y: 2.86274509803922, size: 1 },\r\n // { x: 337.985611510791, y: 3.49019607843137, size: 1 },\r\n // { x: 338.63309352518, y: 3.56862745098039, size: 1 },\r\n // { x: 339.280575539568, y: 3.80392156862745, size: 1 },\r\n // { x: 339.928057553957, y: 3.64705882352941, size: 1 },\r\n // { x: 340.575539568345, y: 3.72549019607843, size: 1 },\r\n // { x: 341.223021582734, y: 3.92156862745098, size: 1 },\r\n // { x: 341.870503597122, y: 3.84313725490196, size: 1 },\r\n // { x: 342.517985611511, y: 3.68627450980392, size: 1 },\r\n // { x: 343.165467625899, y: 3.64705882352941, size: 1 },\r\n // { x: 343.812949640288, y: 3.72549019607843, size: 1 },\r\n // { x: 344.460431654676, y: 3.76470588235294, size: 1 },\r\n // { x: 345.107913669065, y: 3.84313725490196, size: 1 },\r\n // { x: 345.755395683453, y: 3.72549019607843, size: 1 },\r\n // { x: 346.402877697842, y: 3.68627450980392, size: 1 },\r\n // { x: 347.05035971223, y: 3.64705882352941, size: 1 },\r\n // { x: 347.697841726619, y: 3.92156862745098, size: 1 },\r\n // { x: 348.345323741007, y: 3.64705882352941, size: 1 },\r\n // { x: 348.992805755396, y: 3.68627450980392, size: 1 },\r\n // { x: 349.640287769784, y: 3.88235294117647, size: 1 },\r\n // { x: 350.287769784173, y: 3.76470588235294, size: 1 },\r\n // { x: 350.935251798561, y: 3.64705882352941, size: 1 },\r\n // { x: 351.58273381295, y: 3.72549019607843, size: 1 },\r\n // { x: 352.230215827338, y: 3.72549019607843, size: 1 },\r\n // { x: 352.877697841727, y: 3.76470588235294, size: 1 },\r\n // { x: 353.525179856115, y: 3.72549019607843, size: 1 },\r\n // { x: 354.172661870504, y: 3.64705882352941, size: 1 },\r\n // { x: 354.820143884892, y: 3.72549019607843, size: 1 },\r\n // { x: 355.467625899281, y: 3.88235294117647, size: 1 },\r\n // { x: 356.115107913669, y: 3.64705882352941, size: 1 },\r\n // { x: 356.762589928058, y: 3.25490196078431, size: 1 },\r\n // { x: 357.410071942446, y: 3.41176470588235, size: 1 },\r\n // { x: 358.057553956835, y: 3.05882352941176, size: 1 },\r\n // { x: 358.705035971223, y: 2.94117647058824, size: 1 },\r\n // { x: 359.352517985611, y: 3.6078431372549, size: 1 },\r\n // { x: 0, y: 3.68627450980392, size: 1 },\r\n // { x: 0.647482014388489, y: 3.64705882352941, size: 1 },\r\n // { x: 1.29496402877698, y: 3.52941176470588, size: 1 },\r\n // { x: 1.94244604316547, y: 3.68627450980392, size: 1 },\r\n // { x: 2.58992805755396, y: 3.76470588235294, size: 1 },\r\n // { x: 3.23741007194245, y: 3.76470588235294, size: 1 },\r\n // { x: 3.88489208633094, y: 3.80392156862745, size: 1 },\r\n // { x: 4.53237410071942, y: 3.80392156862745, size: 1 },\r\n // { x: 5.17985611510791, y: 3.64705882352941, size: 1 },\r\n // { x: 5.8273381294964, y: 3.80392156862745, size: 1 },\r\n // { x: 6.47482014388489, y: 3.72549019607843, size: 1 },\r\n // { x: 7.12230215827338, y: 3.72549019607843, size: 1 },\r\n // { x: 7.76978417266187, y: 3.56862745098039, size: 1 },\r\n // { x: 8.41726618705036, y: 3.84313725490196, size: 1 },\r\n // { x: 9.06474820143885, y: 3.72549019607843, size: 1 },\r\n // { x: 9.71223021582734, y: 3.6078431372549, size: 1 },\r\n // { x: 10.3597122302158, y: 3.80392156862745, size: 1 },\r\n // { x: 11.0071942446043, y: 3.84313725490196, size: 1 },\r\n // { x: 11.6546762589928, y: 3.56862745098039, size: 1 },\r\n // { x: 12.3021582733813, y: 3.72549019607843, size: 1 },\r\n // { x: 12.9496402877698, y: 3.80392156862745, size: 1 },\r\n // { x: 13.5971223021583, y: 3.6078431372549, size: 1 },\r\n // { x: 14.2446043165468, y: 3.68627450980392, size: 1 },\r\n // { x: 14.8920863309353, y: 3.68627450980392, size: 1 },\r\n // { x: 15.5395683453237, y: 3.76470588235294, size: 1 },\r\n // { x: 16.1870503597122, y: 3.76470588235294, size: 1 },\r\n // { x: 16.8345323741007, y: 3.80392156862745, size: 1 },\r\n // { x: 17.4820143884892, y: 3.84313725490196, size: 1 },\r\n // { x: 18.1294964028777, y: 3.05882352941176, size: 1 },\r\n // { x: 18.7769784172662, y: 3.2156862745098, size: 1 },\r\n // { x: 19.4244604316547, y: 3.33333333333333, size: 1 },\r\n // { x: 20.0719424460432, y: 2.66666666666667, size: 1 },\r\n // { x: 20.7194244604317, y: 3.2156862745098, size: 1 },\r\n // { x: 21.3669064748201, y: 3.76470588235294, size: 1 },\r\n // { x: 22.6618705035971, y: 3.92156862745098, size: 1 },\r\n // { x: 23.3093525179856, y: 3.56862745098039, size: 1 },\r\n // { x: 23.9568345323741, y: 3.68627450980392, size: 1 },\r\n // { x: 24.6043165467626, y: 3.68627450980392, size: 1 },\r\n // { x: 25.2517985611511, y: 3.6078431372549, size: 1 },\r\n // { x: 25.8992805755396, y: 3.64705882352941, size: 1 },\r\n // { x: 26.5467625899281, y: 3.56862745098039, size: 1 },\r\n // { x: 27.1942446043165, y: 3.68627450980392, size: 1 },\r\n // { x: 27.841726618705, y: 3.49019607843137, size: 1 },\r\n // { x: 28.4892086330935, y: 3.68627450980392, size: 1 },\r\n // { x: 29.136690647482, y: 3.6078431372549, size: 1 },\r\n // { x: 29.7841726618705, y: 3.80392156862745, size: 1 },\r\n // { x: 30.431654676259, y: 3.64705882352941, size: 1 },\r\n // { x: 31.0791366906475, y: 3.84313725490196, size: 1 },\r\n // { x: 31.726618705036, y: 3.6078431372549, size: 1 },\r\n // { x: 32.3741007194245, y: 3.72549019607843, size: 1 },\r\n // { x: 33.0215827338129, y: 3.49019607843137, size: 1 },\r\n // { x: 33.6690647482014, y: 3.64705882352941, size: 1 },\r\n // { x: 34.3165467625899, y: 3.72549019607843, size: 1 },\r\n // { x: 34.9640287769784, y: 3.56862745098039, size: 1 },\r\n // { x: 35.6115107913669, y: 3.6078431372549, size: 1 },\r\n // { x: 36.2589928057554, y: 3.6078431372549, size: 1 },\r\n // { x: 36.9064748201439, y: 3.80392156862745, size: 1 },\r\n // { x: 38.2014388489209, y: 3.64705882352941, size: 1 },\r\n // { x: 38.8489208633094, y: 3.64705882352941, size: 1 },\r\n // { x: 39.4964028776978, y: 3.41176470588235, size: 1 },\r\n // { x: 40.1438848920863, y: 3.2156862745098, size: 1 },\r\n // { x: 40.7913669064748, y: 3.2156862745098, size: 1 },\r\n // { x: 41.4388489208633, y: 3.17647058823529, size: 1 },\r\n // { x: 42.0863309352518, y: 2.98039215686275, size: 1 },\r\n // { x: 42.7338129496403, y: 3.76470588235294, size: 1 },\r\n // { x: 43.3812949640288, y: 4.03921568627451, size: 1 },\r\n // { x: 44.0287769784173, y: 3.56862745098039, size: 1 },\r\n // { x: 45.3237410071942, y: 3.72549019607843, size: 1 },\r\n // { x: 45.9712230215827, y: 3.80392156862745, size: 1 },\r\n // { x: 46.6187050359712, y: 3.68627450980392, size: 1 },\r\n // { x: 47.2661870503597, y: 3.6078431372549, size: 1 },\r\n // { x: 47.9136690647482, y: 3.64705882352941, size: 1 },\r\n // { x: 48.5611510791367, y: 3.80392156862745, size: 1 },\r\n // { x: 49.2086330935252, y: 3.76470588235294, size: 1 },\r\n // { x: 49.8561151079137, y: 3.92156862745098, size: 1 },\r\n // { x: 50.5035971223022, y: 3.80392156862745, size: 1 },\r\n // { x: 51.1510791366906, y: 3.72549019607843, size: 1 },\r\n // { x: 51.7985611510791, y: 3.68627450980392, size: 1 },\r\n // { x: 52.4460431654676, y: 3.68627450980392, size: 1 },\r\n // { x: 53.0935251798561, y: 3.76470588235294, size: 1 },\r\n // { x: 53.7410071942446, y: 3.76470588235294, size: 1 },\r\n // { x: 54.3884892086331, y: 3.76470588235294, size: 1 },\r\n // { x: 55.0359712230216, y: 3.6078431372549, size: 1 },\r\n // { x: 55.6834532374101, y: 3.72549019607843, size: 1 },\r\n // { x: 56.3309352517986, y: 3.56862745098039, size: 1 },\r\n // { x: 56.9784172661871, y: 3.68627450980392, size: 1 },\r\n // { x: 57.6258992805755, y: 3.72549019607843, size: 1 },\r\n // { x: 58.273381294964, y: 3.88235294117647, size: 1 },\r\n // { x: 58.9208633093525, y: 3.72549019607843, size: 1 },\r\n // { x: 59.568345323741, y: 3.80392156862745, size: 1 },\r\n // { x: 60.2158273381295, y: 3.88235294117647, size: 1 },\r\n // { x: 61.5107913669065, y: 3.49019607843137, size: 1 },\r\n // { x: 62.158273381295, y: 3.37254901960784, size: 1 },\r\n // { x: 62.8057553956835, y: 3.76470588235294, size: 1 },\r\n // { x: 63.4532374100719, y: 3.56862745098039, size: 1 },\r\n // { x: 64.1007194244604, y: 3.64705882352941, size: 1 },\r\n // { x: 64.7482014388489, y: 3.80392156862745, size: 1 },\r\n // { x: 66.0431654676259, y: 3.72549019607843, size: 1 },\r\n // { x: 66.6906474820144, y: 3.72549019607843, size: 1 },\r\n // { x: 67.3381294964029, y: 3.76470588235294, size: 1 },\r\n // { x: 67.9856115107914, y: 3.84313725490196, size: 1 },\r\n // { x: 68.6330935251799, y: 3.76470588235294, size: 1 },\r\n // { x: 69.2805755395683, y: 3.80392156862745, size: 1 },\r\n // { x: 69.9280575539568, y: 3.68627450980392, size: 1 },\r\n // { x: 70.5755395683453, y: 3.96078431372549, size: 1 },\r\n // { x: 71.2230215827338, y: 3.72549019607843, size: 1 },\r\n // { x: 71.8705035971223, y: 3.76470588235294, size: 1 },\r\n // { x: 72.5179856115108, y: 3.80392156862745, size: 1 },\r\n // { x: 73.1654676258993, y: 3.72549019607843, size: 1 },\r\n // { x: 73.8129496402878, y: 3.84313725490196, size: 1 },\r\n // { x: 74.4604316546763, y: 3.64705882352941, size: 1 },\r\n // { x: 75.7553956834532, y: 3.64705882352941, size: 1 },\r\n // { x: 76.4028776978417, y: 3.64705882352941, size: 1 },\r\n // { x: 77.0503597122302, y: 3.80392156862745, size: 1 },\r\n // { x: 77.6978417266187, y: 3.64705882352941, size: 1 },\r\n // { x: 78.3453237410072, y: 3.56862745098039, size: 1 },\r\n // { x: 78.9928057553957, y: 3.76470588235294, size: 1 },\r\n // { x: 79.6402877697842, y: 4.07843137254902, size: 1 },\r\n // { x: 80.2877697841727, y: 3.92156862745098, size: 1 },\r\n // { x: 80.9352517985612, y: 4.03921568627451, size: 1 },\r\n // { x: 81.5827338129496, y: 3.88235294117647, size: 1 },\r\n // { x: 82.2302158273381, y: 3.72549019607843, size: 1 },\r\n // { x: 82.8776978417266, y: 3.45098039215686, size: 1 },\r\n // { x: 83.5251798561151, y: 3.37254901960784, size: 1 },\r\n // { x: 84.1726618705036, y: 3.45098039215686, size: 1 },\r\n // { x: 84.8201438848921, y: 3.49019607843137, size: 1 },\r\n // { x: 85.4676258992806, y: 3.64705882352941, size: 1 },\r\n // { x: 86.1151079136691, y: 3.76470588235294, size: 1 },\r\n // { x: 86.7625899280576, y: 3.45098039215686, size: 1 },\r\n // { x: 87.410071942446, y: 3.64705882352941, size: 1 },\r\n // { x: 88.0575539568345, y: 3.64705882352941, size: 1 },\r\n // { x: 88.705035971223, y: 3.52941176470588, size: 1 },\r\n // { x: 89.3525179856115, y: 3.80392156862745, size: 1 },\r\n // { x: 90, y: 3.76470588235294, size: 1 },\r\n // { x: 90.6474820143885, y: 3.41176470588235, size: 1 },\r\n // { x: 91.294964028777, y: 3.52941176470588, size: 1 },\r\n // { x: 91.9424460431655, y: 3.6078431372549, size: 1 },\r\n // { x: 92.589928057554, y: 3.72549019607843, size: 1 },\r\n // { x: 93.2374100719424, y: 3.6078431372549, size: 1 },\r\n // { x: 93.8848920863309, y: 3.88235294117647, size: 1 },\r\n // { x: 94.5323741007194, y: 3.68627450980392, size: 1 },\r\n // { x: 95.1798561151079, y: 3.56862745098039, size: 1 },\r\n // { x: 95.8273381294964, y: 3.56862745098039, size: 1 },\r\n // { x: 96.4748201438849, y: 3.64705882352941, size: 1 },\r\n // { x: 97.7697841726619, y: 4, size: 1 },\r\n // { x: 98.4172661870504, y: 3.76470588235294, size: 1 },\r\n // { x: 99.0647482014388, y: 3.84313725490196, size: 1 },\r\n // { x: 99.7122302158273, y: 3.64705882352941, size: 1 },\r\n // { x: 100.359712230216, y: 3.49019607843137, size: 1 },\r\n // { x: 101.007194244604, y: 3.56862745098039, size: 1 },\r\n // { x: 102.302158273381, y: 3.68627450980392, size: 1 },\r\n // { x: 102.94964028777, y: 3.80392156862745, size: 1 },\r\n // { x: 103.597122302158, y: 3.6078431372549, size: 1 },\r\n // { x: 105.539568345324, y: 3.68627450980392, size: 1 },\r\n // { x: 106.187050359712, y: 3.52941176470588, size: 1 },\r\n // { x: 107.482014388489, y: 3.64705882352941, size: 1 },\r\n // { x: 108.129496402878, y: 3.6078431372549, size: 1 },\r\n // { x: 108.776978417266, y: 3.49019607843137, size: 1 },\r\n // { x: 109.424460431655, y: 3.56862745098039, size: 1 },\r\n // { x: 110.071942446043, y: 3.76470588235294, size: 1 },\r\n // { x: 110.719424460432, y: 3.56862745098039, size: 1 },\r\n // { x: 111.36690647482, y: 3.88235294117647, size: 1 },\r\n // { x: 112.014388489209, y: 3.64705882352941, size: 1 },\r\n // { x: 112.661870503597, y: 3.6078431372549, size: 1 },\r\n // { x: 113.309352517986, y: 3.45098039215686, size: 1 },\r\n // { x: 113.956834532374, y: 3.41176470588235, size: 1 },\r\n // { x: 114.604316546763, y: 3.68627450980392, size: 1 },\r\n // { x: 115.89928057554, y: 3.6078431372549, size: 1 },\r\n // { x: 116.546762589928, y: 3.49019607843137, size: 1 },\r\n // { x: 117.194244604317, y: 3.45098039215686, size: 1 },\r\n // { x: 117.841726618705, y: 3.80392156862745, size: 1 },\r\n // { x: 118.489208633094, y: 3.72549019607843, size: 1 },\r\n // { x: 119.136690647482, y: 3.37254901960784, size: 1 },\r\n // { x: 119.784172661871, y: 3.76470588235294, size: 1 },\r\n // { x: 121.726618705036, y: 3.72549019607843, size: 1 },\r\n // { x: 122.374100719424, y: 3.41176470588235, size: 1 },\r\n // { x: 123.021582733813, y: 3.68627450980392, size: 1 },\r\n // { x: 123.669064748201, y: 3.49019607843137, size: 1 },\r\n // { x: 124.31654676259, y: 3.33333333333333, size: 1 },\r\n // { x: 124.964028776978, y: 3.68627450980392, size: 1 },\r\n // { x: 125.611510791367, y: 3.64705882352941, size: 1 },\r\n // { x: 126.258992805755, y: 3.56862745098039, size: 1 },\r\n // { x: 126.906474820144, y: 3.76470588235294, size: 1 },\r\n // { x: 128.201438848921, y: 3.84313725490196, size: 1 },\r\n // { x: 128.848920863309, y: 3.64705882352941, size: 1 },\r\n // { x: 129.496402877698, y: 3.80392156862745, size: 1 },\r\n // { x: 130.143884892086, y: 3.68627450980392, size: 1 },\r\n // { x: 130.791366906475, y: 3.68627450980392, size: 1 },\r\n // { x: 131.438848920863, y: 3.68627450980392, size: 1 },\r\n // { x: 132.086330935252, y: 3.80392156862745, size: 1 },\r\n // { x: 132.73381294964, y: 3.64705882352941, size: 1 },\r\n // { x: 133.381294964029, y: 3.56862745098039, size: 1 },\r\n // { x: 134.028776978417, y: 3.68627450980392, size: 1 },\r\n // { x: 134.676258992806, y: 3.6078431372549, size: 1 },\r\n // { x: 135.323741007194, y: 3.64705882352941, size: 1 },\r\n // { x: 135.971223021583, y: 3.6078431372549, size: 1 },\r\n // { x: 137.26618705036, y: 3.84313725490196, size: 1 },\r\n // { x: 137.913669064748, y: 3.52941176470588, size: 1 },\r\n // { x: 138.561151079137, y: 3.52941176470588, size: 1 },\r\n // { x: 139.208633093525, y: 3.76470588235294, size: 1 },\r\n // { x: 139.856115107914, y: 3.56862745098039, size: 1 },\r\n // { x: 141.798561151079, y: 3.84313725490196, size: 1 },\r\n // { x: 142.446043165468, y: 3.49019607843137, size: 1 },\r\n // { x: 143.093525179856, y: 3.72549019607843, size: 1 },\r\n // { x: 143.741007194245, y: 3.64705882352941, size: 1 },\r\n // { x: 144.388489208633, y: 3.68627450980392, size: 1 },\r\n // { x: 145.035971223022, y: 3.49019607843137, size: 1 },\r\n // { x: 145.68345323741, y: 3.72549019607843, size: 1 },\r\n // { x: 146.330935251799, y: 3.49019607843137, size: 1 },\r\n // { x: 146.978417266187, y: 3.72549019607843, size: 1 },\r\n // { x: 147.625899280576, y: 3.68627450980392, size: 1 },\r\n // { x: 148.273381294964, y: 3.56862745098039, size: 1 },\r\n // { x: 148.920863309353, y: 3.49019607843137, size: 1 },\r\n // { x: 149.568345323741, y: 3.56862745098039, size: 1 },\r\n // { x: 150.215827338129, y: 3.68627450980392, size: 1 },\r\n // { x: 150.863309352518, y: 3.68627450980392, size: 1 },\r\n // { x: 151.510791366906, y: 3.64705882352941, size: 1 },\r\n // { x: 152.158273381295, y: 3.56862745098039, size: 1 },\r\n // { x: 152.805755395683, y: 3.6078431372549, size: 1 },\r\n // { x: 154.10071942446, y: 3.56862745098039, size: 1 },\r\n // { x: 154.748201438849, y: 3.68627450980392, size: 1 },\r\n // { x: 155.395683453237, y: 3.68627450980392, size: 1 },\r\n // { x: 156.043165467626, y: 3.6078431372549, size: 1 },\r\n // { x: 156.690647482014, y: 3.64705882352941, size: 1 },\r\n // { x: 157.338129496403, y: 3.52941176470588, size: 1 },\r\n // { x: 157.985611510791, y: 3.52941176470588, size: 1 },\r\n // { x: 158.63309352518, y: 3.88235294117647, size: 1 },\r\n // { x: 159.280575539568, y: 3.68627450980392, size: 1 },\r\n // { x: 160.575539568345, y: 3.80392156862745, size: 1 },\r\n // { x: 161.223021582734, y: 3.64705882352941, size: 1 },\r\n // { x: 161.870503597122, y: 3.49019607843137, size: 1 },\r\n // { x: 162.517985611511, y: 3.68627450980392, size: 1 },\r\n // { x: 163.165467625899, y: 3.6078431372549, size: 1 },\r\n // { x: 163.812949640288, y: 3.56862745098039, size: 1 },\r\n // { x: 164.460431654676, y: 3.52941176470588, size: 1 },\r\n // { x: 165.107913669065, y: 3.72549019607843, size: 1 },\r\n // { x: 165.755395683453, y: 3.56862745098039, size: 1 },\r\n // { x: 166.402877697842, y: 3.80392156862745, size: 1 },\r\n // { x: 167.05035971223, y: 3.64705882352941, size: 1 },\r\n // { x: 167.697841726619, y: 3.52941176470588, size: 1 },\r\n // { x: 168.345323741007, y: 3.92156862745098, size: 1 },\r\n // { x: 168.992805755396, y: 3.68627450980392, size: 1 },\r\n // { x: 169.640287769784, y: 3.6078431372549, size: 1 },\r\n // { x: 170.287769784173, y: 3.49019607843137, size: 1 },\r\n // { x: 170.935251798561, y: 3.45098039215686, size: 1 },\r\n // { x: 171.58273381295, y: 3.41176470588235, size: 1 },\r\n // { x: 172.230215827338, y: 3.68627450980392, size: 1 },\r\n // { x: 172.877697841727, y: 3.6078431372549, size: 1 },\r\n // { x: 173.525179856115, y: 3.56862745098039, size: 1 },\r\n // { x: 174.172661870504, y: 3.88235294117647, size: 1 },\r\n // { x: 174.820143884892, y: 3.52941176470588, size: 1 },\r\n // { x: 175.467625899281, y: 3.49019607843137, size: 1 },\r\n // { x: 176.115107913669, y: 3.6078431372549, size: 1 },\r\n // { x: 176.762589928058, y: 3.49019607843137, size: 1 },\r\n // { x: 177.410071942446, y: 3.56862745098039, size: 1 },\r\n // { x: 178.057553956835, y: 3.37254901960784, size: 1 },\r\n // { x: 178.705035971223, y: 3.64705882352941, size: 1 },\r\n // { x: 179.352517985612, y: 3.49019607843137, size: 1 },\r\n // { x: 180, y: 3.76470588235294, size: 1 },\r\n // { x: 180.647482014388, y: 3.72549019607843, size: 1 },\r\n // { x: 181.294964028777, y: 3.52941176470588, size: 1 },\r\n // { x: 181.942446043165, y: 3.37254901960784, size: 1 },\r\n // { x: 182.589928057554, y: 3.52941176470588, size: 1 },\r\n // { x: 183.237410071942, y: 3.49019607843137, size: 1 },\r\n // { x: 183.884892086331, y: 3.6078431372549, size: 1 },\r\n // { x: 184.532374100719, y: 3.56862745098039, size: 1 },\r\n // { x: 185.179856115108, y: 3.49019607843137, size: 1 },\r\n // { x: 185.827338129496, y: 3.6078431372549, size: 1 },\r\n // { x: 186.474820143885, y: 3.68627450980392, size: 1 },\r\n // { x: 187.122302158273, y: 3.37254901960784, size: 1 },\r\n // { x: 187.769784172662, y: 3.49019607843137, size: 1 },\r\n // { x: 188.41726618705, y: 3.68627450980392, size: 1 },\r\n // { x: 189.064748201439, y: 3.45098039215686, size: 1 },\r\n // { x: 189.712230215827, y: 3.45098039215686, size: 1 },\r\n // { x: 190.359712230216, y: 3.52941176470588, size: 1 },\r\n // { x: 191.007194244604, y: 3.6078431372549, size: 1 },\r\n // { x: 191.654676258993, y: 3.68627450980392, size: 1 },\r\n // { x: 192.302158273381, y: 3.29411764705882, size: 1 },\r\n // { x: 192.94964028777, y: 3.37254901960784, size: 1 },\r\n // { x: 193.597122302158, y: 3.45098039215686, size: 1 },\r\n // { x: 194.244604316547, y: 3.56862745098039, size: 1 },\r\n // { x: 194.892086330935, y: 3.64705882352941, size: 1 },\r\n // { x: 195.539568345324, y: 3.49019607843137, size: 1 },\r\n // { x: 196.187050359712, y: 3.64705882352941, size: 1 },\r\n // { x: 196.834532374101, y: 3.92156862745098, size: 1 },\r\n // { x: 197.482014388489, y: 3.68627450980392, size: 1 },\r\n // { x: 198.129496402878, y: 3.52941176470588, size: 1 },\r\n // { x: 198.776978417266, y: 3.49019607843137, size: 1 },\r\n // { x: 199.424460431655, y: 3.64705882352941, size: 1 },\r\n // { x: 200.071942446043, y: 3.45098039215686, size: 1 },\r\n // { x: 200.719424460432, y: 3.33333333333333, size: 1 },\r\n // { x: 201.36690647482, y: 3.68627450980392, size: 1 },\r\n // { x: 202.014388489209, y: 3.56862745098039, size: 1 },\r\n // { x: 202.661870503597, y: 3.72549019607843, size: 1 },\r\n // { x: 203.309352517986, y: 3.68627450980392, size: 1 },\r\n // { x: 203.956834532374, y: 3.29411764705882, size: 1 },\r\n // { x: 204.604316546763, y: 3.56862745098039, size: 1 },\r\n // { x: 205.251798561151, y: 3.45098039215686, size: 1 },\r\n // { x: 205.89928057554, y: 3.37254901960784, size: 1 },\r\n // { x: 206.546762589928, y: 3.45098039215686, size: 1 },\r\n // { x: 207.194244604317, y: 3.49019607843137, size: 1 },\r\n // { x: 207.841726618705, y: 3.6078431372549, size: 1 },\r\n // { x: 208.489208633094, y: 3.56862745098039, size: 1 },\r\n // { x: 209.136690647482, y: 3.68627450980392, size: 1 },\r\n // { x: 209.784172661871, y: 3.6078431372549, size: 1 },\r\n // { x: 210.431654676259, y: 3.56862745098039, size: 1 },\r\n // { x: 211.079136690647, y: 3.49019607843137, size: 1 },\r\n // { x: 211.726618705036, y: 3.52941176470588, size: 1 },\r\n // { x: 212.374100719424, y: 3.52941176470588, size: 1 },\r\n // { x: 213.021582733813, y: 3.29411764705882, size: 1 },\r\n // { x: 213.669064748201, y: 3.37254901960784, size: 1 },\r\n // { x: 214.31654676259, y: 3.37254901960784, size: 1 },\r\n // { x: 214.964028776978, y: 3.33333333333333, size: 1 },\r\n // { x: 215.611510791367, y: 3.09803921568627, size: 1 },\r\n // { x: 216.258992805755, y: 2.90196078431373, size: 1 },\r\n // { x: 217.553956834532, y: 3.68627450980392, size: 1 },\r\n // { x: 218.201438848921, y: 3.56862745098039, size: 1 },\r\n // { x: 218.848920863309, y: 3.52941176470588, size: 1 },\r\n // { x: 219.496402877698, y: 3.6078431372549, size: 1 },\r\n // { x: 220.143884892086, y: 3.49019607843137, size: 1 },\r\n // { x: 220.791366906475, y: 3.68627450980392, size: 1 },\r\n // { x: 221.438848920863, y: 3.45098039215686, size: 1 },\r\n // { x: 222.086330935252, y: 3.33333333333333, size: 1 },\r\n // { x: 224.028776978417, y: 3.68627450980392, size: 1 },\r\n // { x: 224.676258992806, y: 3.64705882352941, size: 1 },\r\n // { x: 225.323741007194, y: 3.37254901960784, size: 1 },\r\n // { x: 225.971223021583, y: 3.45098039215686, size: 1 },\r\n // { x: 226.618705035971, y: 3.37254901960784, size: 1 },\r\n // { x: 227.26618705036, y: 3.56862745098039, size: 1 },\r\n // { x: 227.913669064748, y: 3.56862745098039, size: 1 },\r\n // { x: 228.561151079137, y: 3.41176470588235, size: 1 },\r\n // { x: 229.208633093525, y: 3.64705882352941, size: 1 },\r\n // { x: 229.856115107914, y: 3.6078431372549, size: 1 },\r\n // { x: 230.503597122302, y: 3.6078431372549, size: 1 },\r\n // { x: 231.151079136691, y: 3.6078431372549, size: 1 },\r\n // { x: 231.798561151079, y: 3.49019607843137, size: 1 },\r\n // { x: 232.446043165468, y: 3.37254901960784, size: 1 },\r\n // { x: 233.093525179856, y: 3.33333333333333, size: 1 },\r\n // { x: 233.741007194245, y: 3.41176470588235, size: 1 },\r\n // { x: 234.388489208633, y: 3.72549019607843, size: 1 },\r\n // { x: 235.035971223022, y: 3.29411764705882, size: 1 },\r\n // { x: 235.68345323741, y: 3.13725490196078, size: 1 },\r\n // { x: 236.330935251799, y: 3.45098039215686, size: 1 },\r\n // { x: 236.978417266187, y: 3.45098039215686, size: 1 },\r\n // { x: 237.625899280576, y: 3.45098039215686, size: 1 },\r\n // { x: 238.273381294964, y: 3.88235294117647, size: 1 },\r\n // { x: 238.920863309353, y: 3.68627450980392, size: 1 },\r\n // { x: 239.568345323741, y: 3.6078431372549, size: 1 },\r\n // { x: 240.215827338129, y: 3.6078431372549, size: 1 },\r\n // { x: 240.863309352518, y: 3.76470588235294, size: 1 },\r\n // { x: 241.510791366906, y: 3.56862745098039, size: 1 },\r\n // { x: 242.158273381295, y: 3.45098039215686, size: 1 },\r\n // { x: 242.805755395683, y: 3.6078431372549, size: 1 },\r\n // { x: 243.453237410072, y: 3.96078431372549, size: 1 },\r\n // { x: 244.10071942446, y: 3.68627450980392, size: 1 },\r\n // { x: 244.748201438849, y: 3.76470588235294, size: 1 },\r\n // { x: 245.395683453237, y: 3.84313725490196, size: 1 },\r\n // { x: 246.043165467626, y: 3.72549019607843, size: 1 },\r\n // { x: 246.690647482014, y: 3.49019607843137, size: 1 },\r\n // { x: 247.338129496403, y: 3.56862745098039, size: 1 },\r\n // { x: 247.985611510791, y: 3.72549019607843, size: 1 },\r\n // { x: 248.63309352518, y: 3.76470588235294, size: 1 },\r\n // { x: 249.280575539568, y: 3.52941176470588, size: 1 },\r\n // { x: 249.928057553957, y: 3.84313725490196, size: 1 },\r\n // { x: 250.575539568345, y: 3.72549019607843, size: 1 },\r\n // { x: 251.223021582734, y: 3.64705882352941, size: 1 },\r\n // { x: 251.870503597122, y: 3.49019607843137, size: 1 },\r\n // { x: 252.517985611511, y: 3.96078431372549, size: 1 },\r\n // { x: 253.165467625899, y: 3.80392156862745, size: 1 },\r\n // { x: 253.812949640288, y: 3.72549019607843, size: 1 },\r\n // { x: 254.460431654676, y: 3.52941176470588, size: 1 },\r\n // { x: 255.107913669065, y: 3.52941176470588, size: 1 },\r\n // { x: 255.755395683453, y: 3.29411764705882, size: 1 },\r\n // { x: 256.402877697842, y: 3.64705882352941, size: 1 },\r\n // { x: 257.697841726619, y: 3.29411764705882, size: 1 },\r\n // { x: 258.345323741007, y: 3.6078431372549, size: 1 },\r\n // { x: 258.992805755396, y: 3.29411764705882, size: 1 },\r\n // { x: 259.640287769784, y: 3.49019607843137, size: 1 },\r\n // { x: 260.287769784173, y: 3.72549019607843, size: 1 },\r\n // { x: 260.935251798561, y: 3.6078431372549, size: 1 },\r\n // { x: 261.58273381295, y: 3.64705882352941, size: 1 },\r\n // { x: 262.877697841727, y: 3.76470588235294, size: 1 },\r\n // { x: 263.525179856115, y: 3.6078431372549, size: 1 },\r\n // { x: 264.172661870504, y: 3.52941176470588, size: 1 },\r\n // { x: 264.820143884892, y: 3.6078431372549, size: 1 },\r\n // { x: 265.467625899281, y: 3.41176470588235, size: 1 },\r\n // { x: 266.115107913669, y: 3.49019607843137, size: 1 },\r\n // { x: 266.762589928058, y: 3.84313725490196, size: 1 },\r\n // { x: 267.410071942446, y: 3.52941176470588, size: 1 },\r\n // { x: 268.057553956835, y: 3.6078431372549, size: 1 },\r\n // { x: 268.705035971223, y: 3.64705882352941, size: 1 },\r\n // { x: 269.352517985611, y: 3.72549019607843, size: 1 },\r\n // { x: 270.647482014389, y: 3.45098039215686, size: 1 },\r\n // { x: 271.294964028777, y: 3.68627450980392, size: 1 },\r\n // { x: 271.942446043165, y: 3.52941176470588, size: 1 },\r\n // { x: 272.589928057554, y: 3.6078431372549, size: 1 },\r\n // { x: 273.884892086331, y: 3.52941176470588, size: 1 },\r\n // { x: 274.532374100719, y: 3.76470588235294, size: 1 },\r\n // { x: 275.179856115108, y: 3.6078431372549, size: 1 },\r\n // { x: 275.827338129496, y: 3.56862745098039, size: 1 },\r\n // { x: 276.474820143885, y: 3.76470588235294, size: 1 },\r\n // { x: 277.122302158273, y: 3.29411764705882, size: 1 },\r\n // { x: 277.769784172662, y: 3.33333333333333, size: 1 },\r\n // { x: 278.41726618705, y: 3.37254901960784, size: 1 },\r\n // { x: 279.064748201439, y: 3.72549019607843, size: 1 },\r\n // { x: 279.712230215827, y: 3.17647058823529, size: 1 },\r\n // { x: 280.359712230216, y: 2.98039215686275, size: 1 },\r\n // { x: 281.007194244604, y: 2.7843137254902, size: 1 },\r\n // { x: 281.654676258993, y: 3.56862745098039, size: 1 },\r\n // { x: 282.302158273381, y: 3.68627450980392, size: 1 },\r\n // { x: 282.94964028777, y: 3.45098039215686, size: 1 },\r\n // { x: 283.597122302158, y: 3.6078431372549, size: 1 },\r\n // { x: 284.892086330935, y: 3.80392156862745, size: 1 },\r\n // { x: 285.539568345324, y: 3.52941176470588, size: 1 },\r\n // { x: 286.834532374101, y: 3.45098039215686, size: 1 },\r\n // { x: 287.482014388489, y: 3.72549019607843, size: 1 },\r\n // { x: 288.129496402878, y: 3.52941176470588, size: 1 },\r\n // { x: 288.776978417266, y: 3.68627450980392, size: 1 },\r\n // { x: 289.424460431655, y: 3.72549019607843, size: 1 },\r\n // { x: 290.071942446043, y: 3.64705882352941, size: 1 },\r\n // { x: 290.719424460432, y: 3.52941176470588, size: 1 },\r\n // { x: 291.36690647482, y: 3.56862745098039, size: 1 },\r\n // { x: 292.014388489209, y: 3.56862745098039, size: 1 },\r\n // { x: 292.661870503597, y: 3.68627450980392, size: 1 },\r\n // { x: 293.309352517986, y: 3.64705882352941, size: 1 },\r\n // { x: 293.956834532374, y: 3.76470588235294, size: 1 },\r\n // { x: 294.604316546763, y: 3.6078431372549, size: 1 },\r\n // { x: 295.251798561151, y: 3.56862745098039, size: 1 },\r\n // { x: 295.89928057554, y: 3.68627450980392, size: 1 },\r\n // { x: 296.546762589928, y: 3.80392156862745, size: 1 },\r\n // { x: 297.194244604317, y: 3.84313725490196, size: 1 },\r\n // { x: 297.841726618705, y: 3.80392156862745, size: 1 },\r\n // { x: 298.489208633094, y: 3.6078431372549, size: 1 },\r\n // { x: 299.136690647482, y: 3.45098039215686, size: 1 },\r\n // { x: 299.784172661871, y: 3.6078431372549, size: 1 },\r\n // { x: 300.431654676259, y: 3.01960784313725, size: 1 },\r\n // { x: 301.079136690647, y: 3.17647058823529, size: 1 },\r\n // { x: 301.726618705036, y: 3.05882352941176, size: 1 },\r\n // { x: 302.374100719424, y: 2.98039215686275, size: 1 },\r\n // { x: 303.021582733813, y: 3.6078431372549, size: 1 },\r\n // { x: 303.669064748201, y: 3.76470588235294, size: 1 },\r\n // { x: 304.31654676259, y: 3.49019607843137, size: 1 },\r\n // { x: 304.964028776978, y: 3.72549019607843, size: 1 },\r\n // { x: 305.611510791367, y: 3.76470588235294, size: 1 },\r\n // { x: 306.906474820144, y: 3.6078431372549, size: 1 },\r\n // { x: 307.553956834532, y: 3.56862745098039, size: 1 },\r\n // { x: 308.201438848921, y: 3.68627450980392, size: 1 },\r\n // { x: 308.848920863309, y: 3.72549019607843, size: 1 },\r\n // { x: 310.143884892086, y: 3.76470588235294, size: 1 },\r\n // { x: 310.791366906475, y: 3.76470588235294, size: 1 },\r\n // { x: 311.438848920863, y: 3.56862745098039, size: 1 },\r\n // { x: 312.086330935252, y: 3.72549019607843, size: 1 },\r\n // { x: 312.73381294964, y: 3.6078431372549, size: 1 },\r\n // { x: 313.381294964029, y: 3.68627450980392, size: 1 },\r\n // { x: 314.028776978417, y: 3.6078431372549, size: 1 },\r\n // { x: 314.676258992806, y: 3.6078431372549, size: 1 },\r\n // { x: 315.323741007194, y: 3.6078431372549, size: 1 },\r\n // { x: 315.971223021583, y: 3.52941176470588, size: 1 },\r\n // { x: 316.618705035971, y: 3.6078431372549, size: 1 },\r\n // { x: 317.913669064748, y: 3.52941176470588, size: 1 },\r\n // { x: 318.561151079137, y: 3.56862745098039, size: 1 },\r\n // { x: 319.208633093525, y: 3.6078431372549, size: 1 },\r\n // { x: 319.856115107914, y: 3.52941176470588, size: 1 },\r\n // { x: 321.151079136691, y: 3.56862745098039, size: 1 },\r\n // { x: 321.798561151079, y: 3.29411764705882, size: 1 },\r\n // { x: 322.446043165468, y: 3.25490196078431, size: 1 },\r\n // { x: 323.093525179856, y: 3.05882352941176, size: 1 },\r\n // { x: 323.741007194245, y: 3.17647058823529, size: 1 },\r\n // { x: 324.388489208633, y: 3.68627450980392, size: 1 },\r\n // { x: 325.035971223022, y: 3.45098039215686, size: 1 },\r\n // { x: 325.68345323741, y: 3.72549019607843, size: 1 },\r\n // { x: 326.330935251799, y: 3.72549019607843, size: 1 },\r\n // { x: 326.978417266187, y: 3.72549019607843, size: 1 },\r\n // { x: 327.625899280576, y: 3.6078431372549, size: 1 },\r\n // { x: 328.273381294964, y: 3.76470588235294, size: 1 },\r\n // { x: 328.920863309353, y: 3.56862745098039, size: 1 },\r\n // { x: 330.215827338129, y: 3.41176470588235, size: 1 },\r\n // { x: 330.863309352518, y: 3.64705882352941, size: 1 },\r\n // { x: 332.158273381295, y: 3.52941176470588, size: 1 },\r\n // { x: 332.805755395683, y: 3.68627450980392, size: 1 },\r\n // { x: 334.10071942446, y: 3.76470588235294, size: 1 },\r\n // { x: 334.748201438849, y: 3.76470588235294, size: 1 },\r\n // { x: 335.395683453237, y: 3.88235294117647, size: 1 },\r\n // { x: 336.043165467626, y: 3.72549019607843, size: 1 },\r\n // { x: 336.690647482014, y: 3.56862745098039, size: 1 },\r\n // { x: 337.338129496403, y: 3.49019607843137, size: 1 },\r\n // { x: 337.985611510791, y: 3.56862745098039, size: 1 },\r\n // { x: 338.63309352518, y: 3.6078431372549, size: 1 },\r\n // { x: 339.280575539568, y: 3.64705882352941, size: 1 },\r\n // { x: 339.928057553957, y: 3.45098039215686, size: 1 },\r\n // { x: 340.575539568345, y: 3.64705882352941, size: 1 },\r\n // { x: 341.223021582734, y: 3.68627450980392, size: 1 },\r\n // { x: 341.870503597122, y: 3.72549019607843, size: 1 },\r\n // { x: 343.165467625899, y: 3.52941176470588, size: 1 },\r\n // { x: 343.812949640288, y: 3.33333333333333, size: 1 },\r\n // { x: 344.460431654676, y: 3.72549019607843, size: 1 },\r\n // { x: 345.107913669065, y: 4, size: 1 },\r\n // { x: 346.402877697842, y: 3.84313725490196, size: 1 },\r\n // { x: 347.05035971223, y: 3.76470588235294, size: 1 },\r\n // { x: 347.697841726619, y: 3.84313725490196, size: 1 },\r\n // { x: 348.345323741007, y: 3.6078431372549, size: 1 },\r\n // { x: 348.992805755396, y: 3.6078431372549, size: 1 },\r\n // { x: 349.640287769784, y: 3.68627450980392, size: 1 },\r\n // { x: 350.287769784173, y: 3.64705882352941, size: 1 },\r\n // { x: 350.935251798561, y: 3.84313725490196, size: 1 },\r\n // { x: 351.58273381295, y: 3.76470588235294, size: 1 },\r\n // { x: 352.230215827338, y: 3.6078431372549, size: 1 },\r\n // { x: 352.877697841727, y: 3.68627450980392, size: 1 },\r\n // { x: 353.525179856115, y: 3.56862745098039, size: 1 },\r\n // { x: 354.172661870504, y: 3.56862745098039, size: 1 },\r\n // { x: 354.820143884892, y: 3.64705882352941, size: 1 },\r\n // { x: 355.467625899281, y: 3.6078431372549, size: 1 },\r\n // { x: 356.115107913669, y: 3.6078431372549, size: 1 },\r\n // { x: 356.762589928058, y: 3.88235294117647, size: 1 },\r\n // { x: 357.410071942446, y: 3.52941176470588, size: 1 },\r\n // { x: 358.057553956835, y: 3.68627450980392, size: 1 },\r\n // { x: 358.705035971223, y: 3.68627450980392, size: 1 },\r\n // { x: 359.352517985611, y: 3.72549019607843, size: 1 },\r\n // { x: 0.648648648648649, y: 3.64705882352941, size: 1 },\r\n // { x: 1.2972972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 1.94594594594595, y: 3.56862745098039, size: 1 },\r\n // { x: 2.59459459459459, y: 4, size: 1 },\r\n // { x: 3.24324324324324, y: 3.80392156862745, size: 1 },\r\n // { x: 3.89189189189189, y: 3.52941176470588, size: 1 },\r\n // { x: 4.54054054054054, y: 3.68627450980392, size: 1 },\r\n // { x: 5.18918918918919, y: 3.64705882352941, size: 1 },\r\n // { x: 5.83783783783784, y: 3.64705882352941, size: 1 },\r\n // { x: 6.48648648648649, y: 3.25490196078431, size: 1 },\r\n // { x: 7.13513513513514, y: 3.29411764705882, size: 1 },\r\n // { x: 7.78378378378378, y: 3.6078431372549, size: 1 },\r\n // { x: 8.43243243243243, y: 3.52941176470588, size: 1 },\r\n // { x: 9.08108108108108, y: 3.76470588235294, size: 1 },\r\n // { x: 9.72972972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 10.3783783783784, y: 3.64705882352941, size: 1 },\r\n // { x: 11.027027027027, y: 3.56862745098039, size: 1 },\r\n // { x: 11.6756756756757, y: 3.45098039215686, size: 1 },\r\n // { x: 12.3243243243243, y: 3.72549019607843, size: 1 },\r\n // { x: 12.972972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 13.6216216216216, y: 3.64705882352941, size: 1 },\r\n // { x: 14.2702702702703, y: 3.84313725490196, size: 1 },\r\n // { x: 14.9189189189189, y: 3.6078431372549, size: 1 },\r\n // { x: 15.5675675675676, y: 3.6078431372549, size: 1 },\r\n // { x: 16.2162162162162, y: 3.6078431372549, size: 1 },\r\n // { x: 16.8648648648649, y: 3.72549019607843, size: 1 },\r\n // { x: 17.5135135135135, y: 3.64705882352941, size: 1 },\r\n // { x: 18.1621621621622, y: 3.68627450980392, size: 1 },\r\n // { x: 18.8108108108108, y: 3.68627450980392, size: 1 },\r\n // { x: 19.4594594594595, y: 3.72549019607843, size: 1 },\r\n // { x: 20.1081081081081, y: 3.68627450980392, size: 1 },\r\n // { x: 20.7567567567568, y: 3.68627450980392, size: 1 },\r\n // { x: 21.4054054054054, y: 3.56862745098039, size: 1 },\r\n // { x: 22.0540540540541, y: 3.68627450980392, size: 1 },\r\n // { x: 22.7027027027027, y: 3.72549019607843, size: 1 },\r\n // { x: 23.3513513513514, y: 3.76470588235294, size: 1 },\r\n // { x: 24, y: 3.88235294117647, size: 1 },\r\n // { x: 24.6486486486486, y: 3.80392156862745, size: 1 },\r\n // { x: 25.2972972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 25.9459459459459, y: 3.68627450980392, size: 1 },\r\n // { x: 26.5945945945946, y: 3.56862745098039, size: 1 },\r\n // { x: 27.2432432432432, y: 3.41176470588235, size: 1 },\r\n // { x: 27.8918918918919, y: 3.41176470588235, size: 1 },\r\n // { x: 28.5405405405405, y: 3.29411764705882, size: 1 },\r\n // { x: 29.1891891891892, y: 3.68627450980392, size: 1 },\r\n // { x: 29.8378378378378, y: 3.52941176470588, size: 1 },\r\n // { x: 30.4864864864865, y: 3.88235294117647, size: 1 },\r\n // { x: 31.1351351351351, y: 3.49019607843137, size: 1 },\r\n // { x: 31.7837837837838, y: 3.72549019607843, size: 1 },\r\n // { x: 32.4324324324324, y: 3.68627450980392, size: 1 },\r\n // { x: 33.0810810810811, y: 3.6078431372549, size: 1 },\r\n // { x: 33.7297297297297, y: 3.56862745098039, size: 1 },\r\n // { x: 34.3783783783784, y: 3.49019607843137, size: 1 },\r\n // { x: 35.027027027027, y: 3.68627450980392, size: 1 },\r\n // { x: 35.6756756756757, y: 3.68627450980392, size: 1 },\r\n // { x: 36.3243243243243, y: 3.64705882352941, size: 1 },\r\n // { x: 36.972972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 37.6216216216216, y: 3.56862745098039, size: 1 },\r\n // { x: 38.2702702702703, y: 3.76470588235294, size: 1 },\r\n // { x: 38.9189189189189, y: 3.6078431372549, size: 1 },\r\n // { x: 39.5675675675676, y: 3.72549019607843, size: 1 },\r\n // { x: 40.2162162162162, y: 3.88235294117647, size: 1 },\r\n // { x: 40.8648648648649, y: 3.76470588235294, size: 1 },\r\n // { x: 41.5135135135135, y: 3.72549019607843, size: 1 },\r\n // { x: 42.1621621621622, y: 4, size: 1 },\r\n // { x: 42.8108108108108, y: 3.56862745098039, size: 1 },\r\n // { x: 43.4594594594595, y: 3.72549019607843, size: 1 },\r\n // { x: 44.1081081081081, y: 3.6078431372549, size: 1 },\r\n // { x: 44.7567567567568, y: 3.68627450980392, size: 1 },\r\n // { x: 45.4054054054054, y: 3.6078431372549, size: 1 },\r\n // { x: 46.0540540540541, y: 3.84313725490196, size: 1 },\r\n // { x: 46.7027027027027, y: 3.76470588235294, size: 1 },\r\n // { x: 47.3513513513514, y: 3.64705882352941, size: 1 },\r\n // { x: 48, y: 3.37254901960784, size: 1 },\r\n // { x: 48.6486486486486, y: 2.94117647058824, size: 1 },\r\n // { x: 49.2972972972973, y: 3.17647058823529, size: 1 },\r\n // { x: 49.9459459459459, y: 3.2156862745098, size: 1 },\r\n // { x: 50.5945945945946, y: 3.09803921568627, size: 1 },\r\n // { x: 51.2432432432432, y: 3.72549019607843, size: 1 },\r\n // { x: 51.8918918918919, y: 3.56862745098039, size: 1 },\r\n // { x: 52.5405405405405, y: 3.72549019607843, size: 1 },\r\n // { x: 53.1891891891892, y: 3.52941176470588, size: 1 },\r\n // { x: 53.8378378378378, y: 3.76470588235294, size: 1 },\r\n // { x: 54.4864864864865, y: 3.72549019607843, size: 1 },\r\n // { x: 55.1351351351351, y: 3.49019607843137, size: 1 },\r\n // { x: 55.7837837837838, y: 3.6078431372549, size: 1 },\r\n // { x: 56.4324324324324, y: 3.76470588235294, size: 1 },\r\n // { x: 57.0810810810811, y: 3.64705882352941, size: 1 },\r\n // { x: 57.7297297297297, y: 3.64705882352941, size: 1 },\r\n // { x: 58.3783783783784, y: 3.6078431372549, size: 1 },\r\n // { x: 59.027027027027, y: 3.72549019607843, size: 1 },\r\n // { x: 59.6756756756757, y: 3.6078431372549, size: 1 },\r\n // { x: 60.3243243243243, y: 3.72549019607843, size: 1 },\r\n // { x: 60.972972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 61.6216216216216, y: 3.41176470588235, size: 1 },\r\n // { x: 62.2702702702703, y: 3.72549019607843, size: 1 },\r\n // { x: 62.9189189189189, y: 3.64705882352941, size: 1 },\r\n // { x: 63.5675675675676, y: 3.76470588235294, size: 1 },\r\n // { x: 64.2162162162162, y: 3.84313725490196, size: 1 },\r\n // { x: 64.8648648648649, y: 3.6078431372549, size: 1 },\r\n // { x: 65.5135135135135, y: 3.72549019607843, size: 1 },\r\n // { x: 66.1621621621622, y: 3.80392156862745, size: 1 },\r\n // { x: 66.8108108108108, y: 3.72549019607843, size: 1 },\r\n // { x: 67.4594594594595, y: 3.64705882352941, size: 1 },\r\n // { x: 68.1081081081081, y: 3.56862745098039, size: 1 },\r\n // { x: 68.7567567567568, y: 3.80392156862745, size: 1 },\r\n // { x: 69.4054054054054, y: 3.33333333333333, size: 1 },\r\n // { x: 70.054054054054, y: 3.56862745098039, size: 1 },\r\n // { x: 70.7027027027027, y: 3.56862745098039, size: 1 },\r\n // { x: 71.3513513513514, y: 2.94117647058824, size: 1 },\r\n // { x: 72, y: 3.33333333333333, size: 1 },\r\n // { x: 72.6486486486486, y: 3.45098039215686, size: 1 },\r\n // { x: 73.2972972972973, y: 3.96078431372549, size: 1 },\r\n // { x: 73.945945945946, y: 3.56862745098039, size: 1 },\r\n // { x: 74.5945945945946, y: 3.6078431372549, size: 1 },\r\n // { x: 75.2432432432432, y: 3.72549019607843, size: 1 },\r\n // { x: 75.8918918918919, y: 3.76470588235294, size: 1 },\r\n // { x: 76.5405405405405, y: 3.80392156862745, size: 1 },\r\n // { x: 77.1891891891892, y: 3.56862745098039, size: 1 },\r\n // { x: 77.8378378378378, y: 3.72549019607843, size: 1 },\r\n // { x: 78.4864864864865, y: 3.68627450980392, size: 1 },\r\n // { x: 79.1351351351351, y: 3.64705882352941, size: 1 },\r\n // { x: 79.7837837837838, y: 3.68627450980392, size: 1 },\r\n // { x: 80.4324324324324, y: 3.72549019607843, size: 1 },\r\n // { x: 81.0810810810811, y: 4, size: 1 },\r\n // { x: 81.7297297297297, y: 3.64705882352941, size: 1 },\r\n // { x: 82.3783783783784, y: 3.68627450980392, size: 1 },\r\n // { x: 83.027027027027, y: 3.72549019607843, size: 1 },\r\n // { x: 83.6756756756757, y: 3.6078431372549, size: 1 },\r\n // { x: 84.3243243243243, y: 3.72549019607843, size: 1 },\r\n // { x: 84.972972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 85.6216216216216, y: 3.64705882352941, size: 1 },\r\n // { x: 86.2702702702703, y: 3.64705882352941, size: 1 },\r\n // { x: 86.9189189189189, y: 4, size: 1 },\r\n // { x: 87.5675675675676, y: 3.68627450980392, size: 1 },\r\n // { x: 88.2162162162162, y: 3.72549019607843, size: 1 },\r\n // { x: 88.8648648648649, y: 3.72549019607843, size: 1 },\r\n // { x: 89.5135135135135, y: 3.6078431372549, size: 1 },\r\n // { x: 90.1621621621622, y: 3.6078431372549, size: 1 },\r\n // { x: 90.8108108108108, y: 3.56862745098039, size: 1 },\r\n // { x: 91.4594594594595, y: 3.45098039215686, size: 1 },\r\n // { x: 92.1081081081081, y: 3.76470588235294, size: 1 },\r\n // { x: 92.7567567567568, y: 3.56862745098039, size: 1 },\r\n // { x: 93.4054054054054, y: 3.68627450980392, size: 1 },\r\n // { x: 94.054054054054, y: 3.68627450980392, size: 1 },\r\n // { x: 94.7027027027027, y: 3.45098039215686, size: 1 },\r\n // { x: 95.3513513513514, y: 3.64705882352941, size: 1 },\r\n // { x: 96, y: 3.72549019607843, size: 1 },\r\n // { x: 96.6486486486486, y: 3.68627450980392, size: 1 },\r\n // { x: 97.2972972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 97.945945945946, y: 3.6078431372549, size: 1 },\r\n // { x: 98.5945945945946, y: 3.56862745098039, size: 1 },\r\n // { x: 99.2432432432432, y: 3.6078431372549, size: 1 },\r\n // { x: 99.8918918918919, y: 3.6078431372549, size: 1 },\r\n // { x: 100.540540540541, y: 3.84313725490196, size: 1 },\r\n // { x: 101.189189189189, y: 3.72549019607843, size: 1 },\r\n // { x: 101.837837837838, y: 3.52941176470588, size: 1 },\r\n // { x: 102.486486486486, y: 3.52941176470588, size: 1 },\r\n // { x: 103.135135135135, y: 3.49019607843137, size: 1 },\r\n // { x: 103.783783783784, y: 3.88235294117647, size: 1 },\r\n // { x: 104.432432432432, y: 3.64705882352941, size: 1 },\r\n // { x: 105.081081081081, y: 3.6078431372549, size: 1 },\r\n // { x: 105.72972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 106.378378378378, y: 3.68627450980392, size: 1 },\r\n // { x: 107.027027027027, y: 3.72549019607843, size: 1 },\r\n // { x: 107.675675675676, y: 3.84313725490196, size: 1 },\r\n // { x: 108.324324324324, y: 3.41176470588235, size: 1 },\r\n // { x: 108.972972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 109.621621621622, y: 3.68627450980392, size: 1 },\r\n // { x: 110.27027027027, y: 3.84313725490196, size: 1 },\r\n // { x: 110.918918918919, y: 3.49019607843137, size: 1 },\r\n // { x: 111.567567567568, y: 3.49019607843137, size: 1 },\r\n // { x: 112.216216216216, y: 3.45098039215686, size: 1 },\r\n // { x: 112.864864864865, y: 3.6078431372549, size: 1 },\r\n // { x: 113.513513513514, y: 3.52941176470588, size: 1 },\r\n // { x: 114.162162162162, y: 3.33333333333333, size: 1 },\r\n // { x: 114.810810810811, y: 3.17647058823529, size: 1 },\r\n // { x: 115.459459459459, y: 3.56862745098039, size: 1 },\r\n // { x: 116.108108108108, y: 3.72549019607843, size: 1 },\r\n // { x: 116.756756756757, y: 3.68627450980392, size: 1 },\r\n // { x: 117.405405405405, y: 3.68627450980392, size: 1 },\r\n // { x: 118.054054054054, y: 3.64705882352941, size: 1 },\r\n // { x: 118.702702702703, y: 3.56862745098039, size: 1 },\r\n // { x: 119.351351351351, y: 3.68627450980392, size: 1 },\r\n // { x: 120, y: 3.68627450980392, size: 1 },\r\n // { x: 120.648648648649, y: 3.6078431372549, size: 1 },\r\n // { x: 121.297297297297, y: 3.80392156862745, size: 1 },\r\n // { x: 121.945945945946, y: 3.56862745098039, size: 1 },\r\n // { x: 122.594594594595, y: 3.76470588235294, size: 1 },\r\n // { x: 123.243243243243, y: 3.64705882352941, size: 1 },\r\n // { x: 123.891891891892, y: 3.64705882352941, size: 1 },\r\n // { x: 124.540540540541, y: 3.68627450980392, size: 1 },\r\n // { x: 125.189189189189, y: 3.6078431372549, size: 1 },\r\n // { x: 125.837837837838, y: 3.49019607843137, size: 1 },\r\n // { x: 126.486486486486, y: 3.76470588235294, size: 1 },\r\n // { x: 127.135135135135, y: 3.6078431372549, size: 1 },\r\n // { x: 127.783783783784, y: 3.41176470588235, size: 1 },\r\n // { x: 128.432432432432, y: 3.6078431372549, size: 1 },\r\n // { x: 129.081081081081, y: 3.6078431372549, size: 1 },\r\n // { x: 129.72972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 130.378378378378, y: 3.56862745098039, size: 1 },\r\n // { x: 131.027027027027, y: 3.68627450980392, size: 1 },\r\n // { x: 131.675675675676, y: 3.6078431372549, size: 1 },\r\n // { x: 132.324324324324, y: 3.68627450980392, size: 1 },\r\n // { x: 132.972972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 133.621621621622, y: 3.64705882352941, size: 1 },\r\n // { x: 134.27027027027, y: 3.41176470588235, size: 1 },\r\n // { x: 134.918918918919, y: 3.52941176470588, size: 1 },\r\n // { x: 135.567567567568, y: 3.33333333333333, size: 1 },\r\n // { x: 136.216216216216, y: 2.90196078431373, size: 1 },\r\n // { x: 136.864864864865, y: 3.52941176470588, size: 1 },\r\n // { x: 137.513513513514, y: 3.45098039215686, size: 1 },\r\n // { x: 138.162162162162, y: 3.56862745098039, size: 1 },\r\n // { x: 138.810810810811, y: 3.64705882352941, size: 1 },\r\n // { x: 139.459459459459, y: 3.6078431372549, size: 1 },\r\n // { x: 140.108108108108, y: 3.68627450980392, size: 1 },\r\n // { x: 140.756756756757, y: 3.6078431372549, size: 1 },\r\n // { x: 141.405405405405, y: 3.84313725490196, size: 1 },\r\n // { x: 142.054054054054, y: 3.64705882352941, size: 1 },\r\n // { x: 142.702702702703, y: 3.56862745098039, size: 1 },\r\n // { x: 143.351351351351, y: 3.56862745098039, size: 1 },\r\n // { x: 144, y: 3.41176470588235, size: 1 },\r\n // { x: 144.648648648649, y: 3.6078431372549, size: 1 },\r\n // { x: 145.297297297297, y: 3.6078431372549, size: 1 },\r\n // { x: 145.945945945946, y: 3.72549019607843, size: 1 },\r\n // { x: 146.594594594595, y: 3.64705882352941, size: 1 },\r\n // { x: 147.243243243243, y: 3.56862745098039, size: 1 },\r\n // { x: 147.891891891892, y: 3.76470588235294, size: 1 },\r\n // { x: 148.540540540541, y: 3.52941176470588, size: 1 },\r\n // { x: 149.189189189189, y: 3.56862745098039, size: 1 },\r\n // { x: 149.837837837838, y: 3.56862745098039, size: 1 },\r\n // { x: 150.486486486486, y: 3.45098039215686, size: 1 },\r\n // { x: 151.135135135135, y: 3.64705882352941, size: 1 },\r\n // { x: 151.783783783784, y: 3.49019607843137, size: 1 },\r\n // { x: 152.432432432432, y: 3.64705882352941, size: 1 },\r\n // { x: 153.081081081081, y: 3.56862745098039, size: 1 },\r\n // { x: 153.72972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 154.378378378378, y: 3.41176470588235, size: 1 },\r\n // { x: 155.027027027027, y: 3.41176470588235, size: 1 },\r\n // { x: 155.675675675676, y: 3.72549019607843, size: 1 },\r\n // { x: 156.324324324324, y: 3.33333333333333, size: 1 },\r\n // { x: 156.972972972973, y: 3.17647058823529, size: 1 },\r\n // { x: 157.621621621622, y: 3.29411764705882, size: 1 },\r\n // { x: 158.27027027027, y: 3.05882352941176, size: 1 },\r\n // { x: 158.918918918919, y: 3.45098039215686, size: 1 },\r\n // { x: 159.567567567568, y: 3.68627450980392, size: 1 },\r\n // { x: 160.216216216216, y: 3.6078431372549, size: 1 },\r\n // { x: 160.864864864865, y: 3.56862745098039, size: 1 },\r\n // { x: 161.513513513514, y: 3.68627450980392, size: 1 },\r\n // { x: 162.162162162162, y: 3.64705882352941, size: 1 },\r\n // { x: 162.810810810811, y: 3.49019607843137, size: 1 },\r\n // { x: 163.459459459459, y: 3.64705882352941, size: 1 },\r\n // { x: 164.108108108108, y: 3.76470588235294, size: 1 },\r\n // { x: 164.756756756757, y: 3.68627450980392, size: 1 },\r\n // { x: 165.405405405405, y: 3.6078431372549, size: 1 },\r\n // { x: 166.054054054054, y: 3.6078431372549, size: 1 },\r\n // { x: 166.702702702703, y: 3.72549019607843, size: 1 },\r\n // { x: 167.351351351351, y: 3.56862745098039, size: 1 },\r\n // { x: 168, y: 3.64705882352941, size: 1 },\r\n // { x: 168.648648648649, y: 3.72549019607843, size: 1 },\r\n // { x: 169.297297297297, y: 3.72549019607843, size: 1 },\r\n // { x: 169.945945945946, y: 3.68627450980392, size: 1 },\r\n // { x: 170.594594594595, y: 3.52941176470588, size: 1 },\r\n // { x: 171.243243243243, y: 3.68627450980392, size: 1 },\r\n // { x: 171.891891891892, y: 3.49019607843137, size: 1 },\r\n // { x: 172.540540540541, y: 3.37254901960784, size: 1 },\r\n // { x: 173.189189189189, y: 3.76470588235294, size: 1 },\r\n // { x: 173.837837837838, y: 3.49019607843137, size: 1 },\r\n // { x: 174.486486486486, y: 3.76470588235294, size: 1 },\r\n // { x: 175.135135135135, y: 3.56862745098039, size: 1 },\r\n // { x: 175.783783783784, y: 3.52941176470588, size: 1 },\r\n // { x: 176.432432432432, y: 3.49019607843137, size: 1 },\r\n // { x: 177.081081081081, y: 3.2156862745098, size: 1 },\r\n // { x: 177.72972972973, y: 3.17647058823529, size: 1 },\r\n // { x: 178.378378378378, y: 2.90196078431373, size: 1 },\r\n // { x: 179.027027027027, y: 3.13725490196078, size: 1 },\r\n // { x: 179.675675675676, y: 3.29411764705882, size: 1 },\r\n // { x: 180.324324324324, y: 3.01960784313725, size: 1 },\r\n // { x: 180.972972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 181.621621621622, y: 3.6078431372549, size: 1 },\r\n // { x: 182.27027027027, y: 3.6078431372549, size: 1 },\r\n // { x: 182.918918918919, y: 3.68627450980392, size: 1 },\r\n // { x: 183.567567567568, y: 3.37254901960784, size: 1 },\r\n // { x: 184.216216216216, y: 3.88235294117647, size: 1 },\r\n // { x: 184.864864864865, y: 3.45098039215686, size: 1 },\r\n // { x: 185.513513513514, y: 3.72549019607843, size: 1 },\r\n // { x: 186.162162162162, y: 3.68627450980392, size: 1 },\r\n // { x: 186.810810810811, y: 4.11764705882353, size: 1 },\r\n // { x: 187.459459459459, y: 3.68627450980392, size: 1 },\r\n // { x: 188.108108108108, y: 3.64705882352941, size: 1 },\r\n // { x: 188.756756756757, y: 3.72549019607843, size: 1 },\r\n // { x: 189.405405405405, y: 3.72549019607843, size: 1 },\r\n // { x: 190.054054054054, y: 3.72549019607843, size: 1 },\r\n // { x: 190.702702702703, y: 3.56862745098039, size: 1 },\r\n // { x: 191.351351351351, y: 3.49019607843137, size: 1 },\r\n // { x: 192, y: 3.64705882352941, size: 1 },\r\n // { x: 192.648648648649, y: 3.72549019607843, size: 1 },\r\n // { x: 193.297297297297, y: 3.6078431372549, size: 1 },\r\n // { x: 193.945945945946, y: 3.64705882352941, size: 1 },\r\n // { x: 194.594594594595, y: 3.64705882352941, size: 1 },\r\n // { x: 195.243243243243, y: 3.72549019607843, size: 1 },\r\n // { x: 195.891891891892, y: 3.56862745098039, size: 1 },\r\n // { x: 196.540540540541, y: 3.84313725490196, size: 1 },\r\n // { x: 197.189189189189, y: 3.68627450980392, size: 1 },\r\n // { x: 197.837837837838, y: 3.41176470588235, size: 1 },\r\n // { x: 198.486486486486, y: 3.2156862745098, size: 1 },\r\n // { x: 199.135135135135, y: 3.56862745098039, size: 1 },\r\n // { x: 199.783783783784, y: 3.37254901960784, size: 1 },\r\n // { x: 200.432432432432, y: 3.37254901960784, size: 1 },\r\n // { x: 201.081081081081, y: 3.2156862745098, size: 1 },\r\n // { x: 201.72972972973, y: 3.25490196078431, size: 1 },\r\n // { x: 202.378378378378, y: 3.49019607843137, size: 1 },\r\n // { x: 203.027027027027, y: 3.29411764705882, size: 1 },\r\n // { x: 203.675675675676, y: 3.37254901960784, size: 1 },\r\n // { x: 204.324324324324, y: 3.52941176470588, size: 1 },\r\n // { x: 204.972972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 205.621621621622, y: 3.49019607843137, size: 1 },\r\n // { x: 206.27027027027, y: 3.45098039215686, size: 1 },\r\n // { x: 206.918918918919, y: 3.33333333333333, size: 1 },\r\n // { x: 207.567567567568, y: 3.41176470588235, size: 1 },\r\n // { x: 208.216216216216, y: 3.49019607843137, size: 1 },\r\n // { x: 208.864864864865, y: 3.80392156862745, size: 1 },\r\n // { x: 209.513513513514, y: 3.52941176470588, size: 1 },\r\n // { x: 210.162162162162, y: 3.33333333333333, size: 1 },\r\n // { x: 210.810810810811, y: 3.56862745098039, size: 1 },\r\n // { x: 211.459459459459, y: 3.72549019607843, size: 1 },\r\n // { x: 212.108108108108, y: 3.37254901960784, size: 1 },\r\n // { x: 212.756756756757, y: 3.33333333333333, size: 1 },\r\n // { x: 213.405405405405, y: 3.52941176470588, size: 1 },\r\n // { x: 214.054054054054, y: 3.41176470588235, size: 1 },\r\n // { x: 214.702702702703, y: 3.45098039215686, size: 1 },\r\n // { x: 215.351351351351, y: 3.6078431372549, size: 1 },\r\n // { x: 216, y: 3.45098039215686, size: 1 },\r\n // { x: 216.648648648649, y: 3.52941176470588, size: 1 },\r\n // { x: 217.297297297297, y: 3.41176470588235, size: 1 },\r\n // { x: 217.945945945946, y: 3.45098039215686, size: 1 },\r\n // { x: 218.594594594595, y: 3.29411764705882, size: 1 },\r\n // { x: 219.243243243243, y: 3.37254901960784, size: 1 },\r\n // { x: 219.891891891892, y: 3.45098039215686, size: 1 },\r\n // { x: 220.540540540541, y: 3.49019607843137, size: 1 },\r\n // { x: 221.189189189189, y: 3.45098039215686, size: 1 },\r\n // { x: 221.837837837838, y: 3.49019607843137, size: 1 },\r\n // { x: 222.486486486486, y: 3.29411764705882, size: 1 },\r\n // { x: 223.135135135135, y: 3.37254901960784, size: 1 },\r\n // { x: 223.783783783784, y: 3.37254901960784, size: 1 },\r\n // { x: 224.432432432432, y: 3.6078431372549, size: 1 },\r\n // { x: 225.081081081081, y: 3.76470588235294, size: 1 },\r\n // { x: 225.72972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 226.378378378378, y: 3.52941176470588, size: 1 },\r\n // { x: 227.027027027027, y: 3.37254901960784, size: 1 },\r\n // { x: 227.675675675676, y: 3.56862745098039, size: 1 },\r\n // { x: 228.324324324324, y: 3.64705882352941, size: 1 },\r\n // { x: 228.972972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 229.621621621622, y: 3.37254901960784, size: 1 },\r\n // { x: 230.27027027027, y: 3.45098039215686, size: 1 },\r\n // { x: 230.918918918919, y: 3.56862745098039, size: 1 },\r\n // { x: 231.567567567568, y: 3.68627450980392, size: 1 },\r\n // { x: 232.216216216216, y: 3.76470588235294, size: 1 },\r\n // { x: 232.864864864865, y: 3.52941176470588, size: 1 },\r\n // { x: 233.513513513514, y: 3.56862745098039, size: 1 },\r\n // { x: 234.162162162162, y: 3.45098039215686, size: 1 },\r\n // { x: 234.810810810811, y: 3.49019607843137, size: 1 },\r\n // { x: 235.459459459459, y: 3.49019607843137, size: 1 },\r\n // { x: 236.108108108108, y: 3.45098039215686, size: 1 },\r\n // { x: 236.756756756757, y: 3.6078431372549, size: 1 },\r\n // { x: 237.405405405405, y: 3.56862745098039, size: 1 },\r\n // { x: 238.054054054054, y: 3.52941176470588, size: 1 },\r\n // { x: 238.702702702703, y: 3.68627450980392, size: 1 },\r\n // { x: 239.351351351351, y: 3.56862745098039, size: 1 },\r\n // { x: 240, y: 3.52941176470588, size: 1 },\r\n // { x: 240.648648648649, y: 3.29411764705882, size: 1 },\r\n // { x: 241.297297297297, y: 3.6078431372549, size: 1 },\r\n // { x: 241.945945945946, y: 3.49019607843137, size: 1 },\r\n // { x: 242.594594594595, y: 3.56862745098039, size: 1 },\r\n // { x: 243.243243243243, y: 3.52941176470588, size: 1 },\r\n // { x: 243.891891891892, y: 3.6078431372549, size: 1 },\r\n // { x: 244.540540540541, y: 3.52941176470588, size: 1 },\r\n // { x: 245.189189189189, y: 3.64705882352941, size: 1 },\r\n // { x: 245.837837837838, y: 3.49019607843137, size: 1 },\r\n // { x: 246.486486486486, y: 3.56862745098039, size: 1 },\r\n // { x: 247.135135135135, y: 3.49019607843137, size: 1 },\r\n // { x: 247.783783783784, y: 3.52941176470588, size: 1 },\r\n // { x: 248.432432432432, y: 3.6078431372549, size: 1 },\r\n // { x: 249.081081081081, y: 3.56862745098039, size: 1 },\r\n // { x: 249.72972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 250.378378378378, y: 3.49019607843137, size: 1 },\r\n // { x: 251.027027027027, y: 3.49019607843137, size: 1 },\r\n // { x: 251.675675675676, y: 3.25490196078431, size: 1 },\r\n // { x: 252.324324324324, y: 3.52941176470588, size: 1 },\r\n // { x: 252.972972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 253.621621621622, y: 3.52941176470588, size: 1 },\r\n // { x: 254.27027027027, y: 3.45098039215686, size: 1 },\r\n // { x: 254.918918918919, y: 3.56862745098039, size: 1 },\r\n // { x: 255.567567567568, y: 3.45098039215686, size: 1 },\r\n // { x: 256.216216216216, y: 3.52941176470588, size: 1 },\r\n // { x: 256.864864864865, y: 3.45098039215686, size: 1 },\r\n // { x: 257.513513513513, y: 3.6078431372549, size: 1 },\r\n // { x: 258.162162162162, y: 3.49019607843137, size: 1 },\r\n // { x: 258.810810810811, y: 3.68627450980392, size: 1 },\r\n // { x: 259.459459459459, y: 4.03921568627451, size: 1 },\r\n // { x: 260.108108108108, y: 3.72549019607843, size: 1 },\r\n // { x: 260.756756756757, y: 3.56862745098039, size: 1 },\r\n // { x: 261.405405405405, y: 3.64705882352941, size: 1 },\r\n // { x: 262.054054054054, y: 3.52941176470588, size: 1 },\r\n // { x: 262.702702702703, y: 3.45098039215686, size: 1 },\r\n // { x: 263.351351351351, y: 3.37254901960784, size: 1 },\r\n // { x: 264, y: 3.29411764705882, size: 1 },\r\n // { x: 264.648648648649, y: 2.54901960784314, size: 1 },\r\n // { x: 265.297297297297, y: 3.01960784313725, size: 1 },\r\n // { x: 265.945945945946, y: 3.37254901960784, size: 1 },\r\n // { x: 266.594594594595, y: 3.01960784313725, size: 1 },\r\n // { x: 267.243243243243, y: 3.45098039215686, size: 1 },\r\n // { x: 267.891891891892, y: 3.72549019607843, size: 1 },\r\n // { x: 268.540540540541, y: 3.41176470588235, size: 1 },\r\n // { x: 269.189189189189, y: 3.56862745098039, size: 1 },\r\n // { x: 269.837837837838, y: 3.68627450980392, size: 1 },\r\n // { x: 270.486486486487, y: 3.29411764705882, size: 1 },\r\n // { x: 271.135135135135, y: 3.49019607843137, size: 1 },\r\n // { x: 271.783783783784, y: 3.41176470588235, size: 1 },\r\n // { x: 272.432432432432, y: 3.64705882352941, size: 1 },\r\n // { x: 273.081081081081, y: 3.6078431372549, size: 1 },\r\n // { x: 273.72972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 274.378378378378, y: 3.64705882352941, size: 1 },\r\n // { x: 275.027027027027, y: 3.52941176470588, size: 1 },\r\n // { x: 275.675675675676, y: 3.29411764705882, size: 1 },\r\n // { x: 276.324324324324, y: 3.52941176470588, size: 1 },\r\n // { x: 276.972972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 277.621621621622, y: 3.56862745098039, size: 1 },\r\n // { x: 278.27027027027, y: 3.6078431372549, size: 1 },\r\n // { x: 278.918918918919, y: 3.49019607843137, size: 1 },\r\n // { x: 279.567567567568, y: 3.49019607843137, size: 1 },\r\n // { x: 280.216216216216, y: 3.52941176470588, size: 1 },\r\n // { x: 280.864864864865, y: 3.52941176470588, size: 1 },\r\n // { x: 281.513513513513, y: 3.49019607843137, size: 1 },\r\n // { x: 282.162162162162, y: 3.49019607843137, size: 1 },\r\n // { x: 282.810810810811, y: 3.56862745098039, size: 1 },\r\n // { x: 283.459459459459, y: 3.41176470588235, size: 1 },\r\n // { x: 284.108108108108, y: 3.68627450980392, size: 1 },\r\n // { x: 284.756756756757, y: 3.6078431372549, size: 1 },\r\n // { x: 285.405405405405, y: 3.64705882352941, size: 1 },\r\n // { x: 286.054054054054, y: 2.62745098039216, size: 1 },\r\n // { x: 286.702702702703, y: 3.01960784313725, size: 1 },\r\n // { x: 287.351351351351, y: 2.70588235294118, size: 1 },\r\n // { x: 288, y: 2.90196078431373, size: 1 },\r\n // { x: 288.648648648649, y: 3.13725490196078, size: 1 },\r\n // { x: 289.297297297297, y: 3.52941176470588, size: 1 },\r\n // { x: 289.945945945946, y: 3.6078431372549, size: 1 },\r\n // { x: 290.594594594595, y: 3.68627450980392, size: 1 },\r\n // { x: 291.243243243243, y: 3.52941176470588, size: 1 },\r\n // { x: 291.891891891892, y: 3.6078431372549, size: 1 },\r\n // { x: 292.540540540541, y: 3.49019607843137, size: 1 },\r\n // { x: 293.189189189189, y: 3.6078431372549, size: 1 },\r\n // { x: 293.837837837838, y: 3.37254901960784, size: 1 },\r\n // { x: 294.486486486487, y: 3.80392156862745, size: 1 },\r\n // { x: 295.135135135135, y: 3.45098039215686, size: 1 },\r\n // { x: 295.783783783784, y: 3.72549019607843, size: 1 },\r\n // { x: 296.432432432432, y: 3.6078431372549, size: 1 },\r\n // { x: 297.081081081081, y: 3.56862745098039, size: 1 },\r\n // { x: 297.72972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 298.378378378378, y: 3.52941176470588, size: 1 },\r\n // { x: 299.027027027027, y: 3.49019607843137, size: 1 },\r\n // { x: 299.675675675676, y: 3.45098039215686, size: 1 },\r\n // { x: 300.324324324324, y: 3.76470588235294, size: 1 },\r\n // { x: 300.972972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 301.621621621622, y: 3.6078431372549, size: 1 },\r\n // { x: 302.27027027027, y: 3.72549019607843, size: 1 },\r\n // { x: 302.918918918919, y: 3.37254901960784, size: 1 },\r\n // { x: 303.567567567568, y: 3.41176470588235, size: 1 },\r\n // { x: 304.216216216216, y: 3.52941176470588, size: 1 },\r\n // { x: 304.864864864865, y: 3.52941176470588, size: 1 },\r\n // { x: 305.513513513513, y: 3.37254901960784, size: 1 },\r\n // { x: 306.162162162162, y: 4.03921568627451, size: 1 },\r\n // { x: 306.810810810811, y: 3.37254901960784, size: 1 },\r\n // { x: 307.459459459459, y: 3.72549019607843, size: 1 },\r\n // { x: 308.108108108108, y: 3.45098039215686, size: 1 },\r\n // { x: 308.756756756757, y: 3.56862745098039, size: 1 },\r\n // { x: 309.405405405405, y: 3.49019607843137, size: 1 },\r\n // { x: 310.054054054054, y: 3.49019607843137, size: 1 },\r\n // { x: 310.702702702703, y: 3.45098039215686, size: 1 },\r\n // { x: 311.351351351351, y: 3.56862745098039, size: 1 },\r\n // { x: 312, y: 3.64705882352941, size: 1 },\r\n // { x: 312.648648648649, y: 3.49019607843137, size: 1 },\r\n // { x: 313.297297297297, y: 3.68627450980392, size: 1 },\r\n // { x: 313.945945945946, y: 3.72549019607843, size: 1 },\r\n // { x: 314.594594594595, y: 3.33333333333333, size: 1 },\r\n // { x: 315.243243243243, y: 3.29411764705882, size: 1 },\r\n // { x: 315.891891891892, y: 3.72549019607843, size: 1 },\r\n // { x: 316.540540540541, y: 3.56862745098039, size: 1 },\r\n // { x: 317.189189189189, y: 3.56862745098039, size: 1 },\r\n // { x: 317.837837837838, y: 3.49019607843137, size: 1 },\r\n // { x: 318.486486486487, y: 3.56862745098039, size: 1 },\r\n // { x: 319.135135135135, y: 3.25490196078431, size: 1 },\r\n // { x: 319.783783783784, y: 3.88235294117647, size: 1 },\r\n // { x: 320.432432432432, y: 3.2156862745098, size: 1 },\r\n // { x: 321.081081081081, y: 3.92156862745098, size: 1 },\r\n // { x: 321.72972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 322.378378378378, y: 3.64705882352941, size: 1 },\r\n // { x: 323.027027027027, y: 3.56862745098039, size: 1 },\r\n // { x: 323.675675675676, y: 3.76470588235294, size: 1 },\r\n // { x: 324.324324324324, y: 3.37254901960784, size: 1 },\r\n // { x: 324.972972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 325.621621621622, y: 3.29411764705882, size: 1 },\r\n // { x: 326.27027027027, y: 3.49019607843137, size: 1 },\r\n // { x: 326.918918918919, y: 3.45098039215686, size: 1 },\r\n // { x: 327.567567567568, y: 3.80392156862745, size: 1 },\r\n // { x: 328.216216216216, y: 3.45098039215686, size: 1 },\r\n // { x: 328.864864864865, y: 3.76470588235294, size: 1 },\r\n // { x: 329.513513513513, y: 3.56862745098039, size: 1 },\r\n // { x: 330.162162162162, y: 3.64705882352941, size: 1 },\r\n // { x: 330.810810810811, y: 3.52941176470588, size: 1 },\r\n // { x: 331.459459459459, y: 3.45098039215686, size: 1 },\r\n // { x: 332.108108108108, y: 3.49019607843137, size: 1 },\r\n // { x: 332.756756756757, y: 3.49019607843137, size: 1 },\r\n // { x: 333.405405405405, y: 3.49019607843137, size: 1 },\r\n // { x: 334.054054054054, y: 3.68627450980392, size: 1 },\r\n // { x: 334.702702702703, y: 3.6078431372549, size: 1 },\r\n // { x: 335.351351351351, y: 3.37254901960784, size: 1 },\r\n // { x: 336, y: 3.37254901960784, size: 1 },\r\n // { x: 336.648648648649, y: 3.41176470588235, size: 1 },\r\n // { x: 337.297297297297, y: 3.45098039215686, size: 1 },\r\n // { x: 337.945945945946, y: 3.45098039215686, size: 1 },\r\n // { x: 338.594594594595, y: 3.64705882352941, size: 1 },\r\n // { x: 339.243243243243, y: 3.6078431372549, size: 1 },\r\n // { x: 339.891891891892, y: 3.52941176470588, size: 1 },\r\n // { x: 340.540540540541, y: 3.41176470588235, size: 1 },\r\n // { x: 341.189189189189, y: 3.41176470588235, size: 1 },\r\n // { x: 341.837837837838, y: 3.33333333333333, size: 1 },\r\n // { x: 342.486486486487, y: 3.56862745098039, size: 1 },\r\n // { x: 343.135135135135, y: 3.52941176470588, size: 1 },\r\n // { x: 343.783783783784, y: 3.52941176470588, size: 1 },\r\n // { x: 344.432432432432, y: 3.56862745098039, size: 1 },\r\n // { x: 345.081081081081, y: 3.45098039215686, size: 1 },\r\n // { x: 345.72972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 346.378378378378, y: 3.45098039215686, size: 1 },\r\n // { x: 347.027027027027, y: 3.49019607843137, size: 1 },\r\n // { x: 347.675675675676, y: 3.41176470588235, size: 1 },\r\n // { x: 348.324324324324, y: 3.45098039215686, size: 1 },\r\n // { x: 348.972972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 349.621621621622, y: 3.52941176470588, size: 1 },\r\n // { x: 350.27027027027, y: 3.49019607843137, size: 1 },\r\n // { x: 350.918918918919, y: 3.41176470588235, size: 1 },\r\n // { x: 351.567567567568, y: 3.37254901960784, size: 1 },\r\n // { x: 352.216216216216, y: 3.2156862745098, size: 1 },\r\n // { x: 352.864864864865, y: 2.94117647058824, size: 1 },\r\n // { x: 353.513513513513, y: 3.6078431372549, size: 1 },\r\n // { x: 354.162162162162, y: 3.49019607843137, size: 1 },\r\n // { x: 354.810810810811, y: 3.72549019607843, size: 1 },\r\n // { x: 355.459459459459, y: 3.80392156862745, size: 1 },\r\n // { x: 356.108108108108, y: 3.68627450980392, size: 1 },\r\n // { x: 356.756756756757, y: 3.49019607843137, size: 1 },\r\n // { x: 357.405405405405, y: 3.80392156862745, size: 1 },\r\n // { x: 358.054054054054, y: 3.76470588235294, size: 1 },\r\n // { x: 358.702702702703, y: 3.56862745098039, size: 1 },\r\n // { x: 359.351351351351, y: 3.76470588235294, size: 1 },\r\n // { x: 0, y: 3.6078431372549, size: 1 },\r\n // { x: 0.647482014388489, y: 3.56862745098039, size: 1 },\r\n // { x: 1.29496402877698, y: 3.68627450980392, size: 1 },\r\n // { x: 1.94244604316547, y: 3.6078431372549, size: 1 },\r\n // { x: 2.58992805755396, y: 3.68627450980392, size: 1 },\r\n // { x: 3.23741007194245, y: 3.68627450980392, size: 1 },\r\n // { x: 3.88489208633094, y: 3.52941176470588, size: 1 },\r\n // { x: 4.53237410071942, y: 3.52941176470588, size: 1 },\r\n // { x: 5.17985611510791, y: 3.52941176470588, size: 1 },\r\n // { x: 5.8273381294964, y: 3.49019607843137, size: 1 },\r\n // { x: 6.47482014388489, y: 3.92156862745098, size: 1 },\r\n // { x: 7.12230215827338, y: 3.6078431372549, size: 1 },\r\n // { x: 7.76978417266187, y: 3.6078431372549, size: 1 },\r\n // { x: 8.41726618705036, y: 3.6078431372549, size: 1 },\r\n // { x: 9.06474820143885, y: 3.80392156862745, size: 1 },\r\n // { x: 9.71223021582734, y: 3.45098039215686, size: 1 },\r\n // { x: 10.3597122302158, y: 3.64705882352941, size: 1 },\r\n // { x: 11.0071942446043, y: 3.76470588235294, size: 1 },\r\n // { x: 11.6546762589928, y: 3.68627450980392, size: 1 },\r\n // { x: 12.3021582733813, y: 4, size: 1 },\r\n // { x: 12.9496402877698, y: 3.33333333333333, size: 1 },\r\n // { x: 13.5971223021583, y: 3.33333333333333, size: 1 },\r\n // { x: 14.8920863309353, y: 3.41176470588235, size: 1 },\r\n // { x: 15.5395683453237, y: 3.29411764705882, size: 1 },\r\n // { x: 16.1870503597122, y: 3.45098039215686, size: 1 },\r\n // { x: 16.8345323741007, y: 3.52941176470588, size: 1 },\r\n // { x: 17.4820143884892, y: 3.56862745098039, size: 1 },\r\n // { x: 18.1294964028777, y: 3.41176470588235, size: 1 },\r\n // { x: 18.7769784172662, y: 3.49019607843137, size: 1 },\r\n // { x: 19.4244604316547, y: 3.49019607843137, size: 1 },\r\n // { x: 20.0719424460432, y: 3.6078431372549, size: 1 },\r\n // { x: 20.7194244604317, y: 3.29411764705882, size: 1 },\r\n // { x: 21.3669064748201, y: 3.37254901960784, size: 1 },\r\n // { x: 22.0143884892086, y: 3.52941176470588, size: 1 },\r\n // { x: 22.6618705035971, y: 3.37254901960784, size: 1 },\r\n // { x: 23.3093525179856, y: 3.41176470588235, size: 1 },\r\n // { x: 23.9568345323741, y: 3.56862745098039, size: 1 },\r\n // { x: 24.6043165467626, y: 3.37254901960784, size: 1 },\r\n // { x: 25.8992805755396, y: 3.29411764705882, size: 1 },\r\n // { x: 26.5467625899281, y: 3.25490196078431, size: 1 },\r\n // { x: 27.1942446043165, y: 3.41176470588235, size: 1 },\r\n // { x: 27.841726618705, y: 3.64705882352941, size: 1 },\r\n // { x: 28.4892086330935, y: 3.6078431372549, size: 1 },\r\n // { x: 29.136690647482, y: 3.76470588235294, size: 1 },\r\n // { x: 29.7841726618705, y: 3.33333333333333, size: 1 },\r\n // { x: 30.431654676259, y: 3.37254901960784, size: 1 },\r\n // { x: 31.0791366906475, y: 3.72549019607843, size: 1 },\r\n // { x: 31.726618705036, y: 3.33333333333333, size: 1 },\r\n // { x: 32.3741007194245, y: 3.45098039215686, size: 1 },\r\n // { x: 33.0215827338129, y: 3.6078431372549, size: 1 },\r\n // { x: 33.6690647482014, y: 3.33333333333333, size: 1 },\r\n // { x: 34.3165467625899, y: 3.05882352941176, size: 1 },\r\n // { x: 34.9640287769784, y: 2.74509803921569, size: 1 },\r\n // { x: 35.6115107913669, y: 3.2156862745098, size: 1 },\r\n // { x: 36.2589928057554, y: 3.09803921568627, size: 1 },\r\n // { x: 36.9064748201439, y: 3.41176470588235, size: 1 },\r\n // { x: 37.5539568345324, y: 3.52941176470588, size: 1 },\r\n // { x: 39.4964028776978, y: 3.68627450980392, size: 1 },\r\n // { x: 40.1438848920863, y: 3.37254901960784, size: 1 },\r\n // { x: 40.7913669064748, y: 3.64705882352941, size: 1 },\r\n // { x: 41.4388489208633, y: 3.41176470588235, size: 1 },\r\n // { x: 42.0863309352518, y: 3.49019607843137, size: 1 },\r\n // { x: 42.7338129496403, y: 3.52941176470588, size: 1 },\r\n // { x: 43.3812949640288, y: 3.64705882352941, size: 1 },\r\n // { x: 44.6762589928058, y: 3.88235294117647, size: 1 },\r\n // { x: 45.3237410071942, y: 3.41176470588235, size: 1 },\r\n // { x: 45.9712230215827, y: 3.45098039215686, size: 1 },\r\n // { x: 46.6187050359712, y: 3.52941176470588, size: 1 },\r\n // { x: 47.2661870503597, y: 3.76470588235294, size: 1 },\r\n // { x: 47.9136690647482, y: 3.72549019607843, size: 1 },\r\n // { x: 48.5611510791367, y: 3.56862745098039, size: 1 },\r\n // { x: 49.2086330935252, y: 3.72549019607843, size: 1 },\r\n // { x: 49.8561151079137, y: 3.76470588235294, size: 1 },\r\n // { x: 50.5035971223022, y: 3.76470588235294, size: 1 },\r\n // { x: 51.1510791366906, y: 3.6078431372549, size: 1 },\r\n // { x: 52.4460431654676, y: 3.37254901960784, size: 1 },\r\n // { x: 53.0935251798561, y: 3.45098039215686, size: 1 },\r\n // { x: 53.7410071942446, y: 3.29411764705882, size: 1 },\r\n // { x: 54.3884892086331, y: 3.45098039215686, size: 1 },\r\n // { x: 55.0359712230216, y: 3.29411764705882, size: 1 },\r\n // { x: 55.6834532374101, y: 3.37254901960784, size: 1 },\r\n // { x: 56.3309352517986, y: 3.2156862745098, size: 1 },\r\n // { x: 56.9784172661871, y: 3.2156862745098, size: 1 },\r\n // { x: 57.6258992805755, y: 3.2156862745098, size: 1 },\r\n // { x: 58.273381294964, y: 3.29411764705882, size: 1 },\r\n // { x: 58.9208633093525, y: 3.76470588235294, size: 1 },\r\n // { x: 59.568345323741, y: 3.64705882352941, size: 1 },\r\n // { x: 60.2158273381295, y: 3.56862745098039, size: 1 },\r\n // { x: 60.863309352518, y: 4, size: 1 },\r\n // { x: 61.5107913669065, y: 3.64705882352941, size: 1 },\r\n // { x: 62.8057553956835, y: 3.72549019607843, size: 1 },\r\n // { x: 63.4532374100719, y: 3.6078431372549, size: 1 },\r\n // { x: 64.1007194244604, y: 3.76470588235294, size: 1 },\r\n // { x: 64.7482014388489, y: 3.76470588235294, size: 1 },\r\n // { x: 65.3956834532374, y: 3.64705882352941, size: 1 },\r\n // { x: 66.0431654676259, y: 3.64705882352941, size: 1 },\r\n // { x: 66.6906474820144, y: 3.84313725490196, size: 1 },\r\n // { x: 67.9856115107914, y: 3.49019607843137, size: 1 },\r\n // { x: 68.6330935251799, y: 3.72549019607843, size: 1 },\r\n // { x: 69.2805755395683, y: 3.76470588235294, size: 1 },\r\n // { x: 69.9280575539568, y: 3.80392156862745, size: 1 },\r\n // { x: 70.5755395683453, y: 3.84313725490196, size: 1 },\r\n // { x: 71.2230215827338, y: 3.64705882352941, size: 1 },\r\n // { x: 71.8705035971223, y: 3.6078431372549, size: 1 },\r\n // { x: 72.5179856115108, y: 3.64705882352941, size: 1 },\r\n // { x: 73.8129496402878, y: 3.68627450980392, size: 1 },\r\n // { x: 74.4604316546763, y: 3.52941176470588, size: 1 },\r\n // { x: 75.1079136690647, y: 3.64705882352941, size: 1 },\r\n // { x: 75.7553956834532, y: 3.68627450980392, size: 1 },\r\n // { x: 76.4028776978417, y: 3.45098039215686, size: 1 },\r\n // { x: 77.0503597122302, y: 3.6078431372549, size: 1 },\r\n // { x: 77.6978417266187, y: 3.25490196078431, size: 1 },\r\n // { x: 78.3453237410072, y: 3.41176470588235, size: 1 },\r\n // { x: 78.9928057553957, y: 3.64705882352941, size: 1 },\r\n // { x: 79.6402877697842, y: 3.76470588235294, size: 1 },\r\n // { x: 80.2877697841727, y: 3.6078431372549, size: 1 },\r\n // { x: 80.9352517985612, y: 3.64705882352941, size: 1 },\r\n // { x: 81.5827338129496, y: 3.68627450980392, size: 1 },\r\n // { x: 82.2302158273381, y: 3.52941176470588, size: 1 },\r\n // { x: 82.8776978417266, y: 3.68627450980392, size: 1 },\r\n // { x: 83.5251798561151, y: 3.6078431372549, size: 1 },\r\n // { x: 84.1726618705036, y: 3.64705882352941, size: 1 },\r\n // { x: 84.8201438848921, y: 3.52941176470588, size: 1 },\r\n // { x: 85.4676258992806, y: 3.6078431372549, size: 1 },\r\n // { x: 86.1151079136691, y: 3.6078431372549, size: 1 },\r\n // { x: 86.7625899280576, y: 3.68627450980392, size: 1 },\r\n // { x: 87.410071942446, y: 3.49019607843137, size: 1 },\r\n // { x: 88.0575539568345, y: 3.49019607843137, size: 1 },\r\n // { x: 88.705035971223, y: 3.56862745098039, size: 1 },\r\n // { x: 89.3525179856115, y: 3.6078431372549, size: 1 },\r\n // { x: 90, y: 3.52941176470588, size: 1 },\r\n // { x: 90.6474820143885, y: 3.6078431372549, size: 1 },\r\n // { x: 91.294964028777, y: 3.6078431372549, size: 1 },\r\n // { x: 92.589928057554, y: 3.68627450980392, size: 1 },\r\n // { x: 93.2374100719424, y: 3.52941176470588, size: 1 },\r\n // { x: 93.8848920863309, y: 3.6078431372549, size: 1 },\r\n // { x: 94.5323741007194, y: 3.52941176470588, size: 1 },\r\n // { x: 96.4748201438849, y: 3.6078431372549, size: 1 },\r\n // { x: 97.1223021582734, y: 3.52941176470588, size: 1 },\r\n // { x: 97.7697841726619, y: 3.49019607843137, size: 1 },\r\n // { x: 98.4172661870504, y: 3.45098039215686, size: 1 },\r\n // { x: 99.0647482014388, y: 2.90196078431373, size: 1 },\r\n // { x: 99.7122302158273, y: 2.86274509803922, size: 1 },\r\n // { x: 100.359712230216, y: 3.56862745098039, size: 1 },\r\n // { x: 101.007194244604, y: 3.45098039215686, size: 1 },\r\n // { x: 101.654676258993, y: 3.49019607843137, size: 1 },\r\n // { x: 102.302158273381, y: 3.49019607843137, size: 1 },\r\n // { x: 102.94964028777, y: 3.52941176470588, size: 1 },\r\n // { x: 103.597122302158, y: 3.56862745098039, size: 1 },\r\n // { x: 104.244604316547, y: 3.68627450980392, size: 1 },\r\n // { x: 104.892086330935, y: 3.45098039215686, size: 1 },\r\n // { x: 105.539568345324, y: 3.49019607843137, size: 1 },\r\n // { x: 106.187050359712, y: 3.56862745098039, size: 1 },\r\n // { x: 106.834532374101, y: 3.41176470588235, size: 1 },\r\n // { x: 108.129496402878, y: 3.72549019607843, size: 1 },\r\n // { x: 108.776978417266, y: 3.72549019607843, size: 1 },\r\n // { x: 109.424460431655, y: 3.68627450980392, size: 1 },\r\n // { x: 110.071942446043, y: 3.64705882352941, size: 1 },\r\n // { x: 110.719424460432, y: 3.49019607843137, size: 1 },\r\n // { x: 111.36690647482, y: 3.56862745098039, size: 1 },\r\n // { x: 112.014388489209, y: 3.52941176470588, size: 1 },\r\n // { x: 113.309352517986, y: 3.56862745098039, size: 1 },\r\n // { x: 113.956834532374, y: 3.64705882352941, size: 1 },\r\n // { x: 114.604316546763, y: 3.64705882352941, size: 1 },\r\n // { x: 115.251798561151, y: 3.76470588235294, size: 1 },\r\n // { x: 115.89928057554, y: 3.52941176470588, size: 1 },\r\n // { x: 116.546762589928, y: 3.52941176470588, size: 1 },\r\n // { x: 117.194244604317, y: 3.52941176470588, size: 1 },\r\n // { x: 117.841726618705, y: 3.37254901960784, size: 1 },\r\n // { x: 118.489208633094, y: 3.49019607843137, size: 1 },\r\n // { x: 119.136690647482, y: 3.64705882352941, size: 1 },\r\n // { x: 119.784172661871, y: 3.6078431372549, size: 1 },\r\n // { x: 120.431654676259, y: 3.68627450980392, size: 1 },\r\n // { x: 121.079136690647, y: 3.41176470588235, size: 1 },\r\n // { x: 121.726618705036, y: 3.56862745098039, size: 1 },\r\n // { x: 123.021582733813, y: 3.6078431372549, size: 1 },\r\n // { x: 123.669064748201, y: 3.45098039215686, size: 1 },\r\n // { x: 124.31654676259, y: 3.56862745098039, size: 1 },\r\n // { x: 124.964028776978, y: 3.64705882352941, size: 1 },\r\n // { x: 125.611510791367, y: 3.72549019607843, size: 1 },\r\n // { x: 126.258992805755, y: 3.52941176470588, size: 1 },\r\n // { x: 126.906474820144, y: 3.37254901960784, size: 1 },\r\n // { x: 127.553956834532, y: 3.45098039215686, size: 1 },\r\n // { x: 128.201438848921, y: 3.37254901960784, size: 1 },\r\n // { x: 128.848920863309, y: 3.6078431372549, size: 1 },\r\n // { x: 129.496402877698, y: 3.64705882352941, size: 1 },\r\n // { x: 130.143884892086, y: 3.56862745098039, size: 1 },\r\n // { x: 130.791366906475, y: 3.41176470588235, size: 1 },\r\n // { x: 131.438848920863, y: 3.56862745098039, size: 1 },\r\n // { x: 132.086330935252, y: 3.6078431372549, size: 1 },\r\n // { x: 132.73381294964, y: 3.52941176470588, size: 1 },\r\n // { x: 133.381294964029, y: 3.52941176470588, size: 1 },\r\n // { x: 134.028776978417, y: 3.41176470588235, size: 1 },\r\n // { x: 134.676258992806, y: 3.49019607843137, size: 1 },\r\n // { x: 135.323741007194, y: 3.6078431372549, size: 1 },\r\n // { x: 135.971223021583, y: 3.68627450980392, size: 1 },\r\n // { x: 136.618705035971, y: 3.45098039215686, size: 1 },\r\n // { x: 137.26618705036, y: 3.37254901960784, size: 1 },\r\n // { x: 137.913669064748, y: 3.6078431372549, size: 1 },\r\n // { x: 138.561151079137, y: 3.33333333333333, size: 1 },\r\n // { x: 139.208633093525, y: 3.41176470588235, size: 1 },\r\n // { x: 139.856115107914, y: 3.6078431372549, size: 1 },\r\n // { x: 140.503597122302, y: 3.64705882352941, size: 1 },\r\n // { x: 141.151079136691, y: 3.6078431372549, size: 1 },\r\n // { x: 141.798561151079, y: 3.41176470588235, size: 1 },\r\n // { x: 142.446043165468, y: 3.52941176470588, size: 1 },\r\n // { x: 143.093525179856, y: 3.29411764705882, size: 1 },\r\n // { x: 143.741007194245, y: 3.33333333333333, size: 1 },\r\n // { x: 144.388489208633, y: 3.41176470588235, size: 1 },\r\n // { x: 145.035971223022, y: 3.41176470588235, size: 1 },\r\n // { x: 145.68345323741, y: 3.37254901960784, size: 1 },\r\n // { x: 146.330935251799, y: 3.37254901960784, size: 1 },\r\n // { x: 146.978417266187, y: 3.6078431372549, size: 1 },\r\n // { x: 147.625899280576, y: 3.41176470588235, size: 1 },\r\n // { x: 148.273381294964, y: 3.29411764705882, size: 1 },\r\n // { x: 148.920863309353, y: 3.33333333333333, size: 1 },\r\n // { x: 149.568345323741, y: 3.41176470588235, size: 1 },\r\n // { x: 150.215827338129, y: 3.41176470588235, size: 1 },\r\n // { x: 151.510791366906, y: 3.52941176470588, size: 1 },\r\n // { x: 152.158273381295, y: 3.49019607843137, size: 1 },\r\n // { x: 152.805755395683, y: 3.25490196078431, size: 1 },\r\n // { x: 153.453237410072, y: 3.49019607843137, size: 1 },\r\n // { x: 154.10071942446, y: 3.29411764705882, size: 1 },\r\n // { x: 154.748201438849, y: 3.6078431372549, size: 1 },\r\n // { x: 155.395683453237, y: 3.37254901960784, size: 1 },\r\n // { x: 156.043165467626, y: 3.41176470588235, size: 1 },\r\n // { x: 156.690647482014, y: 3.56862745098039, size: 1 },\r\n // { x: 157.338129496403, y: 3.25490196078431, size: 1 },\r\n // { x: 157.985611510791, y: 3.76470588235294, size: 1 },\r\n // { x: 158.63309352518, y: 3.49019607843137, size: 1 },\r\n // { x: 159.280575539568, y: 3.45098039215686, size: 1 },\r\n // { x: 159.928057553957, y: 3.37254901960784, size: 1 },\r\n // { x: 160.575539568345, y: 3.33333333333333, size: 1 },\r\n // { x: 161.223021582734, y: 3.45098039215686, size: 1 },\r\n // { x: 161.870503597122, y: 3.29411764705882, size: 1 },\r\n // { x: 163.165467625899, y: 3.05882352941176, size: 1 },\r\n // { x: 163.812949640288, y: 2.82352941176471, size: 1 },\r\n // { x: 164.460431654676, y: 2.54901960784314, size: 1 },\r\n // { x: 165.107913669065, y: 2.62745098039216, size: 1 },\r\n // { x: 165.755395683453, y: 2.70588235294118, size: 1 },\r\n // { x: 166.402877697842, y: 3.72549019607843, size: 1 },\r\n // { x: 167.05035971223, y: 3.72549019607843, size: 1 },\r\n // { x: 167.697841726619, y: 3.56862745098039, size: 1 },\r\n // { x: 168.345323741007, y: 3.88235294117647, size: 1 },\r\n // { x: 168.992805755396, y: 3.56862745098039, size: 1 },\r\n // { x: 170.287769784173, y: 3.80392156862745, size: 1 },\r\n // { x: 170.935251798561, y: 3.6078431372549, size: 1 },\r\n // { x: 172.230215827338, y: 3.56862745098039, size: 1 },\r\n // { x: 172.877697841727, y: 3.72549019607843, size: 1 },\r\n // { x: 173.525179856115, y: 3.76470588235294, size: 1 },\r\n // { x: 174.172661870504, y: 3.68627450980392, size: 1 },\r\n // { x: 174.820143884892, y: 3.68627450980392, size: 1 },\r\n // { x: 175.467625899281, y: 3.80392156862745, size: 1 },\r\n // { x: 176.115107913669, y: 3.64705882352941, size: 1 },\r\n // { x: 176.762589928058, y: 3.68627450980392, size: 1 },\r\n // { x: 177.410071942446, y: 3.41176470588235, size: 1 },\r\n // { x: 178.057553956835, y: 3.76470588235294, size: 1 },\r\n // { x: 178.705035971223, y: 3.56862745098039, size: 1 },\r\n // { x: 179.352517985612, y: 3.56862745098039, size: 1 },\r\n // { x: 180, y: 3.64705882352941, size: 1 },\r\n // { x: 181.942446043165, y: 3.52941176470588, size: 1 },\r\n // { x: 182.589928057554, y: 3.72549019607843, size: 1 },\r\n // { x: 183.884892086331, y: 3.09803921568627, size: 1 },\r\n // { x: 184.532374100719, y: 3.41176470588235, size: 1 },\r\n // { x: 185.179856115108, y: 3.17647058823529, size: 1 },\r\n // { x: 185.827338129496, y: 3.2156862745098, size: 1 },\r\n // { x: 186.474820143885, y: 3.13725490196078, size: 1 },\r\n // { x: 187.122302158273, y: 2.98039215686275, size: 1 },\r\n // { x: 187.769784172662, y: 3.41176470588235, size: 1 },\r\n // { x: 188.41726618705, y: 3.56862745098039, size: 1 },\r\n // { x: 189.712230215827, y: 3.37254901960784, size: 1 },\r\n // { x: 190.359712230216, y: 3.6078431372549, size: 1 },\r\n // { x: 191.007194244604, y: 3.56862745098039, size: 1 },\r\n // { x: 191.654676258993, y: 3.49019607843137, size: 1 },\r\n // { x: 192.302158273381, y: 3.64705882352941, size: 1 },\r\n // { x: 192.94964028777, y: 3.56862745098039, size: 1 },\r\n // { x: 194.244604316547, y: 3.52941176470588, size: 1 },\r\n // { x: 194.892086330935, y: 3.52941176470588, size: 1 },\r\n // { x: 195.539568345324, y: 3.6078431372549, size: 1 },\r\n // { x: 196.187050359712, y: 3.52941176470588, size: 1 },\r\n // { x: 196.834532374101, y: 3.49019607843137, size: 1 },\r\n // { x: 197.482014388489, y: 3.76470588235294, size: 1 },\r\n // { x: 198.129496402878, y: 3.72549019607843, size: 1 },\r\n // { x: 198.776978417266, y: 3.76470588235294, size: 1 },\r\n // { x: 199.424460431655, y: 3.52941176470588, size: 1 },\r\n // { x: 200.719424460432, y: 3.37254901960784, size: 1 },\r\n // { x: 202.014388489209, y: 3.6078431372549, size: 1 },\r\n // { x: 202.661870503597, y: 3.49019607843137, size: 1 },\r\n // { x: 203.309352517986, y: 3.72549019607843, size: 1 },\r\n // { x: 203.956834532374, y: 3.49019607843137, size: 1 },\r\n // { x: 204.604316546763, y: 3.45098039215686, size: 1 },\r\n // { x: 205.89928057554, y: 3.6078431372549, size: 1 },\r\n // { x: 206.546762589928, y: 3.88235294117647, size: 1 },\r\n // { x: 207.194244604317, y: 3.52941176470588, size: 1 },\r\n // { x: 207.841726618705, y: 3.76470588235294, size: 1 },\r\n // { x: 209.136690647482, y: 3.76470588235294, size: 1 },\r\n // { x: 210.431654676259, y: 3.64705882352941, size: 1 },\r\n // { x: 211.726618705036, y: 3.56862745098039, size: 1 },\r\n // { x: 212.374100719424, y: 3.49019607843137, size: 1 },\r\n // { x: 213.021582733813, y: 3.41176470588235, size: 1 },\r\n // { x: 213.669064748201, y: 3.6078431372549, size: 1 },\r\n // { x: 214.31654676259, y: 3.72549019607843, size: 1 },\r\n // { x: 214.964028776978, y: 3.68627450980392, size: 1 },\r\n // { x: 215.611510791367, y: 3.76470588235294, size: 1 },\r\n // { x: 216.258992805755, y: 3.6078431372549, size: 1 },\r\n // { x: 216.906474820144, y: 3.6078431372549, size: 1 },\r\n // { x: 217.553956834532, y: 3.72549019607843, size: 1 },\r\n // { x: 218.848920863309, y: 3.72549019607843, size: 1 },\r\n // { x: 219.496402877698, y: 3.64705882352941, size: 1 },\r\n // { x: 220.143884892086, y: 3.45098039215686, size: 1 },\r\n // { x: 220.791366906475, y: 3.52941176470588, size: 1 },\r\n // { x: 221.438848920863, y: 3.68627450980392, size: 1 },\r\n // { x: 222.086330935252, y: 3.84313725490196, size: 1 },\r\n // { x: 222.73381294964, y: 3.92156862745098, size: 1 },\r\n // { x: 223.381294964029, y: 3.68627450980392, size: 1 },\r\n // { x: 224.028776978417, y: 3.56862745098039, size: 1 },\r\n // { x: 224.676258992806, y: 3.88235294117647, size: 1 },\r\n // { x: 225.323741007194, y: 3.64705882352941, size: 1 },\r\n // { x: 225.971223021583, y: 3.76470588235294, size: 1 },\r\n // { x: 226.618705035971, y: 3.6078431372549, size: 1 },\r\n // { x: 227.26618705036, y: 3.52941176470588, size: 1 },\r\n // { x: 227.913669064748, y: 3.41176470588235, size: 1 },\r\n // { x: 228.561151079137, y: 3.13725490196078, size: 1 },\r\n // { x: 229.208633093525, y: 3.17647058823529, size: 1 },\r\n // { x: 229.856115107914, y: 3.80392156862745, size: 1 },\r\n // { x: 230.503597122302, y: 3.64705882352941, size: 1 },\r\n // { x: 231.151079136691, y: 3.72549019607843, size: 1 },\r\n // { x: 231.798561151079, y: 3.64705882352941, size: 1 },\r\n // { x: 232.446043165468, y: 3.64705882352941, size: 1 },\r\n // { x: 233.093525179856, y: 3.6078431372549, size: 1 },\r\n // { x: 233.741007194245, y: 3.72549019607843, size: 1 },\r\n // { x: 235.035971223022, y: 3.72549019607843, size: 1 },\r\n // { x: 235.68345323741, y: 3.64705882352941, size: 1 },\r\n // { x: 236.330935251799, y: 3.72549019607843, size: 1 },\r\n // { x: 236.978417266187, y: 3.88235294117647, size: 1 },\r\n // { x: 237.625899280576, y: 3.64705882352941, size: 1 },\r\n // { x: 238.273381294964, y: 3.64705882352941, size: 1 },\r\n // { x: 238.920863309353, y: 3.72549019607843, size: 1 },\r\n // { x: 239.568345323741, y: 4, size: 1 },\r\n // { x: 240.215827338129, y: 3.64705882352941, size: 1 },\r\n // { x: 240.863309352518, y: 3.68627450980392, size: 1 },\r\n // { x: 241.510791366906, y: 3.49019607843137, size: 1 },\r\n // { x: 242.158273381295, y: 3.52941176470588, size: 1 },\r\n // { x: 242.805755395683, y: 3.84313725490196, size: 1 },\r\n // { x: 243.453237410072, y: 3.92156862745098, size: 1 },\r\n // { x: 245.395683453237, y: 3.72549019607843, size: 1 },\r\n // { x: 246.043165467626, y: 3.76470588235294, size: 1 },\r\n // { x: 246.690647482014, y: 3.64705882352941, size: 1 },\r\n // { x: 247.338129496403, y: 3.72549019607843, size: 1 },\r\n // { x: 247.985611510791, y: 3.84313725490196, size: 1 },\r\n // { x: 248.63309352518, y: 3.45098039215686, size: 1 },\r\n // { x: 249.280575539568, y: 3.64705882352941, size: 1 },\r\n // { x: 249.928057553957, y: 3.13725490196078, size: 1 },\r\n // { x: 250.575539568345, y: 3.37254901960784, size: 1 },\r\n // { x: 251.223021582734, y: 3.41176470588235, size: 1 },\r\n // { x: 251.870503597122, y: 3.68627450980392, size: 1 },\r\n // { x: 252.517985611511, y: 3.49019607843137, size: 1 },\r\n // { x: 253.165467625899, y: 3.52941176470588, size: 1 },\r\n // { x: 253.812949640288, y: 3.6078431372549, size: 1 },\r\n // { x: 254.460431654676, y: 3.6078431372549, size: 1 },\r\n // { x: 255.107913669065, y: 3.6078431372549, size: 1 },\r\n // { x: 255.755395683453, y: 3.64705882352941, size: 1 },\r\n // { x: 256.402877697842, y: 3.72549019607843, size: 1 },\r\n // { x: 257.05035971223, y: 3.64705882352941, size: 1 },\r\n // { x: 257.697841726619, y: 3.45098039215686, size: 1 },\r\n // { x: 258.345323741007, y: 3.76470588235294, size: 1 },\r\n // { x: 258.992805755396, y: 3.64705882352941, size: 1 },\r\n // { x: 259.640287769784, y: 3.76470588235294, size: 1 },\r\n // { x: 260.287769784173, y: 3.52941176470588, size: 1 },\r\n // { x: 260.935251798561, y: 3.64705882352941, size: 1 },\r\n // { x: 261.58273381295, y: 3.49019607843137, size: 1 },\r\n // { x: 262.230215827338, y: 3.80392156862745, size: 1 },\r\n // { x: 262.877697841727, y: 3.52941176470588, size: 1 },\r\n // { x: 264.172661870504, y: 3.72549019607843, size: 1 },\r\n // { x: 265.467625899281, y: 3.49019607843137, size: 1 },\r\n // { x: 266.115107913669, y: 3.72549019607843, size: 1 },\r\n // { x: 267.410071942446, y: 3.45098039215686, size: 1 },\r\n // { x: 268.057553956835, y: 3.64705882352941, size: 1 },\r\n // { x: 268.705035971223, y: 3.52941176470588, size: 1 },\r\n // { x: 269.352517985611, y: 3.64705882352941, size: 1 },\r\n // { x: 270, y: 3.56862745098039, size: 1 },\r\n // { x: 270.647482014389, y: 3.41176470588235, size: 1 },\r\n // { x: 271.294964028777, y: 3.56862745098039, size: 1 },\r\n // { x: 271.942446043165, y: 3.45098039215686, size: 1 },\r\n // { x: 272.589928057554, y: 3.64705882352941, size: 1 },\r\n // { x: 273.237410071942, y: 3.64705882352941, size: 1 },\r\n // { x: 273.884892086331, y: 3.6078431372549, size: 1 },\r\n // { x: 275.179856115108, y: 3.64705882352941, size: 1 },\r\n // { x: 275.827338129496, y: 3.72549019607843, size: 1 },\r\n // { x: 276.474820143885, y: 3.6078431372549, size: 1 },\r\n // { x: 277.122302158273, y: 3.72549019607843, size: 1 },\r\n // { x: 277.769784172662, y: 3.56862745098039, size: 1 },\r\n // { x: 278.41726618705, y: 3.6078431372549, size: 1 },\r\n // { x: 279.064748201439, y: 3.52941176470588, size: 1 },\r\n // { x: 279.712230215827, y: 3.6078431372549, size: 1 },\r\n // { x: 280.359712230216, y: 3.45098039215686, size: 1 },\r\n // { x: 281.007194244604, y: 3.76470588235294, size: 1 },\r\n // { x: 281.654676258993, y: 3.64705882352941, size: 1 },\r\n // { x: 282.302158273381, y: 3.6078431372549, size: 1 },\r\n // { x: 282.94964028777, y: 3.72549019607843, size: 1 },\r\n // { x: 284.244604316547, y: 3.6078431372549, size: 1 },\r\n // { x: 284.892086330935, y: 3.56862745098039, size: 1 },\r\n // { x: 285.539568345324, y: 3.84313725490196, size: 1 },\r\n // { x: 286.187050359712, y: 3.64705882352941, size: 1 },\r\n // { x: 286.834532374101, y: 3.6078431372549, size: 1 },\r\n // { x: 287.482014388489, y: 3.45098039215686, size: 1 },\r\n // { x: 288.776978417266, y: 3.64705882352941, size: 1 },\r\n // { x: 289.424460431655, y: 3.64705882352941, size: 1 },\r\n // { x: 290.071942446043, y: 3.52941176470588, size: 1 },\r\n // { x: 290.719424460432, y: 3.72549019607843, size: 1 },\r\n // { x: 291.36690647482, y: 3.64705882352941, size: 1 },\r\n // { x: 292.014388489209, y: 3.76470588235294, size: 1 },\r\n // { x: 293.309352517986, y: 3.2156862745098, size: 1 },\r\n // { x: 293.956834532374, y: 3.17647058823529, size: 1 },\r\n // { x: 295.251798561151, y: 3.72549019607843, size: 1 },\r\n // { x: 295.89928057554, y: 3.88235294117647, size: 1 },\r\n // { x: 296.546762589928, y: 3.6078431372549, size: 1 },\r\n // { x: 297.194244604317, y: 3.80392156862745, size: 1 },\r\n // { x: 297.841726618705, y: 3.68627450980392, size: 1 },\r\n // { x: 298.489208633094, y: 3.49019607843137, size: 1 },\r\n // { x: 299.136690647482, y: 3.49019607843137, size: 1 },\r\n // { x: 299.784172661871, y: 3.68627450980392, size: 1 },\r\n // { x: 300.431654676259, y: 3.68627450980392, size: 1 },\r\n // { x: 301.079136690647, y: 3.6078431372549, size: 1 },\r\n // { x: 301.726618705036, y: 3.56862745098039, size: 1 },\r\n // { x: 303.669064748201, y: 3.45098039215686, size: 1 },\r\n // { x: 304.964028776978, y: 3.49019607843137, size: 1 },\r\n // { x: 305.611510791367, y: 3.52941176470588, size: 1 },\r\n // { x: 306.258992805755, y: 3.64705882352941, size: 1 },\r\n // { x: 306.906474820144, y: 3.33333333333333, size: 1 },\r\n // { x: 308.201438848921, y: 3.52941176470588, size: 1 },\r\n // { x: 308.848920863309, y: 3.52941176470588, size: 1 },\r\n // { x: 309.496402877698, y: 3.64705882352941, size: 1 },\r\n // { x: 310.143884892086, y: 3.56862745098039, size: 1 },\r\n // { x: 310.791366906475, y: 3.52941176470588, size: 1 },\r\n // { x: 312.73381294964, y: 3.52941176470588, size: 1 },\r\n // { x: 313.381294964029, y: 3.25490196078431, size: 1 },\r\n // { x: 314.028776978417, y: 3.37254901960784, size: 1 },\r\n // { x: 314.676258992806, y: 2.70588235294118, size: 1 },\r\n // { x: 315.323741007194, y: 2.54901960784314, size: 1 },\r\n // { x: 315.971223021583, y: 3.64705882352941, size: 1 },\r\n // { x: 317.26618705036, y: 3.64705882352941, size: 1 },\r\n // { x: 317.913669064748, y: 3.41176470588235, size: 1 },\r\n // { x: 318.561151079137, y: 3.49019607843137, size: 1 },\r\n // { x: 319.208633093525, y: 3.64705882352941, size: 1 },\r\n // { x: 319.856115107914, y: 3.88235294117647, size: 1 },\r\n // { x: 320.503597122302, y: 3.80392156862745, size: 1 },\r\n // { x: 321.151079136691, y: 3.52941176470588, size: 1 },\r\n // { x: 321.798561151079, y: 3.45098039215686, size: 1 },\r\n // { x: 322.446043165468, y: 3.68627450980392, size: 1 },\r\n // { x: 323.093525179856, y: 3.37254901960784, size: 1 },\r\n // { x: 323.741007194245, y: 3.80392156862745, size: 1 },\r\n // { x: 324.388489208633, y: 3.64705882352941, size: 1 },\r\n // { x: 325.035971223022, y: 3.76470588235294, size: 1 },\r\n // { x: 325.68345323741, y: 3.56862745098039, size: 1 },\r\n // { x: 326.330935251799, y: 3.41176470588235, size: 1 },\r\n // { x: 327.625899280576, y: 3.56862745098039, size: 1 },\r\n // { x: 328.920863309353, y: 3.52941176470588, size: 1 },\r\n // { x: 329.568345323741, y: 3.80392156862745, size: 1 },\r\n // { x: 330.215827338129, y: 3.80392156862745, size: 1 },\r\n // { x: 330.863309352518, y: 3.56862745098039, size: 1 },\r\n // { x: 331.510791366906, y: 3.37254901960784, size: 1 },\r\n // { x: 332.805755395683, y: 3.52941176470588, size: 1 },\r\n // { x: 333.453237410072, y: 3.49019607843137, size: 1 },\r\n // { x: 334.10071942446, y: 3.49019607843137, size: 1 },\r\n // { x: 334.748201438849, y: 3.25490196078431, size: 1 },\r\n // { x: 335.395683453237, y: 3.17647058823529, size: 1 },\r\n // { x: 336.043165467626, y: 3.33333333333333, size: 1 },\r\n // { x: 336.690647482014, y: 2.86274509803922, size: 1 },\r\n // { x: 337.338129496403, y: 3.37254901960784, size: 1 },\r\n // { x: 337.985611510791, y: 3.80392156862745, size: 1 },\r\n // { x: 339.280575539568, y: 3.49019607843137, size: 1 },\r\n // { x: 339.928057553957, y: 3.52941176470588, size: 1 },\r\n // { x: 340.575539568345, y: 3.56862745098039, size: 1 },\r\n // { x: 341.223021582734, y: 3.41176470588235, size: 1 },\r\n // { x: 341.870503597122, y: 3.64705882352941, size: 1 },\r\n // { x: 342.517985611511, y: 3.37254901960784, size: 1 },\r\n // { x: 343.165467625899, y: 3.72549019607843, size: 1 },\r\n // { x: 343.812949640288, y: 3.76470588235294, size: 1 },\r\n // { x: 344.460431654676, y: 3.68627450980392, size: 1 },\r\n // { x: 345.107913669065, y: 3.6078431372549, size: 1 },\r\n // { x: 345.755395683453, y: 3.6078431372549, size: 1 },\r\n // { x: 346.402877697842, y: 3.76470588235294, size: 1 },\r\n // { x: 347.05035971223, y: 3.49019607843137, size: 1 },\r\n // { x: 347.697841726619, y: 3.45098039215686, size: 1 },\r\n // { x: 348.345323741007, y: 3.56862745098039, size: 1 },\r\n // { x: 348.992805755396, y: 3.64705882352941, size: 1 },\r\n // { x: 349.640287769784, y: 3.56862745098039, size: 1 },\r\n // { x: 350.287769784173, y: 3.72549019607843, size: 1 },\r\n // { x: 350.935251798561, y: 3.56862745098039, size: 1 },\r\n // { x: 352.230215827338, y: 3.49019607843137, size: 1 },\r\n // { x: 352.877697841727, y: 3.80392156862745, size: 1 },\r\n // { x: 353.525179856115, y: 3.45098039215686, size: 1 },\r\n // { x: 354.820143884892, y: 3.56862745098039, size: 1 },\r\n // { x: 355.467625899281, y: 3.49019607843137, size: 1 },\r\n // { x: 356.115107913669, y: 3.45098039215686, size: 1 },\r\n // { x: 356.762589928058, y: 3.2156862745098, size: 1 },\r\n // { x: 358.057553956835, y: 2.98039215686275, size: 1 },\r\n // { x: 358.705035971223, y: 2.98039215686275, size: 1 },\r\n // { x: 359.352517985611, y: 3.45098039215686, size: 1 },\r\n // { x: 0, y: 3.56862745098039, size: 1 },\r\n // { x: 1.29496402877698, y: 3.37254901960784, size: 1 },\r\n // { x: 1.94244604316547, y: 3.49019607843137, size: 1 },\r\n // { x: 2.58992805755396, y: 3.72549019607843, size: 1 },\r\n // { x: 3.23741007194245, y: 3.45098039215686, size: 1 },\r\n // { x: 4.53237410071942, y: 3.6078431372549, size: 1 },\r\n // { x: 5.17985611510791, y: 3.33333333333333, size: 1 },\r\n // { x: 5.8273381294964, y: 3.6078431372549, size: 1 },\r\n // { x: 6.47482014388489, y: 3.41176470588235, size: 1 },\r\n // { x: 7.12230215827338, y: 3.84313725490196, size: 1 },\r\n // { x: 8.41726618705036, y: 3.56862745098039, size: 1 },\r\n // { x: 9.06474820143885, y: 3.49019607843137, size: 1 },\r\n // { x: 9.71223021582734, y: 3.41176470588235, size: 1 },\r\n // { x: 10.3597122302158, y: 3.41176470588235, size: 1 },\r\n // { x: 11.0071942446043, y: 3.45098039215686, size: 1 },\r\n // { x: 12.3021582733813, y: 3.49019607843137, size: 1 },\r\n // { x: 12.9496402877698, y: 3.37254901960784, size: 1 },\r\n // { x: 13.5971223021583, y: 3.49019607843137, size: 1 },\r\n // { x: 14.2446043165468, y: 3.6078431372549, size: 1 },\r\n // { x: 14.8920863309353, y: 3.52941176470588, size: 1 },\r\n // { x: 16.1870503597122, y: 3.52941176470588, size: 1 },\r\n // { x: 16.8345323741007, y: 3.45098039215686, size: 1 },\r\n // { x: 17.4820143884892, y: 3.29411764705882, size: 1 },\r\n // { x: 18.1294964028777, y: 3.6078431372549, size: 1 },\r\n // { x: 18.7769784172662, y: 3.37254901960784, size: 1 },\r\n // { x: 19.4244604316547, y: 2.98039215686275, size: 1 },\r\n // { x: 20.0719424460432, y: 3.13725490196078, size: 1 },\r\n // { x: 20.7194244604317, y: 3.56862745098039, size: 1 },\r\n // { x: 21.3669064748201, y: 3.49019607843137, size: 1 },\r\n // { x: 22.0143884892086, y: 3.76470588235294, size: 1 },\r\n // { x: 22.6618705035971, y: 3.52941176470588, size: 1 },\r\n // { x: 23.3093525179856, y: 3.64705882352941, size: 1 },\r\n // { x: 23.9568345323741, y: 3.72549019607843, size: 1 },\r\n // { x: 24.6043165467626, y: 3.52941176470588, size: 1 },\r\n // { x: 25.2517985611511, y: 3.72549019607843, size: 1 },\r\n // { x: 25.8992805755396, y: 3.49019607843137, size: 1 },\r\n // { x: 27.1942446043165, y: 3.64705882352941, size: 1 },\r\n // { x: 28.4892086330935, y: 3.49019607843137, size: 1 },\r\n // { x: 29.136690647482, y: 3.41176470588235, size: 1 },\r\n // { x: 29.7841726618705, y: 3.6078431372549, size: 1 },\r\n // { x: 30.431654676259, y: 3.41176470588235, size: 1 },\r\n // { x: 31.0791366906475, y: 3.68627450980392, size: 1 },\r\n // { x: 31.726618705036, y: 3.64705882352941, size: 1 },\r\n // { x: 33.0215827338129, y: 3.76470588235294, size: 1 },\r\n // { x: 34.3165467625899, y: 3.6078431372549, size: 1 },\r\n // { x: 34.9640287769784, y: 3.52941176470588, size: 1 },\r\n // { x: 35.6115107913669, y: 3.49019607843137, size: 1 },\r\n // { x: 36.2589928057554, y: 3.45098039215686, size: 1 },\r\n // { x: 36.9064748201439, y: 3.68627450980392, size: 1 },\r\n // { x: 38.2014388489209, y: 3.45098039215686, size: 1 },\r\n // { x: 38.8489208633094, y: 3.72549019607843, size: 1 },\r\n // { x: 39.4964028776978, y: 3.05882352941176, size: 1 },\r\n // { x: 40.1438848920863, y: 3.45098039215686, size: 1 },\r\n // { x: 40.7913669064748, y: 3.17647058823529, size: 1 },\r\n // { x: 41.4388489208633, y: 2.47058823529412, size: 1 },\r\n // { x: 42.0863309352518, y: 3.25490196078431, size: 1 },\r\n // { x: 42.7338129496403, y: 3.6078431372549, size: 1 },\r\n // { x: 43.3812949640288, y: 3.6078431372549, size: 1 },\r\n // { x: 44.0287769784173, y: 3.52941176470588, size: 1 },\r\n // { x: 44.6762589928058, y: 3.6078431372549, size: 1 },\r\n // { x: 45.9712230215827, y: 3.68627450980392, size: 1 },\r\n // { x: 47.2661870503597, y: 3.68627450980392, size: 1 },\r\n // { x: 47.9136690647482, y: 3.80392156862745, size: 1 },\r\n // { x: 48.5611510791367, y: 3.84313725490196, size: 1 },\r\n // { x: 51.1510791366906, y: 3.76470588235294, size: 1 },\r\n // { x: 51.7985611510791, y: 3.45098039215686, size: 1 },\r\n // { x: 52.4460431654676, y: 3.76470588235294, size: 1 },\r\n // { x: 53.7410071942446, y: 3.72549019607843, size: 1 },\r\n // { x: 54.3884892086331, y: 3.64705882352941, size: 1 },\r\n // { x: 55.0359712230216, y: 3.49019607843137, size: 1 },\r\n // { x: 56.3309352517986, y: 3.72549019607843, size: 1 },\r\n // { x: 56.9784172661871, y: 3.52941176470588, size: 1 },\r\n // { x: 57.6258992805755, y: 3.49019607843137, size: 1 },\r\n // { x: 58.273381294964, y: 3.64705882352941, size: 1 },\r\n // { x: 58.9208633093525, y: 3.6078431372549, size: 1 },\r\n // { x: 59.568345323741, y: 3.68627450980392, size: 1 },\r\n // { x: 60.2158273381295, y: 3.84313725490196, size: 1 },\r\n // { x: 60.863309352518, y: 3.68627450980392, size: 1 },\r\n // { x: 61.5107913669065, y: 3.45098039215686, size: 1 },\r\n // { x: 62.158273381295, y: 3.64705882352941, size: 1 },\r\n // { x: 62.8057553956835, y: 3.52941176470588, size: 1 },\r\n // { x: 63.4532374100719, y: 3.29411764705882, size: 1 },\r\n // { x: 64.1007194244604, y: 3.56862745098039, size: 1 },\r\n // { x: 64.7482014388489, y: 3.56862745098039, size: 1 },\r\n // { x: 65.3956834532374, y: 3.52941176470588, size: 1 },\r\n // { x: 66.0431654676259, y: 3.49019607843137, size: 1 },\r\n // { x: 66.6906474820144, y: 3.37254901960784, size: 1 },\r\n // { x: 68.6330935251799, y: 3.84313725490196, size: 1 },\r\n // { x: 69.2805755395683, y: 3.64705882352941, size: 1 },\r\n // { x: 69.9280575539568, y: 3.92156862745098, size: 1 },\r\n // { x: 70.5755395683453, y: 3.64705882352941, size: 1 },\r\n // { x: 71.2230215827338, y: 3.56862745098039, size: 1 },\r\n // { x: 72.5179856115108, y: 3.68627450980392, size: 1 },\r\n // { x: 73.1654676258993, y: 3.64705882352941, size: 1 },\r\n // { x: 73.8129496402878, y: 3.64705882352941, size: 1 },\r\n // { x: 74.4604316546763, y: 3.80392156862745, size: 1 },\r\n // { x: 75.1079136690647, y: 3.37254901960784, size: 1 },\r\n // { x: 75.7553956834532, y: 3.45098039215686, size: 1 },\r\n // { x: 77.0503597122302, y: 3.64705882352941, size: 1 },\r\n // { x: 78.3453237410072, y: 3.6078431372549, size: 1 },\r\n // { x: 78.9928057553957, y: 3.6078431372549, size: 1 },\r\n // { x: 79.6402877697842, y: 3.52941176470588, size: 1 },\r\n // { x: 80.9352517985612, y: 3.49019607843137, size: 1 },\r\n // { x: 81.5827338129496, y: 3.6078431372549, size: 1 },\r\n // { x: 82.2302158273381, y: 3.37254901960784, size: 1 },\r\n // { x: 82.8776978417266, y: 3.33333333333333, size: 1 },\r\n // { x: 83.5251798561151, y: 3.33333333333333, size: 1 },\r\n // { x: 84.1726618705036, y: 3.05882352941176, size: 1 },\r\n // { x: 84.8201438848921, y: 3.05882352941176, size: 1 },\r\n // { x: 85.4676258992806, y: 3.49019607843137, size: 1 },\r\n // { x: 86.1151079136691, y: 3.84313725490196, size: 1 },\r\n // { x: 88.0575539568345, y: 3.80392156862745, size: 1 },\r\n // { x: 88.705035971223, y: 3.76470588235294, size: 1 },\r\n // { x: 90, y: 3.72549019607843, size: 1 },\r\n // { x: 90.6474820143885, y: 3.92156862745098, size: 1 },\r\n // { x: 91.294964028777, y: 3.72549019607843, size: 1 },\r\n // { x: 91.9424460431655, y: 3.80392156862745, size: 1 },\r\n // { x: 92.589928057554, y: 3.76470588235294, size: 1 },\r\n // { x: 93.2374100719424, y: 3.92156862745098, size: 1 },\r\n // { x: 94.5323741007194, y: 3.76470588235294, size: 1 },\r\n // { x: 95.1798561151079, y: 3.72549019607843, size: 1 },\r\n // { x: 95.8273381294964, y: 3.72549019607843, size: 1 },\r\n // { x: 97.1223021582734, y: 3.68627450980392, size: 1 },\r\n // { x: 97.7697841726619, y: 3.80392156862745, size: 1 },\r\n // { x: 98.4172661870504, y: 3.72549019607843, size: 1 },\r\n // { x: 99.0647482014388, y: 3.45098039215686, size: 1 },\r\n // { x: 99.7122302158273, y: 3.96078431372549, size: 1 },\r\n // { x: 100.359712230216, y: 3.68627450980392, size: 1 },\r\n // { x: 101.007194244604, y: 3.76470588235294, size: 1 },\r\n // { x: 101.654676258993, y: 3.76470588235294, size: 1 },\r\n // { x: 102.302158273381, y: 3.80392156862745, size: 1 },\r\n // { x: 102.94964028777, y: 3.6078431372549, size: 1 },\r\n // { x: 104.244604316547, y: 3.2156862745098, size: 1 },\r\n // { x: 104.892086330935, y: 3.09803921568627, size: 1 },\r\n // { x: 105.539568345324, y: 3.13725490196078, size: 1 },\r\n // { x: 106.187050359712, y: 2.43137254901961, size: 1 },\r\n // { x: 106.834532374101, y: 3.33333333333333, size: 1 },\r\n // { x: 107.482014388489, y: 3.68627450980392, size: 1 },\r\n // { x: 108.129496402878, y: 3.64705882352941, size: 1 },\r\n // { x: 108.776978417266, y: 3.64705882352941, size: 1 },\r\n // { x: 109.424460431655, y: 3.64705882352941, size: 1 },\r\n // { x: 110.071942446043, y: 3.68627450980392, size: 1 },\r\n // { x: 111.36690647482, y: 3.52941176470588, size: 1 },\r\n // { x: 113.309352517986, y: 3.64705882352941, size: 1 },\r\n // { x: 117.194244604317, y: 3.56862745098039, size: 1 },\r\n // { x: 117.841726618705, y: 3.64705882352941, size: 1 },\r\n // { x: 118.489208633094, y: 3.52941176470588, size: 1 },\r\n // { x: 119.136690647482, y: 3.56862745098039, size: 1 },\r\n // { x: 120.431654676259, y: 3.56862745098039, size: 1 },\r\n // { x: 122.374100719424, y: 3.45098039215686, size: 1 },\r\n // { x: 123.669064748201, y: 3.52941176470588, size: 1 },\r\n // { x: 126.258992805755, y: 3.80392156862745, size: 1 },\r\n // { x: 126.906474820144, y: 3.56862745098039, size: 1 },\r\n // { x: 127.553956834532, y: 3.37254901960784, size: 1 },\r\n // { x: 128.201438848921, y: 3.52941176470588, size: 1 },\r\n // { x: 130.143884892086, y: 3.88235294117647, size: 1 },\r\n // { x: 130.791366906475, y: 3.64705882352941, size: 1 },\r\n // { x: 131.438848920863, y: 3.76470588235294, size: 1 },\r\n // { x: 132.73381294964, y: 3.76470588235294, size: 1 },\r\n // { x: 133.381294964029, y: 3.76470588235294, size: 1 },\r\n // { x: 134.676258992806, y: 3.72549019607843, size: 1 },\r\n // { x: 136.618705035971, y: 3.92156862745098, size: 1 },\r\n // { x: 137.26618705036, y: 3.52941176470588, size: 1 },\r\n // { x: 138.561151079137, y: 3.72549019607843, size: 1 },\r\n // { x: 139.208633093525, y: 3.72549019607843, size: 1 },\r\n // { x: 139.856115107914, y: 3.84313725490196, size: 1 },\r\n // { x: 140.503597122302, y: 3.72549019607843, size: 1 },\r\n // { x: 141.151079136691, y: 3.84313725490196, size: 1 },\r\n // { x: 141.798561151079, y: 3.80392156862745, size: 1 },\r\n // { x: 143.093525179856, y: 3.64705882352941, size: 1 },\r\n // { x: 143.741007194245, y: 3.6078431372549, size: 1 },\r\n // { x: 144.388489208633, y: 3.76470588235294, size: 1 },\r\n // { x: 145.035971223022, y: 3.68627450980392, size: 1 },\r\n // { x: 145.68345323741, y: 3.64705882352941, size: 1 },\r\n // { x: 147.625899280576, y: 3.17647058823529, size: 1 },\r\n // { x: 148.273381294964, y: 3.52941176470588, size: 1 },\r\n // { x: 148.920863309353, y: 2.3921568627451, size: 1 },\r\n // { x: 149.568345323741, y: 2.70588235294118, size: 1 },\r\n // { x: 150.215827338129, y: 3.64705882352941, size: 1 },\r\n // { x: 150.863309352518, y: 3.49019607843137, size: 1 },\r\n // { x: 152.158273381295, y: 3.84313725490196, size: 1 },\r\n // { x: 153.453237410072, y: 3.52941176470588, size: 1 },\r\n // { x: 154.10071942446, y: 3.6078431372549, size: 1 },\r\n // { x: 154.748201438849, y: 3.56862745098039, size: 1 },\r\n // { x: 156.043165467626, y: 3.52941176470588, size: 1 },\r\n // { x: 157.338129496403, y: 3.56862745098039, size: 1 },\r\n // { x: 157.985611510791, y: 3.80392156862745, size: 1 },\r\n // { x: 158.63309352518, y: 3.76470588235294, size: 1 },\r\n // { x: 159.280575539568, y: 3.72549019607843, size: 1 },\r\n // { x: 159.928057553957, y: 3.84313725490196, size: 1 },\r\n // { x: 161.223021582734, y: 3.56862745098039, size: 1 },\r\n // { x: 161.870503597122, y: 3.72549019607843, size: 1 },\r\n // { x: 162.517985611511, y: 3.6078431372549, size: 1 },\r\n // { x: 163.165467625899, y: 3.72549019607843, size: 1 },\r\n // { x: 163.812949640288, y: 3.45098039215686, size: 1 },\r\n // { x: 164.460431654676, y: 3.72549019607843, size: 1 },\r\n // { x: 165.107913669065, y: 3.56862745098039, size: 1 },\r\n // { x: 165.755395683453, y: 3.6078431372549, size: 1 },\r\n // { x: 166.402877697842, y: 3.76470588235294, size: 1 },\r\n // { x: 167.05035971223, y: 3.6078431372549, size: 1 },\r\n // { x: 167.697841726619, y: 3.64705882352941, size: 1 },\r\n // { x: 168.345323741007, y: 3.84313725490196, size: 1 },\r\n // { x: 168.992805755396, y: 3.64705882352941, size: 1 },\r\n // { x: 169.640287769784, y: 3.72549019607843, size: 1 },\r\n // { x: 170.287769784173, y: 3.56862745098039, size: 1 },\r\n // { x: 170.935251798561, y: 3.29411764705882, size: 1 },\r\n // { x: 171.58273381295, y: 3.33333333333333, size: 1 },\r\n // { x: 172.230215827338, y: 3.6078431372549, size: 1 },\r\n // { x: 172.877697841727, y: 3.76470588235294, size: 1 },\r\n // { x: 173.525179856115, y: 3.68627450980392, size: 1 },\r\n // { x: 174.820143884892, y: 3.64705882352941, size: 1 },\r\n // { x: 175.467625899281, y: 3.92156862745098, size: 1 },\r\n // { x: 176.115107913669, y: 3.72549019607843, size: 1 },\r\n // { x: 177.410071942446, y: 3.72549019607843, size: 1 },\r\n // { x: 178.057553956835, y: 3.92156862745098, size: 1 },\r\n // { x: 178.705035971223, y: 3.68627450980392, size: 1 },\r\n // { x: 180, y: 3.6078431372549, size: 1 },\r\n // { x: 180.647482014388, y: 3.68627450980392, size: 1 },\r\n // { x: 181.294964028777, y: 3.64705882352941, size: 1 },\r\n // { x: 181.942446043165, y: 3.49019607843137, size: 1 },\r\n // { x: 182.589928057554, y: 3.64705882352941, size: 1 },\r\n // { x: 183.237410071942, y: 3.56862745098039, size: 1 },\r\n // { x: 183.884892086331, y: 3.64705882352941, size: 1 },\r\n // { x: 184.532374100719, y: 3.76470588235294, size: 1 },\r\n // { x: 185.179856115108, y: 3.6078431372549, size: 1 },\r\n // { x: 185.827338129496, y: 3.72549019607843, size: 1 },\r\n // { x: 187.122302158273, y: 3.72549019607843, size: 1 },\r\n // { x: 187.769784172662, y: 3.52941176470588, size: 1 },\r\n // { x: 188.41726618705, y: 3.76470588235294, size: 1 },\r\n // { x: 189.712230215827, y: 3.52941176470588, size: 1 },\r\n // { x: 191.007194244604, y: 3.41176470588235, size: 1 },\r\n // { x: 191.654676258993, y: 3.56862745098039, size: 1 },\r\n // { x: 192.302158273381, y: 3.09803921568627, size: 1 },\r\n // { x: 192.94964028777, y: 3.13725490196078, size: 1 },\r\n // { x: 193.597122302158, y: 3.37254901960784, size: 1 },\r\n // { x: 195.539568345324, y: 3.64705882352941, size: 1 },\r\n // { x: 196.187050359712, y: 3.41176470588235, size: 1 },\r\n // { x: 196.834532374101, y: 3.68627450980392, size: 1 },\r\n // { x: 197.482014388489, y: 3.49019607843137, size: 1 },\r\n // { x: 198.129496402878, y: 3.45098039215686, size: 1 },\r\n // { x: 198.776978417266, y: 3.41176470588235, size: 1 },\r\n // { x: 200.071942446043, y: 3.41176470588235, size: 1 },\r\n // { x: 201.36690647482, y: 3.64705882352941, size: 1 },\r\n // { x: 202.661870503597, y: 3.6078431372549, size: 1 },\r\n // { x: 203.309352517986, y: 3.52941176470588, size: 1 },\r\n // { x: 204.604316546763, y: 3.64705882352941, size: 1 },\r\n // { x: 205.89928057554, y: 3.45098039215686, size: 1 },\r\n // { x: 207.194244604317, y: 3.25490196078431, size: 1 },\r\n // { x: 207.841726618705, y: 3.29411764705882, size: 1 },\r\n // { x: 208.489208633094, y: 3.6078431372549, size: 1 },\r\n // { x: 209.136690647482, y: 3.33333333333333, size: 1 },\r\n // { x: 209.784172661871, y: 3.41176470588235, size: 1 },\r\n // { x: 210.431654676259, y: 3.6078431372549, size: 1 },\r\n // { x: 211.079136690647, y: 3.84313725490196, size: 1 },\r\n // { x: 212.374100719424, y: 3.13725490196078, size: 1 },\r\n // { x: 213.021582733813, y: 3.25490196078431, size: 1 },\r\n // { x: 213.669064748201, y: 2.43137254901961, size: 1 },\r\n // { x: 214.31654676259, y: 1.88235294117647, size: 1 },\r\n // { x: 214.964028776978, y: 3.29411764705882, size: 1 },\r\n // { x: 215.611510791367, y: 3.41176470588235, size: 1 },\r\n // { x: 216.258992805755, y: 3.41176470588235, size: 1 },\r\n // { x: 216.906474820144, y: 3.29411764705882, size: 1 },\r\n // { x: 217.553956834532, y: 3.37254901960784, size: 1 },\r\n // { x: 218.201438848921, y: 3.37254901960784, size: 1 },\r\n // { x: 218.848920863309, y: 3.56862745098039, size: 1 },\r\n // { x: 219.496402877698, y: 3.56862745098039, size: 1 },\r\n // { x: 220.143884892086, y: 3.56862745098039, size: 1 },\r\n // { x: 220.791366906475, y: 3.29411764705882, size: 1 },\r\n // { x: 221.438848920863, y: 3.52941176470588, size: 1 },\r\n // { x: 222.086330935252, y: 3.52941176470588, size: 1 },\r\n // { x: 222.73381294964, y: 3.45098039215686, size: 1 },\r\n // { x: 224.028776978417, y: 3.45098039215686, size: 1 },\r\n // { x: 224.676258992806, y: 3.49019607843137, size: 1 },\r\n // { x: 225.323741007194, y: 3.49019607843137, size: 1 },\r\n // { x: 225.971223021583, y: 3.41176470588235, size: 1 },\r\n // { x: 226.618705035971, y: 3.45098039215686, size: 1 },\r\n // { x: 227.26618705036, y: 3.41176470588235, size: 1 },\r\n // { x: 227.913669064748, y: 3.37254901960784, size: 1 },\r\n // { x: 228.561151079137, y: 3.29411764705882, size: 1 },\r\n // { x: 229.208633093525, y: 3.45098039215686, size: 1 },\r\n // { x: 230.503597122302, y: 3.29411764705882, size: 1 },\r\n // { x: 231.151079136691, y: 3.41176470588235, size: 1 },\r\n // { x: 232.446043165468, y: 3.33333333333333, size: 1 },\r\n // { x: 233.093525179856, y: 3.49019607843137, size: 1 },\r\n // { x: 233.741007194245, y: 3.64705882352941, size: 1 },\r\n // { x: 234.388489208633, y: 3.37254901960784, size: 1 },\r\n // { x: 235.035971223022, y: 3.25490196078431, size: 1 },\r\n // { x: 235.68345323741, y: 2.86274509803922, size: 1 },\r\n // { x: 236.330935251799, y: 3.37254901960784, size: 1 },\r\n // { x: 236.978417266187, y: 3.6078431372549, size: 1 },\r\n // { x: 237.625899280576, y: 3.52941176470588, size: 1 },\r\n // { x: 238.273381294964, y: 3.68627450980392, size: 1 },\r\n // { x: 238.920863309353, y: 3.6078431372549, size: 1 },\r\n // { x: 239.568345323741, y: 3.56862745098039, size: 1 },\r\n // { x: 240.863309352518, y: 3.52941176470588, size: 1 },\r\n // { x: 241.510791366906, y: 3.52941176470588, size: 1 },\r\n // { x: 242.158273381295, y: 3.68627450980392, size: 1 },\r\n // { x: 242.805755395683, y: 3.52941176470588, size: 1 },\r\n // { x: 243.453237410072, y: 3.64705882352941, size: 1 },\r\n // { x: 244.10071942446, y: 3.49019607843137, size: 1 },\r\n // { x: 246.043165467626, y: 3.6078431372549, size: 1 },\r\n // { x: 246.690647482014, y: 3.45098039215686, size: 1 },\r\n // { x: 247.338129496403, y: 3.52941176470588, size: 1 },\r\n // { x: 247.985611510791, y: 3.6078431372549, size: 1 },\r\n // { x: 248.63309352518, y: 3.52941176470588, size: 1 },\r\n // { x: 249.280575539568, y: 3.56862745098039, size: 1 },\r\n // { x: 249.928057553957, y: 3.45098039215686, size: 1 },\r\n // { x: 250.575539568345, y: 3.49019607843137, size: 1 },\r\n // { x: 251.223021582734, y: 3.88235294117647, size: 1 },\r\n // { x: 252.517985611511, y: 3.52941176470588, size: 1 },\r\n // { x: 253.812949640288, y: 3.37254901960784, size: 1 },\r\n // { x: 255.107913669065, y: 3.64705882352941, size: 1 },\r\n // { x: 256.402877697842, y: 3.68627450980392, size: 1 },\r\n // { x: 257.05035971223, y: 3.56862745098039, size: 1 },\r\n // { x: 257.697841726619, y: 3.68627450980392, size: 1 },\r\n // { x: 258.345323741007, y: 3.52941176470588, size: 1 },\r\n // { x: 258.992805755396, y: 3.68627450980392, size: 1 },\r\n // { x: 260.287769784173, y: 3.76470588235294, size: 1 },\r\n // { x: 260.935251798561, y: 3.56862745098039, size: 1 },\r\n // { x: 262.230215827338, y: 3.6078431372549, size: 1 },\r\n // { x: 262.877697841727, y: 3.6078431372549, size: 1 },\r\n // { x: 263.525179856115, y: 3.64705882352941, size: 1 },\r\n // { x: 264.172661870504, y: 3.6078431372549, size: 1 },\r\n // { x: 264.820143884892, y: 3.49019607843137, size: 1 },\r\n // { x: 265.467625899281, y: 3.76470588235294, size: 1 },\r\n // { x: 266.115107913669, y: 3.68627450980392, size: 1 },\r\n // { x: 266.762589928058, y: 3.56862745098039, size: 1 },\r\n // { x: 267.410071942446, y: 3.80392156862745, size: 1 },\r\n // { x: 268.057553956835, y: 3.56862745098039, size: 1 },\r\n // { x: 269.352517985611, y: 3.56862745098039, size: 1 },\r\n // { x: 270, y: 3.52941176470588, size: 1 },\r\n // { x: 270.647482014389, y: 3.76470588235294, size: 1 },\r\n // { x: 271.942446043165, y: 3.68627450980392, size: 1 },\r\n // { x: 272.589928057554, y: 4, size: 1 },\r\n // { x: 273.237410071942, y: 3.56862745098039, size: 1 },\r\n // { x: 273.884892086331, y: 3.56862745098039, size: 1 },\r\n // { x: 274.532374100719, y: 3.88235294117647, size: 1 },\r\n // { x: 275.179856115108, y: 3.84313725490196, size: 1 },\r\n // { x: 277.769784172662, y: 3.2156862745098, size: 1 },\r\n // { x: 278.41726618705, y: 2.70588235294118, size: 1 },\r\n // { x: 279.064748201439, y: 2.58823529411765, size: 1 },\r\n // { x: 280.359712230216, y: 3.76470588235294, size: 1 },\r\n // { x: 281.654676258993, y: 3.84313725490196, size: 1 },\r\n // { x: 282.302158273381, y: 3.96078431372549, size: 1 },\r\n // { x: 282.94964028777, y: 3.76470588235294, size: 1 },\r\n // { x: 283.597122302158, y: 3.68627450980392, size: 1 },\r\n // { x: 284.244604316547, y: 3.80392156862745, size: 1 },\r\n // { x: 284.892086330935, y: 3.52941176470588, size: 1 },\r\n // { x: 285.539568345324, y: 3.80392156862745, size: 1 },\r\n // { x: 286.187050359712, y: 3.72549019607843, size: 1 },\r\n // { x: 287.482014388489, y: 3.6078431372549, size: 1 },\r\n // { x: 288.129496402878, y: 3.64705882352941, size: 1 },\r\n // { x: 288.776978417266, y: 3.49019607843137, size: 1 },\r\n // { x: 290.719424460432, y: 3.64705882352941, size: 1 },\r\n // { x: 292.014388489209, y: 3.6078431372549, size: 1 },\r\n // { x: 293.309352517986, y: 3.45098039215686, size: 1 },\r\n // { x: 293.956834532374, y: 3.56862745098039, size: 1 },\r\n // { x: 294.604316546763, y: 3.76470588235294, size: 1 },\r\n // { x: 295.251798561151, y: 3.6078431372549, size: 1 },\r\n // { x: 295.89928057554, y: 3.56862745098039, size: 1 },\r\n // { x: 296.546762589928, y: 3.76470588235294, size: 1 },\r\n // { x: 297.194244604317, y: 3.68627450980392, size: 1 },\r\n // { x: 299.136690647482, y: 3.52941176470588, size: 1 },\r\n // { x: 299.784172661871, y: 3.49019607843137, size: 1 },\r\n // { x: 300.431654676259, y: 3.2156862745098, size: 1 },\r\n // { x: 301.079136690647, y: 3.37254901960784, size: 1 },\r\n // { x: 301.726618705036, y: 3.52941176470588, size: 1 },\r\n // { x: 302.374100719424, y: 3.49019607843137, size: 1 },\r\n // { x: 303.669064748201, y: 3.56862745098039, size: 1 },\r\n // { x: 304.964028776978, y: 3.56862745098039, size: 1 },\r\n // { x: 305.611510791367, y: 3.80392156862745, size: 1 },\r\n // { x: 306.258992805755, y: 3.52941176470588, size: 1 },\r\n // { x: 307.553956834532, y: 3.45098039215686, size: 1 },\r\n // { x: 308.848920863309, y: 3.37254901960784, size: 1 },\r\n // { x: 309.496402877698, y: 3.56862745098039, size: 1 },\r\n // { x: 310.791366906475, y: 3.88235294117647, size: 1 },\r\n // { x: 311.438848920863, y: 3.76470588235294, size: 1 },\r\n // { x: 312.086330935252, y: 3.6078431372549, size: 1 },\r\n // { x: 314.028776978417, y: 3.80392156862745, size: 1 },\r\n // { x: 314.676258992806, y: 3.76470588235294, size: 1 },\r\n // { x: 315.323741007194, y: 3.64705882352941, size: 1 },\r\n // { x: 315.971223021583, y: 3.68627450980392, size: 1 },\r\n // { x: 317.913669064748, y: 3.68627450980392, size: 1 },\r\n // { x: 318.561151079137, y: 3.64705882352941, size: 1 },\r\n // { x: 319.208633093525, y: 3.56862745098039, size: 1 },\r\n // { x: 319.856115107914, y: 3.37254901960784, size: 1 },\r\n // { x: 320.503597122302, y: 3.88235294117647, size: 1 },\r\n // { x: 321.151079136691, y: 3.41176470588235, size: 1 },\r\n // { x: 321.798561151079, y: 3.17647058823529, size: 1 },\r\n // { x: 323.093525179856, y: 3.56862745098039, size: 1 },\r\n // { x: 323.741007194245, y: 3.68627450980392, size: 1 },\r\n // { x: 325.035971223022, y: 3.49019607843137, size: 1 },\r\n // { x: 325.68345323741, y: 3.68627450980392, size: 1 },\r\n // { x: 326.330935251799, y: 3.56862745098039, size: 1 },\r\n // { x: 326.978417266187, y: 3.37254901960784, size: 1 },\r\n // { x: 327.625899280576, y: 3.72549019607843, size: 1 },\r\n // { x: 328.273381294964, y: 3.68627450980392, size: 1 },\r\n // { x: 328.920863309353, y: 3.76470588235294, size: 1 },\r\n // { x: 329.568345323741, y: 3.52941176470588, size: 1 },\r\n // { x: 330.863309352518, y: 3.45098039215686, size: 1 },\r\n // { x: 331.510791366906, y: 3.76470588235294, size: 1 },\r\n // { x: 332.158273381295, y: 3.64705882352941, size: 1 },\r\n // { x: 332.805755395683, y: 3.6078431372549, size: 1 },\r\n // { x: 334.10071942446, y: 3.68627450980392, size: 1 },\r\n // { x: 334.748201438849, y: 3.6078431372549, size: 1 },\r\n // { x: 335.395683453237, y: 3.6078431372549, size: 1 },\r\n // { x: 336.043165467626, y: 3.49019607843137, size: 1 },\r\n // { x: 336.690647482014, y: 3.52941176470588, size: 1 },\r\n // { x: 337.338129496403, y: 3.64705882352941, size: 1 },\r\n // { x: 337.985611510791, y: 3.6078431372549, size: 1 },\r\n // { x: 338.63309352518, y: 3.64705882352941, size: 1 },\r\n // { x: 339.280575539568, y: 3.68627450980392, size: 1 },\r\n // { x: 339.928057553957, y: 3.6078431372549, size: 1 },\r\n // { x: 340.575539568345, y: 3.37254901960784, size: 1 },\r\n // { x: 341.223021582734, y: 3.56862745098039, size: 1 },\r\n // { x: 341.870503597122, y: 3.56862745098039, size: 1 },\r\n // { x: 343.165467625899, y: 3.41176470588235, size: 1 },\r\n // { x: 343.812949640288, y: 3.29411764705882, size: 1 },\r\n // { x: 344.460431654676, y: 3.80392156862745, size: 1 },\r\n // { x: 345.107913669065, y: 3.68627450980392, size: 1 },\r\n // { x: 345.755395683453, y: 3.49019607843137, size: 1 },\r\n // { x: 347.05035971223, y: 3.68627450980392, size: 1 },\r\n // { x: 348.992805755396, y: 3.52941176470588, size: 1 },\r\n // { x: 349.640287769784, y: 3.49019607843137, size: 1 },\r\n // { x: 350.287769784173, y: 3.49019607843137, size: 1 },\r\n // { x: 350.935251798561, y: 3.80392156862745, size: 1 },\r\n // { x: 351.58273381295, y: 3.64705882352941, size: 1 },\r\n // { x: 352.230215827338, y: 3.68627450980392, size: 1 },\r\n // { x: 352.877697841727, y: 3.56862745098039, size: 1 },\r\n // { x: 354.172661870504, y: 3.45098039215686, size: 1 },\r\n // { x: 354.820143884892, y: 3.6078431372549, size: 1 },\r\n // { x: 356.115107913669, y: 3.68627450980392, size: 1 },\r\n // { x: 356.762589928058, y: 3.56862745098039, size: 1 },\r\n // { x: 358.057553956835, y: 3.56862745098039, size: 1 },\r\n // { x: 359.352517985611, y: 3.68627450980392, size: 1 },\r\n // { x: 0, y: 3.76470588235294, size: 1 },\r\n // { x: 0.647482014388489, y: 3.6078431372549, size: 1 },\r\n // { x: 1.29496402877698, y: 3.6078431372549, size: 1 },\r\n // { x: 1.94244604316547, y: 3.56862745098039, size: 1 },\r\n // { x: 2.58992805755396, y: 3.56862745098039, size: 1 },\r\n // { x: 3.23741007194245, y: 3.64705882352941, size: 1 },\r\n // { x: 3.88489208633094, y: 3.37254901960784, size: 1 },\r\n // { x: 5.17985611510791, y: 3.37254901960784, size: 1 },\r\n // { x: 5.8273381294964, y: 3.37254901960784, size: 1 },\r\n // { x: 6.47482014388489, y: 3.49019607843137, size: 1 },\r\n // { x: 7.12230215827338, y: 3.76470588235294, size: 1 },\r\n // { x: 9.06474820143885, y: 3.52941176470588, size: 1 },\r\n // { x: 11.0071942446043, y: 3.49019607843137, size: 1 },\r\n // { x: 11.6546762589928, y: 3.64705882352941, size: 1 },\r\n // { x: 12.3021582733813, y: 3.6078431372549, size: 1 },\r\n // { x: 12.9496402877698, y: 3.76470588235294, size: 1 },\r\n // { x: 13.5971223021583, y: 3.45098039215686, size: 1 },\r\n // { x: 14.8920863309353, y: 3.6078431372549, size: 1 },\r\n // { x: 15.5395683453237, y: 3.52941176470588, size: 1 },\r\n // { x: 16.1870503597122, y: 3.6078431372549, size: 1 },\r\n // { x: 17.4820143884892, y: 3.41176470588235, size: 1 },\r\n // { x: 18.7769784172662, y: 3.80392156862745, size: 1 },\r\n // { x: 19.4244604316547, y: 3.72549019607843, size: 1 },\r\n // { x: 20.0719424460432, y: 3.52941176470588, size: 1 },\r\n // { x: 20.7194244604317, y: 3.72549019607843, size: 1 },\r\n // { x: 21.3669064748201, y: 3.45098039215686, size: 1 },\r\n // { x: 22.0143884892086, y: 3.6078431372549, size: 1 },\r\n // { x: 22.6618705035971, y: 3.56862745098039, size: 1 },\r\n // { x: 23.3093525179856, y: 3.6078431372549, size: 1 },\r\n // { x: 23.9568345323741, y: 3.52941176470588, size: 1 },\r\n // { x: 25.8992805755396, y: 3.37254901960784, size: 1 },\r\n // { x: 26.5467625899281, y: 3.2156862745098, size: 1 },\r\n // { x: 27.1942446043165, y: 3.45098039215686, size: 1 },\r\n // { x: 27.841726618705, y: 3.84313725490196, size: 1 },\r\n // { x: 28.4892086330935, y: 3.88235294117647, size: 1 },\r\n // { x: 29.7841726618705, y: 3.41176470588235, size: 1 },\r\n // { x: 31.726618705036, y: 3.68627450980392, size: 1 },\r\n // { x: 32.3741007194245, y: 3.68627450980392, size: 1 },\r\n // { x: 33.0215827338129, y: 3.64705882352941, size: 1 },\r\n // { x: 34.9640287769784, y: 3.76470588235294, size: 1 },\r\n // { x: 38.2014388489209, y: 3.84313725490196, size: 1 },\r\n // { x: 38.8489208633094, y: 3.6078431372549, size: 1 },\r\n // { x: 39.4964028776978, y: 3.76470588235294, size: 1 },\r\n // { x: 40.1438848920863, y: 3.64705882352941, size: 1 },\r\n // { x: 40.7913669064748, y: 3.56862745098039, size: 1 },\r\n // { x: 41.4388489208633, y: 3.6078431372549, size: 1 },\r\n // { x: 42.7338129496403, y: 3.88235294117647, size: 1 },\r\n // { x: 44.0287769784173, y: 3.64705882352941, size: 1 },\r\n // { x: 45.9712230215827, y: 3.49019607843137, size: 1 },\r\n // { x: 46.6187050359712, y: 3.17647058823529, size: 1 },\r\n // { x: 47.2661870503597, y: 3.2156862745098, size: 1 },\r\n // { x: 47.9136690647482, y: 2.7843137254902, size: 1 },\r\n // { x: 48.5611510791367, y: 2.90196078431373, size: 1 },\r\n // { x: 49.8561151079137, y: 3.72549019607843, size: 1 },\r\n // { x: 50.5035971223022, y: 3.52941176470588, size: 1 },\r\n // { x: 52.4460431654676, y: 3.52941176470588, size: 1 },\r\n // { x: 53.0935251798561, y: 3.52941176470588, size: 1 },\r\n // { x: 53.7410071942446, y: 3.41176470588235, size: 1 },\r\n // { x: 54.3884892086331, y: 3.49019607843137, size: 1 },\r\n // { x: 55.0359712230216, y: 3.68627450980392, size: 1 },\r\n // { x: 55.6834532374101, y: 3.56862745098039, size: 1 },\r\n // { x: 56.3309352517986, y: 3.52941176470588, size: 1 },\r\n // { x: 57.6258992805755, y: 3.64705882352941, size: 1 },\r\n // { x: 59.568345323741, y: 3.49019607843137, size: 1 },\r\n // { x: 60.2158273381295, y: 3.68627450980392, size: 1 },\r\n // { x: 60.863309352518, y: 3.49019607843137, size: 1 },\r\n // { x: 62.158273381295, y: 3.41176470588235, size: 1 },\r\n // { x: 64.1007194244604, y: 3.68627450980392, size: 1 },\r\n // { x: 64.7482014388489, y: 3.52941176470588, size: 1 },\r\n // { x: 65.3956834532374, y: 3.56862745098039, size: 1 },\r\n // { x: 66.6906474820144, y: 3.52941176470588, size: 1 },\r\n // { x: 67.9856115107914, y: 3.45098039215686, size: 1 },\r\n // { x: 68.6330935251799, y: 3.37254901960784, size: 1 },\r\n // { x: 69.2805755395683, y: 3.41176470588235, size: 1 },\r\n // { x: 69.9280575539568, y: 2.98039215686275, size: 1 },\r\n // { x: 70.5755395683453, y: 3.2156862745098, size: 1 },\r\n // { x: 71.2230215827338, y: 3.49019607843137, size: 1 },\r\n // { x: 71.8705035971223, y: 3.33333333333333, size: 1 },\r\n // { x: 72.5179856115108, y: 3.37254901960784, size: 1 },\r\n // { x: 73.1654676258993, y: 3.52941176470588, size: 1 },\r\n // { x: 74.4604316546763, y: 3.49019607843137, size: 1 },\r\n // { x: 75.1079136690647, y: 3.45098039215686, size: 1 },\r\n // { x: 75.7553956834532, y: 3.29411764705882, size: 1 },\r\n // { x: 76.4028776978417, y: 3.56862745098039, size: 1 },\r\n // { x: 77.0503597122302, y: 3.52941176470588, size: 1 },\r\n // { x: 77.6978417266187, y: 3.09803921568627, size: 1 },\r\n // { x: 78.3453237410072, y: 3.52941176470588, size: 1 },\r\n // { x: 78.9928057553957, y: 3.49019607843137, size: 1 },\r\n // { x: 80.2877697841727, y: 3.45098039215686, size: 1 },\r\n // { x: 80.9352517985612, y: 3.52941176470588, size: 1 },\r\n // { x: 81.5827338129496, y: 3.49019607843137, size: 1 },\r\n // { x: 82.2302158273381, y: 3.33333333333333, size: 1 },\r\n // { x: 82.8776978417266, y: 3.49019607843137, size: 1 },\r\n // { x: 84.1726618705036, y: 3.37254901960784, size: 1 },\r\n // { x: 84.8201438848921, y: 3.45098039215686, size: 1 },\r\n // { x: 85.4676258992806, y: 3.52941176470588, size: 1 },\r\n // { x: 86.1151079136691, y: 3.37254901960784, size: 1 },\r\n // { x: 86.7625899280576, y: 3.52941176470588, size: 1 },\r\n // { x: 87.410071942446, y: 3.2156862745098, size: 1 },\r\n // { x: 88.0575539568345, y: 3.37254901960784, size: 1 },\r\n // { x: 88.705035971223, y: 3.37254901960784, size: 1 },\r\n // { x: 89.3525179856115, y: 3.37254901960784, size: 1 },\r\n // { x: 90, y: 3.41176470588235, size: 1 },\r\n // { x: 90.6474820143885, y: 2.90196078431373, size: 1 },\r\n // { x: 91.294964028777, y: 2.54901960784314, size: 1 },\r\n // { x: 91.9424460431655, y: 2.35294117647059, size: 1 },\r\n // { x: 92.589928057554, y: 3.37254901960784, size: 1 },\r\n // { x: 93.8848920863309, y: 3.72549019607843, size: 1 },\r\n // { x: 95.1798561151079, y: 3.52941176470588, size: 1 },\r\n // { x: 97.1223021582734, y: 3.72549019607843, size: 1 },\r\n // { x: 97.7697841726619, y: 3.37254901960784, size: 1 },\r\n // { x: 98.4172661870504, y: 3.88235294117647, size: 1 },\r\n // { x: 99.0647482014388, y: 3.41176470588235, size: 1 },\r\n // { x: 99.7122302158273, y: 3.68627450980392, size: 1 },\r\n // { x: 101.654676258993, y: 3.80392156862745, size: 1 },\r\n // { x: 102.94964028777, y: 3.45098039215686, size: 1 },\r\n // { x: 103.597122302158, y: 3.68627450980392, size: 1 },\r\n // { x: 104.892086330935, y: 3.56862745098039, size: 1 },\r\n // { x: 106.187050359712, y: 3.68627450980392, size: 1 },\r\n // { x: 106.834532374101, y: 3.64705882352941, size: 1 },\r\n // { x: 107.482014388489, y: 3.72549019607843, size: 1 },\r\n // { x: 108.129496402878, y: 3.56862745098039, size: 1 },\r\n // { x: 108.776978417266, y: 3.45098039215686, size: 1 },\r\n // { x: 109.424460431655, y: 3.6078431372549, size: 1 },\r\n // { x: 110.071942446043, y: 3.49019607843137, size: 1 },\r\n // { x: 110.719424460432, y: 3.41176470588235, size: 1 },\r\n // { x: 111.36690647482, y: 3.25490196078431, size: 1 },\r\n // { x: 112.014388489209, y: 3.25490196078431, size: 1 },\r\n // { x: 112.661870503597, y: 3.25490196078431, size: 1 },\r\n // { x: 113.309352517986, y: 3.01960784313725, size: 1 },\r\n // { x: 113.956834532374, y: 3.29411764705882, size: 1 },\r\n // { x: 114.604316546763, y: 3.41176470588235, size: 1 },\r\n // { x: 115.251798561151, y: 3.68627450980392, size: 1 },\r\n // { x: 115.89928057554, y: 3.37254901960784, size: 1 },\r\n // { x: 116.546762589928, y: 3.72549019607843, size: 1 },\r\n // { x: 117.841726618705, y: 3.52941176470588, size: 1 },\r\n // { x: 118.489208633094, y: 3.80392156862745, size: 1 },\r\n // { x: 119.784172661871, y: 3.29411764705882, size: 1 },\r\n // { x: 120.431654676259, y: 3.52941176470588, size: 1 },\r\n // { x: 121.079136690647, y: 3.52941176470588, size: 1 },\r\n // { x: 121.726618705036, y: 3.64705882352941, size: 1 },\r\n // { x: 122.374100719424, y: 3.68627450980392, size: 1 },\r\n // { x: 123.021582733813, y: 3.45098039215686, size: 1 },\r\n // { x: 123.669064748201, y: 3.37254901960784, size: 1 },\r\n // { x: 124.31654676259, y: 3.52941176470588, size: 1 },\r\n // { x: 124.964028776978, y: 3.49019607843137, size: 1 },\r\n // { x: 125.611510791367, y: 3.56862745098039, size: 1 },\r\n // { x: 126.258992805755, y: 3.64705882352941, size: 1 },\r\n // { x: 126.906474820144, y: 3.6078431372549, size: 1 },\r\n // { x: 128.201438848921, y: 3.56862745098039, size: 1 },\r\n // { x: 128.848920863309, y: 3.56862745098039, size: 1 },\r\n // { x: 129.496402877698, y: 3.52941176470588, size: 1 },\r\n // { x: 130.143884892086, y: 3.49019607843137, size: 1 },\r\n // { x: 130.791366906475, y: 3.49019607843137, size: 1 },\r\n // { x: 132.086330935252, y: 3.49019607843137, size: 1 },\r\n // { x: 133.381294964029, y: 3.2156862745098, size: 1 },\r\n // { x: 134.028776978417, y: 3.13725490196078, size: 1 },\r\n // { x: 134.676258992806, y: 2.74509803921569, size: 1 },\r\n // { x: 135.323741007194, y: 3.37254901960784, size: 1 },\r\n // { x: 135.971223021583, y: 3.52941176470588, size: 1 },\r\n // { x: 136.618705035971, y: 3.56862745098039, size: 1 },\r\n // { x: 137.26618705036, y: 3.64705882352941, size: 1 },\r\n // { x: 137.913669064748, y: 3.45098039215686, size: 1 },\r\n // { x: 139.208633093525, y: 3.56862745098039, size: 1 },\r\n // { x: 139.856115107914, y: 3.80392156862745, size: 1 },\r\n // { x: 141.151079136691, y: 3.52941176470588, size: 1 },\r\n // { x: 141.798561151079, y: 3.88235294117647, size: 1 },\r\n // { x: 142.446043165468, y: 3.72549019607843, size: 1 },\r\n // { x: 143.093525179856, y: 3.52941176470588, size: 1 },\r\n // { x: 144.388489208633, y: 3.49019607843137, size: 1 },\r\n // { x: 145.035971223022, y: 3.6078431372549, size: 1 },\r\n // { x: 145.68345323741, y: 3.56862745098039, size: 1 },\r\n // { x: 146.330935251799, y: 3.84313725490196, size: 1 },\r\n // { x: 146.978417266187, y: 3.80392156862745, size: 1 },\r\n // { x: 147.625899280576, y: 3.64705882352941, size: 1 },\r\n // { x: 148.920863309353, y: 3.68627450980392, size: 1 },\r\n // { x: 149.568345323741, y: 3.6078431372549, size: 1 },\r\n // { x: 152.805755395683, y: 3.56862745098039, size: 1 },\r\n // { x: 154.10071942446, y: 3.25490196078431, size: 1 },\r\n // { x: 154.748201438849, y: 3.17647058823529, size: 1 },\r\n // { x: 155.395683453237, y: 3.01960784313725, size: 1 },\r\n // { x: 156.043165467626, y: 2.58823529411765, size: 1 },\r\n // { x: 156.690647482014, y: 1.92156862745098, size: 1 },\r\n // { x: 157.338129496403, y: 3.6078431372549, size: 1 },\r\n // { x: 157.985611510791, y: 3.56862745098039, size: 1 },\r\n // { x: 158.63309352518, y: 3.64705882352941, size: 1 },\r\n // { x: 159.928057553957, y: 3.52941176470588, size: 1 },\r\n // { x: 160.575539568345, y: 3.72549019607843, size: 1 },\r\n // { x: 161.223021582734, y: 3.52941176470588, size: 1 },\r\n // { x: 161.870503597122, y: 3.84313725490196, size: 1 },\r\n // { x: 162.517985611511, y: 3.84313725490196, size: 1 },\r\n // { x: 163.165467625899, y: 3.88235294117647, size: 1 },\r\n // { x: 163.812949640288, y: 3.76470588235294, size: 1 },\r\n // { x: 164.460431654676, y: 3.80392156862745, size: 1 },\r\n // { x: 165.107913669065, y: 3.52941176470588, size: 1 },\r\n // { x: 165.755395683453, y: 3.68627450980392, size: 1 },\r\n // { x: 166.402877697842, y: 3.64705882352941, size: 1 },\r\n // { x: 167.697841726619, y: 3.6078431372549, size: 1 },\r\n // { x: 168.345323741007, y: 3.76470588235294, size: 1 },\r\n // { x: 168.992805755396, y: 3.49019607843137, size: 1 },\r\n // { x: 169.640287769784, y: 3.84313725490196, size: 1 },\r\n // { x: 170.287769784173, y: 3.64705882352941, size: 1 },\r\n // { x: 170.935251798561, y: 3.64705882352941, size: 1 },\r\n // { x: 171.58273381295, y: 3.52941176470588, size: 1 },\r\n // { x: 173.525179856115, y: 3.49019607843137, size: 1 },\r\n // { x: 174.172661870504, y: 3.49019607843137, size: 1 },\r\n // { x: 174.820143884892, y: 3.80392156862745, size: 1 },\r\n // { x: 176.115107913669, y: 3.29411764705882, size: 1 },\r\n // { x: 176.762589928058, y: 3.37254901960784, size: 1 },\r\n // { x: 177.410071942446, y: 3.05882352941176, size: 1 },\r\n // { x: 178.057553956835, y: 2.98039215686275, size: 1 },\r\n // { x: 178.705035971223, y: 3.2156862745098, size: 1 },\r\n // { x: 179.352517985612, y: 3.76470588235294, size: 1 },\r\n // { x: 180, y: 3.49019607843137, size: 1 },\r\n // { x: 181.294964028777, y: 3.49019607843137, size: 1 },\r\n // { x: 181.942446043165, y: 3.80392156862745, size: 1 },\r\n // { x: 183.884892086331, y: 3.52941176470588, size: 1 },\r\n // { x: 184.532374100719, y: 3.33333333333333, size: 1 },\r\n // { x: 185.179856115108, y: 3.64705882352941, size: 1 },\r\n // { x: 186.474820143885, y: 3.37254901960784, size: 1 },\r\n // { x: 187.122302158273, y: 3.64705882352941, size: 1 },\r\n // { x: 188.41726618705, y: 3.37254901960784, size: 1 },\r\n // { x: 189.064748201439, y: 3.56862745098039, size: 1 },\r\n // { x: 189.712230215827, y: 3.6078431372549, size: 1 },\r\n // { x: 190.359712230216, y: 3.41176470588235, size: 1 },\r\n // { x: 191.007194244604, y: 3.52941176470588, size: 1 },\r\n // { x: 191.654676258993, y: 3.37254901960784, size: 1 },\r\n // { x: 192.302158273381, y: 3.49019607843137, size: 1 },\r\n // { x: 192.94964028777, y: 3.80392156862745, size: 1 },\r\n // { x: 194.244604316547, y: 3.41176470588235, size: 1 },\r\n // { x: 194.892086330935, y: 3.41176470588235, size: 1 },\r\n // { x: 196.187050359712, y: 3.45098039215686, size: 1 },\r\n // { x: 196.834532374101, y: 3.37254901960784, size: 1 },\r\n // { x: 197.482014388489, y: 3.33333333333333, size: 1 },\r\n // { x: 198.129496402878, y: 3.37254901960784, size: 1 },\r\n // { x: 198.776978417266, y: 3.2156862745098, size: 1 },\r\n // { x: 199.424460431655, y: 3.13725490196078, size: 1 },\r\n // { x: 200.071942446043, y: 3.2156862745098, size: 1 },\r\n // { x: 200.719424460432, y: 3.49019607843137, size: 1 },\r\n // { x: 201.36690647482, y: 3.41176470588235, size: 1 },\r\n // { x: 202.014388489209, y: 3.49019607843137, size: 1 },\r\n // { x: 203.309352517986, y: 3.64705882352941, size: 1 },\r\n // { x: 203.956834532374, y: 3.52941176470588, size: 1 },\r\n // { x: 204.604316546763, y: 3.52941176470588, size: 1 },\r\n // { x: 205.89928057554, y: 3.52941176470588, size: 1 },\r\n // { x: 206.546762589928, y: 3.68627450980392, size: 1 },\r\n // { x: 207.194244604317, y: 3.56862745098039, size: 1 },\r\n // { x: 207.841726618705, y: 3.64705882352941, size: 1 },\r\n // { x: 209.136690647482, y: 3.64705882352941, size: 1 },\r\n // { x: 209.784172661871, y: 3.56862745098039, size: 1 },\r\n // { x: 210.431654676259, y: 3.72549019607843, size: 1 },\r\n // { x: 211.079136690647, y: 3.41176470588235, size: 1 },\r\n // { x: 211.726618705036, y: 3.49019607843137, size: 1 },\r\n // { x: 212.374100719424, y: 3.6078431372549, size: 1 },\r\n // { x: 213.021582733813, y: 3.6078431372549, size: 1 },\r\n // { x: 214.31654676259, y: 3.56862745098039, size: 1 },\r\n // { x: 215.611510791367, y: 3.49019607843137, size: 1 },\r\n // { x: 216.258992805755, y: 3.45098039215686, size: 1 },\r\n // { x: 217.553956834532, y: 3.64705882352941, size: 1 },\r\n // { x: 218.848920863309, y: 3.25490196078431, size: 1 },\r\n // { x: 219.496402877698, y: 3.37254901960784, size: 1 },\r\n // { x: 220.143884892086, y: 3.17647058823529, size: 1 },\r\n // { x: 220.791366906475, y: 2.07843137254902, size: 1 },\r\n // { x: 221.438848920863, y: 2.11764705882353, size: 1 },\r\n // { x: 222.086330935252, y: 3.68627450980392, size: 1 },\r\n // { x: 222.73381294964, y: 3.56862745098039, size: 1 },\r\n // { x: 224.028776978417, y: 3.64705882352941, size: 1 },\r\n // { x: 224.676258992806, y: 3.56862745098039, size: 1 },\r\n // { x: 225.971223021583, y: 3.72549019607843, size: 1 },\r\n // { x: 227.26618705036, y: 3.6078431372549, size: 1 },\r\n // { x: 227.913669064748, y: 3.68627450980392, size: 1 },\r\n // { x: 228.561151079137, y: 3.72549019607843, size: 1 },\r\n // { x: 229.208633093525, y: 3.76470588235294, size: 1 },\r\n // { x: 229.856115107914, y: 3.72549019607843, size: 1 },\r\n // { x: 231.151079136691, y: 3.76470588235294, size: 1 },\r\n // { x: 231.798561151079, y: 3.52941176470588, size: 1 },\r\n // { x: 232.446043165468, y: 3.72549019607843, size: 1 },\r\n // { x: 233.093525179856, y: 3.64705882352941, size: 1 },\r\n // { x: 234.388489208633, y: 3.76470588235294, size: 1 },\r\n // { x: 235.035971223022, y: 3.68627450980392, size: 1 },\r\n // { x: 235.68345323741, y: 3.52941176470588, size: 1 },\r\n // { x: 236.330935251799, y: 3.88235294117647, size: 1 },\r\n // { x: 236.978417266187, y: 3.56862745098039, size: 1 },\r\n // { x: 238.920863309353, y: 3.64705882352941, size: 1 },\r\n // { x: 239.568345323741, y: 3.64705882352941, size: 1 },\r\n // { x: 240.215827338129, y: 3.56862745098039, size: 1 },\r\n // { x: 240.863309352518, y: 3.6078431372549, size: 1 },\r\n // { x: 241.510791366906, y: 3.41176470588235, size: 1 },\r\n // { x: 242.805755395683, y: 3.45098039215686, size: 1 },\r\n // { x: 243.453237410072, y: 3.33333333333333, size: 1 },\r\n // { x: 244.10071942446, y: 3.25490196078431, size: 1 },\r\n // { x: 244.748201438849, y: 3.45098039215686, size: 1 },\r\n // { x: 245.395683453237, y: 3.6078431372549, size: 1 },\r\n // { x: 246.043165467626, y: 3.33333333333333, size: 1 },\r\n // { x: 247.338129496403, y: 3.49019607843137, size: 1 },\r\n // { x: 247.985611510791, y: 3.41176470588235, size: 1 },\r\n // { x: 248.63309352518, y: 3.41176470588235, size: 1 },\r\n // { x: 249.280575539568, y: 3.37254901960784, size: 1 },\r\n // { x: 250.575539568345, y: 3.6078431372549, size: 1 },\r\n // { x: 251.223021582734, y: 3.56862745098039, size: 1 },\r\n // { x: 251.870503597122, y: 3.76470588235294, size: 1 },\r\n // { x: 253.165467625899, y: 3.33333333333333, size: 1 },\r\n // { x: 254.460431654676, y: 3.56862745098039, size: 1 },\r\n // { x: 255.107913669065, y: 3.49019607843137, size: 1 },\r\n // { x: 256.402877697842, y: 3.45098039215686, size: 1 },\r\n // { x: 257.05035971223, y: 3.33333333333333, size: 1 },\r\n // { x: 257.697841726619, y: 3.56862745098039, size: 1 },\r\n // { x: 258.345323741007, y: 3.64705882352941, size: 1 },\r\n // { x: 259.640287769784, y: 3.2156862745098, size: 1 },\r\n // { x: 260.287769784173, y: 3.37254901960784, size: 1 },\r\n // { x: 260.935251798561, y: 3.49019607843137, size: 1 },\r\n // { x: 261.58273381295, y: 3.56862745098039, size: 1 },\r\n // { x: 262.230215827338, y: 3.09803921568627, size: 1 },\r\n // { x: 262.877697841727, y: 3.29411764705882, size: 1 },\r\n // { x: 264.172661870504, y: 3.64705882352941, size: 1 },\r\n // { x: 264.820143884892, y: 3.80392156862745, size: 1 },\r\n // { x: 265.467625899281, y: 3.68627450980392, size: 1 },\r\n // { x: 268.057553956835, y: 3.72549019607843, size: 1 },\r\n // { x: 268.705035971223, y: 3.6078431372549, size: 1 },\r\n // { x: 269.352517985611, y: 3.52941176470588, size: 1 },\r\n // { x: 270, y: 3.68627450980392, size: 1 },\r\n // { x: 270.647482014389, y: 3.6078431372549, size: 1 },\r\n // { x: 271.294964028777, y: 3.72549019607843, size: 1 },\r\n // { x: 272.589928057554, y: 3.56862745098039, size: 1 },\r\n // { x: 274.532374100719, y: 3.56862745098039, size: 1 },\r\n // { x: 277.122302158273, y: 3.6078431372549, size: 1 },\r\n // { x: 278.41726618705, y: 3.64705882352941, size: 1 },\r\n // { x: 279.712230215827, y: 3.52941176470588, size: 1 },\r\n // { x: 280.359712230216, y: 3.6078431372549, size: 1 },\r\n // { x: 282.302158273381, y: 3.52941176470588, size: 1 },\r\n // { x: 282.94964028777, y: 3.52941176470588, size: 1 },\r\n // { x: 283.597122302158, y: 3.49019607843137, size: 1 },\r\n // { x: 284.892086330935, y: 3.29411764705882, size: 1 },\r\n // { x: 285.539568345324, y: 3.76470588235294, size: 1 },\r\n // { x: 286.187050359712, y: 3.56862745098039, size: 1 },\r\n // { x: 286.834532374101, y: 3.68627450980392, size: 1 },\r\n // { x: 287.482014388489, y: 3.49019607843137, size: 1 },\r\n // { x: 288.129496402878, y: 3.76470588235294, size: 1 },\r\n // { x: 288.776978417266, y: 3.56862745098039, size: 1 },\r\n // { x: 289.424460431655, y: 3.49019607843137, size: 1 },\r\n // { x: 290.071942446043, y: 3.6078431372549, size: 1 },\r\n // { x: 290.719424460432, y: 3.80392156862745, size: 1 },\r\n // { x: 291.36690647482, y: 3.45098039215686, size: 1 },\r\n // { x: 292.014388489209, y: 3.68627450980392, size: 1 },\r\n // { x: 292.661870503597, y: 3.45098039215686, size: 1 },\r\n // { x: 293.956834532374, y: 3.6078431372549, size: 1 },\r\n // { x: 296.546762589928, y: 3.64705882352941, size: 1 },\r\n // { x: 297.194244604317, y: 3.64705882352941, size: 1 },\r\n // { x: 297.841726618705, y: 3.56862745098039, size: 1 },\r\n // { x: 299.136690647482, y: 3.76470588235294, size: 1 },\r\n // { x: 300.431654676259, y: 3.56862745098039, size: 1 },\r\n // { x: 301.079136690647, y: 3.49019607843137, size: 1 },\r\n // { x: 302.374100719424, y: 3.96078431372549, size: 1 },\r\n // { x: 304.31654676259, y: 3.68627450980392, size: 1 },\r\n // { x: 305.611510791367, y: 3.33333333333333, size: 1 },\r\n // { x: 306.258992805755, y: 3.37254901960784, size: 1 },\r\n // { x: 307.553956834532, y: 3.49019607843137, size: 1 },\r\n // { x: 308.201438848921, y: 3.56862745098039, size: 1 },\r\n // { x: 308.848920863309, y: 3.68627450980392, size: 1 },\r\n // { x: 309.496402877698, y: 3.6078431372549, size: 1 },\r\n // { x: 310.143884892086, y: 3.72549019607843, size: 1 },\r\n // { x: 310.791366906475, y: 3.92156862745098, size: 1 },\r\n // { x: 312.086330935252, y: 3.80392156862745, size: 1 },\r\n // { x: 312.73381294964, y: 3.49019607843137, size: 1 },\r\n // { x: 314.676258992806, y: 3.45098039215686, size: 1 },\r\n // { x: 315.971223021583, y: 3.45098039215686, size: 1 },\r\n // { x: 316.618705035971, y: 3.68627450980392, size: 1 },\r\n // { x: 317.26618705036, y: 3.76470588235294, size: 1 },\r\n // { x: 318.561151079137, y: 3.76470588235294, size: 1 },\r\n // { x: 319.856115107914, y: 3.64705882352941, size: 1 },\r\n // { x: 320.503597122302, y: 3.68627450980392, size: 1 },\r\n // { x: 321.151079136691, y: 3.64705882352941, size: 1 },\r\n // { x: 321.798561151079, y: 3.64705882352941, size: 1 },\r\n // { x: 322.446043165468, y: 3.72549019607843, size: 1 },\r\n // { x: 323.093525179856, y: 3.80392156862745, size: 1 },\r\n // { x: 323.741007194245, y: 3.52941176470588, size: 1 },\r\n // { x: 324.388489208633, y: 3.72549019607843, size: 1 },\r\n // { x: 326.330935251799, y: 3.84313725490196, size: 1 },\r\n // { x: 326.978417266187, y: 3.45098039215686, size: 1 },\r\n // { x: 327.625899280576, y: 3.13725490196078, size: 1 },\r\n // { x: 328.273381294964, y: 3.01960784313725, size: 1 },\r\n // { x: 328.920863309353, y: 2.66666666666667, size: 1 },\r\n // { x: 329.568345323741, y: 3.45098039215686, size: 1 },\r\n // { x: 331.510791366906, y: 3.56862745098039, size: 1 },\r\n // { x: 332.158273381295, y: 3.56862745098039, size: 1 },\r\n // { x: 333.453237410072, y: 3.64705882352941, size: 1 },\r\n // { x: 334.10071942446, y: 3.56862745098039, size: 1 },\r\n // { x: 335.395683453237, y: 3.49019607843137, size: 1 },\r\n // { x: 336.043165467626, y: 3.41176470588235, size: 1 },\r\n // { x: 337.338129496403, y: 3.72549019607843, size: 1 },\r\n // { x: 337.985611510791, y: 3.76470588235294, size: 1 },\r\n // { x: 338.63309352518, y: 3.88235294117647, size: 1 },\r\n // { x: 339.280575539568, y: 3.41176470588235, size: 1 },\r\n // { x: 339.928057553957, y: 3.56862745098039, size: 1 },\r\n // { x: 340.575539568345, y: 3.49019607843137, size: 1 },\r\n // { x: 341.223021582734, y: 3.72549019607843, size: 1 },\r\n // { x: 341.870503597122, y: 3.6078431372549, size: 1 },\r\n // { x: 342.517985611511, y: 3.52941176470588, size: 1 },\r\n // { x: 343.165467625899, y: 3.76470588235294, size: 1 },\r\n // { x: 343.812949640288, y: 3.6078431372549, size: 1 },\r\n // { x: 344.460431654676, y: 3.84313725490196, size: 1 },\r\n // { x: 345.107913669065, y: 3.56862745098039, size: 1 },\r\n // { x: 345.755395683453, y: 3.80392156862745, size: 1 },\r\n // { x: 346.402877697842, y: 3.56862745098039, size: 1 },\r\n // { x: 347.05035971223, y: 3.52941176470588, size: 1 },\r\n // { x: 347.697841726619, y: 3.68627450980392, size: 1 },\r\n // { x: 348.345323741007, y: 3.49019607843137, size: 1 },\r\n // { x: 348.992805755396, y: 3.37254901960784, size: 1 },\r\n // { x: 350.287769784173, y: 3.29411764705882, size: 1 },\r\n // { x: 351.58273381295, y: 3.52941176470588, size: 1 },\r\n // { x: 352.877697841727, y: 3.45098039215686, size: 1 },\r\n // { x: 355.467625899281, y: 3.56862745098039, size: 1 },\r\n // { x: 356.115107913669, y: 3.76470588235294, size: 1 },\r\n // { x: 356.762589928058, y: 3.6078431372549, size: 1 },\r\n // { x: 357.410071942446, y: 3.80392156862745, size: 1 },\r\n // { x: 358.705035971223, y: 3.64705882352941, size: 1 },\r\n // { x: 359.352517985611, y: 3.37254901960784, size: 1 },\r\n // { x: 0, y: 3.49019607843137, size: 1 },\r\n // { x: 0.648648648648649, y: 3.6078431372549, size: 1 },\r\n // { x: 1.2972972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 2.59459459459459, y: 3.49019607843137, size: 1 },\r\n // { x: 3.24324324324324, y: 3.45098039215686, size: 1 },\r\n // { x: 3.89189189189189, y: 3.68627450980392, size: 1 },\r\n // { x: 4.54054054054054, y: 3.52941176470588, size: 1 },\r\n // { x: 5.18918918918919, y: 3.52941176470588, size: 1 },\r\n // { x: 5.83783783783784, y: 3.41176470588235, size: 1 },\r\n // { x: 6.48648648648649, y: 3.52941176470588, size: 1 },\r\n // { x: 7.13513513513514, y: 3.6078431372549, size: 1 },\r\n // { x: 7.78378378378378, y: 3.52941176470588, size: 1 },\r\n // { x: 8.43243243243243, y: 3.45098039215686, size: 1 },\r\n // { x: 9.08108108108108, y: 3.45098039215686, size: 1 },\r\n // { x: 9.72972972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 10.3783783783784, y: 3.25490196078431, size: 1 },\r\n // { x: 11.027027027027, y: 3.45098039215686, size: 1 },\r\n // { x: 11.6756756756757, y: 3.56862745098039, size: 1 },\r\n // { x: 12.3243243243243, y: 3.76470588235294, size: 1 },\r\n // { x: 12.972972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 13.6216216216216, y: 3.68627450980392, size: 1 },\r\n // { x: 14.2702702702703, y: 3.6078431372549, size: 1 },\r\n // { x: 14.9189189189189, y: 3.56862745098039, size: 1 },\r\n // { x: 15.5675675675676, y: 3.72549019607843, size: 1 },\r\n // { x: 16.2162162162162, y: 3.68627450980392, size: 1 },\r\n // { x: 16.8648648648649, y: 3.68627450980392, size: 1 },\r\n // { x: 17.5135135135135, y: 3.76470588235294, size: 1 },\r\n // { x: 18.1621621621622, y: 3.80392156862745, size: 1 },\r\n // { x: 18.8108108108108, y: 3.52941176470588, size: 1 },\r\n // { x: 19.4594594594595, y: 3.49019607843137, size: 1 },\r\n // { x: 20.1081081081081, y: 3.64705882352941, size: 1 },\r\n // { x: 20.7567567567568, y: 3.64705882352941, size: 1 },\r\n // { x: 21.4054054054054, y: 3.6078431372549, size: 1 },\r\n // { x: 22.0540540540541, y: 3.52941176470588, size: 1 },\r\n // { x: 22.7027027027027, y: 3.68627450980392, size: 1 },\r\n // { x: 23.3513513513514, y: 3.64705882352941, size: 1 },\r\n // { x: 24, y: 3.6078431372549, size: 1 },\r\n // { x: 24.6486486486486, y: 3.88235294117647, size: 1 },\r\n // { x: 25.2972972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 25.9459459459459, y: 3.6078431372549, size: 1 },\r\n // { x: 26.5945945945946, y: 3.6078431372549, size: 1 },\r\n // { x: 27.2432432432432, y: 3.6078431372549, size: 1 },\r\n // { x: 27.8918918918919, y: 3.76470588235294, size: 1 },\r\n // { x: 28.5405405405405, y: 3.68627450980392, size: 1 },\r\n // { x: 29.1891891891892, y: 3.41176470588235, size: 1 },\r\n // { x: 29.8378378378378, y: 3.49019607843137, size: 1 },\r\n // { x: 30.4864864864865, y: 3.68627450980392, size: 1 },\r\n // { x: 31.1351351351351, y: 3.68627450980392, size: 1 },\r\n // { x: 31.7837837837838, y: 3.45098039215686, size: 1 },\r\n // { x: 32.4324324324324, y: 3.52941176470588, size: 1 },\r\n // { x: 33.0810810810811, y: 3.45098039215686, size: 1 },\r\n // { x: 33.7297297297297, y: 3.25490196078431, size: 1 },\r\n // { x: 35.027027027027, y: 3.56862745098039, size: 1 },\r\n // { x: 35.6756756756757, y: 3.56862745098039, size: 1 },\r\n // { x: 36.3243243243243, y: 3.41176470588235, size: 1 },\r\n // { x: 36.972972972973, y: 3.13725490196078, size: 1 },\r\n // { x: 37.6216216216216, y: 3.49019607843137, size: 1 },\r\n // { x: 38.2702702702703, y: 3.49019607843137, size: 1 },\r\n // { x: 38.9189189189189, y: 3.49019607843137, size: 1 },\r\n // { x: 39.5675675675676, y: 3.2156862745098, size: 1 },\r\n // { x: 40.2162162162162, y: 3.29411764705882, size: 1 },\r\n // { x: 40.8648648648649, y: 3.25490196078431, size: 1 },\r\n // { x: 41.5135135135135, y: 3.2156862745098, size: 1 },\r\n // { x: 42.1621621621622, y: 3.49019607843137, size: 1 },\r\n // { x: 42.8108108108108, y: 3.33333333333333, size: 1 },\r\n // { x: 43.4594594594595, y: 3.80392156862745, size: 1 },\r\n // { x: 44.1081081081081, y: 3.41176470588235, size: 1 },\r\n // { x: 44.7567567567568, y: 3.37254901960784, size: 1 },\r\n // { x: 45.4054054054054, y: 3.52941176470588, size: 1 },\r\n // { x: 46.0540540540541, y: 3.37254901960784, size: 1 },\r\n // { x: 46.7027027027027, y: 3.45098039215686, size: 1 },\r\n // { x: 47.3513513513514, y: 3.49019607843137, size: 1 },\r\n // { x: 48, y: 3.41176470588235, size: 1 },\r\n // { x: 48.6486486486486, y: 3.37254901960784, size: 1 },\r\n // { x: 49.2972972972973, y: 3.33333333333333, size: 1 },\r\n // { x: 49.9459459459459, y: 3.45098039215686, size: 1 },\r\n // { x: 50.5945945945946, y: 3.29411764705882, size: 1 },\r\n // { x: 51.2432432432432, y: 3.29411764705882, size: 1 },\r\n // { x: 51.8918918918919, y: 3.64705882352941, size: 1 },\r\n // { x: 52.5405405405405, y: 3.29411764705882, size: 1 },\r\n // { x: 53.8378378378378, y: 3.68627450980392, size: 1 },\r\n // { x: 54.4864864864865, y: 3.6078431372549, size: 1 },\r\n // { x: 55.1351351351351, y: 3.76470588235294, size: 1 },\r\n // { x: 55.7837837837838, y: 3.52941176470588, size: 1 },\r\n // { x: 56.4324324324324, y: 3.41176470588235, size: 1 },\r\n // { x: 57.0810810810811, y: 3.17647058823529, size: 1 },\r\n // { x: 57.7297297297297, y: 3.41176470588235, size: 1 },\r\n // { x: 58.3783783783784, y: 3.29411764705882, size: 1 },\r\n // { x: 59.027027027027, y: 3.64705882352941, size: 1 },\r\n // { x: 60.3243243243243, y: 3.64705882352941, size: 1 },\r\n // { x: 60.972972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 62.2702702702703, y: 3.41176470588235, size: 1 },\r\n // { x: 62.9189189189189, y: 3.29411764705882, size: 1 },\r\n // { x: 63.5675675675676, y: 3.29411764705882, size: 1 },\r\n // { x: 64.2162162162162, y: 3.37254901960784, size: 1 },\r\n // { x: 64.8648648648649, y: 3.49019607843137, size: 1 },\r\n // { x: 65.5135135135135, y: 3.68627450980392, size: 1 },\r\n // { x: 66.1621621621622, y: 3.52941176470588, size: 1 },\r\n // { x: 66.8108108108108, y: 3.33333333333333, size: 1 },\r\n // { x: 67.4594594594595, y: 3.45098039215686, size: 1 },\r\n // { x: 68.1081081081081, y: 3.41176470588235, size: 1 },\r\n // { x: 68.7567567567568, y: 3.37254901960784, size: 1 },\r\n // { x: 70.7027027027027, y: 3.49019607843137, size: 1 },\r\n // { x: 71.3513513513514, y: 3.37254901960784, size: 1 },\r\n // { x: 72, y: 3.37254901960784, size: 1 },\r\n // { x: 72.6486486486486, y: 3.29411764705882, size: 1 },\r\n // { x: 73.2972972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 73.945945945946, y: 3.29411764705882, size: 1 },\r\n // { x: 75.2432432432432, y: 3.49019607843137, size: 1 },\r\n // { x: 75.8918918918919, y: 3.45098039215686, size: 1 },\r\n // { x: 76.5405405405405, y: 3.33333333333333, size: 1 },\r\n // { x: 77.1891891891892, y: 3.49019607843137, size: 1 },\r\n // { x: 77.8378378378378, y: 3.64705882352941, size: 1 },\r\n // { x: 78.4864864864865, y: 3.45098039215686, size: 1 },\r\n // { x: 79.1351351351351, y: 3.6078431372549, size: 1 },\r\n // { x: 79.7837837837838, y: 3.80392156862745, size: 1 },\r\n // { x: 80.4324324324324, y: 3.49019607843137, size: 1 },\r\n // { x: 81.0810810810811, y: 3.41176470588235, size: 1 },\r\n // { x: 81.7297297297297, y: 3.52941176470588, size: 1 },\r\n // { x: 82.3783783783784, y: 3.41176470588235, size: 1 },\r\n // { x: 83.027027027027, y: 3.6078431372549, size: 1 },\r\n // { x: 83.6756756756757, y: 3.29411764705882, size: 1 },\r\n // { x: 84.3243243243243, y: 3.29411764705882, size: 1 },\r\n // { x: 84.972972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 85.6216216216216, y: 3.56862745098039, size: 1 },\r\n // { x: 86.2702702702703, y: 3.49019607843137, size: 1 },\r\n // { x: 86.9189189189189, y: 3.45098039215686, size: 1 },\r\n // { x: 87.5675675675676, y: 3.49019607843137, size: 1 },\r\n // { x: 88.2162162162162, y: 3.64705882352941, size: 1 },\r\n // { x: 88.8648648648649, y: 3.29411764705882, size: 1 },\r\n // { x: 89.5135135135135, y: 3.29411764705882, size: 1 },\r\n // { x: 90.1621621621622, y: 3.17647058823529, size: 1 },\r\n // { x: 90.8108108108108, y: 3.52941176470588, size: 1 },\r\n // { x: 91.4594594594595, y: 3.52941176470588, size: 1 },\r\n // { x: 92.1081081081081, y: 3.64705882352941, size: 1 },\r\n // { x: 92.7567567567568, y: 3.33333333333333, size: 1 },\r\n // { x: 93.4054054054054, y: 3.37254901960784, size: 1 },\r\n // { x: 94.054054054054, y: 3.41176470588235, size: 1 },\r\n // { x: 94.7027027027027, y: 3.37254901960784, size: 1 },\r\n // { x: 95.3513513513514, y: 3.49019607843137, size: 1 },\r\n // { x: 96, y: 3.37254901960784, size: 1 },\r\n // { x: 96.6486486486486, y: 3.49019607843137, size: 1 },\r\n // { x: 97.2972972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 97.945945945946, y: 3.41176470588235, size: 1 },\r\n // { x: 98.5945945945946, y: 3.52941176470588, size: 1 },\r\n // { x: 99.8918918918919, y: 3.37254901960784, size: 1 },\r\n // { x: 100.540540540541, y: 3.45098039215686, size: 1 },\r\n // { x: 101.189189189189, y: 3.6078431372549, size: 1 },\r\n // { x: 101.837837837838, y: 3.41176470588235, size: 1 },\r\n // { x: 102.486486486486, y: 3.49019607843137, size: 1 },\r\n // { x: 103.135135135135, y: 3.41176470588235, size: 1 },\r\n // { x: 103.783783783784, y: 3.49019607843137, size: 1 },\r\n // { x: 104.432432432432, y: 3.76470588235294, size: 1 },\r\n // { x: 105.081081081081, y: 3.37254901960784, size: 1 },\r\n // { x: 105.72972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 106.378378378378, y: 3.37254901960784, size: 1 },\r\n // { x: 107.027027027027, y: 3.13725490196078, size: 1 },\r\n // { x: 107.675675675676, y: 3.6078431372549, size: 1 },\r\n // { x: 108.324324324324, y: 3.64705882352941, size: 1 },\r\n // { x: 108.972972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 109.621621621622, y: 3.45098039215686, size: 1 },\r\n // { x: 110.27027027027, y: 3.37254901960784, size: 1 },\r\n // { x: 110.918918918919, y: 3.41176470588235, size: 1 },\r\n // { x: 111.567567567568, y: 3.37254901960784, size: 1 },\r\n // { x: 112.216216216216, y: 3.56862745098039, size: 1 },\r\n // { x: 112.864864864865, y: 3.33333333333333, size: 1 },\r\n // { x: 113.513513513514, y: 3.56862745098039, size: 1 },\r\n // { x: 114.162162162162, y: 3.52941176470588, size: 1 },\r\n // { x: 114.810810810811, y: 3.41176470588235, size: 1 },\r\n // { x: 115.459459459459, y: 3.25490196078431, size: 1 },\r\n // { x: 116.108108108108, y: 3.45098039215686, size: 1 },\r\n // { x: 116.756756756757, y: 3.2156862745098, size: 1 },\r\n // { x: 117.405405405405, y: 3.6078431372549, size: 1 },\r\n // { x: 118.054054054054, y: 3.52941176470588, size: 1 },\r\n // { x: 118.702702702703, y: 3.6078431372549, size: 1 },\r\n // { x: 120, y: 3.17647058823529, size: 1 },\r\n // { x: 120.648648648649, y: 3.68627450980392, size: 1 },\r\n // { x: 121.297297297297, y: 3.29411764705882, size: 1 },\r\n // { x: 121.945945945946, y: 3.41176470588235, size: 1 },\r\n // { x: 122.594594594595, y: 3.56862745098039, size: 1 },\r\n // { x: 123.243243243243, y: 3.72549019607843, size: 1 },\r\n // { x: 123.891891891892, y: 3.52941176470588, size: 1 },\r\n // { x: 124.540540540541, y: 3.76470588235294, size: 1 },\r\n // { x: 125.189189189189, y: 3.56862745098039, size: 1 },\r\n // { x: 125.837837837838, y: 3.56862745098039, size: 1 },\r\n // { x: 126.486486486486, y: 3.56862745098039, size: 1 },\r\n // { x: 127.783783783784, y: 3.92156862745098, size: 1 },\r\n // { x: 128.432432432432, y: 3.56862745098039, size: 1 },\r\n // { x: 129.081081081081, y: 3.56862745098039, size: 1 },\r\n // { x: 129.72972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 130.378378378378, y: 3.76470588235294, size: 1 },\r\n // { x: 131.027027027027, y: 3.56862745098039, size: 1 },\r\n // { x: 131.675675675676, y: 3.72549019607843, size: 1 },\r\n // { x: 132.324324324324, y: 3.49019607843137, size: 1 },\r\n // { x: 132.972972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 133.621621621622, y: 3.49019607843137, size: 1 },\r\n // { x: 134.27027027027, y: 3.56862745098039, size: 1 },\r\n // { x: 135.567567567568, y: 3.6078431372549, size: 1 },\r\n // { x: 136.216216216216, y: 3.52941176470588, size: 1 },\r\n // { x: 137.513513513514, y: 3.6078431372549, size: 1 },\r\n // { x: 138.162162162162, y: 3.6078431372549, size: 1 },\r\n // { x: 138.810810810811, y: 3.6078431372549, size: 1 },\r\n // { x: 139.459459459459, y: 3.45098039215686, size: 1 },\r\n // { x: 140.108108108108, y: 3.17647058823529, size: 1 },\r\n // { x: 140.756756756757, y: 3.37254901960784, size: 1 },\r\n // { x: 141.405405405405, y: 3.05882352941176, size: 1 },\r\n // { x: 142.054054054054, y: 2.86274509803922, size: 1 },\r\n // { x: 142.702702702703, y: 2.90196078431373, size: 1 },\r\n // { x: 143.351351351351, y: 2.70588235294118, size: 1 },\r\n // { x: 144, y: 3.37254901960784, size: 1 },\r\n // { x: 144.648648648649, y: 3.72549019607843, size: 1 },\r\n // { x: 145.945945945946, y: 3.37254901960784, size: 1 },\r\n // { x: 146.594594594595, y: 3.6078431372549, size: 1 },\r\n // { x: 147.243243243243, y: 3.41176470588235, size: 1 },\r\n // { x: 147.891891891892, y: 3.49019607843137, size: 1 },\r\n // { x: 148.540540540541, y: 3.72549019607843, size: 1 },\r\n // { x: 149.189189189189, y: 3.72549019607843, size: 1 },\r\n // { x: 149.837837837838, y: 3.6078431372549, size: 1 },\r\n // { x: 150.486486486486, y: 3.6078431372549, size: 1 },\r\n // { x: 151.783783783784, y: 3.52941176470588, size: 1 },\r\n // { x: 153.081081081081, y: 3.76470588235294, size: 1 },\r\n // { x: 153.72972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 154.378378378378, y: 3.6078431372549, size: 1 },\r\n // { x: 155.027027027027, y: 3.49019607843137, size: 1 },\r\n // { x: 155.675675675676, y: 3.68627450980392, size: 1 },\r\n // { x: 156.324324324324, y: 3.56862745098039, size: 1 },\r\n // { x: 156.972972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 157.621621621622, y: 3.72549019607843, size: 1 },\r\n // { x: 158.27027027027, y: 3.68627450980392, size: 1 },\r\n // { x: 158.918918918919, y: 3.41176470588235, size: 1 },\r\n // { x: 159.567567567568, y: 3.45098039215686, size: 1 },\r\n // { x: 160.216216216216, y: 3.68627450980392, size: 1 },\r\n // { x: 160.864864864865, y: 3.72549019607843, size: 1 },\r\n // { x: 161.513513513514, y: 3.37254901960784, size: 1 },\r\n // { x: 162.162162162162, y: 3.25490196078431, size: 1 },\r\n // { x: 162.810810810811, y: 3.37254901960784, size: 1 },\r\n // { x: 163.459459459459, y: 2.74509803921569, size: 1 },\r\n // { x: 164.108108108108, y: 2.54901960784314, size: 1 },\r\n // { x: 164.756756756757, y: 2.66666666666667, size: 1 },\r\n // { x: 165.405405405405, y: 2.82352941176471, size: 1 },\r\n // { x: 166.054054054054, y: 3.52941176470588, size: 1 },\r\n // { x: 166.702702702703, y: 3.56862745098039, size: 1 },\r\n // { x: 167.351351351351, y: 3.76470588235294, size: 1 },\r\n // { x: 168, y: 3.6078431372549, size: 1 },\r\n // { x: 168.648648648649, y: 3.37254901960784, size: 1 },\r\n // { x: 169.297297297297, y: 3.52941176470588, size: 1 },\r\n // { x: 169.945945945946, y: 3.41176470588235, size: 1 },\r\n // { x: 170.594594594595, y: 3.49019607843137, size: 1 },\r\n // { x: 171.243243243243, y: 3.41176470588235, size: 1 },\r\n // { x: 172.540540540541, y: 3.68627450980392, size: 1 },\r\n // { x: 173.189189189189, y: 3.56862745098039, size: 1 },\r\n // { x: 173.837837837838, y: 3.52941176470588, size: 1 },\r\n // { x: 174.486486486486, y: 3.49019607843137, size: 1 },\r\n // { x: 175.135135135135, y: 3.41176470588235, size: 1 },\r\n // { x: 175.783783783784, y: 3.64705882352941, size: 1 },\r\n // { x: 176.432432432432, y: 3.41176470588235, size: 1 },\r\n // { x: 177.081081081081, y: 3.6078431372549, size: 1 },\r\n // { x: 177.72972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 178.378378378378, y: 3.68627450980392, size: 1 },\r\n // { x: 179.027027027027, y: 3.6078431372549, size: 1 },\r\n // { x: 179.675675675676, y: 3.80392156862745, size: 1 },\r\n // { x: 180.324324324324, y: 3.49019607843137, size: 1 },\r\n // { x: 180.972972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 181.621621621622, y: 3.45098039215686, size: 1 },\r\n // { x: 182.27027027027, y: 3.68627450980392, size: 1 },\r\n // { x: 182.918918918919, y: 3.33333333333333, size: 1 },\r\n // { x: 184.216216216216, y: 3.25490196078431, size: 1 },\r\n // { x: 184.864864864865, y: 3.01960784313725, size: 1 },\r\n // { x: 185.513513513514, y: 3.2156862745098, size: 1 },\r\n // { x: 186.162162162162, y: 3.49019607843137, size: 1 },\r\n // { x: 186.810810810811, y: 3.56862745098039, size: 1 },\r\n // { x: 187.459459459459, y: 3.56862745098039, size: 1 },\r\n // { x: 188.108108108108, y: 3.84313725490196, size: 1 },\r\n // { x: 188.756756756757, y: 3.6078431372549, size: 1 },\r\n // { x: 189.405405405405, y: 3.64705882352941, size: 1 },\r\n // { x: 190.054054054054, y: 3.6078431372549, size: 1 },\r\n // { x: 190.702702702703, y: 3.64705882352941, size: 1 },\r\n // { x: 191.351351351351, y: 3.64705882352941, size: 1 },\r\n // { x: 192, y: 3.76470588235294, size: 1 },\r\n // { x: 192.648648648649, y: 3.64705882352941, size: 1 },\r\n // { x: 193.297297297297, y: 3.72549019607843, size: 1 },\r\n // { x: 193.945945945946, y: 3.52941176470588, size: 1 },\r\n // { x: 195.891891891892, y: 3.68627450980392, size: 1 },\r\n // { x: 196.540540540541, y: 3.72549019607843, size: 1 },\r\n // { x: 197.189189189189, y: 3.76470588235294, size: 1 },\r\n // { x: 197.837837837838, y: 3.84313725490196, size: 1 },\r\n // { x: 198.486486486486, y: 3.56862745098039, size: 1 },\r\n // { x: 199.135135135135, y: 3.68627450980392, size: 1 },\r\n // { x: 199.783783783784, y: 3.64705882352941, size: 1 },\r\n // { x: 200.432432432432, y: 3.64705882352941, size: 1 },\r\n // { x: 201.081081081081, y: 3.76470588235294, size: 1 },\r\n // { x: 201.72972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 203.027027027027, y: 3.72549019607843, size: 1 },\r\n // { x: 203.675675675676, y: 3.64705882352941, size: 1 },\r\n // { x: 204.324324324324, y: 3.72549019607843, size: 1 },\r\n // { x: 204.972972972973, y: 3.25490196078431, size: 1 },\r\n // { x: 205.621621621622, y: 3.41176470588235, size: 1 },\r\n // { x: 206.27027027027, y: 3.05882352941176, size: 1 },\r\n // { x: 207.567567567568, y: 3.6078431372549, size: 1 },\r\n // { x: 208.216216216216, y: 3.52941176470588, size: 1 },\r\n // { x: 208.864864864865, y: 3.64705882352941, size: 1 },\r\n // { x: 209.513513513514, y: 3.68627450980392, size: 1 },\r\n // { x: 210.162162162162, y: 3.76470588235294, size: 1 },\r\n // { x: 210.810810810811, y: 3.76470588235294, size: 1 },\r\n // { x: 211.459459459459, y: 3.64705882352941, size: 1 },\r\n // { x: 212.108108108108, y: 3.6078431372549, size: 1 },\r\n // { x: 212.756756756757, y: 3.56862745098039, size: 1 },\r\n // { x: 213.405405405405, y: 3.6078431372549, size: 1 },\r\n // { x: 214.054054054054, y: 3.76470588235294, size: 1 },\r\n // { x: 214.702702702703, y: 3.56862745098039, size: 1 },\r\n // { x: 216, y: 3.56862745098039, size: 1 },\r\n // { x: 216.648648648649, y: 3.76470588235294, size: 1 },\r\n // { x: 217.297297297297, y: 3.64705882352941, size: 1 },\r\n // { x: 217.945945945946, y: 3.41176470588235, size: 1 },\r\n // { x: 218.594594594595, y: 3.52941176470588, size: 1 },\r\n // { x: 219.243243243243, y: 3.72549019607843, size: 1 },\r\n // { x: 219.891891891892, y: 3.80392156862745, size: 1 },\r\n // { x: 220.540540540541, y: 3.56862745098039, size: 1 },\r\n // { x: 221.189189189189, y: 3.72549019607843, size: 1 },\r\n // { x: 221.837837837838, y: 3.64705882352941, size: 1 },\r\n // { x: 222.486486486486, y: 3.6078431372549, size: 1 },\r\n // { x: 223.135135135135, y: 3.76470588235294, size: 1 },\r\n // { x: 223.783783783784, y: 3.72549019607843, size: 1 },\r\n // { x: 224.432432432432, y: 3.64705882352941, size: 1 },\r\n // { x: 225.72972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 226.378378378378, y: 3.76470588235294, size: 1 },\r\n // { x: 227.027027027027, y: 3.56862745098039, size: 1 },\r\n // { x: 227.675675675676, y: 3.52941176470588, size: 1 },\r\n // { x: 228.324324324324, y: 3.29411764705882, size: 1 },\r\n // { x: 228.972972972973, y: 3.33333333333333, size: 1 },\r\n // { x: 229.621621621622, y: 3.80392156862745, size: 1 },\r\n // { x: 230.27027027027, y: 3.49019607843137, size: 1 },\r\n // { x: 230.918918918919, y: 3.52941176470588, size: 1 },\r\n // { x: 231.567567567568, y: 3.56862745098039, size: 1 },\r\n // { x: 232.216216216216, y: 3.72549019607843, size: 1 },\r\n // { x: 232.864864864865, y: 3.64705882352941, size: 1 },\r\n // { x: 233.513513513514, y: 3.76470588235294, size: 1 },\r\n // { x: 234.162162162162, y: 3.52941176470588, size: 1 },\r\n // { x: 234.810810810811, y: 3.88235294117647, size: 1 },\r\n // { x: 235.459459459459, y: 3.68627450980392, size: 1 },\r\n // { x: 236.108108108108, y: 3.72549019607843, size: 1 },\r\n // { x: 236.756756756757, y: 3.68627450980392, size: 1 },\r\n // { x: 238.054054054054, y: 3.72549019607843, size: 1 },\r\n // { x: 238.702702702703, y: 3.49019607843137, size: 1 },\r\n // { x: 239.351351351351, y: 3.68627450980392, size: 1 },\r\n // { x: 240, y: 3.49019607843137, size: 1 },\r\n // { x: 240.648648648649, y: 3.64705882352941, size: 1 },\r\n // { x: 241.297297297297, y: 3.68627450980392, size: 1 },\r\n // { x: 241.945945945946, y: 3.80392156862745, size: 1 },\r\n // { x: 242.594594594595, y: 3.72549019607843, size: 1 },\r\n // { x: 243.243243243243, y: 3.80392156862745, size: 1 },\r\n // { x: 243.891891891892, y: 3.92156862745098, size: 1 },\r\n // { x: 244.540540540541, y: 3.68627450980392, size: 1 },\r\n // { x: 245.189189189189, y: 3.52941176470588, size: 1 },\r\n // { x: 245.837837837838, y: 3.64705882352941, size: 1 },\r\n // { x: 246.486486486486, y: 3.68627450980392, size: 1 },\r\n // { x: 247.783783783784, y: 3.45098039215686, size: 1 },\r\n // { x: 249.081081081081, y: 3.88235294117647, size: 1 },\r\n // { x: 249.72972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 250.378378378378, y: 3.2156862745098, size: 1 },\r\n // { x: 251.027027027027, y: 3.6078431372549, size: 1 },\r\n // { x: 251.675675675676, y: 3.49019607843137, size: 1 },\r\n // { x: 252.972972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 253.621621621622, y: 3.6078431372549, size: 1 },\r\n // { x: 254.27027027027, y: 3.6078431372549, size: 1 },\r\n // { x: 254.918918918919, y: 3.64705882352941, size: 1 },\r\n // { x: 255.567567567568, y: 3.49019607843137, size: 1 },\r\n // { x: 256.216216216216, y: 3.76470588235294, size: 1 },\r\n // { x: 256.864864864865, y: 3.52941176470588, size: 1 },\r\n // { x: 257.513513513513, y: 3.56862745098039, size: 1 },\r\n // { x: 258.162162162162, y: 3.6078431372549, size: 1 },\r\n // { x: 259.459459459459, y: 3.56862745098039, size: 1 },\r\n // { x: 260.108108108108, y: 3.68627450980392, size: 1 },\r\n // { x: 260.756756756757, y: 3.68627450980392, size: 1 },\r\n // { x: 261.405405405405, y: 3.56862745098039, size: 1 },\r\n // { x: 262.702702702703, y: 3.41176470588235, size: 1 },\r\n // { x: 263.351351351351, y: 3.52941176470588, size: 1 },\r\n // { x: 264, y: 3.64705882352941, size: 1 },\r\n // { x: 264.648648648649, y: 3.45098039215686, size: 1 },\r\n // { x: 265.297297297297, y: 3.49019607843137, size: 1 },\r\n // { x: 265.945945945946, y: 3.76470588235294, size: 1 },\r\n // { x: 266.594594594595, y: 3.41176470588235, size: 1 },\r\n // { x: 267.243243243243, y: 3.68627450980392, size: 1 },\r\n // { x: 267.891891891892, y: 3.64705882352941, size: 1 },\r\n // { x: 268.540540540541, y: 3.37254901960784, size: 1 },\r\n // { x: 269.189189189189, y: 3.6078431372549, size: 1 },\r\n // { x: 269.837837837838, y: 3.6078431372549, size: 1 },\r\n // { x: 270.486486486487, y: 3.64705882352941, size: 1 },\r\n // { x: 271.135135135135, y: 3.64705882352941, size: 1 },\r\n // { x: 271.783783783784, y: 3.6078431372549, size: 1 },\r\n // { x: 272.432432432432, y: 3.68627450980392, size: 1 },\r\n // { x: 273.081081081081, y: 3.72549019607843, size: 1 },\r\n // { x: 273.72972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 274.378378378378, y: 3.52941176470588, size: 1 },\r\n // { x: 275.027027027027, y: 3.41176470588235, size: 1 },\r\n // { x: 275.675675675676, y: 3.52941176470588, size: 1 },\r\n // { x: 276.324324324324, y: 3.56862745098039, size: 1 },\r\n // { x: 276.972972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 277.621621621622, y: 3.6078431372549, size: 1 },\r\n // { x: 278.27027027027, y: 3.68627450980392, size: 1 },\r\n // { x: 278.918918918919, y: 3.6078431372549, size: 1 },\r\n // { x: 279.567567567568, y: 3.6078431372549, size: 1 },\r\n // { x: 280.864864864865, y: 3.64705882352941, size: 1 },\r\n // { x: 281.513513513513, y: 3.52941176470588, size: 1 },\r\n // { x: 282.162162162162, y: 3.52941176470588, size: 1 },\r\n // { x: 282.810810810811, y: 3.52941176470588, size: 1 },\r\n // { x: 283.459459459459, y: 3.56862745098039, size: 1 },\r\n // { x: 284.108108108108, y: 3.52941176470588, size: 1 },\r\n // { x: 285.405405405405, y: 3.41176470588235, size: 1 },\r\n // { x: 286.054054054054, y: 3.6078431372549, size: 1 },\r\n // { x: 286.702702702703, y: 3.76470588235294, size: 1 },\r\n // { x: 287.351351351351, y: 3.56862745098039, size: 1 },\r\n // { x: 288, y: 3.52941176470588, size: 1 },\r\n // { x: 288.648648648649, y: 3.49019607843137, size: 1 },\r\n // { x: 289.297297297297, y: 3.49019607843137, size: 1 },\r\n // { x: 289.945945945946, y: 3.52941176470588, size: 1 },\r\n // { x: 290.594594594595, y: 3.96078431372549, size: 1 },\r\n // { x: 291.243243243243, y: 3.68627450980392, size: 1 },\r\n // { x: 291.891891891892, y: 3.56862745098039, size: 1 },\r\n // { x: 292.540540540541, y: 3.41176470588235, size: 1 },\r\n // { x: 293.189189189189, y: 3.52941176470588, size: 1 },\r\n // { x: 293.837837837838, y: 3.49019607843137, size: 1 },\r\n // { x: 294.486486486487, y: 3.52941176470588, size: 1 },\r\n // { x: 295.135135135135, y: 3.56862745098039, size: 1 },\r\n // { x: 295.783783783784, y: 3.56862745098039, size: 1 },\r\n // { x: 296.432432432432, y: 3.56862745098039, size: 1 },\r\n // { x: 297.081081081081, y: 3.68627450980392, size: 1 },\r\n // { x: 297.72972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 298.378378378378, y: 3.76470588235294, size: 1 },\r\n // { x: 299.027027027027, y: 3.64705882352941, size: 1 },\r\n // { x: 300.324324324324, y: 3.64705882352941, size: 1 },\r\n // { x: 300.972972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 301.621621621622, y: 3.64705882352941, size: 1 },\r\n // { x: 302.918918918919, y: 3.64705882352941, size: 1 },\r\n // { x: 303.567567567568, y: 3.68627450980392, size: 1 },\r\n // { x: 304.216216216216, y: 3.6078431372549, size: 1 },\r\n // { x: 304.864864864865, y: 3.68627450980392, size: 1 },\r\n // { x: 305.513513513513, y: 3.64705882352941, size: 1 },\r\n // { x: 306.162162162162, y: 3.72549019607843, size: 1 },\r\n // { x: 306.810810810811, y: 3.52941176470588, size: 1 },\r\n // { x: 307.459459459459, y: 3.56862745098039, size: 1 },\r\n // { x: 308.108108108108, y: 3.56862745098039, size: 1 },\r\n // { x: 308.756756756757, y: 3.6078431372549, size: 1 },\r\n // { x: 309.405405405405, y: 3.72549019607843, size: 1 },\r\n // { x: 310.054054054054, y: 3.52941176470588, size: 1 },\r\n // { x: 310.702702702703, y: 3.64705882352941, size: 1 },\r\n // { x: 311.351351351351, y: 3.64705882352941, size: 1 },\r\n // { x: 312, y: 3.68627450980392, size: 1 },\r\n // { x: 312.648648648649, y: 3.17647058823529, size: 1 },\r\n // { x: 313.297297297297, y: 3.6078431372549, size: 1 },\r\n // { x: 313.945945945946, y: 3.52941176470588, size: 1 },\r\n // { x: 314.594594594595, y: 3.2156862745098, size: 1 },\r\n // { x: 315.243243243243, y: 3.2156862745098, size: 1 },\r\n // { x: 315.891891891892, y: 3.64705882352941, size: 1 },\r\n // { x: 316.540540540541, y: 3.64705882352941, size: 1 },\r\n // { x: 317.189189189189, y: 3.68627450980392, size: 1 },\r\n // { x: 317.837837837838, y: 3.80392156862745, size: 1 },\r\n // { x: 318.486486486487, y: 3.84313725490196, size: 1 },\r\n // { x: 319.135135135135, y: 3.49019607843137, size: 1 },\r\n // { x: 319.783783783784, y: 3.76470588235294, size: 1 },\r\n // { x: 320.432432432432, y: 3.6078431372549, size: 1 },\r\n // { x: 321.081081081081, y: 3.64705882352941, size: 1 },\r\n // { x: 321.72972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 323.027027027027, y: 3.37254901960784, size: 1 },\r\n // { x: 323.675675675676, y: 3.64705882352941, size: 1 },\r\n // { x: 324.324324324324, y: 3.72549019607843, size: 1 },\r\n // { x: 325.621621621622, y: 3.76470588235294, size: 1 },\r\n // { x: 326.27027027027, y: 3.76470588235294, size: 1 },\r\n // { x: 326.918918918919, y: 3.84313725490196, size: 1 },\r\n // { x: 327.567567567568, y: 3.76470588235294, size: 1 },\r\n // { x: 328.216216216216, y: 3.68627450980392, size: 1 },\r\n // { x: 328.864864864865, y: 3.45098039215686, size: 1 },\r\n // { x: 329.513513513513, y: 3.49019607843137, size: 1 },\r\n // { x: 330.162162162162, y: 3.72549019607843, size: 1 },\r\n // { x: 330.810810810811, y: 3.80392156862745, size: 1 },\r\n // { x: 331.459459459459, y: 3.64705882352941, size: 1 },\r\n // { x: 332.108108108108, y: 3.56862745098039, size: 1 },\r\n // { x: 332.756756756757, y: 3.64705882352941, size: 1 },\r\n // { x: 333.405405405405, y: 3.80392156862745, size: 1 },\r\n // { x: 334.054054054054, y: 3.64705882352941, size: 1 },\r\n // { x: 334.702702702703, y: 3.80392156862745, size: 1 },\r\n // { x: 335.351351351351, y: 3.68627450980392, size: 1 },\r\n // { x: 336, y: 3.6078431372549, size: 1 },\r\n // { x: 336.648648648649, y: 3.29411764705882, size: 1 },\r\n // { x: 337.297297297297, y: 3.52941176470588, size: 1 },\r\n // { x: 337.945945945946, y: 3.72549019607843, size: 1 },\r\n // { x: 338.594594594595, y: 3.6078431372549, size: 1 },\r\n // { x: 339.243243243243, y: 3.76470588235294, size: 1 },\r\n // { x: 339.891891891892, y: 3.56862745098039, size: 1 },\r\n // { x: 340.540540540541, y: 3.64705882352941, size: 1 },\r\n // { x: 341.189189189189, y: 3.52941176470588, size: 1 },\r\n // { x: 341.837837837838, y: 3.68627450980392, size: 1 },\r\n // { x: 343.135135135135, y: 3.84313725490196, size: 1 },\r\n // { x: 343.783783783784, y: 3.64705882352941, size: 1 },\r\n // { x: 345.081081081081, y: 3.56862745098039, size: 1 },\r\n // { x: 345.72972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 346.378378378378, y: 3.49019607843137, size: 1 },\r\n // { x: 347.027027027027, y: 3.6078431372549, size: 1 },\r\n // { x: 347.675675675676, y: 3.64705882352941, size: 1 },\r\n // { x: 348.324324324324, y: 3.64705882352941, size: 1 },\r\n // { x: 348.972972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 349.621621621622, y: 3.45098039215686, size: 1 },\r\n // { x: 350.27027027027, y: 3.68627450980392, size: 1 },\r\n // { x: 350.918918918919, y: 3.56862745098039, size: 1 },\r\n // { x: 351.567567567568, y: 3.80392156862745, size: 1 },\r\n // { x: 352.216216216216, y: 3.64705882352941, size: 1 },\r\n // { x: 352.864864864865, y: 3.68627450980392, size: 1 },\r\n // { x: 353.513513513513, y: 3.56862745098039, size: 1 },\r\n // { x: 354.162162162162, y: 3.6078431372549, size: 1 },\r\n // { x: 354.810810810811, y: 3.49019607843137, size: 1 },\r\n // { x: 355.459459459459, y: 3.6078431372549, size: 1 },\r\n // { x: 356.108108108108, y: 3.64705882352941, size: 1 },\r\n // { x: 357.405405405405, y: 3.56862745098039, size: 1 },\r\n // { x: 358.054054054054, y: 3.45098039215686, size: 1 },\r\n // { x: 358.702702702703, y: 3.33333333333333, size: 1 },\r\n // { x: 359.351351351351, y: 3.41176470588235, size: 1 },\r\n // { x: 0.647482014388489, y: 3.37254901960784, size: 1 },\r\n // { x: 1.29496402877698, y: 3.56862745098039, size: 1 },\r\n // { x: 2.58992805755396, y: 3.49019607843137, size: 1 },\r\n // { x: 3.23741007194245, y: 3.41176470588235, size: 1 },\r\n // { x: 3.88489208633094, y: 3.45098039215686, size: 1 },\r\n // { x: 4.53237410071942, y: 3.49019607843137, size: 1 },\r\n // { x: 5.17985611510791, y: 3.45098039215686, size: 1 },\r\n // { x: 6.47482014388489, y: 3.52941176470588, size: 1 },\r\n // { x: 7.76978417266187, y: 3.92156862745098, size: 1 },\r\n // { x: 8.41726618705036, y: 3.49019607843137, size: 1 },\r\n // { x: 9.71223021582734, y: 3.52941176470588, size: 1 },\r\n // { x: 10.3597122302158, y: 3.56862745098039, size: 1 },\r\n // { x: 11.0071942446043, y: 3.68627450980392, size: 1 },\r\n // { x: 12.3021582733813, y: 3.41176470588235, size: 1 },\r\n // { x: 12.9496402877698, y: 3.56862745098039, size: 1 },\r\n // { x: 14.2446043165468, y: 3.49019607843137, size: 1 },\r\n // { x: 14.8920863309353, y: 3.56862745098039, size: 1 },\r\n // { x: 16.1870503597122, y: 3.56862745098039, size: 1 },\r\n // { x: 16.8345323741007, y: 3.6078431372549, size: 1 },\r\n // { x: 17.4820143884892, y: 3.37254901960784, size: 1 },\r\n // { x: 18.1294964028777, y: 3.49019607843137, size: 1 },\r\n // { x: 18.7769784172662, y: 3.33333333333333, size: 1 },\r\n // { x: 20.0719424460432, y: 3.37254901960784, size: 1 },\r\n // { x: 20.7194244604317, y: 3.41176470588235, size: 1 },\r\n // { x: 21.3669064748201, y: 3.68627450980392, size: 1 },\r\n // { x: 23.3093525179856, y: 3.52941176470588, size: 1 },\r\n // { x: 23.9568345323741, y: 3.64705882352941, size: 1 },\r\n // { x: 25.2517985611511, y: 3.64705882352941, size: 1 },\r\n // { x: 26.5467625899281, y: 3.68627450980392, size: 1 },\r\n // { x: 27.841726618705, y: 3.68627450980392, size: 1 },\r\n // { x: 29.136690647482, y: 3.49019607843137, size: 1 },\r\n // { x: 29.7841726618705, y: 3.68627450980392, size: 1 },\r\n // { x: 30.431654676259, y: 3.80392156862745, size: 1 },\r\n // { x: 31.0791366906475, y: 3.64705882352941, size: 1 },\r\n // { x: 33.6690647482014, y: 3.56862745098039, size: 1 },\r\n // { x: 34.3165467625899, y: 3.56862745098039, size: 1 },\r\n // { x: 35.6115107913669, y: 3.64705882352941, size: 1 },\r\n // { x: 36.9064748201439, y: 3.6078431372549, size: 1 },\r\n // { x: 37.5539568345324, y: 3.45098039215686, size: 1 },\r\n // { x: 38.8489208633094, y: 3.49019607843137, size: 1 },\r\n // { x: 39.4964028776978, y: 3.56862745098039, size: 1 },\r\n // { x: 40.1438848920863, y: 3.68627450980392, size: 1 },\r\n // { x: 42.0863309352518, y: 3.6078431372549, size: 1 },\r\n // { x: 42.7338129496403, y: 3.64705882352941, size: 1 },\r\n // { x: 43.3812949640288, y: 3.52941176470588, size: 1 },\r\n // { x: 44.0287769784173, y: 3.68627450980392, size: 1 },\r\n // { x: 44.6762589928058, y: 3.64705882352941, size: 1 },\r\n // { x: 46.6187050359712, y: 3.56862745098039, size: 1 },\r\n // { x: 49.2086330935252, y: 3.29411764705882, size: 1 },\r\n // { x: 49.8561151079137, y: 3.52941176470588, size: 1 },\r\n // { x: 50.5035971223022, y: 3.68627450980392, size: 1 },\r\n // { x: 51.1510791366906, y: 3.52941176470588, size: 1 },\r\n // { x: 51.7985611510791, y: 3.6078431372549, size: 1 },\r\n // { x: 52.4460431654676, y: 3.56862745098039, size: 1 },\r\n // { x: 54.3884892086331, y: 3.84313725490196, size: 1 },\r\n // { x: 55.0359712230216, y: 3.52941176470588, size: 1 },\r\n // { x: 55.6834532374101, y: 3.52941176470588, size: 1 },\r\n // { x: 56.3309352517986, y: 3.64705882352941, size: 1 },\r\n // { x: 56.9784172661871, y: 3.80392156862745, size: 1 },\r\n // { x: 58.273381294964, y: 3.76470588235294, size: 1 },\r\n // { x: 58.9208633093525, y: 3.56862745098039, size: 1 },\r\n // { x: 60.2158273381295, y: 3.52941176470588, size: 1 },\r\n // { x: 60.863309352518, y: 3.56862745098039, size: 1 },\r\n // { x: 61.5107913669065, y: 3.72549019607843, size: 1 },\r\n // { x: 62.8057553956835, y: 3.49019607843137, size: 1 },\r\n // { x: 63.4532374100719, y: 3.37254901960784, size: 1 },\r\n // { x: 64.1007194244604, y: 3.29411764705882, size: 1 },\r\n // { x: 64.7482014388489, y: 3.25490196078431, size: 1 },\r\n // { x: 65.3956834532374, y: 3.37254901960784, size: 1 },\r\n // { x: 66.0431654676259, y: 3.25490196078431, size: 1 },\r\n // { x: 66.6906474820144, y: 3.56862745098039, size: 1 },\r\n // { x: 67.3381294964029, y: 3.52941176470588, size: 1 },\r\n // { x: 67.9856115107914, y: 3.52941176470588, size: 1 },\r\n // { x: 68.6330935251799, y: 3.68627450980392, size: 1 },\r\n // { x: 69.2805755395683, y: 3.37254901960784, size: 1 },\r\n // { x: 69.9280575539568, y: 3.45098039215686, size: 1 },\r\n // { x: 70.5755395683453, y: 3.33333333333333, size: 1 },\r\n // { x: 71.2230215827338, y: 3.33333333333333, size: 1 },\r\n // { x: 71.8705035971223, y: 3.52941176470588, size: 1 },\r\n // { x: 73.1654676258993, y: 3.45098039215686, size: 1 },\r\n // { x: 73.8129496402878, y: 3.37254901960784, size: 1 },\r\n // { x: 74.4604316546763, y: 3.45098039215686, size: 1 },\r\n // { x: 75.7553956834532, y: 3.37254901960784, size: 1 },\r\n // { x: 76.4028776978417, y: 3.37254901960784, size: 1 },\r\n // { x: 77.0503597122302, y: 3.2156862745098, size: 1 },\r\n // { x: 77.6978417266187, y: 3.6078431372549, size: 1 },\r\n // { x: 78.9928057553957, y: 3.56862745098039, size: 1 },\r\n // { x: 79.6402877697842, y: 3.45098039215686, size: 1 },\r\n // { x: 80.2877697841727, y: 3.33333333333333, size: 1 },\r\n // { x: 80.9352517985612, y: 3.41176470588235, size: 1 },\r\n // { x: 81.5827338129496, y: 3.45098039215686, size: 1 },\r\n // { x: 82.2302158273381, y: 3.29411764705882, size: 1 },\r\n // { x: 82.8776978417266, y: 3.37254901960784, size: 1 },\r\n // { x: 83.5251798561151, y: 3.2156862745098, size: 1 },\r\n // { x: 84.1726618705036, y: 3.09803921568627, size: 1 },\r\n // { x: 84.8201438848921, y: 2.82352941176471, size: 1 },\r\n // { x: 86.1151079136691, y: 3.49019607843137, size: 1 },\r\n // { x: 87.410071942446, y: 3.52941176470588, size: 1 },\r\n // { x: 88.705035971223, y: 3.68627450980392, size: 1 },\r\n // { x: 89.3525179856115, y: 3.64705882352941, size: 1 },\r\n // { x: 90, y: 3.25490196078431, size: 1 },\r\n // { x: 90.6474820143885, y: 3.52941176470588, size: 1 },\r\n // { x: 91.294964028777, y: 3.17647058823529, size: 1 },\r\n // { x: 91.9424460431655, y: 3.33333333333333, size: 1 },\r\n // { x: 92.589928057554, y: 3.41176470588235, size: 1 },\r\n // { x: 93.2374100719424, y: 3.41176470588235, size: 1 },\r\n // { x: 93.8848920863309, y: 3.64705882352941, size: 1 },\r\n // { x: 94.5323741007194, y: 3.56862745098039, size: 1 },\r\n // { x: 95.1798561151079, y: 3.41176470588235, size: 1 },\r\n // { x: 95.8273381294964, y: 3.45098039215686, size: 1 },\r\n // { x: 97.1223021582734, y: 3.41176470588235, size: 1 },\r\n // { x: 97.7697841726619, y: 3.84313725490196, size: 1 },\r\n // { x: 98.4172661870504, y: 3.33333333333333, size: 1 },\r\n // { x: 99.0647482014388, y: 3.6078431372549, size: 1 },\r\n // { x: 99.7122302158273, y: 3.72549019607843, size: 1 },\r\n // { x: 100.359712230216, y: 3.6078431372549, size: 1 },\r\n // { x: 101.007194244604, y: 3.68627450980392, size: 1 },\r\n // { x: 101.654676258993, y: 3.52941176470588, size: 1 },\r\n // { x: 102.302158273381, y: 3.37254901960784, size: 1 },\r\n // { x: 103.597122302158, y: 3.29411764705882, size: 1 },\r\n // { x: 104.244604316547, y: 3.41176470588235, size: 1 },\r\n // { x: 104.892086330935, y: 3.33333333333333, size: 1 },\r\n // { x: 105.539568345324, y: 3.29411764705882, size: 1 },\r\n // { x: 106.187050359712, y: 2.94117647058824, size: 1 },\r\n // { x: 106.834532374101, y: 3.37254901960784, size: 1 },\r\n // { x: 107.482014388489, y: 3.37254901960784, size: 1 },\r\n // { x: 108.129496402878, y: 3.33333333333333, size: 1 },\r\n // { x: 108.776978417266, y: 3.25490196078431, size: 1 },\r\n // { x: 109.424460431655, y: 3.37254901960784, size: 1 },\r\n // { x: 110.071942446043, y: 3.41176470588235, size: 1 },\r\n // { x: 110.719424460432, y: 3.68627450980392, size: 1 },\r\n // { x: 111.36690647482, y: 3.37254901960784, size: 1 },\r\n // { x: 112.014388489209, y: 3.37254901960784, size: 1 },\r\n // { x: 112.661870503597, y: 3.33333333333333, size: 1 },\r\n // { x: 114.604316546763, y: 3.52941176470588, size: 1 },\r\n // { x: 115.251798561151, y: 3.49019607843137, size: 1 },\r\n // { x: 116.546762589928, y: 3.25490196078431, size: 1 },\r\n // { x: 117.194244604317, y: 3.37254901960784, size: 1 },\r\n // { x: 117.841726618705, y: 3.2156862745098, size: 1 },\r\n // { x: 118.489208633094, y: 3.37254901960784, size: 1 },\r\n // { x: 119.136690647482, y: 3.33333333333333, size: 1 },\r\n // { x: 119.784172661871, y: 3.09803921568627, size: 1 },\r\n // { x: 120.431654676259, y: 3.25490196078431, size: 1 },\r\n // { x: 121.726618705036, y: 3.37254901960784, size: 1 },\r\n // { x: 122.374100719424, y: 3.2156862745098, size: 1 },\r\n // { x: 123.021582733813, y: 3.49019607843137, size: 1 },\r\n // { x: 124.31654676259, y: 3.25490196078431, size: 1 },\r\n // { x: 124.964028776978, y: 3.29411764705882, size: 1 },\r\n // { x: 126.258992805755, y: 3.49019607843137, size: 1 },\r\n // { x: 126.906474820144, y: 3.17647058823529, size: 1 },\r\n // { x: 127.553956834532, y: 3.29411764705882, size: 1 },\r\n // { x: 128.201438848921, y: 3.13725490196078, size: 1 },\r\n // { x: 128.848920863309, y: 3.52941176470588, size: 1 },\r\n // { x: 130.143884892086, y: 3.37254901960784, size: 1 },\r\n // { x: 130.791366906475, y: 3.33333333333333, size: 1 },\r\n // { x: 131.438848920863, y: 3.41176470588235, size: 1 },\r\n // { x: 132.086330935252, y: 3.56862745098039, size: 1 },\r\n // { x: 134.028776978417, y: 3.45098039215686, size: 1 },\r\n // { x: 134.676258992806, y: 3.45098039215686, size: 1 },\r\n // { x: 135.323741007194, y: 3.52941176470588, size: 1 },\r\n // { x: 135.971223021583, y: 3.56862745098039, size: 1 },\r\n // { x: 136.618705035971, y: 3.6078431372549, size: 1 },\r\n // { x: 137.26618705036, y: 3.45098039215686, size: 1 },\r\n // { x: 138.561151079137, y: 3.29411764705882, size: 1 },\r\n // { x: 139.208633093525, y: 3.29411764705882, size: 1 },\r\n // { x: 140.503597122302, y: 3.45098039215686, size: 1 },\r\n // { x: 141.151079136691, y: 3.41176470588235, size: 1 },\r\n // { x: 141.798561151079, y: 3.52941176470588, size: 1 },\r\n // { x: 142.446043165468, y: 3.56862745098039, size: 1 },\r\n // { x: 143.093525179856, y: 3.41176470588235, size: 1 },\r\n // { x: 143.741007194245, y: 3.68627450980392, size: 1 },\r\n // { x: 144.388489208633, y: 3.6078431372549, size: 1 },\r\n // { x: 146.330935251799, y: 3.56862745098039, size: 1 },\r\n // { x: 146.978417266187, y: 3.37254901960784, size: 1 },\r\n // { x: 147.625899280576, y: 3.88235294117647, size: 1 },\r\n // { x: 148.273381294964, y: 3.41176470588235, size: 1 },\r\n // { x: 149.568345323741, y: 3.09803921568627, size: 1 },\r\n // { x: 150.863309352518, y: 3.56862745098039, size: 1 },\r\n // { x: 152.158273381295, y: 3.6078431372549, size: 1 },\r\n // { x: 154.10071942446, y: 3.84313725490196, size: 1 },\r\n // { x: 154.748201438849, y: 3.84313725490196, size: 1 },\r\n // { x: 155.395683453237, y: 3.52941176470588, size: 1 },\r\n // { x: 156.043165467626, y: 3.76470588235294, size: 1 },\r\n // { x: 156.690647482014, y: 3.45098039215686, size: 1 },\r\n // { x: 157.338129496403, y: 3.64705882352941, size: 1 },\r\n // { x: 158.63309352518, y: 3.6078431372549, size: 1 },\r\n // { x: 159.280575539568, y: 3.56862745098039, size: 1 },\r\n // { x: 159.928057553957, y: 3.56862745098039, size: 1 },\r\n // { x: 160.575539568345, y: 3.45098039215686, size: 1 },\r\n // { x: 161.870503597122, y: 3.56862745098039, size: 1 },\r\n // { x: 163.165467625899, y: 3.68627450980392, size: 1 },\r\n // { x: 163.812949640288, y: 3.64705882352941, size: 1 },\r\n // { x: 165.107913669065, y: 3.64705882352941, size: 1 },\r\n // { x: 165.755395683453, y: 3.72549019607843, size: 1 },\r\n // { x: 166.402877697842, y: 3.52941176470588, size: 1 },\r\n // { x: 168.345323741007, y: 3.52941176470588, size: 1 },\r\n // { x: 168.992805755396, y: 3.41176470588235, size: 1 },\r\n // { x: 169.640287769784, y: 3.41176470588235, size: 1 },\r\n // { x: 170.287769784173, y: 3.6078431372549, size: 1 },\r\n // { x: 170.935251798561, y: 3.25490196078431, size: 1 },\r\n // { x: 172.230215827338, y: 3.25490196078431, size: 1 },\r\n // { x: 172.877697841727, y: 3.37254901960784, size: 1 },\r\n // { x: 174.172661870504, y: 3.45098039215686, size: 1 },\r\n // { x: 174.820143884892, y: 3.33333333333333, size: 1 },\r\n // { x: 175.467625899281, y: 3.45098039215686, size: 1 },\r\n // { x: 176.115107913669, y: 3.76470588235294, size: 1 },\r\n // { x: 176.762589928058, y: 3.45098039215686, size: 1 },\r\n // { x: 177.410071942446, y: 3.52941176470588, size: 1 },\r\n // { x: 178.705035971223, y: 3.29411764705882, size: 1 },\r\n // { x: 179.352517985612, y: 3.37254901960784, size: 1 },\r\n // { x: 180.647482014388, y: 3.41176470588235, size: 1 },\r\n // { x: 182.589928057554, y: 3.45098039215686, size: 1 },\r\n // { x: 183.237410071942, y: 3.29411764705882, size: 1 },\r\n // { x: 183.884892086331, y: 3.41176470588235, size: 1 },\r\n // { x: 184.532374100719, y: 3.72549019607843, size: 1 },\r\n // { x: 185.179856115108, y: 3.41176470588235, size: 1 },\r\n // { x: 185.827338129496, y: 3.56862745098039, size: 1 },\r\n // { x: 186.474820143885, y: 3.49019607843137, size: 1 },\r\n // { x: 187.122302158273, y: 3.41176470588235, size: 1 },\r\n // { x: 187.769784172662, y: 3.37254901960784, size: 1 },\r\n // { x: 189.064748201439, y: 3.41176470588235, size: 1 },\r\n // { x: 189.712230215827, y: 3.56862745098039, size: 1 },\r\n // { x: 190.359712230216, y: 3.72549019607843, size: 1 },\r\n // { x: 191.654676258993, y: 3.52941176470588, size: 1 },\r\n // { x: 192.94964028777, y: 3.49019607843137, size: 1 },\r\n // { x: 193.597122302158, y: 3.52941176470588, size: 1 },\r\n // { x: 194.244604316547, y: 3.45098039215686, size: 1 },\r\n // { x: 195.539568345324, y: 3.45098039215686, size: 1 },\r\n // { x: 197.482014388489, y: 3.64705882352941, size: 1 },\r\n // { x: 198.776978417266, y: 3.80392156862745, size: 1 },\r\n // { x: 199.424460431655, y: 3.56862745098039, size: 1 },\r\n // { x: 200.071942446043, y: 3.29411764705882, size: 1 },\r\n // { x: 200.719424460432, y: 3.84313725490196, size: 1 },\r\n // { x: 201.36690647482, y: 3.45098039215686, size: 1 },\r\n // { x: 203.956834532374, y: 3.68627450980392, size: 1 },\r\n // { x: 205.251798561151, y: 3.56862745098039, size: 1 },\r\n // { x: 205.89928057554, y: 3.64705882352941, size: 1 },\r\n // { x: 206.546762589928, y: 3.72549019607843, size: 1 },\r\n // { x: 209.784172661871, y: 3.33333333333333, size: 1 },\r\n // { x: 211.726618705036, y: 3.37254901960784, size: 1 },\r\n // { x: 213.021582733813, y: 3.45098039215686, size: 1 },\r\n // { x: 213.669064748201, y: 3.68627450980392, size: 1 },\r\n // { x: 214.31654676259, y: 3.6078431372549, size: 1 },\r\n // { x: 214.964028776978, y: 3.45098039215686, size: 1 },\r\n // { x: 215.611510791367, y: 3.37254901960784, size: 1 },\r\n // { x: 216.258992805755, y: 3.64705882352941, size: 1 },\r\n // { x: 216.906474820144, y: 3.56862745098039, size: 1 },\r\n // { x: 217.553956834532, y: 3.45098039215686, size: 1 },\r\n // { x: 218.201438848921, y: 3.49019607843137, size: 1 },\r\n // { x: 218.848920863309, y: 3.76470588235294, size: 1 },\r\n // { x: 220.143884892086, y: 3.64705882352941, size: 1 },\r\n // { x: 220.791366906475, y: 3.45098039215686, size: 1 },\r\n // { x: 221.438848920863, y: 3.76470588235294, size: 1 },\r\n // { x: 222.086330935252, y: 3.49019607843137, size: 1 },\r\n // { x: 223.381294964029, y: 3.52941176470588, size: 1 },\r\n // { x: 224.028776978417, y: 3.52941176470588, size: 1 },\r\n // { x: 224.676258992806, y: 3.41176470588235, size: 1 },\r\n // { x: 225.323741007194, y: 3.6078431372549, size: 1 },\r\n // { x: 225.971223021583, y: 3.49019607843137, size: 1 },\r\n // { x: 226.618705035971, y: 3.76470588235294, size: 1 },\r\n // { x: 228.561151079137, y: 3.37254901960784, size: 1 },\r\n // { x: 229.856115107914, y: 3.45098039215686, size: 1 },\r\n // { x: 230.503597122302, y: 3.56862745098039, size: 1 },\r\n // { x: 231.151079136691, y: 3.37254901960784, size: 1 },\r\n // { x: 231.798561151079, y: 3.6078431372549, size: 1 },\r\n // { x: 232.446043165468, y: 3.45098039215686, size: 1 },\r\n // { x: 233.741007194245, y: 3.52941176470588, size: 1 },\r\n // { x: 235.035971223022, y: 3.2156862745098, size: 1 },\r\n // { x: 235.68345323741, y: 3.05882352941176, size: 1 },\r\n // { x: 236.978417266187, y: 3.72549019607843, size: 1 },\r\n // { x: 238.273381294964, y: 3.56862745098039, size: 1 },\r\n // { x: 239.568345323741, y: 3.72549019607843, size: 1 },\r\n // { x: 240.863309352518, y: 4, size: 1 },\r\n // { x: 241.510791366906, y: 3.68627450980392, size: 1 },\r\n // { x: 242.805755395683, y: 3.56862745098039, size: 1 },\r\n // { x: 243.453237410072, y: 3.49019607843137, size: 1 },\r\n // { x: 244.748201438849, y: 3.84313725490196, size: 1 },\r\n // { x: 245.395683453237, y: 3.56862745098039, size: 1 },\r\n // { x: 246.690647482014, y: 3.68627450980392, size: 1 },\r\n // { x: 247.338129496403, y: 3.6078431372549, size: 1 },\r\n // { x: 247.985611510791, y: 3.92156862745098, size: 1 },\r\n // { x: 248.63309352518, y: 3.72549019607843, size: 1 },\r\n // { x: 249.928057553957, y: 3.49019607843137, size: 1 },\r\n // { x: 251.870503597122, y: 3.41176470588235, size: 1 },\r\n // { x: 252.517985611511, y: 3.68627450980392, size: 1 },\r\n // { x: 253.165467625899, y: 3.76470588235294, size: 1 },\r\n // { x: 253.812949640288, y: 3.64705882352941, size: 1 },\r\n // { x: 255.755395683453, y: 3.56862745098039, size: 1 },\r\n // { x: 257.05035971223, y: 3.80392156862745, size: 1 },\r\n // { x: 257.697841726619, y: 3.52941176470588, size: 1 },\r\n // { x: 258.992805755396, y: 3.72549019607843, size: 1 },\r\n // { x: 259.640287769784, y: 3.52941176470588, size: 1 },\r\n // { x: 260.287769784173, y: 3.80392156862745, size: 1 },\r\n // { x: 260.935251798561, y: 3.68627450980392, size: 1 },\r\n // { x: 261.58273381295, y: 3.33333333333333, size: 1 },\r\n // { x: 262.877697841727, y: 3.56862745098039, size: 1 },\r\n // { x: 264.172661870504, y: 3.56862745098039, size: 1 },\r\n // { x: 264.820143884892, y: 3.64705882352941, size: 1 },\r\n // { x: 265.467625899281, y: 3.52941176470588, size: 1 },\r\n // { x: 266.115107913669, y: 3.45098039215686, size: 1 },\r\n // { x: 266.762589928058, y: 3.76470588235294, size: 1 },\r\n // { x: 268.705035971223, y: 3.49019607843137, size: 1 },\r\n // { x: 269.352517985611, y: 3.49019607843137, size: 1 },\r\n // { x: 270.647482014389, y: 3.56862745098039, size: 1 },\r\n // { x: 271.294964028777, y: 3.76470588235294, size: 1 },\r\n // { x: 271.942446043165, y: 3.6078431372549, size: 1 },\r\n // { x: 272.589928057554, y: 3.72549019607843, size: 1 },\r\n // { x: 273.237410071942, y: 3.41176470588235, size: 1 },\r\n // { x: 273.884892086331, y: 3.76470588235294, size: 1 },\r\n // { x: 274.532374100719, y: 3.72549019607843, size: 1 },\r\n // { x: 275.827338129496, y: 3.96078431372549, size: 1 },\r\n // { x: 277.769784172662, y: 3.45098039215686, size: 1 },\r\n // { x: 278.41726618705, y: 3.29411764705882, size: 1 },\r\n // { x: 279.064748201439, y: 3.29411764705882, size: 1 },\r\n // { x: 279.712230215827, y: 3.64705882352941, size: 1 },\r\n // { x: 280.359712230216, y: 3.80392156862745, size: 1 },\r\n // { x: 282.94964028777, y: 3.6078431372549, size: 1 },\r\n // { x: 284.244604316547, y: 3.52941176470588, size: 1 },\r\n // { x: 285.539568345324, y: 4.07843137254902, size: 1 },\r\n // { x: 286.187050359712, y: 3.76470588235294, size: 1 },\r\n // { x: 286.834532374101, y: 3.64705882352941, size: 1 },\r\n // { x: 287.482014388489, y: 3.41176470588235, size: 1 },\r\n // { x: 288.129496402878, y: 3.56862745098039, size: 1 },\r\n // { x: 289.424460431655, y: 3.80392156862745, size: 1 },\r\n // { x: 290.719424460432, y: 3.56862745098039, size: 1 },\r\n // { x: 291.36690647482, y: 3.76470588235294, size: 1 },\r\n // { x: 292.014388489209, y: 3.64705882352941, size: 1 },\r\n // { x: 293.309352517986, y: 3.72549019607843, size: 1 },\r\n // { x: 294.604316546763, y: 3.56862745098039, size: 1 },\r\n // { x: 297.194244604317, y: 3.72549019607843, size: 1 },\r\n // { x: 297.841726618705, y: 3.6078431372549, size: 1 },\r\n // { x: 298.489208633094, y: 3.37254901960784, size: 1 },\r\n // { x: 299.136690647482, y: 3.68627450980392, size: 1 },\r\n // { x: 299.784172661871, y: 3.17647058823529, size: 1 },\r\n // { x: 300.431654676259, y: 3.33333333333333, size: 1 },\r\n // { x: 302.374100719424, y: 3.76470588235294, size: 1 },\r\n // { x: 303.669064748201, y: 3.80392156862745, size: 1 },\r\n // { x: 304.31654676259, y: 3.6078431372549, size: 1 },\r\n // { x: 305.611510791367, y: 3.64705882352941, size: 1 },\r\n // { x: 307.553956834532, y: 3.72549019607843, size: 1 },\r\n // { x: 308.201438848921, y: 3.72549019607843, size: 1 },\r\n // { x: 308.848920863309, y: 3.49019607843137, size: 1 },\r\n // { x: 309.496402877698, y: 3.68627450980392, size: 1 },\r\n // { x: 310.791366906475, y: 3.84313725490196, size: 1 },\r\n // { x: 311.438848920863, y: 3.68627450980392, size: 1 },\r\n // { x: 312.086330935252, y: 3.64705882352941, size: 1 },\r\n // { x: 312.73381294964, y: 3.80392156862745, size: 1 },\r\n // { x: 313.381294964029, y: 3.64705882352941, size: 1 },\r\n // { x: 314.028776978417, y: 3.52941176470588, size: 1 },\r\n // { x: 314.676258992806, y: 3.88235294117647, size: 1 },\r\n // { x: 315.971223021583, y: 3.72549019607843, size: 1 },\r\n // { x: 316.618705035971, y: 3.80392156862745, size: 1 },\r\n // { x: 317.26618705036, y: 3.92156862745098, size: 1 },\r\n // { x: 317.913669064748, y: 3.49019607843137, size: 1 },\r\n // { x: 320.503597122302, y: 3.45098039215686, size: 1 },\r\n // { x: 321.151079136691, y: 3.45098039215686, size: 1 },\r\n // { x: 321.798561151079, y: 3.72549019607843, size: 1 },\r\n // { x: 322.446043165468, y: 3.45098039215686, size: 1 },\r\n // { x: 323.093525179856, y: 3.52941176470588, size: 1 },\r\n // { x: 325.035971223022, y: 3.56862745098039, size: 1 },\r\n // { x: 326.330935251799, y: 3.6078431372549, size: 1 },\r\n // { x: 326.978417266187, y: 3.56862745098039, size: 1 },\r\n // { x: 327.625899280576, y: 3.41176470588235, size: 1 },\r\n // { x: 328.273381294964, y: 3.72549019607843, size: 1 },\r\n // { x: 329.568345323741, y: 3.72549019607843, size: 1 },\r\n // { x: 330.215827338129, y: 3.52941176470588, size: 1 },\r\n // { x: 330.863309352518, y: 3.68627450980392, size: 1 },\r\n // { x: 331.510791366906, y: 3.49019607843137, size: 1 },\r\n // { x: 332.158273381295, y: 3.49019607843137, size: 1 },\r\n // { x: 333.453237410072, y: 3.52941176470588, size: 1 },\r\n // { x: 334.748201438849, y: 3.72549019607843, size: 1 },\r\n // { x: 335.395683453237, y: 3.45098039215686, size: 1 },\r\n // { x: 336.043165467626, y: 3.68627450980392, size: 1 },\r\n // { x: 336.690647482014, y: 3.68627450980392, size: 1 },\r\n // { x: 337.985611510791, y: 3.64705882352941, size: 1 },\r\n // { x: 339.928057553957, y: 3.41176470588235, size: 1 },\r\n // { x: 340.575539568345, y: 3.52941176470588, size: 1 },\r\n // { x: 341.223021582734, y: 3.76470588235294, size: 1 },\r\n // { x: 343.165467625899, y: 3.49019607843137, size: 1 },\r\n // { x: 343.812949640288, y: 3.56862745098039, size: 1 },\r\n // { x: 345.755395683453, y: 3.68627450980392, size: 1 },\r\n // { x: 346.402877697842, y: 3.52941176470588, size: 1 },\r\n // { x: 347.05035971223, y: 3.72549019607843, size: 1 },\r\n // { x: 348.345323741007, y: 3.33333333333333, size: 1 },\r\n // { x: 348.992805755396, y: 3.56862745098039, size: 1 },\r\n // { x: 349.640287769784, y: 3.84313725490196, size: 1 },\r\n // { x: 350.935251798561, y: 3.49019607843137, size: 1 },\r\n // { x: 351.58273381295, y: 3.56862745098039, size: 1 },\r\n // { x: 352.230215827338, y: 3.52941176470588, size: 1 },\r\n // { x: 353.525179856115, y: 4, size: 1 },\r\n // { x: 354.172661870504, y: 3.49019607843137, size: 1 },\r\n // { x: 354.820143884892, y: 3.92156862745098, size: 1 },\r\n // { x: 355.467625899281, y: 3.84313725490196, size: 1 },\r\n // { x: 356.115107913669, y: 3.72549019607843, size: 1 },\r\n // { x: 356.762589928058, y: 3.64705882352941, size: 1 },\r\n // { x: 357.410071942446, y: 3.6078431372549, size: 1 },\r\n // { x: 358.057553956835, y: 3.6078431372549, size: 1 },\r\n // { x: 358.705035971223, y: 3.49019607843137, size: 1 },\r\n // { x: 359.352517985611, y: 3.52941176470588, size: 1 },\r\n // { x: 0.647482014388489, y: 3.76470588235294, size: 1 },\r\n // { x: 4.53237410071942, y: 3.56862745098039, size: 1 },\r\n // { x: 5.8273381294964, y: 3.52941176470588, size: 1 },\r\n // { x: 6.47482014388489, y: 3.25490196078431, size: 1 },\r\n // { x: 7.12230215827338, y: 3.52941176470588, size: 1 },\r\n // { x: 7.76978417266187, y: 3.64705882352941, size: 1 },\r\n // { x: 8.41726618705036, y: 3.45098039215686, size: 1 },\r\n // { x: 9.06474820143885, y: 3.56862745098039, size: 1 },\r\n // { x: 9.71223021582734, y: 3.49019607843137, size: 1 },\r\n // { x: 10.3597122302158, y: 3.29411764705882, size: 1 },\r\n // { x: 11.0071942446043, y: 3.6078431372549, size: 1 },\r\n // { x: 13.5971223021583, y: 3.64705882352941, size: 1 },\r\n // { x: 16.1870503597122, y: 3.80392156862745, size: 1 },\r\n // { x: 16.8345323741007, y: 3.56862745098039, size: 1 },\r\n // { x: 17.4820143884892, y: 3.68627450980392, size: 1 },\r\n // { x: 19.4244604316547, y: 3.68627450980392, size: 1 },\r\n // { x: 20.0719424460432, y: 3.64705882352941, size: 1 },\r\n // { x: 20.7194244604317, y: 3.68627450980392, size: 1 },\r\n // { x: 21.3669064748201, y: 3.41176470588235, size: 1 },\r\n // { x: 22.0143884892086, y: 3.64705882352941, size: 1 },\r\n // { x: 22.6618705035971, y: 3.41176470588235, size: 1 },\r\n // { x: 23.3093525179856, y: 3.49019607843137, size: 1 },\r\n // { x: 23.9568345323741, y: 3.96078431372549, size: 1 },\r\n // { x: 24.6043165467626, y: 3.33333333333333, size: 1 },\r\n // { x: 25.2517985611511, y: 3.37254901960784, size: 1 },\r\n // { x: 25.8992805755396, y: 3.2156862745098, size: 1 },\r\n // { x: 26.5467625899281, y: 3.17647058823529, size: 1 },\r\n // { x: 27.1942446043165, y: 3.33333333333333, size: 1 },\r\n // { x: 27.841726618705, y: 3.56862745098039, size: 1 },\r\n // { x: 28.4892086330935, y: 3.64705882352941, size: 1 },\r\n // { x: 29.136690647482, y: 3.56862745098039, size: 1 },\r\n // { x: 29.7841726618705, y: 3.45098039215686, size: 1 },\r\n // { x: 30.431654676259, y: 3.56862745098039, size: 1 },\r\n // { x: 33.0215827338129, y: 3.52941176470588, size: 1 },\r\n // { x: 34.3165467625899, y: 3.41176470588235, size: 1 },\r\n // { x: 34.9640287769784, y: 3.41176470588235, size: 1 },\r\n // { x: 35.6115107913669, y: 3.45098039215686, size: 1 },\r\n // { x: 36.2589928057554, y: 3.52941176470588, size: 1 },\r\n // { x: 37.5539568345324, y: 3.64705882352941, size: 1 },\r\n // { x: 38.2014388489209, y: 3.56862745098039, size: 1 },\r\n // { x: 39.4964028776978, y: 3.52941176470588, size: 1 },\r\n // { x: 40.7913669064748, y: 3.45098039215686, size: 1 },\r\n // { x: 42.7338129496403, y: 3.56862745098039, size: 1 },\r\n // { x: 43.3812949640288, y: 3.37254901960784, size: 1 },\r\n // { x: 44.6762589928058, y: 3.41176470588235, size: 1 },\r\n // { x: 45.3237410071942, y: 3.52941176470588, size: 1 },\r\n // { x: 47.2661870503597, y: 3.49019607843137, size: 1 },\r\n // { x: 47.9136690647482, y: 2.90196078431373, size: 1 },\r\n // { x: 48.5611510791367, y: 2.7843137254902, size: 1 },\r\n // { x: 49.2086330935252, y: 2.98039215686275, size: 1 },\r\n // { x: 49.8561151079137, y: 2.94117647058824, size: 1 },\r\n // { x: 51.1510791366906, y: 3.68627450980392, size: 1 },\r\n // { x: 51.7985611510791, y: 3.76470588235294, size: 1 },\r\n // { x: 52.4460431654676, y: 3.72549019607843, size: 1 },\r\n // { x: 53.0935251798561, y: 3.56862745098039, size: 1 },\r\n // { x: 53.7410071942446, y: 3.56862745098039, size: 1 },\r\n // { x: 54.3884892086331, y: 3.80392156862745, size: 1 },\r\n // { x: 55.6834532374101, y: 3.68627450980392, size: 1 },\r\n // { x: 56.9784172661871, y: 3.6078431372549, size: 1 },\r\n // { x: 57.6258992805755, y: 3.56862745098039, size: 1 },\r\n // { x: 59.568345323741, y: 3.52941176470588, size: 1 },\r\n // { x: 61.5107913669065, y: 3.56862745098039, size: 1 },\r\n // { x: 62.158273381295, y: 3.76470588235294, size: 1 },\r\n // { x: 63.4532374100719, y: 3.52941176470588, size: 1 },\r\n // { x: 64.7482014388489, y: 3.6078431372549, size: 1 },\r\n // { x: 66.0431654676259, y: 3.52941176470588, size: 1 },\r\n // { x: 66.6906474820144, y: 3.68627450980392, size: 1 },\r\n // { x: 67.9856115107914, y: 3.41176470588235, size: 1 },\r\n // { x: 69.2805755395683, y: 3.2156862745098, size: 1 },\r\n // { x: 69.9280575539568, y: 3.25490196078431, size: 1 },\r\n // { x: 70.5755395683453, y: 3.52941176470588, size: 1 },\r\n // { x: 71.2230215827338, y: 3.45098039215686, size: 1 },\r\n // { x: 71.8705035971223, y: 3.41176470588235, size: 1 },\r\n // { x: 72.5179856115108, y: 3.6078431372549, size: 1 },\r\n // { x: 73.1654676258993, y: 3.41176470588235, size: 1 },\r\n // { x: 73.8129496402878, y: 3.56862745098039, size: 1 },\r\n // { x: 75.1079136690647, y: 3.52941176470588, size: 1 },\r\n // { x: 75.7553956834532, y: 3.41176470588235, size: 1 },\r\n // { x: 76.4028776978417, y: 3.52941176470588, size: 1 },\r\n // { x: 77.0503597122302, y: 3.68627450980392, size: 1 },\r\n // { x: 78.3453237410072, y: 3.37254901960784, size: 1 },\r\n // { x: 79.6402877697842, y: 3.6078431372549, size: 1 },\r\n // { x: 80.2877697841727, y: 3.56862745098039, size: 1 },\r\n // { x: 80.9352517985612, y: 3.45098039215686, size: 1 },\r\n // { x: 81.5827338129496, y: 3.64705882352941, size: 1 },\r\n // { x: 82.2302158273381, y: 3.45098039215686, size: 1 },\r\n // { x: 83.5251798561151, y: 3.41176470588235, size: 1 },\r\n // { x: 86.1151079136691, y: 3.33333333333333, size: 1 },\r\n // { x: 86.7625899280576, y: 3.49019607843137, size: 1 },\r\n // { x: 87.410071942446, y: 3.56862745098039, size: 1 },\r\n // { x: 88.0575539568345, y: 3.56862745098039, size: 1 },\r\n // { x: 90, y: 3.33333333333333, size: 1 },\r\n // { x: 90.6474820143885, y: 3.2156862745098, size: 1 },\r\n // { x: 91.294964028777, y: 2.86274509803922, size: 1 },\r\n // { x: 91.9424460431655, y: 3.41176470588235, size: 1 },\r\n // { x: 92.589928057554, y: 3.84313725490196, size: 1 },\r\n // { x: 93.2374100719424, y: 3.37254901960784, size: 1 },\r\n // { x: 93.8848920863309, y: 3.49019607843137, size: 1 },\r\n // { x: 94.5323741007194, y: 3.88235294117647, size: 1 },\r\n // { x: 95.1798561151079, y: 3.68627450980392, size: 1 },\r\n // { x: 95.8273381294964, y: 3.49019607843137, size: 1 },\r\n // { x: 96.4748201438849, y: 3.80392156862745, size: 1 },\r\n // { x: 97.1223021582734, y: 3.84313725490196, size: 1 },\r\n // { x: 97.7697841726619, y: 3.56862745098039, size: 1 },\r\n // { x: 98.4172661870504, y: 3.64705882352941, size: 1 },\r\n // { x: 99.0647482014388, y: 3.64705882352941, size: 1 },\r\n // { x: 99.7122302158273, y: 3.56862745098039, size: 1 },\r\n // { x: 100.359712230216, y: 3.52941176470588, size: 1 },\r\n // { x: 101.007194244604, y: 3.49019607843137, size: 1 },\r\n // { x: 101.654676258993, y: 3.56862745098039, size: 1 },\r\n // { x: 102.302158273381, y: 3.56862745098039, size: 1 },\r\n // { x: 104.244604316547, y: 3.72549019607843, size: 1 },\r\n // { x: 105.539568345324, y: 3.6078431372549, size: 1 },\r\n // { x: 106.834532374101, y: 3.56862745098039, size: 1 },\r\n // { x: 108.776978417266, y: 3.6078431372549, size: 1 },\r\n // { x: 111.36690647482, y: 3.41176470588235, size: 1 },\r\n // { x: 112.661870503597, y: 3.45098039215686, size: 1 },\r\n // { x: 113.309352517986, y: 3.52941176470588, size: 1 },\r\n // { x: 113.956834532374, y: 3.6078431372549, size: 1 },\r\n // { x: 114.604316546763, y: 3.76470588235294, size: 1 },\r\n // { x: 115.89928057554, y: 3.56862745098039, size: 1 },\r\n // { x: 116.546762589928, y: 3.76470588235294, size: 1 },\r\n // { x: 117.194244604317, y: 3.6078431372549, size: 1 },\r\n // { x: 119.136690647482, y: 3.6078431372549, size: 1 },\r\n // { x: 119.784172661871, y: 3.49019607843137, size: 1 },\r\n // { x: 121.079136690647, y: 3.88235294117647, size: 1 },\r\n // { x: 121.726618705036, y: 3.45098039215686, size: 1 },\r\n // { x: 122.374100719424, y: 3.6078431372549, size: 1 },\r\n // { x: 123.021582733813, y: 3.56862745098039, size: 1 },\r\n // { x: 123.669064748201, y: 3.72549019607843, size: 1 },\r\n // { x: 124.31654676259, y: 3.68627450980392, size: 1 },\r\n // { x: 125.611510791367, y: 3.52941176470588, size: 1 },\r\n // { x: 126.906474820144, y: 3.49019607843137, size: 1 },\r\n // { x: 127.553956834532, y: 3.64705882352941, size: 1 },\r\n // { x: 128.848920863309, y: 3.41176470588235, size: 1 },\r\n // { x: 129.496402877698, y: 3.45098039215686, size: 1 },\r\n // { x: 130.791366906475, y: 3.6078431372549, size: 1 },\r\n // { x: 131.438848920863, y: 3.6078431372549, size: 1 },\r\n // { x: 133.381294964029, y: 3.49019607843137, size: 1 },\r\n // { x: 134.028776978417, y: 3.2156862745098, size: 1 },\r\n // { x: 134.676258992806, y: 3.01960784313725, size: 1 },\r\n // { x: 135.971223021583, y: 3.64705882352941, size: 1 },\r\n // { x: 136.618705035971, y: 3.72549019607843, size: 1 },\r\n // { x: 137.26618705036, y: 3.68627450980392, size: 1 },\r\n // { x: 137.913669064748, y: 3.72549019607843, size: 1 },\r\n // { x: 138.561151079137, y: 3.76470588235294, size: 1 },\r\n // { x: 139.856115107914, y: 3.72549019607843, size: 1 },\r\n // { x: 140.503597122302, y: 3.76470588235294, size: 1 },\r\n // { x: 141.151079136691, y: 3.88235294117647, size: 1 },\r\n // { x: 141.798561151079, y: 3.6078431372549, size: 1 },\r\n // { x: 142.446043165468, y: 3.68627450980392, size: 1 },\r\n // { x: 143.093525179856, y: 3.6078431372549, size: 1 },\r\n // { x: 144.388489208633, y: 3.84313725490196, size: 1 },\r\n // { x: 145.035971223022, y: 3.56862745098039, size: 1 },\r\n // { x: 145.68345323741, y: 3.6078431372549, size: 1 },\r\n // { x: 146.330935251799, y: 3.68627450980392, size: 1 },\r\n // { x: 146.978417266187, y: 3.56862745098039, size: 1 },\r\n // { x: 147.625899280576, y: 3.76470588235294, size: 1 },\r\n // { x: 149.568345323741, y: 3.76470588235294, size: 1 },\r\n // { x: 150.215827338129, y: 3.72549019607843, size: 1 },\r\n // { x: 151.510791366906, y: 3.56862745098039, size: 1 },\r\n // { x: 152.805755395683, y: 3.52941176470588, size: 1 },\r\n // { x: 155.395683453237, y: 3.56862745098039, size: 1 },\r\n // { x: 156.043165467626, y: 3.29411764705882, size: 1 },\r\n // { x: 157.338129496403, y: 3.37254901960784, size: 1 },\r\n // { x: 158.63309352518, y: 3.68627450980392, size: 1 },\r\n // { x: 159.280575539568, y: 3.80392156862745, size: 1 },\r\n // { x: 159.928057553957, y: 3.72549019607843, size: 1 },\r\n // { x: 160.575539568345, y: 3.52941176470588, size: 1 },\r\n // { x: 161.870503597122, y: 3.41176470588235, size: 1 },\r\n // { x: 163.165467625899, y: 3.56862745098039, size: 1 },\r\n // { x: 163.812949640288, y: 3.68627450980392, size: 1 },\r\n // { x: 164.460431654676, y: 3.64705882352941, size: 1 },\r\n // { x: 165.107913669065, y: 3.68627450980392, size: 1 },\r\n // { x: 165.755395683453, y: 3.76470588235294, size: 1 },\r\n // { x: 166.402877697842, y: 3.6078431372549, size: 1 },\r\n // { x: 167.697841726619, y: 3.49019607843137, size: 1 },\r\n // { x: 168.345323741007, y: 3.68627450980392, size: 1 },\r\n // { x: 169.640287769784, y: 3.76470588235294, size: 1 },\r\n // { x: 170.287769784173, y: 3.76470588235294, size: 1 },\r\n // { x: 170.935251798561, y: 3.68627450980392, size: 1 },\r\n // { x: 171.58273381295, y: 3.49019607843137, size: 1 },\r\n // { x: 172.230215827338, y: 3.49019607843137, size: 1 },\r\n // { x: 172.877697841727, y: 3.84313725490196, size: 1 },\r\n // { x: 173.525179856115, y: 3.37254901960784, size: 1 },\r\n // { x: 177.410071942446, y: 3.49019607843137, size: 1 },\r\n // { x: 178.057553956835, y: 3.64705882352941, size: 1 },\r\n // { x: 179.352517985612, y: 3.84313725490196, size: 1 },\r\n // { x: 180, y: 3.45098039215686, size: 1 },\r\n // { x: 180.647482014388, y: 3.52941176470588, size: 1 },\r\n // { x: 181.294964028777, y: 3.6078431372549, size: 1 },\r\n // { x: 181.942446043165, y: 3.64705882352941, size: 1 },\r\n // { x: 182.589928057554, y: 3.49019607843137, size: 1 },\r\n // { x: 183.237410071942, y: 3.52941176470588, size: 1 },\r\n // { x: 183.884892086331, y: 3.72549019607843, size: 1 },\r\n // { x: 184.532374100719, y: 3.64705882352941, size: 1 },\r\n // { x: 185.827338129496, y: 3.64705882352941, size: 1 },\r\n // { x: 187.122302158273, y: 3.6078431372549, size: 1 },\r\n // { x: 187.769784172662, y: 3.64705882352941, size: 1 },\r\n // { x: 190.359712230216, y: 3.80392156862745, size: 1 },\r\n // { x: 191.007194244604, y: 3.64705882352941, size: 1 },\r\n // { x: 192.302158273381, y: 3.72549019607843, size: 1 },\r\n // { x: 192.94964028777, y: 3.6078431372549, size: 1 },\r\n // { x: 193.597122302158, y: 3.92156862745098, size: 1 },\r\n // { x: 195.539568345324, y: 3.68627450980392, size: 1 },\r\n // { x: 196.187050359712, y: 3.68627450980392, size: 1 },\r\n // { x: 196.834532374101, y: 3.6078431372549, size: 1 },\r\n // { x: 197.482014388489, y: 3.56862745098039, size: 1 },\r\n // { x: 198.129496402878, y: 3.25490196078431, size: 1 },\r\n // { x: 198.776978417266, y: 3.05882352941176, size: 1 },\r\n // { x: 200.719424460432, y: 3.64705882352941, size: 1 },\r\n // { x: 202.661870503597, y: 3.68627450980392, size: 1 },\r\n // { x: 203.956834532374, y: 3.6078431372549, size: 1 },\r\n // { x: 204.604316546763, y: 3.37254901960784, size: 1 },\r\n // { x: 205.251798561151, y: 3.41176470588235, size: 1 },\r\n // { x: 209.784172661871, y: 3.68627450980392, size: 1 },\r\n // { x: 211.079136690647, y: 3.72549019607843, size: 1 },\r\n // { x: 211.726618705036, y: 3.68627450980392, size: 1 },\r\n // { x: 212.374100719424, y: 3.41176470588235, size: 1 },\r\n // { x: 213.669064748201, y: 3.45098039215686, size: 1 },\r\n // { x: 214.31654676259, y: 3.64705882352941, size: 1 },\r\n // { x: 214.964028776978, y: 3.64705882352941, size: 1 },\r\n // { x: 215.611510791367, y: 3.6078431372549, size: 1 },\r\n // { x: 216.258992805755, y: 3.68627450980392, size: 1 },\r\n // { x: 217.553956834532, y: 3.56862745098039, size: 1 },\r\n // { x: 218.201438848921, y: 3.6078431372549, size: 1 },\r\n // { x: 219.496402877698, y: 3.45098039215686, size: 1 },\r\n // { x: 220.143884892086, y: 3.41176470588235, size: 1 },\r\n // { x: 220.791366906475, y: 3.17647058823529, size: 1 },\r\n // { x: 221.438848920863, y: 3.33333333333333, size: 1 },\r\n // { x: 222.73381294964, y: 3.72549019607843, size: 1 },\r\n // { x: 223.381294964029, y: 3.64705882352941, size: 1 },\r\n // { x: 224.676258992806, y: 3.76470588235294, size: 1 },\r\n // { x: 225.323741007194, y: 3.80392156862745, size: 1 },\r\n // { x: 225.971223021583, y: 3.56862745098039, size: 1 },\r\n // { x: 226.618705035971, y: 3.49019607843137, size: 1 },\r\n // { x: 228.561151079137, y: 3.52941176470588, size: 1 },\r\n // { x: 229.208633093525, y: 3.6078431372549, size: 1 },\r\n // { x: 229.856115107914, y: 3.68627450980392, size: 1 },\r\n // { x: 230.503597122302, y: 3.96078431372549, size: 1 },\r\n // { x: 231.151079136691, y: 3.96078431372549, size: 1 },\r\n // { x: 233.741007194245, y: 3.68627450980392, size: 1 },\r\n // { x: 235.035971223022, y: 3.80392156862745, size: 1 },\r\n // { x: 235.68345323741, y: 3.37254901960784, size: 1 },\r\n // { x: 236.330935251799, y: 3.76470588235294, size: 1 },\r\n // { x: 236.978417266187, y: 3.80392156862745, size: 1 },\r\n // { x: 237.625899280576, y: 3.56862745098039, size: 1 },\r\n // { x: 238.273381294964, y: 3.72549019607843, size: 1 },\r\n // { x: 238.920863309353, y: 3.52941176470588, size: 1 },\r\n // { x: 239.568345323741, y: 4.03921568627451, size: 1 },\r\n // { x: 240.863309352518, y: 3.80392156862745, size: 1 },\r\n // { x: 242.158273381295, y: 3.37254901960784, size: 1 },\r\n // { x: 244.10071942446, y: 3.6078431372549, size: 1 },\r\n // { x: 244.748201438849, y: 3.6078431372549, size: 1 },\r\n // { x: 245.395683453237, y: 3.76470588235294, size: 1 },\r\n // { x: 246.043165467626, y: 3.64705882352941, size: 1 },\r\n // { x: 246.690647482014, y: 3.80392156862745, size: 1 },\r\n // { x: 247.338129496403, y: 3.64705882352941, size: 1 },\r\n // { x: 247.985611510791, y: 3.56862745098039, size: 1 },\r\n // { x: 248.63309352518, y: 3.56862745098039, size: 1 },\r\n // { x: 249.928057553957, y: 3.56862745098039, size: 1 },\r\n // { x: 250.575539568345, y: 3.52941176470588, size: 1 },\r\n // { x: 251.870503597122, y: 3.72549019607843, size: 1 },\r\n // { x: 252.517985611511, y: 3.64705882352941, size: 1 },\r\n // { x: 253.165467625899, y: 3.72549019607843, size: 1 },\r\n // { x: 253.812949640288, y: 3.56862745098039, size: 1 },\r\n // { x: 254.460431654676, y: 3.92156862745098, size: 1 },\r\n // { x: 255.107913669065, y: 3.76470588235294, size: 1 },\r\n // { x: 257.697841726619, y: 3.64705882352941, size: 1 },\r\n // { x: 258.345323741007, y: 3.68627450980392, size: 1 },\r\n // { x: 258.992805755396, y: 3.76470588235294, size: 1 },\r\n // { x: 259.640287769784, y: 3.68627450980392, size: 1 },\r\n // { x: 262.230215827338, y: 3.37254901960784, size: 1 },\r\n // { x: 263.525179856115, y: 3.33333333333333, size: 1 },\r\n // { x: 264.172661870504, y: 3.17647058823529, size: 1 },\r\n // { x: 264.820143884892, y: 3.37254901960784, size: 1 },\r\n // { x: 266.115107913669, y: 3.64705882352941, size: 1 },\r\n // { x: 267.410071942446, y: 3.56862745098039, size: 1 },\r\n // { x: 268.705035971223, y: 3.96078431372549, size: 1 },\r\n // { x: 269.352517985611, y: 3.68627450980392, size: 1 },\r\n // { x: 270, y: 3.72549019607843, size: 1 },\r\n // { x: 271.294964028777, y: 3.64705882352941, size: 1 },\r\n // { x: 271.942446043165, y: 3.41176470588235, size: 1 },\r\n // { x: 274.532374100719, y: 3.68627450980392, size: 1 },\r\n // { x: 275.827338129496, y: 3.68627450980392, size: 1 },\r\n // { x: 277.122302158273, y: 3.56862745098039, size: 1 },\r\n // { x: 277.769784172662, y: 3.72549019607843, size: 1 },\r\n // { x: 278.41726618705, y: 3.80392156862745, size: 1 },\r\n // { x: 279.064748201439, y: 3.92156862745098, size: 1 },\r\n // { x: 281.007194244604, y: 3.56862745098039, size: 1 },\r\n // { x: 281.654676258993, y: 3.76470588235294, size: 1 },\r\n // { x: 282.94964028777, y: 4, size: 1 },\r\n // { x: 283.597122302158, y: 3.52941176470588, size: 1 },\r\n // { x: 284.892086330935, y: 3.41176470588235, size: 1 },\r\n // { x: 286.187050359712, y: 3.45098039215686, size: 1 },\r\n // { x: 287.482014388489, y: 3.76470588235294, size: 1 },\r\n // { x: 289.424460431655, y: 3.6078431372549, size: 1 },\r\n // { x: 290.719424460432, y: 3.76470588235294, size: 1 },\r\n // { x: 291.36690647482, y: 3.92156862745098, size: 1 },\r\n // { x: 292.014388489209, y: 3.72549019607843, size: 1 },\r\n // { x: 293.309352517986, y: 3.88235294117647, size: 1 },\r\n // { x: 293.956834532374, y: 3.68627450980392, size: 1 },\r\n // { x: 295.89928057554, y: 3.80392156862745, size: 1 },\r\n // { x: 297.194244604317, y: 3.76470588235294, size: 1 },\r\n // { x: 298.489208633094, y: 3.76470588235294, size: 1 },\r\n // { x: 299.784172661871, y: 3.64705882352941, size: 1 },\r\n // { x: 301.079136690647, y: 3.84313725490196, size: 1 },\r\n // { x: 302.374100719424, y: 3.80392156862745, size: 1 },\r\n // { x: 303.021582733813, y: 3.80392156862745, size: 1 },\r\n // { x: 303.669064748201, y: 3.72549019607843, size: 1 },\r\n // { x: 304.31654676259, y: 3.88235294117647, size: 1 },\r\n // { x: 305.611510791367, y: 3.96078431372549, size: 1 },\r\n // { x: 306.906474820144, y: 3.56862745098039, size: 1 },\r\n // { x: 307.553956834532, y: 3.80392156862745, size: 1 },\r\n // { x: 308.201438848921, y: 3.49019607843137, size: 1 },\r\n // { x: 310.143884892086, y: 3.29411764705882, size: 1 },\r\n // { x: 310.791366906475, y: 3.64705882352941, size: 1 },\r\n // { x: 311.438848920863, y: 3.72549019607843, size: 1 },\r\n // { x: 312.73381294964, y: 3.56862745098039, size: 1 },\r\n // { x: 313.381294964029, y: 3.6078431372549, size: 1 },\r\n // { x: 314.028776978417, y: 3.49019607843137, size: 1 },\r\n // { x: 314.676258992806, y: 3.56862745098039, size: 1 },\r\n // { x: 315.323741007194, y: 3.49019607843137, size: 1 },\r\n // { x: 317.26618705036, y: 3.56862745098039, size: 1 },\r\n // { x: 317.913669064748, y: 3.6078431372549, size: 1 },\r\n // { x: 319.208633093525, y: 3.49019607843137, size: 1 },\r\n // { x: 319.856115107914, y: 3.6078431372549, size: 1 },\r\n // { x: 321.798561151079, y: 3.49019607843137, size: 1 },\r\n // { x: 323.093525179856, y: 3.49019607843137, size: 1 },\r\n // { x: 325.035971223022, y: 3.41176470588235, size: 1 },\r\n // { x: 325.68345323741, y: 3.45098039215686, size: 1 },\r\n // { x: 326.330935251799, y: 3.76470588235294, size: 1 },\r\n // { x: 326.978417266187, y: 3.33333333333333, size: 1 },\r\n // { x: 327.625899280576, y: 3.52941176470588, size: 1 },\r\n // { x: 328.273381294964, y: 3.49019607843137, size: 1 },\r\n // { x: 328.920863309353, y: 3.2156862745098, size: 1 },\r\n // { x: 330.215827338129, y: 4.03921568627451, size: 1 },\r\n // { x: 330.863309352518, y: 3.80392156862745, size: 1 },\r\n // { x: 331.510791366906, y: 4.03921568627451, size: 1 },\r\n // { x: 332.158273381295, y: 3.84313725490196, size: 1 },\r\n // { x: 332.805755395683, y: 3.76470588235294, size: 1 },\r\n // { x: 333.453237410072, y: 3.68627450980392, size: 1 },\r\n // { x: 334.10071942446, y: 3.80392156862745, size: 1 },\r\n // { x: 334.748201438849, y: 3.84313725490196, size: 1 },\r\n // { x: 336.043165467626, y: 3.96078431372549, size: 1 },\r\n // { x: 336.690647482014, y: 3.84313725490196, size: 1 },\r\n // { x: 337.338129496403, y: 4, size: 1 },\r\n // { x: 338.63309352518, y: 3.92156862745098, size: 1 },\r\n // { x: 339.280575539568, y: 3.84313725490196, size: 1 },\r\n // { x: 339.928057553957, y: 3.84313725490196, size: 1 },\r\n // { x: 340.575539568345, y: 3.68627450980392, size: 1 },\r\n // { x: 341.870503597122, y: 3.80392156862745, size: 1 },\r\n // { x: 342.517985611511, y: 4, size: 1 },\r\n // { x: 343.165467625899, y: 3.88235294117647, size: 1 },\r\n // { x: 344.460431654676, y: 3.88235294117647, size: 1 },\r\n // { x: 345.755395683453, y: 3.76470588235294, size: 1 },\r\n // { x: 346.402877697842, y: 3.72549019607843, size: 1 },\r\n // { x: 347.697841726619, y: 3.72549019607843, size: 1 },\r\n // { x: 349.640287769784, y: 3.37254901960784, size: 1 },\r\n // { x: 350.287769784173, y: 3.05882352941176, size: 1 },\r\n // { x: 350.935251798561, y: 3.6078431372549, size: 1 },\r\n // { x: 351.58273381295, y: 3.6078431372549, size: 1 },\r\n // { x: 352.230215827338, y: 3.56862745098039, size: 1 },\r\n // { x: 352.877697841727, y: 3.41176470588235, size: 1 },\r\n // { x: 353.525179856115, y: 3.80392156862745, size: 1 },\r\n // { x: 354.172661870504, y: 3.41176470588235, size: 1 },\r\n // { x: 354.820143884892, y: 3.88235294117647, size: 1 },\r\n // { x: 355.467625899281, y: 3.45098039215686, size: 1 },\r\n // { x: 356.115107913669, y: 3.41176470588235, size: 1 },\r\n // { x: 356.762589928058, y: 3.72549019607843, size: 1 },\r\n // { x: 358.057553956835, y: 3.52941176470588, size: 1 },\r\n // { x: 2.58992805755396, y: 3.52941176470588, size: 1 },\r\n // { x: 3.23741007194245, y: 3.49019607843137, size: 1 },\r\n // { x: 5.17985611510791, y: 3.6078431372549, size: 1 },\r\n // { x: 7.76978417266187, y: 3.41176470588235, size: 1 },\r\n // { x: 9.71223021582734, y: 3.56862745098039, size: 1 },\r\n // { x: 11.0071942446043, y: 3.33333333333333, size: 1 },\r\n // { x: 11.6546762589928, y: 3.13725490196078, size: 1 },\r\n // { x: 12.3021582733813, y: 3.13725490196078, size: 1 },\r\n // { x: 12.9496402877698, y: 3.64705882352941, size: 1 },\r\n // { x: 14.8920863309353, y: 3.80392156862745, size: 1 },\r\n // { x: 15.5395683453237, y: 3.72549019607843, size: 1 },\r\n // { x: 16.1870503597122, y: 3.84313725490196, size: 1 },\r\n // { x: 16.8345323741007, y: 4.03921568627451, size: 1 },\r\n // { x: 18.1294964028777, y: 3.72549019607843, size: 1 },\r\n // { x: 21.3669064748201, y: 3.80392156862745, size: 1 },\r\n // { x: 22.0143884892086, y: 3.72549019607843, size: 1 },\r\n // { x: 22.6618705035971, y: 3.68627450980392, size: 1 },\r\n // { x: 23.3093525179856, y: 3.88235294117647, size: 1 },\r\n // { x: 24.6043165467626, y: 4.03921568627451, size: 1 },\r\n // { x: 25.2517985611511, y: 3.88235294117647, size: 1 },\r\n // { x: 25.8992805755396, y: 3.6078431372549, size: 1 },\r\n // { x: 30.431654676259, y: 3.72549019607843, size: 1 },\r\n // { x: 31.726618705036, y: 3.49019607843137, size: 1 },\r\n // { x: 32.3741007194245, y: 3.25490196078431, size: 1 },\r\n // { x: 33.0215827338129, y: 3.56862745098039, size: 1 },\r\n // { x: 34.9640287769784, y: 3.68627450980392, size: 1 },\r\n // { x: 35.6115107913669, y: 3.52941176470588, size: 1 },\r\n // { x: 36.9064748201439, y: 3.56862745098039, size: 1 },\r\n // { x: 37.5539568345324, y: 3.6078431372549, size: 1 },\r\n // { x: 38.2014388489209, y: 3.68627450980392, size: 1 },\r\n // { x: 39.4964028776978, y: 3.72549019607843, size: 1 },\r\n // { x: 40.7913669064748, y: 3.68627450980392, size: 1 },\r\n // { x: 41.4388489208633, y: 3.84313725490196, size: 1 },\r\n // { x: 42.0863309352518, y: 3.64705882352941, size: 1 },\r\n // { x: 44.6762589928058, y: 3.56862745098039, size: 1 },\r\n // { x: 45.3237410071942, y: 3.45098039215686, size: 1 },\r\n // { x: 45.9712230215827, y: 3.72549019607843, size: 1 },\r\n // { x: 46.6187050359712, y: 3.64705882352941, size: 1 },\r\n // { x: 47.2661870503597, y: 3.84313725490196, size: 1 },\r\n // { x: 48.5611510791367, y: 3.52941176470588, size: 1 },\r\n // { x: 49.2086330935252, y: 3.41176470588235, size: 1 },\r\n // { x: 49.8561151079137, y: 3.56862745098039, size: 1 },\r\n // { x: 50.5035971223022, y: 3.64705882352941, size: 1 },\r\n // { x: 51.1510791366906, y: 3.64705882352941, size: 1 },\r\n // { x: 52.4460431654676, y: 3.6078431372549, size: 1 },\r\n // { x: 53.7410071942446, y: 3.49019607843137, size: 1 },\r\n // { x: 54.3884892086331, y: 3.29411764705882, size: 1 },\r\n // { x: 55.0359712230216, y: 3.37254901960784, size: 1 },\r\n // { x: 56.3309352517986, y: 3.88235294117647, size: 1 },\r\n // { x: 56.9784172661871, y: 3.84313725490196, size: 1 },\r\n // { x: 57.6258992805755, y: 3.68627450980392, size: 1 },\r\n // { x: 58.273381294964, y: 3.68627450980392, size: 1 },\r\n // { x: 63.4532374100719, y: 4, size: 1 },\r\n // { x: 64.7482014388489, y: 3.68627450980392, size: 1 },\r\n // { x: 65.3956834532374, y: 3.72549019607843, size: 1 },\r\n // { x: 67.9856115107914, y: 3.96078431372549, size: 1 },\r\n // { x: 68.6330935251799, y: 3.45098039215686, size: 1 },\r\n // { x: 69.2805755395683, y: 3.72549019607843, size: 1 },\r\n // { x: 69.9280575539568, y: 3.84313725490196, size: 1 },\r\n // { x: 72.5179856115108, y: 3.72549019607843, size: 1 },\r\n // { x: 73.1654676258993, y: 3.80392156862745, size: 1 },\r\n // { x: 73.8129496402878, y: 3.6078431372549, size: 1 },\r\n // { x: 75.7553956834532, y: 3.33333333333333, size: 1 },\r\n // { x: 76.4028776978417, y: 2.03921568627451, size: 1 },\r\n // { x: 77.0503597122302, y: 1.88235294117647, size: 1 },\r\n // { x: 77.6978417266187, y: 3.49019607843137, size: 1 },\r\n // { x: 78.3453237410072, y: 3.45098039215686, size: 1 },\r\n // { x: 79.6402877697842, y: 3.72549019607843, size: 1 },\r\n // { x: 80.2877697841727, y: 3.52941176470588, size: 1 },\r\n // { x: 82.8776978417266, y: 3.64705882352941, size: 1 },\r\n // { x: 83.5251798561151, y: 3.64705882352941, size: 1 },\r\n // { x: 84.1726618705036, y: 3.72549019607843, size: 1 },\r\n // { x: 84.8201438848921, y: 3.88235294117647, size: 1 },\r\n // { x: 86.1151079136691, y: 3.52941176470588, size: 1 },\r\n // { x: 88.0575539568345, y: 3.52941176470588, size: 1 },\r\n // { x: 88.705035971223, y: 3.6078431372549, size: 1 },\r\n // { x: 89.3525179856115, y: 3.56862745098039, size: 1 },\r\n // { x: 90, y: 3.6078431372549, size: 1 },\r\n // { x: 90.6474820143885, y: 3.84313725490196, size: 1 },\r\n // { x: 91.294964028777, y: 3.41176470588235, size: 1 },\r\n // { x: 91.9424460431655, y: 3.64705882352941, size: 1 },\r\n // { x: 92.589928057554, y: 3.6078431372549, size: 1 },\r\n // { x: 93.2374100719424, y: 3.56862745098039, size: 1 },\r\n // { x: 93.8848920863309, y: 3.37254901960784, size: 1 },\r\n // { x: 94.5323741007194, y: 3.49019607843137, size: 1 },\r\n // { x: 95.1798561151079, y: 3.49019607843137, size: 1 },\r\n // { x: 97.7697841726619, y: 3.13725490196078, size: 1 },\r\n // { x: 98.4172661870504, y: 3.37254901960784, size: 1 },\r\n // { x: 99.7122302158273, y: 3.6078431372549, size: 1 },\r\n // { x: 102.302158273381, y: 3.6078431372549, size: 1 },\r\n // { x: 104.892086330935, y: 3.72549019607843, size: 1 },\r\n // { x: 105.539568345324, y: 3.76470588235294, size: 1 },\r\n // { x: 106.834532374101, y: 3.52941176470588, size: 1 },\r\n // { x: 107.482014388489, y: 3.88235294117647, size: 1 },\r\n // { x: 108.129496402878, y: 3.92156862745098, size: 1 },\r\n // { x: 110.719424460432, y: 3.6078431372549, size: 1 },\r\n // { x: 111.36690647482, y: 3.49019607843137, size: 1 },\r\n // { x: 112.014388489209, y: 3.80392156862745, size: 1 },\r\n // { x: 112.661870503597, y: 3.76470588235294, size: 1 },\r\n // { x: 113.309352517986, y: 3.68627450980392, size: 1 },\r\n // { x: 114.604316546763, y: 3.72549019607843, size: 1 },\r\n // { x: 115.251798561151, y: 3.6078431372549, size: 1 },\r\n // { x: 115.89928057554, y: 3.72549019607843, size: 1 },\r\n // { x: 116.546762589928, y: 3.45098039215686, size: 1 },\r\n // { x: 117.194244604317, y: 3.72549019607843, size: 1 },\r\n // { x: 118.489208633094, y: 3.33333333333333, size: 1 },\r\n // { x: 119.784172661871, y: 3.05882352941176, size: 1 },\r\n // { x: 120.431654676259, y: 3.2156862745098, size: 1 },\r\n // { x: 121.079136690647, y: 3.6078431372549, size: 1 },\r\n // { x: 121.726618705036, y: 3.6078431372549, size: 1 },\r\n // { x: 124.31654676259, y: 3.49019607843137, size: 1 },\r\n // { x: 124.964028776978, y: 3.45098039215686, size: 1 },\r\n // { x: 125.611510791367, y: 3.6078431372549, size: 1 },\r\n // { x: 127.553956834532, y: 3.72549019607843, size: 1 },\r\n // { x: 128.848920863309, y: 3.80392156862745, size: 1 },\r\n // { x: 130.791366906475, y: 3.45098039215686, size: 1 },\r\n // { x: 131.438848920863, y: 3.72549019607843, size: 1 },\r\n // { x: 132.086330935252, y: 3.64705882352941, size: 1 },\r\n // { x: 133.381294964029, y: 3.68627450980392, size: 1 },\r\n // { x: 134.028776978417, y: 3.80392156862745, size: 1 },\r\n // { x: 134.676258992806, y: 3.64705882352941, size: 1 },\r\n // { x: 138.561151079137, y: 3.84313725490196, size: 1 },\r\n // { x: 139.208633093525, y: 3.37254901960784, size: 1 },\r\n // { x: 139.856115107914, y: 3.29411764705882, size: 1 },\r\n // { x: 140.503597122302, y: 3.25490196078431, size: 1 },\r\n // { x: 141.151079136691, y: 2.62745098039216, size: 1 },\r\n // { x: 141.798561151079, y: 2.74509803921569, size: 1 },\r\n // { x: 142.446043165468, y: 3.76470588235294, size: 1 },\r\n // { x: 143.093525179856, y: 3.84313725490196, size: 1 },\r\n // { x: 144.388489208633, y: 3.52941176470588, size: 1 },\r\n // { x: 145.68345323741, y: 3.49019607843137, size: 1 },\r\n // { x: 146.330935251799, y: 3.76470588235294, size: 1 },\r\n // { x: 146.978417266187, y: 3.68627450980392, size: 1 },\r\n // { x: 147.625899280576, y: 3.6078431372549, size: 1 },\r\n // { x: 148.273381294964, y: 3.64705882352941, size: 1 },\r\n // { x: 148.920863309353, y: 3.76470588235294, size: 1 },\r\n // { x: 149.568345323741, y: 3.52941176470588, size: 1 },\r\n // { x: 150.215827338129, y: 3.80392156862745, size: 1 },\r\n // { x: 151.510791366906, y: 3.49019607843137, size: 1 },\r\n // { x: 152.158273381295, y: 3.92156862745098, size: 1 },\r\n // { x: 152.805755395683, y: 3.45098039215686, size: 1 },\r\n // { x: 153.453237410072, y: 3.80392156862745, size: 1 },\r\n // { x: 154.748201438849, y: 3.72549019607843, size: 1 },\r\n // { x: 155.395683453237, y: 3.80392156862745, size: 1 },\r\n // { x: 156.690647482014, y: 3.6078431372549, size: 1 },\r\n // { x: 160.575539568345, y: 3.56862745098039, size: 1 },\r\n // { x: 161.870503597122, y: 3.52941176470588, size: 1 },\r\n // { x: 162.517985611511, y: 3.17647058823529, size: 1 },\r\n // { x: 163.812949640288, y: 3.80392156862745, size: 1 },\r\n // { x: 164.460431654676, y: 3.88235294117647, size: 1 },\r\n // { x: 165.107913669065, y: 3.88235294117647, size: 1 },\r\n // { x: 166.402877697842, y: 3.84313725490196, size: 1 },\r\n // { x: 167.05035971223, y: 3.92156862745098, size: 1 },\r\n // { x: 168.992805755396, y: 3.72549019607843, size: 1 },\r\n // { x: 170.935251798561, y: 3.88235294117647, size: 1 },\r\n // { x: 171.58273381295, y: 3.64705882352941, size: 1 },\r\n // { x: 172.230215827338, y: 3.64705882352941, size: 1 },\r\n // { x: 173.525179856115, y: 3.72549019607843, size: 1 },\r\n // { x: 174.172661870504, y: 3.56862745098039, size: 1 },\r\n // { x: 174.820143884892, y: 3.84313725490196, size: 1 },\r\n // { x: 176.115107913669, y: 3.96078431372549, size: 1 },\r\n // { x: 177.410071942446, y: 3.84313725490196, size: 1 },\r\n // { x: 178.705035971223, y: 3.80392156862745, size: 1 },\r\n // { x: 181.294964028777, y: 3.92156862745098, size: 1 },\r\n // { x: 181.942446043165, y: 3.76470588235294, size: 1 },\r\n // { x: 184.532374100719, y: 3.49019607843137, size: 1 },\r\n // { x: 185.179856115108, y: 3.68627450980392, size: 1 },\r\n // { x: 185.827338129496, y: 3.76470588235294, size: 1 },\r\n // { x: 187.122302158273, y: 3.84313725490196, size: 1 },\r\n // { x: 187.769784172662, y: 3.56862745098039, size: 1 },\r\n // { x: 188.41726618705, y: 3.52941176470588, size: 1 },\r\n // { x: 189.712230215827, y: 3.72549019607843, size: 1 },\r\n // { x: 191.654676258993, y: 3.84313725490196, size: 1 },\r\n // { x: 192.302158273381, y: 3.45098039215686, size: 1 },\r\n // { x: 192.94964028777, y: 3.96078431372549, size: 1 },\r\n // { x: 193.597122302158, y: 3.6078431372549, size: 1 },\r\n // { x: 194.244604316547, y: 4.07843137254902, size: 1 },\r\n // { x: 194.892086330935, y: 3.56862745098039, size: 1 },\r\n // { x: 197.482014388489, y: 3.6078431372549, size: 1 },\r\n // { x: 198.776978417266, y: 3.64705882352941, size: 1 },\r\n // { x: 200.071942446043, y: 4, size: 1 },\r\n // { x: 200.719424460432, y: 3.68627450980392, size: 1 },\r\n // { x: 201.36690647482, y: 3.72549019607843, size: 1 },\r\n // { x: 202.014388489209, y: 3.88235294117647, size: 1 },\r\n // { x: 203.309352517986, y: 3.49019607843137, size: 1 },\r\n // { x: 204.604316546763, y: 3.49019607843137, size: 1 },\r\n // { x: 205.251798561151, y: 3.6078431372549, size: 1 },\r\n // { x: 205.89928057554, y: 3.2156862745098, size: 1 },\r\n // { x: 206.546762589928, y: 3.33333333333333, size: 1 },\r\n // { x: 207.194244604317, y: 3.41176470588235, size: 1 },\r\n // { x: 207.841726618705, y: 3.52941176470588, size: 1 },\r\n // { x: 209.136690647482, y: 3.52941176470588, size: 1 },\r\n // { x: 211.079136690647, y: 3.76470588235294, size: 1 },\r\n // { x: 211.726618705036, y: 3.41176470588235, size: 1 },\r\n // { x: 212.374100719424, y: 3.45098039215686, size: 1 },\r\n // { x: 213.669064748201, y: 3.52941176470588, size: 1 },\r\n // { x: 214.964028776978, y: 3.52941176470588, size: 1 },\r\n // { x: 215.611510791367, y: 3.64705882352941, size: 1 },\r\n // { x: 216.906474820144, y: 3.64705882352941, size: 1 },\r\n // { x: 218.201438848921, y: 3.68627450980392, size: 1 },\r\n // { x: 218.848920863309, y: 3.68627450980392, size: 1 },\r\n // { x: 219.496402877698, y: 3.49019607843137, size: 1 },\r\n // { x: 220.143884892086, y: 3.6078431372549, size: 1 },\r\n // { x: 222.086330935252, y: 3.6078431372549, size: 1 },\r\n // { x: 222.73381294964, y: 3.64705882352941, size: 1 },\r\n // { x: 225.323741007194, y: 3.41176470588235, size: 1 },\r\n // { x: 226.618705035971, y: 3.64705882352941, size: 1 },\r\n // { x: 227.26618705036, y: 2.90196078431373, size: 1 },\r\n // { x: 227.913669064748, y: 3.05882352941176, size: 1 },\r\n // { x: 230.503597122302, y: 3.76470588235294, size: 1 },\r\n // { x: 231.798561151079, y: 3.84313725490196, size: 1 },\r\n // { x: 233.093525179856, y: 3.80392156862745, size: 1 },\r\n // { x: 233.741007194245, y: 3.80392156862745, size: 1 },\r\n // { x: 235.035971223022, y: 3.64705882352941, size: 1 },\r\n // { x: 236.330935251799, y: 3.68627450980392, size: 1 },\r\n // { x: 237.625899280576, y: 3.68627450980392, size: 1 },\r\n // { x: 240.215827338129, y: 3.84313725490196, size: 1 },\r\n // { x: 240.863309352518, y: 3.72549019607843, size: 1 },\r\n // { x: 241.510791366906, y: 3.6078431372549, size: 1 },\r\n // { x: 242.158273381295, y: 3.76470588235294, size: 1 },\r\n // { x: 242.805755395683, y: 3.68627450980392, size: 1 },\r\n // { x: 243.453237410072, y: 3.72549019607843, size: 1 },\r\n // { x: 244.10071942446, y: 3.64705882352941, size: 1 },\r\n // { x: 246.043165467626, y: 3.49019607843137, size: 1 },\r\n // { x: 247.985611510791, y: 3.45098039215686, size: 1 },\r\n // { x: 248.63309352518, y: 3.84313725490196, size: 1 },\r\n // { x: 251.223021582734, y: 3.80392156862745, size: 1 },\r\n // { x: 251.870503597122, y: 3.88235294117647, size: 1 },\r\n // { x: 255.107913669065, y: 3.88235294117647, size: 1 },\r\n // { x: 255.755395683453, y: 3.6078431372549, size: 1 },\r\n // { x: 256.402877697842, y: 3.76470588235294, size: 1 },\r\n // { x: 258.345323741007, y: 3.37254901960784, size: 1 },\r\n // { x: 258.992805755396, y: 3.84313725490196, size: 1 },\r\n // { x: 259.640287769784, y: 3.64705882352941, size: 1 },\r\n // { x: 260.287769784173, y: 3.56862745098039, size: 1 },\r\n // { x: 261.58273381295, y: 3.45098039215686, size: 1 },\r\n // { x: 262.230215827338, y: 3.52941176470588, size: 1 },\r\n // { x: 262.877697841727, y: 3.84313725490196, size: 1 },\r\n // { x: 263.525179856115, y: 3.49019607843137, size: 1 },\r\n // { x: 264.820143884892, y: 3.88235294117647, size: 1 },\r\n // { x: 265.467625899281, y: 3.37254901960784, size: 1 },\r\n // { x: 268.057553956835, y: 3.96078431372549, size: 1 },\r\n // { x: 268.705035971223, y: 3.45098039215686, size: 1 },\r\n // { x: 269.352517985611, y: 3.6078431372549, size: 1 },\r\n // { x: 270.647482014389, y: 3.64705882352941, size: 1 },\r\n // { x: 271.294964028777, y: 3.41176470588235, size: 1 },\r\n // { x: 275.827338129496, y: 3.52941176470588, size: 1 },\r\n // { x: 276.474820143885, y: 3.41176470588235, size: 1 },\r\n // { x: 277.122302158273, y: 3.64705882352941, size: 1 },\r\n // { x: 277.769784172662, y: 3.80392156862745, size: 1 },\r\n // { x: 278.41726618705, y: 3.52941176470588, size: 1 },\r\n // { x: 279.064748201439, y: 3.56862745098039, size: 1 },\r\n // { x: 280.359712230216, y: 3.56862745098039, size: 1 },\r\n // { x: 281.654676258993, y: 3.45098039215686, size: 1 },\r\n // { x: 282.302158273381, y: 3.64705882352941, size: 1 },\r\n // { x: 283.597122302158, y: 3.76470588235294, size: 1 },\r\n // { x: 285.539568345324, y: 3.49019607843137, size: 1 },\r\n // { x: 288.776978417266, y: 3.6078431372549, size: 1 },\r\n // { x: 289.424460431655, y: 3.56862745098039, size: 1 },\r\n // { x: 290.071942446043, y: 3.49019607843137, size: 1 },\r\n // { x: 292.014388489209, y: 3.45098039215686, size: 1 },\r\n // { x: 292.661870503597, y: 3.2156862745098, size: 1 },\r\n // { x: 293.309352517986, y: 3.52941176470588, size: 1 },\r\n // { x: 293.956834532374, y: 3.72549019607843, size: 1 },\r\n // { x: 294.604316546763, y: 3.52941176470588, size: 1 },\r\n // { x: 295.251798561151, y: 3.49019607843137, size: 1 },\r\n // { x: 295.89928057554, y: 3.92156862745098, size: 1 },\r\n // { x: 296.546762589928, y: 3.56862745098039, size: 1 },\r\n // { x: 297.841726618705, y: 3.41176470588235, size: 1 },\r\n // { x: 298.489208633094, y: 3.52941176470588, size: 1 },\r\n // { x: 299.784172661871, y: 3.76470588235294, size: 1 },\r\n // { x: 300.431654676259, y: 3.49019607843137, size: 1 },\r\n // { x: 301.726618705036, y: 3.41176470588235, size: 1 },\r\n // { x: 303.021582733813, y: 3.37254901960784, size: 1 },\r\n // { x: 303.669064748201, y: 3.29411764705882, size: 1 },\r\n // { x: 304.31654676259, y: 3.64705882352941, size: 1 },\r\n // { x: 304.964028776978, y: 3.68627450980392, size: 1 },\r\n // { x: 305.611510791367, y: 3.49019607843137, size: 1 },\r\n // { x: 306.906474820144, y: 3.45098039215686, size: 1 },\r\n // { x: 307.553956834532, y: 3.64705882352941, size: 1 },\r\n // { x: 308.201438848921, y: 3.64705882352941, size: 1 },\r\n // { x: 308.848920863309, y: 3.41176470588235, size: 1 },\r\n // { x: 310.143884892086, y: 3.49019607843137, size: 1 },\r\n // { x: 310.791366906475, y: 3.25490196078431, size: 1 },\r\n // { x: 311.438848920863, y: 3.6078431372549, size: 1 },\r\n // { x: 312.73381294964, y: 3.64705882352941, size: 1 },\r\n // { x: 313.381294964029, y: 3.56862745098039, size: 1 },\r\n // { x: 314.676258992806, y: 3.41176470588235, size: 1 },\r\n // { x: 315.323741007194, y: 3.56862745098039, size: 1 },\r\n // { x: 316.618705035971, y: 3.49019607843137, size: 1 },\r\n // { x: 318.561151079137, y: 3.6078431372549, size: 1 },\r\n // { x: 319.208633093525, y: 3.68627450980392, size: 1 },\r\n // { x: 320.503597122302, y: 3.72549019607843, size: 1 },\r\n // { x: 321.151079136691, y: 3.33333333333333, size: 1 },\r\n // { x: 322.446043165468, y: 3.33333333333333, size: 1 },\r\n // { x: 323.093525179856, y: 3.72549019607843, size: 1 },\r\n // { x: 324.388489208633, y: 4.07843137254902, size: 1 },\r\n // { x: 325.035971223022, y: 3.52941176470588, size: 1 },\r\n // { x: 325.68345323741, y: 3.37254901960784, size: 1 },\r\n // { x: 326.330935251799, y: 3.68627450980392, size: 1 },\r\n // { x: 326.978417266187, y: 3.6078431372549, size: 1 },\r\n // { x: 328.920863309353, y: 3.68627450980392, size: 1 },\r\n // { x: 329.568345323741, y: 3.6078431372549, size: 1 },\r\n // { x: 330.215827338129, y: 3.56862745098039, size: 1 },\r\n // { x: 331.510791366906, y: 3.6078431372549, size: 1 },\r\n // { x: 333.453237410072, y: 3.37254901960784, size: 1 },\r\n // { x: 334.10071942446, y: 3.33333333333333, size: 1 },\r\n // { x: 334.748201438849, y: 3.01960784313725, size: 1 },\r\n // { x: 335.395683453237, y: 2.98039215686275, size: 1 },\r\n // { x: 336.690647482014, y: 3.64705882352941, size: 1 },\r\n // { x: 337.338129496403, y: 3.76470588235294, size: 1 },\r\n // { x: 340.575539568345, y: 3.84313725490196, size: 1 },\r\n // { x: 341.870503597122, y: 3.88235294117647, size: 1 },\r\n // { x: 343.165467625899, y: 3.56862745098039, size: 1 },\r\n // { x: 345.107913669065, y: 3.72549019607843, size: 1 },\r\n // { x: 347.697841726619, y: 3.49019607843137, size: 1 },\r\n // { x: 348.345323741007, y: 3.80392156862745, size: 1 },\r\n // { x: 348.992805755396, y: 3.76470588235294, size: 1 },\r\n // { x: 349.640287769784, y: 3.80392156862745, size: 1 },\r\n // { x: 350.935251798561, y: 3.52941176470588, size: 1 },\r\n // { x: 351.58273381295, y: 3.37254901960784, size: 1 },\r\n // { x: 353.525179856115, y: 3.64705882352941, size: 1 },\r\n // { x: 354.820143884892, y: 3.68627450980392, size: 1 },\r\n // { x: 356.115107913669, y: 3.56862745098039, size: 1 },\r\n // { x: 357.410071942446, y: 3.64705882352941, size: 1 },\r\n // { x: 0, y: 3.45098039215686, size: 1 },\r\n // { x: 0.647482014388489, y: 3.84313725490196, size: 1 },\r\n // { x: 1.29496402877698, y: 3.64705882352941, size: 1 },\r\n // { x: 1.94244604316547, y: 3.88235294117647, size: 1 },\r\n // { x: 3.88489208633094, y: 3.56862745098039, size: 1 },\r\n // { x: 5.8273381294964, y: 3.76470588235294, size: 1 },\r\n // { x: 6.47482014388489, y: 3.68627450980392, size: 1 },\r\n // { x: 7.12230215827338, y: 3.92156862745098, size: 1 },\r\n // { x: 9.06474820143885, y: 3.64705882352941, size: 1 },\r\n // { x: 12.3021582733813, y: 3.56862745098039, size: 1 },\r\n // { x: 12.9496402877698, y: 3.68627450980392, size: 1 },\r\n // { x: 13.5971223021583, y: 3.68627450980392, size: 1 },\r\n // { x: 15.5395683453237, y: 3.64705882352941, size: 1 },\r\n // { x: 16.8345323741007, y: 3.33333333333333, size: 1 },\r\n // { x: 17.4820143884892, y: 2.90196078431373, size: 1 },\r\n // { x: 18.1294964028777, y: 2.82352941176471, size: 1 },\r\n // { x: 18.7769784172662, y: 1.2156862745098, size: 1 },\r\n // { x: 19.4244604316547, y: 1.96078431372549, size: 1 },\r\n // { x: 20.0719424460432, y: 2.19607843137255, size: 1 },\r\n // { x: 20.7194244604317, y: 2.54901960784314, size: 1 },\r\n // { x: 22.0143884892086, y: 3.45098039215686, size: 1 },\r\n // { x: 22.6618705035971, y: 3.49019607843137, size: 1 },\r\n // { x: 23.3093525179856, y: 2.82352941176471, size: 1 },\r\n // { x: 23.9568345323741, y: 3.29411764705882, size: 1 },\r\n // { x: 25.2517985611511, y: 3.68627450980392, size: 1 },\r\n // { x: 26.5467625899281, y: 3.84313725490196, size: 1 },\r\n // { x: 27.1942446043165, y: 3.6078431372549, size: 1 },\r\n // { x: 27.841726618705, y: 3.01960784313725, size: 1 },\r\n // { x: 28.4892086330935, y: 2.98039215686275, size: 1 },\r\n // { x: 29.7841726618705, y: 3.56862745098039, size: 1 },\r\n // { x: 32.3741007194245, y: 3.6078431372549, size: 1 },\r\n // { x: 33.6690647482014, y: 3.45098039215686, size: 1 },\r\n // { x: 34.3165467625899, y: 2.82352941176471, size: 1 },\r\n // { x: 34.9640287769784, y: 3.37254901960784, size: 1 },\r\n // { x: 35.6115107913669, y: 3.29411764705882, size: 1 },\r\n // { x: 36.2589928057554, y: 3.49019607843137, size: 1 },\r\n // { x: 36.9064748201439, y: 3.33333333333333, size: 1 },\r\n // { x: 37.5539568345324, y: 3.41176470588235, size: 1 },\r\n // { x: 38.2014388489209, y: 3.37254901960784, size: 1 },\r\n // { x: 38.8489208633094, y: 3.17647058823529, size: 1 },\r\n // { x: 39.4964028776978, y: 3.2156862745098, size: 1 },\r\n // { x: 40.1438848920863, y: 2.7843137254902, size: 1 },\r\n // { x: 40.7913669064748, y: 2.62745098039216, size: 1 },\r\n // { x: 44.0287769784173, y: 3.76470588235294, size: 1 },\r\n // { x: 45.9712230215827, y: 3.6078431372549, size: 1 },\r\n // { x: 46.6187050359712, y: 3.37254901960784, size: 1 },\r\n // { x: 47.9136690647482, y: 3.49019607843137, size: 1 },\r\n // { x: 48.5611510791367, y: 3.6078431372549, size: 1 },\r\n // { x: 49.2086330935252, y: 3.52941176470588, size: 1 },\r\n // { x: 49.8561151079137, y: 3.37254901960784, size: 1 },\r\n // { x: 51.7985611510791, y: 3.37254901960784, size: 1 },\r\n // { x: 53.7410071942446, y: 3.6078431372549, size: 1 },\r\n // { x: 54.3884892086331, y: 3.37254901960784, size: 1 },\r\n // { x: 55.6834532374101, y: 3.6078431372549, size: 1 },\r\n // { x: 58.273381294964, y: 3.52941176470588, size: 1 },\r\n // { x: 58.9208633093525, y: 3.68627450980392, size: 1 },\r\n // { x: 59.568345323741, y: 3.37254901960784, size: 1 },\r\n // { x: 60.2158273381295, y: 3.29411764705882, size: 1 },\r\n // { x: 60.863309352518, y: 3.25490196078431, size: 1 },\r\n // { x: 61.5107913669065, y: 3.13725490196078, size: 1 },\r\n // { x: 62.158273381295, y: 2.70588235294118, size: 1 },\r\n // { x: 62.8057553956835, y: 3.37254901960784, size: 1 },\r\n // { x: 63.4532374100719, y: 3.72549019607843, size: 1 },\r\n // { x: 64.1007194244604, y: 3.45098039215686, size: 1 },\r\n // { x: 64.7482014388489, y: 3.72549019607843, size: 1 },\r\n // { x: 65.3956834532374, y: 3.6078431372549, size: 1 },\r\n // { x: 66.6906474820144, y: 3.76470588235294, size: 1 },\r\n // { x: 67.3381294964029, y: 3.72549019607843, size: 1 },\r\n // { x: 67.9856115107914, y: 3.72549019607843, size: 1 },\r\n // { x: 68.6330935251799, y: 3.56862745098039, size: 1 },\r\n // { x: 69.2805755395683, y: 3.88235294117647, size: 1 },\r\n // { x: 70.5755395683453, y: 3.6078431372549, size: 1 },\r\n // { x: 72.5179856115108, y: 3.56862745098039, size: 1 },\r\n // { x: 74.4604316546763, y: 3.68627450980392, size: 1 },\r\n // { x: 75.1079136690647, y: 3.68627450980392, size: 1 },\r\n // { x: 75.7553956834532, y: 3.52941176470588, size: 1 },\r\n // { x: 78.3453237410072, y: 3.49019607843137, size: 1 },\r\n // { x: 78.9928057553957, y: 3.84313725490196, size: 1 },\r\n // { x: 80.2877697841727, y: 3.68627450980392, size: 1 },\r\n // { x: 81.5827338129496, y: 3.13725490196078, size: 1 },\r\n // { x: 82.2302158273381, y: 3.05882352941176, size: 1 },\r\n // { x: 83.5251798561151, y: 2.11764705882353, size: 1 },\r\n // { x: 84.1726618705036, y: 3.49019607843137, size: 1 },\r\n // { x: 84.8201438848921, y: 3.68627450980392, size: 1 },\r\n // { x: 87.410071942446, y: 3.72549019607843, size: 1 },\r\n // { x: 91.294964028777, y: 3.49019607843137, size: 1 },\r\n // { x: 91.9424460431655, y: 3.72549019607843, size: 1 },\r\n // { x: 92.589928057554, y: 3.64705882352941, size: 1 },\r\n // { x: 93.2374100719424, y: 3.80392156862745, size: 1 },\r\n // { x: 93.8848920863309, y: 3.68627450980392, size: 1 },\r\n // { x: 94.5323741007194, y: 3.64705882352941, size: 1 },\r\n // { x: 95.8273381294964, y: 3.6078431372549, size: 1 },\r\n // { x: 99.0647482014388, y: 3.56862745098039, size: 1 },\r\n // { x: 99.7122302158273, y: 3.80392156862745, size: 1 },\r\n // { x: 101.654676258993, y: 3.6078431372549, size: 1 },\r\n // { x: 102.302158273381, y: 3.45098039215686, size: 1 },\r\n // { x: 102.94964028777, y: 3.41176470588235, size: 1 },\r\n // { x: 103.597122302158, y: 3.2156862745098, size: 1 },\r\n // { x: 104.244604316547, y: 2.86274509803922, size: 1 },\r\n // { x: 104.892086330935, y: 2.15686274509804, size: 1 },\r\n // { x: 105.539568345324, y: 2.15686274509804, size: 1 },\r\n // { x: 106.187050359712, y: 3.41176470588235, size: 1 },\r\n // { x: 106.834532374101, y: 3.72549019607843, size: 1 },\r\n // { x: 108.129496402878, y: 3.49019607843137, size: 1 },\r\n // { x: 110.071942446043, y: 3.37254901960784, size: 1 },\r\n // { x: 112.014388489209, y: 3.41176470588235, size: 1 },\r\n // { x: 112.661870503597, y: 3.52941176470588, size: 1 },\r\n // { x: 113.956834532374, y: 3.80392156862745, size: 1 },\r\n // { x: 114.604316546763, y: 3.45098039215686, size: 1 },\r\n // { x: 115.251798561151, y: 3.80392156862745, size: 1 },\r\n // { x: 116.546762589928, y: 3.6078431372549, size: 1 },\r\n // { x: 117.194244604317, y: 3.76470588235294, size: 1 },\r\n // { x: 117.841726618705, y: 3.49019607843137, size: 1 },\r\n // { x: 121.726618705036, y: 3.68627450980392, size: 1 },\r\n // { x: 122.374100719424, y: 3.49019607843137, size: 1 },\r\n // { x: 124.31654676259, y: 3.41176470588235, size: 1 },\r\n // { x: 124.964028776978, y: 2.98039215686275, size: 1 },\r\n // { x: 125.611510791367, y: 3.05882352941176, size: 1 },\r\n // { x: 126.258992805755, y: 3.6078431372549, size: 1 },\r\n // { x: 126.906474820144, y: 3.52941176470588, size: 1 },\r\n // { x: 127.553956834532, y: 3.6078431372549, size: 1 },\r\n // { x: 128.848920863309, y: 3.76470588235294, size: 1 },\r\n // { x: 130.143884892086, y: 3.76470588235294, size: 1 },\r\n // { x: 130.791366906475, y: 3.72549019607843, size: 1 },\r\n // { x: 132.086330935252, y: 3.84313725490196, size: 1 },\r\n // { x: 133.381294964029, y: 3.6078431372549, size: 1 },\r\n // { x: 134.028776978417, y: 3.6078431372549, size: 1 },\r\n // { x: 135.323741007194, y: 3.84313725490196, size: 1 },\r\n // { x: 137.26618705036, y: 3.49019607843137, size: 1 },\r\n // { x: 139.208633093525, y: 3.52941176470588, size: 1 },\r\n // { x: 140.503597122302, y: 3.88235294117647, size: 1 },\r\n // { x: 143.093525179856, y: 3.49019607843137, size: 1 },\r\n // { x: 143.741007194245, y: 3.52941176470588, size: 1 },\r\n // { x: 146.978417266187, y: 3.52941176470588, size: 1 },\r\n // { x: 148.920863309353, y: 3.6078431372549, size: 1 },\r\n // { x: 149.568345323741, y: 3.96078431372549, size: 1 },\r\n // { x: 150.215827338129, y: 3.76470588235294, size: 1 },\r\n // { x: 152.158273381295, y: 3.80392156862745, size: 1 },\r\n // { x: 154.10071942446, y: 3.49019607843137, size: 1 },\r\n // { x: 154.748201438849, y: 3.52941176470588, size: 1 },\r\n // { x: 155.395683453237, y: 3.76470588235294, size: 1 },\r\n // { x: 156.043165467626, y: 3.64705882352941, size: 1 },\r\n // { x: 156.690647482014, y: 3.41176470588235, size: 1 },\r\n // { x: 159.280575539568, y: 3.6078431372549, size: 1 },\r\n // { x: 159.928057553957, y: 3.49019607843137, size: 1 },\r\n // { x: 160.575539568345, y: 3.41176470588235, size: 1 },\r\n // { x: 162.517985611511, y: 3.45098039215686, size: 1 },\r\n // { x: 163.165467625899, y: 3.52941176470588, size: 1 },\r\n // { x: 163.812949640288, y: 3.72549019607843, size: 1 },\r\n // { x: 164.460431654676, y: 3.56862745098039, size: 1 },\r\n // { x: 165.107913669065, y: 3.6078431372549, size: 1 },\r\n // { x: 165.755395683453, y: 3.64705882352941, size: 1 },\r\n // { x: 167.05035971223, y: 3.45098039215686, size: 1 },\r\n // { x: 168.345323741007, y: 3.41176470588235, size: 1 },\r\n // { x: 168.992805755396, y: 3.92156862745098, size: 1 },\r\n // { x: 169.640287769784, y: 3.64705882352941, size: 1 },\r\n // { x: 170.287769784173, y: 3.52941176470588, size: 1 },\r\n // { x: 170.935251798561, y: 3.96078431372549, size: 1 },\r\n // { x: 171.58273381295, y: 3.72549019607843, size: 1 },\r\n // { x: 173.525179856115, y: 3.92156862745098, size: 1 },\r\n // { x: 175.467625899281, y: 3.52941176470588, size: 1 },\r\n // { x: 176.762589928058, y: 3.52941176470588, size: 1 },\r\n // { x: 180, y: 3.56862745098039, size: 1 },\r\n // { x: 181.294964028777, y: 3.76470588235294, size: 1 },\r\n // { x: 181.942446043165, y: 3.41176470588235, size: 1 },\r\n // { x: 182.589928057554, y: 3.56862745098039, size: 1 },\r\n // { x: 183.237410071942, y: 3.68627450980392, size: 1 },\r\n // { x: 183.884892086331, y: 3.56862745098039, size: 1 },\r\n // { x: 184.532374100719, y: 3.68627450980392, size: 1 },\r\n // { x: 186.474820143885, y: 3.6078431372549, size: 1 },\r\n // { x: 187.769784172662, y: 3.76470588235294, size: 1 },\r\n // { x: 189.064748201439, y: 3.64705882352941, size: 1 },\r\n // { x: 189.712230215827, y: 3.49019607843137, size: 1 },\r\n // { x: 190.359712230216, y: 3.45098039215686, size: 1 },\r\n // { x: 191.007194244604, y: 3.68627450980392, size: 1 },\r\n // { x: 191.654676258993, y: 3.6078431372549, size: 1 },\r\n // { x: 192.302158273381, y: 3.76470588235294, size: 1 },\r\n // { x: 192.94964028777, y: 3.72549019607843, size: 1 },\r\n // { x: 193.597122302158, y: 3.64705882352941, size: 1 },\r\n // { x: 194.892086330935, y: 3.6078431372549, size: 1 },\r\n // { x: 196.187050359712, y: 3.6078431372549, size: 1 },\r\n // { x: 198.776978417266, y: 3.68627450980392, size: 1 },\r\n // { x: 199.424460431655, y: 3.49019607843137, size: 1 },\r\n // { x: 200.071942446043, y: 3.52941176470588, size: 1 },\r\n // { x: 200.719424460432, y: 3.76470588235294, size: 1 },\r\n // { x: 201.36690647482, y: 3.6078431372549, size: 1 },\r\n // { x: 202.014388489209, y: 3.45098039215686, size: 1 },\r\n // { x: 203.309352517986, y: 3.92156862745098, size: 1 },\r\n // { x: 203.956834532374, y: 3.64705882352941, size: 1 },\r\n // { x: 204.604316546763, y: 3.6078431372549, size: 1 },\r\n // { x: 205.251798561151, y: 3.72549019607843, size: 1 },\r\n // { x: 206.546762589928, y: 3.64705882352941, size: 1 },\r\n // { x: 207.841726618705, y: 3.45098039215686, size: 1 },\r\n // { x: 208.489208633094, y: 3.64705882352941, size: 1 },\r\n // { x: 211.079136690647, y: 3.25490196078431, size: 1 },\r\n // { x: 211.726618705036, y: 3.05882352941176, size: 1 },\r\n // { x: 212.374100719424, y: 3.2156862745098, size: 1 },\r\n // { x: 213.021582733813, y: 2.86274509803922, size: 1 },\r\n // { x: 213.669064748201, y: 3.33333333333333, size: 1 },\r\n // { x: 214.31654676259, y: 3.84313725490196, size: 1 },\r\n // { x: 214.964028776978, y: 3.76470588235294, size: 1 },\r\n // { x: 215.611510791367, y: 3.45098039215686, size: 1 },\r\n // { x: 216.258992805755, y: 3.80392156862745, size: 1 },\r\n // { x: 216.906474820144, y: 3.68627450980392, size: 1 },\r\n // { x: 217.553956834532, y: 3.88235294117647, size: 1 },\r\n // { x: 220.791366906475, y: 3.6078431372549, size: 1 },\r\n // { x: 222.086330935252, y: 3.45098039215686, size: 1 },\r\n // { x: 222.73381294964, y: 3.52941176470588, size: 1 },\r\n // { x: 225.323741007194, y: 3.56862745098039, size: 1 },\r\n // { x: 225.971223021583, y: 3.64705882352941, size: 1 },\r\n // { x: 226.618705035971, y: 3.68627450980392, size: 1 },\r\n // { x: 227.26618705036, y: 3.68627450980392, size: 1 },\r\n // { x: 229.208633093525, y: 3.52941176470588, size: 1 },\r\n // { x: 230.503597122302, y: 3.84313725490196, size: 1 },\r\n // { x: 231.798561151079, y: 3.41176470588235, size: 1 },\r\n // { x: 232.446043165468, y: 3.29411764705882, size: 1 },\r\n // { x: 233.093525179856, y: 3.25490196078431, size: 1 },\r\n // { x: 233.741007194245, y: 3.45098039215686, size: 1 },\r\n // { x: 234.388489208633, y: 2.62745098039216, size: 1 },\r\n // { x: 235.035971223022, y: 2.58823529411765, size: 1 },\r\n // { x: 237.625899280576, y: 3.6078431372549, size: 1 },\r\n // { x: 239.568345323741, y: 3.68627450980392, size: 1 },\r\n // { x: 240.215827338129, y: 3.76470588235294, size: 1 },\r\n // { x: 240.863309352518, y: 3.56862745098039, size: 1 },\r\n // { x: 242.158273381295, y: 3.56862745098039, size: 1 },\r\n // { x: 243.453237410072, y: 3.45098039215686, size: 1 },\r\n // { x: 246.690647482014, y: 3.56862745098039, size: 1 },\r\n // { x: 247.985611510791, y: 3.68627450980392, size: 1 },\r\n // { x: 249.280575539568, y: 3.68627450980392, size: 1 },\r\n // { x: 249.928057553957, y: 3.68627450980392, size: 1 },\r\n // { x: 250.575539568345, y: 3.76470588235294, size: 1 },\r\n // { x: 251.223021582734, y: 3.49019607843137, size: 1 },\r\n // { x: 252.517985611511, y: 3.6078431372549, size: 1 },\r\n // { x: 253.165467625899, y: 3.68627450980392, size: 1 },\r\n // { x: 254.460431654676, y: 3.05882352941176, size: 1 },\r\n // { x: 255.107913669065, y: 3.2156862745098, size: 1 },\r\n // { x: 255.755395683453, y: 2.27450980392157, size: 1 },\r\n // { x: 256.402877697842, y: 2.62745098039216, size: 1 },\r\n // { x: 257.05035971223, y: 3.37254901960784, size: 1 },\r\n // { x: 258.345323741007, y: 3.80392156862745, size: 1 },\r\n // { x: 260.287769784173, y: 3.64705882352941, size: 1 },\r\n // { x: 260.935251798561, y: 3.72549019607843, size: 1 },\r\n // { x: 262.877697841727, y: 3.68627450980392, size: 1 },\r\n // { x: 263.525179856115, y: 3.76470588235294, size: 1 },\r\n // { x: 265.467625899281, y: 3.72549019607843, size: 1 },\r\n // { x: 266.115107913669, y: 3.80392156862745, size: 1 },\r\n // { x: 266.762589928058, y: 3.6078431372549, size: 1 },\r\n // { x: 267.410071942446, y: 3.76470588235294, size: 1 },\r\n // { x: 268.057553956835, y: 3.52941176470588, size: 1 },\r\n // { x: 268.705035971223, y: 3.68627450980392, size: 1 },\r\n // { x: 271.294964028777, y: 3.80392156862745, size: 1 },\r\n // { x: 271.942446043165, y: 3.49019607843137, size: 1 },\r\n // { x: 273.237410071942, y: 3.88235294117647, size: 1 },\r\n // { x: 273.884892086331, y: 3.88235294117647, size: 1 },\r\n // { x: 275.827338129496, y: 3.01960784313725, size: 1 },\r\n // { x: 276.474820143885, y: 3.37254901960784, size: 1 },\r\n // { x: 277.122302158273, y: 3.88235294117647, size: 1 },\r\n // { x: 279.064748201439, y: 3.68627450980392, size: 1 },\r\n // { x: 281.007194244604, y: 3.64705882352941, size: 1 },\r\n // { x: 281.654676258993, y: 3.68627450980392, size: 1 },\r\n // { x: 282.302158273381, y: 3.49019607843137, size: 1 },\r\n // { x: 284.244604316547, y: 3.84313725490196, size: 1 },\r\n // { x: 284.892086330935, y: 3.6078431372549, size: 1 },\r\n // { x: 286.187050359712, y: 3.80392156862745, size: 1 },\r\n // { x: 288.776978417266, y: 3.37254901960784, size: 1 },\r\n // { x: 290.071942446043, y: 3.84313725490196, size: 1 },\r\n // { x: 290.719424460432, y: 3.68627450980392, size: 1 },\r\n // { x: 291.36690647482, y: 3.6078431372549, size: 1 },\r\n // { x: 292.661870503597, y: 3.64705882352941, size: 1 },\r\n // { x: 293.956834532374, y: 3.52941176470588, size: 1 },\r\n // { x: 296.546762589928, y: 3.45098039215686, size: 1 },\r\n // { x: 297.194244604317, y: 3.33333333333333, size: 1 },\r\n // { x: 297.841726618705, y: 3.29411764705882, size: 1 },\r\n // { x: 298.489208633094, y: 3.25490196078431, size: 1 },\r\n // { x: 299.784172661871, y: 3.88235294117647, size: 1 },\r\n // { x: 301.079136690647, y: 3.64705882352941, size: 1 },\r\n // { x: 303.021582733813, y: 3.49019607843137, size: 1 },\r\n // { x: 303.669064748201, y: 3.68627450980392, size: 1 },\r\n // { x: 304.964028776978, y: 3.52941176470588, size: 1 },\r\n // { x: 306.258992805755, y: 3.76470588235294, size: 1 },\r\n // { x: 307.553956834532, y: 3.84313725490196, size: 1 },\r\n // { x: 308.201438848921, y: 3.45098039215686, size: 1 },\r\n // { x: 309.496402877698, y: 3.72549019607843, size: 1 },\r\n // { x: 314.676258992806, y: 3.49019607843137, size: 1 },\r\n // { x: 316.618705035971, y: 3.56862745098039, size: 1 },\r\n // { x: 317.26618705036, y: 3.84313725490196, size: 1 },\r\n // { x: 317.913669064748, y: 3.72549019607843, size: 1 },\r\n // { x: 318.561151079137, y: 3.68627450980392, size: 1 },\r\n // { x: 319.208633093525, y: 3.37254901960784, size: 1 },\r\n // { x: 319.856115107914, y: 3.68627450980392, size: 1 },\r\n // { x: 321.798561151079, y: 3.6078431372549, size: 1 },\r\n // { x: 322.446043165468, y: 3.88235294117647, size: 1 },\r\n // { x: 323.093525179856, y: 3.68627450980392, size: 1 },\r\n // { x: 323.741007194245, y: 3.56862745098039, size: 1 },\r\n // { x: 324.388489208633, y: 3.76470588235294, size: 1 },\r\n // { x: 325.68345323741, y: 3.49019607843137, size: 1 },\r\n // { x: 326.330935251799, y: 3.52941176470588, size: 1 },\r\n // { x: 328.273381294964, y: 3.56862745098039, size: 1 },\r\n // { x: 328.920863309353, y: 4.03921568627451, size: 1 },\r\n // { x: 329.568345323741, y: 3.76470588235294, size: 1 },\r\n // { x: 330.863309352518, y: 3.84313725490196, size: 1 },\r\n // { x: 331.510791366906, y: 3.68627450980392, size: 1 },\r\n // { x: 332.158273381295, y: 3.72549019607843, size: 1 },\r\n // { x: 334.748201438849, y: 3.64705882352941, size: 1 },\r\n // { x: 336.690647482014, y: 3.6078431372549, size: 1 },\r\n // { x: 337.338129496403, y: 3.45098039215686, size: 1 },\r\n // { x: 338.63309352518, y: 3.49019607843137, size: 1 },\r\n // { x: 339.280575539568, y: 3.52941176470588, size: 1 },\r\n // { x: 341.223021582734, y: 3.52941176470588, size: 1 },\r\n // { x: 341.870503597122, y: 3.52941176470588, size: 1 },\r\n // { x: 342.517985611511, y: 3.45098039215686, size: 1 },\r\n // { x: 343.165467625899, y: 3.45098039215686, size: 1 },\r\n // { x: 344.460431654676, y: 3.52941176470588, size: 1 },\r\n // { x: 345.755395683453, y: 3.52941176470588, size: 1 },\r\n // { x: 346.402877697842, y: 3.64705882352941, size: 1 },\r\n // { x: 347.697841726619, y: 3.52941176470588, size: 1 },\r\n // { x: 348.345323741007, y: 3.45098039215686, size: 1 },\r\n // { x: 349.640287769784, y: 3.45098039215686, size: 1 },\r\n // { x: 350.935251798561, y: 3.45098039215686, size: 1 },\r\n // { x: 352.877697841727, y: 3.72549019607843, size: 1 },\r\n // { x: 353.525179856115, y: 3.52941176470588, size: 1 },\r\n // { x: 354.172661870504, y: 3.68627450980392, size: 1 },\r\n // { x: 354.820143884892, y: 3.45098039215686, size: 1 },\r\n // { x: 355.467625899281, y: 3.52941176470588, size: 1 },\r\n // { x: 356.115107913669, y: 3.49019607843137, size: 1 },\r\n // { x: 357.410071942446, y: 3.68627450980392, size: 1 },\r\n // { x: 358.705035971223, y: 3.52941176470588, size: 1 },\r\n // { x: 359.352517985611, y: 3.49019607843137, size: 1 },\r\n // { x: 0.648648648648649, y: 3.45098039215686, size: 1 },\r\n // { x: 1.2972972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 1.94594594594595, y: 3.6078431372549, size: 1 },\r\n // { x: 2.59459459459459, y: 3.68627450980392, size: 1 },\r\n // { x: 3.24324324324324, y: 3.6078431372549, size: 1 },\r\n // { x: 3.89189189189189, y: 3.76470588235294, size: 1 },\r\n // { x: 4.54054054054054, y: 3.49019607843137, size: 1 },\r\n // { x: 5.18918918918919, y: 3.68627450980392, size: 1 },\r\n // { x: 5.83783783783784, y: 3.56862745098039, size: 1 },\r\n // { x: 6.48648648648649, y: 3.56862745098039, size: 1 },\r\n // { x: 7.13513513513514, y: 3.52941176470588, size: 1 },\r\n // { x: 7.78378378378378, y: 3.37254901960784, size: 1 },\r\n // { x: 9.08108108108108, y: 3.84313725490196, size: 1 },\r\n // { x: 10.3783783783784, y: 3.37254901960784, size: 1 },\r\n // { x: 11.027027027027, y: 3.29411764705882, size: 1 },\r\n // { x: 11.6756756756757, y: 3.37254901960784, size: 1 },\r\n // { x: 12.3243243243243, y: 3.41176470588235, size: 1 },\r\n // { x: 12.972972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 13.6216216216216, y: 3.56862745098039, size: 1 },\r\n // { x: 15.5675675675676, y: 3.25490196078431, size: 1 },\r\n // { x: 16.2162162162162, y: 3.2156862745098, size: 1 },\r\n // { x: 16.8648648648649, y: 3.49019607843137, size: 1 },\r\n // { x: 17.5135135135135, y: 3.41176470588235, size: 1 },\r\n // { x: 18.1621621621622, y: 3.29411764705882, size: 1 },\r\n // { x: 20.1081081081081, y: 3.52941176470588, size: 1 },\r\n // { x: 20.7567567567568, y: 3.29411764705882, size: 1 },\r\n // { x: 21.4054054054054, y: 3.49019607843137, size: 1 },\r\n // { x: 22.0540540540541, y: 3.45098039215686, size: 1 },\r\n // { x: 22.7027027027027, y: 3.29411764705882, size: 1 },\r\n // { x: 23.3513513513514, y: 3.45098039215686, size: 1 },\r\n // { x: 24, y: 3.17647058823529, size: 1 },\r\n // { x: 24.6486486486486, y: 3.29411764705882, size: 1 },\r\n // { x: 25.2972972972973, y: 3.25490196078431, size: 1 },\r\n // { x: 25.9459459459459, y: 2.86274509803922, size: 1 },\r\n // { x: 26.5945945945946, y: 3.01960784313725, size: 1 },\r\n // { x: 27.2432432432432, y: 3.05882352941176, size: 1 },\r\n // { x: 27.8918918918919, y: 3.33333333333333, size: 1 },\r\n // { x: 29.1891891891892, y: 3.80392156862745, size: 1 },\r\n // { x: 29.8378378378378, y: 3.56862745098039, size: 1 },\r\n // { x: 30.4864864864865, y: 3.80392156862745, size: 1 },\r\n // { x: 31.1351351351351, y: 3.52941176470588, size: 1 },\r\n // { x: 31.7837837837838, y: 3.92156862745098, size: 1 },\r\n // { x: 32.4324324324324, y: 3.6078431372549, size: 1 },\r\n // { x: 33.0810810810811, y: 3.52941176470588, size: 1 },\r\n // { x: 33.7297297297297, y: 3.6078431372549, size: 1 },\r\n // { x: 34.3783783783784, y: 3.92156862745098, size: 1 },\r\n // { x: 35.027027027027, y: 3.84313725490196, size: 1 },\r\n // { x: 35.6756756756757, y: 3.6078431372549, size: 1 },\r\n // { x: 36.972972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 37.6216216216216, y: 3.52941176470588, size: 1 },\r\n // { x: 38.9189189189189, y: 3.76470588235294, size: 1 },\r\n // { x: 39.5675675675676, y: 3.52941176470588, size: 1 },\r\n // { x: 40.2162162162162, y: 3.72549019607843, size: 1 },\r\n // { x: 40.8648648648649, y: 3.80392156862745, size: 1 },\r\n // { x: 41.5135135135135, y: 3.6078431372549, size: 1 },\r\n // { x: 42.8108108108108, y: 3.72549019607843, size: 1 },\r\n // { x: 43.4594594594595, y: 3.52941176470588, size: 1 },\r\n // { x: 44.1081081081081, y: 3.49019607843137, size: 1 },\r\n // { x: 44.7567567567568, y: 3.6078431372549, size: 1 },\r\n // { x: 45.4054054054054, y: 3.37254901960784, size: 1 },\r\n // { x: 46.0540540540541, y: 3.25490196078431, size: 1 },\r\n // { x: 46.7027027027027, y: 3.17647058823529, size: 1 },\r\n // { x: 47.3513513513514, y: 2.62745098039216, size: 1 },\r\n // { x: 48, y: 2.62745098039216, size: 1 },\r\n // { x: 48.6486486486486, y: 2.90196078431373, size: 1 },\r\n // { x: 49.2972972972973, y: 2.98039215686275, size: 1 },\r\n // { x: 49.9459459459459, y: 3.49019607843137, size: 1 },\r\n // { x: 50.5945945945946, y: 3.49019607843137, size: 1 },\r\n // { x: 51.2432432432432, y: 3.56862745098039, size: 1 },\r\n // { x: 51.8918918918919, y: 3.45098039215686, size: 1 },\r\n // { x: 53.1891891891892, y: 3.64705882352941, size: 1 },\r\n // { x: 53.8378378378378, y: 3.41176470588235, size: 1 },\r\n // { x: 54.4864864864865, y: 3.25490196078431, size: 1 },\r\n // { x: 55.1351351351351, y: 3.52941176470588, size: 1 },\r\n // { x: 55.7837837837838, y: 3.41176470588235, size: 1 },\r\n // { x: 56.4324324324324, y: 3.6078431372549, size: 1 },\r\n // { x: 57.0810810810811, y: 3.49019607843137, size: 1 },\r\n // { x: 57.7297297297297, y: 3.25490196078431, size: 1 },\r\n // { x: 58.3783783783784, y: 3.49019607843137, size: 1 },\r\n // { x: 59.027027027027, y: 3.37254901960784, size: 1 },\r\n // { x: 59.6756756756757, y: 3.52941176470588, size: 1 },\r\n // { x: 60.3243243243243, y: 3.29411764705882, size: 1 },\r\n // { x: 61.6216216216216, y: 3.49019607843137, size: 1 },\r\n // { x: 62.2702702702703, y: 3.64705882352941, size: 1 },\r\n // { x: 62.9189189189189, y: 3.6078431372549, size: 1 },\r\n // { x: 63.5675675675676, y: 3.41176470588235, size: 1 },\r\n // { x: 64.2162162162162, y: 3.49019607843137, size: 1 },\r\n // { x: 64.8648648648649, y: 3.37254901960784, size: 1 },\r\n // { x: 65.5135135135135, y: 3.33333333333333, size: 1 },\r\n // { x: 66.1621621621622, y: 3.37254901960784, size: 1 },\r\n // { x: 66.8108108108108, y: 3.49019607843137, size: 1 },\r\n // { x: 68.1081081081081, y: 3.33333333333333, size: 1 },\r\n // { x: 68.7567567567568, y: 3.2156862745098, size: 1 },\r\n // { x: 69.4054054054054, y: 3.29411764705882, size: 1 },\r\n // { x: 70.054054054054, y: 3.49019607843137, size: 1 },\r\n // { x: 71.3513513513514, y: 3.45098039215686, size: 1 },\r\n // { x: 72, y: 3.49019607843137, size: 1 },\r\n // { x: 73.2972972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 73.945945945946, y: 3.84313725490196, size: 1 },\r\n // { x: 74.5945945945946, y: 3.45098039215686, size: 1 },\r\n // { x: 75.2432432432432, y: 3.68627450980392, size: 1 },\r\n // { x: 75.8918918918919, y: 3.72549019607843, size: 1 },\r\n // { x: 76.5405405405405, y: 3.45098039215686, size: 1 },\r\n // { x: 77.8378378378378, y: 3.6078431372549, size: 1 },\r\n // { x: 78.4864864864865, y: 3.6078431372549, size: 1 },\r\n // { x: 79.7837837837838, y: 3.52941176470588, size: 1 },\r\n // { x: 80.4324324324324, y: 3.45098039215686, size: 1 },\r\n // { x: 81.7297297297297, y: 3.45098039215686, size: 1 },\r\n // { x: 83.6756756756757, y: 3.56862745098039, size: 1 },\r\n // { x: 84.3243243243243, y: 3.64705882352941, size: 1 },\r\n // { x: 85.6216216216216, y: 3.49019607843137, size: 1 },\r\n // { x: 86.2702702702703, y: 3.52941176470588, size: 1 },\r\n // { x: 86.9189189189189, y: 3.52941176470588, size: 1 },\r\n // { x: 88.2162162162162, y: 3.29411764705882, size: 1 },\r\n // { x: 88.8648648648649, y: 3.92156862745098, size: 1 },\r\n // { x: 89.5135135135135, y: 3.49019607843137, size: 1 },\r\n // { x: 90.1621621621622, y: 3.2156862745098, size: 1 },\r\n // { x: 90.8108108108108, y: 3.05882352941176, size: 1 },\r\n // { x: 91.4594594594595, y: 3.6078431372549, size: 1 },\r\n // { x: 92.1081081081081, y: 3.49019607843137, size: 1 },\r\n // { x: 92.7567567567568, y: 3.68627450980392, size: 1 },\r\n // { x: 93.4054054054054, y: 3.41176470588235, size: 1 },\r\n // { x: 94.054054054054, y: 3.64705882352941, size: 1 },\r\n // { x: 94.7027027027027, y: 3.6078431372549, size: 1 },\r\n // { x: 95.3513513513514, y: 3.37254901960784, size: 1 },\r\n // { x: 96, y: 3.41176470588235, size: 1 },\r\n // { x: 96.6486486486486, y: 3.52941176470588, size: 1 },\r\n // { x: 97.2972972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 99.2432432432432, y: 3.68627450980392, size: 1 },\r\n // { x: 99.8918918918919, y: 3.72549019607843, size: 1 },\r\n // { x: 100.540540540541, y: 3.56862745098039, size: 1 },\r\n // { x: 101.189189189189, y: 3.56862745098039, size: 1 },\r\n // { x: 101.837837837838, y: 3.49019607843137, size: 1 },\r\n // { x: 102.486486486486, y: 3.72549019607843, size: 1 },\r\n // { x: 103.783783783784, y: 3.6078431372549, size: 1 },\r\n // { x: 105.081081081081, y: 3.49019607843137, size: 1 },\r\n // { x: 105.72972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 106.378378378378, y: 3.52941176470588, size: 1 },\r\n // { x: 107.027027027027, y: 3.52941176470588, size: 1 },\r\n // { x: 107.675675675676, y: 3.45098039215686, size: 1 },\r\n // { x: 108.324324324324, y: 3.56862745098039, size: 1 },\r\n // { x: 108.972972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 109.621621621622, y: 3.52941176470588, size: 1 },\r\n // { x: 110.918918918919, y: 3.64705882352941, size: 1 },\r\n // { x: 112.216216216216, y: 3.6078431372549, size: 1 },\r\n // { x: 112.864864864865, y: 3.56862745098039, size: 1 },\r\n // { x: 114.162162162162, y: 3.72549019607843, size: 1 },\r\n // { x: 114.810810810811, y: 3.49019607843137, size: 1 },\r\n // { x: 115.459459459459, y: 3.68627450980392, size: 1 },\r\n // { x: 116.108108108108, y: 3.6078431372549, size: 1 },\r\n // { x: 116.756756756757, y: 3.64705882352941, size: 1 },\r\n // { x: 117.405405405405, y: 3.56862745098039, size: 1 },\r\n // { x: 118.054054054054, y: 3.49019607843137, size: 1 },\r\n // { x: 118.702702702703, y: 3.41176470588235, size: 1 },\r\n // { x: 120, y: 3.64705882352941, size: 1 },\r\n // { x: 121.297297297297, y: 3.68627450980392, size: 1 },\r\n // { x: 121.945945945946, y: 3.6078431372549, size: 1 },\r\n // { x: 122.594594594595, y: 3.37254901960784, size: 1 },\r\n // { x: 123.243243243243, y: 3.56862745098039, size: 1 },\r\n // { x: 123.891891891892, y: 3.45098039215686, size: 1 },\r\n // { x: 124.540540540541, y: 3.41176470588235, size: 1 },\r\n // { x: 125.189189189189, y: 3.68627450980392, size: 1 },\r\n // { x: 125.837837837838, y: 3.68627450980392, size: 1 },\r\n // { x: 127.783783783784, y: 3.68627450980392, size: 1 },\r\n // { x: 130.378378378378, y: 3.49019607843137, size: 1 },\r\n // { x: 131.027027027027, y: 3.76470588235294, size: 1 },\r\n // { x: 131.675675675676, y: 3.29411764705882, size: 1 },\r\n // { x: 132.324324324324, y: 3.45098039215686, size: 1 },\r\n // { x: 132.972972972973, y: 3.33333333333333, size: 1 },\r\n // { x: 133.621621621622, y: 2.86274509803922, size: 1 },\r\n // { x: 134.27027027027, y: 3.17647058823529, size: 1 },\r\n // { x: 134.918918918919, y: 3.72549019607843, size: 1 },\r\n // { x: 135.567567567568, y: 3.52941176470588, size: 1 },\r\n // { x: 136.216216216216, y: 3.76470588235294, size: 1 },\r\n // { x: 136.864864864865, y: 3.6078431372549, size: 1 },\r\n // { x: 137.513513513514, y: 3.56862745098039, size: 1 },\r\n // { x: 138.162162162162, y: 3.49019607843137, size: 1 },\r\n // { x: 138.810810810811, y: 3.72549019607843, size: 1 },\r\n // { x: 139.459459459459, y: 3.88235294117647, size: 1 },\r\n // { x: 140.108108108108, y: 3.72549019607843, size: 1 },\r\n // { x: 140.756756756757, y: 3.84313725490196, size: 1 },\r\n // { x: 141.405405405405, y: 3.52941176470588, size: 1 },\r\n // { x: 142.054054054054, y: 3.80392156862745, size: 1 },\r\n // { x: 142.702702702703, y: 3.68627450980392, size: 1 },\r\n // { x: 143.351351351351, y: 3.6078431372549, size: 1 },\r\n // { x: 144, y: 3.76470588235294, size: 1 },\r\n // { x: 144.648648648649, y: 3.80392156862745, size: 1 },\r\n // { x: 145.297297297297, y: 3.88235294117647, size: 1 },\r\n // { x: 145.945945945946, y: 3.68627450980392, size: 1 },\r\n // { x: 146.594594594595, y: 3.68627450980392, size: 1 },\r\n // { x: 147.243243243243, y: 3.84313725490196, size: 1 },\r\n // { x: 147.891891891892, y: 3.64705882352941, size: 1 },\r\n // { x: 148.540540540541, y: 3.76470588235294, size: 1 },\r\n // { x: 149.189189189189, y: 3.64705882352941, size: 1 },\r\n // { x: 150.486486486486, y: 3.56862745098039, size: 1 },\r\n // { x: 151.135135135135, y: 3.88235294117647, size: 1 },\r\n // { x: 151.783783783784, y: 3.56862745098039, size: 1 },\r\n // { x: 152.432432432432, y: 3.80392156862745, size: 1 },\r\n // { x: 153.081081081081, y: 3.64705882352941, size: 1 },\r\n // { x: 153.72972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 154.378378378378, y: 3.64705882352941, size: 1 },\r\n // { x: 155.027027027027, y: 3.2156862745098, size: 1 },\r\n // { x: 155.675675675676, y: 3.45098039215686, size: 1 },\r\n // { x: 156.972972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 157.621621621622, y: 3.80392156862745, size: 1 },\r\n // { x: 158.918918918919, y: 3.72549019607843, size: 1 },\r\n // { x: 159.567567567568, y: 3.6078431372549, size: 1 },\r\n // { x: 160.216216216216, y: 3.76470588235294, size: 1 },\r\n // { x: 160.864864864865, y: 3.52941176470588, size: 1 },\r\n // { x: 161.513513513514, y: 3.72549019607843, size: 1 },\r\n // { x: 162.162162162162, y: 3.68627450980392, size: 1 },\r\n // { x: 162.810810810811, y: 3.84313725490196, size: 1 },\r\n // { x: 165.405405405405, y: 3.52941176470588, size: 1 },\r\n // { x: 166.054054054054, y: 3.76470588235294, size: 1 },\r\n // { x: 166.702702702703, y: 3.6078431372549, size: 1 },\r\n // { x: 167.351351351351, y: 3.68627450980392, size: 1 },\r\n // { x: 168, y: 3.49019607843137, size: 1 },\r\n // { x: 168.648648648649, y: 3.84313725490196, size: 1 },\r\n // { x: 169.297297297297, y: 3.68627450980392, size: 1 },\r\n // { x: 170.594594594595, y: 3.72549019607843, size: 1 },\r\n // { x: 171.243243243243, y: 3.64705882352941, size: 1 },\r\n // { x: 171.891891891892, y: 3.6078431372549, size: 1 },\r\n // { x: 172.540540540541, y: 3.76470588235294, size: 1 },\r\n // { x: 173.189189189189, y: 3.68627450980392, size: 1 },\r\n // { x: 173.837837837838, y: 3.84313725490196, size: 1 },\r\n // { x: 174.486486486486, y: 3.64705882352941, size: 1 },\r\n // { x: 175.135135135135, y: 3.2156862745098, size: 1 },\r\n // { x: 175.783783783784, y: 3.6078431372549, size: 1 },\r\n // { x: 177.081081081081, y: 3.17647058823529, size: 1 },\r\n // { x: 177.72972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 178.378378378378, y: 3.92156862745098, size: 1 },\r\n // { x: 179.027027027027, y: 3.84313725490196, size: 1 },\r\n // { x: 179.675675675676, y: 3.6078431372549, size: 1 },\r\n // { x: 180.324324324324, y: 3.68627450980392, size: 1 },\r\n // { x: 180.972972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 182.27027027027, y: 3.76470588235294, size: 1 },\r\n // { x: 183.567567567568, y: 3.6078431372549, size: 1 },\r\n // { x: 184.216216216216, y: 3.80392156862745, size: 1 },\r\n // { x: 184.864864864865, y: 3.64705882352941, size: 1 },\r\n // { x: 185.513513513514, y: 3.80392156862745, size: 1 },\r\n // { x: 186.810810810811, y: 3.80392156862745, size: 1 },\r\n // { x: 187.459459459459, y: 3.64705882352941, size: 1 },\r\n // { x: 188.108108108108, y: 3.72549019607843, size: 1 },\r\n // { x: 188.756756756757, y: 3.76470588235294, size: 1 },\r\n // { x: 190.054054054054, y: 3.68627450980392, size: 1 },\r\n // { x: 190.702702702703, y: 3.76470588235294, size: 1 },\r\n // { x: 192, y: 3.68627450980392, size: 1 },\r\n // { x: 192.648648648649, y: 3.56862745098039, size: 1 },\r\n // { x: 193.297297297297, y: 3.84313725490196, size: 1 },\r\n // { x: 193.945945945946, y: 3.72549019607843, size: 1 },\r\n // { x: 194.594594594595, y: 3.76470588235294, size: 1 },\r\n // { x: 195.243243243243, y: 3.68627450980392, size: 1 },\r\n // { x: 196.540540540541, y: 3.80392156862745, size: 1 },\r\n // { x: 197.189189189189, y: 3.6078431372549, size: 1 },\r\n // { x: 197.837837837838, y: 3.68627450980392, size: 1 },\r\n // { x: 198.486486486486, y: 3.6078431372549, size: 1 },\r\n // { x: 199.135135135135, y: 3.52941176470588, size: 1 },\r\n // { x: 199.783783783784, y: 3.68627450980392, size: 1 },\r\n // { x: 200.432432432432, y: 3.6078431372549, size: 1 },\r\n // { x: 201.081081081081, y: 3.64705882352941, size: 1 },\r\n // { x: 201.72972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 203.027027027027, y: 3.76470588235294, size: 1 },\r\n // { x: 204.324324324324, y: 3.6078431372549, size: 1 },\r\n // { x: 204.972972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 205.621621621622, y: 3.72549019607843, size: 1 },\r\n // { x: 206.27027027027, y: 3.64705882352941, size: 1 },\r\n // { x: 206.918918918919, y: 3.64705882352941, size: 1 },\r\n // { x: 207.567567567568, y: 3.49019607843137, size: 1 },\r\n // { x: 209.513513513514, y: 3.72549019607843, size: 1 },\r\n // { x: 210.162162162162, y: 3.68627450980392, size: 1 },\r\n // { x: 210.810810810811, y: 3.68627450980392, size: 1 },\r\n // { x: 211.459459459459, y: 3.88235294117647, size: 1 },\r\n // { x: 212.108108108108, y: 3.96078431372549, size: 1 },\r\n // { x: 213.405405405405, y: 3.76470588235294, size: 1 },\r\n // { x: 214.054054054054, y: 3.72549019607843, size: 1 },\r\n // { x: 215.351351351351, y: 3.64705882352941, size: 1 },\r\n // { x: 216, y: 3.64705882352941, size: 1 },\r\n // { x: 217.297297297297, y: 3.72549019607843, size: 1 },\r\n // { x: 217.945945945946, y: 3.68627450980392, size: 1 },\r\n // { x: 218.594594594595, y: 3.84313725490196, size: 1 },\r\n // { x: 219.243243243243, y: 3.64705882352941, size: 1 },\r\n // { x: 219.891891891892, y: 3.37254901960784, size: 1 },\r\n // { x: 221.189189189189, y: 3.56862745098039, size: 1 },\r\n // { x: 221.837837837838, y: 3.80392156862745, size: 1 },\r\n // { x: 222.486486486486, y: 3.72549019607843, size: 1 },\r\n // { x: 223.135135135135, y: 3.80392156862745, size: 1 },\r\n // { x: 223.783783783784, y: 3.6078431372549, size: 1 },\r\n // { x: 224.432432432432, y: 3.72549019607843, size: 1 },\r\n // { x: 225.081081081081, y: 3.96078431372549, size: 1 },\r\n // { x: 225.72972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 226.378378378378, y: 3.80392156862745, size: 1 },\r\n // { x: 227.027027027027, y: 3.84313725490196, size: 1 },\r\n // { x: 227.675675675676, y: 3.72549019607843, size: 1 },\r\n // { x: 228.324324324324, y: 3.84313725490196, size: 1 },\r\n // { x: 229.621621621622, y: 3.68627450980392, size: 1 },\r\n // { x: 230.27027027027, y: 3.84313725490196, size: 1 },\r\n // { x: 230.918918918919, y: 3.6078431372549, size: 1 },\r\n // { x: 231.567567567568, y: 3.6078431372549, size: 1 },\r\n // { x: 232.864864864865, y: 3.92156862745098, size: 1 },\r\n // { x: 233.513513513514, y: 4, size: 1 },\r\n // { x: 234.162162162162, y: 3.72549019607843, size: 1 },\r\n // { x: 234.810810810811, y: 3.92156862745098, size: 1 },\r\n // { x: 235.459459459459, y: 3.6078431372549, size: 1 },\r\n // { x: 236.108108108108, y: 3.84313725490196, size: 1 },\r\n // { x: 236.756756756757, y: 3.76470588235294, size: 1 },\r\n // { x: 237.405405405405, y: 3.88235294117647, size: 1 },\r\n // { x: 238.054054054054, y: 3.80392156862745, size: 1 },\r\n // { x: 238.702702702703, y: 4, size: 1 },\r\n // { x: 239.351351351351, y: 3.6078431372549, size: 1 },\r\n // { x: 240, y: 3.6078431372549, size: 1 },\r\n // { x: 240.648648648649, y: 3.6078431372549, size: 1 },\r\n // { x: 241.297297297297, y: 3.64705882352941, size: 1 },\r\n // { x: 242.594594594595, y: 3.6078431372549, size: 1 },\r\n // { x: 243.243243243243, y: 3.88235294117647, size: 1 },\r\n // { x: 243.891891891892, y: 3.56862745098039, size: 1 },\r\n // { x: 244.540540540541, y: 3.76470588235294, size: 1 },\r\n // { x: 245.189189189189, y: 3.84313725490196, size: 1 },\r\n // { x: 245.837837837838, y: 4, size: 1 },\r\n // { x: 246.486486486486, y: 3.52941176470588, size: 1 },\r\n // { x: 247.135135135135, y: 3.80392156862745, size: 1 },\r\n // { x: 247.783783783784, y: 3.80392156862745, size: 1 },\r\n // { x: 248.432432432432, y: 3.72549019607843, size: 1 },\r\n // { x: 249.72972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 250.378378378378, y: 3.56862745098039, size: 1 },\r\n // { x: 251.027027027027, y: 3.64705882352941, size: 1 },\r\n // { x: 251.675675675676, y: 3.80392156862745, size: 1 },\r\n // { x: 252.324324324324, y: 3.64705882352941, size: 1 },\r\n // { x: 253.621621621622, y: 3.76470588235294, size: 1 },\r\n // { x: 254.27027027027, y: 3.72549019607843, size: 1 },\r\n // { x: 255.567567567568, y: 4.03921568627451, size: 1 },\r\n // { x: 256.216216216216, y: 3.56862745098039, size: 1 },\r\n // { x: 256.864864864865, y: 3.6078431372549, size: 1 },\r\n // { x: 257.513513513513, y: 3.72549019607843, size: 1 },\r\n // { x: 258.162162162162, y: 3.52941176470588, size: 1 },\r\n // { x: 258.810810810811, y: 3.6078431372549, size: 1 },\r\n // { x: 259.459459459459, y: 3.80392156862745, size: 1 },\r\n // { x: 260.108108108108, y: 3.84313725490196, size: 1 },\r\n // { x: 260.756756756757, y: 3.84313725490196, size: 1 },\r\n // { x: 262.054054054054, y: 3.6078431372549, size: 1 },\r\n // { x: 262.702702702703, y: 3.64705882352941, size: 1 },\r\n // { x: 263.351351351351, y: 3.45098039215686, size: 1 },\r\n // { x: 264, y: 3.56862745098039, size: 1 },\r\n // { x: 264.648648648649, y: 3.80392156862745, size: 1 },\r\n // { x: 265.297297297297, y: 3.41176470588235, size: 1 },\r\n // { x: 265.945945945946, y: 3.68627450980392, size: 1 },\r\n // { x: 266.594594594595, y: 3.6078431372549, size: 1 },\r\n // { x: 267.891891891892, y: 3.6078431372549, size: 1 },\r\n // { x: 268.540540540541, y: 3.68627450980392, size: 1 },\r\n // { x: 269.837837837838, y: 3.72549019607843, size: 1 },\r\n // { x: 270.486486486487, y: 3.49019607843137, size: 1 },\r\n // { x: 271.135135135135, y: 3.6078431372549, size: 1 },\r\n // { x: 271.783783783784, y: 3.45098039215686, size: 1 },\r\n // { x: 273.72972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 274.378378378378, y: 3.68627450980392, size: 1 },\r\n // { x: 275.027027027027, y: 3.6078431372549, size: 1 },\r\n // { x: 275.675675675676, y: 3.6078431372549, size: 1 },\r\n // { x: 276.324324324324, y: 3.80392156862745, size: 1 },\r\n // { x: 277.621621621622, y: 3.49019607843137, size: 1 },\r\n // { x: 278.27027027027, y: 3.52941176470588, size: 1 },\r\n // { x: 279.567567567568, y: 3.68627450980392, size: 1 },\r\n // { x: 280.216216216216, y: 3.49019607843137, size: 1 },\r\n // { x: 280.864864864865, y: 3.6078431372549, size: 1 },\r\n // { x: 282.162162162162, y: 3.68627450980392, size: 1 },\r\n // { x: 282.810810810811, y: 3.68627450980392, size: 1 },\r\n // { x: 283.459459459459, y: 3.49019607843137, size: 1 },\r\n // { x: 284.108108108108, y: 3.64705882352941, size: 1 },\r\n // { x: 284.756756756757, y: 3.72549019607843, size: 1 },\r\n // { x: 285.405405405405, y: 3.45098039215686, size: 1 },\r\n // { x: 286.054054054054, y: 3.68627450980392, size: 1 },\r\n // { x: 286.702702702703, y: 3.68627450980392, size: 1 },\r\n // { x: 287.351351351351, y: 3.92156862745098, size: 1 },\r\n // { x: 288, y: 3.56862745098039, size: 1 },\r\n // { x: 288.648648648649, y: 3.6078431372549, size: 1 },\r\n // { x: 289.297297297297, y: 3.64705882352941, size: 1 },\r\n // { x: 289.945945945946, y: 3.80392156862745, size: 1 },\r\n // { x: 290.594594594595, y: 3.56862745098039, size: 1 },\r\n // { x: 291.891891891892, y: 3.49019607843137, size: 1 },\r\n // { x: 292.540540540541, y: 3.56862745098039, size: 1 },\r\n // { x: 293.837837837838, y: 3.64705882352941, size: 1 },\r\n // { x: 294.486486486487, y: 3.6078431372549, size: 1 },\r\n // { x: 295.135135135135, y: 3.68627450980392, size: 1 },\r\n // { x: 295.783783783784, y: 3.64705882352941, size: 1 },\r\n // { x: 297.081081081081, y: 3.72549019607843, size: 1 },\r\n // { x: 297.72972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 298.378378378378, y: 3.64705882352941, size: 1 },\r\n // { x: 299.027027027027, y: 3.6078431372549, size: 1 },\r\n // { x: 299.675675675676, y: 3.6078431372549, size: 1 },\r\n // { x: 300.324324324324, y: 3.56862745098039, size: 1 },\r\n // { x: 300.972972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 301.621621621622, y: 3.56862745098039, size: 1 },\r\n // { x: 302.27027027027, y: 3.56862745098039, size: 1 },\r\n // { x: 302.918918918919, y: 3.6078431372549, size: 1 },\r\n // { x: 303.567567567568, y: 3.92156862745098, size: 1 },\r\n // { x: 304.864864864865, y: 3.13725490196078, size: 1 },\r\n // { x: 305.513513513513, y: 3.05882352941176, size: 1 },\r\n // { x: 306.162162162162, y: 3.33333333333333, size: 1 },\r\n // { x: 306.810810810811, y: 3.45098039215686, size: 1 },\r\n // { x: 307.459459459459, y: 3.37254901960784, size: 1 },\r\n // { x: 308.108108108108, y: 3.17647058823529, size: 1 },\r\n // { x: 308.756756756757, y: 3.25490196078431, size: 1 },\r\n // { x: 309.405405405405, y: 3.41176470588235, size: 1 },\r\n // { x: 310.054054054054, y: 3.45098039215686, size: 1 },\r\n // { x: 310.702702702703, y: 3.68627450980392, size: 1 },\r\n // { x: 312, y: 3.6078431372549, size: 1 },\r\n // { x: 312.648648648649, y: 3.45098039215686, size: 1 },\r\n // { x: 313.297297297297, y: 3.41176470588235, size: 1 },\r\n // { x: 313.945945945946, y: 3.45098039215686, size: 1 },\r\n // { x: 314.594594594595, y: 3.56862745098039, size: 1 },\r\n // { x: 315.243243243243, y: 3.41176470588235, size: 1 },\r\n // { x: 316.540540540541, y: 3.72549019607843, size: 1 },\r\n // { x: 317.189189189189, y: 3.6078431372549, size: 1 },\r\n // { x: 317.837837837838, y: 3.41176470588235, size: 1 },\r\n // { x: 318.486486486487, y: 3.37254901960784, size: 1 },\r\n // { x: 319.135135135135, y: 3.37254901960784, size: 1 },\r\n // { x: 319.783783783784, y: 3.52941176470588, size: 1 },\r\n // { x: 320.432432432432, y: 3.45098039215686, size: 1 },\r\n // { x: 321.081081081081, y: 3.33333333333333, size: 1 },\r\n // { x: 321.72972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 322.378378378378, y: 3.49019607843137, size: 1 },\r\n // { x: 323.027027027027, y: 3.52941176470588, size: 1 },\r\n // { x: 323.675675675676, y: 3.41176470588235, size: 1 },\r\n // { x: 324.324324324324, y: 3.25490196078431, size: 1 },\r\n // { x: 324.972972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 325.621621621622, y: 3.45098039215686, size: 1 },\r\n // { x: 326.27027027027, y: 3.45098039215686, size: 1 },\r\n // { x: 326.918918918919, y: 3.52941176470588, size: 1 },\r\n // { x: 327.567567567568, y: 3.68627450980392, size: 1 },\r\n // { x: 328.864864864865, y: 3.6078431372549, size: 1 },\r\n // { x: 329.513513513513, y: 3.72549019607843, size: 1 },\r\n // { x: 330.162162162162, y: 3.52941176470588, size: 1 },\r\n // { x: 330.810810810811, y: 3.68627450980392, size: 1 },\r\n // { x: 331.459459459459, y: 3.76470588235294, size: 1 },\r\n // { x: 332.108108108108, y: 3.45098039215686, size: 1 },\r\n // { x: 332.756756756757, y: 3.6078431372549, size: 1 },\r\n // { x: 333.405405405405, y: 3.64705882352941, size: 1 },\r\n // { x: 334.054054054054, y: 3.84313725490196, size: 1 },\r\n // { x: 334.702702702703, y: 3.49019607843137, size: 1 },\r\n // { x: 335.351351351351, y: 3.72549019607843, size: 1 },\r\n // { x: 336, y: 3.72549019607843, size: 1 },\r\n // { x: 336.648648648649, y: 3.76470588235294, size: 1 },\r\n // { x: 337.945945945946, y: 3.92156862745098, size: 1 },\r\n // { x: 338.594594594595, y: 3.76470588235294, size: 1 },\r\n // { x: 339.243243243243, y: 3.64705882352941, size: 1 },\r\n // { x: 340.540540540541, y: 3.6078431372549, size: 1 },\r\n // { x: 341.189189189189, y: 3.49019607843137, size: 1 },\r\n // { x: 341.837837837838, y: 3.64705882352941, size: 1 },\r\n // { x: 342.486486486487, y: 3.6078431372549, size: 1 },\r\n // { x: 343.135135135135, y: 3.68627450980392, size: 1 },\r\n // { x: 343.783783783784, y: 3.56862745098039, size: 1 },\r\n // { x: 344.432432432432, y: 3.52941176470588, size: 1 },\r\n // { x: 345.081081081081, y: 3.68627450980392, size: 1 },\r\n // { x: 345.72972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 347.027027027027, y: 3.68627450980392, size: 1 },\r\n // { x: 348.324324324324, y: 3.41176470588235, size: 1 },\r\n // { x: 348.972972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 349.621621621622, y: 3.29411764705882, size: 1 },\r\n // { x: 350.27027027027, y: 3.17647058823529, size: 1 },\r\n // { x: 350.918918918919, y: 2.98039215686275, size: 1 },\r\n // { x: 351.567567567568, y: 2.7843137254902, size: 1 },\r\n // { x: 352.216216216216, y: 3.33333333333333, size: 1 },\r\n // { x: 353.513513513513, y: 3.49019607843137, size: 1 },\r\n // { x: 354.162162162162, y: 3.72549019607843, size: 1 },\r\n // { x: 354.810810810811, y: 3.68627450980392, size: 1 },\r\n // { x: 355.459459459459, y: 3.64705882352941, size: 1 },\r\n // { x: 356.108108108108, y: 3.84313725490196, size: 1 },\r\n // { x: 357.405405405405, y: 3.6078431372549, size: 1 },\r\n // { x: 358.702702702703, y: 3.6078431372549, size: 1 },\r\n // { x: 359.351351351351, y: 3.68627450980392, size: 1 },\r\n // { x: 0, y: 3.52941176470588, size: 1 },\r\n // { x: 0.647482014388489, y: 3.52941176470588, size: 1 },\r\n // { x: 1.94244604316547, y: 3.64705882352941, size: 1 },\r\n // { x: 3.23741007194245, y: 3.56862745098039, size: 1 },\r\n // { x: 3.88489208633094, y: 3.72549019607843, size: 1 },\r\n // { x: 4.53237410071942, y: 3.45098039215686, size: 1 },\r\n // { x: 5.17985611510791, y: 3.56862745098039, size: 1 },\r\n // { x: 6.47482014388489, y: 3.6078431372549, size: 1 },\r\n // { x: 7.12230215827338, y: 3.68627450980392, size: 1 },\r\n // { x: 7.76978417266187, y: 3.49019607843137, size: 1 },\r\n // { x: 8.41726618705036, y: 3.80392156862745, size: 1 },\r\n // { x: 9.06474820143885, y: 3.6078431372549, size: 1 },\r\n // { x: 11.0071942446043, y: 3.72549019607843, size: 1 },\r\n // { x: 12.3021582733813, y: 2.82352941176471, size: 1 },\r\n // { x: 12.9496402877698, y: 3.05882352941176, size: 1 },\r\n // { x: 13.5971223021583, y: 3.25490196078431, size: 1 },\r\n // { x: 14.2446043165468, y: 3.84313725490196, size: 1 },\r\n // { x: 15.5395683453237, y: 3.84313725490196, size: 1 },\r\n // { x: 16.8345323741007, y: 3.76470588235294, size: 1 },\r\n // { x: 19.4244604316547, y: 3.56862745098039, size: 1 },\r\n // { x: 20.7194244604317, y: 3.76470588235294, size: 1 },\r\n // { x: 21.3669064748201, y: 3.72549019607843, size: 1 },\r\n // { x: 22.0143884892086, y: 3.80392156862745, size: 1 },\r\n // { x: 22.6618705035971, y: 3.76470588235294, size: 1 },\r\n // { x: 23.3093525179856, y: 3.84313725490196, size: 1 },\r\n // { x: 24.6043165467626, y: 3.64705882352941, size: 1 },\r\n // { x: 25.8992805755396, y: 3.84313725490196, size: 1 },\r\n // { x: 27.841726618705, y: 3.92156862745098, size: 1 },\r\n // { x: 31.0791366906475, y: 3.49019607843137, size: 1 },\r\n // { x: 33.0215827338129, y: 3.09803921568627, size: 1 },\r\n // { x: 33.6690647482014, y: 2.98039215686275, size: 1 },\r\n // { x: 36.9064748201439, y: 3.52941176470588, size: 1 },\r\n // { x: 38.2014388489209, y: 3.76470588235294, size: 1 },\r\n // { x: 38.8489208633094, y: 3.41176470588235, size: 1 },\r\n // { x: 39.4964028776978, y: 3.49019607843137, size: 1 },\r\n // { x: 40.7913669064748, y: 3.84313725490196, size: 1 },\r\n // { x: 41.4388489208633, y: 3.52941176470588, size: 1 },\r\n // { x: 42.0863309352518, y: 3.41176470588235, size: 1 },\r\n // { x: 43.3812949640288, y: 3.76470588235294, size: 1 },\r\n // { x: 44.0287769784173, y: 3.45098039215686, size: 1 },\r\n // { x: 44.6762589928058, y: 3.49019607843137, size: 1 },\r\n // { x: 45.9712230215827, y: 3.52941176470588, size: 1 },\r\n // { x: 46.6187050359712, y: 3.45098039215686, size: 1 },\r\n // { x: 47.2661870503597, y: 3.52941176470588, size: 1 },\r\n // { x: 49.8561151079137, y: 3.45098039215686, size: 1 },\r\n // { x: 50.5035971223022, y: 3.84313725490196, size: 1 },\r\n // { x: 53.7410071942446, y: 3.64705882352941, size: 1 },\r\n // { x: 55.0359712230216, y: 3.64705882352941, size: 1 },\r\n // { x: 55.6834532374101, y: 3.49019607843137, size: 1 },\r\n // { x: 56.3309352517986, y: 3.80392156862745, size: 1 },\r\n // { x: 57.6258992805755, y: 3.88235294117647, size: 1 },\r\n // { x: 60.2158273381295, y: 3.76470588235294, size: 1 },\r\n // { x: 60.863309352518, y: 3.6078431372549, size: 1 },\r\n // { x: 61.5107913669065, y: 3.80392156862745, size: 1 },\r\n // { x: 65.3956834532374, y: 4.03921568627451, size: 1 },\r\n // { x: 66.0431654676259, y: 3.76470588235294, size: 1 },\r\n // { x: 67.3381294964029, y: 3.68627450980392, size: 1 },\r\n // { x: 67.9856115107914, y: 3.6078431372549, size: 1 },\r\n // { x: 70.5755395683453, y: 3.76470588235294, size: 1 },\r\n // { x: 71.2230215827338, y: 3.80392156862745, size: 1 },\r\n // { x: 71.8705035971223, y: 3.64705882352941, size: 1 },\r\n // { x: 74.4604316546763, y: 3.84313725490196, size: 1 },\r\n // { x: 75.1079136690647, y: 3.92156862745098, size: 1 },\r\n // { x: 75.7553956834532, y: 3.84313725490196, size: 1 },\r\n // { x: 76.4028776978417, y: 3.33333333333333, size: 1 },\r\n // { x: 78.3453237410072, y: 3.68627450980392, size: 1 },\r\n // { x: 82.2302158273381, y: 3.6078431372549, size: 1 },\r\n // { x: 83.5251798561151, y: 3.68627450980392, size: 1 },\r\n // { x: 88.705035971223, y: 3.84313725490196, size: 1 },\r\n // { x: 89.3525179856115, y: 3.84313725490196, size: 1 },\r\n // { x: 90, y: 3.68627450980392, size: 1 },\r\n // { x: 90.6474820143885, y: 3.72549019607843, size: 1 },\r\n // { x: 91.9424460431655, y: 3.76470588235294, size: 1 },\r\n // { x: 95.1798561151079, y: 3.45098039215686, size: 1 },\r\n // { x: 96.4748201438849, y: 3.56862745098039, size: 1 },\r\n // { x: 98.4172661870504, y: 3.49019607843137, size: 1 },\r\n // { x: 99.0647482014388, y: 3.37254901960784, size: 1 },\r\n // { x: 99.7122302158273, y: 3.49019607843137, size: 1 },\r\n // { x: 102.302158273381, y: 3.76470588235294, size: 1 },\r\n // { x: 104.244604316547, y: 3.56862745098039, size: 1 },\r\n // { x: 105.539568345324, y: 3.72549019607843, size: 1 },\r\n // { x: 106.187050359712, y: 3.49019607843137, size: 1 },\r\n // { x: 107.482014388489, y: 3.6078431372549, size: 1 },\r\n // { x: 110.071942446043, y: 3.56862745098039, size: 1 },\r\n // { x: 110.719424460432, y: 3.37254901960784, size: 1 },\r\n // { x: 111.36690647482, y: 3.6078431372549, size: 1 },\r\n // { x: 112.661870503597, y: 3.68627450980392, size: 1 },\r\n // { x: 116.546762589928, y: 3.56862745098039, size: 1 },\r\n // { x: 119.136690647482, y: 2.94117647058824, size: 1 },\r\n // { x: 119.784172661871, y: 2.74509803921569, size: 1 },\r\n // { x: 120.431654676259, y: 3.05882352941176, size: 1 },\r\n // { x: 121.079136690647, y: 3.09803921568627, size: 1 },\r\n // { x: 121.726618705036, y: 3.25490196078431, size: 1 },\r\n // { x: 122.374100719424, y: 3.33333333333333, size: 1 },\r\n // { x: 123.021582733813, y: 3.92156862745098, size: 1 },\r\n // { x: 123.669064748201, y: 3.41176470588235, size: 1 },\r\n // { x: 126.258992805755, y: 3.68627450980392, size: 1 },\r\n // { x: 127.553956834532, y: 3.56862745098039, size: 1 },\r\n // { x: 128.848920863309, y: 3.88235294117647, size: 1 },\r\n // { x: 129.496402877698, y: 3.49019607843137, size: 1 },\r\n // { x: 130.143884892086, y: 3.6078431372549, size: 1 },\r\n // { x: 130.791366906475, y: 3.56862745098039, size: 1 },\r\n // { x: 131.438848920863, y: 3.45098039215686, size: 1 },\r\n // { x: 132.086330935252, y: 3.41176470588235, size: 1 },\r\n // { x: 132.73381294964, y: 3.49019607843137, size: 1 },\r\n // { x: 134.028776978417, y: 3.56862745098039, size: 1 },\r\n // { x: 134.676258992806, y: 3.56862745098039, size: 1 },\r\n // { x: 137.26618705036, y: 3.72549019607843, size: 1 },\r\n // { x: 138.561151079137, y: 3.45098039215686, size: 1 },\r\n // { x: 139.856115107914, y: 3.64705882352941, size: 1 },\r\n // { x: 140.503597122302, y: 3.49019607843137, size: 1 },\r\n // { x: 141.151079136691, y: 2.98039215686275, size: 1 },\r\n // { x: 141.798561151079, y: 3.17647058823529, size: 1 },\r\n // { x: 142.446043165468, y: 3.17647058823529, size: 1 },\r\n // { x: 143.093525179856, y: 3.01960784313725, size: 1 },\r\n // { x: 143.741007194245, y: 3.76470588235294, size: 1 },\r\n // { x: 144.388489208633, y: 3.88235294117647, size: 1 },\r\n // { x: 145.035971223022, y: 3.52941176470588, size: 1 },\r\n // { x: 146.330935251799, y: 3.64705882352941, size: 1 },\r\n // { x: 148.273381294964, y: 3.76470588235294, size: 1 },\r\n // { x: 148.920863309353, y: 3.80392156862745, size: 1 },\r\n // { x: 149.568345323741, y: 3.84313725490196, size: 1 },\r\n // { x: 150.863309352518, y: 4.03921568627451, size: 1 },\r\n // { x: 151.510791366906, y: 3.72549019607843, size: 1 },\r\n // { x: 153.453237410072, y: 3.76470588235294, size: 1 },\r\n // { x: 154.10071942446, y: 3.52941176470588, size: 1 },\r\n // { x: 155.395683453237, y: 3.64705882352941, size: 1 },\r\n // { x: 156.690647482014, y: 3.76470588235294, size: 1 },\r\n // { x: 157.985611510791, y: 3.6078431372549, size: 1 },\r\n // { x: 159.928057553957, y: 3.64705882352941, size: 1 },\r\n // { x: 160.575539568345, y: 3.76470588235294, size: 1 },\r\n // { x: 161.870503597122, y: 3.37254901960784, size: 1 },\r\n // { x: 162.517985611511, y: 2.94117647058824, size: 1 },\r\n // { x: 163.165467625899, y: 2.66666666666667, size: 1 },\r\n // { x: 163.812949640288, y: 2.98039215686275, size: 1 },\r\n // { x: 164.460431654676, y: 2.94117647058824, size: 1 },\r\n // { x: 165.107913669065, y: 3.37254901960784, size: 1 },\r\n // { x: 166.402877697842, y: 3.45098039215686, size: 1 },\r\n // { x: 168.992805755396, y: 3.6078431372549, size: 1 },\r\n // { x: 171.58273381295, y: 3.80392156862745, size: 1 },\r\n // { x: 172.230215827338, y: 3.80392156862745, size: 1 },\r\n // { x: 173.525179856115, y: 3.52941176470588, size: 1 },\r\n // { x: 176.762589928058, y: 3.64705882352941, size: 1 },\r\n // { x: 177.410071942446, y: 3.64705882352941, size: 1 },\r\n // { x: 178.057553956835, y: 3.49019607843137, size: 1 },\r\n // { x: 178.705035971223, y: 3.49019607843137, size: 1 },\r\n // { x: 179.352517985612, y: 3.6078431372549, size: 1 },\r\n // { x: 180.647482014388, y: 3.56862745098039, size: 1 },\r\n // { x: 181.294964028777, y: 3.56862745098039, size: 1 },\r\n // { x: 181.942446043165, y: 3.68627450980392, size: 1 },\r\n // { x: 183.237410071942, y: 3.6078431372549, size: 1 },\r\n // { x: 186.474820143885, y: 3.56862745098039, size: 1 },\r\n // { x: 187.122302158273, y: 3.68627450980392, size: 1 },\r\n // { x: 188.41726618705, y: 3.64705882352941, size: 1 },\r\n // { x: 189.712230215827, y: 3.80392156862745, size: 1 },\r\n // { x: 191.007194244604, y: 3.76470588235294, size: 1 },\r\n // { x: 191.654676258993, y: 3.72549019607843, size: 1 },\r\n // { x: 192.302158273381, y: 3.88235294117647, size: 1 },\r\n // { x: 193.597122302158, y: 3.84313725490196, size: 1 },\r\n // { x: 194.244604316547, y: 3.64705882352941, size: 1 },\r\n // { x: 196.187050359712, y: 3.72549019607843, size: 1 },\r\n // { x: 196.834532374101, y: 3.80392156862745, size: 1 },\r\n // { x: 197.482014388489, y: 3.84313725490196, size: 1 },\r\n // { x: 198.129496402878, y: 3.68627450980392, size: 1 },\r\n // { x: 199.424460431655, y: 3.80392156862745, size: 1 },\r\n // { x: 202.014388489209, y: 3.80392156862745, size: 1 },\r\n // { x: 202.661870503597, y: 3.88235294117647, size: 1 },\r\n // { x: 203.309352517986, y: 3.6078431372549, size: 1 },\r\n // { x: 205.251798561151, y: 3.37254901960784, size: 1 },\r\n // { x: 205.89928057554, y: 3.41176470588235, size: 1 },\r\n // { x: 206.546762589928, y: 3.6078431372549, size: 1 },\r\n // { x: 207.841726618705, y: 3.56862745098039, size: 1 },\r\n // { x: 208.489208633094, y: 3.72549019607843, size: 1 },\r\n // { x: 209.136690647482, y: 3.6078431372549, size: 1 },\r\n // { x: 210.431654676259, y: 3.76470588235294, size: 1 },\r\n // { x: 211.079136690647, y: 3.33333333333333, size: 1 },\r\n // { x: 213.021582733813, y: 3.72549019607843, size: 1 },\r\n // { x: 213.669064748201, y: 3.80392156862745, size: 1 },\r\n // { x: 214.31654676259, y: 3.68627450980392, size: 1 },\r\n // { x: 216.258992805755, y: 3.96078431372549, size: 1 },\r\n // { x: 216.906474820144, y: 3.52941176470588, size: 1 },\r\n // { x: 217.553956834532, y: 3.92156862745098, size: 1 },\r\n // { x: 218.848920863309, y: 3.64705882352941, size: 1 },\r\n // { x: 220.143884892086, y: 3.52941176470588, size: 1 },\r\n // { x: 220.791366906475, y: 3.76470588235294, size: 1 },\r\n // { x: 221.438848920863, y: 3.56862745098039, size: 1 },\r\n // { x: 222.73381294964, y: 3.76470588235294, size: 1 },\r\n // { x: 224.028776978417, y: 3.49019607843137, size: 1 },\r\n // { x: 225.323741007194, y: 3.45098039215686, size: 1 },\r\n // { x: 227.913669064748, y: 3.45098039215686, size: 1 },\r\n // { x: 228.561151079137, y: 3.49019607843137, size: 1 },\r\n // { x: 229.856115107914, y: 3.64705882352941, size: 1 },\r\n // { x: 231.151079136691, y: 3.56862745098039, size: 1 },\r\n // { x: 231.798561151079, y: 3.72549019607843, size: 1 },\r\n // { x: 232.446043165468, y: 3.52941176470588, size: 1 },\r\n // { x: 233.741007194245, y: 3.56862745098039, size: 1 },\r\n // { x: 236.978417266187, y: 3.49019607843137, size: 1 },\r\n // { x: 237.625899280576, y: 3.76470588235294, size: 1 },\r\n // { x: 238.920863309353, y: 3.76470588235294, size: 1 },\r\n // { x: 240.863309352518, y: 3.64705882352941, size: 1 },\r\n // { x: 243.453237410072, y: 3.52941176470588, size: 1 },\r\n // { x: 244.748201438849, y: 3.56862745098039, size: 1 },\r\n // { x: 245.395683453237, y: 3.80392156862745, size: 1 },\r\n // { x: 246.043165467626, y: 3.52941176470588, size: 1 },\r\n // { x: 247.985611510791, y: 3.52941176470588, size: 1 },\r\n // { x: 252.517985611511, y: 3.88235294117647, size: 1 },\r\n // { x: 254.460431654676, y: 3.68627450980392, size: 1 },\r\n // { x: 255.755395683453, y: 3.68627450980392, size: 1 },\r\n // { x: 256.402877697842, y: 3.49019607843137, size: 1 },\r\n // { x: 257.05035971223, y: 3.52941176470588, size: 1 },\r\n // { x: 257.697841726619, y: 3.41176470588235, size: 1 },\r\n // { x: 258.345323741007, y: 3.49019607843137, size: 1 },\r\n // { x: 258.992805755396, y: 3.88235294117647, size: 1 },\r\n // { x: 260.935251798561, y: 3.76470588235294, size: 1 },\r\n // { x: 261.58273381295, y: 3.6078431372549, size: 1 },\r\n // { x: 262.230215827338, y: 3.64705882352941, size: 1 },\r\n // { x: 264.172661870504, y: 3.68627450980392, size: 1 },\r\n // { x: 264.820143884892, y: 3.52941176470588, size: 1 },\r\n // { x: 265.467625899281, y: 3.64705882352941, size: 1 },\r\n // { x: 266.115107913669, y: 3.52941176470588, size: 1 },\r\n // { x: 266.762589928058, y: 3.64705882352941, size: 1 },\r\n // { x: 267.410071942446, y: 3.6078431372549, size: 1 },\r\n // { x: 268.705035971223, y: 3.37254901960784, size: 1 },\r\n // { x: 269.352517985611, y: 3.29411764705882, size: 1 },\r\n // { x: 270, y: 3.37254901960784, size: 1 },\r\n // { x: 270.647482014389, y: 3.01960784313725, size: 1 },\r\n // { x: 271.294964028777, y: 3.05882352941176, size: 1 },\r\n // { x: 271.942446043165, y: 2.90196078431373, size: 1 },\r\n // { x: 272.589928057554, y: 3.25490196078431, size: 1 },\r\n // { x: 275.179856115108, y: 3.52941176470588, size: 1 },\r\n // { x: 275.827338129496, y: 3.45098039215686, size: 1 },\r\n // { x: 277.122302158273, y: 3.52941176470588, size: 1 },\r\n // { x: 279.064748201439, y: 3.6078431372549, size: 1 },\r\n // { x: 279.712230215827, y: 3.41176470588235, size: 1 },\r\n // { x: 280.359712230216, y: 3.49019607843137, size: 1 },\r\n // { x: 282.302158273381, y: 3.56862745098039, size: 1 },\r\n // { x: 284.244604316547, y: 3.49019607843137, size: 1 },\r\n // { x: 284.892086330935, y: 3.72549019607843, size: 1 },\r\n // { x: 285.539568345324, y: 3.56862745098039, size: 1 },\r\n // { x: 286.834532374101, y: 3.49019607843137, size: 1 },\r\n // { x: 288.129496402878, y: 3.49019607843137, size: 1 },\r\n // { x: 288.776978417266, y: 3.80392156862745, size: 1 },\r\n // { x: 292.014388489209, y: 3.49019607843137, size: 1 },\r\n // { x: 294.604316546763, y: 3.72549019607843, size: 1 },\r\n // { x: 295.89928057554, y: 3.41176470588235, size: 1 },\r\n // { x: 297.194244604317, y: 3.6078431372549, size: 1 },\r\n // { x: 297.841726618705, y: 3.64705882352941, size: 1 },\r\n // { x: 299.136690647482, y: 3.41176470588235, size: 1 },\r\n // { x: 300.431654676259, y: 3.64705882352941, size: 1 },\r\n // { x: 301.079136690647, y: 3.56862745098039, size: 1 },\r\n // { x: 302.374100719424, y: 3.92156862745098, size: 1 },\r\n // { x: 303.021582733813, y: 3.56862745098039, size: 1 },\r\n // { x: 303.669064748201, y: 3.64705882352941, size: 1 },\r\n // { x: 304.31654676259, y: 3.56862745098039, size: 1 },\r\n // { x: 306.258992805755, y: 3.56862745098039, size: 1 },\r\n // { x: 309.496402877698, y: 3.76470588235294, size: 1 },\r\n // { x: 310.791366906475, y: 3.49019607843137, size: 1 },\r\n // { x: 312.73381294964, y: 3.68627450980392, size: 1 },\r\n // { x: 313.381294964029, y: 3.45098039215686, size: 1 },\r\n // { x: 316.618705035971, y: 3.64705882352941, size: 1 },\r\n // { x: 317.26618705036, y: 3.45098039215686, size: 1 },\r\n // { x: 317.913669064748, y: 3.33333333333333, size: 1 },\r\n // { x: 318.561151079137, y: 3.45098039215686, size: 1 },\r\n // { x: 320.503597122302, y: 3.49019607843137, size: 1 },\r\n // { x: 322.446043165468, y: 3.49019607843137, size: 1 },\r\n // { x: 323.093525179856, y: 3.64705882352941, size: 1 },\r\n // { x: 323.741007194245, y: 3.6078431372549, size: 1 },\r\n // { x: 324.388489208633, y: 3.49019607843137, size: 1 },\r\n // { x: 325.68345323741, y: 3.52941176470588, size: 1 },\r\n // { x: 326.330935251799, y: 3.45098039215686, size: 1 },\r\n // { x: 328.273381294964, y: 3.64705882352941, size: 1 },\r\n // { x: 328.920863309353, y: 3.64705882352941, size: 1 },\r\n // { x: 329.568345323741, y: 3.56862745098039, size: 1 },\r\n // { x: 330.863309352518, y: 3.52941176470588, size: 1 },\r\n // { x: 333.453237410072, y: 3.6078431372549, size: 1 },\r\n // { x: 334.10071942446, y: 3.29411764705882, size: 1 },\r\n // { x: 334.748201438849, y: 3.33333333333333, size: 1 },\r\n // { x: 336.043165467626, y: 3.52941176470588, size: 1 },\r\n // { x: 338.63309352518, y: 3.68627450980392, size: 1 },\r\n // { x: 342.517985611511, y: 3.56862745098039, size: 1 },\r\n // { x: 343.165467625899, y: 3.6078431372549, size: 1 },\r\n // { x: 343.812949640288, y: 3.52941176470588, size: 1 },\r\n // { x: 347.697841726619, y: 3.76470588235294, size: 1 },\r\n // { x: 348.992805755396, y: 3.80392156862745, size: 1 },\r\n // { x: 349.640287769784, y: 3.64705882352941, size: 1 },\r\n // { x: 350.287769784173, y: 3.80392156862745, size: 1 },\r\n // { x: 350.935251798561, y: 3.41176470588235, size: 1 },\r\n // { x: 351.58273381295, y: 3.84313725490196, size: 1 },\r\n // { x: 352.877697841727, y: 3.64705882352941, size: 1 },\r\n // { x: 353.525179856115, y: 3.76470588235294, size: 1 },\r\n // { x: 354.172661870504, y: 3.6078431372549, size: 1 },\r\n // { x: 355.467625899281, y: 3.64705882352941, size: 1 },\r\n // { x: 357.410071942446, y: 3.25490196078431, size: 1 },\r\n // { x: 358.705035971223, y: 3.6078431372549, size: 1 },\r\n // { x: 0.647482014388489, y: 3.45098039215686, size: 1 },\r\n // { x: 1.29496402877698, y: 3.49019607843137, size: 1 },\r\n // { x: 1.94244604316547, y: 3.76470588235294, size: 1 },\r\n // { x: 3.88489208633094, y: 3.76470588235294, size: 1 },\r\n // { x: 4.53237410071942, y: 3.68627450980392, size: 1 },\r\n // { x: 5.17985611510791, y: 3.72549019607843, size: 1 },\r\n // { x: 5.8273381294964, y: 3.45098039215686, size: 1 },\r\n // { x: 6.47482014388489, y: 3.64705882352941, size: 1 },\r\n // { x: 7.12230215827338, y: 3.64705882352941, size: 1 },\r\n // { x: 7.76978417266187, y: 3.45098039215686, size: 1 },\r\n // { x: 9.06474820143885, y: 3.37254901960784, size: 1 },\r\n // { x: 12.9496402877698, y: 3.41176470588235, size: 1 },\r\n // { x: 14.2446043165468, y: 3.52941176470588, size: 1 },\r\n // { x: 14.8920863309353, y: 3.49019607843137, size: 1 },\r\n // { x: 17.4820143884892, y: 3.33333333333333, size: 1 },\r\n // { x: 18.1294964028777, y: 3.13725490196078, size: 1 },\r\n // { x: 18.7769784172662, y: 3.13725490196078, size: 1 },\r\n // { x: 20.0719424460432, y: 3.68627450980392, size: 1 },\r\n // { x: 20.7194244604317, y: 3.52941176470588, size: 1 },\r\n // { x: 22.0143884892086, y: 3.56862745098039, size: 1 },\r\n // { x: 23.3093525179856, y: 3.76470588235294, size: 1 },\r\n // { x: 23.9568345323741, y: 3.76470588235294, size: 1 },\r\n // { x: 24.6043165467626, y: 3.56862745098039, size: 1 },\r\n // { x: 28.4892086330935, y: 3.76470588235294, size: 1 },\r\n // { x: 31.0791366906475, y: 3.6078431372549, size: 1 },\r\n // { x: 31.726618705036, y: 3.56862745098039, size: 1 },\r\n // { x: 32.3741007194245, y: 3.56862745098039, size: 1 },\r\n // { x: 33.6690647482014, y: 3.6078431372549, size: 1 },\r\n // { x: 35.6115107913669, y: 3.80392156862745, size: 1 },\r\n // { x: 36.9064748201439, y: 3.64705882352941, size: 1 },\r\n // { x: 38.8489208633094, y: 3.37254901960784, size: 1 },\r\n // { x: 40.7913669064748, y: 3.33333333333333, size: 1 },\r\n // { x: 42.0863309352518, y: 3.52941176470588, size: 1 },\r\n // { x: 42.7338129496403, y: 3.68627450980392, size: 1 },\r\n // { x: 43.3812949640288, y: 3.80392156862745, size: 1 },\r\n // { x: 44.0287769784173, y: 3.92156862745098, size: 1 },\r\n // { x: 44.6762589928058, y: 3.72549019607843, size: 1 },\r\n // { x: 45.3237410071942, y: 3.64705882352941, size: 1 },\r\n // { x: 45.9712230215827, y: 3.64705882352941, size: 1 },\r\n // { x: 48.5611510791367, y: 3.68627450980392, size: 1 },\r\n // { x: 49.2086330935252, y: 3.56862745098039, size: 1 },\r\n // { x: 49.8561151079137, y: 3.80392156862745, size: 1 },\r\n // { x: 51.1510791366906, y: 3.80392156862745, size: 1 },\r\n // { x: 51.7985611510791, y: 3.72549019607843, size: 1 },\r\n // { x: 53.7410071942446, y: 3.80392156862745, size: 1 },\r\n // { x: 54.3884892086331, y: 3.68627450980392, size: 1 },\r\n // { x: 57.6258992805755, y: 3.6078431372549, size: 1 },\r\n // { x: 60.2158273381295, y: 3.37254901960784, size: 1 },\r\n // { x: 60.863309352518, y: 3.52941176470588, size: 1 },\r\n // { x: 62.158273381295, y: 3.2156862745098, size: 1 },\r\n // { x: 62.8057553956835, y: 3.56862745098039, size: 1 },\r\n // { x: 66.6906474820144, y: 3.49019607843137, size: 1 },\r\n // { x: 67.9856115107914, y: 3.37254901960784, size: 1 },\r\n // { x: 68.6330935251799, y: 3.41176470588235, size: 1 },\r\n // { x: 69.9280575539568, y: 3.72549019607843, size: 1 },\r\n // { x: 70.5755395683453, y: 3.56862745098039, size: 1 },\r\n // { x: 71.2230215827338, y: 3.41176470588235, size: 1 },\r\n // { x: 72.5179856115108, y: 3.88235294117647, size: 1 },\r\n // { x: 73.8129496402878, y: 3.52941176470588, size: 1 },\r\n // { x: 74.4604316546763, y: 3.56862745098039, size: 1 },\r\n // { x: 75.1079136690647, y: 3.6078431372549, size: 1 },\r\n // { x: 77.0503597122302, y: 3.72549019607843, size: 1 },\r\n // { x: 79.6402877697842, y: 3.49019607843137, size: 1 },\r\n // { x: 80.2877697841727, y: 3.64705882352941, size: 1 },\r\n // { x: 80.9352517985612, y: 4.11764705882353, size: 1 },\r\n // { x: 81.5827338129496, y: 3.17647058823529, size: 1 },\r\n // { x: 82.2302158273381, y: 3.56862745098039, size: 1 },\r\n // { x: 82.8776978417266, y: 3.09803921568627, size: 1 },\r\n // { x: 83.5251798561151, y: 3.29411764705882, size: 1 },\r\n // { x: 84.8201438848921, y: 3.92156862745098, size: 1 },\r\n // { x: 85.4676258992806, y: 3.68627450980392, size: 1 },\r\n // { x: 87.410071942446, y: 3.68627450980392, size: 1 },\r\n // { x: 88.0575539568345, y: 3.6078431372549, size: 1 },\r\n // { x: 88.705035971223, y: 3.64705882352941, size: 1 },\r\n // { x: 90.6474820143885, y: 3.45098039215686, size: 1 },\r\n // { x: 93.2374100719424, y: 3.49019607843137, size: 1 },\r\n // { x: 94.5323741007194, y: 3.6078431372549, size: 1 },\r\n // { x: 95.1798561151079, y: 3.6078431372549, size: 1 },\r\n // { x: 97.7697841726619, y: 3.72549019607843, size: 1 },\r\n // { x: 99.0647482014388, y: 3.72549019607843, size: 1 },\r\n // { x: 101.007194244604, y: 3.72549019607843, size: 1 },\r\n // { x: 101.654676258993, y: 3.64705882352941, size: 1 },\r\n // { x: 102.94964028777, y: 3.64705882352941, size: 1 },\r\n // { x: 104.892086330935, y: 3.52941176470588, size: 1 },\r\n // { x: 105.539568345324, y: 3.56862745098039, size: 1 },\r\n // { x: 106.187050359712, y: 3.6078431372549, size: 1 },\r\n // { x: 108.129496402878, y: 3.80392156862745, size: 1 },\r\n // { x: 112.014388489209, y: 3.49019607843137, size: 1 },\r\n // { x: 112.661870503597, y: 3.64705882352941, size: 1 },\r\n // { x: 113.309352517986, y: 3.72549019607843, size: 1 },\r\n // { x: 115.251798561151, y: 3.72549019607843, size: 1 },\r\n // { x: 115.89928057554, y: 3.68627450980392, size: 1 },\r\n // { x: 117.194244604317, y: 3.80392156862745, size: 1 },\r\n // { x: 117.841726618705, y: 3.76470588235294, size: 1 },\r\n // { x: 118.489208633094, y: 3.68627450980392, size: 1 },\r\n // { x: 119.136690647482, y: 3.68627450980392, size: 1 },\r\n // { x: 119.784172661871, y: 3.41176470588235, size: 1 },\r\n // { x: 120.431654676259, y: 3.76470588235294, size: 1 },\r\n // { x: 123.669064748201, y: 3.56862745098039, size: 1 },\r\n // { x: 124.964028776978, y: 3.2156862745098, size: 1 },\r\n // { x: 126.258992805755, y: 2.82352941176471, size: 1 },\r\n // { x: 126.906474820144, y: 2.90196078431373, size: 1 },\r\n // { x: 128.201438848921, y: 3.76470588235294, size: 1 },\r\n // { x: 128.848920863309, y: 3.72549019607843, size: 1 },\r\n // { x: 129.496402877698, y: 3.6078431372549, size: 1 },\r\n // { x: 132.73381294964, y: 3.84313725490196, size: 1 },\r\n // { x: 134.028776978417, y: 3.52941176470588, size: 1 },\r\n // { x: 134.676258992806, y: 3.76470588235294, size: 1 },\r\n // { x: 136.618705035971, y: 3.84313725490196, size: 1 },\r\n // { x: 138.561151079137, y: 3.56862745098039, size: 1 },\r\n // { x: 140.503597122302, y: 3.68627450980392, size: 1 },\r\n // { x: 141.798561151079, y: 3.68627450980392, size: 1 },\r\n // { x: 142.446043165468, y: 3.6078431372549, size: 1 },\r\n // { x: 143.741007194245, y: 3.72549019607843, size: 1 },\r\n // { x: 144.388489208633, y: 3.64705882352941, size: 1 },\r\n // { x: 146.330935251799, y: 3.45098039215686, size: 1 },\r\n // { x: 147.625899280576, y: 3.2156862745098, size: 1 },\r\n // { x: 148.273381294964, y: 3.17647058823529, size: 1 },\r\n // { x: 148.920863309353, y: 4.03921568627451, size: 1 },\r\n // { x: 150.215827338129, y: 3.96078431372549, size: 1 },\r\n // { x: 150.863309352518, y: 3.64705882352941, size: 1 },\r\n // { x: 152.158273381295, y: 3.64705882352941, size: 1 },\r\n // { x: 152.805755395683, y: 3.72549019607843, size: 1 },\r\n // { x: 153.453237410072, y: 3.56862745098039, size: 1 },\r\n // { x: 154.10071942446, y: 3.68627450980392, size: 1 },\r\n // { x: 160.575539568345, y: 3.64705882352941, size: 1 },\r\n // { x: 162.517985611511, y: 3.76470588235294, size: 1 },\r\n // { x: 163.165467625899, y: 3.64705882352941, size: 1 },\r\n // { x: 163.812949640288, y: 3.6078431372549, size: 1 },\r\n // { x: 165.107913669065, y: 3.45098039215686, size: 1 },\r\n // { x: 165.755395683453, y: 3.49019607843137, size: 1 },\r\n // { x: 166.402877697842, y: 3.49019607843137, size: 1 },\r\n // { x: 167.05035971223, y: 3.88235294117647, size: 1 },\r\n // { x: 167.697841726619, y: 3.25490196078431, size: 1 },\r\n // { x: 168.992805755396, y: 3.17647058823529, size: 1 },\r\n // { x: 169.640287769784, y: 3.01960784313725, size: 1 },\r\n // { x: 170.287769784173, y: 3.29411764705882, size: 1 },\r\n // { x: 170.935251798561, y: 3.41176470588235, size: 1 },\r\n // { x: 171.58273381295, y: 3.56862745098039, size: 1 },\r\n // { x: 172.230215827338, y: 3.52941176470588, size: 1 },\r\n // { x: 173.525179856115, y: 3.64705882352941, size: 1 },\r\n // { x: 175.467625899281, y: 3.56862745098039, size: 1 },\r\n // { x: 176.762589928058, y: 3.56862745098039, size: 1 },\r\n // { x: 177.410071942446, y: 3.45098039215686, size: 1 },\r\n // { x: 178.057553956835, y: 3.52941176470588, size: 1 },\r\n // { x: 178.705035971223, y: 3.52941176470588, size: 1 },\r\n // { x: 180, y: 3.68627450980392, size: 1 },\r\n // { x: 180.647482014388, y: 3.45098039215686, size: 1 },\r\n // { x: 181.294964028777, y: 3.68627450980392, size: 1 },\r\n // { x: 183.884892086331, y: 3.68627450980392, size: 1 },\r\n // { x: 185.179856115108, y: 3.80392156862745, size: 1 },\r\n // { x: 185.827338129496, y: 3.88235294117647, size: 1 },\r\n // { x: 187.769784172662, y: 3.72549019607843, size: 1 },\r\n // { x: 188.41726618705, y: 3.6078431372549, size: 1 },\r\n // { x: 189.064748201439, y: 3.2156862745098, size: 1 },\r\n // { x: 189.712230215827, y: 3.09803921568627, size: 1 },\r\n // { x: 190.359712230216, y: 3.01960784313725, size: 1 },\r\n // { x: 191.007194244604, y: 3.01960784313725, size: 1 },\r\n // { x: 191.654676258993, y: 2.47058823529412, size: 1 },\r\n // { x: 192.302158273381, y: 3.56862745098039, size: 1 },\r\n // { x: 192.94964028777, y: 3.92156862745098, size: 1 },\r\n // { x: 193.597122302158, y: 3.80392156862745, size: 1 },\r\n // { x: 194.244604316547, y: 3.80392156862745, size: 1 },\r\n // { x: 194.892086330935, y: 3.76470588235294, size: 1 },\r\n // { x: 195.539568345324, y: 3.72549019607843, size: 1 },\r\n // { x: 198.776978417266, y: 3.88235294117647, size: 1 },\r\n // { x: 199.424460431655, y: 3.76470588235294, size: 1 },\r\n // { x: 203.956834532374, y: 3.56862745098039, size: 1 },\r\n // { x: 204.604316546763, y: 3.68627450980392, size: 1 },\r\n // { x: 206.546762589928, y: 3.76470588235294, size: 1 },\r\n // { x: 207.194244604317, y: 3.72549019607843, size: 1 },\r\n // { x: 207.841726618705, y: 3.84313725490196, size: 1 },\r\n // { x: 208.489208633094, y: 3.68627450980392, size: 1 },\r\n // { x: 209.136690647482, y: 3.80392156862745, size: 1 },\r\n // { x: 209.784172661871, y: 3.96078431372549, size: 1 },\r\n // { x: 211.079136690647, y: 3.56862745098039, size: 1 },\r\n // { x: 211.726618705036, y: 3.88235294117647, size: 1 },\r\n // { x: 213.669064748201, y: 3.56862745098039, size: 1 },\r\n // { x: 216.906474820144, y: 3.76470588235294, size: 1 },\r\n // { x: 218.848920863309, y: 3.49019607843137, size: 1 },\r\n // { x: 222.086330935252, y: 3.80392156862745, size: 1 },\r\n // { x: 222.73381294964, y: 3.68627450980392, size: 1 },\r\n // { x: 223.381294964029, y: 3.76470588235294, size: 1 },\r\n // { x: 227.26618705036, y: 3.64705882352941, size: 1 },\r\n // { x: 227.913669064748, y: 3.76470588235294, size: 1 },\r\n // { x: 229.856115107914, y: 3.52941176470588, size: 1 },\r\n // { x: 232.446043165468, y: 3.17647058823529, size: 1 },\r\n // { x: 233.093525179856, y: 3.45098039215686, size: 1 },\r\n // { x: 233.741007194245, y: 3.37254901960784, size: 1 },\r\n // { x: 234.388489208633, y: 2.82352941176471, size: 1 },\r\n // { x: 235.035971223022, y: 3.05882352941176, size: 1 },\r\n // { x: 235.68345323741, y: 3.45098039215686, size: 1 },\r\n // { x: 236.330935251799, y: 3.56862745098039, size: 1 },\r\n // { x: 236.978417266187, y: 3.64705882352941, size: 1 },\r\n // { x: 242.805755395683, y: 3.88235294117647, size: 1 },\r\n // { x: 243.453237410072, y: 3.68627450980392, size: 1 },\r\n // { x: 244.10071942446, y: 3.56862745098039, size: 1 },\r\n // { x: 244.748201438849, y: 3.72549019607843, size: 1 },\r\n // { x: 246.043165467626, y: 3.56862745098039, size: 1 },\r\n // { x: 246.690647482014, y: 3.33333333333333, size: 1 },\r\n // { x: 251.223021582734, y: 3.76470588235294, size: 1 },\r\n // { x: 253.812949640288, y: 3.41176470588235, size: 1 },\r\n // { x: 254.460431654676, y: 3.64705882352941, size: 1 },\r\n // { x: 255.755395683453, y: 3.33333333333333, size: 1 },\r\n // { x: 256.402877697842, y: 3.17647058823529, size: 1 },\r\n // { x: 257.05035971223, y: 3.84313725490196, size: 1 },\r\n // { x: 257.697841726619, y: 3.49019607843137, size: 1 },\r\n // { x: 258.345323741007, y: 3.56862745098039, size: 1 },\r\n // { x: 260.287769784173, y: 3.6078431372549, size: 1 },\r\n // { x: 261.58273381295, y: 3.76470588235294, size: 1 },\r\n // { x: 270, y: 3.49019607843137, size: 1 },\r\n // { x: 270.647482014389, y: 3.72549019607843, size: 1 },\r\n // { x: 272.589928057554, y: 3.37254901960784, size: 1 },\r\n // { x: 273.237410071942, y: 3.84313725490196, size: 1 },\r\n // { x: 275.179856115108, y: 3.33333333333333, size: 1 },\r\n // { x: 275.827338129496, y: 3.49019607843137, size: 1 },\r\n // { x: 276.474820143885, y: 3.13725490196078, size: 1 },\r\n // { x: 277.122302158273, y: 3.05882352941176, size: 1 },\r\n // { x: 277.769784172662, y: 1.88235294117647, size: 1 },\r\n // { x: 278.41726618705, y: 3.45098039215686, size: 1 },\r\n // { x: 281.007194244604, y: 3.68627450980392, size: 1 },\r\n // { x: 281.654676258993, y: 3.72549019607843, size: 1 },\r\n // { x: 282.94964028777, y: 3.41176470588235, size: 1 },\r\n // { x: 284.244604316547, y: 3.64705882352941, size: 1 },\r\n // { x: 284.892086330935, y: 3.49019607843137, size: 1 },\r\n // { x: 285.539568345324, y: 3.72549019607843, size: 1 },\r\n // { x: 286.834532374101, y: 3.52941176470588, size: 1 },\r\n // { x: 287.482014388489, y: 3.68627450980392, size: 1 },\r\n // { x: 288.776978417266, y: 3.72549019607843, size: 1 },\r\n // { x: 289.424460431655, y: 3.52941176470588, size: 1 },\r\n // { x: 290.071942446043, y: 3.45098039215686, size: 1 },\r\n // { x: 292.661870503597, y: 3.72549019607843, size: 1 },\r\n // { x: 293.309352517986, y: 3.56862745098039, size: 1 },\r\n // { x: 293.956834532374, y: 3.64705882352941, size: 1 },\r\n // { x: 295.251798561151, y: 3.76470588235294, size: 1 },\r\n // { x: 296.546762589928, y: 3.49019607843137, size: 1 },\r\n // { x: 297.194244604317, y: 3.52941176470588, size: 1 },\r\n // { x: 297.841726618705, y: 3.52941176470588, size: 1 },\r\n // { x: 298.489208633094, y: 3.41176470588235, size: 1 },\r\n // { x: 299.136690647482, y: 3.29411764705882, size: 1 },\r\n // { x: 310.143884892086, y: 3.37254901960784, size: 1 },\r\n // { x: 312.086330935252, y: 3.88235294117647, size: 1 },\r\n // { x: 312.73381294964, y: 3.45098039215686, size: 1 },\r\n // { x: 314.028776978417, y: 3.72549019607843, size: 1 },\r\n // { x: 314.676258992806, y: 3.68627450980392, size: 1 },\r\n // { x: 315.323741007194, y: 3.80392156862745, size: 1 },\r\n // { x: 315.971223021583, y: 3.41176470588235, size: 1 },\r\n // { x: 319.208633093525, y: 3.72549019607843, size: 1 },\r\n // { x: 320.503597122302, y: 3.01960784313725, size: 1 },\r\n // { x: 321.151079136691, y: 3.09803921568627, size: 1 },\r\n // { x: 323.093525179856, y: 3.84313725490196, size: 1 },\r\n // { x: 323.741007194245, y: 3.45098039215686, size: 1 },\r\n // { x: 324.388489208633, y: 3.6078431372549, size: 1 },\r\n // { x: 325.68345323741, y: 3.64705882352941, size: 1 },\r\n // { x: 326.330935251799, y: 3.64705882352941, size: 1 },\r\n // { x: 326.978417266187, y: 3.52941176470588, size: 1 },\r\n // { x: 328.273381294964, y: 3.6078431372549, size: 1 },\r\n // { x: 328.920863309353, y: 3.49019607843137, size: 1 },\r\n // { x: 330.215827338129, y: 3.68627450980392, size: 1 },\r\n // { x: 332.805755395683, y: 3.2156862745098, size: 1 },\r\n // { x: 333.453237410072, y: 3.92156862745098, size: 1 },\r\n // { x: 334.10071942446, y: 3.6078431372549, size: 1 },\r\n // { x: 334.748201438849, y: 3.49019607843137, size: 1 },\r\n // { x: 335.395683453237, y: 3.64705882352941, size: 1 },\r\n // { x: 336.690647482014, y: 3.88235294117647, size: 1 },\r\n // { x: 337.338129496403, y: 3.56862745098039, size: 1 },\r\n // { x: 341.223021582734, y: 3.84313725490196, size: 1 },\r\n // { x: 342.517985611511, y: 3.41176470588235, size: 1 },\r\n // { x: 344.460431654676, y: 3.64705882352941, size: 1 },\r\n // { x: 345.107913669065, y: 3.49019607843137, size: 1 },\r\n // { x: 347.697841726619, y: 3.56862745098039, size: 1 },\r\n // { x: 348.345323741007, y: 3.68627450980392, size: 1 },\r\n // { x: 350.287769784173, y: 3.45098039215686, size: 1 },\r\n // { x: 352.230215827338, y: 3.84313725490196, size: 1 },\r\n // { x: 354.172661870504, y: 3.52941176470588, size: 1 },\r\n // { x: 354.820143884892, y: 3.76470588235294, size: 1 },\r\n // { x: 355.467625899281, y: 3.76470588235294, size: 1 },\r\n // { x: 357.410071942446, y: 3.56862745098039, size: 1 },\r\n // { x: 358.057553956835, y: 3.88235294117647, size: 1 },\r\n // { x: 3.23741007194245, y: 3.05882352941176, size: 1 },\r\n // { x: 3.88489208633094, y: 2.54901960784314, size: 1 },\r\n // { x: 5.17985611510791, y: 3.49019607843137, size: 1 },\r\n // { x: 8.41726618705036, y: 3.64705882352941, size: 1 },\r\n // { x: 9.71223021582734, y: 3.76470588235294, size: 1 },\r\n // { x: 10.3597122302158, y: 3.72549019607843, size: 1 },\r\n // { x: 11.0071942446043, y: 3.52941176470588, size: 1 },\r\n // { x: 11.6546762589928, y: 3.52941176470588, size: 1 },\r\n // { x: 12.9496402877698, y: 3.45098039215686, size: 1 },\r\n // { x: 14.2446043165468, y: 3.76470588235294, size: 1 },\r\n // { x: 18.1294964028777, y: 3.52941176470588, size: 1 },\r\n // { x: 19.4244604316547, y: 3.76470588235294, size: 1 },\r\n // { x: 24.6043165467626, y: 3.45098039215686, size: 1 },\r\n // { x: 25.2517985611511, y: 3.41176470588235, size: 1 },\r\n // { x: 26.5467625899281, y: 3.45098039215686, size: 1 },\r\n // { x: 27.841726618705, y: 3.76470588235294, size: 1 },\r\n // { x: 28.4892086330935, y: 3.84313725490196, size: 1 },\r\n // { x: 29.136690647482, y: 3.64705882352941, size: 1 },\r\n // { x: 30.431654676259, y: 3.68627450980392, size: 1 },\r\n // { x: 33.0215827338129, y: 3.72549019607843, size: 1 },\r\n // { x: 33.6690647482014, y: 3.52941176470588, size: 1 },\r\n // { x: 34.3165467625899, y: 3.68627450980392, size: 1 },\r\n // { x: 34.9640287769784, y: 3.72549019607843, size: 1 },\r\n // { x: 36.2589928057554, y: 3.68627450980392, size: 1 },\r\n // { x: 37.5539568345324, y: 3.56862745098039, size: 1 },\r\n // { x: 38.8489208633094, y: 3.56862745098039, size: 1 },\r\n // { x: 39.4964028776978, y: 3.88235294117647, size: 1 },\r\n // { x: 42.0863309352518, y: 3.72549019607843, size: 1 },\r\n // { x: 42.7338129496403, y: 3.92156862745098, size: 1 },\r\n // { x: 43.3812949640288, y: 3.68627450980392, size: 1 },\r\n // { x: 45.3237410071942, y: 3.25490196078431, size: 1 },\r\n // { x: 45.9712230215827, y: 3.29411764705882, size: 1 },\r\n // { x: 46.6187050359712, y: 2.70588235294118, size: 1 },\r\n // { x: 47.2661870503597, y: 2.86274509803922, size: 1 },\r\n // { x: 49.2086330935252, y: 3.6078431372549, size: 1 },\r\n // { x: 49.8561151079137, y: 3.64705882352941, size: 1 },\r\n // { x: 53.0935251798561, y: 3.33333333333333, size: 1 },\r\n // { x: 55.0359712230216, y: 3.41176470588235, size: 1 },\r\n // { x: 55.6834532374101, y: 3.33333333333333, size: 1 },\r\n // { x: 56.9784172661871, y: 3.64705882352941, size: 1 },\r\n // { x: 57.6258992805755, y: 3.41176470588235, size: 1 },\r\n // { x: 59.568345323741, y: 3.56862745098039, size: 1 },\r\n // { x: 61.5107913669065, y: 3.33333333333333, size: 1 },\r\n // { x: 62.158273381295, y: 3.56862745098039, size: 1 },\r\n // { x: 64.7482014388489, y: 3.45098039215686, size: 1 },\r\n // { x: 66.0431654676259, y: 3.56862745098039, size: 1 },\r\n // { x: 67.3381294964029, y: 3.2156862745098, size: 1 },\r\n // { x: 67.9856115107914, y: 3.01960784313725, size: 1 },\r\n // { x: 68.6330935251799, y: 2.82352941176471, size: 1 },\r\n // { x: 69.2805755395683, y: 3.49019607843137, size: 1 },\r\n // { x: 69.9280575539568, y: 3.6078431372549, size: 1 },\r\n // { x: 72.5179856115108, y: 3.84313725490196, size: 1 },\r\n // { x: 76.4028776978417, y: 3.49019607843137, size: 1 },\r\n // { x: 78.3453237410072, y: 3.80392156862745, size: 1 },\r\n // { x: 79.6402877697842, y: 3.68627450980392, size: 1 },\r\n // { x: 80.2877697841727, y: 3.72549019607843, size: 1 },\r\n // { x: 82.8776978417266, y: 3.96078431372549, size: 1 },\r\n // { x: 84.1726618705036, y: 3.88235294117647, size: 1 },\r\n // { x: 84.8201438848921, y: 3.56862745098039, size: 1 },\r\n // { x: 86.1151079136691, y: 3.56862745098039, size: 1 },\r\n // { x: 88.0575539568345, y: 4.03921568627451, size: 1 },\r\n // { x: 89.3525179856115, y: 3.2156862745098, size: 1 },\r\n // { x: 90, y: 2.58823529411765, size: 1 },\r\n // { x: 90.6474820143885, y: 2.50980392156863, size: 1 },\r\n // { x: 92.589928057554, y: 3.56862745098039, size: 1 },\r\n // { x: 96.4748201438849, y: 3.52941176470588, size: 1 },\r\n // { x: 98.4172661870504, y: 3.80392156862745, size: 1 },\r\n // { x: 99.0647482014388, y: 3.80392156862745, size: 1 },\r\n // { x: 99.7122302158273, y: 3.76470588235294, size: 1 },\r\n // { x: 101.007194244604, y: 3.41176470588235, size: 1 },\r\n // { x: 101.654676258993, y: 3.45098039215686, size: 1 },\r\n // { x: 102.302158273381, y: 3.52941176470588, size: 1 },\r\n // { x: 103.597122302158, y: 3.45098039215686, size: 1 },\r\n // { x: 104.244604316547, y: 3.33333333333333, size: 1 },\r\n // { x: 104.892086330935, y: 3.88235294117647, size: 1 },\r\n // { x: 106.834532374101, y: 3.68627450980392, size: 1 },\r\n // { x: 108.776978417266, y: 3.41176470588235, size: 1 },\r\n // { x: 109.424460431655, y: 3.52941176470588, size: 1 },\r\n // { x: 110.071942446043, y: 3.2156862745098, size: 1 },\r\n // { x: 112.014388489209, y: 3.56862745098039, size: 1 },\r\n // { x: 113.309352517986, y: 3.80392156862745, size: 1 },\r\n // { x: 115.251798561151, y: 3.64705882352941, size: 1 },\r\n // { x: 118.489208633094, y: 3.64705882352941, size: 1 },\r\n // { x: 119.784172661871, y: 3.56862745098039, size: 1 },\r\n // { x: 120.431654676259, y: 3.80392156862745, size: 1 },\r\n // { x: 121.079136690647, y: 3.68627450980392, size: 1 },\r\n // { x: 121.726618705036, y: 3.76470588235294, size: 1 },\r\n // { x: 123.021582733813, y: 3.76470588235294, size: 1 },\r\n // { x: 124.964028776978, y: 3.52941176470588, size: 1 },\r\n // { x: 126.906474820144, y: 3.80392156862745, size: 1 },\r\n // { x: 127.553956834532, y: 3.76470588235294, size: 1 },\r\n // { x: 128.201438848921, y: 3.45098039215686, size: 1 },\r\n // { x: 129.496402877698, y: 3.76470588235294, size: 1 },\r\n // { x: 130.143884892086, y: 3.72549019607843, size: 1 },\r\n // { x: 130.791366906475, y: 3.88235294117647, size: 1 },\r\n // { x: 132.73381294964, y: 3.6078431372549, size: 1 },\r\n // { x: 133.381294964029, y: 3.37254901960784, size: 1 },\r\n // { x: 136.618705035971, y: 3.41176470588235, size: 1 },\r\n // { x: 137.913669064748, y: 3.64705882352941, size: 1 },\r\n // { x: 138.561151079137, y: 3.64705882352941, size: 1 },\r\n // { x: 140.503597122302, y: 3.29411764705882, size: 1 },\r\n // { x: 141.151079136691, y: 3.64705882352941, size: 1 },\r\n // { x: 143.741007194245, y: 3.49019607843137, size: 1 },\r\n // { x: 145.68345323741, y: 3.45098039215686, size: 1 },\r\n // { x: 146.978417266187, y: 3.92156862745098, size: 1 },\r\n // { x: 148.273381294964, y: 3.49019607843137, size: 1 },\r\n // { x: 150.863309352518, y: 3.45098039215686, size: 1 },\r\n // { x: 152.158273381295, y: 3.72549019607843, size: 1 },\r\n // { x: 153.453237410072, y: 3.41176470588235, size: 1 },\r\n // { x: 154.10071942446, y: 3.09803921568627, size: 1 },\r\n // { x: 154.748201438849, y: 2.98039215686275, size: 1 },\r\n // { x: 155.395683453237, y: 3.17647058823529, size: 1 },\r\n // { x: 156.043165467626, y: 3.88235294117647, size: 1 },\r\n // { x: 157.985611510791, y: 3.88235294117647, size: 1 },\r\n // { x: 161.223021582734, y: 3.6078431372549, size: 1 },\r\n // { x: 163.812949640288, y: 3.92156862745098, size: 1 },\r\n // { x: 164.460431654676, y: 3.76470588235294, size: 1 },\r\n // { x: 165.107913669065, y: 3.92156862745098, size: 1 },\r\n // { x: 166.402877697842, y: 3.56862745098039, size: 1 },\r\n // { x: 167.05035971223, y: 3.84313725490196, size: 1 },\r\n // { x: 167.697841726619, y: 3.72549019607843, size: 1 },\r\n // { x: 168.992805755396, y: 3.76470588235294, size: 1 },\r\n // { x: 171.58273381295, y: 3.45098039215686, size: 1 },\r\n // { x: 172.230215827338, y: 3.45098039215686, size: 1 },\r\n // { x: 174.172661870504, y: 3.29411764705882, size: 1 },\r\n // { x: 175.467625899281, y: 3.13725490196078, size: 1 },\r\n // { x: 176.115107913669, y: 3.01960784313725, size: 1 },\r\n // { x: 176.762589928058, y: 2.98039215686275, size: 1 },\r\n // { x: 177.410071942446, y: 3.96078431372549, size: 1 },\r\n // { x: 180, y: 3.72549019607843, size: 1 },\r\n // { x: 183.237410071942, y: 3.72549019607843, size: 1 },\r\n // { x: 185.179856115108, y: 3.56862745098039, size: 1 },\r\n // { x: 185.827338129496, y: 3.49019607843137, size: 1 },\r\n // { x: 187.769784172662, y: 3.68627450980392, size: 1 },\r\n // { x: 189.064748201439, y: 3.80392156862745, size: 1 },\r\n // { x: 189.712230215827, y: 3.88235294117647, size: 1 },\r\n // { x: 190.359712230216, y: 3.56862745098039, size: 1 },\r\n // { x: 192.302158273381, y: 3.52941176470588, size: 1 },\r\n // { x: 192.94964028777, y: 3.64705882352941, size: 1 },\r\n // { x: 198.129496402878, y: 3.33333333333333, size: 1 },\r\n // { x: 198.776978417266, y: 3.52941176470588, size: 1 },\r\n // { x: 199.424460431655, y: 3.6078431372549, size: 1 },\r\n // { x: 200.071942446043, y: 3.64705882352941, size: 1 },\r\n // { x: 205.251798561151, y: 3.68627450980392, size: 1 },\r\n // { x: 207.841726618705, y: 3.72549019607843, size: 1 },\r\n // { x: 209.784172661871, y: 3.72549019607843, size: 1 },\r\n // { x: 213.021582733813, y: 3.52941176470588, size: 1 },\r\n // { x: 213.669064748201, y: 3.76470588235294, size: 1 },\r\n // { x: 214.31654676259, y: 3.76470588235294, size: 1 },\r\n // { x: 216.258992805755, y: 3.84313725490196, size: 1 },\r\n // { x: 218.201438848921, y: 3.52941176470588, size: 1 },\r\n // { x: 220.143884892086, y: 3.80392156862745, size: 1 },\r\n // { x: 221.438848920863, y: 3.41176470588235, size: 1 },\r\n // { x: 223.381294964029, y: 3.80392156862745, size: 1 },\r\n // { x: 224.676258992806, y: 3.6078431372549, size: 1 },\r\n // { x: 225.971223021583, y: 3.52941176470588, size: 1 },\r\n // { x: 228.561151079137, y: 3.56862745098039, size: 1 },\r\n // { x: 229.208633093525, y: 3.80392156862745, size: 1 },\r\n // { x: 230.503597122302, y: 3.52941176470588, size: 1 },\r\n // { x: 231.151079136691, y: 3.52941176470588, size: 1 },\r\n // { x: 233.741007194245, y: 3.33333333333333, size: 1 },\r\n // { x: 234.388489208633, y: 3.49019607843137, size: 1 },\r\n // { x: 235.035971223022, y: 3.45098039215686, size: 1 },\r\n // { x: 235.68345323741, y: 3.56862745098039, size: 1 },\r\n // { x: 236.330935251799, y: 3.41176470588235, size: 1 },\r\n // { x: 236.978417266187, y: 3.52941176470588, size: 1 },\r\n // { x: 243.453237410072, y: 3.56862745098039, size: 1 },\r\n // { x: 247.338129496403, y: 3.37254901960784, size: 1 },\r\n // { x: 248.63309352518, y: 3.6078431372549, size: 1 },\r\n // { x: 249.280575539568, y: 3.41176470588235, size: 1 },\r\n // { x: 249.928057553957, y: 3.6078431372549, size: 1 },\r\n // { x: 250.575539568345, y: 3.84313725490196, size: 1 },\r\n // { x: 251.223021582734, y: 3.52941176470588, size: 1 },\r\n // { x: 253.165467625899, y: 3.45098039215686, size: 1 },\r\n // { x: 255.755395683453, y: 3.37254901960784, size: 1 },\r\n // { x: 258.345323741007, y: 3.41176470588235, size: 1 },\r\n // { x: 258.992805755396, y: 3.41176470588235, size: 1 },\r\n // { x: 259.640287769784, y: 3.37254901960784, size: 1 },\r\n // { x: 260.935251798561, y: 3.33333333333333, size: 1 },\r\n // { x: 261.58273381295, y: 3.37254901960784, size: 1 },\r\n // { x: 262.230215827338, y: 3.41176470588235, size: 1 },\r\n // { x: 262.877697841727, y: 3.13725490196078, size: 1 },\r\n // { x: 263.525179856115, y: 3.52941176470588, size: 1 },\r\n // { x: 264.172661870504, y: 3.37254901960784, size: 1 },\r\n // { x: 264.820143884892, y: 3.41176470588235, size: 1 },\r\n // { x: 265.467625899281, y: 3.45098039215686, size: 1 },\r\n // { x: 270.647482014389, y: 3.68627450980392, size: 1 },\r\n // { x: 272.589928057554, y: 3.52941176470588, size: 1 },\r\n // { x: 274.532374100719, y: 3.80392156862745, size: 1 },\r\n // { x: 275.179856115108, y: 3.56862745098039, size: 1 },\r\n // { x: 276.474820143885, y: 3.72549019607843, size: 1 },\r\n // { x: 277.122302158273, y: 3.76470588235294, size: 1 },\r\n // { x: 277.769784172662, y: 3.6078431372549, size: 1 },\r\n // { x: 278.41726618705, y: 3.41176470588235, size: 1 },\r\n // { x: 280.359712230216, y: 3.68627450980392, size: 1 },\r\n // { x: 281.007194244604, y: 3.72549019607843, size: 1 },\r\n // { x: 282.302158273381, y: 3.45098039215686, size: 1 },\r\n // { x: 282.94964028777, y: 3.68627450980392, size: 1 },\r\n // { x: 283.597122302158, y: 3.56862745098039, size: 1 },\r\n // { x: 284.244604316547, y: 3.25490196078431, size: 1 },\r\n // { x: 284.892086330935, y: 3.13725490196078, size: 1 },\r\n // { x: 288.129496402878, y: 3.6078431372549, size: 1 },\r\n // { x: 288.776978417266, y: 3.84313725490196, size: 1 },\r\n // { x: 294.604316546763, y: 3.68627450980392, size: 1 },\r\n // { x: 295.89928057554, y: 3.52941176470588, size: 1 },\r\n // { x: 298.489208633094, y: 3.56862745098039, size: 1 },\r\n // { x: 299.784172661871, y: 4, size: 1 },\r\n // { x: 300.431654676259, y: 3.80392156862745, size: 1 },\r\n // { x: 301.079136690647, y: 3.68627450980392, size: 1 },\r\n // { x: 301.726618705036, y: 3.6078431372549, size: 1 },\r\n // { x: 302.374100719424, y: 3.68627450980392, size: 1 },\r\n // { x: 303.021582733813, y: 3.64705882352941, size: 1 },\r\n // { x: 304.31654676259, y: 3.37254901960784, size: 1 },\r\n // { x: 304.964028776978, y: 3.17647058823529, size: 1 },\r\n // { x: 305.611510791367, y: 2.23529411764706, size: 1 },\r\n // { x: 306.258992805755, y: 1.92156862745098, size: 1 },\r\n // { x: 306.906474820144, y: 3.37254901960784, size: 1 },\r\n // { x: 308.201438848921, y: 3.2156862745098, size: 1 },\r\n // { x: 308.848920863309, y: 3.33333333333333, size: 1 },\r\n // { x: 309.496402877698, y: 3.41176470588235, size: 1 },\r\n // { x: 310.143884892086, y: 3.41176470588235, size: 1 },\r\n // { x: 312.086330935252, y: 3.37254901960784, size: 1 },\r\n // { x: 313.381294964029, y: 3.29411764705882, size: 1 },\r\n // { x: 314.028776978417, y: 3.56862745098039, size: 1 },\r\n // { x: 314.676258992806, y: 3.52941176470588, size: 1 },\r\n // { x: 315.323741007194, y: 3.41176470588235, size: 1 },\r\n // { x: 316.618705035971, y: 3.29411764705882, size: 1 },\r\n // { x: 317.26618705036, y: 3.6078431372549, size: 1 },\r\n // { x: 317.913669064748, y: 3.37254901960784, size: 1 },\r\n // { x: 318.561151079137, y: 3.2156862745098, size: 1 },\r\n // { x: 319.856115107914, y: 3.41176470588235, size: 1 },\r\n // { x: 320.503597122302, y: 3.6078431372549, size: 1 },\r\n // { x: 321.151079136691, y: 3.6078431372549, size: 1 },\r\n // { x: 321.798561151079, y: 3.41176470588235, size: 1 },\r\n // { x: 322.446043165468, y: 3.37254901960784, size: 1 },\r\n // { x: 323.093525179856, y: 3.6078431372549, size: 1 },\r\n // { x: 323.741007194245, y: 3.2156862745098, size: 1 },\r\n // { x: 325.68345323741, y: 3.09803921568627, size: 1 },\r\n // { x: 326.330935251799, y: 3.17647058823529, size: 1 },\r\n // { x: 326.978417266187, y: 2.98039215686275, size: 1 },\r\n // { x: 327.625899280576, y: 2.11764705882353, size: 1 },\r\n // { x: 328.273381294964, y: 3.45098039215686, size: 1 },\r\n // { x: 328.920863309353, y: 3.6078431372549, size: 1 },\r\n // { x: 330.215827338129, y: 3.49019607843137, size: 1 },\r\n // { x: 330.863309352518, y: 3.6078431372549, size: 1 },\r\n // { x: 332.158273381295, y: 3.45098039215686, size: 1 },\r\n // { x: 332.805755395683, y: 3.56862745098039, size: 1 },\r\n // { x: 335.395683453237, y: 3.56862745098039, size: 1 },\r\n // { x: 336.043165467626, y: 3.64705882352941, size: 1 },\r\n // { x: 337.985611510791, y: 3.52941176470588, size: 1 },\r\n // { x: 338.63309352518, y: 3.37254901960784, size: 1 },\r\n // { x: 339.280575539568, y: 3.56862745098039, size: 1 },\r\n // { x: 340.575539568345, y: 3.41176470588235, size: 1 },\r\n // { x: 341.223021582734, y: 3.6078431372549, size: 1 },\r\n // { x: 341.870503597122, y: 3.33333333333333, size: 1 },\r\n // { x: 344.460431654676, y: 3.6078431372549, size: 1 },\r\n // { x: 346.402877697842, y: 3.41176470588235, size: 1 },\r\n // { x: 347.05035971223, y: 3.33333333333333, size: 1 },\r\n // { x: 348.345323741007, y: 3.37254901960784, size: 1 },\r\n // { x: 348.992805755396, y: 3.09803921568627, size: 1 },\r\n // { x: 349.640287769784, y: 3.01960784313725, size: 1 },\r\n // { x: 350.287769784173, y: 3.68627450980392, size: 1 },\r\n // { x: 350.935251798561, y: 3.72549019607843, size: 1 },\r\n // { x: 353.525179856115, y: 3.6078431372549, size: 1 },\r\n // { x: 354.172661870504, y: 3.76470588235294, size: 1 },\r\n // { x: 355.467625899281, y: 3.68627450980392, size: 1 },\r\n // { x: 356.115107913669, y: 3.52941176470588, size: 1 },\r\n // { x: 356.762589928058, y: 3.45098039215686, size: 1 },\r\n // { x: 357.410071942446, y: 3.45098039215686, size: 1 },\r\n // { x: 358.057553956835, y: 3.49019607843137, size: 1 },\r\n // { x: 358.705035971223, y: 3.41176470588235, size: 1 },\r\n // { x: 1.29496402877698, y: 3.45098039215686, size: 1 },\r\n // { x: 1.94244604316547, y: 3.84313725490196, size: 1 },\r\n // { x: 3.23741007194245, y: 3.52941176470588, size: 1 },\r\n // { x: 3.88489208633094, y: 3.6078431372549, size: 1 },\r\n // { x: 8.41726618705036, y: 3.33333333333333, size: 1 },\r\n // { x: 9.71223021582734, y: 3.17647058823529, size: 1 },\r\n // { x: 10.3597122302158, y: 2.66666666666667, size: 1 },\r\n // { x: 11.0071942446043, y: 1.92156862745098, size: 1 },\r\n // { x: 11.6546762589928, y: 3.76470588235294, size: 1 },\r\n // { x: 14.2446043165468, y: 3.45098039215686, size: 1 },\r\n // { x: 16.8345323741007, y: 3.49019607843137, size: 1 },\r\n // { x: 18.7769784172662, y: 3.68627450980392, size: 1 },\r\n // { x: 20.0719424460432, y: 3.80392156862745, size: 1 },\r\n // { x: 22.6618705035971, y: 3.88235294117647, size: 1 },\r\n // { x: 23.3093525179856, y: 3.80392156862745, size: 1 },\r\n // { x: 23.9568345323741, y: 3.84313725490196, size: 1 },\r\n // { x: 25.2517985611511, y: 3.84313725490196, size: 1 },\r\n // { x: 28.4892086330935, y: 3.56862745098039, size: 1 },\r\n // { x: 30.431654676259, y: 3.05882352941176, size: 1 },\r\n // { x: 31.0791366906475, y: 2.98039215686275, size: 1 },\r\n // { x: 31.726618705036, y: 2.90196078431373, size: 1 },\r\n // { x: 32.3741007194245, y: 1.88235294117647, size: 1 },\r\n // { x: 33.6690647482014, y: 3.72549019607843, size: 1 },\r\n // { x: 34.3165467625899, y: 3.52941176470588, size: 1 },\r\n // { x: 36.2589928057554, y: 3.56862745098039, size: 1 },\r\n // { x: 37.5539568345324, y: 3.84313725490196, size: 1 },\r\n // { x: 40.1438848920863, y: 3.56862745098039, size: 1 },\r\n // { x: 41.4388489208633, y: 3.64705882352941, size: 1 },\r\n // { x: 42.0863309352518, y: 3.80392156862745, size: 1 },\r\n // { x: 42.7338129496403, y: 3.80392156862745, size: 1 },\r\n // { x: 44.6762589928058, y: 3.45098039215686, size: 1 },\r\n // { x: 48.5611510791367, y: 3.64705882352941, size: 1 },\r\n // { x: 49.2086330935252, y: 3.49019607843137, size: 1 },\r\n // { x: 49.8561151079137, y: 3.6078431372549, size: 1 },\r\n // { x: 51.7985611510791, y: 3.33333333333333, size: 1 },\r\n // { x: 52.4460431654676, y: 3.13725490196078, size: 1 },\r\n // { x: 53.0935251798561, y: 3.2156862745098, size: 1 },\r\n // { x: 53.7410071942446, y: 2.7843137254902, size: 1 },\r\n // { x: 54.3884892086331, y: 2.70588235294118, size: 1 },\r\n // { x: 55.6834532374101, y: 3.84313725490196, size: 1 },\r\n // { x: 59.568345323741, y: 3.6078431372549, size: 1 },\r\n // { x: 60.2158273381295, y: 3.6078431372549, size: 1 },\r\n // { x: 62.158273381295, y: 3.52941176470588, size: 1 },\r\n // { x: 62.8057553956835, y: 3.45098039215686, size: 1 },\r\n // { x: 65.3956834532374, y: 3.45098039215686, size: 1 },\r\n // { x: 66.6906474820144, y: 3.64705882352941, size: 1 },\r\n // { x: 67.3381294964029, y: 3.49019607843137, size: 1 },\r\n // { x: 67.9856115107914, y: 3.56862745098039, size: 1 },\r\n // { x: 68.6330935251799, y: 3.6078431372549, size: 1 },\r\n // { x: 69.2805755395683, y: 3.56862745098039, size: 1 },\r\n // { x: 71.8705035971223, y: 3.68627450980392, size: 1 },\r\n // { x: 73.1654676258993, y: 3.49019607843137, size: 1 },\r\n // { x: 75.1079136690647, y: 3.33333333333333, size: 1 },\r\n // { x: 77.6978417266187, y: 3.52941176470588, size: 1 },\r\n // { x: 80.9352517985612, y: 3.72549019607843, size: 1 },\r\n // { x: 86.7625899280576, y: 3.56862745098039, size: 1 },\r\n // { x: 87.410071942446, y: 3.6078431372549, size: 1 },\r\n // { x: 88.0575539568345, y: 3.72549019607843, size: 1 },\r\n // { x: 89.3525179856115, y: 3.68627450980392, size: 1 },\r\n // { x: 90, y: 3.64705882352941, size: 1 },\r\n // { x: 92.589928057554, y: 3.52941176470588, size: 1 },\r\n // { x: 93.2374100719424, y: 3.76470588235294, size: 1 },\r\n // { x: 95.1798561151079, y: 3.64705882352941, size: 1 },\r\n // { x: 95.8273381294964, y: 3.52941176470588, size: 1 },\r\n // { x: 97.1223021582734, y: 3.64705882352941, size: 1 },\r\n // { x: 100.359712230216, y: 3.84313725490196, size: 1 },\r\n // { x: 101.007194244604, y: 3.64705882352941, size: 1 },\r\n // { x: 102.94964028777, y: 3.68627450980392, size: 1 },\r\n // { x: 103.597122302158, y: 3.64705882352941, size: 1 },\r\n // { x: 104.244604316547, y: 3.80392156862745, size: 1 },\r\n // { x: 106.834532374101, y: 3.84313725490196, size: 1 },\r\n // { x: 107.482014388489, y: 3.80392156862745, size: 1 },\r\n // { x: 110.719424460432, y: 3.80392156862745, size: 1 },\r\n // { x: 111.36690647482, y: 3.76470588235294, size: 1 },\r\n // { x: 112.014388489209, y: 3.6078431372549, size: 1 },\r\n // { x: 112.661870503597, y: 3.80392156862745, size: 1 },\r\n // { x: 113.309352517986, y: 3.6078431372549, size: 1 },\r\n // { x: 113.956834532374, y: 3.68627450980392, size: 1 },\r\n // { x: 114.604316546763, y: 3.84313725490196, size: 1 },\r\n // { x: 115.251798561151, y: 3.56862745098039, size: 1 },\r\n // { x: 117.194244604317, y: 3.09803921568627, size: 1 },\r\n // { x: 117.841726618705, y: 3.41176470588235, size: 1 },\r\n // { x: 119.136690647482, y: 3.52941176470588, size: 1 },\r\n // { x: 119.784172661871, y: 3.84313725490196, size: 1 },\r\n // { x: 121.079136690647, y: 3.80392156862745, size: 1 },\r\n // { x: 123.021582733813, y: 3.72549019607843, size: 1 },\r\n // { x: 126.906474820144, y: 3.68627450980392, size: 1 },\r\n // { x: 130.143884892086, y: 3.80392156862745, size: 1 },\r\n // { x: 134.028776978417, y: 3.64705882352941, size: 1 },\r\n // { x: 134.676258992806, y: 3.52941176470588, size: 1 },\r\n // { x: 138.561151079137, y: 3.17647058823529, size: 1 },\r\n // { x: 139.208633093525, y: 3.09803921568627, size: 1 },\r\n // { x: 139.856115107914, y: 3.49019607843137, size: 1 },\r\n // { x: 143.093525179856, y: 3.45098039215686, size: 1 },\r\n // { x: 147.625899280576, y: 3.49019607843137, size: 1 },\r\n // { x: 148.273381294964, y: 3.6078431372549, size: 1 },\r\n // { x: 148.920863309353, y: 3.64705882352941, size: 1 },\r\n // { x: 151.510791366906, y: 3.41176470588235, size: 1 },\r\n // { x: 152.805755395683, y: 3.76470588235294, size: 1 },\r\n // { x: 154.10071942446, y: 3.64705882352941, size: 1 },\r\n // { x: 156.690647482014, y: 3.84313725490196, size: 1 },\r\n // { x: 157.985611510791, y: 3.68627450980392, size: 1 },\r\n // { x: 159.280575539568, y: 3.49019607843137, size: 1 },\r\n // { x: 159.928057553957, y: 3.45098039215686, size: 1 },\r\n // { x: 160.575539568345, y: 3.17647058823529, size: 1 },\r\n // { x: 161.870503597122, y: 3.64705882352941, size: 1 },\r\n // { x: 167.05035971223, y: 3.52941176470588, size: 1 },\r\n // { x: 168.345323741007, y: 3.56862745098039, size: 1 },\r\n // { x: 169.640287769784, y: 3.52941176470588, size: 1 },\r\n // { x: 171.58273381295, y: 3.6078431372549, size: 1 },\r\n // { x: 174.172661870504, y: 3.92156862745098, size: 1 },\r\n // { x: 176.762589928058, y: 3.6078431372549, size: 1 },\r\n // { x: 178.057553956835, y: 3.68627450980392, size: 1 },\r\n // { x: 179.352517985612, y: 3.72549019607843, size: 1 },\r\n // { x: 181.294964028777, y: 3.41176470588235, size: 1 },\r\n // { x: 183.884892086331, y: 3.80392156862745, size: 1 },\r\n // { x: 185.179856115108, y: 3.88235294117647, size: 1 },\r\n // { x: 189.064748201439, y: 3.72549019607843, size: 1 },\r\n // { x: 190.359712230216, y: 3.76470588235294, size: 1 },\r\n // { x: 194.244604316547, y: 3.76470588235294, size: 1 },\r\n // { x: 195.539568345324, y: 3.52941176470588, size: 1 },\r\n // { x: 196.187050359712, y: 3.56862745098039, size: 1 },\r\n // { x: 196.834532374101, y: 3.52941176470588, size: 1 },\r\n // { x: 197.482014388489, y: 3.72549019607843, size: 1 },\r\n // { x: 198.129496402878, y: 3.76470588235294, size: 1 },\r\n // { x: 198.776978417266, y: 3.72549019607843, size: 1 },\r\n // { x: 200.719424460432, y: 3.80392156862745, size: 1 },\r\n // { x: 202.014388489209, y: 3.64705882352941, size: 1 },\r\n // { x: 202.661870503597, y: 3.56862745098039, size: 1 },\r\n // { x: 203.309352517986, y: 3.45098039215686, size: 1 },\r\n // { x: 204.604316546763, y: 3.84313725490196, size: 1 },\r\n // { x: 205.89928057554, y: 3.76470588235294, size: 1 },\r\n // { x: 206.546762589928, y: 3.84313725490196, size: 1 },\r\n // { x: 207.194244604317, y: 3.68627450980392, size: 1 },\r\n // { x: 207.841726618705, y: 3.68627450980392, size: 1 },\r\n // { x: 209.784172661871, y: 3.64705882352941, size: 1 },\r\n // { x: 211.079136690647, y: 3.80392156862745, size: 1 },\r\n // { x: 211.726618705036, y: 3.64705882352941, size: 1 },\r\n // { x: 212.374100719424, y: 3.92156862745098, size: 1 },\r\n // { x: 213.021582733813, y: 3.88235294117647, size: 1 },\r\n // { x: 214.964028776978, y: 3.88235294117647, size: 1 },\r\n // { x: 216.906474820144, y: 3.84313725490196, size: 1 },\r\n // { x: 218.848920863309, y: 3.84313725490196, size: 1 },\r\n // { x: 221.438848920863, y: 3.84313725490196, size: 1 },\r\n // { x: 223.381294964029, y: 3.88235294117647, size: 1 },\r\n // { x: 224.028776978417, y: 3.6078431372549, size: 1 },\r\n // { x: 224.676258992806, y: 3.25490196078431, size: 1 },\r\n // { x: 225.323741007194, y: 3.05882352941176, size: 1 },\r\n // { x: 227.913669064748, y: 3.88235294117647, size: 1 },\r\n // { x: 232.446043165468, y: 3.56862745098039, size: 1 },\r\n // { x: 233.093525179856, y: 3.92156862745098, size: 1 },\r\n // { x: 235.035971223022, y: 3.56862745098039, size: 1 },\r\n // { x: 236.330935251799, y: 3.80392156862745, size: 1 },\r\n // { x: 237.625899280576, y: 3.88235294117647, size: 1 },\r\n // { x: 240.863309352518, y: 3.92156862745098, size: 1 },\r\n // { x: 242.158273381295, y: 3.64705882352941, size: 1 },\r\n // { x: 242.805755395683, y: 3.76470588235294, size: 1 },\r\n // { x: 244.10071942446, y: 3.76470588235294, size: 1 },\r\n // { x: 247.338129496403, y: 3.76470588235294, size: 1 },\r\n // { x: 249.280575539568, y: 3.49019607843137, size: 1 },\r\n // { x: 250.575539568345, y: 3.88235294117647, size: 1 },\r\n // { x: 251.223021582734, y: 4, size: 1 },\r\n // { x: 251.870503597122, y: 3.56862745098039, size: 1 },\r\n // { x: 253.812949640288, y: 3.68627450980392, size: 1 },\r\n // { x: 254.460431654676, y: 3.72549019607843, size: 1 },\r\n // { x: 256.402877697842, y: 3.6078431372549, size: 1 },\r\n // { x: 257.05035971223, y: 3.88235294117647, size: 1 },\r\n // { x: 260.935251798561, y: 3.45098039215686, size: 1 },\r\n // { x: 261.58273381295, y: 3.68627450980392, size: 1 },\r\n // { x: 263.525179856115, y: 3.68627450980392, size: 1 },\r\n // { x: 264.820143884892, y: 3.72549019607843, size: 1 },\r\n // { x: 266.762589928058, y: 3.52941176470588, size: 1 },\r\n // { x: 267.410071942446, y: 3.64705882352941, size: 1 },\r\n // { x: 268.057553956835, y: 3.49019607843137, size: 1 },\r\n // { x: 270.647482014389, y: 3.37254901960784, size: 1 },\r\n // { x: 271.294964028777, y: 3.6078431372549, size: 1 },\r\n // { x: 272.589928057554, y: 3.92156862745098, size: 1 },\r\n // { x: 273.237410071942, y: 3.68627450980392, size: 1 },\r\n // { x: 273.884892086331, y: 3.45098039215686, size: 1 },\r\n // { x: 275.179856115108, y: 3.92156862745098, size: 1 },\r\n // { x: 276.474820143885, y: 3.45098039215686, size: 1 },\r\n // { x: 278.41726618705, y: 3.68627450980392, size: 1 },\r\n // { x: 284.892086330935, y: 3.76470588235294, size: 1 },\r\n // { x: 285.539568345324, y: 3.6078431372549, size: 1 },\r\n // { x: 286.834532374101, y: 3.80392156862745, size: 1 },\r\n // { x: 289.424460431655, y: 3.76470588235294, size: 1 },\r\n // { x: 290.719424460432, y: 3.41176470588235, size: 1 },\r\n // { x: 291.36690647482, y: 3.33333333333333, size: 1 },\r\n // { x: 293.309352517986, y: 3.49019607843137, size: 1 },\r\n // { x: 294.604316546763, y: 3.49019607843137, size: 1 },\r\n // { x: 295.89928057554, y: 3.6078431372549, size: 1 },\r\n // { x: 299.136690647482, y: 3.64705882352941, size: 1 },\r\n // { x: 301.726618705036, y: 3.76470588235294, size: 1 },\r\n // { x: 302.374100719424, y: 3.84313725490196, size: 1 },\r\n // { x: 303.021582733813, y: 3.88235294117647, size: 1 },\r\n // { x: 303.669064748201, y: 3.52941176470588, size: 1 },\r\n // { x: 305.611510791367, y: 3.68627450980392, size: 1 },\r\n // { x: 308.848920863309, y: 3.56862745098039, size: 1 },\r\n // { x: 309.496402877698, y: 3.84313725490196, size: 1 },\r\n // { x: 311.438848920863, y: 3.45098039215686, size: 1 },\r\n // { x: 312.73381294964, y: 2.94117647058824, size: 1 },\r\n // { x: 315.323741007194, y: 3.72549019607843, size: 1 },\r\n // { x: 315.971223021583, y: 3.6078431372549, size: 1 },\r\n // { x: 317.913669064748, y: 3.56862745098039, size: 1 },\r\n // { x: 319.208633093525, y: 3.80392156862745, size: 1 },\r\n // { x: 322.446043165468, y: 3.56862745098039, size: 1 },\r\n // { x: 325.68345323741, y: 3.6078431372549, size: 1 },\r\n // { x: 326.330935251799, y: 3.92156862745098, size: 1 },\r\n // { x: 327.625899280576, y: 3.80392156862745, size: 1 },\r\n // { x: 328.920863309353, y: 3.72549019607843, size: 1 },\r\n // { x: 330.215827338129, y: 3.72549019607843, size: 1 },\r\n // { x: 332.805755395683, y: 3.41176470588235, size: 1 },\r\n // { x: 334.10071942446, y: 2.90196078431373, size: 1 },\r\n // { x: 335.395683453237, y: 3.01960784313725, size: 1 },\r\n // { x: 336.043165467626, y: 3.25490196078431, size: 1 },\r\n // { x: 336.690647482014, y: 3.33333333333333, size: 1 },\r\n // { x: 338.63309352518, y: 3.52941176470588, size: 1 },\r\n // { x: 339.928057553957, y: 3.37254901960784, size: 1 },\r\n // { x: 340.575539568345, y: 3.6078431372549, size: 1 },\r\n // { x: 344.460431654676, y: 3.41176470588235, size: 1 },\r\n // { x: 345.107913669065, y: 3.25490196078431, size: 1 },\r\n // { x: 345.755395683453, y: 3.45098039215686, size: 1 },\r\n // { x: 347.697841726619, y: 3.37254901960784, size: 1 },\r\n // { x: 348.992805755396, y: 3.45098039215686, size: 1 },\r\n // { x: 351.58273381295, y: 3.41176470588235, size: 1 },\r\n // { x: 352.877697841727, y: 3.52941176470588, size: 1 },\r\n // { x: 353.525179856115, y: 3.41176470588235, size: 1 },\r\n // { x: 354.172661870504, y: 3.33333333333333, size: 1 },\r\n // { x: 354.820143884892, y: 3.29411764705882, size: 1 },\r\n // { x: 355.467625899281, y: 3.05882352941176, size: 1 },\r\n // { x: 356.115107913669, y: 2.86274509803922, size: 1 },\r\n // { x: 356.762589928058, y: 2.98039215686275, size: 1 },\r\n // { x: 357.410071942446, y: 3.17647058823529, size: 1 },\r\n // { x: 0.648648648648649, y: 3.49019607843137, size: 1 },\r\n // { x: 1.94594594594595, y: 3.76470588235294, size: 1 },\r\n // { x: 2.59459459459459, y: 3.84313725490196, size: 1 },\r\n // { x: 3.89189189189189, y: 3.80392156862745, size: 1 },\r\n // { x: 4.54054054054054, y: 3.56862745098039, size: 1 },\r\n // { x: 5.83783783783784, y: 3.72549019607843, size: 1 },\r\n // { x: 6.48648648648649, y: 3.68627450980392, size: 1 },\r\n // { x: 7.13513513513514, y: 3.68627450980392, size: 1 },\r\n // { x: 7.78378378378378, y: 3.72549019607843, size: 1 },\r\n // { x: 8.43243243243243, y: 3.49019607843137, size: 1 },\r\n // { x: 9.08108108108108, y: 3.68627450980392, size: 1 },\r\n // { x: 9.72972972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 10.3783783783784, y: 3.56862745098039, size: 1 },\r\n // { x: 11.027027027027, y: 3.68627450980392, size: 1 },\r\n // { x: 11.6756756756757, y: 3.68627450980392, size: 1 },\r\n // { x: 12.3243243243243, y: 3.56862745098039, size: 1 },\r\n // { x: 13.6216216216216, y: 3.72549019607843, size: 1 },\r\n // { x: 14.2702702702703, y: 3.64705882352941, size: 1 },\r\n // { x: 14.9189189189189, y: 3.68627450980392, size: 1 },\r\n // { x: 15.5675675675676, y: 3.45098039215686, size: 1 },\r\n // { x: 16.2162162162162, y: 3.37254901960784, size: 1 },\r\n // { x: 16.8648648648649, y: 3.41176470588235, size: 1 },\r\n // { x: 17.5135135135135, y: 2.82352941176471, size: 1 },\r\n // { x: 18.1621621621622, y: 2.98039215686275, size: 1 },\r\n // { x: 18.8108108108108, y: 3.01960784313725, size: 1 },\r\n // { x: 19.4594594594595, y: 3.37254901960784, size: 1 },\r\n // { x: 20.7567567567568, y: 3.80392156862745, size: 1 },\r\n // { x: 21.4054054054054, y: 3.80392156862745, size: 1 },\r\n // { x: 23.3513513513514, y: 3.49019607843137, size: 1 },\r\n // { x: 24.6486486486486, y: 3.6078431372549, size: 1 },\r\n // { x: 25.2972972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 25.9459459459459, y: 3.76470588235294, size: 1 },\r\n // { x: 26.5945945945946, y: 3.76470588235294, size: 1 },\r\n // { x: 27.8918918918919, y: 3.68627450980392, size: 1 },\r\n // { x: 28.5405405405405, y: 3.56862745098039, size: 1 },\r\n // { x: 29.1891891891892, y: 3.49019607843137, size: 1 },\r\n // { x: 30.4864864864865, y: 3.41176470588235, size: 1 },\r\n // { x: 31.1351351351351, y: 3.64705882352941, size: 1 },\r\n // { x: 31.7837837837838, y: 3.52941176470588, size: 1 },\r\n // { x: 33.0810810810811, y: 3.56862745098039, size: 1 },\r\n // { x: 33.7297297297297, y: 3.72549019607843, size: 1 },\r\n // { x: 34.3783783783784, y: 3.64705882352941, size: 1 },\r\n // { x: 35.6756756756757, y: 3.64705882352941, size: 1 },\r\n // { x: 36.3243243243243, y: 3.76470588235294, size: 1 },\r\n // { x: 36.972972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 37.6216216216216, y: 3.33333333333333, size: 1 },\r\n // { x: 38.2702702702703, y: 3.45098039215686, size: 1 },\r\n // { x: 38.9189189189189, y: 3.29411764705882, size: 1 },\r\n // { x: 39.5675675675676, y: 3.17647058823529, size: 1 },\r\n // { x: 40.2162162162162, y: 3.33333333333333, size: 1 },\r\n // { x: 40.8648648648649, y: 2.82352941176471, size: 1 },\r\n // { x: 41.5135135135135, y: 3.52941176470588, size: 1 },\r\n // { x: 42.1621621621622, y: 3.64705882352941, size: 1 },\r\n // { x: 42.8108108108108, y: 3.80392156862745, size: 1 },\r\n // { x: 43.4594594594595, y: 3.76470588235294, size: 1 },\r\n // { x: 44.7567567567568, y: 3.64705882352941, size: 1 },\r\n // { x: 45.4054054054054, y: 3.68627450980392, size: 1 },\r\n // { x: 46.0540540540541, y: 3.72549019607843, size: 1 },\r\n // { x: 46.7027027027027, y: 3.80392156862745, size: 1 },\r\n // { x: 47.3513513513514, y: 3.68627450980392, size: 1 },\r\n // { x: 48, y: 3.64705882352941, size: 1 },\r\n // { x: 48.6486486486486, y: 3.84313725490196, size: 1 },\r\n // { x: 49.2972972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 49.9459459459459, y: 3.76470588235294, size: 1 },\r\n // { x: 50.5945945945946, y: 3.64705882352941, size: 1 },\r\n // { x: 51.8918918918919, y: 3.6078431372549, size: 1 },\r\n // { x: 53.1891891891892, y: 3.56862745098039, size: 1 },\r\n // { x: 53.8378378378378, y: 3.49019607843137, size: 1 },\r\n // { x: 54.4864864864865, y: 3.64705882352941, size: 1 },\r\n // { x: 55.1351351351351, y: 3.72549019607843, size: 1 },\r\n // { x: 56.4324324324324, y: 3.56862745098039, size: 1 },\r\n // { x: 57.0810810810811, y: 3.68627450980392, size: 1 },\r\n // { x: 57.7297297297297, y: 3.68627450980392, size: 1 },\r\n // { x: 58.3783783783784, y: 3.52941176470588, size: 1 },\r\n // { x: 59.027027027027, y: 3.45098039215686, size: 1 },\r\n // { x: 59.6756756756757, y: 3.29411764705882, size: 1 },\r\n // { x: 60.3243243243243, y: 3.33333333333333, size: 1 },\r\n // { x: 60.972972972973, y: 3.13725490196078, size: 1 },\r\n // { x: 61.6216216216216, y: 3.05882352941176, size: 1 },\r\n // { x: 62.2702702702703, y: 3.13725490196078, size: 1 },\r\n // { x: 63.5675675675676, y: 3.64705882352941, size: 1 },\r\n // { x: 64.2162162162162, y: 3.45098039215686, size: 1 },\r\n // { x: 64.8648648648649, y: 3.80392156862745, size: 1 },\r\n // { x: 65.5135135135135, y: 3.6078431372549, size: 1 },\r\n // { x: 66.1621621621622, y: 3.68627450980392, size: 1 },\r\n // { x: 66.8108108108108, y: 3.41176470588235, size: 1 },\r\n // { x: 68.7567567567568, y: 3.6078431372549, size: 1 },\r\n // { x: 69.4054054054054, y: 3.49019607843137, size: 1 },\r\n // { x: 70.054054054054, y: 4.03921568627451, size: 1 },\r\n // { x: 70.7027027027027, y: 3.84313725490196, size: 1 },\r\n // { x: 71.3513513513514, y: 3.49019607843137, size: 1 },\r\n // { x: 72, y: 3.80392156862745, size: 1 },\r\n // { x: 72.6486486486486, y: 3.52941176470588, size: 1 },\r\n // { x: 73.2972972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 73.945945945946, y: 3.37254901960784, size: 1 },\r\n // { x: 75.2432432432432, y: 3.56862745098039, size: 1 },\r\n // { x: 75.8918918918919, y: 3.49019607843137, size: 1 },\r\n // { x: 76.5405405405405, y: 3.6078431372549, size: 1 },\r\n // { x: 78.4864864864865, y: 3.41176470588235, size: 1 },\r\n // { x: 79.1351351351351, y: 3.52941176470588, size: 1 },\r\n // { x: 79.7837837837838, y: 3.56862745098039, size: 1 },\r\n // { x: 80.4324324324324, y: 3.29411764705882, size: 1 },\r\n // { x: 81.0810810810811, y: 3.13725490196078, size: 1 },\r\n // { x: 81.7297297297297, y: 3.56862745098039, size: 1 },\r\n // { x: 82.3783783783784, y: 3.09803921568627, size: 1 },\r\n // { x: 83.027027027027, y: 2.98039215686275, size: 1 },\r\n // { x: 83.6756756756757, y: 3.88235294117647, size: 1 },\r\n // { x: 84.3243243243243, y: 3.6078431372549, size: 1 },\r\n // { x: 84.972972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 85.6216216216216, y: 3.68627450980392, size: 1 },\r\n // { x: 86.9189189189189, y: 3.72549019607843, size: 1 },\r\n // { x: 87.5675675675676, y: 3.80392156862745, size: 1 },\r\n // { x: 88.2162162162162, y: 3.45098039215686, size: 1 },\r\n // { x: 88.8648648648649, y: 3.49019607843137, size: 1 },\r\n // { x: 89.5135135135135, y: 3.41176470588235, size: 1 },\r\n // { x: 90.1621621621622, y: 3.68627450980392, size: 1 },\r\n // { x: 90.8108108108108, y: 3.72549019607843, size: 1 },\r\n // { x: 91.4594594594595, y: 3.49019607843137, size: 1 },\r\n // { x: 92.1081081081081, y: 3.68627450980392, size: 1 },\r\n // { x: 92.7567567567568, y: 3.72549019607843, size: 1 },\r\n // { x: 93.4054054054054, y: 3.84313725490196, size: 1 },\r\n // { x: 94.054054054054, y: 3.80392156862745, size: 1 },\r\n // { x: 94.7027027027027, y: 3.76470588235294, size: 1 },\r\n // { x: 95.3513513513514, y: 3.88235294117647, size: 1 },\r\n // { x: 96, y: 3.49019607843137, size: 1 },\r\n // { x: 96.6486486486486, y: 3.45098039215686, size: 1 },\r\n // { x: 97.2972972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 97.945945945946, y: 3.80392156862745, size: 1 },\r\n // { x: 98.5945945945946, y: 3.72549019607843, size: 1 },\r\n // { x: 99.2432432432432, y: 4, size: 1 },\r\n // { x: 99.8918918918919, y: 3.68627450980392, size: 1 },\r\n // { x: 100.540540540541, y: 3.64705882352941, size: 1 },\r\n // { x: 101.189189189189, y: 3.68627450980392, size: 1 },\r\n // { x: 101.837837837838, y: 3.68627450980392, size: 1 },\r\n // { x: 102.486486486486, y: 3.41176470588235, size: 1 },\r\n // { x: 103.135135135135, y: 3.56862745098039, size: 1 },\r\n // { x: 103.783783783784, y: 3.68627450980392, size: 1 },\r\n // { x: 104.432432432432, y: 3.68627450980392, size: 1 },\r\n // { x: 105.081081081081, y: 3.52941176470588, size: 1 },\r\n // { x: 105.72972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 106.378378378378, y: 3.76470588235294, size: 1 },\r\n // { x: 107.027027027027, y: 3.45098039215686, size: 1 },\r\n // { x: 107.675675675676, y: 3.72549019607843, size: 1 },\r\n // { x: 108.972972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 109.621621621622, y: 3.72549019607843, size: 1 },\r\n // { x: 110.27027027027, y: 3.56862745098039, size: 1 },\r\n // { x: 110.918918918919, y: 3.6078431372549, size: 1 },\r\n // { x: 111.567567567568, y: 3.45098039215686, size: 1 },\r\n // { x: 112.864864864865, y: 3.41176470588235, size: 1 },\r\n // { x: 113.513513513514, y: 3.64705882352941, size: 1 },\r\n // { x: 114.162162162162, y: 3.45098039215686, size: 1 },\r\n // { x: 114.810810810811, y: 3.92156862745098, size: 1 },\r\n // { x: 115.459459459459, y: 3.41176470588235, size: 1 },\r\n // { x: 116.108108108108, y: 3.56862745098039, size: 1 },\r\n // { x: 116.756756756757, y: 3.56862745098039, size: 1 },\r\n // { x: 118.054054054054, y: 3.56862745098039, size: 1 },\r\n // { x: 119.351351351351, y: 3.56862745098039, size: 1 },\r\n // { x: 120, y: 3.6078431372549, size: 1 },\r\n // { x: 120.648648648649, y: 3.49019607843137, size: 1 },\r\n // { x: 121.297297297297, y: 3.52941176470588, size: 1 },\r\n // { x: 121.945945945946, y: 3.52941176470588, size: 1 },\r\n // { x: 122.594594594595, y: 3.45098039215686, size: 1 },\r\n // { x: 123.243243243243, y: 3.6078431372549, size: 1 },\r\n // { x: 124.540540540541, y: 3.6078431372549, size: 1 },\r\n // { x: 125.189189189189, y: 3.37254901960784, size: 1 },\r\n // { x: 125.837837837838, y: 3.6078431372549, size: 1 },\r\n // { x: 126.486486486486, y: 3.45098039215686, size: 1 },\r\n // { x: 127.135135135135, y: 3.80392156862745, size: 1 },\r\n // { x: 127.783783783784, y: 3.6078431372549, size: 1 },\r\n // { x: 128.432432432432, y: 3.45098039215686, size: 1 },\r\n // { x: 129.081081081081, y: 3.72549019607843, size: 1 },\r\n // { x: 129.72972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 130.378378378378, y: 3.68627450980392, size: 1 },\r\n // { x: 131.027027027027, y: 3.84313725490196, size: 1 },\r\n // { x: 131.675675675676, y: 3.56862745098039, size: 1 },\r\n // { x: 132.324324324324, y: 3.56862745098039, size: 1 },\r\n // { x: 132.972972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 133.621621621622, y: 3.6078431372549, size: 1 },\r\n // { x: 134.918918918919, y: 3.56862745098039, size: 1 },\r\n // { x: 135.567567567568, y: 3.96078431372549, size: 1 },\r\n // { x: 136.216216216216, y: 3.6078431372549, size: 1 },\r\n // { x: 137.513513513514, y: 3.68627450980392, size: 1 },\r\n // { x: 138.162162162162, y: 3.68627450980392, size: 1 },\r\n // { x: 138.810810810811, y: 3.49019607843137, size: 1 },\r\n // { x: 139.459459459459, y: 3.64705882352941, size: 1 },\r\n // { x: 141.405405405405, y: 3.56862745098039, size: 1 },\r\n // { x: 142.054054054054, y: 3.76470588235294, size: 1 },\r\n // { x: 143.351351351351, y: 3.80392156862745, size: 1 },\r\n // { x: 144, y: 3.56862745098039, size: 1 },\r\n // { x: 144.648648648649, y: 3.64705882352941, size: 1 },\r\n // { x: 145.297297297297, y: 3.56862745098039, size: 1 },\r\n // { x: 146.594594594595, y: 3.29411764705882, size: 1 },\r\n // { x: 147.243243243243, y: 3.25490196078431, size: 1 },\r\n // { x: 147.891891891892, y: 3.45098039215686, size: 1 },\r\n // { x: 148.540540540541, y: 2.98039215686275, size: 1 },\r\n // { x: 149.189189189189, y: 3.01960784313725, size: 1 },\r\n // { x: 149.837837837838, y: 3.52941176470588, size: 1 },\r\n // { x: 150.486486486486, y: 3.72549019607843, size: 1 },\r\n // { x: 151.135135135135, y: 3.6078431372549, size: 1 },\r\n // { x: 151.783783783784, y: 3.68627450980392, size: 1 },\r\n // { x: 152.432432432432, y: 3.68627450980392, size: 1 },\r\n // { x: 153.081081081081, y: 3.72549019607843, size: 1 },\r\n // { x: 153.72972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 154.378378378378, y: 3.52941176470588, size: 1 },\r\n // { x: 155.027027027027, y: 4.07843137254902, size: 1 },\r\n // { x: 155.675675675676, y: 3.49019607843137, size: 1 },\r\n // { x: 156.324324324324, y: 3.68627450980392, size: 1 },\r\n // { x: 156.972972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 157.621621621622, y: 3.6078431372549, size: 1 },\r\n // { x: 158.27027027027, y: 3.76470588235294, size: 1 },\r\n // { x: 159.567567567568, y: 3.41176470588235, size: 1 },\r\n // { x: 161.513513513514, y: 3.64705882352941, size: 1 },\r\n // { x: 162.162162162162, y: 3.56862745098039, size: 1 },\r\n // { x: 162.810810810811, y: 3.25490196078431, size: 1 },\r\n // { x: 163.459459459459, y: 3.84313725490196, size: 1 },\r\n // { x: 164.108108108108, y: 3.6078431372549, size: 1 },\r\n // { x: 164.756756756757, y: 3.56862745098039, size: 1 },\r\n // { x: 167.351351351351, y: 3.37254901960784, size: 1 },\r\n // { x: 168, y: 3.17647058823529, size: 1 },\r\n // { x: 168.648648648649, y: 3.13725490196078, size: 1 },\r\n // { x: 169.297297297297, y: 3.29411764705882, size: 1 },\r\n // { x: 169.945945945946, y: 3.09803921568627, size: 1 },\r\n // { x: 170.594594594595, y: 3.09803921568627, size: 1 },\r\n // { x: 171.243243243243, y: 3.56862745098039, size: 1 },\r\n // { x: 172.540540540541, y: 3.6078431372549, size: 1 },\r\n // { x: 173.189189189189, y: 3.72549019607843, size: 1 },\r\n // { x: 175.135135135135, y: 3.72549019607843, size: 1 },\r\n // { x: 175.783783783784, y: 3.45098039215686, size: 1 },\r\n // { x: 176.432432432432, y: 3.52941176470588, size: 1 },\r\n // { x: 177.081081081081, y: 3.76470588235294, size: 1 },\r\n // { x: 177.72972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 178.378378378378, y: 3.64705882352941, size: 1 },\r\n // { x: 179.027027027027, y: 3.88235294117647, size: 1 },\r\n // { x: 179.675675675676, y: 3.76470588235294, size: 1 },\r\n // { x: 180.324324324324, y: 3.52941176470588, size: 1 },\r\n // { x: 180.972972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 182.27027027027, y: 3.64705882352941, size: 1 },\r\n // { x: 182.918918918919, y: 3.56862745098039, size: 1 },\r\n // { x: 183.567567567568, y: 3.64705882352941, size: 1 },\r\n // { x: 184.216216216216, y: 3.56862745098039, size: 1 },\r\n // { x: 184.864864864865, y: 4, size: 1 },\r\n // { x: 186.162162162162, y: 3.6078431372549, size: 1 },\r\n // { x: 186.810810810811, y: 3.6078431372549, size: 1 },\r\n // { x: 188.108108108108, y: 3.68627450980392, size: 1 },\r\n // { x: 188.756756756757, y: 3.45098039215686, size: 1 },\r\n // { x: 189.405405405405, y: 3.52941176470588, size: 1 },\r\n // { x: 190.054054054054, y: 3.05882352941176, size: 1 },\r\n // { x: 190.702702702703, y: 2.7843137254902, size: 1 },\r\n // { x: 191.351351351351, y: 3.01960784313725, size: 1 },\r\n // { x: 192, y: 3.37254901960784, size: 1 },\r\n // { x: 192.648648648649, y: 3.37254901960784, size: 1 },\r\n // { x: 193.297297297297, y: 3.80392156862745, size: 1 },\r\n // { x: 193.945945945946, y: 3.41176470588235, size: 1 },\r\n // { x: 194.594594594595, y: 3.6078431372549, size: 1 },\r\n // { x: 195.243243243243, y: 3.76470588235294, size: 1 },\r\n // { x: 195.891891891892, y: 3.6078431372549, size: 1 },\r\n // { x: 196.540540540541, y: 3.45098039215686, size: 1 },\r\n // { x: 197.189189189189, y: 3.52941176470588, size: 1 },\r\n // { x: 197.837837837838, y: 3.49019607843137, size: 1 },\r\n // { x: 200.432432432432, y: 3.56862745098039, size: 1 },\r\n // { x: 201.081081081081, y: 3.49019607843137, size: 1 },\r\n // { x: 201.72972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 202.378378378378, y: 3.52941176470588, size: 1 },\r\n // { x: 203.027027027027, y: 3.64705882352941, size: 1 },\r\n // { x: 203.675675675676, y: 3.6078431372549, size: 1 },\r\n // { x: 204.972972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 205.621621621622, y: 3.64705882352941, size: 1 },\r\n // { x: 206.27027027027, y: 3.68627450980392, size: 1 },\r\n // { x: 206.918918918919, y: 3.68627450980392, size: 1 },\r\n // { x: 207.567567567568, y: 3.52941176470588, size: 1 },\r\n // { x: 208.864864864865, y: 3.76470588235294, size: 1 },\r\n // { x: 210.162162162162, y: 3.37254901960784, size: 1 },\r\n // { x: 210.810810810811, y: 3.37254901960784, size: 1 },\r\n // { x: 211.459459459459, y: 3.6078431372549, size: 1 },\r\n // { x: 212.756756756757, y: 3.49019607843137, size: 1 },\r\n // { x: 213.405405405405, y: 2.98039215686275, size: 1 },\r\n // { x: 214.054054054054, y: 3.17647058823529, size: 1 },\r\n // { x: 214.702702702703, y: 3.41176470588235, size: 1 },\r\n // { x: 216, y: 3.80392156862745, size: 1 },\r\n // { x: 216.648648648649, y: 3.6078431372549, size: 1 },\r\n // { x: 217.297297297297, y: 3.6078431372549, size: 1 },\r\n // { x: 218.594594594595, y: 3.45098039215686, size: 1 },\r\n // { x: 219.243243243243, y: 3.33333333333333, size: 1 },\r\n // { x: 219.891891891892, y: 3.56862745098039, size: 1 },\r\n // { x: 220.540540540541, y: 3.80392156862745, size: 1 },\r\n // { x: 221.189189189189, y: 3.52941176470588, size: 1 },\r\n // { x: 221.837837837838, y: 3.52941176470588, size: 1 },\r\n // { x: 222.486486486486, y: 3.56862745098039, size: 1 },\r\n // { x: 223.135135135135, y: 3.33333333333333, size: 1 },\r\n // { x: 224.432432432432, y: 3.52941176470588, size: 1 },\r\n // { x: 225.081081081081, y: 3.6078431372549, size: 1 },\r\n // { x: 225.72972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 226.378378378378, y: 3.64705882352941, size: 1 },\r\n // { x: 227.027027027027, y: 3.52941176470588, size: 1 },\r\n // { x: 227.675675675676, y: 3.84313725490196, size: 1 },\r\n // { x: 228.324324324324, y: 3.52941176470588, size: 1 },\r\n // { x: 229.621621621622, y: 3.56862745098039, size: 1 },\r\n // { x: 230.27027027027, y: 3.64705882352941, size: 1 },\r\n // { x: 230.918918918919, y: 3.72549019607843, size: 1 },\r\n // { x: 231.567567567568, y: 3.49019607843137, size: 1 },\r\n // { x: 232.216216216216, y: 3.56862745098039, size: 1 },\r\n // { x: 232.864864864865, y: 3.68627450980392, size: 1 },\r\n // { x: 233.513513513514, y: 3.33333333333333, size: 1 },\r\n // { x: 234.162162162162, y: 3.09803921568627, size: 1 },\r\n // { x: 234.810810810811, y: 3.64705882352941, size: 1 },\r\n // { x: 236.108108108108, y: 3.80392156862745, size: 1 },\r\n // { x: 236.756756756757, y: 3.56862745098039, size: 1 },\r\n // { x: 237.405405405405, y: 3.72549019607843, size: 1 },\r\n // { x: 238.054054054054, y: 3.92156862745098, size: 1 },\r\n // { x: 238.702702702703, y: 3.6078431372549, size: 1 },\r\n // { x: 240, y: 3.64705882352941, size: 1 },\r\n // { x: 240.648648648649, y: 3.72549019607843, size: 1 },\r\n // { x: 241.297297297297, y: 3.56862745098039, size: 1 },\r\n // { x: 241.945945945946, y: 3.56862745098039, size: 1 },\r\n // { x: 242.594594594595, y: 3.68627450980392, size: 1 },\r\n // { x: 243.891891891892, y: 3.49019607843137, size: 1 },\r\n // { x: 244.540540540541, y: 3.6078431372549, size: 1 },\r\n // { x: 245.189189189189, y: 3.68627450980392, size: 1 },\r\n // { x: 245.837837837838, y: 3.37254901960784, size: 1 },\r\n // { x: 246.486486486486, y: 3.49019607843137, size: 1 },\r\n // { x: 247.135135135135, y: 3.64705882352941, size: 1 },\r\n // { x: 247.783783783784, y: 3.72549019607843, size: 1 },\r\n // { x: 248.432432432432, y: 3.45098039215686, size: 1 },\r\n // { x: 249.081081081081, y: 3.52941176470588, size: 1 },\r\n // { x: 249.72972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 250.378378378378, y: 3.33333333333333, size: 1 },\r\n // { x: 251.027027027027, y: 3.84313725490196, size: 1 },\r\n // { x: 251.675675675676, y: 3.45098039215686, size: 1 },\r\n // { x: 252.324324324324, y: 3.49019607843137, size: 1 },\r\n // { x: 253.621621621622, y: 3.25490196078431, size: 1 },\r\n // { x: 254.27027027027, y: 3.52941176470588, size: 1 },\r\n // { x: 254.918918918919, y: 3.41176470588235, size: 1 },\r\n // { x: 255.567567567568, y: 3.33333333333333, size: 1 },\r\n // { x: 256.216216216216, y: 3.13725490196078, size: 1 },\r\n // { x: 256.864864864865, y: 3.05882352941176, size: 1 },\r\n // { x: 257.513513513513, y: 3.13725490196078, size: 1 },\r\n // { x: 258.162162162162, y: 3.68627450980392, size: 1 },\r\n // { x: 259.459459459459, y: 3.6078431372549, size: 1 },\r\n // { x: 260.108108108108, y: 3.6078431372549, size: 1 },\r\n // { x: 260.756756756757, y: 3.64705882352941, size: 1 },\r\n // { x: 262.054054054054, y: 3.56862745098039, size: 1 },\r\n // { x: 262.702702702703, y: 3.6078431372549, size: 1 },\r\n // { x: 263.351351351351, y: 3.84313725490196, size: 1 },\r\n // { x: 264.648648648649, y: 3.56862745098039, size: 1 },\r\n // { x: 265.297297297297, y: 3.64705882352941, size: 1 },\r\n // { x: 265.945945945946, y: 3.64705882352941, size: 1 },\r\n // { x: 266.594594594595, y: 3.76470588235294, size: 1 },\r\n // { x: 267.243243243243, y: 3.52941176470588, size: 1 },\r\n // { x: 268.540540540541, y: 3.88235294117647, size: 1 },\r\n // { x: 269.189189189189, y: 3.84313725490196, size: 1 },\r\n // { x: 269.837837837838, y: 3.64705882352941, size: 1 },\r\n // { x: 271.783783783784, y: 3.56862745098039, size: 1 },\r\n // { x: 272.432432432432, y: 3.72549019607843, size: 1 },\r\n // { x: 273.081081081081, y: 3.76470588235294, size: 1 },\r\n // { x: 274.378378378378, y: 3.6078431372549, size: 1 },\r\n // { x: 275.027027027027, y: 3.33333333333333, size: 1 },\r\n // { x: 276.324324324324, y: 3.25490196078431, size: 1 },\r\n // { x: 276.972972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 278.27027027027, y: 3.29411764705882, size: 1 },\r\n // { x: 278.918918918919, y: 3.41176470588235, size: 1 },\r\n // { x: 279.567567567568, y: 3.76470588235294, size: 1 },\r\n // { x: 280.216216216216, y: 3.72549019607843, size: 1 },\r\n // { x: 280.864864864865, y: 3.72549019607843, size: 1 },\r\n // { x: 281.513513513513, y: 3.68627450980392, size: 1 },\r\n // { x: 282.162162162162, y: 3.84313725490196, size: 1 },\r\n // { x: 282.810810810811, y: 3.64705882352941, size: 1 },\r\n // { x: 283.459459459459, y: 3.45098039215686, size: 1 },\r\n // { x: 284.108108108108, y: 3.6078431372549, size: 1 },\r\n // { x: 284.756756756757, y: 3.76470588235294, size: 1 },\r\n // { x: 285.405405405405, y: 3.76470588235294, size: 1 },\r\n // { x: 286.054054054054, y: 3.76470588235294, size: 1 },\r\n // { x: 286.702702702703, y: 3.52941176470588, size: 1 },\r\n // { x: 287.351351351351, y: 3.64705882352941, size: 1 },\r\n // { x: 288.648648648649, y: 3.52941176470588, size: 1 },\r\n // { x: 289.297297297297, y: 3.68627450980392, size: 1 },\r\n // { x: 289.945945945946, y: 3.64705882352941, size: 1 },\r\n // { x: 291.243243243243, y: 3.72549019607843, size: 1 },\r\n // { x: 291.891891891892, y: 3.76470588235294, size: 1 },\r\n // { x: 292.540540540541, y: 3.52941176470588, size: 1 },\r\n // { x: 293.189189189189, y: 3.88235294117647, size: 1 },\r\n // { x: 293.837837837838, y: 3.6078431372549, size: 1 },\r\n // { x: 294.486486486487, y: 3.68627450980392, size: 1 },\r\n // { x: 295.135135135135, y: 3.64705882352941, size: 1 },\r\n // { x: 296.432432432432, y: 3.68627450980392, size: 1 },\r\n // { x: 297.081081081081, y: 3.29411764705882, size: 1 },\r\n // { x: 298.378378378378, y: 2.94117647058824, size: 1 },\r\n // { x: 299.027027027027, y: 2.94117647058824, size: 1 },\r\n // { x: 299.675675675676, y: 2.98039215686275, size: 1 },\r\n // { x: 300.324324324324, y: 3.2156862745098, size: 1 },\r\n // { x: 300.972972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 301.621621621622, y: 3.45098039215686, size: 1 },\r\n // { x: 302.27027027027, y: 3.84313725490196, size: 1 },\r\n // { x: 303.567567567568, y: 3.84313725490196, size: 1 },\r\n // { x: 304.216216216216, y: 3.49019607843137, size: 1 },\r\n // { x: 304.864864864865, y: 3.6078431372549, size: 1 },\r\n // { x: 305.513513513513, y: 3.76470588235294, size: 1 },\r\n // { x: 306.162162162162, y: 3.68627450980392, size: 1 },\r\n // { x: 306.810810810811, y: 3.88235294117647, size: 1 },\r\n // { x: 307.459459459459, y: 3.84313725490196, size: 1 },\r\n // { x: 308.756756756757, y: 3.76470588235294, size: 1 },\r\n // { x: 309.405405405405, y: 3.56862745098039, size: 1 },\r\n // { x: 310.054054054054, y: 3.56862745098039, size: 1 },\r\n // { x: 310.702702702703, y: 3.56862745098039, size: 1 },\r\n // { x: 311.351351351351, y: 3.72549019607843, size: 1 },\r\n // { x: 312, y: 3.76470588235294, size: 1 },\r\n // { x: 312.648648648649, y: 3.68627450980392, size: 1 },\r\n // { x: 313.297297297297, y: 3.56862745098039, size: 1 },\r\n // { x: 313.945945945946, y: 3.6078431372549, size: 1 },\r\n // { x: 314.594594594595, y: 3.52941176470588, size: 1 },\r\n // { x: 315.243243243243, y: 3.49019607843137, size: 1 },\r\n // { x: 315.891891891892, y: 3.76470588235294, size: 1 },\r\n // { x: 316.540540540541, y: 3.76470588235294, size: 1 },\r\n // { x: 319.135135135135, y: 3.64705882352941, size: 1 },\r\n // { x: 319.783783783784, y: 3.41176470588235, size: 1 },\r\n // { x: 320.432432432432, y: 3.56862745098039, size: 1 },\r\n // { x: 321.72972972973, y: 3.05882352941176, size: 1 },\r\n // { x: 322.378378378378, y: 3.05882352941176, size: 1 },\r\n // { x: 323.675675675676, y: 3.84313725490196, size: 1 },\r\n // { x: 324.324324324324, y: 3.6078431372549, size: 1 },\r\n // { x: 325.621621621622, y: 3.64705882352941, size: 1 },\r\n // { x: 326.27027027027, y: 3.52941176470588, size: 1 },\r\n // { x: 326.918918918919, y: 3.6078431372549, size: 1 },\r\n // { x: 327.567567567568, y: 3.64705882352941, size: 1 },\r\n // { x: 328.216216216216, y: 3.6078431372549, size: 1 },\r\n // { x: 329.513513513513, y: 3.92156862745098, size: 1 },\r\n // { x: 330.810810810811, y: 3.88235294117647, size: 1 },\r\n // { x: 331.459459459459, y: 3.6078431372549, size: 1 },\r\n // { x: 332.108108108108, y: 3.72549019607843, size: 1 },\r\n // { x: 332.756756756757, y: 3.68627450980392, size: 1 },\r\n // { x: 333.405405405405, y: 3.84313725490196, size: 1 },\r\n // { x: 334.702702702703, y: 3.64705882352941, size: 1 },\r\n // { x: 336.648648648649, y: 3.64705882352941, size: 1 },\r\n // { x: 338.594594594595, y: 3.56862745098039, size: 1 },\r\n // { x: 339.243243243243, y: 3.49019607843137, size: 1 },\r\n // { x: 340.540540540541, y: 3.52941176470588, size: 1 },\r\n // { x: 341.189189189189, y: 3.45098039215686, size: 1 },\r\n // { x: 341.837837837838, y: 3.2156862745098, size: 1 },\r\n // { x: 342.486486486487, y: 3.52941176470588, size: 1 },\r\n // { x: 343.135135135135, y: 3.29411764705882, size: 1 },\r\n // { x: 343.783783783784, y: 3.45098039215686, size: 1 },\r\n // { x: 344.432432432432, y: 3.64705882352941, size: 1 },\r\n // { x: 345.081081081081, y: 3.6078431372549, size: 1 },\r\n // { x: 346.378378378378, y: 3.68627450980392, size: 1 },\r\n // { x: 347.027027027027, y: 3.64705882352941, size: 1 },\r\n // { x: 347.675675675676, y: 3.96078431372549, size: 1 },\r\n // { x: 348.324324324324, y: 3.72549019607843, size: 1 },\r\n // { x: 349.621621621622, y: 3.6078431372549, size: 1 },\r\n // { x: 350.27027027027, y: 3.80392156862745, size: 1 },\r\n // { x: 350.918918918919, y: 3.49019607843137, size: 1 },\r\n // { x: 351.567567567568, y: 3.68627450980392, size: 1 },\r\n // { x: 352.216216216216, y: 3.72549019607843, size: 1 },\r\n // { x: 352.864864864865, y: 3.6078431372549, size: 1 },\r\n // { x: 354.162162162162, y: 3.56862745098039, size: 1 },\r\n // { x: 354.810810810811, y: 3.80392156862745, size: 1 },\r\n // { x: 356.108108108108, y: 3.6078431372549, size: 1 },\r\n // { x: 356.756756756757, y: 3.72549019607843, size: 1 },\r\n // { x: 357.405405405405, y: 3.76470588235294, size: 1 },\r\n // { x: 358.054054054054, y: 3.52941176470588, size: 1 },\r\n // { x: 359.351351351351, y: 3.56862745098039, size: 1 },\r\n // { x: 0.647482014388489, y: 3.80392156862745, size: 1 },\r\n // { x: 1.94244604316547, y: 3.52941176470588, size: 1 },\r\n // { x: 2.58992805755396, y: 3.41176470588235, size: 1 },\r\n // { x: 4.53237410071942, y: 3.37254901960784, size: 1 },\r\n // { x: 5.17985611510791, y: 3.09803921568627, size: 1 },\r\n // { x: 5.8273381294964, y: 3.29411764705882, size: 1 },\r\n // { x: 12.3021582733813, y: 3.84313725490196, size: 1 },\r\n // { x: 12.9496402877698, y: 3.52941176470588, size: 1 },\r\n // { x: 16.8345323741007, y: 3.72549019607843, size: 1 },\r\n // { x: 18.1294964028777, y: 3.56862745098039, size: 1 },\r\n // { x: 18.7769784172662, y: 3.52941176470588, size: 1 },\r\n // { x: 20.0719424460432, y: 3.56862745098039, size: 1 },\r\n // { x: 25.8992805755396, y: 3.52941176470588, size: 1 },\r\n // { x: 27.1942446043165, y: 3.52941176470588, size: 1 },\r\n // { x: 29.7841726618705, y: 3.52941176470588, size: 1 },\r\n // { x: 30.431654676259, y: 3.52941176470588, size: 1 },\r\n // { x: 31.0791366906475, y: 3.56862745098039, size: 1 },\r\n // { x: 33.6690647482014, y: 3.76470588235294, size: 1 },\r\n // { x: 34.9640287769784, y: 3.80392156862745, size: 1 },\r\n // { x: 37.5539568345324, y: 3.68627450980392, size: 1 },\r\n // { x: 38.8489208633094, y: 3.68627450980392, size: 1 },\r\n // { x: 40.1438848920863, y: 3.76470588235294, size: 1 },\r\n // { x: 45.9712230215827, y: 3.17647058823529, size: 1 },\r\n // { x: 46.6187050359712, y: 2.66666666666667, size: 1 },\r\n // { x: 47.2661870503597, y: 2.50980392156863, size: 1 },\r\n // { x: 47.9136690647482, y: 3.05882352941176, size: 1 },\r\n // { x: 48.5611510791367, y: 3.01960784313725, size: 1 },\r\n // { x: 49.2086330935252, y: 3.37254901960784, size: 1 },\r\n // { x: 50.5035971223022, y: 3.37254901960784, size: 1 },\r\n // { x: 51.1510791366906, y: 3.45098039215686, size: 1 },\r\n // { x: 51.7985611510791, y: 3.56862745098039, size: 1 },\r\n // { x: 60.2158273381295, y: 3.49019607843137, size: 1 },\r\n // { x: 62.158273381295, y: 3.45098039215686, size: 1 },\r\n // { x: 64.1007194244604, y: 3.52941176470588, size: 1 },\r\n // { x: 66.0431654676259, y: 3.6078431372549, size: 1 },\r\n // { x: 67.9856115107914, y: 3.05882352941176, size: 1 },\r\n // { x: 68.6330935251799, y: 3.09803921568627, size: 1 },\r\n // { x: 69.2805755395683, y: 3.29411764705882, size: 1 },\r\n // { x: 69.9280575539568, y: 3.09803921568627, size: 1 },\r\n // { x: 71.8705035971223, y: 3.56862745098039, size: 1 },\r\n // { x: 73.1654676258993, y: 3.6078431372549, size: 1 },\r\n // { x: 73.8129496402878, y: 3.49019607843137, size: 1 },\r\n // { x: 75.7553956834532, y: 3.92156862745098, size: 1 },\r\n // { x: 76.4028776978417, y: 3.6078431372549, size: 1 },\r\n // { x: 82.8776978417266, y: 3.72549019607843, size: 1 },\r\n // { x: 84.1726618705036, y: 3.6078431372549, size: 1 },\r\n // { x: 85.4676258992806, y: 3.56862745098039, size: 1 },\r\n // { x: 90.6474820143885, y: 3.64705882352941, size: 1 },\r\n // { x: 91.294964028777, y: 3.56862745098039, size: 1 },\r\n // { x: 91.9424460431655, y: 3.68627450980392, size: 1 },\r\n // { x: 93.2374100719424, y: 3.72549019607843, size: 1 },\r\n // { x: 96.4748201438849, y: 3.76470588235294, size: 1 },\r\n // { x: 97.1223021582734, y: 3.92156862745098, size: 1 },\r\n // { x: 98.4172661870504, y: 3.68627450980392, size: 1 },\r\n // { x: 99.0647482014388, y: 3.76470588235294, size: 1 },\r\n // { x: 101.654676258993, y: 3.84313725490196, size: 1 },\r\n // { x: 102.302158273381, y: 3.64705882352941, size: 1 },\r\n // { x: 102.94964028777, y: 3.84313725490196, size: 1 },\r\n // { x: 104.244604316547, y: 3.88235294117647, size: 1 },\r\n // { x: 106.834532374101, y: 3.76470588235294, size: 1 },\r\n // { x: 108.776978417266, y: 3.68627450980392, size: 1 },\r\n // { x: 110.071942446043, y: 3.84313725490196, size: 1 },\r\n // { x: 110.719424460432, y: 3.64705882352941, size: 1 },\r\n // { x: 111.36690647482, y: 3.17647058823529, size: 1 },\r\n // { x: 113.309352517986, y: 3.41176470588235, size: 1 },\r\n // { x: 113.956834532374, y: 3.49019607843137, size: 1 },\r\n // { x: 115.251798561151, y: 3.88235294117647, size: 1 },\r\n // { x: 121.079136690647, y: 3.49019607843137, size: 1 },\r\n // { x: 123.669064748201, y: 3.64705882352941, size: 1 },\r\n // { x: 124.31654676259, y: 3.45098039215686, size: 1 },\r\n // { x: 125.611510791367, y: 3.68627450980392, size: 1 },\r\n // { x: 130.143884892086, y: 3.52941176470588, size: 1 },\r\n // { x: 131.438848920863, y: 3.17647058823529, size: 1 },\r\n // { x: 132.73381294964, y: 3.25490196078431, size: 1 },\r\n // { x: 133.381294964029, y: 3.17647058823529, size: 1 },\r\n // { x: 134.028776978417, y: 3.01960784313725, size: 1 },\r\n // { x: 134.676258992806, y: 3.17647058823529, size: 1 },\r\n // { x: 135.323741007194, y: 3.05882352941176, size: 1 },\r\n // { x: 136.618705035971, y: 3.52941176470588, size: 1 },\r\n // { x: 137.26618705036, y: 3.41176470588235, size: 1 },\r\n // { x: 139.208633093525, y: 3.45098039215686, size: 1 },\r\n // { x: 139.856115107914, y: 3.45098039215686, size: 1 },\r\n // { x: 141.151079136691, y: 3.56862745098039, size: 1 },\r\n // { x: 141.798561151079, y: 3.92156862745098, size: 1 },\r\n // { x: 143.741007194245, y: 3.45098039215686, size: 1 },\r\n // { x: 144.388489208633, y: 3.56862745098039, size: 1 },\r\n // { x: 145.68345323741, y: 3.52941176470588, size: 1 },\r\n // { x: 147.625899280576, y: 3.52941176470588, size: 1 },\r\n // { x: 148.273381294964, y: 3.68627450980392, size: 1 },\r\n // { x: 149.568345323741, y: 3.49019607843137, size: 1 },\r\n // { x: 150.215827338129, y: 3.56862745098039, size: 1 },\r\n // { x: 151.510791366906, y: 3.80392156862745, size: 1 },\r\n // { x: 152.158273381295, y: 3.37254901960784, size: 1 },\r\n // { x: 154.10071942446, y: 3.13725490196078, size: 1 },\r\n // { x: 154.748201438849, y: 3.13725490196078, size: 1 },\r\n // { x: 155.395683453237, y: 2.86274509803922, size: 1 },\r\n // { x: 156.043165467626, y: 3.09803921568627, size: 1 },\r\n // { x: 156.690647482014, y: 3.2156862745098, size: 1 },\r\n // { x: 160.575539568345, y: 3.6078431372549, size: 1 },\r\n // { x: 161.223021582734, y: 3.92156862745098, size: 1 },\r\n // { x: 161.870503597122, y: 3.76470588235294, size: 1 },\r\n // { x: 162.517985611511, y: 3.52941176470588, size: 1 },\r\n // { x: 163.165467625899, y: 3.76470588235294, size: 1 },\r\n // { x: 167.05035971223, y: 3.37254901960784, size: 1 },\r\n // { x: 172.877697841727, y: 3.52941176470588, size: 1 },\r\n // { x: 173.525179856115, y: 3.80392156862745, size: 1 },\r\n // { x: 174.172661870504, y: 3.2156862745098, size: 1 },\r\n // { x: 174.820143884892, y: 3.76470588235294, size: 1 },\r\n // { x: 175.467625899281, y: 3.6078431372549, size: 1 },\r\n // { x: 176.115107913669, y: 3.49019607843137, size: 1 },\r\n // { x: 178.057553956835, y: 3.80392156862745, size: 1 },\r\n // { x: 179.352517985612, y: 3.45098039215686, size: 1 },\r\n // { x: 181.294964028777, y: 3.45098039215686, size: 1 },\r\n // { x: 181.942446043165, y: 3.72549019607843, size: 1 },\r\n // { x: 182.589928057554, y: 3.6078431372549, size: 1 },\r\n // { x: 185.827338129496, y: 3.52941176470588, size: 1 },\r\n // { x: 188.41726618705, y: 3.49019607843137, size: 1 },\r\n // { x: 189.064748201439, y: 3.6078431372549, size: 1 },\r\n // { x: 189.712230215827, y: 3.64705882352941, size: 1 },\r\n // { x: 191.007194244604, y: 3.45098039215686, size: 1 },\r\n // { x: 194.892086330935, y: 3.68627450980392, size: 1 },\r\n // { x: 199.424460431655, y: 3.72549019607843, size: 1 },\r\n // { x: 200.719424460432, y: 3.52941176470588, size: 1 },\r\n // { x: 201.36690647482, y: 4.11764705882353, size: 1 },\r\n // { x: 202.661870503597, y: 3.64705882352941, size: 1 },\r\n // { x: 203.309352517986, y: 3.56862745098039, size: 1 },\r\n // { x: 204.604316546763, y: 3.41176470588235, size: 1 },\r\n // { x: 209.136690647482, y: 3.49019607843137, size: 1 },\r\n // { x: 212.374100719424, y: 3.56862745098039, size: 1 },\r\n // { x: 213.021582733813, y: 3.64705882352941, size: 1 },\r\n // { x: 214.31654676259, y: 3.80392156862745, size: 1 },\r\n // { x: 214.964028776978, y: 3.56862745098039, size: 1 },\r\n // { x: 216.258992805755, y: 3.92156862745098, size: 1 },\r\n // { x: 216.906474820144, y: 3.49019607843137, size: 1 },\r\n // { x: 220.143884892086, y: 3.37254901960784, size: 1 },\r\n // { x: 222.73381294964, y: 3.6078431372549, size: 1 },\r\n // { x: 223.381294964029, y: 3.45098039215686, size: 1 },\r\n // { x: 226.618705035971, y: 3.80392156862745, size: 1 },\r\n // { x: 227.26618705036, y: 3.49019607843137, size: 1 },\r\n // { x: 227.913669064748, y: 3.84313725490196, size: 1 },\r\n // { x: 229.208633093525, y: 3.84313725490196, size: 1 },\r\n // { x: 231.798561151079, y: 3.68627450980392, size: 1 },\r\n // { x: 232.446043165468, y: 3.6078431372549, size: 1 },\r\n // { x: 233.093525179856, y: 3.56862745098039, size: 1 },\r\n // { x: 234.388489208633, y: 3.64705882352941, size: 1 },\r\n // { x: 235.035971223022, y: 3.84313725490196, size: 1 },\r\n // { x: 236.330935251799, y: 3.84313725490196, size: 1 },\r\n // { x: 238.273381294964, y: 3.92156862745098, size: 1 },\r\n // { x: 238.920863309353, y: 3.45098039215686, size: 1 },\r\n // { x: 239.568345323741, y: 3.49019607843137, size: 1 },\r\n // { x: 240.215827338129, y: 3.33333333333333, size: 1 },\r\n // { x: 240.863309352518, y: 3.13725490196078, size: 1 },\r\n // { x: 241.510791366906, y: 2.86274509803922, size: 1 },\r\n // { x: 242.158273381295, y: 2.86274509803922, size: 1 },\r\n // { x: 242.805755395683, y: 3.01960784313725, size: 1 },\r\n // { x: 245.395683453237, y: 3.45098039215686, size: 1 },\r\n // { x: 251.223021582734, y: 3.45098039215686, size: 1 },\r\n // { x: 255.107913669065, y: 3.56862745098039, size: 1 },\r\n // { x: 259.640287769784, y: 3.84313725490196, size: 1 },\r\n // { x: 260.935251798561, y: 3.37254901960784, size: 1 },\r\n // { x: 262.230215827338, y: 2.74509803921569, size: 1 },\r\n // { x: 262.877697841727, y: 2.86274509803922, size: 1 },\r\n // { x: 263.525179856115, y: 3.29411764705882, size: 1 },\r\n // { x: 264.172661870504, y: 3.01960784313725, size: 1 },\r\n // { x: 264.820143884892, y: 3.45098039215686, size: 1 },\r\n // { x: 266.762589928058, y: 3.49019607843137, size: 1 },\r\n // { x: 274.532374100719, y: 3.45098039215686, size: 1 },\r\n // { x: 275.827338129496, y: 3.84313725490196, size: 1 },\r\n // { x: 276.474820143885, y: 3.56862745098039, size: 1 },\r\n // { x: 277.122302158273, y: 3.80392156862745, size: 1 },\r\n // { x: 279.712230215827, y: 3.68627450980392, size: 1 },\r\n // { x: 280.359712230216, y: 3.64705882352941, size: 1 },\r\n // { x: 284.892086330935, y: 3.45098039215686, size: 1 },\r\n // { x: 285.539568345324, y: 3.45098039215686, size: 1 },\r\n // { x: 286.187050359712, y: 3.33333333333333, size: 1 },\r\n // { x: 287.482014388489, y: 3.56862745098039, size: 1 },\r\n // { x: 288.776978417266, y: 3.52941176470588, size: 1 },\r\n // { x: 290.071942446043, y: 3.41176470588235, size: 1 },\r\n // { x: 290.719424460432, y: 3.49019607843137, size: 1 },\r\n // { x: 292.661870503597, y: 3.49019607843137, size: 1 },\r\n // { x: 293.309352517986, y: 3.6078431372549, size: 1 },\r\n // { x: 294.604316546763, y: 3.45098039215686, size: 1 },\r\n // { x: 295.251798561151, y: 3.52941176470588, size: 1 },\r\n // { x: 296.546762589928, y: 3.37254901960784, size: 1 },\r\n // { x: 297.194244604317, y: 3.56862745098039, size: 1 },\r\n // { x: 299.136690647482, y: 3.72549019607843, size: 1 },\r\n // { x: 300.431654676259, y: 3.37254901960784, size: 1 },\r\n // { x: 301.726618705036, y: 3.72549019607843, size: 1 },\r\n // { x: 302.374100719424, y: 3.45098039215686, size: 1 },\r\n // { x: 303.669064748201, y: 3.37254901960784, size: 1 },\r\n // { x: 304.31654676259, y: 3.45098039215686, size: 1 },\r\n // { x: 304.964028776978, y: 3.33333333333333, size: 1 },\r\n // { x: 305.611510791367, y: 2.98039215686275, size: 1 },\r\n // { x: 306.258992805755, y: 2.82352941176471, size: 1 },\r\n // { x: 306.906474820144, y: 3.09803921568627, size: 1 },\r\n // { x: 307.553956834532, y: 2.66666666666667, size: 1 },\r\n // { x: 308.201438848921, y: 3.76470588235294, size: 1 },\r\n // { x: 310.791366906475, y: 3.45098039215686, size: 1 },\r\n // { x: 312.086330935252, y: 3.56862745098039, size: 1 },\r\n // { x: 313.381294964029, y: 3.49019607843137, size: 1 },\r\n // { x: 316.618705035971, y: 3.52941176470588, size: 1 },\r\n // { x: 317.26618705036, y: 3.49019607843137, size: 1 },\r\n // { x: 321.151079136691, y: 3.72549019607843, size: 1 },\r\n // { x: 327.625899280576, y: 3.45098039215686, size: 1 },\r\n // { x: 328.273381294964, y: 3.29411764705882, size: 1 },\r\n // { x: 328.920863309353, y: 3.17647058823529, size: 1 },\r\n // { x: 329.568345323741, y: 3.33333333333333, size: 1 },\r\n // { x: 331.510791366906, y: 3.52941176470588, size: 1 },\r\n // { x: 332.158273381295, y: 3.6078431372549, size: 1 },\r\n // { x: 332.805755395683, y: 3.72549019607843, size: 1 },\r\n // { x: 334.748201438849, y: 3.56862745098039, size: 1 },\r\n // { x: 336.690647482014, y: 3.80392156862745, size: 1 },\r\n // { x: 337.985611510791, y: 3.72549019607843, size: 1 },\r\n // { x: 341.223021582734, y: 3.49019607843137, size: 1 },\r\n // { x: 341.870503597122, y: 3.68627450980392, size: 1 },\r\n // { x: 343.165467625899, y: 3.84313725490196, size: 1 },\r\n // { x: 343.812949640288, y: 3.45098039215686, size: 1 },\r\n // { x: 344.460431654676, y: 3.45098039215686, size: 1 },\r\n // { x: 345.755395683453, y: 3.56862745098039, size: 1 },\r\n // { x: 346.402877697842, y: 3.6078431372549, size: 1 },\r\n // { x: 347.05035971223, y: 3.37254901960784, size: 1 },\r\n // { x: 348.345323741007, y: 3.52941176470588, size: 1 },\r\n // { x: 348.992805755396, y: 3.17647058823529, size: 1 },\r\n // { x: 349.640287769784, y: 3.72549019607843, size: 1 },\r\n // { x: 350.287769784173, y: 3.92156862745098, size: 1 },\r\n // { x: 350.935251798561, y: 3.68627450980392, size: 1 },\r\n // { x: 351.58273381295, y: 3.68627450980392, size: 1 },\r\n // { x: 352.230215827338, y: 3.64705882352941, size: 1 },\r\n // { x: 352.877697841727, y: 3.84313725490196, size: 1 },\r\n // { x: 356.762589928058, y: 3.68627450980392, size: 1 },\r\n // { x: 359.352517985611, y: 3.76470588235294, size: 1 },\r\n // { x: 2.58992805755396, y: 3.6078431372549, size: 1 },\r\n // { x: 3.88489208633094, y: 3.64705882352941, size: 1 },\r\n // { x: 5.17985611510791, y: 3.68627450980392, size: 1 },\r\n // { x: 5.8273381294964, y: 3.68627450980392, size: 1 },\r\n // { x: 7.76978417266187, y: 3.72549019607843, size: 1 },\r\n // { x: 9.06474820143885, y: 3.45098039215686, size: 1 },\r\n // { x: 10.3597122302158, y: 3.52941176470588, size: 1 },\r\n // { x: 11.0071942446043, y: 3.25490196078431, size: 1 },\r\n // { x: 11.6546762589928, y: 3.6078431372549, size: 1 },\r\n // { x: 12.3021582733813, y: 3.64705882352941, size: 1 },\r\n // { x: 12.9496402877698, y: 3.72549019607843, size: 1 },\r\n // { x: 13.5971223021583, y: 3.56862745098039, size: 1 },\r\n // { x: 14.2446043165468, y: 3.41176470588235, size: 1 },\r\n // { x: 14.8920863309353, y: 3.76470588235294, size: 1 },\r\n // { x: 15.5395683453237, y: 3.68627450980392, size: 1 },\r\n // { x: 16.1870503597122, y: 3.49019607843137, size: 1 },\r\n // { x: 18.7769784172662, y: 3.64705882352941, size: 1 },\r\n // { x: 20.0719424460432, y: 3.72549019607843, size: 1 },\r\n // { x: 20.7194244604317, y: 3.80392156862745, size: 1 },\r\n // { x: 22.6618705035971, y: 3.72549019607843, size: 1 },\r\n // { x: 23.9568345323741, y: 3.6078431372549, size: 1 },\r\n // { x: 24.6043165467626, y: 3.72549019607843, size: 1 },\r\n // { x: 25.2517985611511, y: 3.80392156862745, size: 1 },\r\n // { x: 26.5467625899281, y: 3.72549019607843, size: 1 },\r\n // { x: 27.841726618705, y: 3.41176470588235, size: 1 },\r\n // { x: 28.4892086330935, y: 3.52941176470588, size: 1 },\r\n // { x: 30.431654676259, y: 3.49019607843137, size: 1 },\r\n // { x: 31.726618705036, y: 3.37254901960784, size: 1 },\r\n // { x: 34.3165467625899, y: 3.76470588235294, size: 1 },\r\n // { x: 36.9064748201439, y: 3.76470588235294, size: 1 },\r\n // { x: 39.4964028776978, y: 3.45098039215686, size: 1 },\r\n // { x: 40.7913669064748, y: 3.6078431372549, size: 1 },\r\n // { x: 41.4388489208633, y: 3.72549019607843, size: 1 },\r\n // { x: 44.6762589928058, y: 3.80392156862745, size: 1 },\r\n // { x: 45.3237410071942, y: 3.49019607843137, size: 1 },\r\n // { x: 46.6187050359712, y: 3.6078431372549, size: 1 },\r\n // { x: 47.2661870503597, y: 3.64705882352941, size: 1 },\r\n // { x: 47.9136690647482, y: 3.88235294117647, size: 1 },\r\n // { x: 48.5611510791367, y: 3.72549019607843, size: 1 },\r\n // { x: 49.2086330935252, y: 3.68627450980392, size: 1 },\r\n // { x: 52.4460431654676, y: 3.64705882352941, size: 1 },\r\n // { x: 53.7410071942446, y: 3.37254901960784, size: 1 },\r\n // { x: 54.3884892086331, y: 3.52941176470588, size: 1 },\r\n // { x: 55.0359712230216, y: 3.72549019607843, size: 1 },\r\n // { x: 56.9784172661871, y: 3.56862745098039, size: 1 },\r\n // { x: 57.6258992805755, y: 3.45098039215686, size: 1 },\r\n // { x: 58.273381294964, y: 3.49019607843137, size: 1 },\r\n // { x: 61.5107913669065, y: 3.68627450980392, size: 1 },\r\n // { x: 62.158273381295, y: 3.68627450980392, size: 1 },\r\n // { x: 62.8057553956835, y: 3.64705882352941, size: 1 },\r\n // { x: 63.4532374100719, y: 3.68627450980392, size: 1 },\r\n // { x: 64.7482014388489, y: 3.88235294117647, size: 1 },\r\n // { x: 67.9856115107914, y: 3.80392156862745, size: 1 },\r\n // { x: 72.5179856115108, y: 3.96078431372549, size: 1 },\r\n // { x: 74.4604316546763, y: 3.41176470588235, size: 1 },\r\n // { x: 75.1079136690647, y: 3.13725490196078, size: 1 },\r\n // { x: 75.7553956834532, y: 3.13725490196078, size: 1 },\r\n // { x: 76.4028776978417, y: 3.72549019607843, size: 1 },\r\n // { x: 77.6978417266187, y: 3.72549019607843, size: 1 },\r\n // { x: 78.3453237410072, y: 3.76470588235294, size: 1 },\r\n // { x: 79.6402877697842, y: 3.64705882352941, size: 1 },\r\n // { x: 82.2302158273381, y: 3.64705882352941, size: 1 },\r\n // { x: 84.1726618705036, y: 3.68627450980392, size: 1 },\r\n // { x: 85.4676258992806, y: 3.72549019607843, size: 1 },\r\n // { x: 90, y: 3.56862745098039, size: 1 },\r\n // { x: 90.6474820143885, y: 3.56862745098039, size: 1 },\r\n // { x: 91.294964028777, y: 3.88235294117647, size: 1 },\r\n // { x: 95.1798561151079, y: 3.96078431372549, size: 1 },\r\n // { x: 98.4172661870504, y: 3.6078431372549, size: 1 },\r\n // { x: 100.359712230216, y: 3.37254901960784, size: 1 },\r\n // { x: 102.302158273381, y: 3.84313725490196, size: 1 },\r\n // { x: 104.892086330935, y: 3.64705882352941, size: 1 },\r\n // { x: 105.539568345324, y: 3.45098039215686, size: 1 },\r\n // { x: 109.424460431655, y: 3.49019607843137, size: 1 },\r\n // { x: 110.719424460432, y: 3.72549019607843, size: 1 },\r\n // { x: 111.36690647482, y: 3.45098039215686, size: 1 },\r\n // { x: 112.014388489209, y: 3.72549019607843, size: 1 },\r\n // { x: 115.89928057554, y: 3.64705882352941, size: 1 },\r\n // { x: 117.841726618705, y: 3.56862745098039, size: 1 },\r\n // { x: 118.489208633094, y: 3.6078431372549, size: 1 },\r\n // { x: 119.784172661871, y: 3.80392156862745, size: 1 },\r\n // { x: 120.431654676259, y: 3.6078431372549, size: 1 },\r\n // { x: 121.079136690647, y: 3.56862745098039, size: 1 },\r\n // { x: 121.726618705036, y: 3.84313725490196, size: 1 },\r\n // { x: 122.374100719424, y: 3.88235294117647, size: 1 },\r\n // { x: 123.021582733813, y: 3.64705882352941, size: 1 },\r\n // { x: 123.669064748201, y: 3.6078431372549, size: 1 },\r\n // { x: 132.73381294964, y: 3.56862745098039, size: 1 },\r\n // { x: 134.028776978417, y: 3.49019607843137, size: 1 },\r\n // { x: 135.971223021583, y: 3.80392156862745, size: 1 },\r\n // { x: 137.913669064748, y: 3.41176470588235, size: 1 },\r\n // { x: 138.561151079137, y: 3.37254901960784, size: 1 },\r\n // { x: 139.856115107914, y: 3.01960784313725, size: 1 },\r\n // { x: 140.503597122302, y: 2.82352941176471, size: 1 },\r\n // { x: 141.151079136691, y: 2.7843137254902, size: 1 },\r\n // { x: 141.798561151079, y: 2.70588235294118, size: 1 },\r\n // { x: 142.446043165468, y: 3.45098039215686, size: 1 },\r\n // { x: 143.093525179856, y: 3.56862745098039, size: 1 },\r\n // { x: 145.035971223022, y: 3.25490196078431, size: 1 },\r\n // { x: 148.920863309353, y: 3.56862745098039, size: 1 },\r\n // { x: 149.568345323741, y: 3.80392156862745, size: 1 },\r\n // { x: 151.510791366906, y: 3.45098039215686, size: 1 },\r\n // { x: 153.453237410072, y: 3.33333333333333, size: 1 },\r\n // { x: 154.748201438849, y: 3.49019607843137, size: 1 },\r\n // { x: 156.043165467626, y: 3.45098039215686, size: 1 },\r\n // { x: 156.690647482014, y: 3.52941176470588, size: 1 },\r\n // { x: 159.280575539568, y: 3.41176470588235, size: 1 },\r\n // { x: 161.223021582734, y: 3.84313725490196, size: 1 },\r\n // { x: 164.460431654676, y: 3.68627450980392, size: 1 },\r\n // { x: 165.107913669065, y: 3.41176470588235, size: 1 },\r\n // { x: 170.287769784173, y: 3.72549019607843, size: 1 },\r\n // { x: 170.935251798561, y: 3.72549019607843, size: 1 },\r\n // { x: 172.877697841727, y: 3.68627450980392, size: 1 },\r\n // { x: 174.820143884892, y: 3.6078431372549, size: 1 },\r\n // { x: 175.467625899281, y: 3.68627450980392, size: 1 },\r\n // { x: 176.115107913669, y: 3.52941176470588, size: 1 },\r\n // { x: 180, y: 3.41176470588235, size: 1 },\r\n // { x: 181.942446043165, y: 3.29411764705882, size: 1 },\r\n // { x: 187.769784172662, y: 3.80392156862745, size: 1 },\r\n // { x: 189.064748201439, y: 3.52941176470588, size: 1 },\r\n // { x: 190.359712230216, y: 3.64705882352941, size: 1 },\r\n // { x: 194.892086330935, y: 3.72549019607843, size: 1 },\r\n // { x: 196.187050359712, y: 3.88235294117647, size: 1 },\r\n // { x: 196.834532374101, y: 3.56862745098039, size: 1 },\r\n // { x: 198.129496402878, y: 3.41176470588235, size: 1 },\r\n // { x: 199.424460431655, y: 3.45098039215686, size: 1 },\r\n // { x: 200.071942446043, y: 3.72549019607843, size: 1 },\r\n // { x: 201.36690647482, y: 3.52941176470588, size: 1 },\r\n // { x: 202.014388489209, y: 3.72549019607843, size: 1 },\r\n // { x: 202.661870503597, y: 3.45098039215686, size: 1 },\r\n // { x: 205.251798561151, y: 3.33333333333333, size: 1 },\r\n // { x: 207.194244604317, y: 3.45098039215686, size: 1 },\r\n // { x: 213.669064748201, y: 3.64705882352941, size: 1 },\r\n // { x: 216.258992805755, y: 3.33333333333333, size: 1 },\r\n // { x: 217.553956834532, y: 3.49019607843137, size: 1 },\r\n // { x: 220.791366906475, y: 3.72549019607843, size: 1 },\r\n // { x: 222.086330935252, y: 3.37254901960784, size: 1 },\r\n // { x: 225.323741007194, y: 3.84313725490196, size: 1 },\r\n // { x: 227.913669064748, y: 3.49019607843137, size: 1 },\r\n // { x: 229.856115107914, y: 3.84313725490196, size: 1 },\r\n // { x: 231.151079136691, y: 3.84313725490196, size: 1 },\r\n // { x: 234.388489208633, y: 3.6078431372549, size: 1 },\r\n // { x: 236.330935251799, y: 3.6078431372549, size: 1 },\r\n // { x: 238.273381294964, y: 3.76470588235294, size: 1 },\r\n // { x: 238.920863309353, y: 3.49019607843137, size: 1 },\r\n // { x: 240.215827338129, y: 3.52941176470588, size: 1 },\r\n // { x: 244.10071942446, y: 3.96078431372549, size: 1 },\r\n // { x: 244.748201438849, y: 3.64705882352941, size: 1 },\r\n // { x: 247.338129496403, y: 3.45098039215686, size: 1 },\r\n // { x: 248.63309352518, y: 3.68627450980392, size: 1 },\r\n // { x: 249.928057553957, y: 3.72549019607843, size: 1 },\r\n // { x: 251.870503597122, y: 3.6078431372549, size: 1 },\r\n // { x: 255.755395683453, y: 3.52941176470588, size: 1 },\r\n // { x: 257.05035971223, y: 3.76470588235294, size: 1 },\r\n // { x: 257.697841726619, y: 3.6078431372549, size: 1 },\r\n // { x: 258.992805755396, y: 3.56862745098039, size: 1 },\r\n // { x: 259.640287769784, y: 3.56862745098039, size: 1 },\r\n // { x: 261.58273381295, y: 3.72549019607843, size: 1 },\r\n // { x: 262.230215827338, y: 3.76470588235294, size: 1 },\r\n // { x: 266.762589928058, y: 3.41176470588235, size: 1 },\r\n // { x: 267.410071942446, y: 3.49019607843137, size: 1 },\r\n // { x: 269.352517985611, y: 3.41176470588235, size: 1 },\r\n // { x: 270, y: 3.41176470588235, size: 1 },\r\n // { x: 270.647482014389, y: 3.29411764705882, size: 1 },\r\n // { x: 272.589928057554, y: 3.80392156862745, size: 1 },\r\n // { x: 273.237410071942, y: 3.6078431372549, size: 1 },\r\n // { x: 273.884892086331, y: 3.84313725490196, size: 1 },\r\n // { x: 275.179856115108, y: 3.49019607843137, size: 1 },\r\n // { x: 276.474820143885, y: 3.52941176470588, size: 1 },\r\n // { x: 277.122302158273, y: 3.41176470588235, size: 1 },\r\n // { x: 277.769784172662, y: 3.76470588235294, size: 1 },\r\n // { x: 281.007194244604, y: 3.84313725490196, size: 1 },\r\n // { x: 282.302158273381, y: 3.72549019607843, size: 1 },\r\n // { x: 282.94964028777, y: 3.56862745098039, size: 1 },\r\n // { x: 284.892086330935, y: 3.68627450980392, size: 1 },\r\n // { x: 290.071942446043, y: 3.37254901960784, size: 1 },\r\n // { x: 290.719424460432, y: 3.37254901960784, size: 1 },\r\n // { x: 291.36690647482, y: 3.37254901960784, size: 1 },\r\n // { x: 292.014388489209, y: 3.37254901960784, size: 1 },\r\n // { x: 293.309352517986, y: 3.68627450980392, size: 1 },\r\n // { x: 293.956834532374, y: 3.33333333333333, size: 1 },\r\n // { x: 295.251798561151, y: 3.45098039215686, size: 1 },\r\n // { x: 297.841726618705, y: 3.49019607843137, size: 1 },\r\n // { x: 298.489208633094, y: 3.72549019607843, size: 1 },\r\n // { x: 300.431654676259, y: 3.72549019607843, size: 1 },\r\n // { x: 303.021582733813, y: 3.45098039215686, size: 1 },\r\n // { x: 304.964028776978, y: 3.6078431372549, size: 1 },\r\n // { x: 306.906474820144, y: 3.52941176470588, size: 1 },\r\n // { x: 310.791366906475, y: 3.37254901960784, size: 1 },\r\n // { x: 311.438848920863, y: 3.33333333333333, size: 1 },\r\n // { x: 312.73381294964, y: 3.2156862745098, size: 1 },\r\n // { x: 313.381294964029, y: 3.13725490196078, size: 1 },\r\n // { x: 314.028776978417, y: 2.98039215686275, size: 1 },\r\n // { x: 314.676258992806, y: 3.17647058823529, size: 1 },\r\n // { x: 316.618705035971, y: 3.84313725490196, size: 1 },\r\n // { x: 317.913669064748, y: 3.64705882352941, size: 1 },\r\n // { x: 319.208633093525, y: 3.76470588235294, size: 1 },\r\n // { x: 320.503597122302, y: 3.56862745098039, size: 1 },\r\n // { x: 321.798561151079, y: 3.56862745098039, size: 1 },\r\n // { x: 322.446043165468, y: 3.76470588235294, size: 1 },\r\n // { x: 323.741007194245, y: 3.76470588235294, size: 1 },\r\n // { x: 326.978417266187, y: 3.41176470588235, size: 1 },\r\n // { x: 330.863309352518, y: 3.41176470588235, size: 1 },\r\n // { x: 334.10071942446, y: 3.13725490196078, size: 1 },\r\n // { x: 334.748201438849, y: 2.74509803921569, size: 1 },\r\n // { x: 335.395683453237, y: 3.09803921568627, size: 1 },\r\n // { x: 336.043165467626, y: 3.05882352941176, size: 1 },\r\n // { x: 339.280575539568, y: 3.6078431372549, size: 1 },\r\n // { x: 341.223021582734, y: 3.96078431372549, size: 1 },\r\n // { x: 342.517985611511, y: 3.6078431372549, size: 1 },\r\n // { x: 343.165467625899, y: 3.68627450980392, size: 1 },\r\n // { x: 345.107913669065, y: 3.45098039215686, size: 1 },\r\n // { x: 354.820143884892, y: 3.96078431372549, size: 1 },\r\n // { x: 359.352517985611, y: 4, size: 1 },\r\n // { x: 0, y: 3.84313725490196, size: 1 },\r\n // { x: 1.29496402877698, y: 3.84313725490196, size: 1 },\r\n // { x: 1.94244604316547, y: 3.72549019607843, size: 1 },\r\n // { x: 2.58992805755396, y: 3.88235294117647, size: 1 },\r\n // { x: 3.23741007194245, y: 3.88235294117647, size: 1 },\r\n // { x: 8.41726618705036, y: 3.76470588235294, size: 1 },\r\n // { x: 9.71223021582734, y: 3.68627450980392, size: 1 },\r\n // { x: 11.0071942446043, y: 4, size: 1 },\r\n // { x: 11.6546762589928, y: 3.49019607843137, size: 1 },\r\n // { x: 12.3021582733813, y: 3.52941176470588, size: 1 },\r\n // { x: 13.5971223021583, y: 3.84313725490196, size: 1 },\r\n // { x: 14.2446043165468, y: 3.80392156862745, size: 1 },\r\n // { x: 14.8920863309353, y: 3.64705882352941, size: 1 },\r\n // { x: 16.1870503597122, y: 3.09803921568627, size: 1 },\r\n // { x: 16.8345323741007, y: 3.64705882352941, size: 1 },\r\n // { x: 17.4820143884892, y: 3.13725490196078, size: 1 },\r\n // { x: 18.7769784172662, y: 3.41176470588235, size: 1 },\r\n // { x: 19.4244604316547, y: 3.52941176470588, size: 1 },\r\n // { x: 22.0143884892086, y: 3.88235294117647, size: 1 },\r\n // { x: 22.6618705035971, y: 4, size: 1 },\r\n // { x: 24.6043165467626, y: 3.80392156862745, size: 1 },\r\n // { x: 29.136690647482, y: 3.72549019607843, size: 1 },\r\n // { x: 31.726618705036, y: 3.76470588235294, size: 1 },\r\n // { x: 34.3165467625899, y: 3.64705882352941, size: 1 },\r\n // { x: 35.6115107913669, y: 3.68627450980392, size: 1 },\r\n // { x: 36.2589928057554, y: 3.72549019607843, size: 1 },\r\n // { x: 36.9064748201439, y: 3.29411764705882, size: 1 },\r\n // { x: 38.2014388489209, y: 3.72549019607843, size: 1 },\r\n // { x: 38.8489208633094, y: 3.13725490196078, size: 1 },\r\n // { x: 40.1438848920863, y: 3.01960784313725, size: 1 },\r\n // { x: 40.7913669064748, y: 2.66666666666667, size: 1 },\r\n // { x: 45.3237410071942, y: 3.6078431372549, size: 1 },\r\n // { x: 45.9712230215827, y: 3.76470588235294, size: 1 },\r\n // { x: 52.4460431654676, y: 3.84313725490196, size: 1 },\r\n // { x: 54.3884892086331, y: 3.56862745098039, size: 1 },\r\n // { x: 56.9784172661871, y: 3.72549019607843, size: 1 },\r\n // { x: 58.9208633093525, y: 3.52941176470588, size: 1 },\r\n // { x: 59.568345323741, y: 3.41176470588235, size: 1 },\r\n // { x: 60.2158273381295, y: 3.17647058823529, size: 1 },\r\n // { x: 60.863309352518, y: 3.13725490196078, size: 1 },\r\n // { x: 66.0431654676259, y: 3.68627450980392, size: 1 },\r\n // { x: 67.3381294964029, y: 3.6078431372549, size: 1 },\r\n // { x: 67.9856115107914, y: 3.68627450980392, size: 1 },\r\n // { x: 69.2805755395683, y: 3.68627450980392, size: 1 },\r\n // { x: 73.1654676258993, y: 3.56862745098039, size: 1 },\r\n // { x: 73.8129496402878, y: 3.72549019607843, size: 1 },\r\n // { x: 74.4604316546763, y: 3.76470588235294, size: 1 },\r\n // { x: 77.0503597122302, y: 3.45098039215686, size: 1 },\r\n // { x: 77.6978417266187, y: 3.45098039215686, size: 1 },\r\n // { x: 80.9352517985612, y: 3.56862745098039, size: 1 },\r\n // { x: 83.5251798561151, y: 3.52941176470588, size: 1 },\r\n // { x: 84.1726618705036, y: 3.56862745098039, size: 1 },\r\n // { x: 84.8201438848921, y: 3.6078431372549, size: 1 },\r\n // { x: 86.7625899280576, y: 3.80392156862745, size: 1 },\r\n // { x: 88.705035971223, y: 3.45098039215686, size: 1 },\r\n // { x: 93.2374100719424, y: 3.45098039215686, size: 1 },\r\n // { x: 96.4748201438849, y: 3.37254901960784, size: 1 },\r\n // { x: 97.7697841726619, y: 3.68627450980392, size: 1 },\r\n // { x: 99.0647482014388, y: 3.49019607843137, size: 1 },\r\n // { x: 99.7122302158273, y: 3.41176470588235, size: 1 },\r\n // { x: 104.244604316547, y: 3.37254901960784, size: 1 },\r\n // { x: 106.187050359712, y: 3.72549019607843, size: 1 },\r\n // { x: 108.776978417266, y: 3.52941176470588, size: 1 },\r\n // { x: 109.424460431655, y: 3.45098039215686, size: 1 },\r\n // { x: 110.719424460432, y: 3.52941176470588, size: 1 },\r\n // { x: 111.36690647482, y: 3.68627450980392, size: 1 },\r\n // { x: 113.309352517986, y: 3.49019607843137, size: 1 },\r\n // { x: 113.956834532374, y: 3.52941176470588, size: 1 },\r\n // { x: 114.604316546763, y: 3.6078431372549, size: 1 },\r\n // { x: 119.136690647482, y: 3.49019607843137, size: 1 },\r\n // { x: 120.431654676259, y: 3.33333333333333, size: 1 },\r\n // { x: 123.669064748201, y: 3.68627450980392, size: 1 },\r\n // { x: 125.611510791367, y: 3.92156862745098, size: 1 },\r\n // { x: 126.906474820144, y: 3.64705882352941, size: 1 },\r\n // { x: 127.553956834532, y: 3.68627450980392, size: 1 },\r\n // { x: 128.201438848921, y: 3.6078431372549, size: 1 },\r\n // { x: 130.143884892086, y: 3.84313725490196, size: 1 },\r\n // { x: 132.086330935252, y: 3.52941176470588, size: 1 },\r\n // { x: 132.73381294964, y: 3.45098039215686, size: 1 },\r\n // { x: 135.323741007194, y: 3.68627450980392, size: 1 },\r\n // { x: 136.618705035971, y: 3.76470588235294, size: 1 },\r\n // { x: 137.26618705036, y: 3.76470588235294, size: 1 },\r\n // { x: 139.208633093525, y: 3.80392156862745, size: 1 },\r\n // { x: 140.503597122302, y: 3.56862745098039, size: 1 },\r\n // { x: 141.798561151079, y: 3.49019607843137, size: 1 },\r\n // { x: 143.741007194245, y: 3.56862745098039, size: 1 },\r\n // { x: 146.330935251799, y: 3.41176470588235, size: 1 },\r\n // { x: 147.625899280576, y: 3.56862745098039, size: 1 },\r\n // { x: 148.920863309353, y: 3.41176470588235, size: 1 },\r\n // { x: 150.215827338129, y: 3.6078431372549, size: 1 },\r\n // { x: 150.863309352518, y: 3.52941176470588, size: 1 },\r\n // { x: 152.805755395683, y: 3.49019607843137, size: 1 },\r\n // { x: 154.10071942446, y: 3.80392156862745, size: 1 },\r\n // { x: 160.575539568345, y: 3.68627450980392, size: 1 },\r\n // { x: 163.165467625899, y: 3.80392156862745, size: 1 },\r\n // { x: 170.935251798561, y: 3.76470588235294, size: 1 },\r\n // { x: 173.525179856115, y: 3.6078431372549, size: 1 },\r\n // { x: 174.172661870504, y: 3.52941176470588, size: 1 },\r\n // { x: 179.352517985612, y: 3.96078431372549, size: 1 },\r\n // { x: 180.647482014388, y: 3.84313725490196, size: 1 },\r\n // { x: 184.532374100719, y: 3.84313725490196, size: 1 },\r\n // { x: 185.179856115108, y: 3.76470588235294, size: 1 },\r\n // { x: 187.769784172662, y: 3.6078431372549, size: 1 },\r\n // { x: 188.41726618705, y: 3.45098039215686, size: 1 },\r\n // { x: 189.712230215827, y: 2.74509803921569, size: 1 },\r\n // { x: 190.359712230216, y: 2.7843137254902, size: 1 },\r\n // { x: 191.007194244604, y: 2.98039215686275, size: 1 },\r\n // { x: 191.654676258993, y: 3.13725490196078, size: 1 },\r\n // { x: 192.302158273381, y: 3.33333333333333, size: 1 },\r\n // { x: 193.597122302158, y: 3.49019607843137, size: 1 },\r\n // { x: 194.244604316547, y: 3.6078431372549, size: 1 },\r\n // { x: 196.834532374101, y: 3.64705882352941, size: 1 },\r\n // { x: 198.776978417266, y: 3.6078431372549, size: 1 },\r\n // { x: 200.071942446043, y: 3.6078431372549, size: 1 },\r\n // { x: 201.36690647482, y: 3.25490196078431, size: 1 },\r\n // { x: 203.956834532374, y: 3.76470588235294, size: 1 },\r\n // { x: 205.251798561151, y: 3.64705882352941, size: 1 },\r\n // { x: 205.89928057554, y: 3.68627450980392, size: 1 },\r\n // { x: 206.546762589928, y: 3.52941176470588, size: 1 },\r\n // { x: 209.784172661871, y: 3.37254901960784, size: 1 },\r\n // { x: 210.431654676259, y: 3.33333333333333, size: 1 },\r\n // { x: 211.726618705036, y: 3.2156862745098, size: 1 },\r\n // { x: 212.374100719424, y: 3.29411764705882, size: 1 },\r\n // { x: 213.021582733813, y: 2.90196078431373, size: 1 },\r\n // { x: 213.669064748201, y: 2.90196078431373, size: 1 },\r\n // { x: 214.964028776978, y: 3.84313725490196, size: 1 },\r\n // { x: 220.791366906475, y: 3.64705882352941, size: 1 },\r\n // { x: 224.028776978417, y: 3.84313725490196, size: 1 },\r\n // { x: 228.561151079137, y: 3.88235294117647, size: 1 },\r\n // { x: 229.208633093525, y: 3.56862745098039, size: 1 },\r\n // { x: 229.856115107914, y: 3.88235294117647, size: 1 },\r\n // { x: 231.151079136691, y: 3.68627450980392, size: 1 },\r\n // { x: 231.798561151079, y: 3.37254901960784, size: 1 },\r\n // { x: 232.446043165468, y: 2.94117647058824, size: 1 },\r\n // { x: 233.093525179856, y: 1.2156862745098, size: 1 },\r\n // { x: 233.741007194245, y: 1.05882352941176, size: 1 },\r\n // { x: 234.388489208633, y: 1.01960784313725, size: 1 },\r\n // { x: 235.035971223022, y: 0.980392156862745, size: 1 },\r\n // { x: 236.330935251799, y: 3.52941176470588, size: 1 },\r\n // { x: 237.625899280576, y: 3.09803921568627, size: 1 },\r\n // { x: 238.273381294964, y: 3.13725490196078, size: 1 },\r\n // { x: 238.920863309353, y: 3.56862745098039, size: 1 },\r\n // { x: 242.158273381295, y: 2.94117647058824, size: 1 },\r\n // { x: 242.805755395683, y: 2.90196078431373, size: 1 },\r\n // { x: 244.10071942446, y: 3.72549019607843, size: 1 },\r\n // { x: 248.63309352518, y: 2.70588235294118, size: 1 },\r\n // { x: 249.280575539568, y: 2.98039215686275, size: 1 },\r\n // { x: 249.928057553957, y: 3.37254901960784, size: 1 },\r\n // { x: 251.870503597122, y: 3.33333333333333, size: 1 },\r\n // { x: 252.517985611511, y: 3.25490196078431, size: 1 },\r\n // { x: 253.812949640288, y: 3.29411764705882, size: 1 },\r\n // { x: 254.460431654676, y: 3.09803921568627, size: 1 },\r\n // { x: 256.402877697842, y: 3.29411764705882, size: 1 },\r\n // { x: 257.05035971223, y: 3.25490196078431, size: 1 },\r\n // { x: 257.697841726619, y: 3.37254901960784, size: 1 },\r\n // { x: 258.345323741007, y: 3.45098039215686, size: 1 },\r\n // { x: 258.992805755396, y: 3.49019607843137, size: 1 },\r\n // { x: 259.640287769784, y: 3.25490196078431, size: 1 },\r\n // { x: 260.287769784173, y: 3.45098039215686, size: 1 },\r\n // { x: 260.935251798561, y: 3.52941176470588, size: 1 },\r\n // { x: 262.230215827338, y: 3.45098039215686, size: 1 },\r\n // { x: 263.525179856115, y: 3.45098039215686, size: 1 },\r\n // { x: 264.172661870504, y: 3.49019607843137, size: 1 },\r\n // { x: 266.115107913669, y: 3.33333333333333, size: 1 },\r\n // { x: 267.410071942446, y: 3.29411764705882, size: 1 },\r\n // { x: 268.057553956835, y: 3.33333333333333, size: 1 },\r\n // { x: 270, y: 3.45098039215686, size: 1 },\r\n // { x: 271.942446043165, y: 3.29411764705882, size: 1 },\r\n // { x: 272.589928057554, y: 3.45098039215686, size: 1 },\r\n // { x: 273.237410071942, y: 3.2156862745098, size: 1 },\r\n // { x: 273.884892086331, y: 3.25490196078431, size: 1 },\r\n // { x: 274.532374100719, y: 3.29411764705882, size: 1 },\r\n // { x: 275.179856115108, y: 3.29411764705882, size: 1 },\r\n // { x: 275.827338129496, y: 3.17647058823529, size: 1 },\r\n // { x: 276.474820143885, y: 2.62745098039216, size: 1 },\r\n // { x: 277.122302158273, y: 3.09803921568627, size: 1 },\r\n // { x: 278.41726618705, y: 3.49019607843137, size: 1 },\r\n // { x: 281.007194244604, y: 3.33333333333333, size: 1 },\r\n // { x: 282.302158273381, y: 3.37254901960784, size: 1 },\r\n // { x: 284.244604316547, y: 3.29411764705882, size: 1 },\r\n // { x: 289.424460431655, y: 3.37254901960784, size: 1 },\r\n // { x: 291.36690647482, y: 3.49019607843137, size: 1 },\r\n // { x: 293.309352517986, y: 3.41176470588235, size: 1 },\r\n // { x: 293.956834532374, y: 3.49019607843137, size: 1 },\r\n // { x: 295.89928057554, y: 3.17647058823529, size: 1 },\r\n // { x: 296.546762589928, y: 3.17647058823529, size: 1 },\r\n // { x: 297.194244604317, y: 3.09803921568627, size: 1 },\r\n // { x: 297.841726618705, y: 2.3921568627451, size: 1 },\r\n // { x: 298.489208633094, y: 2.54901960784314, size: 1 },\r\n // { x: 299.784172661871, y: 3.52941176470588, size: 1 },\r\n // { x: 302.374100719424, y: 3.64705882352941, size: 1 },\r\n // { x: 304.964028776978, y: 3.84313725490196, size: 1 },\r\n // { x: 306.906474820144, y: 3.68627450980392, size: 1 },\r\n // { x: 307.553956834532, y: 3.68627450980392, size: 1 },\r\n // { x: 308.848920863309, y: 3.76470588235294, size: 1 },\r\n // { x: 312.086330935252, y: 3.84313725490196, size: 1 },\r\n // { x: 314.028776978417, y: 4, size: 1 },\r\n // { x: 317.26618705036, y: 3.37254901960784, size: 1 },\r\n // { x: 317.913669064748, y: 3.13725490196078, size: 1 },\r\n // { x: 319.208633093525, y: 2.47058823529412, size: 1 },\r\n // { x: 319.856115107914, y: 2.70588235294118, size: 1 },\r\n // { x: 321.151079136691, y: 3.49019607843137, size: 1 },\r\n // { x: 321.798561151079, y: 3.68627450980392, size: 1 },\r\n // { x: 322.446043165468, y: 3.80392156862745, size: 1 },\r\n // { x: 325.68345323741, y: 3.41176470588235, size: 1 },\r\n // { x: 326.330935251799, y: 3.88235294117647, size: 1 },\r\n // { x: 327.625899280576, y: 3.49019607843137, size: 1 },\r\n // { x: 330.215827338129, y: 3.64705882352941, size: 1 },\r\n // { x: 332.158273381295, y: 3.33333333333333, size: 1 },\r\n // { x: 332.805755395683, y: 3.64705882352941, size: 1 },\r\n // { x: 333.453237410072, y: 3.56862745098039, size: 1 },\r\n // { x: 335.395683453237, y: 3.52941176470588, size: 1 },\r\n // { x: 336.043165467626, y: 3.45098039215686, size: 1 },\r\n // { x: 336.690647482014, y: 3.49019607843137, size: 1 },\r\n // { x: 339.280575539568, y: 3.2156862745098, size: 1 },\r\n // { x: 340.575539568345, y: 3.17647058823529, size: 1 },\r\n // { x: 341.223021582734, y: 2.7843137254902, size: 1 },\r\n // { x: 341.870503597122, y: 3.45098039215686, size: 1 },\r\n // { x: 342.517985611511, y: 3.76470588235294, size: 1 },\r\n // { x: 343.812949640288, y: 3.49019607843137, size: 1 },\r\n // { x: 347.05035971223, y: 3.88235294117647, size: 1 },\r\n // { x: 348.345323741007, y: 3.72549019607843, size: 1 },\r\n // { x: 348.992805755396, y: 3.72549019607843, size: 1 },\r\n // { x: 350.287769784173, y: 3.56862745098039, size: 1 },\r\n // { x: 356.762589928058, y: 3.52941176470588, size: 1 },\r\n // { x: 358.057553956835, y: 3.64705882352941, size: 1 },\r\n // { x: 1.2972972972973, y: 3.09803921568627, size: 1 },\r\n // { x: 1.94594594594595, y: 3.09803921568627, size: 1 },\r\n // { x: 2.59459459459459, y: 1.68627450980392, size: 1 },\r\n // { x: 3.24324324324324, y: 1.84313725490196, size: 1 },\r\n // { x: 3.89189189189189, y: 3.56862745098039, size: 1 },\r\n // { x: 4.54054054054054, y: 3.64705882352941, size: 1 },\r\n // { x: 5.18918918918919, y: 3.45098039215686, size: 1 },\r\n // { x: 5.83783783783784, y: 3.84313725490196, size: 1 },\r\n // { x: 6.48648648648649, y: 3.49019607843137, size: 1 },\r\n // { x: 7.13513513513514, y: 3.64705882352941, size: 1 },\r\n // { x: 8.43243243243243, y: 3.64705882352941, size: 1 },\r\n // { x: 9.08108108108108, y: 3.6078431372549, size: 1 },\r\n // { x: 9.72972972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 10.3783783783784, y: 3.68627450980392, size: 1 },\r\n // { x: 12.3243243243243, y: 3.52941176470588, size: 1 },\r\n // { x: 12.972972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 15.5675675675676, y: 3.80392156862745, size: 1 },\r\n // { x: 16.2162162162162, y: 3.76470588235294, size: 1 },\r\n // { x: 16.8648648648649, y: 3.64705882352941, size: 1 },\r\n // { x: 17.5135135135135, y: 3.6078431372549, size: 1 },\r\n // { x: 18.1621621621622, y: 3.84313725490196, size: 1 },\r\n // { x: 18.8108108108108, y: 3.64705882352941, size: 1 },\r\n // { x: 19.4594594594595, y: 3.45098039215686, size: 1 },\r\n // { x: 20.7567567567568, y: 3.72549019607843, size: 1 },\r\n // { x: 22.0540540540541, y: 3.6078431372549, size: 1 },\r\n // { x: 22.7027027027027, y: 3.33333333333333, size: 1 },\r\n // { x: 23.3513513513514, y: 3.13725490196078, size: 1 },\r\n // { x: 24, y: 3.68627450980392, size: 1 },\r\n // { x: 24.6486486486486, y: 3.68627450980392, size: 1 },\r\n // { x: 25.2972972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 25.9459459459459, y: 3.64705882352941, size: 1 },\r\n // { x: 26.5945945945946, y: 3.84313725490196, size: 1 },\r\n // { x: 27.2432432432432, y: 3.52941176470588, size: 1 },\r\n // { x: 27.8918918918919, y: 3.52941176470588, size: 1 },\r\n // { x: 29.1891891891892, y: 3.6078431372549, size: 1 },\r\n // { x: 29.8378378378378, y: 3.80392156862745, size: 1 },\r\n // { x: 30.4864864864865, y: 3.64705882352941, size: 1 },\r\n // { x: 31.7837837837838, y: 3.49019607843137, size: 1 },\r\n // { x: 33.0810810810811, y: 3.76470588235294, size: 1 },\r\n // { x: 34.3783783783784, y: 3.72549019607843, size: 1 },\r\n // { x: 35.027027027027, y: 3.6078431372549, size: 1 },\r\n // { x: 36.3243243243243, y: 3.72549019607843, size: 1 },\r\n // { x: 36.972972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 37.6216216216216, y: 3.64705882352941, size: 1 },\r\n // { x: 38.2702702702703, y: 3.37254901960784, size: 1 },\r\n // { x: 38.9189189189189, y: 3.45098039215686, size: 1 },\r\n // { x: 39.5675675675676, y: 3.68627450980392, size: 1 },\r\n // { x: 40.2162162162162, y: 3.68627450980392, size: 1 },\r\n // { x: 40.8648648648649, y: 3.56862745098039, size: 1 },\r\n // { x: 42.8108108108108, y: 3.49019607843137, size: 1 },\r\n // { x: 44.1081081081081, y: 3.37254901960784, size: 1 },\r\n // { x: 45.4054054054054, y: 3.64705882352941, size: 1 },\r\n // { x: 46.0540540540541, y: 3.64705882352941, size: 1 },\r\n // { x: 46.7027027027027, y: 3.56862745098039, size: 1 },\r\n // { x: 47.3513513513514, y: 3.56862745098039, size: 1 },\r\n // { x: 48, y: 3.45098039215686, size: 1 },\r\n // { x: 48.6486486486486, y: 3.64705882352941, size: 1 },\r\n // { x: 49.2972972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 49.9459459459459, y: 3.52941176470588, size: 1 },\r\n // { x: 51.2432432432432, y: 3.52941176470588, size: 1 },\r\n // { x: 52.5405405405405, y: 3.41176470588235, size: 1 },\r\n // { x: 53.8378378378378, y: 3.52941176470588, size: 1 },\r\n // { x: 54.4864864864865, y: 3.49019607843137, size: 1 },\r\n // { x: 57.7297297297297, y: 3.45098039215686, size: 1 },\r\n // { x: 58.3783783783784, y: 3.64705882352941, size: 1 },\r\n // { x: 59.027027027027, y: 3.49019607843137, size: 1 },\r\n // { x: 60.3243243243243, y: 3.37254901960784, size: 1 },\r\n // { x: 61.6216216216216, y: 3.64705882352941, size: 1 },\r\n // { x: 62.2702702702703, y: 3.45098039215686, size: 1 },\r\n // { x: 62.9189189189189, y: 3.49019607843137, size: 1 },\r\n // { x: 63.5675675675676, y: 3.37254901960784, size: 1 },\r\n // { x: 64.2162162162162, y: 3.41176470588235, size: 1 },\r\n // { x: 65.5135135135135, y: 3.52941176470588, size: 1 },\r\n // { x: 66.1621621621622, y: 3.2156862745098, size: 1 },\r\n // { x: 66.8108108108108, y: 3.2156862745098, size: 1 },\r\n // { x: 67.4594594594595, y: 3.49019607843137, size: 1 },\r\n // { x: 68.1081081081081, y: 3.25490196078431, size: 1 },\r\n // { x: 68.7567567567568, y: 3.45098039215686, size: 1 },\r\n // { x: 69.4054054054054, y: 3.41176470588235, size: 1 },\r\n // { x: 70.054054054054, y: 3.80392156862745, size: 1 },\r\n // { x: 70.7027027027027, y: 3.41176470588235, size: 1 },\r\n // { x: 71.3513513513514, y: 3.56862745098039, size: 1 },\r\n // { x: 72, y: 3.72549019607843, size: 1 },\r\n // { x: 73.2972972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 74.5945945945946, y: 3.52941176470588, size: 1 },\r\n // { x: 75.2432432432432, y: 3.52941176470588, size: 1 },\r\n // { x: 75.8918918918919, y: 3.68627450980392, size: 1 },\r\n // { x: 76.5405405405405, y: 3.56862745098039, size: 1 },\r\n // { x: 77.1891891891892, y: 3.6078431372549, size: 1 },\r\n // { x: 77.8378378378378, y: 3.49019607843137, size: 1 },\r\n // { x: 78.4864864864865, y: 3.33333333333333, size: 1 },\r\n // { x: 79.1351351351351, y: 3.68627450980392, size: 1 },\r\n // { x: 80.4324324324324, y: 3.52941176470588, size: 1 },\r\n // { x: 81.0810810810811, y: 3.56862745098039, size: 1 },\r\n // { x: 82.3783783783784, y: 3.6078431372549, size: 1 },\r\n // { x: 83.027027027027, y: 3.45098039215686, size: 1 },\r\n // { x: 83.6756756756757, y: 3.92156862745098, size: 1 },\r\n // { x: 86.2702702702703, y: 3.6078431372549, size: 1 },\r\n // { x: 86.9189189189189, y: 3.25490196078431, size: 1 },\r\n // { x: 87.5675675675676, y: 3.45098039215686, size: 1 },\r\n // { x: 88.2162162162162, y: 3.17647058823529, size: 1 },\r\n // { x: 88.8648648648649, y: 3.56862745098039, size: 1 },\r\n // { x: 89.5135135135135, y: 3.76470588235294, size: 1 },\r\n // { x: 90.1621621621622, y: 3.56862745098039, size: 1 },\r\n // { x: 90.8108108108108, y: 3.88235294117647, size: 1 },\r\n // { x: 92.1081081081081, y: 3.84313725490196, size: 1 },\r\n // { x: 92.7567567567568, y: 3.49019607843137, size: 1 },\r\n // { x: 94.054054054054, y: 3.49019607843137, size: 1 },\r\n // { x: 94.7027027027027, y: 3.68627450980392, size: 1 },\r\n // { x: 96, y: 3.6078431372549, size: 1 },\r\n // { x: 97.945945945946, y: 3.56862745098039, size: 1 },\r\n // { x: 98.5945945945946, y: 3.84313725490196, size: 1 },\r\n // { x: 99.2432432432432, y: 3.64705882352941, size: 1 },\r\n // { x: 99.8918918918919, y: 3.52941176470588, size: 1 },\r\n // { x: 100.540540540541, y: 3.68627450980392, size: 1 },\r\n // { x: 101.189189189189, y: 3.80392156862745, size: 1 },\r\n // { x: 101.837837837838, y: 3.84313725490196, size: 1 },\r\n // { x: 102.486486486486, y: 3.64705882352941, size: 1 },\r\n // { x: 103.135135135135, y: 3.45098039215686, size: 1 },\r\n // { x: 104.432432432432, y: 3.49019607843137, size: 1 },\r\n // { x: 105.081081081081, y: 3.64705882352941, size: 1 },\r\n // { x: 106.378378378378, y: 3.64705882352941, size: 1 },\r\n // { x: 108.324324324324, y: 3.68627450980392, size: 1 },\r\n // { x: 109.621621621622, y: 3.56862745098039, size: 1 },\r\n // { x: 110.27027027027, y: 3.45098039215686, size: 1 },\r\n // { x: 110.918918918919, y: 3.17647058823529, size: 1 },\r\n // { x: 111.567567567568, y: 3.72549019607843, size: 1 },\r\n // { x: 112.216216216216, y: 3.37254901960784, size: 1 },\r\n // { x: 112.864864864865, y: 3.17647058823529, size: 1 },\r\n // { x: 113.513513513514, y: 3.29411764705882, size: 1 },\r\n // { x: 114.162162162162, y: 3.41176470588235, size: 1 },\r\n // { x: 114.810810810811, y: 3.33333333333333, size: 1 },\r\n // { x: 116.108108108108, y: 3.17647058823529, size: 1 },\r\n // { x: 117.405405405405, y: 3.52941176470588, size: 1 },\r\n // { x: 118.054054054054, y: 3.29411764705882, size: 1 },\r\n // { x: 118.702702702703, y: 3.29411764705882, size: 1 },\r\n // { x: 119.351351351351, y: 3.37254901960784, size: 1 },\r\n // { x: 120.648648648649, y: 3.56862745098039, size: 1 },\r\n // { x: 121.297297297297, y: 3.33333333333333, size: 1 },\r\n // { x: 122.594594594595, y: 3.09803921568627, size: 1 },\r\n // { x: 123.243243243243, y: 3.49019607843137, size: 1 },\r\n // { x: 123.891891891892, y: 3.29411764705882, size: 1 },\r\n // { x: 124.540540540541, y: 3.2156862745098, size: 1 },\r\n // { x: 125.189189189189, y: 3.29411764705882, size: 1 },\r\n // { x: 126.486486486486, y: 3.52941176470588, size: 1 },\r\n // { x: 127.135135135135, y: 3.56862745098039, size: 1 },\r\n // { x: 127.783783783784, y: 3.29411764705882, size: 1 },\r\n // { x: 128.432432432432, y: 3.37254901960784, size: 1 },\r\n // { x: 129.081081081081, y: 3.29411764705882, size: 1 },\r\n // { x: 129.72972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 130.378378378378, y: 3.05882352941176, size: 1 },\r\n // { x: 131.027027027027, y: 3.33333333333333, size: 1 },\r\n // { x: 131.675675675676, y: 3.52941176470588, size: 1 },\r\n // { x: 132.324324324324, y: 3.29411764705882, size: 1 },\r\n // { x: 132.972972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 133.621621621622, y: 3.33333333333333, size: 1 },\r\n // { x: 134.27027027027, y: 3.45098039215686, size: 1 },\r\n // { x: 134.918918918919, y: 3.37254901960784, size: 1 },\r\n // { x: 135.567567567568, y: 3.56862745098039, size: 1 },\r\n // { x: 136.864864864865, y: 3.49019607843137, size: 1 },\r\n // { x: 138.162162162162, y: 3.88235294117647, size: 1 },\r\n // { x: 139.459459459459, y: 3.52941176470588, size: 1 },\r\n // { x: 140.756756756757, y: 3.49019607843137, size: 1 },\r\n // { x: 141.405405405405, y: 3.72549019607843, size: 1 },\r\n // { x: 142.054054054054, y: 3.37254901960784, size: 1 },\r\n // { x: 142.702702702703, y: 3.49019607843137, size: 1 },\r\n // { x: 144.648648648649, y: 3.52941176470588, size: 1 },\r\n // { x: 145.297297297297, y: 3.52941176470588, size: 1 },\r\n // { x: 145.945945945946, y: 3.64705882352941, size: 1 },\r\n // { x: 146.594594594595, y: 3.76470588235294, size: 1 },\r\n // { x: 147.243243243243, y: 3.49019607843137, size: 1 },\r\n // { x: 147.891891891892, y: 3.41176470588235, size: 1 },\r\n // { x: 148.540540540541, y: 3.49019607843137, size: 1 },\r\n // { x: 149.189189189189, y: 3.49019607843137, size: 1 },\r\n // { x: 151.135135135135, y: 3.52941176470588, size: 1 },\r\n // { x: 152.432432432432, y: 3.52941176470588, size: 1 },\r\n // { x: 153.081081081081, y: 3.68627450980392, size: 1 },\r\n // { x: 153.72972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 154.378378378378, y: 3.76470588235294, size: 1 },\r\n // { x: 156.324324324324, y: 3.80392156862745, size: 1 },\r\n // { x: 158.27027027027, y: 3.52941176470588, size: 1 },\r\n // { x: 158.918918918919, y: 3.84313725490196, size: 1 },\r\n // { x: 159.567567567568, y: 3.80392156862745, size: 1 },\r\n // { x: 160.216216216216, y: 3.49019607843137, size: 1 },\r\n // { x: 162.162162162162, y: 3.84313725490196, size: 1 },\r\n // { x: 162.810810810811, y: 3.68627450980392, size: 1 },\r\n // { x: 163.459459459459, y: 3.80392156862745, size: 1 },\r\n // { x: 164.756756756757, y: 3.88235294117647, size: 1 },\r\n // { x: 166.054054054054, y: 3.80392156862745, size: 1 },\r\n // { x: 167.351351351351, y: 3.64705882352941, size: 1 },\r\n // { x: 168.648648648649, y: 3.56862745098039, size: 1 },\r\n // { x: 169.297297297297, y: 3.56862745098039, size: 1 },\r\n // { x: 171.243243243243, y: 3.45098039215686, size: 1 },\r\n // { x: 171.891891891892, y: 3.76470588235294, size: 1 },\r\n // { x: 172.540540540541, y: 3.52941176470588, size: 1 },\r\n // { x: 173.189189189189, y: 3.6078431372549, size: 1 },\r\n // { x: 173.837837837838, y: 3.76470588235294, size: 1 },\r\n // { x: 174.486486486486, y: 3.6078431372549, size: 1 },\r\n // { x: 175.135135135135, y: 3.84313725490196, size: 1 },\r\n // { x: 176.432432432432, y: 3.72549019607843, size: 1 },\r\n // { x: 177.081081081081, y: 3.68627450980392, size: 1 },\r\n // { x: 178.378378378378, y: 3.56862745098039, size: 1 },\r\n // { x: 179.027027027027, y: 3.49019607843137, size: 1 },\r\n // { x: 179.675675675676, y: 3.72549019607843, size: 1 },\r\n // { x: 180.324324324324, y: 3.64705882352941, size: 1 },\r\n // { x: 180.972972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 181.621621621622, y: 3.56862745098039, size: 1 },\r\n // { x: 182.27027027027, y: 3.41176470588235, size: 1 },\r\n // { x: 182.918918918919, y: 3.45098039215686, size: 1 },\r\n // { x: 183.567567567568, y: 3.49019607843137, size: 1 },\r\n // { x: 184.216216216216, y: 3.49019607843137, size: 1 },\r\n // { x: 184.864864864865, y: 3.6078431372549, size: 1 },\r\n // { x: 185.513513513514, y: 3.6078431372549, size: 1 },\r\n // { x: 186.810810810811, y: 3.52941176470588, size: 1 },\r\n // { x: 187.459459459459, y: 3.37254901960784, size: 1 },\r\n // { x: 188.108108108108, y: 3.49019607843137, size: 1 },\r\n // { x: 188.756756756757, y: 3.49019607843137, size: 1 },\r\n // { x: 189.405405405405, y: 3.80392156862745, size: 1 },\r\n // { x: 190.054054054054, y: 3.56862745098039, size: 1 },\r\n // { x: 190.702702702703, y: 3.6078431372549, size: 1 },\r\n // { x: 191.351351351351, y: 3.68627450980392, size: 1 },\r\n // { x: 192.648648648649, y: 3.68627450980392, size: 1 },\r\n // { x: 193.297297297297, y: 3.56862745098039, size: 1 },\r\n // { x: 193.945945945946, y: 3.45098039215686, size: 1 },\r\n // { x: 195.243243243243, y: 3.49019607843137, size: 1 },\r\n // { x: 196.540540540541, y: 3.52941176470588, size: 1 },\r\n // { x: 197.189189189189, y: 3.45098039215686, size: 1 },\r\n // { x: 199.135135135135, y: 3.64705882352941, size: 1 },\r\n // { x: 199.783783783784, y: 3.96078431372549, size: 1 },\r\n // { x: 200.432432432432, y: 3.68627450980392, size: 1 },\r\n // { x: 201.081081081081, y: 3.56862745098039, size: 1 },\r\n // { x: 201.72972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 202.378378378378, y: 3.80392156862745, size: 1 },\r\n // { x: 204.324324324324, y: 3.64705882352941, size: 1 },\r\n // { x: 204.972972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 206.27027027027, y: 3.56862745098039, size: 1 },\r\n // { x: 206.918918918919, y: 3.6078431372549, size: 1 },\r\n // { x: 207.567567567568, y: 3.72549019607843, size: 1 },\r\n // { x: 208.216216216216, y: 3.84313725490196, size: 1 },\r\n // { x: 208.864864864865, y: 3.52941176470588, size: 1 },\r\n // { x: 209.513513513514, y: 3.64705882352941, size: 1 },\r\n // { x: 210.162162162162, y: 3.64705882352941, size: 1 },\r\n // { x: 210.810810810811, y: 3.6078431372549, size: 1 },\r\n // { x: 211.459459459459, y: 3.49019607843137, size: 1 },\r\n // { x: 212.108108108108, y: 3.72549019607843, size: 1 },\r\n // { x: 212.756756756757, y: 3.6078431372549, size: 1 },\r\n // { x: 213.405405405405, y: 3.56862745098039, size: 1 },\r\n // { x: 214.054054054054, y: 3.52941176470588, size: 1 },\r\n // { x: 214.702702702703, y: 3.68627450980392, size: 1 },\r\n // { x: 215.351351351351, y: 3.45098039215686, size: 1 },\r\n // { x: 216, y: 3.68627450980392, size: 1 },\r\n // { x: 217.297297297297, y: 3.56862745098039, size: 1 },\r\n // { x: 218.594594594595, y: 3.56862745098039, size: 1 },\r\n // { x: 219.243243243243, y: 3.41176470588235, size: 1 },\r\n // { x: 219.891891891892, y: 3.68627450980392, size: 1 },\r\n // { x: 220.540540540541, y: 3.64705882352941, size: 1 },\r\n // { x: 222.486486486486, y: 3.64705882352941, size: 1 },\r\n // { x: 223.135135135135, y: 3.6078431372549, size: 1 },\r\n // { x: 223.783783783784, y: 3.56862745098039, size: 1 },\r\n // { x: 224.432432432432, y: 3.76470588235294, size: 1 },\r\n // { x: 225.72972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 227.675675675676, y: 3.6078431372549, size: 1 },\r\n // { x: 228.324324324324, y: 3.45098039215686, size: 1 },\r\n // { x: 228.972972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 229.621621621622, y: 3.72549019607843, size: 1 },\r\n // { x: 230.27027027027, y: 3.52941176470588, size: 1 },\r\n // { x: 231.567567567568, y: 3.84313725490196, size: 1 },\r\n // { x: 232.216216216216, y: 3.92156862745098, size: 1 },\r\n // { x: 233.513513513514, y: 3.64705882352941, size: 1 },\r\n // { x: 234.162162162162, y: 3.56862745098039, size: 1 },\r\n // { x: 234.810810810811, y: 3.6078431372549, size: 1 },\r\n // { x: 236.108108108108, y: 3.64705882352941, size: 1 },\r\n // { x: 237.405405405405, y: 3.64705882352941, size: 1 },\r\n // { x: 238.702702702703, y: 3.33333333333333, size: 1 },\r\n // { x: 239.351351351351, y: 3.2156862745098, size: 1 },\r\n // { x: 240, y: 3.25490196078431, size: 1 },\r\n // { x: 240.648648648649, y: 3.33333333333333, size: 1 },\r\n // { x: 241.297297297297, y: 3.2156862745098, size: 1 },\r\n // { x: 241.945945945946, y: 3.29411764705882, size: 1 },\r\n // { x: 242.594594594595, y: 3.45098039215686, size: 1 },\r\n // { x: 243.243243243243, y: 3.72549019607843, size: 1 },\r\n // { x: 243.891891891892, y: 3.72549019607843, size: 1 },\r\n // { x: 244.540540540541, y: 3.56862745098039, size: 1 },\r\n // { x: 245.837837837838, y: 3.6078431372549, size: 1 },\r\n // { x: 247.135135135135, y: 3.72549019607843, size: 1 },\r\n // { x: 249.081081081081, y: 3.76470588235294, size: 1 },\r\n // { x: 249.72972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 250.378378378378, y: 3.6078431372549, size: 1 },\r\n // { x: 251.027027027027, y: 3.68627450980392, size: 1 },\r\n // { x: 251.675675675676, y: 3.92156862745098, size: 1 },\r\n // { x: 252.972972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 253.621621621622, y: 3.72549019607843, size: 1 },\r\n // { x: 254.27027027027, y: 3.68627450980392, size: 1 },\r\n // { x: 254.918918918919, y: 3.80392156862745, size: 1 },\r\n // { x: 255.567567567568, y: 3.56862745098039, size: 1 },\r\n // { x: 256.216216216216, y: 3.72549019607843, size: 1 },\r\n // { x: 256.864864864865, y: 3.76470588235294, size: 1 },\r\n // { x: 257.513513513513, y: 3.64705882352941, size: 1 },\r\n // { x: 258.810810810811, y: 3.52941176470588, size: 1 },\r\n // { x: 260.108108108108, y: 3.80392156862745, size: 1 },\r\n // { x: 260.756756756757, y: 3.25490196078431, size: 1 },\r\n // { x: 261.405405405405, y: 3.33333333333333, size: 1 },\r\n // { x: 262.054054054054, y: 2.94117647058824, size: 1 },\r\n // { x: 262.702702702703, y: 3.17647058823529, size: 1 },\r\n // { x: 263.351351351351, y: 3.17647058823529, size: 1 },\r\n // { x: 264, y: 3.13725490196078, size: 1 },\r\n // { x: 264.648648648649, y: 3.41176470588235, size: 1 },\r\n // { x: 265.297297297297, y: 3.52941176470588, size: 1 },\r\n // { x: 265.945945945946, y: 3.6078431372549, size: 1 },\r\n // { x: 267.243243243243, y: 3.64705882352941, size: 1 },\r\n // { x: 268.540540540541, y: 3.45098039215686, size: 1 },\r\n // { x: 269.189189189189, y: 3.45098039215686, size: 1 },\r\n // { x: 270.486486486487, y: 3.56862745098039, size: 1 },\r\n // { x: 271.135135135135, y: 3.80392156862745, size: 1 },\r\n // { x: 271.783783783784, y: 3.33333333333333, size: 1 },\r\n // { x: 273.72972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 274.378378378378, y: 3.45098039215686, size: 1 },\r\n // { x: 275.027027027027, y: 3.56862745098039, size: 1 },\r\n // { x: 276.972972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 278.918918918919, y: 3.37254901960784, size: 1 },\r\n // { x: 279.567567567568, y: 3.45098039215686, size: 1 },\r\n // { x: 280.216216216216, y: 3.64705882352941, size: 1 },\r\n // { x: 281.513513513513, y: 3.45098039215686, size: 1 },\r\n // { x: 282.162162162162, y: 3.01960784313725, size: 1 },\r\n // { x: 282.810810810811, y: 3.17647058823529, size: 1 },\r\n // { x: 283.459459459459, y: 2.66666666666667, size: 1 },\r\n // { x: 284.108108108108, y: 2.98039215686275, size: 1 },\r\n // { x: 284.756756756757, y: 3.29411764705882, size: 1 },\r\n // { x: 285.405405405405, y: 2.54901960784314, size: 1 },\r\n // { x: 286.054054054054, y: 3.41176470588235, size: 1 },\r\n // { x: 286.702702702703, y: 3.33333333333333, size: 1 },\r\n // { x: 288, y: 3.6078431372549, size: 1 },\r\n // { x: 288.648648648649, y: 3.76470588235294, size: 1 },\r\n // { x: 289.945945945946, y: 3.56862745098039, size: 1 },\r\n // { x: 291.891891891892, y: 3.88235294117647, size: 1 },\r\n // { x: 293.189189189189, y: 3.64705882352941, size: 1 },\r\n // { x: 293.837837837838, y: 3.56862745098039, size: 1 },\r\n // { x: 294.486486486487, y: 3.76470588235294, size: 1 },\r\n // { x: 295.783783783784, y: 3.80392156862745, size: 1 },\r\n // { x: 296.432432432432, y: 3.52941176470588, size: 1 },\r\n // { x: 297.081081081081, y: 3.52941176470588, size: 1 },\r\n // { x: 299.675675675676, y: 3.72549019607843, size: 1 },\r\n // { x: 302.27027027027, y: 3.45098039215686, size: 1 },\r\n // { x: 302.918918918919, y: 3.76470588235294, size: 1 },\r\n // { x: 303.567567567568, y: 3.56862745098039, size: 1 },\r\n // { x: 304.216216216216, y: 3.41176470588235, size: 1 },\r\n // { x: 304.864864864865, y: 3.45098039215686, size: 1 },\r\n // { x: 305.513513513513, y: 3.45098039215686, size: 1 },\r\n // { x: 306.162162162162, y: 3.45098039215686, size: 1 },\r\n // { x: 306.810810810811, y: 3.41176470588235, size: 1 },\r\n // { x: 308.108108108108, y: 3.49019607843137, size: 1 },\r\n // { x: 308.756756756757, y: 3.41176470588235, size: 1 },\r\n // { x: 310.054054054054, y: 3.6078431372549, size: 1 },\r\n // { x: 310.702702702703, y: 3.52941176470588, size: 1 },\r\n // { x: 311.351351351351, y: 3.41176470588235, size: 1 },\r\n // { x: 312, y: 3.33333333333333, size: 1 },\r\n // { x: 312.648648648649, y: 3.72549019607843, size: 1 },\r\n // { x: 313.297297297297, y: 3.37254901960784, size: 1 },\r\n // { x: 313.945945945946, y: 3.37254901960784, size: 1 },\r\n // { x: 315.243243243243, y: 3.33333333333333, size: 1 },\r\n // { x: 315.891891891892, y: 3.33333333333333, size: 1 },\r\n // { x: 316.540540540541, y: 3.29411764705882, size: 1 },\r\n // { x: 317.189189189189, y: 3.37254901960784, size: 1 },\r\n // { x: 317.837837837838, y: 3.64705882352941, size: 1 },\r\n // { x: 318.486486486487, y: 3.52941176470588, size: 1 },\r\n // { x: 319.135135135135, y: 3.45098039215686, size: 1 },\r\n // { x: 319.783783783784, y: 3.6078431372549, size: 1 },\r\n // { x: 320.432432432432, y: 3.41176470588235, size: 1 },\r\n // { x: 321.081081081081, y: 3.84313725490196, size: 1 },\r\n // { x: 321.72972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 322.378378378378, y: 3.52941176470588, size: 1 },\r\n // { x: 323.675675675676, y: 3.52941176470588, size: 1 },\r\n // { x: 324.324324324324, y: 3.68627450980392, size: 1 },\r\n // { x: 324.972972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 325.621621621622, y: 3.72549019607843, size: 1 },\r\n // { x: 326.918918918919, y: 3.41176470588235, size: 1 },\r\n // { x: 327.567567567568, y: 3.41176470588235, size: 1 },\r\n // { x: 328.864864864865, y: 3.64705882352941, size: 1 },\r\n // { x: 330.810810810811, y: 3.72549019607843, size: 1 },\r\n // { x: 331.459459459459, y: 3.80392156862745, size: 1 },\r\n // { x: 332.108108108108, y: 3.52941176470588, size: 1 },\r\n // { x: 332.756756756757, y: 3.80392156862745, size: 1 },\r\n // { x: 333.405405405405, y: 3.72549019607843, size: 1 },\r\n // { x: 335.351351351351, y: 3.64705882352941, size: 1 },\r\n // { x: 336, y: 3.56862745098039, size: 1 },\r\n // { x: 336.648648648649, y: 3.56862745098039, size: 1 },\r\n // { x: 337.297297297297, y: 3.72549019607843, size: 1 },\r\n // { x: 337.945945945946, y: 3.68627450980392, size: 1 },\r\n // { x: 338.594594594595, y: 3.49019607843137, size: 1 },\r\n // { x: 339.243243243243, y: 3.56862745098039, size: 1 },\r\n // { x: 339.891891891892, y: 3.84313725490196, size: 1 },\r\n // { x: 340.540540540541, y: 3.29411764705882, size: 1 },\r\n // { x: 341.189189189189, y: 3.72549019607843, size: 1 },\r\n // { x: 341.837837837838, y: 3.56862745098039, size: 1 },\r\n // { x: 342.486486486487, y: 3.64705882352941, size: 1 },\r\n // { x: 345.081081081081, y: 3.72549019607843, size: 1 },\r\n // { x: 346.378378378378, y: 3.52941176470588, size: 1 },\r\n // { x: 347.675675675676, y: 3.25490196078431, size: 1 },\r\n // { x: 348.324324324324, y: 3.13725490196078, size: 1 },\r\n // { x: 348.972972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 349.621621621622, y: 3.01960784313725, size: 1 },\r\n // { x: 350.27027027027, y: 3.45098039215686, size: 1 },\r\n // { x: 350.918918918919, y: 3.33333333333333, size: 1 },\r\n // { x: 351.567567567568, y: 3.56862745098039, size: 1 },\r\n // { x: 352.216216216216, y: 3.6078431372549, size: 1 },\r\n // { x: 352.864864864865, y: 3.64705882352941, size: 1 },\r\n // { x: 353.513513513513, y: 3.72549019607843, size: 1 },\r\n // { x: 354.162162162162, y: 3.37254901960784, size: 1 },\r\n // { x: 354.810810810811, y: 3.6078431372549, size: 1 },\r\n // { x: 355.459459459459, y: 3.49019607843137, size: 1 },\r\n // { x: 356.108108108108, y: 3.41176470588235, size: 1 },\r\n // { x: 356.756756756757, y: 3.56862745098039, size: 1 },\r\n // { x: 357.405405405405, y: 3.52941176470588, size: 1 },\r\n // { x: 358.054054054054, y: 3.6078431372549, size: 1 },\r\n // { x: 358.702702702703, y: 4, size: 1 },\r\n // { x: 359.351351351351, y: 3.64705882352941, size: 1 },\r\n // { x: 1.29496402877698, y: 3.72549019607843, size: 1 },\r\n // { x: 1.94244604316547, y: 3.80392156862745, size: 1 },\r\n // { x: 5.8273381294964, y: 3.64705882352941, size: 1 },\r\n // { x: 6.47482014388489, y: 3.84313725490196, size: 1 },\r\n // { x: 7.76978417266187, y: 3.84313725490196, size: 1 },\r\n // { x: 10.3597122302158, y: 3.37254901960784, size: 1 },\r\n // { x: 12.3021582733813, y: 3.80392156862745, size: 1 },\r\n // { x: 13.5971223021583, y: 3.41176470588235, size: 1 },\r\n // { x: 16.8345323741007, y: 3.88235294117647, size: 1 },\r\n // { x: 18.1294964028777, y: 3.64705882352941, size: 1 },\r\n // { x: 21.3669064748201, y: 3.88235294117647, size: 1 },\r\n // { x: 23.9568345323741, y: 3.49019607843137, size: 1 },\r\n // { x: 25.2517985611511, y: 3.56862745098039, size: 1 },\r\n // { x: 25.8992805755396, y: 3.72549019607843, size: 1 },\r\n // { x: 27.1942446043165, y: 3.80392156862745, size: 1 },\r\n // { x: 31.0791366906475, y: 3.17647058823529, size: 1 },\r\n // { x: 31.726618705036, y: 3.2156862745098, size: 1 },\r\n // { x: 32.3741007194245, y: 3.17647058823529, size: 1 },\r\n // { x: 33.0215827338129, y: 3.68627450980392, size: 1 },\r\n // { x: 33.6690647482014, y: 3.88235294117647, size: 1 },\r\n // { x: 34.9640287769784, y: 3.6078431372549, size: 1 },\r\n // { x: 36.2589928057554, y: 3.76470588235294, size: 1 },\r\n // { x: 39.4964028776978, y: 3.92156862745098, size: 1 },\r\n // { x: 41.4388489208633, y: 3.56862745098039, size: 1 },\r\n // { x: 42.0863309352518, y: 3.76470588235294, size: 1 },\r\n // { x: 42.7338129496403, y: 3.72549019607843, size: 1 },\r\n // { x: 44.6762589928058, y: 3.92156862745098, size: 1 },\r\n // { x: 45.3237410071942, y: 3.84313725490196, size: 1 },\r\n // { x: 46.6187050359712, y: 3.72549019607843, size: 1 },\r\n // { x: 48.5611510791367, y: 3.88235294117647, size: 1 },\r\n // { x: 53.0935251798561, y: 3.49019607843137, size: 1 },\r\n // { x: 53.7410071942446, y: 3.45098039215686, size: 1 },\r\n // { x: 60.863309352518, y: 3.72549019607843, size: 1 },\r\n // { x: 62.8057553956835, y: 3.80392156862745, size: 1 },\r\n // { x: 63.4532374100719, y: 3.64705882352941, size: 1 },\r\n // { x: 64.1007194244604, y: 3.41176470588235, size: 1 },\r\n // { x: 65.3956834532374, y: 3.68627450980392, size: 1 },\r\n // { x: 67.9856115107914, y: 3.76470588235294, size: 1 },\r\n // { x: 69.9280575539568, y: 3.76470588235294, size: 1 },\r\n // { x: 76.4028776978417, y: 3.41176470588235, size: 1 },\r\n // { x: 77.6978417266187, y: 3.68627450980392, size: 1 },\r\n // { x: 80.9352517985612, y: 3.68627450980392, size: 1 },\r\n // { x: 82.8776978417266, y: 3.80392156862745, size: 1 },\r\n // { x: 84.8201438848921, y: 3.64705882352941, size: 1 },\r\n // { x: 85.4676258992806, y: 3.45098039215686, size: 1 },\r\n // { x: 86.7625899280576, y: 3.88235294117647, size: 1 },\r\n // { x: 88.0575539568345, y: 3.76470588235294, size: 1 },\r\n // { x: 91.294964028777, y: 3.64705882352941, size: 1 },\r\n // { x: 91.9424460431655, y: 3.52941176470588, size: 1 },\r\n // { x: 93.8848920863309, y: 3.56862745098039, size: 1 },\r\n // { x: 94.5323741007194, y: 3.37254901960784, size: 1 },\r\n // { x: 96.4748201438849, y: 3.45098039215686, size: 1 },\r\n // { x: 97.7697841726619, y: 3.64705882352941, size: 1 },\r\n // { x: 99.7122302158273, y: 3.52941176470588, size: 1 },\r\n // { x: 101.007194244604, y: 3.52941176470588, size: 1 },\r\n // { x: 102.94964028777, y: 3.56862745098039, size: 1 },\r\n // { x: 103.597122302158, y: 3.52941176470588, size: 1 },\r\n // { x: 104.244604316547, y: 3.6078431372549, size: 1 },\r\n // { x: 104.892086330935, y: 3.49019607843137, size: 1 },\r\n // { x: 107.482014388489, y: 3.92156862745098, size: 1 },\r\n // { x: 110.071942446043, y: 3.45098039215686, size: 1 },\r\n // { x: 111.36690647482, y: 3.64705882352941, size: 1 },\r\n // { x: 112.661870503597, y: 3.72549019607843, size: 1 },\r\n // { x: 113.956834532374, y: 3.45098039215686, size: 1 },\r\n // { x: 114.604316546763, y: 3.56862745098039, size: 1 },\r\n // { x: 115.251798561151, y: 3.37254901960784, size: 1 },\r\n // { x: 115.89928057554, y: 3.45098039215686, size: 1 },\r\n // { x: 117.841726618705, y: 3.09803921568627, size: 1 },\r\n // { x: 118.489208633094, y: 2.94117647058824, size: 1 },\r\n // { x: 119.136690647482, y: 3.45098039215686, size: 1 },\r\n // { x: 120.431654676259, y: 3.37254901960784, size: 1 },\r\n // { x: 121.726618705036, y: 3.41176470588235, size: 1 },\r\n // { x: 123.669064748201, y: 3.76470588235294, size: 1 },\r\n // { x: 124.31654676259, y: 3.6078431372549, size: 1 },\r\n // { x: 126.258992805755, y: 3.37254901960784, size: 1 },\r\n // { x: 128.201438848921, y: 3.72549019607843, size: 1 },\r\n // { x: 128.848920863309, y: 3.33333333333333, size: 1 },\r\n // { x: 130.791366906475, y: 3.52941176470588, size: 1 },\r\n // { x: 132.73381294964, y: 3.72549019607843, size: 1 },\r\n // { x: 133.381294964029, y: 3.45098039215686, size: 1 },\r\n // { x: 136.618705035971, y: 3.64705882352941, size: 1 },\r\n // { x: 137.26618705036, y: 3.56862745098039, size: 1 },\r\n // { x: 139.208633093525, y: 3.49019607843137, size: 1 },\r\n // { x: 139.856115107914, y: 3.13725490196078, size: 1 },\r\n // { x: 140.503597122302, y: 3.09803921568627, size: 1 },\r\n // { x: 141.151079136691, y: 2.94117647058824, size: 1 },\r\n // { x: 141.798561151079, y: 2.86274509803922, size: 1 },\r\n // { x: 142.446043165468, y: 3.80392156862745, size: 1 },\r\n // { x: 147.625899280576, y: 3.84313725490196, size: 1 },\r\n // { x: 150.215827338129, y: 3.49019607843137, size: 1 },\r\n // { x: 150.863309352518, y: 3.72549019607843, size: 1 },\r\n // { x: 155.395683453237, y: 3.72549019607843, size: 1 },\r\n // { x: 156.043165467626, y: 3.68627450980392, size: 1 },\r\n // { x: 157.338129496403, y: 3.84313725490196, size: 1 },\r\n // { x: 160.575539568345, y: 3.49019607843137, size: 1 },\r\n // { x: 161.870503597122, y: 3.6078431372549, size: 1 },\r\n // { x: 162.517985611511, y: 3.64705882352941, size: 1 },\r\n // { x: 165.107913669065, y: 3.80392156862745, size: 1 },\r\n // { x: 167.05035971223, y: 3.56862745098039, size: 1 },\r\n // { x: 167.697841726619, y: 3.68627450980392, size: 1 },\r\n // { x: 168.345323741007, y: 3.6078431372549, size: 1 },\r\n // { x: 170.287769784173, y: 3.92156862745098, size: 1 },\r\n // { x: 174.172661870504, y: 3.64705882352941, size: 1 },\r\n // { x: 175.467625899281, y: 3.84313725490196, size: 1 },\r\n // { x: 176.115107913669, y: 4.03921568627451, size: 1 },\r\n // { x: 177.410071942446, y: 3.80392156862745, size: 1 },\r\n // { x: 178.057553956835, y: 4, size: 1 },\r\n // { x: 180.647482014388, y: 3.6078431372549, size: 1 },\r\n // { x: 181.294964028777, y: 3.33333333333333, size: 1 },\r\n // { x: 181.942446043165, y: 3.6078431372549, size: 1 },\r\n // { x: 184.532374100719, y: 3.17647058823529, size: 1 },\r\n // { x: 185.179856115108, y: 3.25490196078431, size: 1 },\r\n // { x: 187.122302158273, y: 3.33333333333333, size: 1 },\r\n // { x: 189.064748201439, y: 3.76470588235294, size: 1 },\r\n // { x: 191.654676258993, y: 3.41176470588235, size: 1 },\r\n // { x: 192.94964028777, y: 3.52941176470588, size: 1 },\r\n // { x: 197.482014388489, y: 3.80392156862745, size: 1 },\r\n // { x: 198.776978417266, y: 3.56862745098039, size: 1 },\r\n // { x: 205.89928057554, y: 3.56862745098039, size: 1 },\r\n // { x: 206.546762589928, y: 3.49019607843137, size: 1 },\r\n // { x: 208.489208633094, y: 3.49019607843137, size: 1 },\r\n // { x: 209.784172661871, y: 3.80392156862745, size: 1 },\r\n // { x: 212.374100719424, y: 3.84313725490196, size: 1 },\r\n // { x: 214.964028776978, y: 3.6078431372549, size: 1 },\r\n // { x: 215.611510791367, y: 3.68627450980392, size: 1 },\r\n // { x: 216.258992805755, y: 3.52941176470588, size: 1 },\r\n // { x: 216.906474820144, y: 3.72549019607843, size: 1 },\r\n // { x: 219.496402877698, y: 3.52941176470588, size: 1 },\r\n // { x: 222.73381294964, y: 3.37254901960784, size: 1 },\r\n // { x: 223.381294964029, y: 3.72549019607843, size: 1 },\r\n // { x: 224.676258992806, y: 3.09803921568627, size: 1 },\r\n // { x: 225.971223021583, y: 2.3921568627451, size: 1 },\r\n // { x: 226.618705035971, y: 2.15686274509804, size: 1 },\r\n // { x: 227.26618705036, y: 2.50980392156863, size: 1 },\r\n // { x: 227.913669064748, y: 2.66666666666667, size: 1 },\r\n // { x: 230.503597122302, y: 3.68627450980392, size: 1 },\r\n // { x: 233.093525179856, y: 3.76470588235294, size: 1 },\r\n // { x: 235.68345323741, y: 3.68627450980392, size: 1 },\r\n // { x: 240.863309352518, y: 3.84313725490196, size: 1 },\r\n // { x: 242.158273381295, y: 3.80392156862745, size: 1 },\r\n // { x: 244.10071942446, y: 3.52941176470588, size: 1 },\r\n // { x: 244.748201438849, y: 3.52941176470588, size: 1 },\r\n // { x: 246.043165467626, y: 3.2156862745098, size: 1 },\r\n // { x: 246.690647482014, y: 3.29411764705882, size: 1 },\r\n // { x: 247.338129496403, y: 2.82352941176471, size: 1 },\r\n // { x: 247.985611510791, y: 2.7843137254902, size: 1 },\r\n // { x: 249.280575539568, y: 3.45098039215686, size: 1 },\r\n // { x: 251.870503597122, y: 3.37254901960784, size: 1 },\r\n // { x: 253.812949640288, y: 3.49019607843137, size: 1 },\r\n // { x: 257.05035971223, y: 3.6078431372549, size: 1 },\r\n // { x: 258.992805755396, y: 3.52941176470588, size: 1 },\r\n // { x: 262.230215827338, y: 3.56862745098039, size: 1 },\r\n // { x: 264.172661870504, y: 3.41176470588235, size: 1 },\r\n // { x: 265.467625899281, y: 3.25490196078431, size: 1 },\r\n // { x: 274.532374100719, y: 3.49019607843137, size: 1 },\r\n // { x: 275.179856115108, y: 3.68627450980392, size: 1 },\r\n // { x: 275.827338129496, y: 3.76470588235294, size: 1 },\r\n // { x: 276.474820143885, y: 3.49019607843137, size: 1 },\r\n // { x: 277.122302158273, y: 3.49019607843137, size: 1 },\r\n // { x: 278.41726618705, y: 3.84313725490196, size: 1 },\r\n // { x: 279.712230215827, y: 3.80392156862745, size: 1 },\r\n // { x: 281.007194244604, y: 3.45098039215686, size: 1 },\r\n // { x: 282.94964028777, y: 3.64705882352941, size: 1 },\r\n // { x: 283.597122302158, y: 3.72549019607843, size: 1 },\r\n // { x: 285.539568345324, y: 3.68627450980392, size: 1 },\r\n // { x: 286.834532374101, y: 3.72549019607843, size: 1 },\r\n // { x: 290.719424460432, y: 3.01960784313725, size: 1 },\r\n // { x: 291.36690647482, y: 3.09803921568627, size: 1 },\r\n // { x: 292.661870503597, y: 3.6078431372549, size: 1 },\r\n // { x: 295.89928057554, y: 3.76470588235294, size: 1 },\r\n // { x: 296.546762589928, y: 3.72549019607843, size: 1 },\r\n // { x: 297.194244604317, y: 3.88235294117647, size: 1 },\r\n // { x: 297.841726618705, y: 3.45098039215686, size: 1 },\r\n // { x: 299.136690647482, y: 3.6078431372549, size: 1 },\r\n // { x: 300.431654676259, y: 3.52941176470588, size: 1 },\r\n // { x: 303.021582733813, y: 3.68627450980392, size: 1 },\r\n // { x: 306.258992805755, y: 3.72549019607843, size: 1 },\r\n // { x: 306.906474820144, y: 3.72549019607843, size: 1 },\r\n // { x: 310.791366906475, y: 3.72549019607843, size: 1 },\r\n // { x: 311.438848920863, y: 3.41176470588235, size: 1 },\r\n // { x: 312.086330935252, y: 3.49019607843137, size: 1 },\r\n // { x: 312.73381294964, y: 3.37254901960784, size: 1 },\r\n // { x: 313.381294964029, y: 3.52941176470588, size: 1 },\r\n // { x: 314.028776978417, y: 3.45098039215686, size: 1 },\r\n // { x: 317.26618705036, y: 3.88235294117647, size: 1 },\r\n // { x: 319.856115107914, y: 3.45098039215686, size: 1 },\r\n // { x: 321.798561151079, y: 3.37254901960784, size: 1 },\r\n // { x: 323.093525179856, y: 3.41176470588235, size: 1 },\r\n // { x: 324.388489208633, y: 3.52941176470588, size: 1 },\r\n // { x: 326.330935251799, y: 3.25490196078431, size: 1 },\r\n // { x: 326.978417266187, y: 3.64705882352941, size: 1 },\r\n // { x: 330.863309352518, y: 3.49019607843137, size: 1 },\r\n // { x: 332.805755395683, y: 3.29411764705882, size: 1 },\r\n // { x: 333.453237410072, y: 3.41176470588235, size: 1 },\r\n // { x: 334.748201438849, y: 3.2156862745098, size: 1 },\r\n // { x: 339.928057553957, y: 3.72549019607843, size: 1 },\r\n // { x: 341.870503597122, y: 3.49019607843137, size: 1 },\r\n // { x: 347.05035971223, y: 3.56862745098039, size: 1 },\r\n // { x: 350.287769784173, y: 3.41176470588235, size: 1 },\r\n // { x: 351.58273381295, y: 3.29411764705882, size: 1 },\r\n // { x: 352.877697841727, y: 3.6078431372549, size: 1 },\r\n // { x: 355.467625899281, y: 3.33333333333333, size: 1 },\r\n // { x: 359.352517985611, y: 3.41176470588235, size: 1 },\r\n // { x: 0, y: 3.80392156862745, size: 1 },\r\n // { x: 3.23741007194245, y: 3.37254901960784, size: 1 },\r\n // { x: 4.53237410071942, y: 3.41176470588235, size: 1 },\r\n // { x: 7.12230215827338, y: 3.49019607843137, size: 1 },\r\n // { x: 11.0071942446043, y: 3.41176470588235, size: 1 },\r\n // { x: 14.8920863309353, y: 3.37254901960784, size: 1 },\r\n // { x: 15.5395683453237, y: 3.6078431372549, size: 1 },\r\n // { x: 16.8345323741007, y: 3.01960784313725, size: 1 },\r\n // { x: 17.4820143884892, y: 3.05882352941176, size: 1 },\r\n // { x: 18.1294964028777, y: 3.17647058823529, size: 1 },\r\n // { x: 18.7769784172662, y: 3.25490196078431, size: 1 },\r\n // { x: 20.0719424460432, y: 3.45098039215686, size: 1 },\r\n // { x: 20.7194244604317, y: 3.45098039215686, size: 1 },\r\n // { x: 22.6618705035971, y: 3.45098039215686, size: 1 },\r\n // { x: 23.9568345323741, y: 3.41176470588235, size: 1 },\r\n // { x: 26.5467625899281, y: 3.49019607843137, size: 1 },\r\n // { x: 39.4964028776978, y: 3.29411764705882, size: 1 },\r\n // { x: 40.1438848920863, y: 3.25490196078431, size: 1 },\r\n // { x: 40.7913669064748, y: 3.25490196078431, size: 1 },\r\n // { x: 42.0863309352518, y: 3.2156862745098, size: 1 },\r\n // { x: 42.7338129496403, y: 3.2156862745098, size: 1 },\r\n // { x: 44.6762589928058, y: 3.37254901960784, size: 1 },\r\n // { x: 45.3237410071942, y: 3.2156862745098, size: 1 },\r\n // { x: 47.2661870503597, y: 3.37254901960784, size: 1 },\r\n // { x: 48.5611510791367, y: 3.29411764705882, size: 1 },\r\n // { x: 49.8561151079137, y: 3.2156862745098, size: 1 },\r\n // { x: 51.1510791366906, y: 3.13725490196078, size: 1 },\r\n // { x: 51.7985611510791, y: 3.17647058823529, size: 1 },\r\n // { x: 52.4460431654676, y: 3.41176470588235, size: 1 },\r\n // { x: 53.0935251798561, y: 3.41176470588235, size: 1 },\r\n // { x: 55.6834532374101, y: 3.41176470588235, size: 1 },\r\n // { x: 56.3309352517986, y: 3.25490196078431, size: 1 },\r\n // { x: 57.6258992805755, y: 3.29411764705882, size: 1 },\r\n // { x: 60.863309352518, y: 3.41176470588235, size: 1 },\r\n // { x: 64.7482014388489, y: 3.41176470588235, size: 1 },\r\n // { x: 66.0431654676259, y: 3.45098039215686, size: 1 },\r\n // { x: 67.3381294964029, y: 3.25490196078431, size: 1 },\r\n // { x: 68.6330935251799, y: 3.29411764705882, size: 1 },\r\n // { x: 69.9280575539568, y: 3.49019607843137, size: 1 },\r\n // { x: 70.5755395683453, y: 3.80392156862745, size: 1 },\r\n // { x: 71.2230215827338, y: 3.52941176470588, size: 1 },\r\n // { x: 72.5179856115108, y: 3.41176470588235, size: 1 },\r\n // { x: 75.1079136690647, y: 3.49019607843137, size: 1 },\r\n // { x: 76.4028776978417, y: 3.68627450980392, size: 1 },\r\n // { x: 77.6978417266187, y: 3.41176470588235, size: 1 },\r\n // { x: 79.6402877697842, y: 3.56862745098039, size: 1 },\r\n // { x: 81.5827338129496, y: 3.29411764705882, size: 1 },\r\n // { x: 82.2302158273381, y: 2.90196078431373, size: 1 },\r\n // { x: 82.8776978417266, y: 3.25490196078431, size: 1 },\r\n // { x: 86.1151079136691, y: 3.92156862745098, size: 1 },\r\n // { x: 91.294964028777, y: 4.03921568627451, size: 1 },\r\n // { x: 91.9424460431655, y: 3.92156862745098, size: 1 },\r\n // { x: 93.8848920863309, y: 3.92156862745098, size: 1 },\r\n // { x: 95.8273381294964, y: 3.68627450980392, size: 1 },\r\n // { x: 96.4748201438849, y: 3.49019607843137, size: 1 },\r\n // { x: 100.359712230216, y: 3.80392156862745, size: 1 },\r\n // { x: 101.654676258993, y: 3.41176470588235, size: 1 },\r\n // { x: 102.94964028777, y: 3.72549019607843, size: 1 },\r\n // { x: 105.539568345324, y: 3.64705882352941, size: 1 },\r\n // { x: 106.187050359712, y: 3.45098039215686, size: 1 },\r\n // { x: 107.482014388489, y: 3.52941176470588, size: 1 },\r\n // { x: 108.129496402878, y: 3.41176470588235, size: 1 },\r\n // { x: 110.071942446043, y: 3.52941176470588, size: 1 },\r\n // { x: 110.719424460432, y: 3.45098039215686, size: 1 },\r\n // { x: 117.841726618705, y: 3.72549019607843, size: 1 },\r\n // { x: 118.489208633094, y: 3.56862745098039, size: 1 },\r\n // { x: 120.431654676259, y: 3.64705882352941, size: 1 },\r\n // { x: 121.079136690647, y: 3.64705882352941, size: 1 },\r\n // { x: 122.374100719424, y: 3.84313725490196, size: 1 },\r\n // { x: 125.611510791367, y: 3.29411764705882, size: 1 },\r\n // { x: 133.381294964029, y: 3.72549019607843, size: 1 },\r\n // { x: 137.913669064748, y: 3.56862745098039, size: 1 },\r\n // { x: 139.208633093525, y: 3.68627450980392, size: 1 },\r\n // { x: 140.503597122302, y: 3.6078431372549, size: 1 },\r\n // { x: 141.151079136691, y: 3.33333333333333, size: 1 },\r\n // { x: 142.446043165468, y: 3.41176470588235, size: 1 },\r\n // { x: 146.330935251799, y: 3.25490196078431, size: 1 },\r\n // { x: 146.978417266187, y: 3.33333333333333, size: 1 },\r\n // { x: 147.625899280576, y: 3.37254901960784, size: 1 },\r\n // { x: 148.273381294964, y: 3.13725490196078, size: 1 },\r\n // { x: 148.920863309353, y: 3.17647058823529, size: 1 },\r\n // { x: 149.568345323741, y: 3.64705882352941, size: 1 },\r\n // { x: 150.863309352518, y: 3.76470588235294, size: 1 },\r\n // { x: 152.158273381295, y: 3.52941176470588, size: 1 },\r\n // { x: 153.453237410072, y: 3.72549019607843, size: 1 },\r\n // { x: 155.395683453237, y: 3.49019607843137, size: 1 },\r\n // { x: 156.043165467626, y: 3.49019607843137, size: 1 },\r\n // { x: 156.690647482014, y: 3.68627450980392, size: 1 },\r\n // { x: 157.338129496403, y: 3.45098039215686, size: 1 },\r\n // { x: 162.517985611511, y: 3.49019607843137, size: 1 },\r\n // { x: 163.812949640288, y: 3.41176470588235, size: 1 },\r\n // { x: 165.755395683453, y: 3.92156862745098, size: 1 },\r\n // { x: 166.402877697842, y: 3.33333333333333, size: 1 },\r\n // { x: 167.05035971223, y: 3.25490196078431, size: 1 },\r\n // { x: 167.697841726619, y: 3.01960784313725, size: 1 },\r\n // { x: 168.345323741007, y: 3.05882352941176, size: 1 },\r\n // { x: 169.640287769784, y: 2.94117647058824, size: 1 },\r\n // { x: 170.287769784173, y: 2.58823529411765, size: 1 },\r\n // { x: 170.935251798561, y: 3.49019607843137, size: 1 },\r\n // { x: 172.877697841727, y: 3.49019607843137, size: 1 },\r\n // { x: 176.115107913669, y: 3.84313725490196, size: 1 },\r\n // { x: 178.057553956835, y: 3.56862745098039, size: 1 },\r\n // { x: 180.647482014388, y: 3.80392156862745, size: 1 },\r\n // { x: 182.589928057554, y: 3.76470588235294, size: 1 },\r\n // { x: 187.122302158273, y: 3.45098039215686, size: 1 },\r\n // { x: 189.064748201439, y: 3.25490196078431, size: 1 },\r\n // { x: 190.359712230216, y: 3.05882352941176, size: 1 },\r\n // { x: 191.007194244604, y: 3.2156862745098, size: 1 },\r\n // { x: 191.654676258993, y: 3.29411764705882, size: 1 },\r\n // { x: 192.302158273381, y: 3.84313725490196, size: 1 },\r\n // { x: 193.597122302158, y: 3.96078431372549, size: 1 },\r\n // { x: 194.892086330935, y: 3.80392156862745, size: 1 },\r\n // { x: 197.482014388489, y: 3.52941176470588, size: 1 },\r\n // { x: 200.071942446043, y: 3.88235294117647, size: 1 },\r\n // { x: 203.956834532374, y: 3.96078431372549, size: 1 },\r\n // { x: 209.784172661871, y: 3.13725490196078, size: 1 },\r\n // { x: 210.431654676259, y: 3.41176470588235, size: 1 },\r\n // { x: 211.726618705036, y: 2.82352941176471, size: 1 },\r\n // { x: 212.374100719424, y: 2.90196078431373, size: 1 },\r\n // { x: 213.021582733813, y: 2.94117647058824, size: 1 },\r\n // { x: 216.258992805755, y: 3.76470588235294, size: 1 },\r\n // { x: 217.553956834532, y: 3.41176470588235, size: 1 },\r\n // { x: 218.848920863309, y: 3.6078431372549, size: 1 },\r\n // { x: 221.438848920863, y: 3.6078431372549, size: 1 },\r\n // { x: 224.676258992806, y: 3.52941176470588, size: 1 },\r\n // { x: 225.323741007194, y: 3.68627450980392, size: 1 },\r\n // { x: 228.561151079137, y: 3.6078431372549, size: 1 },\r\n // { x: 231.151079136691, y: 3.64705882352941, size: 1 },\r\n // { x: 233.741007194245, y: 3.2156862745098, size: 1 },\r\n // { x: 234.388489208633, y: 3.56862745098039, size: 1 },\r\n // { x: 235.68345323741, y: 3.49019607843137, size: 1 },\r\n // { x: 236.978417266187, y: 3.68627450980392, size: 1 },\r\n // { x: 242.805755395683, y: 3.49019607843137, size: 1 },\r\n // { x: 243.453237410072, y: 3.76470588235294, size: 1 },\r\n // { x: 247.338129496403, y: 3.68627450980392, size: 1 },\r\n // { x: 252.517985611511, y: 3.56862745098039, size: 1 },\r\n // { x: 255.107913669065, y: 3.68627450980392, size: 1 },\r\n // { x: 257.697841726619, y: 3.72549019607843, size: 1 },\r\n // { x: 261.58273381295, y: 3.80392156862745, size: 1 },\r\n // { x: 262.877697841727, y: 3.88235294117647, size: 1 },\r\n // { x: 264.172661870504, y: 3.45098039215686, size: 1 },\r\n // { x: 266.115107913669, y: 3.84313725490196, size: 1 },\r\n // { x: 268.057553956835, y: 3.68627450980392, size: 1 },\r\n // { x: 270, y: 3.84313725490196, size: 1 },\r\n // { x: 271.294964028777, y: 3.88235294117647, size: 1 },\r\n // { x: 273.884892086331, y: 3.49019607843137, size: 1 },\r\n // { x: 274.532374100719, y: 3.41176470588235, size: 1 },\r\n // { x: 275.179856115108, y: 3.41176470588235, size: 1 },\r\n // { x: 275.827338129496, y: 3.37254901960784, size: 1 },\r\n // { x: 277.122302158273, y: 3.37254901960784, size: 1 },\r\n // { x: 279.064748201439, y: 3.2156862745098, size: 1 },\r\n // { x: 279.712230215827, y: 3.49019607843137, size: 1 },\r\n // { x: 280.359712230216, y: 3.33333333333333, size: 1 },\r\n // { x: 281.007194244604, y: 3.41176470588235, size: 1 },\r\n // { x: 283.597122302158, y: 3.37254901960784, size: 1 },\r\n // { x: 284.244604316547, y: 3.41176470588235, size: 1 },\r\n // { x: 286.187050359712, y: 3.49019607843137, size: 1 },\r\n // { x: 286.834532374101, y: 3.41176470588235, size: 1 },\r\n // { x: 292.661870503597, y: 3.52941176470588, size: 1 },\r\n // { x: 293.956834532374, y: 3.41176470588235, size: 1 },\r\n // { x: 294.604316546763, y: 3.29411764705882, size: 1 },\r\n // { x: 297.194244604317, y: 3.92156862745098, size: 1 },\r\n // { x: 298.489208633094, y: 3.80392156862745, size: 1 },\r\n // { x: 301.079136690647, y: 3.72549019607843, size: 1 },\r\n // { x: 305.611510791367, y: 3.56862745098039, size: 1 },\r\n // { x: 307.553956834532, y: 3.6078431372549, size: 1 },\r\n // { x: 308.848920863309, y: 4, size: 1 },\r\n // { x: 312.73381294964, y: 3.76470588235294, size: 1 },\r\n // { x: 313.381294964029, y: 3.84313725490196, size: 1 },\r\n // { x: 314.676258992806, y: 3.72549019607843, size: 1 },\r\n // { x: 315.323741007194, y: 3.52941176470588, size: 1 },\r\n // { x: 317.26618705036, y: 3.52941176470588, size: 1 },\r\n // { x: 319.208633093525, y: 3.29411764705882, size: 1 },\r\n // { x: 320.503597122302, y: 3.33333333333333, size: 1 },\r\n // { x: 322.446043165468, y: 3.41176470588235, size: 1 },\r\n // { x: 325.035971223022, y: 3.33333333333333, size: 1 },\r\n // { x: 332.158273381295, y: 3.41176470588235, size: 1 },\r\n // { x: 333.453237410072, y: 3.45098039215686, size: 1 },\r\n // { x: 334.10071942446, y: 3.41176470588235, size: 1 },\r\n // { x: 335.395683453237, y: 3.68627450980392, size: 1 },\r\n // { x: 337.985611510791, y: 3.68627450980392, size: 1 },\r\n // { x: 341.223021582734, y: 3.29411764705882, size: 1 },\r\n // { x: 341.870503597122, y: 3.76470588235294, size: 1 },\r\n // { x: 342.517985611511, y: 3.80392156862745, size: 1 },\r\n // { x: 343.165467625899, y: 3.80392156862745, size: 1 },\r\n // { x: 343.812949640288, y: 3.64705882352941, size: 1 },\r\n // { x: 345.107913669065, y: 3.64705882352941, size: 1 },\r\n // { x: 347.697841726619, y: 3.6078431372549, size: 1 },\r\n // { x: 348.345323741007, y: 3.92156862745098, size: 1 },\r\n // { x: 348.992805755396, y: 4, size: 1 },\r\n // { x: 353.525179856115, y: 3.84313725490196, size: 1 },\r\n // { x: 357.410071942446, y: 3.72549019607843, size: 1 },\r\n // { x: 0, y: 3.72549019607843, size: 1 },\r\n // { x: 0.647482014388489, y: 3.49019607843137, size: 1 },\r\n // { x: 2.58992805755396, y: 3.37254901960784, size: 1 },\r\n // { x: 3.23741007194245, y: 3.72549019607843, size: 1 },\r\n // { x: 4.53237410071942, y: 3.64705882352941, size: 1 },\r\n // { x: 5.17985611510791, y: 3.84313725490196, size: 1 },\r\n // { x: 6.47482014388489, y: 3.56862745098039, size: 1 },\r\n // { x: 8.41726618705036, y: 3.92156862745098, size: 1 },\r\n // { x: 10.3597122302158, y: 3.45098039215686, size: 1 },\r\n // { x: 11.0071942446043, y: 3.80392156862745, size: 1 },\r\n // { x: 18.1294964028777, y: 3.88235294117647, size: 1 },\r\n // { x: 18.7769784172662, y: 3.72549019607843, size: 1 },\r\n // { x: 19.4244604316547, y: 3.80392156862745, size: 1 },\r\n // { x: 25.2517985611511, y: 3.76470588235294, size: 1 },\r\n // { x: 25.8992805755396, y: 3.80392156862745, size: 1 },\r\n // { x: 26.5467625899281, y: 3.80392156862745, size: 1 },\r\n // { x: 27.1942446043165, y: 3.76470588235294, size: 1 },\r\n // { x: 30.431654676259, y: 3.6078431372549, size: 1 },\r\n // { x: 32.3741007194245, y: 3.76470588235294, size: 1 },\r\n // { x: 34.3165467625899, y: 3.84313725490196, size: 1 },\r\n // { x: 35.6115107913669, y: 3.72549019607843, size: 1 },\r\n // { x: 38.2014388489209, y: 3.88235294117647, size: 1 },\r\n // { x: 38.8489208633094, y: 3.76470588235294, size: 1 },\r\n // { x: 40.1438848920863, y: 3.72549019607843, size: 1 },\r\n // { x: 43.3812949640288, y: 3.88235294117647, size: 1 },\r\n // { x: 44.0287769784173, y: 3.72549019607843, size: 1 },\r\n // { x: 45.3237410071942, y: 3.56862745098039, size: 1 },\r\n // { x: 45.9712230215827, y: 3.25490196078431, size: 1 },\r\n // { x: 47.2661870503597, y: 3.13725490196078, size: 1 },\r\n // { x: 51.7985611510791, y: 3.64705882352941, size: 1 },\r\n // { x: 53.0935251798561, y: 3.68627450980392, size: 1 },\r\n // { x: 58.273381294964, y: 3.80392156862745, size: 1 },\r\n // { x: 58.9208633093525, y: 3.96078431372549, size: 1 },\r\n // { x: 60.2158273381295, y: 3.92156862745098, size: 1 },\r\n // { x: 61.5107913669065, y: 3.41176470588235, size: 1 },\r\n // { x: 64.1007194244604, y: 3.80392156862745, size: 1 },\r\n // { x: 67.3381294964029, y: 2.74509803921569, size: 1 },\r\n // { x: 67.9856115107914, y: 2.74509803921569, size: 1 },\r\n // { x: 69.2805755395683, y: 2.7843137254902, size: 1 },\r\n // { x: 69.9280575539568, y: 3.33333333333333, size: 1 },\r\n // { x: 78.9928057553957, y: 3.41176470588235, size: 1 },\r\n // { x: 80.2877697841727, y: 3.49019607843137, size: 1 },\r\n // { x: 81.5827338129496, y: 3.56862745098039, size: 1 },\r\n // { x: 82.8776978417266, y: 3.56862745098039, size: 1 },\r\n // { x: 83.5251798561151, y: 3.45098039215686, size: 1 },\r\n // { x: 86.7625899280576, y: 3.29411764705882, size: 1 },\r\n // { x: 88.0575539568345, y: 3.45098039215686, size: 1 },\r\n // { x: 88.705035971223, y: 3.01960784313725, size: 1 },\r\n // { x: 89.3525179856115, y: 2.98039215686275, size: 1 },\r\n // { x: 90, y: 2.94117647058824, size: 1 },\r\n // { x: 91.294964028777, y: 3.37254901960784, size: 1 },\r\n // { x: 98.4172661870504, y: 3.56862745098039, size: 1 },\r\n // { x: 104.244604316547, y: 3.49019607843137, size: 1 },\r\n // { x: 105.539568345324, y: 3.37254901960784, size: 1 },\r\n // { x: 108.129496402878, y: 3.68627450980392, size: 1 },\r\n // { x: 112.014388489209, y: 3.33333333333333, size: 1 },\r\n // { x: 113.309352517986, y: 3.33333333333333, size: 1 },\r\n // { x: 115.89928057554, y: 3.25490196078431, size: 1 },\r\n // { x: 116.546762589928, y: 3.2156862745098, size: 1 },\r\n // { x: 117.194244604317, y: 3.17647058823529, size: 1 },\r\n // { x: 118.489208633094, y: 3.29411764705882, size: 1 },\r\n // { x: 121.726618705036, y: 3.17647058823529, size: 1 },\r\n // { x: 123.021582733813, y: 3.41176470588235, size: 1 },\r\n // { x: 123.669064748201, y: 3.25490196078431, size: 1 },\r\n // { x: 124.31654676259, y: 3.2156862745098, size: 1 },\r\n // { x: 128.201438848921, y: 3.49019607843137, size: 1 },\r\n // { x: 128.848920863309, y: 3.37254901960784, size: 1 },\r\n // { x: 129.496402877698, y: 3.29411764705882, size: 1 },\r\n // { x: 135.323741007194, y: 3.45098039215686, size: 1 },\r\n // { x: 135.971223021583, y: 3.45098039215686, size: 1 },\r\n // { x: 136.618705035971, y: 3.49019607843137, size: 1 },\r\n // { x: 137.913669064748, y: 3.49019607843137, size: 1 },\r\n // { x: 141.151079136691, y: 3.72549019607843, size: 1 },\r\n // { x: 151.510791366906, y: 3.33333333333333, size: 1 },\r\n // { x: 152.805755395683, y: 3.33333333333333, size: 1 },\r\n // { x: 153.453237410072, y: 2.54901960784314, size: 1 },\r\n // { x: 154.10071942446, y: 2.50980392156863, size: 1 },\r\n // { x: 154.748201438849, y: 2.86274509803922, size: 1 },\r\n // { x: 155.395683453237, y: 2.43137254901961, size: 1 },\r\n // { x: 156.043165467626, y: 3.56862745098039, size: 1 },\r\n // { x: 161.223021582734, y: 3.68627450980392, size: 1 },\r\n // { x: 162.517985611511, y: 3.56862745098039, size: 1 },\r\n // { x: 163.812949640288, y: 3.84313725490196, size: 1 },\r\n // { x: 169.640287769784, y: 3.80392156862745, size: 1 },\r\n // { x: 171.58273381295, y: 3.76470588235294, size: 1 },\r\n // { x: 173.525179856115, y: 3.33333333333333, size: 1 },\r\n // { x: 174.820143884892, y: 3.56862745098039, size: 1 },\r\n // { x: 176.115107913669, y: 3.2156862745098, size: 1 },\r\n // { x: 176.762589928058, y: 3.17647058823529, size: 1 },\r\n // { x: 177.410071942446, y: 3.68627450980392, size: 1 },\r\n // { x: 179.352517985612, y: 3.64705882352941, size: 1 },\r\n // { x: 181.294964028777, y: 3.84313725490196, size: 1 },\r\n // { x: 181.942446043165, y: 3.33333333333333, size: 1 },\r\n // { x: 182.589928057554, y: 3.68627450980392, size: 1 },\r\n // { x: 187.122302158273, y: 3.49019607843137, size: 1 },\r\n // { x: 188.41726618705, y: 3.80392156862745, size: 1 },\r\n // { x: 190.359712230216, y: 3.84313725490196, size: 1 },\r\n // { x: 191.654676258993, y: 3.76470588235294, size: 1 },\r\n // { x: 194.892086330935, y: 3.49019607843137, size: 1 },\r\n // { x: 195.539568345324, y: 3.56862745098039, size: 1 },\r\n // { x: 196.187050359712, y: 3.37254901960784, size: 1 },\r\n // { x: 196.834532374101, y: 2.86274509803922, size: 1 },\r\n // { x: 197.482014388489, y: 3.09803921568627, size: 1 },\r\n // { x: 198.129496402878, y: 3.09803921568627, size: 1 },\r\n // { x: 198.776978417266, y: 3.09803921568627, size: 1 },\r\n // { x: 200.071942446043, y: 3.56862745098039, size: 1 },\r\n // { x: 202.661870503597, y: 3.41176470588235, size: 1 },\r\n // { x: 209.136690647482, y: 3.72549019607843, size: 1 },\r\n // { x: 210.431654676259, y: 3.49019607843137, size: 1 },\r\n // { x: 211.079136690647, y: 3.68627450980392, size: 1 },\r\n // { x: 213.021582733813, y: 3.56862745098039, size: 1 },\r\n // { x: 215.611510791367, y: 3.72549019607843, size: 1 },\r\n // { x: 218.201438848921, y: 3.17647058823529, size: 1 },\r\n // { x: 218.848920863309, y: 3.2156862745098, size: 1 },\r\n // { x: 220.143884892086, y: 3.2156862745098, size: 1 },\r\n // { x: 220.791366906475, y: 3.49019607843137, size: 1 },\r\n // { x: 224.028776978417, y: 3.72549019607843, size: 1 },\r\n // { x: 225.323741007194, y: 3.76470588235294, size: 1 },\r\n // { x: 227.26618705036, y: 3.80392156862745, size: 1 },\r\n // { x: 228.561151079137, y: 3.68627450980392, size: 1 },\r\n // { x: 233.741007194245, y: 3.49019607843137, size: 1 },\r\n // { x: 234.388489208633, y: 3.52941176470588, size: 1 },\r\n // { x: 235.68345323741, y: 3.88235294117647, size: 1 },\r\n // { x: 237.625899280576, y: 3.49019607843137, size: 1 },\r\n // { x: 238.920863309353, y: 3.33333333333333, size: 1 },\r\n // { x: 239.568345323741, y: 3.33333333333333, size: 1 },\r\n // { x: 241.510791366906, y: 3.45098039215686, size: 1 },\r\n // { x: 242.158273381295, y: 3.49019607843137, size: 1 },\r\n // { x: 244.748201438849, y: 3.49019607843137, size: 1 },\r\n // { x: 245.395683453237, y: 3.52941176470588, size: 1 },\r\n // { x: 251.223021582734, y: 3.6078431372549, size: 1 },\r\n // { x: 255.755395683453, y: 3.72549019607843, size: 1 },\r\n // { x: 257.05035971223, y: 3.45098039215686, size: 1 },\r\n // { x: 259.640287769784, y: 3.41176470588235, size: 1 },\r\n // { x: 260.287769784173, y: 3.41176470588235, size: 1 },\r\n // { x: 260.935251798561, y: 3.2156862745098, size: 1 },\r\n // { x: 261.58273381295, y: 2.62745098039216, size: 1 },\r\n // { x: 262.877697841727, y: 2.94117647058824, size: 1 },\r\n // { x: 263.525179856115, y: 3.01960784313725, size: 1 },\r\n // { x: 264.820143884892, y: 3.56862745098039, size: 1 },\r\n // { x: 265.467625899281, y: 3.6078431372549, size: 1 },\r\n // { x: 266.115107913669, y: 3.56862745098039, size: 1 },\r\n // { x: 267.410071942446, y: 3.68627450980392, size: 1 },\r\n // { x: 271.942446043165, y: 3.56862745098039, size: 1 },\r\n // { x: 272.589928057554, y: 3.76470588235294, size: 1 },\r\n // { x: 273.884892086331, y: 3.80392156862745, size: 1 },\r\n // { x: 278.41726618705, y: 3.76470588235294, size: 1 },\r\n // { x: 279.064748201439, y: 3.49019607843137, size: 1 },\r\n // { x: 281.654676258993, y: 3.49019607843137, size: 1 },\r\n // { x: 284.244604316547, y: 3.76470588235294, size: 1 },\r\n // { x: 286.187050359712, y: 3.88235294117647, size: 1 },\r\n // { x: 288.129496402878, y: 3.72549019607843, size: 1 },\r\n // { x: 290.071942446043, y: 3.72549019607843, size: 1 },\r\n // { x: 290.719424460432, y: 3.45098039215686, size: 1 },\r\n // { x: 292.661870503597, y: 3.56862745098039, size: 1 },\r\n // { x: 293.309352517986, y: 3.76470588235294, size: 1 },\r\n // { x: 295.89928057554, y: 3.72549019607843, size: 1 },\r\n // { x: 299.136690647482, y: 3.56862745098039, size: 1 },\r\n // { x: 299.784172661871, y: 3.72549019607843, size: 1 },\r\n // { x: 302.374100719424, y: 3.6078431372549, size: 1 },\r\n // { x: 303.021582733813, y: 3.72549019607843, size: 1 },\r\n // { x: 304.31654676259, y: 3.52941176470588, size: 1 },\r\n // { x: 308.848920863309, y: 3.64705882352941, size: 1 },\r\n // { x: 309.496402877698, y: 3.45098039215686, size: 1 },\r\n // { x: 312.086330935252, y: 3.76470588235294, size: 1 },\r\n // { x: 315.323741007194, y: 3.88235294117647, size: 1 },\r\n // { x: 318.561151079137, y: 3.41176470588235, size: 1 },\r\n // { x: 321.798561151079, y: 3.52941176470588, size: 1 },\r\n // { x: 323.741007194245, y: 3.72549019607843, size: 1 },\r\n // { x: 324.388489208633, y: 3.37254901960784, size: 1 },\r\n // { x: 325.035971223022, y: 3.29411764705882, size: 1 },\r\n // { x: 325.68345323741, y: 3.33333333333333, size: 1 },\r\n // { x: 326.978417266187, y: 3.17647058823529, size: 1 },\r\n // { x: 327.625899280576, y: 3.29411764705882, size: 1 },\r\n // { x: 328.273381294964, y: 3.17647058823529, size: 1 },\r\n // { x: 330.215827338129, y: 3.88235294117647, size: 1 },\r\n // { x: 331.510791366906, y: 3.72549019607843, size: 1 },\r\n // { x: 332.158273381295, y: 3.68627450980392, size: 1 },\r\n // { x: 334.748201438849, y: 3.80392156862745, size: 1 },\r\n // { x: 336.043165467626, y: 3.88235294117647, size: 1 },\r\n // { x: 339.280575539568, y: 3.76470588235294, size: 1 },\r\n // { x: 341.223021582734, y: 3.64705882352941, size: 1 },\r\n // { x: 345.107913669065, y: 3.76470588235294, size: 1 },\r\n // { x: 347.697841726619, y: 3.2156862745098, size: 1 },\r\n // { x: 348.345323741007, y: 3.41176470588235, size: 1 },\r\n // { x: 348.992805755396, y: 3.01960784313725, size: 1 },\r\n // { x: 349.640287769784, y: 2.82352941176471, size: 1 },\r\n // { x: 350.287769784173, y: 3.52941176470588, size: 1 },\r\n // { x: 352.230215827338, y: 3.80392156862745, size: 1 },\r\n // { x: 352.877697841727, y: 3.49019607843137, size: 1 },\r\n // { x: 356.762589928058, y: 3.76470588235294, size: 1 },\r\n // { x: 358.057553956835, y: 3.76470588235294, size: 1 },\r\n // { x: 0.647482014388489, y: 3.68627450980392, size: 1 },\r\n // { x: 5.17985611510791, y: 3.80392156862745, size: 1 },\r\n // { x: 7.12230215827338, y: 3.56862745098039, size: 1 },\r\n // { x: 8.41726618705036, y: 3.96078431372549, size: 1 },\r\n // { x: 10.3597122302158, y: 3.84313725490196, size: 1 },\r\n // { x: 11.6546762589928, y: 3.96078431372549, size: 1 },\r\n // { x: 13.5971223021583, y: 3.72549019607843, size: 1 },\r\n // { x: 14.2446043165468, y: 3.72549019607843, size: 1 },\r\n // { x: 15.5395683453237, y: 3.56862745098039, size: 1 },\r\n // { x: 16.1870503597122, y: 3.88235294117647, size: 1 },\r\n // { x: 18.7769784172662, y: 3.84313725490196, size: 1 },\r\n // { x: 19.4244604316547, y: 3.88235294117647, size: 1 },\r\n // { x: 23.9568345323741, y: 3.80392156862745, size: 1 },\r\n // { x: 25.8992805755396, y: 3.76470588235294, size: 1 },\r\n // { x: 26.5467625899281, y: 3.76470588235294, size: 1 },\r\n // { x: 29.136690647482, y: 3.13725490196078, size: 1 },\r\n // { x: 29.7841726618705, y: 3.29411764705882, size: 1 },\r\n // { x: 31.726618705036, y: 3.13725490196078, size: 1 },\r\n // { x: 32.3741007194245, y: 2.98039215686275, size: 1 },\r\n // { x: 36.2589928057554, y: 3.64705882352941, size: 1 },\r\n // { x: 38.8489208633094, y: 3.92156862745098, size: 1 },\r\n // { x: 39.4964028776978, y: 3.84313725490196, size: 1 },\r\n // { x: 41.4388489208633, y: 3.76470588235294, size: 1 },\r\n // { x: 42.7338129496403, y: 3.49019607843137, size: 1 },\r\n // { x: 44.0287769784173, y: 3.80392156862745, size: 1 },\r\n // { x: 47.9136690647482, y: 3.6078431372549, size: 1 },\r\n // { x: 51.1510791366906, y: 3.56862745098039, size: 1 },\r\n // { x: 53.0935251798561, y: 3.6078431372549, size: 1 },\r\n // { x: 64.1007194244604, y: 3.84313725490196, size: 1 },\r\n // { x: 69.2805755395683, y: 3.6078431372549, size: 1 },\r\n // { x: 73.1654676258993, y: 3.84313725490196, size: 1 },\r\n // { x: 75.1079136690647, y: 3.29411764705882, size: 1 },\r\n // { x: 75.7553956834532, y: 3.56862745098039, size: 1 },\r\n // { x: 78.9928057553957, y: 3.72549019607843, size: 1 },\r\n // { x: 82.2302158273381, y: 3.80392156862745, size: 1 },\r\n // { x: 82.8776978417266, y: 3.52941176470588, size: 1 },\r\n // { x: 83.5251798561151, y: 3.56862745098039, size: 1 },\r\n // { x: 86.7625899280576, y: 3.6078431372549, size: 1 },\r\n // { x: 88.0575539568345, y: 3.29411764705882, size: 1 },\r\n // { x: 90, y: 3.45098039215686, size: 1 },\r\n // { x: 90.6474820143885, y: 3.37254901960784, size: 1 },\r\n // { x: 93.2374100719424, y: 3.68627450980392, size: 1 },\r\n // { x: 95.8273381294964, y: 2.90196078431373, size: 1 },\r\n // { x: 97.1223021582734, y: 3.2156862745098, size: 1 },\r\n // { x: 97.7697841726619, y: 3.41176470588235, size: 1 },\r\n // { x: 99.7122302158273, y: 3.88235294117647, size: 1 },\r\n // { x: 100.359712230216, y: 3.92156862745098, size: 1 },\r\n // { x: 102.94964028777, y: 3.88235294117647, size: 1 },\r\n // { x: 103.597122302158, y: 3.88235294117647, size: 1 },\r\n // { x: 104.244604316547, y: 4, size: 1 },\r\n // { x: 104.892086330935, y: 4.07843137254902, size: 1 },\r\n // { x: 105.539568345324, y: 3.84313725490196, size: 1 },\r\n // { x: 106.187050359712, y: 4.11764705882353, size: 1 },\r\n // { x: 106.834532374101, y: 3.92156862745098, size: 1 },\r\n // { x: 107.482014388489, y: 4.03921568627451, size: 1 },\r\n // { x: 108.129496402878, y: 4.11764705882353, size: 1 },\r\n // { x: 109.424460431655, y: 3.80392156862745, size: 1 },\r\n // { x: 110.071942446043, y: 4, size: 1 },\r\n // { x: 111.36690647482, y: 3.92156862745098, size: 1 },\r\n // { x: 112.014388489209, y: 3.92156862745098, size: 1 },\r\n // { x: 112.661870503597, y: 3.96078431372549, size: 1 },\r\n // { x: 113.309352517986, y: 4.15686274509804, size: 1 },\r\n // { x: 114.604316546763, y: 3.92156862745098, size: 1 },\r\n // { x: 117.194244604317, y: 3.01960784313725, size: 1 },\r\n // { x: 117.841726618705, y: 2.86274509803922, size: 1 },\r\n // { x: 118.489208633094, y: 3.25490196078431, size: 1 },\r\n // { x: 119.136690647482, y: 3.29411764705882, size: 1 },\r\n // { x: 124.964028776978, y: 3.56862745098039, size: 1 },\r\n // { x: 125.611510791367, y: 3.45098039215686, size: 1 },\r\n // { x: 128.848920863309, y: 3.45098039215686, size: 1 },\r\n // { x: 130.143884892086, y: 3.64705882352941, size: 1 },\r\n // { x: 131.438848920863, y: 3.64705882352941, size: 1 },\r\n // { x: 135.323741007194, y: 3.41176470588235, size: 1 },\r\n // { x: 136.618705035971, y: 3.80392156862745, size: 1 },\r\n // { x: 137.26618705036, y: 3.29411764705882, size: 1 },\r\n // { x: 137.913669064748, y: 3.37254901960784, size: 1 },\r\n // { x: 138.561151079137, y: 3.2156862745098, size: 1 },\r\n // { x: 139.208633093525, y: 3.13725490196078, size: 1 },\r\n // { x: 139.856115107914, y: 3.05882352941176, size: 1 },\r\n // { x: 140.503597122302, y: 3.2156862745098, size: 1 },\r\n // { x: 141.151079136691, y: 3.37254901960784, size: 1 },\r\n // { x: 141.798561151079, y: 3.37254901960784, size: 1 },\r\n // { x: 146.978417266187, y: 3.45098039215686, size: 1 },\r\n // { x: 148.920863309353, y: 3.29411764705882, size: 1 },\r\n // { x: 149.568345323741, y: 3.45098039215686, size: 1 },\r\n // { x: 151.510791366906, y: 3.6078431372549, size: 1 },\r\n // { x: 152.158273381295, y: 3.45098039215686, size: 1 },\r\n // { x: 153.453237410072, y: 3.37254901960784, size: 1 },\r\n // { x: 157.985611510791, y: 3.49019607843137, size: 1 },\r\n // { x: 158.63309352518, y: 3.33333333333333, size: 1 },\r\n // { x: 159.280575539568, y: 3.17647058823529, size: 1 },\r\n // { x: 159.928057553957, y: 3.01960784313725, size: 1 },\r\n // { x: 160.575539568345, y: 2.03921568627451, size: 1 },\r\n // { x: 161.223021582734, y: 1.84313725490196, size: 1 },\r\n // { x: 161.870503597122, y: 1.64705882352941, size: 1 },\r\n // { x: 162.517985611511, y: 1.64705882352941, size: 1 },\r\n // { x: 164.460431654676, y: 3.6078431372549, size: 1 },\r\n // { x: 166.402877697842, y: 3.68627450980392, size: 1 },\r\n // { x: 167.05035971223, y: 3.68627450980392, size: 1 },\r\n // { x: 173.525179856115, y: 3.41176470588235, size: 1 },\r\n // { x: 174.172661870504, y: 3.6078431372549, size: 1 },\r\n // { x: 175.467625899281, y: 3.76470588235294, size: 1 },\r\n // { x: 176.762589928058, y: 3.80392156862745, size: 1 },\r\n // { x: 178.705035971223, y: 3.76470588235294, size: 1 },\r\n // { x: 180, y: 3.52941176470588, size: 1 },\r\n // { x: 182.589928057554, y: 3.29411764705882, size: 1 },\r\n // { x: 183.884892086331, y: 3.49019607843137, size: 1 },\r\n // { x: 185.179856115108, y: 3.72549019607843, size: 1 },\r\n // { x: 193.597122302158, y: 3.56862745098039, size: 1 },\r\n // { x: 196.834532374101, y: 3.72549019607843, size: 1 },\r\n // { x: 201.36690647482, y: 3.49019607843137, size: 1 },\r\n // { x: 202.014388489209, y: 3.41176470588235, size: 1 },\r\n // { x: 202.661870503597, y: 3.29411764705882, size: 1 },\r\n // { x: 203.309352517986, y: 2.74509803921569, size: 1 },\r\n // { x: 203.956834532374, y: 1.96078431372549, size: 1 },\r\n // { x: 205.251798561151, y: 3.96078431372549, size: 1 },\r\n // { x: 207.194244604317, y: 3.96078431372549, size: 1 },\r\n // { x: 208.489208633094, y: 3.96078431372549, size: 1 },\r\n // { x: 209.784172661871, y: 3.92156862745098, size: 1 },\r\n // { x: 211.726618705036, y: 3.84313725490196, size: 1 },\r\n // { x: 212.374100719424, y: 3.76470588235294, size: 1 },\r\n // { x: 214.31654676259, y: 3.45098039215686, size: 1 },\r\n // { x: 217.553956834532, y: 3.84313725490196, size: 1 },\r\n // { x: 218.201438848921, y: 4, size: 1 },\r\n // { x: 220.143884892086, y: 3.92156862745098, size: 1 },\r\n // { x: 220.791366906475, y: 3.56862745098039, size: 1 },\r\n // { x: 223.381294964029, y: 3.33333333333333, size: 1 },\r\n // { x: 225.323741007194, y: 2.66666666666667, size: 1 },\r\n // { x: 226.618705035971, y: 3.52941176470588, size: 1 },\r\n // { x: 227.913669064748, y: 3.6078431372549, size: 1 },\r\n // { x: 231.151079136691, y: 3.49019607843137, size: 1 },\r\n // { x: 233.093525179856, y: 3.72549019607843, size: 1 },\r\n // { x: 234.388489208633, y: 3.84313725490196, size: 1 },\r\n // { x: 235.68345323741, y: 3.6078431372549, size: 1 },\r\n // { x: 236.330935251799, y: 3.49019607843137, size: 1 },\r\n // { x: 239.568345323741, y: 3.52941176470588, size: 1 },\r\n // { x: 240.215827338129, y: 3.49019607843137, size: 1 },\r\n // { x: 240.863309352518, y: 3.49019607843137, size: 1 },\r\n // { x: 241.510791366906, y: 3.76470588235294, size: 1 },\r\n // { x: 243.453237410072, y: 3.6078431372549, size: 1 },\r\n // { x: 244.748201438849, y: 3.29411764705882, size: 1 },\r\n // { x: 245.395683453237, y: 3.17647058823529, size: 1 },\r\n // { x: 246.043165467626, y: 2.82352941176471, size: 1 },\r\n // { x: 246.690647482014, y: 1.84313725490196, size: 1 },\r\n // { x: 247.338129496403, y: 1.92156862745098, size: 1 },\r\n // { x: 250.575539568345, y: 3.45098039215686, size: 1 },\r\n // { x: 252.517985611511, y: 3.80392156862745, size: 1 },\r\n // { x: 253.812949640288, y: 3.45098039215686, size: 1 },\r\n // { x: 258.992805755396, y: 3.45098039215686, size: 1 },\r\n // { x: 259.640287769784, y: 3.33333333333333, size: 1 },\r\n // { x: 262.877697841727, y: 3.45098039215686, size: 1 },\r\n // { x: 266.762589928058, y: 3.01960784313725, size: 1 },\r\n // { x: 267.410071942446, y: 3.09803921568627, size: 1 },\r\n // { x: 268.057553956835, y: 2.27450980392157, size: 1 },\r\n // { x: 268.705035971223, y: 1.6078431372549, size: 1 },\r\n // { x: 271.942446043165, y: 3.72549019607843, size: 1 },\r\n // { x: 273.237410071942, y: 3.49019607843137, size: 1 },\r\n // { x: 273.884892086331, y: 3.37254901960784, size: 1 },\r\n // { x: 279.064748201439, y: 3.45098039215686, size: 1 },\r\n // { x: 286.187050359712, y: 3.37254901960784, size: 1 },\r\n // { x: 286.834532374101, y: 3.29411764705882, size: 1 },\r\n // { x: 287.482014388489, y: 3.52941176470588, size: 1 },\r\n // { x: 288.776978417266, y: 3.41176470588235, size: 1 },\r\n // { x: 292.661870503597, y: 3.29411764705882, size: 1 },\r\n // { x: 295.251798561151, y: 3.41176470588235, size: 1 },\r\n // { x: 295.89928057554, y: 3.37254901960784, size: 1 },\r\n // { x: 298.489208633094, y: 3.29411764705882, size: 1 },\r\n // { x: 299.784172661871, y: 3.37254901960784, size: 1 },\r\n // { x: 302.374100719424, y: 3.29411764705882, size: 1 },\r\n // { x: 304.31654676259, y: 3.29411764705882, size: 1 },\r\n // { x: 304.964028776978, y: 3.45098039215686, size: 1 },\r\n // { x: 307.553956834532, y: 3.37254901960784, size: 1 },\r\n // { x: 308.201438848921, y: 3.37254901960784, size: 1 },\r\n // { x: 308.848920863309, y: 3.17647058823529, size: 1 },\r\n // { x: 309.496402877698, y: 3.29411764705882, size: 1 },\r\n // { x: 310.791366906475, y: 3.29411764705882, size: 1 },\r\n // { x: 315.323741007194, y: 3.45098039215686, size: 1 },\r\n // { x: 315.971223021583, y: 3.76470588235294, size: 1 },\r\n // { x: 319.208633093525, y: 3.41176470588235, size: 1 },\r\n // { x: 320.503597122302, y: 3.64705882352941, size: 1 },\r\n // { x: 325.68345323741, y: 3.29411764705882, size: 1 },\r\n // { x: 330.215827338129, y: 3.45098039215686, size: 1 },\r\n // { x: 330.863309352518, y: 3.17647058823529, size: 1 },\r\n // { x: 331.510791366906, y: 3.29411764705882, size: 1 },\r\n // { x: 333.453237410072, y: 3.76470588235294, size: 1 },\r\n // { x: 337.338129496403, y: 3.6078431372549, size: 1 },\r\n // { x: 343.165467625899, y: 3.92156862745098, size: 1 },\r\n // { x: 347.697841726619, y: 3.96078431372549, size: 1 },\r\n // { x: 352.877697841727, y: 3.29411764705882, size: 1 },\r\n // { x: 353.525179856115, y: 3.05882352941176, size: 1 },\r\n // { x: 355.467625899281, y: 3.41176470588235, size: 1 },\r\n // { x: 356.762589928058, y: 3.33333333333333, size: 1 },\r\n // { x: 357.410071942446, y: 3.37254901960784, size: 1 },\r\n // { x: 358.057553956835, y: 3.45098039215686, size: 1 },\r\n // { x: 0.648648648648649, y: 3.41176470588235, size: 1 },\r\n // { x: 1.2972972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 1.94594594594595, y: 3.41176470588235, size: 1 },\r\n // { x: 2.59459459459459, y: 3.45098039215686, size: 1 },\r\n // { x: 3.24324324324324, y: 3.49019607843137, size: 1 },\r\n // { x: 3.89189189189189, y: 3.64705882352941, size: 1 },\r\n // { x: 5.83783783783784, y: 3.45098039215686, size: 1 },\r\n // { x: 7.13513513513514, y: 3.49019607843137, size: 1 },\r\n // { x: 7.78378378378378, y: 3.45098039215686, size: 1 },\r\n // { x: 9.08108108108108, y: 3.37254901960784, size: 1 },\r\n // { x: 9.72972972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 10.3783783783784, y: 3.45098039215686, size: 1 },\r\n // { x: 11.027027027027, y: 3.37254901960784, size: 1 },\r\n // { x: 11.6756756756757, y: 3.41176470588235, size: 1 },\r\n // { x: 12.3243243243243, y: 3.45098039215686, size: 1 },\r\n // { x: 12.972972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 13.6216216216216, y: 3.45098039215686, size: 1 },\r\n // { x: 14.2702702702703, y: 3.52941176470588, size: 1 },\r\n // { x: 14.9189189189189, y: 3.41176470588235, size: 1 },\r\n // { x: 15.5675675675676, y: 3.49019607843137, size: 1 },\r\n // { x: 16.2162162162162, y: 3.41176470588235, size: 1 },\r\n // { x: 16.8648648648649, y: 3.33333333333333, size: 1 },\r\n // { x: 17.5135135135135, y: 3.25490196078431, size: 1 },\r\n // { x: 18.1621621621622, y: 3.56862745098039, size: 1 },\r\n // { x: 18.8108108108108, y: 3.49019607843137, size: 1 },\r\n // { x: 21.4054054054054, y: 3.45098039215686, size: 1 },\r\n // { x: 22.0540540540541, y: 3.49019607843137, size: 1 },\r\n // { x: 22.7027027027027, y: 3.37254901960784, size: 1 },\r\n // { x: 23.3513513513514, y: 3.29411764705882, size: 1 },\r\n // { x: 24, y: 3.52941176470588, size: 1 },\r\n // { x: 24.6486486486486, y: 3.52941176470588, size: 1 },\r\n // { x: 27.2432432432432, y: 3.33333333333333, size: 1 },\r\n // { x: 27.8918918918919, y: 3.37254901960784, size: 1 },\r\n // { x: 28.5405405405405, y: 3.64705882352941, size: 1 },\r\n // { x: 29.8378378378378, y: 3.45098039215686, size: 1 },\r\n // { x: 30.4864864864865, y: 3.56862745098039, size: 1 },\r\n // { x: 31.1351351351351, y: 3.6078431372549, size: 1 },\r\n // { x: 33.0810810810811, y: 3.33333333333333, size: 1 },\r\n // { x: 33.7297297297297, y: 3.68627450980392, size: 1 },\r\n // { x: 34.3783783783784, y: 3.37254901960784, size: 1 },\r\n // { x: 35.027027027027, y: 3.45098039215686, size: 1 },\r\n // { x: 35.6756756756757, y: 3.45098039215686, size: 1 },\r\n // { x: 36.3243243243243, y: 3.49019607843137, size: 1 },\r\n // { x: 36.972972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 38.2702702702703, y: 3.68627450980392, size: 1 },\r\n // { x: 38.9189189189189, y: 3.68627450980392, size: 1 },\r\n // { x: 39.5675675675676, y: 3.80392156862745, size: 1 },\r\n // { x: 40.2162162162162, y: 3.6078431372549, size: 1 },\r\n // { x: 40.8648648648649, y: 3.52941176470588, size: 1 },\r\n // { x: 41.5135135135135, y: 3.64705882352941, size: 1 },\r\n // { x: 42.1621621621622, y: 3.52941176470588, size: 1 },\r\n // { x: 43.4594594594595, y: 3.49019607843137, size: 1 },\r\n // { x: 44.7567567567568, y: 3.88235294117647, size: 1 },\r\n // { x: 46.0540540540541, y: 3.68627450980392, size: 1 },\r\n // { x: 46.7027027027027, y: 3.64705882352941, size: 1 },\r\n // { x: 48, y: 3.6078431372549, size: 1 },\r\n // { x: 48.6486486486486, y: 3.6078431372549, size: 1 },\r\n // { x: 49.9459459459459, y: 3.29411764705882, size: 1 },\r\n // { x: 50.5945945945946, y: 3.52941176470588, size: 1 },\r\n // { x: 51.2432432432432, y: 3.45098039215686, size: 1 },\r\n // { x: 51.8918918918919, y: 3.80392156862745, size: 1 },\r\n // { x: 52.5405405405405, y: 3.45098039215686, size: 1 },\r\n // { x: 53.1891891891892, y: 3.72549019607843, size: 1 },\r\n // { x: 53.8378378378378, y: 3.56862745098039, size: 1 },\r\n // { x: 54.4864864864865, y: 3.76470588235294, size: 1 },\r\n // { x: 55.1351351351351, y: 3.41176470588235, size: 1 },\r\n // { x: 55.7837837837838, y: 3.68627450980392, size: 1 },\r\n // { x: 57.0810810810811, y: 3.72549019607843, size: 1 },\r\n // { x: 57.7297297297297, y: 3.52941176470588, size: 1 },\r\n // { x: 59.027027027027, y: 3.6078431372549, size: 1 },\r\n // { x: 60.3243243243243, y: 3.56862745098039, size: 1 },\r\n // { x: 60.972972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 61.6216216216216, y: 3.45098039215686, size: 1 },\r\n // { x: 62.2702702702703, y: 3.49019607843137, size: 1 },\r\n // { x: 62.9189189189189, y: 3.52941176470588, size: 1 },\r\n // { x: 63.5675675675676, y: 3.52941176470588, size: 1 },\r\n // { x: 64.2162162162162, y: 3.6078431372549, size: 1 },\r\n // { x: 64.8648648648649, y: 3.72549019607843, size: 1 },\r\n // { x: 65.5135135135135, y: 3.41176470588235, size: 1 },\r\n // { x: 66.1621621621622, y: 3.84313725490196, size: 1 },\r\n // { x: 66.8108108108108, y: 3.6078431372549, size: 1 },\r\n // { x: 68.1081081081081, y: 3.6078431372549, size: 1 },\r\n // { x: 68.7567567567568, y: 3.52941176470588, size: 1 },\r\n // { x: 69.4054054054054, y: 3.72549019607843, size: 1 },\r\n // { x: 70.054054054054, y: 3.76470588235294, size: 1 },\r\n // { x: 70.7027027027027, y: 3.52941176470588, size: 1 },\r\n // { x: 72, y: 3.6078431372549, size: 1 },\r\n // { x: 73.945945945946, y: 3.68627450980392, size: 1 },\r\n // { x: 74.5945945945946, y: 3.64705882352941, size: 1 },\r\n // { x: 75.2432432432432, y: 3.6078431372549, size: 1 },\r\n // { x: 75.8918918918919, y: 3.80392156862745, size: 1 },\r\n // { x: 76.5405405405405, y: 3.52941176470588, size: 1 },\r\n // { x: 77.8378378378378, y: 3.56862745098039, size: 1 },\r\n // { x: 79.1351351351351, y: 3.05882352941176, size: 1 },\r\n // { x: 79.7837837837838, y: 3.13725490196078, size: 1 },\r\n // { x: 81.0810810810811, y: 3.72549019607843, size: 1 },\r\n // { x: 82.3783783783784, y: 3.64705882352941, size: 1 },\r\n // { x: 83.6756756756757, y: 3.49019607843137, size: 1 },\r\n // { x: 85.6216216216216, y: 3.6078431372549, size: 1 },\r\n // { x: 86.9189189189189, y: 3.6078431372549, size: 1 },\r\n // { x: 87.5675675675676, y: 3.64705882352941, size: 1 },\r\n // { x: 88.2162162162162, y: 3.56862745098039, size: 1 },\r\n // { x: 88.8648648648649, y: 3.45098039215686, size: 1 },\r\n // { x: 90.8108108108108, y: 3.68627450980392, size: 1 },\r\n // { x: 93.4054054054054, y: 3.72549019607843, size: 1 },\r\n // { x: 94.054054054054, y: 3.6078431372549, size: 1 },\r\n // { x: 94.7027027027027, y: 3.56862745098039, size: 1 },\r\n // { x: 95.3513513513514, y: 3.52941176470588, size: 1 },\r\n // { x: 96, y: 3.76470588235294, size: 1 },\r\n // { x: 96.6486486486486, y: 3.64705882352941, size: 1 },\r\n // { x: 97.945945945946, y: 3.45098039215686, size: 1 },\r\n // { x: 98.5945945945946, y: 3.88235294117647, size: 1 },\r\n // { x: 99.2432432432432, y: 3.72549019607843, size: 1 },\r\n // { x: 101.837837837838, y: 3.64705882352941, size: 1 },\r\n // { x: 102.486486486486, y: 3.68627450980392, size: 1 },\r\n // { x: 103.135135135135, y: 3.33333333333333, size: 1 },\r\n // { x: 103.783783783784, y: 3.52941176470588, size: 1 },\r\n // { x: 104.432432432432, y: 2.94117647058824, size: 1 },\r\n // { x: 105.081081081081, y: 2.54901960784314, size: 1 },\r\n // { x: 105.72972972973, y: 2.7843137254902, size: 1 },\r\n // { x: 106.378378378378, y: 2.74509803921569, size: 1 },\r\n // { x: 107.027027027027, y: 3.09803921568627, size: 1 },\r\n // { x: 107.675675675676, y: 3.17647058823529, size: 1 },\r\n // { x: 108.324324324324, y: 3.33333333333333, size: 1 },\r\n // { x: 108.972972972973, y: 2.70588235294118, size: 1 },\r\n // { x: 109.621621621622, y: 2.66666666666667, size: 1 },\r\n // { x: 110.27027027027, y: 2.62745098039216, size: 1 },\r\n // { x: 110.918918918919, y: 2.74509803921569, size: 1 },\r\n // { x: 111.567567567568, y: 3.13725490196078, size: 1 },\r\n // { x: 112.216216216216, y: 3.17647058823529, size: 1 },\r\n // { x: 113.513513513514, y: 2.7843137254902, size: 1 },\r\n // { x: 114.162162162162, y: 2.7843137254902, size: 1 },\r\n // { x: 114.810810810811, y: 2.82352941176471, size: 1 },\r\n // { x: 115.459459459459, y: 2.62745098039216, size: 1 },\r\n // { x: 116.108108108108, y: 2.86274509803922, size: 1 },\r\n // { x: 116.756756756757, y: 2.74509803921569, size: 1 },\r\n // { x: 117.405405405405, y: 2.90196078431373, size: 1 },\r\n // { x: 118.054054054054, y: 3.09803921568627, size: 1 },\r\n // { x: 118.702702702703, y: 3.33333333333333, size: 1 },\r\n // { x: 119.351351351351, y: 2.98039215686275, size: 1 },\r\n // { x: 120, y: 2.43137254901961, size: 1 },\r\n // { x: 120.648648648649, y: 2.7843137254902, size: 1 },\r\n // { x: 121.297297297297, y: 2.7843137254902, size: 1 },\r\n // { x: 121.945945945946, y: 2.7843137254902, size: 1 },\r\n // { x: 122.594594594595, y: 3.64705882352941, size: 1 },\r\n // { x: 124.540540540541, y: 3.37254901960784, size: 1 },\r\n // { x: 125.189189189189, y: 3.45098039215686, size: 1 },\r\n // { x: 127.783783783784, y: 3.56862745098039, size: 1 },\r\n // { x: 128.432432432432, y: 3.64705882352941, size: 1 },\r\n // { x: 129.081081081081, y: 3.52941176470588, size: 1 },\r\n // { x: 129.72972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 130.378378378378, y: 3.6078431372549, size: 1 },\r\n // { x: 131.675675675676, y: 3.76470588235294, size: 1 },\r\n // { x: 132.972972972973, y: 3.92156862745098, size: 1 },\r\n // { x: 133.621621621622, y: 3.88235294117647, size: 1 },\r\n // { x: 135.567567567568, y: 3.68627450980392, size: 1 },\r\n // { x: 136.216216216216, y: 3.56862745098039, size: 1 },\r\n // { x: 136.864864864865, y: 3.96078431372549, size: 1 },\r\n // { x: 138.810810810811, y: 3.56862745098039, size: 1 },\r\n // { x: 139.459459459459, y: 3.72549019607843, size: 1 },\r\n // { x: 140.108108108108, y: 3.80392156862745, size: 1 },\r\n // { x: 140.756756756757, y: 3.72549019607843, size: 1 },\r\n // { x: 141.405405405405, y: 3.68627450980392, size: 1 },\r\n // { x: 142.054054054054, y: 3.56862745098039, size: 1 },\r\n // { x: 142.702702702703, y: 3.72549019607843, size: 1 },\r\n // { x: 143.351351351351, y: 3.64705882352941, size: 1 },\r\n // { x: 144, y: 3.64705882352941, size: 1 },\r\n // { x: 145.945945945946, y: 3.17647058823529, size: 1 },\r\n // { x: 146.594594594595, y: 3.25490196078431, size: 1 },\r\n // { x: 147.243243243243, y: 3.2156862745098, size: 1 },\r\n // { x: 147.891891891892, y: 3.56862745098039, size: 1 },\r\n // { x: 148.540540540541, y: 3.68627450980392, size: 1 },\r\n // { x: 149.189189189189, y: 3.80392156862745, size: 1 },\r\n // { x: 149.837837837838, y: 3.96078431372549, size: 1 },\r\n // { x: 150.486486486486, y: 3.80392156862745, size: 1 },\r\n // { x: 151.783783783784, y: 3.84313725490196, size: 1 },\r\n // { x: 152.432432432432, y: 3.76470588235294, size: 1 },\r\n // { x: 153.72972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 154.378378378378, y: 3.84313725490196, size: 1 },\r\n // { x: 155.027027027027, y: 3.6078431372549, size: 1 },\r\n // { x: 156.324324324324, y: 3.76470588235294, size: 1 },\r\n // { x: 156.972972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 157.621621621622, y: 3.68627450980392, size: 1 },\r\n // { x: 158.27027027027, y: 3.80392156862745, size: 1 },\r\n // { x: 158.918918918919, y: 3.96078431372549, size: 1 },\r\n // { x: 159.567567567568, y: 4.03921568627451, size: 1 },\r\n // { x: 160.864864864865, y: 4.07843137254902, size: 1 },\r\n // { x: 161.513513513514, y: 3.6078431372549, size: 1 },\r\n // { x: 162.162162162162, y: 3.76470588235294, size: 1 },\r\n // { x: 163.459459459459, y: 3.72549019607843, size: 1 },\r\n // { x: 164.108108108108, y: 4.07843137254902, size: 1 },\r\n // { x: 164.756756756757, y: 3.80392156862745, size: 1 },\r\n // { x: 165.405405405405, y: 3.92156862745098, size: 1 },\r\n // { x: 166.702702702703, y: 3.33333333333333, size: 1 },\r\n // { x: 167.351351351351, y: 3.2156862745098, size: 1 },\r\n // { x: 168, y: 3.33333333333333, size: 1 },\r\n // { x: 168.648648648649, y: 3.49019607843137, size: 1 },\r\n // { x: 169.945945945946, y: 3.49019607843137, size: 1 },\r\n // { x: 173.189189189189, y: 3.52941176470588, size: 1 },\r\n // { x: 174.486486486486, y: 3.33333333333333, size: 1 },\r\n // { x: 175.783783783784, y: 3.41176470588235, size: 1 },\r\n // { x: 176.432432432432, y: 3.88235294117647, size: 1 },\r\n // { x: 177.081081081081, y: 3.64705882352941, size: 1 },\r\n // { x: 177.72972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 178.378378378378, y: 3.72549019607843, size: 1 },\r\n // { x: 179.027027027027, y: 3.33333333333333, size: 1 },\r\n // { x: 179.675675675676, y: 3.68627450980392, size: 1 },\r\n // { x: 180.324324324324, y: 3.88235294117647, size: 1 },\r\n // { x: 181.621621621622, y: 3.37254901960784, size: 1 },\r\n // { x: 182.27027027027, y: 3.88235294117647, size: 1 },\r\n // { x: 182.918918918919, y: 3.64705882352941, size: 1 },\r\n // { x: 184.216216216216, y: 3.41176470588235, size: 1 },\r\n // { x: 184.864864864865, y: 3.52941176470588, size: 1 },\r\n // { x: 186.162162162162, y: 3.56862745098039, size: 1 },\r\n // { x: 186.810810810811, y: 3.49019607843137, size: 1 },\r\n // { x: 187.459459459459, y: 3.33333333333333, size: 1 },\r\n // { x: 188.108108108108, y: 3.52941176470588, size: 1 },\r\n // { x: 189.405405405405, y: 2.90196078431373, size: 1 },\r\n // { x: 190.054054054054, y: 2.98039215686275, size: 1 },\r\n // { x: 190.702702702703, y: 3.01960784313725, size: 1 },\r\n // { x: 191.351351351351, y: 3.29411764705882, size: 1 },\r\n // { x: 192, y: 3.6078431372549, size: 1 },\r\n // { x: 192.648648648649, y: 3.6078431372549, size: 1 },\r\n // { x: 193.297297297297, y: 3.52941176470588, size: 1 },\r\n // { x: 193.945945945946, y: 3.56862745098039, size: 1 },\r\n // { x: 194.594594594595, y: 3.68627450980392, size: 1 },\r\n // { x: 196.540540540541, y: 3.56862745098039, size: 1 },\r\n // { x: 197.189189189189, y: 3.64705882352941, size: 1 },\r\n // { x: 197.837837837838, y: 3.52941176470588, size: 1 },\r\n // { x: 199.783783783784, y: 3.76470588235294, size: 1 },\r\n // { x: 201.081081081081, y: 3.45098039215686, size: 1 },\r\n // { x: 202.378378378378, y: 3.56862745098039, size: 1 },\r\n // { x: 204.324324324324, y: 3.56862745098039, size: 1 },\r\n // { x: 204.972972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 205.621621621622, y: 3.76470588235294, size: 1 },\r\n // { x: 206.27027027027, y: 3.52941176470588, size: 1 },\r\n // { x: 208.216216216216, y: 3.6078431372549, size: 1 },\r\n // { x: 208.864864864865, y: 3.56862745098039, size: 1 },\r\n // { x: 209.513513513514, y: 3.13725490196078, size: 1 },\r\n // { x: 210.810810810811, y: 3.29411764705882, size: 1 },\r\n // { x: 211.459459459459, y: 2.94117647058824, size: 1 },\r\n // { x: 212.108108108108, y: 3.45098039215686, size: 1 },\r\n // { x: 212.756756756757, y: 3.17647058823529, size: 1 },\r\n // { x: 213.405405405405, y: 3.64705882352941, size: 1 },\r\n // { x: 214.054054054054, y: 3.68627450980392, size: 1 },\r\n // { x: 214.702702702703, y: 3.64705882352941, size: 1 },\r\n // { x: 215.351351351351, y: 3.80392156862745, size: 1 },\r\n // { x: 216, y: 3.6078431372549, size: 1 },\r\n // { x: 216.648648648649, y: 3.72549019607843, size: 1 },\r\n // { x: 217.945945945946, y: 3.80392156862745, size: 1 },\r\n // { x: 219.243243243243, y: 3.52941176470588, size: 1 },\r\n // { x: 219.891891891892, y: 3.64705882352941, size: 1 },\r\n // { x: 221.189189189189, y: 3.68627450980392, size: 1 },\r\n // { x: 221.837837837838, y: 3.72549019607843, size: 1 },\r\n // { x: 223.135135135135, y: 3.88235294117647, size: 1 },\r\n // { x: 223.783783783784, y: 3.52941176470588, size: 1 },\r\n // { x: 224.432432432432, y: 3.68627450980392, size: 1 },\r\n // { x: 225.081081081081, y: 3.80392156862745, size: 1 },\r\n // { x: 225.72972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 226.378378378378, y: 3.68627450980392, size: 1 },\r\n // { x: 229.621621621622, y: 3.76470588235294, size: 1 },\r\n // { x: 230.27027027027, y: 3.72549019607843, size: 1 },\r\n // { x: 230.918918918919, y: 3.05882352941176, size: 1 },\r\n // { x: 231.567567567568, y: 3.41176470588235, size: 1 },\r\n // { x: 232.216216216216, y: 3.49019607843137, size: 1 },\r\n // { x: 232.864864864865, y: 3.33333333333333, size: 1 },\r\n // { x: 233.513513513514, y: 3.49019607843137, size: 1 },\r\n // { x: 234.162162162162, y: 3.37254901960784, size: 1 },\r\n // { x: 234.810810810811, y: 3.72549019607843, size: 1 },\r\n // { x: 236.108108108108, y: 3.52941176470588, size: 1 },\r\n // { x: 237.405405405405, y: 3.6078431372549, size: 1 },\r\n // { x: 238.054054054054, y: 3.76470588235294, size: 1 },\r\n // { x: 239.351351351351, y: 3.64705882352941, size: 1 },\r\n // { x: 240, y: 3.76470588235294, size: 1 },\r\n // { x: 241.297297297297, y: 3.41176470588235, size: 1 },\r\n // { x: 241.945945945946, y: 3.76470588235294, size: 1 },\r\n // { x: 243.243243243243, y: 3.6078431372549, size: 1 },\r\n // { x: 243.891891891892, y: 3.76470588235294, size: 1 },\r\n // { x: 245.189189189189, y: 3.49019607843137, size: 1 },\r\n // { x: 246.486486486486, y: 3.6078431372549, size: 1 },\r\n // { x: 247.135135135135, y: 3.92156862745098, size: 1 },\r\n // { x: 247.783783783784, y: 3.6078431372549, size: 1 },\r\n // { x: 248.432432432432, y: 3.64705882352941, size: 1 },\r\n // { x: 249.081081081081, y: 3.45098039215686, size: 1 },\r\n // { x: 250.378378378378, y: 3.68627450980392, size: 1 },\r\n // { x: 251.675675675676, y: 3.52941176470588, size: 1 },\r\n // { x: 252.324324324324, y: 3.37254901960784, size: 1 },\r\n // { x: 252.972972972973, y: 3.33333333333333, size: 1 },\r\n // { x: 253.621621621622, y: 3.37254901960784, size: 1 },\r\n // { x: 254.27027027027, y: 3.25490196078431, size: 1 },\r\n // { x: 254.918918918919, y: 3.2156862745098, size: 1 },\r\n // { x: 255.567567567568, y: 3.01960784313725, size: 1 },\r\n // { x: 256.216216216216, y: 2.90196078431373, size: 1 },\r\n // { x: 256.864864864865, y: 3.72549019607843, size: 1 },\r\n // { x: 259.459459459459, y: 3.76470588235294, size: 1 },\r\n // { x: 260.108108108108, y: 3.76470588235294, size: 1 },\r\n // { x: 260.756756756757, y: 3.88235294117647, size: 1 },\r\n // { x: 263.351351351351, y: 3.68627450980392, size: 1 },\r\n // { x: 264, y: 3.80392156862745, size: 1 },\r\n // { x: 264.648648648649, y: 3.64705882352941, size: 1 },\r\n // { x: 265.945945945946, y: 3.52941176470588, size: 1 },\r\n // { x: 266.594594594595, y: 3.56862745098039, size: 1 },\r\n // { x: 267.243243243243, y: 3.49019607843137, size: 1 },\r\n // { x: 267.891891891892, y: 3.49019607843137, size: 1 },\r\n // { x: 268.540540540541, y: 3.52941176470588, size: 1 },\r\n // { x: 269.189189189189, y: 3.72549019607843, size: 1 },\r\n // { x: 269.837837837838, y: 3.88235294117647, size: 1 },\r\n // { x: 270.486486486487, y: 3.68627450980392, size: 1 },\r\n // { x: 271.783783783784, y: 3.52941176470588, size: 1 },\r\n // { x: 273.081081081081, y: 3.68627450980392, size: 1 },\r\n // { x: 275.027027027027, y: 3.68627450980392, size: 1 },\r\n // { x: 275.675675675676, y: 3.25490196078431, size: 1 },\r\n // { x: 276.324324324324, y: 3.33333333333333, size: 1 },\r\n // { x: 276.972972972973, y: 3.05882352941176, size: 1 },\r\n // { x: 277.621621621622, y: 3.52941176470588, size: 1 },\r\n // { x: 278.27027027027, y: 3.37254901960784, size: 1 },\r\n // { x: 278.918918918919, y: 3.45098039215686, size: 1 },\r\n // { x: 279.567567567568, y: 3.41176470588235, size: 1 },\r\n // { x: 280.864864864865, y: 3.68627450980392, size: 1 },\r\n // { x: 281.513513513513, y: 3.6078431372549, size: 1 },\r\n // { x: 282.162162162162, y: 3.6078431372549, size: 1 },\r\n // { x: 282.810810810811, y: 3.80392156862745, size: 1 },\r\n // { x: 283.459459459459, y: 3.6078431372549, size: 1 },\r\n // { x: 284.108108108108, y: 3.76470588235294, size: 1 },\r\n // { x: 285.405405405405, y: 3.49019607843137, size: 1 },\r\n // { x: 286.054054054054, y: 3.64705882352941, size: 1 },\r\n // { x: 286.702702702703, y: 3.6078431372549, size: 1 },\r\n // { x: 287.351351351351, y: 3.45098039215686, size: 1 },\r\n // { x: 288.648648648649, y: 3.45098039215686, size: 1 },\r\n // { x: 289.945945945946, y: 3.72549019607843, size: 1 },\r\n // { x: 290.594594594595, y: 3.64705882352941, size: 1 },\r\n // { x: 291.243243243243, y: 3.33333333333333, size: 1 },\r\n // { x: 292.540540540541, y: 3.68627450980392, size: 1 },\r\n // { x: 293.189189189189, y: 3.49019607843137, size: 1 },\r\n // { x: 293.837837837838, y: 3.52941176470588, size: 1 },\r\n // { x: 294.486486486487, y: 3.41176470588235, size: 1 },\r\n // { x: 295.135135135135, y: 3.49019607843137, size: 1 },\r\n // { x: 295.783783783784, y: 3.41176470588235, size: 1 },\r\n // { x: 296.432432432432, y: 3.49019607843137, size: 1 },\r\n // { x: 297.081081081081, y: 2.98039215686275, size: 1 },\r\n // { x: 297.72972972973, y: 2.98039215686275, size: 1 },\r\n // { x: 298.378378378378, y: 3.09803921568627, size: 1 },\r\n // { x: 299.027027027027, y: 3.2156862745098, size: 1 },\r\n // { x: 300.324324324324, y: 3.52941176470588, size: 1 },\r\n // { x: 300.972972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 301.621621621622, y: 3.72549019607843, size: 1 },\r\n // { x: 304.216216216216, y: 3.64705882352941, size: 1 },\r\n // { x: 304.864864864865, y: 3.56862745098039, size: 1 },\r\n // { x: 306.162162162162, y: 3.64705882352941, size: 1 },\r\n // { x: 306.810810810811, y: 3.64705882352941, size: 1 },\r\n // { x: 308.108108108108, y: 3.6078431372549, size: 1 },\r\n // { x: 308.756756756757, y: 3.68627450980392, size: 1 },\r\n // { x: 309.405405405405, y: 3.6078431372549, size: 1 },\r\n // { x: 311.351351351351, y: 3.76470588235294, size: 1 },\r\n // { x: 312, y: 3.88235294117647, size: 1 },\r\n // { x: 313.297297297297, y: 3.64705882352941, size: 1 },\r\n // { x: 313.945945945946, y: 3.76470588235294, size: 1 },\r\n // { x: 314.594594594595, y: 3.68627450980392, size: 1 },\r\n // { x: 315.243243243243, y: 3.52941176470588, size: 1 },\r\n // { x: 317.837837837838, y: 3.52941176470588, size: 1 },\r\n // { x: 318.486486486487, y: 3.49019607843137, size: 1 },\r\n // { x: 319.783783783784, y: 3.25490196078431, size: 1 },\r\n // { x: 320.432432432432, y: 2.90196078431373, size: 1 },\r\n // { x: 321.081081081081, y: 2.98039215686275, size: 1 },\r\n // { x: 321.72972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 322.378378378378, y: 3.68627450980392, size: 1 },\r\n // { x: 323.027027027027, y: 3.64705882352941, size: 1 },\r\n // { x: 324.972972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 325.621621621622, y: 3.68627450980392, size: 1 },\r\n // { x: 326.27027027027, y: 3.64705882352941, size: 1 },\r\n // { x: 326.918918918919, y: 3.64705882352941, size: 1 },\r\n // { x: 329.513513513513, y: 3.76470588235294, size: 1 },\r\n // { x: 330.162162162162, y: 3.45098039215686, size: 1 },\r\n // { x: 330.810810810811, y: 3.76470588235294, size: 1 },\r\n // { x: 331.459459459459, y: 3.72549019607843, size: 1 },\r\n // { x: 333.405405405405, y: 3.76470588235294, size: 1 },\r\n // { x: 335.351351351351, y: 3.76470588235294, size: 1 },\r\n // { x: 336, y: 3.68627450980392, size: 1 },\r\n // { x: 336.648648648649, y: 3.80392156862745, size: 1 },\r\n // { x: 338.594594594595, y: 3.72549019607843, size: 1 },\r\n // { x: 339.243243243243, y: 3.72549019607843, size: 1 },\r\n // { x: 340.540540540541, y: 3.80392156862745, size: 1 },\r\n // { x: 341.189189189189, y: 3.6078431372549, size: 1 },\r\n // { x: 343.135135135135, y: 3.56862745098039, size: 1 },\r\n // { x: 343.783783783784, y: 3.72549019607843, size: 1 },\r\n // { x: 344.432432432432, y: 3.49019607843137, size: 1 },\r\n // { x: 345.081081081081, y: 4.11764705882353, size: 1 },\r\n // { x: 347.027027027027, y: 3.56862745098039, size: 1 },\r\n // { x: 347.675675675676, y: 3.56862745098039, size: 1 },\r\n // { x: 348.324324324324, y: 3.49019607843137, size: 1 },\r\n // { x: 349.621621621622, y: 3.72549019607843, size: 1 },\r\n // { x: 350.918918918919, y: 3.45098039215686, size: 1 },\r\n // { x: 352.216216216216, y: 3.56862745098039, size: 1 },\r\n // { x: 352.864864864865, y: 3.56862745098039, size: 1 },\r\n // { x: 353.513513513513, y: 3.64705882352941, size: 1 },\r\n // { x: 354.810810810811, y: 3.64705882352941, size: 1 },\r\n // { x: 355.459459459459, y: 3.68627450980392, size: 1 },\r\n // { x: 356.108108108108, y: 3.49019607843137, size: 1 },\r\n // { x: 356.756756756757, y: 3.68627450980392, size: 1 },\r\n // { x: 358.054054054054, y: 3.64705882352941, size: 1 },\r\n // { x: 1.94244604316547, y: 3.17647058823529, size: 1 },\r\n // { x: 2.58992805755396, y: 3.09803921568627, size: 1 },\r\n // { x: 3.88489208633094, y: 3.25490196078431, size: 1 },\r\n // { x: 8.41726618705036, y: 3.52941176470588, size: 1 },\r\n // { x: 11.6546762589928, y: 3.72549019607843, size: 1 },\r\n // { x: 12.3021582733813, y: 3.45098039215686, size: 1 },\r\n // { x: 14.2446043165468, y: 3.56862745098039, size: 1 },\r\n // { x: 20.0719424460432, y: 3.41176470588235, size: 1 },\r\n // { x: 21.3669064748201, y: 3.6078431372549, size: 1 },\r\n // { x: 22.6618705035971, y: 3.33333333333333, size: 1 },\r\n // { x: 27.841726618705, y: 3.6078431372549, size: 1 },\r\n // { x: 28.4892086330935, y: 3.45098039215686, size: 1 },\r\n // { x: 29.136690647482, y: 3.80392156862745, size: 1 },\r\n // { x: 32.3741007194245, y: 3.41176470588235, size: 1 },\r\n // { x: 33.0215827338129, y: 4, size: 1 },\r\n // { x: 33.6690647482014, y: 3.41176470588235, size: 1 },\r\n // { x: 34.3165467625899, y: 3.45098039215686, size: 1 },\r\n // { x: 35.6115107913669, y: 3.41176470588235, size: 1 },\r\n // { x: 40.1438848920863, y: 3.6078431372549, size: 1 },\r\n // { x: 41.4388489208633, y: 3.68627450980392, size: 1 },\r\n // { x: 45.3237410071942, y: 2.90196078431373, size: 1 },\r\n // { x: 45.9712230215827, y: 2.90196078431373, size: 1 },\r\n // { x: 46.6187050359712, y: 3.25490196078431, size: 1 },\r\n // { x: 47.2661870503597, y: 3.09803921568627, size: 1 },\r\n // { x: 47.9136690647482, y: 3.45098039215686, size: 1 },\r\n // { x: 51.7985611510791, y: 3.84313725490196, size: 1 },\r\n // { x: 53.7410071942446, y: 3.84313725490196, size: 1 },\r\n // { x: 55.6834532374101, y: 3.80392156862745, size: 1 },\r\n // { x: 58.273381294964, y: 3.56862745098039, size: 1 },\r\n // { x: 60.2158273381295, y: 3.64705882352941, size: 1 },\r\n // { x: 62.158273381295, y: 3.72549019607843, size: 1 },\r\n // { x: 65.3956834532374, y: 3.49019607843137, size: 1 },\r\n // { x: 66.6906474820144, y: 3.25490196078431, size: 1 },\r\n // { x: 67.3381294964029, y: 2.7843137254902, size: 1 },\r\n // { x: 67.9856115107914, y: 3.33333333333333, size: 1 },\r\n // { x: 71.8705035971223, y: 4.03921568627451, size: 1 },\r\n // { x: 73.1654676258993, y: 3.76470588235294, size: 1 },\r\n // { x: 75.1079136690647, y: 3.72549019607843, size: 1 },\r\n // { x: 77.6978417266187, y: 3.56862745098039, size: 1 },\r\n // { x: 78.3453237410072, y: 4.03921568627451, size: 1 },\r\n // { x: 82.2302158273381, y: 3.92156862745098, size: 1 },\r\n // { x: 83.5251798561151, y: 3.80392156862745, size: 1 },\r\n // { x: 88.705035971223, y: 3.49019607843137, size: 1 },\r\n // { x: 90.6474820143885, y: 3.49019607843137, size: 1 },\r\n // { x: 97.7697841726619, y: 3.88235294117647, size: 1 },\r\n // { x: 98.4172661870504, y: 3.84313725490196, size: 1 },\r\n // { x: 99.0647482014388, y: 3.52941176470588, size: 1 },\r\n // { x: 103.597122302158, y: 3.72549019607843, size: 1 },\r\n // { x: 104.244604316547, y: 3.45098039215686, size: 1 },\r\n // { x: 105.539568345324, y: 3.52941176470588, size: 1 },\r\n // { x: 110.719424460432, y: 3.13725490196078, size: 1 },\r\n // { x: 112.014388489209, y: 3.2156862745098, size: 1 },\r\n // { x: 119.784172661871, y: 3.72549019607843, size: 1 },\r\n // { x: 120.431654676259, y: 3.84313725490196, size: 1 },\r\n // { x: 121.726618705036, y: 3.88235294117647, size: 1 },\r\n // { x: 123.021582733813, y: 3.80392156862745, size: 1 },\r\n // { x: 123.669064748201, y: 4.03921568627451, size: 1 },\r\n // { x: 124.31654676259, y: 3.64705882352941, size: 1 },\r\n // { x: 124.964028776978, y: 3.96078431372549, size: 1 },\r\n // { x: 126.258992805755, y: 3.72549019607843, size: 1 },\r\n // { x: 127.553956834532, y: 3.49019607843137, size: 1 },\r\n // { x: 128.848920863309, y: 3.68627450980392, size: 1 },\r\n // { x: 129.496402877698, y: 3.56862745098039, size: 1 },\r\n // { x: 130.143884892086, y: 3.41176470588235, size: 1 },\r\n // { x: 130.791366906475, y: 3.29411764705882, size: 1 },\r\n // { x: 131.438848920863, y: 3.29411764705882, size: 1 },\r\n // { x: 132.086330935252, y: 3.37254901960784, size: 1 },\r\n // { x: 132.73381294964, y: 3.13725490196078, size: 1 },\r\n // { x: 134.028776978417, y: 3.25490196078431, size: 1 },\r\n // { x: 144.388489208633, y: 3.72549019607843, size: 1 },\r\n // { x: 146.330935251799, y: 3.80392156862745, size: 1 },\r\n // { x: 152.158273381295, y: 3.33333333333333, size: 1 },\r\n // { x: 152.805755395683, y: 3.05882352941176, size: 1 },\r\n // { x: 153.453237410072, y: 3.17647058823529, size: 1 },\r\n // { x: 154.748201438849, y: 3.2156862745098, size: 1 },\r\n // { x: 167.697841726619, y: 3.76470588235294, size: 1 },\r\n // { x: 174.172661870504, y: 3.41176470588235, size: 1 },\r\n // { x: 174.820143884892, y: 3.09803921568627, size: 1 },\r\n // { x: 176.115107913669, y: 2.90196078431373, size: 1 },\r\n // { x: 176.762589928058, y: 3.05882352941176, size: 1 },\r\n // { x: 180.647482014388, y: 3.64705882352941, size: 1 },\r\n // { x: 183.237410071942, y: 3.84313725490196, size: 1 },\r\n // { x: 184.532374100719, y: 3.52941176470588, size: 1 },\r\n // { x: 196.187050359712, y: 3.09803921568627, size: 1 },\r\n // { x: 196.834532374101, y: 2.62745098039216, size: 1 },\r\n // { x: 197.482014388489, y: 3.01960784313725, size: 1 },\r\n // { x: 198.129496402878, y: 3.05882352941176, size: 1 },\r\n // { x: 198.776978417266, y: 3.45098039215686, size: 1 },\r\n // { x: 201.36690647482, y: 3.56862745098039, size: 1 },\r\n // { x: 209.784172661871, y: 3.52941176470588, size: 1 },\r\n // { x: 211.079136690647, y: 3.45098039215686, size: 1 },\r\n // { x: 219.496402877698, y: 3.2156862745098, size: 1 },\r\n // { x: 220.143884892086, y: 2.86274509803922, size: 1 },\r\n // { x: 223.381294964029, y: 3.56862745098039, size: 1 },\r\n // { x: 224.676258992806, y: 3.37254901960784, size: 1 },\r\n // { x: 227.26618705036, y: 3.76470588235294, size: 1 },\r\n // { x: 227.913669064748, y: 3.72549019607843, size: 1 },\r\n // { x: 229.856115107914, y: 3.56862745098039, size: 1 },\r\n // { x: 232.446043165468, y: 3.49019607843137, size: 1 },\r\n // { x: 234.388489208633, y: 3.33333333333333, size: 1 },\r\n // { x: 235.035971223022, y: 3.37254901960784, size: 1 },\r\n // { x: 238.273381294964, y: 3.37254901960784, size: 1 },\r\n // { x: 238.920863309353, y: 3.05882352941176, size: 1 },\r\n // { x: 239.568345323741, y: 3.2156862745098, size: 1 },\r\n // { x: 240.215827338129, y: 2.90196078431373, size: 1 },\r\n // { x: 240.863309352518, y: 2.7843137254902, size: 1 },\r\n // { x: 241.510791366906, y: 2.58823529411765, size: 1 },\r\n // { x: 242.805755395683, y: 3.80392156862745, size: 1 },\r\n // { x: 245.395683453237, y: 3.64705882352941, size: 1 },\r\n // { x: 251.870503597122, y: 3.52941176470588, size: 1 },\r\n // { x: 253.812949640288, y: 3.76470588235294, size: 1 },\r\n // { x: 254.460431654676, y: 3.49019607843137, size: 1 },\r\n // { x: 256.402877697842, y: 3.56862745098039, size: 1 },\r\n // { x: 257.697841726619, y: 3.76470588235294, size: 1 },\r\n // { x: 258.345323741007, y: 4.07843137254902, size: 1 },\r\n // { x: 262.230215827338, y: 3.49019607843137, size: 1 },\r\n // { x: 268.057553956835, y: 3.80392156862745, size: 1 },\r\n // { x: 270.647482014389, y: 3.84313725490196, size: 1 },\r\n // { x: 271.942446043165, y: 3.64705882352941, size: 1 },\r\n // { x: 276.474820143885, y: 3.64705882352941, size: 1 },\r\n // { x: 277.122302158273, y: 3.84313725490196, size: 1 },\r\n // { x: 281.654676258993, y: 3.17647058823529, size: 1 },\r\n // { x: 282.94964028777, y: 3.09803921568627, size: 1 },\r\n // { x: 283.597122302158, y: 3.29411764705882, size: 1 },\r\n // { x: 284.244604316547, y: 3.09803921568627, size: 1 },\r\n // { x: 284.892086330935, y: 3.09803921568627, size: 1 },\r\n // { x: 287.482014388489, y: 3.80392156862745, size: 1 },\r\n // { x: 295.251798561151, y: 3.64705882352941, size: 1 },\r\n // { x: 300.431654676259, y: 3.45098039215686, size: 1 },\r\n // { x: 301.726618705036, y: 3.64705882352941, size: 1 },\r\n // { x: 302.374100719424, y: 3.56862745098039, size: 1 },\r\n // { x: 303.669064748201, y: 3.6078431372549, size: 1 },\r\n // { x: 304.31654676259, y: 3.72549019607843, size: 1 },\r\n // { x: 308.201438848921, y: 3.80392156862745, size: 1 },\r\n // { x: 312.73381294964, y: 3.88235294117647, size: 1 },\r\n // { x: 313.381294964029, y: 3.72549019607843, size: 1 },\r\n // { x: 315.971223021583, y: 3.96078431372549, size: 1 },\r\n // { x: 317.26618705036, y: 3.72549019607843, size: 1 },\r\n // { x: 317.913669064748, y: 3.96078431372549, size: 1 },\r\n // { x: 318.561151079137, y: 3.72549019607843, size: 1 },\r\n // { x: 322.446043165468, y: 3.6078431372549, size: 1 },\r\n // { x: 326.978417266187, y: 3.80392156862745, size: 1 },\r\n // { x: 332.805755395683, y: 3.80392156862745, size: 1 },\r\n // { x: 335.395683453237, y: 3.76470588235294, size: 1 },\r\n // { x: 336.043165467626, y: 3.84313725490196, size: 1 },\r\n // { x: 337.338129496403, y: 3.68627450980392, size: 1 },\r\n // { x: 338.63309352518, y: 3.76470588235294, size: 1 },\r\n // { x: 343.165467625899, y: 4, size: 1 },\r\n // { x: 345.755395683453, y: 3.41176470588235, size: 1 },\r\n // { x: 346.402877697842, y: 3.33333333333333, size: 1 },\r\n // { x: 347.697841726619, y: 3.17647058823529, size: 1 },\r\n // { x: 348.345323741007, y: 3.09803921568627, size: 1 },\r\n // { x: 348.992805755396, y: 2.82352941176471, size: 1 },\r\n // { x: 349.640287769784, y: 3.2156862745098, size: 1 },\r\n // { x: 352.230215827338, y: 3.92156862745098, size: 1 },\r\n // { x: 355.467625899281, y: 3.72549019607843, size: 1 },\r\n // { x: 356.762589928058, y: 3.80392156862745, size: 1 },\r\n // { x: 358.057553956835, y: 3.72549019607843, size: 1 },\r\n // { x: 3.23741007194245, y: 4.03921568627451, size: 1 },\r\n // { x: 9.06474820143885, y: 3.33333333333333, size: 1 },\r\n // { x: 9.71223021582734, y: 3.37254901960784, size: 1 },\r\n // { x: 10.3597122302158, y: 3.09803921568627, size: 1 },\r\n // { x: 25.2517985611511, y: 3.52941176470588, size: 1 },\r\n // { x: 26.5467625899281, y: 3.96078431372549, size: 1 },\r\n // { x: 31.0791366906475, y: 3.80392156862745, size: 1 },\r\n // { x: 33.0215827338129, y: 3.37254901960784, size: 1 },\r\n // { x: 38.8489208633094, y: 3.45098039215686, size: 1 },\r\n // { x: 39.4964028776978, y: 3.64705882352941, size: 1 },\r\n // { x: 41.4388489208633, y: 3.45098039215686, size: 1 },\r\n // { x: 42.0863309352518, y: 3.37254901960784, size: 1 },\r\n // { x: 44.0287769784173, y: 3.84313725490196, size: 1 },\r\n // { x: 44.6762589928058, y: 3.52941176470588, size: 1 },\r\n // { x: 45.3237410071942, y: 3.80392156862745, size: 1 },\r\n // { x: 47.9136690647482, y: 3.68627450980392, size: 1 },\r\n // { x: 48.5611510791367, y: 3.76470588235294, size: 1 },\r\n // { x: 52.4460431654676, y: 3.29411764705882, size: 1 },\r\n // { x: 53.7410071942446, y: 3.17647058823529, size: 1 },\r\n // { x: 54.3884892086331, y: 3.2156862745098, size: 1 },\r\n // { x: 55.0359712230216, y: 3.80392156862745, size: 1 },\r\n // { x: 57.6258992805755, y: 3.92156862745098, size: 1 },\r\n // { x: 58.9208633093525, y: 3.84313725490196, size: 1 },\r\n // { x: 59.568345323741, y: 3.96078431372549, size: 1 },\r\n // { x: 60.863309352518, y: 3.92156862745098, size: 1 },\r\n // { x: 62.158273381295, y: 3.88235294117647, size: 1 },\r\n // { x: 62.8057553956835, y: 3.96078431372549, size: 1 },\r\n // { x: 63.4532374100719, y: 4.03921568627451, size: 1 },\r\n // { x: 64.1007194244604, y: 4.11764705882353, size: 1 },\r\n // { x: 65.3956834532374, y: 3.92156862745098, size: 1 },\r\n // { x: 66.0431654676259, y: 3.80392156862745, size: 1 },\r\n // { x: 66.6906474820144, y: 3.92156862745098, size: 1 },\r\n // { x: 67.3381294964029, y: 3.80392156862745, size: 1 },\r\n // { x: 68.6330935251799, y: 3.96078431372549, size: 1 },\r\n // { x: 69.2805755395683, y: 3.96078431372549, size: 1 },\r\n // { x: 70.5755395683453, y: 4.03921568627451, size: 1 },\r\n // { x: 71.8705035971223, y: 3.92156862745098, size: 1 },\r\n // { x: 72.5179856115108, y: 3.52941176470588, size: 1 },\r\n // { x: 73.1654676258993, y: 3.29411764705882, size: 1 },\r\n // { x: 75.1079136690647, y: 3.2156862745098, size: 1 },\r\n // { x: 77.0503597122302, y: 3.41176470588235, size: 1 },\r\n // { x: 78.9928057553957, y: 3.88235294117647, size: 1 },\r\n // { x: 80.2877697841727, y: 3.76470588235294, size: 1 },\r\n // { x: 80.9352517985612, y: 3.37254901960784, size: 1 },\r\n // { x: 86.7625899280576, y: 3.92156862745098, size: 1 },\r\n // { x: 93.8848920863309, y: 3.52941176470588, size: 1 },\r\n // { x: 95.1798561151079, y: 3.33333333333333, size: 1 },\r\n // { x: 96.4748201438849, y: 2.94117647058824, size: 1 },\r\n // { x: 97.1223021582734, y: 2.86274509803922, size: 1 },\r\n // { x: 97.7697841726619, y: 3.52941176470588, size: 1 },\r\n // { x: 106.187050359712, y: 3.80392156862745, size: 1 },\r\n // { x: 107.482014388489, y: 3.56862745098039, size: 1 },\r\n // { x: 108.129496402878, y: 4.03921568627451, size: 1 },\r\n // { x: 110.071942446043, y: 3.6078431372549, size: 1 },\r\n // { x: 111.36690647482, y: 3.80392156862745, size: 1 },\r\n // { x: 116.546762589928, y: 3.37254901960784, size: 1 },\r\n // { x: 117.194244604317, y: 2.47058823529412, size: 1 },\r\n // { x: 117.841726618705, y: 2.70588235294118, size: 1 },\r\n // { x: 118.489208633094, y: 2.74509803921569, size: 1 },\r\n // { x: 119.136690647482, y: 2.50980392156863, size: 1 },\r\n // { x: 123.021582733813, y: 3.37254901960784, size: 1 },\r\n // { x: 123.669064748201, y: 3.13725490196078, size: 1 },\r\n // { x: 126.258992805755, y: 3.33333333333333, size: 1 },\r\n // { x: 127.553956834532, y: 3.52941176470588, size: 1 },\r\n // { x: 129.496402877698, y: 3.37254901960784, size: 1 },\r\n // { x: 130.143884892086, y: 3.29411764705882, size: 1 },\r\n // { x: 130.791366906475, y: 3.37254901960784, size: 1 },\r\n // { x: 131.438848920863, y: 3.52941176470588, size: 1 },\r\n // { x: 132.086330935252, y: 3.76470588235294, size: 1 },\r\n // { x: 133.381294964029, y: 3.41176470588235, size: 1 },\r\n // { x: 135.971223021583, y: 3.37254901960784, size: 1 },\r\n // { x: 139.208633093525, y: 3.6078431372549, size: 1 },\r\n // { x: 141.151079136691, y: 3.45098039215686, size: 1 },\r\n // { x: 145.035971223022, y: 3.72549019607843, size: 1 },\r\n // { x: 145.68345323741, y: 3.76470588235294, size: 1 },\r\n // { x: 146.978417266187, y: 3.49019607843137, size: 1 },\r\n // { x: 157.985611510791, y: 3.72549019607843, size: 1 },\r\n // { x: 159.928057553957, y: 3.6078431372549, size: 1 },\r\n // { x: 162.517985611511, y: 3.88235294117647, size: 1 },\r\n // { x: 163.165467625899, y: 3.45098039215686, size: 1 },\r\n // { x: 165.755395683453, y: 3.52941176470588, size: 1 },\r\n // { x: 167.697841726619, y: 3.41176470588235, size: 1 },\r\n // { x: 174.820143884892, y: 3.49019607843137, size: 1 },\r\n // { x: 178.705035971223, y: 3.41176470588235, size: 1 },\r\n // { x: 179.352517985612, y: 3.52941176470588, size: 1 },\r\n // { x: 182.589928057554, y: 3.25490196078431, size: 1 },\r\n // { x: 183.884892086331, y: 3.45098039215686, size: 1 },\r\n // { x: 184.532374100719, y: 3.45098039215686, size: 1 },\r\n // { x: 186.474820143885, y: 3.52941176470588, size: 1 },\r\n // { x: 194.244604316547, y: 3.72549019607843, size: 1 },\r\n // { x: 196.187050359712, y: 3.76470588235294, size: 1 },\r\n // { x: 202.014388489209, y: 3.29411764705882, size: 1 },\r\n // { x: 203.309352517986, y: 3.13725490196078, size: 1 },\r\n // { x: 203.956834532374, y: 3.13725490196078, size: 1 },\r\n // { x: 207.194244604317, y: 3.64705882352941, size: 1 },\r\n // { x: 217.553956834532, y: 3.29411764705882, size: 1 },\r\n // { x: 219.496402877698, y: 3.72549019607843, size: 1 },\r\n // { x: 224.028776978417, y: 3.37254901960784, size: 1 },\r\n // { x: 225.323741007194, y: 3.17647058823529, size: 1 },\r\n // { x: 226.618705035971, y: 3.56862745098039, size: 1 },\r\n // { x: 240.215827338129, y: 3.72549019607843, size: 1 },\r\n // { x: 242.158273381295, y: 3.6078431372549, size: 1 },\r\n // { x: 244.10071942446, y: 3.80392156862745, size: 1 },\r\n // { x: 247.985611510791, y: 4, size: 1 },\r\n // { x: 249.280575539568, y: 3.6078431372549, size: 1 },\r\n // { x: 249.928057553957, y: 3.76470588235294, size: 1 },\r\n // { x: 250.575539568345, y: 3.56862745098039, size: 1 },\r\n // { x: 255.107913669065, y: 3.84313725490196, size: 1 },\r\n // { x: 256.402877697842, y: 3.96078431372549, size: 1 },\r\n // { x: 257.05035971223, y: 3.49019607843137, size: 1 },\r\n // { x: 260.287769784173, y: 3.49019607843137, size: 1 },\r\n // { x: 260.935251798561, y: 3.84313725490196, size: 1 },\r\n // { x: 262.230215827338, y: 3.72549019607843, size: 1 },\r\n // { x: 263.525179856115, y: 3.56862745098039, size: 1 },\r\n // { x: 265.467625899281, y: 3.80392156862745, size: 1 },\r\n // { x: 269.352517985611, y: 3.80392156862745, size: 1 },\r\n // { x: 270, y: 3.64705882352941, size: 1 },\r\n // { x: 271.942446043165, y: 3.84313725490196, size: 1 },\r\n // { x: 273.237410071942, y: 3.72549019607843, size: 1 },\r\n // { x: 273.884892086331, y: 3.64705882352941, size: 1 },\r\n // { x: 274.532374100719, y: 3.64705882352941, size: 1 },\r\n // { x: 277.769784172662, y: 3.49019607843137, size: 1 },\r\n // { x: 280.359712230216, y: 3.72549019607843, size: 1 },\r\n // { x: 283.597122302158, y: 4.03921568627451, size: 1 },\r\n // { x: 286.187050359712, y: 3.52941176470588, size: 1 },\r\n // { x: 289.424460431655, y: 3.05882352941176, size: 1 },\r\n // { x: 290.071942446043, y: 2.98039215686275, size: 1 },\r\n // { x: 292.014388489209, y: 3.33333333333333, size: 1 },\r\n // { x: 293.309352517986, y: 3.29411764705882, size: 1 },\r\n // { x: 293.956834532374, y: 3.37254901960784, size: 1 },\r\n // { x: 296.546762589928, y: 3.29411764705882, size: 1 },\r\n // { x: 298.489208633094, y: 3.45098039215686, size: 1 },\r\n // { x: 299.136690647482, y: 3.37254901960784, size: 1 },\r\n // { x: 299.784172661871, y: 3.41176470588235, size: 1 },\r\n // { x: 301.079136690647, y: 3.29411764705882, size: 1 },\r\n // { x: 304.31654676259, y: 3.33333333333333, size: 1 },\r\n // { x: 304.964028776978, y: 3.92156862745098, size: 1 },\r\n // { x: 305.611510791367, y: 3.41176470588235, size: 1 },\r\n // { x: 306.906474820144, y: 3.25490196078431, size: 1 },\r\n // { x: 307.553956834532, y: 3.52941176470588, size: 1 },\r\n // { x: 308.201438848921, y: 3.25490196078431, size: 1 },\r\n // { x: 308.848920863309, y: 3.29411764705882, size: 1 },\r\n // { x: 309.496402877698, y: 4, size: 1 },\r\n // { x: 310.143884892086, y: 3.52941176470588, size: 1 },\r\n // { x: 310.791366906475, y: 3.33333333333333, size: 1 },\r\n // { x: 318.561151079137, y: 3.80392156862745, size: 1 },\r\n // { x: 319.856115107914, y: 3.92156862745098, size: 1 },\r\n // { x: 323.741007194245, y: 3.64705882352941, size: 1 },\r\n // { x: 324.388489208633, y: 3.88235294117647, size: 1 },\r\n // { x: 327.625899280576, y: 4, size: 1 },\r\n // { x: 332.158273381295, y: 3.2156862745098, size: 1 },\r\n // { x: 332.805755395683, y: 2.7843137254902, size: 1 },\r\n // { x: 333.453237410072, y: 2.86274509803922, size: 1 },\r\n // { x: 334.748201438849, y: 3.88235294117647, size: 1 },\r\n // { x: 336.043165467626, y: 3.56862745098039, size: 1 },\r\n // { x: 339.928057553957, y: 3.96078431372549, size: 1 },\r\n // { x: 349.640287769784, y: 3.76470588235294, size: 1 },\r\n // { x: 355.467625899281, y: 3.29411764705882, size: 1 },\r\n // { x: 357.410071942446, y: 3.33333333333333, size: 1 },\r\n // { x: 358.057553956835, y: 3.25490196078431, size: 1 },\r\n // { x: 0, y: 3.37254901960784, size: 1 },\r\n // { x: 0.647482014388489, y: 3.29411764705882, size: 1 },\r\n // { x: 2.58992805755396, y: 3.25490196078431, size: 1 },\r\n // { x: 3.23741007194245, y: 3.25490196078431, size: 1 },\r\n // { x: 3.88489208633094, y: 3.68627450980392, size: 1 },\r\n // { x: 4.53237410071942, y: 3.33333333333333, size: 1 },\r\n // { x: 5.17985611510791, y: 3.2156862745098, size: 1 },\r\n // { x: 5.8273381294964, y: 3.2156862745098, size: 1 },\r\n // { x: 6.47482014388489, y: 3.29411764705882, size: 1 },\r\n // { x: 7.12230215827338, y: 3.41176470588235, size: 1 },\r\n // { x: 8.41726618705036, y: 3.41176470588235, size: 1 },\r\n // { x: 9.06474820143885, y: 3.41176470588235, size: 1 },\r\n // { x: 10.3597122302158, y: 3.49019607843137, size: 1 },\r\n // { x: 11.6546762589928, y: 3.45098039215686, size: 1 },\r\n // { x: 12.3021582733813, y: 3.25490196078431, size: 1 },\r\n // { x: 12.9496402877698, y: 3.29411764705882, size: 1 },\r\n // { x: 14.2446043165468, y: 4.07843137254902, size: 1 },\r\n // { x: 17.4820143884892, y: 3.52941176470588, size: 1 },\r\n // { x: 21.3669064748201, y: 3.52941176470588, size: 1 },\r\n // { x: 23.9568345323741, y: 3.45098039215686, size: 1 },\r\n // { x: 27.841726618705, y: 3.37254901960784, size: 1 },\r\n // { x: 32.3741007194245, y: 3.84313725490196, size: 1 },\r\n // { x: 33.0215827338129, y: 3.84313725490196, size: 1 },\r\n // { x: 37.5539568345324, y: 3.33333333333333, size: 1 },\r\n // { x: 40.7913669064748, y: 3.72549019607843, size: 1 },\r\n // { x: 43.3812949640288, y: 3.72549019607843, size: 1 },\r\n // { x: 44.0287769784173, y: 3.96078431372549, size: 1 },\r\n // { x: 46.6187050359712, y: 3.76470588235294, size: 1 },\r\n // { x: 47.2661870503597, y: 3.72549019607843, size: 1 },\r\n // { x: 54.3884892086331, y: 3.6078431372549, size: 1 },\r\n // { x: 56.3309352517986, y: 3.84313725490196, size: 1 },\r\n // { x: 58.9208633093525, y: 3.45098039215686, size: 1 },\r\n // { x: 59.568345323741, y: 3.45098039215686, size: 1 },\r\n // { x: 64.1007194244604, y: 3.72549019607843, size: 1 },\r\n // { x: 67.3381294964029, y: 3.88235294117647, size: 1 },\r\n // { x: 69.9280575539568, y: 3.56862745098039, size: 1 },\r\n // { x: 71.2230215827338, y: 3.76470588235294, size: 1 },\r\n // { x: 73.1654676258993, y: 3.88235294117647, size: 1 },\r\n // { x: 75.7553956834532, y: 3.6078431372549, size: 1 },\r\n // { x: 80.2877697841727, y: 3.37254901960784, size: 1 },\r\n // { x: 80.9352517985612, y: 3.2156862745098, size: 1 },\r\n // { x: 82.2302158273381, y: 3.25490196078431, size: 1 },\r\n // { x: 84.8201438848921, y: 3.41176470588235, size: 1 },\r\n // { x: 85.4676258992806, y: 3.41176470588235, size: 1 },\r\n // { x: 86.1151079136691, y: 3.45098039215686, size: 1 },\r\n // { x: 86.7625899280576, y: 3.41176470588235, size: 1 },\r\n // { x: 87.410071942446, y: 3.13725490196078, size: 1 },\r\n // { x: 89.3525179856115, y: 3.45098039215686, size: 1 },\r\n // { x: 90, y: 3.49019607843137, size: 1 },\r\n // { x: 91.294964028777, y: 3.29411764705882, size: 1 },\r\n // { x: 91.9424460431655, y: 3.49019607843137, size: 1 },\r\n // { x: 93.2374100719424, y: 3.25490196078431, size: 1 },\r\n // { x: 93.8848920863309, y: 3.41176470588235, size: 1 },\r\n // { x: 94.5323741007194, y: 3.41176470588235, size: 1 },\r\n // { x: 98.4172661870504, y: 3.25490196078431, size: 1 },\r\n // { x: 99.0647482014388, y: 3.2156862745098, size: 1 },\r\n // { x: 99.7122302158273, y: 3.25490196078431, size: 1 },\r\n // { x: 100.359712230216, y: 3.33333333333333, size: 1 },\r\n // { x: 101.654676258993, y: 3.01960784313725, size: 1 },\r\n // { x: 102.302158273381, y: 2.98039215686275, size: 1 },\r\n // { x: 102.94964028777, y: 3.05882352941176, size: 1 },\r\n // { x: 103.597122302158, y: 2.98039215686275, size: 1 },\r\n // { x: 104.244604316547, y: 3.05882352941176, size: 1 },\r\n // { x: 104.892086330935, y: 3.2156862745098, size: 1 },\r\n // { x: 106.187050359712, y: 3.25490196078431, size: 1 },\r\n // { x: 106.834532374101, y: 3.45098039215686, size: 1 },\r\n // { x: 108.776978417266, y: 3.33333333333333, size: 1 },\r\n // { x: 109.424460431655, y: 3.29411764705882, size: 1 },\r\n // { x: 110.071942446043, y: 3.33333333333333, size: 1 },\r\n // { x: 110.719424460432, y: 3.29411764705882, size: 1 },\r\n // { x: 113.309352517986, y: 3.25490196078431, size: 1 },\r\n // { x: 113.956834532374, y: 3.13725490196078, size: 1 },\r\n // { x: 115.89928057554, y: 3.29411764705882, size: 1 },\r\n // { x: 117.194244604317, y: 3.49019607843137, size: 1 },\r\n // { x: 117.841726618705, y: 3.45098039215686, size: 1 },\r\n // { x: 120.431654676259, y: 3.29411764705882, size: 1 },\r\n // { x: 122.374100719424, y: 3.56862745098039, size: 1 },\r\n // { x: 126.258992805755, y: 3.45098039215686, size: 1 },\r\n // { x: 131.438848920863, y: 3.49019607843137, size: 1 },\r\n // { x: 132.086330935252, y: 3.45098039215686, size: 1 },\r\n // { x: 132.73381294964, y: 3.41176470588235, size: 1 },\r\n // { x: 135.323741007194, y: 3.56862745098039, size: 1 },\r\n // { x: 136.618705035971, y: 3.25490196078431, size: 1 },\r\n // { x: 137.913669064748, y: 3.76470588235294, size: 1 },\r\n // { x: 138.561151079137, y: 3.6078431372549, size: 1 },\r\n // { x: 141.798561151079, y: 3.45098039215686, size: 1 },\r\n // { x: 145.035971223022, y: 3.45098039215686, size: 1 },\r\n // { x: 145.68345323741, y: 3.41176470588235, size: 1 },\r\n // { x: 148.920863309353, y: 3.37254901960784, size: 1 },\r\n // { x: 150.215827338129, y: 3.52941176470588, size: 1 },\r\n // { x: 154.748201438849, y: 3.92156862745098, size: 1 },\r\n // { x: 157.338129496403, y: 3.72549019607843, size: 1 },\r\n // { x: 163.165467625899, y: 3.49019607843137, size: 1 },\r\n // { x: 164.460431654676, y: 3.49019607843137, size: 1 },\r\n // { x: 165.107913669065, y: 3.76470588235294, size: 1 },\r\n // { x: 165.755395683453, y: 3.45098039215686, size: 1 },\r\n // { x: 166.402877697842, y: 3.41176470588235, size: 1 },\r\n // { x: 168.345323741007, y: 3.49019607843137, size: 1 },\r\n // { x: 168.992805755396, y: 3.33333333333333, size: 1 },\r\n // { x: 172.877697841727, y: 3.96078431372549, size: 1 },\r\n // { x: 173.525179856115, y: 3.88235294117647, size: 1 },\r\n // { x: 183.237410071942, y: 3.64705882352941, size: 1 },\r\n // { x: 185.827338129496, y: 3.80392156862745, size: 1 },\r\n // { x: 187.122302158273, y: 3.29411764705882, size: 1 },\r\n // { x: 188.41726618705, y: 2.90196078431373, size: 1 },\r\n // { x: 189.064748201439, y: 2.74509803921569, size: 1 },\r\n // { x: 189.712230215827, y: 2.98039215686275, size: 1 },\r\n // { x: 191.007194244604, y: 3.49019607843137, size: 1 },\r\n // { x: 191.654676258993, y: 3.80392156862745, size: 1 },\r\n // { x: 192.94964028777, y: 3.76470588235294, size: 1 },\r\n // { x: 193.597122302158, y: 3.76470588235294, size: 1 },\r\n // { x: 205.89928057554, y: 3.80392156862745, size: 1 },\r\n // { x: 208.489208633094, y: 3.37254901960784, size: 1 },\r\n // { x: 210.431654676259, y: 2.94117647058824, size: 1 },\r\n // { x: 215.611510791367, y: 4.03921568627451, size: 1 },\r\n // { x: 217.553956834532, y: 4.11764705882353, size: 1 },\r\n // { x: 219.496402877698, y: 3.84313725490196, size: 1 },\r\n // { x: 220.143884892086, y: 3.76470588235294, size: 1 },\r\n // { x: 224.676258992806, y: 3.84313725490196, size: 1 },\r\n // { x: 225.971223021583, y: 3.6078431372549, size: 1 },\r\n // { x: 231.151079136691, y: 3.09803921568627, size: 1 },\r\n // { x: 231.798561151079, y: 2.98039215686275, size: 1 },\r\n // { x: 232.446043165468, y: 3.13725490196078, size: 1 },\r\n // { x: 238.920863309353, y: 3.84313725490196, size: 1 },\r\n // { x: 239.568345323741, y: 3.76470588235294, size: 1 },\r\n // { x: 246.690647482014, y: 3.84313725490196, size: 1 },\r\n // { x: 247.985611510791, y: 3.88235294117647, size: 1 },\r\n // { x: 249.928057553957, y: 3.64705882352941, size: 1 },\r\n // { x: 251.223021582734, y: 3.72549019607843, size: 1 },\r\n // { x: 252.517985611511, y: 3.84313725490196, size: 1 },\r\n // { x: 255.107913669065, y: 3.45098039215686, size: 1 },\r\n // { x: 262.877697841727, y: 3.64705882352941, size: 1 },\r\n // { x: 263.525179856115, y: 3.80392156862745, size: 1 },\r\n // { x: 273.237410071942, y: 3.80392156862745, size: 1 },\r\n // { x: 279.064748201439, y: 3.76470588235294, size: 1 },\r\n // { x: 279.712230215827, y: 3.76470588235294, size: 1 },\r\n // { x: 281.654676258993, y: 3.6078431372549, size: 1 },\r\n // { x: 286.834532374101, y: 3.56862745098039, size: 1 },\r\n // { x: 288.129496402878, y: 3.45098039215686, size: 1 },\r\n // { x: 295.89928057554, y: 3.25490196078431, size: 1 },\r\n // { x: 296.546762589928, y: 2.82352941176471, size: 1 },\r\n // { x: 297.194244604317, y: 2.94117647058824, size: 1 },\r\n // { x: 303.669064748201, y: 3.41176470588235, size: 1 },\r\n // { x: 304.964028776978, y: 3.64705882352941, size: 1 },\r\n // { x: 306.258992805755, y: 3.68627450980392, size: 1 },\r\n // { x: 310.143884892086, y: 3.64705882352941, size: 1 },\r\n // { x: 310.791366906475, y: 3.68627450980392, size: 1 },\r\n // { x: 314.028776978417, y: 3.68627450980392, size: 1 },\r\n // { x: 316.618705035971, y: 3.45098039215686, size: 1 },\r\n // { x: 319.856115107914, y: 3.76470588235294, size: 1 },\r\n // { x: 326.330935251799, y: 3.49019607843137, size: 1 },\r\n // { x: 328.920863309353, y: 3.37254901960784, size: 1 },\r\n // { x: 329.568345323741, y: 3.49019607843137, size: 1 },\r\n // { x: 330.863309352518, y: 3.37254901960784, size: 1 },\r\n // { x: 331.510791366906, y: 3.45098039215686, size: 1 },\r\n // { x: 334.10071942446, y: 3.37254901960784, size: 1 },\r\n // { x: 334.748201438849, y: 3.37254901960784, size: 1 },\r\n // { x: 336.043165467626, y: 3.80392156862745, size: 1 },\r\n // { x: 337.338129496403, y: 3.41176470588235, size: 1 },\r\n // { x: 338.63309352518, y: 3.72549019607843, size: 1 },\r\n // { x: 341.870503597122, y: 3.37254901960784, size: 1 },\r\n // { x: 344.460431654676, y: 3.33333333333333, size: 1 },\r\n // { x: 354.820143884892, y: 3.84313725490196, size: 1 },\r\n // { x: 357.410071942446, y: 3.49019607843137, size: 1 },\r\n // { x: 5.8273381294964, y: 3.56862745098039, size: 1 },\r\n // { x: 10.3597122302158, y: 3.68627450980392, size: 1 },\r\n // { x: 12.3021582733813, y: 3.76470588235294, size: 1 },\r\n // { x: 15.5395683453237, y: 3.88235294117647, size: 1 },\r\n // { x: 16.8345323741007, y: 3.68627450980392, size: 1 },\r\n // { x: 17.4820143884892, y: 3.76470588235294, size: 1 },\r\n // { x: 22.6618705035971, y: 3.17647058823529, size: 1 },\r\n // { x: 23.3093525179856, y: 3.37254901960784, size: 1 },\r\n // { x: 24.6043165467626, y: 3.05882352941176, size: 1 },\r\n // { x: 29.7841726618705, y: 3.64705882352941, size: 1 },\r\n // { x: 32.3741007194245, y: 3.88235294117647, size: 1 },\r\n // { x: 34.3165467625899, y: 3.80392156862745, size: 1 },\r\n // { x: 38.2014388489209, y: 3.41176470588235, size: 1 },\r\n // { x: 40.1438848920863, y: 3.84313725490196, size: 1 },\r\n // { x: 41.4388489208633, y: 3.96078431372549, size: 1 },\r\n // { x: 42.7338129496403, y: 3.29411764705882, size: 1 },\r\n // { x: 43.3812949640288, y: 3.45098039215686, size: 1 },\r\n // { x: 44.0287769784173, y: 3.17647058823529, size: 1 },\r\n // { x: 44.6762589928058, y: 2.86274509803922, size: 1 },\r\n // { x: 45.3237410071942, y: 2.86274509803922, size: 1 },\r\n // { x: 45.9712230215827, y: 2.94117647058824, size: 1 },\r\n // { x: 48.5611510791367, y: 3.45098039215686, size: 1 },\r\n // { x: 49.8561151079137, y: 3.68627450980392, size: 1 },\r\n // { x: 56.3309352517986, y: 3.6078431372549, size: 1 },\r\n // { x: 58.273381294964, y: 3.45098039215686, size: 1 },\r\n // { x: 62.8057553956835, y: 3.68627450980392, size: 1 },\r\n // { x: 66.0431654676259, y: 3.33333333333333, size: 1 },\r\n // { x: 66.6906474820144, y: 3.13725490196078, size: 1 },\r\n // { x: 69.2805755395683, y: 3.52941176470588, size: 1 },\r\n // { x: 71.8705035971223, y: 3.45098039215686, size: 1 },\r\n // { x: 73.8129496402878, y: 3.41176470588235, size: 1 },\r\n // { x: 74.4604316546763, y: 3.33333333333333, size: 1 },\r\n // { x: 79.6402877697842, y: 3.37254901960784, size: 1 },\r\n // { x: 80.2877697841727, y: 3.41176470588235, size: 1 },\r\n // { x: 81.5827338129496, y: 3.41176470588235, size: 1 },\r\n // { x: 82.2302158273381, y: 3.76470588235294, size: 1 },\r\n // { x: 86.1151079136691, y: 3.29411764705882, size: 1 },\r\n // { x: 86.7625899280576, y: 3.17647058823529, size: 1 },\r\n // { x: 87.410071942446, y: 2.03921568627451, size: 1 },\r\n // { x: 88.0575539568345, y: 1.37254901960784, size: 1 },\r\n // { x: 88.705035971223, y: 1.41176470588235, size: 1 },\r\n // { x: 89.3525179856115, y: 1.25490196078431, size: 1 },\r\n // { x: 90, y: 3.13725490196078, size: 1 },\r\n // { x: 91.9424460431655, y: 3.13725490196078, size: 1 },\r\n // { x: 92.589928057554, y: 2.90196078431373, size: 1 },\r\n // { x: 93.2374100719424, y: 3.64705882352941, size: 1 },\r\n // { x: 97.1223021582734, y: 2.90196078431373, size: 1 },\r\n // { x: 102.94964028777, y: 2.82352941176471, size: 1 },\r\n // { x: 103.597122302158, y: 2.94117647058824, size: 1 },\r\n // { x: 104.892086330935, y: 3.41176470588235, size: 1 },\r\n // { x: 106.834532374101, y: 3.49019607843137, size: 1 },\r\n // { x: 107.482014388489, y: 3.29411764705882, size: 1 },\r\n // { x: 108.776978417266, y: 2.90196078431373, size: 1 },\r\n // { x: 109.424460431655, y: 2.62745098039216, size: 1 },\r\n // { x: 113.956834532374, y: 3.72549019607843, size: 1 },\r\n // { x: 117.841726618705, y: 3.68627450980392, size: 1 },\r\n // { x: 121.079136690647, y: 3.76470588235294, size: 1 },\r\n // { x: 124.964028776978, y: 3.6078431372549, size: 1 },\r\n // { x: 125.611510791367, y: 3.84313725490196, size: 1 },\r\n // { x: 126.906474820144, y: 3.72549019607843, size: 1 },\r\n // { x: 130.791366906475, y: 3.17647058823529, size: 1 },\r\n // { x: 131.438848920863, y: 3.01960784313725, size: 1 },\r\n // { x: 135.323741007194, y: 3.72549019607843, size: 1 },\r\n // { x: 135.971223021583, y: 3.72549019607843, size: 1 },\r\n // { x: 136.618705035971, y: 3.68627450980392, size: 1 },\r\n // { x: 141.151079136691, y: 3.49019607843137, size: 1 },\r\n // { x: 146.978417266187, y: 3.64705882352941, size: 1 },\r\n // { x: 147.625899280576, y: 3.80392156862745, size: 1 },\r\n // { x: 148.920863309353, y: 3.72549019607843, size: 1 },\r\n // { x: 150.863309352518, y: 3.2156862745098, size: 1 },\r\n // { x: 152.158273381295, y: 2.31372549019608, size: 1 },\r\n // { x: 152.805755395683, y: 2.23529411764706, size: 1 },\r\n // { x: 157.338129496403, y: 3.68627450980392, size: 1 },\r\n // { x: 158.63309352518, y: 3.52941176470588, size: 1 },\r\n // { x: 161.223021582734, y: 3.88235294117647, size: 1 },\r\n // { x: 167.05035971223, y: 4, size: 1 },\r\n // { x: 167.697841726619, y: 3.88235294117647, size: 1 },\r\n // { x: 168.345323741007, y: 3.64705882352941, size: 1 },\r\n // { x: 169.640287769784, y: 3.88235294117647, size: 1 },\r\n // { x: 170.935251798561, y: 3.56862745098039, size: 1 },\r\n // { x: 172.230215827338, y: 3.29411764705882, size: 1 },\r\n // { x: 172.877697841727, y: 3.29411764705882, size: 1 },\r\n // { x: 173.525179856115, y: 2.7843137254902, size: 1 },\r\n // { x: 174.172661870504, y: 2.82352941176471, size: 1 },\r\n // { x: 174.820143884892, y: 3.2156862745098, size: 1 },\r\n // { x: 177.410071942446, y: 3.6078431372549, size: 1 },\r\n // { x: 180, y: 3.88235294117647, size: 1 },\r\n // { x: 182.589928057554, y: 3.37254901960784, size: 1 },\r\n // { x: 186.474820143885, y: 3.72549019607843, size: 1 },\r\n // { x: 187.122302158273, y: 3.52941176470588, size: 1 },\r\n // { x: 190.359712230216, y: 3.49019607843137, size: 1 },\r\n // { x: 192.302158273381, y: 3.6078431372549, size: 1 },\r\n // { x: 196.834532374101, y: 3.25490196078431, size: 1 },\r\n // { x: 200.719424460432, y: 3.56862745098039, size: 1 },\r\n // { x: 208.489208633094, y: 3.84313725490196, size: 1 },\r\n // { x: 211.079136690647, y: 3.52941176470588, size: 1 },\r\n // { x: 211.726618705036, y: 3.72549019607843, size: 1 },\r\n // { x: 213.669064748201, y: 3.41176470588235, size: 1 },\r\n // { x: 216.258992805755, y: 3.37254901960784, size: 1 },\r\n // { x: 216.906474820144, y: 2.86274509803922, size: 1 },\r\n // { x: 217.553956834532, y: 2.66666666666667, size: 1 },\r\n // { x: 224.676258992806, y: 3.80392156862745, size: 1 },\r\n // { x: 229.856115107914, y: 3.76470588235294, size: 1 },\r\n // { x: 235.035971223022, y: 3.6078431372549, size: 1 },\r\n // { x: 235.68345323741, y: 3.84313725490196, size: 1 },\r\n // { x: 236.978417266187, y: 3.37254901960784, size: 1 },\r\n // { x: 237.625899280576, y: 3.29411764705882, size: 1 },\r\n // { x: 238.273381294964, y: 3.25490196078431, size: 1 },\r\n // { x: 238.920863309353, y: 2.74509803921569, size: 1 },\r\n // { x: 242.805755395683, y: 3.72549019607843, size: 1 },\r\n // { x: 244.748201438849, y: 3.68627450980392, size: 1 },\r\n // { x: 253.165467625899, y: 3.64705882352941, size: 1 },\r\n // { x: 254.460431654676, y: 3.80392156862745, size: 1 },\r\n // { x: 255.107913669065, y: 4.15686274509804, size: 1 },\r\n // { x: 257.05035971223, y: 3.72549019607843, size: 1 },\r\n // { x: 258.992805755396, y: 3.2156862745098, size: 1 },\r\n // { x: 259.640287769784, y: 3.05882352941176, size: 1 },\r\n // { x: 260.287769784173, y: 2.27450980392157, size: 1 },\r\n // { x: 260.935251798561, y: 2.58823529411765, size: 1 },\r\n // { x: 261.58273381295, y: 3.41176470588235, size: 1 },\r\n // { x: 262.877697841727, y: 3.37254901960784, size: 1 },\r\n // { x: 265.467625899281, y: 3.56862745098039, size: 1 },\r\n // { x: 266.115107913669, y: 3.41176470588235, size: 1 },\r\n // { x: 266.762589928058, y: 3.37254901960784, size: 1 },\r\n // { x: 270, y: 3.33333333333333, size: 1 },\r\n // { x: 271.294964028777, y: 3.29411764705882, size: 1 },\r\n // { x: 271.942446043165, y: 3.80392156862745, size: 1 },\r\n // { x: 272.589928057554, y: 3.41176470588235, size: 1 },\r\n // { x: 273.237410071942, y: 3.37254901960784, size: 1 },\r\n // { x: 274.532374100719, y: 3.33333333333333, size: 1 },\r\n // { x: 279.712230215827, y: 3.33333333333333, size: 1 },\r\n // { x: 280.359712230216, y: 3.05882352941176, size: 1 },\r\n // { x: 281.654676258993, y: 2.47058823529412, size: 1 },\r\n // { x: 282.302158273381, y: 2.19607843137255, size: 1 },\r\n // { x: 282.94964028777, y: 3.49019607843137, size: 1 },\r\n // { x: 286.187050359712, y: 3.6078431372549, size: 1 },\r\n // { x: 291.36690647482, y: 3.72549019607843, size: 1 },\r\n // { x: 292.661870503597, y: 3.76470588235294, size: 1 },\r\n // { x: 294.604316546763, y: 3.80392156862745, size: 1 },\r\n // { x: 302.374100719424, y: 3.05882352941176, size: 1 },\r\n // { x: 306.906474820144, y: 3.80392156862745, size: 1 },\r\n // { x: 310.791366906475, y: 3.80392156862745, size: 1 },\r\n // { x: 311.438848920863, y: 3.84313725490196, size: 1 },\r\n // { x: 313.381294964029, y: 3.80392156862745, size: 1 },\r\n // { x: 314.028776978417, y: 3.64705882352941, size: 1 },\r\n // { x: 314.676258992806, y: 3.84313725490196, size: 1 },\r\n // { x: 316.618705035971, y: 3.76470588235294, size: 1 },\r\n // { x: 317.913669064748, y: 3.76470588235294, size: 1 },\r\n // { x: 323.093525179856, y: 3.76470588235294, size: 1 },\r\n // { x: 323.741007194245, y: 3.29411764705882, size: 1 },\r\n // { x: 324.388489208633, y: 3.17647058823529, size: 1 },\r\n // { x: 325.035971223022, y: 2.47058823529412, size: 1 },\r\n // { x: 325.68345323741, y: 2.66666666666667, size: 1 },\r\n // { x: 326.978417266187, y: 3.84313725490196, size: 1 },\r\n // { x: 327.625899280576, y: 3.84313725490196, size: 1 },\r\n // { x: 328.920863309353, y: 3.84313725490196, size: 1 },\r\n // { x: 334.10071942446, y: 3.72549019607843, size: 1 },\r\n // { x: 335.395683453237, y: 3.72549019607843, size: 1 },\r\n // { x: 336.690647482014, y: 3.76470588235294, size: 1 },\r\n // { x: 337.338129496403, y: 3.84313725490196, size: 1 },\r\n // { x: 338.63309352518, y: 3.45098039215686, size: 1 },\r\n // { x: 343.812949640288, y: 3.68627450980392, size: 1 },\r\n // { x: 345.107913669065, y: 3.52941176470588, size: 1 },\r\n // { x: 347.697841726619, y: 3.80392156862745, size: 1 },\r\n // { x: 359.352517985611, y: 3.92156862745098, size: 1 },\r\n // { x: 1.2972972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 1.94594594594595, y: 3.72549019607843, size: 1 },\r\n // { x: 2.59459459459459, y: 3.6078431372549, size: 1 },\r\n // { x: 5.83783783783784, y: 3.49019607843137, size: 1 },\r\n // { x: 6.48648648648649, y: 3.17647058823529, size: 1 },\r\n // { x: 7.13513513513514, y: 3.25490196078431, size: 1 },\r\n // { x: 7.78378378378378, y: 3.64705882352941, size: 1 },\r\n // { x: 8.43243243243243, y: 3.80392156862745, size: 1 },\r\n // { x: 9.08108108108108, y: 3.72549019607843, size: 1 },\r\n // { x: 9.72972972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 10.3783783783784, y: 3.72549019607843, size: 1 },\r\n // { x: 11.027027027027, y: 3.72549019607843, size: 1 },\r\n // { x: 11.6756756756757, y: 3.84313725490196, size: 1 },\r\n // { x: 12.3243243243243, y: 3.84313725490196, size: 1 },\r\n // { x: 12.972972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 13.6216216216216, y: 3.80392156862745, size: 1 },\r\n // { x: 14.2702702702703, y: 3.56862745098039, size: 1 },\r\n // { x: 15.5675675675676, y: 3.68627450980392, size: 1 },\r\n // { x: 16.8648648648649, y: 3.76470588235294, size: 1 },\r\n // { x: 17.5135135135135, y: 3.72549019607843, size: 1 },\r\n // { x: 18.1621621621622, y: 3.64705882352941, size: 1 },\r\n // { x: 19.4594594594595, y: 3.68627450980392, size: 1 },\r\n // { x: 20.1081081081081, y: 3.80392156862745, size: 1 },\r\n // { x: 20.7567567567568, y: 3.56862745098039, size: 1 },\r\n // { x: 22.0540540540541, y: 3.80392156862745, size: 1 },\r\n // { x: 22.7027027027027, y: 3.6078431372549, size: 1 },\r\n // { x: 23.3513513513514, y: 3.84313725490196, size: 1 },\r\n // { x: 25.2972972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 25.9459459459459, y: 3.84313725490196, size: 1 },\r\n // { x: 26.5945945945946, y: 3.64705882352941, size: 1 },\r\n // { x: 27.2432432432432, y: 3.72549019607843, size: 1 },\r\n // { x: 27.8918918918919, y: 3.56862745098039, size: 1 },\r\n // { x: 28.5405405405405, y: 3.76470588235294, size: 1 },\r\n // { x: 29.8378378378378, y: 3.76470588235294, size: 1 },\r\n // { x: 30.4864864864865, y: 3.72549019607843, size: 1 },\r\n // { x: 31.1351351351351, y: 3.72549019607843, size: 1 },\r\n // { x: 31.7837837837838, y: 3.6078431372549, size: 1 },\r\n // { x: 32.4324324324324, y: 3.64705882352941, size: 1 },\r\n // { x: 33.0810810810811, y: 3.72549019607843, size: 1 },\r\n // { x: 33.7297297297297, y: 3.52941176470588, size: 1 },\r\n // { x: 34.3783783783784, y: 3.76470588235294, size: 1 },\r\n // { x: 36.972972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 38.2702702702703, y: 3.64705882352941, size: 1 },\r\n // { x: 39.5675675675676, y: 3.6078431372549, size: 1 },\r\n // { x: 42.1621621621622, y: 3.72549019607843, size: 1 },\r\n // { x: 42.8108108108108, y: 3.68627450980392, size: 1 },\r\n // { x: 43.4594594594595, y: 3.45098039215686, size: 1 },\r\n // { x: 44.1081081081081, y: 3.76470588235294, size: 1 },\r\n // { x: 44.7567567567568, y: 3.92156862745098, size: 1 },\r\n // { x: 45.4054054054054, y: 3.49019607843137, size: 1 },\r\n // { x: 46.7027027027027, y: 3.6078431372549, size: 1 },\r\n // { x: 47.3513513513514, y: 3.76470588235294, size: 1 },\r\n // { x: 48.6486486486486, y: 3.56862745098039, size: 1 },\r\n // { x: 49.2972972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 49.9459459459459, y: 3.56862745098039, size: 1 },\r\n // { x: 50.5945945945946, y: 3.6078431372549, size: 1 },\r\n // { x: 52.5405405405405, y: 3.6078431372549, size: 1 },\r\n // { x: 53.1891891891892, y: 3.6078431372549, size: 1 },\r\n // { x: 57.0810810810811, y: 3.80392156862745, size: 1 },\r\n // { x: 57.7297297297297, y: 3.72549019607843, size: 1 },\r\n // { x: 58.3783783783784, y: 3.56862745098039, size: 1 },\r\n // { x: 59.027027027027, y: 3.76470588235294, size: 1 },\r\n // { x: 60.3243243243243, y: 3.76470588235294, size: 1 },\r\n // { x: 61.6216216216216, y: 3.72549019607843, size: 1 },\r\n // { x: 62.2702702702703, y: 3.37254901960784, size: 1 },\r\n // { x: 62.9189189189189, y: 3.72549019607843, size: 1 },\r\n // { x: 63.5675675675676, y: 4, size: 1 },\r\n // { x: 64.8648648648649, y: 3.68627450980392, size: 1 },\r\n // { x: 65.5135135135135, y: 3.64705882352941, size: 1 },\r\n // { x: 66.1621621621622, y: 3.64705882352941, size: 1 },\r\n // { x: 66.8108108108108, y: 3.52941176470588, size: 1 },\r\n // { x: 67.4594594594595, y: 3.68627450980392, size: 1 },\r\n // { x: 68.1081081081081, y: 3.68627450980392, size: 1 },\r\n // { x: 68.7567567567568, y: 3.88235294117647, size: 1 },\r\n // { x: 69.4054054054054, y: 3.56862745098039, size: 1 },\r\n // { x: 70.054054054054, y: 3.52941176470588, size: 1 },\r\n // { x: 70.7027027027027, y: 3.92156862745098, size: 1 },\r\n // { x: 71.3513513513514, y: 3.84313725490196, size: 1 },\r\n // { x: 72.6486486486486, y: 3.56862745098039, size: 1 },\r\n // { x: 73.2972972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 74.5945945945946, y: 3.76470588235294, size: 1 },\r\n // { x: 75.8918918918919, y: 3.84313725490196, size: 1 },\r\n // { x: 76.5405405405405, y: 3.84313725490196, size: 1 },\r\n // { x: 77.8378378378378, y: 3.84313725490196, size: 1 },\r\n // { x: 78.4864864864865, y: 3.49019607843137, size: 1 },\r\n // { x: 79.7837837837838, y: 3.64705882352941, size: 1 },\r\n // { x: 80.4324324324324, y: 3.76470588235294, size: 1 },\r\n // { x: 81.0810810810811, y: 3.84313725490196, size: 1 },\r\n // { x: 81.7297297297297, y: 3.92156862745098, size: 1 },\r\n // { x: 83.6756756756757, y: 3.68627450980392, size: 1 },\r\n // { x: 84.3243243243243, y: 3.76470588235294, size: 1 },\r\n // { x: 87.5675675675676, y: 3.72549019607843, size: 1 },\r\n // { x: 88.2162162162162, y: 3.84313725490196, size: 1 },\r\n // { x: 88.8648648648649, y: 4.03921568627451, size: 1 },\r\n // { x: 89.5135135135135, y: 3.45098039215686, size: 1 },\r\n // { x: 90.1621621621622, y: 3.76470588235294, size: 1 },\r\n // { x: 90.8108108108108, y: 3.76470588235294, size: 1 },\r\n // { x: 91.4594594594595, y: 3.72549019607843, size: 1 },\r\n // { x: 93.4054054054054, y: 3.45098039215686, size: 1 },\r\n // { x: 94.054054054054, y: 3.45098039215686, size: 1 },\r\n // { x: 95.3513513513514, y: 3.41176470588235, size: 1 },\r\n // { x: 96.6486486486486, y: 3.37254901960784, size: 1 },\r\n // { x: 97.945945945946, y: 3.72549019607843, size: 1 },\r\n // { x: 99.8918918918919, y: 3.80392156862745, size: 1 },\r\n // { x: 100.540540540541, y: 3.72549019607843, size: 1 },\r\n // { x: 101.189189189189, y: 3.52941176470588, size: 1 },\r\n // { x: 101.837837837838, y: 3.6078431372549, size: 1 },\r\n // { x: 102.486486486486, y: 3.6078431372549, size: 1 },\r\n // { x: 103.135135135135, y: 3.52941176470588, size: 1 },\r\n // { x: 103.783783783784, y: 3.76470588235294, size: 1 },\r\n // { x: 104.432432432432, y: 3.72549019607843, size: 1 },\r\n // { x: 106.378378378378, y: 3.45098039215686, size: 1 },\r\n // { x: 107.027027027027, y: 3.68627450980392, size: 1 },\r\n // { x: 107.675675675676, y: 3.56862745098039, size: 1 },\r\n // { x: 108.972972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 109.621621621622, y: 3.64705882352941, size: 1 },\r\n // { x: 110.27027027027, y: 3.72549019607843, size: 1 },\r\n // { x: 110.918918918919, y: 3.76470588235294, size: 1 },\r\n // { x: 112.864864864865, y: 3.68627450980392, size: 1 },\r\n // { x: 113.513513513514, y: 3.49019607843137, size: 1 },\r\n // { x: 114.162162162162, y: 3.64705882352941, size: 1 },\r\n // { x: 116.108108108108, y: 2.98039215686275, size: 1 },\r\n // { x: 116.756756756757, y: 2.70588235294118, size: 1 },\r\n // { x: 117.405405405405, y: 3.17647058823529, size: 1 },\r\n // { x: 118.054054054054, y: 3.17647058823529, size: 1 },\r\n // { x: 119.351351351351, y: 3.76470588235294, size: 1 },\r\n // { x: 120, y: 3.76470588235294, size: 1 },\r\n // { x: 120.648648648649, y: 3.80392156862745, size: 1 },\r\n // { x: 121.945945945946, y: 3.76470588235294, size: 1 },\r\n // { x: 122.594594594595, y: 3.80392156862745, size: 1 },\r\n // { x: 123.891891891892, y: 3.72549019607843, size: 1 },\r\n // { x: 124.540540540541, y: 3.64705882352941, size: 1 },\r\n // { x: 125.837837837838, y: 3.72549019607843, size: 1 },\r\n // { x: 126.486486486486, y: 3.72549019607843, size: 1 },\r\n // { x: 127.783783783784, y: 3.84313725490196, size: 1 },\r\n // { x: 128.432432432432, y: 3.72549019607843, size: 1 },\r\n // { x: 129.081081081081, y: 3.84313725490196, size: 1 },\r\n // { x: 129.72972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 130.378378378378, y: 4, size: 1 },\r\n // { x: 131.027027027027, y: 3.80392156862745, size: 1 },\r\n // { x: 131.675675675676, y: 3.68627450980392, size: 1 },\r\n // { x: 132.324324324324, y: 3.6078431372549, size: 1 },\r\n // { x: 132.972972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 133.621621621622, y: 3.84313725490196, size: 1 },\r\n // { x: 134.27027027027, y: 3.6078431372549, size: 1 },\r\n // { x: 134.918918918919, y: 3.80392156862745, size: 1 },\r\n // { x: 136.216216216216, y: 3.45098039215686, size: 1 },\r\n // { x: 137.513513513514, y: 3.64705882352941, size: 1 },\r\n // { x: 138.162162162162, y: 3.13725490196078, size: 1 },\r\n // { x: 138.810810810811, y: 2.90196078431373, size: 1 },\r\n // { x: 139.459459459459, y: 2.86274509803922, size: 1 },\r\n // { x: 140.108108108108, y: 3.01960784313725, size: 1 },\r\n // { x: 140.756756756757, y: 3.52941176470588, size: 1 },\r\n // { x: 142.702702702703, y: 3.88235294117647, size: 1 },\r\n // { x: 143.351351351351, y: 3.76470588235294, size: 1 },\r\n // { x: 144, y: 3.68627450980392, size: 1 },\r\n // { x: 144.648648648649, y: 3.68627450980392, size: 1 },\r\n // { x: 145.297297297297, y: 3.45098039215686, size: 1 },\r\n // { x: 147.243243243243, y: 3.72549019607843, size: 1 },\r\n // { x: 147.891891891892, y: 3.68627450980392, size: 1 },\r\n // { x: 148.540540540541, y: 3.64705882352941, size: 1 },\r\n // { x: 149.837837837838, y: 3.80392156862745, size: 1 },\r\n // { x: 150.486486486486, y: 3.96078431372549, size: 1 },\r\n // { x: 151.135135135135, y: 3.56862745098039, size: 1 },\r\n // { x: 151.783783783784, y: 3.6078431372549, size: 1 },\r\n // { x: 152.432432432432, y: 3.84313725490196, size: 1 },\r\n // { x: 153.081081081081, y: 3.49019607843137, size: 1 },\r\n // { x: 153.72972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 154.378378378378, y: 3.68627450980392, size: 1 },\r\n // { x: 155.675675675676, y: 3.6078431372549, size: 1 },\r\n // { x: 156.324324324324, y: 3.41176470588235, size: 1 },\r\n // { x: 157.621621621622, y: 3.33333333333333, size: 1 },\r\n // { x: 158.27027027027, y: 3.29411764705882, size: 1 },\r\n // { x: 158.918918918919, y: 3.29411764705882, size: 1 },\r\n // { x: 159.567567567568, y: 2.66666666666667, size: 1 },\r\n // { x: 160.216216216216, y: 2.86274509803922, size: 1 },\r\n // { x: 160.864864864865, y: 2.94117647058824, size: 1 },\r\n // { x: 161.513513513514, y: 3.01960784313725, size: 1 },\r\n // { x: 162.162162162162, y: 3.41176470588235, size: 1 },\r\n // { x: 162.810810810811, y: 3.52941176470588, size: 1 },\r\n // { x: 163.459459459459, y: 3.49019607843137, size: 1 },\r\n // { x: 164.108108108108, y: 3.52941176470588, size: 1 },\r\n // { x: 164.756756756757, y: 3.92156862745098, size: 1 },\r\n // { x: 166.054054054054, y: 3.64705882352941, size: 1 },\r\n // { x: 166.702702702703, y: 3.68627450980392, size: 1 },\r\n // { x: 168, y: 3.76470588235294, size: 1 },\r\n // { x: 169.297297297297, y: 3.80392156862745, size: 1 },\r\n // { x: 169.945945945946, y: 3.76470588235294, size: 1 },\r\n // { x: 170.594594594595, y: 3.76470588235294, size: 1 },\r\n // { x: 172.540540540541, y: 3.72549019607843, size: 1 },\r\n // { x: 174.486486486486, y: 3.56862745098039, size: 1 },\r\n // { x: 175.135135135135, y: 3.64705882352941, size: 1 },\r\n // { x: 175.783783783784, y: 4.07843137254902, size: 1 },\r\n // { x: 176.432432432432, y: 3.6078431372549, size: 1 },\r\n // { x: 177.081081081081, y: 3.37254901960784, size: 1 },\r\n // { x: 177.72972972973, y: 4.03921568627451, size: 1 },\r\n // { x: 179.675675675676, y: 3.37254901960784, size: 1 },\r\n // { x: 180.972972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 182.918918918919, y: 3.96078431372549, size: 1 },\r\n // { x: 184.216216216216, y: 3.72549019607843, size: 1 },\r\n // { x: 184.864864864865, y: 3.68627450980392, size: 1 },\r\n // { x: 185.513513513514, y: 3.76470588235294, size: 1 },\r\n // { x: 186.162162162162, y: 3.92156862745098, size: 1 },\r\n // { x: 187.459459459459, y: 3.72549019607843, size: 1 },\r\n // { x: 188.756756756757, y: 3.64705882352941, size: 1 },\r\n // { x: 189.405405405405, y: 3.68627450980392, size: 1 },\r\n // { x: 191.351351351351, y: 3.88235294117647, size: 1 },\r\n // { x: 192.648648648649, y: 3.84313725490196, size: 1 },\r\n // { x: 193.297297297297, y: 3.76470588235294, size: 1 },\r\n // { x: 193.945945945946, y: 3.80392156862745, size: 1 },\r\n // { x: 194.594594594595, y: 3.84313725490196, size: 1 },\r\n // { x: 195.891891891892, y: 3.88235294117647, size: 1 },\r\n // { x: 196.540540540541, y: 3.88235294117647, size: 1 },\r\n // { x: 197.189189189189, y: 3.72549019607843, size: 1 },\r\n // { x: 197.837837837838, y: 3.88235294117647, size: 1 },\r\n // { x: 198.486486486486, y: 3.68627450980392, size: 1 },\r\n // { x: 199.135135135135, y: 3.92156862745098, size: 1 },\r\n // { x: 200.432432432432, y: 3.72549019607843, size: 1 },\r\n // { x: 201.081081081081, y: 3.41176470588235, size: 1 },\r\n // { x: 202.378378378378, y: 3.72549019607843, size: 1 },\r\n // { x: 203.027027027027, y: 3.88235294117647, size: 1 },\r\n // { x: 203.675675675676, y: 3.72549019607843, size: 1 },\r\n // { x: 204.324324324324, y: 3.76470588235294, size: 1 },\r\n // { x: 208.216216216216, y: 3.80392156862745, size: 1 },\r\n // { x: 209.513513513514, y: 3.6078431372549, size: 1 },\r\n // { x: 212.108108108108, y: 3.68627450980392, size: 1 },\r\n // { x: 212.756756756757, y: 3.72549019607843, size: 1 },\r\n // { x: 214.054054054054, y: 3.64705882352941, size: 1 },\r\n // { x: 214.702702702703, y: 3.88235294117647, size: 1 },\r\n // { x: 217.297297297297, y: 3.68627450980392, size: 1 },\r\n // { x: 219.243243243243, y: 3.56862745098039, size: 1 },\r\n // { x: 219.891891891892, y: 3.6078431372549, size: 1 },\r\n // { x: 220.540540540541, y: 3.6078431372549, size: 1 },\r\n // { x: 221.837837837838, y: 3.68627450980392, size: 1 },\r\n // { x: 223.135135135135, y: 3.72549019607843, size: 1 },\r\n // { x: 225.081081081081, y: 3.49019607843137, size: 1 },\r\n // { x: 225.72972972973, y: 3.92156862745098, size: 1 },\r\n // { x: 227.027027027027, y: 3.45098039215686, size: 1 },\r\n // { x: 227.675675675676, y: 3.64705882352941, size: 1 },\r\n // { x: 228.972972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 230.27027027027, y: 3.56862745098039, size: 1 },\r\n // { x: 231.567567567568, y: 3.52941176470588, size: 1 },\r\n // { x: 232.216216216216, y: 3.68627450980392, size: 1 },\r\n // { x: 232.864864864865, y: 3.72549019607843, size: 1 },\r\n // { x: 233.513513513514, y: 3.68627450980392, size: 1 },\r\n // { x: 234.810810810811, y: 3.80392156862745, size: 1 },\r\n // { x: 235.459459459459, y: 3.84313725490196, size: 1 },\r\n // { x: 237.405405405405, y: 3.80392156862745, size: 1 },\r\n // { x: 238.054054054054, y: 3.56862745098039, size: 1 },\r\n // { x: 239.351351351351, y: 3.96078431372549, size: 1 },\r\n // { x: 240.648648648649, y: 3.68627450980392, size: 1 },\r\n // { x: 241.297297297297, y: 3.72549019607843, size: 1 },\r\n // { x: 241.945945945946, y: 3.64705882352941, size: 1 },\r\n // { x: 242.594594594595, y: 3.52941176470588, size: 1 },\r\n // { x: 243.891891891892, y: 3.64705882352941, size: 1 },\r\n // { x: 244.540540540541, y: 3.41176470588235, size: 1 },\r\n // { x: 245.837837837838, y: 3.2156862745098, size: 1 },\r\n // { x: 246.486486486486, y: 3.13725490196078, size: 1 },\r\n // { x: 247.135135135135, y: 2.98039215686275, size: 1 },\r\n // { x: 247.783783783784, y: 3.05882352941176, size: 1 },\r\n // { x: 248.432432432432, y: 3.41176470588235, size: 1 },\r\n // { x: 249.081081081081, y: 3.72549019607843, size: 1 },\r\n // { x: 249.72972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 250.378378378378, y: 3.72549019607843, size: 1 },\r\n // { x: 251.027027027027, y: 3.80392156862745, size: 1 },\r\n // { x: 251.675675675676, y: 3.68627450980392, size: 1 },\r\n // { x: 252.972972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 253.621621621622, y: 3.45098039215686, size: 1 },\r\n // { x: 254.27027027027, y: 3.76470588235294, size: 1 },\r\n // { x: 254.918918918919, y: 3.45098039215686, size: 1 },\r\n // { x: 255.567567567568, y: 3.84313725490196, size: 1 },\r\n // { x: 256.864864864865, y: 3.49019607843137, size: 1 },\r\n // { x: 257.513513513513, y: 3.84313725490196, size: 1 },\r\n // { x: 260.108108108108, y: 3.64705882352941, size: 1 },\r\n // { x: 260.756756756757, y: 3.80392156862745, size: 1 },\r\n // { x: 261.405405405405, y: 3.45098039215686, size: 1 },\r\n // { x: 262.054054054054, y: 3.64705882352941, size: 1 },\r\n // { x: 262.702702702703, y: 3.76470588235294, size: 1 },\r\n // { x: 263.351351351351, y: 3.49019607843137, size: 1 },\r\n // { x: 264, y: 3.84313725490196, size: 1 },\r\n // { x: 264.648648648649, y: 3.76470588235294, size: 1 },\r\n // { x: 266.594594594595, y: 3.33333333333333, size: 1 },\r\n // { x: 267.891891891892, y: 3.56862745098039, size: 1 },\r\n // { x: 268.540540540541, y: 3.6078431372549, size: 1 },\r\n // { x: 269.189189189189, y: 3.49019607843137, size: 1 },\r\n // { x: 269.837837837838, y: 3.37254901960784, size: 1 },\r\n // { x: 270.486486486487, y: 3.72549019607843, size: 1 },\r\n // { x: 271.135135135135, y: 3.68627450980392, size: 1 },\r\n // { x: 271.783783783784, y: 3.64705882352941, size: 1 },\r\n // { x: 273.72972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 275.675675675676, y: 3.56862745098039, size: 1 },\r\n // { x: 276.324324324324, y: 3.6078431372549, size: 1 },\r\n // { x: 276.972972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 277.621621621622, y: 3.68627450980392, size: 1 },\r\n // { x: 278.27027027027, y: 3.49019607843137, size: 1 },\r\n // { x: 278.918918918919, y: 3.76470588235294, size: 1 },\r\n // { x: 282.162162162162, y: 3.64705882352941, size: 1 },\r\n // { x: 282.810810810811, y: 3.88235294117647, size: 1 },\r\n // { x: 283.459459459459, y: 3.84313725490196, size: 1 },\r\n // { x: 284.108108108108, y: 3.84313725490196, size: 1 },\r\n // { x: 284.756756756757, y: 3.56862745098039, size: 1 },\r\n // { x: 285.405405405405, y: 3.56862745098039, size: 1 },\r\n // { x: 286.702702702703, y: 3.45098039215686, size: 1 },\r\n // { x: 287.351351351351, y: 3.49019607843137, size: 1 },\r\n // { x: 288, y: 3.68627450980392, size: 1 },\r\n // { x: 288.648648648649, y: 3.64705882352941, size: 1 },\r\n // { x: 289.297297297297, y: 3.45098039215686, size: 1 },\r\n // { x: 290.594594594595, y: 3.52941176470588, size: 1 },\r\n // { x: 291.243243243243, y: 3.29411764705882, size: 1 },\r\n // { x: 291.891891891892, y: 3.33333333333333, size: 1 },\r\n // { x: 293.189189189189, y: 3.45098039215686, size: 1 },\r\n // { x: 297.081081081081, y: 3.45098039215686, size: 1 },\r\n // { x: 297.72972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 298.378378378378, y: 3.6078431372549, size: 1 },\r\n // { x: 299.027027027027, y: 3.68627450980392, size: 1 },\r\n // { x: 300.324324324324, y: 3.29411764705882, size: 1 },\r\n // { x: 301.621621621622, y: 3.49019607843137, size: 1 },\r\n // { x: 302.27027027027, y: 3.37254901960784, size: 1 },\r\n // { x: 302.918918918919, y: 3.52941176470588, size: 1 },\r\n // { x: 304.216216216216, y: 3.56862745098039, size: 1 },\r\n // { x: 305.513513513513, y: 3.6078431372549, size: 1 },\r\n // { x: 306.810810810811, y: 3.49019607843137, size: 1 },\r\n // { x: 308.756756756757, y: 3.45098039215686, size: 1 },\r\n // { x: 310.702702702703, y: 3.33333333333333, size: 1 },\r\n // { x: 311.351351351351, y: 3.37254901960784, size: 1 },\r\n // { x: 312, y: 3.41176470588235, size: 1 },\r\n // { x: 313.297297297297, y: 3.33333333333333, size: 1 },\r\n // { x: 313.945945945946, y: 3.56862745098039, size: 1 },\r\n // { x: 315.243243243243, y: 3.72549019607843, size: 1 },\r\n // { x: 315.891891891892, y: 3.6078431372549, size: 1 },\r\n // { x: 318.486486486487, y: 3.45098039215686, size: 1 },\r\n // { x: 319.135135135135, y: 3.96078431372549, size: 1 },\r\n // { x: 319.783783783784, y: 3.68627450980392, size: 1 },\r\n // { x: 322.378378378378, y: 3.76470588235294, size: 1 },\r\n // { x: 323.027027027027, y: 3.80392156862745, size: 1 },\r\n // { x: 324.972972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 325.621621621622, y: 3.80392156862745, size: 1 },\r\n // { x: 326.918918918919, y: 3.80392156862745, size: 1 },\r\n // { x: 327.567567567568, y: 3.84313725490196, size: 1 },\r\n // { x: 328.216216216216, y: 3.72549019607843, size: 1 },\r\n // { x: 328.864864864865, y: 3.68627450980392, size: 1 },\r\n // { x: 330.162162162162, y: 3.92156862745098, size: 1 },\r\n // { x: 332.108108108108, y: 3.84313725490196, size: 1 },\r\n // { x: 332.756756756757, y: 3.29411764705882, size: 1 },\r\n // { x: 333.405405405405, y: 3.25490196078431, size: 1 },\r\n // { x: 334.054054054054, y: 3.25490196078431, size: 1 },\r\n // { x: 334.702702702703, y: 3.2156862745098, size: 1 },\r\n // { x: 337.945945945946, y: 3.96078431372549, size: 1 },\r\n // { x: 338.594594594595, y: 3.68627450980392, size: 1 },\r\n // { x: 339.243243243243, y: 3.92156862745098, size: 1 },\r\n // { x: 339.891891891892, y: 3.64705882352941, size: 1 },\r\n // { x: 340.540540540541, y: 3.72549019607843, size: 1 },\r\n // { x: 341.837837837838, y: 3.76470588235294, size: 1 },\r\n // { x: 343.135135135135, y: 3.64705882352941, size: 1 },\r\n // { x: 344.432432432432, y: 3.88235294117647, size: 1 },\r\n // { x: 345.081081081081, y: 3.64705882352941, size: 1 },\r\n // { x: 345.72972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 346.378378378378, y: 3.88235294117647, size: 1 },\r\n // { x: 347.027027027027, y: 3.80392156862745, size: 1 },\r\n // { x: 350.27027027027, y: 3.64705882352941, size: 1 },\r\n // { x: 350.918918918919, y: 3.6078431372549, size: 1 },\r\n // { x: 351.567567567568, y: 3.92156862745098, size: 1 },\r\n // { x: 352.864864864865, y: 3.49019607843137, size: 1 },\r\n // { x: 354.810810810811, y: 3.25490196078431, size: 1 },\r\n // { x: 355.459459459459, y: 3.41176470588235, size: 1 },\r\n // { x: 356.108108108108, y: 3.17647058823529, size: 1 },\r\n // { x: 357.405405405405, y: 3.64705882352941, size: 1 },\r\n // { x: 358.702702702703, y: 3.80392156862745, size: 1 },\r\n // { x: 359.351351351351, y: 3.72549019607843, size: 1 },\r\n // { x: 10.3597122302158, y: 3.76470588235294, size: 1 },\r\n // { x: 15.5395683453237, y: 3.2156862745098, size: 1 },\r\n // { x: 16.1870503597122, y: 3.2156862745098, size: 1 },\r\n // { x: 16.8345323741007, y: 3.37254901960784, size: 1 },\r\n // { x: 19.4244604316547, y: 3.64705882352941, size: 1 },\r\n // { x: 20.7194244604317, y: 3.6078431372549, size: 1 },\r\n // { x: 23.3093525179856, y: 3.72549019607843, size: 1 },\r\n // { x: 24.6043165467626, y: 3.76470588235294, size: 1 },\r\n // { x: 29.7841726618705, y: 3.88235294117647, size: 1 },\r\n // { x: 34.3165467625899, y: 3.92156862745098, size: 1 },\r\n // { x: 34.9640287769784, y: 3.64705882352941, size: 1 },\r\n // { x: 38.8489208633094, y: 4.03921568627451, size: 1 },\r\n // { x: 40.1438848920863, y: 4, size: 1 },\r\n // { x: 40.7913669064748, y: 3.76470588235294, size: 1 },\r\n // { x: 44.6762589928058, y: 4.03921568627451, size: 1 },\r\n // { x: 45.9712230215827, y: 3.88235294117647, size: 1 },\r\n // { x: 46.6187050359712, y: 3.84313725490196, size: 1 },\r\n // { x: 50.5035971223022, y: 3.88235294117647, size: 1 },\r\n // { x: 52.4460431654676, y: 3.88235294117647, size: 1 },\r\n // { x: 54.3884892086331, y: 3.72549019607843, size: 1 },\r\n // { x: 60.863309352518, y: 3.33333333333333, size: 1 },\r\n // { x: 63.4532374100719, y: 3.84313725490196, size: 1 },\r\n // { x: 65.3956834532374, y: 4.15686274509804, size: 1 },\r\n // { x: 67.3381294964029, y: 3.64705882352941, size: 1 },\r\n // { x: 68.6330935251799, y: 3.52941176470588, size: 1 },\r\n // { x: 80.2877697841727, y: 3.09803921568627, size: 1 },\r\n // { x: 80.9352517985612, y: 3.05882352941176, size: 1 },\r\n // { x: 81.5827338129496, y: 3.2156862745098, size: 1 },\r\n // { x: 82.8776978417266, y: 3.6078431372549, size: 1 },\r\n // { x: 84.8201438848921, y: 3.76470588235294, size: 1 },\r\n // { x: 95.8273381294964, y: 3.76470588235294, size: 1 },\r\n // { x: 101.654676258993, y: 3.37254901960784, size: 1 },\r\n // { x: 104.244604316547, y: 3.09803921568627, size: 1 },\r\n // { x: 104.892086330935, y: 3.37254901960784, size: 1 },\r\n // { x: 108.129496402878, y: 3.45098039215686, size: 1 },\r\n // { x: 112.014388489209, y: 3.88235294117647, size: 1 },\r\n // { x: 124.31654676259, y: 3.80392156862745, size: 1 },\r\n // { x: 125.611510791367, y: 3.37254901960784, size: 1 },\r\n // { x: 126.906474820144, y: 3.45098039215686, size: 1 },\r\n // { x: 142.446043165468, y: 3.37254901960784, size: 1 },\r\n // { x: 143.093525179856, y: 3.68627450980392, size: 1 },\r\n // { x: 144.388489208633, y: 3.37254901960784, size: 1 },\r\n // { x: 153.453237410072, y: 3.84313725490196, size: 1 },\r\n // { x: 156.043165467626, y: 3.96078431372549, size: 1 },\r\n // { x: 159.280575539568, y: 3.64705882352941, size: 1 },\r\n // { x: 162.517985611511, y: 3.80392156862745, size: 1 },\r\n // { x: 165.755395683453, y: 3.41176470588235, size: 1 },\r\n // { x: 168.345323741007, y: 3.45098039215686, size: 1 },\r\n // { x: 169.640287769784, y: 3.68627450980392, size: 1 },\r\n // { x: 172.877697841727, y: 3.64705882352941, size: 1 },\r\n // { x: 173.525179856115, y: 3.45098039215686, size: 1 },\r\n // { x: 175.467625899281, y: 3.72549019607843, size: 1 },\r\n // { x: 178.705035971223, y: 3.45098039215686, size: 1 },\r\n // { x: 186.474820143885, y: 3.2156862745098, size: 1 },\r\n // { x: 187.769784172662, y: 3.25490196078431, size: 1 },\r\n // { x: 188.41726618705, y: 2.7843137254902, size: 1 },\r\n // { x: 189.064748201439, y: 2.90196078431373, size: 1 },\r\n // { x: 189.712230215827, y: 3.05882352941176, size: 1 },\r\n // { x: 190.359712230216, y: 2.82352941176471, size: 1 },\r\n // { x: 199.424460431655, y: 3.41176470588235, size: 1 },\r\n // { x: 204.604316546763, y: 3.72549019607843, size: 1 },\r\n // { x: 205.251798561151, y: 3.76470588235294, size: 1 },\r\n // { x: 208.489208633094, y: 3.41176470588235, size: 1 },\r\n // { x: 210.431654676259, y: 3.05882352941176, size: 1 },\r\n // { x: 211.079136690647, y: 2.90196078431373, size: 1 },\r\n // { x: 211.726618705036, y: 2.7843137254902, size: 1 },\r\n // { x: 221.438848920863, y: 3.64705882352941, size: 1 },\r\n // { x: 223.381294964029, y: 3.41176470588235, size: 1 },\r\n // { x: 224.028776978417, y: 3.41176470588235, size: 1 },\r\n // { x: 225.971223021583, y: 3.68627450980392, size: 1 },\r\n // { x: 229.208633093525, y: 3.37254901960784, size: 1 },\r\n // { x: 235.035971223022, y: 3.49019607843137, size: 1 },\r\n // { x: 237.625899280576, y: 4.07843137254902, size: 1 },\r\n // { x: 238.273381294964, y: 3.49019607843137, size: 1 },\r\n // { x: 243.453237410072, y: 3.80392156862745, size: 1 },\r\n // { x: 244.10071942446, y: 3.45098039215686, size: 1 },\r\n // { x: 246.043165467626, y: 3.41176470588235, size: 1 },\r\n // { x: 249.928057553957, y: 3.80392156862745, size: 1 },\r\n // { x: 250.575539568345, y: 3.41176470588235, size: 1 },\r\n // { x: 262.230215827338, y: 3.84313725490196, size: 1 },\r\n // { x: 266.762589928058, y: 3.45098039215686, size: 1 },\r\n // { x: 268.057553956835, y: 3.45098039215686, size: 1 },\r\n // { x: 268.705035971223, y: 3.56862745098039, size: 1 },\r\n // { x: 275.827338129496, y: 3.64705882352941, size: 1 },\r\n // { x: 277.769784172662, y: 3.52941176470588, size: 1 },\r\n // { x: 282.302158273381, y: 3.76470588235294, size: 1 },\r\n // { x: 289.424460431655, y: 3.29411764705882, size: 1 },\r\n // { x: 290.071942446043, y: 3.56862745098039, size: 1 },\r\n // { x: 295.251798561151, y: 3.33333333333333, size: 1 },\r\n // { x: 296.546762589928, y: 2.94117647058824, size: 1 },\r\n // { x: 297.194244604317, y: 2.74509803921569, size: 1 },\r\n // { x: 297.841726618705, y: 2.82352941176471, size: 1 },\r\n // { x: 298.489208633094, y: 2.50980392156863, size: 1 },\r\n // { x: 301.726618705036, y: 3.84313725490196, size: 1 },\r\n // { x: 315.323741007194, y: 3.37254901960784, size: 1 },\r\n // { x: 320.503597122302, y: 3.52941176470588, size: 1 },\r\n // { x: 325.035971223022, y: 3.68627450980392, size: 1 },\r\n // { x: 325.68345323741, y: 4.03921568627451, size: 1 },\r\n // { x: 328.920863309353, y: 3.45098039215686, size: 1 },\r\n // { x: 329.568345323741, y: 3.68627450980392, size: 1 },\r\n // { x: 332.805755395683, y: 3.84313725490196, size: 1 },\r\n // { x: 334.748201438849, y: 3.52941176470588, size: 1 },\r\n // { x: 336.043165467626, y: 3.76470588235294, size: 1 },\r\n // { x: 339.280575539568, y: 3.29411764705882, size: 1 },\r\n // { x: 339.928057553957, y: 3.29411764705882, size: 1 },\r\n // { x: 340.575539568345, y: 3.88235294117647, size: 1 },\r\n // { x: 341.870503597122, y: 4.07843137254902, size: 1 },\r\n // { x: 345.107913669065, y: 3.92156862745098, size: 1 },\r\n // { x: 348.992805755396, y: 3.88235294117647, size: 1 },\r\n // { x: 350.287769784173, y: 3.88235294117647, size: 1 },\r\n // { x: 353.525179856115, y: 3.88235294117647, size: 1 },\r\n // { x: 355.467625899281, y: 3.92156862745098, size: 1 },\r\n // { x: 1.94244604316547, y: 3.45098039215686, size: 1 },\r\n // { x: 3.88489208633094, y: 3.33333333333333, size: 1 },\r\n // { x: 8.41726618705036, y: 3.72549019607843, size: 1 },\r\n // { x: 11.0071942446043, y: 3.56862745098039, size: 1 },\r\n // { x: 12.9496402877698, y: 3.6078431372549, size: 1 },\r\n // { x: 14.2446043165468, y: 3.29411764705882, size: 1 },\r\n // { x: 15.5395683453237, y: 3.41176470588235, size: 1 },\r\n // { x: 17.4820143884892, y: 3.49019607843137, size: 1 },\r\n // { x: 18.1294964028777, y: 3.29411764705882, size: 1 },\r\n // { x: 20.7194244604317, y: 3.49019607843137, size: 1 },\r\n // { x: 22.0143884892086, y: 3.41176470588235, size: 1 },\r\n // { x: 22.6618705035971, y: 3.01960784313725, size: 1 },\r\n // { x: 23.9568345323741, y: 3.2156862745098, size: 1 },\r\n // { x: 24.6043165467626, y: 3.17647058823529, size: 1 },\r\n // { x: 26.5467625899281, y: 3.37254901960784, size: 1 },\r\n // { x: 29.136690647482, y: 3.33333333333333, size: 1 },\r\n // { x: 29.7841726618705, y: 3.72549019607843, size: 1 },\r\n // { x: 30.431654676259, y: 3.33333333333333, size: 1 },\r\n // { x: 33.6690647482014, y: 3.37254901960784, size: 1 },\r\n // { x: 40.7913669064748, y: 3.49019607843137, size: 1 },\r\n // { x: 44.0287769784173, y: 2.54901960784314, size: 1 },\r\n // { x: 44.6762589928058, y: 2.82352941176471, size: 1 },\r\n // { x: 45.3237410071942, y: 2.58823529411765, size: 1 },\r\n // { x: 47.2661870503597, y: 3.88235294117647, size: 1 },\r\n // { x: 47.9136690647482, y: 3.96078431372549, size: 1 },\r\n // { x: 49.2086330935252, y: 3.64705882352941, size: 1 },\r\n // { x: 50.5035971223022, y: 3.92156862745098, size: 1 },\r\n // { x: 55.6834532374101, y: 3.64705882352941, size: 1 },\r\n // { x: 65.3956834532374, y: 3.41176470588235, size: 1 },\r\n // { x: 66.0431654676259, y: 3.29411764705882, size: 1 },\r\n // { x: 66.6906474820144, y: 3.01960784313725, size: 1 },\r\n // { x: 69.9280575539568, y: 4.03921568627451, size: 1 },\r\n // { x: 70.5755395683453, y: 3.68627450980392, size: 1 },\r\n // { x: 71.2230215827338, y: 3.6078431372549, size: 1 },\r\n // { x: 71.8705035971223, y: 3.84313725490196, size: 1 },\r\n // { x: 74.4604316546763, y: 3.6078431372549, size: 1 },\r\n // { x: 78.3453237410072, y: 3.64705882352941, size: 1 },\r\n // { x: 80.2877697841727, y: 4, size: 1 },\r\n // { x: 83.5251798561151, y: 3.88235294117647, size: 1 },\r\n // { x: 87.410071942446, y: 3.41176470588235, size: 1 },\r\n // { x: 88.0575539568345, y: 3.25490196078431, size: 1 },\r\n // { x: 88.705035971223, y: 3.29411764705882, size: 1 },\r\n // { x: 89.3525179856115, y: 3.29411764705882, size: 1 },\r\n // { x: 90, y: 3.09803921568627, size: 1 },\r\n // { x: 90.6474820143885, y: 3.29411764705882, size: 1 },\r\n // { x: 91.294964028777, y: 3.33333333333333, size: 1 },\r\n // { x: 93.8848920863309, y: 3.29411764705882, size: 1 },\r\n // { x: 94.5323741007194, y: 3.29411764705882, size: 1 },\r\n // { x: 95.8273381294964, y: 3.25490196078431, size: 1 },\r\n // { x: 96.4748201438849, y: 3.72549019607843, size: 1 },\r\n // { x: 97.1223021582734, y: 3.49019607843137, size: 1 },\r\n // { x: 98.4172661870504, y: 3.2156862745098, size: 1 },\r\n // { x: 101.007194244604, y: 3.37254901960784, size: 1 },\r\n // { x: 102.302158273381, y: 3.33333333333333, size: 1 },\r\n // { x: 104.892086330935, y: 3.29411764705882, size: 1 },\r\n // { x: 105.539568345324, y: 3.41176470588235, size: 1 },\r\n // { x: 107.482014388489, y: 3.45098039215686, size: 1 },\r\n // { x: 108.129496402878, y: 3.76470588235294, size: 1 },\r\n // { x: 108.776978417266, y: 3.2156862745098, size: 1 },\r\n // { x: 109.424460431655, y: 3.01960784313725, size: 1 },\r\n // { x: 110.719424460432, y: 2.94117647058824, size: 1 },\r\n // { x: 111.36690647482, y: 3.33333333333333, size: 1 },\r\n // { x: 112.661870503597, y: 4.07843137254902, size: 1 },\r\n // { x: 116.546762589928, y: 3.80392156862745, size: 1 },\r\n // { x: 117.194244604317, y: 3.64705882352941, size: 1 },\r\n // { x: 117.841726618705, y: 3.29411764705882, size: 1 },\r\n // { x: 118.489208633094, y: 3.76470588235294, size: 1 },\r\n // { x: 122.374100719424, y: 3.72549019607843, size: 1 },\r\n // { x: 124.964028776978, y: 3.76470588235294, size: 1 },\r\n // { x: 126.906474820144, y: 4, size: 1 },\r\n // { x: 130.143884892086, y: 3.25490196078431, size: 1 },\r\n // { x: 130.791366906475, y: 2.94117647058824, size: 1 },\r\n // { x: 131.438848920863, y: 3.09803921568627, size: 1 },\r\n // { x: 132.086330935252, y: 3.25490196078431, size: 1 },\r\n // { x: 133.381294964029, y: 3.25490196078431, size: 1 },\r\n // { x: 134.676258992806, y: 3.33333333333333, size: 1 },\r\n // { x: 135.971223021583, y: 3.49019607843137, size: 1 },\r\n // { x: 137.913669064748, y: 3.29411764705882, size: 1 },\r\n // { x: 139.208633093525, y: 3.17647058823529, size: 1 },\r\n // { x: 139.856115107914, y: 3.52941176470588, size: 1 },\r\n // { x: 143.741007194245, y: 3.41176470588235, size: 1 },\r\n // { x: 144.388489208633, y: 3.13725490196078, size: 1 },\r\n // { x: 148.273381294964, y: 3.37254901960784, size: 1 },\r\n // { x: 155.395683453237, y: 3.6078431372549, size: 1 },\r\n // { x: 163.165467625899, y: 3.92156862745098, size: 1 },\r\n // { x: 172.230215827338, y: 3.2156862745098, size: 1 },\r\n // { x: 172.877697841727, y: 3.17647058823529, size: 1 },\r\n // { x: 173.525179856115, y: 3.01960784313725, size: 1 },\r\n // { x: 174.172661870504, y: 2.94117647058824, size: 1 },\r\n // { x: 176.115107913669, y: 3.80392156862745, size: 1 },\r\n // { x: 177.410071942446, y: 4.23529411764706, size: 1 },\r\n // { x: 179.352517985612, y: 3.68627450980392, size: 1 },\r\n // { x: 184.532374100719, y: 3.88235294117647, size: 1 },\r\n // { x: 185.179856115108, y: 3.92156862745098, size: 1 },\r\n // { x: 186.474820143885, y: 3.96078431372549, size: 1 },\r\n // { x: 187.122302158273, y: 4.07843137254902, size: 1 },\r\n // { x: 188.41726618705, y: 3.88235294117647, size: 1 },\r\n // { x: 190.359712230216, y: 3.88235294117647, size: 1 },\r\n // { x: 191.007194244604, y: 3.92156862745098, size: 1 },\r\n // { x: 191.654676258993, y: 4, size: 1 },\r\n // { x: 192.94964028777, y: 3.84313725490196, size: 1 },\r\n // { x: 194.892086330935, y: 3.29411764705882, size: 1 },\r\n // { x: 195.539568345324, y: 3.33333333333333, size: 1 },\r\n // { x: 196.187050359712, y: 3.17647058823529, size: 1 },\r\n // { x: 196.834532374101, y: 2.94117647058824, size: 1 },\r\n // { x: 197.482014388489, y: 2.94117647058824, size: 1 },\r\n // { x: 204.604316546763, y: 3.80392156862745, size: 1 },\r\n // { x: 207.194244604317, y: 3.6078431372549, size: 1 },\r\n // { x: 209.136690647482, y: 3.56862745098039, size: 1 },\r\n // { x: 210.431654676259, y: 3.68627450980392, size: 1 },\r\n // { x: 212.374100719424, y: 3.80392156862745, size: 1 },\r\n // { x: 213.669064748201, y: 3.96078431372549, size: 1 },\r\n // { x: 216.258992805755, y: 3.29411764705882, size: 1 },\r\n // { x: 216.906474820144, y: 3.37254901960784, size: 1 },\r\n // { x: 218.848920863309, y: 3.33333333333333, size: 1 },\r\n // { x: 219.496402877698, y: 3.41176470588235, size: 1 },\r\n // { x: 220.791366906475, y: 3.37254901960784, size: 1 },\r\n // { x: 222.73381294964, y: 3.25490196078431, size: 1 },\r\n // { x: 223.381294964029, y: 3.25490196078431, size: 1 },\r\n // { x: 224.676258992806, y: 3.2156862745098, size: 1 },\r\n // { x: 225.323741007194, y: 3.52941176470588, size: 1 },\r\n // { x: 227.26618705036, y: 3.45098039215686, size: 1 },\r\n // { x: 229.208633093525, y: 3.41176470588235, size: 1 },\r\n // { x: 230.503597122302, y: 3.17647058823529, size: 1 },\r\n // { x: 231.798561151079, y: 3.45098039215686, size: 1 },\r\n // { x: 234.388489208633, y: 3.25490196078431, size: 1 },\r\n // { x: 235.68345323741, y: 3.41176470588235, size: 1 },\r\n // { x: 236.978417266187, y: 3.84313725490196, size: 1 },\r\n // { x: 238.273381294964, y: 3.80392156862745, size: 1 },\r\n // { x: 240.215827338129, y: 3.41176470588235, size: 1 },\r\n // { x: 240.863309352518, y: 3.41176470588235, size: 1 },\r\n // { x: 242.158273381295, y: 3.33333333333333, size: 1 },\r\n // { x: 249.280575539568, y: 3.33333333333333, size: 1 },\r\n // { x: 252.517985611511, y: 3.45098039215686, size: 1 },\r\n // { x: 253.165467625899, y: 3.25490196078431, size: 1 },\r\n // { x: 257.05035971223, y: 3.29411764705882, size: 1 },\r\n // { x: 260.287769784173, y: 3.25490196078431, size: 1 },\r\n // { x: 264.172661870504, y: 3.80392156862745, size: 1 },\r\n // { x: 267.410071942446, y: 3.96078431372549, size: 1 },\r\n // { x: 268.705035971223, y: 3.92156862745098, size: 1 },\r\n // { x: 269.352517985611, y: 3.92156862745098, size: 1 },\r\n // { x: 272.589928057554, y: 3.49019607843137, size: 1 },\r\n // { x: 274.532374100719, y: 3.52941176470588, size: 1 },\r\n // { x: 275.827338129496, y: 3.80392156862745, size: 1 },\r\n // { x: 281.007194244604, y: 3.52941176470588, size: 1 },\r\n // { x: 281.654676258993, y: 3.29411764705882, size: 1 },\r\n // { x: 282.302158273381, y: 3.17647058823529, size: 1 },\r\n // { x: 282.94964028777, y: 3.80392156862745, size: 1 },\r\n // { x: 284.244604316547, y: 3.72549019607843, size: 1 },\r\n // { x: 295.251798561151, y: 3.92156862745098, size: 1 },\r\n // { x: 300.431654676259, y: 3.92156862745098, size: 1 },\r\n // { x: 303.021582733813, y: 3.01960784313725, size: 1 },\r\n // { x: 303.669064748201, y: 2.82352941176471, size: 1 },\r\n // { x: 304.31654676259, y: 4.07843137254902, size: 1 },\r\n // { x: 305.611510791367, y: 4, size: 1 },\r\n // { x: 306.906474820144, y: 3.76470588235294, size: 1 },\r\n // { x: 309.496402877698, y: 3.80392156862745, size: 1 },\r\n // { x: 312.73381294964, y: 4.07843137254902, size: 1 },\r\n // { x: 313.381294964029, y: 3.76470588235294, size: 1 },\r\n // { x: 315.971223021583, y: 3.88235294117647, size: 1 },\r\n // { x: 319.208633093525, y: 3.92156862745098, size: 1 },\r\n // { x: 323.093525179856, y: 3.45098039215686, size: 1 },\r\n // { x: 324.388489208633, y: 3.45098039215686, size: 1 },\r\n // { x: 325.035971223022, y: 3.37254901960784, size: 1 },\r\n // { x: 325.68345323741, y: 4, size: 1 },\r\n // { x: 327.625899280576, y: 3.88235294117647, size: 1 },\r\n // { x: 334.748201438849, y: 4.11764705882353, size: 1 },\r\n // { x: 340.575539568345, y: 3.80392156862745, size: 1 },\r\n // { x: 346.402877697842, y: 2.90196078431373, size: 1 },\r\n // { x: 347.05035971223, y: 3.01960784313725, size: 1 },\r\n // { x: 348.345323741007, y: 4, size: 1 },\r\n // { x: 349.640287769784, y: 3.6078431372549, size: 1 },\r\n // { x: 354.172661870504, y: 3.72549019607843, size: 1 },\r\n // { x: 354.820143884892, y: 3.52941176470588, size: 1 },\r\n // { x: 358.705035971223, y: 3.76470588235294, size: 1 },\r\n // { x: 6.47482014388489, y: 3.17647058823529, size: 1 },\r\n // { x: 7.76978417266187, y: 2.90196078431373, size: 1 },\r\n // { x: 8.41726618705036, y: 2.82352941176471, size: 1 },\r\n // { x: 9.71223021582734, y: 4, size: 1 },\r\n // { x: 12.9496402877698, y: 3.84313725490196, size: 1 },\r\n // { x: 17.4820143884892, y: 3.80392156862745, size: 1 },\r\n // { x: 18.7769784172662, y: 3.56862745098039, size: 1 },\r\n // { x: 23.3093525179856, y: 3.68627450980392, size: 1 },\r\n // { x: 27.841726618705, y: 3.09803921568627, size: 1 },\r\n // { x: 28.4892086330935, y: 3.33333333333333, size: 1 },\r\n // { x: 29.7841726618705, y: 2.82352941176471, size: 1 },\r\n // { x: 33.6690647482014, y: 3.68627450980392, size: 1 },\r\n // { x: 42.0863309352518, y: 3.68627450980392, size: 1 },\r\n // { x: 45.3237410071942, y: 3.76470588235294, size: 1 },\r\n // { x: 49.2086330935252, y: 3.88235294117647, size: 1 },\r\n // { x: 53.0935251798561, y: 3.80392156862745, size: 1 },\r\n // { x: 55.0359712230216, y: 3.45098039215686, size: 1 },\r\n // { x: 55.6834532374101, y: 3.76470588235294, size: 1 },\r\n // { x: 56.9784172661871, y: 3.49019607843137, size: 1 },\r\n // { x: 60.863309352518, y: 3.45098039215686, size: 1 },\r\n // { x: 62.158273381295, y: 3.80392156862745, size: 1 },\r\n // { x: 64.1007194244604, y: 3.6078431372549, size: 1 },\r\n // { x: 66.0431654676259, y: 3.88235294117647, size: 1 },\r\n // { x: 67.3381294964029, y: 3.84313725490196, size: 1 },\r\n // { x: 68.6330935251799, y: 3.92156862745098, size: 1 },\r\n // { x: 70.5755395683453, y: 3.49019607843137, size: 1 },\r\n // { x: 75.7553956834532, y: 3.49019607843137, size: 1 },\r\n // { x: 80.2877697841727, y: 3.84313725490196, size: 1 },\r\n // { x: 82.2302158273381, y: 3.84313725490196, size: 1 },\r\n // { x: 84.1726618705036, y: 3.52941176470588, size: 1 },\r\n // { x: 85.4676258992806, y: 3.76470588235294, size: 1 },\r\n // { x: 86.7625899280576, y: 3.64705882352941, size: 1 },\r\n // { x: 88.705035971223, y: 3.80392156862745, size: 1 },\r\n // { x: 89.3525179856115, y: 3.52941176470588, size: 1 },\r\n // { x: 90.6474820143885, y: 3.68627450980392, size: 1 },\r\n // { x: 97.1223021582734, y: 3.80392156862745, size: 1 },\r\n // { x: 102.302158273381, y: 3.72549019607843, size: 1 },\r\n // { x: 109.424460431655, y: 3.76470588235294, size: 1 },\r\n // { x: 110.719424460432, y: 3.84313725490196, size: 1 },\r\n // { x: 114.604316546763, y: 3.49019607843137, size: 1 },\r\n // { x: 115.251798561151, y: 3.45098039215686, size: 1 },\r\n // { x: 115.89928057554, y: 3.33333333333333, size: 1 },\r\n // { x: 119.136690647482, y: 3.72549019607843, size: 1 },\r\n // { x: 119.784172661871, y: 3.45098039215686, size: 1 },\r\n // { x: 120.431654676259, y: 3.72549019607843, size: 1 },\r\n // { x: 123.669064748201, y: 3.92156862745098, size: 1 },\r\n // { x: 124.964028776978, y: 3.80392156862745, size: 1 },\r\n // { x: 125.611510791367, y: 3.41176470588235, size: 1 },\r\n // { x: 128.201438848921, y: 3.80392156862745, size: 1 },\r\n // { x: 128.848920863309, y: 3.84313725490196, size: 1 },\r\n // { x: 135.971223021583, y: 3.25490196078431, size: 1 },\r\n // { x: 136.618705035971, y: 3.2156862745098, size: 1 },\r\n // { x: 137.26618705036, y: 2.43137254901961, size: 1 },\r\n // { x: 137.913669064748, y: 2.35294117647059, size: 1 },\r\n // { x: 138.561151079137, y: 2.62745098039216, size: 1 },\r\n // { x: 139.208633093525, y: 2.47058823529412, size: 1 },\r\n // { x: 140.503597122302, y: 4.11764705882353, size: 1 },\r\n // { x: 142.446043165468, y: 3.64705882352941, size: 1 },\r\n // { x: 144.388489208633, y: 3.80392156862745, size: 1 },\r\n // { x: 145.035971223022, y: 3.84313725490196, size: 1 },\r\n // { x: 145.68345323741, y: 3.80392156862745, size: 1 },\r\n // { x: 152.805755395683, y: 4, size: 1 },\r\n // { x: 154.10071942446, y: 3.88235294117647, size: 1 },\r\n // { x: 154.748201438849, y: 3.88235294117647, size: 1 },\r\n // { x: 157.338129496403, y: 3.88235294117647, size: 1 },\r\n // { x: 157.985611510791, y: 3.41176470588235, size: 1 },\r\n // { x: 159.928057553957, y: 3.80392156862745, size: 1 },\r\n // { x: 164.460431654676, y: 3.84313725490196, size: 1 },\r\n // { x: 168.345323741007, y: 3.72549019607843, size: 1 },\r\n // { x: 170.935251798561, y: 3.92156862745098, size: 1 },\r\n // { x: 175.467625899281, y: 4.07843137254902, size: 1 },\r\n // { x: 178.057553956835, y: 3.72549019607843, size: 1 },\r\n // { x: 180, y: 4, size: 1 },\r\n // { x: 180.647482014388, y: 3.49019607843137, size: 1 },\r\n // { x: 185.827338129496, y: 3.68627450980392, size: 1 },\r\n // { x: 187.122302158273, y: 3.80392156862745, size: 1 },\r\n // { x: 191.007194244604, y: 3.80392156862745, size: 1 },\r\n // { x: 196.187050359712, y: 3.80392156862745, size: 1 },\r\n // { x: 202.014388489209, y: 3.52941176470588, size: 1 },\r\n // { x: 202.661870503597, y: 3.80392156862745, size: 1 },\r\n // { x: 203.309352517986, y: 3.29411764705882, size: 1 },\r\n // { x: 203.956834532374, y: 3.25490196078431, size: 1 },\r\n // { x: 204.604316546763, y: 3.33333333333333, size: 1 },\r\n // { x: 205.251798561151, y: 3.2156862745098, size: 1 },\r\n // { x: 206.546762589928, y: 3.37254901960784, size: 1 },\r\n // { x: 207.841726618705, y: 3.33333333333333, size: 1 },\r\n // { x: 208.489208633094, y: 3.29411764705882, size: 1 },\r\n // { x: 209.136690647482, y: 3.25490196078431, size: 1 },\r\n // { x: 210.431654676259, y: 3.45098039215686, size: 1 },\r\n // { x: 211.079136690647, y: 3.29411764705882, size: 1 },\r\n // { x: 213.021582733813, y: 3.37254901960784, size: 1 },\r\n // { x: 216.258992805755, y: 3.25490196078431, size: 1 },\r\n // { x: 218.848920863309, y: 3.09803921568627, size: 1 },\r\n // { x: 219.496402877698, y: 3.25490196078431, size: 1 },\r\n // { x: 220.143884892086, y: 3.29411764705882, size: 1 },\r\n // { x: 220.791366906475, y: 3.13725490196078, size: 1 },\r\n // { x: 221.438848920863, y: 3.17647058823529, size: 1 },\r\n // { x: 222.086330935252, y: 3.56862745098039, size: 1 },\r\n // { x: 224.028776978417, y: 3.13725490196078, size: 1 },\r\n // { x: 230.503597122302, y: 3.45098039215686, size: 1 },\r\n // { x: 237.625899280576, y: 3.37254901960784, size: 1 },\r\n // { x: 238.273381294964, y: 3.45098039215686, size: 1 },\r\n // { x: 240.863309352518, y: 3.45098039215686, size: 1 },\r\n // { x: 252.517985611511, y: 3.41176470588235, size: 1 },\r\n // { x: 254.460431654676, y: 3.37254901960784, size: 1 },\r\n // { x: 255.755395683453, y: 3.41176470588235, size: 1 },\r\n // { x: 262.877697841727, y: 3.41176470588235, size: 1 },\r\n // { x: 268.057553956835, y: 3.92156862745098, size: 1 },\r\n // { x: 270.647482014389, y: 3.52941176470588, size: 1 },\r\n // { x: 282.302158273381, y: 3.80392156862745, size: 1 },\r\n // { x: 282.94964028777, y: 3.96078431372549, size: 1 },\r\n // { x: 288.129496402878, y: 3.41176470588235, size: 1 },\r\n // { x: 288.776978417266, y: 3.05882352941176, size: 1 },\r\n // { x: 293.309352517986, y: 3.80392156862745, size: 1 },\r\n // { x: 295.251798561151, y: 3.88235294117647, size: 1 },\r\n // { x: 296.546762589928, y: 3.84313725490196, size: 1 },\r\n // { x: 301.079136690647, y: 3.80392156862745, size: 1 },\r\n // { x: 306.258992805755, y: 3.80392156862745, size: 1 },\r\n // { x: 310.791366906475, y: 3.41176470588235, size: 1 },\r\n // { x: 314.676258992806, y: 3.80392156862745, size: 1 },\r\n // { x: 315.323741007194, y: 3.96078431372549, size: 1 },\r\n // { x: 315.971223021583, y: 4.07843137254902, size: 1 },\r\n // { x: 321.151079136691, y: 4, size: 1 },\r\n // { x: 325.035971223022, y: 3.84313725490196, size: 1 },\r\n // { x: 325.68345323741, y: 3.88235294117647, size: 1 },\r\n // { x: 326.978417266187, y: 4, size: 1 },\r\n // { x: 330.863309352518, y: 3.76470588235294, size: 1 },\r\n // { x: 342.517985611511, y: 3.64705882352941, size: 1 },\r\n // { x: 347.697841726619, y: 3.64705882352941, size: 1 },\r\n // { x: 348.345323741007, y: 3.84313725490196, size: 1 },\r\n // { x: 352.230215827338, y: 3.45098039215686, size: 1 },\r\n // { x: 356.115107913669, y: 3.88235294117647, size: 1 },\r\n // { x: 357.410071942446, y: 3.84313725490196, size: 1 },\r\n // { x: 358.705035971223, y: 3.72549019607843, size: 1 },\r\n // { x: 3.24324324324324, y: 3.76470588235294, size: 1 },\r\n // { x: 3.89189189189189, y: 3.6078431372549, size: 1 },\r\n // { x: 4.54054054054054, y: 3.6078431372549, size: 1 },\r\n // { x: 5.83783783783784, y: 3.6078431372549, size: 1 },\r\n // { x: 7.78378378378378, y: 3.68627450980392, size: 1 },\r\n // { x: 8.43243243243243, y: 3.56862745098039, size: 1 },\r\n // { x: 9.08108108108108, y: 3.52941176470588, size: 1 },\r\n // { x: 10.3783783783784, y: 3.49019607843137, size: 1 },\r\n // { x: 13.6216216216216, y: 3.33333333333333, size: 1 },\r\n // { x: 14.2702702702703, y: 3.05882352941176, size: 1 },\r\n // { x: 14.9189189189189, y: 2, size: 1 },\r\n // { x: 15.5675675675676, y: 1.96078431372549, size: 1 },\r\n // { x: 16.2162162162162, y: 2, size: 1 },\r\n // { x: 16.8648648648649, y: 1.72549019607843, size: 1 },\r\n // { x: 17.5135135135135, y: 3.80392156862745, size: 1 },\r\n // { x: 18.1621621621622, y: 3.49019607843137, size: 1 },\r\n // { x: 18.8108108108108, y: 3.45098039215686, size: 1 },\r\n // { x: 19.4594594594595, y: 3.6078431372549, size: 1 },\r\n // { x: 22.7027027027027, y: 3.56862745098039, size: 1 },\r\n // { x: 23.3513513513514, y: 3.6078431372549, size: 1 },\r\n // { x: 27.8918918918919, y: 3.64705882352941, size: 1 },\r\n // { x: 28.5405405405405, y: 3.45098039215686, size: 1 },\r\n // { x: 29.1891891891892, y: 3.56862745098039, size: 1 },\r\n // { x: 29.8378378378378, y: 3.68627450980392, size: 1 },\r\n // { x: 30.4864864864865, y: 3.37254901960784, size: 1 },\r\n // { x: 31.1351351351351, y: 3.56862745098039, size: 1 },\r\n // { x: 33.0810810810811, y: 3.49019607843137, size: 1 },\r\n // { x: 35.027027027027, y: 3.09803921568627, size: 1 },\r\n // { x: 35.6756756756757, y: 3.37254901960784, size: 1 },\r\n // { x: 36.3243243243243, y: 2.19607843137255, size: 1 },\r\n // { x: 36.972972972973, y: 2.23529411764706, size: 1 },\r\n // { x: 37.6216216216216, y: 3.45098039215686, size: 1 },\r\n // { x: 38.2702702702703, y: 3.33333333333333, size: 1 },\r\n // { x: 38.9189189189189, y: 3.33333333333333, size: 1 },\r\n // { x: 39.5675675675676, y: 3.56862745098039, size: 1 },\r\n // { x: 40.8648648648649, y: 3.68627450980392, size: 1 },\r\n // { x: 41.5135135135135, y: 3.56862745098039, size: 1 },\r\n // { x: 42.1621621621622, y: 3.45098039215686, size: 1 },\r\n // { x: 43.4594594594595, y: 3.56862745098039, size: 1 },\r\n // { x: 44.7567567567568, y: 3.45098039215686, size: 1 },\r\n // { x: 46.0540540540541, y: 3.56862745098039, size: 1 },\r\n // { x: 47.3513513513514, y: 3.45098039215686, size: 1 },\r\n // { x: 48, y: 3.76470588235294, size: 1 },\r\n // { x: 49.2972972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 49.9459459459459, y: 3.6078431372549, size: 1 },\r\n // { x: 51.2432432432432, y: 3.33333333333333, size: 1 },\r\n // { x: 52.5405405405405, y: 3.68627450980392, size: 1 },\r\n // { x: 54.4864864864865, y: 3.37254901960784, size: 1 },\r\n // { x: 55.1351351351351, y: 3.56862745098039, size: 1 },\r\n // { x: 55.7837837837838, y: 3.49019607843137, size: 1 },\r\n // { x: 57.0810810810811, y: 3.41176470588235, size: 1 },\r\n // { x: 58.3783783783784, y: 2.90196078431373, size: 1 },\r\n // { x: 59.6756756756757, y: 4.03921568627451, size: 1 },\r\n // { x: 60.972972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 61.6216216216216, y: 3.76470588235294, size: 1 },\r\n // { x: 64.2162162162162, y: 3.64705882352941, size: 1 },\r\n // { x: 64.8648648648649, y: 3.64705882352941, size: 1 },\r\n // { x: 65.5135135135135, y: 3.56862745098039, size: 1 },\r\n // { x: 66.1621621621622, y: 3.56862745098039, size: 1 },\r\n // { x: 68.1081081081081, y: 3.88235294117647, size: 1 },\r\n // { x: 68.7567567567568, y: 3.56862745098039, size: 1 },\r\n // { x: 70.054054054054, y: 3.6078431372549, size: 1 },\r\n // { x: 70.7027027027027, y: 3.76470588235294, size: 1 },\r\n // { x: 72, y: 3.68627450980392, size: 1 },\r\n // { x: 72.6486486486486, y: 3.68627450980392, size: 1 },\r\n // { x: 73.945945945946, y: 3.64705882352941, size: 1 },\r\n // { x: 75.8918918918919, y: 3.52941176470588, size: 1 },\r\n // { x: 78.4864864864865, y: 3.29411764705882, size: 1 },\r\n // { x: 79.1351351351351, y: 3.25490196078431, size: 1 },\r\n // { x: 79.7837837837838, y: 2.43137254901961, size: 1 },\r\n // { x: 80.4324324324324, y: 2.90196078431373, size: 1 },\r\n // { x: 81.0810810810811, y: 3.6078431372549, size: 1 },\r\n // { x: 81.7297297297297, y: 3.72549019607843, size: 1 },\r\n // { x: 83.027027027027, y: 3.80392156862745, size: 1 },\r\n // { x: 84.3243243243243, y: 3.84313725490196, size: 1 },\r\n // { x: 84.972972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 86.2702702702703, y: 3.68627450980392, size: 1 },\r\n // { x: 86.9189189189189, y: 3.80392156862745, size: 1 },\r\n // { x: 88.2162162162162, y: 3.52941176470588, size: 1 },\r\n // { x: 88.8648648648649, y: 3.6078431372549, size: 1 },\r\n // { x: 90.8108108108108, y: 3.6078431372549, size: 1 },\r\n // { x: 91.4594594594595, y: 3.64705882352941, size: 1 },\r\n // { x: 92.7567567567568, y: 3.6078431372549, size: 1 },\r\n // { x: 94.054054054054, y: 3.56862745098039, size: 1 },\r\n // { x: 94.7027027027027, y: 3.72549019607843, size: 1 },\r\n // { x: 96.6486486486486, y: 3.84313725490196, size: 1 },\r\n // { x: 97.2972972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 97.945945945946, y: 3.68627450980392, size: 1 },\r\n // { x: 98.5945945945946, y: 3.68627450980392, size: 1 },\r\n // { x: 99.2432432432432, y: 3.52941176470588, size: 1 },\r\n // { x: 99.8918918918919, y: 3.09803921568627, size: 1 },\r\n // { x: 100.540540540541, y: 3.2156862745098, size: 1 },\r\n // { x: 101.189189189189, y: 2.66666666666667, size: 1 },\r\n // { x: 101.837837837838, y: 1.96078431372549, size: 1 },\r\n // { x: 102.486486486486, y: 3.33333333333333, size: 1 },\r\n // { x: 103.135135135135, y: 3.72549019607843, size: 1 },\r\n // { x: 104.432432432432, y: 3.80392156862745, size: 1 },\r\n // { x: 105.72972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 107.027027027027, y: 3.56862745098039, size: 1 },\r\n // { x: 107.675675675676, y: 3.52941176470588, size: 1 },\r\n // { x: 108.324324324324, y: 3.72549019607843, size: 1 },\r\n // { x: 110.27027027027, y: 3.80392156862745, size: 1 },\r\n // { x: 110.918918918919, y: 3.68627450980392, size: 1 },\r\n // { x: 111.567567567568, y: 3.88235294117647, size: 1 },\r\n // { x: 112.864864864865, y: 3.45098039215686, size: 1 },\r\n // { x: 113.513513513514, y: 3.80392156862745, size: 1 },\r\n // { x: 114.162162162162, y: 3.68627450980392, size: 1 },\r\n // { x: 114.810810810811, y: 3.56862745098039, size: 1 },\r\n // { x: 115.459459459459, y: 3.6078431372549, size: 1 },\r\n // { x: 116.108108108108, y: 3.76470588235294, size: 1 },\r\n // { x: 117.405405405405, y: 3.84313725490196, size: 1 },\r\n // { x: 118.054054054054, y: 3.72549019607843, size: 1 },\r\n // { x: 118.702702702703, y: 3.76470588235294, size: 1 },\r\n // { x: 119.351351351351, y: 3.6078431372549, size: 1 },\r\n // { x: 120.648648648649, y: 3.72549019607843, size: 1 },\r\n // { x: 122.594594594595, y: 3.01960784313725, size: 1 },\r\n // { x: 123.243243243243, y: 2.94117647058824, size: 1 },\r\n // { x: 125.189189189189, y: 3.49019607843137, size: 1 },\r\n // { x: 127.135135135135, y: 3.49019607843137, size: 1 },\r\n // { x: 128.432432432432, y: 3.68627450980392, size: 1 },\r\n // { x: 130.378378378378, y: 3.41176470588235, size: 1 },\r\n // { x: 131.027027027027, y: 3.6078431372549, size: 1 },\r\n // { x: 132.972972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 133.621621621622, y: 3.72549019607843, size: 1 },\r\n // { x: 134.918918918919, y: 3.6078431372549, size: 1 },\r\n // { x: 135.567567567568, y: 3.72549019607843, size: 1 },\r\n // { x: 137.513513513514, y: 3.49019607843137, size: 1 },\r\n // { x: 138.162162162162, y: 3.52941176470588, size: 1 },\r\n // { x: 138.810810810811, y: 3.68627450980392, size: 1 },\r\n // { x: 140.108108108108, y: 3.76470588235294, size: 1 },\r\n // { x: 140.756756756757, y: 3.41176470588235, size: 1 },\r\n // { x: 143.351351351351, y: 3.37254901960784, size: 1 },\r\n // { x: 144.648648648649, y: 2.11764705882353, size: 1 },\r\n // { x: 145.297297297297, y: 2.31372549019608, size: 1 },\r\n // { x: 145.945945945946, y: 3.80392156862745, size: 1 },\r\n // { x: 147.243243243243, y: 3.68627450980392, size: 1 },\r\n // { x: 149.837837837838, y: 3.92156862745098, size: 1 },\r\n // { x: 151.135135135135, y: 3.68627450980392, size: 1 },\r\n // { x: 152.432432432432, y: 3.56862745098039, size: 1 },\r\n // { x: 153.081081081081, y: 3.6078431372549, size: 1 },\r\n // { x: 153.72972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 154.378378378378, y: 3.80392156862745, size: 1 },\r\n // { x: 155.027027027027, y: 3.72549019607843, size: 1 },\r\n // { x: 156.324324324324, y: 3.88235294117647, size: 1 },\r\n // { x: 156.972972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 157.621621621622, y: 3.64705882352941, size: 1 },\r\n // { x: 158.27027027027, y: 3.72549019607843, size: 1 },\r\n // { x: 159.567567567568, y: 3.72549019607843, size: 1 },\r\n // { x: 162.810810810811, y: 3.56862745098039, size: 1 },\r\n // { x: 164.756756756757, y: 3.64705882352941, size: 1 },\r\n // { x: 165.405405405405, y: 3.49019607843137, size: 1 },\r\n // { x: 166.702702702703, y: 3.80392156862745, size: 1 },\r\n // { x: 167.351351351351, y: 3.52941176470588, size: 1 },\r\n // { x: 168, y: 3.84313725490196, size: 1 },\r\n // { x: 169.297297297297, y: 3.64705882352941, size: 1 },\r\n // { x: 171.243243243243, y: 4.03921568627451, size: 1 },\r\n // { x: 172.540540540541, y: 3.49019607843137, size: 1 },\r\n // { x: 173.837837837838, y: 3.88235294117647, size: 1 },\r\n // { x: 175.783783783784, y: 3.68627450980392, size: 1 },\r\n // { x: 176.432432432432, y: 3.64705882352941, size: 1 },\r\n // { x: 178.378378378378, y: 3.80392156862745, size: 1 },\r\n // { x: 179.027027027027, y: 3.64705882352941, size: 1 },\r\n // { x: 180.324324324324, y: 3.72549019607843, size: 1 },\r\n // { x: 180.972972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 182.27027027027, y: 3.72549019607843, size: 1 },\r\n // { x: 183.567567567568, y: 3.72549019607843, size: 1 },\r\n // { x: 185.513513513514, y: 3.84313725490196, size: 1 },\r\n // { x: 186.162162162162, y: 3.37254901960784, size: 1 },\r\n // { x: 186.810810810811, y: 3.29411764705882, size: 1 },\r\n // { x: 188.756756756757, y: 3.52941176470588, size: 1 },\r\n // { x: 189.405405405405, y: 3.56862745098039, size: 1 },\r\n // { x: 190.054054054054, y: 3.52941176470588, size: 1 },\r\n // { x: 190.702702702703, y: 3.37254901960784, size: 1 },\r\n // { x: 192.648648648649, y: 3.52941176470588, size: 1 },\r\n // { x: 196.540540540541, y: 3.49019607843137, size: 1 },\r\n // { x: 198.486486486486, y: 3.64705882352941, size: 1 },\r\n // { x: 199.783783783784, y: 3.56862745098039, size: 1 },\r\n // { x: 200.432432432432, y: 3.41176470588235, size: 1 },\r\n // { x: 201.72972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 202.378378378378, y: 3.64705882352941, size: 1 },\r\n // { x: 203.027027027027, y: 3.56862745098039, size: 1 },\r\n // { x: 204.324324324324, y: 3.68627450980392, size: 1 },\r\n // { x: 204.972972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 205.621621621622, y: 3.33333333333333, size: 1 },\r\n // { x: 206.918918918919, y: 3.52941176470588, size: 1 },\r\n // { x: 208.864864864865, y: 3.29411764705882, size: 1 },\r\n // { x: 210.162162162162, y: 3.84313725490196, size: 1 },\r\n // { x: 211.459459459459, y: 3.68627450980392, size: 1 },\r\n // { x: 212.108108108108, y: 3.76470588235294, size: 1 },\r\n // { x: 212.756756756757, y: 3.68627450980392, size: 1 },\r\n // { x: 213.405405405405, y: 3.88235294117647, size: 1 },\r\n // { x: 214.054054054054, y: 3.80392156862745, size: 1 },\r\n // { x: 218.594594594595, y: 3.64705882352941, size: 1 },\r\n // { x: 219.243243243243, y: 3.76470588235294, size: 1 },\r\n // { x: 219.891891891892, y: 3.76470588235294, size: 1 },\r\n // { x: 220.540540540541, y: 3.68627450980392, size: 1 },\r\n // { x: 221.189189189189, y: 3.80392156862745, size: 1 },\r\n // { x: 221.837837837838, y: 3.88235294117647, size: 1 },\r\n // { x: 222.486486486486, y: 3.68627450980392, size: 1 },\r\n // { x: 223.135135135135, y: 3.56862745098039, size: 1 },\r\n // { x: 224.432432432432, y: 3.56862745098039, size: 1 },\r\n // { x: 225.081081081081, y: 3.72549019607843, size: 1 },\r\n // { x: 226.378378378378, y: 3.72549019607843, size: 1 },\r\n // { x: 227.027027027027, y: 3.64705882352941, size: 1 },\r\n // { x: 228.972972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 229.621621621622, y: 3.45098039215686, size: 1 },\r\n // { x: 230.27027027027, y: 3.25490196078431, size: 1 },\r\n // { x: 230.918918918919, y: 3.25490196078431, size: 1 },\r\n // { x: 231.567567567568, y: 3.33333333333333, size: 1 },\r\n // { x: 232.216216216216, y: 3.64705882352941, size: 1 },\r\n // { x: 232.864864864865, y: 3.17647058823529, size: 1 },\r\n // { x: 233.513513513514, y: 3.52941176470588, size: 1 },\r\n // { x: 234.162162162162, y: 3.33333333333333, size: 1 },\r\n // { x: 234.810810810811, y: 3.2156862745098, size: 1 },\r\n // { x: 235.459459459459, y: 3.37254901960784, size: 1 },\r\n // { x: 236.108108108108, y: 3.37254901960784, size: 1 },\r\n // { x: 236.756756756757, y: 3.80392156862745, size: 1 },\r\n // { x: 237.405405405405, y: 3.33333333333333, size: 1 },\r\n // { x: 238.054054054054, y: 3.49019607843137, size: 1 },\r\n // { x: 238.702702702703, y: 3.17647058823529, size: 1 },\r\n // { x: 239.351351351351, y: 3.29411764705882, size: 1 },\r\n // { x: 240, y: 3.41176470588235, size: 1 },\r\n // { x: 240.648648648649, y: 3.41176470588235, size: 1 },\r\n // { x: 241.945945945946, y: 3.41176470588235, size: 1 },\r\n // { x: 243.243243243243, y: 3.29411764705882, size: 1 },\r\n // { x: 243.891891891892, y: 3.52941176470588, size: 1 },\r\n // { x: 244.540540540541, y: 3.49019607843137, size: 1 },\r\n // { x: 245.189189189189, y: 3.29411764705882, size: 1 },\r\n // { x: 245.837837837838, y: 3.41176470588235, size: 1 },\r\n // { x: 246.486486486486, y: 3.33333333333333, size: 1 },\r\n // { x: 247.783783783784, y: 3.68627450980392, size: 1 },\r\n // { x: 248.432432432432, y: 3.52941176470588, size: 1 },\r\n // { x: 249.081081081081, y: 3.37254901960784, size: 1 },\r\n // { x: 250.378378378378, y: 3.25490196078431, size: 1 },\r\n // { x: 251.027027027027, y: 3.29411764705882, size: 1 },\r\n // { x: 251.675675675676, y: 3.17647058823529, size: 1 },\r\n // { x: 252.324324324324, y: 3.05882352941176, size: 1 },\r\n // { x: 252.972972972973, y: 2.50980392156863, size: 1 },\r\n // { x: 254.918918918919, y: 3.72549019607843, size: 1 },\r\n // { x: 255.567567567568, y: 3.80392156862745, size: 1 },\r\n // { x: 256.216216216216, y: 3.68627450980392, size: 1 },\r\n // { x: 257.513513513513, y: 3.68627450980392, size: 1 },\r\n // { x: 258.162162162162, y: 3.56862745098039, size: 1 },\r\n // { x: 259.459459459459, y: 3.52941176470588, size: 1 },\r\n // { x: 260.108108108108, y: 3.88235294117647, size: 1 },\r\n // { x: 260.756756756757, y: 3.37254901960784, size: 1 },\r\n // { x: 261.405405405405, y: 3.76470588235294, size: 1 },\r\n // { x: 262.054054054054, y: 3.45098039215686, size: 1 },\r\n // { x: 262.702702702703, y: 3.84313725490196, size: 1 },\r\n // { x: 263.351351351351, y: 3.6078431372549, size: 1 },\r\n // { x: 264.648648648649, y: 3.72549019607843, size: 1 },\r\n // { x: 265.297297297297, y: 3.72549019607843, size: 1 },\r\n // { x: 267.243243243243, y: 3.76470588235294, size: 1 },\r\n // { x: 268.540540540541, y: 3.64705882352941, size: 1 },\r\n // { x: 269.837837837838, y: 3.56862745098039, size: 1 },\r\n // { x: 272.432432432432, y: 3.45098039215686, size: 1 },\r\n // { x: 273.081081081081, y: 3.33333333333333, size: 1 },\r\n // { x: 273.72972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 274.378378378378, y: 3.49019607843137, size: 1 },\r\n // { x: 275.675675675676, y: 3.17647058823529, size: 1 },\r\n // { x: 276.324324324324, y: 3.49019607843137, size: 1 },\r\n // { x: 276.972972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 277.621621621622, y: 3.33333333333333, size: 1 },\r\n // { x: 278.27027027027, y: 3.33333333333333, size: 1 },\r\n // { x: 280.216216216216, y: 3.29411764705882, size: 1 },\r\n // { x: 280.864864864865, y: 3.41176470588235, size: 1 },\r\n // { x: 281.513513513513, y: 3.2156862745098, size: 1 },\r\n // { x: 282.162162162162, y: 3.13725490196078, size: 1 },\r\n // { x: 282.810810810811, y: 3.49019607843137, size: 1 },\r\n // { x: 283.459459459459, y: 3.72549019607843, size: 1 },\r\n // { x: 284.108108108108, y: 3.37254901960784, size: 1 },\r\n // { x: 284.756756756757, y: 3.25490196078431, size: 1 },\r\n // { x: 285.405405405405, y: 3.52941176470588, size: 1 },\r\n // { x: 286.054054054054, y: 3.17647058823529, size: 1 },\r\n // { x: 286.702702702703, y: 3.41176470588235, size: 1 },\r\n // { x: 288, y: 3.2156862745098, size: 1 },\r\n // { x: 288.648648648649, y: 3.29411764705882, size: 1 },\r\n // { x: 289.297297297297, y: 3.6078431372549, size: 1 },\r\n // { x: 289.945945945946, y: 3.29411764705882, size: 1 },\r\n // { x: 291.891891891892, y: 3.37254901960784, size: 1 },\r\n // { x: 292.540540540541, y: 3.29411764705882, size: 1 },\r\n // { x: 293.837837837838, y: 3.29411764705882, size: 1 },\r\n // { x: 294.486486486487, y: 3.84313725490196, size: 1 },\r\n // { x: 295.783783783784, y: 3.84313725490196, size: 1 },\r\n // { x: 297.72972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 298.378378378378, y: 3.68627450980392, size: 1 },\r\n // { x: 300.324324324324, y: 3.68627450980392, size: 1 },\r\n // { x: 301.621621621622, y: 3.68627450980392, size: 1 },\r\n // { x: 302.27027027027, y: 3.68627450980392, size: 1 },\r\n // { x: 305.513513513513, y: 3.88235294117647, size: 1 },\r\n // { x: 306.810810810811, y: 3.68627450980392, size: 1 },\r\n // { x: 307.459459459459, y: 3.68627450980392, size: 1 },\r\n // { x: 308.108108108108, y: 3.76470588235294, size: 1 },\r\n // { x: 309.405405405405, y: 3.76470588235294, size: 1 },\r\n // { x: 310.054054054054, y: 3.68627450980392, size: 1 },\r\n // { x: 312, y: 4, size: 1 },\r\n // { x: 313.945945945946, y: 3.92156862745098, size: 1 },\r\n // { x: 314.594594594595, y: 3.76470588235294, size: 1 },\r\n // { x: 315.243243243243, y: 3.64705882352941, size: 1 },\r\n // { x: 315.891891891892, y: 3.56862745098039, size: 1 },\r\n // { x: 316.540540540541, y: 3.68627450980392, size: 1 },\r\n // { x: 317.189189189189, y: 3.88235294117647, size: 1 },\r\n // { x: 318.486486486487, y: 3.64705882352941, size: 1 },\r\n // { x: 319.783783783784, y: 3.64705882352941, size: 1 },\r\n // { x: 321.081081081081, y: 3.72549019607843, size: 1 },\r\n // { x: 322.378378378378, y: 3.6078431372549, size: 1 },\r\n // { x: 323.027027027027, y: 3.72549019607843, size: 1 },\r\n // { x: 323.675675675676, y: 3.6078431372549, size: 1 },\r\n // { x: 324.324324324324, y: 3.56862745098039, size: 1 },\r\n // { x: 325.621621621622, y: 3.6078431372549, size: 1 },\r\n // { x: 326.27027027027, y: 3.72549019607843, size: 1 },\r\n // { x: 326.918918918919, y: 3.68627450980392, size: 1 },\r\n // { x: 328.216216216216, y: 3.80392156862745, size: 1 },\r\n // { x: 328.864864864865, y: 3.56862745098039, size: 1 },\r\n // { x: 329.513513513513, y: 3.68627450980392, size: 1 },\r\n // { x: 330.162162162162, y: 3.6078431372549, size: 1 },\r\n // { x: 330.810810810811, y: 3.56862745098039, size: 1 },\r\n // { x: 331.459459459459, y: 3.49019607843137, size: 1 },\r\n // { x: 332.108108108108, y: 3.76470588235294, size: 1 },\r\n // { x: 332.756756756757, y: 3.76470588235294, size: 1 },\r\n // { x: 333.405405405405, y: 3.68627450980392, size: 1 },\r\n // { x: 334.054054054054, y: 3.56862745098039, size: 1 },\r\n // { x: 334.702702702703, y: 3.41176470588235, size: 1 },\r\n // { x: 337.945945945946, y: 3.76470588235294, size: 1 },\r\n // { x: 339.891891891892, y: 3.80392156862745, size: 1 },\r\n // { x: 341.189189189189, y: 3.64705882352941, size: 1 },\r\n // { x: 343.783783783784, y: 3.49019607843137, size: 1 },\r\n // { x: 344.432432432432, y: 3.6078431372549, size: 1 },\r\n // { x: 345.081081081081, y: 3.80392156862745, size: 1 },\r\n // { x: 345.72972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 346.378378378378, y: 3.72549019607843, size: 1 },\r\n // { x: 347.675675675676, y: 3.49019607843137, size: 1 },\r\n // { x: 348.324324324324, y: 3.80392156862745, size: 1 },\r\n // { x: 349.621621621622, y: 3.56862745098039, size: 1 },\r\n // { x: 350.27027027027, y: 3.56862745098039, size: 1 },\r\n // { x: 350.918918918919, y: 3.64705882352941, size: 1 },\r\n // { x: 351.567567567568, y: 3.64705882352941, size: 1 },\r\n // { x: 352.216216216216, y: 3.68627450980392, size: 1 },\r\n // { x: 352.864864864865, y: 3.76470588235294, size: 1 },\r\n // { x: 355.459459459459, y: 3.29411764705882, size: 1 },\r\n // { x: 356.108108108108, y: 3.45098039215686, size: 1 },\r\n // { x: 357.405405405405, y: 3.49019607843137, size: 1 },\r\n // { x: 358.702702702703, y: 3.45098039215686, size: 1 },\r\n // { x: 359.351351351351, y: 3.29411764705882, size: 1 },\r\n // { x: 0, y: 3.33333333333333, size: 1 },\r\n // { x: 0.647482014388489, y: 3.25490196078431, size: 1 },\r\n // { x: 1.94244604316547, y: 3.33333333333333, size: 1 },\r\n // { x: 4.53237410071942, y: 3.88235294117647, size: 1 },\r\n // { x: 7.76978417266187, y: 3.76470588235294, size: 1 },\r\n // { x: 9.71223021582734, y: 3.88235294117647, size: 1 },\r\n // { x: 16.1870503597122, y: 3.72549019607843, size: 1 },\r\n // { x: 17.4820143884892, y: 3.64705882352941, size: 1 },\r\n // { x: 20.7194244604317, y: 3.37254901960784, size: 1 },\r\n // { x: 22.0143884892086, y: 3.2156862745098, size: 1 },\r\n // { x: 22.6618705035971, y: 3.29411764705882, size: 1 },\r\n // { x: 23.3093525179856, y: 3.25490196078431, size: 1 },\r\n // { x: 27.1942446043165, y: 3.88235294117647, size: 1 },\r\n // { x: 29.136690647482, y: 3.52941176470588, size: 1 },\r\n // { x: 31.726618705036, y: 3.72549019607843, size: 1 },\r\n // { x: 38.8489208633094, y: 3.88235294117647, size: 1 },\r\n // { x: 40.7913669064748, y: 3.80392156862745, size: 1 },\r\n // { x: 43.3812949640288, y: 3.13725490196078, size: 1 },\r\n // { x: 44.0287769784173, y: 2.70588235294118, size: 1 },\r\n // { x: 44.6762589928058, y: 3.2156862745098, size: 1 },\r\n // { x: 45.3237410071942, y: 2.82352941176471, size: 1 },\r\n // { x: 45.9712230215827, y: 3.13725490196078, size: 1 },\r\n // { x: 46.6187050359712, y: 3.33333333333333, size: 1 },\r\n // { x: 47.9136690647482, y: 3.56862745098039, size: 1 },\r\n // { x: 48.5611510791367, y: 3.33333333333333, size: 1 },\r\n // { x: 49.8561151079137, y: 3.29411764705882, size: 1 },\r\n // { x: 50.5035971223022, y: 3.29411764705882, size: 1 },\r\n // { x: 51.1510791366906, y: 3.33333333333333, size: 1 },\r\n // { x: 55.0359712230216, y: 3.13725490196078, size: 1 },\r\n // { x: 56.3309352517986, y: 3.29411764705882, size: 1 },\r\n // { x: 56.9784172661871, y: 3.17647058823529, size: 1 },\r\n // { x: 58.273381294964, y: 3.25490196078431, size: 1 },\r\n // { x: 58.9208633093525, y: 3.33333333333333, size: 1 },\r\n // { x: 59.568345323741, y: 3.33333333333333, size: 1 },\r\n // { x: 61.5107913669065, y: 3.29411764705882, size: 1 },\r\n // { x: 62.158273381295, y: 3.49019607843137, size: 1 },\r\n // { x: 62.8057553956835, y: 3.2156862745098, size: 1 },\r\n // { x: 64.1007194244604, y: 3.09803921568627, size: 1 },\r\n // { x: 65.3956834532374, y: 3.09803921568627, size: 1 },\r\n // { x: 66.0431654676259, y: 2.90196078431373, size: 1 },\r\n // { x: 66.6906474820144, y: 2.66666666666667, size: 1 },\r\n // { x: 67.9856115107914, y: 3.13725490196078, size: 1 },\r\n // { x: 73.1654676258993, y: 3.92156862745098, size: 1 },\r\n // { x: 75.1079136690647, y: 3.88235294117647, size: 1 },\r\n // { x: 75.7553956834532, y: 3.72549019607843, size: 1 },\r\n // { x: 76.4028776978417, y: 3.76470588235294, size: 1 },\r\n // { x: 77.0503597122302, y: 3.88235294117647, size: 1 },\r\n // { x: 77.6978417266187, y: 3.76470588235294, size: 1 },\r\n // { x: 78.3453237410072, y: 3.88235294117647, size: 1 },\r\n // { x: 79.6402877697842, y: 3.84313725490196, size: 1 },\r\n // { x: 80.9352517985612, y: 3.88235294117647, size: 1 },\r\n // { x: 82.8776978417266, y: 3.88235294117647, size: 1 },\r\n // { x: 84.1726618705036, y: 3.80392156862745, size: 1 },\r\n // { x: 84.8201438848921, y: 4.03921568627451, size: 1 },\r\n // { x: 86.7625899280576, y: 3.37254901960784, size: 1 },\r\n // { x: 89.3525179856115, y: 3.76470588235294, size: 1 },\r\n // { x: 90.6474820143885, y: 3.76470588235294, size: 1 },\r\n // { x: 91.294964028777, y: 3.68627450980392, size: 1 },\r\n // { x: 92.589928057554, y: 4.15686274509804, size: 1 },\r\n // { x: 94.5323741007194, y: 3.80392156862745, size: 1 },\r\n // { x: 95.1798561151079, y: 3.88235294117647, size: 1 },\r\n // { x: 95.8273381294964, y: 3.92156862745098, size: 1 },\r\n // { x: 97.7697841726619, y: 4.11764705882353, size: 1 },\r\n // { x: 99.0647482014388, y: 4.07843137254902, size: 1 },\r\n // { x: 100.359712230216, y: 3.72549019607843, size: 1 },\r\n // { x: 101.654676258993, y: 3.72549019607843, size: 1 },\r\n // { x: 103.597122302158, y: 3.92156862745098, size: 1 },\r\n // { x: 104.892086330935, y: 3.84313725490196, size: 1 },\r\n // { x: 106.187050359712, y: 3.84313725490196, size: 1 },\r\n // { x: 111.36690647482, y: 3.72549019607843, size: 1 },\r\n // { x: 115.89928057554, y: 3.88235294117647, size: 1 },\r\n // { x: 120.431654676259, y: 3.92156862745098, size: 1 },\r\n // { x: 121.079136690647, y: 3.72549019607843, size: 1 },\r\n // { x: 124.964028776978, y: 3.92156862745098, size: 1 },\r\n // { x: 126.906474820144, y: 3.88235294117647, size: 1 },\r\n // { x: 127.553956834532, y: 3.88235294117647, size: 1 },\r\n // { x: 129.496402877698, y: 3.68627450980392, size: 1 },\r\n // { x: 132.73381294964, y: 3.80392156862745, size: 1 },\r\n // { x: 134.028776978417, y: 3.84313725490196, size: 1 },\r\n // { x: 137.26618705036, y: 4.11764705882353, size: 1 },\r\n // { x: 137.913669064748, y: 3.68627450980392, size: 1 },\r\n // { x: 138.561151079137, y: 3.49019607843137, size: 1 },\r\n // { x: 139.208633093525, y: 3.84313725490196, size: 1 },\r\n // { x: 139.856115107914, y: 3.76470588235294, size: 1 },\r\n // { x: 145.68345323741, y: 3.68627450980392, size: 1 },\r\n // { x: 149.568345323741, y: 3.92156862745098, size: 1 },\r\n // { x: 150.863309352518, y: 3.25490196078431, size: 1 },\r\n // { x: 151.510791366906, y: 3.25490196078431, size: 1 },\r\n // { x: 152.158273381295, y: 2.90196078431373, size: 1 },\r\n // { x: 153.453237410072, y: 3.68627450980392, size: 1 },\r\n // { x: 162.517985611511, y: 4, size: 1 },\r\n // { x: 163.812949640288, y: 3.96078431372549, size: 1 },\r\n // { x: 176.115107913669, y: 3.56862745098039, size: 1 },\r\n // { x: 181.294964028777, y: 3.29411764705882, size: 1 },\r\n // { x: 183.237410071942, y: 3.80392156862745, size: 1 },\r\n // { x: 185.179856115108, y: 3.37254901960784, size: 1 },\r\n // { x: 187.769784172662, y: 3.45098039215686, size: 1 },\r\n // { x: 188.41726618705, y: 3.41176470588235, size: 1 },\r\n // { x: 191.654676258993, y: 3.45098039215686, size: 1 },\r\n // { x: 194.892086330935, y: 3.88235294117647, size: 1 },\r\n // { x: 205.251798561151, y: 3.84313725490196, size: 1 },\r\n // { x: 208.489208633094, y: 3.88235294117647, size: 1 },\r\n // { x: 210.431654676259, y: 3.96078431372549, size: 1 },\r\n // { x: 215.611510791367, y: 3.84313725490196, size: 1 },\r\n // { x: 216.258992805755, y: 3.56862745098039, size: 1 },\r\n // { x: 218.201438848921, y: 3.45098039215686, size: 1 },\r\n // { x: 238.273381294964, y: 3.2156862745098, size: 1 },\r\n // { x: 238.920863309353, y: 3.17647058823529, size: 1 },\r\n // { x: 239.568345323741, y: 3.25490196078431, size: 1 },\r\n // { x: 240.215827338129, y: 3.05882352941176, size: 1 },\r\n // { x: 240.863309352518, y: 3.37254901960784, size: 1 },\r\n // { x: 242.158273381295, y: 3.41176470588235, size: 1 },\r\n // { x: 246.690647482014, y: 3.41176470588235, size: 1 },\r\n // { x: 248.63309352518, y: 3.49019607843137, size: 1 },\r\n // { x: 259.640287769784, y: 3.01960784313725, size: 1 },\r\n // { x: 260.287769784173, y: 2.98039215686275, size: 1 },\r\n // { x: 260.935251798561, y: 3.09803921568627, size: 1 },\r\n // { x: 261.58273381295, y: 3.01960784313725, size: 1 },\r\n // { x: 264.820143884892, y: 3.84313725490196, size: 1 },\r\n // { x: 272.589928057554, y: 3.68627450980392, size: 1 },\r\n // { x: 273.884892086331, y: 3.92156862745098, size: 1 },\r\n // { x: 280.359712230216, y: 3.41176470588235, size: 1 },\r\n // { x: 281.007194244604, y: 3.29411764705882, size: 1 },\r\n // { x: 282.94964028777, y: 3.17647058823529, size: 1 },\r\n // { x: 283.597122302158, y: 3.25490196078431, size: 1 },\r\n // { x: 292.014388489209, y: 3.80392156862745, size: 1 },\r\n // { x: 297.841726618705, y: 3.72549019607843, size: 1 },\r\n // { x: 299.784172661871, y: 3.56862745098039, size: 1 },\r\n // { x: 301.726618705036, y: 3.29411764705882, size: 1 },\r\n // { x: 302.374100719424, y: 3.33333333333333, size: 1 },\r\n // { x: 303.021582733813, y: 2.50980392156863, size: 1 },\r\n // { x: 303.669064748201, y: 2.50980392156863, size: 1 },\r\n // { x: 304.31654676259, y: 2.98039215686275, size: 1 },\r\n // { x: 314.028776978417, y: 3.92156862745098, size: 1 },\r\n // { x: 316.618705035971, y: 3.92156862745098, size: 1 },\r\n // { x: 319.208633093525, y: 4.03921568627451, size: 1 },\r\n // { x: 320.503597122302, y: 3.92156862745098, size: 1 },\r\n // { x: 324.388489208633, y: 3.41176470588235, size: 1 },\r\n // { x: 326.330935251799, y: 3.33333333333333, size: 1 },\r\n // { x: 331.510791366906, y: 3.88235294117647, size: 1 },\r\n // { x: 345.755395683453, y: 3.37254901960784, size: 1 },\r\n // { x: 346.402877697842, y: 3.17647058823529, size: 1 },\r\n // { x: 349.640287769784, y: 3.41176470588235, size: 1 },\r\n // { x: 351.58273381295, y: 3.49019607843137, size: 1 },\r\n // { x: 353.525179856115, y: 3.29411764705882, size: 1 },\r\n // { x: 359.352517985611, y: 3.64705882352941, size: 1 },\r\n // { x: 5.8273381294964, y: 3.41176470588235, size: 1 },\r\n // { x: 6.47482014388489, y: 3.76470588235294, size: 1 },\r\n // { x: 11.6546762589928, y: 3.29411764705882, size: 1 },\r\n // { x: 14.8920863309353, y: 3.17647058823529, size: 1 },\r\n // { x: 15.5395683453237, y: 3.37254901960784, size: 1 },\r\n // { x: 16.1870503597122, y: 3.33333333333333, size: 1 },\r\n // { x: 18.7769784172662, y: 3.29411764705882, size: 1 },\r\n // { x: 19.4244604316547, y: 3.29411764705882, size: 1 },\r\n // { x: 24.6043165467626, y: 3.25490196078431, size: 1 },\r\n // { x: 25.2517985611511, y: 3.33333333333333, size: 1 },\r\n // { x: 25.8992805755396, y: 3.33333333333333, size: 1 },\r\n // { x: 26.5467625899281, y: 3.33333333333333, size: 1 },\r\n // { x: 31.0791366906475, y: 3.29411764705882, size: 1 },\r\n // { x: 32.3741007194245, y: 3.33333333333333, size: 1 },\r\n // { x: 34.9640287769784, y: 3.25490196078431, size: 1 },\r\n // { x: 35.6115107913669, y: 3.37254901960784, size: 1 },\r\n // { x: 36.2589928057554, y: 3.17647058823529, size: 1 },\r\n // { x: 36.9064748201439, y: 3.25490196078431, size: 1 },\r\n // { x: 37.5539568345324, y: 3.37254901960784, size: 1 },\r\n // { x: 43.3812949640288, y: 3.29411764705882, size: 1 },\r\n // { x: 44.0287769784173, y: 3.33333333333333, size: 1 },\r\n // { x: 45.9712230215827, y: 3.37254901960784, size: 1 },\r\n // { x: 47.2661870503597, y: 3.33333333333333, size: 1 },\r\n // { x: 47.9136690647482, y: 3.29411764705882, size: 1 },\r\n // { x: 49.2086330935252, y: 3.33333333333333, size: 1 },\r\n // { x: 51.1510791366906, y: 3.09803921568627, size: 1 },\r\n // { x: 51.7985611510791, y: 3.49019607843137, size: 1 },\r\n // { x: 55.0359712230216, y: 3.56862745098039, size: 1 },\r\n // { x: 57.6258992805755, y: 3.84313725490196, size: 1 },\r\n // { x: 61.5107913669065, y: 3.52941176470588, size: 1 },\r\n // { x: 63.4532374100719, y: 3.45098039215686, size: 1 },\r\n // { x: 64.7482014388489, y: 3.64705882352941, size: 1 },\r\n // { x: 66.0431654676259, y: 3.84313725490196, size: 1 },\r\n // { x: 72.5179856115108, y: 3.49019607843137, size: 1 },\r\n // { x: 73.8129496402878, y: 3.25490196078431, size: 1 },\r\n // { x: 74.4604316546763, y: 3.2156862745098, size: 1 },\r\n // { x: 75.1079136690647, y: 3.41176470588235, size: 1 },\r\n // { x: 75.7553956834532, y: 3.2156862745098, size: 1 },\r\n // { x: 76.4028776978417, y: 3.09803921568627, size: 1 },\r\n // { x: 78.3453237410072, y: 3.25490196078431, size: 1 },\r\n // { x: 79.6402877697842, y: 3.29411764705882, size: 1 },\r\n // { x: 80.2877697841727, y: 3.2156862745098, size: 1 },\r\n // { x: 80.9352517985612, y: 3.29411764705882, size: 1 },\r\n // { x: 82.8776978417266, y: 3.41176470588235, size: 1 },\r\n // { x: 84.1726618705036, y: 3.29411764705882, size: 1 },\r\n // { x: 84.8201438848921, y: 3.33333333333333, size: 1 },\r\n // { x: 85.4676258992806, y: 3.29411764705882, size: 1 },\r\n // { x: 86.7625899280576, y: 3.09803921568627, size: 1 },\r\n // { x: 87.410071942446, y: 3.37254901960784, size: 1 },\r\n // { x: 88.0575539568345, y: 3.41176470588235, size: 1 },\r\n // { x: 91.9424460431655, y: 3.45098039215686, size: 1 },\r\n // { x: 95.8273381294964, y: 3.37254901960784, size: 1 },\r\n // { x: 97.1223021582734, y: 3.25490196078431, size: 1 },\r\n // { x: 97.7697841726619, y: 3.29411764705882, size: 1 },\r\n // { x: 100.359712230216, y: 3.45098039215686, size: 1 },\r\n // { x: 102.302158273381, y: 3.01960784313725, size: 1 },\r\n // { x: 104.244604316547, y: 3.84313725490196, size: 1 },\r\n // { x: 105.539568345324, y: 3.33333333333333, size: 1 },\r\n // { x: 106.187050359712, y: 3.17647058823529, size: 1 },\r\n // { x: 106.834532374101, y: 3.29411764705882, size: 1 },\r\n // { x: 107.482014388489, y: 3.33333333333333, size: 1 },\r\n // { x: 110.719424460432, y: 3.33333333333333, size: 1 },\r\n // { x: 111.36690647482, y: 3.29411764705882, size: 1 },\r\n // { x: 112.014388489209, y: 3.17647058823529, size: 1 },\r\n // { x: 113.309352517986, y: 3.37254901960784, size: 1 },\r\n // { x: 113.956834532374, y: 3.37254901960784, size: 1 },\r\n // { x: 114.604316546763, y: 3.37254901960784, size: 1 },\r\n // { x: 115.89928057554, y: 2.98039215686275, size: 1 },\r\n // { x: 116.546762589928, y: 2.98039215686275, size: 1 },\r\n // { x: 117.194244604317, y: 3.29411764705882, size: 1 },\r\n // { x: 119.136690647482, y: 3.41176470588235, size: 1 },\r\n // { x: 121.726618705036, y: 3.2156862745098, size: 1 },\r\n // { x: 122.374100719424, y: 3.37254901960784, size: 1 },\r\n // { x: 123.021582733813, y: 3.17647058823529, size: 1 },\r\n // { x: 123.669064748201, y: 3.29411764705882, size: 1 },\r\n // { x: 125.611510791367, y: 3.49019607843137, size: 1 },\r\n // { x: 126.258992805755, y: 3.41176470588235, size: 1 },\r\n // { x: 127.553956834532, y: 3.17647058823529, size: 1 },\r\n // { x: 128.201438848921, y: 3.17647058823529, size: 1 },\r\n // { x: 130.143884892086, y: 3.2156862745098, size: 1 },\r\n // { x: 131.438848920863, y: 3.2156862745098, size: 1 },\r\n // { x: 132.73381294964, y: 3.29411764705882, size: 1 },\r\n // { x: 134.028776978417, y: 3.29411764705882, size: 1 },\r\n // { x: 134.676258992806, y: 3.41176470588235, size: 1 },\r\n // { x: 138.561151079137, y: 3.41176470588235, size: 1 },\r\n // { x: 140.503597122302, y: 3.37254901960784, size: 1 },\r\n // { x: 141.798561151079, y: 3.76470588235294, size: 1 },\r\n // { x: 144.388489208633, y: 3.2156862745098, size: 1 },\r\n // { x: 149.568345323741, y: 3.29411764705882, size: 1 },\r\n // { x: 150.863309352518, y: 3.37254901960784, size: 1 },\r\n // { x: 152.158273381295, y: 3.41176470588235, size: 1 },\r\n // { x: 153.453237410072, y: 3.45098039215686, size: 1 },\r\n // { x: 155.395683453237, y: 3.41176470588235, size: 1 },\r\n // { x: 156.043165467626, y: 3.33333333333333, size: 1 },\r\n // { x: 156.690647482014, y: 3.33333333333333, size: 1 },\r\n // { x: 157.338129496403, y: 3.49019607843137, size: 1 },\r\n // { x: 157.985611510791, y: 3.45098039215686, size: 1 },\r\n // { x: 158.63309352518, y: 3.45098039215686, size: 1 },\r\n // { x: 159.928057553957, y: 3.88235294117647, size: 1 },\r\n // { x: 161.870503597122, y: 3.68627450980392, size: 1 },\r\n // { x: 168.992805755396, y: 3.80392156862745, size: 1 },\r\n // { x: 170.935251798561, y: 3.37254901960784, size: 1 },\r\n // { x: 180.647482014388, y: 3.13725490196078, size: 1 },\r\n // { x: 182.589928057554, y: 3.80392156862745, size: 1 },\r\n // { x: 183.884892086331, y: 3.88235294117647, size: 1 },\r\n // { x: 188.41726618705, y: 3.72549019607843, size: 1 },\r\n // { x: 189.064748201439, y: 3.92156862745098, size: 1 },\r\n // { x: 198.129496402878, y: 3.88235294117647, size: 1 },\r\n // { x: 201.36690647482, y: 3.09803921568627, size: 1 },\r\n // { x: 202.014388489209, y: 3.25490196078431, size: 1 },\r\n // { x: 202.661870503597, y: 2.94117647058824, size: 1 },\r\n // { x: 203.309352517986, y: 3.41176470588235, size: 1 },\r\n // { x: 203.956834532374, y: 3.45098039215686, size: 1 },\r\n // { x: 204.604316546763, y: 3.2156862745098, size: 1 },\r\n // { x: 207.194244604317, y: 3.33333333333333, size: 1 },\r\n // { x: 207.841726618705, y: 3.41176470588235, size: 1 },\r\n // { x: 209.784172661871, y: 3.25490196078431, size: 1 },\r\n // { x: 212.374100719424, y: 3.64705882352941, size: 1 },\r\n // { x: 213.021582733813, y: 3.2156862745098, size: 1 },\r\n // { x: 214.31654676259, y: 3.17647058823529, size: 1 },\r\n // { x: 215.611510791367, y: 3.25490196078431, size: 1 },\r\n // { x: 218.848920863309, y: 3.29411764705882, size: 1 },\r\n // { x: 220.143884892086, y: 3.33333333333333, size: 1 },\r\n // { x: 220.791366906475, y: 3.25490196078431, size: 1 },\r\n // { x: 222.086330935252, y: 3.88235294117647, size: 1 },\r\n // { x: 227.913669064748, y: 3.64705882352941, size: 1 },\r\n // { x: 229.856115107914, y: 3.41176470588235, size: 1 },\r\n // { x: 231.798561151079, y: 3.76470588235294, size: 1 },\r\n // { x: 233.093525179856, y: 3.84313725490196, size: 1 },\r\n // { x: 235.68345323741, y: 3.33333333333333, size: 1 },\r\n // { x: 238.920863309353, y: 4, size: 1 },\r\n // { x: 243.453237410072, y: 3.41176470588235, size: 1 },\r\n // { x: 244.748201438849, y: 3.25490196078431, size: 1 },\r\n // { x: 245.395683453237, y: 3.2156862745098, size: 1 },\r\n // { x: 246.043165467626, y: 3.45098039215686, size: 1 },\r\n // { x: 254.460431654676, y: 3.84313725490196, size: 1 },\r\n // { x: 259.640287769784, y: 3.45098039215686, size: 1 },\r\n // { x: 265.467625899281, y: 3.29411764705882, size: 1 },\r\n // { x: 266.762589928058, y: 3.25490196078431, size: 1 },\r\n // { x: 267.410071942446, y: 3.37254901960784, size: 1 },\r\n // { x: 268.705035971223, y: 3.33333333333333, size: 1 },\r\n // { x: 271.294964028777, y: 3.52941176470588, size: 1 },\r\n // { x: 271.942446043165, y: 3.33333333333333, size: 1 },\r\n // { x: 273.237410071942, y: 3.17647058823529, size: 1 },\r\n // { x: 274.532374100719, y: 3.25490196078431, size: 1 },\r\n // { x: 275.827338129496, y: 3.41176470588235, size: 1 },\r\n // { x: 279.712230215827, y: 3.37254901960784, size: 1 },\r\n // { x: 283.597122302158, y: 3.45098039215686, size: 1 },\r\n // { x: 284.892086330935, y: 3.33333333333333, size: 1 },\r\n // { x: 285.539568345324, y: 3.41176470588235, size: 1 },\r\n // { x: 292.661870503597, y: 3.92156862745098, size: 1 },\r\n // { x: 301.726618705036, y: 4.07843137254902, size: 1 },\r\n // { x: 304.31654676259, y: 4.15686274509804, size: 1 },\r\n // { x: 305.611510791367, y: 3.6078431372549, size: 1 },\r\n // { x: 309.496402877698, y: 3.25490196078431, size: 1 },\r\n // { x: 310.791366906475, y: 2.98039215686275, size: 1 },\r\n // { x: 312.086330935252, y: 3.13725490196078, size: 1 },\r\n // { x: 312.73381294964, y: 3.25490196078431, size: 1 },\r\n // { x: 314.676258992806, y: 3.64705882352941, size: 1 },\r\n // { x: 315.323741007194, y: 3.33333333333333, size: 1 },\r\n // { x: 317.26618705036, y: 3.2156862745098, size: 1 },\r\n // { x: 321.151079136691, y: 3.29411764705882, size: 1 },\r\n // { x: 323.741007194245, y: 3.09803921568627, size: 1 },\r\n // { x: 326.978417266187, y: 3.29411764705882, size: 1 },\r\n // { x: 327.625899280576, y: 3.2156862745098, size: 1 },\r\n // { x: 329.568345323741, y: 3.29411764705882, size: 1 },\r\n // { x: 330.863309352518, y: 3.2156862745098, size: 1 },\r\n // { x: 331.510791366906, y: 2.94117647058824, size: 1 },\r\n // { x: 332.158273381295, y: 3.17647058823529, size: 1 },\r\n // { x: 332.805755395683, y: 3.49019607843137, size: 1 },\r\n // { x: 334.10071942446, y: 3.84313725490196, size: 1 },\r\n // { x: 350.287769784173, y: 3.6078431372549, size: 1 },\r\n // { x: 356.762589928058, y: 3.49019607843137, size: 1 },\r\n // { x: 6.47482014388489, y: 3.45098039215686, size: 1 },\r\n // { x: 13.5971223021583, y: 3.37254901960784, size: 1 },\r\n // { x: 14.2446043165468, y: 3.13725490196078, size: 1 },\r\n // { x: 14.8920863309353, y: 3.13725490196078, size: 1 },\r\n // { x: 16.1870503597122, y: 3.64705882352941, size: 1 },\r\n // { x: 22.6618705035971, y: 3.64705882352941, size: 1 },\r\n // { x: 25.2517985611511, y: 3.49019607843137, size: 1 },\r\n // { x: 25.8992805755396, y: 3.68627450980392, size: 1 },\r\n // { x: 31.0791366906475, y: 3.37254901960784, size: 1 },\r\n // { x: 34.3165467625899, y: 3.49019607843137, size: 1 },\r\n // { x: 42.0863309352518, y: 3.56862745098039, size: 1 },\r\n // { x: 50.5035971223022, y: 3.6078431372549, size: 1 },\r\n // { x: 54.3884892086331, y: 3.88235294117647, size: 1 },\r\n // { x: 58.273381294964, y: 3.33333333333333, size: 1 },\r\n // { x: 61.5107913669065, y: 3.37254901960784, size: 1 },\r\n // { x: 64.1007194244604, y: 3.25490196078431, size: 1 },\r\n // { x: 64.7482014388489, y: 3.49019607843137, size: 1 },\r\n // { x: 66.0431654676259, y: 3.2156862745098, size: 1 },\r\n // { x: 67.3381294964029, y: 3.45098039215686, size: 1 },\r\n // { x: 69.9280575539568, y: 3.37254901960784, size: 1 },\r\n // { x: 71.8705035971223, y: 3.29411764705882, size: 1 },\r\n // { x: 73.8129496402878, y: 3.45098039215686, size: 1 },\r\n // { x: 82.2302158273381, y: 3.41176470588235, size: 1 },\r\n // { x: 90, y: 3.96078431372549, size: 1 },\r\n // { x: 93.8848920863309, y: 3.45098039215686, size: 1 },\r\n // { x: 96.4748201438849, y: 3.41176470588235, size: 1 },\r\n // { x: 99.7122302158273, y: 3.33333333333333, size: 1 },\r\n // { x: 101.007194244604, y: 3.13725490196078, size: 1 },\r\n // { x: 101.654676258993, y: 3.29411764705882, size: 1 },\r\n // { x: 104.892086330935, y: 4.03921568627451, size: 1 },\r\n // { x: 106.187050359712, y: 3.64705882352941, size: 1 },\r\n // { x: 108.776978417266, y: 3.84313725490196, size: 1 },\r\n // { x: 110.071942446043, y: 3.72549019607843, size: 1 },\r\n // { x: 112.014388489209, y: 3.68627450980392, size: 1 },\r\n // { x: 113.309352517986, y: 3.92156862745098, size: 1 },\r\n // { x: 113.956834532374, y: 3.88235294117647, size: 1 },\r\n // { x: 114.604316546763, y: 3.80392156862745, size: 1 },\r\n // { x: 117.841726618705, y: 3.92156862745098, size: 1 },\r\n // { x: 119.136690647482, y: 4, size: 1 },\r\n // { x: 119.784172661871, y: 3.68627450980392, size: 1 },\r\n // { x: 124.964028776978, y: 3.41176470588235, size: 1 },\r\n // { x: 135.323741007194, y: 3.49019607843137, size: 1 },\r\n // { x: 137.26618705036, y: 3.6078431372549, size: 1 },\r\n // { x: 138.561151079137, y: 3.68627450980392, size: 1 },\r\n // { x: 139.856115107914, y: 3.41176470588235, size: 1 },\r\n // { x: 148.273381294964, y: 3.80392156862745, size: 1 },\r\n // { x: 150.215827338129, y: 3.92156862745098, size: 1 },\r\n // { x: 151.510791366906, y: 3.76470588235294, size: 1 },\r\n // { x: 159.280575539568, y: 3.84313725490196, size: 1 },\r\n // { x: 163.812949640288, y: 3.37254901960784, size: 1 },\r\n // { x: 164.460431654676, y: 3.37254901960784, size: 1 },\r\n // { x: 165.755395683453, y: 3.05882352941176, size: 1 },\r\n // { x: 166.402877697842, y: 3.29411764705882, size: 1 },\r\n // { x: 170.287769784173, y: 3.88235294117647, size: 1 },\r\n // { x: 181.294964028777, y: 3.80392156862745, size: 1 },\r\n // { x: 185.827338129496, y: 3.17647058823529, size: 1 },\r\n // { x: 186.474820143885, y: 3.17647058823529, size: 1 },\r\n // { x: 187.122302158273, y: 2.50980392156863, size: 1 },\r\n // { x: 187.769784172662, y: 2.27450980392157, size: 1 },\r\n // { x: 188.41726618705, y: 3.17647058823529, size: 1 },\r\n // { x: 189.064748201439, y: 3.37254901960784, size: 1 },\r\n // { x: 194.244604316547, y: 3.49019607843137, size: 1 },\r\n // { x: 196.187050359712, y: 3.49019607843137, size: 1 },\r\n // { x: 198.776978417266, y: 3.37254901960784, size: 1 },\r\n // { x: 199.424460431655, y: 3.68627450980392, size: 1 },\r\n // { x: 200.071942446043, y: 3.49019607843137, size: 1 },\r\n // { x: 203.956834532374, y: 3.33333333333333, size: 1 },\r\n // { x: 207.194244604317, y: 3.84313725490196, size: 1 },\r\n // { x: 208.489208633094, y: 3.76470588235294, size: 1 },\r\n // { x: 218.848920863309, y: 3.96078431372549, size: 1 },\r\n // { x: 221.438848920863, y: 3.72549019607843, size: 1 },\r\n // { x: 226.618705035971, y: 3.84313725490196, size: 1 },\r\n // { x: 230.503597122302, y: 3.41176470588235, size: 1 },\r\n // { x: 233.741007194245, y: 3.6078431372549, size: 1 },\r\n // { x: 246.690647482014, y: 3.52941176470588, size: 1 },\r\n // { x: 248.63309352518, y: 3.64705882352941, size: 1 },\r\n // { x: 249.928057553957, y: 3.52941176470588, size: 1 },\r\n // { x: 250.575539568345, y: 3.68627450980392, size: 1 },\r\n // { x: 251.223021582734, y: 3.68627450980392, size: 1 },\r\n // { x: 256.402877697842, y: 4, size: 1 },\r\n // { x: 261.58273381295, y: 3.92156862745098, size: 1 },\r\n // { x: 273.884892086331, y: 3.33333333333333, size: 1 },\r\n // { x: 277.769784172662, y: 3.88235294117647, size: 1 },\r\n // { x: 278.41726618705, y: 3.56862745098039, size: 1 },\r\n // { x: 279.712230215827, y: 4.03921568627451, size: 1 },\r\n // { x: 283.597122302158, y: 3.80392156862745, size: 1 },\r\n // { x: 288.776978417266, y: 3.45098039215686, size: 1 },\r\n // { x: 289.424460431655, y: 4, size: 1 },\r\n // { x: 294.604316546763, y: 3.37254901960784, size: 1 },\r\n // { x: 295.251798561151, y: 3.37254901960784, size: 1 },\r\n // { x: 297.194244604317, y: 3.45098039215686, size: 1 },\r\n // { x: 306.906474820144, y: 3.49019607843137, size: 1 },\r\n // { x: 308.848920863309, y: 3.45098039215686, size: 1 },\r\n // { x: 312.086330935252, y: 3.68627450980392, size: 1 },\r\n // { x: 326.978417266187, y: 3.76470588235294, size: 1 },\r\n // { x: 337.338129496403, y: 3.52941176470588, size: 1 },\r\n // { x: 339.280575539568, y: 3.33333333333333, size: 1 },\r\n // { x: 345.107913669065, y: 3.80392156862745, size: 1 },\r\n // { x: 357.410071942446, y: 3.88235294117647, size: 1 },\r\n // { x: 0, y: 3.2156862745098, size: 1 },\r\n // { x: 1.29496402877698, y: 3.76470588235294, size: 1 },\r\n // { x: 12.3021582733813, y: 3.96078431372549, size: 1 },\r\n // { x: 15.5395683453237, y: 3.92156862745098, size: 1 },\r\n // { x: 20.0719424460432, y: 3.33333333333333, size: 1 },\r\n // { x: 20.7194244604317, y: 3.33333333333333, size: 1 },\r\n // { x: 21.3669064748201, y: 2.90196078431373, size: 1 },\r\n // { x: 22.0143884892086, y: 3.13725490196078, size: 1 },\r\n // { x: 22.6618705035971, y: 2.98039215686275, size: 1 },\r\n // { x: 23.3093525179856, y: 2.66666666666667, size: 1 },\r\n // { x: 26.5467625899281, y: 3.6078431372549, size: 1 },\r\n // { x: 27.841726618705, y: 3.72549019607843, size: 1 },\r\n // { x: 32.3741007194245, y: 3.64705882352941, size: 1 },\r\n // { x: 33.0215827338129, y: 3.80392156862745, size: 1 },\r\n // { x: 41.4388489208633, y: 3.49019607843137, size: 1 },\r\n // { x: 42.7338129496403, y: 3.41176470588235, size: 1 },\r\n // { x: 44.0287769784173, y: 3.49019607843137, size: 1 },\r\n // { x: 50.5035971223022, y: 3.45098039215686, size: 1 },\r\n // { x: 51.1510791366906, y: 3.37254901960784, size: 1 },\r\n // { x: 55.6834532374101, y: 3.29411764705882, size: 1 },\r\n // { x: 56.3309352517986, y: 3.41176470588235, size: 1 },\r\n // { x: 56.9784172661871, y: 3.41176470588235, size: 1 },\r\n // { x: 57.6258992805755, y: 3.25490196078431, size: 1 },\r\n // { x: 58.273381294964, y: 3.37254901960784, size: 1 },\r\n // { x: 62.8057553956835, y: 3.29411764705882, size: 1 },\r\n // { x: 64.1007194244604, y: 3.49019607843137, size: 1 },\r\n // { x: 64.7482014388489, y: 2.7843137254902, size: 1 },\r\n // { x: 65.3956834532374, y: 2.62745098039216, size: 1 },\r\n // { x: 66.6906474820144, y: 3.80392156862745, size: 1 },\r\n // { x: 69.9280575539568, y: 3.88235294117647, size: 1 },\r\n // { x: 71.2230215827338, y: 3.88235294117647, size: 1 },\r\n // { x: 71.8705035971223, y: 3.88235294117647, size: 1 },\r\n // { x: 75.1079136690647, y: 3.84313725490196, size: 1 },\r\n // { x: 75.7553956834532, y: 3.88235294117647, size: 1 },\r\n // { x: 77.0503597122302, y: 4.03921568627451, size: 1 },\r\n // { x: 77.6978417266187, y: 3.96078431372549, size: 1 },\r\n // { x: 80.2877697841727, y: 3.80392156862745, size: 1 },\r\n // { x: 97.1223021582734, y: 3.45098039215686, size: 1 },\r\n // { x: 99.0647482014388, y: 3.68627450980392, size: 1 },\r\n // { x: 106.834532374101, y: 3.96078431372549, size: 1 },\r\n // { x: 123.669064748201, y: 3.84313725490196, size: 1 },\r\n // { x: 130.791366906475, y: 3.25490196078431, size: 1 },\r\n // { x: 131.438848920863, y: 3.13725490196078, size: 1 },\r\n // { x: 132.73381294964, y: 3.33333333333333, size: 1 },\r\n // { x: 133.381294964029, y: 3.33333333333333, size: 1 },\r\n // { x: 135.971223021583, y: 3.41176470588235, size: 1 },\r\n // { x: 136.618705035971, y: 3.29411764705882, size: 1 },\r\n // { x: 138.561151079137, y: 3.25490196078431, size: 1 },\r\n // { x: 139.208633093525, y: 3.64705882352941, size: 1 },\r\n // { x: 141.151079136691, y: 3.2156862745098, size: 1 },\r\n // { x: 143.093525179856, y: 3.2156862745098, size: 1 },\r\n // { x: 143.741007194245, y: 3.29411764705882, size: 1 },\r\n // { x: 146.330935251799, y: 3.33333333333333, size: 1 },\r\n // { x: 146.978417266187, y: 3.29411764705882, size: 1 },\r\n // { x: 147.625899280576, y: 3.45098039215686, size: 1 },\r\n // { x: 150.863309352518, y: 3.33333333333333, size: 1 },\r\n // { x: 159.928057553957, y: 3.76470588235294, size: 1 },\r\n // { x: 168.992805755396, y: 3.84313725490196, size: 1 },\r\n // { x: 171.58273381295, y: 3.2156862745098, size: 1 },\r\n // { x: 172.230215827338, y: 3.17647058823529, size: 1 },\r\n // { x: 172.877697841727, y: 2.90196078431373, size: 1 },\r\n // { x: 173.525179856115, y: 3.25490196078431, size: 1 },\r\n // { x: 175.467625899281, y: 3.37254901960784, size: 1 },\r\n // { x: 176.762589928058, y: 3.29411764705882, size: 1 },\r\n // { x: 183.237410071942, y: 3.45098039215686, size: 1 },\r\n // { x: 184.532374100719, y: 3.29411764705882, size: 1 },\r\n // { x: 185.179856115108, y: 3.52941176470588, size: 1 },\r\n // { x: 187.122302158273, y: 3.13725490196078, size: 1 },\r\n // { x: 189.712230215827, y: 3.29411764705882, size: 1 },\r\n // { x: 191.007194244604, y: 3.96078431372549, size: 1 },\r\n // { x: 192.302158273381, y: 3.92156862745098, size: 1 },\r\n // { x: 193.597122302158, y: 3.09803921568627, size: 1 },\r\n // { x: 194.244604316547, y: 2.54901960784314, size: 1 },\r\n // { x: 194.892086330935, y: 2.94117647058824, size: 1 },\r\n // { x: 198.776978417266, y: 4.03921568627451, size: 1 },\r\n // { x: 212.374100719424, y: 3.96078431372549, size: 1 },\r\n // { x: 213.021582733813, y: 3.68627450980392, size: 1 },\r\n // { x: 214.31654676259, y: 3.49019607843137, size: 1 },\r\n // { x: 217.553956834532, y: 3.2156862745098, size: 1 },\r\n // { x: 222.086330935252, y: 3.13725490196078, size: 1 },\r\n // { x: 222.73381294964, y: 3.05882352941176, size: 1 },\r\n // { x: 224.028776978417, y: 3.29411764705882, size: 1 },\r\n // { x: 224.676258992806, y: 3.33333333333333, size: 1 },\r\n // { x: 226.618705035971, y: 3.33333333333333, size: 1 },\r\n // { x: 228.561151079137, y: 3.33333333333333, size: 1 },\r\n // { x: 229.856115107914, y: 3.37254901960784, size: 1 },\r\n // { x: 233.093525179856, y: 3.41176470588235, size: 1 },\r\n // { x: 234.388489208633, y: 3.13725490196078, size: 1 },\r\n // { x: 236.330935251799, y: 3.17647058823529, size: 1 },\r\n // { x: 236.978417266187, y: 3.25490196078431, size: 1 },\r\n // { x: 237.625899280576, y: 3.41176470588235, size: 1 },\r\n // { x: 241.510791366906, y: 3.88235294117647, size: 1 },\r\n // { x: 242.158273381295, y: 3.72549019607843, size: 1 },\r\n // { x: 251.870503597122, y: 3.84313725490196, size: 1 },\r\n // { x: 253.165467625899, y: 3.56862745098039, size: 1 },\r\n // { x: 258.345323741007, y: 3.33333333333333, size: 1 },\r\n // { x: 258.992805755396, y: 3.25490196078431, size: 1 },\r\n // { x: 259.640287769784, y: 3.29411764705882, size: 1 },\r\n // { x: 260.287769784173, y: 3.96078431372549, size: 1 },\r\n // { x: 264.172661870504, y: 3.76470588235294, size: 1 },\r\n // { x: 267.410071942446, y: 3.84313725490196, size: 1 },\r\n // { x: 270, y: 3.88235294117647, size: 1 },\r\n // { x: 273.884892086331, y: 3.72549019607843, size: 1 },\r\n // { x: 276.474820143885, y: 3.88235294117647, size: 1 },\r\n // { x: 277.769784172662, y: 3.68627450980392, size: 1 },\r\n // { x: 279.064748201439, y: 3.25490196078431, size: 1 },\r\n // { x: 280.359712230216, y: 2.7843137254902, size: 1 },\r\n // { x: 281.007194244604, y: 2.82352941176471, size: 1 },\r\n // { x: 281.654676258993, y: 3.41176470588235, size: 1 },\r\n // { x: 288.776978417266, y: 3.29411764705882, size: 1 },\r\n // { x: 300.431654676259, y: 3.41176470588235, size: 1 },\r\n // { x: 301.726618705036, y: 2.82352941176471, size: 1 },\r\n // { x: 302.374100719424, y: 1.56862745098039, size: 1 },\r\n // { x: 303.021582733813, y: 1.68627450980392, size: 1 },\r\n // { x: 303.669064748201, y: 1.96078431372549, size: 1 },\r\n // { x: 304.31654676259, y: 1.80392156862745, size: 1 },\r\n // { x: 304.964028776978, y: 3.37254901960784, size: 1 },\r\n // { x: 305.611510791367, y: 3.45098039215686, size: 1 },\r\n // { x: 306.258992805755, y: 3.45098039215686, size: 1 },\r\n // { x: 306.906474820144, y: 2.82352941176471, size: 1 },\r\n // { x: 307.553956834532, y: 3.33333333333333, size: 1 },\r\n // { x: 310.143884892086, y: 3.84313725490196, size: 1 },\r\n // { x: 311.438848920863, y: 3.09803921568627, size: 1 },\r\n // { x: 312.086330935252, y: 3.01960784313725, size: 1 },\r\n // { x: 317.26618705036, y: 3.41176470588235, size: 1 },\r\n // { x: 317.913669064748, y: 2.7843137254902, size: 1 },\r\n // { x: 318.561151079137, y: 3.29411764705882, size: 1 },\r\n // { x: 319.856115107914, y: 3.49019607843137, size: 1 },\r\n // { x: 320.503597122302, y: 3.37254901960784, size: 1 },\r\n // { x: 321.151079136691, y: 3.37254901960784, size: 1 },\r\n // { x: 321.798561151079, y: 3.33333333333333, size: 1 },\r\n // { x: 323.093525179856, y: 3.09803921568627, size: 1 },\r\n // { x: 323.741007194245, y: 2.43137254901961, size: 1 },\r\n // { x: 324.388489208633, y: 2.35294117647059, size: 1 },\r\n // { x: 325.035971223022, y: 3.64705882352941, size: 1 },\r\n // { x: 325.68345323741, y: 3.84313725490196, size: 1 },\r\n // { x: 330.215827338129, y: 3.6078431372549, size: 1 },\r\n // { x: 336.690647482014, y: 3.45098039215686, size: 1 },\r\n // { x: 338.63309352518, y: 3.80392156862745, size: 1 },\r\n // { x: 342.517985611511, y: 3.72549019607843, size: 1 },\r\n // { x: 345.755395683453, y: 3.25490196078431, size: 1 },\r\n // { x: 358.705035971223, y: 3.80392156862745, size: 1 },\r\n // { x: 4.54054054054054, y: 3.84313725490196, size: 1 },\r\n // { x: 5.18918918918919, y: 3.13725490196078, size: 1 },\r\n // { x: 5.83783783783784, y: 3.29411764705882, size: 1 },\r\n // { x: 7.13513513513514, y: 2.03921568627451, size: 1 },\r\n // { x: 7.78378378378378, y: 2.11764705882353, size: 1 },\r\n // { x: 8.43243243243243, y: 2.35294117647059, size: 1 },\r\n // { x: 9.08108108108108, y: 2.58823529411765, size: 1 },\r\n // { x: 9.72972972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 11.027027027027, y: 3.64705882352941, size: 1 },\r\n // { x: 14.2702702702703, y: 3.33333333333333, size: 1 },\r\n // { x: 17.5135135135135, y: 3.56862745098039, size: 1 },\r\n // { x: 18.8108108108108, y: 3.6078431372549, size: 1 },\r\n // { x: 19.4594594594595, y: 3.56862745098039, size: 1 },\r\n // { x: 20.1081081081081, y: 3.6078431372549, size: 1 },\r\n // { x: 20.7567567567568, y: 3.52941176470588, size: 1 },\r\n // { x: 21.4054054054054, y: 3.76470588235294, size: 1 },\r\n // { x: 22.0540540540541, y: 3.64705882352941, size: 1 },\r\n // { x: 24, y: 3.41176470588235, size: 1 },\r\n // { x: 24.6486486486486, y: 3.76470588235294, size: 1 },\r\n // { x: 25.2972972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 25.9459459459459, y: 3.52941176470588, size: 1 },\r\n // { x: 27.2432432432432, y: 3.25490196078431, size: 1 },\r\n // { x: 27.8918918918919, y: 3.13725490196078, size: 1 },\r\n // { x: 28.5405405405405, y: 2.66666666666667, size: 1 },\r\n // { x: 29.1891891891892, y: 2.62745098039216, size: 1 },\r\n // { x: 30.4864864864865, y: 3.6078431372549, size: 1 },\r\n // { x: 32.4324324324324, y: 3.45098039215686, size: 1 },\r\n // { x: 33.0810810810811, y: 3.84313725490196, size: 1 },\r\n // { x: 33.7297297297297, y: 3.49019607843137, size: 1 },\r\n // { x: 34.3783783783784, y: 3.6078431372549, size: 1 },\r\n // { x: 36.3243243243243, y: 3.6078431372549, size: 1 },\r\n // { x: 36.972972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 37.6216216216216, y: 3.6078431372549, size: 1 },\r\n // { x: 38.2702702702703, y: 3.6078431372549, size: 1 },\r\n // { x: 38.9189189189189, y: 3.52941176470588, size: 1 },\r\n // { x: 39.5675675675676, y: 3.45098039215686, size: 1 },\r\n // { x: 40.2162162162162, y: 3.25490196078431, size: 1 },\r\n // { x: 40.8648648648649, y: 3.6078431372549, size: 1 },\r\n // { x: 41.5135135135135, y: 3.33333333333333, size: 1 },\r\n // { x: 42.1621621621622, y: 3.37254901960784, size: 1 },\r\n // { x: 42.8108108108108, y: 3.6078431372549, size: 1 },\r\n // { x: 43.4594594594595, y: 3.6078431372549, size: 1 },\r\n // { x: 44.1081081081081, y: 3.56862745098039, size: 1 },\r\n // { x: 44.7567567567568, y: 3.56862745098039, size: 1 },\r\n // { x: 45.4054054054054, y: 3.56862745098039, size: 1 },\r\n // { x: 46.0540540540541, y: 3.45098039215686, size: 1 },\r\n // { x: 46.7027027027027, y: 3.41176470588235, size: 1 },\r\n // { x: 47.3513513513514, y: 3.52941176470588, size: 1 },\r\n // { x: 48, y: 3.29411764705882, size: 1 },\r\n // { x: 49.2972972972973, y: 3.01960784313725, size: 1 },\r\n // { x: 49.9459459459459, y: 2.86274509803922, size: 1 },\r\n // { x: 50.5945945945946, y: 2.47058823529412, size: 1 },\r\n // { x: 51.2432432432432, y: 3.25490196078431, size: 1 },\r\n // { x: 51.8918918918919, y: 3.37254901960784, size: 1 },\r\n // { x: 52.5405405405405, y: 3.64705882352941, size: 1 },\r\n // { x: 54.4864864864865, y: 3.45098039215686, size: 1 },\r\n // { x: 55.1351351351351, y: 3.64705882352941, size: 1 },\r\n // { x: 56.4324324324324, y: 3.49019607843137, size: 1 },\r\n // { x: 57.0810810810811, y: 3.52941176470588, size: 1 },\r\n // { x: 57.7297297297297, y: 3.56862745098039, size: 1 },\r\n // { x: 59.027027027027, y: 3.80392156862745, size: 1 },\r\n // { x: 59.6756756756757, y: 3.45098039215686, size: 1 },\r\n // { x: 62.2702702702703, y: 3.52941176470588, size: 1 },\r\n // { x: 62.9189189189189, y: 3.56862745098039, size: 1 },\r\n // { x: 63.5675675675676, y: 3.68627450980392, size: 1 },\r\n // { x: 64.2162162162162, y: 3.76470588235294, size: 1 },\r\n // { x: 65.5135135135135, y: 3.49019607843137, size: 1 },\r\n // { x: 67.4594594594595, y: 3.29411764705882, size: 1 },\r\n // { x: 70.054054054054, y: 3.45098039215686, size: 1 },\r\n // { x: 70.7027027027027, y: 3.64705882352941, size: 1 },\r\n // { x: 71.3513513513514, y: 2.82352941176471, size: 1 },\r\n // { x: 72, y: 2.11764705882353, size: 1 },\r\n // { x: 72.6486486486486, y: 3.25490196078431, size: 1 },\r\n // { x: 73.2972972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 74.5945945945946, y: 3.29411764705882, size: 1 },\r\n // { x: 75.2432432432432, y: 3.29411764705882, size: 1 },\r\n // { x: 76.5405405405405, y: 3.49019607843137, size: 1 },\r\n // { x: 77.1891891891892, y: 3.45098039215686, size: 1 },\r\n // { x: 77.8378378378378, y: 3.29411764705882, size: 1 },\r\n // { x: 79.1351351351351, y: 3.41176470588235, size: 1 },\r\n // { x: 79.7837837837838, y: 3.25490196078431, size: 1 },\r\n // { x: 80.4324324324324, y: 3.41176470588235, size: 1 },\r\n // { x: 81.0810810810811, y: 3.52941176470588, size: 1 },\r\n // { x: 81.7297297297297, y: 3.49019607843137, size: 1 },\r\n // { x: 83.6756756756757, y: 3.80392156862745, size: 1 },\r\n // { x: 84.3243243243243, y: 3.49019607843137, size: 1 },\r\n // { x: 84.972972972973, y: 3.2156862745098, size: 1 },\r\n // { x: 85.6216216216216, y: 3.37254901960784, size: 1 },\r\n // { x: 86.2702702702703, y: 3.41176470588235, size: 1 },\r\n // { x: 86.9189189189189, y: 3.37254901960784, size: 1 },\r\n // { x: 87.5675675675676, y: 3.6078431372549, size: 1 },\r\n // { x: 88.8648648648649, y: 3.33333333333333, size: 1 },\r\n // { x: 90.1621621621622, y: 3.45098039215686, size: 1 },\r\n // { x: 90.8108108108108, y: 3.33333333333333, size: 1 },\r\n // { x: 91.4594594594595, y: 3.13725490196078, size: 1 },\r\n // { x: 92.1081081081081, y: 2.98039215686275, size: 1 },\r\n // { x: 92.7567567567568, y: 2.98039215686275, size: 1 },\r\n // { x: 93.4054054054054, y: 1.76470588235294, size: 1 },\r\n // { x: 94.054054054054, y: 2.07843137254902, size: 1 },\r\n // { x: 94.7027027027027, y: 3.84313725490196, size: 1 },\r\n // { x: 96, y: 3.52941176470588, size: 1 },\r\n // { x: 96.6486486486486, y: 3.6078431372549, size: 1 },\r\n // { x: 97.2972972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 99.8918918918919, y: 3.56862745098039, size: 1 },\r\n // { x: 100.540540540541, y: 3.52941176470588, size: 1 },\r\n // { x: 104.432432432432, y: 3.45098039215686, size: 1 },\r\n // { x: 105.72972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 106.378378378378, y: 3.49019607843137, size: 1 },\r\n // { x: 107.027027027027, y: 3.49019607843137, size: 1 },\r\n // { x: 107.675675675676, y: 3.37254901960784, size: 1 },\r\n // { x: 108.972972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 109.621621621622, y: 3.84313725490196, size: 1 },\r\n // { x: 110.27027027027, y: 3.41176470588235, size: 1 },\r\n // { x: 112.864864864865, y: 3.37254901960784, size: 1 },\r\n // { x: 113.513513513514, y: 3.13725490196078, size: 1 },\r\n // { x: 114.810810810811, y: 3.76470588235294, size: 1 },\r\n // { x: 115.459459459459, y: 3.52941176470588, size: 1 },\r\n // { x: 116.756756756757, y: 3.45098039215686, size: 1 },\r\n // { x: 117.405405405405, y: 3.76470588235294, size: 1 },\r\n // { x: 118.702702702703, y: 3.49019607843137, size: 1 },\r\n // { x: 120, y: 3.84313725490196, size: 1 },\r\n // { x: 120.648648648649, y: 3.64705882352941, size: 1 },\r\n // { x: 121.297297297297, y: 3.56862745098039, size: 1 },\r\n // { x: 121.945945945946, y: 3.68627450980392, size: 1 },\r\n // { x: 122.594594594595, y: 3.88235294117647, size: 1 },\r\n // { x: 123.891891891892, y: 3.6078431372549, size: 1 },\r\n // { x: 125.189189189189, y: 3.64705882352941, size: 1 },\r\n // { x: 126.486486486486, y: 3.92156862745098, size: 1 },\r\n // { x: 127.135135135135, y: 3.52941176470588, size: 1 },\r\n // { x: 129.081081081081, y: 3.68627450980392, size: 1 },\r\n // { x: 131.675675675676, y: 3.45098039215686, size: 1 },\r\n // { x: 132.324324324324, y: 3.64705882352941, size: 1 },\r\n // { x: 134.27027027027, y: 3.84313725490196, size: 1 },\r\n // { x: 135.567567567568, y: 3.29411764705882, size: 1 },\r\n // { x: 136.216216216216, y: 3.68627450980392, size: 1 },\r\n // { x: 136.864864864865, y: 3.45098039215686, size: 1 },\r\n // { x: 138.162162162162, y: 3.64705882352941, size: 1 },\r\n // { x: 138.810810810811, y: 3.41176470588235, size: 1 },\r\n // { x: 139.459459459459, y: 3.41176470588235, size: 1 },\r\n // { x: 140.108108108108, y: 3.64705882352941, size: 1 },\r\n // { x: 140.756756756757, y: 3.45098039215686, size: 1 },\r\n // { x: 141.405405405405, y: 3.76470588235294, size: 1 },\r\n // { x: 142.054054054054, y: 3.41176470588235, size: 1 },\r\n // { x: 142.702702702703, y: 3.37254901960784, size: 1 },\r\n // { x: 143.351351351351, y: 3.45098039215686, size: 1 },\r\n // { x: 144.648648648649, y: 3.41176470588235, size: 1 },\r\n // { x: 145.945945945946, y: 3.6078431372549, size: 1 },\r\n // { x: 146.594594594595, y: 3.52941176470588, size: 1 },\r\n // { x: 147.243243243243, y: 3.45098039215686, size: 1 },\r\n // { x: 147.891891891892, y: 3.29411764705882, size: 1 },\r\n // { x: 148.540540540541, y: 3.37254901960784, size: 1 },\r\n // { x: 149.189189189189, y: 3.37254901960784, size: 1 },\r\n // { x: 149.837837837838, y: 3.41176470588235, size: 1 },\r\n // { x: 152.432432432432, y: 3.6078431372549, size: 1 },\r\n // { x: 153.081081081081, y: 3.45098039215686, size: 1 },\r\n // { x: 153.72972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 155.675675675676, y: 3.41176470588235, size: 1 },\r\n // { x: 156.324324324324, y: 3.45098039215686, size: 1 },\r\n // { x: 157.621621621622, y: 3.49019607843137, size: 1 },\r\n // { x: 158.27027027027, y: 3.6078431372549, size: 1 },\r\n // { x: 158.918918918919, y: 3.6078431372549, size: 1 },\r\n // { x: 159.567567567568, y: 3.29411764705882, size: 1 },\r\n // { x: 160.216216216216, y: 3.45098039215686, size: 1 },\r\n // { x: 161.513513513514, y: 3.56862745098039, size: 1 },\r\n // { x: 162.162162162162, y: 3.72549019607843, size: 1 },\r\n // { x: 164.756756756757, y: 3.49019607843137, size: 1 },\r\n // { x: 165.405405405405, y: 3.64705882352941, size: 1 },\r\n // { x: 166.054054054054, y: 3.56862745098039, size: 1 },\r\n // { x: 171.243243243243, y: 3.72549019607843, size: 1 },\r\n // { x: 171.891891891892, y: 3.72549019607843, size: 1 },\r\n // { x: 172.540540540541, y: 3.64705882352941, size: 1 },\r\n // { x: 173.189189189189, y: 3.49019607843137, size: 1 },\r\n // { x: 173.837837837838, y: 3.80392156862745, size: 1 },\r\n // { x: 174.486486486486, y: 3.41176470588235, size: 1 },\r\n // { x: 175.135135135135, y: 3.45098039215686, size: 1 },\r\n // { x: 177.081081081081, y: 3.45098039215686, size: 1 },\r\n // { x: 177.72972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 178.378378378378, y: 3.09803921568627, size: 1 },\r\n // { x: 179.027027027027, y: 3.09803921568627, size: 1 },\r\n // { x: 179.675675675676, y: 2.35294117647059, size: 1 },\r\n // { x: 180.324324324324, y: 2.35294117647059, size: 1 },\r\n // { x: 181.621621621622, y: 3.49019607843137, size: 1 },\r\n // { x: 182.918918918919, y: 3.49019607843137, size: 1 },\r\n // { x: 184.216216216216, y: 3.52941176470588, size: 1 },\r\n // { x: 186.810810810811, y: 3.64705882352941, size: 1 },\r\n // { x: 187.459459459459, y: 3.6078431372549, size: 1 },\r\n // { x: 188.108108108108, y: 3.45098039215686, size: 1 },\r\n // { x: 188.756756756757, y: 3.37254901960784, size: 1 },\r\n // { x: 192, y: 3.52941176470588, size: 1 },\r\n // { x: 193.297297297297, y: 3.41176470588235, size: 1 },\r\n // { x: 193.945945945946, y: 3.49019607843137, size: 1 },\r\n // { x: 196.540540540541, y: 3.68627450980392, size: 1 },\r\n // { x: 197.189189189189, y: 3.56862745098039, size: 1 },\r\n // { x: 197.837837837838, y: 3.6078431372549, size: 1 },\r\n // { x: 199.135135135135, y: 3.45098039215686, size: 1 },\r\n // { x: 199.783783783784, y: 3.17647058823529, size: 1 },\r\n // { x: 201.72972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 202.378378378378, y: 3.68627450980392, size: 1 },\r\n // { x: 203.027027027027, y: 3.68627450980392, size: 1 },\r\n // { x: 204.324324324324, y: 3.84313725490196, size: 1 },\r\n // { x: 204.972972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 206.27027027027, y: 3.49019607843137, size: 1 },\r\n // { x: 206.918918918919, y: 3.72549019607843, size: 1 },\r\n // { x: 207.567567567568, y: 3.84313725490196, size: 1 },\r\n // { x: 208.216216216216, y: 3.68627450980392, size: 1 },\r\n // { x: 208.864864864865, y: 3.41176470588235, size: 1 },\r\n // { x: 211.459459459459, y: 3.56862745098039, size: 1 },\r\n // { x: 212.756756756757, y: 3.80392156862745, size: 1 },\r\n // { x: 213.405405405405, y: 3.68627450980392, size: 1 },\r\n // { x: 216.648648648649, y: 3.64705882352941, size: 1 },\r\n // { x: 217.945945945946, y: 3.64705882352941, size: 1 },\r\n // { x: 219.243243243243, y: 3.68627450980392, size: 1 },\r\n // { x: 221.189189189189, y: 3.29411764705882, size: 1 },\r\n // { x: 221.837837837838, y: 3.56862745098039, size: 1 },\r\n // { x: 222.486486486486, y: 3.49019607843137, size: 1 },\r\n // { x: 223.135135135135, y: 3.64705882352941, size: 1 },\r\n // { x: 224.432432432432, y: 3.49019607843137, size: 1 },\r\n // { x: 225.081081081081, y: 3.56862745098039, size: 1 },\r\n // { x: 225.72972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 226.378378378378, y: 3.45098039215686, size: 1 },\r\n // { x: 228.972972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 235.459459459459, y: 3.52941176470588, size: 1 },\r\n // { x: 237.405405405405, y: 3.49019607843137, size: 1 },\r\n // { x: 239.351351351351, y: 3.45098039215686, size: 1 },\r\n // { x: 240.648648648649, y: 3.45098039215686, size: 1 },\r\n // { x: 242.594594594595, y: 3.37254901960784, size: 1 },\r\n // { x: 243.243243243243, y: 3.33333333333333, size: 1 },\r\n // { x: 244.540540540541, y: 3.37254901960784, size: 1 },\r\n // { x: 246.486486486486, y: 3.64705882352941, size: 1 },\r\n // { x: 247.135135135135, y: 3.56862745098039, size: 1 },\r\n // { x: 249.081081081081, y: 3.68627450980392, size: 1 },\r\n // { x: 249.72972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 250.378378378378, y: 3.37254901960784, size: 1 },\r\n // { x: 251.027027027027, y: 3.41176470588235, size: 1 },\r\n // { x: 251.675675675676, y: 3.56862745098039, size: 1 },\r\n // { x: 252.972972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 253.621621621622, y: 3.56862745098039, size: 1 },\r\n // { x: 254.918918918919, y: 3.76470588235294, size: 1 },\r\n // { x: 256.216216216216, y: 3.41176470588235, size: 1 },\r\n // { x: 256.864864864865, y: 3.64705882352941, size: 1 },\r\n // { x: 257.513513513513, y: 3.52941176470588, size: 1 },\r\n // { x: 258.810810810811, y: 3.72549019607843, size: 1 },\r\n // { x: 260.756756756757, y: 3.45098039215686, size: 1 },\r\n // { x: 261.405405405405, y: 3.6078431372549, size: 1 },\r\n // { x: 262.054054054054, y: 3.84313725490196, size: 1 },\r\n // { x: 262.702702702703, y: 3.37254901960784, size: 1 },\r\n // { x: 264, y: 3.41176470588235, size: 1 },\r\n // { x: 264.648648648649, y: 3.6078431372549, size: 1 },\r\n // { x: 266.594594594595, y: 3.52941176470588, size: 1 },\r\n // { x: 269.189189189189, y: 3.33333333333333, size: 1 },\r\n // { x: 270.486486486487, y: 3.52941176470588, size: 1 },\r\n // { x: 271.135135135135, y: 3.56862745098039, size: 1 },\r\n // { x: 273.081081081081, y: 3.41176470588235, size: 1 },\r\n // { x: 275.027027027027, y: 3.72549019607843, size: 1 },\r\n // { x: 276.324324324324, y: 3.64705882352941, size: 1 },\r\n // { x: 276.972972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 277.621621621622, y: 3.41176470588235, size: 1 },\r\n // { x: 280.864864864865, y: 3.37254901960784, size: 1 },\r\n // { x: 282.162162162162, y: 3.72549019607843, size: 1 },\r\n // { x: 284.108108108108, y: 3.45098039215686, size: 1 },\r\n // { x: 284.756756756757, y: 3.45098039215686, size: 1 },\r\n // { x: 285.405405405405, y: 3.37254901960784, size: 1 },\r\n // { x: 286.054054054054, y: 3.52941176470588, size: 1 },\r\n // { x: 290.594594594595, y: 3.45098039215686, size: 1 },\r\n // { x: 294.486486486487, y: 3.56862745098039, size: 1 },\r\n // { x: 295.135135135135, y: 3.6078431372549, size: 1 },\r\n // { x: 295.783783783784, y: 3.68627450980392, size: 1 },\r\n // { x: 296.432432432432, y: 3.29411764705882, size: 1 },\r\n // { x: 298.378378378378, y: 3.49019607843137, size: 1 },\r\n // { x: 299.027027027027, y: 3.52941176470588, size: 1 },\r\n // { x: 299.675675675676, y: 3.52941176470588, size: 1 },\r\n // { x: 300.972972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 301.621621621622, y: 3.76470588235294, size: 1 },\r\n // { x: 302.27027027027, y: 3.33333333333333, size: 1 },\r\n // { x: 304.216216216216, y: 3.68627450980392, size: 1 },\r\n // { x: 305.513513513513, y: 3.68627450980392, size: 1 },\r\n // { x: 306.162162162162, y: 3.49019607843137, size: 1 },\r\n // { x: 307.459459459459, y: 3.49019607843137, size: 1 },\r\n // { x: 309.405405405405, y: 3.29411764705882, size: 1 },\r\n // { x: 310.054054054054, y: 3.29411764705882, size: 1 },\r\n // { x: 310.702702702703, y: 3.17647058823529, size: 1 },\r\n // { x: 311.351351351351, y: 3.2156862745098, size: 1 },\r\n // { x: 312, y: 3.37254901960784, size: 1 },\r\n // { x: 313.297297297297, y: 3.72549019607843, size: 1 },\r\n // { x: 313.945945945946, y: 3.49019607843137, size: 1 },\r\n // { x: 315.243243243243, y: 3.45098039215686, size: 1 },\r\n // { x: 315.891891891892, y: 3.41176470588235, size: 1 },\r\n // { x: 316.540540540541, y: 3.6078431372549, size: 1 },\r\n // { x: 317.837837837838, y: 3.45098039215686, size: 1 },\r\n // { x: 319.135135135135, y: 3.52941176470588, size: 1 },\r\n // { x: 321.081081081081, y: 3.41176470588235, size: 1 },\r\n // { x: 322.378378378378, y: 3.41176470588235, size: 1 },\r\n // { x: 323.027027027027, y: 3.45098039215686, size: 1 },\r\n // { x: 323.675675675676, y: 3.49019607843137, size: 1 },\r\n // { x: 324.972972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 325.621621621622, y: 3.52941176470588, size: 1 },\r\n // { x: 326.918918918919, y: 3.56862745098039, size: 1 },\r\n // { x: 329.513513513513, y: 3.33333333333333, size: 1 },\r\n // { x: 330.810810810811, y: 3.05882352941176, size: 1 },\r\n // { x: 331.459459459459, y: 3.01960784313725, size: 1 },\r\n // { x: 332.108108108108, y: 2.66666666666667, size: 1 },\r\n // { x: 332.756756756757, y: 2.82352941176471, size: 1 },\r\n // { x: 333.405405405405, y: 3.01960784313725, size: 1 },\r\n // { x: 334.054054054054, y: 3.41176470588235, size: 1 },\r\n // { x: 334.702702702703, y: 3.52941176470588, size: 1 },\r\n // { x: 336.648648648649, y: 3.68627450980392, size: 1 },\r\n // { x: 337.297297297297, y: 3.49019607843137, size: 1 },\r\n // { x: 337.945945945946, y: 3.25490196078431, size: 1 },\r\n // { x: 339.243243243243, y: 3.52941176470588, size: 1 },\r\n // { x: 340.540540540541, y: 3.92156862745098, size: 1 },\r\n // { x: 342.486486486487, y: 3.68627450980392, size: 1 },\r\n // { x: 343.135135135135, y: 3.6078431372549, size: 1 },\r\n // { x: 343.783783783784, y: 3.84313725490196, size: 1 },\r\n // { x: 345.72972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 346.378378378378, y: 3.56862745098039, size: 1 },\r\n // { x: 347.027027027027, y: 3.52941176470588, size: 1 },\r\n // { x: 347.675675675676, y: 3.68627450980392, size: 1 },\r\n // { x: 348.324324324324, y: 3.76470588235294, size: 1 },\r\n // { x: 348.972972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 350.918918918919, y: 3.52941176470588, size: 1 },\r\n // { x: 351.567567567568, y: 3.09803921568627, size: 1 },\r\n // { x: 352.216216216216, y: 3.17647058823529, size: 1 },\r\n // { x: 352.864864864865, y: 2.74509803921569, size: 1 },\r\n // { x: 353.513513513513, y: 2.98039215686275, size: 1 },\r\n // { x: 354.162162162162, y: 2.98039215686275, size: 1 },\r\n // { x: 354.810810810811, y: 2.82352941176471, size: 1 },\r\n // { x: 355.459459459459, y: 3.45098039215686, size: 1 },\r\n // { x: 356.108108108108, y: 3.76470588235294, size: 1 },\r\n // { x: 356.756756756757, y: 3.64705882352941, size: 1 },\r\n // { x: 357.405405405405, y: 3.84313725490196, size: 1 },\r\n // { x: 358.702702702703, y: 3.68627450980392, size: 1 },\r\n // { x: 12.3021582733813, y: 3.37254901960784, size: 1 },\r\n // { x: 13.5971223021583, y: 3.80392156862745, size: 1 },\r\n // { x: 14.2446043165468, y: 3.37254901960784, size: 1 },\r\n // { x: 14.8920863309353, y: 3.29411764705882, size: 1 },\r\n // { x: 18.7769784172662, y: 3.88235294117647, size: 1 },\r\n // { x: 22.0143884892086, y: 3.84313725490196, size: 1 },\r\n // { x: 23.9568345323741, y: 4, size: 1 },\r\n // { x: 34.9640287769784, y: 3.29411764705882, size: 1 },\r\n // { x: 35.6115107913669, y: 3.33333333333333, size: 1 },\r\n // { x: 36.2589928057554, y: 3.2156862745098, size: 1 },\r\n // { x: 36.9064748201439, y: 3.45098039215686, size: 1 },\r\n // { x: 40.1438848920863, y: 3.49019607843137, size: 1 },\r\n // { x: 47.9136690647482, y: 3.41176470588235, size: 1 },\r\n // { x: 48.5611510791367, y: 3.49019607843137, size: 1 },\r\n // { x: 51.1510791366906, y: 3.96078431372549, size: 1 },\r\n // { x: 51.7985611510791, y: 3.41176470588235, size: 1 },\r\n // { x: 61.5107913669065, y: 3.76470588235294, size: 1 },\r\n // { x: 63.4532374100719, y: 3.76470588235294, size: 1 },\r\n // { x: 71.8705035971223, y: 3.49019607843137, size: 1 },\r\n // { x: 72.5179856115108, y: 3.76470588235294, size: 1 },\r\n // { x: 73.8129496402878, y: 3.80392156862745, size: 1 },\r\n // { x: 78.9928057553957, y: 3.33333333333333, size: 1 },\r\n // { x: 82.8776978417266, y: 3.84313725490196, size: 1 },\r\n // { x: 83.5251798561151, y: 3.92156862745098, size: 1 },\r\n // { x: 91.294964028777, y: 3.76470588235294, size: 1 },\r\n // { x: 94.5323741007194, y: 4, size: 1 },\r\n // { x: 103.597122302158, y: 3.76470588235294, size: 1 },\r\n // { x: 104.892086330935, y: 3.80392156862745, size: 1 },\r\n // { x: 108.776978417266, y: 3.80392156862745, size: 1 },\r\n // { x: 118.489208633094, y: 3.92156862745098, size: 1 },\r\n // { x: 119.136690647482, y: 3.80392156862745, size: 1 },\r\n // { x: 119.784172661871, y: 3.64705882352941, size: 1 },\r\n // { x: 122.374100719424, y: 3.29411764705882, size: 1 },\r\n // { x: 124.31654676259, y: 3.92156862745098, size: 1 },\r\n // { x: 130.791366906475, y: 3.84313725490196, size: 1 },\r\n // { x: 132.086330935252, y: 3.92156862745098, size: 1 },\r\n // { x: 141.151079136691, y: 3.76470588235294, size: 1 },\r\n // { x: 141.798561151079, y: 3.64705882352941, size: 1 },\r\n // { x: 146.330935251799, y: 3.6078431372549, size: 1 },\r\n // { x: 148.920863309353, y: 3.52941176470588, size: 1 },\r\n // { x: 149.568345323741, y: 3.88235294117647, size: 1 },\r\n // { x: 153.453237410072, y: 3.88235294117647, size: 1 },\r\n // { x: 154.748201438849, y: 3.45098039215686, size: 1 },\r\n // { x: 156.690647482014, y: 3.49019607843137, size: 1 },\r\n // { x: 161.223021582734, y: 3.80392156862745, size: 1 },\r\n // { x: 163.812949640288, y: 3.49019607843137, size: 1 },\r\n // { x: 164.460431654676, y: 3.25490196078431, size: 1 },\r\n // { x: 165.107913669065, y: 3.49019607843137, size: 1 },\r\n // { x: 165.755395683453, y: 3.09803921568627, size: 1 },\r\n // { x: 166.402877697842, y: 3.25490196078431, size: 1 },\r\n // { x: 167.05035971223, y: 3.13725490196078, size: 1 },\r\n // { x: 167.697841726619, y: 3.09803921568627, size: 1 },\r\n // { x: 170.935251798561, y: 3.84313725490196, size: 1 },\r\n // { x: 178.705035971223, y: 3.84313725490196, size: 1 },\r\n // { x: 180.647482014388, y: 3.88235294117647, size: 1 },\r\n // { x: 181.942446043165, y: 4, size: 1 },\r\n // { x: 182.589928057554, y: 3.88235294117647, size: 1 },\r\n // { x: 185.179856115108, y: 3.45098039215686, size: 1 },\r\n // { x: 185.827338129496, y: 3.37254901960784, size: 1 },\r\n // { x: 186.474820143885, y: 3.25490196078431, size: 1 },\r\n // { x: 187.122302158273, y: 3.2156862745098, size: 1 },\r\n // { x: 187.769784172662, y: 2.98039215686275, size: 1 },\r\n // { x: 188.41726618705, y: 3.33333333333333, size: 1 },\r\n // { x: 189.064748201439, y: 3.49019607843137, size: 1 },\r\n // { x: 189.712230215827, y: 3.76470588235294, size: 1 },\r\n // { x: 203.956834532374, y: 3.80392156862745, size: 1 },\r\n // { x: 205.251798561151, y: 3.80392156862745, size: 1 },\r\n // { x: 209.136690647482, y: 3.13725490196078, size: 1 },\r\n // { x: 209.784172661871, y: 3.09803921568627, size: 1 },\r\n // { x: 210.431654676259, y: 3.2156862745098, size: 1 },\r\n // { x: 211.079136690647, y: 3.37254901960784, size: 1 },\r\n // { x: 224.676258992806, y: 3.68627450980392, size: 1 },\r\n // { x: 225.323741007194, y: 3.33333333333333, size: 1 },\r\n // { x: 229.208633093525, y: 3.49019607843137, size: 1 },\r\n // { x: 229.856115107914, y: 3.33333333333333, size: 1 },\r\n // { x: 230.503597122302, y: 2.82352941176471, size: 1 },\r\n // { x: 231.151079136691, y: 3.2156862745098, size: 1 },\r\n // { x: 231.798561151079, y: 3.17647058823529, size: 1 },\r\n // { x: 233.093525179856, y: 3.52941176470588, size: 1 },\r\n // { x: 235.035971223022, y: 3.52941176470588, size: 1 },\r\n // { x: 242.805755395683, y: 3.37254901960784, size: 1 },\r\n // { x: 250.575539568345, y: 3.29411764705882, size: 1 },\r\n // { x: 259.640287769784, y: 3.80392156862745, size: 1 },\r\n // { x: 267.410071942446, y: 3.41176470588235, size: 1 },\r\n // { x: 273.237410071942, y: 3.25490196078431, size: 1 },\r\n // { x: 273.884892086331, y: 3.01960784313725, size: 1 },\r\n // { x: 274.532374100719, y: 2.82352941176471, size: 1 },\r\n // { x: 275.179856115108, y: 2.66666666666667, size: 1 },\r\n // { x: 294.604316546763, y: 3.2156862745098, size: 1 },\r\n // { x: 295.251798561151, y: 3.13725490196078, size: 1 },\r\n // { x: 295.89928057554, y: 2.94117647058824, size: 1 },\r\n // { x: 296.546762589928, y: 2.66666666666667, size: 1 },\r\n // { x: 297.194244604317, y: 2.7843137254902, size: 1 },\r\n // { x: 301.079136690647, y: 3.41176470588235, size: 1 },\r\n // { x: 301.726618705036, y: 3.37254901960784, size: 1 },\r\n // { x: 313.381294964029, y: 3.37254901960784, size: 1 },\r\n // { x: 315.971223021583, y: 3.37254901960784, size: 1 },\r\n // { x: 316.618705035971, y: 3.13725490196078, size: 1 },\r\n // { x: 321.798561151079, y: 3.88235294117647, size: 1 },\r\n // { x: 328.273381294964, y: 3.52941176470588, size: 1 },\r\n // { x: 332.158273381295, y: 3.88235294117647, size: 1 },\r\n // { x: 334.748201438849, y: 3.41176470588235, size: 1 },\r\n // { x: 339.280575539568, y: 3.72549019607843, size: 1 },\r\n // { x: 340.575539568345, y: 3.76470588235294, size: 1 },\r\n // { x: 348.345323741007, y: 3.76470588235294, size: 1 },\r\n // { x: 355.467625899281, y: 3.80392156862745, size: 1 },\r\n // { x: 358.057553956835, y: 3.80392156862745, size: 1 },\r\n // { x: 358.705035971223, y: 3.56862745098039, size: 1 },\r\n // { x: 1.2972972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 1.94594594594595, y: 3.68627450980392, size: 1 },\r\n // { x: 2.59459459459459, y: 3.52941176470588, size: 1 },\r\n // { x: 3.24324324324324, y: 3.68627450980392, size: 1 },\r\n // { x: 7.13513513513514, y: 3.56862745098039, size: 1 },\r\n // { x: 9.72972972972973, y: 4, size: 1 },\r\n // { x: 10.3783783783784, y: 3.92156862745098, size: 1 },\r\n // { x: 11.6756756756757, y: 3.72549019607843, size: 1 },\r\n // { x: 12.3243243243243, y: 4, size: 1 },\r\n // { x: 14.9189189189189, y: 3.49019607843137, size: 1 },\r\n // { x: 15.5675675675676, y: 3.96078431372549, size: 1 },\r\n // { x: 16.2162162162162, y: 3.49019607843137, size: 1 },\r\n // { x: 16.8648648648649, y: 3.37254901960784, size: 1 },\r\n // { x: 19.4594594594595, y: 3.64705882352941, size: 1 },\r\n // { x: 20.7567567567568, y: 3.45098039215686, size: 1 },\r\n // { x: 21.4054054054054, y: 3.25490196078431, size: 1 },\r\n // { x: 22.0540540540541, y: 3.09803921568627, size: 1 },\r\n // { x: 22.7027027027027, y: 3.45098039215686, size: 1 },\r\n // { x: 26.5945945945946, y: 3.49019607843137, size: 1 },\r\n // { x: 27.2432432432432, y: 3.56862745098039, size: 1 },\r\n // { x: 27.8918918918919, y: 3.6078431372549, size: 1 },\r\n // { x: 28.5405405405405, y: 3.52941176470588, size: 1 },\r\n // { x: 29.1891891891892, y: 3.45098039215686, size: 1 },\r\n // { x: 29.8378378378378, y: 3.6078431372549, size: 1 },\r\n // { x: 33.0810810810811, y: 3.41176470588235, size: 1 },\r\n // { x: 34.3783783783784, y: 3.68627450980392, size: 1 },\r\n // { x: 38.9189189189189, y: 3.37254901960784, size: 1 },\r\n // { x: 39.5675675675676, y: 3.41176470588235, size: 1 },\r\n // { x: 40.2162162162162, y: 3.76470588235294, size: 1 },\r\n // { x: 40.8648648648649, y: 3.41176470588235, size: 1 },\r\n // { x: 42.1621621621622, y: 3.33333333333333, size: 1 },\r\n // { x: 42.8108108108108, y: 2.74509803921569, size: 1 },\r\n // { x: 43.4594594594595, y: 2.82352941176471, size: 1 },\r\n // { x: 44.1081081081081, y: 2.82352941176471, size: 1 },\r\n // { x: 44.7567567567568, y: 2.7843137254902, size: 1 },\r\n // { x: 45.4054054054054, y: 3.17647058823529, size: 1 },\r\n // { x: 46.7027027027027, y: 3.52941176470588, size: 1 },\r\n // { x: 48, y: 3.49019607843137, size: 1 },\r\n // { x: 48.6486486486486, y: 3.52941176470588, size: 1 },\r\n // { x: 49.9459459459459, y: 3.96078431372549, size: 1 },\r\n // { x: 51.2432432432432, y: 3.64705882352941, size: 1 },\r\n // { x: 53.1891891891892, y: 3.76470588235294, size: 1 },\r\n // { x: 53.8378378378378, y: 3.6078431372549, size: 1 },\r\n // { x: 55.1351351351351, y: 3.37254901960784, size: 1 },\r\n // { x: 57.0810810810811, y: 3.6078431372549, size: 1 },\r\n // { x: 58.3783783783784, y: 3.68627450980392, size: 1 },\r\n // { x: 59.027027027027, y: 3.56862745098039, size: 1 },\r\n // { x: 60.3243243243243, y: 3.6078431372549, size: 1 },\r\n // { x: 60.972972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 61.6216216216216, y: 3.6078431372549, size: 1 },\r\n // { x: 63.5675675675676, y: 3.49019607843137, size: 1 },\r\n // { x: 64.2162162162162, y: 3.52941176470588, size: 1 },\r\n // { x: 64.8648648648649, y: 3.41176470588235, size: 1 },\r\n // { x: 65.5135135135135, y: 3.45098039215686, size: 1 },\r\n // { x: 66.1621621621622, y: 3.6078431372549, size: 1 },\r\n // { x: 66.8108108108108, y: 3.45098039215686, size: 1 },\r\n // { x: 67.4594594594595, y: 3.56862745098039, size: 1 },\r\n // { x: 68.7567567567568, y: 3.84313725490196, size: 1 },\r\n // { x: 69.4054054054054, y: 3.64705882352941, size: 1 },\r\n // { x: 70.7027027027027, y: 3.68627450980392, size: 1 },\r\n // { x: 71.3513513513514, y: 3.72549019607843, size: 1 },\r\n // { x: 72, y: 3.64705882352941, size: 1 },\r\n // { x: 72.6486486486486, y: 3.49019607843137, size: 1 },\r\n // { x: 73.2972972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 73.945945945946, y: 4.23529411764706, size: 1 },\r\n // { x: 74.5945945945946, y: 3.72549019607843, size: 1 },\r\n // { x: 75.2432432432432, y: 3.80392156862745, size: 1 },\r\n // { x: 76.5405405405405, y: 3.64705882352941, size: 1 },\r\n // { x: 77.1891891891892, y: 3.68627450980392, size: 1 },\r\n // { x: 78.4864864864865, y: 3.72549019607843, size: 1 },\r\n // { x: 79.1351351351351, y: 3.56862745098039, size: 1 },\r\n // { x: 80.4324324324324, y: 3.64705882352941, size: 1 },\r\n // { x: 81.0810810810811, y: 3.68627450980392, size: 1 },\r\n // { x: 83.6756756756757, y: 3.84313725490196, size: 1 },\r\n // { x: 84.972972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 87.5675675675676, y: 3.56862745098039, size: 1 },\r\n // { x: 89.5135135135135, y: 3.72549019607843, size: 1 },\r\n // { x: 90.1621621621622, y: 3.52941176470588, size: 1 },\r\n // { x: 95.3513513513514, y: 3.76470588235294, size: 1 },\r\n // { x: 96.6486486486486, y: 3.56862745098039, size: 1 },\r\n // { x: 98.5945945945946, y: 3.37254901960784, size: 1 },\r\n // { x: 101.189189189189, y: 3.49019607843137, size: 1 },\r\n // { x: 103.783783783784, y: 3.56862745098039, size: 1 },\r\n // { x: 104.432432432432, y: 3.56862745098039, size: 1 },\r\n // { x: 105.72972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 108.972972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 110.27027027027, y: 3.49019607843137, size: 1 },\r\n // { x: 111.567567567568, y: 3.52941176470588, size: 1 },\r\n // { x: 112.216216216216, y: 3.72549019607843, size: 1 },\r\n // { x: 113.513513513514, y: 3.45098039215686, size: 1 },\r\n // { x: 114.162162162162, y: 3.37254901960784, size: 1 },\r\n // { x: 115.459459459459, y: 3.80392156862745, size: 1 },\r\n // { x: 120, y: 3.41176470588235, size: 1 },\r\n // { x: 121.297297297297, y: 3.45098039215686, size: 1 },\r\n // { x: 121.945945945946, y: 3.64705882352941, size: 1 },\r\n // { x: 123.243243243243, y: 3.76470588235294, size: 1 },\r\n // { x: 123.891891891892, y: 3.41176470588235, size: 1 },\r\n // { x: 125.837837837838, y: 3.76470588235294, size: 1 },\r\n // { x: 126.486486486486, y: 3.64705882352941, size: 1 },\r\n // { x: 127.783783783784, y: 3.37254901960784, size: 1 },\r\n // { x: 128.432432432432, y: 3.13725490196078, size: 1 },\r\n // { x: 129.081081081081, y: 3.25490196078431, size: 1 },\r\n // { x: 129.72972972973, y: 3.09803921568627, size: 1 },\r\n // { x: 130.378378378378, y: 3.13725490196078, size: 1 },\r\n // { x: 131.027027027027, y: 3.01960784313725, size: 1 },\r\n // { x: 131.675675675676, y: 2.86274509803922, size: 1 },\r\n // { x: 132.324324324324, y: 3.92156862745098, size: 1 },\r\n // { x: 132.972972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 133.621621621622, y: 3.56862745098039, size: 1 },\r\n // { x: 134.918918918919, y: 3.76470588235294, size: 1 },\r\n // { x: 136.216216216216, y: 3.64705882352941, size: 1 },\r\n // { x: 136.864864864865, y: 3.72549019607843, size: 1 },\r\n // { x: 137.513513513514, y: 3.76470588235294, size: 1 },\r\n // { x: 138.162162162162, y: 3.37254901960784, size: 1 },\r\n // { x: 140.108108108108, y: 3.49019607843137, size: 1 },\r\n // { x: 140.756756756757, y: 3.56862745098039, size: 1 },\r\n // { x: 141.405405405405, y: 3.45098039215686, size: 1 },\r\n // { x: 142.054054054054, y: 3.88235294117647, size: 1 },\r\n // { x: 144, y: 3.52941176470588, size: 1 },\r\n // { x: 147.891891891892, y: 3.88235294117647, size: 1 },\r\n // { x: 149.189189189189, y: 3.2156862745098, size: 1 },\r\n // { x: 149.837837837838, y: 3.33333333333333, size: 1 },\r\n // { x: 150.486486486486, y: 3.49019607843137, size: 1 },\r\n // { x: 151.135135135135, y: 3.13725490196078, size: 1 },\r\n // { x: 151.783783783784, y: 3.25490196078431, size: 1 },\r\n // { x: 155.027027027027, y: 3.45098039215686, size: 1 },\r\n // { x: 156.972972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 158.27027027027, y: 3.41176470588235, size: 1 },\r\n // { x: 159.567567567568, y: 3.33333333333333, size: 1 },\r\n // { x: 160.864864864865, y: 3.80392156862745, size: 1 },\r\n // { x: 162.810810810811, y: 3.6078431372549, size: 1 },\r\n // { x: 163.459459459459, y: 3.76470588235294, size: 1 },\r\n // { x: 164.108108108108, y: 3.64705882352941, size: 1 },\r\n // { x: 165.405405405405, y: 3.45098039215686, size: 1 },\r\n // { x: 166.054054054054, y: 3.68627450980392, size: 1 },\r\n // { x: 168, y: 3.68627450980392, size: 1 },\r\n // { x: 168.648648648649, y: 3.76470588235294, size: 1 },\r\n // { x: 169.297297297297, y: 3.45098039215686, size: 1 },\r\n // { x: 169.945945945946, y: 3.64705882352941, size: 1 },\r\n // { x: 170.594594594595, y: 3.6078431372549, size: 1 },\r\n // { x: 171.891891891892, y: 3.37254901960784, size: 1 },\r\n // { x: 173.189189189189, y: 3.45098039215686, size: 1 },\r\n // { x: 173.837837837838, y: 3.64705882352941, size: 1 },\r\n // { x: 174.486486486486, y: 3.37254901960784, size: 1 },\r\n // { x: 175.135135135135, y: 3.6078431372549, size: 1 },\r\n // { x: 177.081081081081, y: 3.72549019607843, size: 1 },\r\n // { x: 177.72972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 180.324324324324, y: 3.92156862745098, size: 1 },\r\n // { x: 181.621621621622, y: 3.80392156862745, size: 1 },\r\n // { x: 182.27027027027, y: 3.52941176470588, size: 1 },\r\n // { x: 182.918918918919, y: 3.72549019607843, size: 1 },\r\n // { x: 185.513513513514, y: 3.68627450980392, size: 1 },\r\n // { x: 186.810810810811, y: 3.68627450980392, size: 1 },\r\n // { x: 188.108108108108, y: 3.6078431372549, size: 1 },\r\n // { x: 188.756756756757, y: 3.56862745098039, size: 1 },\r\n // { x: 189.405405405405, y: 3.76470588235294, size: 1 },\r\n // { x: 190.054054054054, y: 3.76470588235294, size: 1 },\r\n // { x: 190.702702702703, y: 3.52941176470588, size: 1 },\r\n // { x: 191.351351351351, y: 3.72549019607843, size: 1 },\r\n // { x: 192, y: 3.45098039215686, size: 1 },\r\n // { x: 192.648648648649, y: 3.49019607843137, size: 1 },\r\n // { x: 193.297297297297, y: 3.45098039215686, size: 1 },\r\n // { x: 194.594594594595, y: 3.45098039215686, size: 1 },\r\n // { x: 195.243243243243, y: 3.6078431372549, size: 1 },\r\n // { x: 197.837837837838, y: 3.64705882352941, size: 1 },\r\n // { x: 199.783783783784, y: 3.72549019607843, size: 1 },\r\n // { x: 201.72972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 203.675675675676, y: 3.80392156862745, size: 1 },\r\n // { x: 205.621621621622, y: 3.6078431372549, size: 1 },\r\n // { x: 206.918918918919, y: 3.84313725490196, size: 1 },\r\n // { x: 207.567567567568, y: 3.76470588235294, size: 1 },\r\n // { x: 208.216216216216, y: 3.64705882352941, size: 1 },\r\n // { x: 208.864864864865, y: 3.72549019607843, size: 1 },\r\n // { x: 210.162162162162, y: 3.6078431372549, size: 1 },\r\n // { x: 210.810810810811, y: 3.72549019607843, size: 1 },\r\n // { x: 211.459459459459, y: 3.84313725490196, size: 1 },\r\n // { x: 212.108108108108, y: 3.52941176470588, size: 1 },\r\n // { x: 213.405405405405, y: 3.72549019607843, size: 1 },\r\n // { x: 216, y: 3.25490196078431, size: 1 },\r\n // { x: 216.648648648649, y: 3.41176470588235, size: 1 },\r\n // { x: 219.891891891892, y: 3.49019607843137, size: 1 },\r\n // { x: 221.189189189189, y: 3.49019607843137, size: 1 },\r\n // { x: 222.486486486486, y: 3.45098039215686, size: 1 },\r\n // { x: 223.135135135135, y: 3.41176470588235, size: 1 },\r\n // { x: 223.783783783784, y: 3.92156862745098, size: 1 },\r\n // { x: 225.081081081081, y: 3.88235294117647, size: 1 },\r\n // { x: 226.378378378378, y: 3.33333333333333, size: 1 },\r\n // { x: 227.675675675676, y: 3.68627450980392, size: 1 },\r\n // { x: 228.324324324324, y: 3.49019607843137, size: 1 },\r\n // { x: 228.972972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 229.621621621622, y: 3.6078431372549, size: 1 },\r\n // { x: 231.567567567568, y: 3.72549019607843, size: 1 },\r\n // { x: 232.864864864865, y: 3.56862745098039, size: 1 },\r\n // { x: 234.810810810811, y: 3.45098039215686, size: 1 },\r\n // { x: 235.459459459459, y: 3.45098039215686, size: 1 },\r\n // { x: 237.405405405405, y: 3.25490196078431, size: 1 },\r\n // { x: 238.054054054054, y: 3.37254901960784, size: 1 },\r\n // { x: 238.702702702703, y: 3.56862745098039, size: 1 },\r\n // { x: 240.648648648649, y: 3.49019607843137, size: 1 },\r\n // { x: 241.945945945946, y: 3.68627450980392, size: 1 },\r\n // { x: 242.594594594595, y: 3.88235294117647, size: 1 },\r\n // { x: 243.243243243243, y: 3.56862745098039, size: 1 },\r\n // { x: 244.540540540541, y: 3.72549019607843, size: 1 },\r\n // { x: 245.189189189189, y: 3.56862745098039, size: 1 },\r\n // { x: 246.486486486486, y: 3.72549019607843, size: 1 },\r\n // { x: 247.135135135135, y: 3.52941176470588, size: 1 },\r\n // { x: 249.72972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 250.378378378378, y: 3.64705882352941, size: 1 },\r\n // { x: 251.675675675676, y: 3.76470588235294, size: 1 },\r\n // { x: 252.324324324324, y: 3.68627450980392, size: 1 },\r\n // { x: 254.918918918919, y: 3.6078431372549, size: 1 },\r\n // { x: 255.567567567568, y: 3.64705882352941, size: 1 },\r\n // { x: 256.216216216216, y: 3.37254901960784, size: 1 },\r\n // { x: 257.513513513513, y: 3.41176470588235, size: 1 },\r\n // { x: 258.162162162162, y: 3.41176470588235, size: 1 },\r\n // { x: 258.810810810811, y: 3.33333333333333, size: 1 },\r\n // { x: 259.459459459459, y: 3.37254901960784, size: 1 },\r\n // { x: 260.108108108108, y: 3.33333333333333, size: 1 },\r\n // { x: 260.756756756757, y: 3.6078431372549, size: 1 },\r\n // { x: 261.405405405405, y: 3.68627450980392, size: 1 },\r\n // { x: 262.054054054054, y: 3.80392156862745, size: 1 },\r\n // { x: 264, y: 3.6078431372549, size: 1 },\r\n // { x: 265.945945945946, y: 3.49019607843137, size: 1 },\r\n // { x: 266.594594594595, y: 3.64705882352941, size: 1 },\r\n // { x: 267.243243243243, y: 3.6078431372549, size: 1 },\r\n // { x: 269.837837837838, y: 3.52941176470588, size: 1 },\r\n // { x: 270.486486486487, y: 3.80392156862745, size: 1 },\r\n // { x: 271.783783783784, y: 3.72549019607843, size: 1 },\r\n // { x: 272.432432432432, y: 3.6078431372549, size: 1 },\r\n // { x: 273.081081081081, y: 3.56862745098039, size: 1 },\r\n // { x: 276.324324324324, y: 3.72549019607843, size: 1 },\r\n // { x: 276.972972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 277.621621621622, y: 3.45098039215686, size: 1 },\r\n // { x: 280.216216216216, y: 3.33333333333333, size: 1 },\r\n // { x: 280.864864864865, y: 3.01960784313725, size: 1 },\r\n // { x: 281.513513513513, y: 3.37254901960784, size: 1 },\r\n // { x: 285.405405405405, y: 3.72549019607843, size: 1 },\r\n // { x: 286.054054054054, y: 3.56862745098039, size: 1 },\r\n // { x: 287.351351351351, y: 3.6078431372549, size: 1 },\r\n // { x: 288, y: 3.49019607843137, size: 1 },\r\n // { x: 288.648648648649, y: 3.68627450980392, size: 1 },\r\n // { x: 292.540540540541, y: 3.37254901960784, size: 1 },\r\n // { x: 293.189189189189, y: 3.76470588235294, size: 1 },\r\n // { x: 294.486486486487, y: 3.72549019607843, size: 1 },\r\n // { x: 295.783783783784, y: 3.6078431372549, size: 1 },\r\n // { x: 296.432432432432, y: 3.76470588235294, size: 1 },\r\n // { x: 297.72972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 299.675675675676, y: 3.68627450980392, size: 1 },\r\n // { x: 300.324324324324, y: 3.49019607843137, size: 1 },\r\n // { x: 300.972972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 302.27027027027, y: 3.64705882352941, size: 1 },\r\n // { x: 302.918918918919, y: 3.17647058823529, size: 1 },\r\n // { x: 303.567567567568, y: 3.6078431372549, size: 1 },\r\n // { x: 306.810810810811, y: 3.72549019607843, size: 1 },\r\n // { x: 308.108108108108, y: 3.52941176470588, size: 1 },\r\n // { x: 308.756756756757, y: 3.52941176470588, size: 1 },\r\n // { x: 310.054054054054, y: 3.64705882352941, size: 1 },\r\n // { x: 310.702702702703, y: 3.41176470588235, size: 1 },\r\n // { x: 312.648648648649, y: 3.64705882352941, size: 1 },\r\n // { x: 314.594594594595, y: 3.45098039215686, size: 1 },\r\n // { x: 315.243243243243, y: 3.56862745098039, size: 1 },\r\n // { x: 315.891891891892, y: 3.80392156862745, size: 1 },\r\n // { x: 317.189189189189, y: 3.49019607843137, size: 1 },\r\n // { x: 318.486486486487, y: 3.68627450980392, size: 1 },\r\n // { x: 319.135135135135, y: 3.68627450980392, size: 1 },\r\n // { x: 319.783783783784, y: 3.49019607843137, size: 1 },\r\n // { x: 320.432432432432, y: 3.52941176470588, size: 1 },\r\n // { x: 321.081081081081, y: 3.6078431372549, size: 1 },\r\n // { x: 321.72972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 322.378378378378, y: 3.45098039215686, size: 1 },\r\n // { x: 323.675675675676, y: 3.33333333333333, size: 1 },\r\n // { x: 324.324324324324, y: 3.2156862745098, size: 1 },\r\n // { x: 324.972972972973, y: 3.13725490196078, size: 1 },\r\n // { x: 329.513513513513, y: 3.6078431372549, size: 1 },\r\n // { x: 331.459459459459, y: 3.56862745098039, size: 1 },\r\n // { x: 332.108108108108, y: 3.80392156862745, size: 1 },\r\n // { x: 332.756756756757, y: 3.72549019607843, size: 1 },\r\n // { x: 333.405405405405, y: 3.6078431372549, size: 1 },\r\n // { x: 334.054054054054, y: 3.6078431372549, size: 1 },\r\n // { x: 334.702702702703, y: 3.72549019607843, size: 1 },\r\n // { x: 335.351351351351, y: 3.88235294117647, size: 1 },\r\n // { x: 336.648648648649, y: 3.88235294117647, size: 1 },\r\n // { x: 337.297297297297, y: 3.76470588235294, size: 1 },\r\n // { x: 337.945945945946, y: 3.64705882352941, size: 1 },\r\n // { x: 339.891891891892, y: 3.68627450980392, size: 1 },\r\n // { x: 341.837837837838, y: 3.52941176470588, size: 1 },\r\n // { x: 343.783783783784, y: 3.2156862745098, size: 1 },\r\n // { x: 344.432432432432, y: 3.37254901960784, size: 1 },\r\n // { x: 345.081081081081, y: 3.29411764705882, size: 1 },\r\n // { x: 345.72972972973, y: 3.2156862745098, size: 1 },\r\n // { x: 346.378378378378, y: 3.37254901960784, size: 1 },\r\n // { x: 347.027027027027, y: 3.72549019607843, size: 1 },\r\n // { x: 348.324324324324, y: 3.88235294117647, size: 1 },\r\n // { x: 349.621621621622, y: 3.49019607843137, size: 1 },\r\n // { x: 352.216216216216, y: 3.41176470588235, size: 1 },\r\n // { x: 352.864864864865, y: 3.52941176470588, size: 1 },\r\n // { x: 353.513513513513, y: 3.37254901960784, size: 1 },\r\n // { x: 354.162162162162, y: 3.64705882352941, size: 1 },\r\n // { x: 354.810810810811, y: 4, size: 1 },\r\n // { x: 356.108108108108, y: 3.52941176470588, size: 1 },\r\n // { x: 356.756756756757, y: 3.6078431372549, size: 1 },\r\n // { x: 357.405405405405, y: 3.45098039215686, size: 1 },\r\n // { x: 358.054054054054, y: 3.33333333333333, size: 1 },\r\n // { x: 358.702702702703, y: 3.52941176470588, size: 1 },\r\n // { x: 359.351351351351, y: 3.80392156862745, size: 1 },\r\n // { x: 0.646319569120287, y: 3.52941176470588, size: 1 },\r\n // { x: 1.29263913824057, y: 3.64705882352941, size: 1 },\r\n // { x: 1.93895870736086, y: 3.6078431372549, size: 1 },\r\n // { x: 2.58527827648115, y: 3.6078431372549, size: 1 },\r\n // { x: 3.23159784560144, y: 3.41176470588235, size: 1 },\r\n // { x: 3.87791741472172, y: 3.49019607843137, size: 1 },\r\n // { x: 4.52423698384201, y: 3.56862745098039, size: 1 },\r\n // { x: 5.1705565529623, y: 3.41176470588235, size: 1 },\r\n // { x: 5.81687612208259, y: 3.56862745098039, size: 1 },\r\n // { x: 6.46319569120287, y: 3.52941176470588, size: 1 },\r\n // { x: 7.10951526032316, y: 3.64705882352941, size: 1 },\r\n // { x: 7.75583482944345, y: 3.45098039215686, size: 1 },\r\n // { x: 8.40215439856373, y: 3.88235294117647, size: 1 },\r\n // { x: 9.04847396768402, y: 3.56862745098039, size: 1 },\r\n // { x: 9.69479353680431, y: 3.68627450980392, size: 1 },\r\n // { x: 10.3411131059246, y: 3.49019607843137, size: 1 },\r\n // { x: 10.9874326750449, y: 3.68627450980392, size: 1 },\r\n // { x: 11.6337522441652, y: 3.84313725490196, size: 1 },\r\n // { x: 12.2800718132855, y: 3.6078431372549, size: 1 },\r\n // { x: 12.9263913824057, y: 3.68627450980392, size: 1 },\r\n // { x: 13.572710951526, y: 3.88235294117647, size: 1 },\r\n // { x: 14.2190305206463, y: 3.64705882352941, size: 1 },\r\n // { x: 14.8653500897666, y: 3.64705882352941, size: 1 },\r\n // { x: 15.5116696588869, y: 3.6078431372549, size: 1 },\r\n // { x: 16.1579892280072, y: 3.68627450980392, size: 1 },\r\n // { x: 16.8043087971275, y: 3.68627450980392, size: 1 },\r\n // { x: 17.4506283662478, y: 3.68627450980392, size: 1 },\r\n // { x: 18.096947935368, y: 3.72549019607843, size: 1 },\r\n // { x: 18.7432675044883, y: 3.56862745098039, size: 1 },\r\n // { x: 19.3895870736086, y: 3.56862745098039, size: 1 },\r\n // { x: 20.0359066427289, y: 3.80392156862745, size: 1 },\r\n // { x: 20.6822262118492, y: 3.64705882352941, size: 1 },\r\n // { x: 21.3285457809695, y: 3.76470588235294, size: 1 },\r\n // { x: 21.9748653500898, y: 3.72549019607843, size: 1 },\r\n // { x: 22.6211849192101, y: 3.68627450980392, size: 1 },\r\n // { x: 23.2675044883303, y: 3.56862745098039, size: 1 },\r\n // { x: 23.9138240574506, y: 3.76470588235294, size: 1 },\r\n // { x: 24.5601436265709, y: 3.6078431372549, size: 1 },\r\n // { x: 25.2064631956912, y: 3.6078431372549, size: 1 },\r\n // { x: 25.8527827648115, y: 3.68627450980392, size: 1 },\r\n // { x: 26.4991023339318, y: 3.72549019607843, size: 1 },\r\n // { x: 27.1454219030521, y: 3.52941176470588, size: 1 },\r\n // { x: 27.7917414721724, y: 3.52941176470588, size: 1 },\r\n // { x: 28.4380610412926, y: 3.37254901960784, size: 1 },\r\n // { x: 29.0843806104129, y: 3.29411764705882, size: 1 },\r\n // { x: 29.7307001795332, y: 3.64705882352941, size: 1 },\r\n // { x: 30.3770197486535, y: 3.64705882352941, size: 1 },\r\n // { x: 31.0233393177738, y: 3.76470588235294, size: 1 },\r\n // { x: 31.6696588868941, y: 3.6078431372549, size: 1 },\r\n // { x: 32.3159784560144, y: 3.6078431372549, size: 1 },\r\n // { x: 32.9622980251347, y: 3.56862745098039, size: 1 },\r\n // { x: 33.6086175942549, y: 3.72549019607843, size: 1 },\r\n // { x: 34.2549371633752, y: 3.56862745098039, size: 1 },\r\n // { x: 34.9012567324955, y: 3.68627450980392, size: 1 },\r\n // { x: 35.5475763016158, y: 3.64705882352941, size: 1 },\r\n // { x: 36.1938958707361, y: 3.68627450980392, size: 1 },\r\n // { x: 36.8402154398564, y: 3.76470588235294, size: 1 },\r\n // { x: 37.4865350089767, y: 3.64705882352941, size: 1 },\r\n // { x: 38.1328545780969, y: 3.64705882352941, size: 1 },\r\n // { x: 38.7791741472172, y: 3.80392156862745, size: 1 },\r\n // { x: 39.4254937163375, y: 3.6078431372549, size: 1 },\r\n // { x: 40.0718132854578, y: 3.76470588235294, size: 1 },\r\n // { x: 40.7181328545781, y: 3.6078431372549, size: 1 },\r\n // { x: 41.3644524236984, y: 3.6078431372549, size: 1 },\r\n // { x: 42.0107719928187, y: 3.68627450980392, size: 1 },\r\n // { x: 42.657091561939, y: 3.76470588235294, size: 1 },\r\n // { x: 43.3034111310592, y: 3.6078431372549, size: 1 },\r\n // { x: 43.9497307001795, y: 3.76470588235294, size: 1 },\r\n // { x: 44.5960502692998, y: 3.6078431372549, size: 1 },\r\n // { x: 45.2423698384201, y: 3.6078431372549, size: 1 },\r\n // { x: 45.8886894075404, y: 3.52941176470588, size: 1 },\r\n // { x: 46.5350089766607, y: 3.52941176470588, size: 1 },\r\n // { x: 47.181328545781, y: 3.68627450980392, size: 1 },\r\n // { x: 47.8276481149013, y: 3.72549019607843, size: 1 },\r\n // { x: 48.4739676840215, y: 3.49019607843137, size: 1 },\r\n // { x: 49.1202872531418, y: 3.6078431372549, size: 1 },\r\n // { x: 49.7666068222621, y: 3.56862745098039, size: 1 },\r\n // { x: 50.4129263913824, y: 3.45098039215686, size: 1 },\r\n // { x: 51.0592459605027, y: 3.37254901960784, size: 1 },\r\n // { x: 51.705565529623, y: 3.56862745098039, size: 1 },\r\n // { x: 52.3518850987433, y: 3.6078431372549, size: 1 },\r\n // { x: 52.9982046678636, y: 3.56862745098039, size: 1 },\r\n // { x: 53.6445242369838, y: 3.52941176470588, size: 1 },\r\n // { x: 54.2908438061041, y: 3.56862745098039, size: 1 },\r\n // { x: 54.9371633752244, y: 3.64705882352941, size: 1 },\r\n // { x: 55.5834829443447, y: 3.68627450980392, size: 1 },\r\n // { x: 56.229802513465, y: 3.6078431372549, size: 1 },\r\n // { x: 56.8761220825853, y: 3.68627450980392, size: 1 },\r\n // { x: 57.5224416517056, y: 3.6078431372549, size: 1 },\r\n // { x: 58.1687612208259, y: 3.76470588235294, size: 1 },\r\n // { x: 58.8150807899461, y: 3.49019607843137, size: 1 },\r\n // { x: 59.4614003590664, y: 3.76470588235294, size: 1 },\r\n // { x: 60.1077199281867, y: 3.56862745098039, size: 1 },\r\n // { x: 60.754039497307, y: 3.68627450980392, size: 1 },\r\n // { x: 61.4003590664273, y: 3.56862745098039, size: 1 },\r\n // { x: 62.0466786355476, y: 3.68627450980392, size: 1 },\r\n // { x: 62.6929982046679, y: 3.64705882352941, size: 1 },\r\n // { x: 63.3393177737882, y: 3.72549019607843, size: 1 },\r\n // { x: 63.9856373429084, y: 3.52941176470588, size: 1 },\r\n // { x: 64.6319569120287, y: 3.6078431372549, size: 1 },\r\n // { x: 65.278276481149, y: 3.64705882352941, size: 1 },\r\n // { x: 65.9245960502693, y: 3.64705882352941, size: 1 },\r\n // { x: 66.5709156193896, y: 3.68627450980392, size: 1 },\r\n // { x: 67.2172351885099, y: 3.6078431372549, size: 1 },\r\n // { x: 67.8635547576302, y: 3.56862745098039, size: 1 },\r\n // { x: 68.5098743267504, y: 3.68627450980392, size: 1 },\r\n // { x: 69.1561938958707, y: 3.49019607843137, size: 1 },\r\n // { x: 69.802513464991, y: 3.37254901960784, size: 1 },\r\n // { x: 70.4488330341113, y: 3.41176470588235, size: 1 },\r\n // { x: 71.0951526032316, y: 3.45098039215686, size: 1 },\r\n // { x: 71.7414721723519, y: 2.98039215686275, size: 1 },\r\n // { x: 72.3877917414722, y: 2.74509803921569, size: 1 },\r\n // { x: 73.0341113105925, y: 3.37254901960784, size: 1 },\r\n // { x: 73.6804308797127, y: 3.56862745098039, size: 1 },\r\n // { x: 74.326750448833, y: 3.6078431372549, size: 1 },\r\n // { x: 74.9730700179533, y: 3.52941176470588, size: 1 },\r\n // { x: 75.6193895870736, y: 3.41176470588235, size: 1 },\r\n // { x: 76.2657091561939, y: 3.45098039215686, size: 1 },\r\n // { x: 76.9120287253142, y: 3.52941176470588, size: 1 },\r\n // { x: 77.5583482944345, y: 3.56862745098039, size: 1 },\r\n // { x: 78.2046678635548, y: 3.56862745098039, size: 1 },\r\n // { x: 78.850987432675, y: 3.45098039215686, size: 1 },\r\n // { x: 79.4973070017953, y: 3.56862745098039, size: 1 },\r\n // { x: 80.1436265709156, y: 3.52941176470588, size: 1 },\r\n // { x: 80.7899461400359, y: 3.88235294117647, size: 1 },\r\n // { x: 81.4362657091562, y: 3.64705882352941, size: 1 },\r\n // { x: 82.0825852782765, y: 3.56862745098039, size: 1 },\r\n // { x: 82.7289048473968, y: 3.76470588235294, size: 1 },\r\n // { x: 83.3752244165171, y: 3.52941176470588, size: 1 },\r\n // { x: 84.0215439856373, y: 3.45098039215686, size: 1 },\r\n // { x: 84.6678635547576, y: 3.56862745098039, size: 1 },\r\n // { x: 85.3141831238779, y: 3.72549019607843, size: 1 },\r\n // { x: 85.9605026929982, y: 3.52941176470588, size: 1 },\r\n // { x: 86.6068222621185, y: 3.76470588235294, size: 1 },\r\n // { x: 87.2531418312388, y: 3.52941176470588, size: 1 },\r\n // { x: 87.8994614003591, y: 3.52941176470588, size: 1 },\r\n // { x: 88.5457809694794, y: 3.49019607843137, size: 1 },\r\n // { x: 89.1921005385996, y: 3.64705882352941, size: 1 },\r\n // { x: 89.8384201077199, y: 3.45098039215686, size: 1 },\r\n // { x: 90.4847396768402, y: 3.6078431372549, size: 1 },\r\n // { x: 91.1310592459605, y: 3.68627450980392, size: 1 },\r\n // { x: 91.7773788150808, y: 3.6078431372549, size: 1 },\r\n // { x: 92.4236983842011, y: 3.45098039215686, size: 1 },\r\n // { x: 93.0700179533214, y: 3.37254901960784, size: 1 },\r\n // { x: 93.7163375224416, y: 3.2156862745098, size: 1 },\r\n // { x: 94.3626570915619, y: 3.49019607843137, size: 1 },\r\n // { x: 95.0089766606822, y: 3.88235294117647, size: 1 },\r\n // { x: 95.6552962298025, y: 3.72549019607843, size: 1 },\r\n // { x: 96.3016157989228, y: 3.6078431372549, size: 1 },\r\n // { x: 96.9479353680431, y: 3.6078431372549, size: 1 },\r\n // { x: 97.5942549371634, y: 3.68627450980392, size: 1 },\r\n // { x: 98.2405745062837, y: 3.64705882352941, size: 1 },\r\n // { x: 98.8868940754039, y: 3.72549019607843, size: 1 },\r\n // { x: 99.5332136445242, y: 3.52941176470588, size: 1 },\r\n // { x: 100.179533213645, y: 3.6078431372549, size: 1 },\r\n // { x: 100.825852782765, y: 3.76470588235294, size: 1 },\r\n // { x: 101.472172351885, y: 3.84313725490196, size: 1 },\r\n // { x: 102.118491921005, y: 3.68627450980392, size: 1 },\r\n // { x: 102.764811490126, y: 3.80392156862745, size: 1 },\r\n // { x: 103.411131059246, y: 3.80392156862745, size: 1 },\r\n // { x: 104.057450628366, y: 3.64705882352941, size: 1 },\r\n // { x: 104.703770197487, y: 3.64705882352941, size: 1 },\r\n // { x: 105.350089766607, y: 3.68627450980392, size: 1 },\r\n // { x: 105.996409335727, y: 3.76470588235294, size: 1 },\r\n // { x: 106.642728904847, y: 3.84313725490196, size: 1 },\r\n // { x: 107.289048473968, y: 3.88235294117647, size: 1 },\r\n // { x: 107.935368043088, y: 3.6078431372549, size: 1 },\r\n // { x: 108.581687612208, y: 3.80392156862745, size: 1 },\r\n // { x: 109.228007181329, y: 3.76470588235294, size: 1 },\r\n // { x: 109.874326750449, y: 3.80392156862745, size: 1 },\r\n // { x: 110.520646319569, y: 3.80392156862745, size: 1 },\r\n // { x: 111.166965888689, y: 3.84313725490196, size: 1 },\r\n // { x: 111.81328545781, y: 3.6078431372549, size: 1 },\r\n // { x: 112.45960502693, y: 3.72549019607843, size: 1 },\r\n // { x: 113.10592459605, y: 3.80392156862745, size: 1 },\r\n // { x: 113.752244165171, y: 3.45098039215686, size: 1 },\r\n // { x: 114.398563734291, y: 3.68627450980392, size: 1 },\r\n // { x: 115.044883303411, y: 3.2156862745098, size: 1 },\r\n // { x: 115.691202872531, y: 3.41176470588235, size: 1 },\r\n // { x: 116.337522441652, y: 3.52941176470588, size: 1 },\r\n // { x: 116.983842010772, y: 4, size: 1 },\r\n // { x: 117.630161579892, y: 3.76470588235294, size: 1 },\r\n // { x: 118.276481149013, y: 3.56862745098039, size: 1 },\r\n // { x: 118.922800718133, y: 3.76470588235294, size: 1 },\r\n // { x: 119.569120287253, y: 3.72549019607843, size: 1 },\r\n // { x: 120.215439856373, y: 3.56862745098039, size: 1 },\r\n // { x: 120.861759425494, y: 3.88235294117647, size: 1 },\r\n // { x: 121.508078994614, y: 3.72549019607843, size: 1 },\r\n // { x: 122.154398563734, y: 3.92156862745098, size: 1 },\r\n // { x: 122.800718132855, y: 3.72549019607843, size: 1 },\r\n // { x: 123.447037701975, y: 3.64705882352941, size: 1 },\r\n // { x: 124.093357271095, y: 3.72549019607843, size: 1 },\r\n // { x: 124.739676840215, y: 3.64705882352941, size: 1 },\r\n // { x: 125.385996409336, y: 3.68627450980392, size: 1 },\r\n // { x: 126.032315978456, y: 3.64705882352941, size: 1 },\r\n // { x: 126.678635547576, y: 3.56862745098039, size: 1 },\r\n // { x: 127.324955116697, y: 3.6078431372549, size: 1 },\r\n // { x: 127.971274685817, y: 3.68627450980392, size: 1 },\r\n // { x: 128.617594254937, y: 3.72549019607843, size: 1 },\r\n // { x: 129.263913824057, y: 3.92156862745098, size: 1 },\r\n // { x: 129.910233393178, y: 3.68627450980392, size: 1 },\r\n // { x: 130.556552962298, y: 3.68627450980392, size: 1 },\r\n // { x: 131.202872531418, y: 3.72549019607843, size: 1 },\r\n // { x: 131.849192100539, y: 3.72549019607843, size: 1 },\r\n // { x: 132.495511669659, y: 3.56862745098039, size: 1 },\r\n // { x: 133.141831238779, y: 3.52941176470588, size: 1 },\r\n // { x: 133.788150807899, y: 3.68627450980392, size: 1 },\r\n // { x: 134.43447037702, y: 3.68627450980392, size: 1 },\r\n // { x: 135.08078994614, y: 3.52941176470588, size: 1 },\r\n // { x: 135.72710951526, y: 3.52941176470588, size: 1 },\r\n // { x: 136.373429084381, y: 3.49019607843137, size: 1 },\r\n // { x: 137.019748653501, y: 3.49019607843137, size: 1 },\r\n // { x: 137.666068222621, y: 3.49019607843137, size: 1 },\r\n // { x: 138.312387791741, y: 3.6078431372549, size: 1 },\r\n // { x: 138.958707360862, y: 3.64705882352941, size: 1 },\r\n // { x: 139.605026929982, y: 3.68627450980392, size: 1 },\r\n // { x: 140.251346499102, y: 3.72549019607843, size: 1 },\r\n // { x: 140.897666068223, y: 3.56862745098039, size: 1 },\r\n // { x: 141.543985637343, y: 3.92156862745098, size: 1 },\r\n // { x: 142.190305206463, y: 3.56862745098039, size: 1 },\r\n // { x: 142.836624775583, y: 3.76470588235294, size: 1 },\r\n // { x: 143.482944344704, y: 3.76470588235294, size: 1 },\r\n // { x: 144.129263913824, y: 3.45098039215686, size: 1 },\r\n // { x: 144.775583482944, y: 3.64705882352941, size: 1 },\r\n // { x: 145.421903052065, y: 3.76470588235294, size: 1 },\r\n // { x: 146.068222621185, y: 3.80392156862745, size: 1 },\r\n // { x: 146.714542190305, y: 3.68627450980392, size: 1 },\r\n // { x: 147.360861759425, y: 3.52941176470588, size: 1 },\r\n // { x: 148.007181328546, y: 3.88235294117647, size: 1 },\r\n // { x: 148.653500897666, y: 3.52941176470588, size: 1 },\r\n // { x: 149.299820466786, y: 3.68627450980392, size: 1 },\r\n // { x: 149.946140035907, y: 3.6078431372549, size: 1 },\r\n // { x: 150.592459605027, y: 3.68627450980392, size: 1 },\r\n // { x: 151.238779174147, y: 3.80392156862745, size: 1 },\r\n // { x: 151.885098743267, y: 3.76470588235294, size: 1 },\r\n // { x: 152.531418312388, y: 3.64705882352941, size: 1 },\r\n // { x: 153.177737881508, y: 3.64705882352941, size: 1 },\r\n // { x: 153.824057450628, y: 3.6078431372549, size: 1 },\r\n // { x: 154.470377019749, y: 3.72549019607843, size: 1 },\r\n // { x: 155.116696588869, y: 3.64705882352941, size: 1 },\r\n // { x: 155.763016157989, y: 3.64705882352941, size: 1 },\r\n // { x: 156.40933572711, y: 3.37254901960784, size: 1 },\r\n // { x: 157.05565529623, y: 3.29411764705882, size: 1 },\r\n // { x: 157.70197486535, y: 3.41176470588235, size: 1 },\r\n // { x: 158.34829443447, y: 3.29411764705882, size: 1 },\r\n // { x: 158.994614003591, y: 3.49019607843137, size: 1 },\r\n // { x: 159.640933572711, y: 3.84313725490196, size: 1 },\r\n // { x: 160.287253141831, y: 3.6078431372549, size: 1 },\r\n // { x: 160.933572710952, y: 3.56862745098039, size: 1 },\r\n // { x: 161.579892280072, y: 3.68627450980392, size: 1 },\r\n // { x: 162.226211849192, y: 3.80392156862745, size: 1 },\r\n // { x: 162.872531418312, y: 3.80392156862745, size: 1 },\r\n // { x: 163.518850987433, y: 3.72549019607843, size: 1 },\r\n // { x: 164.165170556553, y: 4.19607843137255, size: 1 },\r\n // { x: 164.811490125673, y: 3.56862745098039, size: 1 },\r\n // { x: 165.457809694794, y: 3.64705882352941, size: 1 },\r\n // { x: 166.104129263914, y: 3.52941176470588, size: 1 },\r\n // { x: 166.750448833034, y: 3.64705882352941, size: 1 },\r\n // { x: 167.396768402154, y: 3.68627450980392, size: 1 },\r\n // { x: 168.043087971275, y: 3.76470588235294, size: 1 },\r\n // { x: 168.689407540395, y: 3.41176470588235, size: 1 },\r\n // { x: 169.335727109515, y: 3.72549019607843, size: 1 },\r\n // { x: 169.982046678636, y: 3.68627450980392, size: 1 },\r\n // { x: 170.628366247756, y: 3.52941176470588, size: 1 },\r\n // { x: 171.274685816876, y: 3.56862745098039, size: 1 },\r\n // { x: 171.921005385996, y: 3.72549019607843, size: 1 },\r\n // { x: 172.567324955117, y: 3.41176470588235, size: 1 },\r\n // { x: 173.213644524237, y: 3.76470588235294, size: 1 },\r\n // { x: 173.859964093357, y: 3.49019607843137, size: 1 },\r\n // { x: 174.506283662478, y: 3.68627450980392, size: 1 },\r\n // { x: 175.152603231598, y: 3.72549019607843, size: 1 },\r\n // { x: 175.798922800718, y: 3.56862745098039, size: 1 },\r\n // { x: 176.445242369838, y: 3.68627450980392, size: 1 },\r\n // { x: 177.091561938959, y: 3.52941176470588, size: 1 },\r\n // { x: 177.737881508079, y: 3.37254901960784, size: 1 },\r\n // { x: 178.384201077199, y: 3.6078431372549, size: 1 },\r\n // { x: 179.03052064632, y: 3.49019607843137, size: 1 },\r\n // { x: 179.67684021544, y: 3.29411764705882, size: 1 },\r\n // { x: 180.32315978456, y: 3.17647058823529, size: 1 },\r\n // { x: 180.96947935368, y: 3.52941176470588, size: 1 },\r\n // { x: 181.615798922801, y: 3.64705882352941, size: 1 },\r\n // { x: 182.262118491921, y: 3.6078431372549, size: 1 },\r\n // { x: 182.908438061041, y: 3.56862745098039, size: 1 },\r\n // { x: 183.554757630162, y: 3.56862745098039, size: 1 },\r\n // { x: 184.201077199282, y: 3.64705882352941, size: 1 },\r\n // { x: 184.847396768402, y: 3.68627450980392, size: 1 },\r\n // { x: 185.493716337522, y: 3.84313725490196, size: 1 },\r\n // { x: 186.140035906643, y: 3.68627450980392, size: 1 },\r\n // { x: 186.786355475763, y: 3.49019607843137, size: 1 },\r\n // { x: 187.432675044883, y: 3.88235294117647, size: 1 },\r\n // { x: 188.078994614004, y: 3.6078431372549, size: 1 },\r\n // { x: 188.725314183124, y: 3.6078431372549, size: 1 },\r\n // { x: 189.371633752244, y: 3.6078431372549, size: 1 },\r\n // { x: 190.017953321364, y: 3.49019607843137, size: 1 },\r\n // { x: 190.664272890485, y: 3.64705882352941, size: 1 },\r\n // { x: 191.310592459605, y: 3.49019607843137, size: 1 },\r\n // { x: 191.956912028725, y: 3.6078431372549, size: 1 },\r\n // { x: 192.603231597846, y: 3.52941176470588, size: 1 },\r\n // { x: 193.249551166966, y: 3.41176470588235, size: 1 },\r\n // { x: 193.895870736086, y: 3.49019607843137, size: 1 },\r\n // { x: 194.542190305206, y: 3.72549019607843, size: 1 },\r\n // { x: 195.188509874327, y: 3.76470588235294, size: 1 },\r\n // { x: 195.834829443447, y: 3.52941176470588, size: 1 },\r\n // { x: 196.481149012567, y: 3.52941176470588, size: 1 },\r\n // { x: 197.127468581688, y: 3.64705882352941, size: 1 },\r\n // { x: 197.773788150808, y: 3.68627450980392, size: 1 },\r\n // { x: 198.420107719928, y: 3.76470588235294, size: 1 },\r\n // { x: 199.066427289048, y: 3.56862745098039, size: 1 },\r\n // { x: 199.712746858169, y: 3.88235294117647, size: 1 },\r\n // { x: 200.359066427289, y: 3.64705882352941, size: 1 },\r\n // { x: 201.005385996409, y: 3.37254901960784, size: 1 },\r\n // { x: 201.65170556553, y: 3.64705882352941, size: 1 },\r\n // { x: 202.29802513465, y: 3.33333333333333, size: 1 },\r\n // { x: 202.94434470377, y: 3.72549019607843, size: 1 },\r\n // { x: 203.59066427289, y: 3.80392156862745, size: 1 },\r\n // { x: 204.236983842011, y: 3.56862745098039, size: 1 },\r\n // { x: 204.883303411131, y: 3.80392156862745, size: 1 },\r\n // { x: 205.529622980251, y: 3.64705882352941, size: 1 },\r\n // { x: 206.175942549372, y: 3.72549019607843, size: 1 },\r\n // { x: 206.822262118492, y: 3.6078431372549, size: 1 },\r\n // { x: 207.468581687612, y: 3.84313725490196, size: 1 },\r\n // { x: 208.114901256733, y: 3.52941176470588, size: 1 },\r\n // { x: 208.761220825853, y: 3.92156862745098, size: 1 },\r\n // { x: 209.407540394973, y: 3.68627450980392, size: 1 },\r\n // { x: 210.053859964093, y: 3.6078431372549, size: 1 },\r\n // { x: 210.700179533214, y: 3.92156862745098, size: 1 },\r\n // { x: 211.346499102334, y: 3.64705882352941, size: 1 },\r\n // { x: 211.992818671454, y: 3.84313725490196, size: 1 },\r\n // { x: 212.639138240575, y: 3.68627450980392, size: 1 },\r\n // { x: 213.285457809695, y: 3.68627450980392, size: 1 },\r\n // { x: 213.931777378815, y: 3.68627450980392, size: 1 },\r\n // { x: 214.578096947935, y: 3.56862745098039, size: 1 },\r\n // { x: 215.224416517056, y: 3.64705882352941, size: 1 },\r\n // { x: 215.870736086176, y: 3.72549019607843, size: 1 },\r\n // { x: 216.517055655296, y: 3.80392156862745, size: 1 },\r\n // { x: 217.163375224417, y: 3.76470588235294, size: 1 },\r\n // { x: 217.809694793537, y: 3.6078431372549, size: 1 },\r\n // { x: 218.456014362657, y: 3.68627450980392, size: 1 },\r\n // { x: 219.102333931777, y: 3.68627450980392, size: 1 },\r\n // { x: 219.748653500898, y: 3.80392156862745, size: 1 },\r\n // { x: 220.394973070018, y: 3.56862745098039, size: 1 },\r\n // { x: 221.041292639138, y: 3.68627450980392, size: 1 },\r\n // { x: 221.687612208259, y: 3.49019607843137, size: 1 },\r\n // { x: 222.333931777379, y: 3.72549019607843, size: 1 },\r\n // { x: 222.980251346499, y: 3.56862745098039, size: 1 },\r\n // { x: 223.626570915619, y: 3.49019607843137, size: 1 },\r\n // { x: 224.27289048474, y: 3.76470588235294, size: 1 },\r\n // { x: 224.91921005386, y: 3.68627450980392, size: 1 },\r\n // { x: 225.56552962298, y: 3.72549019607843, size: 1 },\r\n // { x: 226.211849192101, y: 3.56862745098039, size: 1 },\r\n // { x: 226.858168761221, y: 3.45098039215686, size: 1 },\r\n // { x: 227.504488330341, y: 3.76470588235294, size: 1 },\r\n // { x: 228.150807899461, y: 3.68627450980392, size: 1 },\r\n // { x: 228.797127468582, y: 3.72549019607843, size: 1 },\r\n // { x: 229.443447037702, y: 3.68627450980392, size: 1 },\r\n // { x: 230.089766606822, y: 3.68627450980392, size: 1 },\r\n // { x: 230.736086175943, y: 3.88235294117647, size: 1 },\r\n // { x: 231.382405745063, y: 3.56862745098039, size: 1 },\r\n // { x: 232.028725314183, y: 3.84313725490196, size: 1 },\r\n // { x: 232.675044883303, y: 3.45098039215686, size: 1 },\r\n // { x: 233.321364452424, y: 3.56862745098039, size: 1 },\r\n // { x: 233.967684021544, y: 3.56862745098039, size: 1 },\r\n // { x: 234.614003590664, y: 3.6078431372549, size: 1 },\r\n // { x: 235.260323159785, y: 3.41176470588235, size: 1 },\r\n // { x: 235.906642728905, y: 3.72549019607843, size: 1 },\r\n // { x: 236.552962298025, y: 3.64705882352941, size: 1 },\r\n // { x: 237.199281867145, y: 4, size: 1 },\r\n // { x: 237.845601436266, y: 3.68627450980392, size: 1 },\r\n // { x: 238.491921005386, y: 3.52941176470588, size: 1 },\r\n // { x: 239.138240574506, y: 3.88235294117647, size: 1 },\r\n // { x: 239.784560143627, y: 3.6078431372549, size: 1 },\r\n // { x: 240.430879712747, y: 3.72549019607843, size: 1 },\r\n // { x: 241.077199281867, y: 3.56862745098039, size: 1 },\r\n // { x: 241.723518850987, y: 3.68627450980392, size: 1 },\r\n // { x: 242.369838420108, y: 3.84313725490196, size: 1 },\r\n // { x: 243.016157989228, y: 3.17647058823529, size: 1 },\r\n // { x: 243.662477558348, y: 3.45098039215686, size: 1 },\r\n // { x: 244.308797127469, y: 3.17647058823529, size: 1 },\r\n // { x: 244.955116696589, y: 2.90196078431373, size: 1 },\r\n // { x: 245.601436265709, y: 3.6078431372549, size: 1 },\r\n // { x: 246.247755834829, y: 3.52941176470588, size: 1 },\r\n // { x: 246.89407540395, y: 3.6078431372549, size: 1 },\r\n // { x: 247.54039497307, y: 3.68627450980392, size: 1 },\r\n // { x: 248.18671454219, y: 3.41176470588235, size: 1 },\r\n // { x: 248.833034111311, y: 3.52941176470588, size: 1 },\r\n // { x: 249.479353680431, y: 3.49019607843137, size: 1 },\r\n // { x: 250.125673249551, y: 3.68627450980392, size: 1 },\r\n // { x: 250.771992818671, y: 3.52941176470588, size: 1 },\r\n // { x: 251.418312387792, y: 3.56862745098039, size: 1 },\r\n // { x: 252.064631956912, y: 3.96078431372549, size: 1 },\r\n // { x: 252.710951526032, y: 3.41176470588235, size: 1 },\r\n // { x: 253.357271095153, y: 3.49019607843137, size: 1 },\r\n // { x: 254.003590664273, y: 3.52941176470588, size: 1 },\r\n // { x: 254.649910233393, y: 3.80392156862745, size: 1 },\r\n // { x: 255.296229802513, y: 3.72549019607843, size: 1 },\r\n // { x: 255.942549371634, y: 3.68627450980392, size: 1 },\r\n // { x: 256.588868940754, y: 3.56862745098039, size: 1 },\r\n // { x: 257.235188509874, y: 3.64705882352941, size: 1 },\r\n // { x: 257.881508078995, y: 3.49019607843137, size: 1 },\r\n // { x: 258.527827648115, y: 3.64705882352941, size: 1 },\r\n // { x: 259.174147217235, y: 3.37254901960784, size: 1 },\r\n // { x: 259.820466786356, y: 3.6078431372549, size: 1 },\r\n // { x: 260.466786355476, y: 3.6078431372549, size: 1 },\r\n // { x: 261.113105924596, y: 3.6078431372549, size: 1 },\r\n // { x: 261.759425493716, y: 3.6078431372549, size: 1 },\r\n // { x: 262.405745062837, y: 3.49019607843137, size: 1 },\r\n // { x: 263.052064631957, y: 3.6078431372549, size: 1 },\r\n // { x: 263.698384201077, y: 3.41176470588235, size: 1 },\r\n // { x: 264.344703770198, y: 3.56862745098039, size: 1 },\r\n // { x: 264.991023339318, y: 3.56862745098039, size: 1 },\r\n // { x: 265.637342908438, y: 3.76470588235294, size: 1 },\r\n // { x: 266.283662477558, y: 3.37254901960784, size: 1 },\r\n // { x: 266.929982046679, y: 3.49019607843137, size: 1 },\r\n // { x: 267.576301615799, y: 3.68627450980392, size: 1 },\r\n // { x: 268.222621184919, y: 3.64705882352941, size: 1 },\r\n // { x: 268.86894075404, y: 3.6078431372549, size: 1 },\r\n // { x: 269.51526032316, y: 3.64705882352941, size: 1 },\r\n // { x: 270.16157989228, y: 3.76470588235294, size: 1 },\r\n // { x: 270.8078994614, y: 3.64705882352941, size: 1 },\r\n // { x: 271.454219030521, y: 3.56862745098039, size: 1 },\r\n // { x: 272.100538599641, y: 3.6078431372549, size: 1 },\r\n // { x: 272.746858168761, y: 3.68627450980392, size: 1 },\r\n // { x: 273.393177737882, y: 3.6078431372549, size: 1 },\r\n // { x: 274.039497307002, y: 3.80392156862745, size: 1 },\r\n // { x: 274.685816876122, y: 3.84313725490196, size: 1 },\r\n // { x: 275.332136445242, y: 3.6078431372549, size: 1 },\r\n // { x: 275.978456014363, y: 3.6078431372549, size: 1 },\r\n // { x: 276.624775583483, y: 3.6078431372549, size: 1 },\r\n // { x: 277.271095152603, y: 3.84313725490196, size: 1 },\r\n // { x: 277.917414721724, y: 3.6078431372549, size: 1 },\r\n // { x: 278.563734290844, y: 3.68627450980392, size: 1 },\r\n // { x: 279.210053859964, y: 4.07843137254902, size: 1 },\r\n // { x: 279.856373429084, y: 3.68627450980392, size: 1 },\r\n // { x: 280.502692998205, y: 3.72549019607843, size: 1 },\r\n // { x: 281.149012567325, y: 3.52941176470588, size: 1 },\r\n // { x: 281.795332136445, y: 3.64705882352941, size: 1 },\r\n // { x: 282.441651705566, y: 3.56862745098039, size: 1 },\r\n // { x: 283.087971274686, y: 3.80392156862745, size: 1 },\r\n // { x: 283.734290843806, y: 3.45098039215686, size: 1 },\r\n // { x: 284.380610412926, y: 3.6078431372549, size: 1 },\r\n // { x: 285.026929982047, y: 3.64705882352941, size: 1 },\r\n // { x: 285.673249551167, y: 3.76470588235294, size: 1 },\r\n // { x: 286.319569120287, y: 3.37254901960784, size: 1 },\r\n // { x: 286.965888689408, y: 3.6078431372549, size: 1 },\r\n // { x: 287.612208258528, y: 3.13725490196078, size: 1 },\r\n // { x: 288.258527827648, y: 3.33333333333333, size: 1 },\r\n // { x: 288.904847396768, y: 3.33333333333333, size: 1 },\r\n // { x: 289.551166965889, y: 3.49019607843137, size: 1 },\r\n // { x: 290.197486535009, y: 3.45098039215686, size: 1 },\r\n // { x: 290.843806104129, y: 3.6078431372549, size: 1 },\r\n // { x: 291.49012567325, y: 3.49019607843137, size: 1 },\r\n // { x: 292.13644524237, y: 3.72549019607843, size: 1 },\r\n // { x: 292.78276481149, y: 3.6078431372549, size: 1 },\r\n // { x: 293.42908438061, y: 3.56862745098039, size: 1 },\r\n // { x: 294.075403949731, y: 3.76470588235294, size: 1 },\r\n // { x: 294.721723518851, y: 3.52941176470588, size: 1 },\r\n // { x: 295.368043087971, y: 3.6078431372549, size: 1 },\r\n // { x: 296.014362657092, y: 3.45098039215686, size: 1 },\r\n // { x: 296.660682226212, y: 3.92156862745098, size: 1 },\r\n // { x: 297.307001795332, y: 3.56862745098039, size: 1 },\r\n // { x: 297.953321364452, y: 3.6078431372549, size: 1 },\r\n // { x: 298.599640933573, y: 3.92156862745098, size: 1 },\r\n // { x: 299.245960502693, y: 3.76470588235294, size: 1 },\r\n // { x: 299.892280071813, y: 3.68627450980392, size: 1 },\r\n // { x: 300.538599640934, y: 3.68627450980392, size: 1 },\r\n // { x: 301.184919210054, y: 3.64705882352941, size: 1 },\r\n // { x: 301.831238779174, y: 3.68627450980392, size: 1 },\r\n // { x: 302.477558348294, y: 3.72549019607843, size: 1 },\r\n // { x: 303.123877917415, y: 3.6078431372549, size: 1 },\r\n // { x: 303.770197486535, y: 3.45098039215686, size: 1 },\r\n // { x: 304.416517055655, y: 3.37254901960784, size: 1 },\r\n // { x: 305.062836624776, y: 3.52941176470588, size: 1 },\r\n // { x: 305.709156193896, y: 3.76470588235294, size: 1 },\r\n // { x: 306.355475763016, y: 3.64705882352941, size: 1 },\r\n // { x: 307.001795332136, y: 3.52941176470588, size: 1 },\r\n // { x: 307.648114901257, y: 3.37254901960784, size: 1 },\r\n // { x: 308.294434470377, y: 3.29411764705882, size: 1 },\r\n // { x: 308.940754039497, y: 2.90196078431373, size: 1 },\r\n // { x: 309.587073608618, y: 3.25490196078431, size: 1 },\r\n // { x: 310.233393177738, y: 2.7843137254902, size: 1 },\r\n // { x: 310.879712746858, y: 2.86274509803922, size: 1 },\r\n // { x: 311.526032315978, y: 3.56862745098039, size: 1 },\r\n // { x: 312.172351885099, y: 3.6078431372549, size: 1 },\r\n // { x: 312.818671454219, y: 3.64705882352941, size: 1 },\r\n // { x: 313.464991023339, y: 3.88235294117647, size: 1 },\r\n // { x: 314.11131059246, y: 3.68627450980392, size: 1 },\r\n // { x: 314.75763016158, y: 3.72549019607843, size: 1 },\r\n // { x: 315.4039497307, y: 3.88235294117647, size: 1 },\r\n // { x: 316.05026929982, y: 3.49019607843137, size: 1 },\r\n // { x: 316.696588868941, y: 3.64705882352941, size: 1 },\r\n // { x: 317.342908438061, y: 3.76470588235294, size: 1 },\r\n // { x: 317.989228007181, y: 3.80392156862745, size: 1 },\r\n // { x: 318.635547576302, y: 3.6078431372549, size: 1 },\r\n // { x: 319.281867145422, y: 3.72549019607843, size: 1 },\r\n // { x: 319.928186714542, y: 3.72549019607843, size: 1 },\r\n // { x: 320.574506283662, y: 3.80392156862745, size: 1 },\r\n // { x: 321.220825852783, y: 3.56862745098039, size: 1 },\r\n // { x: 321.867145421903, y: 3.6078431372549, size: 1 },\r\n // { x: 322.513464991023, y: 3.72549019607843, size: 1 },\r\n // { x: 323.159784560144, y: 3.6078431372549, size: 1 },\r\n // { x: 323.806104129264, y: 3.52941176470588, size: 1 },\r\n // { x: 324.452423698384, y: 3.68627450980392, size: 1 },\r\n // { x: 325.098743267504, y: 3.72549019607843, size: 1 },\r\n // { x: 325.745062836625, y: 3.68627450980392, size: 1 },\r\n // { x: 326.391382405745, y: 3.72549019607843, size: 1 },\r\n // { x: 327.037701974865, y: 3.6078431372549, size: 1 },\r\n // { x: 327.684021543986, y: 3.76470588235294, size: 1 },\r\n // { x: 328.330341113106, y: 3.6078431372549, size: 1 },\r\n // { x: 328.976660682226, y: 3.68627450980392, size: 1 },\r\n // { x: 329.622980251347, y: 3.41176470588235, size: 1 },\r\n // { x: 330.269299820467, y: 3.2156862745098, size: 1 },\r\n // { x: 330.915619389587, y: 3.33333333333333, size: 1 },\r\n // { x: 331.561938958707, y: 3.52941176470588, size: 1 },\r\n // { x: 332.208258527828, y: 3.64705882352941, size: 1 },\r\n // { x: 332.854578096948, y: 3.33333333333333, size: 1 },\r\n // { x: 333.500897666068, y: 3.37254901960784, size: 1 },\r\n // { x: 334.147217235189, y: 3.56862745098039, size: 1 },\r\n // { x: 334.793536804309, y: 3.45098039215686, size: 1 },\r\n // { x: 335.439856373429, y: 3.72549019607843, size: 1 },\r\n // { x: 336.086175942549, y: 3.56862745098039, size: 1 },\r\n // { x: 336.73249551167, y: 3.68627450980392, size: 1 },\r\n // { x: 337.37881508079, y: 3.52941176470588, size: 1 },\r\n // { x: 338.02513464991, y: 3.49019607843137, size: 1 },\r\n // { x: 338.671454219031, y: 3.68627450980392, size: 1 },\r\n // { x: 339.317773788151, y: 3.52941176470588, size: 1 },\r\n // { x: 339.964093357271, y: 3.76470588235294, size: 1 },\r\n // { x: 340.610412926391, y: 3.6078431372549, size: 1 },\r\n // { x: 341.256732495512, y: 3.64705882352941, size: 1 },\r\n // { x: 341.903052064632, y: 3.41176470588235, size: 1 },\r\n // { x: 342.549371633752, y: 3.45098039215686, size: 1 },\r\n // { x: 343.195691202873, y: 3.49019607843137, size: 1 },\r\n // { x: 343.842010771993, y: 3.45098039215686, size: 1 },\r\n // { x: 344.488330341113, y: 3.76470588235294, size: 1 },\r\n // { x: 345.134649910233, y: 3.45098039215686, size: 1 },\r\n // { x: 345.780969479354, y: 3.68627450980392, size: 1 },\r\n // { x: 346.427289048474, y: 3.52941176470588, size: 1 },\r\n // { x: 347.073608617594, y: 3.80392156862745, size: 1 },\r\n // { x: 347.719928186715, y: 3.45098039215686, size: 1 },\r\n // { x: 348.366247755835, y: 3.45098039215686, size: 1 },\r\n // { x: 349.012567324955, y: 3.64705882352941, size: 1 },\r\n // { x: 349.658886894075, y: 3.41176470588235, size: 1 },\r\n // { x: 350.305206463196, y: 3.37254901960784, size: 1 },\r\n // { x: 350.951526032316, y: 3.56862745098039, size: 1 },\r\n // { x: 351.597845601436, y: 3.45098039215686, size: 1 },\r\n // { x: 352.244165170557, y: 2.90196078431373, size: 1 },\r\n // { x: 352.890484739677, y: 3.64705882352941, size: 1 },\r\n // { x: 353.536804308797, y: 3.76470588235294, size: 1 },\r\n // { x: 354.183123877917, y: 3.72549019607843, size: 1 },\r\n // { x: 354.829443447038, y: 3.80392156862745, size: 1 },\r\n // { x: 355.475763016158, y: 3.52941176470588, size: 1 },\r\n // { x: 356.122082585278, y: 3.68627450980392, size: 1 },\r\n // { x: 356.768402154399, y: 3.52941176470588, size: 1 },\r\n // { x: 357.414721723519, y: 3.80392156862745, size: 1 },\r\n // { x: 358.061041292639, y: 3.6078431372549, size: 1 },\r\n // { x: 358.707360861759, y: 3.52941176470588, size: 1 },\r\n // { x: 359.35368043088, y: 3.84313725490196, size: 1 },\r\n // { x: 0.648648648648649, y: 3.68627450980392, size: 1 },\r\n // { x: 3.89189189189189, y: 3.49019607843137, size: 1 },\r\n // { x: 4.54054054054054, y: 3.80392156862745, size: 1 },\r\n // { x: 5.18918918918919, y: 3.76470588235294, size: 1 },\r\n // { x: 8.43243243243243, y: 3.76470588235294, size: 1 },\r\n // { x: 9.72972972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 11.6756756756757, y: 3.52941176470588, size: 1 },\r\n // { x: 13.6216216216216, y: 3.01960784313725, size: 1 },\r\n // { x: 14.2702702702703, y: 3.37254901960784, size: 1 },\r\n // { x: 16.2162162162162, y: 3.88235294117647, size: 1 },\r\n // { x: 16.8648648648649, y: 3.56862745098039, size: 1 },\r\n // { x: 17.5135135135135, y: 3.88235294117647, size: 1 },\r\n // { x: 18.1621621621622, y: 3.52941176470588, size: 1 },\r\n // { x: 20.1081081081081, y: 3.49019607843137, size: 1 },\r\n // { x: 24, y: 3.56862745098039, size: 1 },\r\n // { x: 24.6486486486486, y: 3.49019607843137, size: 1 },\r\n // { x: 25.2972972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 25.9459459459459, y: 3.72549019607843, size: 1 },\r\n // { x: 27.2432432432432, y: 3.92156862745098, size: 1 },\r\n // { x: 29.8378378378378, y: 3.72549019607843, size: 1 },\r\n // { x: 31.1351351351351, y: 3.41176470588235, size: 1 },\r\n // { x: 33.7297297297297, y: 3.41176470588235, size: 1 },\r\n // { x: 35.027027027027, y: 3.41176470588235, size: 1 },\r\n // { x: 36.972972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 37.6216216216216, y: 3.80392156862745, size: 1 },\r\n // { x: 38.2702702702703, y: 3.80392156862745, size: 1 },\r\n // { x: 41.5135135135135, y: 3.68627450980392, size: 1 },\r\n // { x: 42.1621621621622, y: 3.80392156862745, size: 1 },\r\n // { x: 42.8108108108108, y: 3.45098039215686, size: 1 },\r\n // { x: 46.0540540540541, y: 3.52941176470588, size: 1 },\r\n // { x: 46.7027027027027, y: 3.72549019607843, size: 1 },\r\n // { x: 47.3513513513514, y: 3.80392156862745, size: 1 },\r\n // { x: 48, y: 3.56862745098039, size: 1 },\r\n // { x: 48.6486486486486, y: 3.72549019607843, size: 1 },\r\n // { x: 49.2972972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 49.9459459459459, y: 3.64705882352941, size: 1 },\r\n // { x: 50.5945945945946, y: 3.72549019607843, size: 1 },\r\n // { x: 51.2432432432432, y: 3.92156862745098, size: 1 },\r\n // { x: 51.8918918918919, y: 3.68627450980392, size: 1 },\r\n // { x: 52.5405405405405, y: 3.56862745098039, size: 1 },\r\n // { x: 55.1351351351351, y: 3.6078431372549, size: 1 },\r\n // { x: 57.0810810810811, y: 3.01960784313725, size: 1 },\r\n // { x: 58.3783783783784, y: 3.41176470588235, size: 1 },\r\n // { x: 59.6756756756757, y: 3.33333333333333, size: 1 },\r\n // { x: 62.2702702702703, y: 3.56862745098039, size: 1 },\r\n // { x: 63.5675675675676, y: 3.6078431372549, size: 1 },\r\n // { x: 68.1081081081081, y: 3.37254901960784, size: 1 },\r\n // { x: 68.7567567567568, y: 3.41176470588235, size: 1 },\r\n // { x: 71.3513513513514, y: 3.52941176470588, size: 1 },\r\n // { x: 72.6486486486486, y: 3.76470588235294, size: 1 },\r\n // { x: 73.945945945946, y: 3.6078431372549, size: 1 },\r\n // { x: 74.5945945945946, y: 3.33333333333333, size: 1 },\r\n // { x: 77.1891891891892, y: 3.41176470588235, size: 1 },\r\n // { x: 77.8378378378378, y: 3.33333333333333, size: 1 },\r\n // { x: 78.4864864864865, y: 3.13725490196078, size: 1 },\r\n // { x: 79.1351351351351, y: 2.94117647058824, size: 1 },\r\n // { x: 82.3783783783784, y: 3.56862745098039, size: 1 },\r\n // { x: 83.027027027027, y: 3.64705882352941, size: 1 },\r\n // { x: 83.6756756756757, y: 3.45098039215686, size: 1 },\r\n // { x: 84.972972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 86.9189189189189, y: 3.68627450980392, size: 1 },\r\n // { x: 92.1081081081081, y: 3.52941176470588, size: 1 },\r\n // { x: 92.7567567567568, y: 3.41176470588235, size: 1 },\r\n // { x: 95.3513513513514, y: 3.68627450980392, size: 1 },\r\n // { x: 97.945945945946, y: 3.29411764705882, size: 1 },\r\n // { x: 98.5945945945946, y: 3.25490196078431, size: 1 },\r\n // { x: 99.2432432432432, y: 3.2156862745098, size: 1 },\r\n // { x: 99.8918918918919, y: 2.86274509803922, size: 1 },\r\n // { x: 100.540540540541, y: 2.62745098039216, size: 1 },\r\n // { x: 103.135135135135, y: 3.80392156862745, size: 1 },\r\n // { x: 104.432432432432, y: 3.84313725490196, size: 1 },\r\n // { x: 105.081081081081, y: 3.76470588235294, size: 1 },\r\n // { x: 106.378378378378, y: 3.84313725490196, size: 1 },\r\n // { x: 107.675675675676, y: 3.76470588235294, size: 1 },\r\n // { x: 108.324324324324, y: 3.6078431372549, size: 1 },\r\n // { x: 110.27027027027, y: 3.6078431372549, size: 1 },\r\n // { x: 111.567567567568, y: 3.64705882352941, size: 1 },\r\n // { x: 114.810810810811, y: 3.68627450980392, size: 1 },\r\n // { x: 116.108108108108, y: 3.80392156862745, size: 1 },\r\n // { x: 117.405405405405, y: 3.45098039215686, size: 1 },\r\n // { x: 118.054054054054, y: 3.45098039215686, size: 1 },\r\n // { x: 118.702702702703, y: 3.72549019607843, size: 1 },\r\n // { x: 122.594594594595, y: 3.49019607843137, size: 1 },\r\n // { x: 124.540540540541, y: 3.49019607843137, size: 1 },\r\n // { x: 125.189189189189, y: 3.88235294117647, size: 1 },\r\n // { x: 125.837837837838, y: 3.33333333333333, size: 1 },\r\n // { x: 127.783783783784, y: 3.52941176470588, size: 1 },\r\n // { x: 133.621621621622, y: 3.45098039215686, size: 1 },\r\n // { x: 134.27027027027, y: 3.64705882352941, size: 1 },\r\n // { x: 136.864864864865, y: 3.37254901960784, size: 1 },\r\n // { x: 137.513513513514, y: 3.52941176470588, size: 1 },\r\n // { x: 138.162162162162, y: 3.84313725490196, size: 1 },\r\n // { x: 140.108108108108, y: 3.52941176470588, size: 1 },\r\n // { x: 142.702702702703, y: 3.41176470588235, size: 1 },\r\n // { x: 143.351351351351, y: 3.52941176470588, size: 1 },\r\n // { x: 144, y: 3.29411764705882, size: 1 },\r\n // { x: 144.648648648649, y: 3.88235294117647, size: 1 },\r\n // { x: 145.945945945946, y: 3.45098039215686, size: 1 },\r\n // { x: 149.189189189189, y: 3.45098039215686, size: 1 },\r\n // { x: 150.486486486486, y: 3.68627450980392, size: 1 },\r\n // { x: 151.135135135135, y: 3.84313725490196, size: 1 },\r\n // { x: 153.72972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 156.324324324324, y: 3.64705882352941, size: 1 },\r\n // { x: 156.972972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 158.27027027027, y: 3.49019607843137, size: 1 },\r\n // { x: 158.918918918919, y: 3.56862745098039, size: 1 },\r\n // { x: 160.864864864865, y: 3.6078431372549, size: 1 },\r\n // { x: 163.459459459459, y: 3.68627450980392, size: 1 },\r\n // { x: 164.108108108108, y: 3.72549019607843, size: 1 },\r\n // { x: 166.702702702703, y: 3.37254901960784, size: 1 },\r\n // { x: 167.351351351351, y: 3.49019607843137, size: 1 },\r\n // { x: 168, y: 3.45098039215686, size: 1 },\r\n // { x: 168.648648648649, y: 3.41176470588235, size: 1 },\r\n // { x: 169.945945945946, y: 3.33333333333333, size: 1 },\r\n // { x: 170.594594594595, y: 3.45098039215686, size: 1 },\r\n // { x: 172.540540540541, y: 3.45098039215686, size: 1 },\r\n // { x: 173.189189189189, y: 3.33333333333333, size: 1 },\r\n // { x: 173.837837837838, y: 3.37254901960784, size: 1 },\r\n // { x: 175.135135135135, y: 3.33333333333333, size: 1 },\r\n // { x: 177.081081081081, y: 3.41176470588235, size: 1 },\r\n // { x: 177.72972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 178.378378378378, y: 3.33333333333333, size: 1 },\r\n // { x: 179.027027027027, y: 3.17647058823529, size: 1 },\r\n // { x: 181.621621621622, y: 3.09803921568627, size: 1 },\r\n // { x: 182.27027027027, y: 3.33333333333333, size: 1 },\r\n // { x: 183.567567567568, y: 3.29411764705882, size: 1 },\r\n // { x: 184.216216216216, y: 3.37254901960784, size: 1 },\r\n // { x: 184.864864864865, y: 3.37254901960784, size: 1 },\r\n // { x: 185.513513513514, y: 3.56862745098039, size: 1 },\r\n // { x: 186.162162162162, y: 3.33333333333333, size: 1 },\r\n // { x: 186.810810810811, y: 3.13725490196078, size: 1 },\r\n // { x: 188.108108108108, y: 3.56862745098039, size: 1 },\r\n // { x: 190.054054054054, y: 3.88235294117647, size: 1 },\r\n // { x: 195.891891891892, y: 3.84313725490196, size: 1 },\r\n // { x: 198.486486486486, y: 3.76470588235294, size: 1 },\r\n // { x: 201.72972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 202.378378378378, y: 3.76470588235294, size: 1 },\r\n // { x: 203.675675675676, y: 3.68627450980392, size: 1 },\r\n // { x: 204.972972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 206.918918918919, y: 3.2156862745098, size: 1 },\r\n // { x: 207.567567567568, y: 3.09803921568627, size: 1 },\r\n // { x: 208.216216216216, y: 2.94117647058824, size: 1 },\r\n // { x: 208.864864864865, y: 2.86274509803922, size: 1 },\r\n // { x: 214.702702702703, y: 3.52941176470588, size: 1 },\r\n // { x: 215.351351351351, y: 3.52941176470588, size: 1 },\r\n // { x: 216.648648648649, y: 3.68627450980392, size: 1 },\r\n // { x: 218.594594594595, y: 3.68627450980392, size: 1 },\r\n // { x: 219.243243243243, y: 3.92156862745098, size: 1 },\r\n // { x: 219.891891891892, y: 3.88235294117647, size: 1 },\r\n // { x: 220.540540540541, y: 3.72549019607843, size: 1 },\r\n // { x: 221.189189189189, y: 3.64705882352941, size: 1 },\r\n // { x: 223.135135135135, y: 3.68627450980392, size: 1 },\r\n // { x: 223.783783783784, y: 3.64705882352941, size: 1 },\r\n // { x: 227.027027027027, y: 3.76470588235294, size: 1 },\r\n // { x: 227.675675675676, y: 3.49019607843137, size: 1 },\r\n // { x: 228.324324324324, y: 3.17647058823529, size: 1 },\r\n // { x: 228.972972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 229.621621621622, y: 2, size: 1 },\r\n // { x: 230.27027027027, y: 2, size: 1 },\r\n // { x: 230.918918918919, y: 3.37254901960784, size: 1 },\r\n // { x: 233.513513513514, y: 3.88235294117647, size: 1 },\r\n // { x: 235.459459459459, y: 3.64705882352941, size: 1 },\r\n // { x: 236.108108108108, y: 3.68627450980392, size: 1 },\r\n // { x: 238.702702702703, y: 3.72549019607843, size: 1 },\r\n // { x: 240, y: 3.56862745098039, size: 1 },\r\n // { x: 240.648648648649, y: 3.76470588235294, size: 1 },\r\n // { x: 241.297297297297, y: 3.80392156862745, size: 1 },\r\n // { x: 244.540540540541, y: 3.64705882352941, size: 1 },\r\n // { x: 245.837837837838, y: 3.72549019607843, size: 1 },\r\n // { x: 247.783783783784, y: 3.76470588235294, size: 1 },\r\n // { x: 248.432432432432, y: 3.56862745098039, size: 1 },\r\n // { x: 251.027027027027, y: 3.25490196078431, size: 1 },\r\n // { x: 251.675675675676, y: 3.05882352941176, size: 1 },\r\n // { x: 252.324324324324, y: 3.6078431372549, size: 1 },\r\n // { x: 254.918918918919, y: 3.68627450980392, size: 1 },\r\n // { x: 255.567567567568, y: 3.72549019607843, size: 1 },\r\n // { x: 258.162162162162, y: 3.80392156862745, size: 1 },\r\n // { x: 258.810810810811, y: 3.56862745098039, size: 1 },\r\n // { x: 260.108108108108, y: 3.49019607843137, size: 1 },\r\n // { x: 262.054054054054, y: 3.68627450980392, size: 1 },\r\n // { x: 262.702702702703, y: 3.52941176470588, size: 1 },\r\n // { x: 264, y: 3.45098039215686, size: 1 },\r\n // { x: 264.648648648649, y: 3.84313725490196, size: 1 },\r\n // { x: 265.297297297297, y: 3.68627450980392, size: 1 },\r\n // { x: 265.945945945946, y: 3.72549019607843, size: 1 },\r\n // { x: 269.189189189189, y: 3.64705882352941, size: 1 },\r\n // { x: 271.135135135135, y: 3.45098039215686, size: 1 },\r\n // { x: 272.432432432432, y: 3.29411764705882, size: 1 },\r\n // { x: 273.081081081081, y: 2.82352941176471, size: 1 },\r\n // { x: 273.72972972973, y: 2.98039215686275, size: 1 },\r\n // { x: 275.675675675676, y: 3.64705882352941, size: 1 },\r\n // { x: 278.27027027027, y: 3.64705882352941, size: 1 },\r\n // { x: 281.513513513513, y: 3.72549019607843, size: 1 },\r\n // { x: 282.162162162162, y: 3.76470588235294, size: 1 },\r\n // { x: 284.756756756757, y: 3.49019607843137, size: 1 },\r\n // { x: 287.351351351351, y: 3.68627450980392, size: 1 },\r\n // { x: 288, y: 3.64705882352941, size: 1 },\r\n // { x: 291.891891891892, y: 3.52941176470588, size: 1 },\r\n // { x: 292.540540540541, y: 3.6078431372549, size: 1 },\r\n // { x: 293.189189189189, y: 3.37254901960784, size: 1 },\r\n // { x: 294.486486486487, y: 2.62745098039216, size: 1 },\r\n // { x: 295.135135135135, y: 2.82352941176471, size: 1 },\r\n // { x: 295.783783783784, y: 3.37254901960784, size: 1 },\r\n // { x: 296.432432432432, y: 3.64705882352941, size: 1 },\r\n // { x: 297.72972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 298.378378378378, y: 3.37254901960784, size: 1 },\r\n // { x: 302.27027027027, y: 3.80392156862745, size: 1 },\r\n // { x: 306.810810810811, y: 3.6078431372549, size: 1 },\r\n // { x: 307.459459459459, y: 3.64705882352941, size: 1 },\r\n // { x: 309.405405405405, y: 3.64705882352941, size: 1 },\r\n // { x: 310.054054054054, y: 3.80392156862745, size: 1 },\r\n // { x: 311.351351351351, y: 3.6078431372549, size: 1 },\r\n // { x: 312, y: 3.56862745098039, size: 1 },\r\n // { x: 313.297297297297, y: 3.76470588235294, size: 1 },\r\n // { x: 314.594594594595, y: 3.13725490196078, size: 1 },\r\n // { x: 315.891891891892, y: 2.98039215686275, size: 1 },\r\n // { x: 316.540540540541, y: 3.17647058823529, size: 1 },\r\n // { x: 317.189189189189, y: 3.33333333333333, size: 1 },\r\n // { x: 317.837837837838, y: 3.76470588235294, size: 1 },\r\n // { x: 318.486486486487, y: 3.6078431372549, size: 1 },\r\n // { x: 319.783783783784, y: 3.45098039215686, size: 1 },\r\n // { x: 320.432432432432, y: 3.68627450980392, size: 1 },\r\n // { x: 321.081081081081, y: 3.45098039215686, size: 1 },\r\n // { x: 324.324324324324, y: 3.96078431372549, size: 1 },\r\n // { x: 324.972972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 326.27027027027, y: 3.56862745098039, size: 1 },\r\n // { x: 328.864864864865, y: 3.72549019607843, size: 1 },\r\n // { x: 330.162162162162, y: 3.84313725490196, size: 1 },\r\n // { x: 330.810810810811, y: 3.6078431372549, size: 1 },\r\n // { x: 332.108108108108, y: 3.6078431372549, size: 1 },\r\n // { x: 332.756756756757, y: 3.56862745098039, size: 1 },\r\n // { x: 335.351351351351, y: 3.49019607843137, size: 1 },\r\n // { x: 336, y: 3.33333333333333, size: 1 },\r\n // { x: 336.648648648649, y: 3.17647058823529, size: 1 },\r\n // { x: 337.297297297297, y: 2.94117647058824, size: 1 },\r\n // { x: 337.945945945946, y: 1.68627450980392, size: 1 },\r\n // { x: 338.594594594595, y: 1.41176470588235, size: 1 },\r\n // { x: 340.540540540541, y: 3.76470588235294, size: 1 },\r\n // { x: 341.189189189189, y: 3.68627450980392, size: 1 },\r\n // { x: 343.783783783784, y: 3.6078431372549, size: 1 },\r\n // { x: 344.432432432432, y: 3.76470588235294, size: 1 },\r\n // { x: 347.675675675676, y: 3.84313725490196, size: 1 },\r\n // { x: 348.324324324324, y: 3.84313725490196, size: 1 },\r\n // { x: 348.972972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 349.621621621622, y: 3.68627450980392, size: 1 },\r\n // { x: 350.27027027027, y: 3.88235294117647, size: 1 },\r\n // { x: 351.567567567568, y: 3.76470588235294, size: 1 },\r\n // { x: 354.162162162162, y: 3.68627450980392, size: 1 },\r\n // { x: 354.810810810811, y: 3.52941176470588, size: 1 },\r\n // { x: 355.459459459459, y: 3.76470588235294, size: 1 },\r\n // { x: 358.054054054054, y: 3.56862745098039, size: 1 },\r\n // { x: 358.702702702703, y: 3.09803921568627, size: 1 },\r\n // { x: 7.12230215827338, y: 3.37254901960784, size: 1 },\r\n // { x: 7.76978417266187, y: 3.37254901960784, size: 1 },\r\n // { x: 13.5971223021583, y: 3.52941176470588, size: 1 },\r\n // { x: 17.4820143884892, y: 3.45098039215686, size: 1 },\r\n // { x: 19.4244604316547, y: 3.13725490196078, size: 1 },\r\n // { x: 20.0719424460432, y: 2.94117647058824, size: 1 },\r\n // { x: 40.7913669064748, y: 3.41176470588235, size: 1 },\r\n // { x: 41.4388489208633, y: 3.33333333333333, size: 1 },\r\n // { x: 47.2661870503597, y: 3.80392156862745, size: 1 },\r\n // { x: 49.8561151079137, y: 3.33333333333333, size: 1 },\r\n // { x: 55.0359712230216, y: 3.33333333333333, size: 1 },\r\n // { x: 60.2158273381295, y: 3.33333333333333, size: 1 },\r\n // { x: 63.4532374100719, y: 3.2156862745098, size: 1 },\r\n // { x: 68.6330935251799, y: 3.64705882352941, size: 1 },\r\n // { x: 78.3453237410072, y: 3.92156862745098, size: 1 },\r\n // { x: 97.1223021582734, y: 3.76470588235294, size: 1 },\r\n // { x: 108.776978417266, y: 3.56862745098039, size: 1 },\r\n // { x: 109.424460431655, y: 3.72549019607843, size: 1 },\r\n // { x: 112.661870503597, y: 3.49019607843137, size: 1 },\r\n // { x: 121.079136690647, y: 3.37254901960784, size: 1 },\r\n // { x: 121.726618705036, y: 3.49019607843137, size: 1 },\r\n // { x: 124.31654676259, y: 3.76470588235294, size: 1 },\r\n // { x: 139.208633093525, y: 3.88235294117647, size: 1 },\r\n // { x: 141.798561151079, y: 3.72549019607843, size: 1 },\r\n // { x: 147.625899280576, y: 3.72549019607843, size: 1 },\r\n // { x: 148.273381294964, y: 3.45098039215686, size: 1 },\r\n // { x: 149.568345323741, y: 3.37254901960784, size: 1 },\r\n // { x: 150.863309352518, y: 3.88235294117647, size: 1 },\r\n // { x: 158.63309352518, y: 3.41176470588235, size: 1 },\r\n // { x: 160.575539568345, y: 3.92156862745098, size: 1 },\r\n // { x: 163.812949640288, y: 3.52941176470588, size: 1 },\r\n // { x: 168.992805755396, y: 3.52941176470588, size: 1 },\r\n // { x: 169.640287769784, y: 3.45098039215686, size: 1 },\r\n // { x: 185.827338129496, y: 3.41176470588235, size: 1 },\r\n // { x: 187.122302158273, y: 3.88235294117647, size: 1 },\r\n // { x: 198.129496402878, y: 3.56862745098039, size: 1 },\r\n // { x: 200.719424460432, y: 3.6078431372549, size: 1 },\r\n // { x: 203.956834532374, y: 3.88235294117647, size: 1 },\r\n // { x: 205.251798561151, y: 3.52941176470588, size: 1 },\r\n // { x: 207.194244604317, y: 3.76470588235294, size: 1 },\r\n // { x: 209.784172661871, y: 3.45098039215686, size: 1 },\r\n // { x: 212.374100719424, y: 3.68627450980392, size: 1 },\r\n // { x: 216.906474820144, y: 3.41176470588235, size: 1 },\r\n // { x: 225.971223021583, y: 3.92156862745098, size: 1 },\r\n // { x: 235.035971223022, y: 3.41176470588235, size: 1 },\r\n // { x: 236.978417266187, y: 3.2156862745098, size: 1 },\r\n // { x: 238.273381294964, y: 3.52941176470588, size: 1 },\r\n // { x: 246.043165467626, y: 4, size: 1 },\r\n // { x: 247.985611510791, y: 3.64705882352941, size: 1 },\r\n // { x: 258.345323741007, y: 3.17647058823529, size: 1 },\r\n // { x: 264.172661870504, y: 3.33333333333333, size: 1 },\r\n // { x: 264.820143884892, y: 3.33333333333333, size: 1 },\r\n // { x: 269.352517985611, y: 3.37254901960784, size: 1 },\r\n // { x: 275.179856115108, y: 3.37254901960784, size: 1 },\r\n // { x: 279.064748201439, y: 3.37254901960784, size: 1 },\r\n // { x: 279.712230215827, y: 3.56862745098039, size: 1 },\r\n // { x: 280.359712230216, y: 3.09803921568627, size: 1 },\r\n // { x: 288.129496402878, y: 3.68627450980392, size: 1 },\r\n // { x: 293.956834532374, y: 3.88235294117647, size: 1 },\r\n // { x: 295.89928057554, y: 3.84313725490196, size: 1 },\r\n // { x: 296.546762589928, y: 3.52941176470588, size: 1 },\r\n // { x: 298.489208633094, y: 3.68627450980392, size: 1 },\r\n // { x: 299.784172661871, y: 3.45098039215686, size: 1 },\r\n // { x: 301.726618705036, y: 3.13725490196078, size: 1 },\r\n // { x: 303.669064748201, y: 3.25490196078431, size: 1 },\r\n // { x: 304.964028776978, y: 3.41176470588235, size: 1 },\r\n // { x: 308.848920863309, y: 3.25490196078431, size: 1 },\r\n // { x: 309.496402877698, y: 3.49019607843137, size: 1 },\r\n // { x: 310.143884892086, y: 3.6078431372549, size: 1 },\r\n // { x: 310.791366906475, y: 3.6078431372549, size: 1 },\r\n // { x: 312.086330935252, y: 3.41176470588235, size: 1 },\r\n // { x: 313.381294964029, y: 3.33333333333333, size: 1 },\r\n // { x: 315.971223021583, y: 3.33333333333333, size: 1 },\r\n // { x: 318.561151079137, y: 3.37254901960784, size: 1 },\r\n // { x: 319.208633093525, y: 3.25490196078431, size: 1 },\r\n // { x: 319.856115107914, y: 3.29411764705882, size: 1 },\r\n // { x: 325.68345323741, y: 3.92156862745098, size: 1 },\r\n // { x: 330.215827338129, y: 3.84313725490196, size: 1 },\r\n // { x: 332.805755395683, y: 3.88235294117647, size: 1 },\r\n // { x: 339.928057553957, y: 3.49019607843137, size: 1 },\r\n // { x: 351.58273381295, y: 3.88235294117647, size: 1 },\r\n // { x: 353.525179856115, y: 3.92156862745098, size: 1 },\r\n // { x: 354.172661870504, y: 3.88235294117647, size: 1 },\r\n // { x: 354.820143884892, y: 3.49019607843137, size: 1 },\r\n // { x: 357.410071942446, y: 3.76470588235294, size: 1 },\r\n // { x: 358.057553956835, y: 4, size: 1 },\r\n // { x: 2.58992805755396, y: 3.80392156862745, size: 1 },\r\n // { x: 7.12230215827338, y: 3.17647058823529, size: 1 },\r\n // { x: 9.71223021582734, y: 3.84313725490196, size: 1 },\r\n // { x: 11.0071942446043, y: 3.96078431372549, size: 1 },\r\n // { x: 17.4820143884892, y: 3.88235294117647, size: 1 },\r\n // { x: 25.8992805755396, y: 3.56862745098039, size: 1 },\r\n // { x: 26.5467625899281, y: 3.29411764705882, size: 1 },\r\n // { x: 27.841726618705, y: 2.94117647058824, size: 1 },\r\n // { x: 28.4892086330935, y: 3.17647058823529, size: 1 },\r\n // { x: 30.431654676259, y: 3.76470588235294, size: 1 },\r\n // { x: 33.6690647482014, y: 3.80392156862745, size: 1 },\r\n // { x: 36.9064748201439, y: 3.88235294117647, size: 1 },\r\n // { x: 42.0863309352518, y: 3.84313725490196, size: 1 },\r\n // { x: 45.9712230215827, y: 3.56862745098039, size: 1 },\r\n // { x: 58.273381294964, y: 3.6078431372549, size: 1 },\r\n // { x: 60.863309352518, y: 3.64705882352941, size: 1 },\r\n // { x: 62.8057553956835, y: 3.92156862745098, size: 1 },\r\n // { x: 63.4532374100719, y: 3.88235294117647, size: 1 },\r\n // { x: 69.2805755395683, y: 3.84313725490196, size: 1 },\r\n // { x: 71.8705035971223, y: 3.37254901960784, size: 1 },\r\n // { x: 78.9928057553957, y: 3.52941176470588, size: 1 },\r\n // { x: 89.3525179856115, y: 3.49019607843137, size: 1 },\r\n // { x: 92.589928057554, y: 3.45098039215686, size: 1 },\r\n // { x: 93.2374100719424, y: 3.33333333333333, size: 1 },\r\n // { x: 103.597122302158, y: 3.37254901960784, size: 1 },\r\n // { x: 104.244604316547, y: 3.76470588235294, size: 1 },\r\n // { x: 113.956834532374, y: 3.56862745098039, size: 1 },\r\n // { x: 114.604316546763, y: 3.33333333333333, size: 1 },\r\n // { x: 115.251798561151, y: 3.33333333333333, size: 1 },\r\n // { x: 121.079136690647, y: 3.84313725490196, size: 1 },\r\n // { x: 127.553956834532, y: 3.41176470588235, size: 1 },\r\n // { x: 130.143884892086, y: 3.45098039215686, size: 1 },\r\n // { x: 133.381294964029, y: 3.64705882352941, size: 1 },\r\n // { x: 135.971223021583, y: 3.2156862745098, size: 1 },\r\n // { x: 136.618705035971, y: 3.33333333333333, size: 1 },\r\n // { x: 142.446043165468, y: 3.25490196078431, size: 1 },\r\n // { x: 145.035971223022, y: 3.64705882352941, size: 1 },\r\n // { x: 150.215827338129, y: 3.33333333333333, size: 1 },\r\n // { x: 154.10071942446, y: 3.41176470588235, size: 1 },\r\n // { x: 154.748201438849, y: 3.29411764705882, size: 1 },\r\n // { x: 156.043165467626, y: 3.80392156862745, size: 1 },\r\n // { x: 157.338129496403, y: 3.33333333333333, size: 1 },\r\n // { x: 158.63309352518, y: 3.29411764705882, size: 1 },\r\n // { x: 159.280575539568, y: 3.52941176470588, size: 1 },\r\n // { x: 160.575539568345, y: 3.29411764705882, size: 1 },\r\n // { x: 161.223021582734, y: 3.29411764705882, size: 1 },\r\n // { x: 164.460431654676, y: 3.29411764705882, size: 1 },\r\n // { x: 168.345323741007, y: 3.29411764705882, size: 1 },\r\n // { x: 170.287769784173, y: 3.41176470588235, size: 1 },\r\n // { x: 172.877697841727, y: 3.41176470588235, size: 1 },\r\n // { x: 174.172661870504, y: 3.37254901960784, size: 1 },\r\n // { x: 175.467625899281, y: 3.17647058823529, size: 1 },\r\n // { x: 176.115107913669, y: 3.37254901960784, size: 1 },\r\n // { x: 180.647482014388, y: 3.96078431372549, size: 1 },\r\n // { x: 183.237410071942, y: 3.88235294117647, size: 1 },\r\n // { x: 187.122302158273, y: 3.56862745098039, size: 1 },\r\n // { x: 193.597122302158, y: 3.72549019607843, size: 1 },\r\n // { x: 195.539568345324, y: 3.96078431372549, size: 1 },\r\n // { x: 200.719424460432, y: 3.13725490196078, size: 1 },\r\n // { x: 202.661870503597, y: 3.09803921568627, size: 1 },\r\n // { x: 203.309352517986, y: 3.2156862745098, size: 1 },\r\n // { x: 203.956834532374, y: 3.37254901960784, size: 1 },\r\n // { x: 206.546762589928, y: 3.05882352941176, size: 1 },\r\n // { x: 207.194244604317, y: 3.29411764705882, size: 1 },\r\n // { x: 207.841726618705, y: 3.09803921568627, size: 1 },\r\n // { x: 208.489208633094, y: 3.13725490196078, size: 1 },\r\n // { x: 211.726618705036, y: 3.01960784313725, size: 1 },\r\n // { x: 212.374100719424, y: 3.17647058823529, size: 1 },\r\n // { x: 213.669064748201, y: 3.17647058823529, size: 1 },\r\n // { x: 214.31654676259, y: 3.05882352941176, size: 1 },\r\n // { x: 216.258992805755, y: 3.2156862745098, size: 1 },\r\n // { x: 217.553956834532, y: 3.6078431372549, size: 1 },\r\n // { x: 218.201438848921, y: 3.13725490196078, size: 1 },\r\n // { x: 222.086330935252, y: 3.41176470588235, size: 1 },\r\n // { x: 223.381294964029, y: 3.37254901960784, size: 1 },\r\n // { x: 225.323741007194, y: 3.2156862745098, size: 1 },\r\n // { x: 227.913669064748, y: 3.25490196078431, size: 1 },\r\n // { x: 229.208633093525, y: 3.25490196078431, size: 1 },\r\n // { x: 229.856115107914, y: 3.29411764705882, size: 1 },\r\n // { x: 230.503597122302, y: 3.2156862745098, size: 1 },\r\n // { x: 234.388489208633, y: 3.17647058823529, size: 1 },\r\n // { x: 237.625899280576, y: 3.33333333333333, size: 1 },\r\n // { x: 238.920863309353, y: 3.29411764705882, size: 1 },\r\n // { x: 240.863309352518, y: 3.2156862745098, size: 1 },\r\n // { x: 241.510791366906, y: 3.17647058823529, size: 1 },\r\n // { x: 243.453237410072, y: 3.37254901960784, size: 1 },\r\n // { x: 244.10071942446, y: 3.37254901960784, size: 1 },\r\n // { x: 244.748201438849, y: 3.17647058823529, size: 1 },\r\n // { x: 247.985611510791, y: 3.49019607843137, size: 1 },\r\n // { x: 252.517985611511, y: 3.37254901960784, size: 1 },\r\n // { x: 253.165467625899, y: 3.49019607843137, size: 1 },\r\n // { x: 255.755395683453, y: 3.45098039215686, size: 1 },\r\n // { x: 258.992805755396, y: 3.33333333333333, size: 1 },\r\n // { x: 263.525179856115, y: 3.41176470588235, size: 1 },\r\n // { x: 266.115107913669, y: 3.17647058823529, size: 1 },\r\n // { x: 268.705035971223, y: 3.76470588235294, size: 1 },\r\n // { x: 275.179856115108, y: 3.45098039215686, size: 1 },\r\n // { x: 277.122302158273, y: 3.45098039215686, size: 1 },\r\n // { x: 286.834532374101, y: 3.2156862745098, size: 1 },\r\n // { x: 287.482014388489, y: 3.33333333333333, size: 1 },\r\n // { x: 293.309352517986, y: 3.37254901960784, size: 1 },\r\n // { x: 301.726618705036, y: 3.49019607843137, size: 1 },\r\n // { x: 324.388489208633, y: 3.56862745098039, size: 1 },\r\n // { x: 327.625899280576, y: 3.64705882352941, size: 1 },\r\n // { x: 328.273381294964, y: 3.37254901960784, size: 1 },\r\n // { x: 330.863309352518, y: 3.33333333333333, size: 1 },\r\n // { x: 343.812949640288, y: 3.37254901960784, size: 1 },\r\n // { x: 346.402877697842, y: 3.49019607843137, size: 1 },\r\n // { x: 347.05035971223, y: 3.6078431372549, size: 1 },\r\n // { x: 347.697841726619, y: 3.88235294117647, size: 1 },\r\n // { x: 350.287769784173, y: 3.2156862745098, size: 1 },\r\n // { x: 351.58273381295, y: 3.05882352941176, size: 1 },\r\n // { x: 352.230215827338, y: 3.37254901960784, size: 1 },\r\n // { x: 358.705035971223, y: 3.37254901960784, size: 1 },\r\n // { x: 359.352517985611, y: 3.80392156862745, size: 1 },\r\n // { x: 3.23741007194245, y: 3.80392156862745, size: 1 },\r\n // { x: 4.53237410071942, y: 3.72549019607843, size: 1 },\r\n // { x: 12.9496402877698, y: 3.17647058823529, size: 1 },\r\n // { x: 15.5395683453237, y: 3.96078431372549, size: 1 },\r\n // { x: 23.3093525179856, y: 4.15686274509804, size: 1 },\r\n // { x: 33.0215827338129, y: 3.41176470588235, size: 1 },\r\n // { x: 38.2014388489209, y: 3.80392156862745, size: 1 },\r\n // { x: 42.7338129496403, y: 3.84313725490196, size: 1 },\r\n // { x: 45.3237410071942, y: 4, size: 1 },\r\n // { x: 45.9712230215827, y: 3.84313725490196, size: 1 },\r\n // { x: 51.1510791366906, y: 3.88235294117647, size: 1 },\r\n // { x: 52.4460431654676, y: 4.07843137254902, size: 1 },\r\n // { x: 58.273381294964, y: 3.41176470588235, size: 1 },\r\n // { x: 65.3956834532374, y: 3.33333333333333, size: 1 },\r\n // { x: 75.1079136690647, y: 3.56862745098039, size: 1 },\r\n // { x: 78.3453237410072, y: 3.29411764705882, size: 1 },\r\n // { x: 99.0647482014388, y: 3.05882352941176, size: 1 },\r\n // { x: 99.7122302158273, y: 2.90196078431373, size: 1 },\r\n // { x: 100.359712230216, y: 2.62745098039216, size: 1 },\r\n // { x: 104.244604316547, y: 3.92156862745098, size: 1 },\r\n // { x: 123.669064748201, y: 3.09803921568627, size: 1 },\r\n // { x: 124.31654676259, y: 3.37254901960784, size: 1 },\r\n // { x: 124.964028776978, y: 3.33333333333333, size: 1 },\r\n // { x: 127.553956834532, y: 3.13725490196078, size: 1 },\r\n // { x: 129.496402877698, y: 3.17647058823529, size: 1 },\r\n // { x: 130.143884892086, y: 3.33333333333333, size: 1 },\r\n // { x: 132.086330935252, y: 3.17647058823529, size: 1 },\r\n // { x: 132.73381294964, y: 3.17647058823529, size: 1 },\r\n // { x: 134.676258992806, y: 3.13725490196078, size: 1 },\r\n // { x: 135.323741007194, y: 3.29411764705882, size: 1 },\r\n // { x: 135.971223021583, y: 3.01960784313725, size: 1 },\r\n // { x: 139.856115107914, y: 3.25490196078431, size: 1 },\r\n // { x: 141.798561151079, y: 3.96078431372549, size: 1 },\r\n // { x: 145.035971223022, y: 3.2156862745098, size: 1 },\r\n // { x: 145.68345323741, y: 3.25490196078431, size: 1 },\r\n // { x: 146.978417266187, y: 3.41176470588235, size: 1 },\r\n // { x: 149.568345323741, y: 3.33333333333333, size: 1 },\r\n // { x: 150.215827338129, y: 3.45098039215686, size: 1 },\r\n // { x: 150.863309352518, y: 3.29411764705882, size: 1 },\r\n // { x: 152.158273381295, y: 3.76470588235294, size: 1 },\r\n // { x: 152.805755395683, y: 3.37254901960784, size: 1 },\r\n // { x: 154.10071942446, y: 3.17647058823529, size: 1 },\r\n // { x: 154.748201438849, y: 3.41176470588235, size: 1 },\r\n // { x: 156.043165467626, y: 3.37254901960784, size: 1 },\r\n // { x: 156.690647482014, y: 3.25490196078431, size: 1 },\r\n // { x: 157.338129496403, y: 3.17647058823529, size: 1 },\r\n // { x: 159.280575539568, y: 3.29411764705882, size: 1 },\r\n // { x: 161.223021582734, y: 3.37254901960784, size: 1 },\r\n // { x: 163.812949640288, y: 3.29411764705882, size: 1 },\r\n // { x: 164.460431654676, y: 3.05882352941176, size: 1 },\r\n // { x: 165.107913669065, y: 3.17647058823529, size: 1 },\r\n // { x: 167.697841726619, y: 3.29411764705882, size: 1 },\r\n // { x: 170.287769784173, y: 3.84313725490196, size: 1 },\r\n // { x: 174.172661870504, y: 3.84313725490196, size: 1 },\r\n // { x: 178.705035971223, y: 3.72549019607843, size: 1 },\r\n // { x: 179.352517985612, y: 3.80392156862745, size: 1 },\r\n // { x: 180, y: 3.80392156862745, size: 1 },\r\n // { x: 182.589928057554, y: 3.84313725490196, size: 1 },\r\n // { x: 183.884892086331, y: 3.84313725490196, size: 1 },\r\n // { x: 202.661870503597, y: 3.52941176470588, size: 1 },\r\n // { x: 203.309352517986, y: 3.96078431372549, size: 1 },\r\n // { x: 205.89928057554, y: 3.49019607843137, size: 1 },\r\n // { x: 207.841726618705, y: 3.05882352941176, size: 1 },\r\n // { x: 210.431654676259, y: 3.80392156862745, size: 1 },\r\n // { x: 217.553956834532, y: 3.80392156862745, size: 1 },\r\n // { x: 218.201438848921, y: 3.72549019607843, size: 1 },\r\n // { x: 220.143884892086, y: 3.68627450980392, size: 1 },\r\n // { x: 228.561151079137, y: 3.45098039215686, size: 1 },\r\n // { x: 229.208633093525, y: 3.13725490196078, size: 1 },\r\n // { x: 229.856115107914, y: 3.09803921568627, size: 1 },\r\n // { x: 234.388489208633, y: 3.88235294117647, size: 1 },\r\n // { x: 235.68345323741, y: 3.92156862745098, size: 1 },\r\n // { x: 241.510791366906, y: 3.64705882352941, size: 1 },\r\n // { x: 246.690647482014, y: 3.6078431372549, size: 1 },\r\n // { x: 253.165467625899, y: 3.6078431372549, size: 1 },\r\n // { x: 253.812949640288, y: 3.84313725490196, size: 1 },\r\n // { x: 255.755395683453, y: 3.76470588235294, size: 1 },\r\n // { x: 266.115107913669, y: 3.76470588235294, size: 1 },\r\n // { x: 273.237410071942, y: 3.29411764705882, size: 1 },\r\n // { x: 273.884892086331, y: 3.41176470588235, size: 1 },\r\n // { x: 280.359712230216, y: 3.37254901960784, size: 1 },\r\n // { x: 281.654676258993, y: 3.52941176470588, size: 1 },\r\n // { x: 285.539568345324, y: 3.37254901960784, size: 1 },\r\n // { x: 289.424460431655, y: 3.33333333333333, size: 1 },\r\n // { x: 295.251798561151, y: 3.01960784313725, size: 1 },\r\n // { x: 295.89928057554, y: 3.13725490196078, size: 1 },\r\n // { x: 296.546762589928, y: 3.13725490196078, size: 1 },\r\n // { x: 297.194244604317, y: 3.41176470588235, size: 1 },\r\n // { x: 299.784172661871, y: 3.09803921568627, size: 1 },\r\n // { x: 300.431654676259, y: 3.17647058823529, size: 1 },\r\n // { x: 301.079136690647, y: 3.13725490196078, size: 1 },\r\n // { x: 301.726618705036, y: 3.17647058823529, size: 1 },\r\n // { x: 303.021582733813, y: 3.2156862745098, size: 1 },\r\n // { x: 304.31654676259, y: 3.2156862745098, size: 1 },\r\n // { x: 305.611510791367, y: 3.29411764705882, size: 1 },\r\n // { x: 306.258992805755, y: 3.33333333333333, size: 1 },\r\n // { x: 310.143884892086, y: 3.33333333333333, size: 1 },\r\n // { x: 310.791366906475, y: 3.2156862745098, size: 1 },\r\n // { x: 312.086330935252, y: 3.17647058823529, size: 1 },\r\n // { x: 315.323741007194, y: 2.90196078431373, size: 1 },\r\n // { x: 315.971223021583, y: 2.90196078431373, size: 1 },\r\n // { x: 325.035971223022, y: 3.6078431372549, size: 1 },\r\n // { x: 325.68345323741, y: 3.96078431372549, size: 1 },\r\n // { x: 330.863309352518, y: 3.72549019607843, size: 1 },\r\n // { x: 335.395683453237, y: 3.41176470588235, size: 1 },\r\n // { x: 345.755395683453, y: 3.64705882352941, size: 1 },\r\n // { x: 347.05035971223, y: 3.80392156862745, size: 1 },\r\n // { x: 358.705035971223, y: 3.17647058823529, size: 1 },\r\n // { x: 0.648648648648649, y: 3.80392156862745, size: 1 },\r\n // { x: 5.18918918918919, y: 3.56862745098039, size: 1 },\r\n // { x: 6.48648648648649, y: 3.96078431372549, size: 1 },\r\n // { x: 7.13513513513514, y: 3.84313725490196, size: 1 },\r\n // { x: 7.78378378378378, y: 3.80392156862745, size: 1 },\r\n // { x: 9.72972972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 10.3783783783784, y: 3.52941176470588, size: 1 },\r\n // { x: 11.6756756756757, y: 3.64705882352941, size: 1 },\r\n // { x: 12.3243243243243, y: 3.80392156862745, size: 1 },\r\n // { x: 12.972972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 14.9189189189189, y: 3.64705882352941, size: 1 },\r\n // { x: 15.5675675675676, y: 3.64705882352941, size: 1 },\r\n // { x: 16.2162162162162, y: 3.52941176470588, size: 1 },\r\n // { x: 18.8108108108108, y: 3.25490196078431, size: 1 },\r\n // { x: 20.1081081081081, y: 3.01960784313725, size: 1 },\r\n // { x: 20.7567567567568, y: 2.86274509803922, size: 1 },\r\n // { x: 22.0540540540541, y: 3.88235294117647, size: 1 },\r\n // { x: 22.7027027027027, y: 3.52941176470588, size: 1 },\r\n // { x: 24.6486486486486, y: 3.72549019607843, size: 1 },\r\n // { x: 25.9459459459459, y: 3.80392156862745, size: 1 },\r\n // { x: 26.5945945945946, y: 3.72549019607843, size: 1 },\r\n // { x: 27.2432432432432, y: 3.88235294117647, size: 1 },\r\n // { x: 27.8918918918919, y: 3.80392156862745, size: 1 },\r\n // { x: 29.1891891891892, y: 3.88235294117647, size: 1 },\r\n // { x: 33.7297297297297, y: 3.76470588235294, size: 1 },\r\n // { x: 35.027027027027, y: 3.76470588235294, size: 1 },\r\n // { x: 35.6756756756757, y: 3.88235294117647, size: 1 },\r\n // { x: 37.6216216216216, y: 3.92156862745098, size: 1 },\r\n // { x: 38.2702702702703, y: 3.72549019607843, size: 1 },\r\n // { x: 38.9189189189189, y: 3.64705882352941, size: 1 },\r\n // { x: 40.2162162162162, y: 3.17647058823529, size: 1 },\r\n // { x: 40.8648648648649, y: 3.29411764705882, size: 1 },\r\n // { x: 41.5135135135135, y: 3.45098039215686, size: 1 },\r\n // { x: 42.1621621621622, y: 2.86274509803922, size: 1 },\r\n // { x: 42.8108108108108, y: 3.52941176470588, size: 1 },\r\n // { x: 43.4594594594595, y: 3.68627450980392, size: 1 },\r\n // { x: 45.4054054054054, y: 3.72549019607843, size: 1 },\r\n // { x: 46.0540540540541, y: 3.6078431372549, size: 1 },\r\n // { x: 48, y: 3.80392156862745, size: 1 },\r\n // { x: 49.2972972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 50.5945945945946, y: 3.68627450980392, size: 1 },\r\n // { x: 53.1891891891892, y: 3.45098039215686, size: 1 },\r\n // { x: 56.4324324324324, y: 3.52941176470588, size: 1 },\r\n // { x: 59.6756756756757, y: 3.72549019607843, size: 1 },\r\n // { x: 60.972972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 61.6216216216216, y: 3.52941176470588, size: 1 },\r\n // { x: 62.2702702702703, y: 3.33333333333333, size: 1 },\r\n // { x: 62.9189189189189, y: 3.41176470588235, size: 1 },\r\n // { x: 63.5675675675676, y: 3.25490196078431, size: 1 },\r\n // { x: 64.2162162162162, y: 3.25490196078431, size: 1 },\r\n // { x: 68.1081081081081, y: 3.64705882352941, size: 1 },\r\n // { x: 69.4054054054054, y: 3.6078431372549, size: 1 },\r\n // { x: 70.054054054054, y: 3.64705882352941, size: 1 },\r\n // { x: 71.3513513513514, y: 3.6078431372549, size: 1 },\r\n // { x: 72, y: 3.76470588235294, size: 1 },\r\n // { x: 73.945945945946, y: 3.76470588235294, size: 1 },\r\n // { x: 75.8918918918919, y: 3.6078431372549, size: 1 },\r\n // { x: 77.1891891891892, y: 3.76470588235294, size: 1 },\r\n // { x: 78.4864864864865, y: 3.56862745098039, size: 1 },\r\n // { x: 79.1351351351351, y: 3.84313725490196, size: 1 },\r\n // { x: 79.7837837837838, y: 3.45098039215686, size: 1 },\r\n // { x: 80.4324324324324, y: 3.6078431372549, size: 1 },\r\n // { x: 81.0810810810811, y: 3.45098039215686, size: 1 },\r\n // { x: 82.3783783783784, y: 3.45098039215686, size: 1 },\r\n // { x: 83.027027027027, y: 3.33333333333333, size: 1 },\r\n // { x: 83.6756756756757, y: 4, size: 1 },\r\n // { x: 87.5675675675676, y: 3.76470588235294, size: 1 },\r\n // { x: 88.2162162162162, y: 3.68627450980392, size: 1 },\r\n // { x: 88.8648648648649, y: 3.68627450980392, size: 1 },\r\n // { x: 89.5135135135135, y: 3.88235294117647, size: 1 },\r\n // { x: 90.1621621621622, y: 3.64705882352941, size: 1 },\r\n // { x: 92.7567567567568, y: 3.76470588235294, size: 1 },\r\n // { x: 95.3513513513514, y: 3.80392156862745, size: 1 },\r\n // { x: 97.945945945946, y: 3.96078431372549, size: 1 },\r\n // { x: 99.8918918918919, y: 3.64705882352941, size: 1 },\r\n // { x: 100.540540540541, y: 3.80392156862745, size: 1 },\r\n // { x: 102.486486486486, y: 3.80392156862745, size: 1 },\r\n // { x: 103.135135135135, y: 3.88235294117647, size: 1 },\r\n // { x: 104.432432432432, y: 3.6078431372549, size: 1 },\r\n // { x: 107.027027027027, y: 3.17647058823529, size: 1 },\r\n // { x: 107.675675675676, y: 3.09803921568627, size: 1 },\r\n // { x: 108.972972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 109.621621621622, y: 3.41176470588235, size: 1 },\r\n // { x: 110.918918918919, y: 3.52941176470588, size: 1 },\r\n // { x: 112.216216216216, y: 3.64705882352941, size: 1 },\r\n // { x: 114.162162162162, y: 3.80392156862745, size: 1 },\r\n // { x: 115.459459459459, y: 3.92156862745098, size: 1 },\r\n // { x: 116.108108108108, y: 4.03921568627451, size: 1 },\r\n // { x: 116.756756756757, y: 3.72549019607843, size: 1 },\r\n // { x: 118.702702702703, y: 3.64705882352941, size: 1 },\r\n // { x: 119.351351351351, y: 3.52941176470588, size: 1 },\r\n // { x: 121.297297297297, y: 3.41176470588235, size: 1 },\r\n // { x: 121.945945945946, y: 3.49019607843137, size: 1 },\r\n // { x: 124.540540540541, y: 3.33333333333333, size: 1 },\r\n // { x: 125.837837837838, y: 3.52941176470588, size: 1 },\r\n // { x: 126.486486486486, y: 3.33333333333333, size: 1 },\r\n // { x: 127.135135135135, y: 3.68627450980392, size: 1 },\r\n // { x: 128.432432432432, y: 2.98039215686275, size: 1 },\r\n // { x: 129.081081081081, y: 2.70588235294118, size: 1 },\r\n // { x: 131.027027027027, y: 3.72549019607843, size: 1 },\r\n // { x: 131.675675675676, y: 3.92156862745098, size: 1 },\r\n // { x: 132.324324324324, y: 3.76470588235294, size: 1 },\r\n // { x: 134.27027027027, y: 3.76470588235294, size: 1 },\r\n // { x: 135.567567567568, y: 3.84313725490196, size: 1 },\r\n // { x: 136.864864864865, y: 3.76470588235294, size: 1 },\r\n // { x: 137.513513513514, y: 3.84313725490196, size: 1 },\r\n // { x: 140.756756756757, y: 3.64705882352941, size: 1 },\r\n // { x: 142.054054054054, y: 3.72549019607843, size: 1 },\r\n // { x: 143.351351351351, y: 3.68627450980392, size: 1 },\r\n // { x: 144, y: 3.96078431372549, size: 1 },\r\n // { x: 145.297297297297, y: 3.76470588235294, size: 1 },\r\n // { x: 145.945945945946, y: 3.76470588235294, size: 1 },\r\n // { x: 148.540540540541, y: 3.41176470588235, size: 1 },\r\n // { x: 149.837837837838, y: 3.01960784313725, size: 1 },\r\n // { x: 150.486486486486, y: 3.25490196078431, size: 1 },\r\n // { x: 151.135135135135, y: 3.41176470588235, size: 1 },\r\n // { x: 155.675675675676, y: 3.80392156862745, size: 1 },\r\n // { x: 156.972972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 158.27027027027, y: 3.64705882352941, size: 1 },\r\n // { x: 160.216216216216, y: 3.92156862745098, size: 1 },\r\n // { x: 161.513513513514, y: 3.84313725490196, size: 1 },\r\n // { x: 164.756756756757, y: 3.6078431372549, size: 1 },\r\n // { x: 165.405405405405, y: 3.56862745098039, size: 1 },\r\n // { x: 166.054054054054, y: 3.96078431372549, size: 1 },\r\n // { x: 168, y: 3.56862745098039, size: 1 },\r\n // { x: 169.297297297297, y: 3.6078431372549, size: 1 },\r\n // { x: 170.594594594595, y: 3.25490196078431, size: 1 },\r\n // { x: 171.243243243243, y: 3.33333333333333, size: 1 },\r\n // { x: 171.891891891892, y: 2.74509803921569, size: 1 },\r\n // { x: 173.837837837838, y: 3.45098039215686, size: 1 },\r\n // { x: 176.432432432432, y: 4, size: 1 },\r\n // { x: 178.378378378378, y: 3.45098039215686, size: 1 },\r\n // { x: 179.027027027027, y: 3.68627450980392, size: 1 },\r\n // { x: 181.621621621622, y: 3.72549019607843, size: 1 },\r\n // { x: 182.27027027027, y: 3.56862745098039, size: 1 },\r\n // { x: 182.918918918919, y: 3.6078431372549, size: 1 },\r\n // { x: 183.567567567568, y: 3.76470588235294, size: 1 },\r\n // { x: 184.216216216216, y: 3.64705882352941, size: 1 },\r\n // { x: 185.513513513514, y: 3.41176470588235, size: 1 },\r\n // { x: 193.297297297297, y: 3.17647058823529, size: 1 },\r\n // { x: 193.945945945946, y: 3.29411764705882, size: 1 },\r\n // { x: 195.891891891892, y: 3.52941176470588, size: 1 },\r\n // { x: 197.837837837838, y: 3.72549019607843, size: 1 },\r\n // { x: 198.486486486486, y: 3.52941176470588, size: 1 },\r\n // { x: 201.081081081081, y: 3.33333333333333, size: 1 },\r\n // { x: 202.378378378378, y: 3.6078431372549, size: 1 },\r\n // { x: 203.675675675676, y: 3.49019607843137, size: 1 },\r\n // { x: 204.972972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 205.621621621622, y: 3.37254901960784, size: 1 },\r\n // { x: 208.216216216216, y: 3.72549019607843, size: 1 },\r\n // { x: 208.864864864865, y: 3.68627450980392, size: 1 },\r\n // { x: 210.162162162162, y: 3.56862745098039, size: 1 },\r\n // { x: 211.459459459459, y: 3.52941176470588, size: 1 },\r\n // { x: 213.405405405405, y: 3.49019607843137, size: 1 },\r\n // { x: 214.702702702703, y: 2.90196078431373, size: 1 },\r\n // { x: 215.351351351351, y: 2.47058823529412, size: 1 },\r\n // { x: 216, y: 3.52941176470588, size: 1 },\r\n // { x: 216.648648648649, y: 3.56862745098039, size: 1 },\r\n // { x: 217.297297297297, y: 3.76470588235294, size: 1 },\r\n // { x: 221.189189189189, y: 3.84313725490196, size: 1 },\r\n // { x: 225.081081081081, y: 3.68627450980392, size: 1 },\r\n // { x: 226.378378378378, y: 4, size: 1 },\r\n // { x: 227.675675675676, y: 3.76470588235294, size: 1 },\r\n // { x: 228.324324324324, y: 3.68627450980392, size: 1 },\r\n // { x: 230.27027027027, y: 3.80392156862745, size: 1 },\r\n // { x: 234.162162162162, y: 3.41176470588235, size: 1 },\r\n // { x: 234.810810810811, y: 3.68627450980392, size: 1 },\r\n // { x: 236.756756756757, y: 3.33333333333333, size: 1 },\r\n // { x: 238.054054054054, y: 3.88235294117647, size: 1 },\r\n // { x: 239.351351351351, y: 3.72549019607843, size: 1 },\r\n // { x: 240, y: 3.88235294117647, size: 1 },\r\n // { x: 241.297297297297, y: 3.76470588235294, size: 1 },\r\n // { x: 243.243243243243, y: 3.68627450980392, size: 1 },\r\n // { x: 246.486486486486, y: 3.84313725490196, size: 1 },\r\n // { x: 247.783783783784, y: 3.56862745098039, size: 1 },\r\n // { x: 249.081081081081, y: 3.6078431372549, size: 1 },\r\n // { x: 251.027027027027, y: 3.76470588235294, size: 1 },\r\n // { x: 251.675675675676, y: 3.6078431372549, size: 1 },\r\n // { x: 252.324324324324, y: 3.45098039215686, size: 1 },\r\n // { x: 252.972972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 254.27027027027, y: 3.80392156862745, size: 1 },\r\n // { x: 255.567567567568, y: 3.68627450980392, size: 1 },\r\n // { x: 256.864864864865, y: 3.37254901960784, size: 1 },\r\n // { x: 257.513513513513, y: 3.33333333333333, size: 1 },\r\n // { x: 258.162162162162, y: 3.05882352941176, size: 1 },\r\n // { x: 258.810810810811, y: 3.17647058823529, size: 1 },\r\n // { x: 260.756756756757, y: 3.41176470588235, size: 1 },\r\n // { x: 262.054054054054, y: 3.41176470588235, size: 1 },\r\n // { x: 264, y: 3.37254901960784, size: 1 },\r\n // { x: 264.648648648649, y: 3.37254901960784, size: 1 },\r\n // { x: 265.297297297297, y: 3.56862745098039, size: 1 },\r\n // { x: 266.594594594595, y: 3.45098039215686, size: 1 },\r\n // { x: 268.540540540541, y: 3.92156862745098, size: 1 },\r\n // { x: 269.837837837838, y: 3.2156862745098, size: 1 },\r\n // { x: 271.135135135135, y: 3.41176470588235, size: 1 },\r\n // { x: 271.783783783784, y: 3.68627450980392, size: 1 },\r\n // { x: 272.432432432432, y: 3.49019607843137, size: 1 },\r\n // { x: 273.081081081081, y: 3.52941176470588, size: 1 },\r\n // { x: 273.72972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 274.378378378378, y: 3.41176470588235, size: 1 },\r\n // { x: 275.675675675676, y: 3.45098039215686, size: 1 },\r\n // { x: 279.567567567568, y: 3.01960784313725, size: 1 },\r\n // { x: 280.216216216216, y: 3.05882352941176, size: 1 },\r\n // { x: 280.864864864865, y: 3.49019607843137, size: 1 },\r\n // { x: 281.513513513513, y: 3.56862745098039, size: 1 },\r\n // { x: 282.162162162162, y: 3.41176470588235, size: 1 },\r\n // { x: 282.810810810811, y: 3.45098039215686, size: 1 },\r\n // { x: 284.756756756757, y: 3.80392156862745, size: 1 },\r\n // { x: 291.243243243243, y: 3.37254901960784, size: 1 },\r\n // { x: 291.891891891892, y: 3.45098039215686, size: 1 },\r\n // { x: 292.540540540541, y: 3.45098039215686, size: 1 },\r\n // { x: 293.189189189189, y: 3.56862745098039, size: 1 },\r\n // { x: 295.135135135135, y: 3.76470588235294, size: 1 },\r\n // { x: 299.027027027027, y: 3.33333333333333, size: 1 },\r\n // { x: 299.675675675676, y: 3.56862745098039, size: 1 },\r\n // { x: 300.972972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 303.567567567568, y: 3.72549019607843, size: 1 },\r\n // { x: 304.216216216216, y: 3.84313725490196, size: 1 },\r\n // { x: 306.162162162162, y: 3.6078431372549, size: 1 },\r\n // { x: 307.459459459459, y: 3.6078431372549, size: 1 },\r\n // { x: 308.108108108108, y: 3.68627450980392, size: 1 },\r\n // { x: 310.702702702703, y: 3.72549019607843, size: 1 },\r\n // { x: 312, y: 3.45098039215686, size: 1 },\r\n // { x: 314.594594594595, y: 3.64705882352941, size: 1 },\r\n // { x: 317.189189189189, y: 3.64705882352941, size: 1 },\r\n // { x: 319.135135135135, y: 3.72549019607843, size: 1 },\r\n // { x: 320.432432432432, y: 3.64705882352941, size: 1 },\r\n // { x: 321.081081081081, y: 3.49019607843137, size: 1 },\r\n // { x: 323.027027027027, y: 3.13725490196078, size: 1 },\r\n // { x: 323.675675675676, y: 3.37254901960784, size: 1 },\r\n // { x: 324.972972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 326.27027027027, y: 3.6078431372549, size: 1 },\r\n // { x: 328.216216216216, y: 3.49019607843137, size: 1 },\r\n // { x: 328.864864864865, y: 3.80392156862745, size: 1 },\r\n // { x: 330.162162162162, y: 3.56862745098039, size: 1 },\r\n // { x: 332.756756756757, y: 3.52941176470588, size: 1 },\r\n // { x: 334.702702702703, y: 3.68627450980392, size: 1 },\r\n // { x: 337.945945945946, y: 3.49019607843137, size: 1 },\r\n // { x: 339.243243243243, y: 3.37254901960784, size: 1 },\r\n // { x: 339.891891891892, y: 3.6078431372549, size: 1 },\r\n // { x: 340.540540540541, y: 3.68627450980392, size: 1 },\r\n // { x: 342.486486486487, y: 3.72549019607843, size: 1 },\r\n // { x: 343.135135135135, y: 3.2156862745098, size: 1 },\r\n // { x: 344.432432432432, y: 3.33333333333333, size: 1 },\r\n // { x: 345.081081081081, y: 3.33333333333333, size: 1 },\r\n // { x: 346.378378378378, y: 3.64705882352941, size: 1 },\r\n // { x: 347.027027027027, y: 3.92156862745098, size: 1 },\r\n // { x: 347.675675675676, y: 3.6078431372549, size: 1 },\r\n // { x: 348.324324324324, y: 3.6078431372549, size: 1 },\r\n // { x: 350.27027027027, y: 3.76470588235294, size: 1 },\r\n // { x: 350.918918918919, y: 3.80392156862745, size: 1 },\r\n // { x: 352.864864864865, y: 3.72549019607843, size: 1 },\r\n // { x: 353.513513513513, y: 3.52941176470588, size: 1 },\r\n // { x: 355.459459459459, y: 3.56862745098039, size: 1 },\r\n // { x: 356.756756756757, y: 3.52941176470588, size: 1 },\r\n // { x: 357.405405405405, y: 3.68627450980392, size: 1 },\r\n // { x: 5.8273381294964, y: 3.17647058823529, size: 1 },\r\n // { x: 6.47482014388489, y: 3.13725490196078, size: 1 },\r\n // { x: 9.06474820143885, y: 3.68627450980392, size: 1 },\r\n // { x: 11.0071942446043, y: 3.64705882352941, size: 1 },\r\n // { x: 11.6546762589928, y: 3.84313725490196, size: 1 },\r\n // { x: 18.1294964028777, y: 3.80392156862745, size: 1 },\r\n // { x: 25.8992805755396, y: 3.41176470588235, size: 1 },\r\n // { x: 26.5467625899281, y: 3.52941176470588, size: 1 },\r\n // { x: 27.1942446043165, y: 3.29411764705882, size: 1 },\r\n // { x: 27.841726618705, y: 2.50980392156863, size: 1 },\r\n // { x: 28.4892086330935, y: 2.66666666666667, size: 1 },\r\n // { x: 31.0791366906475, y: 3.33333333333333, size: 1 },\r\n // { x: 34.9640287769784, y: 3.45098039215686, size: 1 },\r\n // { x: 36.9064748201439, y: 3.49019607843137, size: 1 },\r\n // { x: 38.8489208633094, y: 3.25490196078431, size: 1 },\r\n // { x: 44.0287769784173, y: 3.41176470588235, size: 1 },\r\n // { x: 58.9208633093525, y: 3.80392156862745, size: 1 },\r\n // { x: 61.5107913669065, y: 3.6078431372549, size: 1 },\r\n // { x: 66.0431654676259, y: 3.37254901960784, size: 1 },\r\n // { x: 69.9280575539568, y: 3.41176470588235, size: 1 },\r\n // { x: 80.9352517985612, y: 3.96078431372549, size: 1 },\r\n // { x: 86.1151079136691, y: 3.25490196078431, size: 1 },\r\n // { x: 92.589928057554, y: 3.49019607843137, size: 1 },\r\n // { x: 95.8273381294964, y: 3.84313725490196, size: 1 },\r\n // { x: 99.7122302158273, y: 3.92156862745098, size: 1 },\r\n // { x: 101.007194244604, y: 3.80392156862745, size: 1 },\r\n // { x: 103.597122302158, y: 3.84313725490196, size: 1 },\r\n // { x: 107.482014388489, y: 3.84313725490196, size: 1 },\r\n // { x: 110.719424460432, y: 3.92156862745098, size: 1 },\r\n // { x: 113.956834532374, y: 3.17647058823529, size: 1 },\r\n // { x: 114.604316546763, y: 3.09803921568627, size: 1 },\r\n // { x: 124.964028776978, y: 3.84313725490196, size: 1 },\r\n // { x: 134.028776978417, y: 3.76470588235294, size: 1 },\r\n // { x: 136.618705035971, y: 3.37254901960784, size: 1 },\r\n // { x: 145.035971223022, y: 3.80392156862745, size: 1 },\r\n // { x: 146.330935251799, y: 3.92156862745098, size: 1 },\r\n // { x: 150.863309352518, y: 3.84313725490196, size: 1 },\r\n // { x: 156.690647482014, y: 2.90196078431373, size: 1 },\r\n // { x: 157.338129496403, y: 1.49019607843137, size: 1 },\r\n // { x: 157.985611510791, y: 1.6078431372549, size: 1 },\r\n // { x: 158.63309352518, y: 1.56862745098039, size: 1 },\r\n // { x: 159.280575539568, y: 1.64705882352941, size: 1 },\r\n // { x: 159.928057553957, y: 3.33333333333333, size: 1 },\r\n // { x: 161.223021582734, y: 3.41176470588235, size: 1 },\r\n // { x: 161.870503597122, y: 3.13725490196078, size: 1 },\r\n // { x: 162.517985611511, y: 3.13725490196078, size: 1 },\r\n // { x: 166.402877697842, y: 2.98039215686275, size: 1 },\r\n // { x: 167.05035971223, y: 2.94117647058824, size: 1 },\r\n // { x: 172.877697841727, y: 2.7843137254902, size: 1 },\r\n // { x: 174.820143884892, y: 3.41176470588235, size: 1 },\r\n // { x: 176.762589928058, y: 3.25490196078431, size: 1 },\r\n // { x: 177.410071942446, y: 3.09803921568627, size: 1 },\r\n // { x: 178.057553956835, y: 3.09803921568627, size: 1 },\r\n // { x: 178.705035971223, y: 2.66666666666667, size: 1 },\r\n // { x: 179.352517985612, y: 1.49019607843137, size: 1 },\r\n // { x: 180, y: 3.84313725490196, size: 1 },\r\n // { x: 183.237410071942, y: 3.92156862745098, size: 1 },\r\n // { x: 183.884892086331, y: 3.76470588235294, size: 1 },\r\n // { x: 192.302158273381, y: 3.68627450980392, size: 1 },\r\n // { x: 198.776978417266, y: 3.17647058823529, size: 1 },\r\n // { x: 199.424460431655, y: 3.37254901960784, size: 1 },\r\n // { x: 200.071942446043, y: 3.05882352941176, size: 1 },\r\n // { x: 200.719424460432, y: 2.70588235294118, size: 1 },\r\n // { x: 201.36690647482, y: 3.2156862745098, size: 1 },\r\n // { x: 207.841726618705, y: 3.49019607843137, size: 1 },\r\n // { x: 211.726618705036, y: 3.45098039215686, size: 1 },\r\n // { x: 216.258992805755, y: 3.49019607843137, size: 1 },\r\n // { x: 221.438848920863, y: 3.05882352941176, size: 1 },\r\n // { x: 222.086330935252, y: 2.7843137254902, size: 1 },\r\n // { x: 222.73381294964, y: 2.70588235294118, size: 1 },\r\n // { x: 224.676258992806, y: 3.29411764705882, size: 1 },\r\n // { x: 228.561151079137, y: 3.64705882352941, size: 1 },\r\n // { x: 234.388489208633, y: 3.45098039215686, size: 1 },\r\n // { x: 242.158273381295, y: 3.13725490196078, size: 1 },\r\n // { x: 242.805755395683, y: 3.25490196078431, size: 1 },\r\n // { x: 243.453237410072, y: 2.3921568627451, size: 1 },\r\n // { x: 244.10071942446, y: 2.27450980392157, size: 1 },\r\n // { x: 244.748201438849, y: 3.41176470588235, size: 1 },\r\n // { x: 245.395683453237, y: 3.25490196078431, size: 1 },\r\n // { x: 246.043165467626, y: 3.37254901960784, size: 1 },\r\n // { x: 247.338129496403, y: 3.29411764705882, size: 1 },\r\n // { x: 248.63309352518, y: 3.29411764705882, size: 1 },\r\n // { x: 249.928057553957, y: 3.33333333333333, size: 1 },\r\n // { x: 251.223021582734, y: 3.33333333333333, size: 1 },\r\n // { x: 252.517985611511, y: 3.29411764705882, size: 1 },\r\n // { x: 256.402877697842, y: 3.37254901960784, size: 1 },\r\n // { x: 262.877697841727, y: 3.49019607843137, size: 1 },\r\n // { x: 263.525179856115, y: 3.09803921568627, size: 1 },\r\n // { x: 264.172661870504, y: 3.13725490196078, size: 1 },\r\n // { x: 264.820143884892, y: 2.90196078431373, size: 1 },\r\n // { x: 265.467625899281, y: 1.96078431372549, size: 1 },\r\n // { x: 268.057553956835, y: 3.88235294117647, size: 1 },\r\n // { x: 298.489208633094, y: 3.92156862745098, size: 1 },\r\n // { x: 301.079136690647, y: 3.52941176470588, size: 1 },\r\n // { x: 303.021582733813, y: 3.92156862745098, size: 1 },\r\n // { x: 303.669064748201, y: 3.49019607843137, size: 1 },\r\n // { x: 308.848920863309, y: 3.80392156862745, size: 1 },\r\n // { x: 312.086330935252, y: 3.52941176470588, size: 1 },\r\n // { x: 320.503597122302, y: 4.03921568627451, size: 1 },\r\n // { x: 323.741007194245, y: 3.84313725490196, size: 1 },\r\n // { x: 325.68345323741, y: 3.76470588235294, size: 1 },\r\n // { x: 326.978417266187, y: 3.88235294117647, size: 1 },\r\n // { x: 328.273381294964, y: 3.33333333333333, size: 1 },\r\n // { x: 331.510791366906, y: 3.80392156862745, size: 1 },\r\n // { x: 337.985611510791, y: 3.25490196078431, size: 1 },\r\n // { x: 339.280575539568, y: 3.45098039215686, size: 1 },\r\n // { x: 340.575539568345, y: 3.33333333333333, size: 1 },\r\n // { x: 342.517985611511, y: 3.49019607843137, size: 1 },\r\n // { x: 350.287769784173, y: 3.37254901960784, size: 1 },\r\n // { x: 351.58273381295, y: 3.80392156862745, size: 1 },\r\n // { x: 354.820143884892, y: 3.80392156862745, size: 1 },\r\n // { x: 356.115107913669, y: 3.80392156862745, size: 1 },\r\n // { x: 4.53237410071942, y: 3.84313725490196, size: 1 },\r\n // { x: 7.76978417266187, y: 3.80392156862745, size: 1 },\r\n // { x: 16.1870503597122, y: 4.11764705882353, size: 1 },\r\n // { x: 18.1294964028777, y: 3.92156862745098, size: 1 },\r\n // { x: 29.136690647482, y: 3.84313725490196, size: 1 },\r\n // { x: 31.726618705036, y: 3.96078431372549, size: 1 },\r\n // { x: 33.0215827338129, y: 3.2156862745098, size: 1 },\r\n // { x: 33.6690647482014, y: 3.2156862745098, size: 1 },\r\n // { x: 34.3165467625899, y: 3.17647058823529, size: 1 },\r\n // { x: 34.9640287769784, y: 2.70588235294118, size: 1 },\r\n // { x: 36.9064748201439, y: 3.72549019607843, size: 1 },\r\n // { x: 41.4388489208633, y: 3.88235294117647, size: 1 },\r\n // { x: 43.3812949640288, y: 3.84313725490196, size: 1 },\r\n // { x: 63.4532374100719, y: 3.49019607843137, size: 1 },\r\n // { x: 64.1007194244604, y: 3.37254901960784, size: 1 },\r\n // { x: 67.3381294964029, y: 3.37254901960784, size: 1 },\r\n // { x: 69.2805755395683, y: 3.45098039215686, size: 1 },\r\n // { x: 74.4604316546763, y: 3.37254901960784, size: 1 },\r\n // { x: 77.0503597122302, y: 3.56862745098039, size: 1 },\r\n // { x: 86.1151079136691, y: 3.68627450980392, size: 1 },\r\n // { x: 87.410071942446, y: 3.88235294117647, size: 1 },\r\n // { x: 96.4748201438849, y: 3.68627450980392, size: 1 },\r\n // { x: 104.892086330935, y: 3.76470588235294, size: 1 },\r\n // { x: 106.187050359712, y: 3.76470588235294, size: 1 },\r\n // { x: 108.129496402878, y: 3.52941176470588, size: 1 },\r\n // { x: 117.841726618705, y: 3.84313725490196, size: 1 },\r\n // { x: 132.086330935252, y: 3.68627450980392, size: 1 },\r\n // { x: 140.503597122302, y: 3.80392156862745, size: 1 },\r\n // { x: 141.151079136691, y: 3.80392156862745, size: 1 },\r\n // { x: 151.510791366906, y: 3.92156862745098, size: 1 },\r\n // { x: 152.805755395683, y: 3.64705882352941, size: 1 },\r\n // { x: 161.223021582734, y: 3.72549019607843, size: 1 },\r\n // { x: 168.992805755396, y: 3.45098039215686, size: 1 },\r\n // { x: 170.287769784173, y: 3.37254901960784, size: 1 },\r\n // { x: 172.230215827338, y: 3.37254901960784, size: 1 },\r\n // { x: 174.172661870504, y: 3.72549019607843, size: 1 },\r\n // { x: 174.820143884892, y: 3.37254901960784, size: 1 },\r\n // { x: 176.115107913669, y: 3.33333333333333, size: 1 },\r\n // { x: 178.057553956835, y: 3.45098039215686, size: 1 },\r\n // { x: 179.352517985612, y: 3.33333333333333, size: 1 },\r\n // { x: 180.647482014388, y: 3.76470588235294, size: 1 },\r\n // { x: 185.179856115108, y: 3.09803921568627, size: 1 },\r\n // { x: 185.827338129496, y: 2.7843137254902, size: 1 },\r\n // { x: 186.474820143885, y: 2.66666666666667, size: 1 },\r\n // { x: 187.122302158273, y: 3.01960784313725, size: 1 },\r\n // { x: 187.769784172662, y: 3.09803921568627, size: 1 },\r\n // { x: 192.302158273381, y: 3.41176470588235, size: 1 },\r\n // { x: 194.892086330935, y: 3.45098039215686, size: 1 },\r\n // { x: 195.539568345324, y: 3.80392156862745, size: 1 },\r\n // { x: 196.834532374101, y: 3.84313725490196, size: 1 },\r\n // { x: 201.36690647482, y: 3.84313725490196, size: 1 },\r\n // { x: 203.309352517986, y: 3.80392156862745, size: 1 },\r\n // { x: 207.194244604317, y: 3.09803921568627, size: 1 },\r\n // { x: 207.841726618705, y: 2.94117647058824, size: 1 },\r\n // { x: 208.489208633094, y: 2.62745098039216, size: 1 },\r\n // { x: 209.136690647482, y: 2.86274509803922, size: 1 },\r\n // { x: 209.784172661871, y: 3.17647058823529, size: 1 },\r\n // { x: 211.726618705036, y: 4.03921568627451, size: 1 },\r\n // { x: 213.669064748201, y: 3.84313725490196, size: 1 },\r\n // { x: 218.201438848921, y: 3.33333333333333, size: 1 },\r\n // { x: 222.086330935252, y: 3.64705882352941, size: 1 },\r\n // { x: 229.856115107914, y: 3.92156862745098, size: 1 },\r\n // { x: 241.510791366906, y: 3.92156862745098, size: 1 },\r\n // { x: 248.63309352518, y: 3.88235294117647, size: 1 },\r\n // { x: 249.928057553957, y: 3.29411764705882, size: 1 },\r\n // { x: 250.575539568345, y: 2.98039215686275, size: 1 },\r\n // { x: 251.223021582734, y: 3.05882352941176, size: 1 },\r\n // { x: 258.345323741007, y: 3.72549019607843, size: 1 },\r\n // { x: 271.294964028777, y: 3.45098039215686, size: 1 },\r\n // { x: 271.942446043165, y: 3.05882352941176, size: 1 },\r\n // { x: 273.237410071942, y: 3.45098039215686, size: 1 },\r\n // { x: 290.071942446043, y: 3.33333333333333, size: 1 },\r\n // { x: 291.36690647482, y: 3.41176470588235, size: 1 },\r\n // { x: 292.661870503597, y: 3.41176470588235, size: 1 },\r\n // { x: 293.956834532374, y: 2.7843137254902, size: 1 },\r\n // { x: 295.251798561151, y: 3.80392156862745, size: 1 },\r\n // { x: 295.89928057554, y: 4.11764705882353, size: 1 },\r\n // { x: 301.726618705036, y: 3.80392156862745, size: 1 },\r\n // { x: 307.553956834532, y: 4.11764705882353, size: 1 },\r\n // { x: 308.848920863309, y: 3.92156862745098, size: 1 },\r\n // { x: 310.143884892086, y: 3.96078431372549, size: 1 },\r\n // { x: 311.438848920863, y: 4.03921568627451, size: 1 },\r\n // { x: 315.323741007194, y: 3.25490196078431, size: 1 },\r\n // { x: 315.971223021583, y: 3.17647058823529, size: 1 },\r\n // { x: 326.978417266187, y: 3.49019607843137, size: 1 },\r\n // { x: 328.273381294964, y: 3.96078431372549, size: 1 },\r\n // { x: 339.928057553957, y: 3.92156862745098, size: 1 },\r\n // { x: 350.935251798561, y: 3.76470588235294, size: 1 },\r\n // { x: 358.057553956835, y: 3.29411764705882, size: 1 },\r\n // { x: 0, y: 3.88235294117647, size: 1 },\r\n // { x: 12.3021582733813, y: 3.68627450980392, size: 1 },\r\n // { x: 13.5971223021583, y: 3.92156862745098, size: 1 },\r\n // { x: 18.1294964028777, y: 3.45098039215686, size: 1 },\r\n // { x: 20.7194244604317, y: 3.25490196078431, size: 1 },\r\n // { x: 21.3669064748201, y: 3.56862745098039, size: 1 },\r\n // { x: 22.0143884892086, y: 3.37254901960784, size: 1 },\r\n // { x: 25.2517985611511, y: 3.92156862745098, size: 1 },\r\n // { x: 27.841726618705, y: 3.45098039215686, size: 1 },\r\n // { x: 31.0791366906475, y: 3.52941176470588, size: 1 },\r\n // { x: 34.9640287769784, y: 3.92156862745098, size: 1 },\r\n // { x: 36.2589928057554, y: 3.88235294117647, size: 1 },\r\n // { x: 38.2014388489209, y: 3.49019607843137, size: 1 },\r\n // { x: 47.9136690647482, y: 3.76470588235294, size: 1 },\r\n // { x: 50.5035971223022, y: 3.49019607843137, size: 1 },\r\n // { x: 53.0935251798561, y: 3.84313725490196, size: 1 },\r\n // { x: 55.0359712230216, y: 3.76470588235294, size: 1 },\r\n // { x: 57.6258992805755, y: 3.52941176470588, size: 1 },\r\n // { x: 59.568345323741, y: 3.92156862745098, size: 1 },\r\n // { x: 63.4532374100719, y: 3.17647058823529, size: 1 },\r\n // { x: 77.6978417266187, y: 3.84313725490196, size: 1 },\r\n // { x: 79.6402877697842, y: 3.41176470588235, size: 1 },\r\n // { x: 95.8273381294964, y: 3.88235294117647, size: 1 },\r\n // { x: 102.94964028777, y: 4, size: 1 },\r\n // { x: 117.194244604317, y: 3.88235294117647, size: 1 },\r\n // { x: 122.374100719424, y: 3.80392156862745, size: 1 },\r\n // { x: 128.848920863309, y: 3.17647058823529, size: 1 },\r\n // { x: 129.496402877698, y: 2.90196078431373, size: 1 },\r\n // { x: 131.438848920863, y: 3.37254901960784, size: 1 },\r\n // { x: 143.741007194245, y: 3.80392156862745, size: 1 },\r\n // { x: 144.388489208633, y: 3.45098039215686, size: 1 },\r\n // { x: 149.568345323741, y: 3.05882352941176, size: 1 },\r\n // { x: 151.510791366906, y: 3.05882352941176, size: 1 },\r\n // { x: 156.690647482014, y: 3.80392156862745, size: 1 },\r\n // { x: 157.985611510791, y: 3.84313725490196, size: 1 },\r\n // { x: 158.63309352518, y: 3.56862745098039, size: 1 },\r\n // { x: 161.223021582734, y: 3.49019607843137, size: 1 },\r\n // { x: 163.812949640288, y: 3.88235294117647, size: 1 },\r\n // { x: 165.755395683453, y: 4.03921568627451, size: 1 },\r\n // { x: 168.992805755396, y: 3.37254901960784, size: 1 },\r\n // { x: 169.640287769784, y: 3.25490196078431, size: 1 },\r\n // { x: 170.287769784173, y: 3.17647058823529, size: 1 },\r\n // { x: 170.935251798561, y: 2.3921568627451, size: 1 },\r\n // { x: 171.58273381295, y: 2.66666666666667, size: 1 },\r\n // { x: 172.230215827338, y: 2.7843137254902, size: 1 },\r\n // { x: 172.877697841727, y: 2.82352941176471, size: 1 },\r\n // { x: 181.294964028777, y: 3.72549019607843, size: 1 },\r\n // { x: 184.532374100719, y: 3.6078431372549, size: 1 },\r\n // { x: 186.474820143885, y: 3.76470588235294, size: 1 },\r\n // { x: 191.007194244604, y: 3.25490196078431, size: 1 },\r\n // { x: 196.187050359712, y: 3.92156862745098, size: 1 },\r\n // { x: 198.129496402878, y: 3.92156862745098, size: 1 },\r\n // { x: 202.014388489209, y: 3.92156862745098, size: 1 },\r\n // { x: 209.784172661871, y: 3.84313725490196, size: 1 },\r\n // { x: 211.726618705036, y: 3.80392156862745, size: 1 },\r\n // { x: 213.669064748201, y: 3.29411764705882, size: 1 },\r\n // { x: 214.31654676259, y: 2.47058823529412, size: 1 },\r\n // { x: 214.964028776978, y: 2.7843137254902, size: 1 },\r\n // { x: 225.971223021583, y: 3.88235294117647, size: 1 },\r\n // { x: 229.208633093525, y: 3.68627450980392, size: 1 },\r\n // { x: 230.503597122302, y: 3.80392156862745, size: 1 },\r\n // { x: 231.798561151079, y: 3.56862745098039, size: 1 },\r\n // { x: 235.68345323741, y: 3.2156862745098, size: 1 },\r\n // { x: 236.330935251799, y: 3.29411764705882, size: 1 },\r\n // { x: 237.625899280576, y: 3.80392156862745, size: 1 },\r\n // { x: 253.165467625899, y: 3.37254901960784, size: 1 },\r\n // { x: 277.122302158273, y: 3.33333333333333, size: 1 },\r\n // { x: 277.769784172662, y: 3.29411764705882, size: 1 },\r\n // { x: 279.064748201439, y: 2.82352941176471, size: 1 },\r\n // { x: 279.712230215827, y: 2.70588235294118, size: 1 },\r\n // { x: 280.359712230216, y: 3.52941176470588, size: 1 },\r\n // { x: 281.654676258993, y: 3.37254901960784, size: 1 },\r\n // { x: 284.244604316547, y: 3.56862745098039, size: 1 },\r\n // { x: 286.834532374101, y: 3.33333333333333, size: 1 },\r\n // { x: 288.776978417266, y: 3.33333333333333, size: 1 },\r\n // { x: 292.014388489209, y: 3.2156862745098, size: 1 },\r\n // { x: 295.89928057554, y: 3.33333333333333, size: 1 },\r\n // { x: 296.546762589928, y: 3.2156862745098, size: 1 },\r\n // { x: 297.194244604317, y: 3.37254901960784, size: 1 },\r\n // { x: 300.431654676259, y: 3.09803921568627, size: 1 },\r\n // { x: 304.31654676259, y: 3.80392156862745, size: 1 },\r\n // { x: 310.143884892086, y: 3.80392156862745, size: 1 },\r\n // { x: 322.446043165468, y: 2.98039215686275, size: 1 },\r\n // { x: 327.625899280576, y: 3.92156862745098, size: 1 },\r\n // { x: 332.158273381295, y: 3.76470588235294, size: 1 },\r\n // { x: 335.395683453237, y: 3.92156862745098, size: 1 },\r\n // { x: 343.165467625899, y: 3.09803921568627, size: 1 },\r\n // { x: 343.812949640288, y: 2.86274509803922, size: 1 },\r\n // { x: 344.460431654676, y: 2.58823529411765, size: 1 },\r\n // { x: 351.58273381295, y: 4, size: 1 },\r\n // { x: 354.172661870504, y: 3.84313725490196, size: 1 },\r\n // { x: 359.352517985611, y: 3.84313725490196, size: 1 },\r\n // { x: 1.2972972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 5.18918918918919, y: 3.49019607843137, size: 1 },\r\n // { x: 5.83783783783784, y: 3.37254901960784, size: 1 },\r\n // { x: 9.08108108108108, y: 3.41176470588235, size: 1 },\r\n // { x: 9.72972972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 12.3243243243243, y: 3.29411764705882, size: 1 },\r\n // { x: 12.972972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 13.6216216216216, y: 3.49019607843137, size: 1 },\r\n // { x: 14.2702702702703, y: 3.49019607843137, size: 1 },\r\n // { x: 18.1621621621622, y: 3.6078431372549, size: 1 },\r\n // { x: 18.8108108108108, y: 3.37254901960784, size: 1 },\r\n // { x: 19.4594594594595, y: 3.52941176470588, size: 1 },\r\n // { x: 20.1081081081081, y: 3.37254901960784, size: 1 },\r\n // { x: 20.7567567567568, y: 3.6078431372549, size: 1 },\r\n // { x: 21.4054054054054, y: 3.52941176470588, size: 1 },\r\n // { x: 22.7027027027027, y: 3.49019607843137, size: 1 },\r\n // { x: 25.9459459459459, y: 3.41176470588235, size: 1 },\r\n // { x: 26.5945945945946, y: 3.25490196078431, size: 1 },\r\n // { x: 27.2432432432432, y: 3.45098039215686, size: 1 },\r\n // { x: 27.8918918918919, y: 3.49019607843137, size: 1 },\r\n // { x: 31.1351351351351, y: 3.84313725490196, size: 1 },\r\n // { x: 31.7837837837838, y: 3.56862745098039, size: 1 },\r\n // { x: 33.0810810810811, y: 3.64705882352941, size: 1 },\r\n // { x: 34.3783783783784, y: 3.56862745098039, size: 1 },\r\n // { x: 35.027027027027, y: 3.88235294117647, size: 1 },\r\n // { x: 36.3243243243243, y: 3.56862745098039, size: 1 },\r\n // { x: 36.972972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 40.2162162162162, y: 3.64705882352941, size: 1 },\r\n // { x: 41.5135135135135, y: 3.49019607843137, size: 1 },\r\n // { x: 42.1621621621622, y: 3.56862745098039, size: 1 },\r\n // { x: 44.7567567567568, y: 3.72549019607843, size: 1 },\r\n // { x: 45.4054054054054, y: 3.84313725490196, size: 1 },\r\n // { x: 46.0540540540541, y: 3.80392156862745, size: 1 },\r\n // { x: 47.3513513513514, y: 3.17647058823529, size: 1 },\r\n // { x: 48.6486486486486, y: 3.09803921568627, size: 1 },\r\n // { x: 49.2972972972973, y: 3.09803921568627, size: 1 },\r\n // { x: 50.5945945945946, y: 3.41176470588235, size: 1 },\r\n // { x: 51.2432432432432, y: 3.68627450980392, size: 1 },\r\n // { x: 52.5405405405405, y: 3.52941176470588, size: 1 },\r\n // { x: 54.4864864864865, y: 3.52941176470588, size: 1 },\r\n // { x: 60.972972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 63.5675675675676, y: 3.80392156862745, size: 1 },\r\n // { x: 64.2162162162162, y: 3.56862745098039, size: 1 },\r\n // { x: 64.8648648648649, y: 3.56862745098039, size: 1 },\r\n // { x: 66.1621621621622, y: 3.49019607843137, size: 1 },\r\n // { x: 70.054054054054, y: 2.82352941176471, size: 1 },\r\n // { x: 70.7027027027027, y: 3.09803921568627, size: 1 },\r\n // { x: 71.3513513513514, y: 3.64705882352941, size: 1 },\r\n // { x: 72.6486486486486, y: 3.92156862745098, size: 1 },\r\n // { x: 73.2972972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 73.945945945946, y: 3.72549019607843, size: 1 },\r\n // { x: 75.2432432432432, y: 3.76470588235294, size: 1 },\r\n // { x: 75.8918918918919, y: 3.64705882352941, size: 1 },\r\n // { x: 79.7837837837838, y: 3.72549019607843, size: 1 },\r\n // { x: 82.3783783783784, y: 3.76470588235294, size: 1 },\r\n // { x: 84.972972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 88.8648648648649, y: 3.64705882352941, size: 1 },\r\n // { x: 90.1621621621622, y: 3.37254901960784, size: 1 },\r\n // { x: 90.8108108108108, y: 3.25490196078431, size: 1 },\r\n // { x: 92.7567567567568, y: 3.45098039215686, size: 1 },\r\n // { x: 94.054054054054, y: 3.72549019607843, size: 1 },\r\n // { x: 94.7027027027027, y: 3.49019607843137, size: 1 },\r\n // { x: 95.3513513513514, y: 3.56862745098039, size: 1 },\r\n // { x: 96, y: 3.45098039215686, size: 1 },\r\n // { x: 98.5945945945946, y: 3.45098039215686, size: 1 },\r\n // { x: 101.837837837838, y: 4, size: 1 },\r\n // { x: 105.72972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 107.675675675676, y: 3.96078431372549, size: 1 },\r\n // { x: 108.324324324324, y: 3.49019607843137, size: 1 },\r\n // { x: 109.621621621622, y: 3.29411764705882, size: 1 },\r\n // { x: 111.567567567568, y: 3.2156862745098, size: 1 },\r\n // { x: 112.216216216216, y: 3.33333333333333, size: 1 },\r\n // { x: 112.864864864865, y: 3.29411764705882, size: 1 },\r\n // { x: 113.513513513514, y: 2.98039215686275, size: 1 },\r\n // { x: 114.162162162162, y: 2.86274509803922, size: 1 },\r\n // { x: 114.810810810811, y: 3.72549019607843, size: 1 },\r\n // { x: 115.459459459459, y: 3.72549019607843, size: 1 },\r\n // { x: 117.405405405405, y: 3.64705882352941, size: 1 },\r\n // { x: 118.054054054054, y: 3.84313725490196, size: 1 },\r\n // { x: 119.351351351351, y: 3.80392156862745, size: 1 },\r\n // { x: 120, y: 3.56862745098039, size: 1 },\r\n // { x: 120.648648648649, y: 3.84313725490196, size: 1 },\r\n // { x: 121.297297297297, y: 3.72549019607843, size: 1 },\r\n // { x: 123.891891891892, y: 3.84313725490196, size: 1 },\r\n // { x: 125.837837837838, y: 3.64705882352941, size: 1 },\r\n // { x: 127.135135135135, y: 3.84313725490196, size: 1 },\r\n // { x: 127.783783783784, y: 3.76470588235294, size: 1 },\r\n // { x: 128.432432432432, y: 3.84313725490196, size: 1 },\r\n // { x: 130.378378378378, y: 3.72549019607843, size: 1 },\r\n // { x: 132.324324324324, y: 3.52941176470588, size: 1 },\r\n // { x: 132.972972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 133.621621621622, y: 3.29411764705882, size: 1 },\r\n // { x: 134.27027027027, y: 3.37254901960784, size: 1 },\r\n // { x: 134.918918918919, y: 3.29411764705882, size: 1 },\r\n // { x: 135.567567567568, y: 3.2156862745098, size: 1 },\r\n // { x: 137.513513513514, y: 3.80392156862745, size: 1 },\r\n // { x: 138.162162162162, y: 3.45098039215686, size: 1 },\r\n // { x: 138.810810810811, y: 3.52941176470588, size: 1 },\r\n // { x: 140.756756756757, y: 3.68627450980392, size: 1 },\r\n // { x: 142.054054054054, y: 3.68627450980392, size: 1 },\r\n // { x: 142.702702702703, y: 3.64705882352941, size: 1 },\r\n // { x: 145.297297297297, y: 3.64705882352941, size: 1 },\r\n // { x: 145.945945945946, y: 3.52941176470588, size: 1 },\r\n // { x: 147.243243243243, y: 3.64705882352941, size: 1 },\r\n // { x: 147.891891891892, y: 3.6078431372549, size: 1 },\r\n // { x: 149.189189189189, y: 3.6078431372549, size: 1 },\r\n // { x: 149.837837837838, y: 3.64705882352941, size: 1 },\r\n // { x: 150.486486486486, y: 3.64705882352941, size: 1 },\r\n // { x: 152.432432432432, y: 3.45098039215686, size: 1 },\r\n // { x: 154.378378378378, y: 3.49019607843137, size: 1 },\r\n // { x: 156.324324324324, y: 3.13725490196078, size: 1 },\r\n // { x: 156.972972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 157.621621621622, y: 3.09803921568627, size: 1 },\r\n // { x: 158.918918918919, y: 3.68627450980392, size: 1 },\r\n // { x: 160.864864864865, y: 3.29411764705882, size: 1 },\r\n // { x: 162.162162162162, y: 3.6078431372549, size: 1 },\r\n // { x: 162.810810810811, y: 3.41176470588235, size: 1 },\r\n // { x: 164.108108108108, y: 3.56862745098039, size: 1 },\r\n // { x: 164.756756756757, y: 3.52941176470588, size: 1 },\r\n // { x: 167.351351351351, y: 3.45098039215686, size: 1 },\r\n // { x: 168.648648648649, y: 3.45098039215686, size: 1 },\r\n // { x: 170.594594594595, y: 3.41176470588235, size: 1 },\r\n // { x: 173.189189189189, y: 3.64705882352941, size: 1 },\r\n // { x: 173.837837837838, y: 3.41176470588235, size: 1 },\r\n // { x: 175.135135135135, y: 3.37254901960784, size: 1 },\r\n // { x: 175.783783783784, y: 3.37254901960784, size: 1 },\r\n // { x: 176.432432432432, y: 3.45098039215686, size: 1 },\r\n // { x: 177.081081081081, y: 3.56862745098039, size: 1 },\r\n // { x: 178.378378378378, y: 3.2156862745098, size: 1 },\r\n // { x: 179.027027027027, y: 3.45098039215686, size: 1 },\r\n // { x: 180.324324324324, y: 3.80392156862745, size: 1 },\r\n // { x: 180.972972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 182.27027027027, y: 3.80392156862745, size: 1 },\r\n // { x: 186.162162162162, y: 3.76470588235294, size: 1 },\r\n // { x: 186.810810810811, y: 3.76470588235294, size: 1 },\r\n // { x: 187.459459459459, y: 3.76470588235294, size: 1 },\r\n // { x: 188.756756756757, y: 3.80392156862745, size: 1 },\r\n // { x: 190.702702702703, y: 3.72549019607843, size: 1 },\r\n // { x: 192.648648648649, y: 3.80392156862745, size: 1 },\r\n // { x: 193.297297297297, y: 3.64705882352941, size: 1 },\r\n // { x: 193.945945945946, y: 3.76470588235294, size: 1 },\r\n // { x: 195.243243243243, y: 4, size: 1 },\r\n // { x: 196.540540540541, y: 3.64705882352941, size: 1 },\r\n // { x: 197.837837837838, y: 3.56862745098039, size: 1 },\r\n // { x: 198.486486486486, y: 3.41176470588235, size: 1 },\r\n // { x: 199.135135135135, y: 3.29411764705882, size: 1 },\r\n // { x: 199.783783783784, y: 2.74509803921569, size: 1 },\r\n // { x: 200.432432432432, y: 2.62745098039216, size: 1 },\r\n // { x: 201.72972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 203.027027027027, y: 3.52941176470588, size: 1 },\r\n // { x: 204.324324324324, y: 3.96078431372549, size: 1 },\r\n // { x: 205.621621621622, y: 3.56862745098039, size: 1 },\r\n // { x: 207.567567567568, y: 3.56862745098039, size: 1 },\r\n // { x: 208.216216216216, y: 3.76470588235294, size: 1 },\r\n // { x: 208.864864864865, y: 3.6078431372549, size: 1 },\r\n // { x: 209.513513513514, y: 3.80392156862745, size: 1 },\r\n // { x: 214.702702702703, y: 3.72549019607843, size: 1 },\r\n // { x: 215.351351351351, y: 3.68627450980392, size: 1 },\r\n // { x: 216, y: 3.88235294117647, size: 1 },\r\n // { x: 217.945945945946, y: 3.76470588235294, size: 1 },\r\n // { x: 218.594594594595, y: 3.92156862745098, size: 1 },\r\n // { x: 223.783783783784, y: 3.49019607843137, size: 1 },\r\n // { x: 227.675675675676, y: 3.41176470588235, size: 1 },\r\n // { x: 228.324324324324, y: 3.72549019607843, size: 1 },\r\n // { x: 230.918918918919, y: 3.64705882352941, size: 1 },\r\n // { x: 231.567567567568, y: 3.64705882352941, size: 1 },\r\n // { x: 233.513513513514, y: 3.6078431372549, size: 1 },\r\n // { x: 234.162162162162, y: 3.68627450980392, size: 1 },\r\n // { x: 235.459459459459, y: 3.56862745098039, size: 1 },\r\n // { x: 237.405405405405, y: 3.68627450980392, size: 1 },\r\n // { x: 238.702702702703, y: 3.64705882352941, size: 1 },\r\n // { x: 239.351351351351, y: 3.92156862745098, size: 1 },\r\n // { x: 242.594594594595, y: 3.49019607843137, size: 1 },\r\n // { x: 243.243243243243, y: 3.13725490196078, size: 1 },\r\n // { x: 243.891891891892, y: 3.17647058823529, size: 1 },\r\n // { x: 245.189189189189, y: 3.76470588235294, size: 1 },\r\n // { x: 247.135135135135, y: 3.45098039215686, size: 1 },\r\n // { x: 249.72972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 251.027027027027, y: 3.72549019607843, size: 1 },\r\n // { x: 252.324324324324, y: 3.72549019607843, size: 1 },\r\n // { x: 254.27027027027, y: 3.56862745098039, size: 1 },\r\n // { x: 256.216216216216, y: 3.64705882352941, size: 1 },\r\n // { x: 262.054054054054, y: 3.76470588235294, size: 1 },\r\n // { x: 262.702702702703, y: 3.68627450980392, size: 1 },\r\n // { x: 263.351351351351, y: 3.41176470588235, size: 1 },\r\n // { x: 264.648648648649, y: 3.52941176470588, size: 1 },\r\n // { x: 265.297297297297, y: 3.37254901960784, size: 1 },\r\n // { x: 269.189189189189, y: 3.76470588235294, size: 1 },\r\n // { x: 272.432432432432, y: 3.76470588235294, size: 1 },\r\n // { x: 275.027027027027, y: 3.84313725490196, size: 1 },\r\n // { x: 278.27027027027, y: 3.72549019607843, size: 1 },\r\n // { x: 278.918918918919, y: 3.72549019607843, size: 1 },\r\n // { x: 279.567567567568, y: 3.52941176470588, size: 1 },\r\n // { x: 280.216216216216, y: 3.80392156862745, size: 1 },\r\n // { x: 280.864864864865, y: 3.84313725490196, size: 1 },\r\n // { x: 282.162162162162, y: 3.96078431372549, size: 1 },\r\n // { x: 282.810810810811, y: 3.6078431372549, size: 1 },\r\n // { x: 284.108108108108, y: 3.92156862745098, size: 1 },\r\n // { x: 286.054054054054, y: 3.37254901960784, size: 1 },\r\n // { x: 286.702702702703, y: 3.2156862745098, size: 1 },\r\n // { x: 287.351351351351, y: 3.29411764705882, size: 1 },\r\n // { x: 288.648648648649, y: 3.84313725490196, size: 1 },\r\n // { x: 289.945945945946, y: 3.84313725490196, size: 1 },\r\n // { x: 291.243243243243, y: 3.6078431372549, size: 1 },\r\n // { x: 292.540540540541, y: 3.64705882352941, size: 1 },\r\n // { x: 293.189189189189, y: 3.68627450980392, size: 1 },\r\n // { x: 293.837837837838, y: 3.76470588235294, size: 1 },\r\n // { x: 297.081081081081, y: 3.84313725490196, size: 1 },\r\n // { x: 298.378378378378, y: 3.92156862745098, size: 1 },\r\n // { x: 300.972972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 302.918918918919, y: 3.68627450980392, size: 1 },\r\n // { x: 303.567567567568, y: 3.45098039215686, size: 1 },\r\n // { x: 304.216216216216, y: 3.76470588235294, size: 1 },\r\n // { x: 304.864864864865, y: 3.80392156862745, size: 1 },\r\n // { x: 308.108108108108, y: 3.33333333333333, size: 1 },\r\n // { x: 308.756756756757, y: 3.33333333333333, size: 1 },\r\n // { x: 311.351351351351, y: 3.68627450980392, size: 1 },\r\n // { x: 312.648648648649, y: 3.6078431372549, size: 1 },\r\n // { x: 313.297297297297, y: 3.80392156862745, size: 1 },\r\n // { x: 313.945945945946, y: 3.64705882352941, size: 1 },\r\n // { x: 314.594594594595, y: 3.6078431372549, size: 1 },\r\n // { x: 315.243243243243, y: 3.68627450980392, size: 1 },\r\n // { x: 317.189189189189, y: 3.52941176470588, size: 1 },\r\n // { x: 319.135135135135, y: 3.80392156862745, size: 1 },\r\n // { x: 319.783783783784, y: 3.72549019607843, size: 1 },\r\n // { x: 320.432432432432, y: 3.72549019607843, size: 1 },\r\n // { x: 321.081081081081, y: 3.80392156862745, size: 1 },\r\n // { x: 323.027027027027, y: 3.76470588235294, size: 1 },\r\n // { x: 326.918918918919, y: 3.76470588235294, size: 1 },\r\n // { x: 327.567567567568, y: 3.72549019607843, size: 1 },\r\n // { x: 328.216216216216, y: 3.33333333333333, size: 1 },\r\n // { x: 329.513513513513, y: 3.17647058823529, size: 1 },\r\n // { x: 330.162162162162, y: 3.29411764705882, size: 1 },\r\n // { x: 332.108108108108, y: 3.68627450980392, size: 1 },\r\n // { x: 334.702702702703, y: 3.76470588235294, size: 1 },\r\n // { x: 335.351351351351, y: 3.52941176470588, size: 1 },\r\n // { x: 336, y: 3.52941176470588, size: 1 },\r\n // { x: 337.297297297297, y: 3.68627450980392, size: 1 },\r\n // { x: 339.243243243243, y: 3.84313725490196, size: 1 },\r\n // { x: 339.891891891892, y: 3.88235294117647, size: 1 },\r\n // { x: 340.540540540541, y: 3.56862745098039, size: 1 },\r\n // { x: 341.189189189189, y: 3.56862745098039, size: 1 },\r\n // { x: 341.837837837838, y: 3.41176470588235, size: 1 },\r\n // { x: 343.783783783784, y: 3.68627450980392, size: 1 },\r\n // { x: 344.432432432432, y: 3.80392156862745, size: 1 },\r\n // { x: 345.72972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 346.378378378378, y: 3.84313725490196, size: 1 },\r\n // { x: 348.324324324324, y: 3.52941176470588, size: 1 },\r\n // { x: 348.972972972973, y: 3.92156862745098, size: 1 },\r\n // { x: 349.621621621622, y: 3.37254901960784, size: 1 },\r\n // { x: 350.27027027027, y: 3.25490196078431, size: 1 },\r\n // { x: 351.567567567568, y: 3.17647058823529, size: 1 },\r\n // { x: 352.216216216216, y: 3.52941176470588, size: 1 },\r\n // { x: 353.513513513513, y: 3.68627450980392, size: 1 },\r\n // { x: 358.702702702703, y: 3.76470588235294, size: 1 },\r\n // { x: 359.351351351351, y: 3.49019607843137, size: 1 },\r\n // { x: 13.5971223021583, y: 3.17647058823529, size: 1 },\r\n // { x: 21.3669064748201, y: 3.64705882352941, size: 1 },\r\n // { x: 33.0215827338129, y: 3.13725490196078, size: 1 },\r\n // { x: 34.3165467625899, y: 3.01960784313725, size: 1 },\r\n // { x: 50.5035971223022, y: 3.72549019607843, size: 1 },\r\n // { x: 52.4460431654676, y: 4.03921568627451, size: 1 },\r\n // { x: 53.7410071942446, y: 3.68627450980392, size: 1 },\r\n // { x: 55.6834532374101, y: 3.13725490196078, size: 1 },\r\n // { x: 56.3309352517986, y: 2.98039215686275, size: 1 },\r\n // { x: 59.568345323741, y: 4.03921568627451, size: 1 },\r\n // { x: 65.3956834532374, y: 3.84313725490196, size: 1 },\r\n // { x: 77.6978417266187, y: 2.86274509803922, size: 1 },\r\n // { x: 78.3453237410072, y: 2.66666666666667, size: 1 },\r\n // { x: 99.0647482014388, y: 3.33333333333333, size: 1 },\r\n // { x: 100.359712230216, y: 3.88235294117647, size: 1 },\r\n // { x: 101.007194244604, y: 3.84313725490196, size: 1 },\r\n // { x: 108.776978417266, y: 3.88235294117647, size: 1 },\r\n // { x: 114.604316546763, y: 3.96078431372549, size: 1 },\r\n // { x: 116.546762589928, y: 3.64705882352941, size: 1 },\r\n // { x: 119.784172661871, y: 3.37254901960784, size: 1 },\r\n // { x: 120.431654676259, y: 3.41176470588235, size: 1 },\r\n // { x: 121.079136690647, y: 3.01960784313725, size: 1 },\r\n // { x: 125.611510791367, y: 3.80392156862745, size: 1 },\r\n // { x: 128.201438848921, y: 3.41176470588235, size: 1 },\r\n // { x: 137.913669064748, y: 3.88235294117647, size: 1 },\r\n // { x: 141.151079136691, y: 3.25490196078431, size: 1 },\r\n // { x: 142.446043165468, y: 2.3921568627451, size: 1 },\r\n // { x: 143.093525179856, y: 2.54901960784314, size: 1 },\r\n // { x: 148.273381294964, y: 4.03921568627451, size: 1 },\r\n // { x: 148.920863309353, y: 3.96078431372549, size: 1 },\r\n // { x: 150.215827338129, y: 3.88235294117647, size: 1 },\r\n // { x: 150.863309352518, y: 3.80392156862745, size: 1 },\r\n // { x: 152.805755395683, y: 3.88235294117647, size: 1 },\r\n // { x: 155.395683453237, y: 4.07843137254902, size: 1 },\r\n // { x: 156.043165467626, y: 3.92156862745098, size: 1 },\r\n // { x: 157.338129496403, y: 4.07843137254902, size: 1 },\r\n // { x: 159.280575539568, y: 4.03921568627451, size: 1 },\r\n // { x: 159.928057553957, y: 3.92156862745098, size: 1 },\r\n // { x: 160.575539568345, y: 3.84313725490196, size: 1 },\r\n // { x: 163.165467625899, y: 3.25490196078431, size: 1 },\r\n // { x: 163.812949640288, y: 3.09803921568627, size: 1 },\r\n // { x: 164.460431654676, y: 3.01960784313725, size: 1 },\r\n // { x: 167.05035971223, y: 3.76470588235294, size: 1 },\r\n // { x: 171.58273381295, y: 3.96078431372549, size: 1 },\r\n // { x: 172.230215827338, y: 3.72549019607843, size: 1 },\r\n // { x: 185.179856115108, y: 3.33333333333333, size: 1 },\r\n // { x: 186.474820143885, y: 3.84313725490196, size: 1 },\r\n // { x: 201.36690647482, y: 3.92156862745098, size: 1 },\r\n // { x: 206.546762589928, y: 3.29411764705882, size: 1 },\r\n // { x: 207.194244604317, y: 2.27450980392157, size: 1 },\r\n // { x: 207.841726618705, y: 2.50980392156863, size: 1 },\r\n // { x: 210.431654676259, y: 4.03921568627451, size: 1 },\r\n // { x: 211.726618705036, y: 3.96078431372549, size: 1 },\r\n // { x: 212.374100719424, y: 3.88235294117647, size: 1 },\r\n // { x: 213.021582733813, y: 4.31372549019608, size: 1 },\r\n // { x: 213.669064748201, y: 4.03921568627451, size: 1 },\r\n // { x: 214.31654676259, y: 4, size: 1 },\r\n // { x: 214.964028776978, y: 3.92156862745098, size: 1 },\r\n // { x: 215.611510791367, y: 3.92156862745098, size: 1 },\r\n // { x: 216.906474820144, y: 3.92156862745098, size: 1 },\r\n // { x: 218.201438848921, y: 3.92156862745098, size: 1 },\r\n // { x: 218.848920863309, y: 4, size: 1 },\r\n // { x: 219.496402877698, y: 4.23529411764706, size: 1 },\r\n // { x: 220.791366906475, y: 3.88235294117647, size: 1 },\r\n // { x: 222.086330935252, y: 4.19607843137255, size: 1 },\r\n // { x: 222.73381294964, y: 3.80392156862745, size: 1 },\r\n // { x: 223.381294964029, y: 3.84313725490196, size: 1 },\r\n // { x: 224.028776978417, y: 3.96078431372549, size: 1 },\r\n // { x: 224.676258992806, y: 3.92156862745098, size: 1 },\r\n // { x: 225.323741007194, y: 4.07843137254902, size: 1 },\r\n // { x: 225.971223021583, y: 3.96078431372549, size: 1 },\r\n // { x: 226.618705035971, y: 3.88235294117647, size: 1 },\r\n // { x: 227.26618705036, y: 3.72549019607843, size: 1 },\r\n // { x: 231.151079136691, y: 3.92156862745098, size: 1 },\r\n // { x: 233.741007194245, y: 3.84313725490196, size: 1 },\r\n // { x: 235.035971223022, y: 4.11764705882353, size: 1 },\r\n // { x: 235.68345323741, y: 4.11764705882353, size: 1 },\r\n // { x: 236.330935251799, y: 4.07843137254902, size: 1 },\r\n // { x: 238.920863309353, y: 4.03921568627451, size: 1 },\r\n // { x: 240.215827338129, y: 3.68627450980392, size: 1 },\r\n // { x: 248.63309352518, y: 3.33333333333333, size: 1 },\r\n // { x: 250.575539568345, y: 3.25490196078431, size: 1 },\r\n // { x: 259.640287769784, y: 3.92156862745098, size: 1 },\r\n // { x: 260.287769784173, y: 3.88235294117647, size: 1 },\r\n // { x: 261.58273381295, y: 3.52941176470588, size: 1 },\r\n // { x: 267.410071942446, y: 3.92156862745098, size: 1 },\r\n // { x: 271.294964028777, y: 3.09803921568627, size: 1 },\r\n // { x: 271.942446043165, y: 2.70588235294118, size: 1 },\r\n // { x: 272.589928057554, y: 2.66666666666667, size: 1 },\r\n // { x: 279.064748201439, y: 4, size: 1 },\r\n // { x: 293.309352517986, y: 3.09803921568627, size: 1 },\r\n // { x: 293.956834532374, y: 3.2156862745098, size: 1 },\r\n // { x: 306.258992805755, y: 3.96078431372549, size: 1 },\r\n // { x: 314.676258992806, y: 3.13725490196078, size: 1 },\r\n // { x: 315.323741007194, y: 3.13725490196078, size: 1 },\r\n // { x: 315.971223021583, y: 3.25490196078431, size: 1 },\r\n // { x: 332.805755395683, y: 3.45098039215686, size: 1 },\r\n // { x: 339.928057553957, y: 3.68627450980392, size: 1 },\r\n // { x: 356.762589928058, y: 3.41176470588235, size: 1 },\r\n // { x: 358.705035971223, y: 3.25490196078431, size: 1 },\r\n // { x: 9.06474820143885, y: 3.76470588235294, size: 1 },\r\n // { x: 11.6546762589928, y: 3.33333333333333, size: 1 },\r\n // { x: 14.2446043165468, y: 4, size: 1 },\r\n // { x: 19.4244604316547, y: 3.45098039215686, size: 1 },\r\n // { x: 20.0719424460432, y: 3.29411764705882, size: 1 },\r\n // { x: 24.6043165467626, y: 3.84313725490196, size: 1 },\r\n // { x: 29.7841726618705, y: 3.76470588235294, size: 1 },\r\n // { x: 38.2014388489209, y: 3.52941176470588, size: 1 },\r\n // { x: 41.4388489208633, y: 3.25490196078431, size: 1 },\r\n // { x: 45.9712230215827, y: 3.96078431372549, size: 1 },\r\n // { x: 49.2086330935252, y: 3.96078431372549, size: 1 },\r\n // { x: 49.8561151079137, y: 4.15686274509804, size: 1 },\r\n // { x: 55.0359712230216, y: 3.84313725490196, size: 1 },\r\n // { x: 62.8057553956835, y: 2.82352941176471, size: 1 },\r\n // { x: 63.4532374100719, y: 3.09803921568627, size: 1 },\r\n // { x: 64.7482014388489, y: 3.37254901960784, size: 1 },\r\n // { x: 83.5251798561151, y: 3.09803921568627, size: 1 },\r\n // { x: 84.1726618705036, y: 3.33333333333333, size: 1 },\r\n // { x: 85.4676258992806, y: 3.2156862745098, size: 1 },\r\n // { x: 102.302158273381, y: 3.41176470588235, size: 1 },\r\n // { x: 102.94964028777, y: 3.33333333333333, size: 1 },\r\n // { x: 103.597122302158, y: 3.49019607843137, size: 1 },\r\n // { x: 106.187050359712, y: 2.86274509803922, size: 1 },\r\n // { x: 106.834532374101, y: 2.50980392156863, size: 1 },\r\n // { x: 107.482014388489, y: 3.49019607843137, size: 1 },\r\n // { x: 115.89928057554, y: 3.80392156862745, size: 1 },\r\n // { x: 117.194244604317, y: 3.41176470588235, size: 1 },\r\n // { x: 127.553956834532, y: 2.62745098039216, size: 1 },\r\n // { x: 128.201438848921, y: 2.35294117647059, size: 1 },\r\n // { x: 128.848920863309, y: 3.49019607843137, size: 1 },\r\n // { x: 135.971223021583, y: 3.84313725490196, size: 1 },\r\n // { x: 143.093525179856, y: 3.80392156862745, size: 1 },\r\n // { x: 148.920863309353, y: 3.88235294117647, size: 1 },\r\n // { x: 149.568345323741, y: 2.94117647058824, size: 1 },\r\n // { x: 154.10071942446, y: 3.76470588235294, size: 1 },\r\n // { x: 159.280575539568, y: 3.88235294117647, size: 1 },\r\n // { x: 169.640287769784, y: 3.37254901960784, size: 1 },\r\n // { x: 172.230215827338, y: 3.41176470588235, size: 1 },\r\n // { x: 181.942446043165, y: 3.88235294117647, size: 1 },\r\n // { x: 191.007194244604, y: 3.13725490196078, size: 1 },\r\n // { x: 191.654676258993, y: 3.09803921568627, size: 1 },\r\n // { x: 192.302158273381, y: 2.66666666666667, size: 1 },\r\n // { x: 192.94964028777, y: 1.76470588235294, size: 1 },\r\n // { x: 194.892086330935, y: 4, size: 1 },\r\n // { x: 198.129496402878, y: 3.6078431372549, size: 1 },\r\n // { x: 202.014388489209, y: 3.76470588235294, size: 1 },\r\n // { x: 203.309352517986, y: 3.88235294117647, size: 1 },\r\n // { x: 206.546762589928, y: 3.56862745098039, size: 1 },\r\n // { x: 218.201438848921, y: 3.76470588235294, size: 1 },\r\n // { x: 232.446043165468, y: 3.80392156862745, size: 1 },\r\n // { x: 257.05035971223, y: 3.41176470588235, size: 1 },\r\n // { x: 270, y: 3.76470588235294, size: 1 },\r\n // { x: 277.769784172662, y: 3.13725490196078, size: 1 },\r\n // { x: 279.064748201439, y: 3.80392156862745, size: 1 },\r\n // { x: 281.007194244604, y: 3.37254901960784, size: 1 },\r\n // { x: 290.719424460432, y: 3.25490196078431, size: 1 },\r\n // { x: 292.014388489209, y: 3.52941176470588, size: 1 },\r\n // { x: 293.956834532374, y: 3.84313725490196, size: 1 },\r\n // { x: 296.546762589928, y: 3.41176470588235, size: 1 },\r\n // { x: 303.021582733813, y: 3.76470588235294, size: 1 },\r\n // { x: 308.848920863309, y: 3.88235294117647, size: 1 },\r\n // { x: 315.323741007194, y: 3.68627450980392, size: 1 },\r\n // { x: 319.856115107914, y: 3.56862745098039, size: 1 },\r\n // { x: 320.503597122302, y: 3.25490196078431, size: 1 },\r\n // { x: 321.151079136691, y: 3.13725490196078, size: 1 },\r\n // { x: 321.798561151079, y: 2.86274509803922, size: 1 },\r\n // { x: 322.446043165468, y: 2.58823529411765, size: 1 },\r\n // { x: 331.510791366906, y: 3.92156862745098, size: 1 },\r\n // { x: 333.453237410072, y: 3.84313725490196, size: 1 },\r\n // { x: 334.10071942446, y: 3.92156862745098, size: 1 },\r\n // { x: 334.748201438849, y: 3.96078431372549, size: 1 },\r\n // { x: 336.043165467626, y: 3.6078431372549, size: 1 },\r\n // { x: 339.928057553957, y: 3.80392156862745, size: 1 },\r\n // { x: 343.812949640288, y: 3.80392156862745, size: 1 },\r\n // { x: 344.460431654676, y: 3.56862745098039, size: 1 },\r\n // { x: 350.935251798561, y: 3.33333333333333, size: 1 },\r\n // { x: 352.230215827338, y: 3.41176470588235, size: 1 },\r\n // { x: 354.820143884892, y: 3.41176470588235, size: 1 },\r\n // { x: 358.057553956835, y: 3.37254901960784, size: 1 },\r\n // { x: 1.29496402877698, y: 3.41176470588235, size: 1 },\r\n // { x: 4.53237410071942, y: 3.25490196078431, size: 1 },\r\n // { x: 5.8273381294964, y: 3.84313725490196, size: 1 },\r\n // { x: 18.7769784172662, y: 3.6078431372549, size: 1 },\r\n // { x: 35.6115107913669, y: 3.56862745098039, size: 1 },\r\n // { x: 42.7338129496403, y: 4.03921568627451, size: 1 },\r\n // { x: 58.273381294964, y: 3.92156862745098, size: 1 },\r\n // { x: 60.863309352518, y: 3.88235294117647, size: 1 },\r\n // { x: 95.8273381294964, y: 3.64705882352941, size: 1 },\r\n // { x: 97.1223021582734, y: 3.96078431372549, size: 1 },\r\n // { x: 104.892086330935, y: 3.96078431372549, size: 1 },\r\n // { x: 113.956834532374, y: 3.33333333333333, size: 1 },\r\n // { x: 117.194244604317, y: 3.96078431372549, size: 1 },\r\n // { x: 127.553956834532, y: 3.92156862745098, size: 1 },\r\n // { x: 134.676258992806, y: 3.37254901960784, size: 1 },\r\n // { x: 148.273381294964, y: 3.96078431372549, size: 1 },\r\n // { x: 154.10071942446, y: 3.45098039215686, size: 1 },\r\n // { x: 155.395683453237, y: 3.33333333333333, size: 1 },\r\n // { x: 156.043165467626, y: 3.2156862745098, size: 1 },\r\n // { x: 156.690647482014, y: 3.13725490196078, size: 1 },\r\n // { x: 169.640287769784, y: 3.49019607843137, size: 1 },\r\n // { x: 172.877697841727, y: 3.45098039215686, size: 1 },\r\n // { x: 176.115107913669, y: 3.25490196078431, size: 1 },\r\n // { x: 178.057553956835, y: 3.05882352941176, size: 1 },\r\n // { x: 189.712230215827, y: 3.84313725490196, size: 1 },\r\n // { x: 191.007194244604, y: 3.88235294117647, size: 1 },\r\n // { x: 197.482014388489, y: 3.41176470588235, size: 1 },\r\n // { x: 198.776978417266, y: 3.25490196078431, size: 1 },\r\n // { x: 199.424460431655, y: 2.54901960784314, size: 1 },\r\n // { x: 200.071942446043, y: 2.54901960784314, size: 1 },\r\n // { x: 200.719424460432, y: 3.88235294117647, size: 1 },\r\n // { x: 203.309352517986, y: 3.84313725490196, size: 1 },\r\n // { x: 203.956834532374, y: 3.84313725490196, size: 1 },\r\n // { x: 205.251798561151, y: 4, size: 1 },\r\n // { x: 206.546762589928, y: 4, size: 1 },\r\n // { x: 207.194244604317, y: 3.92156862745098, size: 1 },\r\n // { x: 207.841726618705, y: 3.80392156862745, size: 1 },\r\n // { x: 208.489208633094, y: 4, size: 1 },\r\n // { x: 209.136690647482, y: 3.96078431372549, size: 1 },\r\n // { x: 209.784172661871, y: 3.88235294117647, size: 1 },\r\n // { x: 210.431654676259, y: 4, size: 1 },\r\n // { x: 211.079136690647, y: 4, size: 1 },\r\n // { x: 213.021582733813, y: 3.84313725490196, size: 1 },\r\n // { x: 214.31654676259, y: 3.92156862745098, size: 1 },\r\n // { x: 214.964028776978, y: 3.80392156862745, size: 1 },\r\n // { x: 217.553956834532, y: 3.96078431372549, size: 1 },\r\n // { x: 218.201438848921, y: 3.80392156862745, size: 1 },\r\n // { x: 220.791366906475, y: 3.01960784313725, size: 1 },\r\n // { x: 221.438848920863, y: 3.13725490196078, size: 1 },\r\n // { x: 225.971223021583, y: 3.80392156862745, size: 1 },\r\n // { x: 241.510791366906, y: 3.33333333333333, size: 1 },\r\n // { x: 243.453237410072, y: 3.2156862745098, size: 1 },\r\n // { x: 260.935251798561, y: 3.80392156862745, size: 1 },\r\n // { x: 262.877697841727, y: 3.72549019607843, size: 1 },\r\n // { x: 264.172661870504, y: 3.25490196078431, size: 1 },\r\n // { x: 276.474820143885, y: 3.29411764705882, size: 1 },\r\n // { x: 285.539568345324, y: 3.01960784313725, size: 1 },\r\n // { x: 286.187050359712, y: 2.86274509803922, size: 1 },\r\n // { x: 286.834532374101, y: 3.37254901960784, size: 1 },\r\n // { x: 301.726618705036, y: 3.88235294117647, size: 1 },\r\n // { x: 306.906474820144, y: 3.2156862745098, size: 1 },\r\n // { x: 308.848920863309, y: 3.84313725490196, size: 1 },\r\n // { x: 315.971223021583, y: 3.80392156862745, size: 1 },\r\n // { x: 316.618705035971, y: 4.07843137254902, size: 1 },\r\n // { x: 318.561151079137, y: 3.84313725490196, size: 1 },\r\n // { x: 320.503597122302, y: 3.41176470588235, size: 1 },\r\n // { x: 328.273381294964, y: 3.41176470588235, size: 1 },\r\n // { x: 328.920863309353, y: 3.25490196078431, size: 1 },\r\n // { x: 337.338129496403, y: 3.33333333333333, size: 1 },\r\n // { x: 339.928057553957, y: 3.76470588235294, size: 1 },\r\n // { x: 348.992805755396, y: 3.29411764705882, size: 1 },\r\n // { x: 350.287769784173, y: 3.13725490196078, size: 1 },\r\n // { x: 350.935251798561, y: 3.13725490196078, size: 1 },\r\n // { x: 356.115107913669, y: 3.84313725490196, size: 1 },\r\n // { x: 357.410071942446, y: 3.92156862745098, size: 1 },\r\n // { x: 7.76978417266187, y: 3.33333333333333, size: 1 },\r\n // { x: 12.3021582733813, y: 3.05882352941176, size: 1 },\r\n // { x: 22.0143884892086, y: 4.03921568627451, size: 1 },\r\n // { x: 31.0791366906475, y: 3.41176470588235, size: 1 },\r\n // { x: 32.3741007194245, y: 3.29411764705882, size: 1 },\r\n // { x: 33.6690647482014, y: 3.01960784313725, size: 1 },\r\n // { x: 34.3165467625899, y: 3.29411764705882, size: 1 },\r\n // { x: 39.4964028776978, y: 3.6078431372549, size: 1 },\r\n // { x: 47.9136690647482, y: 3.52941176470588, size: 1 },\r\n // { x: 59.568345323741, y: 3.72549019607843, size: 1 },\r\n // { x: 62.8057553956835, y: 3.88235294117647, size: 1 },\r\n // { x: 71.2230215827338, y: 3.96078431372549, size: 1 },\r\n // { x: 73.1654676258993, y: 3.96078431372549, size: 1 },\r\n // { x: 82.2302158273381, y: 3.49019607843137, size: 1 },\r\n // { x: 86.1151079136691, y: 3.80392156862745, size: 1 },\r\n // { x: 88.705035971223, y: 3.41176470588235, size: 1 },\r\n // { x: 90, y: 3.37254901960784, size: 1 },\r\n // { x: 97.1223021582734, y: 3.29411764705882, size: 1 },\r\n // { x: 99.0647482014388, y: 2.94117647058824, size: 1 },\r\n // { x: 104.244604316547, y: 3.52941176470588, size: 1 },\r\n // { x: 112.661870503597, y: 3.56862745098039, size: 1 },\r\n // { x: 115.89928057554, y: 3.96078431372549, size: 1 },\r\n // { x: 118.489208633094, y: 3.41176470588235, size: 1 },\r\n // { x: 123.021582733813, y: 3.52941176470588, size: 1 },\r\n // { x: 140.503597122302, y: 3.33333333333333, size: 1 },\r\n // { x: 143.093525179856, y: 3.76470588235294, size: 1 },\r\n // { x: 147.625899280576, y: 4.07843137254902, size: 1 },\r\n // { x: 154.748201438849, y: 3.64705882352941, size: 1 },\r\n // { x: 162.517985611511, y: 3.41176470588235, size: 1 },\r\n // { x: 163.165467625899, y: 3.01960784313725, size: 1 },\r\n // { x: 164.460431654676, y: 3.33333333333333, size: 1 },\r\n // { x: 165.755395683453, y: 3.33333333333333, size: 1 },\r\n // { x: 168.992805755396, y: 4, size: 1 },\r\n // { x: 171.58273381295, y: 3.37254901960784, size: 1 },\r\n // { x: 179.352517985612, y: 3.41176470588235, size: 1 },\r\n // { x: 180, y: 3.33333333333333, size: 1 },\r\n // { x: 180.647482014388, y: 3.37254901960784, size: 1 },\r\n // { x: 184.532374100719, y: 3.01960784313725, size: 1 },\r\n // { x: 205.89928057554, y: 3.33333333333333, size: 1 },\r\n // { x: 206.546762589928, y: 3.01960784313725, size: 1 },\r\n // { x: 209.136690647482, y: 3.41176470588235, size: 1 },\r\n // { x: 211.079136690647, y: 3.64705882352941, size: 1 },\r\n // { x: 219.496402877698, y: 3.80392156862745, size: 1 },\r\n // { x: 222.73381294964, y: 3.41176470588235, size: 1 },\r\n // { x: 223.381294964029, y: 3.49019607843137, size: 1 },\r\n // { x: 231.151079136691, y: 3.45098039215686, size: 1 },\r\n // { x: 232.446043165468, y: 3.88235294117647, size: 1 },\r\n // { x: 245.395683453237, y: 3.49019607843137, size: 1 },\r\n // { x: 246.043165467626, y: 3.84313725490196, size: 1 },\r\n // { x: 253.812949640288, y: 3.33333333333333, size: 1 },\r\n // { x: 257.697841726619, y: 3.33333333333333, size: 1 },\r\n // { x: 263.525179856115, y: 3.84313725490196, size: 1 },\r\n // { x: 266.762589928058, y: 3.72549019607843, size: 1 },\r\n // { x: 279.712230215827, y: 3.88235294117647, size: 1 },\r\n // { x: 286.187050359712, y: 3.92156862745098, size: 1 },\r\n // { x: 294.604316546763, y: 3.96078431372549, size: 1 },\r\n // { x: 309.496402877698, y: 3.88235294117647, size: 1 },\r\n // { x: 314.676258992806, y: 3.01960784313725, size: 1 },\r\n // { x: 315.323741007194, y: 3.2156862745098, size: 1 },\r\n // { x: 316.618705035971, y: 3.41176470588235, size: 1 },\r\n // { x: 321.151079136691, y: 3.80392156862745, size: 1 },\r\n // { x: 333.453237410072, y: 3.80392156862745, size: 1 },\r\n // { x: 336.690647482014, y: 3.41176470588235, size: 1 },\r\n // { x: 356.115107913669, y: 3.37254901960784, size: 1 },\r\n // { x: 357.410071942446, y: 2.98039215686275, size: 1 },\r\n // { x: 358.057553956835, y: 3.17647058823529, size: 1 },\r\n // { x: 359.352517985611, y: 3.56862745098039, size: 1 },\r\n // { x: 0.648648648648649, y: 3.72549019607843, size: 1 },\r\n // { x: 2.59459459459459, y: 3.56862745098039, size: 1 },\r\n // { x: 3.24324324324324, y: 3.33333333333333, size: 1 },\r\n // { x: 3.89189189189189, y: 3.72549019607843, size: 1 },\r\n // { x: 5.18918918918919, y: 3.72549019607843, size: 1 },\r\n // { x: 7.78378378378378, y: 3.49019607843137, size: 1 },\r\n // { x: 12.972972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 16.8648648648649, y: 3.52941176470588, size: 1 },\r\n // { x: 20.1081081081081, y: 3.41176470588235, size: 1 },\r\n // { x: 22.7027027027027, y: 3.64705882352941, size: 1 },\r\n // { x: 23.3513513513514, y: 3.56862745098039, size: 1 },\r\n // { x: 24, y: 3.64705882352941, size: 1 },\r\n // { x: 24.6486486486486, y: 3.56862745098039, size: 1 },\r\n // { x: 26.5945945945946, y: 4.07843137254902, size: 1 },\r\n // { x: 27.2432432432432, y: 3.68627450980392, size: 1 },\r\n // { x: 30.4864864864865, y: 3.52941176470588, size: 1 },\r\n // { x: 31.7837837837838, y: 3.80392156862745, size: 1 },\r\n // { x: 32.4324324324324, y: 3.72549019607843, size: 1 },\r\n // { x: 35.6756756756757, y: 3.76470588235294, size: 1 },\r\n // { x: 37.6216216216216, y: 3.76470588235294, size: 1 },\r\n // { x: 38.2702702702703, y: 3.56862745098039, size: 1 },\r\n // { x: 38.9189189189189, y: 3.56862745098039, size: 1 },\r\n // { x: 39.5675675675676, y: 3.64705882352941, size: 1 },\r\n // { x: 40.2162162162162, y: 3.56862745098039, size: 1 },\r\n // { x: 42.1621621621622, y: 3.6078431372549, size: 1 },\r\n // { x: 43.4594594594595, y: 3.37254901960784, size: 1 },\r\n // { x: 44.7567567567568, y: 3.49019607843137, size: 1 },\r\n // { x: 48, y: 3.25490196078431, size: 1 },\r\n // { x: 48.6486486486486, y: 3.45098039215686, size: 1 },\r\n // { x: 54.4864864864865, y: 3.56862745098039, size: 1 },\r\n // { x: 55.7837837837838, y: 3.64705882352941, size: 1 },\r\n // { x: 56.4324324324324, y: 3.45098039215686, size: 1 },\r\n // { x: 57.7297297297297, y: 3.49019607843137, size: 1 },\r\n // { x: 60.3243243243243, y: 3.84313725490196, size: 1 },\r\n // { x: 61.6216216216216, y: 3.80392156862745, size: 1 },\r\n // { x: 62.2702702702703, y: 3.6078431372549, size: 1 },\r\n // { x: 62.9189189189189, y: 3.37254901960784, size: 1 },\r\n // { x: 64.2162162162162, y: 3.88235294117647, size: 1 },\r\n // { x: 66.1621621621622, y: 3.45098039215686, size: 1 },\r\n // { x: 66.8108108108108, y: 3.92156862745098, size: 1 },\r\n // { x: 73.945945945946, y: 3.45098039215686, size: 1 },\r\n // { x: 77.8378378378378, y: 3.52941176470588, size: 1 },\r\n // { x: 80.4324324324324, y: 3.68627450980392, size: 1 },\r\n // { x: 81.7297297297297, y: 3.76470588235294, size: 1 },\r\n // { x: 83.027027027027, y: 3.37254901960784, size: 1 },\r\n // { x: 83.6756756756757, y: 3.37254901960784, size: 1 },\r\n // { x: 84.3243243243243, y: 3.37254901960784, size: 1 },\r\n // { x: 84.972972972973, y: 3.05882352941176, size: 1 },\r\n // { x: 85.6216216216216, y: 2.70588235294118, size: 1 },\r\n // { x: 87.5675675675676, y: 3.84313725490196, size: 1 },\r\n // { x: 89.5135135135135, y: 3.64705882352941, size: 1 },\r\n // { x: 91.4594594594595, y: 3.68627450980392, size: 1 },\r\n // { x: 92.1081081081081, y: 3.56862745098039, size: 1 },\r\n // { x: 93.4054054054054, y: 3.64705882352941, size: 1 },\r\n // { x: 95.3513513513514, y: 4, size: 1 },\r\n // { x: 97.2972972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 97.945945945946, y: 3.64705882352941, size: 1 },\r\n // { x: 101.837837837838, y: 3.76470588235294, size: 1 },\r\n // { x: 102.486486486486, y: 3.56862745098039, size: 1 },\r\n // { x: 103.783783783784, y: 3.41176470588235, size: 1 },\r\n // { x: 105.72972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 106.378378378378, y: 3.05882352941176, size: 1 },\r\n // { x: 107.027027027027, y: 2.82352941176471, size: 1 },\r\n // { x: 107.675675675676, y: 3.25490196078431, size: 1 },\r\n // { x: 108.972972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 111.567567567568, y: 3.84313725490196, size: 1 },\r\n // { x: 112.216216216216, y: 3.76470588235294, size: 1 },\r\n // { x: 112.864864864865, y: 3.72549019607843, size: 1 },\r\n // { x: 113.513513513514, y: 3.76470588235294, size: 1 },\r\n // { x: 114.810810810811, y: 3.6078431372549, size: 1 },\r\n // { x: 116.756756756757, y: 3.6078431372549, size: 1 },\r\n // { x: 118.702702702703, y: 3.68627450980392, size: 1 },\r\n // { x: 120.648648648649, y: 3.52941176470588, size: 1 },\r\n // { x: 121.297297297297, y: 3.6078431372549, size: 1 },\r\n // { x: 121.945945945946, y: 4, size: 1 },\r\n // { x: 123.891891891892, y: 3.88235294117647, size: 1 },\r\n // { x: 128.432432432432, y: 3.49019607843137, size: 1 },\r\n // { x: 130.378378378378, y: 3.88235294117647, size: 1 },\r\n // { x: 131.027027027027, y: 3.45098039215686, size: 1 },\r\n // { x: 131.675675675676, y: 3.64705882352941, size: 1 },\r\n // { x: 132.324324324324, y: 3.72549019607843, size: 1 },\r\n // { x: 132.972972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 134.918918918919, y: 3.41176470588235, size: 1 },\r\n // { x: 136.864864864865, y: 3.64705882352941, size: 1 },\r\n // { x: 141.405405405405, y: 3.80392156862745, size: 1 },\r\n // { x: 142.702702702703, y: 3.52941176470588, size: 1 },\r\n // { x: 144.648648648649, y: 3.84313725490196, size: 1 },\r\n // { x: 151.783783783784, y: 3.72549019607843, size: 1 },\r\n // { x: 152.432432432432, y: 3.72549019607843, size: 1 },\r\n // { x: 154.378378378378, y: 3.72549019607843, size: 1 },\r\n // { x: 155.027027027027, y: 3.64705882352941, size: 1 },\r\n // { x: 155.675675675676, y: 3.76470588235294, size: 1 },\r\n // { x: 156.324324324324, y: 3.6078431372549, size: 1 },\r\n // { x: 156.972972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 164.108108108108, y: 3.88235294117647, size: 1 },\r\n // { x: 168, y: 3.72549019607843, size: 1 },\r\n // { x: 168.648648648649, y: 3.33333333333333, size: 1 },\r\n // { x: 169.945945945946, y: 3.01960784313725, size: 1 },\r\n // { x: 170.594594594595, y: 3.05882352941176, size: 1 },\r\n // { x: 171.243243243243, y: 2.98039215686275, size: 1 },\r\n // { x: 171.891891891892, y: 2.98039215686275, size: 1 },\r\n // { x: 172.540540540541, y: 2.98039215686275, size: 1 },\r\n // { x: 173.189189189189, y: 3.80392156862745, size: 1 },\r\n // { x: 174.486486486486, y: 3.80392156862745, size: 1 },\r\n // { x: 175.135135135135, y: 3.88235294117647, size: 1 },\r\n // { x: 175.783783783784, y: 3.72549019607843, size: 1 },\r\n // { x: 177.081081081081, y: 3.52941176470588, size: 1 },\r\n // { x: 177.72972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 178.378378378378, y: 3.52941176470588, size: 1 },\r\n // { x: 180.324324324324, y: 3.6078431372549, size: 1 },\r\n // { x: 180.972972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 182.918918918919, y: 3.76470588235294, size: 1 },\r\n // { x: 183.567567567568, y: 3.56862745098039, size: 1 },\r\n // { x: 184.216216216216, y: 3.76470588235294, size: 1 },\r\n // { x: 190.054054054054, y: 3.64705882352941, size: 1 },\r\n // { x: 190.702702702703, y: 3.25490196078431, size: 1 },\r\n // { x: 192, y: 3.33333333333333, size: 1 },\r\n // { x: 193.297297297297, y: 3.13725490196078, size: 1 },\r\n // { x: 198.486486486486, y: 3.49019607843137, size: 1 },\r\n // { x: 199.135135135135, y: 3.6078431372549, size: 1 },\r\n // { x: 199.783783783784, y: 3.6078431372549, size: 1 },\r\n // { x: 201.081081081081, y: 3.68627450980392, size: 1 },\r\n // { x: 203.027027027027, y: 3.6078431372549, size: 1 },\r\n // { x: 203.675675675676, y: 3.52941176470588, size: 1 },\r\n // { x: 205.621621621622, y: 3.52941176470588, size: 1 },\r\n // { x: 207.567567567568, y: 3.45098039215686, size: 1 },\r\n // { x: 209.513513513514, y: 3.45098039215686, size: 1 },\r\n // { x: 210.162162162162, y: 3.41176470588235, size: 1 },\r\n // { x: 210.810810810811, y: 3.52941176470588, size: 1 },\r\n // { x: 211.459459459459, y: 3.76470588235294, size: 1 },\r\n // { x: 214.702702702703, y: 3.49019607843137, size: 1 },\r\n // { x: 216, y: 3.49019607843137, size: 1 },\r\n // { x: 217.297297297297, y: 3.49019607843137, size: 1 },\r\n // { x: 217.945945945946, y: 3.6078431372549, size: 1 },\r\n // { x: 218.594594594595, y: 3.6078431372549, size: 1 },\r\n // { x: 219.243243243243, y: 3.6078431372549, size: 1 },\r\n // { x: 221.189189189189, y: 3.41176470588235, size: 1 },\r\n // { x: 225.72972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 227.027027027027, y: 3.6078431372549, size: 1 },\r\n // { x: 227.675675675676, y: 3.37254901960784, size: 1 },\r\n // { x: 228.324324324324, y: 3.41176470588235, size: 1 },\r\n // { x: 228.972972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 229.621621621622, y: 3.49019607843137, size: 1 },\r\n // { x: 231.567567567568, y: 3.45098039215686, size: 1 },\r\n // { x: 232.216216216216, y: 3.41176470588235, size: 1 },\r\n // { x: 234.162162162162, y: 3.64705882352941, size: 1 },\r\n // { x: 234.810810810811, y: 3.56862745098039, size: 1 },\r\n // { x: 235.459459459459, y: 3.72549019607843, size: 1 },\r\n // { x: 236.756756756757, y: 3.41176470588235, size: 1 },\r\n // { x: 240, y: 3.72549019607843, size: 1 },\r\n // { x: 240.648648648649, y: 3.52941176470588, size: 1 },\r\n // { x: 242.594594594595, y: 3.64705882352941, size: 1 },\r\n // { x: 243.243243243243, y: 3.45098039215686, size: 1 },\r\n // { x: 249.081081081081, y: 3.64705882352941, size: 1 },\r\n // { x: 251.675675675676, y: 3.72549019607843, size: 1 },\r\n // { x: 254.918918918919, y: 3.29411764705882, size: 1 },\r\n // { x: 256.216216216216, y: 3.49019607843137, size: 1 },\r\n // { x: 257.513513513513, y: 3.17647058823529, size: 1 },\r\n // { x: 258.162162162162, y: 3.09803921568627, size: 1 },\r\n // { x: 258.810810810811, y: 3.13725490196078, size: 1 },\r\n // { x: 260.108108108108, y: 3.52941176470588, size: 1 },\r\n // { x: 260.756756756757, y: 3.72549019607843, size: 1 },\r\n // { x: 262.702702702703, y: 3.56862745098039, size: 1 },\r\n // { x: 264, y: 3.52941176470588, size: 1 },\r\n // { x: 267.243243243243, y: 3.80392156862745, size: 1 },\r\n // { x: 269.189189189189, y: 3.68627450980392, size: 1 },\r\n // { x: 269.837837837838, y: 3.76470588235294, size: 1 },\r\n // { x: 271.783783783784, y: 3.76470588235294, size: 1 },\r\n // { x: 273.081081081081, y: 3.64705882352941, size: 1 },\r\n // { x: 273.72972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 275.675675675676, y: 3.72549019607843, size: 1 },\r\n // { x: 276.324324324324, y: 3.84313725490196, size: 1 },\r\n // { x: 276.972972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 277.621621621622, y: 3.72549019607843, size: 1 },\r\n // { x: 278.27027027027, y: 3.84313725490196, size: 1 },\r\n // { x: 279.567567567568, y: 3.33333333333333, size: 1 },\r\n // { x: 280.216216216216, y: 3.17647058823529, size: 1 },\r\n // { x: 282.810810810811, y: 3.72549019607843, size: 1 },\r\n // { x: 283.459459459459, y: 3.64705882352941, size: 1 },\r\n // { x: 287.351351351351, y: 3.76470588235294, size: 1 },\r\n // { x: 288, y: 3.88235294117647, size: 1 },\r\n // { x: 289.297297297297, y: 3.84313725490196, size: 1 },\r\n // { x: 292.540540540541, y: 3.92156862745098, size: 1 },\r\n // { x: 293.189189189189, y: 3.41176470588235, size: 1 },\r\n // { x: 296.432432432432, y: 3.72549019607843, size: 1 },\r\n // { x: 297.081081081081, y: 3.64705882352941, size: 1 },\r\n // { x: 297.72972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 298.378378378378, y: 3.29411764705882, size: 1 },\r\n // { x: 299.027027027027, y: 3.25490196078431, size: 1 },\r\n // { x: 300.324324324324, y: 3.17647058823529, size: 1 },\r\n // { x: 300.972972972973, y: 2.94117647058824, size: 1 },\r\n // { x: 301.621621621622, y: 2.70588235294118, size: 1 },\r\n // { x: 302.27027027027, y: 2.74509803921569, size: 1 },\r\n // { x: 302.918918918919, y: 3.41176470588235, size: 1 },\r\n // { x: 304.864864864865, y: 3.76470588235294, size: 1 },\r\n // { x: 305.513513513513, y: 3.72549019607843, size: 1 },\r\n // { x: 308.108108108108, y: 3.64705882352941, size: 1 },\r\n // { x: 309.405405405405, y: 4, size: 1 },\r\n // { x: 310.702702702703, y: 3.49019607843137, size: 1 },\r\n // { x: 312.648648648649, y: 3.56862745098039, size: 1 },\r\n // { x: 313.297297297297, y: 3.88235294117647, size: 1 },\r\n // { x: 314.594594594595, y: 3.41176470588235, size: 1 },\r\n // { x: 315.243243243243, y: 3.6078431372549, size: 1 },\r\n // { x: 315.891891891892, y: 3.84313725490196, size: 1 },\r\n // { x: 317.189189189189, y: 3.84313725490196, size: 1 },\r\n // { x: 317.837837837838, y: 3.56862745098039, size: 1 },\r\n // { x: 319.135135135135, y: 3.6078431372549, size: 1 },\r\n // { x: 321.081081081081, y: 3.29411764705882, size: 1 },\r\n // { x: 321.72972972973, y: 2.58823529411765, size: 1 },\r\n // { x: 322.378378378378, y: 2.58823529411765, size: 1 },\r\n // { x: 323.027027027027, y: 2.94117647058824, size: 1 },\r\n // { x: 323.675675675676, y: 3.01960784313725, size: 1 },\r\n // { x: 324.324324324324, y: 3.49019607843137, size: 1 },\r\n // { x: 326.27027027027, y: 3.80392156862745, size: 1 },\r\n // { x: 327.567567567568, y: 3.6078431372549, size: 1 },\r\n // { x: 328.216216216216, y: 3.56862745098039, size: 1 },\r\n // { x: 328.864864864865, y: 3.84313725490196, size: 1 },\r\n // { x: 330.162162162162, y: 3.80392156862745, size: 1 },\r\n // { x: 331.459459459459, y: 3.84313725490196, size: 1 },\r\n // { x: 339.891891891892, y: 3.72549019607843, size: 1 },\r\n // { x: 341.837837837838, y: 3.6078431372549, size: 1 },\r\n // { x: 343.135135135135, y: 3.33333333333333, size: 1 },\r\n // { x: 343.783783783784, y: 3.37254901960784, size: 1 },\r\n // { x: 344.432432432432, y: 3.68627450980392, size: 1 },\r\n // { x: 345.72972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 348.972972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 351.567567567568, y: 3.45098039215686, size: 1 },\r\n // { x: 354.162162162162, y: 3.52941176470588, size: 1 },\r\n // { x: 357.405405405405, y: 3.72549019607843, size: 1 },\r\n // { x: 358.702702702703, y: 3.84313725490196, size: 1 },\r\n // { x: 0.647482014388489, y: 3.41176470588235, size: 1 },\r\n // { x: 3.88489208633094, y: 3.92156862745098, size: 1 },\r\n // { x: 7.12230215827338, y: 3.45098039215686, size: 1 },\r\n // { x: 9.71223021582734, y: 3.64705882352941, size: 1 },\r\n // { x: 15.5395683453237, y: 3.80392156862745, size: 1 },\r\n // { x: 23.9568345323741, y: 3.37254901960784, size: 1 },\r\n // { x: 26.5467625899281, y: 3.13725490196078, size: 1 },\r\n // { x: 32.3741007194245, y: 3.49019607843137, size: 1 },\r\n // { x: 34.9640287769784, y: 3.49019607843137, size: 1 },\r\n // { x: 40.7913669064748, y: 3.92156862745098, size: 1 },\r\n // { x: 41.4388489208633, y: 3.80392156862745, size: 1 },\r\n // { x: 44.6762589928058, y: 3.96078431372549, size: 1 },\r\n // { x: 49.8561151079137, y: 3.41176470588235, size: 1 },\r\n // { x: 53.0935251798561, y: 3.64705882352941, size: 1 },\r\n // { x: 67.9856115107914, y: 3.88235294117647, size: 1 },\r\n // { x: 69.9280575539568, y: 3.17647058823529, size: 1 },\r\n // { x: 72.5179856115108, y: 3.45098039215686, size: 1 },\r\n // { x: 77.0503597122302, y: 3.76470588235294, size: 1 },\r\n // { x: 80.9352517985612, y: 3.6078431372549, size: 1 },\r\n // { x: 92.589928057554, y: 2.98039215686275, size: 1 },\r\n // { x: 93.2374100719424, y: 2.90196078431373, size: 1 },\r\n // { x: 98.4172661870504, y: 3.41176470588235, size: 1 },\r\n // { x: 101.007194244604, y: 3.6078431372549, size: 1 },\r\n // { x: 112.661870503597, y: 2.47058823529412, size: 1 },\r\n // { x: 113.309352517986, y: 2.31372549019608, size: 1 },\r\n // { x: 113.956834532374, y: 2.23529411764706, size: 1 },\r\n // { x: 114.604316546763, y: 2.70588235294118, size: 1 },\r\n // { x: 115.251798561151, y: 3.2156862745098, size: 1 },\r\n // { x: 115.89928057554, y: 3.49019607843137, size: 1 },\r\n // { x: 117.194244604317, y: 3.84313725490196, size: 1 },\r\n // { x: 118.489208633094, y: 4, size: 1 },\r\n // { x: 123.021582733813, y: 3.88235294117647, size: 1 },\r\n // { x: 126.258992805755, y: 3.76470588235294, size: 1 },\r\n // { x: 160.575539568345, y: 3.96078431372549, size: 1 },\r\n // { x: 176.115107913669, y: 3.45098039215686, size: 1 },\r\n // { x: 176.762589928058, y: 3.33333333333333, size: 1 },\r\n // { x: 177.410071942446, y: 3.17647058823529, size: 1 },\r\n // { x: 178.057553956835, y: 3.01960784313725, size: 1 },\r\n // { x: 181.294964028777, y: 3.88235294117647, size: 1 },\r\n // { x: 193.597122302158, y: 4.07843137254902, size: 1 },\r\n // { x: 195.539568345324, y: 3.84313725490196, size: 1 },\r\n // { x: 200.719424460432, y: 3.45098039215686, size: 1 },\r\n // { x: 203.956834532374, y: 3.41176470588235, size: 1 },\r\n // { x: 221.438848920863, y: 3.37254901960784, size: 1 },\r\n // { x: 234.388489208633, y: 3.41176470588235, size: 1 },\r\n // { x: 235.68345323741, y: 3.80392156862745, size: 1 },\r\n // { x: 238.273381294964, y: 3.41176470588235, size: 1 },\r\n // { x: 239.568345323741, y: 3.45098039215686, size: 1 },\r\n // { x: 241.510791366906, y: 3.29411764705882, size: 1 },\r\n // { x: 242.158273381295, y: 3.09803921568627, size: 1 },\r\n // { x: 256.402877697842, y: 3.52941176470588, size: 1 },\r\n // { x: 273.237410071942, y: 3.92156862745098, size: 1 },\r\n // { x: 284.244604316547, y: 3.45098039215686, size: 1 },\r\n // { x: 286.187050359712, y: 3.2156862745098, size: 1 },\r\n // { x: 288.129496402878, y: 3.96078431372549, size: 1 },\r\n // { x: 302.374100719424, y: 3.52941176470588, size: 1 },\r\n // { x: 306.906474820144, y: 3.13725490196078, size: 1 },\r\n // { x: 307.553956834532, y: 3.25490196078431, size: 1 },\r\n // { x: 310.143884892086, y: 3.45098039215686, size: 1 },\r\n // { x: 311.438848920863, y: 3.49019607843137, size: 1 },\r\n // { x: 322.446043165468, y: 3.92156862745098, size: 1 },\r\n // { x: 328.920863309353, y: 2.82352941176471, size: 1 },\r\n // { x: 329.568345323741, y: 3.25490196078431, size: 1 },\r\n // { x: 334.748201438849, y: 3.68627450980392, size: 1 },\r\n // { x: 348.992805755396, y: 3.84313725490196, size: 1 },\r\n // { x: 11.0071942446043, y: 3.09803921568627, size: 1 },\r\n // { x: 11.6546762589928, y: 1.72549019607843, size: 1 },\r\n // { x: 12.3021582733813, y: 0.666666666666667, size: 1 },\r\n // { x: 12.9496402877698, y: 0.509803921568627, size: 1 },\r\n // { x: 13.5971223021583, y: 0.901960784313726, size: 1 },\r\n // { x: 14.2446043165468, y: 3.09803921568627, size: 1 },\r\n // { x: 15.5395683453237, y: 3.45098039215686, size: 1 },\r\n // { x: 16.1870503597122, y: 3.05882352941176, size: 1 },\r\n // { x: 16.8345323741007, y: 2.90196078431373, size: 1 },\r\n // { x: 21.3669064748201, y: 2.94117647058824, size: 1 },\r\n // { x: 27.1942446043165, y: 2.74509803921569, size: 1 },\r\n // { x: 33.6690647482014, y: 2.94117647058824, size: 1 },\r\n // { x: 39.4964028776978, y: 4.03921568627451, size: 1 },\r\n // { x: 53.7410071942446, y: 3.33333333333333, size: 1 },\r\n // { x: 54.3884892086331, y: 2.98039215686275, size: 1 },\r\n // { x: 55.0359712230216, y: 2.58823529411765, size: 1 },\r\n // { x: 55.6834532374101, y: 2.23529411764706, size: 1 },\r\n // { x: 56.3309352517986, y: 3.76470588235294, size: 1 },\r\n // { x: 60.2158273381295, y: 3.41176470588235, size: 1 },\r\n // { x: 65.3956834532374, y: 3.80392156862745, size: 1 },\r\n // { x: 71.2230215827338, y: 3.84313725490196, size: 1 },\r\n // { x: 76.4028776978417, y: 2.58823529411765, size: 1 },\r\n // { x: 77.0503597122302, y: 2.50980392156863, size: 1 },\r\n // { x: 80.9352517985612, y: 3.92156862745098, size: 1 },\r\n // { x: 83.5251798561151, y: 3.96078431372549, size: 1 },\r\n // { x: 86.7625899280576, y: 3.72549019607843, size: 1 },\r\n // { x: 99.7122302158273, y: 3.45098039215686, size: 1 },\r\n // { x: 119.784172661871, y: 3.17647058823529, size: 1 },\r\n // { x: 120.431654676259, y: 2.94117647058824, size: 1 },\r\n // { x: 139.208633093525, y: 3.33333333333333, size: 1 },\r\n // { x: 139.856115107914, y: 3.2156862745098, size: 1 },\r\n // { x: 145.035971223022, y: 3.37254901960784, size: 1 },\r\n // { x: 153.453237410072, y: 3.6078431372549, size: 1 },\r\n // { x: 161.223021582734, y: 3.13725490196078, size: 1 },\r\n // { x: 161.870503597122, y: 3.33333333333333, size: 1 },\r\n // { x: 162.517985611511, y: 3.2156862745098, size: 1 },\r\n // { x: 163.165467625899, y: 2.7843137254902, size: 1 },\r\n // { x: 166.402877697842, y: 3.88235294117647, size: 1 },\r\n // { x: 170.287769784173, y: 4, size: 1 },\r\n // { x: 171.58273381295, y: 3.88235294117647, size: 1 },\r\n // { x: 172.230215827338, y: 3.92156862745098, size: 1 },\r\n // { x: 172.877697841727, y: 3.88235294117647, size: 1 },\r\n // { x: 174.820143884892, y: 4.27450980392157, size: 1 },\r\n // { x: 178.705035971223, y: 3.92156862745098, size: 1 },\r\n // { x: 180.647482014388, y: 4.19607843137255, size: 1 },\r\n // { x: 183.237410071942, y: 3.25490196078431, size: 1 },\r\n // { x: 183.884892086331, y: 3.25490196078431, size: 1 },\r\n // { x: 184.532374100719, y: 2.62745098039216, size: 1 },\r\n // { x: 185.179856115108, y: 2.74509803921569, size: 1 },\r\n // { x: 185.827338129496, y: 3.33333333333333, size: 1 },\r\n // { x: 186.474820143885, y: 4, size: 1 },\r\n // { x: 190.359712230216, y: 3.37254901960784, size: 1 },\r\n // { x: 192.94964028777, y: 3.45098039215686, size: 1 },\r\n // { x: 193.597122302158, y: 3.33333333333333, size: 1 },\r\n // { x: 197.482014388489, y: 3.45098039215686, size: 1 },\r\n // { x: 199.424460431655, y: 3.33333333333333, size: 1 },\r\n // { x: 202.014388489209, y: 3.33333333333333, size: 1 },\r\n // { x: 213.021582733813, y: 3.76470588235294, size: 1 },\r\n // { x: 225.971223021583, y: 3.29411764705882, size: 1 },\r\n // { x: 226.618705035971, y: 2.98039215686275, size: 1 },\r\n // { x: 227.26618705036, y: 3.01960784313725, size: 1 },\r\n // { x: 227.913669064748, y: 1.96078431372549, size: 1 },\r\n // { x: 238.920863309353, y: 3.37254901960784, size: 1 },\r\n // { x: 247.338129496403, y: 3.41176470588235, size: 1 },\r\n // { x: 247.985611510791, y: 3.17647058823529, size: 1 },\r\n // { x: 249.280575539568, y: 2.19607843137255, size: 1 },\r\n // { x: 249.928057553957, y: 2.35294117647059, size: 1 },\r\n // { x: 250.575539568345, y: 4.03921568627451, size: 1 },\r\n // { x: 262.230215827338, y: 3.96078431372549, size: 1 },\r\n // { x: 263.525179856115, y: 3.92156862745098, size: 1 },\r\n // { x: 264.820143884892, y: 3.76470588235294, size: 1 },\r\n // { x: 270, y: 3.25490196078431, size: 1 },\r\n // { x: 271.942446043165, y: 3.76470588235294, size: 1 },\r\n // { x: 277.769784172662, y: 3.41176470588235, size: 1 },\r\n // { x: 284.244604316547, y: 3.88235294117647, size: 1 },\r\n // { x: 290.719424460432, y: 3.29411764705882, size: 1 },\r\n // { x: 291.36690647482, y: 3.01960784313725, size: 1 },\r\n // { x: 295.89928057554, y: 3.49019607843137, size: 1 },\r\n // { x: 296.546762589928, y: 4, size: 1 },\r\n // { x: 314.676258992806, y: 3.29411764705882, size: 1 },\r\n // { x: 322.446043165468, y: 3.64705882352941, size: 1 },\r\n // { x: 336.690647482014, y: 3.96078431372549, size: 1 },\r\n // { x: 337.985611510791, y: 3.92156862745098, size: 1 },\r\n // { x: 339.280575539568, y: 3.92156862745098, size: 1 },\r\n // { x: 341.870503597122, y: 4.15686274509804, size: 1 },\r\n // { x: 348.345323741007, y: 3.88235294117647, size: 1 },\r\n // { x: 350.935251798561, y: 4, size: 1 },\r\n // { x: 359.352517985611, y: 3.2156862745098, size: 1 },\r\n // { x: 11.6546762589928, y: 3.92156862745098, size: 1 },\r\n // { x: 12.9496402877698, y: 3.92156862745098, size: 1 },\r\n // { x: 18.1294964028777, y: 3.33333333333333, size: 1 },\r\n // { x: 18.7769784172662, y: 3.17647058823529, size: 1 },\r\n // { x: 20.7194244604317, y: 3.13725490196078, size: 1 },\r\n // { x: 28.4892086330935, y: 3.80392156862745, size: 1 },\r\n // { x: 32.3741007194245, y: 3.92156862745098, size: 1 },\r\n // { x: 37.5539568345324, y: 3.49019607843137, size: 1 },\r\n // { x: 38.8489208633094, y: 3.33333333333333, size: 1 },\r\n // { x: 40.7913669064748, y: 3.09803921568627, size: 1 },\r\n // { x: 41.4388489208633, y: 3.13725490196078, size: 1 },\r\n // { x: 42.0863309352518, y: 3.17647058823529, size: 1 },\r\n // { x: 43.3812949640288, y: 3.41176470588235, size: 1 },\r\n // { x: 45.3237410071942, y: 3.96078431372549, size: 1 },\r\n // { x: 60.2158273381295, y: 3.45098039215686, size: 1 },\r\n // { x: 62.158273381295, y: 2.82352941176471, size: 1 },\r\n // { x: 62.8057553956835, y: 2.90196078431373, size: 1 },\r\n // { x: 63.4532374100719, y: 2.70588235294118, size: 1 },\r\n // { x: 64.1007194244604, y: 2.94117647058824, size: 1 },\r\n // { x: 81.5827338129496, y: 3.37254901960784, size: 1 },\r\n // { x: 83.5251798561151, y: 2.90196078431373, size: 1 },\r\n // { x: 84.8201438848921, y: 3.13725490196078, size: 1 },\r\n // { x: 85.4676258992806, y: 2.90196078431373, size: 1 },\r\n // { x: 93.8848920863309, y: 3.84313725490196, size: 1 },\r\n // { x: 95.1798561151079, y: 3.80392156862745, size: 1 },\r\n // { x: 97.7697841726619, y: 3.96078431372549, size: 1 },\r\n // { x: 124.964028776978, y: 4.03921568627451, size: 1 },\r\n // { x: 127.553956834532, y: 3.25490196078431, size: 1 },\r\n // { x: 134.028776978417, y: 3.92156862745098, size: 1 },\r\n // { x: 149.568345323741, y: 3.72549019607843, size: 1 },\r\n // { x: 150.215827338129, y: 3.37254901960784, size: 1 },\r\n // { x: 156.043165467626, y: 3.72549019607843, size: 1 },\r\n // { x: 162.517985611511, y: 3.29411764705882, size: 1 },\r\n // { x: 163.165467625899, y: 4.15686274509804, size: 1 },\r\n // { x: 169.640287769784, y: 3.2156862745098, size: 1 },\r\n // { x: 170.287769784173, y: 3.2156862745098, size: 1 },\r\n // { x: 176.762589928058, y: 3.72549019607843, size: 1 },\r\n // { x: 178.057553956835, y: 3.41176470588235, size: 1 },\r\n // { x: 185.827338129496, y: 3.45098039215686, size: 1 },\r\n // { x: 207.194244604317, y: 3.37254901960784, size: 1 },\r\n // { x: 211.079136690647, y: 3.88235294117647, size: 1 },\r\n // { x: 211.726618705036, y: 3.76470588235294, size: 1 },\r\n // { x: 213.669064748201, y: 3.49019607843137, size: 1 },\r\n // { x: 214.964028776978, y: 3.72549019607843, size: 1 },\r\n // { x: 218.848920863309, y: 3.45098039215686, size: 1 },\r\n // { x: 229.208633093525, y: 3.72549019607843, size: 1 },\r\n // { x: 250.575539568345, y: 3.80392156862745, size: 1 },\r\n // { x: 255.107913669065, y: 3.33333333333333, size: 1 },\r\n // { x: 256.402877697842, y: 2.86274509803922, size: 1 },\r\n // { x: 257.05035971223, y: 2.70588235294118, size: 1 },\r\n // { x: 257.697841726619, y: 3.01960784313725, size: 1 },\r\n // { x: 258.345323741007, y: 2.74509803921569, size: 1 },\r\n // { x: 259.640287769784, y: 3.88235294117647, size: 1 },\r\n // { x: 265.467625899281, y: 3.96078431372549, size: 1 },\r\n // { x: 267.410071942446, y: 3.88235294117647, size: 1 },\r\n // { x: 277.769784172662, y: 3.01960784313725, size: 1 },\r\n // { x: 278.41726618705, y: 2.94117647058824, size: 1 },\r\n // { x: 279.064748201439, y: 2.94117647058824, size: 1 },\r\n // { x: 279.712230215827, y: 3.13725490196078, size: 1 },\r\n // { x: 284.892086330935, y: 4, size: 1 },\r\n // { x: 292.661870503597, y: 3.84313725490196, size: 1 },\r\n // { x: 297.841726618705, y: 3.84313725490196, size: 1 },\r\n // { x: 303.669064748201, y: 3.84313725490196, size: 1 },\r\n // { x: 307.553956834532, y: 3.88235294117647, size: 1 },\r\n // { x: 315.323741007194, y: 3.76470588235294, size: 1 },\r\n // { x: 325.035971223022, y: 3.92156862745098, size: 1 },\r\n // { x: 326.330935251799, y: 3.96078431372549, size: 1 },\r\n // { x: 337.985611510791, y: 3.84313725490196, size: 1 },\r\n // { x: 338.63309352518, y: 3.84313725490196, size: 1 },\r\n // { x: 341.870503597122, y: 3.2156862745098, size: 1 },\r\n // { x: 342.517985611511, y: 3.17647058823529, size: 1 },\r\n // { x: 343.165467625899, y: 3.2156862745098, size: 1 },\r\n // { x: 344.460431654676, y: 3.25490196078431, size: 1 },\r\n // { x: 0.648648648648649, y: 3.52941176470588, size: 1 },\r\n // { x: 1.94594594594595, y: 3.84313725490196, size: 1 },\r\n // { x: 2.59459459459459, y: 3.37254901960784, size: 1 },\r\n // { x: 3.24324324324324, y: 3.2156862745098, size: 1 },\r\n // { x: 3.89189189189189, y: 3.01960784313725, size: 1 },\r\n // { x: 4.54054054054054, y: 2.86274509803922, size: 1 },\r\n // { x: 5.18918918918919, y: 2.94117647058824, size: 1 },\r\n // { x: 5.83783783783784, y: 2.90196078431373, size: 1 },\r\n // { x: 6.48648648648649, y: 3.6078431372549, size: 1 },\r\n // { x: 11.6756756756757, y: 3.80392156862745, size: 1 },\r\n // { x: 14.2702702702703, y: 3.68627450980392, size: 1 },\r\n // { x: 14.9189189189189, y: 3.92156862745098, size: 1 },\r\n // { x: 15.5675675675676, y: 3.56862745098039, size: 1 },\r\n // { x: 16.2162162162162, y: 3.72549019607843, size: 1 },\r\n // { x: 16.8648648648649, y: 3.6078431372549, size: 1 },\r\n // { x: 18.8108108108108, y: 3.72549019607843, size: 1 },\r\n // { x: 22.0540540540541, y: 3.72549019607843, size: 1 },\r\n // { x: 22.7027027027027, y: 3.80392156862745, size: 1 },\r\n // { x: 24, y: 3.33333333333333, size: 1 },\r\n // { x: 26.5945945945946, y: 3.41176470588235, size: 1 },\r\n // { x: 27.2432432432432, y: 3.29411764705882, size: 1 },\r\n // { x: 27.8918918918919, y: 3.25490196078431, size: 1 },\r\n // { x: 31.1351351351351, y: 3.80392156862745, size: 1 },\r\n // { x: 33.0810810810811, y: 3.68627450980392, size: 1 },\r\n // { x: 35.027027027027, y: 3.64705882352941, size: 1 },\r\n // { x: 35.6756756756757, y: 3.84313725490196, size: 1 },\r\n // { x: 36.972972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 37.6216216216216, y: 3.68627450980392, size: 1 },\r\n // { x: 38.9189189189189, y: 3.96078431372549, size: 1 },\r\n // { x: 44.1081081081081, y: 3.72549019607843, size: 1 },\r\n // { x: 45.4054054054054, y: 3.33333333333333, size: 1 },\r\n // { x: 46.0540540540541, y: 3.2156862745098, size: 1 },\r\n // { x: 46.7027027027027, y: 3.25490196078431, size: 1 },\r\n // { x: 48.6486486486486, y: 3.17647058823529, size: 1 },\r\n // { x: 52.5405405405405, y: 3.80392156862745, size: 1 },\r\n // { x: 54.4864864864865, y: 3.68627450980392, size: 1 },\r\n // { x: 56.4324324324324, y: 3.72549019607843, size: 1 },\r\n // { x: 59.027027027027, y: 3.68627450980392, size: 1 },\r\n // { x: 59.6756756756757, y: 3.76470588235294, size: 1 },\r\n // { x: 60.3243243243243, y: 3.68627450980392, size: 1 },\r\n // { x: 62.2702702702703, y: 3.76470588235294, size: 1 },\r\n // { x: 68.7567567567568, y: 3.25490196078431, size: 1 },\r\n // { x: 69.4054054054054, y: 3.05882352941176, size: 1 },\r\n // { x: 70.054054054054, y: 3.01960784313725, size: 1 },\r\n // { x: 70.7027027027027, y: 2.70588235294118, size: 1 },\r\n // { x: 71.3513513513514, y: 3.17647058823529, size: 1 },\r\n // { x: 73.2972972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 76.5405405405405, y: 3.72549019607843, size: 1 },\r\n // { x: 77.8378378378378, y: 3.76470588235294, size: 1 },\r\n // { x: 79.1351351351351, y: 3.49019607843137, size: 1 },\r\n // { x: 81.7297297297297, y: 3.68627450980392, size: 1 },\r\n // { x: 83.6756756756757, y: 3.76470588235294, size: 1 },\r\n // { x: 84.972972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 85.6216216216216, y: 3.76470588235294, size: 1 },\r\n // { x: 89.5135135135135, y: 3.52941176470588, size: 1 },\r\n // { x: 90.8108108108108, y: 3.2156862745098, size: 1 },\r\n // { x: 92.7567567567568, y: 3.64705882352941, size: 1 },\r\n // { x: 93.4054054054054, y: 3.6078431372549, size: 1 },\r\n // { x: 94.7027027027027, y: 3.52941176470588, size: 1 },\r\n // { x: 96.6486486486486, y: 3.72549019607843, size: 1 },\r\n // { x: 97.945945945946, y: 3.37254901960784, size: 1 },\r\n // { x: 99.2432432432432, y: 3.45098039215686, size: 1 },\r\n // { x: 100.540540540541, y: 3.6078431372549, size: 1 },\r\n // { x: 103.135135135135, y: 3.64705882352941, size: 1 },\r\n // { x: 105.081081081081, y: 3.56862745098039, size: 1 },\r\n // { x: 105.72972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 106.378378378378, y: 4, size: 1 },\r\n // { x: 107.027027027027, y: 3.64705882352941, size: 1 },\r\n // { x: 107.675675675676, y: 3.92156862745098, size: 1 },\r\n // { x: 110.918918918919, y: 3.92156862745098, size: 1 },\r\n // { x: 112.216216216216, y: 3.25490196078431, size: 1 },\r\n // { x: 114.162162162162, y: 3.49019607843137, size: 1 },\r\n // { x: 114.810810810811, y: 3.64705882352941, size: 1 },\r\n // { x: 120, y: 3.52941176470588, size: 1 },\r\n // { x: 121.297297297297, y: 3.76470588235294, size: 1 },\r\n // { x: 121.945945945946, y: 3.72549019607843, size: 1 },\r\n // { x: 123.891891891892, y: 3.49019607843137, size: 1 },\r\n // { x: 124.540540540541, y: 3.52941176470588, size: 1 },\r\n // { x: 125.189189189189, y: 3.76470588235294, size: 1 },\r\n // { x: 135.567567567568, y: 3.45098039215686, size: 1 },\r\n // { x: 138.162162162162, y: 3.72549019607843, size: 1 },\r\n // { x: 140.108108108108, y: 3.56862745098039, size: 1 },\r\n // { x: 141.405405405405, y: 3.33333333333333, size: 1 },\r\n // { x: 142.054054054054, y: 3.49019607843137, size: 1 },\r\n // { x: 142.702702702703, y: 3.76470588235294, size: 1 },\r\n // { x: 144, y: 3.72549019607843, size: 1 },\r\n // { x: 145.297297297297, y: 3.41176470588235, size: 1 },\r\n // { x: 147.891891891892, y: 3.33333333333333, size: 1 },\r\n // { x: 148.540540540541, y: 3.45098039215686, size: 1 },\r\n // { x: 150.486486486486, y: 3.52941176470588, size: 1 },\r\n // { x: 151.783783783784, y: 3.64705882352941, size: 1 },\r\n // { x: 153.081081081081, y: 3.52941176470588, size: 1 },\r\n // { x: 153.72972972973, y: 3.33333333333333, size: 1 },\r\n // { x: 154.378378378378, y: 3.09803921568627, size: 1 },\r\n // { x: 155.027027027027, y: 3.52941176470588, size: 1 },\r\n // { x: 155.675675675676, y: 2.70588235294118, size: 1 },\r\n // { x: 156.324324324324, y: 2.7843137254902, size: 1 },\r\n // { x: 156.972972972973, y: 2.66666666666667, size: 1 },\r\n // { x: 157.621621621622, y: 2.98039215686275, size: 1 },\r\n // { x: 159.567567567568, y: 3.92156862745098, size: 1 },\r\n // { x: 160.864864864865, y: 3.96078431372549, size: 1 },\r\n // { x: 161.513513513514, y: 3.76470588235294, size: 1 },\r\n // { x: 164.108108108108, y: 3.92156862745098, size: 1 },\r\n // { x: 165.405405405405, y: 3.68627450980392, size: 1 },\r\n // { x: 168, y: 4, size: 1 },\r\n // { x: 175.135135135135, y: 3.49019607843137, size: 1 },\r\n // { x: 175.783783783784, y: 3.33333333333333, size: 1 },\r\n // { x: 177.72972972973, y: 3.2156862745098, size: 1 },\r\n // { x: 179.675675675676, y: 3.56862745098039, size: 1 },\r\n // { x: 183.567567567568, y: 3.45098039215686, size: 1 },\r\n // { x: 185.513513513514, y: 3.29411764705882, size: 1 },\r\n // { x: 187.459459459459, y: 3.49019607843137, size: 1 },\r\n // { x: 192.648648648649, y: 3.76470588235294, size: 1 },\r\n // { x: 194.594594594595, y: 3.37254901960784, size: 1 },\r\n // { x: 195.243243243243, y: 3.56862745098039, size: 1 },\r\n // { x: 195.891891891892, y: 3.45098039215686, size: 1 },\r\n // { x: 197.189189189189, y: 3.41176470588235, size: 1 },\r\n // { x: 197.837837837838, y: 3.37254901960784, size: 1 },\r\n // { x: 198.486486486486, y: 3.05882352941176, size: 1 },\r\n // { x: 199.135135135135, y: 2.94117647058824, size: 1 },\r\n // { x: 199.783783783784, y: 3.41176470588235, size: 1 },\r\n // { x: 200.432432432432, y: 3.45098039215686, size: 1 },\r\n // { x: 202.378378378378, y: 3.45098039215686, size: 1 },\r\n // { x: 203.027027027027, y: 3.49019607843137, size: 1 },\r\n // { x: 203.675675675676, y: 3.56862745098039, size: 1 },\r\n // { x: 204.324324324324, y: 3.37254901960784, size: 1 },\r\n // { x: 205.621621621622, y: 3.45098039215686, size: 1 },\r\n // { x: 206.27027027027, y: 3.37254901960784, size: 1 },\r\n // { x: 206.918918918919, y: 3.45098039215686, size: 1 },\r\n // { x: 208.216216216216, y: 3.37254901960784, size: 1 },\r\n // { x: 210.162162162162, y: 3.52941176470588, size: 1 },\r\n // { x: 210.810810810811, y: 3.64705882352941, size: 1 },\r\n // { x: 212.108108108108, y: 3.49019607843137, size: 1 },\r\n // { x: 214.054054054054, y: 3.56862745098039, size: 1 },\r\n // { x: 215.351351351351, y: 3.49019607843137, size: 1 },\r\n // { x: 216.648648648649, y: 3.37254901960784, size: 1 },\r\n // { x: 217.945945945946, y: 3.56862745098039, size: 1 },\r\n // { x: 221.189189189189, y: 3.6078431372549, size: 1 },\r\n // { x: 223.783783783784, y: 3.76470588235294, size: 1 },\r\n // { x: 227.027027027027, y: 4, size: 1 },\r\n // { x: 228.972972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 230.27027027027, y: 3.68627450980392, size: 1 },\r\n // { x: 230.918918918919, y: 3.76470588235294, size: 1 },\r\n // { x: 232.216216216216, y: 3.52941176470588, size: 1 },\r\n // { x: 234.162162162162, y: 3.76470588235294, size: 1 },\r\n // { x: 236.108108108108, y: 3.6078431372549, size: 1 },\r\n // { x: 236.756756756757, y: 3.52941176470588, size: 1 },\r\n // { x: 240, y: 3.84313725490196, size: 1 },\r\n // { x: 241.297297297297, y: 3.49019607843137, size: 1 },\r\n // { x: 243.891891891892, y: 3.68627450980392, size: 1 },\r\n // { x: 246.486486486486, y: 3.80392156862745, size: 1 },\r\n // { x: 247.135135135135, y: 3.76470588235294, size: 1 },\r\n // { x: 252.324324324324, y: 3.76470588235294, size: 1 },\r\n // { x: 253.621621621622, y: 3.68627450980392, size: 1 },\r\n // { x: 254.27027027027, y: 3.64705882352941, size: 1 },\r\n // { x: 256.216216216216, y: 3.96078431372549, size: 1 },\r\n // { x: 259.459459459459, y: 3.84313725490196, size: 1 },\r\n // { x: 261.405405405405, y: 3.80392156862745, size: 1 },\r\n // { x: 262.702702702703, y: 3.72549019607843, size: 1 },\r\n // { x: 263.351351351351, y: 3.64705882352941, size: 1 },\r\n // { x: 266.594594594595, y: 3.72549019607843, size: 1 },\r\n // { x: 267.891891891892, y: 3.76470588235294, size: 1 },\r\n // { x: 269.837837837838, y: 3.84313725490196, size: 1 },\r\n // { x: 275.027027027027, y: 3.80392156862745, size: 1 },\r\n // { x: 276.972972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 278.918918918919, y: 3.68627450980392, size: 1 },\r\n // { x: 280.216216216216, y: 3.45098039215686, size: 1 },\r\n // { x: 280.864864864865, y: 3.45098039215686, size: 1 },\r\n // { x: 282.162162162162, y: 3.56862745098039, size: 1 },\r\n // { x: 284.108108108108, y: 3.33333333333333, size: 1 },\r\n // { x: 287.351351351351, y: 3.41176470588235, size: 1 },\r\n // { x: 288.648648648649, y: 3.33333333333333, size: 1 },\r\n // { x: 296.432432432432, y: 3.41176470588235, size: 1 },\r\n // { x: 298.378378378378, y: 3.56862745098039, size: 1 },\r\n // { x: 299.027027027027, y: 3.41176470588235, size: 1 },\r\n // { x: 300.324324324324, y: 3.6078431372549, size: 1 },\r\n // { x: 304.216216216216, y: 3.45098039215686, size: 1 },\r\n // { x: 304.864864864865, y: 3.49019607843137, size: 1 },\r\n // { x: 305.513513513513, y: 3.33333333333333, size: 1 },\r\n // { x: 306.810810810811, y: 2.98039215686275, size: 1 },\r\n // { x: 307.459459459459, y: 3.17647058823529, size: 1 },\r\n // { x: 308.108108108108, y: 3.29411764705882, size: 1 },\r\n // { x: 308.756756756757, y: 2.82352941176471, size: 1 },\r\n // { x: 310.054054054054, y: 3.92156862745098, size: 1 },\r\n // { x: 310.702702702703, y: 3.76470588235294, size: 1 },\r\n // { x: 314.594594594595, y: 3.88235294117647, size: 1 },\r\n // { x: 319.135135135135, y: 3.88235294117647, size: 1 },\r\n // { x: 321.72972972973, y: 4, size: 1 },\r\n // { x: 323.675675675676, y: 3.56862745098039, size: 1 },\r\n // { x: 324.324324324324, y: 3.80392156862745, size: 1 },\r\n // { x: 324.972972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 325.621621621622, y: 3.56862745098039, size: 1 },\r\n // { x: 327.567567567568, y: 3.37254901960784, size: 1 },\r\n // { x: 328.216216216216, y: 2.98039215686275, size: 1 },\r\n // { x: 328.864864864865, y: 3.29411764705882, size: 1 },\r\n // { x: 329.513513513513, y: 2.86274509803922, size: 1 },\r\n // { x: 330.162162162162, y: 2.70588235294118, size: 1 },\r\n // { x: 330.810810810811, y: 3.25490196078431, size: 1 },\r\n // { x: 333.405405405405, y: 3.56862745098039, size: 1 },\r\n // { x: 334.054054054054, y: 3.72549019607843, size: 1 },\r\n // { x: 337.297297297297, y: 3.56862745098039, size: 1 },\r\n // { x: 339.243243243243, y: 4.03921568627451, size: 1 },\r\n // { x: 349.621621621622, y: 3.33333333333333, size: 1 },\r\n // { x: 350.27027027027, y: 3.2156862745098, size: 1 },\r\n // { x: 350.918918918919, y: 3.05882352941176, size: 1 },\r\n // { x: 352.216216216216, y: 2.86274509803922, size: 1 },\r\n // { x: 354.810810810811, y: 3.45098039215686, size: 1 },\r\n // { x: 356.756756756757, y: 3.45098039215686, size: 1 },\r\n // { x: 358.054054054054, y: 3.49019607843137, size: 1 },\r\n // { x: 358.702702702703, y: 3.49019607843137, size: 1 },\r\n // { x: 359.351351351351, y: 3.6078431372549, size: 1 },\r\n // { x: 2.58992805755396, y: 3.45098039215686, size: 1 },\r\n // { x: 14.8920863309353, y: 3.45098039215686, size: 1 },\r\n // { x: 22.0143884892086, y: 3.29411764705882, size: 1 },\r\n // { x: 23.3093525179856, y: 3.29411764705882, size: 1 },\r\n // { x: 27.1942446043165, y: 3.49019607843137, size: 1 },\r\n // { x: 28.4892086330935, y: 3.37254901960784, size: 1 },\r\n // { x: 29.136690647482, y: 3.45098039215686, size: 1 },\r\n // { x: 29.7841726618705, y: 3.25490196078431, size: 1 },\r\n // { x: 36.9064748201439, y: 3.84313725490196, size: 1 },\r\n // { x: 54.3884892086331, y: 3.25490196078431, size: 1 },\r\n // { x: 55.6834532374101, y: 3.09803921568627, size: 1 },\r\n // { x: 56.9784172661871, y: 3.05882352941176, size: 1 },\r\n // { x: 63.4532374100719, y: 3.41176470588235, size: 1 },\r\n // { x: 66.0431654676259, y: 3.17647058823529, size: 1 },\r\n // { x: 66.6906474820144, y: 3.29411764705882, size: 1 },\r\n // { x: 67.3381294964029, y: 3.33333333333333, size: 1 },\r\n // { x: 69.9280575539568, y: 3.52941176470588, size: 1 },\r\n // { x: 76.4028776978417, y: 2.98039215686275, size: 1 },\r\n // { x: 77.6978417266187, y: 3.29411764705882, size: 1 },\r\n // { x: 80.2877697841727, y: 3.25490196078431, size: 1 },\r\n // { x: 90.6474820143885, y: 3.33333333333333, size: 1 },\r\n // { x: 93.2374100719424, y: 3.29411764705882, size: 1 },\r\n // { x: 93.8848920863309, y: 3.33333333333333, size: 1 },\r\n // { x: 94.5323741007194, y: 3.33333333333333, size: 1 },\r\n // { x: 95.8273381294964, y: 3.01960784313725, size: 1 },\r\n // { x: 97.1223021582734, y: 3.17647058823529, size: 1 },\r\n // { x: 97.7697841726619, y: 2.98039215686275, size: 1 },\r\n // { x: 98.4172661870504, y: 3.01960784313725, size: 1 },\r\n // { x: 99.7122302158273, y: 3.05882352941176, size: 1 },\r\n // { x: 100.359712230216, y: 3.09803921568627, size: 1 },\r\n // { x: 106.187050359712, y: 3.37254901960784, size: 1 },\r\n // { x: 121.726618705036, y: 3.80392156862745, size: 1 },\r\n // { x: 126.906474820144, y: 3.41176470588235, size: 1 },\r\n // { x: 129.496402877698, y: 3.92156862745098, size: 1 },\r\n // { x: 138.561151079137, y: 3.96078431372549, size: 1 },\r\n // { x: 155.395683453237, y: 3.45098039215686, size: 1 },\r\n // { x: 164.460431654676, y: 4.03921568627451, size: 1 },\r\n // { x: 172.230215827338, y: 3.84313725490196, size: 1 },\r\n // { x: 174.172661870504, y: 4.23529411764706, size: 1 },\r\n // { x: 181.942446043165, y: 3.56862745098039, size: 1 },\r\n // { x: 185.827338129496, y: 3.13725490196078, size: 1 },\r\n // { x: 188.41726618705, y: 4, size: 1 },\r\n // { x: 200.071942446043, y: 3.76470588235294, size: 1 },\r\n // { x: 222.086330935252, y: 3.92156862745098, size: 1 },\r\n // { x: 227.26618705036, y: 3.37254901960784, size: 1 },\r\n // { x: 228.561151079137, y: 3.76470588235294, size: 1 },\r\n // { x: 230.503597122302, y: 3.49019607843137, size: 1 },\r\n // { x: 241.510791366906, y: 3.80392156862745, size: 1 },\r\n // { x: 257.05035971223, y: 3.92156862745098, size: 1 },\r\n // { x: 270.647482014389, y: 3.33333333333333, size: 1 },\r\n // { x: 271.942446043165, y: 2.94117647058824, size: 1 },\r\n // { x: 272.589928057554, y: 3.33333333333333, size: 1 },\r\n // { x: 275.179856115108, y: 3.88235294117647, size: 1 },\r\n // { x: 291.36690647482, y: 3.84313725490196, size: 1 },\r\n // { x: 292.014388489209, y: 3.01960784313725, size: 1 },\r\n // { x: 295.251798561151, y: 3.84313725490196, size: 1 },\r\n // { x: 311.438848920863, y: 3.52941176470588, size: 1 },\r\n // { x: 331.510791366906, y: 3.41176470588235, size: 1 },\r\n // { x: 336.043165467626, y: 2.98039215686275, size: 1 },\r\n // { x: 336.690647482014, y: 2.90196078431373, size: 1 },\r\n // { x: 337.338129496403, y: 3.05882352941176, size: 1 },\r\n // { x: 337.985611510791, y: 3.37254901960784, size: 1 },\r\n // { x: 344.460431654676, y: 3.49019607843137, size: 1 },\r\n // { x: 345.107913669065, y: 3.37254901960784, size: 1 },\r\n // { x: 346.402877697842, y: 3.45098039215686, size: 1 },\r\n // { x: 348.992805755396, y: 3.49019607843137, size: 1 },\r\n // { x: 353.525179856115, y: 3.68627450980392, size: 1 },\r\n // { x: 10.3597122302158, y: 3.33333333333333, size: 1 },\r\n // { x: 17.4820143884892, y: 3.6078431372549, size: 1 },\r\n // { x: 20.0719424460432, y: 3.84313725490196, size: 1 },\r\n // { x: 32.3741007194245, y: 4, size: 1 },\r\n // { x: 38.8489208633094, y: 3.29411764705882, size: 1 },\r\n // { x: 40.1438848920863, y: 3.05882352941176, size: 1 },\r\n // { x: 40.7913669064748, y: 3.29411764705882, size: 1 },\r\n // { x: 60.863309352518, y: 3.2156862745098, size: 1 },\r\n // { x: 61.5107913669065, y: 2.94117647058824, size: 1 },\r\n // { x: 62.158273381295, y: 3.05882352941176, size: 1 },\r\n // { x: 62.8057553956835, y: 3.41176470588235, size: 1 },\r\n // { x: 63.4532374100719, y: 3.80392156862745, size: 1 },\r\n // { x: 83.5251798561151, y: 3.17647058823529, size: 1 },\r\n // { x: 88.0575539568345, y: 3.96078431372549, size: 1 },\r\n // { x: 89.3525179856115, y: 3.88235294117647, size: 1 },\r\n // { x: 92.589928057554, y: 3.80392156862745, size: 1 },\r\n // { x: 104.892086330935, y: 3.6078431372549, size: 1 },\r\n // { x: 109.424460431655, y: 3.88235294117647, size: 1 },\r\n // { x: 112.661870503597, y: 3.41176470588235, size: 1 },\r\n // { x: 122.374100719424, y: 3.52941176470588, size: 1 },\r\n // { x: 161.223021582734, y: 4, size: 1 },\r\n // { x: 161.870503597122, y: 3.88235294117647, size: 1 },\r\n // { x: 163.165467625899, y: 3.96078431372549, size: 1 },\r\n // { x: 167.697841726619, y: 3.84313725490196, size: 1 },\r\n // { x: 176.762589928058, y: 3.92156862745098, size: 1 },\r\n // { x: 185.179856115108, y: 3.84313725490196, size: 1 },\r\n // { x: 196.834532374101, y: 3.45098039215686, size: 1 },\r\n // { x: 222.73381294964, y: 3.88235294117647, size: 1 },\r\n // { x: 232.446043165468, y: 3.41176470588235, size: 1 },\r\n // { x: 235.035971223022, y: 3.01960784313725, size: 1 },\r\n // { x: 236.978417266187, y: 3.92156862745098, size: 1 },\r\n // { x: 247.985611510791, y: 3.76470588235294, size: 1 },\r\n // { x: 251.870503597122, y: 3.45098039215686, size: 1 },\r\n // { x: 255.755395683453, y: 3.01960784313725, size: 1 },\r\n // { x: 256.402877697842, y: 2.82352941176471, size: 1 },\r\n // { x: 257.05035971223, y: 2.90196078431373, size: 1 },\r\n // { x: 257.697841726619, y: 2.86274509803922, size: 1 },\r\n // { x: 258.345323741007, y: 3.13725490196078, size: 1 },\r\n // { x: 260.935251798561, y: 3.88235294117647, size: 1 },\r\n // { x: 266.762589928058, y: 3.96078431372549, size: 1 },\r\n // { x: 273.237410071942, y: 3.52941176470588, size: 1 },\r\n // { x: 277.769784172662, y: 2.7843137254902, size: 1 },\r\n // { x: 278.41726618705, y: 3.09803921568627, size: 1 },\r\n // { x: 283.597122302158, y: 3.41176470588235, size: 1 },\r\n // { x: 299.784172661871, y: 3.25490196078431, size: 1 },\r\n // { x: 307.553956834532, y: 3.92156862745098, size: 1 },\r\n // { x: 314.028776978417, y: 3.96078431372549, size: 1 },\r\n // { x: 315.323741007194, y: 3.84313725490196, size: 1 },\r\n // { x: 319.208633093525, y: 3.13725490196078, size: 1 },\r\n // { x: 319.856115107914, y: 3.25490196078431, size: 1 },\r\n // { x: 320.503597122302, y: 2.7843137254902, size: 1 },\r\n // { x: 321.151079136691, y: 2.62745098039216, size: 1 },\r\n // { x: 340.575539568345, y: 3.25490196078431, size: 1 },\r\n // { x: 341.223021582734, y: 3.33333333333333, size: 1 },\r\n // { x: 342.517985611511, y: 3.01960784313725, size: 1 },\r\n // { x: 343.165467625899, y: 3.33333333333333, size: 1 },\r\n // { x: 346.402877697842, y: 3.80392156862745, size: 1 },\r\n // { x: 1.94244604316547, y: 3.2156862745098, size: 1 },\r\n // { x: 3.23741007194245, y: 3.29411764705882, size: 1 },\r\n // { x: 3.88489208633094, y: 2.82352941176471, size: 1 },\r\n // { x: 4.53237410071942, y: 2.62745098039216, size: 1 },\r\n // { x: 5.17985611510791, y: 3.29411764705882, size: 1 },\r\n // { x: 25.2517985611511, y: 2.62745098039216, size: 1 },\r\n // { x: 25.8992805755396, y: 2.3921568627451, size: 1 },\r\n // { x: 26.5467625899281, y: 3.41176470588235, size: 1 },\r\n // { x: 38.2014388489209, y: 3.92156862745098, size: 1 },\r\n // { x: 42.7338129496403, y: 3.37254901960784, size: 1 },\r\n // { x: 43.3812949640288, y: 3.33333333333333, size: 1 },\r\n // { x: 46.6187050359712, y: 2.94117647058824, size: 1 },\r\n // { x: 47.2661870503597, y: 2.15686274509804, size: 1 },\r\n // { x: 47.9136690647482, y: 2.94117647058824, size: 1 },\r\n // { x: 53.7410071942446, y: 3.2156862745098, size: 1 },\r\n // { x: 58.9208633093525, y: 3.41176470588235, size: 1 },\r\n // { x: 66.6906474820144, y: 3.41176470588235, size: 1 },\r\n // { x: 67.3381294964029, y: 3.01960784313725, size: 1 },\r\n // { x: 68.6330935251799, y: 2.35294117647059, size: 1 },\r\n // { x: 69.2805755395683, y: 2.19607843137255, size: 1 },\r\n // { x: 81.5827338129496, y: 3.76470588235294, size: 1 },\r\n // { x: 84.1726618705036, y: 3.76470588235294, size: 1 },\r\n // { x: 84.8201438848921, y: 3.80392156862745, size: 1 },\r\n // { x: 86.1151079136691, y: 3.88235294117647, size: 1 },\r\n // { x: 91.294964028777, y: 3.45098039215686, size: 1 },\r\n // { x: 100.359712230216, y: 4.03921568627451, size: 1 },\r\n // { x: 101.654676258993, y: 3.33333333333333, size: 1 },\r\n // { x: 108.129496402878, y: 3.37254901960784, size: 1 },\r\n // { x: 109.424460431655, y: 3.41176470588235, size: 1 },\r\n // { x: 124.31654676259, y: 3.88235294117647, size: 1 },\r\n // { x: 127.553956834532, y: 3.80392156862745, size: 1 },\r\n // { x: 130.791366906475, y: 3.96078431372549, size: 1 },\r\n // { x: 163.165467625899, y: 3.41176470588235, size: 1 },\r\n // { x: 165.107913669065, y: 4.03921568627451, size: 1 },\r\n // { x: 174.820143884892, y: 3.17647058823529, size: 1 },\r\n // { x: 175.467625899281, y: 3.09803921568627, size: 1 },\r\n // { x: 176.115107913669, y: 2.94117647058824, size: 1 },\r\n // { x: 176.762589928058, y: 2.47058823529412, size: 1 },\r\n // { x: 185.179856115108, y: 3.96078431372549, size: 1 },\r\n // { x: 189.064748201439, y: 3.96078431372549, size: 1 },\r\n // { x: 191.007194244604, y: 3.84313725490196, size: 1 },\r\n // { x: 196.834532374101, y: 3.13725490196078, size: 1 },\r\n // { x: 205.89928057554, y: 3.72549019607843, size: 1 },\r\n // { x: 221.438848920863, y: 3.96078431372549, size: 1 },\r\n // { x: 222.086330935252, y: 3.76470588235294, size: 1 },\r\n // { x: 231.798561151079, y: 3.29411764705882, size: 1 },\r\n // { x: 247.985611510791, y: 3.37254901960784, size: 1 },\r\n // { x: 249.280575539568, y: 3.29411764705882, size: 1 },\r\n // { x: 249.928057553957, y: 3.25490196078431, size: 1 },\r\n // { x: 252.517985611511, y: 3.33333333333333, size: 1 },\r\n // { x: 253.812949640288, y: 3.52941176470588, size: 1 },\r\n // { x: 255.755395683453, y: 3.25490196078431, size: 1 },\r\n // { x: 258.992805755396, y: 3.37254901960784, size: 1 },\r\n // { x: 259.640287769784, y: 3.6078431372549, size: 1 },\r\n // { x: 265.467625899281, y: 3.17647058823529, size: 1 },\r\n // { x: 266.762589928058, y: 3.29411764705882, size: 1 },\r\n // { x: 269.352517985611, y: 3.09803921568627, size: 1 },\r\n // { x: 270, y: 3.17647058823529, size: 1 },\r\n // { x: 270.647482014389, y: 2.94117647058824, size: 1 },\r\n // { x: 271.942446043165, y: 3.25490196078431, size: 1 },\r\n // { x: 273.884892086331, y: 3.2156862745098, size: 1 },\r\n // { x: 274.532374100719, y: 3.2156862745098, size: 1 },\r\n // { x: 275.179856115108, y: 3.13725490196078, size: 1 },\r\n // { x: 275.827338129496, y: 3.29411764705882, size: 1 },\r\n // { x: 276.474820143885, y: 3.33333333333333, size: 1 },\r\n // { x: 278.41726618705, y: 3.33333333333333, size: 1 },\r\n // { x: 281.007194244604, y: 3.17647058823529, size: 1 },\r\n // { x: 281.654676258993, y: 3.13725490196078, size: 1 },\r\n // { x: 282.302158273381, y: 3.33333333333333, size: 1 },\r\n // { x: 284.244604316547, y: 3.33333333333333, size: 1 },\r\n // { x: 285.539568345324, y: 3.33333333333333, size: 1 },\r\n // { x: 304.964028776978, y: 3.29411764705882, size: 1 },\r\n // { x: 305.611510791367, y: 3.09803921568627, size: 1 },\r\n // { x: 306.258992805755, y: 2.86274509803922, size: 1 },\r\n // { x: 306.906474820144, y: 2.47058823529412, size: 1 },\r\n // { x: 307.553956834532, y: 2.3921568627451, size: 1 },\r\n // { x: 308.201438848921, y: 2.43137254901961, size: 1 },\r\n // { x: 309.496402877698, y: 3.37254901960784, size: 1 },\r\n // { x: 314.028776978417, y: 3.41176470588235, size: 1 },\r\n // { x: 314.676258992806, y: 3.37254901960784, size: 1 },\r\n // { x: 328.273381294964, y: 2.98039215686275, size: 1 },\r\n // { x: 328.920863309353, y: 3.33333333333333, size: 1 },\r\n // { x: 329.568345323741, y: 3.41176470588235, size: 1 },\r\n // { x: 330.215827338129, y: 3.37254901960784, size: 1 },\r\n // { x: 334.10071942446, y: 3.88235294117647, size: 1 },\r\n // { x: 345.107913669065, y: 3.41176470588235, size: 1 },\r\n // { x: 347.697841726619, y: 3.41176470588235, size: 1 },\r\n // { x: 348.992805755396, y: 3.41176470588235, size: 1 },\r\n // { x: 353.525179856115, y: 3.37254901960784, size: 1 },\r\n // { x: 3.24324324324324, y: 3.72549019607843, size: 1 },\r\n // { x: 3.89189189189189, y: 3.41176470588235, size: 1 },\r\n // { x: 5.18918918918919, y: 3.6078431372549, size: 1 },\r\n // { x: 6.48648648648649, y: 3.29411764705882, size: 1 },\r\n // { x: 9.08108108108108, y: 3.64705882352941, size: 1 },\r\n // { x: 9.72972972972973, y: 3.17647058823529, size: 1 },\r\n // { x: 10.3783783783784, y: 3.29411764705882, size: 1 },\r\n // { x: 11.027027027027, y: 3.41176470588235, size: 1 },\r\n // { x: 11.6756756756757, y: 3.2156862745098, size: 1 },\r\n // { x: 12.3243243243243, y: 3.49019607843137, size: 1 },\r\n // { x: 12.972972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 17.5135135135135, y: 3.52941176470588, size: 1 },\r\n // { x: 18.1621621621622, y: 3.37254901960784, size: 1 },\r\n // { x: 20.7567567567568, y: 3.41176470588235, size: 1 },\r\n // { x: 21.4054054054054, y: 3.37254901960784, size: 1 },\r\n // { x: 22.7027027027027, y: 3.41176470588235, size: 1 },\r\n // { x: 24, y: 3.49019607843137, size: 1 },\r\n // { x: 24.6486486486486, y: 3.64705882352941, size: 1 },\r\n // { x: 25.2972972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 25.9459459459459, y: 3.45098039215686, size: 1 },\r\n // { x: 26.5945945945946, y: 3.37254901960784, size: 1 },\r\n // { x: 28.5405405405405, y: 3.49019607843137, size: 1 },\r\n // { x: 30.4864864864865, y: 3.92156862745098, size: 1 },\r\n // { x: 31.1351351351351, y: 3.29411764705882, size: 1 },\r\n // { x: 31.7837837837838, y: 3.76470588235294, size: 1 },\r\n // { x: 32.4324324324324, y: 3.29411764705882, size: 1 },\r\n // { x: 34.3783783783784, y: 3.88235294117647, size: 1 },\r\n // { x: 35.6756756756757, y: 3.52941176470588, size: 1 },\r\n // { x: 36.3243243243243, y: 3.52941176470588, size: 1 },\r\n // { x: 40.2162162162162, y: 3.52941176470588, size: 1 },\r\n // { x: 46.7027027027027, y: 3.68627450980392, size: 1 },\r\n // { x: 48.6486486486486, y: 3.68627450980392, size: 1 },\r\n // { x: 49.2972972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 51.2432432432432, y: 3.6078431372549, size: 1 },\r\n // { x: 53.1891891891892, y: 3.80392156862745, size: 1 },\r\n // { x: 53.8378378378378, y: 3.17647058823529, size: 1 },\r\n // { x: 54.4864864864865, y: 3.09803921568627, size: 1 },\r\n // { x: 55.7837837837838, y: 3.45098039215686, size: 1 },\r\n // { x: 57.0810810810811, y: 3.56862745098039, size: 1 },\r\n // { x: 58.3783783783784, y: 3.45098039215686, size: 1 },\r\n // { x: 60.972972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 62.9189189189189, y: 3.68627450980392, size: 1 },\r\n // { x: 64.2162162162162, y: 3.68627450980392, size: 1 },\r\n // { x: 68.1081081081081, y: 3.49019607843137, size: 1 },\r\n // { x: 68.7567567567568, y: 3.49019607843137, size: 1 },\r\n // { x: 69.4054054054054, y: 3.68627450980392, size: 1 },\r\n // { x: 70.7027027027027, y: 3.37254901960784, size: 1 },\r\n // { x: 73.945945945946, y: 3.33333333333333, size: 1 },\r\n // { x: 74.5945945945946, y: 3.56862745098039, size: 1 },\r\n // { x: 75.2432432432432, y: 3.45098039215686, size: 1 },\r\n // { x: 79.1351351351351, y: 3.80392156862745, size: 1 },\r\n // { x: 79.7837837837838, y: 3.76470588235294, size: 1 },\r\n // { x: 82.3783783783784, y: 3.52941176470588, size: 1 },\r\n // { x: 83.027027027027, y: 3.84313725490196, size: 1 },\r\n // { x: 83.6756756756757, y: 3.64705882352941, size: 1 },\r\n // { x: 84.3243243243243, y: 3.52941176470588, size: 1 },\r\n // { x: 85.6216216216216, y: 3.52941176470588, size: 1 },\r\n // { x: 86.2702702702703, y: 3.72549019607843, size: 1 },\r\n // { x: 86.9189189189189, y: 3.92156862745098, size: 1 },\r\n // { x: 87.5675675675676, y: 3.52941176470588, size: 1 },\r\n // { x: 88.2162162162162, y: 3.6078431372549, size: 1 },\r\n // { x: 89.5135135135135, y: 3.68627450980392, size: 1 },\r\n // { x: 92.1081081081081, y: 3.92156862745098, size: 1 },\r\n // { x: 96.6486486486486, y: 3.41176470588235, size: 1 },\r\n // { x: 97.2972972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 101.189189189189, y: 3.37254901960784, size: 1 },\r\n // { x: 104.432432432432, y: 3.41176470588235, size: 1 },\r\n // { x: 105.081081081081, y: 3.41176470588235, size: 1 },\r\n // { x: 106.378378378378, y: 3.56862745098039, size: 1 },\r\n // { x: 107.027027027027, y: 3.41176470588235, size: 1 },\r\n // { x: 108.972972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 111.567567567568, y: 3.68627450980392, size: 1 },\r\n // { x: 112.864864864865, y: 3.84313725490196, size: 1 },\r\n // { x: 113.513513513514, y: 3.68627450980392, size: 1 },\r\n // { x: 114.810810810811, y: 3.45098039215686, size: 1 },\r\n // { x: 115.459459459459, y: 3.64705882352941, size: 1 },\r\n // { x: 116.108108108108, y: 3.52941176470588, size: 1 },\r\n // { x: 117.405405405405, y: 3.88235294117647, size: 1 },\r\n // { x: 120, y: 3.45098039215686, size: 1 },\r\n // { x: 123.243243243243, y: 3.84313725490196, size: 1 },\r\n // { x: 127.783783783784, y: 3.49019607843137, size: 1 },\r\n // { x: 128.432432432432, y: 3.76470588235294, size: 1 },\r\n // { x: 129.081081081081, y: 3.41176470588235, size: 1 },\r\n // { x: 129.72972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 130.378378378378, y: 3.52941176470588, size: 1 },\r\n // { x: 131.027027027027, y: 3.49019607843137, size: 1 },\r\n // { x: 132.972972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 133.621621621622, y: 3.37254901960784, size: 1 },\r\n // { x: 134.27027027027, y: 3.49019607843137, size: 1 },\r\n // { x: 134.918918918919, y: 3.68627450980392, size: 1 },\r\n // { x: 140.108108108108, y: 3.33333333333333, size: 1 },\r\n // { x: 140.756756756757, y: 3.09803921568627, size: 1 },\r\n // { x: 142.702702702703, y: 3.84313725490196, size: 1 },\r\n // { x: 144.648648648649, y: 3.49019607843137, size: 1 },\r\n // { x: 148.540540540541, y: 3.96078431372549, size: 1 },\r\n // { x: 149.189189189189, y: 3.41176470588235, size: 1 },\r\n // { x: 149.837837837838, y: 3.68627450980392, size: 1 },\r\n // { x: 151.135135135135, y: 3.72549019607843, size: 1 },\r\n // { x: 153.72972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 155.027027027027, y: 3.68627450980392, size: 1 },\r\n // { x: 157.621621621622, y: 3.56862745098039, size: 1 },\r\n // { x: 158.918918918919, y: 3.64705882352941, size: 1 },\r\n // { x: 160.864864864865, y: 3.45098039215686, size: 1 },\r\n // { x: 162.810810810811, y: 3.33333333333333, size: 1 },\r\n // { x: 165.405405405405, y: 3.80392156862745, size: 1 },\r\n // { x: 167.351351351351, y: 3.80392156862745, size: 1 },\r\n // { x: 168, y: 3.80392156862745, size: 1 },\r\n // { x: 171.243243243243, y: 3.88235294117647, size: 1 },\r\n // { x: 173.837837837838, y: 3.72549019607843, size: 1 },\r\n // { x: 174.486486486486, y: 3.84313725490196, size: 1 },\r\n // { x: 175.135135135135, y: 3.80392156862745, size: 1 },\r\n // { x: 176.432432432432, y: 3.56862745098039, size: 1 },\r\n // { x: 177.081081081081, y: 3.80392156862745, size: 1 },\r\n // { x: 179.027027027027, y: 3.72549019607843, size: 1 },\r\n // { x: 180.324324324324, y: 3.56862745098039, size: 1 },\r\n // { x: 182.27027027027, y: 3.49019607843137, size: 1 },\r\n // { x: 182.918918918919, y: 3.52941176470588, size: 1 },\r\n // { x: 183.567567567568, y: 3.17647058823529, size: 1 },\r\n // { x: 184.216216216216, y: 3.17647058823529, size: 1 },\r\n // { x: 185.513513513514, y: 3.92156862745098, size: 1 },\r\n // { x: 186.162162162162, y: 3.72549019607843, size: 1 },\r\n // { x: 190.054054054054, y: 3.45098039215686, size: 1 },\r\n // { x: 191.351351351351, y: 3.56862745098039, size: 1 },\r\n // { x: 193.297297297297, y: 3.68627450980392, size: 1 },\r\n // { x: 193.945945945946, y: 3.6078431372549, size: 1 },\r\n // { x: 195.243243243243, y: 3.52941176470588, size: 1 },\r\n // { x: 201.72972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 203.027027027027, y: 3.80392156862745, size: 1 },\r\n // { x: 203.675675675676, y: 3.45098039215686, size: 1 },\r\n // { x: 206.27027027027, y: 3.6078431372549, size: 1 },\r\n // { x: 206.918918918919, y: 3.88235294117647, size: 1 },\r\n // { x: 208.216216216216, y: 3.56862745098039, size: 1 },\r\n // { x: 210.162162162162, y: 3.96078431372549, size: 1 },\r\n // { x: 210.810810810811, y: 3.49019607843137, size: 1 },\r\n // { x: 212.108108108108, y: 3.84313725490196, size: 1 },\r\n // { x: 212.756756756757, y: 3.96078431372549, size: 1 },\r\n // { x: 214.702702702703, y: 3.76470588235294, size: 1 },\r\n // { x: 216.648648648649, y: 3.80392156862745, size: 1 },\r\n // { x: 217.945945945946, y: 3.72549019607843, size: 1 },\r\n // { x: 219.891891891892, y: 3.52941176470588, size: 1 },\r\n // { x: 222.486486486486, y: 3.80392156862745, size: 1 },\r\n // { x: 223.135135135135, y: 3.45098039215686, size: 1 },\r\n // { x: 225.72972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 227.027027027027, y: 3.09803921568627, size: 1 },\r\n // { x: 227.675675675676, y: 3.17647058823529, size: 1 },\r\n // { x: 230.918918918919, y: 3.49019607843137, size: 1 },\r\n // { x: 232.864864864865, y: 3.80392156862745, size: 1 },\r\n // { x: 238.054054054054, y: 3.6078431372549, size: 1 },\r\n // { x: 238.702702702703, y: 3.45098039215686, size: 1 },\r\n // { x: 239.351351351351, y: 3.49019607843137, size: 1 },\r\n // { x: 240.648648648649, y: 3.56862745098039, size: 1 },\r\n // { x: 241.297297297297, y: 3.45098039215686, size: 1 },\r\n // { x: 242.594594594595, y: 3.76470588235294, size: 1 },\r\n // { x: 243.243243243243, y: 3.49019607843137, size: 1 },\r\n // { x: 243.891891891892, y: 3.84313725490196, size: 1 },\r\n // { x: 244.540540540541, y: 3.45098039215686, size: 1 },\r\n // { x: 246.486486486486, y: 3.45098039215686, size: 1 },\r\n // { x: 247.135135135135, y: 3.6078431372549, size: 1 },\r\n // { x: 247.783783783784, y: 3.64705882352941, size: 1 },\r\n // { x: 248.432432432432, y: 3.76470588235294, size: 1 },\r\n // { x: 250.378378378378, y: 3.76470588235294, size: 1 },\r\n // { x: 254.918918918919, y: 3.52941176470588, size: 1 },\r\n // { x: 258.810810810811, y: 3.92156862745098, size: 1 },\r\n // { x: 259.459459459459, y: 3.72549019607843, size: 1 },\r\n // { x: 260.108108108108, y: 3.45098039215686, size: 1 },\r\n // { x: 264, y: 3.68627450980392, size: 1 },\r\n // { x: 264.648648648649, y: 3.68627450980392, size: 1 },\r\n // { x: 265.297297297297, y: 3.6078431372549, size: 1 },\r\n // { x: 266.594594594595, y: 3.84313725490196, size: 1 },\r\n // { x: 267.891891891892, y: 3.88235294117647, size: 1 },\r\n // { x: 268.540540540541, y: 3.49019607843137, size: 1 },\r\n // { x: 269.189189189189, y: 3.41176470588235, size: 1 },\r\n // { x: 269.837837837838, y: 3.45098039215686, size: 1 },\r\n // { x: 270.486486486487, y: 3.09803921568627, size: 1 },\r\n // { x: 278.27027027027, y: 3.56862745098039, size: 1 },\r\n // { x: 278.918918918919, y: 3.64705882352941, size: 1 },\r\n // { x: 279.567567567568, y: 3.64705882352941, size: 1 },\r\n // { x: 283.459459459459, y: 3.52941176470588, size: 1 },\r\n // { x: 284.108108108108, y: 3.56862745098039, size: 1 },\r\n // { x: 284.756756756757, y: 3.64705882352941, size: 1 },\r\n // { x: 286.054054054054, y: 3.72549019607843, size: 1 },\r\n // { x: 286.702702702703, y: 3.80392156862745, size: 1 },\r\n // { x: 288, y: 3.84313725490196, size: 1 },\r\n // { x: 288.648648648649, y: 3.56862745098039, size: 1 },\r\n // { x: 289.945945945946, y: 3.68627450980392, size: 1 },\r\n // { x: 290.594594594595, y: 3.80392156862745, size: 1 },\r\n // { x: 293.837837837838, y: 3.84313725490196, size: 1 },\r\n // { x: 294.486486486487, y: 3.45098039215686, size: 1 },\r\n // { x: 295.135135135135, y: 3.84313725490196, size: 1 },\r\n // { x: 296.432432432432, y: 3.80392156862745, size: 1 },\r\n // { x: 297.72972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 299.027027027027, y: 3.45098039215686, size: 1 },\r\n // { x: 300.324324324324, y: 3.45098039215686, size: 1 },\r\n // { x: 303.567567567568, y: 3.64705882352941, size: 1 },\r\n // { x: 304.216216216216, y: 3.80392156862745, size: 1 },\r\n // { x: 307.459459459459, y: 3.52941176470588, size: 1 },\r\n // { x: 308.756756756757, y: 4.19607843137255, size: 1 },\r\n // { x: 310.054054054054, y: 3.72549019607843, size: 1 },\r\n // { x: 311.351351351351, y: 3.88235294117647, size: 1 },\r\n // { x: 312.648648648649, y: 3.29411764705882, size: 1 },\r\n // { x: 313.297297297297, y: 3.09803921568627, size: 1 },\r\n // { x: 313.945945945946, y: 2.90196078431373, size: 1 },\r\n // { x: 316.540540540541, y: 3.84313725490196, size: 1 },\r\n // { x: 317.837837837838, y: 3.6078431372549, size: 1 },\r\n // { x: 319.135135135135, y: 3.41176470588235, size: 1 },\r\n // { x: 319.783783783784, y: 3.92156862745098, size: 1 },\r\n // { x: 321.72972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 324.324324324324, y: 3.88235294117647, size: 1 },\r\n // { x: 324.972972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 331.459459459459, y: 3.68627450980392, size: 1 },\r\n // { x: 333.405405405405, y: 3.29411764705882, size: 1 },\r\n // { x: 334.054054054054, y: 3.33333333333333, size: 1 },\r\n // { x: 334.702702702703, y: 3.33333333333333, size: 1 },\r\n // { x: 335.351351351351, y: 3.13725490196078, size: 1 },\r\n // { x: 336, y: 3.29411764705882, size: 1 },\r\n // { x: 336.648648648649, y: 3.45098039215686, size: 1 },\r\n // { x: 337.945945945946, y: 3.56862745098039, size: 1 },\r\n // { x: 338.594594594595, y: 3.33333333333333, size: 1 },\r\n // { x: 342.486486486487, y: 3.80392156862745, size: 1 },\r\n // { x: 343.135135135135, y: 3.49019607843137, size: 1 },\r\n // { x: 345.72972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 347.027027027027, y: 3.45098039215686, size: 1 },\r\n // { x: 349.621621621622, y: 3.76470588235294, size: 1 },\r\n // { x: 350.27027027027, y: 3.6078431372549, size: 1 },\r\n // { x: 351.567567567568, y: 3.6078431372549, size: 1 },\r\n // { x: 353.513513513513, y: 3.41176470588235, size: 1 },\r\n // { x: 354.162162162162, y: 3.41176470588235, size: 1 },\r\n // { x: 354.810810810811, y: 3.29411764705882, size: 1 },\r\n // { x: 356.756756756757, y: 3.09803921568627, size: 1 },\r\n // { x: 357.405405405405, y: 3.05882352941176, size: 1 },\r\n // { x: 3.23741007194245, y: 3.6078431372549, size: 1 },\r\n // { x: 5.17985611510791, y: 3.88235294117647, size: 1 },\r\n // { x: 7.76978417266187, y: 3.52941176470588, size: 1 },\r\n // { x: 9.06474820143885, y: 3.88235294117647, size: 1 },\r\n // { x: 16.1870503597122, y: 3.41176470588235, size: 1 },\r\n // { x: 18.1294964028777, y: 2.86274509803922, size: 1 },\r\n // { x: 18.7769784172662, y: 2.90196078431373, size: 1 },\r\n // { x: 25.8992805755396, y: 3.96078431372549, size: 1 },\r\n // { x: 81.5827338129496, y: 3.52941176470588, size: 1 },\r\n // { x: 85.4676258992806, y: 3.88235294117647, size: 1 },\r\n // { x: 89.3525179856115, y: 3.92156862745098, size: 1 },\r\n // { x: 94.5323741007194, y: 3.84313725490196, size: 1 },\r\n // { x: 97.7697841726619, y: 4.03921568627451, size: 1 },\r\n // { x: 106.834532374101, y: 4, size: 1 },\r\n // { x: 126.258992805755, y: 2.98039215686275, size: 1 },\r\n // { x: 126.906474820144, y: 3.01960784313725, size: 1 },\r\n // { x: 148.920863309353, y: 3.45098039215686, size: 1 },\r\n // { x: 169.640287769784, y: 3.33333333333333, size: 1 },\r\n // { x: 184.532374100719, y: 3.80392156862745, size: 1 },\r\n // { x: 190.359712230216, y: 3.29411764705882, size: 1 },\r\n // { x: 191.007194244604, y: 3.37254901960784, size: 1 },\r\n // { x: 198.129496402878, y: 3.84313725490196, size: 1 },\r\n // { x: 199.424460431655, y: 3.88235294117647, size: 1 },\r\n // { x: 205.89928057554, y: 3.92156862745098, size: 1 },\r\n // { x: 212.374100719424, y: 3.01960784313725, size: 1 },\r\n // { x: 219.496402877698, y: 3.92156862745098, size: 1 },\r\n // { x: 236.978417266187, y: 3.41176470588235, size: 1 },\r\n // { x: 239.568345323741, y: 3.80392156862745, size: 1 },\r\n // { x: 240.215827338129, y: 3.92156862745098, size: 1 },\r\n // { x: 249.280575539568, y: 3.72549019607843, size: 1 },\r\n // { x: 264.820143884892, y: 4.07843137254902, size: 1 },\r\n // { x: 266.115107913669, y: 4.15686274509804, size: 1 },\r\n // { x: 282.302158273381, y: 3.88235294117647, size: 1 },\r\n // { x: 286.187050359712, y: 3.84313725490196, size: 1 },\r\n // { x: 289.424460431655, y: 3.84313725490196, size: 1 },\r\n // { x: 290.071942446043, y: 3.76470588235294, size: 1 },\r\n // { x: 306.258992805755, y: 3.88235294117647, size: 1 },\r\n // { x: 322.446043165468, y: 3.84313725490196, size: 1 },\r\n // { x: 323.093525179856, y: 4, size: 1 },\r\n // { x: 333.453237410072, y: 3.96078431372549, size: 1 },\r\n // { x: 352.877697841727, y: 3.88235294117647, size: 1 },\r\n // { x: 3.88489208633094, y: 2.98039215686275, size: 1 },\r\n // { x: 24.6043165467626, y: 3.2156862745098, size: 1 },\r\n // { x: 25.2517985611511, y: 3.17647058823529, size: 1 },\r\n // { x: 27.1942446043165, y: 3.72549019607843, size: 1 },\r\n // { x: 39.4964028776978, y: 3.80392156862745, size: 1 },\r\n // { x: 53.7410071942446, y: 4.07843137254902, size: 1 },\r\n // { x: 56.3309352517986, y: 3.96078431372549, size: 1 },\r\n // { x: 66.0431654676259, y: 3.41176470588235, size: 1 },\r\n // { x: 66.6906474820144, y: 3.6078431372549, size: 1 },\r\n // { x: 77.6978417266187, y: 3.88235294117647, size: 1 },\r\n // { x: 97.1223021582734, y: 3.6078431372549, size: 1 },\r\n // { x: 111.36690647482, y: 3.09803921568627, size: 1 },\r\n // { x: 112.014388489209, y: 3.05882352941176, size: 1 },\r\n // { x: 112.661870503597, y: 3.37254901960784, size: 1 },\r\n // { x: 128.201438848921, y: 3.64705882352941, size: 1 },\r\n // { x: 146.978417266187, y: 3.76470588235294, size: 1 },\r\n // { x: 155.395683453237, y: 2.58823529411765, size: 1 },\r\n // { x: 167.697841726619, y: 3.92156862745098, size: 1 },\r\n // { x: 196.187050359712, y: 3.33333333333333, size: 1 },\r\n // { x: 196.834532374101, y: 3.29411764705882, size: 1 },\r\n // { x: 197.482014388489, y: 3.13725490196078, size: 1 },\r\n // { x: 198.129496402878, y: 2.58823529411765, size: 1 },\r\n // { x: 216.906474820144, y: 3.80392156862745, size: 1 },\r\n // { x: 220.791366906475, y: 3.80392156862745, size: 1 },\r\n // { x: 238.920863309353, y: 3.41176470588235, size: 1 },\r\n // { x: 240.215827338129, y: 3.37254901960784, size: 1 },\r\n // { x: 240.863309352518, y: 3.25490196078431, size: 1 },\r\n // { x: 247.338129496403, y: 3.80392156862745, size: 1 },\r\n // { x: 247.985611510791, y: 3.96078431372549, size: 1 },\r\n // { x: 250.575539568345, y: 3.64705882352941, size: 1 },\r\n // { x: 254.460431654676, y: 4, size: 1 },\r\n // { x: 255.755395683453, y: 3.88235294117647, size: 1 },\r\n // { x: 260.935251798561, y: 3.13725490196078, size: 1 },\r\n // { x: 261.58273381295, y: 3.17647058823529, size: 1 },\r\n // { x: 262.230215827338, y: 3.01960784313725, size: 1 },\r\n // { x: 262.877697841727, y: 3.09803921568627, size: 1 },\r\n // { x: 263.525179856115, y: 2.98039215686275, size: 1 },\r\n // { x: 279.064748201439, y: 3.84313725490196, size: 1 },\r\n // { x: 280.359712230216, y: 3.88235294117647, size: 1 },\r\n // { x: 282.94964028777, y: 3.37254901960784, size: 1 },\r\n // { x: 283.597122302158, y: 2.98039215686275, size: 1 },\r\n // { x: 284.244604316547, y: 2.62745098039216, size: 1 },\r\n // { x: 284.892086330935, y: 2.35294117647059, size: 1 },\r\n // { x: 294.604316546763, y: 3.92156862745098, size: 1 },\r\n // { x: 300.431654676259, y: 3.96078431372549, size: 1 },\r\n // { x: 306.258992805755, y: 3.25490196078431, size: 1 },\r\n // { x: 325.68345323741, y: 3.25490196078431, size: 1 },\r\n // { x: 326.330935251799, y: 3.2156862745098, size: 1 },\r\n // { x: 327.625899280576, y: 2.27450980392157, size: 1 },\r\n // { x: 332.805755395683, y: 3.92156862745098, size: 1 },\r\n // { x: 348.992805755396, y: 3.33333333333333, size: 1 },\r\n // { x: 9.71223021582734, y: 3.29411764705882, size: 1 },\r\n // { x: 11.0071942446043, y: 2.62745098039216, size: 1 },\r\n // { x: 11.6546762589928, y: 3.41176470588235, size: 1 },\r\n // { x: 20.0719424460432, y: 3.92156862745098, size: 1 },\r\n // { x: 35.6115107913669, y: 3.84313725490196, size: 1 },\r\n // { x: 53.0935251798561, y: 3.13725490196078, size: 1 },\r\n // { x: 53.7410071942446, y: 2.31372549019608, size: 1 },\r\n // { x: 54.3884892086331, y: 2.27450980392157, size: 1 },\r\n // { x: 61.5107913669065, y: 3.88235294117647, size: 1 },\r\n // { x: 90.6474820143885, y: 3.80392156862745, size: 1 },\r\n // { x: 95.1798561151079, y: 3.37254901960784, size: 1 },\r\n // { x: 96.4748201438849, y: 3.2156862745098, size: 1 },\r\n // { x: 97.7697841726619, y: 3.17647058823529, size: 1 },\r\n // { x: 117.841726618705, y: 4, size: 1 },\r\n // { x: 121.079136690647, y: 3.13725490196078, size: 1 },\r\n // { x: 121.726618705036, y: 3.33333333333333, size: 1 },\r\n // { x: 122.374100719424, y: 3.25490196078431, size: 1 },\r\n // { x: 126.258992805755, y: 3.25490196078431, size: 1 },\r\n // { x: 129.496402877698, y: 3.41176470588235, size: 1 },\r\n // { x: 130.143884892086, y: 3.17647058823529, size: 1 },\r\n // { x: 132.086330935252, y: 3.13725490196078, size: 1 },\r\n // { x: 132.73381294964, y: 3.37254901960784, size: 1 },\r\n // { x: 134.028776978417, y: 3.33333333333333, size: 1 },\r\n // { x: 135.323741007194, y: 3.2156862745098, size: 1 },\r\n // { x: 137.913669064748, y: 3.25490196078431, size: 1 },\r\n // { x: 139.856115107914, y: 2.90196078431373, size: 1 },\r\n // { x: 140.503597122302, y: 3.05882352941176, size: 1 },\r\n // { x: 162.517985611511, y: 3.33333333333333, size: 1 },\r\n // { x: 183.237410071942, y: 3.09803921568627, size: 1 },\r\n // { x: 183.884892086331, y: 2.74509803921569, size: 1 },\r\n // { x: 200.071942446043, y: 3.80392156862745, size: 1 },\r\n // { x: 204.604316546763, y: 3.29411764705882, size: 1 },\r\n // { x: 205.89928057554, y: 3.25490196078431, size: 1 },\r\n // { x: 206.546762589928, y: 3.17647058823529, size: 1 },\r\n // { x: 207.194244604317, y: 3.05882352941176, size: 1 },\r\n // { x: 209.136690647482, y: 3.29411764705882, size: 1 },\r\n // { x: 211.079136690647, y: 3.17647058823529, size: 1 },\r\n // { x: 212.374100719424, y: 3.33333333333333, size: 1 },\r\n // { x: 213.021582733813, y: 3.17647058823529, size: 1 },\r\n // { x: 214.964028776978, y: 3.25490196078431, size: 1 },\r\n // { x: 215.611510791367, y: 3.33333333333333, size: 1 },\r\n // { x: 216.258992805755, y: 3.17647058823529, size: 1 },\r\n // { x: 216.906474820144, y: 3.17647058823529, size: 1 },\r\n // { x: 217.553956834532, y: 3.33333333333333, size: 1 },\r\n // { x: 223.381294964029, y: 3.2156862745098, size: 1 },\r\n // { x: 224.028776978417, y: 3.17647058823529, size: 1 },\r\n // { x: 225.323741007194, y: 2.94117647058824, size: 1 },\r\n // { x: 225.971223021583, y: 3.05882352941176, size: 1 },\r\n // { x: 226.618705035971, y: 1.6078431372549, size: 1 },\r\n // { x: 227.26618705036, y: 1.45098039215686, size: 1 },\r\n // { x: 227.913669064748, y: 1.56862745098039, size: 1 },\r\n // { x: 228.561151079137, y: 1.17647058823529, size: 1 },\r\n // { x: 231.151079136691, y: 2.86274509803922, size: 1 },\r\n // { x: 235.68345323741, y: 3.01960784313725, size: 1 },\r\n // { x: 236.330935251799, y: 3.01960784313725, size: 1 },\r\n // { x: 241.510791366906, y: 3.37254901960784, size: 1 },\r\n // { x: 242.158273381295, y: 2.82352941176471, size: 1 },\r\n // { x: 242.805755395683, y: 3.29411764705882, size: 1 },\r\n // { x: 244.748201438849, y: 3.33333333333333, size: 1 },\r\n // { x: 245.395683453237, y: 3.33333333333333, size: 1 },\r\n // { x: 246.690647482014, y: 3.2156862745098, size: 1 },\r\n // { x: 247.338129496403, y: 3.13725490196078, size: 1 },\r\n // { x: 247.985611510791, y: 2.11764705882353, size: 1 },\r\n // { x: 248.63309352518, y: 2.35294117647059, size: 1 },\r\n // { x: 270, y: 3.13725490196078, size: 1 },\r\n // { x: 279.712230215827, y: 3.92156862745098, size: 1 },\r\n // { x: 291.36690647482, y: 2.86274509803922, size: 1 },\r\n // { x: 292.014388489209, y: 3.29411764705882, size: 1 },\r\n // { x: 293.956834532374, y: 4, size: 1 },\r\n // { x: 302.374100719424, y: 3.37254901960784, size: 1 },\r\n // { x: 304.964028776978, y: 3.88235294117647, size: 1 },\r\n // { x: 308.201438848921, y: 3.84313725490196, size: 1 },\r\n // { x: 311.438848920863, y: 3.05882352941176, size: 1 },\r\n // { x: 312.086330935252, y: 2.98039215686275, size: 1 },\r\n // { x: 312.73381294964, y: 1.68627450980392, size: 1 },\r\n // { x: 313.381294964029, y: 1.64705882352941, size: 1 },\r\n // { x: 316.618705035971, y: 3.2156862745098, size: 1 },\r\n // { x: 321.151079136691, y: 3.84313725490196, size: 1 },\r\n // { x: 324.388489208633, y: 3.33333333333333, size: 1 },\r\n // { x: 326.330935251799, y: 3.37254901960784, size: 1 },\r\n // { x: 328.273381294964, y: 3.88235294117647, size: 1 },\r\n // { x: 332.158273381295, y: 3.29411764705882, size: 1 },\r\n // { x: 333.453237410072, y: 3.33333333333333, size: 1 },\r\n // { x: 339.928057553957, y: 3.33333333333333, size: 1 },\r\n // { x: 341.223021582734, y: 3.45098039215686, size: 1 },\r\n // { x: 342.517985611511, y: 3.33333333333333, size: 1 },\r\n // { x: 351.58273381295, y: 3.45098039215686, size: 1 },\r\n // { x: 353.525179856115, y: 3.2156862745098, size: 1 },\r\n // { x: 354.172661870504, y: 3.37254901960784, size: 1 },\r\n // { x: 356.115107913669, y: 3.25490196078431, size: 1 },\r\n // { x: 358.705035971223, y: 3.45098039215686, size: 1 },\r\n // { x: 1.2972972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 1.94594594594595, y: 3.49019607843137, size: 1 },\r\n // { x: 2.59459459459459, y: 3.29411764705882, size: 1 },\r\n // { x: 4.54054054054054, y: 3.41176470588235, size: 1 },\r\n // { x: 7.13513513513514, y: 3.33333333333333, size: 1 },\r\n // { x: 9.08108108108108, y: 3.33333333333333, size: 1 },\r\n // { x: 9.72972972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 10.3783783783784, y: 3.41176470588235, size: 1 },\r\n // { x: 11.027027027027, y: 3.33333333333333, size: 1 },\r\n // { x: 14.2702702702703, y: 3.29411764705882, size: 1 },\r\n // { x: 16.8648648648649, y: 3.45098039215686, size: 1 },\r\n // { x: 17.5135135135135, y: 3.13725490196078, size: 1 },\r\n // { x: 18.1621621621622, y: 2.94117647058824, size: 1 },\r\n // { x: 20.1081081081081, y: 3.72549019607843, size: 1 },\r\n // { x: 21.4054054054054, y: 3.68627450980392, size: 1 },\r\n // { x: 27.8918918918919, y: 3.72549019607843, size: 1 },\r\n // { x: 28.5405405405405, y: 3.6078431372549, size: 1 },\r\n // { x: 29.1891891891892, y: 3.72549019607843, size: 1 },\r\n // { x: 31.7837837837838, y: 3.68627450980392, size: 1 },\r\n // { x: 33.7297297297297, y: 4.23529411764706, size: 1 },\r\n // { x: 34.3783783783784, y: 3.80392156862745, size: 1 },\r\n // { x: 35.6756756756757, y: 3.72549019607843, size: 1 },\r\n // { x: 36.3243243243243, y: 3.80392156862745, size: 1 },\r\n // { x: 37.6216216216216, y: 3.29411764705882, size: 1 },\r\n // { x: 38.2702702702703, y: 3.09803921568627, size: 1 },\r\n // { x: 38.9189189189189, y: 3.41176470588235, size: 1 },\r\n // { x: 39.5675675675676, y: 3.33333333333333, size: 1 },\r\n // { x: 40.8648648648649, y: 3.45098039215686, size: 1 },\r\n // { x: 41.5135135135135, y: 3.29411764705882, size: 1 },\r\n // { x: 42.8108108108108, y: 3.25490196078431, size: 1 },\r\n // { x: 44.7567567567568, y: 3.52941176470588, size: 1 },\r\n // { x: 46.7027027027027, y: 3.37254901960784, size: 1 },\r\n // { x: 47.3513513513514, y: 3.37254901960784, size: 1 },\r\n // { x: 49.2972972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 50.5945945945946, y: 3.33333333333333, size: 1 },\r\n // { x: 53.1891891891892, y: 3.49019607843137, size: 1 },\r\n // { x: 53.8378378378378, y: 3.45098039215686, size: 1 },\r\n // { x: 59.027027027027, y: 3.41176470588235, size: 1 },\r\n // { x: 59.6756756756757, y: 3.2156862745098, size: 1 },\r\n // { x: 60.3243243243243, y: 3.41176470588235, size: 1 },\r\n // { x: 60.972972972973, y: 3.25490196078431, size: 1 },\r\n // { x: 64.2162162162162, y: 3.33333333333333, size: 1 },\r\n // { x: 64.8648648648649, y: 3.45098039215686, size: 1 },\r\n // { x: 65.5135135135135, y: 3.37254901960784, size: 1 },\r\n // { x: 68.1081081081081, y: 3.45098039215686, size: 1 },\r\n // { x: 68.7567567567568, y: 3.29411764705882, size: 1 },\r\n // { x: 69.4054054054054, y: 3.45098039215686, size: 1 },\r\n // { x: 70.7027027027027, y: 3.45098039215686, size: 1 },\r\n // { x: 71.3513513513514, y: 3.33333333333333, size: 1 },\r\n // { x: 73.2972972972973, y: 3.2156862745098, size: 1 },\r\n // { x: 74.5945945945946, y: 3.37254901960784, size: 1 },\r\n // { x: 76.5405405405405, y: 3.41176470588235, size: 1 },\r\n // { x: 79.1351351351351, y: 3.33333333333333, size: 1 },\r\n // { x: 81.0810810810811, y: 3.33333333333333, size: 1 },\r\n // { x: 81.7297297297297, y: 2.94117647058824, size: 1 },\r\n // { x: 82.3783783783784, y: 2.70588235294118, size: 1 },\r\n // { x: 83.027027027027, y: 2.62745098039216, size: 1 },\r\n // { x: 83.6756756756757, y: 3.41176470588235, size: 1 },\r\n // { x: 84.3243243243243, y: 3.45098039215686, size: 1 },\r\n // { x: 84.972972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 86.2702702702703, y: 3.25490196078431, size: 1 },\r\n // { x: 86.9189189189189, y: 3.76470588235294, size: 1 },\r\n // { x: 89.5135135135135, y: 3.2156862745098, size: 1 },\r\n // { x: 90.1621621621622, y: 3.41176470588235, size: 1 },\r\n // { x: 92.1081081081081, y: 3.6078431372549, size: 1 },\r\n // { x: 94.054054054054, y: 3.29411764705882, size: 1 },\r\n // { x: 94.7027027027027, y: 3.29411764705882, size: 1 },\r\n // { x: 97.945945945946, y: 3.52941176470588, size: 1 },\r\n // { x: 99.2432432432432, y: 3.33333333333333, size: 1 },\r\n // { x: 100.540540540541, y: 3.37254901960784, size: 1 },\r\n // { x: 101.189189189189, y: 3.45098039215686, size: 1 },\r\n // { x: 102.486486486486, y: 3.25490196078431, size: 1 },\r\n // { x: 103.135135135135, y: 2.98039215686275, size: 1 },\r\n // { x: 103.783783783784, y: 2.58823529411765, size: 1 },\r\n // { x: 104.432432432432, y: 2.62745098039216, size: 1 },\r\n // { x: 105.72972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 107.675675675676, y: 3.64705882352941, size: 1 },\r\n // { x: 108.972972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 110.918918918919, y: 3.72549019607843, size: 1 },\r\n // { x: 111.567567567568, y: 3.6078431372549, size: 1 },\r\n // { x: 112.864864864865, y: 3.64705882352941, size: 1 },\r\n // { x: 113.513513513514, y: 3.88235294117647, size: 1 },\r\n // { x: 114.162162162162, y: 3.92156862745098, size: 1 },\r\n // { x: 116.756756756757, y: 3.76470588235294, size: 1 },\r\n // { x: 121.297297297297, y: 4.07843137254902, size: 1 },\r\n // { x: 123.891891891892, y: 3.05882352941176, size: 1 },\r\n // { x: 124.540540540541, y: 3.17647058823529, size: 1 },\r\n // { x: 125.837837837838, y: 3.41176470588235, size: 1 },\r\n // { x: 127.135135135135, y: 3.41176470588235, size: 1 },\r\n // { x: 129.081081081081, y: 3.49019607843137, size: 1 },\r\n // { x: 129.72972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 134.27027027027, y: 3.92156862745098, size: 1 },\r\n // { x: 136.216216216216, y: 3.72549019607843, size: 1 },\r\n // { x: 136.864864864865, y: 3.33333333333333, size: 1 },\r\n // { x: 138.810810810811, y: 3.37254901960784, size: 1 },\r\n // { x: 140.108108108108, y: 3.45098039215686, size: 1 },\r\n // { x: 141.405405405405, y: 3.64705882352941, size: 1 },\r\n // { x: 142.702702702703, y: 3.6078431372549, size: 1 },\r\n // { x: 143.351351351351, y: 3.49019607843137, size: 1 },\r\n // { x: 145.297297297297, y: 3.37254901960784, size: 1 },\r\n // { x: 145.945945945946, y: 3.41176470588235, size: 1 },\r\n // { x: 147.243243243243, y: 3.52941176470588, size: 1 },\r\n // { x: 148.540540540541, y: 3.56862745098039, size: 1 },\r\n // { x: 149.189189189189, y: 3.52941176470588, size: 1 },\r\n // { x: 153.72972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 158.27027027027, y: 3.45098039215686, size: 1 },\r\n // { x: 158.918918918919, y: 3.52941176470588, size: 1 },\r\n // { x: 159.567567567568, y: 3.49019607843137, size: 1 },\r\n // { x: 161.513513513514, y: 3.41176470588235, size: 1 },\r\n // { x: 162.162162162162, y: 3.49019607843137, size: 1 },\r\n // { x: 164.108108108108, y: 3.29411764705882, size: 1 },\r\n // { x: 167.351351351351, y: 3.6078431372549, size: 1 },\r\n // { x: 168.648648648649, y: 3.68627450980392, size: 1 },\r\n // { x: 169.945945945946, y: 3.92156862745098, size: 1 },\r\n // { x: 171.243243243243, y: 3.52941176470588, size: 1 },\r\n // { x: 173.837837837838, y: 3.56862745098039, size: 1 },\r\n // { x: 176.432432432432, y: 3.76470588235294, size: 1 },\r\n // { x: 178.378378378378, y: 3.76470588235294, size: 1 },\r\n // { x: 180.972972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 181.621621621622, y: 3.68627450980392, size: 1 },\r\n // { x: 183.567567567568, y: 4, size: 1 },\r\n // { x: 184.864864864865, y: 3.76470588235294, size: 1 },\r\n // { x: 191.351351351351, y: 3.41176470588235, size: 1 },\r\n // { x: 194.594594594595, y: 3.52941176470588, size: 1 },\r\n // { x: 197.837837837838, y: 3.76470588235294, size: 1 },\r\n // { x: 201.081081081081, y: 3.6078431372549, size: 1 },\r\n // { x: 206.27027027027, y: 4, size: 1 },\r\n // { x: 207.567567567568, y: 3.80392156862745, size: 1 },\r\n // { x: 209.513513513514, y: 3.76470588235294, size: 1 },\r\n // { x: 210.810810810811, y: 3.45098039215686, size: 1 },\r\n // { x: 212.108108108108, y: 3.56862745098039, size: 1 },\r\n // { x: 215.351351351351, y: 3.76470588235294, size: 1 },\r\n // { x: 216, y: 3.76470588235294, size: 1 },\r\n // { x: 216.648648648649, y: 3.84313725490196, size: 1 },\r\n // { x: 217.945945945946, y: 3.84313725490196, size: 1 },\r\n // { x: 218.594594594595, y: 4.03921568627451, size: 1 },\r\n // { x: 221.189189189189, y: 3.76470588235294, size: 1 },\r\n // { x: 225.081081081081, y: 3.64705882352941, size: 1 },\r\n // { x: 227.027027027027, y: 3.72549019607843, size: 1 },\r\n // { x: 228.972972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 229.621621621622, y: 3.64705882352941, size: 1 },\r\n // { x: 230.27027027027, y: 3.76470588235294, size: 1 },\r\n // { x: 232.216216216216, y: 3.2156862745098, size: 1 },\r\n // { x: 232.864864864865, y: 3.2156862745098, size: 1 },\r\n // { x: 233.513513513514, y: 3.09803921568627, size: 1 },\r\n // { x: 234.162162162162, y: 3.17647058823529, size: 1 },\r\n // { x: 234.810810810811, y: 2.98039215686275, size: 1 },\r\n // { x: 235.459459459459, y: 2.70588235294118, size: 1 },\r\n // { x: 236.108108108108, y: 3.13725490196078, size: 1 },\r\n // { x: 237.405405405405, y: 3.96078431372549, size: 1 },\r\n // { x: 239.351351351351, y: 3.52941176470588, size: 1 },\r\n // { x: 242.594594594595, y: 3.80392156862745, size: 1 },\r\n // { x: 243.243243243243, y: 3.84313725490196, size: 1 },\r\n // { x: 244.540540540541, y: 3.92156862745098, size: 1 },\r\n // { x: 251.027027027027, y: 3.56862745098039, size: 1 },\r\n // { x: 253.621621621622, y: 3.64705882352941, size: 1 },\r\n // { x: 254.918918918919, y: 3.33333333333333, size: 1 },\r\n // { x: 255.567567567568, y: 2.98039215686275, size: 1 },\r\n // { x: 256.864864864865, y: 3.68627450980392, size: 1 },\r\n // { x: 258.810810810811, y: 3.64705882352941, size: 1 },\r\n // { x: 259.459459459459, y: 3.64705882352941, size: 1 },\r\n // { x: 265.297297297297, y: 3.84313725490196, size: 1 },\r\n // { x: 267.243243243243, y: 3.84313725490196, size: 1 },\r\n // { x: 267.891891891892, y: 3.68627450980392, size: 1 },\r\n // { x: 268.540540540541, y: 3.56862745098039, size: 1 },\r\n // { x: 271.135135135135, y: 3.76470588235294, size: 1 },\r\n // { x: 273.72972972973, y: 4, size: 1 },\r\n // { x: 275.027027027027, y: 3.88235294117647, size: 1 },\r\n // { x: 276.324324324324, y: 3.41176470588235, size: 1 },\r\n // { x: 276.972972972973, y: 3.33333333333333, size: 1 },\r\n // { x: 277.621621621622, y: 3.29411764705882, size: 1 },\r\n // { x: 280.216216216216, y: 3.56862745098039, size: 1 },\r\n // { x: 282.810810810811, y: 3.37254901960784, size: 1 },\r\n // { x: 284.108108108108, y: 3.72549019607843, size: 1 },\r\n // { x: 285.405405405405, y: 3.6078431372549, size: 1 },\r\n // { x: 286.702702702703, y: 3.72549019607843, size: 1 },\r\n // { x: 288, y: 3.80392156862745, size: 1 },\r\n // { x: 290.594594594595, y: 3.6078431372549, size: 1 },\r\n // { x: 294.486486486487, y: 3.92156862745098, size: 1 },\r\n // { x: 295.783783783784, y: 3.45098039215686, size: 1 },\r\n // { x: 297.72972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 298.378378378378, y: 3.05882352941176, size: 1 },\r\n // { x: 299.027027027027, y: 3.17647058823529, size: 1 },\r\n // { x: 300.972972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 302.27027027027, y: 3.6078431372549, size: 1 },\r\n // { x: 302.918918918919, y: 3.56862745098039, size: 1 },\r\n // { x: 303.567567567568, y: 3.76470588235294, size: 1 },\r\n // { x: 304.216216216216, y: 3.72549019607843, size: 1 },\r\n // { x: 304.864864864865, y: 3.72549019607843, size: 1 },\r\n // { x: 305.513513513513, y: 3.84313725490196, size: 1 },\r\n // { x: 307.459459459459, y: 3.45098039215686, size: 1 },\r\n // { x: 308.108108108108, y: 3.92156862745098, size: 1 },\r\n // { x: 308.756756756757, y: 4, size: 1 },\r\n // { x: 309.405405405405, y: 3.68627450980392, size: 1 },\r\n // { x: 312.648648648649, y: 3.76470588235294, size: 1 },\r\n // { x: 313.945945945946, y: 3.88235294117647, size: 1 },\r\n // { x: 314.594594594595, y: 3.72549019607843, size: 1 },\r\n // { x: 316.540540540541, y: 3.49019607843137, size: 1 },\r\n // { x: 317.189189189189, y: 3.45098039215686, size: 1 },\r\n // { x: 317.837837837838, y: 3.72549019607843, size: 1 },\r\n // { x: 319.135135135135, y: 3.2156862745098, size: 1 },\r\n // { x: 319.783783783784, y: 3.29411764705882, size: 1 },\r\n // { x: 320.432432432432, y: 3.13725490196078, size: 1 },\r\n // { x: 321.081081081081, y: 3.37254901960784, size: 1 },\r\n // { x: 321.72972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 324.324324324324, y: 3.64705882352941, size: 1 },\r\n // { x: 324.972972972973, y: 3.92156862745098, size: 1 },\r\n // { x: 326.27027027027, y: 3.84313725490196, size: 1 },\r\n // { x: 327.567567567568, y: 3.56862745098039, size: 1 },\r\n // { x: 328.216216216216, y: 3.64705882352941, size: 1 },\r\n // { x: 329.513513513513, y: 3.64705882352941, size: 1 },\r\n // { x: 338.594594594595, y: 3.84313725490196, size: 1 },\r\n // { x: 339.243243243243, y: 3.68627450980392, size: 1 },\r\n // { x: 341.189189189189, y: 3.33333333333333, size: 1 },\r\n // { x: 343.135135135135, y: 3.80392156862745, size: 1 },\r\n // { x: 343.783783783784, y: 3.76470588235294, size: 1 },\r\n // { x: 345.081081081081, y: 3.76470588235294, size: 1 },\r\n // { x: 347.027027027027, y: 3.84313725490196, size: 1 },\r\n // { x: 352.864864864865, y: 3.84313725490196, size: 1 },\r\n // { x: 358.702702702703, y: 3.72549019607843, size: 1 },\r\n // { x: 3.23741007194245, y: 3.01960784313725, size: 1 },\r\n // { x: 3.88489208633094, y: 3.13725490196078, size: 1 },\r\n // { x: 8.41726618705036, y: 4.03921568627451, size: 1 },\r\n // { x: 9.71223021582734, y: 3.80392156862745, size: 1 },\r\n // { x: 17.4820143884892, y: 4, size: 1 },\r\n // { x: 18.7769784172662, y: 3.76470588235294, size: 1 },\r\n // { x: 25.2517985611511, y: 2.58823529411765, size: 1 },\r\n // { x: 49.2086330935252, y: 3.80392156862745, size: 1 },\r\n // { x: 67.9856115107914, y: 3.2156862745098, size: 1 },\r\n // { x: 70.5755395683453, y: 3.92156862745098, size: 1 },\r\n // { x: 71.8705035971223, y: 3.80392156862745, size: 1 },\r\n // { x: 79.6402877697842, y: 3.92156862745098, size: 1 },\r\n // { x: 81.5827338129496, y: 3.80392156862745, size: 1 },\r\n // { x: 82.2302158273381, y: 4.03921568627451, size: 1 },\r\n // { x: 83.5251798561151, y: 3.76470588235294, size: 1 },\r\n // { x: 84.1726618705036, y: 3.92156862745098, size: 1 },\r\n // { x: 91.9424460431655, y: 3.88235294117647, size: 1 },\r\n // { x: 96.4748201438849, y: 4.03921568627451, size: 1 },\r\n // { x: 99.0647482014388, y: 4, size: 1 },\r\n // { x: 99.7122302158273, y: 3.84313725490196, size: 1 },\r\n // { x: 101.007194244604, y: 4.27450980392157, size: 1 },\r\n // { x: 102.302158273381, y: 4.07843137254902, size: 1 },\r\n // { x: 106.187050359712, y: 3.92156862745098, size: 1 },\r\n // { x: 108.129496402878, y: 4, size: 1 },\r\n // { x: 112.014388489209, y: 3.13725490196078, size: 1 },\r\n // { x: 112.661870503597, y: 3.92156862745098, size: 1 },\r\n // { x: 113.309352517986, y: 3.84313725490196, size: 1 },\r\n // { x: 117.194244604317, y: 4.03921568627451, size: 1 },\r\n // { x: 119.136690647482, y: 3.88235294117647, size: 1 },\r\n // { x: 122.374100719424, y: 4, size: 1 },\r\n // { x: 123.021582733813, y: 3.96078431372549, size: 1 },\r\n // { x: 123.669064748201, y: 4, size: 1 },\r\n // { x: 124.31654676259, y: 4, size: 1 },\r\n // { x: 126.258992805755, y: 3.92156862745098, size: 1 },\r\n // { x: 128.848920863309, y: 4.07843137254902, size: 1 },\r\n // { x: 129.496402877698, y: 3.84313725490196, size: 1 },\r\n // { x: 130.143884892086, y: 4, size: 1 },\r\n // { x: 132.73381294964, y: 3.09803921568627, size: 1 },\r\n // { x: 133.381294964029, y: 3.05882352941176, size: 1 },\r\n // { x: 134.676258992806, y: 3.84313725490196, size: 1 },\r\n // { x: 141.151079136691, y: 3.92156862745098, size: 1 },\r\n // { x: 147.625899280576, y: 3.92156862745098, size: 1 },\r\n // { x: 148.273381294964, y: 4, size: 1 },\r\n // { x: 152.158273381295, y: 3.96078431372549, size: 1 },\r\n // { x: 153.453237410072, y: 3.2156862745098, size: 1 },\r\n // { x: 165.755395683453, y: 3.80392156862745, size: 1 },\r\n // { x: 172.230215827338, y: 4.07843137254902, size: 1 },\r\n // { x: 186.474820143885, y: 3.80392156862745, size: 1 },\r\n // { x: 196.834532374101, y: 3.41176470588235, size: 1 },\r\n // { x: 214.964028776978, y: 3.41176470588235, size: 1 },\r\n // { x: 218.201438848921, y: 3.2156862745098, size: 1 },\r\n // { x: 219.496402877698, y: 2.86274509803922, size: 1 },\r\n // { x: 220.143884892086, y: 2.98039215686275, size: 1 },\r\n // { x: 226.618705035971, y: 3.41176470588235, size: 1 },\r\n // { x: 227.26618705036, y: 3.29411764705882, size: 1 },\r\n // { x: 244.10071942446, y: 3.92156862745098, size: 1 },\r\n // { x: 249.280575539568, y: 3.76470588235294, size: 1 },\r\n // { x: 258.345323741007, y: 3.92156862745098, size: 1 },\r\n // { x: 262.230215827338, y: 3.88235294117647, size: 1 },\r\n // { x: 262.877697841727, y: 3.25490196078431, size: 1 },\r\n // { x: 276.474820143885, y: 3.84313725490196, size: 1 },\r\n // { x: 284.244604316547, y: 2.90196078431373, size: 1 },\r\n // { x: 302.374100719424, y: 3.41176470588235, size: 1 },\r\n // { x: 306.258992805755, y: 3.49019607843137, size: 1 },\r\n // { x: 313.381294964029, y: 3.41176470588235, size: 1 },\r\n // { x: 316.618705035971, y: 3.37254901960784, size: 1 },\r\n // { x: 320.503597122302, y: 3.84313725490196, size: 1 },\r\n // { x: 326.978417266187, y: 3.13725490196078, size: 1 },\r\n // { x: 356.762589928058, y: 3.92156862745098, size: 1 },\r\n // { x: 37.5539568345324, y: 3.72549019607843, size: 1 },\r\n // { x: 52.4460431654676, y: 3.45098039215686, size: 1 },\r\n // { x: 53.7410071942446, y: 3.09803921568627, size: 1 },\r\n // { x: 60.863309352518, y: 3.37254901960784, size: 1 },\r\n // { x: 66.6906474820144, y: 3.45098039215686, size: 1 },\r\n // { x: 77.6978417266187, y: 3.92156862745098, size: 1 },\r\n // { x: 83.5251798561151, y: 3.84313725490196, size: 1 },\r\n // { x: 86.7625899280576, y: 3.84313725490196, size: 1 },\r\n // { x: 94.5323741007194, y: 3.25490196078431, size: 1 },\r\n // { x: 95.8273381294964, y: 3.09803921568627, size: 1 },\r\n // { x: 96.4748201438849, y: 2.98039215686275, size: 1 },\r\n // { x: 97.1223021582734, y: 2.7843137254902, size: 1 },\r\n // { x: 113.956834532374, y: 3.84313725490196, size: 1 },\r\n // { x: 117.841726618705, y: 3.13725490196078, size: 1 },\r\n // { x: 119.784172661871, y: 3.2156862745098, size: 1 },\r\n // { x: 121.079136690647, y: 3.33333333333333, size: 1 },\r\n // { x: 128.848920863309, y: 3.29411764705882, size: 1 },\r\n // { x: 139.856115107914, y: 2.98039215686275, size: 1 },\r\n // { x: 140.503597122302, y: 2.7843137254902, size: 1 },\r\n // { x: 152.158273381295, y: 3.29411764705882, size: 1 },\r\n // { x: 157.338129496403, y: 3.41176470588235, size: 1 },\r\n // { x: 159.928057553957, y: 3.29411764705882, size: 1 },\r\n // { x: 161.223021582734, y: 3.09803921568627, size: 1 },\r\n // { x: 161.870503597122, y: 2.82352941176471, size: 1 },\r\n // { x: 164.460431654676, y: 3.41176470588235, size: 1 },\r\n // { x: 167.697841726619, y: 3.37254901960784, size: 1 },\r\n // { x: 174.172661870504, y: 3.25490196078431, size: 1 },\r\n // { x: 174.820143884892, y: 3.45098039215686, size: 1 },\r\n // { x: 183.884892086331, y: 3.37254901960784, size: 1 },\r\n // { x: 186.474820143885, y: 3.45098039215686, size: 1 },\r\n // { x: 189.064748201439, y: 3.29411764705882, size: 1 },\r\n // { x: 195.539568345324, y: 3.41176470588235, size: 1 },\r\n // { x: 201.36690647482, y: 3.37254901960784, size: 1 },\r\n // { x: 225.971223021583, y: 2.82352941176471, size: 1 },\r\n // { x: 226.618705035971, y: 2.82352941176471, size: 1 },\r\n // { x: 247.985611510791, y: 3.09803921568627, size: 1 },\r\n // { x: 251.223021582734, y: 3.92156862745098, size: 1 },\r\n // { x: 263.525179856115, y: 3.88235294117647, size: 1 },\r\n // { x: 268.705035971223, y: 3.13725490196078, size: 1 },\r\n // { x: 269.352517985611, y: 2.47058823529412, size: 1 },\r\n // { x: 270, y: 2.07843137254902, size: 1 },\r\n // { x: 282.302158273381, y: 4.03921568627451, size: 1 },\r\n // { x: 297.841726618705, y: 3.88235294117647, size: 1 },\r\n // { x: 305.611510791367, y: 3.37254901960784, size: 1 },\r\n // { x: 306.906474820144, y: 3.41176470588235, size: 1 },\r\n // { x: 308.201438848921, y: 3.33333333333333, size: 1 },\r\n // { x: 310.143884892086, y: 3.25490196078431, size: 1 },\r\n // { x: 312.73381294964, y: 3.17647058823529, size: 1 },\r\n // { x: 318.561151079137, y: 3.88235294117647, size: 1 },\r\n // { x: 332.805755395683, y: 3.37254901960784, size: 1 },\r\n // { x: 333.453237410072, y: 3.05882352941176, size: 1 },\r\n // { x: 334.748201438849, y: 2.82352941176471, size: 1 },\r\n // { x: 354.172661870504, y: 3.25490196078431, size: 1 },\r\n // { x: 355.467625899281, y: 2.7843137254902, size: 1 },\r\n // { x: 356.115107913669, y: 2.54901960784314, size: 1 },\r\n // { x: 358.705035971223, y: 3.84313725490196, size: 1 },\r\n // { x: 0.647482014388489, y: 3.92156862745098, size: 1 },\r\n // { x: 3.88489208633094, y: 3.41176470588235, size: 1 },\r\n // { x: 5.8273381294964, y: 3.88235294117647, size: 1 },\r\n // { x: 16.8345323741007, y: 3.41176470588235, size: 1 },\r\n // { x: 17.4820143884892, y: 3.01960784313725, size: 1 },\r\n // { x: 18.1294964028777, y: 3.25490196078431, size: 1 },\r\n // { x: 21.3669064748201, y: 3.84313725490196, size: 1 },\r\n // { x: 22.0143884892086, y: 4.07843137254902, size: 1 },\r\n // { x: 27.841726618705, y: 3.88235294117647, size: 1 },\r\n // { x: 31.726618705036, y: 3.84313725490196, size: 1 },\r\n // { x: 38.2014388489209, y: 3.25490196078431, size: 1 },\r\n // { x: 38.8489208633094, y: 2.50980392156863, size: 1 },\r\n // { x: 39.4964028776978, y: 2.58823529411765, size: 1 },\r\n // { x: 42.7338129496403, y: 4, size: 1 },\r\n // { x: 44.6762589928058, y: 4, size: 1 },\r\n // { x: 48.5611510791367, y: 3.92156862745098, size: 1 },\r\n // { x: 56.9784172661871, y: 3.45098039215686, size: 1 },\r\n // { x: 60.2158273381295, y: 2.94117647058824, size: 1 },\r\n // { x: 60.863309352518, y: 3.09803921568627, size: 1 },\r\n // { x: 65.3956834532374, y: 4, size: 1 },\r\n // { x: 81.5827338129496, y: 3.25490196078431, size: 1 },\r\n // { x: 82.2302158273381, y: 3.2156862745098, size: 1 },\r\n // { x: 82.8776978417266, y: 3.2156862745098, size: 1 },\r\n // { x: 84.1726618705036, y: 3.41176470588235, size: 1 },\r\n // { x: 84.8201438848921, y: 3.37254901960784, size: 1 },\r\n // { x: 86.1151079136691, y: 3.41176470588235, size: 1 },\r\n // { x: 87.410071942446, y: 3.80392156862745, size: 1 },\r\n // { x: 89.3525179856115, y: 3.41176470588235, size: 1 },\r\n // { x: 90.6474820143885, y: 3.25490196078431, size: 1 },\r\n // { x: 92.589928057554, y: 3.17647058823529, size: 1 },\r\n // { x: 93.8848920863309, y: 3.17647058823529, size: 1 },\r\n // { x: 94.5323741007194, y: 3.2156862745098, size: 1 },\r\n // { x: 95.1798561151079, y: 3.29411764705882, size: 1 },\r\n // { x: 95.8273381294964, y: 3.2156862745098, size: 1 },\r\n // { x: 97.7697841726619, y: 3.45098039215686, size: 1 },\r\n // { x: 100.359712230216, y: 3.2156862745098, size: 1 },\r\n // { x: 125.611510791367, y: 2.86274509803922, size: 1 },\r\n // { x: 133.381294964029, y: 3.84313725490196, size: 1 },\r\n // { x: 137.913669064748, y: 3.80392156862745, size: 1 },\r\n // { x: 146.978417266187, y: 3.05882352941176, size: 1 },\r\n // { x: 153.453237410072, y: 3.96078431372549, size: 1 },\r\n // { x: 160.575539568345, y: 3.37254901960784, size: 1 },\r\n // { x: 168.345323741007, y: 2.86274509803922, size: 1 },\r\n // { x: 168.992805755396, y: 2.74509803921569, size: 1 },\r\n // { x: 175.467625899281, y: 3.41176470588235, size: 1 },\r\n // { x: 198.129496402878, y: 3.49019607843137, size: 1 },\r\n // { x: 200.071942446043, y: 3.37254901960784, size: 1 },\r\n // { x: 202.014388489209, y: 3.37254901960784, size: 1 },\r\n // { x: 209.784172661871, y: 3.76470588235294, size: 1 },\r\n // { x: 213.669064748201, y: 3.25490196078431, size: 1 },\r\n // { x: 214.31654676259, y: 3.33333333333333, size: 1 },\r\n // { x: 218.201438848921, y: 3.41176470588235, size: 1 },\r\n // { x: 218.848920863309, y: 3.37254901960784, size: 1 },\r\n // { x: 221.438848920863, y: 3.88235294117647, size: 1 },\r\n // { x: 229.208633093525, y: 3.2156862745098, size: 1 },\r\n // { x: 231.798561151079, y: 3.33333333333333, size: 1 },\r\n // { x: 232.446043165468, y: 3.2156862745098, size: 1 },\r\n // { x: 233.093525179856, y: 2.74509803921569, size: 1 },\r\n // { x: 233.741007194245, y: 2.82352941176471, size: 1 },\r\n // { x: 245.395683453237, y: 3.41176470588235, size: 1 },\r\n // { x: 253.165467625899, y: 3.29411764705882, size: 1 },\r\n // { x: 254.460431654676, y: 2.70588235294118, size: 1 },\r\n // { x: 255.107913669065, y: 2.7843137254902, size: 1 },\r\n // { x: 268.057553956835, y: 3.37254901960784, size: 1 },\r\n // { x: 275.827338129496, y: 3.05882352941176, size: 1 },\r\n // { x: 276.474820143885, y: 2.58823529411765, size: 1 },\r\n // { x: 294.604316546763, y: 4, size: 1 },\r\n // { x: 298.489208633094, y: 3.17647058823529, size: 1 },\r\n // { x: 303.021582733813, y: 3.41176470588235, size: 1 },\r\n // { x: 317.913669064748, y: 3.45098039215686, size: 1 },\r\n // { x: 319.856115107914, y: 3.2156862745098, size: 1 },\r\n // { x: 334.10071942446, y: 3.52941176470588, size: 1 },\r\n // { x: 341.223021582734, y: 2.90196078431373, size: 1 },\r\n // { x: 341.870503597122, y: 3.13725490196078, size: 1 },\r\n // { x: 347.05035971223, y: 3.41176470588235, size: 1 },\r\n // { x: 353.525179856115, y: 3.49019607843137, size: 1 },\r\n // { x: 355.467625899281, y: 3.37254901960784, size: 1 },\r\n // { x: 0.648648648648649, y: 3.29411764705882, size: 1 },\r\n // { x: 1.2972972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 2.59459459459459, y: 3.13725490196078, size: 1 },\r\n // { x: 3.24324324324324, y: 2.98039215686275, size: 1 },\r\n // { x: 5.83783783783784, y: 3.52941176470588, size: 1 },\r\n // { x: 6.48648648648649, y: 3.45098039215686, size: 1 },\r\n // { x: 7.78378378378378, y: 3.56862745098039, size: 1 },\r\n // { x: 8.43243243243243, y: 3.41176470588235, size: 1 },\r\n // { x: 9.72972972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 11.6756756756757, y: 3.6078431372549, size: 1 },\r\n // { x: 13.6216216216216, y: 3.37254901960784, size: 1 },\r\n // { x: 14.9189189189189, y: 3.45098039215686, size: 1 },\r\n // { x: 16.8648648648649, y: 3.29411764705882, size: 1 },\r\n // { x: 17.5135135135135, y: 3.49019607843137, size: 1 },\r\n // { x: 22.0540540540541, y: 3.29411764705882, size: 1 },\r\n // { x: 24, y: 3.01960784313725, size: 1 },\r\n // { x: 24.6486486486486, y: 3.17647058823529, size: 1 },\r\n // { x: 25.2972972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 27.2432432432432, y: 3.37254901960784, size: 1 },\r\n // { x: 29.1891891891892, y: 3.52941176470588, size: 1 },\r\n // { x: 29.8378378378378, y: 3.88235294117647, size: 1 },\r\n // { x: 31.7837837837838, y: 3.64705882352941, size: 1 },\r\n // { x: 32.4324324324324, y: 3.49019607843137, size: 1 },\r\n // { x: 33.7297297297297, y: 3.33333333333333, size: 1 },\r\n // { x: 35.027027027027, y: 3.37254901960784, size: 1 },\r\n // { x: 35.6756756756757, y: 3.49019607843137, size: 1 },\r\n // { x: 36.3243243243243, y: 3.37254901960784, size: 1 },\r\n // { x: 36.972972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 38.2702702702703, y: 3.52941176470588, size: 1 },\r\n // { x: 39.5675675675676, y: 3.49019607843137, size: 1 },\r\n // { x: 44.1081081081081, y: 3.25490196078431, size: 1 },\r\n // { x: 45.4054054054054, y: 3.01960784313725, size: 1 },\r\n // { x: 46.0540540540541, y: 2.90196078431373, size: 1 },\r\n // { x: 48, y: 3.84313725490196, size: 1 },\r\n // { x: 49.2972972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 50.5945945945946, y: 3.56862745098039, size: 1 },\r\n // { x: 51.2432432432432, y: 3.49019607843137, size: 1 },\r\n // { x: 51.8918918918919, y: 3.72549019607843, size: 1 },\r\n // { x: 54.4864864864865, y: 3.84313725490196, size: 1 },\r\n // { x: 56.4324324324324, y: 3.80392156862745, size: 1 },\r\n // { x: 59.027027027027, y: 3.96078431372549, size: 1 },\r\n // { x: 59.6756756756757, y: 3.80392156862745, size: 1 },\r\n // { x: 62.2702702702703, y: 3.84313725490196, size: 1 },\r\n // { x: 64.8648648648649, y: 3.52941176470588, size: 1 },\r\n // { x: 67.4594594594595, y: 3.25490196078431, size: 1 },\r\n // { x: 68.1081081081081, y: 3.52941176470588, size: 1 },\r\n // { x: 68.7567567567568, y: 3.33333333333333, size: 1 },\r\n // { x: 73.2972972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 74.5945945945946, y: 3.84313725490196, size: 1 },\r\n // { x: 75.8918918918919, y: 3.37254901960784, size: 1 },\r\n // { x: 77.1891891891892, y: 3.52941176470588, size: 1 },\r\n // { x: 77.8378378378378, y: 3.37254901960784, size: 1 },\r\n // { x: 78.4864864864865, y: 3.52941176470588, size: 1 },\r\n // { x: 79.1351351351351, y: 3.76470588235294, size: 1 },\r\n // { x: 79.7837837837838, y: 3.49019607843137, size: 1 },\r\n // { x: 81.0810810810811, y: 3.64705882352941, size: 1 },\r\n // { x: 83.027027027027, y: 3.49019607843137, size: 1 },\r\n // { x: 83.6756756756757, y: 3.52941176470588, size: 1 },\r\n // { x: 86.2702702702703, y: 3.45098039215686, size: 1 },\r\n // { x: 86.9189189189189, y: 3.56862745098039, size: 1 },\r\n // { x: 87.5675675675676, y: 3.37254901960784, size: 1 },\r\n // { x: 88.8648648648649, y: 3.17647058823529, size: 1 },\r\n // { x: 89.5135135135135, y: 3.05882352941176, size: 1 },\r\n // { x: 90.1621621621622, y: 3.72549019607843, size: 1 },\r\n // { x: 92.1081081081081, y: 3.72549019607843, size: 1 },\r\n // { x: 94.054054054054, y: 3.52941176470588, size: 1 },\r\n // { x: 94.7027027027027, y: 3.64705882352941, size: 1 },\r\n // { x: 96, y: 3.56862745098039, size: 1 },\r\n // { x: 97.945945945946, y: 3.76470588235294, size: 1 },\r\n // { x: 98.5945945945946, y: 3.6078431372549, size: 1 },\r\n // { x: 102.486486486486, y: 3.92156862745098, size: 1 },\r\n // { x: 104.432432432432, y: 3.88235294117647, size: 1 },\r\n // { x: 106.378378378378, y: 3.72549019607843, size: 1 },\r\n // { x: 107.027027027027, y: 3.76470588235294, size: 1 },\r\n // { x: 107.675675675676, y: 3.49019607843137, size: 1 },\r\n // { x: 108.324324324324, y: 3.76470588235294, size: 1 },\r\n // { x: 108.972972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 110.918918918919, y: 3.33333333333333, size: 1 },\r\n // { x: 114.162162162162, y: 3.56862745098039, size: 1 },\r\n // { x: 114.810810810811, y: 3.80392156862745, size: 1 },\r\n // { x: 116.108108108108, y: 3.64705882352941, size: 1 },\r\n // { x: 116.756756756757, y: 3.41176470588235, size: 1 },\r\n // { x: 120, y: 3.49019607843137, size: 1 },\r\n // { x: 122.594594594595, y: 3.52941176470588, size: 1 },\r\n // { x: 123.891891891892, y: 3.37254901960784, size: 1 },\r\n // { x: 127.135135135135, y: 3.64705882352941, size: 1 },\r\n // { x: 130.378378378378, y: 3.45098039215686, size: 1 },\r\n // { x: 131.027027027027, y: 3.37254901960784, size: 1 },\r\n // { x: 131.675675675676, y: 3.37254901960784, size: 1 },\r\n // { x: 132.324324324324, y: 3.17647058823529, size: 1 },\r\n // { x: 132.972972972973, y: 3.05882352941176, size: 1 },\r\n // { x: 134.27027027027, y: 3.72549019607843, size: 1 },\r\n // { x: 136.864864864865, y: 3.80392156862745, size: 1 },\r\n // { x: 137.513513513514, y: 3.72549019607843, size: 1 },\r\n // { x: 142.054054054054, y: 3.6078431372549, size: 1 },\r\n // { x: 142.702702702703, y: 3.80392156862745, size: 1 },\r\n // { x: 144, y: 3.6078431372549, size: 1 },\r\n // { x: 148.540540540541, y: 3.6078431372549, size: 1 },\r\n // { x: 152.432432432432, y: 3.17647058823529, size: 1 },\r\n // { x: 153.081081081081, y: 3.41176470588235, size: 1 },\r\n // { x: 153.72972972973, y: 2.47058823529412, size: 1 },\r\n // { x: 154.378378378378, y: 2.31372549019608, size: 1 },\r\n // { x: 155.675675675676, y: 3.52941176470588, size: 1 },\r\n // { x: 157.621621621622, y: 3.45098039215686, size: 1 },\r\n // { x: 159.567567567568, y: 3.64705882352941, size: 1 },\r\n // { x: 161.513513513514, y: 3.29411764705882, size: 1 },\r\n // { x: 163.459459459459, y: 3.52941176470588, size: 1 },\r\n // { x: 166.054054054054, y: 3.37254901960784, size: 1 },\r\n // { x: 166.702702702703, y: 3.52941176470588, size: 1 },\r\n // { x: 168.648648648649, y: 3.6078431372549, size: 1 },\r\n // { x: 169.297297297297, y: 3.76470588235294, size: 1 },\r\n // { x: 169.945945945946, y: 3.52941176470588, size: 1 },\r\n // { x: 173.189189189189, y: 3.41176470588235, size: 1 },\r\n // { x: 175.135135135135, y: 3.52941176470588, size: 1 },\r\n // { x: 175.783783783784, y: 3.29411764705882, size: 1 },\r\n // { x: 176.432432432432, y: 3.33333333333333, size: 1 },\r\n // { x: 179.675675675676, y: 3.49019607843137, size: 1 },\r\n // { x: 183.567567567568, y: 3.52941176470588, size: 1 },\r\n // { x: 188.756756756757, y: 3.68627450980392, size: 1 },\r\n // { x: 190.702702702703, y: 3.45098039215686, size: 1 },\r\n // { x: 192, y: 3.56862745098039, size: 1 },\r\n // { x: 195.891891891892, y: 3.49019607843137, size: 1 },\r\n // { x: 196.540540540541, y: 3.41176470588235, size: 1 },\r\n // { x: 197.189189189189, y: 2.66666666666667, size: 1 },\r\n // { x: 197.837837837838, y: 2.74509803921569, size: 1 },\r\n // { x: 198.486486486486, y: 3.72549019607843, size: 1 },\r\n // { x: 200.432432432432, y: 3.52941176470588, size: 1 },\r\n // { x: 206.27027027027, y: 3.76470588235294, size: 1 },\r\n // { x: 206.918918918919, y: 3.49019607843137, size: 1 },\r\n // { x: 207.567567567568, y: 3.64705882352941, size: 1 },\r\n // { x: 210.162162162162, y: 3.45098039215686, size: 1 },\r\n // { x: 210.810810810811, y: 3.84313725490196, size: 1 },\r\n // { x: 211.459459459459, y: 3.45098039215686, size: 1 },\r\n // { x: 212.756756756757, y: 3.52941176470588, size: 1 },\r\n // { x: 214.702702702703, y: 3.84313725490196, size: 1 },\r\n // { x: 216, y: 3.92156862745098, size: 1 },\r\n // { x: 217.297297297297, y: 3.52941176470588, size: 1 },\r\n // { x: 217.945945945946, y: 3.33333333333333, size: 1 },\r\n // { x: 218.594594594595, y: 2.62745098039216, size: 1 },\r\n // { x: 219.243243243243, y: 2.35294117647059, size: 1 },\r\n // { x: 223.135135135135, y: 3.52941176470588, size: 1 },\r\n // { x: 224.432432432432, y: 3.92156862745098, size: 1 },\r\n // { x: 225.081081081081, y: 3.92156862745098, size: 1 },\r\n // { x: 228.324324324324, y: 3.6078431372549, size: 1 },\r\n // { x: 234.162162162162, y: 3.92156862745098, size: 1 },\r\n // { x: 235.459459459459, y: 3.76470588235294, size: 1 },\r\n // { x: 236.756756756757, y: 3.72549019607843, size: 1 },\r\n // { x: 238.054054054054, y: 3.64705882352941, size: 1 },\r\n // { x: 238.702702702703, y: 3.29411764705882, size: 1 },\r\n // { x: 239.351351351351, y: 3.17647058823529, size: 1 },\r\n // { x: 240, y: 3.05882352941176, size: 1 },\r\n // { x: 240.648648648649, y: 2.66666666666667, size: 1 },\r\n // { x: 241.297297297297, y: 3.01960784313725, size: 1 },\r\n // { x: 241.945945945946, y: 3.37254901960784, size: 1 },\r\n // { x: 242.594594594595, y: 3.33333333333333, size: 1 },\r\n // { x: 243.243243243243, y: 3.41176470588235, size: 1 },\r\n // { x: 243.891891891892, y: 3.37254901960784, size: 1 },\r\n // { x: 245.189189189189, y: 3.6078431372549, size: 1 },\r\n // { x: 247.783783783784, y: 3.17647058823529, size: 1 },\r\n // { x: 248.432432432432, y: 3.49019607843137, size: 1 },\r\n // { x: 252.324324324324, y: 3.2156862745098, size: 1 },\r\n // { x: 252.972972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 256.216216216216, y: 3.45098039215686, size: 1 },\r\n // { x: 256.864864864865, y: 3.33333333333333, size: 1 },\r\n // { x: 258.810810810811, y: 3.49019607843137, size: 1 },\r\n // { x: 259.459459459459, y: 3.45098039215686, size: 1 },\r\n // { x: 261.405405405405, y: 3.37254901960784, size: 1 },\r\n // { x: 262.054054054054, y: 2.86274509803922, size: 1 },\r\n // { x: 262.702702702703, y: 2.7843137254902, size: 1 },\r\n // { x: 263.351351351351, y: 3.56862745098039, size: 1 },\r\n // { x: 264, y: 3.76470588235294, size: 1 },\r\n // { x: 265.945945945946, y: 3.56862745098039, size: 1 },\r\n // { x: 269.837837837838, y: 3.41176470588235, size: 1 },\r\n // { x: 274.378378378378, y: 3.76470588235294, size: 1 },\r\n // { x: 277.621621621622, y: 3.64705882352941, size: 1 },\r\n // { x: 278.918918918919, y: 3.52941176470588, size: 1 },\r\n // { x: 279.567567567568, y: 3.56862745098039, size: 1 },\r\n // { x: 282.162162162162, y: 3.33333333333333, size: 1 },\r\n // { x: 286.702702702703, y: 3.64705882352941, size: 1 },\r\n // { x: 289.297297297297, y: 3.41176470588235, size: 1 },\r\n // { x: 289.945945945946, y: 3.76470588235294, size: 1 },\r\n // { x: 291.243243243243, y: 3.49019607843137, size: 1 },\r\n // { x: 292.540540540541, y: 3.84313725490196, size: 1 },\r\n // { x: 302.27027027027, y: 3.52941176470588, size: 1 },\r\n // { x: 302.918918918919, y: 3.45098039215686, size: 1 },\r\n // { x: 303.567567567568, y: 3.01960784313725, size: 1 },\r\n // { x: 304.216216216216, y: 3.01960784313725, size: 1 },\r\n // { x: 304.864864864865, y: 2.94117647058824, size: 1 },\r\n // { x: 305.513513513513, y: 1.76470588235294, size: 1 },\r\n // { x: 306.162162162162, y: 3.17647058823529, size: 1 },\r\n // { x: 308.108108108108, y: 3.41176470588235, size: 1 },\r\n // { x: 311.351351351351, y: 3.49019607843137, size: 1 },\r\n // { x: 312.648648648649, y: 3.52941176470588, size: 1 },\r\n // { x: 313.297297297297, y: 3.29411764705882, size: 1 },\r\n // { x: 315.891891891892, y: 3.52941176470588, size: 1 },\r\n // { x: 318.486486486487, y: 3.29411764705882, size: 1 },\r\n // { x: 320.432432432432, y: 4.03921568627451, size: 1 },\r\n // { x: 321.72972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 322.378378378378, y: 3.56862745098039, size: 1 },\r\n // { x: 324.972972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 325.621621621622, y: 3.2156862745098, size: 1 },\r\n // { x: 326.27027027027, y: 3.2156862745098, size: 1 },\r\n // { x: 326.918918918919, y: 3.72549019607843, size: 1 },\r\n // { x: 328.216216216216, y: 3.52941176470588, size: 1 },\r\n // { x: 330.810810810811, y: 3.64705882352941, size: 1 },\r\n // { x: 334.054054054054, y: 3.45098039215686, size: 1 },\r\n // { x: 335.351351351351, y: 3.6078431372549, size: 1 },\r\n // { x: 336, y: 3.80392156862745, size: 1 },\r\n // { x: 336.648648648649, y: 3.37254901960784, size: 1 },\r\n // { x: 338.594594594595, y: 3.52941176470588, size: 1 },\r\n // { x: 339.891891891892, y: 3.49019607843137, size: 1 },\r\n // { x: 344.432432432432, y: 3.72549019607843, size: 1 },\r\n // { x: 346.378378378378, y: 3.6078431372549, size: 1 },\r\n // { x: 347.027027027027, y: 3.37254901960784, size: 1 },\r\n // { x: 348.972972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 349.621621621622, y: 3.41176470588235, size: 1 },\r\n // { x: 350.27027027027, y: 3.72549019607843, size: 1 },\r\n // { x: 350.918918918919, y: 3.29411764705882, size: 1 },\r\n // { x: 351.567567567568, y: 3.41176470588235, size: 1 },\r\n // { x: 352.216216216216, y: 3.29411764705882, size: 1 },\r\n // { x: 352.864864864865, y: 3.45098039215686, size: 1 },\r\n // { x: 355.459459459459, y: 3.52941176470588, size: 1 },\r\n // { x: 356.108108108108, y: 3.29411764705882, size: 1 },\r\n // { x: 1.94244604316547, y: 3.29411764705882, size: 1 },\r\n // { x: 3.88489208633094, y: 3.49019607843137, size: 1 },\r\n // { x: 9.06474820143885, y: 3.01960784313725, size: 1 },\r\n // { x: 32.3741007194245, y: 3.80392156862745, size: 1 },\r\n // { x: 51.7985611510791, y: 3.2156862745098, size: 1 },\r\n // { x: 52.4460431654676, y: 3.25490196078431, size: 1 },\r\n // { x: 54.3884892086331, y: 3.41176470588235, size: 1 },\r\n // { x: 56.3309352517986, y: 3.37254901960784, size: 1 },\r\n // { x: 56.9784172661871, y: 3.37254901960784, size: 1 },\r\n // { x: 73.8129496402878, y: 3.13725490196078, size: 1 },\r\n // { x: 80.9352517985612, y: 3.33333333333333, size: 1 },\r\n // { x: 87.410071942446, y: 3.45098039215686, size: 1 },\r\n // { x: 94.5323741007194, y: 3.45098039215686, size: 1 },\r\n // { x: 102.94964028777, y: 3.96078431372549, size: 1 },\r\n // { x: 112.014388489209, y: 3.84313725490196, size: 1 },\r\n // { x: 115.89928057554, y: 3.84313725490196, size: 1 },\r\n // { x: 135.971223021583, y: 3.88235294117647, size: 1 },\r\n // { x: 151.510791366906, y: 3.37254901960784, size: 1 },\r\n // { x: 162.517985611511, y: 3.37254901960784, size: 1 },\r\n // { x: 163.165467625899, y: 3.29411764705882, size: 1 },\r\n // { x: 164.460431654676, y: 3.45098039215686, size: 1 },\r\n // { x: 165.107913669065, y: 4.07843137254902, size: 1 },\r\n // { x: 169.640287769784, y: 3.96078431372549, size: 1 },\r\n // { x: 182.589928057554, y: 3.05882352941176, size: 1 },\r\n // { x: 183.884892086331, y: 3.17647058823529, size: 1 },\r\n // { x: 185.179856115108, y: 3.2156862745098, size: 1 },\r\n // { x: 194.892086330935, y: 3.37254901960784, size: 1 },\r\n // { x: 202.661870503597, y: 3.33333333333333, size: 1 },\r\n // { x: 203.309352517986, y: 3.37254901960784, size: 1 },\r\n // { x: 204.604316546763, y: 3.25490196078431, size: 1 },\r\n // { x: 205.251798561151, y: 2.98039215686275, size: 1 },\r\n // { x: 205.89928057554, y: 2.82352941176471, size: 1 },\r\n // { x: 214.964028776978, y: 3.37254901960784, size: 1 },\r\n // { x: 225.971223021583, y: 3.17647058823529, size: 1 },\r\n // { x: 226.618705035971, y: 3.17647058823529, size: 1 },\r\n // { x: 240.215827338129, y: 4, size: 1 },\r\n // { x: 244.10071942446, y: 3.29411764705882, size: 1 },\r\n // { x: 248.63309352518, y: 4.23529411764706, size: 1 },\r\n // { x: 249.280575539568, y: 3.96078431372549, size: 1 },\r\n // { x: 257.05035971223, y: 4.19607843137255, size: 1 },\r\n // { x: 268.057553956835, y: 3.41176470588235, size: 1 },\r\n // { x: 268.705035971223, y: 3.2156862745098, size: 1 },\r\n // { x: 269.352517985611, y: 2.90196078431373, size: 1 },\r\n // { x: 274.532374100719, y: 3.92156862745098, size: 1 },\r\n // { x: 275.827338129496, y: 3.92156862745098, size: 1 },\r\n // { x: 281.007194244604, y: 3.92156862745098, size: 1 },\r\n // { x: 285.539568345324, y: 4, size: 1 },\r\n // { x: 290.719424460432, y: 3.33333333333333, size: 1 },\r\n // { x: 294.604316546763, y: 3.84313725490196, size: 1 },\r\n // { x: 300.431654676259, y: 3.88235294117647, size: 1 },\r\n // { x: 305.611510791367, y: 4.03921568627451, size: 1 },\r\n // { x: 312.73381294964, y: 3.41176470588235, size: 1 },\r\n // { x: 314.028776978417, y: 3.88235294117647, size: 1 },\r\n // { x: 315.323741007194, y: 4.07843137254902, size: 1 },\r\n // { x: 318.561151079137, y: 3.96078431372549, size: 1 },\r\n // { x: 331.510791366906, y: 3.84313725490196, size: 1 },\r\n // { x: 350.287769784173, y: 4.07843137254902, size: 1 },\r\n // { x: 12.9496402877698, y: 3.49019607843137, size: 1 },\r\n // { x: 13.5971223021583, y: 3.76470588235294, size: 1 },\r\n // { x: 38.8489208633094, y: 3.09803921568627, size: 1 },\r\n // { x: 39.4964028776978, y: 3.25490196078431, size: 1 },\r\n // { x: 47.2661870503597, y: 3.41176470588235, size: 1 },\r\n // { x: 52.4460431654676, y: 3.33333333333333, size: 1 },\r\n // { x: 55.6834532374101, y: 3.45098039215686, size: 1 },\r\n // { x: 56.3309352517986, y: 3.45098039215686, size: 1 },\r\n // { x: 64.7482014388489, y: 4.03921568627451, size: 1 },\r\n // { x: 73.1654676258993, y: 3.37254901960784, size: 1 },\r\n // { x: 78.9928057553957, y: 3.37254901960784, size: 1 },\r\n // { x: 85.4676258992806, y: 3.37254901960784, size: 1 },\r\n // { x: 88.0575539568345, y: 3.84313725490196, size: 1 },\r\n // { x: 91.294964028777, y: 3.96078431372549, size: 1 },\r\n // { x: 105.539568345324, y: 3.96078431372549, size: 1 },\r\n // { x: 115.251798561151, y: 3.84313725490196, size: 1 },\r\n // { x: 119.136690647482, y: 3.84313725490196, size: 1 },\r\n // { x: 120.431654676259, y: 3.88235294117647, size: 1 },\r\n // { x: 133.381294964029, y: 3.92156862745098, size: 1 },\r\n // { x: 135.971223021583, y: 3.96078431372549, size: 1 },\r\n // { x: 137.26618705036, y: 4, size: 1 },\r\n // { x: 143.093525179856, y: 3.92156862745098, size: 1 },\r\n // { x: 167.697841726619, y: 3.2156862745098, size: 1 },\r\n // { x: 168.345323741007, y: 3.17647058823529, size: 1 },\r\n // { x: 189.712230215827, y: 3.33333333333333, size: 1 },\r\n // { x: 192.302158273381, y: 3.25490196078431, size: 1 },\r\n // { x: 196.187050359712, y: 3.2156862745098, size: 1 },\r\n // { x: 198.129496402878, y: 3.2156862745098, size: 1 },\r\n // { x: 201.36690647482, y: 3.29411764705882, size: 1 },\r\n // { x: 208.489208633094, y: 3.33333333333333, size: 1 },\r\n // { x: 211.726618705036, y: 3.33333333333333, size: 1 },\r\n // { x: 217.553956834532, y: 3.76470588235294, size: 1 },\r\n // { x: 224.028776978417, y: 3.80392156862745, size: 1 },\r\n // { x: 233.093525179856, y: 3.13725490196078, size: 1 },\r\n // { x: 242.805755395683, y: 3.41176470588235, size: 1 },\r\n // { x: 244.10071942446, y: 3.41176470588235, size: 1 },\r\n // { x: 247.985611510791, y: 3.80392156862745, size: 1 },\r\n // { x: 255.755395683453, y: 3.49019607843137, size: 1 },\r\n // { x: 260.287769784173, y: 3.29411764705882, size: 1 },\r\n // { x: 264.172661870504, y: 3.92156862745098, size: 1 },\r\n // { x: 271.294964028777, y: 3.37254901960784, size: 1 },\r\n // { x: 273.237410071942, y: 3.33333333333333, size: 1 },\r\n // { x: 275.827338129496, y: 3.25490196078431, size: 1 },\r\n // { x: 276.474820143885, y: 3.25490196078431, size: 1 },\r\n // { x: 277.769784172662, y: 3.37254901960784, size: 1 },\r\n // { x: 279.064748201439, y: 3.33333333333333, size: 1 },\r\n // { x: 282.302158273381, y: 3.29411764705882, size: 1 },\r\n // { x: 286.187050359712, y: 3.41176470588235, size: 1 },\r\n // { x: 288.129496402878, y: 3.33333333333333, size: 1 },\r\n // { x: 292.661870503597, y: 3.33333333333333, size: 1 },\r\n // { x: 293.956834532374, y: 3.45098039215686, size: 1 },\r\n // { x: 301.726618705036, y: 3.45098039215686, size: 1 },\r\n // { x: 312.086330935252, y: 3.96078431372549, size: 1 },\r\n // { x: 319.208633093525, y: 3.88235294117647, size: 1 },\r\n // { x: 319.856115107914, y: 3.33333333333333, size: 1 },\r\n // { x: 334.10071942446, y: 3.45098039215686, size: 1 },\r\n // { x: 336.043165467626, y: 3.29411764705882, size: 1 },\r\n // { x: 337.985611510791, y: 3.45098039215686, size: 1 },\r\n // { x: 340.575539568345, y: 3.45098039215686, size: 1 },\r\n // { x: 341.223021582734, y: 3.37254901960784, size: 1 },\r\n // { x: 352.230215827338, y: 3.88235294117647, size: 1 },\r\n // { x: 356.762589928058, y: 3.84313725490196, size: 1 },\r\n // { x: 1.29496402877698, y: 3.88235294117647, size: 1 },\r\n // { x: 2.58992805755396, y: 3.29411764705882, size: 1 },\r\n // { x: 7.76978417266187, y: 3.96078431372549, size: 1 },\r\n // { x: 18.1294964028777, y: 3.76470588235294, size: 1 },\r\n // { x: 27.1942446043165, y: 3.84313725490196, size: 1 },\r\n // { x: 29.136690647482, y: 3.96078431372549, size: 1 },\r\n // { x: 39.4964028776978, y: 4, size: 1 },\r\n // { x: 44.0287769784173, y: 3.37254901960784, size: 1 },\r\n // { x: 44.6762589928058, y: 3.29411764705882, size: 1 },\r\n // { x: 45.3237410071942, y: 3.29411764705882, size: 1 },\r\n // { x: 45.9712230215827, y: 3.2156862745098, size: 1 },\r\n // { x: 46.6187050359712, y: 3.92156862745098, size: 1 },\r\n // { x: 47.9136690647482, y: 3.92156862745098, size: 1 },\r\n // { x: 71.2230215827338, y: 3.92156862745098, size: 1 },\r\n // { x: 91.9424460431655, y: 3.29411764705882, size: 1 },\r\n // { x: 99.0647482014388, y: 3.29411764705882, size: 1 },\r\n // { x: 99.7122302158273, y: 3.29411764705882, size: 1 },\r\n // { x: 103.597122302158, y: 3.41176470588235, size: 1 },\r\n // { x: 116.546762589928, y: 3.84313725490196, size: 1 },\r\n // { x: 142.446043165468, y: 3.88235294117647, size: 1 },\r\n // { x: 143.741007194245, y: 3.37254901960784, size: 1 },\r\n // { x: 152.805755395683, y: 3.80392156862745, size: 1 },\r\n // { x: 178.057553956835, y: 3.88235294117647, size: 1 },\r\n // { x: 196.834532374101, y: 3.05882352941176, size: 1 },\r\n // { x: 197.482014388489, y: 3.29411764705882, size: 1 },\r\n // { x: 206.546762589928, y: 4.07843137254902, size: 1 },\r\n // { x: 207.194244604317, y: 3.80392156862745, size: 1 },\r\n // { x: 213.669064748201, y: 3.92156862745098, size: 1 },\r\n // { x: 227.913669064748, y: 3.80392156862745, size: 1 },\r\n // { x: 233.093525179856, y: 3.96078431372549, size: 1 },\r\n // { x: 239.568345323741, y: 3.29411764705882, size: 1 },\r\n // { x: 240.215827338129, y: 3.25490196078431, size: 1 },\r\n // { x: 246.690647482014, y: 3.76470588235294, size: 1 },\r\n // { x: 259.640287769784, y: 3.17647058823529, size: 1 },\r\n // { x: 261.58273381295, y: 3.05882352941176, size: 1 },\r\n // { x: 262.230215827338, y: 3.25490196078431, size: 1 },\r\n // { x: 277.122302158273, y: 3.92156862745098, size: 1 },\r\n // { x: 281.007194244604, y: 3.80392156862745, size: 1 },\r\n // { x: 282.302158273381, y: 3.84313725490196, size: 1 },\r\n // { x: 287.482014388489, y: 3.92156862745098, size: 1 },\r\n // { x: 288.776978417266, y: 3.88235294117647, size: 1 },\r\n // { x: 290.719424460432, y: 3.92156862745098, size: 1 },\r\n // { x: 304.31654676259, y: 3.41176470588235, size: 1 },\r\n // { x: 311.438848920863, y: 3.80392156862745, size: 1 },\r\n // { x: 312.73381294964, y: 3.33333333333333, size: 1 },\r\n // { x: 326.330935251799, y: 3.13725490196078, size: 1 },\r\n // { x: 328.273381294964, y: 3.80392156862745, size: 1 },\r\n // { x: 354.172661870504, y: 3.80392156862745, size: 1 },\r\n // { x: 16.1870503597122, y: 3.92156862745098, size: 1 },\r\n // { x: 18.7769784172662, y: 3.92156862745098, size: 1 },\r\n // { x: 22.6618705035971, y: 3.80392156862745, size: 1 },\r\n // { x: 27.1942446043165, y: 3.92156862745098, size: 1 },\r\n // { x: 31.726618705036, y: 3.45098039215686, size: 1 },\r\n // { x: 44.0287769784173, y: 3.88235294117647, size: 1 },\r\n // { x: 53.0935251798561, y: 3.25490196078431, size: 1 },\r\n // { x: 58.9208633093525, y: 3.49019607843137, size: 1 },\r\n // { x: 74.4604316546763, y: 3.05882352941176, size: 1 },\r\n // { x: 75.1079136690647, y: 3.80392156862745, size: 1 },\r\n // { x: 97.7697841726619, y: 3.76470588235294, size: 1 },\r\n // { x: 99.0647482014388, y: 3.88235294117647, size: 1 },\r\n // { x: 132.086330935252, y: 4, size: 1 },\r\n // { x: 135.323741007194, y: 3.33333333333333, size: 1 },\r\n // { x: 139.208633093525, y: 3.05882352941176, size: 1 },\r\n // { x: 141.151079136691, y: 3.29411764705882, size: 1 },\r\n // { x: 146.330935251799, y: 3.29411764705882, size: 1 },\r\n // { x: 159.280575539568, y: 3.33333333333333, size: 1 },\r\n // { x: 159.928057553957, y: 3.25490196078431, size: 1 },\r\n // { x: 161.223021582734, y: 3.17647058823529, size: 1 },\r\n // { x: 161.870503597122, y: 2.98039215686275, size: 1 },\r\n // { x: 162.517985611511, y: 2.82352941176471, size: 1 },\r\n // { x: 180.647482014388, y: 3.2156862745098, size: 1 },\r\n // { x: 181.294964028777, y: 3.13725490196078, size: 1 },\r\n // { x: 181.942446043165, y: 2.62745098039216, size: 1 },\r\n // { x: 182.589928057554, y: 2.27450980392157, size: 1 },\r\n // { x: 187.122302158273, y: 3.92156862745098, size: 1 },\r\n // { x: 191.654676258993, y: 3.88235294117647, size: 1 },\r\n // { x: 203.956834532374, y: 3.09803921568627, size: 1 },\r\n // { x: 207.841726618705, y: 4.11764705882353, size: 1 },\r\n // { x: 224.676258992806, y: 3.17647058823529, size: 1 },\r\n // { x: 244.748201438849, y: 3.37254901960784, size: 1 },\r\n // { x: 246.043165467626, y: 3.29411764705882, size: 1 },\r\n // { x: 246.690647482014, y: 3.17647058823529, size: 1 },\r\n // { x: 262.877697841727, y: 3.96078431372549, size: 1 },\r\n // { x: 267.410071942446, y: 3.13725490196078, size: 1 },\r\n // { x: 268.057553956835, y: 2.7843137254902, size: 1 },\r\n // { x: 268.705035971223, y: 2.50980392156863, size: 1 },\r\n // { x: 299.136690647482, y: 3.33333333333333, size: 1 },\r\n // { x: 306.258992805755, y: 3.41176470588235, size: 1 },\r\n // { x: 311.438848920863, y: 3.37254901960784, size: 1 },\r\n // { x: 315.971223021583, y: 3.84313725490196, size: 1 },\r\n // { x: 317.26618705036, y: 3.80392156862745, size: 1 },\r\n // { x: 331.510791366906, y: 3.17647058823529, size: 1 },\r\n // { x: 332.158273381295, y: 3.05882352941176, size: 1 },\r\n // { x: 333.453237410072, y: 2.50980392156863, size: 1 },\r\n // { x: 334.748201438849, y: 3.92156862745098, size: 1 },\r\n // { x: 335.395683453237, y: 3.80392156862745, size: 1 },\r\n // { x: 336.690647482014, y: 3.72549019607843, size: 1 },\r\n // { x: 337.338129496403, y: 3.92156862745098, size: 1 },\r\n // { x: 342.517985611511, y: 3.88235294117647, size: 1 },\r\n // { x: 346.402877697842, y: 3.88235294117647, size: 1 },\r\n // { x: 349.640287769784, y: 4.07843137254902, size: 1 },\r\n // { x: 354.820143884892, y: 3.37254901960784, size: 1 },\r\n // { x: 356.762589928058, y: 3.37254901960784, size: 1 },\r\n // { x: 0.648648648648649, y: 3.56862745098039, size: 1 },\r\n // { x: 1.94594594594595, y: 3.64705882352941, size: 1 },\r\n // { x: 9.08108108108108, y: 3.56862745098039, size: 1 },\r\n // { x: 9.72972972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 10.3783783783784, y: 3.76470588235294, size: 1 },\r\n // { x: 11.027027027027, y: 3.49019607843137, size: 1 },\r\n // { x: 12.3243243243243, y: 3.68627450980392, size: 1 },\r\n // { x: 14.2702702702703, y: 3.45098039215686, size: 1 },\r\n // { x: 16.2162162162162, y: 3.05882352941176, size: 1 },\r\n // { x: 16.8648648648649, y: 3.13725490196078, size: 1 },\r\n // { x: 18.1621621621622, y: 3.41176470588235, size: 1 },\r\n // { x: 24, y: 3.76470588235294, size: 1 },\r\n // { x: 25.2972972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 32.4324324324324, y: 3.76470588235294, size: 1 },\r\n // { x: 33.7297297297297, y: 3.80392156862745, size: 1 },\r\n // { x: 36.972972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 38.2702702702703, y: 3.2156862745098, size: 1 },\r\n // { x: 41.5135135135135, y: 3.76470588235294, size: 1 },\r\n // { x: 44.1081081081081, y: 3.64705882352941, size: 1 },\r\n // { x: 45.4054054054054, y: 3.45098039215686, size: 1 },\r\n // { x: 49.9459459459459, y: 3.37254901960784, size: 1 },\r\n // { x: 51.8918918918919, y: 3.52941176470588, size: 1 },\r\n // { x: 53.8378378378378, y: 3.64705882352941, size: 1 },\r\n // { x: 57.7297297297297, y: 3.6078431372549, size: 1 },\r\n // { x: 59.027027027027, y: 3.25490196078431, size: 1 },\r\n // { x: 59.6756756756757, y: 2.82352941176471, size: 1 },\r\n // { x: 62.9189189189189, y: 3.84313725490196, size: 1 },\r\n // { x: 63.5675675675676, y: 3.84313725490196, size: 1 },\r\n // { x: 64.8648648648649, y: 3.88235294117647, size: 1 },\r\n // { x: 66.1621621621622, y: 3.88235294117647, size: 1 },\r\n // { x: 66.8108108108108, y: 3.84313725490196, size: 1 },\r\n // { x: 67.4594594594595, y: 3.92156862745098, size: 1 },\r\n // { x: 68.1081081081081, y: 3.72549019607843, size: 1 },\r\n // { x: 68.7567567567568, y: 3.76470588235294, size: 1 },\r\n // { x: 69.4054054054054, y: 3.76470588235294, size: 1 },\r\n // { x: 70.054054054054, y: 3.72549019607843, size: 1 },\r\n // { x: 70.7027027027027, y: 3.80392156862745, size: 1 },\r\n // { x: 71.3513513513514, y: 3.76470588235294, size: 1 },\r\n // { x: 72.6486486486486, y: 3.96078431372549, size: 1 },\r\n // { x: 74.5945945945946, y: 3.88235294117647, size: 1 },\r\n // { x: 75.2432432432432, y: 3.84313725490196, size: 1 },\r\n // { x: 76.5405405405405, y: 4.03921568627451, size: 1 },\r\n // { x: 77.1891891891892, y: 3.64705882352941, size: 1 },\r\n // { x: 77.8378378378378, y: 3.80392156862745, size: 1 },\r\n // { x: 80.4324324324324, y: 3.13725490196078, size: 1 },\r\n // { x: 81.0810810810811, y: 1.37254901960784, size: 1 },\r\n // { x: 81.7297297297297, y: 1.52941176470588, size: 1 },\r\n // { x: 82.3783783783784, y: 1.33333333333333, size: 1 },\r\n // { x: 83.027027027027, y: 1.17647058823529, size: 1 },\r\n // { x: 84.972972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 85.6216216216216, y: 3.17647058823529, size: 1 },\r\n // { x: 86.2702702702703, y: 3.13725490196078, size: 1 },\r\n // { x: 88.8648648648649, y: 3.76470588235294, size: 1 },\r\n // { x: 89.5135135135135, y: 3.80392156862745, size: 1 },\r\n // { x: 90.1621621621622, y: 2.94117647058824, size: 1 },\r\n // { x: 90.8108108108108, y: 2.94117647058824, size: 1 },\r\n // { x: 94.054054054054, y: 3.76470588235294, size: 1 },\r\n // { x: 96, y: 3.64705882352941, size: 1 },\r\n // { x: 96.6486486486486, y: 2.82352941176471, size: 1 },\r\n // { x: 97.2972972972973, y: 3.05882352941176, size: 1 },\r\n // { x: 99.2432432432432, y: 3.49019607843137, size: 1 },\r\n // { x: 99.8918918918919, y: 3.45098039215686, size: 1 },\r\n // { x: 101.189189189189, y: 3.29411764705882, size: 1 },\r\n // { x: 101.837837837838, y: 3.37254901960784, size: 1 },\r\n // { x: 102.486486486486, y: 3.29411764705882, size: 1 },\r\n // { x: 103.135135135135, y: 3.01960784313725, size: 1 },\r\n // { x: 105.72972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 107.027027027027, y: 3.92156862745098, size: 1 },\r\n // { x: 107.675675675676, y: 3.80392156862745, size: 1 },\r\n // { x: 110.27027027027, y: 3.92156862745098, size: 1 },\r\n // { x: 113.513513513514, y: 3.72549019607843, size: 1 },\r\n // { x: 115.459459459459, y: 3.76470588235294, size: 1 },\r\n // { x: 118.054054054054, y: 3.68627450980392, size: 1 },\r\n // { x: 120.648648648649, y: 4, size: 1 },\r\n // { x: 122.594594594595, y: 3.29411764705882, size: 1 },\r\n // { x: 123.243243243243, y: 3.25490196078431, size: 1 },\r\n // { x: 123.891891891892, y: 3.09803921568627, size: 1 },\r\n // { x: 124.540540540541, y: 1.76470588235294, size: 1 },\r\n // { x: 127.783783783784, y: 3.45098039215686, size: 1 },\r\n // { x: 129.72972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 130.378378378378, y: 3.37254901960784, size: 1 },\r\n // { x: 131.027027027027, y: 3.52941176470588, size: 1 },\r\n // { x: 131.675675675676, y: 3.33333333333333, size: 1 },\r\n // { x: 134.27027027027, y: 3.68627450980392, size: 1 },\r\n // { x: 138.810810810811, y: 3.76470588235294, size: 1 },\r\n // { x: 144.648648648649, y: 3.13725490196078, size: 1 },\r\n // { x: 145.945945945946, y: 1.88235294117647, size: 1 },\r\n // { x: 146.594594594595, y: 1.88235294117647, size: 1 },\r\n // { x: 147.891891891892, y: 3.52941176470588, size: 1 },\r\n // { x: 151.783783783784, y: 3.80392156862745, size: 1 },\r\n // { x: 155.027027027027, y: 3.56862745098039, size: 1 },\r\n // { x: 155.675675675676, y: 3.64705882352941, size: 1 },\r\n // { x: 156.324324324324, y: 3.52941176470588, size: 1 },\r\n // { x: 156.972972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 158.27027027027, y: 3.56862745098039, size: 1 },\r\n // { x: 158.918918918919, y: 3.49019607843137, size: 1 },\r\n // { x: 160.216216216216, y: 3.37254901960784, size: 1 },\r\n // { x: 162.162162162162, y: 3.52941176470588, size: 1 },\r\n // { x: 162.810810810811, y: 3.72549019607843, size: 1 },\r\n // { x: 164.108108108108, y: 3.45098039215686, size: 1 },\r\n // { x: 165.405405405405, y: 3.25490196078431, size: 1 },\r\n // { x: 166.054054054054, y: 3.41176470588235, size: 1 },\r\n // { x: 169.945945945946, y: 3.37254901960784, size: 1 },\r\n // { x: 173.837837837838, y: 3.68627450980392, size: 1 },\r\n // { x: 184.216216216216, y: 3.68627450980392, size: 1 },\r\n // { x: 185.513513513514, y: 3.45098039215686, size: 1 },\r\n // { x: 186.162162162162, y: 3.52941176470588, size: 1 },\r\n // { x: 186.810810810811, y: 3.41176470588235, size: 1 },\r\n // { x: 187.459459459459, y: 3.45098039215686, size: 1 },\r\n // { x: 189.405405405405, y: 3.6078431372549, size: 1 },\r\n // { x: 190.054054054054, y: 3.41176470588235, size: 1 },\r\n // { x: 192, y: 3.49019607843137, size: 1 },\r\n // { x: 192.648648648649, y: 3.45098039215686, size: 1 },\r\n // { x: 195.243243243243, y: 3.45098039215686, size: 1 },\r\n // { x: 195.891891891892, y: 3.64705882352941, size: 1 },\r\n // { x: 197.837837837838, y: 3.29411764705882, size: 1 },\r\n // { x: 199.135135135135, y: 3.49019607843137, size: 1 },\r\n // { x: 201.081081081081, y: 3.37254901960784, size: 1 },\r\n // { x: 205.621621621622, y: 3.88235294117647, size: 1 },\r\n // { x: 206.918918918919, y: 3.41176470588235, size: 1 },\r\n // { x: 207.567567567568, y: 3.68627450980392, size: 1 },\r\n // { x: 208.216216216216, y: 3.45098039215686, size: 1 },\r\n // { x: 212.756756756757, y: 3.64705882352941, size: 1 },\r\n // { x: 214.054054054054, y: 3.49019607843137, size: 1 },\r\n // { x: 215.351351351351, y: 3.56862745098039, size: 1 },\r\n // { x: 216.648648648649, y: 3.49019607843137, size: 1 },\r\n // { x: 218.594594594595, y: 3.49019607843137, size: 1 },\r\n // { x: 221.837837837838, y: 3.45098039215686, size: 1 },\r\n // { x: 222.486486486486, y: 3.52941176470588, size: 1 },\r\n // { x: 225.081081081081, y: 3.29411764705882, size: 1 },\r\n // { x: 226.378378378378, y: 3.37254901960784, size: 1 },\r\n // { x: 227.027027027027, y: 3.96078431372549, size: 1 },\r\n // { x: 234.810810810811, y: 3.25490196078431, size: 1 },\r\n // { x: 235.459459459459, y: 3.80392156862745, size: 1 },\r\n // { x: 236.756756756757, y: 4.23529411764706, size: 1 },\r\n // { x: 237.405405405405, y: 3.52941176470588, size: 1 },\r\n // { x: 238.054054054054, y: 3.68627450980392, size: 1 },\r\n // { x: 241.945945945946, y: 3.6078431372549, size: 1 },\r\n // { x: 243.243243243243, y: 3.64705882352941, size: 1 },\r\n // { x: 243.891891891892, y: 3.41176470588235, size: 1 },\r\n // { x: 245.189189189189, y: 3.37254901960784, size: 1 },\r\n // { x: 247.135135135135, y: 3.41176470588235, size: 1 },\r\n // { x: 248.432432432432, y: 3.68627450980392, size: 1 },\r\n // { x: 250.378378378378, y: 3.41176470588235, size: 1 },\r\n // { x: 251.027027027027, y: 3.45098039215686, size: 1 },\r\n // { x: 252.324324324324, y: 3.09803921568627, size: 1 },\r\n // { x: 253.621621621622, y: 3.09803921568627, size: 1 },\r\n // { x: 254.27027027027, y: 2.54901960784314, size: 1 },\r\n // { x: 259.459459459459, y: 3.49019607843137, size: 1 },\r\n // { x: 260.756756756757, y: 3.49019607843137, size: 1 },\r\n // { x: 262.054054054054, y: 3.37254901960784, size: 1 },\r\n // { x: 262.702702702703, y: 3.49019607843137, size: 1 },\r\n // { x: 265.945945945946, y: 3.29411764705882, size: 1 },\r\n // { x: 270.486486486487, y: 3.6078431372549, size: 1 },\r\n // { x: 271.135135135135, y: 3.52941176470588, size: 1 },\r\n // { x: 271.783783783784, y: 3.49019607843137, size: 1 },\r\n // { x: 274.378378378378, y: 3.25490196078431, size: 1 },\r\n // { x: 275.027027027027, y: 3.29411764705882, size: 1 },\r\n // { x: 275.675675675676, y: 1.92156862745098, size: 1 },\r\n // { x: 276.324324324324, y: 2.03921568627451, size: 1 },\r\n // { x: 276.972972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 282.810810810811, y: 3.41176470588235, size: 1 },\r\n // { x: 283.459459459459, y: 3.92156862745098, size: 1 },\r\n // { x: 284.108108108108, y: 3.80392156862745, size: 1 },\r\n // { x: 286.702702702703, y: 3.37254901960784, size: 1 },\r\n // { x: 287.351351351351, y: 3.52941176470588, size: 1 },\r\n // { x: 290.594594594595, y: 3.33333333333333, size: 1 },\r\n // { x: 291.891891891892, y: 3.68627450980392, size: 1 },\r\n // { x: 294.486486486487, y: 3.49019607843137, size: 1 },\r\n // { x: 296.432432432432, y: 3.37254901960784, size: 1 },\r\n // { x: 297.081081081081, y: 2.3921568627451, size: 1 },\r\n // { x: 297.72972972973, y: 2.15686274509804, size: 1 },\r\n // { x: 300.972972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 301.621621621622, y: 3.52941176470588, size: 1 },\r\n // { x: 304.864864864865, y: 3.64705882352941, size: 1 },\r\n // { x: 306.810810810811, y: 3.80392156862745, size: 1 },\r\n // { x: 307.459459459459, y: 3.92156862745098, size: 1 },\r\n // { x: 310.702702702703, y: 3.37254901960784, size: 1 },\r\n // { x: 316.540540540541, y: 3.45098039215686, size: 1 },\r\n // { x: 317.189189189189, y: 3.2156862745098, size: 1 },\r\n // { x: 317.837837837838, y: 3.25490196078431, size: 1 },\r\n // { x: 318.486486486487, y: 3.2156862745098, size: 1 },\r\n // { x: 319.135135135135, y: 2.7843137254902, size: 1 },\r\n // { x: 321.081081081081, y: 3.56862745098039, size: 1 },\r\n // { x: 326.918918918919, y: 3.49019607843137, size: 1 },\r\n // { x: 328.216216216216, y: 3.76470588235294, size: 1 },\r\n // { x: 328.864864864865, y: 3.88235294117647, size: 1 },\r\n // { x: 336, y: 3.64705882352941, size: 1 },\r\n // { x: 336.648648648649, y: 3.6078431372549, size: 1 },\r\n // { x: 337.297297297297, y: 3.6078431372549, size: 1 },\r\n // { x: 337.945945945946, y: 3.6078431372549, size: 1 },\r\n // { x: 338.594594594595, y: 3.29411764705882, size: 1 },\r\n // { x: 340.540540540541, y: 3.45098039215686, size: 1 },\r\n // { x: 347.675675675676, y: 3.52941176470588, size: 1 },\r\n // { x: 357.405405405405, y: 3.41176470588235, size: 1 },\r\n // { x: 358.054054054054, y: 3.68627450980392, size: 1 },\r\n // { x: 3.23741007194245, y: 3.92156862745098, size: 1 },\r\n // { x: 48.5611510791367, y: 3.37254901960784, size: 1 },\r\n // { x: 76.4028776978417, y: 3.80392156862745, size: 1 },\r\n // { x: 110.071942446043, y: 3.17647058823529, size: 1 },\r\n // { x: 132.086330935252, y: 3.29411764705882, size: 1 },\r\n // { x: 140.503597122302, y: 3.41176470588235, size: 1 },\r\n // { x: 146.330935251799, y: 3.52941176470588, size: 1 },\r\n // { x: 174.820143884892, y: 3.01960784313725, size: 1 },\r\n // { x: 175.467625899281, y: 2.94117647058824, size: 1 },\r\n // { x: 192.94964028777, y: 3.41176470588235, size: 1 },\r\n // { x: 218.201438848921, y: 2.82352941176471, size: 1 },\r\n // { x: 219.496402877698, y: 3.76470588235294, size: 1 },\r\n // { x: 220.791366906475, y: 3.84313725490196, size: 1 },\r\n // { x: 225.323741007194, y: 3.92156862745098, size: 1 },\r\n // { x: 227.26618705036, y: 3.84313725490196, size: 1 },\r\n // { x: 227.913669064748, y: 4.03921568627451, size: 1 },\r\n // { x: 240.215827338129, y: 3.13725490196078, size: 1 },\r\n // { x: 247.338129496403, y: 3.33333333333333, size: 1 },\r\n // { x: 247.985611510791, y: 3.33333333333333, size: 1 },\r\n // { x: 255.107913669065, y: 4, size: 1 },\r\n // { x: 260.287769784173, y: 3.33333333333333, size: 1 },\r\n // { x: 268.057553956835, y: 3.29411764705882, size: 1 },\r\n // { x: 269.352517985611, y: 3.45098039215686, size: 1 },\r\n // { x: 304.31654676259, y: 2.90196078431373, size: 1 },\r\n // { x: 304.964028776978, y: 2.94117647058824, size: 1 },\r\n // { x: 319.856115107914, y: 4, size: 1 },\r\n // { x: 343.812949640288, y: 3.92156862745098, size: 1 },\r\n // { x: 28.4892086330935, y: 3.41176470588235, size: 1 },\r\n // { x: 30.431654676259, y: 3.29411764705882, size: 1 },\r\n // { x: 31.726618705036, y: 3.01960784313725, size: 1 },\r\n // { x: 33.0215827338129, y: 3.33333333333333, size: 1 },\r\n // { x: 36.2589928057554, y: 3.80392156862745, size: 1 },\r\n // { x: 51.7985611510791, y: 3.05882352941176, size: 1 },\r\n // { x: 52.4460431654676, y: 2.94117647058824, size: 1 },\r\n // { x: 53.0935251798561, y: 3.05882352941176, size: 1 },\r\n // { x: 58.9208633093525, y: 3.37254901960784, size: 1 },\r\n // { x: 62.8057553956835, y: 3.33333333333333, size: 1 },\r\n // { x: 70.5755395683453, y: 3.25490196078431, size: 1 },\r\n // { x: 72.5179856115108, y: 3.33333333333333, size: 1 },\r\n // { x: 73.8129496402878, y: 3.33333333333333, size: 1 },\r\n // { x: 78.9928057553957, y: 3.80392156862745, size: 1 },\r\n // { x: 86.1151079136691, y: 3.72549019607843, size: 1 },\r\n // { x: 95.8273381294964, y: 3.29411764705882, size: 1 },\r\n // { x: 102.94964028777, y: 3.49019607843137, size: 1 },\r\n // { x: 111.36690647482, y: 4.03921568627451, size: 1 },\r\n // { x: 117.194244604317, y: 3.2156862745098, size: 1 },\r\n // { x: 139.856115107914, y: 3.37254901960784, size: 1 },\r\n // { x: 141.151079136691, y: 3.17647058823529, size: 1 },\r\n // { x: 142.446043165468, y: 3.13725490196078, size: 1 },\r\n // { x: 144.388489208633, y: 3.29411764705882, size: 1 },\r\n // { x: 146.330935251799, y: 3.17647058823529, size: 1 },\r\n // { x: 152.805755395683, y: 3.29411764705882, size: 1 },\r\n // { x: 159.280575539568, y: 3.37254901960784, size: 1 },\r\n // { x: 161.223021582734, y: 3.2156862745098, size: 1 },\r\n // { x: 165.755395683453, y: 3.29411764705882, size: 1 },\r\n // { x: 167.05035971223, y: 3.33333333333333, size: 1 },\r\n // { x: 168.345323741007, y: 3.2156862745098, size: 1 },\r\n // { x: 173.525179856115, y: 3.29411764705882, size: 1 },\r\n // { x: 174.820143884892, y: 3.29411764705882, size: 1 },\r\n // { x: 177.410071942446, y: 3.33333333333333, size: 1 },\r\n // { x: 178.057553956835, y: 3.29411764705882, size: 1 },\r\n // { x: 180, y: 3.37254901960784, size: 1 },\r\n // { x: 198.776978417266, y: 3.29411764705882, size: 1 },\r\n // { x: 203.956834532374, y: 3.2156862745098, size: 1 },\r\n // { x: 208.489208633094, y: 3.92156862745098, size: 1 },\r\n // { x: 210.431654676259, y: 3.84313725490196, size: 1 },\r\n // { x: 211.726618705036, y: 4.15686274509804, size: 1 },\r\n // { x: 224.028776978417, y: 4.03921568627451, size: 1 },\r\n // { x: 225.323741007194, y: 3.29411764705882, size: 1 },\r\n // { x: 232.446043165468, y: 3.76470588235294, size: 1 },\r\n // { x: 240.863309352518, y: 3.88235294117647, size: 1 },\r\n // { x: 243.453237410072, y: 3.88235294117647, size: 1 },\r\n // { x: 245.395683453237, y: 3.29411764705882, size: 1 },\r\n // { x: 246.043165467626, y: 3.17647058823529, size: 1 },\r\n // { x: 246.690647482014, y: 3.05882352941176, size: 1 },\r\n // { x: 253.812949640288, y: 4.07843137254902, size: 1 },\r\n // { x: 255.107913669065, y: 4.23529411764706, size: 1 },\r\n // { x: 258.345323741007, y: 3.96078431372549, size: 1 },\r\n // { x: 284.892086330935, y: 3.37254901960784, size: 1 },\r\n // { x: 290.071942446043, y: 3.29411764705882, size: 1 },\r\n // { x: 290.719424460432, y: 3.84313725490196, size: 1 },\r\n // { x: 291.36690647482, y: 3.68627450980392, size: 1 },\r\n // { x: 303.021582733813, y: 3.52941176470588, size: 1 },\r\n // { x: 304.964028776978, y: 3.80392156862745, size: 1 },\r\n // { x: 310.143884892086, y: 3.92156862745098, size: 1 },\r\n // { x: 319.208633093525, y: 3.84313725490196, size: 1 },\r\n // { x: 333.453237410072, y: 3.29411764705882, size: 1 },\r\n // { x: 354.820143884892, y: 3.33333333333333, size: 1 },\r\n // { x: 11.0071942446043, y: 3.37254901960784, size: 1 },\r\n // { x: 16.1870503597122, y: 2.7843137254902, size: 1 },\r\n // { x: 16.8345323741007, y: 3.05882352941176, size: 1 },\r\n // { x: 36.9064748201439, y: 3.2156862745098, size: 1 },\r\n // { x: 37.5539568345324, y: 3.29411764705882, size: 1 },\r\n // { x: 38.2014388489209, y: 3.05882352941176, size: 1 },\r\n // { x: 43.3812949640288, y: 3.49019607843137, size: 1 },\r\n // { x: 58.9208633093525, y: 3.13725490196078, size: 1 },\r\n // { x: 59.568345323741, y: 2.94117647058824, size: 1 },\r\n // { x: 67.3381294964029, y: 3.41176470588235, size: 1 },\r\n // { x: 67.9856115107914, y: 3.64705882352941, size: 1 },\r\n // { x: 70.5755395683453, y: 3.37254901960784, size: 1 },\r\n // { x: 77.6978417266187, y: 3.33333333333333, size: 1 },\r\n // { x: 81.5827338129496, y: 3.09803921568627, size: 1 },\r\n // { x: 87.410071942446, y: 3.33333333333333, size: 1 },\r\n // { x: 102.302158273381, y: 3.25490196078431, size: 1 },\r\n // { x: 102.94964028777, y: 3.25490196078431, size: 1 },\r\n // { x: 129.496402877698, y: 3.33333333333333, size: 1 },\r\n // { x: 143.741007194245, y: 3.2156862745098, size: 1 },\r\n // { x: 145.68345323741, y: 2.94117647058824, size: 1 },\r\n // { x: 156.043165467626, y: 4.03921568627451, size: 1 },\r\n // { x: 156.690647482014, y: 3.88235294117647, size: 1 },\r\n // { x: 168.992805755396, y: 3.88235294117647, size: 1 },\r\n // { x: 187.122302158273, y: 3.25490196078431, size: 1 },\r\n // { x: 187.769784172662, y: 3.2156862745098, size: 1 },\r\n // { x: 188.41726618705, y: 2.82352941176471, size: 1 },\r\n // { x: 189.064748201439, y: 3.17647058823529, size: 1 },\r\n // { x: 205.251798561151, y: 3.92156862745098, size: 1 },\r\n // { x: 210.431654676259, y: 3.17647058823529, size: 1 },\r\n // { x: 211.726618705036, y: 3.92156862745098, size: 1 },\r\n // { x: 216.906474820144, y: 3.88235294117647, size: 1 },\r\n // { x: 227.913669064748, y: 3.2156862745098, size: 1 },\r\n // { x: 232.446043165468, y: 3.25490196078431, size: 1 },\r\n // { x: 251.870503597122, y: 3.25490196078431, size: 1 },\r\n // { x: 253.165467625899, y: 3.2156862745098, size: 1 },\r\n // { x: 261.58273381295, y: 3.84313725490196, size: 1 },\r\n // { x: 266.762589928058, y: 3.80392156862745, size: 1 },\r\n // { x: 270.647482014389, y: 3.80392156862745, size: 1 },\r\n // { x: 275.179856115108, y: 3.01960784313725, size: 1 },\r\n // { x: 282.302158273381, y: 3.41176470588235, size: 1 },\r\n // { x: 284.244604316547, y: 3.92156862745098, size: 1 },\r\n // { x: 284.892086330935, y: 3.92156862745098, size: 1 },\r\n // { x: 296.546762589928, y: 2.98039215686275, size: 1 },\r\n // { x: 297.194244604317, y: 3.05882352941176, size: 1 },\r\n // { x: 301.079136690647, y: 3.88235294117647, size: 1 },\r\n // { x: 316.618705035971, y: 3.25490196078431, size: 1 },\r\n // { x: 317.26618705036, y: 3.13725490196078, size: 1 },\r\n // { x: 317.913669064748, y: 3.29411764705882, size: 1 },\r\n // { x: 319.208633093525, y: 3.52941176470588, size: 1 },\r\n // { x: 348.345323741007, y: 3.29411764705882, size: 1 },\r\n // { x: 353.525179856115, y: 3.33333333333333, size: 1 },\r\n // { x: 358.057553956835, y: 3.41176470588235, size: 1 },\r\n // { x: 1.2972972972973, y: 2.86274509803922, size: 1 },\r\n // { x: 1.94594594594595, y: 2.50980392156863, size: 1 },\r\n // { x: 2.59459459459459, y: 3.33333333333333, size: 1 },\r\n // { x: 3.89189189189189, y: 3.33333333333333, size: 1 },\r\n // { x: 14.9189189189189, y: 3.52941176470588, size: 1 },\r\n // { x: 15.5675675675676, y: 3.41176470588235, size: 1 },\r\n // { x: 17.5135135135135, y: 3.37254901960784, size: 1 },\r\n // { x: 20.1081081081081, y: 3.45098039215686, size: 1 },\r\n // { x: 21.4054054054054, y: 3.29411764705882, size: 1 },\r\n // { x: 22.0540540540541, y: 3.37254901960784, size: 1 },\r\n // { x: 23.3513513513514, y: 3.05882352941176, size: 1 },\r\n // { x: 24.6486486486486, y: 3.45098039215686, size: 1 },\r\n // { x: 27.8918918918919, y: 3.45098039215686, size: 1 },\r\n // { x: 30.4864864864865, y: 3.33333333333333, size: 1 },\r\n // { x: 34.3783783783784, y: 3.45098039215686, size: 1 },\r\n // { x: 35.027027027027, y: 3.33333333333333, size: 1 },\r\n // { x: 36.3243243243243, y: 3.33333333333333, size: 1 },\r\n // { x: 40.2162162162162, y: 3.41176470588235, size: 1 },\r\n // { x: 40.8648648648649, y: 3.49019607843137, size: 1 },\r\n // { x: 43.4594594594595, y: 3.41176470588235, size: 1 },\r\n // { x: 44.7567567567568, y: 3.13725490196078, size: 1 },\r\n // { x: 45.4054054054054, y: 3.13725490196078, size: 1 },\r\n // { x: 46.7027027027027, y: 3.49019607843137, size: 1 },\r\n // { x: 47.3513513513514, y: 3.41176470588235, size: 1 },\r\n // { x: 49.2972972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 50.5945945945946, y: 3.45098039215686, size: 1 },\r\n // { x: 51.2432432432432, y: 3.41176470588235, size: 1 },\r\n // { x: 52.5405405405405, y: 3.49019607843137, size: 1 },\r\n // { x: 53.8378378378378, y: 3.80392156862745, size: 1 },\r\n // { x: 56.4324324324324, y: 3.29411764705882, size: 1 },\r\n // { x: 59.6756756756757, y: 3.56862745098039, size: 1 },\r\n // { x: 60.3243243243243, y: 3.45098039215686, size: 1 },\r\n // { x: 61.6216216216216, y: 3.37254901960784, size: 1 },\r\n // { x: 64.8648648648649, y: 3.25490196078431, size: 1 },\r\n // { x: 66.1621621621622, y: 2.94117647058824, size: 1 },\r\n // { x: 66.8108108108108, y: 3.05882352941176, size: 1 },\r\n // { x: 72.6486486486486, y: 3.17647058823529, size: 1 },\r\n // { x: 73.2972972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 73.945945945946, y: 3.49019607843137, size: 1 },\r\n // { x: 76.5405405405405, y: 3.25490196078431, size: 1 },\r\n // { x: 78.4864864864865, y: 3.2156862745098, size: 1 },\r\n // { x: 81.0810810810811, y: 3.37254901960784, size: 1 },\r\n // { x: 81.7297297297297, y: 3.25490196078431, size: 1 },\r\n // { x: 83.027027027027, y: 3.17647058823529, size: 1 },\r\n // { x: 84.3243243243243, y: 3.17647058823529, size: 1 },\r\n // { x: 84.972972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 85.6216216216216, y: 3.45098039215686, size: 1 },\r\n // { x: 86.2702702702703, y: 3.37254901960784, size: 1 },\r\n // { x: 86.9189189189189, y: 3.29411764705882, size: 1 },\r\n // { x: 87.5675675675676, y: 2.98039215686275, size: 1 },\r\n // { x: 88.2162162162162, y: 2.90196078431373, size: 1 },\r\n // { x: 90.1621621621622, y: 3.49019607843137, size: 1 },\r\n // { x: 90.8108108108108, y: 3.84313725490196, size: 1 },\r\n // { x: 92.1081081081081, y: 3.45098039215686, size: 1 },\r\n // { x: 93.4054054054054, y: 3.52941176470588, size: 1 },\r\n // { x: 95.3513513513514, y: 3.96078431372549, size: 1 },\r\n // { x: 96, y: 3.68627450980392, size: 1 },\r\n // { x: 101.837837837838, y: 3.88235294117647, size: 1 },\r\n // { x: 103.135135135135, y: 3.68627450980392, size: 1 },\r\n // { x: 106.378378378378, y: 3.6078431372549, size: 1 },\r\n // { x: 107.675675675676, y: 3.41176470588235, size: 1 },\r\n // { x: 108.324324324324, y: 3.52941176470588, size: 1 },\r\n // { x: 108.972972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 110.27027027027, y: 3.33333333333333, size: 1 },\r\n // { x: 112.864864864865, y: 3.88235294117647, size: 1 },\r\n // { x: 113.513513513514, y: 3.6078431372549, size: 1 },\r\n // { x: 114.162162162162, y: 3.76470588235294, size: 1 },\r\n // { x: 114.810810810811, y: 3.52941176470588, size: 1 },\r\n // { x: 115.459459459459, y: 3.45098039215686, size: 1 },\r\n // { x: 116.108108108108, y: 3.41176470588235, size: 1 },\r\n // { x: 117.405405405405, y: 3.72549019607843, size: 1 },\r\n // { x: 120, y: 3.37254901960784, size: 1 },\r\n // { x: 120.648648648649, y: 3.37254901960784, size: 1 },\r\n // { x: 125.189189189189, y: 3.52941176470588, size: 1 },\r\n // { x: 126.486486486486, y: 3.17647058823529, size: 1 },\r\n // { x: 127.135135135135, y: 3.33333333333333, size: 1 },\r\n // { x: 131.027027027027, y: 2.82352941176471, size: 1 },\r\n // { x: 131.675675675676, y: 2.82352941176471, size: 1 },\r\n // { x: 132.972972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 133.621621621622, y: 3.68627450980392, size: 1 },\r\n // { x: 135.567567567568, y: 3.49019607843137, size: 1 },\r\n // { x: 136.864864864865, y: 3.56862745098039, size: 1 },\r\n // { x: 138.162162162162, y: 3.41176470588235, size: 1 },\r\n // { x: 138.810810810811, y: 3.45098039215686, size: 1 },\r\n // { x: 149.837837837838, y: 3.76470588235294, size: 1 },\r\n // { x: 151.135135135135, y: 3.29411764705882, size: 1 },\r\n // { x: 151.783783783784, y: 3.45098039215686, size: 1 },\r\n // { x: 152.432432432432, y: 3.41176470588235, size: 1 },\r\n // { x: 156.972972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 162.162162162162, y: 3.80392156862745, size: 1 },\r\n // { x: 162.810810810811, y: 3.64705882352941, size: 1 },\r\n // { x: 164.108108108108, y: 3.68627450980392, size: 1 },\r\n // { x: 164.756756756757, y: 3.76470588235294, size: 1 },\r\n // { x: 166.702702702703, y: 3.76470588235294, size: 1 },\r\n // { x: 169.297297297297, y: 3.49019607843137, size: 1 },\r\n // { x: 170.594594594595, y: 3.64705882352941, size: 1 },\r\n // { x: 171.243243243243, y: 3.76470588235294, size: 1 },\r\n // { x: 173.837837837838, y: 3.33333333333333, size: 1 },\r\n // { x: 174.486486486486, y: 3.2156862745098, size: 1 },\r\n // { x: 175.783783783784, y: 3.80392156862745, size: 1 },\r\n // { x: 179.027027027027, y: 3.52941176470588, size: 1 },\r\n // { x: 181.621621621622, y: 3.64705882352941, size: 1 },\r\n // { x: 182.918918918919, y: 3.80392156862745, size: 1 },\r\n // { x: 183.567567567568, y: 3.80392156862745, size: 1 },\r\n // { x: 184.864864864865, y: 3.72549019607843, size: 1 },\r\n // { x: 185.513513513514, y: 3.64705882352941, size: 1 },\r\n // { x: 186.810810810811, y: 3.72549019607843, size: 1 },\r\n // { x: 190.054054054054, y: 3.84313725490196, size: 1 },\r\n // { x: 191.351351351351, y: 3.6078431372549, size: 1 },\r\n // { x: 193.297297297297, y: 3.88235294117647, size: 1 },\r\n // { x: 195.243243243243, y: 3.33333333333333, size: 1 },\r\n // { x: 195.891891891892, y: 2.90196078431373, size: 1 },\r\n // { x: 196.540540540541, y: 3.09803921568627, size: 1 },\r\n // { x: 198.486486486486, y: 3.37254901960784, size: 1 },\r\n // { x: 203.675675675676, y: 3.33333333333333, size: 1 },\r\n // { x: 204.972972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 208.216216216216, y: 3.41176470588235, size: 1 },\r\n // { x: 208.864864864865, y: 3.49019607843137, size: 1 },\r\n // { x: 209.513513513514, y: 3.25490196078431, size: 1 },\r\n // { x: 210.162162162162, y: 3.29411764705882, size: 1 },\r\n // { x: 212.756756756757, y: 3.41176470588235, size: 1 },\r\n // { x: 214.054054054054, y: 3.45098039215686, size: 1 },\r\n // { x: 215.351351351351, y: 3.41176470588235, size: 1 },\r\n // { x: 217.297297297297, y: 3.05882352941176, size: 1 },\r\n // { x: 217.945945945946, y: 2.98039215686275, size: 1 },\r\n // { x: 218.594594594595, y: 3.33333333333333, size: 1 },\r\n // { x: 219.891891891892, y: 3.41176470588235, size: 1 },\r\n // { x: 220.540540540541, y: 3.33333333333333, size: 1 },\r\n // { x: 221.189189189189, y: 3.33333333333333, size: 1 },\r\n // { x: 221.837837837838, y: 3.41176470588235, size: 1 },\r\n // { x: 223.783783783784, y: 3.45098039215686, size: 1 },\r\n // { x: 229.621621621622, y: 3.33333333333333, size: 1 },\r\n // { x: 230.918918918919, y: 3.41176470588235, size: 1 },\r\n // { x: 232.216216216216, y: 3.33333333333333, size: 1 },\r\n // { x: 232.864864864865, y: 3.49019607843137, size: 1 },\r\n // { x: 236.756756756757, y: 3.45098039215686, size: 1 },\r\n // { x: 237.405405405405, y: 3.41176470588235, size: 1 },\r\n // { x: 239.351351351351, y: 2.82352941176471, size: 1 },\r\n // { x: 241.945945945946, y: 3.13725490196078, size: 1 },\r\n // { x: 242.594594594595, y: 3.41176470588235, size: 1 },\r\n // { x: 243.243243243243, y: 3.25490196078431, size: 1 },\r\n // { x: 244.540540540541, y: 3.33333333333333, size: 1 },\r\n // { x: 245.189189189189, y: 3.33333333333333, size: 1 },\r\n // { x: 246.486486486486, y: 3.41176470588235, size: 1 },\r\n // { x: 250.378378378378, y: 3.29411764705882, size: 1 },\r\n // { x: 252.972972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 253.621621621622, y: 3.33333333333333, size: 1 },\r\n // { x: 254.27027027027, y: 3.49019607843137, size: 1 },\r\n // { x: 254.918918918919, y: 3.37254901960784, size: 1 },\r\n // { x: 255.567567567568, y: 3.52941176470588, size: 1 },\r\n // { x: 256.216216216216, y: 3.09803921568627, size: 1 },\r\n // { x: 258.162162162162, y: 3.33333333333333, size: 1 },\r\n // { x: 258.810810810811, y: 3.37254901960784, size: 1 },\r\n // { x: 259.459459459459, y: 3.41176470588235, size: 1 },\r\n // { x: 260.108108108108, y: 3.05882352941176, size: 1 },\r\n // { x: 260.756756756757, y: 2.66666666666667, size: 1 },\r\n // { x: 261.405405405405, y: 2.74509803921569, size: 1 },\r\n // { x: 264, y: 3.72549019607843, size: 1 },\r\n // { x: 267.891891891892, y: 3.80392156862745, size: 1 },\r\n // { x: 270.486486486487, y: 3.76470588235294, size: 1 },\r\n // { x: 272.432432432432, y: 3.56862745098039, size: 1 },\r\n // { x: 273.081081081081, y: 3.84313725490196, size: 1 },\r\n // { x: 274.378378378378, y: 3.72549019607843, size: 1 },\r\n // { x: 275.027027027027, y: 3.45098039215686, size: 1 },\r\n // { x: 277.621621621622, y: 3.80392156862745, size: 1 },\r\n // { x: 282.162162162162, y: 2.82352941176471, size: 1 },\r\n // { x: 282.810810810811, y: 3.05882352941176, size: 1 },\r\n // { x: 288, y: 3.45098039215686, size: 1 },\r\n // { x: 288.648648648649, y: 3.41176470588235, size: 1 },\r\n // { x: 289.297297297297, y: 3.25490196078431, size: 1 },\r\n // { x: 289.945945945946, y: 3.45098039215686, size: 1 },\r\n // { x: 290.594594594595, y: 3.25490196078431, size: 1 },\r\n // { x: 293.189189189189, y: 3.17647058823529, size: 1 },\r\n // { x: 293.837837837838, y: 3.13725490196078, size: 1 },\r\n // { x: 296.432432432432, y: 3.25490196078431, size: 1 },\r\n // { x: 297.081081081081, y: 3.41176470588235, size: 1 },\r\n // { x: 297.72972972973, y: 3.33333333333333, size: 1 },\r\n // { x: 302.27027027027, y: 3.49019607843137, size: 1 },\r\n // { x: 302.918918918919, y: 3.29411764705882, size: 1 },\r\n // { x: 303.567567567568, y: 3.17647058823529, size: 1 },\r\n // { x: 304.216216216216, y: 2.74509803921569, size: 1 },\r\n // { x: 304.864864864865, y: 3.09803921568627, size: 1 },\r\n // { x: 306.162162162162, y: 3.80392156862745, size: 1 },\r\n // { x: 306.810810810811, y: 3.84313725490196, size: 1 },\r\n // { x: 308.756756756757, y: 3.72549019607843, size: 1 },\r\n // { x: 318.486486486487, y: 3.88235294117647, size: 1 },\r\n // { x: 323.027027027027, y: 3.6078431372549, size: 1 },\r\n // { x: 324.324324324324, y: 3.52941176470588, size: 1 },\r\n // { x: 325.621621621622, y: 3.09803921568627, size: 1 },\r\n // { x: 327.567567567568, y: 3.92156862745098, size: 1 },\r\n // { x: 332.108108108108, y: 3.92156862745098, size: 1 },\r\n // { x: 334.702702702703, y: 3.84313725490196, size: 1 },\r\n // { x: 335.351351351351, y: 3.80392156862745, size: 1 },\r\n // { x: 336, y: 3.88235294117647, size: 1 },\r\n // { x: 336.648648648649, y: 3.72549019607843, size: 1 },\r\n // { x: 337.297297297297, y: 3.84313725490196, size: 1 },\r\n // { x: 337.945945945946, y: 3.80392156862745, size: 1 },\r\n // { x: 341.837837837838, y: 3.88235294117647, size: 1 },\r\n // { x: 342.486486486487, y: 3.76470588235294, size: 1 },\r\n // { x: 343.135135135135, y: 3.72549019607843, size: 1 },\r\n // { x: 345.081081081081, y: 3.49019607843137, size: 1 },\r\n // { x: 347.675675675676, y: 3.29411764705882, size: 1 },\r\n // { x: 348.324324324324, y: 3.68627450980392, size: 1 },\r\n // { x: 348.972972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 350.918918918919, y: 3.84313725490196, size: 1 },\r\n // { x: 351.567567567568, y: 3.52941176470588, size: 1 },\r\n // { x: 352.216216216216, y: 3.88235294117647, size: 1 },\r\n // { x: 354.162162162162, y: 3.45098039215686, size: 1 },\r\n // { x: 356.756756756757, y: 3.76470588235294, size: 1 },\r\n // { x: 358.702702702703, y: 3.96078431372549, size: 1 },\r\n // { x: 8.41726618705036, y: 3.13725490196078, size: 1 },\r\n // { x: 9.06474820143885, y: 2.70588235294118, size: 1 },\r\n // { x: 9.71223021582734, y: 3.33333333333333, size: 1 },\r\n // { x: 18.1294964028777, y: 3.84313725490196, size: 1 },\r\n // { x: 20.0719424460432, y: 3.76470588235294, size: 1 },\r\n // { x: 29.136690647482, y: 3.01960784313725, size: 1 },\r\n // { x: 30.431654676259, y: 2.11764705882353, size: 1 },\r\n // { x: 31.0791366906475, y: 2.31372549019608, size: 1 },\r\n // { x: 31.726618705036, y: 3.41176470588235, size: 1 },\r\n // { x: 34.3165467625899, y: 3.2156862745098, size: 1 },\r\n // { x: 51.1510791366906, y: 3.17647058823529, size: 1 },\r\n // { x: 51.7985611510791, y: 2.98039215686275, size: 1 },\r\n // { x: 52.4460431654676, y: 2.62745098039216, size: 1 },\r\n // { x: 62.158273381295, y: 3.33333333333333, size: 1 },\r\n // { x: 71.8705035971223, y: 3.25490196078431, size: 1 },\r\n // { x: 72.5179856115108, y: 3.13725490196078, size: 1 },\r\n // { x: 73.1654676258993, y: 3.25490196078431, size: 1 },\r\n // { x: 73.8129496402878, y: 2.66666666666667, size: 1 },\r\n // { x: 77.0503597122302, y: 3.37254901960784, size: 1 },\r\n // { x: 94.5323741007194, y: 3.01960784313725, size: 1 },\r\n // { x: 95.1798561151079, y: 2.62745098039216, size: 1 },\r\n // { x: 95.8273381294964, y: 2.82352941176471, size: 1 },\r\n // { x: 105.539568345324, y: 4.19607843137255, size: 1 },\r\n // { x: 116.546762589928, y: 2.90196078431373, size: 1 },\r\n // { x: 117.194244604317, y: 2.86274509803922, size: 1 },\r\n // { x: 126.906474820144, y: 3.96078431372549, size: 1 },\r\n // { x: 136.618705035971, y: 3.09803921568627, size: 1 },\r\n // { x: 137.26618705036, y: 3.2156862745098, size: 1 },\r\n // { x: 137.913669064748, y: 3.13725490196078, size: 1 },\r\n // { x: 138.561151079137, y: 1.49019607843137, size: 1 },\r\n // { x: 139.208633093525, y: 3.25490196078431, size: 1 },\r\n // { x: 148.920863309353, y: 3.25490196078431, size: 1 },\r\n // { x: 158.63309352518, y: 3.37254901960784, size: 1 },\r\n // { x: 161.870503597122, y: 4, size: 1 },\r\n // { x: 165.755395683453, y: 3.88235294117647, size: 1 },\r\n // { x: 166.402877697842, y: 3.37254901960784, size: 1 },\r\n // { x: 180, y: 3.29411764705882, size: 1 },\r\n // { x: 198.129496402878, y: 3.80392156862745, size: 1 },\r\n // { x: 200.719424460432, y: 3.92156862745098, size: 1 },\r\n // { x: 228.561151079137, y: 3.80392156862745, size: 1 },\r\n // { x: 235.035971223022, y: 4.07843137254902, size: 1 },\r\n // { x: 244.10071942446, y: 3.33333333333333, size: 1 },\r\n // { x: 245.395683453237, y: 3.01960784313725, size: 1 },\r\n // { x: 246.043165467626, y: 2.58823529411765, size: 1 },\r\n // { x: 246.690647482014, y: 2.43137254901961, size: 1 },\r\n // { x: 254.460431654676, y: 3.45098039215686, size: 1 },\r\n // { x: 255.755395683453, y: 3.80392156862745, size: 1 },\r\n // { x: 258.992805755396, y: 3.80392156862745, size: 1 },\r\n // { x: 266.762589928058, y: 3.2156862745098, size: 1 },\r\n // { x: 279.712230215827, y: 3.2156862745098, size: 1 },\r\n // { x: 281.654676258993, y: 3.25490196078431, size: 1 },\r\n // { x: 285.539568345324, y: 3.25490196078431, size: 1 },\r\n // { x: 299.136690647482, y: 3.88235294117647, size: 1 },\r\n // { x: 299.784172661871, y: 3.84313725490196, size: 1 },\r\n // { x: 300.431654676259, y: 3.76470588235294, size: 1 },\r\n // { x: 310.791366906475, y: 4, size: 1 },\r\n // { x: 312.73381294964, y: 3.29411764705882, size: 1 },\r\n // { x: 314.028776978417, y: 3.09803921568627, size: 1 },\r\n // { x: 314.676258992806, y: 3.2156862745098, size: 1 },\r\n // { x: 316.618705035971, y: 3.17647058823529, size: 1 },\r\n // { x: 317.26618705036, y: 3.05882352941176, size: 1 },\r\n // { x: 317.913669064748, y: 3.25490196078431, size: 1 },\r\n // { x: 321.151079136691, y: 3.25490196078431, size: 1 },\r\n // { x: 321.798561151079, y: 3.2156862745098, size: 1 },\r\n // { x: 323.741007194245, y: 3.37254901960784, size: 1 },\r\n // { x: 324.388489208633, y: 3.29411764705882, size: 1 },\r\n // { x: 325.035971223022, y: 3.17647058823529, size: 1 },\r\n // { x: 326.978417266187, y: 3.25490196078431, size: 1 },\r\n // { x: 330.215827338129, y: 3.2156862745098, size: 1 },\r\n // { x: 334.10071942446, y: 3.17647058823529, size: 1 },\r\n // { x: 334.748201438849, y: 3.05882352941176, size: 1 },\r\n // { x: 338.63309352518, y: 3.33333333333333, size: 1 },\r\n // { x: 339.280575539568, y: 3.13725490196078, size: 1 },\r\n // { x: 343.165467625899, y: 3.29411764705882, size: 1 },\r\n // { x: 343.812949640288, y: 3.2156862745098, size: 1 },\r\n // { x: 344.460431654676, y: 3.29411764705882, size: 1 },\r\n // { x: 345.755395683453, y: 3.33333333333333, size: 1 },\r\n // { x: 346.402877697842, y: 3.2156862745098, size: 1 },\r\n // { x: 348.992805755396, y: 3.2156862745098, size: 1 },\r\n // { x: 351.58273381295, y: 3.33333333333333, size: 1 },\r\n // { x: 352.877697841727, y: 3.33333333333333, size: 1 },\r\n // { x: 354.172661870504, y: 3.01960784313725, size: 1 },\r\n // { x: 354.820143884892, y: 3.05882352941176, size: 1 },\r\n // { x: 355.467625899281, y: 3.09803921568627, size: 1 },\r\n // { x: 356.115107913669, y: 3.13725490196078, size: 1 },\r\n // { x: 357.410071942446, y: 3.13725490196078, size: 1 },\r\n // { x: 0, y: 3.17647058823529, size: 1 },\r\n // { x: 1.29496402877698, y: 3.05882352941176, size: 1 },\r\n // { x: 5.17985611510791, y: 3.41176470588235, size: 1 },\r\n // { x: 5.8273381294964, y: 3.33333333333333, size: 1 },\r\n // { x: 6.47482014388489, y: 3.09803921568627, size: 1 },\r\n // { x: 7.12230215827338, y: 3.2156862745098, size: 1 },\r\n // { x: 8.41726618705036, y: 3.37254901960784, size: 1 },\r\n // { x: 9.06474820143885, y: 3.29411764705882, size: 1 },\r\n // { x: 11.0071942446043, y: 3.17647058823529, size: 1 },\r\n // { x: 11.6546762589928, y: 3.2156862745098, size: 1 },\r\n // { x: 12.9496402877698, y: 3.09803921568627, size: 1 },\r\n // { x: 15.5395683453237, y: 3.05882352941176, size: 1 },\r\n // { x: 16.1870503597122, y: 2.98039215686275, size: 1 },\r\n // { x: 18.1294964028777, y: 3.2156862745098, size: 1 },\r\n // { x: 19.4244604316547, y: 3.37254901960784, size: 1 },\r\n // { x: 22.0143884892086, y: 3.25490196078431, size: 1 },\r\n // { x: 22.6618705035971, y: 3.2156862745098, size: 1 },\r\n // { x: 25.8992805755396, y: 3.17647058823529, size: 1 },\r\n // { x: 27.1942446043165, y: 3.05882352941176, size: 1 },\r\n // { x: 27.841726618705, y: 3.25490196078431, size: 1 },\r\n // { x: 28.4892086330935, y: 3.25490196078431, size: 1 },\r\n // { x: 29.136690647482, y: 3.2156862745098, size: 1 },\r\n // { x: 29.7841726618705, y: 3.17647058823529, size: 1 },\r\n // { x: 30.431654676259, y: 3.25490196078431, size: 1 },\r\n // { x: 33.6690647482014, y: 3.29411764705882, size: 1 },\r\n // { x: 36.2589928057554, y: 3.33333333333333, size: 1 },\r\n // { x: 36.9064748201439, y: 3.13725490196078, size: 1 },\r\n // { x: 37.5539568345324, y: 2.98039215686275, size: 1 },\r\n // { x: 38.2014388489209, y: 3.01960784313725, size: 1 },\r\n // { x: 40.1438848920863, y: 3.29411764705882, size: 1 },\r\n // { x: 44.0287769784173, y: 3.2156862745098, size: 1 },\r\n // { x: 45.3237410071942, y: 3.37254901960784, size: 1 },\r\n // { x: 49.2086330935252, y: 3.05882352941176, size: 1 },\r\n // { x: 51.1510791366906, y: 3.25490196078431, size: 1 },\r\n // { x: 55.0359712230216, y: 2.94117647058824, size: 1 },\r\n // { x: 55.6834532374101, y: 3.17647058823529, size: 1 },\r\n // { x: 64.7482014388489, y: 4, size: 1 },\r\n // { x: 67.3381294964029, y: 3.92156862745098, size: 1 },\r\n // { x: 70.5755395683453, y: 4, size: 1 },\r\n // { x: 73.8129496402878, y: 3.92156862745098, size: 1 },\r\n // { x: 78.9928057553957, y: 3.2156862745098, size: 1 },\r\n // { x: 80.2877697841727, y: 2.90196078431373, size: 1 },\r\n // { x: 88.0575539568345, y: 3.88235294117647, size: 1 },\r\n // { x: 90, y: 3.92156862745098, size: 1 },\r\n // { x: 100.359712230216, y: 3.29411764705882, size: 1 },\r\n // { x: 102.302158273381, y: 2.74509803921569, size: 1 },\r\n // { x: 110.071942446043, y: 3.80392156862745, size: 1 },\r\n // { x: 126.258992805755, y: 3.88235294117647, size: 1 },\r\n // { x: 144.388489208633, y: 3.25490196078431, size: 1 },\r\n // { x: 145.035971223022, y: 2.35294117647059, size: 1 },\r\n // { x: 145.68345323741, y: 2.43137254901961, size: 1 },\r\n // { x: 155.395683453237, y: 3.92156862745098, size: 1 },\r\n // { x: 156.043165467626, y: 4, size: 1 },\r\n // { x: 158.63309352518, y: 3.84313725490196, size: 1 },\r\n // { x: 165.107913669065, y: 3.05882352941176, size: 1 },\r\n // { x: 167.05035971223, y: 2.66666666666667, size: 1 },\r\n // { x: 167.697841726619, y: 3.17647058823529, size: 1 },\r\n // { x: 168.345323741007, y: 2.94117647058824, size: 1 },\r\n // { x: 168.992805755396, y: 3.25490196078431, size: 1 },\r\n // { x: 169.640287769784, y: 3.17647058823529, size: 1 },\r\n // { x: 170.287769784173, y: 3.09803921568627, size: 1 },\r\n // { x: 171.58273381295, y: 3.25490196078431, size: 1 },\r\n // { x: 174.172661870504, y: 3.33333333333333, size: 1 },\r\n // { x: 174.820143884892, y: 3.13725490196078, size: 1 },\r\n // { x: 177.410071942446, y: 3.25490196078431, size: 1 },\r\n // { x: 178.705035971223, y: 3.33333333333333, size: 1 },\r\n // { x: 179.352517985612, y: 3.01960784313725, size: 1 },\r\n // { x: 180.647482014388, y: 3.05882352941176, size: 1 },\r\n // { x: 183.237410071942, y: 3.33333333333333, size: 1 },\r\n // { x: 183.884892086331, y: 3.2156862745098, size: 1 },\r\n // { x: 184.532374100719, y: 3.13725490196078, size: 1 },\r\n // { x: 185.179856115108, y: 3.01960784313725, size: 1 },\r\n // { x: 187.769784172662, y: 3.05882352941176, size: 1 },\r\n // { x: 188.41726618705, y: 2.86274509803922, size: 1 },\r\n // { x: 189.064748201439, y: 2.86274509803922, size: 1 },\r\n // { x: 189.712230215827, y: 3.2156862745098, size: 1 },\r\n // { x: 191.654676258993, y: 3.25490196078431, size: 1 },\r\n // { x: 195.539568345324, y: 3.2156862745098, size: 1 },\r\n // { x: 196.834532374101, y: 3.2156862745098, size: 1 },\r\n // { x: 197.482014388489, y: 3.25490196078431, size: 1 },\r\n // { x: 199.424460431655, y: 3.25490196078431, size: 1 },\r\n // { x: 200.071942446043, y: 3.09803921568627, size: 1 },\r\n // { x: 200.719424460432, y: 3.29411764705882, size: 1 },\r\n // { x: 201.36690647482, y: 3.33333333333333, size: 1 },\r\n // { x: 202.014388489209, y: 3.17647058823529, size: 1 },\r\n // { x: 202.661870503597, y: 3.13725490196078, size: 1 },\r\n // { x: 203.309352517986, y: 3.25490196078431, size: 1 },\r\n // { x: 205.89928057554, y: 3.13725490196078, size: 1 },\r\n // { x: 209.784172661871, y: 3.2156862745098, size: 1 },\r\n // { x: 211.079136690647, y: 3.01960784313725, size: 1 },\r\n // { x: 212.374100719424, y: 3.05882352941176, size: 1 },\r\n // { x: 216.906474820144, y: 3.33333333333333, size: 1 },\r\n // { x: 217.553956834532, y: 3.05882352941176, size: 1 },\r\n // { x: 218.201438848921, y: 3.05882352941176, size: 1 },\r\n // { x: 219.496402877698, y: 3.33333333333333, size: 1 },\r\n // { x: 220.791366906475, y: 3.33333333333333, size: 1 },\r\n // { x: 222.086330935252, y: 2.90196078431373, size: 1 },\r\n // { x: 223.381294964029, y: 3.17647058823529, size: 1 },\r\n // { x: 224.028776978417, y: 2.90196078431373, size: 1 },\r\n // { x: 227.26618705036, y: 3.17647058823529, size: 1 },\r\n // { x: 227.913669064748, y: 3.17647058823529, size: 1 },\r\n // { x: 228.561151079137, y: 3.17647058823529, size: 1 },\r\n // { x: 234.388489208633, y: 3.80392156862745, size: 1 },\r\n // { x: 235.68345323741, y: 3.76470588235294, size: 1 },\r\n // { x: 244.10071942446, y: 3.88235294117647, size: 1 },\r\n // { x: 253.165467625899, y: 3.05882352941176, size: 1 },\r\n // { x: 253.812949640288, y: 3.01960784313725, size: 1 },\r\n // { x: 257.697841726619, y: 3.80392156862745, size: 1 },\r\n // { x: 276.474820143885, y: 3.92156862745098, size: 1 },\r\n // { x: 281.007194244604, y: 3.88235294117647, size: 1 },\r\n // { x: 290.071942446043, y: 3.92156862745098, size: 1 },\r\n // { x: 292.661870503597, y: 3.88235294117647, size: 1 },\r\n // { x: 295.251798561151, y: 3.29411764705882, size: 1 },\r\n // { x: 300.431654676259, y: 3.84313725490196, size: 1 },\r\n // { x: 303.021582733813, y: 4.07843137254902, size: 1 },\r\n // { x: 305.611510791367, y: 3.88235294117647, size: 1 },\r\n // { x: 306.258992805755, y: 4, size: 1 },\r\n // { x: 306.906474820144, y: 3.92156862745098, size: 1 },\r\n // { x: 308.201438848921, y: 4.15686274509804, size: 1 },\r\n // { x: 311.438848920863, y: 4, size: 1 },\r\n // { x: 312.73381294964, y: 3.84313725490196, size: 1 },\r\n // { x: 314.028776978417, y: 3.76470588235294, size: 1 },\r\n // { x: 317.913669064748, y: 3.05882352941176, size: 1 },\r\n // { x: 318.561151079137, y: 2.94117647058824, size: 1 },\r\n // { x: 330.215827338129, y: 3.96078431372549, size: 1 },\r\n // { x: 337.985611510791, y: 3.29411764705882, size: 1 },\r\n // { x: 339.280575539568, y: 2.7843137254902, size: 1 },\r\n // { x: 339.928057553957, y: 2.3921568627451, size: 1 },\r\n // { x: 359.352517985611, y: 2.94117647058824, size: 1 },\r\n // { x: 0, y: 3.29411764705882, size: 1 },\r\n // { x: 0.647482014388489, y: 3.01960784313725, size: 1 },\r\n // { x: 1.29496402877698, y: 2.3921568627451, size: 1 },\r\n // { x: 9.71223021582734, y: 3.92156862745098, size: 1 },\r\n // { x: 11.0071942446043, y: 4.03921568627451, size: 1 },\r\n // { x: 22.6618705035971, y: 3.25490196078431, size: 1 },\r\n // { x: 30.431654676259, y: 3.88235294117647, size: 1 },\r\n // { x: 42.0863309352518, y: 3.33333333333333, size: 1 },\r\n // { x: 51.1510791366906, y: 3.41176470588235, size: 1 },\r\n // { x: 56.3309352517986, y: 3.49019607843137, size: 1 },\r\n // { x: 64.1007194244604, y: 3.2156862745098, size: 1 },\r\n // { x: 66.0431654676259, y: 3.09803921568627, size: 1 },\r\n // { x: 66.6906474820144, y: 3.33333333333333, size: 1 },\r\n // { x: 68.6330935251799, y: 3.49019607843137, size: 1 },\r\n // { x: 71.2230215827338, y: 4, size: 1 },\r\n // { x: 85.4676258992806, y: 3.33333333333333, size: 1 },\r\n // { x: 86.7625899280576, y: 3.25490196078431, size: 1 },\r\n // { x: 87.410071942446, y: 3.17647058823529, size: 1 },\r\n // { x: 88.0575539568345, y: 3.01960784313725, size: 1 },\r\n // { x: 108.776978417266, y: 2.7843137254902, size: 1 },\r\n // { x: 109.424460431655, y: 2.7843137254902, size: 1 },\r\n // { x: 130.143884892086, y: 3.01960784313725, size: 1 },\r\n // { x: 130.791366906475, y: 3.01960784313725, size: 1 },\r\n // { x: 150.863309352518, y: 3.41176470588235, size: 1 },\r\n // { x: 173.525179856115, y: 3.05882352941176, size: 1 },\r\n // { x: 174.172661870504, y: 3.09803921568627, size: 1 },\r\n // { x: 178.057553956835, y: 3.84313725490196, size: 1 },\r\n // { x: 189.064748201439, y: 4.11764705882353, size: 1 },\r\n // { x: 193.597122302158, y: 3.41176470588235, size: 1 },\r\n // { x: 198.776978417266, y: 4, size: 1 },\r\n // { x: 205.89928057554, y: 3.84313725490196, size: 1 },\r\n // { x: 210.431654676259, y: 3.88235294117647, size: 1 },\r\n // { x: 216.906474820144, y: 3.01960784313725, size: 1 },\r\n // { x: 221.438848920863, y: 4.03921568627451, size: 1 },\r\n // { x: 222.73381294964, y: 4, size: 1 },\r\n // { x: 224.028776978417, y: 4, size: 1 },\r\n // { x: 224.676258992806, y: 4.07843137254902, size: 1 },\r\n // { x: 229.208633093525, y: 3.92156862745098, size: 1 },\r\n // { x: 260.287769784173, y: 2.74509803921569, size: 1 },\r\n // { x: 262.877697841727, y: 4.03921568627451, size: 1 },\r\n // { x: 265.467625899281, y: 3.92156862745098, size: 1 },\r\n // { x: 266.115107913669, y: 4.19607843137255, size: 1 },\r\n // { x: 268.705035971223, y: 4, size: 1 },\r\n // { x: 269.352517985611, y: 4, size: 1 },\r\n // { x: 270, y: 3.92156862745098, size: 1 },\r\n // { x: 270.647482014389, y: 4.23529411764706, size: 1 },\r\n // { x: 271.294964028777, y: 3.96078431372549, size: 1 },\r\n // { x: 271.942446043165, y: 4, size: 1 },\r\n // { x: 272.589928057554, y: 4.27450980392157, size: 1 },\r\n // { x: 274.532374100719, y: 4.07843137254902, size: 1 },\r\n // { x: 275.827338129496, y: 4.03921568627451, size: 1 },\r\n // { x: 276.474820143885, y: 4, size: 1 },\r\n // { x: 277.769784172662, y: 4.07843137254902, size: 1 },\r\n // { x: 279.064748201439, y: 4.03921568627451, size: 1 },\r\n // { x: 279.712230215827, y: 3.96078431372549, size: 1 },\r\n // { x: 281.007194244604, y: 3.49019607843137, size: 1 },\r\n // { x: 282.302158273381, y: 3.2156862745098, size: 1 },\r\n // { x: 286.834532374101, y: 3.84313725490196, size: 1 },\r\n // { x: 291.36690647482, y: 3.80392156862745, size: 1 },\r\n // { x: 299.136690647482, y: 3.80392156862745, size: 1 },\r\n // { x: 303.021582733813, y: 3.05882352941176, size: 1 },\r\n // { x: 306.258992805755, y: 4.07843137254902, size: 1 },\r\n // { x: 306.906474820144, y: 4.07843137254902, size: 1 },\r\n // { x: 308.201438848921, y: 3.88235294117647, size: 1 },\r\n // { x: 308.848920863309, y: 4.07843137254902, size: 1 },\r\n // { x: 309.496402877698, y: 4.11764705882353, size: 1 },\r\n // { x: 310.791366906475, y: 4.19607843137255, size: 1 },\r\n // { x: 312.73381294964, y: 4, size: 1 },\r\n // { x: 313.381294964029, y: 4.03921568627451, size: 1 },\r\n // { x: 314.676258992806, y: 4, size: 1 },\r\n // { x: 315.323741007194, y: 3.92156862745098, size: 1 },\r\n // { x: 315.971223021583, y: 4.03921568627451, size: 1 },\r\n // { x: 316.618705035971, y: 4.03921568627451, size: 1 },\r\n // { x: 317.913669064748, y: 3.92156862745098, size: 1 },\r\n // { x: 318.561151079137, y: 4.11764705882353, size: 1 },\r\n // { x: 319.856115107914, y: 3.80392156862745, size: 1 },\r\n // { x: 320.503597122302, y: 4, size: 1 },\r\n // { x: 321.151079136691, y: 3.92156862745098, size: 1 },\r\n // { x: 321.798561151079, y: 3.92156862745098, size: 1 },\r\n // { x: 322.446043165468, y: 3.96078431372549, size: 1 },\r\n // { x: 330.863309352518, y: 3.88235294117647, size: 1 },\r\n // { x: 349.640287769784, y: 3.52941176470588, size: 1 },\r\n // { x: 350.935251798561, y: 3.88235294117647, size: 1 },\r\n // { x: 352.230215827338, y: 3.96078431372549, size: 1 },\r\n // { x: 353.525179856115, y: 3.96078431372549, size: 1 },\r\n // { x: 2.59459459459459, y: 3.80392156862745, size: 1 },\r\n // { x: 5.18918918918919, y: 4, size: 1 },\r\n // { x: 5.83783783783784, y: 3.68627450980392, size: 1 },\r\n // { x: 6.48648648648649, y: 3.92156862745098, size: 1 },\r\n // { x: 7.13513513513514, y: 3.76470588235294, size: 1 },\r\n // { x: 7.78378378378378, y: 3.41176470588235, size: 1 },\r\n // { x: 10.3783783783784, y: 3.84313725490196, size: 1 },\r\n // { x: 11.027027027027, y: 3.76470588235294, size: 1 },\r\n // { x: 11.6756756756757, y: 3.92156862745098, size: 1 },\r\n // { x: 12.3243243243243, y: 3.92156862745098, size: 1 },\r\n // { x: 12.972972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 13.6216216216216, y: 3.88235294117647, size: 1 },\r\n // { x: 14.2702702702703, y: 3.80392156862745, size: 1 },\r\n // { x: 14.9189189189189, y: 3.80392156862745, size: 1 },\r\n // { x: 16.2162162162162, y: 3.84313725490196, size: 1 },\r\n // { x: 18.8108108108108, y: 3.76470588235294, size: 1 },\r\n // { x: 19.4594594594595, y: 4.15686274509804, size: 1 },\r\n // { x: 20.1081081081081, y: 3.76470588235294, size: 1 },\r\n // { x: 20.7567567567568, y: 3.84313725490196, size: 1 },\r\n // { x: 21.4054054054054, y: 3.84313725490196, size: 1 },\r\n // { x: 22.0540540540541, y: 3.96078431372549, size: 1 },\r\n // { x: 22.7027027027027, y: 3.76470588235294, size: 1 },\r\n // { x: 25.2972972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 26.5945945945946, y: 3.68627450980392, size: 1 },\r\n // { x: 27.2432432432432, y: 4.03921568627451, size: 1 },\r\n // { x: 29.8378378378378, y: 3.37254901960784, size: 1 },\r\n // { x: 31.7837837837838, y: 3.84313725490196, size: 1 },\r\n // { x: 36.3243243243243, y: 3.68627450980392, size: 1 },\r\n // { x: 39.5675675675676, y: 3.76470588235294, size: 1 },\r\n // { x: 40.8648648648649, y: 3.72549019607843, size: 1 },\r\n // { x: 41.5135135135135, y: 3.84313725490196, size: 1 },\r\n // { x: 42.8108108108108, y: 4, size: 1 },\r\n // { x: 44.1081081081081, y: 3.68627450980392, size: 1 },\r\n // { x: 44.7567567567568, y: 3.76470588235294, size: 1 },\r\n // { x: 45.4054054054054, y: 4, size: 1 },\r\n // { x: 46.0540540540541, y: 3.76470588235294, size: 1 },\r\n // { x: 47.3513513513514, y: 3.6078431372549, size: 1 },\r\n // { x: 48, y: 3.88235294117647, size: 1 },\r\n // { x: 48.6486486486486, y: 3.80392156862745, size: 1 },\r\n // { x: 51.2432432432432, y: 3.13725490196078, size: 1 },\r\n // { x: 51.8918918918919, y: 3.33333333333333, size: 1 },\r\n // { x: 55.1351351351351, y: 3.68627450980392, size: 1 },\r\n // { x: 56.4324324324324, y: 3.68627450980392, size: 1 },\r\n // { x: 60.972972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 62.9189189189189, y: 3.45098039215686, size: 1 },\r\n // { x: 63.5675675675676, y: 3.56862745098039, size: 1 },\r\n // { x: 66.8108108108108, y: 3.76470588235294, size: 1 },\r\n // { x: 67.4594594594595, y: 3.41176470588235, size: 1 },\r\n // { x: 68.7567567567568, y: 3.64705882352941, size: 1 },\r\n // { x: 72, y: 3.52941176470588, size: 1 },\r\n // { x: 72.6486486486486, y: 3.2156862745098, size: 1 },\r\n // { x: 74.5945945945946, y: 3.92156862745098, size: 1 },\r\n // { x: 77.8378378378378, y: 4, size: 1 },\r\n // { x: 78.4864864864865, y: 3.64705882352941, size: 1 },\r\n // { x: 79.1351351351351, y: 3.45098039215686, size: 1 },\r\n // { x: 80.4324324324324, y: 3.80392156862745, size: 1 },\r\n // { x: 81.7297297297297, y: 3.6078431372549, size: 1 },\r\n // { x: 82.3783783783784, y: 3.92156862745098, size: 1 },\r\n // { x: 83.027027027027, y: 3.56862745098039, size: 1 },\r\n // { x: 85.6216216216216, y: 3.80392156862745, size: 1 },\r\n // { x: 90.1621621621622, y: 3.80392156862745, size: 1 },\r\n // { x: 93.4054054054054, y: 3.29411764705882, size: 1 },\r\n // { x: 94.054054054054, y: 3.2156862745098, size: 1 },\r\n // { x: 94.7027027027027, y: 3.17647058823529, size: 1 },\r\n // { x: 98.5945945945946, y: 3.76470588235294, size: 1 },\r\n // { x: 103.135135135135, y: 3.76470588235294, size: 1 },\r\n // { x: 107.027027027027, y: 3.6078431372549, size: 1 },\r\n // { x: 112.864864864865, y: 3.76470588235294, size: 1 },\r\n // { x: 114.162162162162, y: 3.6078431372549, size: 1 },\r\n // { x: 115.459459459459, y: 3.49019607843137, size: 1 },\r\n // { x: 116.108108108108, y: 3.33333333333333, size: 1 },\r\n // { x: 116.756756756757, y: 3.17647058823529, size: 1 },\r\n // { x: 118.702702702703, y: 3.52941176470588, size: 1 },\r\n // { x: 119.351351351351, y: 3.84313725490196, size: 1 },\r\n // { x: 124.540540540541, y: 3.80392156862745, size: 1 },\r\n // { x: 125.189189189189, y: 3.72549019607843, size: 1 },\r\n // { x: 129.72972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 131.675675675676, y: 3.41176470588235, size: 1 },\r\n // { x: 132.324324324324, y: 4.03921568627451, size: 1 },\r\n // { x: 132.972972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 134.918918918919, y: 3.49019607843137, size: 1 },\r\n // { x: 136.216216216216, y: 3.49019607843137, size: 1 },\r\n // { x: 136.864864864865, y: 3.25490196078431, size: 1 },\r\n // { x: 137.513513513514, y: 2.66666666666667, size: 1 },\r\n // { x: 138.162162162162, y: 2.35294117647059, size: 1 },\r\n // { x: 139.459459459459, y: 3.56862745098039, size: 1 },\r\n // { x: 143.351351351351, y: 3.88235294117647, size: 1 },\r\n // { x: 144, y: 3.49019607843137, size: 1 },\r\n // { x: 144.648648648649, y: 3.56862745098039, size: 1 },\r\n // { x: 145.297297297297, y: 3.33333333333333, size: 1 },\r\n // { x: 145.945945945946, y: 3.49019607843137, size: 1 },\r\n // { x: 146.594594594595, y: 3.49019607843137, size: 1 },\r\n // { x: 147.243243243243, y: 3.6078431372549, size: 1 },\r\n // { x: 151.135135135135, y: 3.37254901960784, size: 1 },\r\n // { x: 157.621621621622, y: 3.37254901960784, size: 1 },\r\n // { x: 158.27027027027, y: 3.13725490196078, size: 1 },\r\n // { x: 159.567567567568, y: 2.62745098039216, size: 1 },\r\n // { x: 160.864864864865, y: 3.41176470588235, size: 1 },\r\n // { x: 163.459459459459, y: 3.45098039215686, size: 1 },\r\n // { x: 168.648648648649, y: 3.64705882352941, size: 1 },\r\n // { x: 171.243243243243, y: 3.29411764705882, size: 1 },\r\n // { x: 171.891891891892, y: 3.45098039215686, size: 1 },\r\n // { x: 172.540540540541, y: 3.41176470588235, size: 1 },\r\n // { x: 173.189189189189, y: 3.29411764705882, size: 1 },\r\n // { x: 174.486486486486, y: 3.45098039215686, size: 1 },\r\n // { x: 175.135135135135, y: 3.76470588235294, size: 1 },\r\n // { x: 175.783783783784, y: 3.49019607843137, size: 1 },\r\n // { x: 177.72972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 179.027027027027, y: 3.37254901960784, size: 1 },\r\n // { x: 179.675675675676, y: 3.33333333333333, size: 1 },\r\n // { x: 180.324324324324, y: 3.17647058823529, size: 1 },\r\n // { x: 180.972972972973, y: 2.7843137254902, size: 1 },\r\n // { x: 181.621621621622, y: 2.74509803921569, size: 1 },\r\n // { x: 186.162162162162, y: 3.64705882352941, size: 1 },\r\n // { x: 190.054054054054, y: 3.92156862745098, size: 1 },\r\n // { x: 199.135135135135, y: 3.76470588235294, size: 1 },\r\n // { x: 200.432432432432, y: 3.29411764705882, size: 1 },\r\n // { x: 202.378378378378, y: 3.29411764705882, size: 1 },\r\n // { x: 203.027027027027, y: 3.25490196078431, size: 1 },\r\n // { x: 204.324324324324, y: 3.88235294117647, size: 1 },\r\n // { x: 205.621621621622, y: 3.68627450980392, size: 1 },\r\n // { x: 208.864864864865, y: 3.92156862745098, size: 1 },\r\n // { x: 211.459459459459, y: 3.80392156862745, size: 1 },\r\n // { x: 212.108108108108, y: 3.64705882352941, size: 1 },\r\n // { x: 212.756756756757, y: 3.92156862745098, size: 1 },\r\n // { x: 213.405405405405, y: 3.92156862745098, size: 1 },\r\n // { x: 216.648648648649, y: 3.88235294117647, size: 1 },\r\n // { x: 221.837837837838, y: 3.84313725490196, size: 1 },\r\n // { x: 224.432432432432, y: 2.54901960784314, size: 1 },\r\n // { x: 228.324324324324, y: 3.76470588235294, size: 1 },\r\n // { x: 230.918918918919, y: 3.68627450980392, size: 1 },\r\n // { x: 232.216216216216, y: 3.37254901960784, size: 1 },\r\n // { x: 232.864864864865, y: 3.76470588235294, size: 1 },\r\n // { x: 233.513513513514, y: 3.84313725490196, size: 1 },\r\n // { x: 234.162162162162, y: 3.80392156862745, size: 1 },\r\n // { x: 236.108108108108, y: 3.56862745098039, size: 1 },\r\n // { x: 238.054054054054, y: 3.84313725490196, size: 1 },\r\n // { x: 245.837837837838, y: 2.90196078431373, size: 1 },\r\n // { x: 246.486486486486, y: 2.98039215686275, size: 1 },\r\n // { x: 247.783783783784, y: 3.84313725490196, size: 1 },\r\n // { x: 250.378378378378, y: 3.45098039215686, size: 1 },\r\n // { x: 252.324324324324, y: 3.25490196078431, size: 1 },\r\n // { x: 252.972972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 256.216216216216, y: 3.6078431372549, size: 1 },\r\n // { x: 256.864864864865, y: 3.29411764705882, size: 1 },\r\n // { x: 257.513513513513, y: 3.45098039215686, size: 1 },\r\n // { x: 258.162162162162, y: 3.37254901960784, size: 1 },\r\n // { x: 258.810810810811, y: 3.2156862745098, size: 1 },\r\n // { x: 261.405405405405, y: 3.49019607843137, size: 1 },\r\n // { x: 262.054054054054, y: 3.49019607843137, size: 1 },\r\n // { x: 264.648648648649, y: 3.13725490196078, size: 1 },\r\n // { x: 265.297297297297, y: 3.33333333333333, size: 1 },\r\n // { x: 266.594594594595, y: 3.37254901960784, size: 1 },\r\n // { x: 267.243243243243, y: 2.86274509803922, size: 1 },\r\n // { x: 267.891891891892, y: 2.94117647058824, size: 1 },\r\n // { x: 268.540540540541, y: 3.29411764705882, size: 1 },\r\n // { x: 271.135135135135, y: 3.72549019607843, size: 1 },\r\n // { x: 271.783783783784, y: 3.80392156862745, size: 1 },\r\n // { x: 272.432432432432, y: 3.52941176470588, size: 1 },\r\n // { x: 275.675675675676, y: 3.37254901960784, size: 1 },\r\n // { x: 283.459459459459, y: 3.96078431372549, size: 1 },\r\n // { x: 284.108108108108, y: 3.41176470588235, size: 1 },\r\n // { x: 286.054054054054, y: 3.49019607843137, size: 1 },\r\n // { x: 289.297297297297, y: 3.17647058823529, size: 1 },\r\n // { x: 289.945945945946, y: 3.33333333333333, size: 1 },\r\n // { x: 290.594594594595, y: 3.76470588235294, size: 1 },\r\n // { x: 291.891891891892, y: 3.64705882352941, size: 1 },\r\n // { x: 293.189189189189, y: 3.72549019607843, size: 1 },\r\n // { x: 294.486486486487, y: 3.88235294117647, size: 1 },\r\n // { x: 297.72972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 299.027027027027, y: 3.80392156862745, size: 1 },\r\n // { x: 303.567567567568, y: 3.96078431372549, size: 1 },\r\n // { x: 306.162162162162, y: 3.76470588235294, size: 1 },\r\n // { x: 308.108108108108, y: 3.72549019607843, size: 1 },\r\n // { x: 310.054054054054, y: 3.33333333333333, size: 1 },\r\n // { x: 311.351351351351, y: 3.17647058823529, size: 1 },\r\n // { x: 312.648648648649, y: 3.84313725490196, size: 1 },\r\n // { x: 314.594594594595, y: 3.80392156862745, size: 1 },\r\n // { x: 315.243243243243, y: 3.84313725490196, size: 1 },\r\n // { x: 315.891891891892, y: 3.68627450980392, size: 1 },\r\n // { x: 316.540540540541, y: 3.52941176470588, size: 1 },\r\n // { x: 319.135135135135, y: 3.56862745098039, size: 1 },\r\n // { x: 320.432432432432, y: 3.84313725490196, size: 1 },\r\n // { x: 321.72972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 322.378378378378, y: 3.88235294117647, size: 1 },\r\n // { x: 323.675675675676, y: 3.72549019607843, size: 1 },\r\n // { x: 324.324324324324, y: 4, size: 1 },\r\n // { x: 332.108108108108, y: 3.41176470588235, size: 1 },\r\n // { x: 336, y: 3.41176470588235, size: 1 },\r\n // { x: 337.945945945946, y: 3.37254901960784, size: 1 },\r\n // { x: 340.540540540541, y: 3.88235294117647, size: 1 },\r\n // { x: 350.27027027027, y: 3.52941176470588, size: 1 },\r\n // { x: 352.216216216216, y: 3.37254901960784, size: 1 },\r\n // { x: 352.864864864865, y: 3.2156862745098, size: 1 },\r\n // { x: 353.513513513513, y: 3.17647058823529, size: 1 },\r\n // { x: 355.459459459459, y: 3.92156862745098, size: 1 },\r\n // { x: 356.108108108108, y: 3.72549019607843, size: 1 },\r\n // { x: 359.351351351351, y: 3.52941176470588, size: 1 },\r\n // { x: 1.29496402877698, y: 3.92156862745098, size: 1 },\r\n // { x: 14.2446043165468, y: 3.17647058823529, size: 1 },\r\n // { x: 14.8920863309353, y: 3.33333333333333, size: 1 },\r\n // { x: 15.5395683453237, y: 2.82352941176471, size: 1 },\r\n // { x: 36.2589928057554, y: 3.41176470588235, size: 1 },\r\n // { x: 36.9064748201439, y: 2.94117647058824, size: 1 },\r\n // { x: 37.5539568345324, y: 2.86274509803922, size: 1 },\r\n // { x: 39.4964028776978, y: 3.96078431372549, size: 1 },\r\n // { x: 40.1438848920863, y: 3.96078431372549, size: 1 },\r\n // { x: 73.1654676258993, y: 4, size: 1 },\r\n // { x: 78.9928057553957, y: 3.25490196078431, size: 1 },\r\n // { x: 79.6402877697842, y: 3.2156862745098, size: 1 },\r\n // { x: 80.2877697841727, y: 2.3921568627451, size: 1 },\r\n // { x: 80.9352517985612, y: 2.50980392156863, size: 1 },\r\n // { x: 101.654676258993, y: 3.05882352941176, size: 1 },\r\n // { x: 113.956834532374, y: 3.76470588235294, size: 1 },\r\n // { x: 123.021582733813, y: 3.05882352941176, size: 1 },\r\n // { x: 123.669064748201, y: 1.88235294117647, size: 1 },\r\n // { x: 124.31654676259, y: 3.29411764705882, size: 1 },\r\n // { x: 126.906474820144, y: 3.92156862745098, size: 1 },\r\n // { x: 134.676258992806, y: 3.92156862745098, size: 1 },\r\n // { x: 145.68345323741, y: 3.92156862745098, size: 1 },\r\n // { x: 151.510791366906, y: 3.88235294117647, size: 1 },\r\n // { x: 152.805755395683, y: 3.84313725490196, size: 1 },\r\n // { x: 163.165467625899, y: 4, size: 1 },\r\n // { x: 167.697841726619, y: 3.80392156862745, size: 1 },\r\n // { x: 180.647482014388, y: 3.92156862745098, size: 1 },\r\n // { x: 188.41726618705, y: 3.13725490196078, size: 1 },\r\n // { x: 191.654676258993, y: 3.92156862745098, size: 1 },\r\n // { x: 196.187050359712, y: 4.03921568627451, size: 1 },\r\n // { x: 209.136690647482, y: 3.17647058823529, size: 1 },\r\n // { x: 209.784172661871, y: 2.50980392156863, size: 1 },\r\n // { x: 210.431654676259, y: 2.35294117647059, size: 1 },\r\n // { x: 220.143884892086, y: 3.96078431372549, size: 1 },\r\n // { x: 231.151079136691, y: 3.33333333333333, size: 1 },\r\n // { x: 249.280575539568, y: 3.80392156862745, size: 1 },\r\n // { x: 255.107913669065, y: 3.41176470588235, size: 1 },\r\n // { x: 273.884892086331, y: 3.29411764705882, size: 1 },\r\n // { x: 274.532374100719, y: 2.86274509803922, size: 1 },\r\n // { x: 279.712230215827, y: 3.84313725490196, size: 1 },\r\n // { x: 282.94964028777, y: 3.84313725490196, size: 1 },\r\n // { x: 286.187050359712, y: 4.11764705882353, size: 1 },\r\n // { x: 295.89928057554, y: 2.03921568627451, size: 1 },\r\n // { x: 296.546762589928, y: 1.56862745098039, size: 1 },\r\n // { x: 297.194244604317, y: 1.72549019607843, size: 1 },\r\n // { x: 297.841726618705, y: 1.25490196078431, size: 1 },\r\n // { x: 298.489208633094, y: 2.98039215686275, size: 1 },\r\n // { x: 299.784172661871, y: 3.29411764705882, size: 1 },\r\n // { x: 300.431654676259, y: 3.13725490196078, size: 1 },\r\n // { x: 301.079136690647, y: 2.98039215686275, size: 1 },\r\n // { x: 305.611510791367, y: 2.94117647058824, size: 1 },\r\n // { x: 311.438848920863, y: 2.82352941176471, size: 1 },\r\n // { x: 313.381294964029, y: 3.17647058823529, size: 1 },\r\n // { x: 314.028776978417, y: 3.29411764705882, size: 1 },\r\n // { x: 315.971223021583, y: 3.13725490196078, size: 1 },\r\n // { x: 317.26618705036, y: 3.29411764705882, size: 1 },\r\n // { x: 317.913669064748, y: 2.94117647058824, size: 1 },\r\n // { x: 318.561151079137, y: 3.25490196078431, size: 1 },\r\n // { x: 338.63309352518, y: 3.2156862745098, size: 1 },\r\n // { x: 339.280575539568, y: 2.70588235294118, size: 1 },\r\n // { x: 339.928057553957, y: 2.82352941176471, size: 1 },\r\n // { x: 340.575539568345, y: 4, size: 1 },\r\n // { x: 359.352517985611, y: 3.01960784313725, size: 1 },\r\n // { x: 0, y: 3.41176470588235, size: 1 },\r\n // { x: 0.647482014388489, y: 2.19607843137255, size: 1 },\r\n // { x: 1.29496402877698, y: 2.15686274509804, size: 1 },\r\n // { x: 21.3669064748201, y: 3.29411764705882, size: 1 },\r\n // { x: 22.0143884892086, y: 2.94117647058824, size: 1 },\r\n // { x: 22.6618705035971, y: 2.74509803921569, size: 1 },\r\n // { x: 24.6043165467626, y: 3.49019607843137, size: 1 },\r\n // { x: 44.0287769784173, y: 2.47058823529412, size: 1 },\r\n // { x: 44.6762589928058, y: 2.54901960784314, size: 1 },\r\n // { x: 47.2661870503597, y: 3.25490196078431, size: 1 },\r\n // { x: 81.5827338129496, y: 4, size: 1 },\r\n // { x: 87.410071942446, y: 3.29411764705882, size: 1 },\r\n // { x: 88.0575539568345, y: 3.2156862745098, size: 1 },\r\n // { x: 106.187050359712, y: 3.33333333333333, size: 1 },\r\n // { x: 107.482014388489, y: 2.86274509803922, size: 1 },\r\n // { x: 130.143884892086, y: 4.07843137254902, size: 1 },\r\n // { x: 147.625899280576, y: 3.33333333333333, size: 1 },\r\n // { x: 150.863309352518, y: 3.17647058823529, size: 1 },\r\n // { x: 151.510791366906, y: 3.2156862745098, size: 1 },\r\n // { x: 152.158273381295, y: 3.09803921568627, size: 1 },\r\n // { x: 161.223021582734, y: 3.96078431372549, size: 1 },\r\n // { x: 165.755395683453, y: 3.84313725490196, size: 1 },\r\n // { x: 167.05035971223, y: 3.80392156862745, size: 1 },\r\n // { x: 168.345323741007, y: 3.80392156862745, size: 1 },\r\n // { x: 172.230215827338, y: 3.09803921568627, size: 1 },\r\n // { x: 172.877697841727, y: 3.13725490196078, size: 1 },\r\n // { x: 173.525179856115, y: 2.58823529411765, size: 1 },\r\n // { x: 174.172661870504, y: 2.50980392156863, size: 1 },\r\n // { x: 183.237410071942, y: 3.76470588235294, size: 1 },\r\n // { x: 194.244604316547, y: 3.37254901960784, size: 1 },\r\n // { x: 215.611510791367, y: 3.17647058823529, size: 1 },\r\n // { x: 224.028776978417, y: 3.09803921568627, size: 1 },\r\n // { x: 231.798561151079, y: 3.92156862745098, size: 1 },\r\n // { x: 247.338129496403, y: 3.92156862745098, size: 1 },\r\n // { x: 249.280575539568, y: 3.84313725490196, size: 1 },\r\n // { x: 260.935251798561, y: 3.41176470588235, size: 1 },\r\n // { x: 279.712230215827, y: 3.72549019607843, size: 1 },\r\n // { x: 284.892086330935, y: 3.96078431372549, size: 1 },\r\n // { x: 285.539568345324, y: 3.92156862745098, size: 1 },\r\n // { x: 287.482014388489, y: 3.84313725490196, size: 1 },\r\n // { x: 290.071942446043, y: 3.80392156862745, size: 1 },\r\n // { x: 293.309352517986, y: 4.03921568627451, size: 1 },\r\n // { x: 297.841726618705, y: 3.92156862745098, size: 1 },\r\n // { x: 299.136690647482, y: 3.96078431372549, size: 1 },\r\n // { x: 303.021582733813, y: 3.33333333333333, size: 1 },\r\n // { x: 303.669064748201, y: 3.05882352941176, size: 1 },\r\n // { x: 304.31654676259, y: 3.17647058823529, size: 1 },\r\n // { x: 304.964028776978, y: 3.13725490196078, size: 1 },\r\n // { x: 311.438848920863, y: 3.13725490196078, size: 1 },\r\n // { x: 316.618705035971, y: 3.33333333333333, size: 1 },\r\n // { x: 321.151079136691, y: 2.94117647058824, size: 1 },\r\n // { x: 323.741007194245, y: 3.41176470588235, size: 1 },\r\n // { x: 325.035971223022, y: 3.13725490196078, size: 1 },\r\n // { x: 326.330935251799, y: 3.29411764705882, size: 1 },\r\n // { x: 342.517985611511, y: 3.84313725490196, size: 1 },\r\n // { x: 343.165467625899, y: 3.96078431372549, size: 1 },\r\n // { x: 344.460431654676, y: 3.2156862745098, size: 1 },\r\n // { x: 345.107913669065, y: 3.17647058823529, size: 1 },\r\n // { x: 346.402877697842, y: 2.54901960784314, size: 1 },\r\n // { x: 347.05035971223, y: 3.2156862745098, size: 1 },\r\n // { x: 347.697841726619, y: 2.7843137254902, size: 1 },\r\n // { x: 348.345323741007, y: 2.82352941176471, size: 1 },\r\n // { x: 350.935251798561, y: 3.37254901960784, size: 1 },\r\n // { x: 359.352517985611, y: 3.25490196078431, size: 1 },\r\n // { x: 7.12230215827338, y: 3.29411764705882, size: 1 },\r\n // { x: 7.76978417266187, y: 2.70588235294118, size: 1 },\r\n // { x: 8.41726618705036, y: 2.90196078431373, size: 1 },\r\n // { x: 9.06474820143885, y: 2.98039215686275, size: 1 },\r\n // { x: 10.3597122302158, y: 4.11764705882353, size: 1 },\r\n // { x: 11.6546762589928, y: 4, size: 1 },\r\n // { x: 13.5971223021583, y: 4, size: 1 },\r\n // { x: 14.8920863309353, y: 4.11764705882353, size: 1 },\r\n // { x: 16.8345323741007, y: 3.84313725490196, size: 1 },\r\n // { x: 17.4820143884892, y: 3.92156862745098, size: 1 },\r\n // { x: 20.0719424460432, y: 4, size: 1 },\r\n // { x: 21.3669064748201, y: 3.96078431372549, size: 1 },\r\n // { x: 22.0143884892086, y: 4.19607843137255, size: 1 },\r\n // { x: 25.8992805755396, y: 4.11764705882353, size: 1 },\r\n // { x: 26.5467625899281, y: 4.03921568627451, size: 1 },\r\n // { x: 30.431654676259, y: 3.17647058823529, size: 1 },\r\n // { x: 50.5035971223022, y: 3.17647058823529, size: 1 },\r\n // { x: 52.4460431654676, y: 3.92156862745098, size: 1 },\r\n // { x: 53.0935251798561, y: 3.88235294117647, size: 1 },\r\n // { x: 55.6834532374101, y: 3.96078431372549, size: 1 },\r\n // { x: 57.6258992805755, y: 3.80392156862745, size: 1 },\r\n // { x: 58.273381294964, y: 3.84313725490196, size: 1 },\r\n // { x: 60.2158273381295, y: 4.03921568627451, size: 1 },\r\n // { x: 60.863309352518, y: 3.84313725490196, size: 1 },\r\n // { x: 61.5107913669065, y: 4.03921568627451, size: 1 },\r\n // { x: 62.8057553956835, y: 3.84313725490196, size: 1 },\r\n // { x: 67.9856115107914, y: 4.27450980392157, size: 1 },\r\n // { x: 69.9280575539568, y: 3.96078431372549, size: 1 },\r\n // { x: 70.5755395683453, y: 3.45098039215686, size: 1 },\r\n // { x: 71.2230215827338, y: 3.29411764705882, size: 1 },\r\n // { x: 71.8705035971223, y: 3.2156862745098, size: 1 },\r\n // { x: 72.5179856115108, y: 2.3921568627451, size: 1 },\r\n // { x: 73.1654676258993, y: 2.47058823529412, size: 1 },\r\n // { x: 73.8129496402878, y: 4, size: 1 },\r\n // { x: 74.4604316546763, y: 3.96078431372549, size: 1 },\r\n // { x: 75.7553956834532, y: 3.96078431372549, size: 1 },\r\n // { x: 77.6978417266187, y: 4, size: 1 },\r\n // { x: 78.3453237410072, y: 3.84313725490196, size: 1 },\r\n // { x: 78.9928057553957, y: 4.03921568627451, size: 1 },\r\n // { x: 82.2302158273381, y: 4, size: 1 },\r\n // { x: 83.5251798561151, y: 4.11764705882353, size: 1 },\r\n // { x: 84.1726618705036, y: 4.03921568627451, size: 1 },\r\n // { x: 84.8201438848921, y: 4, size: 1 },\r\n // { x: 86.1151079136691, y: 4.07843137254902, size: 1 },\r\n // { x: 87.410071942446, y: 4.15686274509804, size: 1 },\r\n // { x: 90, y: 4.15686274509804, size: 1 },\r\n // { x: 91.9424460431655, y: 3.96078431372549, size: 1 },\r\n // { x: 92.589928057554, y: 3.29411764705882, size: 1 },\r\n // { x: 93.2374100719424, y: 3.17647058823529, size: 1 },\r\n // { x: 93.8848920863309, y: 2.82352941176471, size: 1 },\r\n // { x: 94.5323741007194, y: 2.70588235294118, size: 1 },\r\n // { x: 97.1223021582734, y: 3.88235294117647, size: 1 },\r\n // { x: 99.0647482014388, y: 3.92156862745098, size: 1 },\r\n // { x: 101.007194244604, y: 4, size: 1 },\r\n // { x: 102.302158273381, y: 3.96078431372549, size: 1 },\r\n // { x: 105.539568345324, y: 3.92156862745098, size: 1 },\r\n // { x: 106.834532374101, y: 3.88235294117647, size: 1 },\r\n // { x: 110.071942446043, y: 3.96078431372549, size: 1 },\r\n // { x: 113.309352517986, y: 4, size: 1 },\r\n // { x: 115.251798561151, y: 3.29411764705882, size: 1 },\r\n // { x: 115.89928057554, y: 2.94117647058824, size: 1 },\r\n // { x: 124.964028776978, y: 3.72549019607843, size: 1 },\r\n // { x: 140.503597122302, y: 3.84313725490196, size: 1 },\r\n // { x: 142.446043165468, y: 3.92156862745098, size: 1 },\r\n // { x: 157.985611510791, y: 3.17647058823529, size: 1 },\r\n // { x: 158.63309352518, y: 2.94117647058824, size: 1 },\r\n // { x: 159.280575539568, y: 2.98039215686275, size: 1 },\r\n // { x: 180, y: 3.17647058823529, size: 1 },\r\n // { x: 180.647482014388, y: 2.94117647058824, size: 1 },\r\n // { x: 189.064748201439, y: 3.88235294117647, size: 1 },\r\n // { x: 190.359712230216, y: 4, size: 1 },\r\n // { x: 197.482014388489, y: 3.96078431372549, size: 1 },\r\n // { x: 202.014388489209, y: 3.13725490196078, size: 1 },\r\n // { x: 203.956834532374, y: 3.17647058823529, size: 1 },\r\n // { x: 204.604316546763, y: 3.13725490196078, size: 1 },\r\n // { x: 205.251798561151, y: 3.29411764705882, size: 1 },\r\n // { x: 208.489208633094, y: 3.17647058823529, size: 1 },\r\n // { x: 209.136690647482, y: 3.2156862745098, size: 1 },\r\n // { x: 212.374100719424, y: 3.37254901960784, size: 1 },\r\n // { x: 214.964028776978, y: 3.2156862745098, size: 1 },\r\n // { x: 219.496402877698, y: 3.17647058823529, size: 1 },\r\n // { x: 220.143884892086, y: 3.25490196078431, size: 1 },\r\n // { x: 220.791366906475, y: 3.2156862745098, size: 1 },\r\n // { x: 221.438848920863, y: 3.29411764705882, size: 1 },\r\n // { x: 228.561151079137, y: 4.03921568627451, size: 1 },\r\n // { x: 246.690647482014, y: 4.03921568627451, size: 1 },\r\n // { x: 249.280575539568, y: 3.88235294117647, size: 1 },\r\n // { x: 257.05035971223, y: 3.96078431372549, size: 1 },\r\n // { x: 271.942446043165, y: 3.88235294117647, size: 1 },\r\n // { x: 279.712230215827, y: 3.45098039215686, size: 1 },\r\n // { x: 288.129496402878, y: 3.29411764705882, size: 1 },\r\n // { x: 292.014388489209, y: 3.84313725490196, size: 1 },\r\n // { x: 293.309352517986, y: 3.84313725490196, size: 1 },\r\n // { x: 293.956834532374, y: 3.80392156862745, size: 1 },\r\n // { x: 296.546762589928, y: 3.88235294117647, size: 1 },\r\n // { x: 298.489208633094, y: 3.84313725490196, size: 1 },\r\n // { x: 306.906474820144, y: 3.84313725490196, size: 1 },\r\n // { x: 308.848920863309, y: 3.2156862745098, size: 1 },\r\n // { x: 310.143884892086, y: 2.62745098039216, size: 1 },\r\n // { x: 313.381294964029, y: 3.92156862745098, size: 1 },\r\n // { x: 317.913669064748, y: 3.88235294117647, size: 1 },\r\n // { x: 321.798561151079, y: 4, size: 1 },\r\n // { x: 327.625899280576, y: 3.76470588235294, size: 1 },\r\n // { x: 330.863309352518, y: 3.13725490196078, size: 1 },\r\n // { x: 332.805755395683, y: 3.25490196078431, size: 1 },\r\n // { x: 336.690647482014, y: 3.29411764705882, size: 1 },\r\n // { x: 352.877697841727, y: 3.25490196078431, size: 1 },\r\n // { x: 353.525179856115, y: 3.17647058823529, size: 1 },\r\n // { x: 354.172661870504, y: 3.92156862745098, size: 1 },\r\n // { x: 358.705035971223, y: 3.88235294117647, size: 1 },\r\n // { x: 0.648648648648649, y: 3.76470588235294, size: 1 },\r\n // { x: 1.2972972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 3.24324324324324, y: 3.84313725490196, size: 1 },\r\n // { x: 3.89189189189189, y: 3.92156862745098, size: 1 },\r\n // { x: 5.83783783783784, y: 3.92156862745098, size: 1 },\r\n // { x: 6.48648648648649, y: 3.72549019607843, size: 1 },\r\n // { x: 7.78378378378378, y: 3.84313725490196, size: 1 },\r\n // { x: 11.027027027027, y: 3.88235294117647, size: 1 },\r\n // { x: 13.6216216216216, y: 3.13725490196078, size: 1 },\r\n // { x: 14.2702702702703, y: 3.25490196078431, size: 1 },\r\n // { x: 14.9189189189189, y: 3.37254901960784, size: 1 },\r\n // { x: 24, y: 3.92156862745098, size: 1 },\r\n // { x: 29.8378378378378, y: 3.64705882352941, size: 1 },\r\n // { x: 31.1351351351351, y: 3.88235294117647, size: 1 },\r\n // { x: 32.4324324324324, y: 3.84313725490196, size: 1 },\r\n // { x: 33.0810810810811, y: 3.37254901960784, size: 1 },\r\n // { x: 34.3783783783784, y: 3.33333333333333, size: 1 },\r\n // { x: 35.027027027027, y: 3.49019607843137, size: 1 },\r\n // { x: 35.6756756756757, y: 3.41176470588235, size: 1 },\r\n // { x: 36.3243243243243, y: 2.54901960784314, size: 1 },\r\n // { x: 36.972972972973, y: 2.62745098039216, size: 1 },\r\n // { x: 40.2162162162162, y: 3.45098039215686, size: 1 },\r\n // { x: 42.8108108108108, y: 3.64705882352941, size: 1 },\r\n // { x: 48, y: 3.52941176470588, size: 1 },\r\n // { x: 49.9459459459459, y: 3.41176470588235, size: 1 },\r\n // { x: 55.1351351351351, y: 3.45098039215686, size: 1 },\r\n // { x: 56.4324324324324, y: 3.37254901960784, size: 1 },\r\n // { x: 57.7297297297297, y: 3.13725490196078, size: 1 },\r\n // { x: 58.3783783783784, y: 3.13725490196078, size: 1 },\r\n // { x: 60.972972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 61.6216216216216, y: 3.56862745098039, size: 1 },\r\n // { x: 64.2162162162162, y: 3.72549019607843, size: 1 },\r\n // { x: 66.8108108108108, y: 3.64705882352941, size: 1 },\r\n // { x: 67.4594594594595, y: 3.37254901960784, size: 1 },\r\n // { x: 74.5945945945946, y: 3.25490196078431, size: 1 },\r\n // { x: 75.8918918918919, y: 3.29411764705882, size: 1 },\r\n // { x: 78.4864864864865, y: 3.37254901960784, size: 1 },\r\n // { x: 79.1351351351351, y: 3.2156862745098, size: 1 },\r\n // { x: 80.4324324324324, y: 3.33333333333333, size: 1 },\r\n // { x: 84.3243243243243, y: 3.68627450980392, size: 1 },\r\n // { x: 88.8648648648649, y: 3.84313725490196, size: 1 },\r\n // { x: 89.5135135135135, y: 3.84313725490196, size: 1 },\r\n // { x: 90.8108108108108, y: 3.64705882352941, size: 1 },\r\n // { x: 92.1081081081081, y: 3.41176470588235, size: 1 },\r\n // { x: 93.4054054054054, y: 3.76470588235294, size: 1 },\r\n // { x: 99.2432432432432, y: 3.41176470588235, size: 1 },\r\n // { x: 99.8918918918919, y: 3.25490196078431, size: 1 },\r\n // { x: 101.837837837838, y: 2.54901960784314, size: 1 },\r\n // { x: 102.486486486486, y: 3.45098039215686, size: 1 },\r\n // { x: 105.081081081081, y: 3.68627450980392, size: 1 },\r\n // { x: 109.621621621622, y: 3.6078431372549, size: 1 },\r\n // { x: 110.918918918919, y: 3.56862745098039, size: 1 },\r\n // { x: 112.216216216216, y: 3.41176470588235, size: 1 },\r\n // { x: 117.405405405405, y: 3.80392156862745, size: 1 },\r\n // { x: 118.702702702703, y: 3.37254901960784, size: 1 },\r\n // { x: 120.648648648649, y: 3.41176470588235, size: 1 },\r\n // { x: 121.945945945946, y: 3.25490196078431, size: 1 },\r\n // { x: 122.594594594595, y: 2.94117647058824, size: 1 },\r\n // { x: 123.243243243243, y: 2.70588235294118, size: 1 },\r\n // { x: 125.189189189189, y: 3.84313725490196, size: 1 },\r\n // { x: 126.486486486486, y: 3.6078431372549, size: 1 },\r\n // { x: 127.135135135135, y: 3.45098039215686, size: 1 },\r\n // { x: 130.378378378378, y: 3.29411764705882, size: 1 },\r\n // { x: 132.324324324324, y: 3.88235294117647, size: 1 },\r\n // { x: 134.27027027027, y: 3.25490196078431, size: 1 },\r\n // { x: 136.216216216216, y: 3.25490196078431, size: 1 },\r\n // { x: 140.108108108108, y: 3.37254901960784, size: 1 },\r\n // { x: 143.351351351351, y: 3.41176470588235, size: 1 },\r\n // { x: 144, y: 3.33333333333333, size: 1 },\r\n // { x: 144.648648648649, y: 3.37254901960784, size: 1 },\r\n // { x: 145.297297297297, y: 3.29411764705882, size: 1 },\r\n // { x: 151.135135135135, y: 3.49019607843137, size: 1 },\r\n // { x: 153.72972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 154.378378378378, y: 4, size: 1 },\r\n // { x: 156.324324324324, y: 3.49019607843137, size: 1 },\r\n // { x: 159.567567567568, y: 3.76470588235294, size: 1 },\r\n // { x: 160.216216216216, y: 3.52941176470588, size: 1 },\r\n // { x: 160.864864864865, y: 3.49019607843137, size: 1 },\r\n // { x: 161.513513513514, y: 4.11764705882353, size: 1 },\r\n // { x: 165.405405405405, y: 3.29411764705882, size: 1 },\r\n // { x: 166.054054054054, y: 2.82352941176471, size: 1 },\r\n // { x: 166.702702702703, y: 2.7843137254902, size: 1 },\r\n // { x: 171.891891891892, y: 3.56862745098039, size: 1 },\r\n // { x: 180.324324324324, y: 3.76470588235294, size: 1 },\r\n // { x: 183.567567567568, y: 3.41176470588235, size: 1 },\r\n // { x: 184.864864864865, y: 3.49019607843137, size: 1 },\r\n // { x: 185.513513513514, y: 3.49019607843137, size: 1 },\r\n // { x: 186.162162162162, y: 3.41176470588235, size: 1 },\r\n // { x: 187.459459459459, y: 3.29411764705882, size: 1 },\r\n // { x: 188.108108108108, y: 3.05882352941176, size: 1 },\r\n // { x: 190.054054054054, y: 3.37254901960784, size: 1 },\r\n // { x: 190.702702702703, y: 3.29411764705882, size: 1 },\r\n // { x: 194.594594594595, y: 3.49019607843137, size: 1 },\r\n // { x: 199.783783783784, y: 3.49019607843137, size: 1 },\r\n // { x: 201.081081081081, y: 3.52941176470588, size: 1 },\r\n // { x: 202.378378378378, y: 3.33333333333333, size: 1 },\r\n // { x: 204.324324324324, y: 3.2156862745098, size: 1 },\r\n // { x: 205.621621621622, y: 3.29411764705882, size: 1 },\r\n // { x: 208.216216216216, y: 3.33333333333333, size: 1 },\r\n // { x: 209.513513513514, y: 3.09803921568627, size: 1 },\r\n // { x: 210.162162162162, y: 3.09803921568627, size: 1 },\r\n // { x: 213.405405405405, y: 3.45098039215686, size: 1 },\r\n // { x: 214.054054054054, y: 3.6078431372549, size: 1 },\r\n // { x: 214.702702702703, y: 3.6078431372549, size: 1 },\r\n // { x: 221.837837837838, y: 3.37254901960784, size: 1 },\r\n // { x: 226.378378378378, y: 3.56862745098039, size: 1 },\r\n // { x: 227.027027027027, y: 3.41176470588235, size: 1 },\r\n // { x: 228.972972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 229.621621621622, y: 3.25490196078431, size: 1 },\r\n // { x: 230.27027027027, y: 3.17647058823529, size: 1 },\r\n // { x: 230.918918918919, y: 2.74509803921569, size: 1 },\r\n // { x: 231.567567567568, y: 2.98039215686275, size: 1 },\r\n // { x: 232.216216216216, y: 3.45098039215686, size: 1 },\r\n // { x: 234.162162162162, y: 3.49019607843137, size: 1 },\r\n // { x: 236.756756756757, y: 3.49019607843137, size: 1 },\r\n // { x: 237.405405405405, y: 3.45098039215686, size: 1 },\r\n // { x: 241.945945945946, y: 3.52941176470588, size: 1 },\r\n // { x: 245.189189189189, y: 3.72549019607843, size: 1 },\r\n // { x: 246.486486486486, y: 3.37254901960784, size: 1 },\r\n // { x: 248.432432432432, y: 3.33333333333333, size: 1 },\r\n // { x: 249.081081081081, y: 3.25490196078431, size: 1 },\r\n // { x: 253.621621621622, y: 3.49019607843137, size: 1 },\r\n // { x: 256.864864864865, y: 3.56862745098039, size: 1 },\r\n // { x: 258.162162162162, y: 3.84313725490196, size: 1 },\r\n // { x: 263.351351351351, y: 3.76470588235294, size: 1 },\r\n // { x: 269.189189189189, y: 3.52941176470588, size: 1 },\r\n // { x: 269.837837837838, y: 3.80392156862745, size: 1 },\r\n // { x: 272.432432432432, y: 3.41176470588235, size: 1 },\r\n // { x: 273.081081081081, y: 3.2156862745098, size: 1 },\r\n // { x: 273.72972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 274.378378378378, y: 3.05882352941176, size: 1 },\r\n // { x: 275.027027027027, y: 3.25490196078431, size: 1 },\r\n // { x: 279.567567567568, y: 3.72549019607843, size: 1 },\r\n // { x: 285.405405405405, y: 3.29411764705882, size: 1 },\r\n // { x: 289.945945945946, y: 3.49019607843137, size: 1 },\r\n // { x: 295.135135135135, y: 3.33333333333333, size: 1 },\r\n // { x: 297.081081081081, y: 3.49019607843137, size: 1 },\r\n // { x: 297.72972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 299.675675675676, y: 3.84313725490196, size: 1 },\r\n // { x: 300.324324324324, y: 3.72549019607843, size: 1 },\r\n // { x: 305.513513513513, y: 3.56862745098039, size: 1 },\r\n // { x: 311.351351351351, y: 3.52941176470588, size: 1 },\r\n // { x: 315.243243243243, y: 3.80392156862745, size: 1 },\r\n // { x: 316.540540540541, y: 3.09803921568627, size: 1 },\r\n // { x: 317.189189189189, y: 3.25490196078431, size: 1 },\r\n // { x: 317.837837837838, y: 3.29411764705882, size: 1 },\r\n // { x: 321.081081081081, y: 3.68627450980392, size: 1 },\r\n // { x: 324.972972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 326.27027027027, y: 3.68627450980392, size: 1 },\r\n // { x: 328.864864864865, y: 3.92156862745098, size: 1 },\r\n // { x: 330.162162162162, y: 3.68627450980392, size: 1 },\r\n // { x: 330.810810810811, y: 3.84313725490196, size: 1 },\r\n // { x: 331.459459459459, y: 3.52941176470588, size: 1 },\r\n // { x: 332.756756756757, y: 3.92156862745098, size: 1 },\r\n // { x: 333.405405405405, y: 3.45098039215686, size: 1 },\r\n // { x: 336, y: 3.76470588235294, size: 1 },\r\n // { x: 337.297297297297, y: 3.41176470588235, size: 1 },\r\n // { x: 337.945945945946, y: 3.33333333333333, size: 1 },\r\n // { x: 341.189189189189, y: 3.80392156862745, size: 1 },\r\n // { x: 341.837837837838, y: 3.72549019607843, size: 1 },\r\n // { x: 347.675675675676, y: 3.76470588235294, size: 1 },\r\n // { x: 348.324324324324, y: 3.56862745098039, size: 1 },\r\n // { x: 351.567567567568, y: 3.88235294117647, size: 1 },\r\n // { x: 352.216216216216, y: 3.80392156862745, size: 1 },\r\n // { x: 354.162162162162, y: 4.19607843137255, size: 1 },\r\n // { x: 359.351351351351, y: 3.45098039215686, size: 1 },\r\n // { x: 16.1870503597122, y: 4, size: 1 },\r\n // { x: 24.6043165467626, y: 3.96078431372549, size: 1 },\r\n // { x: 47.2661870503597, y: 3.96078431372549, size: 1 },\r\n // { x: 60.2158273381295, y: 3.72549019607843, size: 1 },\r\n // { x: 64.7482014388489, y: 3.29411764705882, size: 1 },\r\n // { x: 65.3956834532374, y: 2.90196078431373, size: 1 },\r\n // { x: 66.0431654676259, y: 2.82352941176471, size: 1 },\r\n // { x: 79.6402877697842, y: 4, size: 1 },\r\n // { x: 88.705035971223, y: 3.88235294117647, size: 1 },\r\n // { x: 93.8848920863309, y: 3.76470588235294, size: 1 },\r\n // { x: 94.5323741007194, y: 3.92156862745098, size: 1 },\r\n // { x: 113.309352517986, y: 3.76470588235294, size: 1 },\r\n // { x: 123.021582733813, y: 3.33333333333333, size: 1 },\r\n // { x: 130.143884892086, y: 3.09803921568627, size: 1 },\r\n // { x: 130.791366906475, y: 2.82352941176471, size: 1 },\r\n // { x: 146.978417266187, y: 3.88235294117647, size: 1 },\r\n // { x: 151.510791366906, y: 2.86274509803922, size: 1 },\r\n // { x: 152.158273381295, y: 3.01960784313725, size: 1 },\r\n // { x: 152.805755395683, y: 3.92156862745098, size: 1 },\r\n // { x: 192.302158273381, y: 4.07843137254902, size: 1 },\r\n // { x: 202.661870503597, y: 4, size: 1 },\r\n // { x: 215.611510791367, y: 3.29411764705882, size: 1 },\r\n // { x: 216.258992805755, y: 2.86274509803922, size: 1 },\r\n // { x: 232.446043165468, y: 3.96078431372549, size: 1 },\r\n // { x: 236.330935251799, y: 3.25490196078431, size: 1 },\r\n // { x: 237.625899280576, y: 2.90196078431373, size: 1 },\r\n // { x: 238.273381294964, y: 2.90196078431373, size: 1 },\r\n // { x: 238.920863309353, y: 3.25490196078431, size: 1 },\r\n // { x: 251.223021582734, y: 4.07843137254902, size: 1 },\r\n // { x: 281.007194244604, y: 3.09803921568627, size: 1 },\r\n // { x: 281.654676258993, y: 2.98039215686275, size: 1 },\r\n // { x: 305.611510791367, y: 3.92156862745098, size: 1 },\r\n // { x: 321.798561151079, y: 3.80392156862745, size: 1 },\r\n // { x: 345.755395683453, y: 3.29411764705882, size: 1 },\r\n // { x: 6.47482014388489, y: 3.33333333333333, size: 1 },\r\n // { x: 7.76978417266187, y: 3.05882352941176, size: 1 },\r\n // { x: 27.841726618705, y: 3.29411764705882, size: 1 },\r\n // { x: 29.7841726618705, y: 3.13725490196078, size: 1 },\r\n // { x: 33.0215827338129, y: 3.45098039215686, size: 1 },\r\n // { x: 49.2086330935252, y: 3.92156862745098, size: 1 },\r\n // { x: 50.5035971223022, y: 3.13725490196078, size: 1 },\r\n // { x: 76.4028776978417, y: 4.03921568627451, size: 1 },\r\n // { x: 82.2302158273381, y: 3.88235294117647, size: 1 },\r\n // { x: 88.0575539568345, y: 4.07843137254902, size: 1 },\r\n // { x: 92.589928057554, y: 3.2156862745098, size: 1 },\r\n // { x: 93.2374100719424, y: 3.2156862745098, size: 1 },\r\n // { x: 115.89928057554, y: 3.41176470588235, size: 1 },\r\n // { x: 122.374100719424, y: 3.76470588235294, size: 1 },\r\n // { x: 124.31654676259, y: 3.96078431372549, size: 1 },\r\n // { x: 134.676258992806, y: 3.80392156862745, size: 1 },\r\n // { x: 137.26618705036, y: 3.09803921568627, size: 1 },\r\n // { x: 147.625899280576, y: 4.03921568627451, size: 1 },\r\n // { x: 156.690647482014, y: 3.29411764705882, size: 1 },\r\n // { x: 157.985611510791, y: 3.13725490196078, size: 1 },\r\n // { x: 158.63309352518, y: 2.98039215686275, size: 1 },\r\n // { x: 187.769784172662, y: 3.84313725490196, size: 1 },\r\n // { x: 202.014388489209, y: 2.82352941176471, size: 1 },\r\n // { x: 222.73381294964, y: 3.2156862745098, size: 1 },\r\n // { x: 223.381294964029, y: 2.74509803921569, size: 1 },\r\n // { x: 224.028776978417, y: 2.98039215686275, size: 1 },\r\n // { x: 230.503597122302, y: 3.88235294117647, size: 1 },\r\n // { x: 244.748201438849, y: 3.01960784313725, size: 1 },\r\n // { x: 245.395683453237, y: 2.70588235294118, size: 1 },\r\n // { x: 251.870503597122, y: 3.64705882352941, size: 1 },\r\n // { x: 255.107913669065, y: 3.92156862745098, size: 1 },\r\n // { x: 266.115107913669, y: 3.05882352941176, size: 1 },\r\n // { x: 266.762589928058, y: 2.54901960784314, size: 1 },\r\n // { x: 267.410071942446, y: 3.25490196078431, size: 1 },\r\n // { x: 282.94964028777, y: 3.88235294117647, size: 1 },\r\n // { x: 287.482014388489, y: 3.01960784313725, size: 1 },\r\n // { x: 288.129496402878, y: 2.11764705882353, size: 1 },\r\n // { x: 288.776978417266, y: 2.19607843137255, size: 1 },\r\n // { x: 292.661870503597, y: 3.80392156862745, size: 1 },\r\n // { x: 295.89928057554, y: 3.45098039215686, size: 1 },\r\n // { x: 308.201438848921, y: 3.13725490196078, size: 1 },\r\n // { x: 309.496402877698, y: 3.09803921568627, size: 1 },\r\n // { x: 310.143884892086, y: 3.01960784313725, size: 1 },\r\n // { x: 312.73381294964, y: 3.92156862745098, size: 1 },\r\n // { x: 330.863309352518, y: 4, size: 1 },\r\n // { x: 346.402877697842, y: 4.03921568627451, size: 1 },\r\n // { x: 352.230215827338, y: 3.33333333333333, size: 1 },\r\n // { x: 352.877697841727, y: 2.62745098039216, size: 1 },\r\n // { x: 353.525179856115, y: 2.66666666666667, size: 1 },\r\n // { x: 359.352517985611, y: 3.88235294117647, size: 1 },\r\n // { x: 2.58992805755396, y: 3.92156862745098, size: 1 },\r\n // { x: 5.17985611510791, y: 3.92156862745098, size: 1 },\r\n // { x: 12.9496402877698, y: 3.2156862745098, size: 1 },\r\n // { x: 14.2446043165468, y: 3.05882352941176, size: 1 },\r\n // { x: 14.8920863309353, y: 2.62745098039216, size: 1 },\r\n // { x: 32.3741007194245, y: 3.37254901960784, size: 1 },\r\n // { x: 35.6115107913669, y: 3.01960784313725, size: 1 },\r\n // { x: 36.2589928057554, y: 2.15686274509804, size: 1 },\r\n // { x: 44.6762589928058, y: 3.33333333333333, size: 1 },\r\n // { x: 51.7985611510791, y: 3.80392156862745, size: 1 },\r\n // { x: 56.3309352517986, y: 3.33333333333333, size: 1 },\r\n // { x: 56.9784172661871, y: 3.29411764705882, size: 1 },\r\n // { x: 57.6258992805755, y: 3.09803921568627, size: 1 },\r\n // { x: 58.273381294964, y: 3.01960784313725, size: 1 },\r\n // { x: 58.9208633093525, y: 3.29411764705882, size: 1 },\r\n // { x: 65.3956834532374, y: 3.29411764705882, size: 1 },\r\n // { x: 77.0503597122302, y: 3.33333333333333, size: 1 },\r\n // { x: 78.3453237410072, y: 3.09803921568627, size: 1 },\r\n // { x: 78.9928057553957, y: 2.11764705882353, size: 1 },\r\n // { x: 79.6402877697842, y: 1.2156862745098, size: 1 },\r\n // { x: 91.294964028777, y: 3.80392156862745, size: 1 },\r\n // { x: 99.7122302158273, y: 2.98039215686275, size: 1 },\r\n // { x: 100.359712230216, y: 2.98039215686275, size: 1 },\r\n // { x: 101.007194244604, y: 2.43137254901961, size: 1 },\r\n // { x: 141.798561151079, y: 3.29411764705882, size: 1 },\r\n // { x: 142.446043165468, y: 3.2156862745098, size: 1 },\r\n // { x: 143.741007194245, y: 2.90196078431373, size: 1 },\r\n // { x: 144.388489208633, y: 2.7843137254902, size: 1 },\r\n // { x: 146.978417266187, y: 3.96078431372549, size: 1 },\r\n // { x: 148.273381294964, y: 3.88235294117647, size: 1 },\r\n // { x: 148.920863309353, y: 3.84313725490196, size: 1 },\r\n // { x: 155.395683453237, y: 3.88235294117647, size: 1 },\r\n // { x: 157.338129496403, y: 3.76470588235294, size: 1 },\r\n // { x: 157.985611510791, y: 4, size: 1 },\r\n // { x: 159.280575539568, y: 4, size: 1 },\r\n // { x: 176.762589928058, y: 3.41176470588235, size: 1 },\r\n // { x: 202.014388489209, y: 3.84313725490196, size: 1 },\r\n // { x: 209.784172661871, y: 3.49019607843137, size: 1 },\r\n // { x: 251.870503597122, y: 3.01960784313725, size: 1 },\r\n // { x: 252.517985611511, y: 2.98039215686275, size: 1 },\r\n // { x: 253.165467625899, y: 3.17647058823529, size: 1 },\r\n // { x: 253.812949640288, y: 3.25490196078431, size: 1 },\r\n // { x: 274.532374100719, y: 3.13725490196078, size: 1 },\r\n // { x: 275.179856115108, y: 3.05882352941176, size: 1 },\r\n // { x: 288.776978417266, y: 3.96078431372549, size: 1 },\r\n // { x: 293.309352517986, y: 3.33333333333333, size: 1 },\r\n // { x: 294.604316546763, y: 3.09803921568627, size: 1 },\r\n // { x: 295.251798561151, y: 2.86274509803922, size: 1 },\r\n // { x: 297.194244604317, y: 3.2156862745098, size: 1 },\r\n // { x: 315.323741007194, y: 3.29411764705882, size: 1 },\r\n // { x: 317.26618705036, y: 3.09803921568627, size: 1 },\r\n // { x: 317.913669064748, y: 2.90196078431373, size: 1 },\r\n // { x: 318.561151079137, y: 2.62745098039216, size: 1 },\r\n // { x: 337.985611510791, y: 3.2156862745098, size: 1 },\r\n // { x: 338.63309352518, y: 3.05882352941176, size: 1 },\r\n // { x: 347.05035971223, y: 3.84313725490196, size: 1 },\r\n // { x: 0, y: 2.82352941176471, size: 1 },\r\n // { x: 0.647482014388489, y: 2.86274509803922, size: 1 },\r\n // { x: 1.29496402877698, y: 3.29411764705882, size: 1 },\r\n // { x: 1.94244604316547, y: 3.09803921568627, size: 1 },\r\n // { x: 14.8920863309353, y: 4, size: 1 },\r\n // { x: 15.5395683453237, y: 4.07843137254902, size: 1 },\r\n // { x: 20.7194244604317, y: 3.01960784313725, size: 1 },\r\n // { x: 21.3669064748201, y: 2.7843137254902, size: 1 },\r\n // { x: 22.0143884892086, y: 2.62745098039216, size: 1 },\r\n // { x: 64.7482014388489, y: 3.17647058823529, size: 1 },\r\n // { x: 65.3956834532374, y: 3.2156862745098, size: 1 },\r\n // { x: 76.4028776978417, y: 3.88235294117647, size: 1 },\r\n // { x: 150.863309352518, y: 2.98039215686275, size: 1 },\r\n // { x: 151.510791366906, y: 2.94117647058824, size: 1 },\r\n // { x: 152.805755395683, y: 3.13725490196078, size: 1 },\r\n // { x: 157.985611510791, y: 3.92156862745098, size: 1 },\r\n // { x: 173.525179856115, y: 2.94117647058824, size: 1 },\r\n // { x: 179.352517985612, y: 3.92156862745098, size: 1 },\r\n // { x: 194.244604316547, y: 3.25490196078431, size: 1 },\r\n // { x: 215.611510791367, y: 3.13725490196078, size: 1 },\r\n // { x: 235.68345323741, y: 3.25490196078431, size: 1 },\r\n // { x: 236.978417266187, y: 3.17647058823529, size: 1 },\r\n // { x: 237.625899280576, y: 3.01960784313725, size: 1 },\r\n // { x: 240.215827338129, y: 3.45098039215686, size: 1 },\r\n // { x: 257.05035971223, y: 3.17647058823529, size: 1 },\r\n // { x: 262.230215827338, y: 3.29411764705882, size: 1 },\r\n // { x: 263.525179856115, y: 3.37254901960784, size: 1 },\r\n // { x: 291.36690647482, y: 3.96078431372549, size: 1 },\r\n // { x: 315.971223021583, y: 3.92156862745098, size: 1 },\r\n // { x: 325.035971223022, y: 3.88235294117647, size: 1 },\r\n // { x: 326.978417266187, y: 3.92156862745098, size: 1 },\r\n // { x: 330.863309352518, y: 4.11764705882353, size: 1 },\r\n // { x: 332.158273381295, y: 4.15686274509804, size: 1 },\r\n // { x: 333.453237410072, y: 3.88235294117647, size: 1 },\r\n // { x: 336.690647482014, y: 3.92156862745098, size: 1 },\r\n // { x: 337.985611510791, y: 3.96078431372549, size: 1 },\r\n // { x: 339.280575539568, y: 4.03921568627451, size: 1 },\r\n // { x: 344.460431654676, y: 3.17647058823529, size: 1 },\r\n // { x: 345.107913669065, y: 2.50980392156863, size: 1 },\r\n // { x: 345.755395683453, y: 2.7843137254902, size: 1 },\r\n // { x: 346.402877697842, y: 2.7843137254902, size: 1 },\r\n // { x: 347.05035971223, y: 2.50980392156863, size: 1 },\r\n // { x: 1.2972972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 3.24324324324324, y: 3.56862745098039, size: 1 },\r\n // { x: 12.3243243243243, y: 3.64705882352941, size: 1 },\r\n // { x: 12.972972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 14.2702702702703, y: 3.41176470588235, size: 1 },\r\n // { x: 15.5675675675676, y: 3.52941176470588, size: 1 },\r\n // { x: 20.7567567567568, y: 3.49019607843137, size: 1 },\r\n // { x: 23.3513513513514, y: 3.41176470588235, size: 1 },\r\n // { x: 25.9459459459459, y: 3.49019607843137, size: 1 },\r\n // { x: 26.5945945945946, y: 3.29411764705882, size: 1 },\r\n // { x: 33.0810810810811, y: 3.88235294117647, size: 1 },\r\n // { x: 33.7297297297297, y: 3.96078431372549, size: 1 },\r\n // { x: 35.027027027027, y: 3.52941176470588, size: 1 },\r\n // { x: 40.2162162162162, y: 3.92156862745098, size: 1 },\r\n // { x: 48, y: 3.68627450980392, size: 1 },\r\n // { x: 49.9459459459459, y: 3.01960784313725, size: 1 },\r\n // { x: 50.5945945945946, y: 2.74509803921569, size: 1 },\r\n // { x: 51.2432432432432, y: 2.90196078431373, size: 1 },\r\n // { x: 51.8918918918919, y: 3.09803921568627, size: 1 },\r\n // { x: 52.5405405405405, y: 3.37254901960784, size: 1 },\r\n // { x: 57.0810810810811, y: 3.45098039215686, size: 1 },\r\n // { x: 59.027027027027, y: 3.52941176470588, size: 1 },\r\n // { x: 61.6216216216216, y: 3.68627450980392, size: 1 },\r\n // { x: 62.9189189189189, y: 3.76470588235294, size: 1 },\r\n // { x: 72, y: 3.25490196078431, size: 1 },\r\n // { x: 83.6756756756757, y: 3.72549019607843, size: 1 },\r\n // { x: 84.3243243243243, y: 3.96078431372549, size: 1 },\r\n // { x: 87.5675675675676, y: 3.88235294117647, size: 1 },\r\n // { x: 91.4594594594595, y: 3.33333333333333, size: 1 },\r\n // { x: 92.7567567567568, y: 3.29411764705882, size: 1 },\r\n // { x: 93.4054054054054, y: 2.98039215686275, size: 1 },\r\n // { x: 101.837837837838, y: 3.56862745098039, size: 1 },\r\n // { x: 103.783783783784, y: 3.64705882352941, size: 1 },\r\n // { x: 108.324324324324, y: 3.37254901960784, size: 1 },\r\n // { x: 110.918918918919, y: 3.37254901960784, size: 1 },\r\n // { x: 120, y: 3.72549019607843, size: 1 },\r\n // { x: 120.648648648649, y: 3.45098039215686, size: 1 },\r\n // { x: 121.297297297297, y: 3.88235294117647, size: 1 },\r\n // { x: 122.594594594595, y: 3.68627450980392, size: 1 },\r\n // { x: 126.486486486486, y: 3.41176470588235, size: 1 },\r\n // { x: 127.135135135135, y: 3.76470588235294, size: 1 },\r\n // { x: 128.432432432432, y: 3.52941176470588, size: 1 },\r\n // { x: 130.378378378378, y: 3.64705882352941, size: 1 },\r\n // { x: 132.972972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 135.567567567568, y: 3.41176470588235, size: 1 },\r\n // { x: 136.216216216216, y: 2.58823529411765, size: 1 },\r\n // { x: 136.864864864865, y: 2.47058823529412, size: 1 },\r\n // { x: 142.054054054054, y: 3.84313725490196, size: 1 },\r\n // { x: 146.594594594595, y: 3.56862745098039, size: 1 },\r\n // { x: 147.891891891892, y: 3.72549019607843, size: 1 },\r\n // { x: 150.486486486486, y: 3.88235294117647, size: 1 },\r\n // { x: 151.135135135135, y: 3.76470588235294, size: 1 },\r\n // { x: 158.918918918919, y: 3.01960784313725, size: 1 },\r\n // { x: 160.216216216216, y: 3.41176470588235, size: 1 },\r\n // { x: 160.864864864865, y: 3.2156862745098, size: 1 },\r\n // { x: 163.459459459459, y: 3.56862745098039, size: 1 },\r\n // { x: 164.108108108108, y: 3.41176470588235, size: 1 },\r\n // { x: 164.756756756757, y: 3.41176470588235, size: 1 },\r\n // { x: 165.405405405405, y: 3.33333333333333, size: 1 },\r\n // { x: 169.297297297297, y: 3.41176470588235, size: 1 },\r\n // { x: 169.945945945946, y: 3.45098039215686, size: 1 },\r\n // { x: 170.594594594595, y: 3.29411764705882, size: 1 },\r\n // { x: 171.243243243243, y: 3.37254901960784, size: 1 },\r\n // { x: 171.891891891892, y: 3.29411764705882, size: 1 },\r\n // { x: 174.486486486486, y: 3.92156862745098, size: 1 },\r\n // { x: 176.432432432432, y: 3.25490196078431, size: 1 },\r\n // { x: 179.027027027027, y: 3.2156862745098, size: 1 },\r\n // { x: 179.675675675676, y: 2.90196078431373, size: 1 },\r\n // { x: 180.324324324324, y: 3.29411764705882, size: 1 },\r\n // { x: 182.27027027027, y: 3.37254901960784, size: 1 },\r\n // { x: 185.513513513514, y: 3.33333333333333, size: 1 },\r\n // { x: 186.162162162162, y: 3.45098039215686, size: 1 },\r\n // { x: 186.810810810811, y: 3.25490196078431, size: 1 },\r\n // { x: 188.108108108108, y: 3.29411764705882, size: 1 },\r\n // { x: 188.756756756757, y: 3.33333333333333, size: 1 },\r\n // { x: 190.702702702703, y: 3.41176470588235, size: 1 },\r\n // { x: 191.351351351351, y: 3.52941176470588, size: 1 },\r\n // { x: 193.297297297297, y: 3.33333333333333, size: 1 },\r\n // { x: 193.945945945946, y: 3.37254901960784, size: 1 },\r\n // { x: 195.891891891892, y: 3.33333333333333, size: 1 },\r\n // { x: 197.189189189189, y: 3.49019607843137, size: 1 },\r\n // { x: 197.837837837838, y: 3.33333333333333, size: 1 },\r\n // { x: 199.135135135135, y: 3.33333333333333, size: 1 },\r\n // { x: 199.783783783784, y: 3.13725490196078, size: 1 },\r\n // { x: 201.081081081081, y: 2.98039215686275, size: 1 },\r\n // { x: 201.72972972973, y: 2.82352941176471, size: 1 },\r\n // { x: 203.027027027027, y: 3.2156862745098, size: 1 },\r\n // { x: 203.675675675676, y: 3.2156862745098, size: 1 },\r\n // { x: 204.972972972973, y: 3.33333333333333, size: 1 },\r\n // { x: 206.27027027027, y: 3.41176470588235, size: 1 },\r\n // { x: 207.567567567568, y: 3.17647058823529, size: 1 },\r\n // { x: 208.216216216216, y: 3.17647058823529, size: 1 },\r\n // { x: 208.864864864865, y: 3.25490196078431, size: 1 },\r\n // { x: 209.513513513514, y: 3.29411764705882, size: 1 },\r\n // { x: 210.162162162162, y: 3.25490196078431, size: 1 },\r\n // { x: 212.108108108108, y: 3.2156862745098, size: 1 },\r\n // { x: 212.756756756757, y: 3.37254901960784, size: 1 },\r\n // { x: 216, y: 3.37254901960784, size: 1 },\r\n // { x: 216.648648648649, y: 3.45098039215686, size: 1 },\r\n // { x: 217.297297297297, y: 3.37254901960784, size: 1 },\r\n // { x: 219.243243243243, y: 3.09803921568627, size: 1 },\r\n // { x: 219.891891891892, y: 3.17647058823529, size: 1 },\r\n // { x: 220.540540540541, y: 3.29411764705882, size: 1 },\r\n // { x: 221.837837837838, y: 3.25490196078431, size: 1 },\r\n // { x: 222.486486486486, y: 3.41176470588235, size: 1 },\r\n // { x: 223.135135135135, y: 2.94117647058824, size: 1 },\r\n // { x: 223.783783783784, y: 3.29411764705882, size: 1 },\r\n // { x: 224.432432432432, y: 3.45098039215686, size: 1 },\r\n // { x: 225.081081081081, y: 3.37254901960784, size: 1 },\r\n // { x: 228.324324324324, y: 3.37254901960784, size: 1 },\r\n // { x: 230.27027027027, y: 3.37254901960784, size: 1 },\r\n // { x: 230.918918918919, y: 3.45098039215686, size: 1 },\r\n // { x: 232.216216216216, y: 3.6078431372549, size: 1 },\r\n // { x: 232.864864864865, y: 3.37254901960784, size: 1 },\r\n // { x: 233.513513513514, y: 3.29411764705882, size: 1 },\r\n // { x: 234.810810810811, y: 3.37254901960784, size: 1 },\r\n // { x: 238.702702702703, y: 3.37254901960784, size: 1 },\r\n // { x: 240, y: 3.33333333333333, size: 1 },\r\n // { x: 241.945945945946, y: 3.33333333333333, size: 1 },\r\n // { x: 243.891891891892, y: 3.29411764705882, size: 1 },\r\n // { x: 244.540540540541, y: 2.86274509803922, size: 1 },\r\n // { x: 245.189189189189, y: 3.09803921568627, size: 1 },\r\n // { x: 245.837837837838, y: 3.45098039215686, size: 1 },\r\n // { x: 247.783783783784, y: 3.37254901960784, size: 1 },\r\n // { x: 249.081081081081, y: 3.49019607843137, size: 1 },\r\n // { x: 249.72972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 251.027027027027, y: 3.88235294117647, size: 1 },\r\n // { x: 252.324324324324, y: 3.41176470588235, size: 1 },\r\n // { x: 265.945945945946, y: 2.98039215686275, size: 1 },\r\n // { x: 266.594594594595, y: 3.13725490196078, size: 1 },\r\n // { x: 267.243243243243, y: 3.33333333333333, size: 1 },\r\n // { x: 267.891891891892, y: 3.37254901960784, size: 1 },\r\n // { x: 268.540540540541, y: 3.2156862745098, size: 1 },\r\n // { x: 269.837837837838, y: 3.09803921568627, size: 1 },\r\n // { x: 273.72972972973, y: 3.25490196078431, size: 1 },\r\n // { x: 277.621621621622, y: 3.37254901960784, size: 1 },\r\n // { x: 278.27027027027, y: 3.25490196078431, size: 1 },\r\n // { x: 279.567567567568, y: 3.29411764705882, size: 1 },\r\n // { x: 280.216216216216, y: 3.2156862745098, size: 1 },\r\n // { x: 285.405405405405, y: 3.33333333333333, size: 1 },\r\n // { x: 286.054054054054, y: 3.45098039215686, size: 1 },\r\n // { x: 288, y: 3.33333333333333, size: 1 },\r\n // { x: 291.243243243243, y: 3.41176470588235, size: 1 },\r\n // { x: 291.891891891892, y: 3.25490196078431, size: 1 },\r\n // { x: 294.486486486487, y: 3.33333333333333, size: 1 },\r\n // { x: 295.135135135135, y: 3.52941176470588, size: 1 },\r\n // { x: 295.783783783784, y: 3.29411764705882, size: 1 },\r\n // { x: 296.432432432432, y: 3.88235294117647, size: 1 },\r\n // { x: 298.378378378378, y: 3.41176470588235, size: 1 },\r\n // { x: 299.027027027027, y: 3.56862745098039, size: 1 },\r\n // { x: 299.675675675676, y: 3.41176470588235, size: 1 },\r\n // { x: 301.621621621622, y: 3.25490196078431, size: 1 },\r\n // { x: 302.27027027027, y: 3.2156862745098, size: 1 },\r\n // { x: 302.918918918919, y: 3.49019607843137, size: 1 },\r\n // { x: 303.567567567568, y: 3.52941176470588, size: 1 },\r\n // { x: 304.864864864865, y: 3.41176470588235, size: 1 },\r\n // { x: 308.108108108108, y: 3.37254901960784, size: 1 },\r\n // { x: 308.756756756757, y: 3.29411764705882, size: 1 },\r\n // { x: 309.405405405405, y: 2.90196078431373, size: 1 },\r\n // { x: 310.054054054054, y: 2.98039215686275, size: 1 },\r\n // { x: 310.702702702703, y: 3.6078431372549, size: 1 },\r\n // { x: 315.891891891892, y: 3.29411764705882, size: 1 },\r\n // { x: 317.189189189189, y: 3.80392156862745, size: 1 },\r\n // { x: 318.486486486487, y: 3.41176470588235, size: 1 },\r\n // { x: 323.027027027027, y: 3.29411764705882, size: 1 },\r\n // { x: 324.324324324324, y: 3.33333333333333, size: 1 },\r\n // { x: 326.918918918919, y: 3.33333333333333, size: 1 },\r\n // { x: 327.567567567568, y: 3.52941176470588, size: 1 },\r\n // { x: 328.864864864865, y: 3.33333333333333, size: 1 },\r\n // { x: 330.810810810811, y: 3.17647058823529, size: 1 },\r\n // { x: 331.459459459459, y: 3.33333333333333, size: 1 },\r\n // { x: 334.054054054054, y: 3.52941176470588, size: 1 },\r\n // { x: 338.594594594595, y: 3.41176470588235, size: 1 },\r\n // { x: 343.783783783784, y: 3.80392156862745, size: 1 },\r\n // { x: 345.72972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 346.378378378378, y: 3.76470588235294, size: 1 },\r\n // { x: 352.216216216216, y: 3.45098039215686, size: 1 },\r\n // { x: 352.864864864865, y: 3.33333333333333, size: 1 },\r\n // { x: 50.5035971223022, y: 3.41176470588235, size: 1 },\r\n // { x: 57.6258992805755, y: 3.33333333333333, size: 1 },\r\n // { x: 84.8201438848921, y: 3.29411764705882, size: 1 },\r\n // { x: 90, y: 3.84313725490196, size: 1 },\r\n // { x: 95.8273381294964, y: 3.41176470588235, size: 1 },\r\n // { x: 100.359712230216, y: 3.13725490196078, size: 1 },\r\n // { x: 101.007194244604, y: 3.17647058823529, size: 1 },\r\n // { x: 102.302158273381, y: 3.2156862745098, size: 1 },\r\n // { x: 116.546762589928, y: 3.29411764705882, size: 1 },\r\n // { x: 122.374100719424, y: 2.74509803921569, size: 1 },\r\n // { x: 123.021582733813, y: 3.13725490196078, size: 1 },\r\n // { x: 128.201438848921, y: 3.29411764705882, size: 1 },\r\n // { x: 131.438848920863, y: 3.33333333333333, size: 1 },\r\n // { x: 141.798561151079, y: 3.33333333333333, size: 1 },\r\n // { x: 143.741007194245, y: 2.82352941176471, size: 1 },\r\n // { x: 144.388489208633, y: 2.98039215686275, size: 1 },\r\n // { x: 199.424460431655, y: 3.92156862745098, size: 1 },\r\n // { x: 203.309352517986, y: 3.33333333333333, size: 1 },\r\n // { x: 207.841726618705, y: 3.25490196078431, size: 1 },\r\n // { x: 214.31654676259, y: 3.29411764705882, size: 1 },\r\n // { x: 214.964028776978, y: 3.17647058823529, size: 1 },\r\n // { x: 219.496402877698, y: 3.29411764705882, size: 1 },\r\n // { x: 222.086330935252, y: 3.25490196078431, size: 1 },\r\n // { x: 235.035971223022, y: 3.88235294117647, size: 1 },\r\n // { x: 237.625899280576, y: 3.84313725490196, size: 1 },\r\n // { x: 249.280575539568, y: 3.92156862745098, size: 1 },\r\n // { x: 252.517985611511, y: 3.05882352941176, size: 1 },\r\n // { x: 253.165467625899, y: 3.41176470588235, size: 1 },\r\n // { x: 254.460431654676, y: 3.25490196078431, size: 1 },\r\n // { x: 256.402877697842, y: 3.41176470588235, size: 1 },\r\n // { x: 257.697841726619, y: 3.25490196078431, size: 1 },\r\n // { x: 264.820143884892, y: 3.29411764705882, size: 1 },\r\n // { x: 266.115107913669, y: 3.37254901960784, size: 1 },\r\n // { x: 268.705035971223, y: 3.17647058823529, size: 1 },\r\n // { x: 275.179856115108, y: 3.2156862745098, size: 1 },\r\n // { x: 281.007194244604, y: 3.2156862745098, size: 1 },\r\n // { x: 287.482014388489, y: 3.25490196078431, size: 1 },\r\n // { x: 297.841726618705, y: 3.33333333333333, size: 1 },\r\n // { x: 301.079136690647, y: 3.2156862745098, size: 1 },\r\n // { x: 312.086330935252, y: 3.33333333333333, size: 1 },\r\n // { x: 314.028776978417, y: 3.2156862745098, size: 1 },\r\n // { x: 314.676258992806, y: 3.33333333333333, size: 1 },\r\n // { x: 328.273381294964, y: 3.92156862745098, size: 1 },\r\n // { x: 336.690647482014, y: 3.37254901960784, size: 1 },\r\n // { x: 337.985611510791, y: 2.3921568627451, size: 1 },\r\n // { x: 338.63309352518, y: 2.31372549019608, size: 1 },\r\n // { x: 359.352517985611, y: 2.74509803921569, size: 1 },\r\n // { x: 0, y: 2.86274509803922, size: 1 },\r\n // { x: 6.47482014388489, y: 3.37254901960784, size: 1 },\r\n // { x: 14.2446043165468, y: 3.33333333333333, size: 1 },\r\n // { x: 25.2517985611511, y: 3.96078431372549, size: 1 },\r\n // { x: 26.5467625899281, y: 3.88235294117647, size: 1 },\r\n // { x: 31.0791366906475, y: 3.76470588235294, size: 1 },\r\n // { x: 34.9640287769784, y: 3.96078431372549, size: 1 },\r\n // { x: 38.8489208633094, y: 3.80392156862745, size: 1 },\r\n // { x: 55.0359712230216, y: 3.88235294117647, size: 1 },\r\n // { x: 64.7482014388489, y: 3.33333333333333, size: 1 },\r\n // { x: 67.9856115107914, y: 3.29411764705882, size: 1 },\r\n // { x: 78.9928057553957, y: 3.45098039215686, size: 1 },\r\n // { x: 86.1151079136691, y: 2.7843137254902, size: 1 },\r\n // { x: 106.834532374101, y: 3.25490196078431, size: 1 },\r\n // { x: 107.482014388489, y: 2.98039215686275, size: 1 },\r\n // { x: 108.129496402878, y: 3.13725490196078, size: 1 },\r\n // { x: 128.848920863309, y: 3.09803921568627, size: 1 },\r\n // { x: 149.568345323741, y: 3.01960784313725, size: 1 },\r\n // { x: 150.215827338129, y: 2.86274509803922, size: 1 },\r\n // { x: 150.863309352518, y: 0.784313725490196, size: 1 },\r\n // { x: 151.510791366906, y: 0.627450980392157, size: 1 },\r\n // { x: 152.158273381295, y: 0.784313725490196, size: 1 },\r\n // { x: 152.805755395683, y: 0.784313725490196, size: 1 },\r\n // { x: 154.748201438849, y: 3.37254901960784, size: 1 },\r\n // { x: 155.395683453237, y: 2.82352941176471, size: 1 },\r\n // { x: 159.928057553957, y: 3.05882352941176, size: 1 },\r\n // { x: 160.575539568345, y: 3.05882352941176, size: 1 },\r\n // { x: 166.402877697842, y: 2.90196078431373, size: 1 },\r\n // { x: 167.05035971223, y: 3.2156862745098, size: 1 },\r\n // { x: 168.992805755396, y: 3.29411764705882, size: 1 },\r\n // { x: 172.230215827338, y: 3.33333333333333, size: 1 },\r\n // { x: 180, y: 3.96078431372549, size: 1 },\r\n // { x: 182.589928057554, y: 3.92156862745098, size: 1 },\r\n // { x: 194.244604316547, y: 3.01960784313725, size: 1 },\r\n // { x: 200.719424460432, y: 3.41176470588235, size: 1 },\r\n // { x: 214.31654676259, y: 3.25490196078431, size: 1 },\r\n // { x: 236.978417266187, y: 2.94117647058824, size: 1 },\r\n // { x: 237.625899280576, y: 2.7843137254902, size: 1 },\r\n // { x: 258.345323741007, y: 2.58823529411765, size: 1 },\r\n // { x: 258.992805755396, y: 2.74509803921569, size: 1 },\r\n // { x: 260.935251798561, y: 3.29411764705882, size: 1 },\r\n // { x: 268.057553956835, y: 4.03921568627451, size: 1 },\r\n // { x: 278.41726618705, y: 3.17647058823529, size: 1 },\r\n // { x: 279.064748201439, y: 3.41176470588235, size: 1 },\r\n // { x: 279.712230215827, y: 2.94117647058824, size: 1 },\r\n // { x: 280.359712230216, y: 2.35294117647059, size: 1 },\r\n // { x: 284.244604316547, y: 4, size: 1 },\r\n // { x: 290.719424460432, y: 3.88235294117647, size: 1 },\r\n // { x: 300.431654676259, y: 3.05882352941176, size: 1 },\r\n // { x: 301.079136690647, y: 2.90196078431373, size: 1 },\r\n // { x: 301.726618705036, y: 2.11764705882353, size: 1 },\r\n // { x: 302.374100719424, y: 2.23529411764706, size: 1 },\r\n // { x: 321.798561151079, y: 3.13725490196078, size: 1 },\r\n // { x: 323.093525179856, y: 2.07843137254902, size: 1 },\r\n // { x: 323.741007194245, y: 2.23529411764706, size: 1 },\r\n // { x: 338.63309352518, y: 4.03921568627451, size: 1 },\r\n // { x: 352.877697841727, y: 3.37254901960784, size: 1 },\r\n // { x: 4.53237410071942, y: 3.29411764705882, size: 1 },\r\n // { x: 5.8273381294964, y: 2.94117647058824, size: 1 },\r\n // { x: 6.47482014388489, y: 2.43137254901961, size: 1 },\r\n // { x: 7.12230215827338, y: 2.31372549019608, size: 1 },\r\n // { x: 21.3669064748201, y: 4, size: 1 },\r\n // { x: 27.841726618705, y: 2.70588235294118, size: 1 },\r\n // { x: 28.4892086330935, y: 2.62745098039216, size: 1 },\r\n // { x: 37.5539568345324, y: 3.92156862745098, size: 1 },\r\n // { x: 40.7913669064748, y: 3.88235294117647, size: 1 },\r\n // { x: 44.6762589928058, y: 3.84313725490196, size: 1 },\r\n // { x: 47.9136690647482, y: 3.25490196078431, size: 1 },\r\n // { x: 48.5611510791367, y: 3.17647058823529, size: 1 },\r\n // { x: 49.8561151079137, y: 2.66666666666667, size: 1 },\r\n // { x: 50.5035971223022, y: 2.98039215686275, size: 1 },\r\n // { x: 72.5179856115108, y: 4.07843137254902, size: 1 },\r\n // { x: 90, y: 3.88235294117647, size: 1 },\r\n // { x: 102.302158273381, y: 3.88235294117647, size: 1 },\r\n // { x: 119.784172661871, y: 3.92156862745098, size: 1 },\r\n // { x: 157.985611510791, y: 3.37254901960784, size: 1 },\r\n // { x: 169.640287769784, y: 3.92156862745098, size: 1 },\r\n // { x: 176.115107913669, y: 3.92156862745098, size: 1 },\r\n // { x: 179.352517985612, y: 2.70588235294118, size: 1 },\r\n // { x: 180, y: 2.7843137254902, size: 1 },\r\n // { x: 181.294964028777, y: 2.82352941176471, size: 1 },\r\n // { x: 187.122302158273, y: 3.96078431372549, size: 1 },\r\n // { x: 200.719424460432, y: 3.17647058823529, size: 1 },\r\n // { x: 201.36690647482, y: 3.01960784313725, size: 1 },\r\n // { x: 202.014388489209, y: 2.90196078431373, size: 1 },\r\n // { x: 202.661870503597, y: 2.82352941176471, size: 1 },\r\n // { x: 207.841726618705, y: 3.88235294117647, size: 1 },\r\n // { x: 222.086330935252, y: 3.29411764705882, size: 1 },\r\n // { x: 222.73381294964, y: 3.13725490196078, size: 1 },\r\n // { x: 223.381294964029, y: 3.29411764705882, size: 1 },\r\n // { x: 240.215827338129, y: 4.07843137254902, size: 1 },\r\n // { x: 242.158273381295, y: 3.25490196078431, size: 1 },\r\n // { x: 242.805755395683, y: 3.17647058823529, size: 1 },\r\n // { x: 244.10071942446, y: 3.05882352941176, size: 1 },\r\n // { x: 286.834532374101, y: 3.13725490196078, size: 1 },\r\n // { x: 287.482014388489, y: 2.82352941176471, size: 1 },\r\n // { x: 298.489208633094, y: 3.96078431372549, size: 1 },\r\n // { x: 301.726618705036, y: 3.92156862745098, size: 1 },\r\n // { x: 307.553956834532, y: 3.01960784313725, size: 1 },\r\n // { x: 308.201438848921, y: 3.01960784313725, size: 1 },\r\n // { x: 308.848920863309, y: 2.23529411764706, size: 1 },\r\n // { x: 310.791366906475, y: 3.96078431372549, size: 1 },\r\n // { x: 329.568345323741, y: 3.84313725490196, size: 1 },\r\n // { x: 343.812949640288, y: 3.41176470588235, size: 1 },\r\n // { x: 352.230215827338, y: 3.29411764705882, size: 1 },\r\n // { x: 356.762589928058, y: 3.96078431372549, size: 1 },\r\n // { x: 2.59459459459459, y: 4.11764705882353, size: 1 },\r\n // { x: 4.54054054054054, y: 3.92156862745098, size: 1 },\r\n // { x: 5.83783783783784, y: 3.76470588235294, size: 1 },\r\n // { x: 8.43243243243243, y: 3.6078431372549, size: 1 },\r\n // { x: 11.6756756756757, y: 3.49019607843137, size: 1 },\r\n // { x: 12.972972972973, y: 3.33333333333333, size: 1 },\r\n // { x: 14.9189189189189, y: 3.72549019607843, size: 1 },\r\n // { x: 17.5135135135135, y: 3.68627450980392, size: 1 },\r\n // { x: 18.1621621621622, y: 4, size: 1 },\r\n // { x: 24, y: 3.72549019607843, size: 1 },\r\n // { x: 27.2432432432432, y: 3.80392156862745, size: 1 },\r\n // { x: 29.1891891891892, y: 3.76470588235294, size: 1 },\r\n // { x: 34.3783783783784, y: 3.29411764705882, size: 1 },\r\n // { x: 35.6756756756757, y: 3.2156862745098, size: 1 },\r\n // { x: 37.6216216216216, y: 3.72549019607843, size: 1 },\r\n // { x: 38.9189189189189, y: 3.72549019607843, size: 1 },\r\n // { x: 45.4054054054054, y: 3.88235294117647, size: 1 },\r\n // { x: 49.2972972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 51.8918918918919, y: 3.76470588235294, size: 1 },\r\n // { x: 53.1891891891892, y: 3.84313725490196, size: 1 },\r\n // { x: 53.8378378378378, y: 3.72549019607843, size: 1 },\r\n // { x: 56.4324324324324, y: 3.17647058823529, size: 1 },\r\n // { x: 57.0810810810811, y: 3.33333333333333, size: 1 },\r\n // { x: 57.7297297297297, y: 3.92156862745098, size: 1 },\r\n // { x: 58.3783783783784, y: 3.76470588235294, size: 1 },\r\n // { x: 59.027027027027, y: 3.92156862745098, size: 1 },\r\n // { x: 62.9189189189189, y: 3.80392156862745, size: 1 },\r\n // { x: 64.2162162162162, y: 3.92156862745098, size: 1 },\r\n // { x: 64.8648648648649, y: 3.96078431372549, size: 1 },\r\n // { x: 65.5135135135135, y: 3.84313725490196, size: 1 },\r\n // { x: 66.8108108108108, y: 3.68627450980392, size: 1 },\r\n // { x: 68.1081081081081, y: 3.76470588235294, size: 1 },\r\n // { x: 70.054054054054, y: 3.96078431372549, size: 1 },\r\n // { x: 70.7027027027027, y: 4, size: 1 },\r\n // { x: 71.3513513513514, y: 3.88235294117647, size: 1 },\r\n // { x: 72.6486486486486, y: 3.72549019607843, size: 1 },\r\n // { x: 73.945945945946, y: 3.80392156862745, size: 1 },\r\n // { x: 74.5945945945946, y: 4.03921568627451, size: 1 },\r\n // { x: 75.2432432432432, y: 3.92156862745098, size: 1 },\r\n // { x: 77.8378378378378, y: 3.25490196078431, size: 1 },\r\n // { x: 85.6216216216216, y: 3.84313725490196, size: 1 },\r\n // { x: 91.4594594594595, y: 3.76470588235294, size: 1 },\r\n // { x: 94.054054054054, y: 3.84313725490196, size: 1 },\r\n // { x: 99.8918918918919, y: 3.05882352941176, size: 1 },\r\n // { x: 100.540540540541, y: 2.94117647058824, size: 1 },\r\n // { x: 101.189189189189, y: 2.94117647058824, size: 1 },\r\n // { x: 101.837837837838, y: 2.86274509803922, size: 1 },\r\n // { x: 109.621621621622, y: 3.49019607843137, size: 1 },\r\n // { x: 110.27027027027, y: 3.64705882352941, size: 1 },\r\n // { x: 112.864864864865, y: 3.49019607843137, size: 1 },\r\n // { x: 116.108108108108, y: 3.49019607843137, size: 1 },\r\n // { x: 121.297297297297, y: 3.25490196078431, size: 1 },\r\n // { x: 121.945945945946, y: 3.33333333333333, size: 1 },\r\n // { x: 123.243243243243, y: 3.80392156862745, size: 1 },\r\n // { x: 124.540540540541, y: 3.72549019607843, size: 1 },\r\n // { x: 126.486486486486, y: 3.49019607843137, size: 1 },\r\n // { x: 136.864864864865, y: 3.68627450980392, size: 1 },\r\n // { x: 144.648648648649, y: 3.76470588235294, size: 1 },\r\n // { x: 151.783783783784, y: 3.76470588235294, size: 1 },\r\n // { x: 164.108108108108, y: 3.49019607843137, size: 1 },\r\n // { x: 164.756756756757, y: 3.05882352941176, size: 1 },\r\n // { x: 165.405405405405, y: 3.2156862745098, size: 1 },\r\n // { x: 171.891891891892, y: 3.52941176470588, size: 1 },\r\n // { x: 177.081081081081, y: 3.84313725490196, size: 1 },\r\n // { x: 178.378378378378, y: 3.84313725490196, size: 1 },\r\n // { x: 183.567567567568, y: 3.84313725490196, size: 1 },\r\n // { x: 186.810810810811, y: 2.90196078431373, size: 1 },\r\n // { x: 192, y: 3.41176470588235, size: 1 },\r\n // { x: 195.243243243243, y: 3.41176470588235, size: 1 },\r\n // { x: 199.783783783784, y: 3.52941176470588, size: 1 },\r\n // { x: 201.72972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 207.567567567568, y: 3.29411764705882, size: 1 },\r\n // { x: 208.216216216216, y: 2.70588235294118, size: 1 },\r\n // { x: 211.459459459459, y: 3.41176470588235, size: 1 },\r\n // { x: 212.108108108108, y: 3.29411764705882, size: 1 },\r\n // { x: 214.054054054054, y: 3.37254901960784, size: 1 },\r\n // { x: 215.351351351351, y: 3.37254901960784, size: 1 },\r\n // { x: 216, y: 3.29411764705882, size: 1 },\r\n // { x: 217.945945945946, y: 3.52941176470588, size: 1 },\r\n // { x: 221.837837837838, y: 3.6078431372549, size: 1 },\r\n // { x: 227.675675675676, y: 3.29411764705882, size: 1 },\r\n // { x: 228.324324324324, y: 3.33333333333333, size: 1 },\r\n // { x: 228.972972972973, y: 3.17647058823529, size: 1 },\r\n // { x: 229.621621621622, y: 2.62745098039216, size: 1 },\r\n // { x: 230.27027027027, y: 2.50980392156863, size: 1 },\r\n // { x: 230.918918918919, y: 3.84313725490196, size: 1 },\r\n // { x: 234.162162162162, y: 3.6078431372549, size: 1 },\r\n // { x: 234.810810810811, y: 3.52941176470588, size: 1 },\r\n // { x: 235.459459459459, y: 3.41176470588235, size: 1 },\r\n // { x: 238.702702702703, y: 3.52941176470588, size: 1 },\r\n // { x: 243.243243243243, y: 3.76470588235294, size: 1 },\r\n // { x: 251.027027027027, y: 3.13725490196078, size: 1 },\r\n // { x: 251.675675675676, y: 3.2156862745098, size: 1 },\r\n // { x: 256.216216216216, y: 3.80392156862745, size: 1 },\r\n // { x: 258.162162162162, y: 3.64705882352941, size: 1 },\r\n // { x: 258.810810810811, y: 3.41176470588235, size: 1 },\r\n // { x: 260.108108108108, y: 4, size: 1 },\r\n // { x: 261.405405405405, y: 4, size: 1 },\r\n // { x: 268.540540540541, y: 3.72549019607843, size: 1 },\r\n // { x: 269.837837837838, y: 3.49019607843137, size: 1 },\r\n // { x: 271.135135135135, y: 3.37254901960784, size: 1 },\r\n // { x: 273.081081081081, y: 2.98039215686275, size: 1 },\r\n // { x: 273.72972972973, y: 3.33333333333333, size: 1 },\r\n // { x: 276.324324324324, y: 3.76470588235294, size: 1 },\r\n // { x: 280.216216216216, y: 3.6078431372549, size: 1 },\r\n // { x: 287.351351351351, y: 3.72549019607843, size: 1 },\r\n // { x: 289.297297297297, y: 3.56862745098039, size: 1 },\r\n // { x: 294.486486486487, y: 2.94117647058824, size: 1 },\r\n // { x: 295.783783783784, y: 3.52941176470588, size: 1 },\r\n // { x: 297.081081081081, y: 3.37254901960784, size: 1 },\r\n // { x: 299.027027027027, y: 3.72549019607843, size: 1 },\r\n // { x: 299.675675675676, y: 3.76470588235294, size: 1 },\r\n // { x: 303.567567567568, y: 3.49019607843137, size: 1 },\r\n // { x: 304.864864864865, y: 3.88235294117647, size: 1 },\r\n // { x: 306.162162162162, y: 3.37254901960784, size: 1 },\r\n // { x: 307.459459459459, y: 3.33333333333333, size: 1 },\r\n // { x: 310.054054054054, y: 3.37254901960784, size: 1 },\r\n // { x: 312, y: 3.29411764705882, size: 1 },\r\n // { x: 312.648648648649, y: 3.41176470588235, size: 1 },\r\n // { x: 313.297297297297, y: 3.49019607843137, size: 1 },\r\n // { x: 314.594594594595, y: 3.29411764705882, size: 1 },\r\n // { x: 315.891891891892, y: 3.05882352941176, size: 1 },\r\n // { x: 316.540540540541, y: 3.33333333333333, size: 1 },\r\n // { x: 320.432432432432, y: 3.29411764705882, size: 1 },\r\n // { x: 321.081081081081, y: 3.52941176470588, size: 1 },\r\n // { x: 323.027027027027, y: 3.25490196078431, size: 1 },\r\n // { x: 325.621621621622, y: 3.84313725490196, size: 1 },\r\n // { x: 326.27027027027, y: 3.17647058823529, size: 1 },\r\n // { x: 328.216216216216, y: 3.41176470588235, size: 1 },\r\n // { x: 328.864864864865, y: 3.2156862745098, size: 1 },\r\n // { x: 329.513513513513, y: 3.52941176470588, size: 1 },\r\n // { x: 330.162162162162, y: 3.25490196078431, size: 1 },\r\n // { x: 330.810810810811, y: 3.29411764705882, size: 1 },\r\n // { x: 332.108108108108, y: 3.64705882352941, size: 1 },\r\n // { x: 332.756756756757, y: 3.33333333333333, size: 1 },\r\n // { x: 333.405405405405, y: 3.52941176470588, size: 1 },\r\n // { x: 335.351351351351, y: 3.41176470588235, size: 1 },\r\n // { x: 342.486486486487, y: 3.45098039215686, size: 1 },\r\n // { x: 343.135135135135, y: 3.37254901960784, size: 1 },\r\n // { x: 344.432432432432, y: 3.45098039215686, size: 1 },\r\n // { x: 345.72972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 352.216216216216, y: 3.49019607843137, size: 1 },\r\n // { x: 357.405405405405, y: 3.29411764705882, size: 1 },\r\n // { x: 358.054054054054, y: 3.17647058823529, size: 1 },\r\n // { x: 358.702702702703, y: 3.29411764705882, size: 1 },\r\n // { x: 359.351351351351, y: 2.82352941176471, size: 1 },\r\n // { x: 0, y: 2.7843137254902, size: 1 },\r\n // { x: 0.647482014388489, y: 3.17647058823529, size: 1 },\r\n // { x: 1.94244604316547, y: 3.41176470588235, size: 1 },\r\n // { x: 3.23741007194245, y: 3.33333333333333, size: 1 },\r\n // { x: 7.12230215827338, y: 3.33333333333333, size: 1 },\r\n // { x: 23.9568345323741, y: 3.92156862745098, size: 1 },\r\n // { x: 64.1007194244604, y: 3.13725490196078, size: 1 },\r\n // { x: 64.7482014388489, y: 3.05882352941176, size: 1 },\r\n // { x: 88.0575539568345, y: 3.33333333333333, size: 1 },\r\n // { x: 96.4748201438849, y: 3.33333333333333, size: 1 },\r\n // { x: 98.4172661870504, y: 3.29411764705882, size: 1 },\r\n // { x: 101.007194244604, y: 3.33333333333333, size: 1 },\r\n // { x: 102.94964028777, y: 3.29411764705882, size: 1 },\r\n // { x: 107.482014388489, y: 3.13725490196078, size: 1 },\r\n // { x: 108.129496402878, y: 3.29411764705882, size: 1 },\r\n // { x: 117.841726618705, y: 3.33333333333333, size: 1 },\r\n // { x: 128.848920863309, y: 2.90196078431373, size: 1 },\r\n // { x: 134.676258992806, y: 3.25490196078431, size: 1 },\r\n // { x: 141.798561151079, y: 3.25490196078431, size: 1 },\r\n // { x: 145.035971223022, y: 3.29411764705882, size: 1 },\r\n // { x: 147.625899280576, y: 3.29411764705882, size: 1 },\r\n // { x: 150.215827338129, y: 3.29411764705882, size: 1 },\r\n // { x: 163.812949640288, y: 3.2156862745098, size: 1 },\r\n // { x: 170.287769784173, y: 3.45098039215686, size: 1 },\r\n // { x: 174.172661870504, y: 3.80392156862745, size: 1 },\r\n // { x: 192.302158273381, y: 3.37254901960784, size: 1 },\r\n // { x: 192.94964028777, y: 3.05882352941176, size: 1 },\r\n // { x: 193.597122302158, y: 3.01960784313725, size: 1 },\r\n // { x: 194.244604316547, y: 2.94117647058824, size: 1 },\r\n // { x: 202.661870503597, y: 3.84313725490196, size: 1 },\r\n // { x: 214.964028776978, y: 2.66666666666667, size: 1 },\r\n // { x: 215.611510791367, y: 2.54901960784314, size: 1 },\r\n // { x: 229.208633093525, y: 3.33333333333333, size: 1 },\r\n // { x: 235.68345323741, y: 3.29411764705882, size: 1 },\r\n // { x: 236.330935251799, y: 3.33333333333333, size: 1 },\r\n // { x: 236.978417266187, y: 2.58823529411765, size: 1 },\r\n // { x: 237.625899280576, y: 3.2156862745098, size: 1 },\r\n // { x: 245.395683453237, y: 3.88235294117647, size: 1 },\r\n // { x: 264.820143884892, y: 3.2156862745098, size: 1 },\r\n // { x: 267.410071942446, y: 3.33333333333333, size: 1 },\r\n // { x: 275.179856115108, y: 3.25490196078431, size: 1 },\r\n // { x: 279.712230215827, y: 3.05882352941176, size: 1 },\r\n // { x: 280.359712230216, y: 3.2156862745098, size: 1 },\r\n // { x: 301.079136690647, y: 3.33333333333333, size: 1 },\r\n // { x: 319.208633093525, y: 3.45098039215686, size: 1 },\r\n // { x: 322.446043165468, y: 3.2156862745098, size: 1 },\r\n // { x: 323.093525179856, y: 2.35294117647059, size: 1 },\r\n // { x: 323.741007194245, y: 2.70588235294118, size: 1 },\r\n // { x: 338.63309352518, y: 3.96078431372549, size: 1 },\r\n // { x: 49.2086330935252, y: 2.86274509803922, size: 1 },\r\n // { x: 69.9280575539568, y: 3.2156862745098, size: 1 },\r\n // { x: 71.2230215827338, y: 2.86274509803922, size: 1 },\r\n // { x: 87.410071942446, y: 3.84313725490196, size: 1 },\r\n // { x: 92.589928057554, y: 3.13725490196078, size: 1 },\r\n // { x: 93.2374100719424, y: 3.05882352941176, size: 1 },\r\n // { x: 129.496402877698, y: 4.03921568627451, size: 1 },\r\n // { x: 134.028776978417, y: 3.37254901960784, size: 1 },\r\n // { x: 134.676258992806, y: 3.29411764705882, size: 1 },\r\n // { x: 135.323741007194, y: 2.90196078431373, size: 1 },\r\n // { x: 135.971223021583, y: 2.94117647058824, size: 1 },\r\n // { x: 136.618705035971, y: 3.17647058823529, size: 1 },\r\n // { x: 148.273381294964, y: 3.25490196078431, size: 1 },\r\n // { x: 155.395683453237, y: 3.09803921568627, size: 1 },\r\n // { x: 157.338129496403, y: 2.90196078431373, size: 1 },\r\n // { x: 158.63309352518, y: 2.86274509803922, size: 1 },\r\n // { x: 159.280575539568, y: 2.54901960784314, size: 1 },\r\n // { x: 178.705035971223, y: 2.94117647058824, size: 1 },\r\n // { x: 179.352517985612, y: 3.09803921568627, size: 1 },\r\n // { x: 200.071942446043, y: 3.33333333333333, size: 1 },\r\n // { x: 200.719424460432, y: 3.2156862745098, size: 1 },\r\n // { x: 222.086330935252, y: 3.17647058823529, size: 1 },\r\n // { x: 222.73381294964, y: 3.29411764705882, size: 1 },\r\n // { x: 225.971223021583, y: 3.25490196078431, size: 1 },\r\n // { x: 228.561151079137, y: 3.25490196078431, size: 1 },\r\n // { x: 231.798561151079, y: 3.25490196078431, size: 1 },\r\n // { x: 233.741007194245, y: 3.29411764705882, size: 1 },\r\n // { x: 235.035971223022, y: 3.33333333333333, size: 1 },\r\n // { x: 236.978417266187, y: 3.33333333333333, size: 1 },\r\n // { x: 264.820143884892, y: 3.01960784313725, size: 1 },\r\n // { x: 276.474820143885, y: 3.80392156862745, size: 1 },\r\n // { x: 286.834532374101, y: 2.98039215686275, size: 1 },\r\n // { x: 288.776978417266, y: 3.17647058823529, size: 1 },\r\n // { x: 294.604316546763, y: 3.41176470588235, size: 1 },\r\n // { x: 299.784172661871, y: 3.2156862745098, size: 1 },\r\n // { x: 300.431654676259, y: 3.25490196078431, size: 1 },\r\n // { x: 301.726618705036, y: 3.2156862745098, size: 1 },\r\n // { x: 305.611510791367, y: 3.25490196078431, size: 1 },\r\n // { x: 307.553956834532, y: 3.41176470588235, size: 1 },\r\n // { x: 308.848920863309, y: 2.94117647058824, size: 1 },\r\n // { x: 321.151079136691, y: 3.76470588235294, size: 1 },\r\n // { x: 329.568345323741, y: 3.17647058823529, size: 1 },\r\n // { x: 330.863309352518, y: 3.09803921568627, size: 1 },\r\n // { x: 11.0071942446043, y: 3.2156862745098, size: 1 },\r\n // { x: 12.3021582733813, y: 3.17647058823529, size: 1 },\r\n // { x: 12.9496402877698, y: 2.7843137254902, size: 1 },\r\n // { x: 13.5971223021583, y: 2.43137254901961, size: 1 },\r\n // { x: 34.3165467625899, y: 3.25490196078431, size: 1 },\r\n // { x: 35.6115107913669, y: 2.82352941176471, size: 1 },\r\n // { x: 40.1438848920863, y: 3.41176470588235, size: 1 },\r\n // { x: 41.4388489208633, y: 3.29411764705882, size: 1 },\r\n // { x: 45.3237410071942, y: 3.33333333333333, size: 1 },\r\n // { x: 47.9136690647482, y: 3.2156862745098, size: 1 },\r\n // { x: 53.0935251798561, y: 3.29411764705882, size: 1 },\r\n // { x: 56.3309352517986, y: 2.90196078431373, size: 1 },\r\n // { x: 56.9784172661871, y: 2.86274509803922, size: 1 },\r\n // { x: 59.568345323741, y: 3.17647058823529, size: 1 },\r\n // { x: 62.158273381295, y: 3.25490196078431, size: 1 },\r\n // { x: 67.3381294964029, y: 3.29411764705882, size: 1 },\r\n // { x: 69.2805755395683, y: 3.33333333333333, size: 1 },\r\n // { x: 71.2230215827338, y: 3.37254901960784, size: 1 },\r\n // { x: 73.1654676258993, y: 3.33333333333333, size: 1 },\r\n // { x: 75.1079136690647, y: 3.25490196078431, size: 1 },\r\n // { x: 77.6978417266187, y: 2.7843137254902, size: 1 },\r\n // { x: 78.3453237410072, y: 2.74509803921569, size: 1 },\r\n // { x: 87.410071942446, y: 4.07843137254902, size: 1 },\r\n // { x: 88.705035971223, y: 3.92156862745098, size: 1 },\r\n // { x: 97.7697841726619, y: 3.2156862745098, size: 1 },\r\n // { x: 104.244604316547, y: 3.29411764705882, size: 1 },\r\n // { x: 106.187050359712, y: 3.29411764705882, size: 1 },\r\n // { x: 112.661870503597, y: 3.17647058823529, size: 1 },\r\n // { x: 113.956834532374, y: 3.2156862745098, size: 1 },\r\n // { x: 115.89928057554, y: 3.2156862745098, size: 1 },\r\n // { x: 116.546762589928, y: 3.41176470588235, size: 1 },\r\n // { x: 121.079136690647, y: 3.2156862745098, size: 1 },\r\n // { x: 137.913669064748, y: 3.84313725490196, size: 1 },\r\n // { x: 142.446043165468, y: 2.70588235294118, size: 1 },\r\n // { x: 143.093525179856, y: 2.70588235294118, size: 1 },\r\n // { x: 163.165467625899, y: 3.37254901960784, size: 1 },\r\n // { x: 163.812949640288, y: 2.86274509803922, size: 1 },\r\n // { x: 164.460431654676, y: 2.03921568627451, size: 1 },\r\n // { x: 175.467625899281, y: 3.88235294117647, size: 1 },\r\n // { x: 194.244604316547, y: 3.96078431372549, size: 1 },\r\n // { x: 200.071942446043, y: 3.92156862745098, size: 1 },\r\n // { x: 213.021582733813, y: 3.80392156862745, size: 1 },\r\n // { x: 215.611510791367, y: 3.56862745098039, size: 1 },\r\n // { x: 222.73381294964, y: 3.84313725490196, size: 1 },\r\n // { x: 241.510791366906, y: 3.96078431372549, size: 1 },\r\n // { x: 245.395683453237, y: 3.96078431372549, size: 1 },\r\n // { x: 250.575539568345, y: 3.33333333333333, size: 1 },\r\n // { x: 268.705035971223, y: 3.41176470588235, size: 1 },\r\n // { x: 300.431654676259, y: 4, size: 1 },\r\n // { x: 314.028776978417, y: 3.13725490196078, size: 1 },\r\n // { x: 328.920863309353, y: 3.41176470588235, size: 1 },\r\n // { x: 335.395683453237, y: 3.33333333333333, size: 1 },\r\n // { x: 336.043165467626, y: 3.37254901960784, size: 1 },\r\n // { x: 1.2972972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 1.94594594594595, y: 3.88235294117647, size: 1 },\r\n // { x: 5.18918918918919, y: 3.80392156862745, size: 1 },\r\n // { x: 11.027027027027, y: 3.96078431372549, size: 1 },\r\n // { x: 16.2162162162162, y: 3.80392156862745, size: 1 },\r\n // { x: 16.8648648648649, y: 3.92156862745098, size: 1 },\r\n // { x: 19.4594594594595, y: 3.76470588235294, size: 1 },\r\n // { x: 26.5945945945946, y: 3.52941176470588, size: 1 },\r\n // { x: 27.8918918918919, y: 4.07843137254902, size: 1 },\r\n // { x: 29.8378378378378, y: 3.92156862745098, size: 1 },\r\n // { x: 36.3243243243243, y: 3.45098039215686, size: 1 },\r\n // { x: 40.8648648648649, y: 3.64705882352941, size: 1 },\r\n // { x: 42.1621621621622, y: 3.68627450980392, size: 1 },\r\n // { x: 50.5945945945946, y: 3.76470588235294, size: 1 },\r\n // { x: 57.7297297297297, y: 3.76470588235294, size: 1 },\r\n // { x: 59.6756756756757, y: 3.68627450980392, size: 1 },\r\n // { x: 61.6216216216216, y: 3.33333333333333, size: 1 },\r\n // { x: 63.5675675675676, y: 3.2156862745098, size: 1 },\r\n // { x: 64.2162162162162, y: 3.09803921568627, size: 1 },\r\n // { x: 65.5135135135135, y: 3.2156862745098, size: 1 },\r\n // { x: 66.1621621621622, y: 3.33333333333333, size: 1 },\r\n // { x: 66.8108108108108, y: 3.56862745098039, size: 1 },\r\n // { x: 70.054054054054, y: 3.68627450980392, size: 1 },\r\n // { x: 70.7027027027027, y: 3.72549019607843, size: 1 },\r\n // { x: 73.2972972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 83.6756756756757, y: 3.13725490196078, size: 1 },\r\n // { x: 84.3243243243243, y: 3.09803921568627, size: 1 },\r\n // { x: 84.972972972973, y: 2.98039215686275, size: 1 },\r\n // { x: 85.6216216216216, y: 2.90196078431373, size: 1 },\r\n // { x: 86.2702702702703, y: 2.74509803921569, size: 1 },\r\n // { x: 86.9189189189189, y: 3.05882352941176, size: 1 },\r\n // { x: 93.4054054054054, y: 3.56862745098039, size: 1 },\r\n // { x: 96, y: 3.88235294117647, size: 1 },\r\n // { x: 97.945945945946, y: 3.49019607843137, size: 1 },\r\n // { x: 99.8918918918919, y: 3.76470588235294, size: 1 },\r\n // { x: 103.783783783784, y: 3.45098039215686, size: 1 },\r\n // { x: 106.378378378378, y: 2.98039215686275, size: 1 },\r\n // { x: 107.027027027027, y: 3.2156862745098, size: 1 },\r\n // { x: 108.324324324324, y: 3.01960784313725, size: 1 },\r\n // { x: 119.351351351351, y: 3.45098039215686, size: 1 },\r\n // { x: 121.297297297297, y: 3.64705882352941, size: 1 },\r\n // { x: 122.594594594595, y: 3.72549019607843, size: 1 },\r\n // { x: 123.891891891892, y: 3.68627450980392, size: 1 },\r\n // { x: 126.486486486486, y: 3.68627450980392, size: 1 },\r\n // { x: 128.432432432432, y: 3.41176470588235, size: 1 },\r\n // { x: 134.27027027027, y: 3.52941176470588, size: 1 },\r\n // { x: 135.567567567568, y: 3.64705882352941, size: 1 },\r\n // { x: 136.216216216216, y: 3.41176470588235, size: 1 },\r\n // { x: 140.756756756757, y: 3.76470588235294, size: 1 },\r\n // { x: 141.405405405405, y: 3.6078431372549, size: 1 },\r\n // { x: 144, y: 3.45098039215686, size: 1 },\r\n // { x: 145.297297297297, y: 3.72549019607843, size: 1 },\r\n // { x: 146.594594594595, y: 3.88235294117647, size: 1 },\r\n // { x: 150.486486486486, y: 3.09803921568627, size: 1 },\r\n // { x: 151.135135135135, y: 2.98039215686275, size: 1 },\r\n // { x: 151.783783783784, y: 3.05882352941176, size: 1 },\r\n // { x: 152.432432432432, y: 3.37254901960784, size: 1 },\r\n // { x: 155.027027027027, y: 3.80392156862745, size: 1 },\r\n // { x: 158.918918918919, y: 3.80392156862745, size: 1 },\r\n // { x: 161.513513513514, y: 3.49019607843137, size: 1 },\r\n // { x: 166.054054054054, y: 3.72549019607843, size: 1 },\r\n // { x: 169.945945945946, y: 3.2156862745098, size: 1 },\r\n // { x: 171.243243243243, y: 2.43137254901961, size: 1 },\r\n // { x: 171.891891891892, y: 2.82352941176471, size: 1 },\r\n // { x: 172.540540540541, y: 2.43137254901961, size: 1 },\r\n // { x: 173.189189189189, y: 2.82352941176471, size: 1 },\r\n // { x: 174.486486486486, y: 3.72549019607843, size: 1 },\r\n // { x: 175.135135135135, y: 3.68627450980392, size: 1 },\r\n // { x: 177.72972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 180.972972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 181.621621621622, y: 3.88235294117647, size: 1 },\r\n // { x: 184.216216216216, y: 3.45098039215686, size: 1 },\r\n // { x: 184.864864864865, y: 3.84313725490196, size: 1 },\r\n // { x: 189.405405405405, y: 3.49019607843137, size: 1 },\r\n // { x: 192.648648648649, y: 3.25490196078431, size: 1 },\r\n // { x: 193.297297297297, y: 3.49019607843137, size: 1 },\r\n // { x: 194.594594594595, y: 3.96078431372549, size: 1 },\r\n // { x: 196.540540540541, y: 3.76470588235294, size: 1 },\r\n // { x: 204.972972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 214.702702702703, y: 3.37254901960784, size: 1 },\r\n // { x: 215.351351351351, y: 3.25490196078431, size: 1 },\r\n // { x: 220.540540540541, y: 3.52941176470588, size: 1 },\r\n // { x: 222.486486486486, y: 3.76470588235294, size: 1 },\r\n // { x: 226.378378378378, y: 3.41176470588235, size: 1 },\r\n // { x: 227.027027027027, y: 3.49019607843137, size: 1 },\r\n // { x: 236.108108108108, y: 3.25490196078431, size: 1 },\r\n // { x: 236.756756756757, y: 3.2156862745098, size: 1 },\r\n // { x: 237.405405405405, y: 4, size: 1 },\r\n // { x: 241.945945945946, y: 3.88235294117647, size: 1 },\r\n // { x: 247.135135135135, y: 3.84313725490196, size: 1 },\r\n // { x: 248.432432432432, y: 3.37254901960784, size: 1 },\r\n // { x: 249.72972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 252.324324324324, y: 3.56862745098039, size: 1 },\r\n // { x: 259.459459459459, y: 3.68627450980392, size: 1 },\r\n // { x: 260.108108108108, y: 3.56862745098039, size: 1 },\r\n // { x: 261.405405405405, y: 3.52941176470588, size: 1 },\r\n // { x: 267.243243243243, y: 3.72549019607843, size: 1 },\r\n // { x: 268.540540540541, y: 3.33333333333333, size: 1 },\r\n // { x: 272.432432432432, y: 3.33333333333333, size: 1 },\r\n // { x: 276.324324324324, y: 3.68627450980392, size: 1 },\r\n // { x: 278.27027027027, y: 3.41176470588235, size: 1 },\r\n // { x: 278.918918918919, y: 3.56862745098039, size: 1 },\r\n // { x: 280.216216216216, y: 3.25490196078431, size: 1 },\r\n // { x: 288, y: 3.41176470588235, size: 1 },\r\n // { x: 290.594594594595, y: 3.72549019607843, size: 1 },\r\n // { x: 293.837837837838, y: 3.96078431372549, size: 1 },\r\n // { x: 295.135135135135, y: 3.88235294117647, size: 1 },\r\n // { x: 297.081081081081, y: 3.76470588235294, size: 1 },\r\n // { x: 298.378378378378, y: 3.80392156862745, size: 1 },\r\n // { x: 299.675675675676, y: 3.25490196078431, size: 1 },\r\n // { x: 300.324324324324, y: 3.37254901960784, size: 1 },\r\n // { x: 301.621621621622, y: 3.41176470588235, size: 1 },\r\n // { x: 302.27027027027, y: 3.76470588235294, size: 1 },\r\n // { x: 302.918918918919, y: 3.72549019607843, size: 1 },\r\n // { x: 303.567567567568, y: 3.80392156862745, size: 1 },\r\n // { x: 307.459459459459, y: 3.76470588235294, size: 1 },\r\n // { x: 309.405405405405, y: 3.84313725490196, size: 1 },\r\n // { x: 315.243243243243, y: 3.88235294117647, size: 1 },\r\n // { x: 317.837837837838, y: 3.68627450980392, size: 1 },\r\n // { x: 320.432432432432, y: 3.80392156862745, size: 1 },\r\n // { x: 321.081081081081, y: 3.13725490196078, size: 1 },\r\n // { x: 322.378378378378, y: 3.09803921568627, size: 1 },\r\n // { x: 323.027027027027, y: 2.86274509803922, size: 1 },\r\n // { x: 323.675675675676, y: 3.17647058823529, size: 1 },\r\n // { x: 324.324324324324, y: 3.76470588235294, size: 1 },\r\n // { x: 328.864864864865, y: 3.49019607843137, size: 1 },\r\n // { x: 335.351351351351, y: 3.56862745098039, size: 1 },\r\n // { x: 336, y: 3.84313725490196, size: 1 },\r\n // { x: 343.135135135135, y: 3.41176470588235, size: 1 },\r\n // { x: 344.432432432432, y: 3.41176470588235, size: 1 },\r\n // { x: 351.567567567568, y: 3.72549019607843, size: 1 },\r\n // { x: 4.53237410071942, y: 3.2156862745098, size: 1 },\r\n // { x: 5.8273381294964, y: 2.86274509803922, size: 1 },\r\n // { x: 6.47482014388489, y: 2.7843137254902, size: 1 },\r\n // { x: 44.6762589928058, y: 3.76470588235294, size: 1 },\r\n // { x: 51.1510791366906, y: 3.01960784313725, size: 1 },\r\n // { x: 51.7985611510791, y: 3.13725490196078, size: 1 },\r\n // { x: 52.4460431654676, y: 3.2156862745098, size: 1 },\r\n // { x: 56.3309352517986, y: 3.01960784313725, size: 1 },\r\n // { x: 60.2158273381295, y: 3.09803921568627, size: 1 },\r\n // { x: 61.5107913669065, y: 3.2156862745098, size: 1 },\r\n // { x: 62.158273381295, y: 3.17647058823529, size: 1 },\r\n // { x: 62.8057553956835, y: 3.05882352941176, size: 1 },\r\n // { x: 64.1007194244604, y: 3.33333333333333, size: 1 },\r\n // { x: 67.3381294964029, y: 3.09803921568627, size: 1 },\r\n // { x: 70.5755395683453, y: 3.41176470588235, size: 1 },\r\n // { x: 73.8129496402878, y: 3.96078431372549, size: 1 },\r\n // { x: 75.7553956834532, y: 4, size: 1 },\r\n // { x: 76.4028776978417, y: 3.96078431372549, size: 1 },\r\n // { x: 77.0503597122302, y: 4, size: 1 },\r\n // { x: 78.9928057553957, y: 3.92156862745098, size: 1 },\r\n // { x: 82.2302158273381, y: 4.23529411764706, size: 1 },\r\n // { x: 84.1726618705036, y: 3.96078431372549, size: 1 },\r\n // { x: 86.7625899280576, y: 4, size: 1 },\r\n // { x: 87.410071942446, y: 4.11764705882353, size: 1 },\r\n // { x: 90, y: 4.11764705882353, size: 1 },\r\n // { x: 92.589928057554, y: 3.25490196078431, size: 1 },\r\n // { x: 95.8273381294964, y: 4.07843137254902, size: 1 },\r\n // { x: 96.4748201438849, y: 3.96078431372549, size: 1 },\r\n // { x: 101.654676258993, y: 3.92156862745098, size: 1 },\r\n // { x: 110.719424460432, y: 3.88235294117647, size: 1 },\r\n // { x: 111.36690647482, y: 3.96078431372549, size: 1 },\r\n // { x: 112.014388489209, y: 4.11764705882353, size: 1 },\r\n // { x: 113.309352517986, y: 3.05882352941176, size: 1 },\r\n // { x: 113.956834532374, y: 2.86274509803922, size: 1 },\r\n // { x: 114.604316546763, y: 3.2156862745098, size: 1 },\r\n // { x: 115.251798561151, y: 2.94117647058824, size: 1 },\r\n // { x: 118.489208633094, y: 3.88235294117647, size: 1 },\r\n // { x: 120.431654676259, y: 3.96078431372549, size: 1 },\r\n // { x: 121.079136690647, y: 4, size: 1 },\r\n // { x: 121.726618705036, y: 4, size: 1 },\r\n // { x: 122.374100719424, y: 3.92156862745098, size: 1 },\r\n // { x: 123.669064748201, y: 3.80392156862745, size: 1 },\r\n // { x: 125.611510791367, y: 4.03921568627451, size: 1 },\r\n // { x: 127.553956834532, y: 4, size: 1 },\r\n // { x: 128.201438848921, y: 3.92156862745098, size: 1 },\r\n // { x: 131.438848920863, y: 3.80392156862745, size: 1 },\r\n // { x: 132.73381294964, y: 3.92156862745098, size: 1 },\r\n // { x: 136.618705035971, y: 4, size: 1 },\r\n // { x: 138.561151079137, y: 3.92156862745098, size: 1 },\r\n // { x: 139.208633093525, y: 3.92156862745098, size: 1 },\r\n // { x: 142.446043165468, y: 4, size: 1 },\r\n // { x: 146.330935251799, y: 3.88235294117647, size: 1 },\r\n // { x: 154.10071942446, y: 4.15686274509804, size: 1 },\r\n // { x: 156.043165467626, y: 3.25490196078431, size: 1 },\r\n // { x: 156.690647482014, y: 3.37254901960784, size: 1 },\r\n // { x: 157.338129496403, y: 3.29411764705882, size: 1 },\r\n // { x: 166.402877697842, y: 3.92156862745098, size: 1 },\r\n // { x: 172.230215827338, y: 3.88235294117647, size: 1 },\r\n // { x: 176.115107913669, y: 3.41176470588235, size: 1 },\r\n // { x: 191.654676258993, y: 3.17647058823529, size: 1 },\r\n // { x: 192.302158273381, y: 3.2156862745098, size: 1 },\r\n // { x: 199.424460431655, y: 3.2156862745098, size: 1 },\r\n // { x: 200.071942446043, y: 2.66666666666667, size: 1 },\r\n // { x: 200.719424460432, y: 2.94117647058824, size: 1 },\r\n // { x: 202.661870503597, y: 3.2156862745098, size: 1 },\r\n // { x: 207.841726618705, y: 3.13725490196078, size: 1 },\r\n // { x: 211.726618705036, y: 3.25490196078431, size: 1 },\r\n // { x: 218.201438848921, y: 3.29411764705882, size: 1 },\r\n // { x: 223.381294964029, y: 3.09803921568627, size: 1 },\r\n // { x: 226.618705035971, y: 3.2156862745098, size: 1 },\r\n // { x: 227.913669064748, y: 3.13725490196078, size: 1 },\r\n // { x: 229.856115107914, y: 3.05882352941176, size: 1 },\r\n // { x: 233.741007194245, y: 3.17647058823529, size: 1 },\r\n // { x: 234.388489208633, y: 3.01960784313725, size: 1 },\r\n // { x: 238.920863309353, y: 3.13725490196078, size: 1 },\r\n // { x: 240.215827338129, y: 3.29411764705882, size: 1 },\r\n // { x: 244.748201438849, y: 3.2156862745098, size: 1 },\r\n // { x: 246.690647482014, y: 3.09803921568627, size: 1 },\r\n // { x: 247.338129496403, y: 3.05882352941176, size: 1 },\r\n // { x: 251.870503597122, y: 3.2156862745098, size: 1 },\r\n // { x: 254.460431654676, y: 3.2156862745098, size: 1 },\r\n // { x: 255.107913669065, y: 3.29411764705882, size: 1 },\r\n // { x: 255.755395683453, y: 3.17647058823529, size: 1 },\r\n // { x: 256.402877697842, y: 3.13725490196078, size: 1 },\r\n // { x: 257.697841726619, y: 3.2156862745098, size: 1 },\r\n // { x: 258.345323741007, y: 3.29411764705882, size: 1 },\r\n // { x: 260.287769784173, y: 3.2156862745098, size: 1 },\r\n // { x: 261.58273381295, y: 3.29411764705882, size: 1 },\r\n // { x: 262.230215827338, y: 3.2156862745098, size: 1 },\r\n // { x: 277.122302158273, y: 3.2156862745098, size: 1 },\r\n // { x: 279.712230215827, y: 3.25490196078431, size: 1 },\r\n // { x: 281.654676258993, y: 3.2156862745098, size: 1 },\r\n // { x: 286.834532374101, y: 3.09803921568627, size: 1 },\r\n // { x: 287.482014388489, y: 3.05882352941176, size: 1 },\r\n // { x: 288.129496402878, y: 3.17647058823529, size: 1 },\r\n // { x: 288.776978417266, y: 3.25490196078431, size: 1 },\r\n // { x: 289.424460431655, y: 3.13725490196078, size: 1 },\r\n // { x: 290.071942446043, y: 3.25490196078431, size: 1 },\r\n // { x: 292.661870503597, y: 3.13725490196078, size: 1 },\r\n // { x: 293.956834532374, y: 3.13725490196078, size: 1 },\r\n // { x: 294.604316546763, y: 3.25490196078431, size: 1 },\r\n // { x: 295.251798561151, y: 3.2156862745098, size: 1 },\r\n // { x: 296.546762589928, y: 3.33333333333333, size: 1 },\r\n // { x: 297.194244604317, y: 3.29411764705882, size: 1 },\r\n // { x: 297.841726618705, y: 3.2156862745098, size: 1 },\r\n // { x: 299.136690647482, y: 3.17647058823529, size: 1 },\r\n // { x: 299.784172661871, y: 3.01960784313725, size: 1 },\r\n // { x: 303.021582733813, y: 3.29411764705882, size: 1 },\r\n // { x: 303.669064748201, y: 3.13725490196078, size: 1 },\r\n // { x: 304.31654676259, y: 3.25490196078431, size: 1 },\r\n // { x: 304.964028776978, y: 3.25490196078431, size: 1 },\r\n // { x: 308.201438848921, y: 3.41176470588235, size: 1 },\r\n // { x: 312.086330935252, y: 3.29411764705882, size: 1 },\r\n // { x: 325.68345323741, y: 3.17647058823529, size: 1 },\r\n // { x: 326.330935251799, y: 3.01960784313725, size: 1 },\r\n // { x: 331.510791366906, y: 3.33333333333333, size: 1 },\r\n // { x: 335.395683453237, y: 3.2156862745098, size: 1 },\r\n // { x: 337.338129496403, y: 3.25490196078431, size: 1 },\r\n // { x: 337.985611510791, y: 3.33333333333333, size: 1 },\r\n // { x: 343.165467625899, y: 3.17647058823529, size: 1 },\r\n // { x: 343.812949640288, y: 3.17647058823529, size: 1 },\r\n // { x: 347.05035971223, y: 3.29411764705882, size: 1 },\r\n // { x: 348.992805755396, y: 3.05882352941176, size: 1 },\r\n // { x: 351.58273381295, y: 3.17647058823529, size: 1 },\r\n // { x: 12.9496402877698, y: 2.74509803921569, size: 1 },\r\n // { x: 13.5971223021583, y: 2.86274509803922, size: 1 },\r\n // { x: 19.4244604316547, y: 3.41176470588235, size: 1 },\r\n // { x: 37.5539568345324, y: 3.17647058823529, size: 1 },\r\n // { x: 38.2014388489209, y: 3.29411764705882, size: 1 },\r\n // { x: 47.2661870503597, y: 3.05882352941176, size: 1 },\r\n // { x: 47.9136690647482, y: 3.33333333333333, size: 1 },\r\n // { x: 53.0935251798561, y: 3.01960784313725, size: 1 },\r\n // { x: 55.0359712230216, y: 3.2156862745098, size: 1 },\r\n // { x: 56.3309352517986, y: 2.82352941176471, size: 1 },\r\n // { x: 61.5107913669065, y: 4, size: 1 },\r\n // { x: 81.5827338129496, y: 3.33333333333333, size: 1 },\r\n // { x: 85.4676258992806, y: 3.13725490196078, size: 1 },\r\n // { x: 86.7625899280576, y: 3.33333333333333, size: 1 },\r\n // { x: 90, y: 3.01960784313725, size: 1 },\r\n // { x: 92.589928057554, y: 3.33333333333333, size: 1 },\r\n // { x: 95.1798561151079, y: 3.2156862745098, size: 1 },\r\n // { x: 96.4748201438849, y: 3.17647058823529, size: 1 },\r\n // { x: 121.079136690647, y: 3.05882352941176, size: 1 },\r\n // { x: 143.093525179856, y: 3.25490196078431, size: 1 },\r\n // { x: 143.741007194245, y: 3.05882352941176, size: 1 },\r\n // { x: 144.388489208633, y: 3.01960784313725, size: 1 },\r\n // { x: 145.035971223022, y: 3.01960784313725, size: 1 },\r\n // { x: 146.330935251799, y: 2.94117647058824, size: 1 },\r\n // { x: 146.978417266187, y: 3.2156862745098, size: 1 },\r\n // { x: 149.568345323741, y: 3.13725490196078, size: 1 },\r\n // { x: 150.215827338129, y: 3.2156862745098, size: 1 },\r\n // { x: 153.453237410072, y: 3.13725490196078, size: 1 },\r\n // { x: 159.280575539568, y: 3.01960784313725, size: 1 },\r\n // { x: 160.575539568345, y: 3.01960784313725, size: 1 },\r\n // { x: 163.812949640288, y: 3.25490196078431, size: 1 },\r\n // { x: 177.410071942446, y: 3.88235294117647, size: 1 },\r\n // { x: 181.942446043165, y: 3.92156862745098, size: 1 },\r\n // { x: 186.474820143885, y: 3.29411764705882, size: 1 },\r\n // { x: 187.769784172662, y: 3.29411764705882, size: 1 },\r\n // { x: 196.187050359712, y: 3.29411764705882, size: 1 },\r\n // { x: 209.136690647482, y: 3.45098039215686, size: 1 },\r\n // { x: 253.812949640288, y: 3.17647058823529, size: 1 },\r\n // { x: 273.237410071942, y: 3.01960784313725, size: 1 },\r\n // { x: 274.532374100719, y: 2.94117647058824, size: 1 },\r\n // { x: 277.769784172662, y: 3.25490196078431, size: 1 },\r\n // { x: 279.712230215827, y: 3.29411764705882, size: 1 },\r\n // { x: 280.359712230216, y: 3.13725490196078, size: 1 },\r\n // { x: 281.007194244604, y: 3.25490196078431, size: 1 },\r\n // { x: 282.302158273381, y: 3.01960784313725, size: 1 },\r\n // { x: 283.597122302158, y: 3.17647058823529, size: 1 },\r\n // { x: 285.539568345324, y: 3.09803921568627, size: 1 },\r\n // { x: 286.187050359712, y: 3.13725490196078, size: 1 },\r\n // { x: 288.129496402878, y: 3.37254901960784, size: 1 },\r\n // { x: 288.776978417266, y: 3.13725490196078, size: 1 },\r\n // { x: 289.424460431655, y: 3.17647058823529, size: 1 },\r\n // { x: 290.071942446043, y: 3.2156862745098, size: 1 },\r\n // { x: 290.719424460432, y: 3.13725490196078, size: 1 },\r\n // { x: 294.604316546763, y: 3.33333333333333, size: 1 },\r\n // { x: 296.546762589928, y: 3.01960784313725, size: 1 },\r\n // { x: 305.611510791367, y: 3.2156862745098, size: 1 },\r\n // { x: 306.258992805755, y: 3.13725490196078, size: 1 },\r\n // { x: 308.201438848921, y: 3.09803921568627, size: 1 },\r\n // { x: 310.143884892086, y: 3.05882352941176, size: 1 },\r\n // { x: 311.438848920863, y: 3.25490196078431, size: 1 },\r\n // { x: 323.741007194245, y: 3.96078431372549, size: 1 },\r\n // { x: 324.388489208633, y: 3.84313725490196, size: 1 },\r\n // { x: 358.057553956835, y: 2.94117647058824, size: 1 },\r\n // { x: 359.352517985611, y: 2.7843137254902, size: 1 },\r\n // { x: 0, y: 3.09803921568627, size: 1 },\r\n // { x: 0.647482014388489, y: 3.13725490196078, size: 1 },\r\n // { x: 1.29496402877698, y: 3.33333333333333, size: 1 },\r\n // { x: 4.53237410071942, y: 3.17647058823529, size: 1 },\r\n // { x: 5.17985611510791, y: 3.05882352941176, size: 1 },\r\n // { x: 5.8273381294964, y: 3.13725490196078, size: 1 },\r\n // { x: 6.47482014388489, y: 3.2156862745098, size: 1 },\r\n // { x: 9.71223021582734, y: 3.2156862745098, size: 1 },\r\n // { x: 10.3597122302158, y: 3.25490196078431, size: 1 },\r\n // { x: 12.3021582733813, y: 3.2156862745098, size: 1 },\r\n // { x: 14.8920863309353, y: 3.09803921568627, size: 1 },\r\n // { x: 15.5395683453237, y: 3.17647058823529, size: 1 },\r\n // { x: 16.8345323741007, y: 3.17647058823529, size: 1 },\r\n // { x: 44.6762589928058, y: 3.17647058823529, size: 1 },\r\n // { x: 51.1510791366906, y: 3.84313725490196, size: 1 },\r\n // { x: 54.3884892086331, y: 3.13725490196078, size: 1 },\r\n // { x: 55.0359712230216, y: 3.25490196078431, size: 1 },\r\n // { x: 59.568345323741, y: 3.29411764705882, size: 1 },\r\n // { x: 62.8057553956835, y: 2.98039215686275, size: 1 },\r\n // { x: 63.4532374100719, y: 2.82352941176471, size: 1 },\r\n // { x: 71.2230215827338, y: 3.17647058823529, size: 1 },\r\n // { x: 76.4028776978417, y: 3.13725490196078, size: 1 },\r\n // { x: 80.2877697841727, y: 3.17647058823529, size: 1 },\r\n // { x: 82.2302158273381, y: 3.13725490196078, size: 1 },\r\n // { x: 84.1726618705036, y: 3.2156862745098, size: 1 },\r\n // { x: 84.8201438848921, y: 3.2156862745098, size: 1 },\r\n // { x: 106.834532374101, y: 3.13725490196078, size: 1 },\r\n // { x: 107.482014388489, y: 3.09803921568627, size: 1 },\r\n // { x: 108.129496402878, y: 3.25490196078431, size: 1 },\r\n // { x: 108.776978417266, y: 3.09803921568627, size: 1 },\r\n // { x: 109.424460431655, y: 3.09803921568627, size: 1 },\r\n // { x: 113.309352517986, y: 3.29411764705882, size: 1 },\r\n // { x: 124.964028776978, y: 3.13725490196078, size: 1 },\r\n // { x: 127.553956834532, y: 3.2156862745098, size: 1 },\r\n // { x: 129.496402877698, y: 3.25490196078431, size: 1 },\r\n // { x: 130.791366906475, y: 3.2156862745098, size: 1 },\r\n // { x: 134.676258992806, y: 3.2156862745098, size: 1 },\r\n // { x: 167.05035971223, y: 3.41176470588235, size: 1 },\r\n // { x: 171.58273381295, y: 3.92156862745098, size: 1 },\r\n // { x: 193.597122302158, y: 3.29411764705882, size: 1 },\r\n // { x: 214.31654676259, y: 3.2156862745098, size: 1 },\r\n // { x: 214.964028776978, y: 3.09803921568627, size: 1 },\r\n // { x: 216.906474820144, y: 3.09803921568627, size: 1 },\r\n // { x: 220.791366906475, y: 3.09803921568627, size: 1 },\r\n // { x: 222.086330935252, y: 3.2156862745098, size: 1 },\r\n // { x: 225.971223021583, y: 3.33333333333333, size: 1 },\r\n // { x: 237.625899280576, y: 3.13725490196078, size: 1 },\r\n // { x: 240.863309352518, y: 3.33333333333333, size: 1 },\r\n // { x: 243.453237410072, y: 3.29411764705882, size: 1 },\r\n // { x: 247.338129496403, y: 3.25490196078431, size: 1 },\r\n // { x: 248.63309352518, y: 3.17647058823529, size: 1 },\r\n // { x: 254.460431654676, y: 3.17647058823529, size: 1 },\r\n // { x: 257.05035971223, y: 3.01960784313725, size: 1 },\r\n // { x: 257.697841726619, y: 3.13725490196078, size: 1 },\r\n // { x: 278.41726618705, y: 3.13725490196078, size: 1 },\r\n // { x: 279.064748201439, y: 3.01960784313725, size: 1 },\r\n // { x: 321.798561151079, y: 2.27450980392157, size: 1 },\r\n // { x: 322.446043165468, y: 2.54901960784314, size: 1 },\r\n // { x: 328.920863309353, y: 3.96078431372549, size: 1 },\r\n // { x: 343.812949640288, y: 3.13725490196078, size: 1 },\r\n // { x: 344.460431654676, y: 3.37254901960784, size: 1 },\r\n // { x: 351.58273381295, y: 3.92156862745098, size: 1 },\r\n // { x: 352.230215827338, y: 3.76470588235294, size: 1 },\r\n // { x: 352.877697841727, y: 4.07843137254902, size: 1 },\r\n // { x: 3.89189189189189, y: 3.25490196078431, size: 1 },\r\n // { x: 4.54054054054054, y: 3.05882352941176, size: 1 },\r\n // { x: 5.18918918918919, y: 1.96078431372549, size: 1 },\r\n // { x: 5.83783783783784, y: 2.19607843137255, size: 1 },\r\n // { x: 6.48648648648649, y: 2.15686274509804, size: 1 },\r\n // { x: 7.13513513513514, y: 1.88235294117647, size: 1 },\r\n // { x: 8.43243243243243, y: 3.33333333333333, size: 1 },\r\n // { x: 9.08108108108108, y: 3.29411764705882, size: 1 },\r\n // { x: 9.72972972972973, y: 3.13725490196078, size: 1 },\r\n // { x: 13.6216216216216, y: 3.76470588235294, size: 1 },\r\n // { x: 14.2702702702703, y: 3.01960784313725, size: 1 },\r\n // { x: 14.9189189189189, y: 2.94117647058824, size: 1 },\r\n // { x: 16.2162162162162, y: 3.64705882352941, size: 1 },\r\n // { x: 18.8108108108108, y: 3.56862745098039, size: 1 },\r\n // { x: 20.7567567567568, y: 2.90196078431373, size: 1 },\r\n // { x: 21.4054054054054, y: 3.01960784313725, size: 1 },\r\n // { x: 22.7027027027027, y: 3.25490196078431, size: 1 },\r\n // { x: 23.3513513513514, y: 3.37254901960784, size: 1 },\r\n // { x: 24.6486486486486, y: 3.25490196078431, size: 1 },\r\n // { x: 26.5945945945946, y: 2.98039215686275, size: 1 },\r\n // { x: 27.2432432432432, y: 3.09803921568627, size: 1 },\r\n // { x: 37.6216216216216, y: 3.88235294117647, size: 1 },\r\n // { x: 38.9189189189189, y: 3.80392156862745, size: 1 },\r\n // { x: 44.1081081081081, y: 3.45098039215686, size: 1 },\r\n // { x: 53.8378378378378, y: 3.92156862745098, size: 1 },\r\n // { x: 55.7837837837838, y: 3.56862745098039, size: 1 },\r\n // { x: 67.4594594594595, y: 3.76470588235294, size: 1 },\r\n // { x: 68.7567567567568, y: 3.17647058823529, size: 1 },\r\n // { x: 70.054054054054, y: 2.66666666666667, size: 1 },\r\n // { x: 70.7027027027027, y: 2.74509803921569, size: 1 },\r\n // { x: 73.945945945946, y: 3.52941176470588, size: 1 },\r\n // { x: 74.5945945945946, y: 3.80392156862745, size: 1 },\r\n // { x: 75.2432432432432, y: 3.96078431372549, size: 1 },\r\n // { x: 81.0810810810811, y: 3.76470588235294, size: 1 },\r\n // { x: 81.7297297297297, y: 4, size: 1 },\r\n // { x: 82.3783783783784, y: 3.88235294117647, size: 1 },\r\n // { x: 83.027027027027, y: 3.88235294117647, size: 1 },\r\n // { x: 84.972972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 86.9189189189189, y: 3.64705882352941, size: 1 },\r\n // { x: 90.8108108108108, y: 3.13725490196078, size: 1 },\r\n // { x: 91.4594594594595, y: 2.15686274509804, size: 1 },\r\n // { x: 92.1081081081081, y: 1.92156862745098, size: 1 },\r\n // { x: 93.4054054054054, y: 3.80392156862745, size: 1 },\r\n // { x: 94.7027027027027, y: 3.80392156862745, size: 1 },\r\n // { x: 95.3513513513514, y: 3.84313725490196, size: 1 },\r\n // { x: 97.2972972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 103.135135135135, y: 3.6078431372549, size: 1 },\r\n // { x: 110.918918918919, y: 3.84313725490196, size: 1 },\r\n // { x: 111.567567567568, y: 3.29411764705882, size: 1 },\r\n // { x: 112.864864864865, y: 3.05882352941176, size: 1 },\r\n // { x: 113.513513513514, y: 2.43137254901961, size: 1 },\r\n // { x: 116.108108108108, y: 3.84313725490196, size: 1 },\r\n // { x: 116.756756756757, y: 3.52941176470588, size: 1 },\r\n // { x: 119.351351351351, y: 3.92156862745098, size: 1 },\r\n // { x: 123.243243243243, y: 3.68627450980392, size: 1 },\r\n // { x: 123.891891891892, y: 3.80392156862745, size: 1 },\r\n // { x: 125.189189189189, y: 3.41176470588235, size: 1 },\r\n // { x: 127.135135135135, y: 4.03921568627451, size: 1 },\r\n // { x: 129.72972972973, y: 3.92156862745098, size: 1 },\r\n // { x: 134.918918918919, y: 3.92156862745098, size: 1 },\r\n // { x: 139.459459459459, y: 3.92156862745098, size: 1 },\r\n // { x: 141.405405405405, y: 3.88235294117647, size: 1 },\r\n // { x: 142.054054054054, y: 3.52941176470588, size: 1 },\r\n // { x: 143.351351351351, y: 3.72549019607843, size: 1 },\r\n // { x: 147.891891891892, y: 4, size: 1 },\r\n // { x: 148.540540540541, y: 3.84313725490196, size: 1 },\r\n // { x: 151.783783783784, y: 3.92156862745098, size: 1 },\r\n // { x: 153.081081081081, y: 4, size: 1 },\r\n // { x: 155.027027027027, y: 3.01960784313725, size: 1 },\r\n // { x: 155.675675675676, y: 3.37254901960784, size: 1 },\r\n // { x: 156.324324324324, y: 3.05882352941176, size: 1 },\r\n // { x: 156.972972972973, y: 2.70588235294118, size: 1 },\r\n // { x: 159.567567567568, y: 3.52941176470588, size: 1 },\r\n // { x: 161.513513513514, y: 3.80392156862745, size: 1 },\r\n // { x: 163.459459459459, y: 3.6078431372549, size: 1 },\r\n // { x: 164.108108108108, y: 3.80392156862745, size: 1 },\r\n // { x: 165.405405405405, y: 3.88235294117647, size: 1 },\r\n // { x: 171.891891891892, y: 3.84313725490196, size: 1 },\r\n // { x: 172.540540540541, y: 4.23529411764706, size: 1 },\r\n // { x: 177.72972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 182.27027027027, y: 3.84313725490196, size: 1 },\r\n // { x: 183.567567567568, y: 3.88235294117647, size: 1 },\r\n // { x: 187.459459459459, y: 3.80392156862745, size: 1 },\r\n // { x: 193.945945945946, y: 3.68627450980392, size: 1 },\r\n // { x: 194.594594594595, y: 3.72549019607843, size: 1 },\r\n // { x: 196.540540540541, y: 3.6078431372549, size: 1 },\r\n // { x: 199.783783783784, y: 3.45098039215686, size: 1 },\r\n // { x: 204.972972972973, y: 3.96078431372549, size: 1 },\r\n // { x: 209.513513513514, y: 3.56862745098039, size: 1 },\r\n // { x: 226.378378378378, y: 3.49019607843137, size: 1 },\r\n // { x: 228.324324324324, y: 3.56862745098039, size: 1 },\r\n // { x: 232.864864864865, y: 3.6078431372549, size: 1 },\r\n // { x: 233.513513513514, y: 3.80392156862745, size: 1 },\r\n // { x: 236.756756756757, y: 3.64705882352941, size: 1 },\r\n // { x: 241.297297297297, y: 3.29411764705882, size: 1 },\r\n // { x: 243.243243243243, y: 3.01960784313725, size: 1 },\r\n // { x: 243.891891891892, y: 3.25490196078431, size: 1 },\r\n // { x: 249.081081081081, y: 3.80392156862745, size: 1 },\r\n // { x: 255.567567567568, y: 3.96078431372549, size: 1 },\r\n // { x: 256.216216216216, y: 3.92156862745098, size: 1 },\r\n // { x: 257.513513513513, y: 3.76470588235294, size: 1 },\r\n // { x: 267.243243243243, y: 3.56862745098039, size: 1 },\r\n // { x: 271.783783783784, y: 3.96078431372549, size: 1 },\r\n // { x: 273.081081081081, y: 3.92156862745098, size: 1 },\r\n // { x: 285.405405405405, y: 3.2156862745098, size: 1 },\r\n // { x: 286.702702702703, y: 3.92156862745098, size: 1 },\r\n // { x: 291.891891891892, y: 3.80392156862745, size: 1 },\r\n // { x: 306.810810810811, y: 3.92156862745098, size: 1 },\r\n // { x: 307.459459459459, y: 3.88235294117647, size: 1 },\r\n // { x: 309.405405405405, y: 3.45098039215686, size: 1 },\r\n // { x: 312, y: 3.49019607843137, size: 1 },\r\n // { x: 324.972972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 327.567567567568, y: 3.49019607843137, size: 1 },\r\n // { x: 336.648648648649, y: 3.92156862745098, size: 1 },\r\n // { x: 339.891891891892, y: 3.76470588235294, size: 1 },\r\n // { x: 343.783783783784, y: 4.03921568627451, size: 1 },\r\n // { x: 346.378378378378, y: 3.41176470588235, size: 1 },\r\n // { x: 347.675675675676, y: 3.72549019607843, size: 1 },\r\n // { x: 350.918918918919, y: 3.13725490196078, size: 1 },\r\n // { x: 351.567567567568, y: 3.01960784313725, size: 1 },\r\n // { x: 28.4892086330935, y: 3.92156862745098, size: 1 },\r\n // { x: 34.3165467625899, y: 3.09803921568627, size: 1 },\r\n // { x: 58.9208633093525, y: 3.88235294117647, size: 1 },\r\n // { x: 76.4028776978417, y: 3.25490196078431, size: 1 },\r\n // { x: 77.0503597122302, y: 3.09803921568627, size: 1 },\r\n // { x: 77.6978417266187, y: 2.3921568627451, size: 1 },\r\n // { x: 78.3453237410072, y: 2.3921568627451, size: 1 },\r\n // { x: 78.9928057553957, y: 2.86274509803922, size: 1 },\r\n // { x: 79.6402877697842, y: 2.86274509803922, size: 1 },\r\n // { x: 86.7625899280576, y: 3.96078431372549, size: 1 },\r\n // { x: 99.0647482014388, y: 3.13725490196078, size: 1 },\r\n // { x: 121.079136690647, y: 2.70588235294118, size: 1 },\r\n // { x: 143.741007194245, y: 3.92156862745098, size: 1 },\r\n // { x: 169.640287769784, y: 4, size: 1 },\r\n // { x: 173.525179856115, y: 3.96078431372549, size: 1 },\r\n // { x: 207.194244604317, y: 2.86274509803922, size: 1 },\r\n // { x: 215.611510791367, y: 3.80392156862745, size: 1 },\r\n // { x: 221.438848920863, y: 3.80392156862745, size: 1 },\r\n // { x: 224.676258992806, y: 3.72549019607843, size: 1 },\r\n // { x: 227.913669064748, y: 3.29411764705882, size: 1 },\r\n // { x: 228.561151079137, y: 2.90196078431373, size: 1 },\r\n // { x: 229.208633093525, y: 3.29411764705882, size: 1 },\r\n // { x: 231.798561151079, y: 3.88235294117647, size: 1 },\r\n // { x: 244.748201438849, y: 4, size: 1 },\r\n // { x: 246.043165467626, y: 3.88235294117647, size: 1 },\r\n // { x: 250.575539568345, y: 3.13725490196078, size: 1 },\r\n // { x: 253.165467625899, y: 3.92156862745098, size: 1 },\r\n // { x: 253.812949640288, y: 3.92156862745098, size: 1 },\r\n // { x: 255.107913669065, y: 4.19607843137255, size: 1 },\r\n // { x: 256.402877697842, y: 3.92156862745098, size: 1 },\r\n // { x: 257.05035971223, y: 4, size: 1 },\r\n // { x: 258.992805755396, y: 3.92156862745098, size: 1 },\r\n // { x: 259.640287769784, y: 4.03921568627451, size: 1 },\r\n // { x: 262.230215827338, y: 4.07843137254902, size: 1 },\r\n // { x: 264.172661870504, y: 3.96078431372549, size: 1 },\r\n // { x: 264.820143884892, y: 3.96078431372549, size: 1 },\r\n // { x: 268.705035971223, y: 3.84313725490196, size: 1 },\r\n // { x: 289.424460431655, y: 3.41176470588235, size: 1 },\r\n // { x: 325.035971223022, y: 3.80392156862745, size: 1 },\r\n // { x: 336.690647482014, y: 3.05882352941176, size: 1 },\r\n // { x: 337.338129496403, y: 2.94117647058824, size: 1 },\r\n // { x: 337.985611510791, y: 2.98039215686275, size: 1 },\r\n // { x: 338.63309352518, y: 2.94117647058824, size: 1 },\r\n // { x: 339.928057553957, y: 4.03921568627451, size: 1 },\r\n // { x: 349.640287769784, y: 4, size: 1 },\r\n // { x: 350.287769784173, y: 3.84313725490196, size: 1 },\r\n // { x: 355.467625899281, y: 3.96078431372549, size: 1 },\r\n // { x: 358.057553956835, y: 3.09803921568627, size: 1 },\r\n // { x: 19.4244604316547, y: 3.2156862745098, size: 1 },\r\n // { x: 20.0719424460432, y: 3.2156862745098, size: 1 },\r\n // { x: 31.726618705036, y: 3.80392156862745, size: 1 },\r\n // { x: 40.7913669064748, y: 3.37254901960784, size: 1 },\r\n // { x: 49.8561151079137, y: 3.84313725490196, size: 1 },\r\n // { x: 62.158273381295, y: 3.92156862745098, size: 1 },\r\n // { x: 63.4532374100719, y: 3.25490196078431, size: 1 },\r\n // { x: 64.1007194244604, y: 3.88235294117647, size: 1 },\r\n // { x: 71.2230215827338, y: 4.11764705882353, size: 1 },\r\n // { x: 71.8705035971223, y: 3.96078431372549, size: 1 },\r\n // { x: 73.1654676258993, y: 4.19607843137255, size: 1 },\r\n // { x: 74.4604316546763, y: 4, size: 1 },\r\n // { x: 75.7553956834532, y: 3.80392156862745, size: 1 },\r\n // { x: 76.4028776978417, y: 4.27450980392157, size: 1 },\r\n // { x: 77.0503597122302, y: 3.84313725490196, size: 1 },\r\n // { x: 78.3453237410072, y: 3.96078431372549, size: 1 },\r\n // { x: 80.2877697841727, y: 3.96078431372549, size: 1 },\r\n // { x: 80.9352517985612, y: 4.19607843137255, size: 1 },\r\n // { x: 84.1726618705036, y: 2.82352941176471, size: 1 },\r\n // { x: 84.8201438848921, y: 2.27450980392157, size: 1 },\r\n // { x: 98.4172661870504, y: 4, size: 1 },\r\n // { x: 126.906474820144, y: 3.33333333333333, size: 1 },\r\n // { x: 145.68345323741, y: 4, size: 1 },\r\n // { x: 148.273381294964, y: 3.84313725490196, size: 1 },\r\n // { x: 168.992805755396, y: 3.2156862745098, size: 1 },\r\n // { x: 169.640287769784, y: 3.29411764705882, size: 1 },\r\n // { x: 170.935251798561, y: 2.47058823529412, size: 1 },\r\n // { x: 171.58273381295, y: 3.13725490196078, size: 1 },\r\n // { x: 172.877697841727, y: 3.33333333333333, size: 1 },\r\n // { x: 177.410071942446, y: 3.92156862745098, size: 1 },\r\n // { x: 192.302158273381, y: 3.01960784313725, size: 1 },\r\n // { x: 192.94964028777, y: 2.54901960784314, size: 1 },\r\n // { x: 194.244604316547, y: 3.88235294117647, size: 1 },\r\n // { x: 196.834532374101, y: 4, size: 1 },\r\n // { x: 206.546762589928, y: 3.80392156862745, size: 1 },\r\n // { x: 214.31654676259, y: 2.90196078431373, size: 1 },\r\n // { x: 216.258992805755, y: 3.88235294117647, size: 1 },\r\n // { x: 224.028776978417, y: 3.92156862745098, size: 1 },\r\n // { x: 227.913669064748, y: 4, size: 1 },\r\n // { x: 229.208633093525, y: 3.88235294117647, size: 1 },\r\n // { x: 231.151079136691, y: 3.80392156862745, size: 1 },\r\n // { x: 233.093525179856, y: 3.88235294117647, size: 1 },\r\n // { x: 237.625899280576, y: 3.92156862745098, size: 1 },\r\n // { x: 238.920863309353, y: 3.88235294117647, size: 1 },\r\n // { x: 242.158273381295, y: 4.03921568627451, size: 1 },\r\n // { x: 242.805755395683, y: 3.96078431372549, size: 1 },\r\n // { x: 247.338129496403, y: 4.03921568627451, size: 1 },\r\n // { x: 248.63309352518, y: 4.07843137254902, size: 1 },\r\n // { x: 249.928057553957, y: 3.88235294117647, size: 1 },\r\n // { x: 251.223021582734, y: 3.84313725490196, size: 1 },\r\n // { x: 259.640287769784, y: 4, size: 1 },\r\n // { x: 266.115107913669, y: 3.88235294117647, size: 1 },\r\n // { x: 279.064748201439, y: 3.13725490196078, size: 1 },\r\n // { x: 306.906474820144, y: 3.96078431372549, size: 1 },\r\n // { x: 313.381294964029, y: 3.88235294117647, size: 1 },\r\n // { x: 322.446043165468, y: 3.29411764705882, size: 1 },\r\n // { x: 356.115107913669, y: 3.92156862745098, size: 1 },\r\n // { x: 34.9640287769784, y: 3.88235294117647, size: 1 },\r\n // { x: 40.1438848920863, y: 3.92156862745098, size: 1 },\r\n // { x: 48.5611510791367, y: 3.2156862745098, size: 1 },\r\n // { x: 51.7985611510791, y: 3.88235294117647, size: 1 },\r\n // { x: 91.294964028777, y: 3.13725490196078, size: 1 },\r\n // { x: 91.9424460431655, y: 2.98039215686275, size: 1 },\r\n // { x: 95.8273381294964, y: 4, size: 1 },\r\n // { x: 106.834532374101, y: 3.80392156862745, size: 1 },\r\n // { x: 112.014388489209, y: 3.45098039215686, size: 1 },\r\n // { x: 112.661870503597, y: 3.29411764705882, size: 1 },\r\n // { x: 119.784172661871, y: 3.33333333333333, size: 1 },\r\n // { x: 225.323741007194, y: 4.03921568627451, size: 1 },\r\n // { x: 256.402877697842, y: 3.84313725490196, size: 1 },\r\n // { x: 257.697841726619, y: 4.03921568627451, size: 1 },\r\n // { x: 264.172661870504, y: 2.90196078431373, size: 1 },\r\n // { x: 264.820143884892, y: 3.25490196078431, size: 1 },\r\n // { x: 273.884892086331, y: 4, size: 1 },\r\n // { x: 275.179856115108, y: 3.80392156862745, size: 1 },\r\n // { x: 286.187050359712, y: 3.09803921568627, size: 1 },\r\n // { x: 286.834532374101, y: 4.11764705882353, size: 1 },\r\n // { x: 287.482014388489, y: 4.31372549019608, size: 1 },\r\n // { x: 288.129496402878, y: 4, size: 1 },\r\n // { x: 288.776978417266, y: 4.07843137254902, size: 1 },\r\n // { x: 293.309352517986, y: 4, size: 1 },\r\n // { x: 295.251798561151, y: 4, size: 1 },\r\n // { x: 296.546762589928, y: 3.92156862745098, size: 1 },\r\n // { x: 297.194244604317, y: 4, size: 1 },\r\n // { x: 298.489208633094, y: 4, size: 1 },\r\n // { x: 299.784172661871, y: 3.92156862745098, size: 1 },\r\n // { x: 301.726618705036, y: 3.96078431372549, size: 1 },\r\n // { x: 303.021582733813, y: 3.96078431372549, size: 1 },\r\n // { x: 303.669064748201, y: 3.88235294117647, size: 1 },\r\n // { x: 304.31654676259, y: 4.03921568627451, size: 1 },\r\n // { x: 308.848920863309, y: 4.11764705882353, size: 1 },\r\n // { x: 310.143884892086, y: 4, size: 1 },\r\n // { x: 313.381294964029, y: 4, size: 1 },\r\n // { x: 314.028776978417, y: 3.84313725490196, size: 1 },\r\n // { x: 315.971223021583, y: 4, size: 1 },\r\n // { x: 316.618705035971, y: 4, size: 1 },\r\n // { x: 319.856115107914, y: 3.96078431372549, size: 1 },\r\n // { x: 324.388489208633, y: 3.92156862745098, size: 1 },\r\n // { x: 325.68345323741, y: 4.15686274509804, size: 1 },\r\n // { x: 332.158273381295, y: 4.03921568627451, size: 1 },\r\n // { x: 337.338129496403, y: 3.80392156862745, size: 1 },\r\n // { x: 352.230215827338, y: 4, size: 1 },\r\n // { x: 358.705035971223, y: 4.15686274509804, size: 1 },\r\n // { x: 0.648648648648649, y: 3.88235294117647, size: 1 },\r\n // { x: 3.89189189189189, y: 3.88235294117647, size: 1 },\r\n // { x: 4.54054054054054, y: 3.88235294117647, size: 1 },\r\n // { x: 5.18918918918919, y: 3.88235294117647, size: 1 },\r\n // { x: 6.48648648648649, y: 4, size: 1 },\r\n // { x: 7.78378378378378, y: 3.76470588235294, size: 1 },\r\n // { x: 9.08108108108108, y: 3.80392156862745, size: 1 },\r\n // { x: 11.6756756756757, y: 2.58823529411765, size: 1 },\r\n // { x: 12.3243243243243, y: 3.17647058823529, size: 1 },\r\n // { x: 12.972972972973, y: 2.82352941176471, size: 1 },\r\n // { x: 13.6216216216216, y: 2.62745098039216, size: 1 },\r\n // { x: 18.1621621621622, y: 3.92156862745098, size: 1 },\r\n // { x: 21.4054054054054, y: 3.64705882352941, size: 1 },\r\n // { x: 23.3513513513514, y: 3.88235294117647, size: 1 },\r\n // { x: 25.9459459459459, y: 3.56862745098039, size: 1 },\r\n // { x: 27.2432432432432, y: 3.84313725490196, size: 1 },\r\n // { x: 28.5405405405405, y: 3.72549019607843, size: 1 },\r\n // { x: 33.7297297297297, y: 3.2156862745098, size: 1 },\r\n // { x: 35.027027027027, y: 3.80392156862745, size: 1 },\r\n // { x: 38.2702702702703, y: 3.84313725490196, size: 1 },\r\n // { x: 38.9189189189189, y: 3.88235294117647, size: 1 },\r\n // { x: 39.5675675675676, y: 3.84313725490196, size: 1 },\r\n // { x: 40.2162162162162, y: 3.84313725490196, size: 1 },\r\n // { x: 40.8648648648649, y: 3.96078431372549, size: 1 },\r\n // { x: 41.5135135135135, y: 4, size: 1 },\r\n // { x: 44.1081081081081, y: 3.84313725490196, size: 1 },\r\n // { x: 46.7027027027027, y: 3.84313725490196, size: 1 },\r\n // { x: 47.3513513513514, y: 3.72549019607843, size: 1 },\r\n // { x: 48, y: 3.92156862745098, size: 1 },\r\n // { x: 49.9459459459459, y: 3.80392156862745, size: 1 },\r\n // { x: 51.2432432432432, y: 3.80392156862745, size: 1 },\r\n // { x: 51.8918918918919, y: 3.96078431372549, size: 1 },\r\n // { x: 52.5405405405405, y: 3.76470588235294, size: 1 },\r\n // { x: 55.7837837837838, y: 3.29411764705882, size: 1 },\r\n // { x: 67.4594594594595, y: 3.72549019607843, size: 1 },\r\n // { x: 72, y: 3.56862745098039, size: 1 },\r\n // { x: 72.6486486486486, y: 3.6078431372549, size: 1 },\r\n // { x: 75.2432432432432, y: 3.33333333333333, size: 1 },\r\n // { x: 76.5405405405405, y: 3.17647058823529, size: 1 },\r\n // { x: 77.1891891891892, y: 3.05882352941176, size: 1 },\r\n // { x: 79.1351351351351, y: 3.72549019607843, size: 1 },\r\n // { x: 82.3783783783784, y: 3.72549019607843, size: 1 },\r\n // { x: 83.027027027027, y: 3.92156862745098, size: 1 },\r\n // { x: 102.486486486486, y: 3.76470588235294, size: 1 },\r\n // { x: 107.027027027027, y: 3.88235294117647, size: 1 },\r\n // { x: 109.621621621622, y: 3.88235294117647, size: 1 },\r\n // { x: 111.567567567568, y: 3.76470588235294, size: 1 },\r\n // { x: 112.864864864865, y: 3.52941176470588, size: 1 },\r\n // { x: 115.459459459459, y: 3.96078431372549, size: 1 },\r\n // { x: 116.108108108108, y: 3.68627450980392, size: 1 },\r\n // { x: 116.756756756757, y: 3.84313725490196, size: 1 },\r\n // { x: 119.351351351351, y: 3.29411764705882, size: 1 },\r\n // { x: 120, y: 3.33333333333333, size: 1 },\r\n // { x: 120.648648648649, y: 2.94117647058824, size: 1 },\r\n // { x: 121.945945945946, y: 3.96078431372549, size: 1 },\r\n // { x: 122.594594594595, y: 3.96078431372549, size: 1 },\r\n // { x: 124.540540540541, y: 4, size: 1 },\r\n // { x: 125.189189189189, y: 3.80392156862745, size: 1 },\r\n // { x: 125.837837837838, y: 4.03921568627451, size: 1 },\r\n // { x: 126.486486486486, y: 4.03921568627451, size: 1 },\r\n // { x: 127.135135135135, y: 4, size: 1 },\r\n // { x: 127.783783783784, y: 3.96078431372549, size: 1 },\r\n // { x: 129.081081081081, y: 4.07843137254902, size: 1 },\r\n // { x: 129.72972972973, y: 3.96078431372549, size: 1 },\r\n // { x: 130.378378378378, y: 3.96078431372549, size: 1 },\r\n // { x: 131.027027027027, y: 3.92156862745098, size: 1 },\r\n // { x: 131.675675675676, y: 3.84313725490196, size: 1 },\r\n // { x: 132.324324324324, y: 4, size: 1 },\r\n // { x: 133.621621621622, y: 3.92156862745098, size: 1 },\r\n // { x: 134.27027027027, y: 3.88235294117647, size: 1 },\r\n // { x: 136.216216216216, y: 3.88235294117647, size: 1 },\r\n // { x: 136.864864864865, y: 3.92156862745098, size: 1 },\r\n // { x: 137.513513513514, y: 4.19607843137255, size: 1 },\r\n // { x: 138.162162162162, y: 4.07843137254902, size: 1 },\r\n // { x: 138.810810810811, y: 4, size: 1 },\r\n // { x: 139.459459459459, y: 4.07843137254902, size: 1 },\r\n // { x: 140.108108108108, y: 3.6078431372549, size: 1 },\r\n // { x: 144.648648648649, y: 3.33333333333333, size: 1 },\r\n // { x: 147.891891891892, y: 3.25490196078431, size: 1 },\r\n // { x: 150.486486486486, y: 3.41176470588235, size: 1 },\r\n // { x: 157.621621621622, y: 3.84313725490196, size: 1 },\r\n // { x: 160.864864864865, y: 3.68627450980392, size: 1 },\r\n // { x: 161.513513513514, y: 3.25490196078431, size: 1 },\r\n // { x: 162.810810810811, y: 3.2156862745098, size: 1 },\r\n // { x: 163.459459459459, y: 2.50980392156863, size: 1 },\r\n // { x: 164.108108108108, y: 2.62745098039216, size: 1 },\r\n // { x: 164.756756756757, y: 2.58823529411765, size: 1 },\r\n // { x: 165.405405405405, y: 2.3921568627451, size: 1 },\r\n // { x: 166.054054054054, y: 4, size: 1 },\r\n // { x: 166.702702702703, y: 3.88235294117647, size: 1 },\r\n // { x: 167.351351351351, y: 3.88235294117647, size: 1 },\r\n // { x: 169.297297297297, y: 4.11764705882353, size: 1 },\r\n // { x: 169.945945945946, y: 3.96078431372549, size: 1 },\r\n // { x: 170.594594594595, y: 3.80392156862745, size: 1 },\r\n // { x: 171.243243243243, y: 3.96078431372549, size: 1 },\r\n // { x: 173.189189189189, y: 3.92156862745098, size: 1 },\r\n // { x: 175.783783783784, y: 3.88235294117647, size: 1 },\r\n // { x: 176.432432432432, y: 3.92156862745098, size: 1 },\r\n // { x: 177.081081081081, y: 3.88235294117647, size: 1 },\r\n // { x: 179.027027027027, y: 3.80392156862745, size: 1 },\r\n // { x: 179.675675675676, y: 3.88235294117647, size: 1 },\r\n // { x: 181.621621621622, y: 4.11764705882353, size: 1 },\r\n // { x: 182.27027027027, y: 3.92156862745098, size: 1 },\r\n // { x: 184.864864864865, y: 3.25490196078431, size: 1 },\r\n // { x: 187.459459459459, y: 3.92156862745098, size: 1 },\r\n // { x: 189.405405405405, y: 3.92156862745098, size: 1 },\r\n // { x: 190.702702702703, y: 3.68627450980392, size: 1 },\r\n // { x: 191.351351351351, y: 3.96078431372549, size: 1 },\r\n // { x: 192, y: 3.80392156862745, size: 1 },\r\n // { x: 193.297297297297, y: 4, size: 1 },\r\n // { x: 194.594594594595, y: 3.88235294117647, size: 1 },\r\n // { x: 195.891891891892, y: 3.92156862745098, size: 1 },\r\n // { x: 196.540540540541, y: 4, size: 1 },\r\n // { x: 198.486486486486, y: 3.84313725490196, size: 1 },\r\n // { x: 199.135135135135, y: 3.72549019607843, size: 1 },\r\n // { x: 199.783783783784, y: 4.03921568627451, size: 1 },\r\n // { x: 201.72972972973, y: 4.03921568627451, size: 1 },\r\n // { x: 202.378378378378, y: 3.84313725490196, size: 1 },\r\n // { x: 203.027027027027, y: 3.92156862745098, size: 1 },\r\n // { x: 203.675675675676, y: 4.07843137254902, size: 1 },\r\n // { x: 206.918918918919, y: 3.37254901960784, size: 1 },\r\n // { x: 207.567567567568, y: 3.92156862745098, size: 1 },\r\n // { x: 208.864864864865, y: 3.84313725490196, size: 1 },\r\n // { x: 209.513513513514, y: 4.07843137254902, size: 1 },\r\n // { x: 210.810810810811, y: 3.80392156862745, size: 1 },\r\n // { x: 211.459459459459, y: 3.96078431372549, size: 1 },\r\n // { x: 213.405405405405, y: 3.96078431372549, size: 1 },\r\n // { x: 214.054054054054, y: 3.88235294117647, size: 1 },\r\n // { x: 214.702702702703, y: 4.03921568627451, size: 1 },\r\n // { x: 215.351351351351, y: 3.72549019607843, size: 1 },\r\n // { x: 216.648648648649, y: 3.92156862745098, size: 1 },\r\n // { x: 217.297297297297, y: 3.80392156862745, size: 1 },\r\n // { x: 219.243243243243, y: 3.96078431372549, size: 1 },\r\n // { x: 220.540540540541, y: 4, size: 1 },\r\n // { x: 222.486486486486, y: 3.84313725490196, size: 1 },\r\n // { x: 223.783783783784, y: 3.96078431372549, size: 1 },\r\n // { x: 225.72972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 228.324324324324, y: 3.13725490196078, size: 1 },\r\n // { x: 229.621621621622, y: 3.52941176470588, size: 1 },\r\n // { x: 233.513513513514, y: 3.72549019607843, size: 1 },\r\n // { x: 240, y: 3.45098039215686, size: 1 },\r\n // { x: 247.783783783784, y: 3.2156862745098, size: 1 },\r\n // { x: 248.432432432432, y: 3.17647058823529, size: 1 },\r\n // { x: 249.081081081081, y: 3.33333333333333, size: 1 },\r\n // { x: 249.72972972973, y: 2.58823529411765, size: 1 },\r\n // { x: 250.378378378378, y: 2.62745098039216, size: 1 },\r\n // { x: 252.972972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 270.486486486487, y: 3.41176470588235, size: 1 },\r\n // { x: 271.135135135135, y: 2.94117647058824, size: 1 },\r\n // { x: 271.783783783784, y: 2.90196078431373, size: 1 },\r\n // { x: 273.72972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 275.027027027027, y: 3.64705882352941, size: 1 },\r\n // { x: 278.27027027027, y: 3.88235294117647, size: 1 },\r\n // { x: 278.918918918919, y: 3.80392156862745, size: 1 },\r\n // { x: 280.216216216216, y: 3.92156862745098, size: 1 },\r\n // { x: 283.459459459459, y: 3.76470588235294, size: 1 },\r\n // { x: 285.405405405405, y: 3.80392156862745, size: 1 },\r\n // { x: 287.351351351351, y: 3.96078431372549, size: 1 },\r\n // { x: 288.648648648649, y: 3.80392156862745, size: 1 },\r\n // { x: 289.297297297297, y: 3.88235294117647, size: 1 },\r\n // { x: 290.594594594595, y: 3.88235294117647, size: 1 },\r\n // { x: 291.243243243243, y: 3.64705882352941, size: 1 },\r\n // { x: 291.891891891892, y: 3.13725490196078, size: 1 },\r\n // { x: 292.540540540541, y: 3.01960784313725, size: 1 },\r\n // { x: 293.189189189189, y: 2.90196078431373, size: 1 },\r\n // { x: 299.675675675676, y: 3.80392156862745, size: 1 },\r\n // { x: 301.621621621622, y: 3.92156862745098, size: 1 },\r\n // { x: 308.756756756757, y: 3.88235294117647, size: 1 },\r\n // { x: 310.054054054054, y: 3.76470588235294, size: 1 },\r\n // { x: 310.702702702703, y: 3.92156862745098, size: 1 },\r\n // { x: 313.945945945946, y: 3.17647058823529, size: 1 },\r\n // { x: 314.594594594595, y: 3.01960784313725, size: 1 },\r\n // { x: 315.243243243243, y: 2.94117647058824, size: 1 },\r\n // { x: 315.891891891892, y: 3.92156862745098, size: 1 },\r\n // { x: 316.540540540541, y: 3.80392156862745, size: 1 },\r\n // { x: 317.189189189189, y: 3.92156862745098, size: 1 },\r\n // { x: 319.135135135135, y: 3.84313725490196, size: 1 },\r\n // { x: 322.378378378378, y: 3.80392156862745, size: 1 },\r\n // { x: 326.27027027027, y: 3.88235294117647, size: 1 },\r\n // { x: 326.918918918919, y: 3.92156862745098, size: 1 },\r\n // { x: 329.513513513513, y: 3.80392156862745, size: 1 },\r\n // { x: 331.459459459459, y: 3.88235294117647, size: 1 },\r\n // { x: 332.108108108108, y: 4.15686274509804, size: 1 },\r\n // { x: 332.756756756757, y: 3.84313725490196, size: 1 },\r\n // { x: 334.054054054054, y: 3.76470588235294, size: 1 },\r\n // { x: 335.351351351351, y: 3.45098039215686, size: 1 },\r\n // { x: 336, y: 2.50980392156863, size: 1 },\r\n // { x: 336.648648648649, y: 2.58823529411765, size: 1 },\r\n // { x: 337.297297297297, y: 4.23529411764706, size: 1 },\r\n // { x: 337.945945945946, y: 3.84313725490196, size: 1 },\r\n // { x: 338.594594594595, y: 3.92156862745098, size: 1 },\r\n // { x: 341.189189189189, y: 3.88235294117647, size: 1 },\r\n // { x: 341.837837837838, y: 3.80392156862745, size: 1 },\r\n // { x: 343.135135135135, y: 3.88235294117647, size: 1 },\r\n // { x: 343.783783783784, y: 3.92156862745098, size: 1 },\r\n // { x: 344.432432432432, y: 3.92156862745098, size: 1 },\r\n // { x: 348.972972972973, y: 4.23529411764706, size: 1 },\r\n // { x: 349.621621621622, y: 4.03921568627451, size: 1 },\r\n // { x: 350.27027027027, y: 3.96078431372549, size: 1 },\r\n // { x: 350.918918918919, y: 3.76470588235294, size: 1 },\r\n // { x: 351.567567567568, y: 3.84313725490196, size: 1 },\r\n // { x: 352.216216216216, y: 3.76470588235294, size: 1 },\r\n // { x: 352.864864864865, y: 3.88235294117647, size: 1 },\r\n // { x: 353.513513513513, y: 3.84313725490196, size: 1 },\r\n // { x: 354.162162162162, y: 3.80392156862745, size: 1 },\r\n // { x: 355.459459459459, y: 3.84313725490196, size: 1 },\r\n // { x: 356.108108108108, y: 3.37254901960784, size: 1 },\r\n // { x: 356.756756756757, y: 3.17647058823529, size: 1 },\r\n // { x: 357.405405405405, y: 3.33333333333333, size: 1 },\r\n // { x: 358.054054054054, y: 2.70588235294118, size: 1 },\r\n // { x: 18.7769784172662, y: 3.05882352941176, size: 1 },\r\n // { x: 19.4244604316547, y: 2, size: 1 },\r\n // { x: 20.0719424460432, y: 1.92156862745098, size: 1 },\r\n // { x: 31.726618705036, y: 3.88235294117647, size: 1 },\r\n // { x: 33.6690647482014, y: 4.19607843137255, size: 1 },\r\n // { x: 40.7913669064748, y: 2.98039215686275, size: 1 },\r\n // { x: 41.4388489208633, y: 2.3921568627451, size: 1 },\r\n // { x: 43.3812949640288, y: 3.25490196078431, size: 1 },\r\n // { x: 44.0287769784173, y: 3.25490196078431, size: 1 },\r\n // { x: 48.5611510791367, y: 3.25490196078431, size: 1 },\r\n // { x: 50.5035971223022, y: 3.33333333333333, size: 1 },\r\n // { x: 54.3884892086331, y: 3.33333333333333, size: 1 },\r\n // { x: 55.0359712230216, y: 3.09803921568627, size: 1 },\r\n // { x: 61.5107913669065, y: 3.25490196078431, size: 1 },\r\n // { x: 85.4676258992806, y: 3.84313725490196, size: 1 },\r\n // { x: 95.8273381294964, y: 3.33333333333333, size: 1 },\r\n // { x: 104.244604316547, y: 3.25490196078431, size: 1 },\r\n // { x: 152.158273381295, y: 3.88235294117647, size: 1 },\r\n // { x: 165.107913669065, y: 3.84313725490196, size: 1 },\r\n // { x: 170.935251798561, y: 2.19607843137255, size: 1 },\r\n // { x: 191.007194244604, y: 3.29411764705882, size: 1 },\r\n // { x: 191.654676258993, y: 2.86274509803922, size: 1 },\r\n // { x: 192.302158273381, y: 2.43137254901961, size: 1 },\r\n // { x: 192.94964028777, y: 3.33333333333333, size: 1 },\r\n // { x: 213.669064748201, y: 3.88235294117647, size: 1 },\r\n // { x: 230.503597122302, y: 3.92156862745098, size: 1 },\r\n // { x: 238.273381294964, y: 4, size: 1 },\r\n // { x: 284.892086330935, y: 3.2156862745098, size: 1 },\r\n // { x: 286.187050359712, y: 3.17647058823529, size: 1 },\r\n // { x: 289.424460431655, y: 3.25490196078431, size: 1 },\r\n // { x: 299.784172661871, y: 2.43137254901961, size: 1 },\r\n // { x: 300.431654676259, y: 1.92156862745098, size: 1 },\r\n // { x: 301.079136690647, y: 2.70588235294118, size: 1 },\r\n // { x: 301.726618705036, y: 2.66666666666667, size: 1 },\r\n // { x: 320.503597122302, y: 3.2156862745098, size: 1 },\r\n // { x: 321.798561151079, y: 3.01960784313725, size: 1 },\r\n // { x: 322.446043165468, y: 3.13725490196078, size: 1 },\r\n // { x: 323.093525179856, y: 2.98039215686275, size: 1 },\r\n // { x: 323.741007194245, y: 3.25490196078431, size: 1 },\r\n // { x: 325.035971223022, y: 3.2156862745098, size: 1 },\r\n // { x: 327.625899280576, y: 3.33333333333333, size: 1 },\r\n // { x: 341.223021582734, y: 3.25490196078431, size: 1 },\r\n // { x: 343.165467625899, y: 3.37254901960784, size: 1 },\r\n // { x: 343.812949640288, y: 3.25490196078431, size: 1 },\r\n // { x: 0, y: 4, size: 1 },\r\n // { x: 6.47482014388489, y: 3.05882352941176, size: 1 },\r\n // { x: 7.76978417266187, y: 3.29411764705882, size: 1 },\r\n // { x: 11.6546762589928, y: 3.25490196078431, size: 1 },\r\n // { x: 12.9496402877698, y: 3.25490196078431, size: 1 },\r\n // { x: 13.5971223021583, y: 3.29411764705882, size: 1 },\r\n // { x: 15.5395683453237, y: 3.33333333333333, size: 1 },\r\n // { x: 21.3669064748201, y: 3.2156862745098, size: 1 },\r\n // { x: 22.0143884892086, y: 3.17647058823529, size: 1 },\r\n // { x: 23.3093525179856, y: 3.33333333333333, size: 1 },\r\n // { x: 25.2517985611511, y: 3.2156862745098, size: 1 },\r\n // { x: 27.1942446043165, y: 3.17647058823529, size: 1 },\r\n // { x: 27.841726618705, y: 3.80392156862745, size: 1 },\r\n // { x: 47.9136690647482, y: 3.09803921568627, size: 1 },\r\n // { x: 61.5107913669065, y: 3.92156862745098, size: 1 },\r\n // { x: 67.9856115107914, y: 2.98039215686275, size: 1 },\r\n // { x: 68.6330935251799, y: 3.25490196078431, size: 1 },\r\n // { x: 69.2805755395683, y: 2.47058823529412, size: 1 },\r\n // { x: 69.9280575539568, y: 2.23529411764706, size: 1 },\r\n // { x: 91.294964028777, y: 2.98039215686275, size: 1 },\r\n // { x: 95.1798561151079, y: 3.92156862745098, size: 1 },\r\n // { x: 112.661870503597, y: 3.01960784313725, size: 1 },\r\n // { x: 113.309352517986, y: 2.90196078431373, size: 1 },\r\n // { x: 131.438848920863, y: 4.15686274509804, size: 1 },\r\n // { x: 154.10071942446, y: 3.33333333333333, size: 1 },\r\n // { x: 154.748201438849, y: 3.33333333333333, size: 1 },\r\n // { x: 156.043165467626, y: 2.74509803921569, size: 1 },\r\n // { x: 197.482014388489, y: 3.2156862745098, size: 1 },\r\n // { x: 198.776978417266, y: 2.90196078431373, size: 1 },\r\n // { x: 199.424460431655, y: 2.7843137254902, size: 1 },\r\n // { x: 202.014388489209, y: 3.2156862745098, size: 1 },\r\n // { x: 202.661870503597, y: 3.37254901960784, size: 1 },\r\n // { x: 206.546762589928, y: 3.2156862745098, size: 1 },\r\n // { x: 207.841726618705, y: 3.17647058823529, size: 1 },\r\n // { x: 264.172661870504, y: 3.2156862745098, size: 1 },\r\n // { x: 275.179856115108, y: 3.76470588235294, size: 1 },\r\n // { x: 284.892086330935, y: 2.98039215686275, size: 1 },\r\n // { x: 285.539568345324, y: 2.66666666666667, size: 1 },\r\n // { x: 306.906474820144, y: 2.66666666666667, size: 1 },\r\n // { x: 307.553956834532, y: 2.70588235294118, size: 1 },\r\n // { x: 323.741007194245, y: 3.92156862745098, size: 1 },\r\n // { x: 327.625899280576, y: 3.09803921568627, size: 1 },\r\n // { x: 328.920863309353, y: 2.62745098039216, size: 1 },\r\n // { x: 350.935251798561, y: 3.29411764705882, size: 1 },\r\n // { x: 10.3597122302158, y: 3.13725490196078, size: 1 },\r\n // { x: 11.0071942446043, y: 2.98039215686275, size: 1 },\r\n // { x: 11.6546762589928, y: 2.50980392156863, size: 1 },\r\n // { x: 12.3021582733813, y: 2.74509803921569, size: 1 },\r\n // { x: 31.726618705036, y: 3.17647058823529, size: 1 },\r\n // { x: 33.0215827338129, y: 2.43137254901961, size: 1 },\r\n // { x: 33.6690647482014, y: 2.50980392156863, size: 1 },\r\n // { x: 57.6258992805755, y: 3.37254901960784, size: 1 },\r\n // { x: 77.0503597122302, y: 3.29411764705882, size: 1 },\r\n // { x: 97.7697841726619, y: 3.33333333333333, size: 1 },\r\n // { x: 119.784172661871, y: 3.13725490196078, size: 1 },\r\n // { x: 120.431654676259, y: 3.17647058823529, size: 1 },\r\n // { x: 137.26618705036, y: 3.88235294117647, size: 1 },\r\n // { x: 150.863309352518, y: 3.92156862745098, size: 1 },\r\n // { x: 177.410071942446, y: 3.37254901960784, size: 1 },\r\n // { x: 181.294964028777, y: 3.96078431372549, size: 1 },\r\n // { x: 227.26618705036, y: 2.98039215686275, size: 1 },\r\n // { x: 271.294964028777, y: 3.33333333333333, size: 1 },\r\n // { x: 292.014388489209, y: 3.13725490196078, size: 1 },\r\n // { x: 309.496402877698, y: 3.92156862745098, size: 1 },\r\n // { x: 356.762589928058, y: 3.05882352941176, size: 1 },\r\n // { x: 1.94594594594595, y: 3.80392156862745, size: 1 },\r\n // { x: 6.48648648648649, y: 3.64705882352941, size: 1 },\r\n // { x: 12.972972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 13.6216216216216, y: 3.52941176470588, size: 1 },\r\n // { x: 19.4594594594595, y: 3.41176470588235, size: 1 },\r\n // { x: 23.3513513513514, y: 3.52941176470588, size: 1 },\r\n // { x: 25.2972972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 29.1891891891892, y: 3.29411764705882, size: 1 },\r\n // { x: 32.4324324324324, y: 3.56862745098039, size: 1 },\r\n // { x: 33.7297297297297, y: 3.37254901960784, size: 1 },\r\n // { x: 38.2702702702703, y: 3.17647058823529, size: 1 },\r\n // { x: 38.9189189189189, y: 3.2156862745098, size: 1 },\r\n // { x: 39.5675675675676, y: 3.25490196078431, size: 1 },\r\n // { x: 40.2162162162162, y: 3.13725490196078, size: 1 },\r\n // { x: 44.1081081081081, y: 3.52941176470588, size: 1 },\r\n // { x: 44.7567567567568, y: 3.84313725490196, size: 1 },\r\n // { x: 48, y: 3.72549019607843, size: 1 },\r\n // { x: 51.2432432432432, y: 3.37254901960784, size: 1 },\r\n // { x: 51.8918918918919, y: 3.84313725490196, size: 1 },\r\n // { x: 60.3243243243243, y: 3.49019607843137, size: 1 },\r\n // { x: 60.972972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 65.5135135135135, y: 3.76470588235294, size: 1 },\r\n // { x: 77.1891891891892, y: 3.84313725490196, size: 1 },\r\n // { x: 77.8378378378378, y: 3.45098039215686, size: 1 },\r\n // { x: 78.4864864864865, y: 3.88235294117647, size: 1 },\r\n // { x: 81.7297297297297, y: 3.01960784313725, size: 1 },\r\n // { x: 82.3783783783784, y: 3.17647058823529, size: 1 },\r\n // { x: 83.6756756756757, y: 2.70588235294118, size: 1 },\r\n // { x: 84.3243243243243, y: 3.41176470588235, size: 1 },\r\n // { x: 90.8108108108108, y: 3.49019607843137, size: 1 },\r\n // { x: 95.3513513513514, y: 3.45098039215686, size: 1 },\r\n // { x: 98.5945945945946, y: 3.49019607843137, size: 1 },\r\n // { x: 99.2432432432432, y: 3.84313725490196, size: 1 },\r\n // { x: 99.8918918918919, y: 3.49019607843137, size: 1 },\r\n // { x: 101.837837837838, y: 3.72549019607843, size: 1 },\r\n // { x: 103.783783783784, y: 3.33333333333333, size: 1 },\r\n // { x: 104.432432432432, y: 3.09803921568627, size: 1 },\r\n // { x: 105.081081081081, y: 2.98039215686275, size: 1 },\r\n // { x: 105.72972972973, y: 3.01960784313725, size: 1 },\r\n // { x: 108.324324324324, y: 3.45098039215686, size: 1 },\r\n // { x: 113.513513513514, y: 3.37254901960784, size: 1 },\r\n // { x: 122.594594594595, y: 3.6078431372549, size: 1 },\r\n // { x: 126.486486486486, y: 2.90196078431373, size: 1 },\r\n // { x: 127.135135135135, y: 2.43137254901961, size: 1 },\r\n // { x: 127.783783783784, y: 3.64705882352941, size: 1 },\r\n // { x: 131.675675675676, y: 3.49019607843137, size: 1 },\r\n // { x: 139.459459459459, y: 3.68627450980392, size: 1 },\r\n // { x: 141.405405405405, y: 3.41176470588235, size: 1 },\r\n // { x: 145.297297297297, y: 3.68627450980392, size: 1 },\r\n // { x: 147.891891891892, y: 3.13725490196078, size: 1 },\r\n // { x: 148.540540540541, y: 2.70588235294118, size: 1 },\r\n // { x: 149.189189189189, y: 3.17647058823529, size: 1 },\r\n // { x: 151.135135135135, y: 3.45098039215686, size: 1 },\r\n // { x: 159.567567567568, y: 3.56862745098039, size: 1 },\r\n // { x: 164.108108108108, y: 3.84313725490196, size: 1 },\r\n // { x: 166.702702702703, y: 3.64705882352941, size: 1 },\r\n // { x: 168.648648648649, y: 3.52941176470588, size: 1 },\r\n // { x: 169.297297297297, y: 3.37254901960784, size: 1 },\r\n // { x: 173.189189189189, y: 3.25490196078431, size: 1 },\r\n // { x: 180.324324324324, y: 3.41176470588235, size: 1 },\r\n // { x: 188.108108108108, y: 3.41176470588235, size: 1 },\r\n // { x: 189.405405405405, y: 3.45098039215686, size: 1 },\r\n // { x: 191.351351351351, y: 3.17647058823529, size: 1 },\r\n // { x: 192, y: 2.94117647058824, size: 1 },\r\n // { x: 194.594594594595, y: 3.56862745098039, size: 1 },\r\n // { x: 200.432432432432, y: 3.76470588235294, size: 1 },\r\n // { x: 201.081081081081, y: 3.72549019607843, size: 1 },\r\n // { x: 202.378378378378, y: 3.37254901960784, size: 1 },\r\n // { x: 206.918918918919, y: 3.56862745098039, size: 1 },\r\n // { x: 213.405405405405, y: 2.58823529411765, size: 1 },\r\n // { x: 226.378378378378, y: 3.6078431372549, size: 1 },\r\n // { x: 227.027027027027, y: 3.68627450980392, size: 1 },\r\n // { x: 230.27027027027, y: 3.6078431372549, size: 1 },\r\n // { x: 233.513513513514, y: 3.17647058823529, size: 1 },\r\n // { x: 234.810810810811, y: 3.09803921568627, size: 1 },\r\n // { x: 235.459459459459, y: 3.05882352941176, size: 1 },\r\n // { x: 236.756756756757, y: 3.37254901960784, size: 1 },\r\n // { x: 246.486486486486, y: 3.76470588235294, size: 1 },\r\n // { x: 247.783783783784, y: 3.49019607843137, size: 1 },\r\n // { x: 248.432432432432, y: 3.80392156862745, size: 1 },\r\n // { x: 249.72972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 251.675675675676, y: 3.41176470588235, size: 1 },\r\n // { x: 255.567567567568, y: 3.25490196078431, size: 1 },\r\n // { x: 256.216216216216, y: 2.7843137254902, size: 1 },\r\n // { x: 256.864864864865, y: 2.15686274509804, size: 1 },\r\n // { x: 264, y: 3.49019607843137, size: 1 },\r\n // { x: 264.648648648649, y: 3.49019607843137, size: 1 },\r\n // { x: 267.891891891892, y: 3.29411764705882, size: 1 },\r\n // { x: 268.540540540541, y: 3.80392156862745, size: 1 },\r\n // { x: 270.486486486487, y: 3.45098039215686, size: 1 },\r\n // { x: 273.081081081081, y: 3.49019607843137, size: 1 },\r\n // { x: 276.324324324324, y: 3.37254901960784, size: 1 },\r\n // { x: 278.27027027027, y: 3.09803921568627, size: 1 },\r\n // { x: 280.864864864865, y: 3.56862745098039, size: 1 },\r\n // { x: 288, y: 3.76470588235294, size: 1 },\r\n // { x: 289.297297297297, y: 3.72549019607843, size: 1 },\r\n // { x: 293.189189189189, y: 3.80392156862745, size: 1 },\r\n // { x: 295.135135135135, y: 3.80392156862745, size: 1 },\r\n // { x: 297.72972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 298.378378378378, y: 3.45098039215686, size: 1 },\r\n // { x: 299.027027027027, y: 3.13725490196078, size: 1 },\r\n // { x: 300.324324324324, y: 3.33333333333333, size: 1 },\r\n // { x: 305.513513513513, y: 3.41176470588235, size: 1 },\r\n // { x: 309.405405405405, y: 3.96078431372549, size: 1 },\r\n // { x: 313.945945945946, y: 3.68627450980392, size: 1 },\r\n // { x: 321.72972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 325.621621621622, y: 3.41176470588235, size: 1 },\r\n // { x: 330.810810810811, y: 3.45098039215686, size: 1 },\r\n // { x: 336, y: 3.45098039215686, size: 1 },\r\n // { x: 336.648648648649, y: 3.52941176470588, size: 1 },\r\n // { x: 342.486486486487, y: 3.05882352941176, size: 1 },\r\n // { x: 343.135135135135, y: 2.86274509803922, size: 1 },\r\n // { x: 343.783783783784, y: 3.17647058823529, size: 1 },\r\n // { x: 345.72972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 22.0143884892086, y: 3.49019607843137, size: 1 },\r\n // { x: 46.6187050359712, y: 3.09803921568627, size: 1 },\r\n // { x: 47.2661870503597, y: 3.29411764705882, size: 1 },\r\n // { x: 47.9136690647482, y: 2.50980392156863, size: 1 },\r\n // { x: 69.2805755395683, y: 2.98039215686275, size: 1 },\r\n // { x: 69.9280575539568, y: 3.01960784313725, size: 1 },\r\n // { x: 71.8705035971223, y: 3.13725490196078, size: 1 },\r\n // { x: 72.5179856115108, y: 3.29411764705882, size: 1 },\r\n // { x: 74.4604316546763, y: 3.13725490196078, size: 1 },\r\n // { x: 75.7553956834532, y: 3.25490196078431, size: 1 },\r\n // { x: 76.4028776978417, y: 3.2156862745098, size: 1 },\r\n // { x: 82.8776978417266, y: 3.29411764705882, size: 1 },\r\n // { x: 83.5251798561151, y: 3.25490196078431, size: 1 },\r\n // { x: 86.1151079136691, y: 3.17647058823529, size: 1 },\r\n // { x: 86.7625899280576, y: 3.2156862745098, size: 1 },\r\n // { x: 108.776978417266, y: 3.29411764705882, size: 1 },\r\n // { x: 110.719424460432, y: 3.2156862745098, size: 1 },\r\n // { x: 112.014388489209, y: 3.01960784313725, size: 1 },\r\n // { x: 112.661870503597, y: 2.86274509803922, size: 1 },\r\n // { x: 113.309352517986, y: 3.2156862745098, size: 1 },\r\n // { x: 120.431654676259, y: 3.45098039215686, size: 1 },\r\n // { x: 134.028776978417, y: 2.62745098039216, size: 1 },\r\n // { x: 134.676258992806, y: 2.70588235294118, size: 1 },\r\n // { x: 155.395683453237, y: 2.74509803921569, size: 1 },\r\n // { x: 156.043165467626, y: 2.94117647058824, size: 1 },\r\n // { x: 158.63309352518, y: 3.92156862745098, size: 1 },\r\n // { x: 175.467625899281, y: 3.25490196078431, size: 1 },\r\n // { x: 197.482014388489, y: 3.37254901960784, size: 1 },\r\n // { x: 218.848920863309, y: 2.94117647058824, size: 1 },\r\n // { x: 220.143884892086, y: 1.84313725490196, size: 1 },\r\n // { x: 220.791366906475, y: 1.49019607843137, size: 1 },\r\n // { x: 221.438848920863, y: 1.33333333333333, size: 1 },\r\n // { x: 222.086330935252, y: 1.09803921568627, size: 1 },\r\n // { x: 222.73381294964, y: 2.90196078431373, size: 1 },\r\n // { x: 224.028776978417, y: 3.2156862745098, size: 1 },\r\n // { x: 224.676258992806, y: 3.05882352941176, size: 1 },\r\n // { x: 225.323741007194, y: 2.86274509803922, size: 1 },\r\n // { x: 225.971223021583, y: 3.2156862745098, size: 1 },\r\n // { x: 229.856115107914, y: 2.86274509803922, size: 1 },\r\n // { x: 235.68345323741, y: 2.7843137254902, size: 1 },\r\n // { x: 236.330935251799, y: 2.94117647058824, size: 1 },\r\n // { x: 236.978417266187, y: 3.13725490196078, size: 1 },\r\n // { x: 240.215827338129, y: 3.2156862745098, size: 1 },\r\n // { x: 242.158273381295, y: 3.17647058823529, size: 1 },\r\n // { x: 248.63309352518, y: 3.37254901960784, size: 1 },\r\n // { x: 263.525179856115, y: 2.82352941176471, size: 1 },\r\n // { x: 283.597122302158, y: 2.94117647058824, size: 1 },\r\n // { x: 284.892086330935, y: 2.54901960784314, size: 1 },\r\n // { x: 285.539568345324, y: 2.27450980392157, size: 1 },\r\n // { x: 302.374100719424, y: 4.03921568627451, size: 1 },\r\n // { x: 306.258992805755, y: 2.98039215686275, size: 1 },\r\n // { x: 306.906474820144, y: 3.17647058823529, size: 1 },\r\n // { x: 307.553956834532, y: 3.29411764705882, size: 1 },\r\n // { x: 308.848920863309, y: 3.96078431372549, size: 1 },\r\n // { x: 319.208633093525, y: 3.33333333333333, size: 1 },\r\n // { x: 328.273381294964, y: 2.82352941176471, size: 1 },\r\n // { x: 329.568345323741, y: 3.96078431372549, size: 1 },\r\n // { x: 349.640287769784, y: 2.66666666666667, size: 1 },\r\n // { x: 350.287769784173, y: 2.27450980392157, size: 1 },\r\n // { x: 11.6546762589928, y: 2.82352941176471, size: 1 },\r\n // { x: 22.0143884892086, y: 3.92156862745098, size: 1 },\r\n // { x: 31.726618705036, y: 3.09803921568627, size: 1 },\r\n // { x: 32.3741007194245, y: 3.01960784313725, size: 1 },\r\n // { x: 33.0215827338129, y: 1.84313725490196, size: 1 },\r\n // { x: 33.6690647482014, y: 2.11764705882353, size: 1 },\r\n // { x: 54.3884892086331, y: 2.19607843137255, size: 1 },\r\n // { x: 55.0359712230216, y: 2.15686274509804, size: 1 },\r\n // { x: 74.4604316546763, y: 3.88235294117647, size: 1 },\r\n // { x: 91.9424460431655, y: 3.37254901960784, size: 1 },\r\n // { x: 96.4748201438849, y: 3.25490196078431, size: 1 },\r\n // { x: 97.1223021582734, y: 3.01960784313725, size: 1 },\r\n // { x: 97.7697841726619, y: 2.58823529411765, size: 1 },\r\n // { x: 98.4172661870504, y: 2.50980392156863, size: 1 },\r\n // { x: 99.7122302158273, y: 3.37254901960784, size: 1 },\r\n // { x: 115.251798561151, y: 3.41176470588235, size: 1 },\r\n // { x: 118.489208633094, y: 3.17647058823529, size: 1 },\r\n // { x: 119.136690647482, y: 2.03921568627451, size: 1 },\r\n // { x: 119.784172661871, y: 1.56862745098039, size: 1 },\r\n // { x: 144.388489208633, y: 3.33333333333333, size: 1 },\r\n // { x: 149.568345323741, y: 3.25490196078431, size: 1 },\r\n // { x: 153.453237410072, y: 3.29411764705882, size: 1 },\r\n // { x: 155.395683453237, y: 3.29411764705882, size: 1 },\r\n // { x: 157.985611510791, y: 3.33333333333333, size: 1 },\r\n // { x: 183.237410071942, y: 3.37254901960784, size: 1 },\r\n // { x: 205.251798561151, y: 3.13725490196078, size: 1 },\r\n // { x: 205.89928057554, y: 2.7843137254902, size: 1 },\r\n // { x: 242.158273381295, y: 3.29411764705882, size: 1 },\r\n // { x: 247.985611510791, y: 3.25490196078431, size: 1 },\r\n // { x: 248.63309352518, y: 2.98039215686275, size: 1 },\r\n // { x: 249.280575539568, y: 3.13725490196078, size: 1 },\r\n // { x: 270, y: 3.2156862745098, size: 1 },\r\n // { x: 270.647482014389, y: 3.09803921568627, size: 1 },\r\n // { x: 291.36690647482, y: 3.29411764705882, size: 1 },\r\n // { x: 292.014388489209, y: 2.82352941176471, size: 1 },\r\n // { x: 292.661870503597, y: 2.98039215686275, size: 1 },\r\n // { x: 303.669064748201, y: 3.33333333333333, size: 1 },\r\n // { x: 312.086330935252, y: 3.05882352941176, size: 1 },\r\n // { x: 314.028776978417, y: 2.82352941176471, size: 1 },\r\n // { x: 330.215827338129, y: 3.92156862745098, size: 1 },\r\n // { x: 335.395683453237, y: 2.94117647058824, size: 1 },\r\n // { x: 356.762589928058, y: 2.58823529411765, size: 1 },\r\n // { x: 357.410071942446, y: 2.47058823529412, size: 1 },\r\n // { x: 40.1438848920863, y: 3.17647058823529, size: 1 },\r\n // { x: 61.5107913669065, y: 2.82352941176471, size: 1 },\r\n // { x: 62.158273381295, y: 2.74509803921569, size: 1 },\r\n // { x: 95.8273381294964, y: 4.15686274509804, size: 1 },\r\n // { x: 126.258992805755, y: 3.09803921568627, size: 1 },\r\n // { x: 147.625899280576, y: 3.09803921568627, size: 1 },\r\n // { x: 168.992805755396, y: 3.13725490196078, size: 1 },\r\n // { x: 169.640287769784, y: 2.74509803921569, size: 1 },\r\n // { x: 170.287769784173, y: 2.70588235294118, size: 1 },\r\n // { x: 170.935251798561, y: 2.23529411764706, size: 1 },\r\n // { x: 171.58273381295, y: 2.31372549019608, size: 1 },\r\n // { x: 182.589928057554, y: 3.41176470588235, size: 1 },\r\n // { x: 186.474820143885, y: 3.41176470588235, size: 1 },\r\n // { x: 189.064748201439, y: 3.33333333333333, size: 1 },\r\n // { x: 190.359712230216, y: 3.09803921568627, size: 1 },\r\n // { x: 191.007194244604, y: 2.82352941176471, size: 1 },\r\n // { x: 191.654676258993, y: 2.82352941176471, size: 1 },\r\n // { x: 196.187050359712, y: 3.96078431372549, size: 1 },\r\n // { x: 197.482014388489, y: 3.88235294117647, size: 1 },\r\n // { x: 202.661870503597, y: 3.25490196078431, size: 1 },\r\n // { x: 213.021582733813, y: 3.05882352941176, size: 1 },\r\n // { x: 219.496402877698, y: 3.13725490196078, size: 1 },\r\n // { x: 225.971223021583, y: 3.13725490196078, size: 1 },\r\n // { x: 227.26618705036, y: 3.2156862745098, size: 1 },\r\n // { x: 231.798561151079, y: 3.2156862745098, size: 1 },\r\n // { x: 233.741007194245, y: 3.13725490196078, size: 1 },\r\n // { x: 245.395683453237, y: 3.92156862745098, size: 1 },\r\n // { x: 254.460431654676, y: 3.33333333333333, size: 1 },\r\n // { x: 255.107913669065, y: 3.09803921568627, size: 1 },\r\n // { x: 255.755395683453, y: 3.05882352941176, size: 1 },\r\n // { x: 256.402877697842, y: 3.2156862745098, size: 1 },\r\n // { x: 266.762589928058, y: 3.33333333333333, size: 1 },\r\n // { x: 271.942446043165, y: 3.37254901960784, size: 1 },\r\n // { x: 277.122302158273, y: 2.90196078431373, size: 1 },\r\n // { x: 277.769784172662, y: 2.98039215686275, size: 1 },\r\n // { x: 290.071942446043, y: 3.88235294117647, size: 1 },\r\n // { x: 318.561151079137, y: 3.33333333333333, size: 1 },\r\n // { x: 319.208633093525, y: 3.17647058823529, size: 1 },\r\n // { x: 319.856115107914, y: 3.05882352941176, size: 1 },\r\n // { x: 320.503597122302, y: 3.09803921568627, size: 1 },\r\n // { x: 321.151079136691, y: 3.05882352941176, size: 1 },\r\n // { x: 340.575539568345, y: 3.29411764705882, size: 1 },\r\n // { x: 341.870503597122, y: 2.94117647058824, size: 1 },\r\n // { x: 342.517985611511, y: 2.90196078431373, size: 1 },\r\n // { x: 4.54054054054054, y: 3.25490196078431, size: 1 },\r\n // { x: 7.13513513513514, y: 3.41176470588235, size: 1 },\r\n // { x: 11.6756756756757, y: 3.29411764705882, size: 1 },\r\n // { x: 12.972972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 20.1081081081081, y: 3.56862745098039, size: 1 },\r\n // { x: 24, y: 3.2156862745098, size: 1 },\r\n // { x: 24.6486486486486, y: 3.05882352941176, size: 1 },\r\n // { x: 25.2972972972973, y: 2.43137254901961, size: 1 },\r\n // { x: 25.9459459459459, y: 2.47058823529412, size: 1 },\r\n // { x: 29.1891891891892, y: 3.37254901960784, size: 1 },\r\n // { x: 29.8378378378378, y: 3.41176470588235, size: 1 },\r\n // { x: 31.7837837837838, y: 3.17647058823529, size: 1 },\r\n // { x: 33.0810810810811, y: 3.29411764705882, size: 1 },\r\n // { x: 33.7297297297297, y: 3.29411764705882, size: 1 },\r\n // { x: 34.3783783783784, y: 3.2156862745098, size: 1 },\r\n // { x: 35.6756756756757, y: 3.33333333333333, size: 1 },\r\n // { x: 36.972972972973, y: 3.2156862745098, size: 1 },\r\n // { x: 39.5675675675676, y: 3.37254901960784, size: 1 },\r\n // { x: 40.8648648648649, y: 3.37254901960784, size: 1 },\r\n // { x: 44.1081081081081, y: 3.2156862745098, size: 1 },\r\n // { x: 49.2972972972973, y: 3.25490196078431, size: 1 },\r\n // { x: 49.9459459459459, y: 3.33333333333333, size: 1 },\r\n // { x: 55.7837837837838, y: 3.33333333333333, size: 1 },\r\n // { x: 57.7297297297297, y: 3.33333333333333, size: 1 },\r\n // { x: 58.3783783783784, y: 3.37254901960784, size: 1 },\r\n // { x: 60.3243243243243, y: 3.52941176470588, size: 1 },\r\n // { x: 63.5675675675676, y: 3.45098039215686, size: 1 },\r\n // { x: 72, y: 3.41176470588235, size: 1 },\r\n // { x: 74.5945945945946, y: 3.68627450980392, size: 1 },\r\n // { x: 75.2432432432432, y: 3.64705882352941, size: 1 },\r\n // { x: 75.8918918918919, y: 3.56862745098039, size: 1 },\r\n // { x: 79.7837837837838, y: 3.6078431372549, size: 1 },\r\n // { x: 81.0810810810811, y: 3.49019607843137, size: 1 },\r\n // { x: 83.027027027027, y: 3.29411764705882, size: 1 },\r\n // { x: 87.5675675675676, y: 3.41176470588235, size: 1 },\r\n // { x: 88.2162162162162, y: 3.33333333333333, size: 1 },\r\n // { x: 88.8648648648649, y: 3.37254901960784, size: 1 },\r\n // { x: 90.8108108108108, y: 3.29411764705882, size: 1 },\r\n // { x: 91.4594594594595, y: 3.56862745098039, size: 1 },\r\n // { x: 94.7027027027027, y: 3.41176470588235, size: 1 },\r\n // { x: 96.6486486486486, y: 3.33333333333333, size: 1 },\r\n // { x: 98.5945945945946, y: 3.64705882352941, size: 1 },\r\n // { x: 103.135135135135, y: 3.92156862745098, size: 1 },\r\n // { x: 107.027027027027, y: 3.37254901960784, size: 1 },\r\n // { x: 111.567567567568, y: 3.33333333333333, size: 1 },\r\n // { x: 116.756756756757, y: 3.37254901960784, size: 1 },\r\n // { x: 118.702702702703, y: 3.25490196078431, size: 1 },\r\n // { x: 123.243243243243, y: 3.52941176470588, size: 1 },\r\n // { x: 129.081081081081, y: 3.37254901960784, size: 1 },\r\n // { x: 133.621621621622, y: 2.74509803921569, size: 1 },\r\n // { x: 134.27027027027, y: 3.01960784313725, size: 1 },\r\n // { x: 134.918918918919, y: 2.54901960784314, size: 1 },\r\n // { x: 135.567567567568, y: 2.50980392156863, size: 1 },\r\n // { x: 137.513513513514, y: 3.37254901960784, size: 1 },\r\n // { x: 139.459459459459, y: 3.76470588235294, size: 1 },\r\n // { x: 145.945945945946, y: 3.56862745098039, size: 1 },\r\n // { x: 153.081081081081, y: 3.25490196078431, size: 1 },\r\n // { x: 153.72972972973, y: 3.13725490196078, size: 1 },\r\n // { x: 155.027027027027, y: 2.66666666666667, size: 1 },\r\n // { x: 155.675675675676, y: 2.74509803921569, size: 1 },\r\n // { x: 163.459459459459, y: 3.88235294117647, size: 1 },\r\n // { x: 166.702702702703, y: 3.45098039215686, size: 1 },\r\n // { x: 169.945945945946, y: 3.56862745098039, size: 1 },\r\n // { x: 170.594594594595, y: 3.68627450980392, size: 1 },\r\n // { x: 173.189189189189, y: 3.37254901960784, size: 1 },\r\n // { x: 173.837837837838, y: 3.6078431372549, size: 1 },\r\n // { x: 176.432432432432, y: 3.2156862745098, size: 1 },\r\n // { x: 178.378378378378, y: 3.37254901960784, size: 1 },\r\n // { x: 180.972972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 181.621621621622, y: 3.25490196078431, size: 1 },\r\n // { x: 182.27027027027, y: 3.29411764705882, size: 1 },\r\n // { x: 184.216216216216, y: 3.2156862745098, size: 1 },\r\n // { x: 185.513513513514, y: 3.37254901960784, size: 1 },\r\n // { x: 186.810810810811, y: 3.45098039215686, size: 1 },\r\n // { x: 188.756756756757, y: 3.29411764705882, size: 1 },\r\n // { x: 189.405405405405, y: 3.41176470588235, size: 1 },\r\n // { x: 190.054054054054, y: 3.33333333333333, size: 1 },\r\n // { x: 191.351351351351, y: 3.33333333333333, size: 1 },\r\n // { x: 193.297297297297, y: 3.37254901960784, size: 1 },\r\n // { x: 194.594594594595, y: 3.29411764705882, size: 1 },\r\n // { x: 195.243243243243, y: 3.37254901960784, size: 1 },\r\n // { x: 195.891891891892, y: 3.29411764705882, size: 1 },\r\n // { x: 197.837837837838, y: 3.2156862745098, size: 1 },\r\n // { x: 198.486486486486, y: 3.13725490196078, size: 1 },\r\n // { x: 204.972972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 212.108108108108, y: 3.41176470588235, size: 1 },\r\n // { x: 217.945945945946, y: 3.29411764705882, size: 1 },\r\n // { x: 218.594594594595, y: 3.25490196078431, size: 1 },\r\n // { x: 219.243243243243, y: 3.2156862745098, size: 1 },\r\n // { x: 219.891891891892, y: 2.66666666666667, size: 1 },\r\n // { x: 220.540540540541, y: 2.54901960784314, size: 1 },\r\n // { x: 223.783783783784, y: 3.68627450980392, size: 1 },\r\n // { x: 225.081081081081, y: 3.52941176470588, size: 1 },\r\n // { x: 225.72972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 240, y: 3.13725490196078, size: 1 },\r\n // { x: 241.297297297297, y: 2.62745098039216, size: 1 },\r\n // { x: 241.945945945946, y: 2.58823529411765, size: 1 },\r\n // { x: 244.540540540541, y: 3.84313725490196, size: 1 },\r\n // { x: 245.837837837838, y: 3.52941176470588, size: 1 },\r\n // { x: 247.135135135135, y: 3.68627450980392, size: 1 },\r\n // { x: 255.567567567568, y: 3.6078431372549, size: 1 },\r\n // { x: 256.864864864865, y: 3.88235294117647, size: 1 },\r\n // { x: 264, y: 3.33333333333333, size: 1 },\r\n // { x: 276.972972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 288, y: 3.72549019607843, size: 1 },\r\n // { x: 295.783783783784, y: 3.33333333333333, size: 1 },\r\n // { x: 299.675675675676, y: 3.92156862745098, size: 1 },\r\n // { x: 300.324324324324, y: 3.84313725490196, size: 1 },\r\n // { x: 302.918918918919, y: 3.33333333333333, size: 1 },\r\n // { x: 304.864864864865, y: 3.29411764705882, size: 1 },\r\n // { x: 305.513513513513, y: 3.13725490196078, size: 1 },\r\n // { x: 306.162162162162, y: 2.98039215686275, size: 1 },\r\n // { x: 307.459459459459, y: 3.41176470588235, size: 1 },\r\n // { x: 326.27027027027, y: 3.05882352941176, size: 1 },\r\n // { x: 326.918918918919, y: 3.2156862745098, size: 1 },\r\n // { x: 327.567567567568, y: 2.90196078431373, size: 1 },\r\n // { x: 328.216216216216, y: 2.43137254901961, size: 1 },\r\n // { x: 330.162162162162, y: 3.41176470588235, size: 1 },\r\n // { x: 332.108108108108, y: 3.37254901960784, size: 1 },\r\n // { x: 333.405405405405, y: 3.41176470588235, size: 1 },\r\n // { x: 334.702702702703, y: 3.45098039215686, size: 1 },\r\n // { x: 347.675675675676, y: 3.2156862745098, size: 1 },\r\n // { x: 348.324324324324, y: 3.05882352941176, size: 1 },\r\n // { x: 349.621621621622, y: 2.11764705882353, size: 1 },\r\n // { x: 350.27027027027, y: 2.3921568627451, size: 1 },\r\n // { x: 350.918918918919, y: 3.68627450980392, size: 1 },\r\n // { x: 354.810810810811, y: 3.76470588235294, size: 1 },\r\n // { x: 359.351351351351, y: 3.84313725490196, size: 1 },\r\n // { x: 11.6546762589928, y: 2.94117647058824, size: 1 },\r\n // { x: 33.0215827338129, y: 2.94117647058824, size: 1 },\r\n // { x: 40.1438848920863, y: 3.80392156862745, size: 1 },\r\n // { x: 53.7410071942446, y: 3.25490196078431, size: 1 },\r\n // { x: 54.3884892086331, y: 3.01960784313725, size: 1 },\r\n // { x: 75.7553956834532, y: 3.05882352941176, size: 1 },\r\n // { x: 76.4028776978417, y: 3.05882352941176, size: 1 },\r\n // { x: 97.1223021582734, y: 3.13725490196078, size: 1 },\r\n // { x: 97.7697841726619, y: 3.01960784313725, size: 1 },\r\n // { x: 101.654676258993, y: 3.88235294117647, size: 1 },\r\n // { x: 108.776978417266, y: 3.37254901960784, size: 1 },\r\n // { x: 116.546762589928, y: 3.88235294117647, size: 1 },\r\n // { x: 119.136690647482, y: 2.86274509803922, size: 1 },\r\n // { x: 119.784172661871, y: 2.82352941176471, size: 1 },\r\n // { x: 121.079136690647, y: 3.25490196078431, size: 1 },\r\n // { x: 124.964028776978, y: 3.37254901960784, size: 1 },\r\n // { x: 140.503597122302, y: 3.13725490196078, size: 1 },\r\n // { x: 160.575539568345, y: 3.25490196078431, size: 1 },\r\n // { x: 161.870503597122, y: 3.17647058823529, size: 1 },\r\n // { x: 190.359712230216, y: 3.33333333333333, size: 1 },\r\n // { x: 205.251798561151, y: 2.90196078431373, size: 1 },\r\n // { x: 210.431654676259, y: 3.25490196078431, size: 1 },\r\n // { x: 213.021582733813, y: 3.09803921568627, size: 1 },\r\n // { x: 249.280575539568, y: 2.86274509803922, size: 1 },\r\n // { x: 270, y: 2.98039215686275, size: 1 },\r\n // { x: 270.647482014389, y: 3.2156862745098, size: 1 },\r\n // { x: 290.719424460432, y: 3.2156862745098, size: 1 },\r\n // { x: 292.014388489209, y: 2.31372549019608, size: 1 },\r\n // { x: 333.453237410072, y: 3.17647058823529, size: 1 },\r\n // { x: 334.748201438849, y: 2.94117647058824, size: 1 },\r\n // { x: 335.395683453237, y: 3.05882352941176, size: 1 },\r\n // { x: 336.043165467626, y: 3.13725490196078, size: 1 },\r\n // { x: 337.985611510791, y: 3.41176470588235, size: 1 },\r\n // { x: 338.63309352518, y: 3.29411764705882, size: 1 },\r\n // { x: 339.928057553957, y: 3.2156862745098, size: 1 },\r\n // { x: 347.697841726619, y: 3.25490196078431, size: 1 },\r\n // { x: 348.345323741007, y: 3.17647058823529, size: 1 },\r\n // { x: 348.992805755396, y: 3.13725490196078, size: 1 },\r\n // { x: 349.640287769784, y: 3.33333333333333, size: 1 },\r\n // { x: 351.58273381295, y: 3.2156862745098, size: 1 },\r\n // { x: 352.230215827338, y: 3.25490196078431, size: 1 },\r\n // { x: 356.762589928058, y: 3.01960784313725, size: 1 },\r\n // { x: 16.1870503597122, y: 3.37254901960784, size: 1 },\r\n // { x: 17.4820143884892, y: 3.25490196078431, size: 1 },\r\n // { x: 36.9064748201439, y: 3.37254901960784, size: 1 },\r\n // { x: 40.1438848920863, y: 3.33333333333333, size: 1 },\r\n // { x: 50.5035971223022, y: 4.11764705882353, size: 1 },\r\n // { x: 104.244604316547, y: 3.01960784313725, size: 1 },\r\n // { x: 104.892086330935, y: 2.70588235294118, size: 1 },\r\n // { x: 112.661870503597, y: 3.88235294117647, size: 1 },\r\n // { x: 115.251798561151, y: 3.92156862745098, size: 1 },\r\n // { x: 115.89928057554, y: 3.92156862745098, size: 1 },\r\n // { x: 119.136690647482, y: 3.76470588235294, size: 1 },\r\n // { x: 125.611510791367, y: 3.09803921568627, size: 1 },\r\n // { x: 145.035971223022, y: 3.33333333333333, size: 1 },\r\n // { x: 145.68345323741, y: 3.17647058823529, size: 1 },\r\n // { x: 146.330935251799, y: 3.2156862745098, size: 1 },\r\n // { x: 147.625899280576, y: 2.54901960784314, size: 1 },\r\n // { x: 148.273381294964, y: 2.54901960784314, size: 1 },\r\n // { x: 167.697841726619, y: 2.98039215686275, size: 1 },\r\n // { x: 168.992805755396, y: 2.31372549019608, size: 1 },\r\n // { x: 169.640287769784, y: 2.11764705882353, size: 1 },\r\n // { x: 170.287769784173, y: 3.13725490196078, size: 1 },\r\n // { x: 170.935251798561, y: 3.33333333333333, size: 1 },\r\n // { x: 190.359712230216, y: 2.98039215686275, size: 1 },\r\n // { x: 191.007194244604, y: 1.52941176470588, size: 1 },\r\n // { x: 208.489208633094, y: 3.80392156862745, size: 1 },\r\n // { x: 218.201438848921, y: 3.84313725490196, size: 1 },\r\n // { x: 220.791366906475, y: 4, size: 1 },\r\n // { x: 233.093525179856, y: 3.09803921568627, size: 1 },\r\n // { x: 241.510791366906, y: 3.84313725490196, size: 1 },\r\n // { x: 242.158273381295, y: 3.88235294117647, size: 1 },\r\n // { x: 254.460431654676, y: 3.29411764705882, size: 1 },\r\n // { x: 271.294964028777, y: 3.92156862745098, size: 1 },\r\n // { x: 295.89928057554, y: 3.2156862745098, size: 1 },\r\n // { x: 304.31654676259, y: 3.92156862745098, size: 1 },\r\n // { x: 306.258992805755, y: 3.84313725490196, size: 1 },\r\n // { x: 318.561151079137, y: 3.09803921568627, size: 1 },\r\n // { x: 320.503597122302, y: 3.13725490196078, size: 1 },\r\n // { x: 323.093525179856, y: 3.2156862745098, size: 1 },\r\n // { x: 327.625899280576, y: 3.25490196078431, size: 1 },\r\n // { x: 332.158273381295, y: 3.37254901960784, size: 1 },\r\n // { x: 347.05035971223, y: 3.96078431372549, size: 1 },\r\n // { x: 13.5971223021583, y: 3.96078431372549, size: 1 },\r\n // { x: 23.3093525179856, y: 3.2156862745098, size: 1 },\r\n // { x: 23.9568345323741, y: 3.09803921568627, size: 1 },\r\n // { x: 25.2517985611511, y: 2.43137254901961, size: 1 },\r\n // { x: 66.6906474820144, y: 3.09803921568627, size: 1 },\r\n // { x: 130.791366906475, y: 3.80392156862745, size: 1 },\r\n // { x: 158.63309352518, y: 3.80392156862745, size: 1 },\r\n // { x: 165.107913669065, y: 4, size: 1 },\r\n // { x: 170.287769784173, y: 3.96078431372549, size: 1 },\r\n // { x: 178.705035971223, y: 3.37254901960784, size: 1 },\r\n // { x: 184.532374100719, y: 4.03921568627451, size: 1 },\r\n // { x: 196.834532374101, y: 3.33333333333333, size: 1 },\r\n // { x: 198.129496402878, y: 3.29411764705882, size: 1 },\r\n // { x: 212.374100719424, y: 4, size: 1 },\r\n // { x: 239.568345323741, y: 3.41176470588235, size: 1 },\r\n // { x: 240.863309352518, y: 3.17647058823529, size: 1 },\r\n // { x: 242.158273381295, y: 3.92156862745098, size: 1 },\r\n // { x: 242.805755395683, y: 3.33333333333333, size: 1 },\r\n // { x: 262.877697841727, y: 3.2156862745098, size: 1 },\r\n // { x: 277.769784172662, y: 4, size: 1 },\r\n // { x: 280.359712230216, y: 3.92156862745098, size: 1 },\r\n // { x: 284.244604316547, y: 2.82352941176471, size: 1 },\r\n // { x: 284.892086330935, y: 3.17647058823529, size: 1 },\r\n // { x: 288.129496402878, y: 3.84313725490196, size: 1 },\r\n // { x: 291.36690647482, y: 3.88235294117647, size: 1 },\r\n // { x: 326.978417266187, y: 3.01960784313725, size: 1 },\r\n // { x: 330.215827338129, y: 3.29411764705882, size: 1 },\r\n // { x: 345.107913669065, y: 3.33333333333333, size: 1 },\r\n // { x: 350.287769784173, y: 4, size: 1 },\r\n // { x: 6.48648648648649, y: 3.80392156862745, size: 1 },\r\n // { x: 7.13513513513514, y: 3.72549019607843, size: 1 },\r\n // { x: 7.78378378378378, y: 3.92156862745098, size: 1 },\r\n // { x: 8.43243243243243, y: 3.72549019607843, size: 1 },\r\n // { x: 10.3783783783784, y: 3.33333333333333, size: 1 },\r\n // { x: 11.027027027027, y: 3.17647058823529, size: 1 },\r\n // { x: 15.5675675675676, y: 3.76470588235294, size: 1 },\r\n // { x: 16.2162162162162, y: 3.56862745098039, size: 1 },\r\n // { x: 16.8648648648649, y: 3.80392156862745, size: 1 },\r\n // { x: 17.5135135135135, y: 3.45098039215686, size: 1 },\r\n // { x: 24, y: 3.84313725490196, size: 1 },\r\n // { x: 25.2972972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 25.9459459459459, y: 3.88235294117647, size: 1 },\r\n // { x: 32.4324324324324, y: 3.41176470588235, size: 1 },\r\n // { x: 34.3783783783784, y: 3.41176470588235, size: 1 },\r\n // { x: 39.5675675675676, y: 3.92156862745098, size: 1 },\r\n // { x: 46.0540540540541, y: 3.49019607843137, size: 1 },\r\n // { x: 51.8918918918919, y: 3.13725490196078, size: 1 },\r\n // { x: 53.1891891891892, y: 3.2156862745098, size: 1 },\r\n // { x: 53.8378378378378, y: 2.94117647058824, size: 1 },\r\n // { x: 54.4864864864865, y: 3.41176470588235, size: 1 },\r\n // { x: 57.7297297297297, y: 3.80392156862745, size: 1 },\r\n // { x: 66.8108108108108, y: 3.80392156862745, size: 1 },\r\n // { x: 68.7567567567568, y: 3.72549019607843, size: 1 },\r\n // { x: 70.054054054054, y: 3.84313725490196, size: 1 },\r\n // { x: 71.3513513513514, y: 3.80392156862745, size: 1 },\r\n // { x: 73.2972972972973, y: 3.92156862745098, size: 1 },\r\n // { x: 79.7837837837838, y: 3.84313725490196, size: 1 },\r\n // { x: 81.7297297297297, y: 3.80392156862745, size: 1 },\r\n // { x: 85.6216216216216, y: 3.72549019607843, size: 1 },\r\n // { x: 92.7567567567568, y: 3.84313725490196, size: 1 },\r\n // { x: 97.2972972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 98.5945945945946, y: 3.80392156862745, size: 1 },\r\n // { x: 99.2432432432432, y: 3.56862745098039, size: 1 },\r\n // { x: 103.135135135135, y: 3.37254901960784, size: 1 },\r\n // { x: 103.783783783784, y: 3.80392156862745, size: 1 },\r\n // { x: 107.675675675676, y: 3.68627450980392, size: 1 },\r\n // { x: 110.27027027027, y: 3.52941176470588, size: 1 },\r\n // { x: 111.567567567568, y: 3.56862745098039, size: 1 },\r\n // { x: 118.054054054054, y: 3.37254901960784, size: 1 },\r\n // { x: 118.702702702703, y: 3.17647058823529, size: 1 },\r\n // { x: 120.648648648649, y: 3.76470588235294, size: 1 },\r\n // { x: 121.297297297297, y: 4.03921568627451, size: 1 },\r\n // { x: 121.945945945946, y: 3.80392156862745, size: 1 },\r\n // { x: 122.594594594595, y: 3.92156862745098, size: 1 },\r\n // { x: 123.891891891892, y: 3.76470588235294, size: 1 },\r\n // { x: 124.540540540541, y: 3.84313725490196, size: 1 },\r\n // { x: 127.783783783784, y: 4.03921568627451, size: 1 },\r\n // { x: 129.72972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 130.378378378378, y: 3.92156862745098, size: 1 },\r\n // { x: 131.675675675676, y: 4.07843137254902, size: 1 },\r\n // { x: 135.567567567568, y: 3.76470588235294, size: 1 },\r\n // { x: 136.216216216216, y: 3.80392156862745, size: 1 },\r\n // { x: 140.108108108108, y: 3.29411764705882, size: 1 },\r\n // { x: 143.351351351351, y: 3.92156862745098, size: 1 },\r\n // { x: 160.216216216216, y: 3.33333333333333, size: 1 },\r\n // { x: 160.864864864865, y: 3.37254901960784, size: 1 },\r\n // { x: 162.162162162162, y: 3.17647058823529, size: 1 },\r\n // { x: 164.108108108108, y: 3.33333333333333, size: 1 },\r\n // { x: 166.702702702703, y: 3.41176470588235, size: 1 },\r\n // { x: 172.540540540541, y: 3.33333333333333, size: 1 },\r\n // { x: 173.189189189189, y: 3.17647058823529, size: 1 },\r\n // { x: 177.081081081081, y: 3.49019607843137, size: 1 },\r\n // { x: 178.378378378378, y: 3.41176470588235, size: 1 },\r\n // { x: 179.027027027027, y: 3.29411764705882, size: 1 },\r\n // { x: 179.675675675676, y: 3.25490196078431, size: 1 },\r\n // { x: 180.324324324324, y: 3.37254901960784, size: 1 },\r\n // { x: 180.972972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 184.216216216216, y: 3.33333333333333, size: 1 },\r\n // { x: 184.864864864865, y: 3.56862745098039, size: 1 },\r\n // { x: 189.405405405405, y: 3.37254901960784, size: 1 },\r\n // { x: 190.054054054054, y: 3.49019607843137, size: 1 },\r\n // { x: 191.351351351351, y: 3.80392156862745, size: 1 },\r\n // { x: 201.081081081081, y: 3.84313725490196, size: 1 },\r\n // { x: 204.324324324324, y: 3.49019607843137, size: 1 },\r\n // { x: 204.972972972973, y: 3.05882352941176, size: 1 },\r\n // { x: 205.621621621622, y: 2.98039215686275, size: 1 },\r\n // { x: 210.162162162162, y: 3.72549019607843, size: 1 },\r\n // { x: 210.810810810811, y: 3.92156862745098, size: 1 },\r\n // { x: 211.459459459459, y: 3.37254901960784, size: 1 },\r\n // { x: 227.675675675676, y: 3.80392156862745, size: 1 },\r\n // { x: 228.324324324324, y: 3.80392156862745, size: 1 },\r\n // { x: 231.567567567568, y: 3.76470588235294, size: 1 },\r\n // { x: 232.216216216216, y: 3.84313725490196, size: 1 },\r\n // { x: 234.810810810811, y: 3.84313725490196, size: 1 },\r\n // { x: 235.459459459459, y: 3.92156862745098, size: 1 },\r\n // { x: 239.351351351351, y: 3.80392156862745, size: 1 },\r\n // { x: 241.945945945946, y: 4.19607843137255, size: 1 },\r\n // { x: 243.891891891892, y: 3.88235294117647, size: 1 },\r\n // { x: 245.837837837838, y: 3.76470588235294, size: 1 },\r\n // { x: 249.72972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 251.027027027027, y: 3.52941176470588, size: 1 },\r\n // { x: 254.918918918919, y: 3.92156862745098, size: 1 },\r\n // { x: 258.162162162162, y: 4.07843137254902, size: 1 },\r\n // { x: 263.351351351351, y: 3.72549019607843, size: 1 },\r\n // { x: 265.945945945946, y: 3.45098039215686, size: 1 },\r\n // { x: 269.189189189189, y: 3.80392156862745, size: 1 },\r\n // { x: 275.675675675676, y: 3.68627450980392, size: 1 },\r\n // { x: 277.621621621622, y: 3.96078431372549, size: 1 },\r\n // { x: 279.567567567568, y: 3.80392156862745, size: 1 },\r\n // { x: 280.216216216216, y: 3.88235294117647, size: 1 },\r\n // { x: 281.513513513513, y: 3.76470588235294, size: 1 },\r\n // { x: 286.702702702703, y: 3.88235294117647, size: 1 },\r\n // { x: 289.297297297297, y: 3.80392156862745, size: 1 },\r\n // { x: 290.594594594595, y: 3.41176470588235, size: 1 },\r\n // { x: 292.540540540541, y: 3.25490196078431, size: 1 },\r\n // { x: 294.486486486487, y: 3.29411764705882, size: 1 },\r\n // { x: 295.135135135135, y: 3.72549019607843, size: 1 },\r\n // { x: 301.621621621622, y: 3.80392156862745, size: 1 },\r\n // { x: 305.513513513513, y: 3.52941176470588, size: 1 },\r\n // { x: 306.162162162162, y: 3.52941176470588, size: 1 },\r\n // { x: 312.648648648649, y: 3.33333333333333, size: 1 },\r\n // { x: 313.297297297297, y: 3.25490196078431, size: 1 },\r\n // { x: 313.945945945946, y: 3.2156862745098, size: 1 },\r\n // { x: 315.891891891892, y: 3.49019607843137, size: 1 },\r\n // { x: 317.189189189189, y: 3.72549019607843, size: 1 },\r\n // { x: 318.486486486487, y: 3.80392156862745, size: 1 },\r\n // { x: 319.783783783784, y: 3.80392156862745, size: 1 },\r\n // { x: 323.027027027027, y: 3.92156862745098, size: 1 },\r\n // { x: 323.675675675676, y: 3.80392156862745, size: 1 },\r\n // { x: 339.243243243243, y: 3.45098039215686, size: 1 },\r\n // { x: 339.891891891892, y: 3.45098039215686, size: 1 },\r\n // { x: 341.837837837838, y: 3.45098039215686, size: 1 },\r\n // { x: 356.756756756757, y: 3.33333333333333, size: 1 },\r\n // { x: 31.726618705036, y: 3.25490196078431, size: 1 },\r\n // { x: 39.4964028776978, y: 3.17647058823529, size: 1 },\r\n // { x: 41.4388489208633, y: 4.03921568627451, size: 1 },\r\n // { x: 46.6187050359712, y: 4, size: 1 },\r\n // { x: 53.7410071942446, y: 4, size: 1 },\r\n // { x: 104.892086330935, y: 3.01960784313725, size: 1 },\r\n // { x: 125.611510791367, y: 3.2156862745098, size: 1 },\r\n // { x: 126.258992805755, y: 3.17647058823529, size: 1 },\r\n // { x: 132.73381294964, y: 3.88235294117647, size: 1 },\r\n // { x: 144.388489208633, y: 4.07843137254902, size: 1 },\r\n // { x: 147.625899280576, y: 2.90196078431373, size: 1 },\r\n // { x: 151.510791366906, y: 3.84313725490196, size: 1 },\r\n // { x: 269.352517985611, y: 3.88235294117647, size: 1 },\r\n // { x: 277.122302158273, y: 2.66666666666667, size: 1 },\r\n // { x: 318.561151079137, y: 3.17647058823529, size: 1 },\r\n // { x: 319.856115107914, y: 3.13725490196078, size: 1 },\r\n // { x: 341.870503597122, y: 3.01960784313725, size: 1 },\r\n // { x: 7.76978417266187, y: 4, size: 1 },\r\n // { x: 24.6043165467626, y: 2.3921568627451, size: 1 },\r\n // { x: 25.2517985611511, y: 2.23529411764706, size: 1 },\r\n // { x: 35.6115107913669, y: 3.76470588235294, size: 1 },\r\n // { x: 45.9712230215827, y: 3.33333333333333, size: 1 },\r\n // { x: 46.6187050359712, y: 3.01960784313725, size: 1 },\r\n // { x: 49.8561151079137, y: 4.03921568627451, size: 1 },\r\n // { x: 68.6330935251799, y: 3.33333333333333, size: 1 },\r\n // { x: 82.8776978417266, y: 4, size: 1 },\r\n // { x: 84.8201438848921, y: 3.84313725490196, size: 1 },\r\n // { x: 110.071942446043, y: 3.25490196078431, size: 1 },\r\n // { x: 110.719424460432, y: 2.82352941176471, size: 1 },\r\n // { x: 111.36690647482, y: 2.74509803921569, size: 1 },\r\n // { x: 132.086330935252, y: 3.33333333333333, size: 1 },\r\n // { x: 132.73381294964, y: 3.05882352941176, size: 1 },\r\n // { x: 133.381294964029, y: 3.13725490196078, size: 1 },\r\n // { x: 154.748201438849, y: 2.82352941176471, size: 1 },\r\n // { x: 173.525179856115, y: 3.84313725490196, size: 1 },\r\n // { x: 185.827338129496, y: 4, size: 1 },\r\n // { x: 198.129496402878, y: 3.01960784313725, size: 1 },\r\n // { x: 218.848920863309, y: 2.7843137254902, size: 1 },\r\n // { x: 219.496402877698, y: 2.98039215686275, size: 1 },\r\n // { x: 220.143884892086, y: 3.05882352941176, size: 1 },\r\n // { x: 222.73381294964, y: 3.33333333333333, size: 1 },\r\n // { x: 230.503597122302, y: 3.37254901960784, size: 1 },\r\n // { x: 233.093525179856, y: 3.17647058823529, size: 1 },\r\n // { x: 236.978417266187, y: 3.29411764705882, size: 1 },\r\n // { x: 262.230215827338, y: 3.13725490196078, size: 1 },\r\n // { x: 262.877697841727, y: 2.90196078431373, size: 1 },\r\n // { x: 278.41726618705, y: 3.88235294117647, size: 1 },\r\n // { x: 284.244604316547, y: 3.37254901960784, size: 1 },\r\n // { x: 286.187050359712, y: 4.07843137254902, size: 1 },\r\n // { x: 304.964028776978, y: 3.05882352941176, size: 1 },\r\n // { x: 340.575539568345, y: 3.92156862745098, size: 1 },\r\n // { x: 348.345323741007, y: 2.98039215686275, size: 1 },\r\n // { x: 0.647482014388489, y: 3.33333333333333, size: 1 },\r\n // { x: 32.3741007194245, y: 3.13725490196078, size: 1 },\r\n // { x: 52.4460431654676, y: 3.80392156862745, size: 1 },\r\n // { x: 73.8129496402878, y: 3.05882352941176, size: 1 },\r\n // { x: 74.4604316546763, y: 2.90196078431373, size: 1 },\r\n // { x: 75.1079136690647, y: 1.96078431372549, size: 1 },\r\n // { x: 75.7553956834532, y: 2.23529411764706, size: 1 },\r\n // { x: 76.4028776978417, y: 2.3921568627451, size: 1 },\r\n // { x: 77.0503597122302, y: 2.43137254901961, size: 1 },\r\n // { x: 79.6402877697842, y: 2.90196078431373, size: 1 },\r\n // { x: 90.6474820143885, y: 2.86274509803922, size: 1 },\r\n // { x: 91.9424460431655, y: 3.25490196078431, size: 1 },\r\n // { x: 95.1798561151079, y: 3.25490196078431, size: 1 },\r\n // { x: 96.4748201438849, y: 2.70588235294118, size: 1 },\r\n // { x: 97.1223021582734, y: 3.09803921568627, size: 1 },\r\n // { x: 117.194244604317, y: 3.33333333333333, size: 1 },\r\n // { x: 117.841726618705, y: 3.17647058823529, size: 1 },\r\n // { x: 137.913669064748, y: 3.09803921568627, size: 1 },\r\n // { x: 138.561151079137, y: 3.13725490196078, size: 1 },\r\n // { x: 139.856115107914, y: 2.74509803921569, size: 1 },\r\n // { x: 159.928057553957, y: 3.2156862745098, size: 1 },\r\n // { x: 161.223021582734, y: 2.35294117647059, size: 1 },\r\n // { x: 161.870503597122, y: 2.19607843137255, size: 1 },\r\n // { x: 163.165467625899, y: 3.84313725490196, size: 1 },\r\n // { x: 170.935251798561, y: 3.80392156862745, size: 1 },\r\n // { x: 176.762589928058, y: 3.88235294117647, size: 1 },\r\n // { x: 182.589928057554, y: 2.7843137254902, size: 1 },\r\n // { x: 183.237410071942, y: 3.01960784313725, size: 1 },\r\n // { x: 225.971223021583, y: 2.74509803921569, size: 1 },\r\n // { x: 226.618705035971, y: 2.58823529411765, size: 1 },\r\n // { x: 245.395683453237, y: 3.37254901960784, size: 1 },\r\n // { x: 258.345323741007, y: 3.25490196078431, size: 1 },\r\n // { x: 268.057553956835, y: 3.17647058823529, size: 1 },\r\n // { x: 268.705035971223, y: 3.01960784313725, size: 1 },\r\n // { x: 269.352517985611, y: 2.82352941176471, size: 1 },\r\n // { x: 277.122302158273, y: 4.07843137254902, size: 1 },\r\n // { x: 286.187050359712, y: 3.96078431372549, size: 1 },\r\n // { x: 295.251798561151, y: 3.96078431372549, size: 1 },\r\n // { x: 298.489208633094, y: 3.88235294117647, size: 1 },\r\n // { x: 311.438848920863, y: 3.2156862745098, size: 1 },\r\n // { x: 312.086330935252, y: 2.66666666666667, size: 1 },\r\n // { x: 312.73381294964, y: 2.62745098039216, size: 1 },\r\n // { x: 333.453237410072, y: 3.01960784313725, size: 1 },\r\n // { x: 334.10071942446, y: 1.96078431372549, size: 1 },\r\n // { x: 334.748201438849, y: 3.13725490196078, size: 1 },\r\n // { x: 354.172661870504, y: 3.05882352941176, size: 1 },\r\n // { x: 357.410071942446, y: 3.96078431372549, size: 1 },\r\n // { x: 1.94244604316547, y: 4.15686274509804, size: 1 },\r\n // { x: 3.88489208633094, y: 3.88235294117647, size: 1 },\r\n // { x: 19.4244604316547, y: 4.07843137254902, size: 1 },\r\n // { x: 22.6618705035971, y: 4.07843137254902, size: 1 },\r\n // { x: 29.136690647482, y: 3.92156862745098, size: 1 },\r\n // { x: 72.5179856115108, y: 4.03921568627451, size: 1 },\r\n // { x: 80.9352517985612, y: 3.84313725490196, size: 1 },\r\n // { x: 87.410071942446, y: 3.92156862745098, size: 1 },\r\n // { x: 104.892086330935, y: 3.92156862745098, size: 1 },\r\n // { x: 124.964028776978, y: 3.17647058823529, size: 1 },\r\n // { x: 146.978417266187, y: 3.25490196078431, size: 1 },\r\n // { x: 167.697841726619, y: 3.13725490196078, size: 1 },\r\n // { x: 168.345323741007, y: 3.13725490196078, size: 1 },\r\n // { x: 168.992805755396, y: 3.96078431372549, size: 1 },\r\n // { x: 211.079136690647, y: 3.09803921568627, size: 1 },\r\n // { x: 225.323741007194, y: 3.96078431372549, size: 1 },\r\n // { x: 227.26618705036, y: 3.92156862745098, size: 1 },\r\n // { x: 228.561151079137, y: 3.92156862745098, size: 1 },\r\n // { x: 280.359712230216, y: 3.96078431372549, size: 1 },\r\n // { x: 283.597122302158, y: 4.15686274509804, size: 1 },\r\n // { x: 284.892086330935, y: 3.84313725490196, size: 1 },\r\n // { x: 297.841726618705, y: 3.13725490196078, size: 1 },\r\n // { x: 298.489208633094, y: 3.05882352941176, size: 1 },\r\n // { x: 299.136690647482, y: 3.92156862745098, size: 1 },\r\n // { x: 341.223021582734, y: 3.2156862745098, size: 1 },\r\n // { x: 348.345323741007, y: 3.96078431372549, size: 1 },\r\n // { x: 0.648648648648649, y: 4, size: 1 },\r\n // { x: 2.59459459459459, y: 3.88235294117647, size: 1 },\r\n // { x: 8.43243243243243, y: 3.68627450980392, size: 1 },\r\n // { x: 18.1621621621622, y: 3.76470588235294, size: 1 },\r\n // { x: 26.5945945945946, y: 3.80392156862745, size: 1 },\r\n // { x: 30.4864864864865, y: 3.45098039215686, size: 1 },\r\n // { x: 38.9189189189189, y: 3.84313725490196, size: 1 },\r\n // { x: 39.5675675675676, y: 3.88235294117647, size: 1 },\r\n // { x: 44.7567567567568, y: 3.41176470588235, size: 1 },\r\n // { x: 59.6756756756757, y: 3.37254901960784, size: 1 },\r\n // { x: 67.4594594594595, y: 3.2156862745098, size: 1 },\r\n // { x: 68.7567567567568, y: 3.68627450980392, size: 1 },\r\n // { x: 69.4054054054054, y: 3.52941176470588, size: 1 },\r\n // { x: 86.2702702702703, y: 3.84313725490196, size: 1 },\r\n // { x: 88.2162162162162, y: 3.88235294117647, size: 1 },\r\n // { x: 92.1081081081081, y: 3.37254901960784, size: 1 },\r\n // { x: 110.27027027027, y: 3.29411764705882, size: 1 },\r\n // { x: 112.216216216216, y: 3.52941176470588, size: 1 },\r\n // { x: 117.405405405405, y: 3.92156862745098, size: 1 },\r\n // { x: 123.891891891892, y: 3.56862745098039, size: 1 },\r\n // { x: 129.081081081081, y: 3.96078431372549, size: 1 },\r\n // { x: 129.72972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 131.027027027027, y: 3.41176470588235, size: 1 },\r\n // { x: 140.756756756757, y: 3.80392156862745, size: 1 },\r\n // { x: 149.189189189189, y: 3.68627450980392, size: 1 },\r\n // { x: 152.432432432432, y: 3.13725490196078, size: 1 },\r\n // { x: 153.72972972973, y: 3.05882352941176, size: 1 },\r\n // { x: 154.378378378378, y: 3.05882352941176, size: 1 },\r\n // { x: 158.918918918919, y: 3.76470588235294, size: 1 },\r\n // { x: 160.216216216216, y: 3.64705882352941, size: 1 },\r\n // { x: 162.810810810811, y: 3.76470588235294, size: 1 },\r\n // { x: 165.405405405405, y: 3.72549019607843, size: 1 },\r\n // { x: 168.648648648649, y: 4, size: 1 },\r\n // { x: 170.594594594595, y: 3.92156862745098, size: 1 },\r\n // { x: 171.891891891892, y: 3.68627450980392, size: 1 },\r\n // { x: 176.432432432432, y: 3.68627450980392, size: 1 },\r\n // { x: 177.72972972973, y: 3.92156862745098, size: 1 },\r\n // { x: 179.675675675676, y: 3.64705882352941, size: 1 },\r\n // { x: 180.324324324324, y: 4, size: 1 },\r\n // { x: 182.918918918919, y: 4, size: 1 },\r\n // { x: 183.567567567568, y: 3.96078431372549, size: 1 },\r\n // { x: 184.864864864865, y: 3.92156862745098, size: 1 },\r\n // { x: 186.162162162162, y: 3.84313725490196, size: 1 },\r\n // { x: 187.459459459459, y: 3.84313725490196, size: 1 },\r\n // { x: 188.108108108108, y: 3.80392156862745, size: 1 },\r\n // { x: 188.756756756757, y: 3.84313725490196, size: 1 },\r\n // { x: 190.702702702703, y: 3.80392156862745, size: 1 },\r\n // { x: 192, y: 4, size: 1 },\r\n // { x: 192.648648648649, y: 4.03921568627451, size: 1 },\r\n // { x: 194.594594594595, y: 4, size: 1 },\r\n // { x: 196.540540540541, y: 3.33333333333333, size: 1 },\r\n // { x: 197.189189189189, y: 3.13725490196078, size: 1 },\r\n // { x: 199.135135135135, y: 3.37254901960784, size: 1 },\r\n // { x: 203.027027027027, y: 3.45098039215686, size: 1 },\r\n // { x: 204.324324324324, y: 3.92156862745098, size: 1 },\r\n // { x: 204.972972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 206.27027027027, y: 3.84313725490196, size: 1 },\r\n // { x: 217.945945945946, y: 3.37254901960784, size: 1 },\r\n // { x: 219.243243243243, y: 3.49019607843137, size: 1 },\r\n // { x: 223.135135135135, y: 3.96078431372549, size: 1 },\r\n // { x: 226.378378378378, y: 3.88235294117647, size: 1 },\r\n // { x: 234.162162162162, y: 3.84313725490196, size: 1 },\r\n // { x: 235.459459459459, y: 3.88235294117647, size: 1 },\r\n // { x: 236.756756756757, y: 3.84313725490196, size: 1 },\r\n // { x: 238.702702702703, y: 3.13725490196078, size: 1 },\r\n // { x: 240, y: 3.17647058823529, size: 1 },\r\n // { x: 240.648648648649, y: 3.2156862745098, size: 1 },\r\n // { x: 247.135135135135, y: 4.03921568627451, size: 1 },\r\n // { x: 248.432432432432, y: 3.96078431372549, size: 1 },\r\n // { x: 254.27027027027, y: 4, size: 1 },\r\n // { x: 256.864864864865, y: 3.80392156862745, size: 1 },\r\n // { x: 272.432432432432, y: 3.80392156862745, size: 1 },\r\n // { x: 273.72972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 275.675675675676, y: 3.76470588235294, size: 1 },\r\n // { x: 276.324324324324, y: 3.88235294117647, size: 1 },\r\n // { x: 283.459459459459, y: 3.37254901960784, size: 1 },\r\n // { x: 288.648648648649, y: 3.88235294117647, size: 1 },\r\n // { x: 291.243243243243, y: 3.56862745098039, size: 1 },\r\n // { x: 293.189189189189, y: 4.07843137254902, size: 1 },\r\n // { x: 293.837837837838, y: 3.88235294117647, size: 1 },\r\n // { x: 297.72972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 308.756756756757, y: 3.49019607843137, size: 1 },\r\n // { x: 313.297297297297, y: 3.52941176470588, size: 1 },\r\n // { x: 313.945945945946, y: 3.80392156862745, size: 1 },\r\n // { x: 318.486486486487, y: 3.92156862745098, size: 1 },\r\n // { x: 324.324324324324, y: 3.92156862745098, size: 1 },\r\n // { x: 330.162162162162, y: 3.88235294117647, size: 1 },\r\n // { x: 334.702702702703, y: 3.88235294117647, size: 1 },\r\n // { x: 341.189189189189, y: 3.76470588235294, size: 1 },\r\n // { x: 345.081081081081, y: 3.52941176470588, size: 1 },\r\n // { x: 348.972972972973, y: 3.13725490196078, size: 1 },\r\n // { x: 356.756756756757, y: 3.80392156862745, size: 1 },\r\n // { x: 358.054054054054, y: 3.80392156862745, size: 1 },\r\n // { x: 2.58992805755396, y: 3.84313725490196, size: 1 },\r\n // { x: 10.3597122302158, y: 3.17647058823529, size: 1 },\r\n // { x: 25.8992805755396, y: 3.88235294117647, size: 1 },\r\n // { x: 31.0791366906475, y: 4, size: 1 },\r\n // { x: 96.4748201438849, y: 3.29411764705882, size: 1 },\r\n // { x: 97.1223021582734, y: 3.05882352941176, size: 1 },\r\n // { x: 97.7697841726619, y: 3.25490196078431, size: 1 },\r\n // { x: 110.071942446043, y: 3.88235294117647, size: 1 },\r\n // { x: 139.208633093525, y: 2.94117647058824, size: 1 },\r\n // { x: 139.856115107914, y: 2.7843137254902, size: 1 },\r\n // { x: 145.035971223022, y: 3.88235294117647, size: 1 },\r\n // { x: 162.517985611511, y: 3.96078431372549, size: 1 },\r\n // { x: 173.525179856115, y: 4.03921568627451, size: 1 },\r\n // { x: 187.122302158273, y: 4.27450980392157, size: 1 },\r\n // { x: 194.892086330935, y: 3.92156862745098, size: 1 },\r\n // { x: 219.496402877698, y: 3.88235294117647, size: 1 },\r\n // { x: 224.028776978417, y: 3.25490196078431, size: 1 },\r\n // { x: 225.323741007194, y: 3.25490196078431, size: 1 },\r\n // { x: 225.971223021583, y: 2.90196078431373, size: 1 },\r\n // { x: 247.985611510791, y: 3.05882352941176, size: 1 },\r\n // { x: 290.719424460432, y: 3.09803921568627, size: 1 },\r\n // { x: 295.251798561151, y: 4.07843137254902, size: 1 },\r\n // { x: 310.791366906475, y: 3.09803921568627, size: 1 },\r\n // { x: 312.086330935252, y: 3.09803921568627, size: 1 },\r\n // { x: 323.741007194245, y: 4, size: 1 },\r\n // { x: 324.388489208633, y: 3.96078431372549, size: 1 },\r\n // { x: 328.920863309353, y: 3.92156862745098, size: 1 },\r\n // { x: 332.158273381295, y: 3.25490196078431, size: 1 },\r\n // { x: 338.63309352518, y: 3.41176470588235, size: 1 },\r\n // { x: 345.107913669065, y: 3.88235294117647, size: 1 },\r\n // { x: 355.467625899281, y: 3.13725490196078, size: 1 },\r\n // { x: 357.410071942446, y: 3.29411764705882, size: 1 },\r\n // { x: 358.057553956835, y: 3.33333333333333, size: 1 },\r\n // { x: 12.3021582733813, y: 3.29411764705882, size: 1 },\r\n // { x: 18.1294964028777, y: 3.37254901960784, size: 1 },\r\n // { x: 25.2517985611511, y: 3.29411764705882, size: 1 },\r\n // { x: 34.3165467625899, y: 3.33333333333333, size: 1 },\r\n // { x: 37.5539568345324, y: 3.80392156862745, size: 1 },\r\n // { x: 53.7410071942446, y: 3.92156862745098, size: 1 },\r\n // { x: 61.5107913669065, y: 3.84313725490196, size: 1 },\r\n // { x: 77.6978417266187, y: 3.80392156862745, size: 1 },\r\n // { x: 91.294964028777, y: 3.92156862745098, size: 1 },\r\n // { x: 105.539568345324, y: 3.88235294117647, size: 1 },\r\n // { x: 113.956834532374, y: 4.03921568627451, size: 1 },\r\n // { x: 115.251798561151, y: 3.96078431372549, size: 1 },\r\n // { x: 119.784172661871, y: 3.88235294117647, size: 1 },\r\n // { x: 125.611510791367, y: 3.88235294117647, size: 1 },\r\n // { x: 135.323741007194, y: 3.92156862745098, size: 1 },\r\n // { x: 135.971223021583, y: 3.92156862745098, size: 1 },\r\n // { x: 145.68345323741, y: 3.33333333333333, size: 1 },\r\n // { x: 146.330935251799, y: 2.90196078431373, size: 1 },\r\n // { x: 168.345323741007, y: 3.33333333333333, size: 1 },\r\n // { x: 171.58273381295, y: 3.84313725490196, size: 1 },\r\n // { x: 183.884892086331, y: 3.92156862745098, size: 1 },\r\n // { x: 194.892086330935, y: 3.33333333333333, size: 1 },\r\n // { x: 198.776978417266, y: 3.92156862745098, size: 1 },\r\n // { x: 200.071942446043, y: 3.25490196078431, size: 1 },\r\n // { x: 211.726618705036, y: 3.29411764705882, size: 1 },\r\n // { x: 215.611510791367, y: 3.96078431372549, size: 1 },\r\n // { x: 232.446043165468, y: 3.05882352941176, size: 1 },\r\n // { x: 233.741007194245, y: 3.25490196078431, size: 1 },\r\n // { x: 240.863309352518, y: 3.29411764705882, size: 1 },\r\n // { x: 246.043165467626, y: 3.25490196078431, size: 1 },\r\n // { x: 251.223021582734, y: 3.13725490196078, size: 1 },\r\n // { x: 253.812949640288, y: 3.2156862745098, size: 1 },\r\n // { x: 254.460431654676, y: 3.13725490196078, size: 1 },\r\n // { x: 255.107913669065, y: 3.37254901960784, size: 1 },\r\n // { x: 275.827338129496, y: 2.98039215686275, size: 1 },\r\n // { x: 276.474820143885, y: 3.09803921568627, size: 1 },\r\n // { x: 283.597122302158, y: 3.88235294117647, size: 1 },\r\n // { x: 315.971223021583, y: 3.49019607843137, size: 1 },\r\n // { x: 319.208633093525, y: 3.05882352941176, size: 1 },\r\n // { x: 323.093525179856, y: 3.33333333333333, size: 1 },\r\n // { x: 327.625899280576, y: 3.37254901960784, size: 1 },\r\n // { x: 329.568345323741, y: 3.37254901960784, size: 1 },\r\n // { x: 330.863309352518, y: 3.25490196078431, size: 1 },\r\n // { x: 1.29496402877698, y: 3.2156862745098, size: 1 },\r\n // { x: 1.94244604316547, y: 2.7843137254902, size: 1 },\r\n // { x: 2.58992805755396, y: 2.94117647058824, size: 1 },\r\n // { x: 12.3021582733813, y: 3.88235294117647, size: 1 },\r\n // { x: 22.0143884892086, y: 2.98039215686275, size: 1 },\r\n // { x: 23.3093525179856, y: 2.98039215686275, size: 1 },\r\n // { x: 23.9568345323741, y: 1.56862745098039, size: 1 },\r\n // { x: 24.6043165467626, y: 3.01960784313725, size: 1 },\r\n // { x: 27.1942446043165, y: 3.37254901960784, size: 1 },\r\n // { x: 28.4892086330935, y: 3.29411764705882, size: 1 },\r\n // { x: 29.7841726618705, y: 3.37254901960784, size: 1 },\r\n // { x: 45.3237410071942, y: 2.47058823529412, size: 1 },\r\n // { x: 45.9712230215827, y: 2.3921568627451, size: 1 },\r\n // { x: 91.294964028777, y: 3.2156862745098, size: 1 },\r\n // { x: 101.654676258993, y: 3.25490196078431, size: 1 },\r\n // { x: 106.187050359712, y: 3.2156862745098, size: 1 },\r\n // { x: 108.129496402878, y: 3.17647058823529, size: 1 },\r\n // { x: 108.776978417266, y: 3.05882352941176, size: 1 },\r\n // { x: 109.424460431655, y: 2.90196078431373, size: 1 },\r\n // { x: 110.071942446043, y: 2.27450980392157, size: 1 },\r\n // { x: 110.719424460432, y: 2.7843137254902, size: 1 },\r\n // { x: 116.546762589928, y: 3.33333333333333, size: 1 },\r\n // { x: 121.726618705036, y: 3.29411764705882, size: 1 },\r\n // { x: 123.669064748201, y: 3.2156862745098, size: 1 },\r\n // { x: 126.906474820144, y: 3.29411764705882, size: 1 },\r\n // { x: 131.438848920863, y: 2.3921568627451, size: 1 },\r\n // { x: 132.086330935252, y: 1.49019607843137, size: 1 },\r\n // { x: 139.856115107914, y: 3.33333333333333, size: 1 },\r\n // { x: 148.920863309353, y: 3.2156862745098, size: 1 },\r\n // { x: 151.510791366906, y: 3.13725490196078, size: 1 },\r\n // { x: 152.158273381295, y: 3.05882352941176, size: 1 },\r\n // { x: 152.805755395683, y: 2.90196078431373, size: 1 },\r\n // { x: 153.453237410072, y: 1.52941176470588, size: 1 },\r\n // { x: 175.467625899281, y: 3.29411764705882, size: 1 },\r\n // { x: 178.057553956835, y: 3.33333333333333, size: 1 },\r\n // { x: 192.94964028777, y: 3.2156862745098, size: 1 },\r\n // { x: 216.906474820144, y: 2.98039215686275, size: 1 },\r\n // { x: 224.028776978417, y: 3.33333333333333, size: 1 },\r\n // { x: 231.151079136691, y: 3.29411764705882, size: 1 },\r\n // { x: 235.035971223022, y: 3.17647058823529, size: 1 },\r\n // { x: 238.273381294964, y: 3.09803921568627, size: 1 },\r\n // { x: 238.920863309353, y: 3.01960784313725, size: 1 },\r\n // { x: 239.568345323741, y: 2.11764705882353, size: 1 },\r\n // { x: 240.215827338129, y: 2.35294117647059, size: 1 },\r\n // { x: 242.158273381295, y: 3.84313725490196, size: 1 },\r\n // { x: 254.460431654676, y: 4.07843137254902, size: 1 },\r\n // { x: 278.41726618705, y: 3.25490196078431, size: 1 },\r\n // { x: 314.676258992806, y: 3.92156862745098, size: 1 },\r\n // { x: 349.640287769784, y: 3.29411764705882, size: 1 },\r\n // { x: 358.057553956835, y: 3.84313725490196, size: 1 },\r\n // { x: 8.43243243243243, y: 3.25490196078431, size: 1 },\r\n // { x: 9.08108108108108, y: 3.09803921568627, size: 1 },\r\n // { x: 9.72972972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 11.6756756756757, y: 3.25490196078431, size: 1 },\r\n // { x: 14.9189189189189, y: 3.29411764705882, size: 1 },\r\n // { x: 18.1621621621622, y: 3.45098039215686, size: 1 },\r\n // { x: 22.0540540540541, y: 3.41176470588235, size: 1 },\r\n // { x: 27.2432432432432, y: 3.64705882352941, size: 1 },\r\n // { x: 29.1891891891892, y: 3.64705882352941, size: 1 },\r\n // { x: 31.7837837837838, y: 3.33333333333333, size: 1 },\r\n // { x: 32.4324324324324, y: 3.25490196078431, size: 1 },\r\n // { x: 33.0810810810811, y: 3.25490196078431, size: 1 },\r\n // { x: 33.7297297297297, y: 3.45098039215686, size: 1 },\r\n // { x: 36.3243243243243, y: 4.07843137254902, size: 1 },\r\n // { x: 50.5945945945946, y: 3.37254901960784, size: 1 },\r\n // { x: 51.8918918918919, y: 3.29411764705882, size: 1 },\r\n // { x: 52.5405405405405, y: 2.70588235294118, size: 1 },\r\n // { x: 53.1891891891892, y: 3.01960784313725, size: 1 },\r\n // { x: 53.8378378378378, y: 3.29411764705882, size: 1 },\r\n // { x: 54.4864864864865, y: 2.94117647058824, size: 1 },\r\n // { x: 56.4324324324324, y: 3.64705882352941, size: 1 },\r\n // { x: 63.5675675675676, y: 3.72549019607843, size: 1 },\r\n // { x: 67.4594594594595, y: 3.52941176470588, size: 1 },\r\n // { x: 72.6486486486486, y: 3.37254901960784, size: 1 },\r\n // { x: 73.2972972972973, y: 3.05882352941176, size: 1 },\r\n // { x: 73.945945945946, y: 2.7843137254902, size: 1 },\r\n // { x: 74.5945945945946, y: 2.70588235294118, size: 1 },\r\n // { x: 75.2432432432432, y: 3.09803921568627, size: 1 },\r\n // { x: 75.8918918918919, y: 3.05882352941176, size: 1 },\r\n // { x: 81.0810810810811, y: 3.88235294117647, size: 1 },\r\n // { x: 82.3783783783784, y: 3.80392156862745, size: 1 },\r\n // { x: 83.027027027027, y: 3.76470588235294, size: 1 },\r\n // { x: 89.5135135135135, y: 3.92156862745098, size: 1 },\r\n // { x: 91.4594594594595, y: 3.80392156862745, size: 1 },\r\n // { x: 92.7567567567568, y: 3.52941176470588, size: 1 },\r\n // { x: 101.189189189189, y: 3.76470588235294, size: 1 },\r\n // { x: 110.918918918919, y: 4, size: 1 },\r\n // { x: 116.108108108108, y: 3.29411764705882, size: 1 },\r\n // { x: 117.405405405405, y: 3.2156862745098, size: 1 },\r\n // { x: 127.783783783784, y: 3.72549019607843, size: 1 },\r\n // { x: 132.972972972973, y: 4, size: 1 },\r\n // { x: 138.810810810811, y: 3.33333333333333, size: 1 },\r\n // { x: 139.459459459459, y: 3.25490196078431, size: 1 },\r\n // { x: 144, y: 3.80392156862745, size: 1 },\r\n // { x: 153.72972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 154.378378378378, y: 3.96078431372549, size: 1 },\r\n // { x: 160.216216216216, y: 3.17647058823529, size: 1 },\r\n // { x: 161.513513513514, y: 3.52941176470588, size: 1 },\r\n // { x: 166.702702702703, y: 3.92156862745098, size: 1 },\r\n // { x: 180.972972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 191.351351351351, y: 3.92156862745098, size: 1 },\r\n // { x: 195.243243243243, y: 3.64705882352941, size: 1 },\r\n // { x: 203.675675675676, y: 3.41176470588235, size: 1 },\r\n // { x: 204.324324324324, y: 3.45098039215686, size: 1 },\r\n // { x: 210.162162162162, y: 3.49019607843137, size: 1 },\r\n // { x: 217.945945945946, y: 3.96078431372549, size: 1 },\r\n // { x: 219.243243243243, y: 4, size: 1 },\r\n // { x: 223.135135135135, y: 3.49019607843137, size: 1 },\r\n // { x: 223.783783783784, y: 3.41176470588235, size: 1 },\r\n // { x: 225.72972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 226.378378378378, y: 3.84313725490196, size: 1 },\r\n // { x: 241.945945945946, y: 3.72549019607843, size: 1 },\r\n // { x: 245.189189189189, y: 3.17647058823529, size: 1 },\r\n // { x: 246.486486486486, y: 3.17647058823529, size: 1 },\r\n // { x: 247.135135135135, y: 3.01960784313725, size: 1 },\r\n // { x: 247.783783783784, y: 3.01960784313725, size: 1 },\r\n // { x: 248.432432432432, y: 3.29411764705882, size: 1 },\r\n // { x: 250.378378378378, y: 3.17647058823529, size: 1 },\r\n // { x: 251.027027027027, y: 3.37254901960784, size: 1 },\r\n // { x: 256.216216216216, y: 3.29411764705882, size: 1 },\r\n // { x: 257.513513513513, y: 3.29411764705882, size: 1 },\r\n // { x: 261.405405405405, y: 3.41176470588235, size: 1 },\r\n // { x: 263.351351351351, y: 3.25490196078431, size: 1 },\r\n // { x: 264.648648648649, y: 3.33333333333333, size: 1 },\r\n // { x: 265.297297297297, y: 3.45098039215686, size: 1 },\r\n // { x: 267.891891891892, y: 3.52941176470588, size: 1 },\r\n // { x: 275.675675675676, y: 3.88235294117647, size: 1 },\r\n // { x: 276.324324324324, y: 3.45098039215686, size: 1 },\r\n // { x: 281.513513513513, y: 3.80392156862745, size: 1 },\r\n // { x: 283.459459459459, y: 3.88235294117647, size: 1 },\r\n // { x: 284.756756756757, y: 3.52941176470588, size: 1 },\r\n // { x: 287.351351351351, y: 3.84313725490196, size: 1 },\r\n // { x: 291.243243243243, y: 3.76470588235294, size: 1 },\r\n // { x: 293.837837837838, y: 3.41176470588235, size: 1 },\r\n // { x: 294.486486486487, y: 3.64705882352941, size: 1 },\r\n // { x: 300.972972972973, y: 3.52941176470588, size: 1 },\r\n // { x: 304.864864864865, y: 3.37254901960784, size: 1 },\r\n // { x: 305.513513513513, y: 3.92156862745098, size: 1 },\r\n // { x: 313.945945945946, y: 3.41176470588235, size: 1 },\r\n // { x: 316.540540540541, y: 3.41176470588235, size: 1 },\r\n // { x: 318.486486486487, y: 3.72549019607843, size: 1 },\r\n // { x: 321.081081081081, y: 3.76470588235294, size: 1 },\r\n // { x: 323.675675675676, y: 3.96078431372549, size: 1 },\r\n // { x: 329.513513513513, y: 3.84313725490196, size: 1 },\r\n // { x: 337.297297297297, y: 3.80392156862745, size: 1 },\r\n // { x: 342.486486486487, y: 3.92156862745098, size: 1 },\r\n // { x: 345.081081081081, y: 3.84313725490196, size: 1 },\r\n // { x: 345.72972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 348.972972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 353.513513513513, y: 3.25490196078431, size: 1 },\r\n // { x: 354.162162162162, y: 3.29411764705882, size: 1 },\r\n // { x: 354.810810810811, y: 3.17647058823529, size: 1 },\r\n // { x: 355.459459459459, y: 2.70588235294118, size: 1 },\r\n // { x: 11.0071942446043, y: 3.92156862745098, size: 1 },\r\n // { x: 14.8920863309353, y: 3.84313725490196, size: 1 },\r\n // { x: 29.7841726618705, y: 3.84313725490196, size: 1 },\r\n // { x: 60.2158273381295, y: 2.98039215686275, size: 1 },\r\n // { x: 88.705035971223, y: 3.2156862745098, size: 1 },\r\n // { x: 89.3525179856115, y: 3.33333333333333, size: 1 },\r\n // { x: 100.359712230216, y: 3.17647058823529, size: 1 },\r\n // { x: 102.94964028777, y: 3.37254901960784, size: 1 },\r\n // { x: 117.841726618705, y: 3.88235294117647, size: 1 },\r\n // { x: 123.021582733813, y: 3.29411764705882, size: 1 },\r\n // { x: 155.395683453237, y: 4, size: 1 },\r\n // { x: 180, y: 3.2156862745098, size: 1 },\r\n // { x: 202.014388489209, y: 4.11764705882353, size: 1 },\r\n // { x: 213.669064748201, y: 3.2156862745098, size: 1 },\r\n // { x: 240.215827338129, y: 3.88235294117647, size: 1 },\r\n // { x: 244.748201438849, y: 3.92156862745098, size: 1 },\r\n // { x: 246.043165467626, y: 3.80392156862745, size: 1 },\r\n // { x: 306.906474820144, y: 3.88235294117647, size: 1 },\r\n // { x: 317.26618705036, y: 3.33333333333333, size: 1 },\r\n // { x: 319.208633093525, y: 2.82352941176471, size: 1 },\r\n // { x: 341.223021582734, y: 3.17647058823529, size: 1 },\r\n // { x: 343.812949640288, y: 3.05882352941176, size: 1 },\r\n // { x: 346.402877697842, y: 3.29411764705882, size: 1 },\r\n // { x: 358.705035971223, y: 3.09803921568627, size: 1 },\r\n // { x: 1.94244604316547, y: 3.13725490196078, size: 1 },\r\n // { x: 2.58992805755396, y: 3.33333333333333, size: 1 },\r\n // { x: 3.88489208633094, y: 3.2156862745098, size: 1 },\r\n // { x: 9.71223021582734, y: 3.25490196078431, size: 1 },\r\n // { x: 20.7194244604317, y: 3.17647058823529, size: 1 },\r\n // { x: 23.9568345323741, y: 3.25490196078431, size: 1 },\r\n // { x: 45.3237410071942, y: 3.09803921568627, size: 1 },\r\n // { x: 46.6187050359712, y: 3.80392156862745, size: 1 },\r\n // { x: 99.0647482014388, y: 4.03921568627451, size: 1 },\r\n // { x: 113.956834532374, y: 3.96078431372549, size: 1 },\r\n // { x: 114.604316546763, y: 4.19607843137255, size: 1 },\r\n // { x: 135.323741007194, y: 3.80392156862745, size: 1 },\r\n // { x: 153.453237410072, y: 3.09803921568627, size: 1 },\r\n // { x: 154.10071942446, y: 3.37254901960784, size: 1 },\r\n // { x: 181.942446043165, y: 3.84313725490196, size: 1 },\r\n // { x: 201.36690647482, y: 3.96078431372549, size: 1 },\r\n // { x: 216.258992805755, y: 4.19607843137255, size: 1 },\r\n // { x: 228.561151079137, y: 4, size: 1 },\r\n // { x: 251.870503597122, y: 4, size: 1 },\r\n // { x: 252.517985611511, y: 3.76470588235294, size: 1 },\r\n // { x: 260.935251798561, y: 3.05882352941176, size: 1 },\r\n // { x: 261.58273381295, y: 2.90196078431373, size: 1 },\r\n // { x: 263.525179856115, y: 3.2156862745098, size: 1 },\r\n // { x: 264.172661870504, y: 3.29411764705882, size: 1 },\r\n // { x: 266.762589928058, y: 3.13725490196078, size: 1 },\r\n // { x: 271.942446043165, y: 3.17647058823529, size: 1 },\r\n // { x: 274.532374100719, y: 3.37254901960784, size: 1 },\r\n // { x: 278.41726618705, y: 3.2156862745098, size: 1 },\r\n // { x: 282.302158273381, y: 2.54901960784314, size: 1 },\r\n // { x: 282.94964028777, y: 2.3921568627451, size: 1 },\r\n // { x: 289.424460431655, y: 3.2156862745098, size: 1 },\r\n // { x: 299.784172661871, y: 3.33333333333333, size: 1 },\r\n // { x: 301.079136690647, y: 3.25490196078431, size: 1 },\r\n // { x: 305.611510791367, y: 4.07843137254902, size: 1 },\r\n // { x: 307.553956834532, y: 4.03921568627451, size: 1 },\r\n // { x: 308.201438848921, y: 3.92156862745098, size: 1 },\r\n // { x: 313.381294964029, y: 4.07843137254902, size: 1 },\r\n // { x: 315.323741007194, y: 4.11764705882353, size: 1 },\r\n // { x: 317.26618705036, y: 4.07843137254902, size: 1 },\r\n // { x: 318.561151079137, y: 3.92156862745098, size: 1 },\r\n // { x: 321.798561151079, y: 3.84313725490196, size: 1 },\r\n // { x: 323.093525179856, y: 3.92156862745098, size: 1 },\r\n // { x: 331.510791366906, y: 4, size: 1 },\r\n // { x: 332.805755395683, y: 4, size: 1 },\r\n // { x: 339.280575539568, y: 3.88235294117647, size: 1 },\r\n // { x: 343.165467625899, y: 4.03921568627451, size: 1 },\r\n // { x: 347.05035971223, y: 3.09803921568627, size: 1 },\r\n // { x: 347.697841726619, y: 2.82352941176471, size: 1 },\r\n // { x: 8.41726618705036, y: 3.29411764705882, size: 1 },\r\n // { x: 9.06474820143885, y: 3.09803921568627, size: 1 },\r\n // { x: 29.136690647482, y: 3.37254901960784, size: 1 },\r\n // { x: 29.7841726618705, y: 3.2156862745098, size: 1 },\r\n // { x: 30.431654676259, y: 2.43137254901961, size: 1 },\r\n // { x: 31.0791366906475, y: 2.3921568627451, size: 1 },\r\n // { x: 42.7338129496403, y: 3.33333333333333, size: 1 },\r\n // { x: 51.7985611510791, y: 3.25490196078431, size: 1 },\r\n // { x: 72.5179856115108, y: 3.2156862745098, size: 1 },\r\n // { x: 73.1654676258993, y: 3.2156862745098, size: 1 },\r\n // { x: 73.8129496402878, y: 2.7843137254902, size: 1 },\r\n // { x: 95.1798561151079, y: 3.09803921568627, size: 1 },\r\n // { x: 113.309352517986, y: 3.96078431372549, size: 1 },\r\n // { x: 116.546762589928, y: 3.17647058823529, size: 1 },\r\n // { x: 117.194244604317, y: 3.25490196078431, size: 1 },\r\n // { x: 159.280575539568, y: 3.25490196078431, size: 1 },\r\n // { x: 159.928057553957, y: 3.09803921568627, size: 1 },\r\n // { x: 181.294964028777, y: 3.2156862745098, size: 1 },\r\n // { x: 181.942446043165, y: 3.25490196078431, size: 1 },\r\n // { x: 224.676258992806, y: 2.90196078431373, size: 1 },\r\n // { x: 225.323741007194, y: 3.13725490196078, size: 1 },\r\n // { x: 231.151079136691, y: 3.25490196078431, size: 1 },\r\n // { x: 246.043165467626, y: 2.98039215686275, size: 1 },\r\n // { x: 248.63309352518, y: 3.80392156862745, size: 1 },\r\n // { x: 268.057553956835, y: 3.84313725490196, size: 1 },\r\n // { x: 287.482014388489, y: 3.37254901960784, size: 1 },\r\n // { x: 288.776978417266, y: 2.66666666666667, size: 1 },\r\n // { x: 289.424460431655, y: 1.29411764705882, size: 1 },\r\n // { x: 290.071942446043, y: 1.29411764705882, size: 1 },\r\n // { x: 290.719424460432, y: 1.33333333333333, size: 1 },\r\n // { x: 291.36690647482, y: 1.49019607843137, size: 1 },\r\n // { x: 298.489208633094, y: 3.01960784313725, size: 1 },\r\n // { x: 299.136690647482, y: 2.98039215686275, size: 1 },\r\n // { x: 304.964028776978, y: 2.90196078431373, size: 1 },\r\n // { x: 305.611510791367, y: 3.05882352941176, size: 1 },\r\n // { x: 308.201438848921, y: 3.29411764705882, size: 1 },\r\n // { x: 310.791366906475, y: 2.3921568627451, size: 1 },\r\n // { x: 311.438848920863, y: 2.35294117647059, size: 1 },\r\n // { x: 330.863309352518, y: 3.29411764705882, size: 1 },\r\n // { x: 331.510791366906, y: 3.2156862745098, size: 1 },\r\n // { x: 332.805755395683, y: 2.50980392156863, size: 1 },\r\n // { x: 341.223021582734, y: 4.07843137254902, size: 1 },\r\n // { x: 346.402877697842, y: 4, size: 1 },\r\n // { x: 354.172661870504, y: 2.54901960784314, size: 1 },\r\n // { x: 354.820143884892, y: 2.66666666666667, size: 1 },\r\n // { x: 3.24324324324324, y: 3.64705882352941, size: 1 },\r\n // { x: 11.6756756756757, y: 3.76470588235294, size: 1 },\r\n // { x: 12.3243243243243, y: 3.6078431372549, size: 1 },\r\n // { x: 14.2702702702703, y: 3.76470588235294, size: 1 },\r\n // { x: 15.5675675675676, y: 4.03921568627451, size: 1 },\r\n // { x: 22.0540540540541, y: 3.56862745098039, size: 1 },\r\n // { x: 23.3513513513514, y: 3.80392156862745, size: 1 },\r\n // { x: 28.5405405405405, y: 3.92156862745098, size: 1 },\r\n // { x: 36.3243243243243, y: 3.29411764705882, size: 1 },\r\n // { x: 37.6216216216216, y: 3.37254901960784, size: 1 },\r\n // { x: 38.2702702702703, y: 3.29411764705882, size: 1 },\r\n // { x: 38.9189189189189, y: 3.25490196078431, size: 1 },\r\n // { x: 41.5135135135135, y: 3.41176470588235, size: 1 },\r\n // { x: 44.1081081081081, y: 3.33333333333333, size: 1 },\r\n // { x: 45.4054054054054, y: 3.41176470588235, size: 1 },\r\n // { x: 49.2972972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 54.4864864864865, y: 3.2156862745098, size: 1 },\r\n // { x: 57.7297297297297, y: 3.2156862745098, size: 1 },\r\n // { x: 58.3783783783784, y: 3.25490196078431, size: 1 },\r\n // { x: 59.6756756756757, y: 3.64705882352941, size: 1 },\r\n // { x: 72.6486486486486, y: 3.80392156862745, size: 1 },\r\n // { x: 74.5945945945946, y: 4.07843137254902, size: 1 },\r\n // { x: 75.8918918918919, y: 3.88235294117647, size: 1 },\r\n // { x: 76.5405405405405, y: 3.68627450980392, size: 1 },\r\n // { x: 77.8378378378378, y: 3.68627450980392, size: 1 },\r\n // { x: 79.7837837837838, y: 3.33333333333333, size: 1 },\r\n // { x: 80.4324324324324, y: 3.56862745098039, size: 1 },\r\n // { x: 81.0810810810811, y: 3.80392156862745, size: 1 },\r\n // { x: 87.5675675675676, y: 3.92156862745098, size: 1 },\r\n // { x: 100.540540540541, y: 3.05882352941176, size: 1 },\r\n // { x: 101.189189189189, y: 3.2156862745098, size: 1 },\r\n // { x: 102.486486486486, y: 3.2156862745098, size: 1 },\r\n // { x: 103.135135135135, y: 3.29411764705882, size: 1 },\r\n // { x: 103.783783783784, y: 3.2156862745098, size: 1 },\r\n // { x: 105.72972972973, y: 3.25490196078431, size: 1 },\r\n // { x: 109.621621621622, y: 3.2156862745098, size: 1 },\r\n // { x: 110.918918918919, y: 3.25490196078431, size: 1 },\r\n // { x: 117.405405405405, y: 3.41176470588235, size: 1 },\r\n // { x: 120.648648648649, y: 3.33333333333333, size: 1 },\r\n // { x: 121.945945945946, y: 3.37254901960784, size: 1 },\r\n // { x: 122.594594594595, y: 3.17647058823529, size: 1 },\r\n // { x: 126.486486486486, y: 3.84313725490196, size: 1 },\r\n // { x: 128.432432432432, y: 4.03921568627451, size: 1 },\r\n // { x: 132.324324324324, y: 3.80392156862745, size: 1 },\r\n // { x: 136.864864864865, y: 3.88235294117647, size: 1 },\r\n // { x: 139.459459459459, y: 3.80392156862745, size: 1 },\r\n // { x: 140.756756756757, y: 4.03921568627451, size: 1 },\r\n // { x: 142.702702702703, y: 4.07843137254902, size: 1 },\r\n // { x: 145.297297297297, y: 3.80392156862745, size: 1 },\r\n // { x: 152.432432432432, y: 3.49019607843137, size: 1 },\r\n // { x: 154.378378378378, y: 3.88235294117647, size: 1 },\r\n // { x: 155.675675675676, y: 3.56862745098039, size: 1 },\r\n // { x: 161.513513513514, y: 4.03921568627451, size: 1 },\r\n // { x: 166.054054054054, y: 3.88235294117647, size: 1 },\r\n // { x: 170.594594594595, y: 3.88235294117647, size: 1 },\r\n // { x: 171.891891891892, y: 3.64705882352941, size: 1 },\r\n // { x: 174.486486486486, y: 3.68627450980392, size: 1 },\r\n // { x: 176.432432432432, y: 3.80392156862745, size: 1 },\r\n // { x: 178.378378378378, y: 4.07843137254902, size: 1 },\r\n // { x: 188.108108108108, y: 3.37254901960784, size: 1 },\r\n // { x: 189.405405405405, y: 3.2156862745098, size: 1 },\r\n // { x: 190.702702702703, y: 3.49019607843137, size: 1 },\r\n // { x: 192.648648648649, y: 3.33333333333333, size: 1 },\r\n // { x: 195.243243243243, y: 3.29411764705882, size: 1 },\r\n // { x: 195.891891891892, y: 3.17647058823529, size: 1 },\r\n // { x: 198.486486486486, y: 3.45098039215686, size: 1 },\r\n // { x: 200.432432432432, y: 3.25490196078431, size: 1 },\r\n // { x: 207.567567567568, y: 3.2156862745098, size: 1 },\r\n // { x: 213.405405405405, y: 4.03921568627451, size: 1 },\r\n // { x: 217.297297297297, y: 3.92156862745098, size: 1 },\r\n // { x: 227.027027027027, y: 3.92156862745098, size: 1 },\r\n // { x: 227.675675675676, y: 3.96078431372549, size: 1 },\r\n // { x: 229.621621621622, y: 3.96078431372549, size: 1 },\r\n // { x: 234.162162162162, y: 4, size: 1 },\r\n // { x: 234.810810810811, y: 4, size: 1 },\r\n // { x: 238.702702702703, y: 3.80392156862745, size: 1 },\r\n // { x: 240.648648648649, y: 3.96078431372549, size: 1 },\r\n // { x: 241.297297297297, y: 3.96078431372549, size: 1 },\r\n // { x: 244.540540540541, y: 3.88235294117647, size: 1 },\r\n // { x: 245.189189189189, y: 3.88235294117647, size: 1 },\r\n // { x: 246.486486486486, y: 3.92156862745098, size: 1 },\r\n // { x: 248.432432432432, y: 3.92156862745098, size: 1 },\r\n // { x: 250.378378378378, y: 3.84313725490196, size: 1 },\r\n // { x: 251.027027027027, y: 3.96078431372549, size: 1 },\r\n // { x: 257.513513513513, y: 3.92156862745098, size: 1 },\r\n // { x: 258.162162162162, y: 3.76470588235294, size: 1 },\r\n // { x: 258.810810810811, y: 3.88235294117647, size: 1 },\r\n // { x: 260.756756756757, y: 3.76470588235294, size: 1 },\r\n // { x: 262.054054054054, y: 3.72549019607843, size: 1 },\r\n // { x: 265.297297297297, y: 4.31372549019608, size: 1 },\r\n // { x: 265.945945945946, y: 3.80392156862745, size: 1 },\r\n // { x: 266.594594594595, y: 4.07843137254902, size: 1 },\r\n // { x: 267.243243243243, y: 4.35294117647059, size: 1 },\r\n // { x: 273.081081081081, y: 4, size: 1 },\r\n // { x: 275.027027027027, y: 3.96078431372549, size: 1 },\r\n // { x: 277.621621621622, y: 4, size: 1 },\r\n // { x: 278.27027027027, y: 3.76470588235294, size: 1 },\r\n // { x: 280.216216216216, y: 3.84313725490196, size: 1 },\r\n // { x: 281.513513513513, y: 3.92156862745098, size: 1 },\r\n // { x: 282.162162162162, y: 3.88235294117647, size: 1 },\r\n // { x: 282.810810810811, y: 3.84313725490196, size: 1 },\r\n // { x: 283.459459459459, y: 4, size: 1 },\r\n // { x: 284.756756756757, y: 3.68627450980392, size: 1 },\r\n // { x: 285.405405405405, y: 3.88235294117647, size: 1 },\r\n // { x: 286.054054054054, y: 3.96078431372549, size: 1 },\r\n // { x: 288.648648648649, y: 3.72549019607843, size: 1 },\r\n // { x: 289.945945945946, y: 3.88235294117647, size: 1 },\r\n // { x: 291.243243243243, y: 3.80392156862745, size: 1 },\r\n // { x: 291.891891891892, y: 3.92156862745098, size: 1 },\r\n // { x: 292.540540540541, y: 4, size: 1 },\r\n // { x: 293.837837837838, y: 3.80392156862745, size: 1 },\r\n // { x: 297.081081081081, y: 2.86274509803922, size: 1 },\r\n // { x: 297.72972972973, y: 3.09803921568627, size: 1 },\r\n // { x: 299.675675675676, y: 4, size: 1 },\r\n // { x: 300.324324324324, y: 3.88235294117647, size: 1 },\r\n // { x: 300.972972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 302.918918918919, y: 3.84313725490196, size: 1 },\r\n // { x: 303.567567567568, y: 3.88235294117647, size: 1 },\r\n // { x: 304.864864864865, y: 4, size: 1 },\r\n // { x: 305.513513513513, y: 3.96078431372549, size: 1 },\r\n // { x: 306.162162162162, y: 3.88235294117647, size: 1 },\r\n // { x: 307.459459459459, y: 3.80392156862745, size: 1 },\r\n // { x: 308.756756756757, y: 3.64705882352941, size: 1 },\r\n // { x: 310.054054054054, y: 3.88235294117647, size: 1 },\r\n // { x: 312, y: 3.72549019607843, size: 1 },\r\n // { x: 312.648648648649, y: 3.96078431372549, size: 1 },\r\n // { x: 313.297297297297, y: 3.92156862745098, size: 1 },\r\n // { x: 314.594594594595, y: 4, size: 1 },\r\n // { x: 315.243243243243, y: 4, size: 1 },\r\n // { x: 315.891891891892, y: 4, size: 1 },\r\n // { x: 318.486486486487, y: 3.25490196078431, size: 1 },\r\n // { x: 319.783783783784, y: 3.09803921568627, size: 1 },\r\n // { x: 320.432432432432, y: 3.17647058823529, size: 1 },\r\n // { x: 321.72972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 322.378378378378, y: 3.96078431372549, size: 1 },\r\n // { x: 324.972972972973, y: 4, size: 1 },\r\n // { x: 328.216216216216, y: 4.03921568627451, size: 1 },\r\n // { x: 330.810810810811, y: 3.92156862745098, size: 1 },\r\n // { x: 331.459459459459, y: 3.96078431372549, size: 1 },\r\n // { x: 332.756756756757, y: 4.03921568627451, size: 1 },\r\n // { x: 335.351351351351, y: 3.84313725490196, size: 1 },\r\n // { x: 336.648648648649, y: 3.84313725490196, size: 1 },\r\n // { x: 338.594594594595, y: 3.37254901960784, size: 1 },\r\n // { x: 339.891891891892, y: 3.17647058823529, size: 1 },\r\n // { x: 340.540540540541, y: 3.25490196078431, size: 1 },\r\n // { x: 342.486486486487, y: 3.41176470588235, size: 1 },\r\n // { x: 343.135135135135, y: 3.76470588235294, size: 1 },\r\n // { x: 343.783783783784, y: 3.88235294117647, size: 1 },\r\n // { x: 348.972972972973, y: 4.03921568627451, size: 1 },\r\n // { x: 349.621621621622, y: 3.80392156862745, size: 1 },\r\n // { x: 356.108108108108, y: 3.80392156862745, size: 1 },\r\n // { x: 356.756756756757, y: 3.84313725490196, size: 1 },\r\n // { x: 357.405405405405, y: 3.96078431372549, size: 1 },\r\n // { x: 358.054054054054, y: 3.84313725490196, size: 1 },\r\n // { x: 2.58992805755396, y: 3.17647058823529, size: 1 },\r\n // { x: 3.23741007194245, y: 3.13725490196078, size: 1 },\r\n // { x: 3.88489208633094, y: 3.29411764705882, size: 1 },\r\n // { x: 5.8273381294964, y: 3.96078431372549, size: 1 },\r\n // { x: 11.0071942446043, y: 4.15686274509804, size: 1 },\r\n // { x: 12.3021582733813, y: 3.92156862745098, size: 1 },\r\n // { x: 23.3093525179856, y: 2.90196078431373, size: 1 },\r\n // { x: 23.9568345323741, y: 2.90196078431373, size: 1 },\r\n // { x: 25.2517985611511, y: 2.86274509803922, size: 1 },\r\n // { x: 29.7841726618705, y: 4.11764705882353, size: 1 },\r\n // { x: 33.0215827338129, y: 3.96078431372549, size: 1 },\r\n // { x: 33.6690647482014, y: 3.92156862745098, size: 1 },\r\n // { x: 34.3165467625899, y: 4, size: 1 },\r\n // { x: 59.568345323741, y: 3.88235294117647, size: 1 },\r\n // { x: 60.863309352518, y: 4.03921568627451, size: 1 },\r\n // { x: 66.6906474820144, y: 2.58823529411765, size: 1 },\r\n // { x: 67.9856115107914, y: 2.70588235294118, size: 1 },\r\n // { x: 68.6330935251799, y: 2.58823529411765, size: 1 },\r\n // { x: 88.0575539568345, y: 3.17647058823529, size: 1 },\r\n // { x: 88.705035971223, y: 3.13725490196078, size: 1 },\r\n // { x: 89.3525179856115, y: 3.05882352941176, size: 1 },\r\n // { x: 90, y: 3.2156862745098, size: 1 },\r\n // { x: 98.4172661870504, y: 3.92156862745098, size: 1 },\r\n // { x: 100.359712230216, y: 3.76470588235294, size: 1 },\r\n // { x: 134.028776978417, y: 3.17647058823529, size: 1 },\r\n // { x: 134.676258992806, y: 3.09803921568627, size: 1 },\r\n // { x: 145.035971223022, y: 3.13725490196078, size: 1 },\r\n // { x: 145.68345323741, y: 3.29411764705882, size: 1 },\r\n // { x: 150.215827338129, y: 3.13725490196078, size: 1 },\r\n // { x: 152.805755395683, y: 3.41176470588235, size: 1 },\r\n // { x: 174.172661870504, y: 2.58823529411765, size: 1 },\r\n // { x: 176.762589928058, y: 3.96078431372549, size: 1 },\r\n // { x: 198.129496402878, y: 2.98039215686275, size: 1 },\r\n // { x: 198.776978417266, y: 3.96078431372549, size: 1 },\r\n // { x: 199.424460431655, y: 4.03921568627451, size: 1 },\r\n // { x: 209.136690647482, y: 3.84313725490196, size: 1 },\r\n // { x: 210.431654676259, y: 4.11764705882353, size: 1 },\r\n // { x: 217.553956834532, y: 3.25490196078431, size: 1 },\r\n // { x: 238.273381294964, y: 3.29411764705882, size: 1 },\r\n // { x: 247.338129496403, y: 3.88235294117647, size: 1 },\r\n // { x: 261.58273381295, y: 3.2156862745098, size: 1 },\r\n // { x: 262.230215827338, y: 2.82352941176471, size: 1 },\r\n // { x: 266.762589928058, y: 3.88235294117647, size: 1 },\r\n // { x: 270, y: 3.80392156862745, size: 1 },\r\n // { x: 282.302158273381, y: 2.86274509803922, size: 1 },\r\n // { x: 283.597122302158, y: 3.05882352941176, size: 1 },\r\n // { x: 285.539568345324, y: 3.96078431372549, size: 1 },\r\n // { x: 287.482014388489, y: 3.96078431372549, size: 1 },\r\n // { x: 290.071942446043, y: 3.96078431372549, size: 1 },\r\n // { x: 295.89928057554, y: 3.96078431372549, size: 1 },\r\n // { x: 296.546762589928, y: 3.96078431372549, size: 1 },\r\n // { x: 301.079136690647, y: 4, size: 1 },\r\n // { x: 317.26618705036, y: 4.11764705882353, size: 1 },\r\n // { x: 319.856115107914, y: 3.84313725490196, size: 1 },\r\n // { x: 323.741007194245, y: 3.33333333333333, size: 1 },\r\n // { x: 328.920863309353, y: 3.88235294117647, size: 1 },\r\n // { x: 337.985611510791, y: 4.03921568627451, size: 1 },\r\n // { x: 347.05035971223, y: 3.05882352941176, size: 1 },\r\n // { x: 348.345323741007, y: 2.7843137254902, size: 1 },\r\n // { x: 348.992805755396, y: 2.3921568627451, size: 1 },\r\n // { x: 20.0719424460432, y: 3.88235294117647, size: 1 },\r\n // { x: 27.1942446043165, y: 3.96078431372549, size: 1 },\r\n // { x: 33.0215827338129, y: 3.92156862745098, size: 1 },\r\n // { x: 51.7985611510791, y: 2.90196078431373, size: 1 },\r\n // { x: 52.4460431654676, y: 2.90196078431373, size: 1 },\r\n // { x: 121.079136690647, y: 4.11764705882353, size: 1 },\r\n // { x: 129.496402877698, y: 3.96078431372549, size: 1 },\r\n // { x: 130.791366906475, y: 4.23529411764706, size: 1 },\r\n // { x: 141.798561151079, y: 4, size: 1 },\r\n // { x: 145.68345323741, y: 4.03921568627451, size: 1 },\r\n // { x: 155.395683453237, y: 3.96078431372549, size: 1 },\r\n // { x: 159.928057553957, y: 3.13725490196078, size: 1 },\r\n // { x: 160.575539568345, y: 3.2156862745098, size: 1 },\r\n // { x: 172.877697841727, y: 3.92156862745098, size: 1 },\r\n // { x: 174.172661870504, y: 4.07843137254902, size: 1 },\r\n // { x: 174.820143884892, y: 3.96078431372549, size: 1 },\r\n // { x: 185.179856115108, y: 3.29411764705882, size: 1 },\r\n // { x: 187.769784172662, y: 3.33333333333333, size: 1 },\r\n // { x: 202.661870503597, y: 3.17647058823529, size: 1 },\r\n // { x: 204.604316546763, y: 3.05882352941176, size: 1 },\r\n // { x: 211.079136690647, y: 3.96078431372549, size: 1 },\r\n // { x: 226.618705035971, y: 3.09803921568627, size: 1 },\r\n // { x: 246.043165467626, y: 3.13725490196078, size: 1 },\r\n // { x: 255.107913669065, y: 3.80392156862745, size: 1 },\r\n // { x: 261.58273381295, y: 3.88235294117647, size: 1 },\r\n // { x: 268.705035971223, y: 3.05882352941176, size: 1 },\r\n // { x: 269.352517985611, y: 3.17647058823529, size: 1 },\r\n // { x: 270, y: 3.29411764705882, size: 1 },\r\n // { x: 275.827338129496, y: 3.88235294117647, size: 1 },\r\n // { x: 286.834532374101, y: 3.96078431372549, size: 1 },\r\n // { x: 288.129496402878, y: 3.2156862745098, size: 1 },\r\n // { x: 290.071942446043, y: 3.17647058823529, size: 1 },\r\n // { x: 297.841726618705, y: 3.25490196078431, size: 1 },\r\n // { x: 302.374100719424, y: 3.25490196078431, size: 1 },\r\n // { x: 306.258992805755, y: 3.29411764705882, size: 1 },\r\n // { x: 312.086330935252, y: 3.2156862745098, size: 1 },\r\n // { x: 330.863309352518, y: 4.03921568627451, size: 1 },\r\n // { x: 334.10071942446, y: 3.96078431372549, size: 1 },\r\n // { x: 335.395683453237, y: 4.03921568627451, size: 1 },\r\n // { x: 336.690647482014, y: 4, size: 1 },\r\n // { x: 339.928057553957, y: 3.88235294117647, size: 1 },\r\n // { x: 340.575539568345, y: 4.03921568627451, size: 1 },\r\n // { x: 341.870503597122, y: 3.96078431372549, size: 1 },\r\n // { x: 345.755395683453, y: 3.88235294117647, size: 1 },\r\n // { x: 353.525179856115, y: 3.09803921568627, size: 1 },\r\n // { x: 354.172661870504, y: 3.17647058823529, size: 1 },\r\n // { x: 354.820143884892, y: 2.94117647058824, size: 1 },\r\n // { x: 355.467625899281, y: 3.25490196078431, size: 1 },\r\n // { x: 356.115107913669, y: 2.98039215686275, size: 1 },\r\n // { x: 20.7194244604317, y: 3.96078431372549, size: 1 },\r\n // { x: 45.3237410071942, y: 3.88235294117647, size: 1 },\r\n // { x: 60.2158273381295, y: 3.2156862745098, size: 1 },\r\n // { x: 73.8129496402878, y: 3.88235294117647, size: 1 },\r\n // { x: 83.5251798561151, y: 3.49019607843137, size: 1 },\r\n // { x: 89.3525179856115, y: 4, size: 1 },\r\n // { x: 90, y: 4.07843137254902, size: 1 },\r\n // { x: 96.4748201438849, y: 3.84313725490196, size: 1 },\r\n // { x: 101.654676258993, y: 3.09803921568627, size: 1 },\r\n // { x: 102.302158273381, y: 3.29411764705882, size: 1 },\r\n // { x: 102.94964028777, y: 3.01960784313725, size: 1 },\r\n // { x: 106.187050359712, y: 3.96078431372549, size: 1 },\r\n // { x: 114.604316546763, y: 4.03921568627451, size: 1 },\r\n // { x: 123.669064748201, y: 2.90196078431373, size: 1 },\r\n // { x: 124.31654676259, y: 3.09803921568627, size: 1 },\r\n // { x: 124.964028776978, y: 2.90196078431373, size: 1 },\r\n // { x: 125.611510791367, y: 3.01960784313725, size: 1 },\r\n // { x: 146.330935251799, y: 3.09803921568627, size: 1 },\r\n // { x: 146.978417266187, y: 2.98039215686275, size: 1 },\r\n // { x: 166.402877697842, y: 3.17647058823529, size: 1 },\r\n // { x: 194.244604316547, y: 3.2156862745098, size: 1 },\r\n // { x: 214.31654676259, y: 3.41176470588235, size: 1 },\r\n // { x: 260.287769784173, y: 3.84313725490196, size: 1 },\r\n // { x: 269.352517985611, y: 3.84313725490196, size: 1 },\r\n // { x: 277.769784172662, y: 4.03921568627451, size: 1 },\r\n // { x: 281.654676258993, y: 4, size: 1 },\r\n // { x: 297.194244604317, y: 3.25490196078431, size: 1 },\r\n // { x: 298.489208633094, y: 3.33333333333333, size: 1 },\r\n // { x: 308.201438848921, y: 3.96078431372549, size: 1 },\r\n // { x: 317.913669064748, y: 3.2156862745098, size: 1 },\r\n // { x: 347.697841726619, y: 3.33333333333333, size: 1 },\r\n // { x: 0.648648648648649, y: 3.33333333333333, size: 1 },\r\n // { x: 1.2972972972973, y: 3.33333333333333, size: 1 },\r\n // { x: 1.94594594594595, y: 3.33333333333333, size: 1 },\r\n // { x: 3.24324324324324, y: 3.37254901960784, size: 1 },\r\n // { x: 3.89189189189189, y: 3.37254901960784, size: 1 },\r\n // { x: 12.3243243243243, y: 3.37254901960784, size: 1 },\r\n // { x: 17.5135135135135, y: 3.33333333333333, size: 1 },\r\n // { x: 18.1621621621622, y: 3.17647058823529, size: 1 },\r\n // { x: 20.7567567567568, y: 3.17647058823529, size: 1 },\r\n // { x: 22.0540540540541, y: 3.25490196078431, size: 1 },\r\n // { x: 22.7027027027027, y: 3.17647058823529, size: 1 },\r\n // { x: 23.3513513513514, y: 3.17647058823529, size: 1 },\r\n // { x: 24, y: 2.7843137254902, size: 1 },\r\n // { x: 24.6486486486486, y: 2.74509803921569, size: 1 },\r\n // { x: 25.2972972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 27.8918918918919, y: 4, size: 1 },\r\n // { x: 30.4864864864865, y: 3.76470588235294, size: 1 },\r\n // { x: 42.8108108108108, y: 3.29411764705882, size: 1 },\r\n // { x: 43.4594594594595, y: 3.09803921568627, size: 1 },\r\n // { x: 44.7567567567568, y: 3.2156862745098, size: 1 },\r\n // { x: 45.4054054054054, y: 2.50980392156863, size: 1 },\r\n // { x: 46.0540540540541, y: 2.7843137254902, size: 1 },\r\n // { x: 46.7027027027027, y: 3.33333333333333, size: 1 },\r\n // { x: 48.6486486486486, y: 3.2156862745098, size: 1 },\r\n // { x: 51.8918918918919, y: 3.49019607843137, size: 1 },\r\n // { x: 55.7837837837838, y: 3.37254901960784, size: 1 },\r\n // { x: 63.5675675675676, y: 3.33333333333333, size: 1 },\r\n // { x: 64.8648648648649, y: 3.76470588235294, size: 1 },\r\n // { x: 67.4594594594595, y: 3.88235294117647, size: 1 },\r\n // { x: 70.7027027027027, y: 4.03921568627451, size: 1 },\r\n // { x: 72.6486486486486, y: 3.64705882352941, size: 1 },\r\n // { x: 77.8378378378378, y: 3.96078431372549, size: 1 },\r\n // { x: 78.4864864864865, y: 3.80392156862745, size: 1 },\r\n // { x: 83.027027027027, y: 3.52941176470588, size: 1 },\r\n // { x: 87.5675675675676, y: 3.33333333333333, size: 1 },\r\n // { x: 96, y: 3.80392156862745, size: 1 },\r\n // { x: 103.783783783784, y: 3.84313725490196, size: 1 },\r\n // { x: 105.72972972973, y: 4.11764705882353, size: 1 },\r\n // { x: 108.324324324324, y: 3.2156862745098, size: 1 },\r\n // { x: 112.216216216216, y: 3.68627450980392, size: 1 },\r\n // { x: 116.108108108108, y: 3.37254901960784, size: 1 },\r\n // { x: 120, y: 3.88235294117647, size: 1 },\r\n // { x: 123.243243243243, y: 3.88235294117647, size: 1 },\r\n // { x: 125.837837837838, y: 3.88235294117647, size: 1 },\r\n // { x: 129.081081081081, y: 3.80392156862745, size: 1 },\r\n // { x: 130.378378378378, y: 3.01960784313725, size: 1 },\r\n // { x: 141.405405405405, y: 4, size: 1 },\r\n // { x: 152.432432432432, y: 3.09803921568627, size: 1 },\r\n // { x: 155.027027027027, y: 3.29411764705882, size: 1 },\r\n // { x: 158.918918918919, y: 3.37254901960784, size: 1 },\r\n // { x: 161.513513513514, y: 3.45098039215686, size: 1 },\r\n // { x: 164.756756756757, y: 3.37254901960784, size: 1 },\r\n // { x: 165.405405405405, y: 3.37254901960784, size: 1 },\r\n // { x: 169.297297297297, y: 3.2156862745098, size: 1 },\r\n // { x: 169.945945945946, y: 3.29411764705882, size: 1 },\r\n // { x: 170.594594594595, y: 3.33333333333333, size: 1 },\r\n // { x: 173.837837837838, y: 3.29411764705882, size: 1 },\r\n // { x: 174.486486486486, y: 3.52941176470588, size: 1 },\r\n // { x: 176.432432432432, y: 3.37254901960784, size: 1 },\r\n // { x: 178.378378378378, y: 3.49019607843137, size: 1 },\r\n // { x: 181.621621621622, y: 3.33333333333333, size: 1 },\r\n // { x: 190.054054054054, y: 3.29411764705882, size: 1 },\r\n // { x: 195.243243243243, y: 3.2156862745098, size: 1 },\r\n // { x: 195.891891891892, y: 2.98039215686275, size: 1 },\r\n // { x: 204.324324324324, y: 3.33333333333333, size: 1 },\r\n // { x: 216, y: 3.33333333333333, size: 1 },\r\n // { x: 216.648648648649, y: 3.33333333333333, size: 1 },\r\n // { x: 217.297297297297, y: 2.74509803921569, size: 1 },\r\n // { x: 217.945945945946, y: 3.17647058823529, size: 1 },\r\n // { x: 218.594594594595, y: 3.41176470588235, size: 1 },\r\n // { x: 224.432432432432, y: 3.41176470588235, size: 1 },\r\n // { x: 227.675675675676, y: 3.45098039215686, size: 1 },\r\n // { x: 231.567567567568, y: 3.37254901960784, size: 1 },\r\n // { x: 232.216216216216, y: 3.88235294117647, size: 1 },\r\n // { x: 233.513513513514, y: 3.41176470588235, size: 1 },\r\n // { x: 236.108108108108, y: 3.41176470588235, size: 1 },\r\n // { x: 237.405405405405, y: 3.29411764705882, size: 1 },\r\n // { x: 238.054054054054, y: 3.09803921568627, size: 1 },\r\n // { x: 238.702702702703, y: 2.54901960784314, size: 1 },\r\n // { x: 239.351351351351, y: 2.3921568627451, size: 1 },\r\n // { x: 240, y: 3.68627450980392, size: 1 },\r\n // { x: 241.945945945946, y: 3.45098039215686, size: 1 },\r\n // { x: 245.837837837838, y: 3.25490196078431, size: 1 },\r\n // { x: 252.972972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 253.621621621622, y: 3.29411764705882, size: 1 },\r\n // { x: 260.108108108108, y: 2.98039215686275, size: 1 },\r\n // { x: 260.756756756757, y: 2.7843137254902, size: 1 },\r\n // { x: 262.702702702703, y: 3.80392156862745, size: 1 },\r\n // { x: 272.432432432432, y: 3.84313725490196, size: 1 },\r\n // { x: 276.972972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 280.864864864865, y: 3.29411764705882, size: 1 },\r\n // { x: 281.513513513513, y: 3.17647058823529, size: 1 },\r\n // { x: 282.162162162162, y: 2.70588235294118, size: 1 },\r\n // { x: 293.837837837838, y: 3.72549019607843, size: 1 },\r\n // { x: 295.783783783784, y: 3.92156862745098, size: 1 },\r\n // { x: 301.621621621622, y: 3.33333333333333, size: 1 },\r\n // { x: 302.27027027027, y: 3.29411764705882, size: 1 },\r\n // { x: 302.918918918919, y: 3.01960784313725, size: 1 },\r\n // { x: 303.567567567568, y: 2.35294117647059, size: 1 },\r\n // { x: 304.216216216216, y: 2.66666666666667, size: 1 },\r\n // { x: 323.675675675676, y: 3.29411764705882, size: 1 },\r\n // { x: 324.324324324324, y: 3.17647058823529, size: 1 },\r\n // { x: 325.621621621622, y: 3.13725490196078, size: 1 },\r\n // { x: 326.27027027027, y: 3.29411764705882, size: 1 },\r\n // { x: 327.567567567568, y: 3.17647058823529, size: 1 },\r\n // { x: 328.216216216216, y: 3.29411764705882, size: 1 },\r\n // { x: 328.864864864865, y: 3.37254901960784, size: 1 },\r\n // { x: 330.810810810811, y: 3.41176470588235, size: 1 },\r\n // { x: 332.108108108108, y: 3.17647058823529, size: 1 },\r\n // { x: 332.756756756757, y: 3.2156862745098, size: 1 },\r\n // { x: 333.405405405405, y: 3.37254901960784, size: 1 },\r\n // { x: 334.054054054054, y: 3.17647058823529, size: 1 },\r\n // { x: 336, y: 3.25490196078431, size: 1 },\r\n // { x: 337.297297297297, y: 3.2156862745098, size: 1 },\r\n // { x: 337.945945945946, y: 3.41176470588235, size: 1 },\r\n // { x: 339.243243243243, y: 3.33333333333333, size: 1 },\r\n // { x: 339.891891891892, y: 3.2156862745098, size: 1 },\r\n // { x: 343.135135135135, y: 3.45098039215686, size: 1 },\r\n // { x: 343.783783783784, y: 3.13725490196078, size: 1 },\r\n // { x: 349.621621621622, y: 3.64705882352941, size: 1 },\r\n // { x: 353.513513513513, y: 3.76470588235294, size: 1 },\r\n // { x: 31.726618705036, y: 3.29411764705882, size: 1 },\r\n // { x: 32.3741007194245, y: 2.94117647058824, size: 1 },\r\n // { x: 34.9640287769784, y: 3.2156862745098, size: 1 },\r\n // { x: 38.2014388489209, y: 3.17647058823529, size: 1 },\r\n // { x: 44.6762589928058, y: 2.98039215686275, size: 1 },\r\n // { x: 46.6187050359712, y: 3.2156862745098, size: 1 },\r\n // { x: 49.8561151079137, y: 3.25490196078431, size: 1 },\r\n // { x: 53.0935251798561, y: 3.17647058823529, size: 1 },\r\n // { x: 58.9208633093525, y: 3.17647058823529, size: 1 },\r\n // { x: 60.2158273381295, y: 3.25490196078431, size: 1 },\r\n // { x: 93.8848920863309, y: 3.01960784313725, size: 1 },\r\n // { x: 94.5323741007194, y: 2.74509803921569, size: 1 },\r\n // { x: 95.1798561151079, y: 2.43137254901961, size: 1 },\r\n // { x: 114.604316546763, y: 3.25490196078431, size: 1 },\r\n // { x: 136.618705035971, y: 3.13725490196078, size: 1 },\r\n // { x: 137.26618705036, y: 3.17647058823529, size: 1 },\r\n // { x: 137.913669064748, y: 3.33333333333333, size: 1 },\r\n // { x: 141.798561151079, y: 3.2156862745098, size: 1 },\r\n // { x: 143.741007194245, y: 3.13725490196078, size: 1 },\r\n // { x: 148.273381294964, y: 3.33333333333333, size: 1 },\r\n // { x: 159.280575539568, y: 3.92156862745098, size: 1 },\r\n // { x: 182.589928057554, y: 3.17647058823529, size: 1 },\r\n // { x: 185.827338129496, y: 3.29411764705882, size: 1 },\r\n // { x: 188.41726618705, y: 3.29411764705882, size: 1 },\r\n // { x: 192.94964028777, y: 3.25490196078431, size: 1 },\r\n // { x: 194.892086330935, y: 3.17647058823529, size: 1 },\r\n // { x: 204.604316546763, y: 2.98039215686275, size: 1 },\r\n // { x: 224.676258992806, y: 3.13725490196078, size: 1 },\r\n // { x: 225.323741007194, y: 3.09803921568627, size: 1 },\r\n // { x: 241.510791366906, y: 3.2156862745098, size: 1 },\r\n // { x: 251.223021582734, y: 3.29411764705882, size: 1 },\r\n // { x: 262.877697841727, y: 3.17647058823529, size: 1 },\r\n // { x: 265.467625899281, y: 3.2156862745098, size: 1 },\r\n // { x: 268.057553956835, y: 3.01960784313725, size: 1 },\r\n // { x: 268.705035971223, y: 3.29411764705882, size: 1 },\r\n // { x: 269.352517985611, y: 3.2156862745098, size: 1 },\r\n // { x: 270.647482014389, y: 3.05882352941176, size: 1 },\r\n // { x: 271.294964028777, y: 3.17647058823529, size: 1 },\r\n // { x: 284.892086330935, y: 3.25490196078431, size: 1 },\r\n // { x: 286.187050359712, y: 3.25490196078431, size: 1 },\r\n // { x: 287.482014388489, y: 3.17647058823529, size: 1 },\r\n // { x: 293.956834532374, y: 3.92156862745098, size: 1 },\r\n // { x: 310.791366906475, y: 2.90196078431373, size: 1 },\r\n // { x: 311.438848920863, y: 2.98039215686275, size: 1 },\r\n // { x: 312.086330935252, y: 2.86274509803922, size: 1 },\r\n // { x: 312.73381294964, y: 3.01960784313725, size: 1 },\r\n // { x: 321.798561151079, y: 3.09803921568627, size: 1 },\r\n // { x: 323.093525179856, y: 3.29411764705882, size: 1 },\r\n // { x: 324.388489208633, y: 3.25490196078431, size: 1 },\r\n // { x: 327.625899280576, y: 3.17647058823529, size: 1 },\r\n // { x: 358.057553956835, y: 3.92156862745098, size: 1 },\r\n // { x: 1.94244604316547, y: 3.37254901960784, size: 1 },\r\n // { x: 10.3597122302158, y: 3.2156862745098, size: 1 },\r\n // { x: 48.5611510791367, y: 3.13725490196078, size: 1 },\r\n // { x: 62.158273381295, y: 3.13725490196078, size: 1 },\r\n // { x: 71.2230215827338, y: 3.13725490196078, size: 1 },\r\n // { x: 77.6978417266187, y: 3.05882352941176, size: 1 },\r\n // { x: 80.2877697841727, y: 3.05882352941176, size: 1 },\r\n // { x: 80.9352517985612, y: 2.98039215686275, size: 1 },\r\n // { x: 81.5827338129496, y: 2.90196078431373, size: 1 },\r\n // { x: 82.2302158273381, y: 2.7843137254902, size: 1 },\r\n // { x: 86.1151079136691, y: 3.2156862745098, size: 1 },\r\n // { x: 91.9424460431655, y: 3.2156862745098, size: 1 },\r\n // { x: 104.892086330935, y: 3.17647058823529, size: 1 },\r\n // { x: 105.539568345324, y: 3.2156862745098, size: 1 },\r\n // { x: 107.482014388489, y: 3.2156862745098, size: 1 },\r\n // { x: 109.424460431655, y: 3.33333333333333, size: 1 },\r\n // { x: 114.604316546763, y: 3.17647058823529, size: 1 },\r\n // { x: 123.021582733813, y: 3.25490196078431, size: 1 },\r\n // { x: 124.964028776978, y: 2.94117647058824, size: 1 },\r\n // { x: 125.611510791367, y: 3.25490196078431, size: 1 },\r\n // { x: 126.906474820144, y: 3.25490196078431, size: 1 },\r\n // { x: 135.323741007194, y: 3.17647058823529, size: 1 },\r\n // { x: 135.971223021583, y: 3.29411764705882, size: 1 },\r\n // { x: 143.093525179856, y: 3.33333333333333, size: 1 },\r\n // { x: 145.035971223022, y: 2.74509803921569, size: 1 },\r\n // { x: 145.68345323741, y: 2.98039215686275, size: 1 },\r\n // { x: 152.805755395683, y: 3.2156862745098, size: 1 },\r\n // { x: 153.453237410072, y: 3.25490196078431, size: 1 },\r\n // { x: 156.043165467626, y: 3.17647058823529, size: 1 },\r\n // { x: 161.870503597122, y: 3.2156862745098, size: 1 },\r\n // { x: 162.517985611511, y: 3.25490196078431, size: 1 },\r\n // { x: 168.345323741007, y: 2.82352941176471, size: 1 },\r\n // { x: 201.36690647482, y: 3.80392156862745, size: 1 },\r\n // { x: 226.618705035971, y: 3.25490196078431, size: 1 },\r\n // { x: 233.093525179856, y: 3.37254901960784, size: 1 },\r\n // { x: 274.532374100719, y: 3.01960784313725, size: 1 },\r\n // { x: 280.359712230216, y: 3.25490196078431, size: 1 },\r\n // { x: 281.007194244604, y: 3.01960784313725, size: 1 },\r\n // { x: 281.654676258993, y: 3.33333333333333, size: 1 },\r\n // { x: 285.539568345324, y: 3.29411764705882, size: 1 },\r\n // { x: 286.187050359712, y: 3.29411764705882, size: 1 },\r\n // { x: 286.834532374101, y: 3.17647058823529, size: 1 },\r\n // { x: 287.482014388489, y: 3.2156862745098, size: 1 },\r\n // { x: 292.014388489209, y: 3.17647058823529, size: 1 },\r\n // { x: 292.661870503597, y: 3.17647058823529, size: 1 },\r\n // { x: 293.956834532374, y: 3.25490196078431, size: 1 },\r\n // { x: 1.2972972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 10.3783783783784, y: 3.6078431372549, size: 1 },\r\n // { x: 22.0540540540541, y: 3.2156862745098, size: 1 },\r\n // { x: 42.8108108108108, y: 3.37254901960784, size: 1 },\r\n // { x: 43.4594594594595, y: 3.13725490196078, size: 1 },\r\n // { x: 44.7567567567568, y: 3.33333333333333, size: 1 },\r\n // { x: 46.0540540540541, y: 2.98039215686275, size: 1 },\r\n // { x: 47.3513513513514, y: 3.29411764705882, size: 1 },\r\n // { x: 49.2972972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 52.5405405405405, y: 3.17647058823529, size: 1 },\r\n // { x: 55.1351351351351, y: 3.25490196078431, size: 1 },\r\n // { x: 57.0810810810811, y: 3.37254901960784, size: 1 },\r\n // { x: 64.8648648648649, y: 3.33333333333333, size: 1 },\r\n // { x: 65.5135135135135, y: 2.50980392156863, size: 1 },\r\n // { x: 66.1621621621622, y: 2.43137254901961, size: 1 },\r\n // { x: 66.8108108108108, y: 2.74509803921569, size: 1 },\r\n // { x: 67.4594594594595, y: 2.74509803921569, size: 1 },\r\n // { x: 70.7027027027027, y: 3.88235294117647, size: 1 },\r\n // { x: 79.7837837837838, y: 3.29411764705882, size: 1 },\r\n // { x: 86.9189189189189, y: 3.88235294117647, size: 1 },\r\n // { x: 90.1621621621622, y: 3.88235294117647, size: 1 },\r\n // { x: 99.8918918918919, y: 3.84313725490196, size: 1 },\r\n // { x: 101.189189189189, y: 3.64705882352941, size: 1 },\r\n // { x: 105.081081081081, y: 3.88235294117647, size: 1 },\r\n // { x: 108.972972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 121.945945945946, y: 3.45098039215686, size: 1 },\r\n // { x: 123.243243243243, y: 3.45098039215686, size: 1 },\r\n // { x: 125.837837837838, y: 3.45098039215686, size: 1 },\r\n // { x: 128.432432432432, y: 3.29411764705882, size: 1 },\r\n // { x: 132.324324324324, y: 3.84313725490196, size: 1 },\r\n // { x: 144.648648648649, y: 3.92156862745098, size: 1 },\r\n // { x: 147.243243243243, y: 3.88235294117647, size: 1 },\r\n // { x: 157.621621621622, y: 3.76470588235294, size: 1 },\r\n // { x: 167.351351351351, y: 3.96078431372549, size: 1 },\r\n // { x: 181.621621621622, y: 3.76470588235294, size: 1 },\r\n // { x: 184.216216216216, y: 3.84313725490196, size: 1 },\r\n // { x: 190.054054054054, y: 3.80392156862745, size: 1 },\r\n // { x: 191.351351351351, y: 3.76470588235294, size: 1 },\r\n // { x: 192, y: 4.35294117647059, size: 1 },\r\n // { x: 195.243243243243, y: 2.62745098039216, size: 1 },\r\n // { x: 195.891891891892, y: 2.62745098039216, size: 1 },\r\n // { x: 200.432432432432, y: 3.92156862745098, size: 1 },\r\n // { x: 206.27027027027, y: 3.88235294117647, size: 1 },\r\n // { x: 208.864864864865, y: 3.45098039215686, size: 1 },\r\n // { x: 212.108108108108, y: 3.80392156862745, size: 1 },\r\n // { x: 214.702702702703, y: 3.80392156862745, size: 1 },\r\n // { x: 215.351351351351, y: 3.96078431372549, size: 1 },\r\n // { x: 216.648648648649, y: 3.2156862745098, size: 1 },\r\n // { x: 219.243243243243, y: 3.29411764705882, size: 1 },\r\n // { x: 219.891891891892, y: 3.33333333333333, size: 1 },\r\n // { x: 224.432432432432, y: 3.37254901960784, size: 1 },\r\n // { x: 225.081081081081, y: 3.2156862745098, size: 1 },\r\n // { x: 225.72972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 229.621621621622, y: 3.29411764705882, size: 1 },\r\n // { x: 230.27027027027, y: 3.13725490196078, size: 1 },\r\n // { x: 234.810810810811, y: 3.33333333333333, size: 1 },\r\n // { x: 235.459459459459, y: 3.2156862745098, size: 1 },\r\n // { x: 240.648648648649, y: 4, size: 1 },\r\n // { x: 241.297297297297, y: 3.92156862745098, size: 1 },\r\n // { x: 246.486486486486, y: 3.96078431372549, size: 1 },\r\n // { x: 248.432432432432, y: 3.84313725490196, size: 1 },\r\n // { x: 249.72972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 252.972972972973, y: 3.6078431372549, size: 1 },\r\n // { x: 260.108108108108, y: 3.13725490196078, size: 1 },\r\n // { x: 260.756756756757, y: 3.33333333333333, size: 1 },\r\n // { x: 262.054054054054, y: 3.96078431372549, size: 1 },\r\n // { x: 268.540540540541, y: 3.76470588235294, size: 1 },\r\n // { x: 270.486486486487, y: 3.88235294117647, size: 1 },\r\n // { x: 274.378378378378, y: 3.56862745098039, size: 1 },\r\n // { x: 278.27027027027, y: 3.80392156862745, size: 1 },\r\n // { x: 280.216216216216, y: 3.76470588235294, size: 1 },\r\n // { x: 283.459459459459, y: 3.68627450980392, size: 1 },\r\n // { x: 289.297297297297, y: 3.76470588235294, size: 1 },\r\n // { x: 290.594594594595, y: 3.92156862745098, size: 1 },\r\n // { x: 297.081081081081, y: 3.6078431372549, size: 1 },\r\n // { x: 316.540540540541, y: 3.88235294117647, size: 1 },\r\n // { x: 328.216216216216, y: 3.96078431372549, size: 1 },\r\n // { x: 328.864864864865, y: 3.52941176470588, size: 1 },\r\n // { x: 337.297297297297, y: 3.64705882352941, size: 1 },\r\n // { x: 338.594594594595, y: 3.96078431372549, size: 1 },\r\n // { x: 352.864864864865, y: 3.37254901960784, size: 1 },\r\n // { x: 356.756756756757, y: 3.41176470588235, size: 1 },\r\n // { x: 12.9496402877698, y: 4, size: 1 },\r\n // { x: 14.8920863309353, y: 3.92156862745098, size: 1 },\r\n // { x: 19.4244604316547, y: 3.92156862745098, size: 1 },\r\n // { x: 20.7194244604317, y: 3.92156862745098, size: 1 },\r\n // { x: 31.0791366906475, y: 3.13725490196078, size: 1 },\r\n // { x: 33.0215827338129, y: 3.25490196078431, size: 1 },\r\n // { x: 33.6690647482014, y: 3.25490196078431, size: 1 },\r\n // { x: 58.273381294964, y: 3.96078431372549, size: 1 },\r\n // { x: 73.1654676258993, y: 3.17647058823529, size: 1 },\r\n // { x: 78.3453237410072, y: 3.33333333333333, size: 1 },\r\n // { x: 94.5323741007194, y: 2.98039215686275, size: 1 },\r\n // { x: 95.8273381294964, y: 2.50980392156863, size: 1 },\r\n // { x: 96.4748201438849, y: 2.90196078431373, size: 1 },\r\n // { x: 97.1223021582734, y: 3.33333333333333, size: 1 },\r\n // { x: 100.359712230216, y: 3.41176470588235, size: 1 },\r\n // { x: 115.89928057554, y: 2.7843137254902, size: 1 },\r\n // { x: 116.546762589928, y: 2.86274509803922, size: 1 },\r\n // { x: 117.194244604317, y: 2.82352941176471, size: 1 },\r\n // { x: 118.489208633094, y: 3.2156862745098, size: 1 },\r\n // { x: 137.913669064748, y: 2.94117647058824, size: 1 },\r\n // { x: 143.093525179856, y: 3.96078431372549, size: 1 },\r\n // { x: 146.978417266187, y: 4.03921568627451, size: 1 },\r\n // { x: 161.870503597122, y: 4.03921568627451, size: 1 },\r\n // { x: 204.604316546763, y: 3.17647058823529, size: 1 },\r\n // { x: 205.251798561151, y: 3.17647058823529, size: 1 },\r\n // { x: 245.395683453237, y: 2.82352941176471, size: 1 },\r\n // { x: 246.043165467626, y: 2.70588235294118, size: 1 },\r\n // { x: 299.136690647482, y: 4, size: 1 },\r\n // { x: 301.079136690647, y: 3.45098039215686, size: 1 },\r\n // { x: 316.618705035971, y: 3.88235294117647, size: 1 },\r\n // { x: 329.568345323741, y: 3.92156862745098, size: 1 },\r\n // { x: 339.928057553957, y: 4.07843137254902, size: 1 },\r\n // { x: 354.820143884892, y: 3.2156862745098, size: 1 },\r\n // { x: 355.467625899281, y: 3.01960784313725, size: 1 },\r\n // { x: 38.2014388489209, y: 2.94117647058824, size: 1 },\r\n // { x: 56.9784172661871, y: 3.33333333333333, size: 1 },\r\n // { x: 62.158273381295, y: 3.84313725490196, size: 1 },\r\n // { x: 88.705035971223, y: 4.15686274509804, size: 1 },\r\n // { x: 90, y: 4, size: 1 },\r\n // { x: 91.294964028777, y: 4, size: 1 },\r\n // { x: 95.8273381294964, y: 3.96078431372549, size: 1 },\r\n // { x: 101.654676258993, y: 2.50980392156863, size: 1 },\r\n // { x: 102.302158273381, y: 2.82352941176471, size: 1 },\r\n // { x: 102.94964028777, y: 2.47058823529412, size: 1 },\r\n // { x: 103.597122302158, y: 2.74509803921569, size: 1 },\r\n // { x: 123.021582733813, y: 3.01960784313725, size: 1 },\r\n // { x: 142.446043165468, y: 3.29411764705882, size: 1 },\r\n // { x: 144.388489208633, y: 2.03921568627451, size: 1 },\r\n // { x: 145.035971223022, y: 2.15686274509804, size: 1 },\r\n // { x: 145.68345323741, y: 2.82352941176471, size: 1 },\r\n // { x: 146.978417266187, y: 3.01960784313725, size: 1 },\r\n // { x: 148.920863309353, y: 3.09803921568627, size: 1 },\r\n // { x: 149.568345323741, y: 2.98039215686275, size: 1 },\r\n // { x: 154.10071942446, y: 2.90196078431373, size: 1 },\r\n // { x: 159.928057553957, y: 2.94117647058824, size: 1 },\r\n // { x: 165.755395683453, y: 3.37254901960784, size: 1 },\r\n // { x: 185.827338129496, y: 4.03921568627451, size: 1 },\r\n // { x: 188.41726618705, y: 2.70588235294118, size: 1 },\r\n // { x: 208.489208633094, y: 3.2156862745098, size: 1 },\r\n // { x: 209.136690647482, y: 2.7843137254902, size: 1 },\r\n // { x: 209.784172661871, y: 2.70588235294118, size: 1 },\r\n // { x: 210.431654676259, y: 3.13725490196078, size: 1 },\r\n // { x: 217.553956834532, y: 2.98039215686275, size: 1 },\r\n // { x: 221.438848920863, y: 3.2156862745098, size: 1 },\r\n // { x: 251.870503597122, y: 3.13725490196078, size: 1 },\r\n // { x: 252.517985611511, y: 2.58823529411765, size: 1 },\r\n // { x: 253.165467625899, y: 2.31372549019608, size: 1 },\r\n // { x: 268.705035971223, y: 3.80392156862745, size: 1 },\r\n // { x: 273.884892086331, y: 2.19607843137255, size: 1 },\r\n // { x: 274.532374100719, y: 1.80392156862745, size: 1 },\r\n // { x: 295.251798561151, y: 3.05882352941176, size: 1 },\r\n // { x: 295.89928057554, y: 2.66666666666667, size: 1 },\r\n // { x: 312.086330935252, y: 4.35294117647059, size: 1 },\r\n // { x: 315.971223021583, y: 3.2156862745098, size: 1 },\r\n // { x: 337.338129496403, y: 3.29411764705882, size: 1 },\r\n // { x: 338.63309352518, y: 3.25490196078431, size: 1 },\r\n // { x: 339.280575539568, y: 3.25490196078431, size: 1 },\r\n // { x: 339.928057553957, y: 3.13725490196078, size: 1 },\r\n // { x: 345.755395683453, y: 3.17647058823529, size: 1 },\r\n // { x: 350.935251798561, y: 3.25490196078431, size: 1 },\r\n // { x: 355.467625899281, y: 3.17647058823529, size: 1 },\r\n // { x: 356.115107913669, y: 3.17647058823529, size: 1 },\r\n // { x: 358.057553956835, y: 3.13725490196078, size: 1 },\r\n // { x: 21.3669064748201, y: 3.13725490196078, size: 1 },\r\n // { x: 22.0143884892086, y: 2.35294117647059, size: 1 },\r\n // { x: 22.6618705035971, y: 2.58823529411765, size: 1 },\r\n // { x: 34.9640287769784, y: 4.07843137254902, size: 1 },\r\n // { x: 40.7913669064748, y: 3.96078431372549, size: 1 },\r\n // { x: 42.0863309352518, y: 3.09803921568627, size: 1 },\r\n // { x: 64.1007194244604, y: 2.98039215686275, size: 1 },\r\n // { x: 111.36690647482, y: 4.11764705882353, size: 1 },\r\n // { x: 113.956834532374, y: 4.11764705882353, size: 1 },\r\n // { x: 115.251798561151, y: 4.11764705882353, size: 1 },\r\n // { x: 116.546762589928, y: 3.96078431372549, size: 1 },\r\n // { x: 121.079136690647, y: 3.92156862745098, size: 1 },\r\n // { x: 126.258992805755, y: 3.96078431372549, size: 1 },\r\n // { x: 133.381294964029, y: 3.96078431372549, size: 1 },\r\n // { x: 135.323741007194, y: 4.15686274509804, size: 1 },\r\n // { x: 138.561151079137, y: 4.15686274509804, size: 1 },\r\n // { x: 139.856115107914, y: 3.92156862745098, size: 1 },\r\n // { x: 140.503597122302, y: 3.96078431372549, size: 1 },\r\n // { x: 142.446043165468, y: 3.84313725490196, size: 1 },\r\n // { x: 143.093525179856, y: 3.88235294117647, size: 1 },\r\n // { x: 145.035971223022, y: 3.92156862745098, size: 1 },\r\n // { x: 147.625899280576, y: 3.96078431372549, size: 1 },\r\n // { x: 148.273381294964, y: 4.19607843137255, size: 1 },\r\n // { x: 183.237410071942, y: 3.96078431372549, size: 1 },\r\n // { x: 187.769784172662, y: 4, size: 1 },\r\n // { x: 195.539568345324, y: 3.37254901960784, size: 1 },\r\n // { x: 206.546762589928, y: 3.92156862745098, size: 1 },\r\n // { x: 211.079136690647, y: 3.92156862745098, size: 1 },\r\n // { x: 215.611510791367, y: 3.2156862745098, size: 1 },\r\n // { x: 216.258992805755, y: 3.13725490196078, size: 1 },\r\n // { x: 227.913669064748, y: 3.92156862745098, size: 1 },\r\n // { x: 232.446043165468, y: 3.84313725490196, size: 1 },\r\n // { x: 251.223021582734, y: 3.96078431372549, size: 1 },\r\n // { x: 262.877697841727, y: 4, size: 1 },\r\n // { x: 263.525179856115, y: 3.96078431372549, size: 1 },\r\n // { x: 269.352517985611, y: 4.03921568627451, size: 1 },\r\n // { x: 270.647482014389, y: 4.03921568627451, size: 1 },\r\n // { x: 272.589928057554, y: 3.88235294117647, size: 1 },\r\n // { x: 273.884892086331, y: 4.07843137254902, size: 1 },\r\n // { x: 281.007194244604, y: 2.94117647058824, size: 1 },\r\n // { x: 282.302158273381, y: 2.70588235294118, size: 1 },\r\n // { x: 282.94964028777, y: 2.90196078431373, size: 1 },\r\n // { x: 288.129496402878, y: 3.92156862745098, size: 1 },\r\n // { x: 289.424460431655, y: 3.88235294117647, size: 1 },\r\n // { x: 292.014388489209, y: 4.03921568627451, size: 1 },\r\n // { x: 297.194244604317, y: 4.07843137254902, size: 1 },\r\n // { x: 301.726618705036, y: 3.25490196078431, size: 1 },\r\n // { x: 302.374100719424, y: 2.82352941176471, size: 1 },\r\n // { x: 303.021582733813, y: 2.3921568627451, size: 1 },\r\n // { x: 303.669064748201, y: 2.54901960784314, size: 1 },\r\n // { x: 304.31654676259, y: 2.70588235294118, size: 1 },\r\n // { x: 314.676258992806, y: 3.96078431372549, size: 1 },\r\n // { x: 317.913669064748, y: 3.84313725490196, size: 1 },\r\n // { x: 321.798561151079, y: 3.96078431372549, size: 1 },\r\n // { x: 334.10071942446, y: 4, size: 1 },\r\n // { x: 341.223021582734, y: 3.80392156862745, size: 1 },\r\n // { x: 348.992805755396, y: 4.03921568627451, size: 1 },\r\n // { x: 350.287769784173, y: 4.03921568627451, size: 1 },\r\n // { x: 354.172661870504, y: 4.15686274509804, size: 1 },\r\n // { x: 356.115107913669, y: 3.96078431372549, size: 1 },\r\n // { x: 356.762589928058, y: 4, size: 1 },\r\n // { x: 0, y: 3.92156862745098, size: 1 },\r\n // { x: 2.58992805755396, y: 4.03921568627451, size: 1 },\r\n // { x: 3.23741007194245, y: 4, size: 1 },\r\n // { x: 9.06474820143885, y: 3.92156862745098, size: 1 },\r\n // { x: 23.3093525179856, y: 3.96078431372549, size: 1 },\r\n // { x: 24.6043165467626, y: 4, size: 1 },\r\n // { x: 36.2589928057554, y: 4.11764705882353, size: 1 },\r\n // { x: 37.5539568345324, y: 4.07843137254902, size: 1 },\r\n // { x: 40.1438848920863, y: 3.88235294117647, size: 1 },\r\n // { x: 41.4388489208633, y: 3.92156862745098, size: 1 },\r\n // { x: 42.0863309352518, y: 3.88235294117647, size: 1 },\r\n // { x: 46.6187050359712, y: 3.88235294117647, size: 1 },\r\n // { x: 50.5035971223022, y: 3.01960784313725, size: 1 },\r\n // { x: 52.4460431654676, y: 3.17647058823529, size: 1 },\r\n // { x: 54.3884892086331, y: 4, size: 1 },\r\n // { x: 78.3453237410072, y: 4, size: 1 },\r\n // { x: 85.4676258992806, y: 4.07843137254902, size: 1 },\r\n // { x: 86.7625899280576, y: 4.03921568627451, size: 1 },\r\n // { x: 87.410071942446, y: 3.96078431372549, size: 1 },\r\n // { x: 89.3525179856115, y: 4.07843137254902, size: 1 },\r\n // { x: 131.438848920863, y: 3.88235294117647, size: 1 },\r\n // { x: 134.676258992806, y: 4.07843137254902, size: 1 },\r\n // { x: 146.330935251799, y: 4, size: 1 },\r\n // { x: 152.805755395683, y: 4.11764705882353, size: 1 },\r\n // { x: 159.280575539568, y: 2.94117647058824, size: 1 },\r\n // { x: 159.928057553957, y: 2.86274509803922, size: 1 },\r\n // { x: 200.071942446043, y: 3.84313725490196, size: 1 },\r\n // { x: 204.604316546763, y: 3.96078431372549, size: 1 },\r\n // { x: 207.841726618705, y: 3.92156862745098, size: 1 },\r\n // { x: 218.848920863309, y: 3.92156862745098, size: 1 },\r\n // { x: 224.676258992806, y: 2.7843137254902, size: 1 },\r\n // { x: 225.323741007194, y: 2.7843137254902, size: 1 },\r\n // { x: 244.748201438849, y: 2.94117647058824, size: 1 },\r\n // { x: 266.115107913669, y: 2.90196078431373, size: 1 },\r\n // { x: 275.179856115108, y: 3.96078431372549, size: 1 },\r\n // { x: 309.496402877698, y: 3.01960784313725, size: 1 },\r\n // { x: 310.143884892086, y: 3.17647058823529, size: 1 },\r\n // { x: 344.460431654676, y: 3.96078431372549, size: 1 },\r\n // { x: 353.525179856115, y: 3.25490196078431, size: 1 },\r\n // { x: 2.59459459459459, y: 3.76470588235294, size: 1 },\r\n // { x: 3.89189189189189, y: 3.45098039215686, size: 1 },\r\n // { x: 4.54054054054054, y: 3.72549019607843, size: 1 },\r\n // { x: 11.027027027027, y: 3.52941176470588, size: 1 },\r\n // { x: 14.9189189189189, y: 3.33333333333333, size: 1 },\r\n // { x: 15.5675675675676, y: 3.37254901960784, size: 1 },\r\n // { x: 16.2162162162162, y: 3.09803921568627, size: 1 },\r\n // { x: 18.8108108108108, y: 3.84313725490196, size: 1 },\r\n // { x: 20.7567567567568, y: 3.76470588235294, size: 1 },\r\n // { x: 23.3513513513514, y: 3.72549019607843, size: 1 },\r\n // { x: 25.2972972972973, y: 3.92156862745098, size: 1 },\r\n // { x: 25.9459459459459, y: 3.92156862745098, size: 1 },\r\n // { x: 28.5405405405405, y: 3.84313725490196, size: 1 },\r\n // { x: 30.4864864864865, y: 3.84313725490196, size: 1 },\r\n // { x: 32.4324324324324, y: 4.03921568627451, size: 1 },\r\n // { x: 41.5135135135135, y: 3.80392156862745, size: 1 },\r\n // { x: 42.1621621621622, y: 3.92156862745098, size: 1 },\r\n // { x: 43.4594594594595, y: 3.64705882352941, size: 1 },\r\n // { x: 47.3513513513514, y: 4.03921568627451, size: 1 },\r\n // { x: 53.8378378378378, y: 3.96078431372549, size: 1 },\r\n // { x: 54.4864864864865, y: 3.80392156862745, size: 1 },\r\n // { x: 55.1351351351351, y: 3.88235294117647, size: 1 },\r\n // { x: 55.7837837837838, y: 3.72549019607843, size: 1 },\r\n // { x: 59.6756756756757, y: 3.05882352941176, size: 1 },\r\n // { x: 67.4594594594595, y: 3.80392156862745, size: 1 },\r\n // { x: 79.1351351351351, y: 3.17647058823529, size: 1 },\r\n // { x: 80.4324324324324, y: 3.25490196078431, size: 1 },\r\n // { x: 81.0810810810811, y: 2.98039215686275, size: 1 },\r\n // { x: 81.7297297297297, y: 3.41176470588235, size: 1 },\r\n // { x: 83.027027027027, y: 3.41176470588235, size: 1 },\r\n // { x: 84.3243243243243, y: 3.56862745098039, size: 1 },\r\n // { x: 86.2702702702703, y: 3.56862745098039, size: 1 },\r\n // { x: 98.5945945945946, y: 3.41176470588235, size: 1 },\r\n // { x: 100.540540540541, y: 3.25490196078431, size: 1 },\r\n // { x: 101.189189189189, y: 3.41176470588235, size: 1 },\r\n // { x: 101.837837837838, y: 3.17647058823529, size: 1 },\r\n // { x: 103.135135135135, y: 3.2156862745098, size: 1 },\r\n // { x: 103.783783783784, y: 3.37254901960784, size: 1 },\r\n // { x: 107.027027027027, y: 3.84313725490196, size: 1 },\r\n // { x: 109.621621621622, y: 3.76470588235294, size: 1 },\r\n // { x: 118.054054054054, y: 3.96078431372549, size: 1 },\r\n // { x: 118.702702702703, y: 3.84313725490196, size: 1 },\r\n // { x: 123.243243243243, y: 3.29411764705882, size: 1 },\r\n // { x: 123.891891891892, y: 3.01960784313725, size: 1 },\r\n // { x: 124.540540540541, y: 3.01960784313725, size: 1 },\r\n // { x: 125.837837837838, y: 4.11764705882353, size: 1 },\r\n // { x: 126.486486486486, y: 3.80392156862745, size: 1 },\r\n // { x: 128.432432432432, y: 3.88235294117647, size: 1 },\r\n // { x: 129.72972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 131.675675675676, y: 4, size: 1 },\r\n // { x: 132.972972972973, y: 4.03921568627451, size: 1 },\r\n // { x: 135.567567567568, y: 4.07843137254902, size: 1 },\r\n // { x: 136.864864864865, y: 4.23529411764706, size: 1 },\r\n // { x: 137.513513513514, y: 4.07843137254902, size: 1 },\r\n // { x: 138.810810810811, y: 3.96078431372549, size: 1 },\r\n // { x: 140.108108108108, y: 4.03921568627451, size: 1 },\r\n // { x: 140.756756756757, y: 3.88235294117647, size: 1 },\r\n // { x: 141.405405405405, y: 3.96078431372549, size: 1 },\r\n // { x: 144, y: 2.94117647058824, size: 1 },\r\n // { x: 145.297297297297, y: 3.49019607843137, size: 1 },\r\n // { x: 146.594594594595, y: 3.92156862745098, size: 1 },\r\n // { x: 147.243243243243, y: 4.15686274509804, size: 1 },\r\n // { x: 149.837837837838, y: 3.72549019607843, size: 1 },\r\n // { x: 152.432432432432, y: 3.92156862745098, size: 1 },\r\n // { x: 155.027027027027, y: 3.84313725490196, size: 1 },\r\n // { x: 155.675675675676, y: 3.92156862745098, size: 1 },\r\n // { x: 156.324324324324, y: 4.07843137254902, size: 1 },\r\n // { x: 156.972972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 157.621621621622, y: 3.88235294117647, size: 1 },\r\n // { x: 158.27027027027, y: 3.84313725490196, size: 1 },\r\n // { x: 160.216216216216, y: 3.80392156862745, size: 1 },\r\n // { x: 160.864864864865, y: 3.88235294117647, size: 1 },\r\n // { x: 162.810810810811, y: 3.92156862745098, size: 1 },\r\n // { x: 168, y: 3.29411764705882, size: 1 },\r\n // { x: 169.297297297297, y: 4, size: 1 },\r\n // { x: 176.432432432432, y: 3.84313725490196, size: 1 },\r\n // { x: 184.216216216216, y: 3.6078431372549, size: 1 },\r\n // { x: 186.162162162162, y: 3.2156862745098, size: 1 },\r\n // { x: 187.459459459459, y: 3.2156862745098, size: 1 },\r\n // { x: 188.108108108108, y: 3.25490196078431, size: 1 },\r\n // { x: 188.756756756757, y: 3.01960784313725, size: 1 },\r\n // { x: 189.405405405405, y: 3.09803921568627, size: 1 },\r\n // { x: 190.702702702703, y: 3.84313725490196, size: 1 },\r\n // { x: 195.891891891892, y: 3.72549019607843, size: 1 },\r\n // { x: 199.135135135135, y: 3.88235294117647, size: 1 },\r\n // { x: 209.513513513514, y: 3.41176470588235, size: 1 },\r\n // { x: 214.702702702703, y: 3.92156862745098, size: 1 },\r\n // { x: 216, y: 3.96078431372549, size: 1 },\r\n // { x: 216.648648648649, y: 4, size: 1 },\r\n // { x: 217.297297297297, y: 3.84313725490196, size: 1 },\r\n // { x: 218.594594594595, y: 3.88235294117647, size: 1 },\r\n // { x: 219.243243243243, y: 4.03921568627451, size: 1 },\r\n // { x: 219.891891891892, y: 3.92156862745098, size: 1 },\r\n // { x: 220.540540540541, y: 4.03921568627451, size: 1 },\r\n // { x: 221.837837837838, y: 3.92156862745098, size: 1 },\r\n // { x: 223.135135135135, y: 4, size: 1 },\r\n // { x: 223.783783783784, y: 4.03921568627451, size: 1 },\r\n // { x: 227.675675675676, y: 3.88235294117647, size: 1 },\r\n // { x: 236.108108108108, y: 3.88235294117647, size: 1 },\r\n // { x: 238.702702702703, y: 3.84313725490196, size: 1 },\r\n // { x: 240.648648648649, y: 4.07843137254902, size: 1 },\r\n // { x: 241.945945945946, y: 3.92156862745098, size: 1 },\r\n // { x: 242.594594594595, y: 3.96078431372549, size: 1 },\r\n // { x: 243.891891891892, y: 4.03921568627451, size: 1 },\r\n // { x: 247.135135135135, y: 3.88235294117647, size: 1 },\r\n // { x: 249.72972972973, y: 3.92156862745098, size: 1 },\r\n // { x: 254.27027027027, y: 3.41176470588235, size: 1 },\r\n // { x: 255.567567567568, y: 3.76470588235294, size: 1 },\r\n // { x: 266.594594594595, y: 3.68627450980392, size: 1 },\r\n // { x: 273.081081081081, y: 3.80392156862745, size: 1 },\r\n // { x: 274.378378378378, y: 3.29411764705882, size: 1 },\r\n // { x: 277.621621621622, y: 3.84313725490196, size: 1 },\r\n // { x: 279.567567567568, y: 3.96078431372549, size: 1 },\r\n // { x: 281.513513513513, y: 3.64705882352941, size: 1 },\r\n // { x: 285.405405405405, y: 3.84313725490196, size: 1 },\r\n // { x: 294.486486486487, y: 3.2156862745098, size: 1 },\r\n // { x: 295.135135135135, y: 3.29411764705882, size: 1 },\r\n // { x: 295.783783783784, y: 2.94117647058824, size: 1 },\r\n // { x: 296.432432432432, y: 3.05882352941176, size: 1 },\r\n // { x: 297.081081081081, y: 3.13725490196078, size: 1 },\r\n // { x: 300.972972972973, y: 3.92156862745098, size: 1 },\r\n // { x: 302.27027027027, y: 3.96078431372549, size: 1 },\r\n // { x: 306.162162162162, y: 3.56862745098039, size: 1 },\r\n // { x: 306.810810810811, y: 3.56862745098039, size: 1 },\r\n // { x: 317.189189189189, y: 3.41176470588235, size: 1 },\r\n // { x: 323.675675675676, y: 3.45098039215686, size: 1 },\r\n // { x: 330.162162162162, y: 3.49019607843137, size: 1 },\r\n // { x: 331.459459459459, y: 3.41176470588235, size: 1 },\r\n // { x: 332.756756756757, y: 3.41176470588235, size: 1 },\r\n // { x: 333.405405405405, y: 3.33333333333333, size: 1 },\r\n // { x: 339.891891891892, y: 3.41176470588235, size: 1 },\r\n // { x: 348.972972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 353.513513513513, y: 3.80392156862745, size: 1 },\r\n // { x: 358.054054054054, y: 3.41176470588235, size: 1 },\r\n // { x: 358.702702702703, y: 3.41176470588235, size: 1 },\r\n // { x: 0.647482014388489, y: 2.94117647058824, size: 1 },\r\n // { x: 1.29496402877698, y: 3.25490196078431, size: 1 },\r\n // { x: 11.0071942446043, y: 4.07843137254902, size: 1 },\r\n // { x: 21.3669064748201, y: 3.05882352941176, size: 1 },\r\n // { x: 22.0143884892086, y: 2.86274509803922, size: 1 },\r\n // { x: 22.6618705035971, y: 2.86274509803922, size: 1 },\r\n // { x: 23.3093525179856, y: 2.94117647058824, size: 1 },\r\n // { x: 23.9568345323741, y: 2.98039215686275, size: 1 },\r\n // { x: 36.2589928057554, y: 3.92156862745098, size: 1 },\r\n // { x: 43.3812949640288, y: 2.70588235294118, size: 1 },\r\n // { x: 44.0287769784173, y: 2.86274509803922, size: 1 },\r\n // { x: 44.6762589928058, y: 2.74509803921569, size: 1 },\r\n // { x: 45.3237410071942, y: 2.70588235294118, size: 1 },\r\n // { x: 46.6187050359712, y: 3.41176470588235, size: 1 },\r\n // { x: 76.4028776978417, y: 3.92156862745098, size: 1 },\r\n // { x: 77.0503597122302, y: 3.92156862745098, size: 1 },\r\n // { x: 81.5827338129496, y: 3.84313725490196, size: 1 },\r\n // { x: 128.848920863309, y: 3.2156862745098, size: 1 },\r\n // { x: 131.438848920863, y: 3.05882352941176, size: 1 },\r\n // { x: 137.26618705036, y: 3.92156862745098, size: 1 },\r\n // { x: 145.68345323741, y: 3.96078431372549, size: 1 },\r\n // { x: 152.158273381295, y: 3.2156862745098, size: 1 },\r\n // { x: 205.251798561151, y: 3.25490196078431, size: 1 },\r\n // { x: 213.021582733813, y: 3.33333333333333, size: 1 },\r\n // { x: 238.920863309353, y: 2.50980392156863, size: 1 },\r\n // { x: 239.568345323741, y: 2.82352941176471, size: 1 },\r\n // { x: 242.805755395683, y: 3.92156862745098, size: 1 },\r\n // { x: 258.992805755396, y: 3.05882352941176, size: 1 },\r\n // { x: 260.287769784173, y: 3.13725490196078, size: 1 },\r\n // { x: 260.935251798561, y: 3.25490196078431, size: 1 },\r\n // { x: 269.352517985611, y: 3.25490196078431, size: 1 },\r\n // { x: 275.827338129496, y: 3.2156862745098, size: 1 },\r\n // { x: 281.007194244604, y: 3.13725490196078, size: 1 },\r\n // { x: 304.31654676259, y: 3.84313725490196, size: 1 },\r\n // { x: 347.05035971223, y: 3.45098039215686, size: 1 },\r\n // { x: 7.12230215827338, y: 3.01960784313725, size: 1 },\r\n // { x: 29.136690647482, y: 3.05882352941176, size: 1 },\r\n // { x: 30.431654676259, y: 3.13725490196078, size: 1 },\r\n // { x: 36.2589928057554, y: 3.29411764705882, size: 1 },\r\n // { x: 41.4388489208633, y: 3.2156862745098, size: 1 },\r\n // { x: 58.9208633093525, y: 4, size: 1 },\r\n // { x: 70.5755395683453, y: 3.29411764705882, size: 1 },\r\n // { x: 71.2230215827338, y: 3.25490196078431, size: 1 },\r\n // { x: 71.8705035971223, y: 2.74509803921569, size: 1 },\r\n // { x: 72.5179856115108, y: 2.43137254901961, size: 1 },\r\n // { x: 93.2374100719424, y: 2.62745098039216, size: 1 },\r\n // { x: 93.8848920863309, y: 2.27450980392157, size: 1 },\r\n // { x: 130.143884892086, y: 3.92156862745098, size: 1 },\r\n // { x: 136.618705035971, y: 2.3921568627451, size: 1 },\r\n // { x: 137.26618705036, y: 2.27450980392157, size: 1 },\r\n // { x: 157.338129496403, y: 3.09803921568627, size: 1 },\r\n // { x: 157.985611510791, y: 2.11764705882353, size: 1 },\r\n // { x: 158.63309352518, y: 2.23529411764706, size: 1 },\r\n // { x: 217.553956834532, y: 3.13725490196078, size: 1 },\r\n // { x: 225.971223021583, y: 3.84313725490196, size: 1 },\r\n // { x: 238.920863309353, y: 4.07843137254902, size: 1 },\r\n // { x: 258.345323741007, y: 4, size: 1 },\r\n // { x: 265.467625899281, y: 3.33333333333333, size: 1 },\r\n // { x: 266.115107913669, y: 3.29411764705882, size: 1 },\r\n // { x: 287.482014388489, y: 2.19607843137255, size: 1 },\r\n // { x: 288.129496402878, y: 1.92156862745098, size: 1 },\r\n // { x: 292.014388489209, y: 3.92156862745098, size: 1 },\r\n // { x: 308.201438848921, y: 3.17647058823529, size: 1 },\r\n // { x: 309.496402877698, y: 2.90196078431373, size: 1 },\r\n // { x: 334.10071942446, y: 3.25490196078431, size: 1 },\r\n // { x: 336.690647482014, y: 3.2156862745098, size: 1 },\r\n // { x: 339.280575539568, y: 3.37254901960784, size: 1 },\r\n // { x: 350.287769784173, y: 3.25490196078431, size: 1 },\r\n // { x: 352.230215827338, y: 3.09803921568627, size: 1 },\r\n // { x: 14.8920863309353, y: 3.88235294117647, size: 1 },\r\n // { x: 35.6115107913669, y: 3.09803921568627, size: 1 },\r\n // { x: 38.8489208633094, y: 3.84313725490196, size: 1 },\r\n // { x: 52.4460431654676, y: 3.96078431372549, size: 1 },\r\n // { x: 58.273381294964, y: 3.09803921568627, size: 1 },\r\n // { x: 58.9208633093525, y: 2.98039215686275, size: 1 },\r\n // { x: 72.5179856115108, y: 3.92156862745098, size: 1 },\r\n // { x: 78.3453237410072, y: 3.2156862745098, size: 1 },\r\n // { x: 78.9928057553957, y: 2.98039215686275, size: 1 },\r\n // { x: 90.6474820143885, y: 3.88235294117647, size: 1 },\r\n // { x: 91.9424460431655, y: 4, size: 1 },\r\n // { x: 100.359712230216, y: 3.25490196078431, size: 1 },\r\n // { x: 121.079136690647, y: 3.29411764705882, size: 1 },\r\n // { x: 123.021582733813, y: 2.98039215686275, size: 1 },\r\n // { x: 123.669064748201, y: 2.98039215686275, size: 1 },\r\n // { x: 124.31654676259, y: 3.05882352941176, size: 1 },\r\n // { x: 128.848920863309, y: 3.25490196078431, size: 1 },\r\n // { x: 176.762589928058, y: 3.84313725490196, size: 1 },\r\n // { x: 186.474820143885, y: 2.7843137254902, size: 1 },\r\n // { x: 187.122302158273, y: 2.82352941176471, size: 1 },\r\n // { x: 187.769784172662, y: 2.86274509803922, size: 1 },\r\n // { x: 207.194244604317, y: 3.2156862745098, size: 1 },\r\n // { x: 211.726618705036, y: 3.09803921568627, size: 1 },\r\n // { x: 222.086330935252, y: 3.09803921568627, size: 1 },\r\n // { x: 231.798561151079, y: 3.96078431372549, size: 1 },\r\n // { x: 236.978417266187, y: 4, size: 1 },\r\n // { x: 258.345323741007, y: 3.88235294117647, size: 1 },\r\n // { x: 279.064748201439, y: 4.07843137254902, size: 1 },\r\n // { x: 293.956834532374, y: 3.29411764705882, size: 1 },\r\n // { x: 294.604316546763, y: 3.17647058823529, size: 1 },\r\n // { x: 315.971223021583, y: 3.29411764705882, size: 1 },\r\n // { x: 323.093525179856, y: 3.17647058823529, size: 1 },\r\n // { x: 325.035971223022, y: 3.25490196078431, size: 1 },\r\n // { x: 328.273381294964, y: 3.25490196078431, size: 1 },\r\n // { x: 330.215827338129, y: 3.33333333333333, size: 1 },\r\n // { x: 334.10071942446, y: 3.2156862745098, size: 1 },\r\n // { x: 335.395683453237, y: 3.25490196078431, size: 1 },\r\n // { x: 358.705035971223, y: 3.29411764705882, size: 1 },\r\n // { x: 359.352517985611, y: 2.98039215686275, size: 1 },\r\n // { x: 0, y: 2.90196078431373, size: 1 },\r\n // { x: 42.7338129496403, y: 2.90196078431373, size: 1 },\r\n // { x: 44.0287769784173, y: 3.05882352941176, size: 1 },\r\n // { x: 44.6762589928058, y: 2.94117647058824, size: 1 },\r\n // { x: 56.9784172661871, y: 3.96078431372549, size: 1 },\r\n // { x: 85.4676258992806, y: 2.98039215686275, size: 1 },\r\n // { x: 86.1151079136691, y: 2.90196078431373, size: 1 },\r\n // { x: 86.7625899280576, y: 3.13725490196078, size: 1 },\r\n // { x: 87.410071942446, y: 3.09803921568627, size: 1 },\r\n // { x: 88.0575539568345, y: 3.09803921568627, size: 1 },\r\n // { x: 101.007194244604, y: 3.92156862745098, size: 1 },\r\n // { x: 107.482014388489, y: 2.7843137254902, size: 1 },\r\n // { x: 108.129496402878, y: 2.98039215686275, size: 1 },\r\n // { x: 108.776978417266, y: 3.13725490196078, size: 1 },\r\n // { x: 123.021582733813, y: 4.03921568627451, size: 1 },\r\n // { x: 128.848920863309, y: 2.82352941176471, size: 1 },\r\n // { x: 163.165467625899, y: 3.33333333333333, size: 1 },\r\n // { x: 171.58273381295, y: 3.29411764705882, size: 1 },\r\n // { x: 172.230215827338, y: 2.90196078431373, size: 1 },\r\n // { x: 172.877697841727, y: 2.70588235294118, size: 1 },\r\n // { x: 173.525179856115, y: 2.82352941176471, size: 1 },\r\n // { x: 174.172661870504, y: 2.47058823529412, size: 1 },\r\n // { x: 193.597122302158, y: 2.74509803921569, size: 1 },\r\n // { x: 194.244604316547, y: 3.33333333333333, size: 1 },\r\n // { x: 194.892086330935, y: 3.25490196078431, size: 1 },\r\n // { x: 199.424460431655, y: 3.96078431372549, size: 1 },\r\n // { x: 200.719424460432, y: 4.07843137254902, size: 1 },\r\n // { x: 202.661870503597, y: 4.07843137254902, size: 1 },\r\n // { x: 203.309352517986, y: 4.03921568627451, size: 1 },\r\n // { x: 204.604316546763, y: 3.88235294117647, size: 1 },\r\n // { x: 205.251798561151, y: 4.03921568627451, size: 1 },\r\n // { x: 207.194244604317, y: 4.07843137254902, size: 1 },\r\n // { x: 207.841726618705, y: 4.27450980392157, size: 1 },\r\n // { x: 211.726618705036, y: 4.07843137254902, size: 1 },\r\n // { x: 213.021582733813, y: 4.07843137254902, size: 1 },\r\n // { x: 214.964028776978, y: 2.90196078431373, size: 1 },\r\n // { x: 215.611510791367, y: 2.70588235294118, size: 1 },\r\n // { x: 239.568345323741, y: 4.07843137254902, size: 1 },\r\n // { x: 246.690647482014, y: 3.92156862745098, size: 1 },\r\n // { x: 253.165467625899, y: 3.88235294117647, size: 1 },\r\n // { x: 264.820143884892, y: 4.11764705882353, size: 1 },\r\n // { x: 288.776978417266, y: 4.03921568627451, size: 1 },\r\n // { x: 310.791366906475, y: 4.03921568627451, size: 1 },\r\n // { x: 341.870503597122, y: 3.41176470588235, size: 1 },\r\n // { x: 3.24324324324324, y: 3.52941176470588, size: 1 },\r\n // { x: 4.54054054054054, y: 3.37254901960784, size: 1 },\r\n // { x: 6.48648648648649, y: 2.70588235294118, size: 1 },\r\n // { x: 7.13513513513514, y: 2.90196078431373, size: 1 },\r\n // { x: 7.78378378378378, y: 2.82352941176471, size: 1 },\r\n // { x: 8.43243243243243, y: 2.74509803921569, size: 1 },\r\n // { x: 11.027027027027, y: 3.6078431372549, size: 1 },\r\n // { x: 27.2432432432432, y: 3.49019607843137, size: 1 },\r\n // { x: 29.8378378378378, y: 2.94117647058824, size: 1 },\r\n // { x: 31.7837837837838, y: 3.88235294117647, size: 1 },\r\n // { x: 33.7297297297297, y: 3.88235294117647, size: 1 },\r\n // { x: 36.972972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 40.2162162162162, y: 3.80392156862745, size: 1 },\r\n // { x: 46.0540540540541, y: 3.41176470588235, size: 1 },\r\n // { x: 49.2972972972973, y: 3.2156862745098, size: 1 },\r\n // { x: 49.9459459459459, y: 3.13725490196078, size: 1 },\r\n // { x: 51.2432432432432, y: 3.01960784313725, size: 1 },\r\n // { x: 51.8918918918919, y: 3.17647058823529, size: 1 },\r\n // { x: 53.1891891891892, y: 3.37254901960784, size: 1 },\r\n // { x: 57.0810810810811, y: 3.88235294117647, size: 1 },\r\n // { x: 58.3783783783784, y: 4.03921568627451, size: 1 },\r\n // { x: 60.972972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 70.054054054054, y: 3.13725490196078, size: 1 },\r\n // { x: 70.7027027027027, y: 3.17647058823529, size: 1 },\r\n // { x: 71.3513513513514, y: 2.86274509803922, size: 1 },\r\n // { x: 72, y: 2.70588235294118, size: 1 },\r\n // { x: 72.6486486486486, y: 2.62745098039216, size: 1 },\r\n // { x: 73.2972972972973, y: 2.74509803921569, size: 1 },\r\n // { x: 91.4594594594595, y: 3.29411764705882, size: 1 },\r\n // { x: 92.1081081081081, y: 3.33333333333333, size: 1 },\r\n // { x: 92.7567567567568, y: 3.2156862745098, size: 1 },\r\n // { x: 93.4054054054054, y: 3.09803921568627, size: 1 },\r\n // { x: 94.054054054054, y: 2.35294117647059, size: 1 },\r\n // { x: 94.7027027027027, y: 2.3921568627451, size: 1 },\r\n // { x: 100.540540540541, y: 3.88235294117647, size: 1 },\r\n // { x: 103.135135135135, y: 3.84313725490196, size: 1 },\r\n // { x: 109.621621621622, y: 3.80392156862745, size: 1 },\r\n // { x: 114.162162162162, y: 3.25490196078431, size: 1 },\r\n // { x: 116.108108108108, y: 3.92156862745098, size: 1 },\r\n // { x: 118.054054054054, y: 3.6078431372549, size: 1 },\r\n // { x: 131.675675675676, y: 3.80392156862745, size: 1 },\r\n // { x: 134.918918918919, y: 3.84313725490196, size: 1 },\r\n // { x: 136.864864864865, y: 3.84313725490196, size: 1 },\r\n // { x: 137.513513513514, y: 3.96078431372549, size: 1 },\r\n // { x: 138.162162162162, y: 3.76470588235294, size: 1 },\r\n // { x: 144, y: 3.84313725490196, size: 1 },\r\n // { x: 147.243243243243, y: 3.76470588235294, size: 1 },\r\n // { x: 151.135135135135, y: 4, size: 1 },\r\n // { x: 151.783783783784, y: 3.41176470588235, size: 1 },\r\n // { x: 152.432432432432, y: 3.88235294117647, size: 1 },\r\n // { x: 158.918918918919, y: 3.92156862745098, size: 1 },\r\n // { x: 160.216216216216, y: 3.88235294117647, size: 1 },\r\n // { x: 162.162162162162, y: 3.88235294117647, size: 1 },\r\n // { x: 162.810810810811, y: 3.96078431372549, size: 1 },\r\n // { x: 163.459459459459, y: 4, size: 1 },\r\n // { x: 164.756756756757, y: 4.07843137254902, size: 1 },\r\n // { x: 166.702702702703, y: 3.84313725490196, size: 1 },\r\n // { x: 168.648648648649, y: 3.88235294117647, size: 1 },\r\n // { x: 173.189189189189, y: 4.03921568627451, size: 1 },\r\n // { x: 175.783783783784, y: 3.92156862745098, size: 1 },\r\n // { x: 176.432432432432, y: 4.03921568627451, size: 1 },\r\n // { x: 177.72972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 179.027027027027, y: 2.47058823529412, size: 1 },\r\n // { x: 179.675675675676, y: 2.98039215686275, size: 1 },\r\n // { x: 180.324324324324, y: 2.90196078431373, size: 1 },\r\n // { x: 180.972972972973, y: 2.94117647058824, size: 1 },\r\n // { x: 193.945945945946, y: 4.07843137254902, size: 1 },\r\n // { x: 197.189189189189, y: 3.80392156862745, size: 1 },\r\n // { x: 199.135135135135, y: 3.2156862745098, size: 1 },\r\n // { x: 200.432432432432, y: 3.2156862745098, size: 1 },\r\n // { x: 201.081081081081, y: 2.70588235294118, size: 1 },\r\n // { x: 201.72972972973, y: 2.66666666666667, size: 1 },\r\n // { x: 202.378378378378, y: 3.25490196078431, size: 1 },\r\n // { x: 203.027027027027, y: 2.94117647058824, size: 1 },\r\n // { x: 203.675675675676, y: 3.76470588235294, size: 1 },\r\n // { x: 209.513513513514, y: 3.49019607843137, size: 1 },\r\n // { x: 215.351351351351, y: 3.84313725490196, size: 1 },\r\n // { x: 216, y: 3.72549019607843, size: 1 },\r\n // { x: 218.594594594595, y: 3.76470588235294, size: 1 },\r\n // { x: 219.243243243243, y: 3.84313725490196, size: 1 },\r\n // { x: 219.891891891892, y: 3.72549019607843, size: 1 },\r\n // { x: 227.027027027027, y: 3.88235294117647, size: 1 },\r\n // { x: 230.27027027027, y: 3.92156862745098, size: 1 },\r\n // { x: 238.702702702703, y: 3.92156862745098, size: 1 },\r\n // { x: 243.891891891892, y: 3.2156862745098, size: 1 },\r\n // { x: 244.540540540541, y: 2.94117647058824, size: 1 },\r\n // { x: 245.837837837838, y: 3.68627450980392, size: 1 },\r\n // { x: 251.675675675676, y: 3.64705882352941, size: 1 },\r\n // { x: 252.972972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 282.810810810811, y: 3.96078431372549, size: 1 },\r\n // { x: 285.405405405405, y: 3.68627450980392, size: 1 },\r\n // { x: 286.054054054054, y: 3.84313725490196, size: 1 },\r\n // { x: 286.702702702703, y: 3.49019607843137, size: 1 },\r\n // { x: 289.297297297297, y: 3.92156862745098, size: 1 },\r\n // { x: 295.135135135135, y: 4, size: 1 },\r\n // { x: 296.432432432432, y: 3.96078431372549, size: 1 },\r\n // { x: 297.081081081081, y: 3.88235294117647, size: 1 },\r\n // { x: 299.675675675676, y: 3.64705882352941, size: 1 },\r\n // { x: 304.216216216216, y: 3.37254901960784, size: 1 },\r\n // { x: 304.864864864865, y: 3.92156862745098, size: 1 },\r\n // { x: 308.756756756757, y: 2.66666666666667, size: 1 },\r\n // { x: 309.405405405405, y: 2.58823529411765, size: 1 },\r\n // { x: 310.054054054054, y: 2.86274509803922, size: 1 },\r\n // { x: 310.702702702703, y: 3.13725490196078, size: 1 },\r\n // { x: 311.351351351351, y: 3.25490196078431, size: 1 },\r\n // { x: 312.648648648649, y: 3.25490196078431, size: 1 },\r\n // { x: 320.432432432432, y: 3.37254901960784, size: 1 },\r\n // { x: 321.081081081081, y: 3.25490196078431, size: 1 },\r\n // { x: 325.621621621622, y: 3.49019607843137, size: 1 },\r\n // { x: 326.27027027027, y: 3.25490196078431, size: 1 },\r\n // { x: 328.216216216216, y: 3.37254901960784, size: 1 },\r\n // { x: 329.513513513513, y: 3.37254901960784, size: 1 },\r\n // { x: 331.459459459459, y: 3.13725490196078, size: 1 },\r\n // { x: 332.108108108108, y: 3.13725490196078, size: 1 },\r\n // { x: 332.756756756757, y: 3.37254901960784, size: 1 },\r\n // { x: 334.054054054054, y: 3.29411764705882, size: 1 },\r\n // { x: 336.648648648649, y: 3.49019607843137, size: 1 },\r\n // { x: 337.297297297297, y: 3.33333333333333, size: 1 },\r\n // { x: 337.945945945946, y: 3.17647058823529, size: 1 },\r\n // { x: 341.837837837838, y: 3.49019607843137, size: 1 },\r\n // { x: 342.486486486487, y: 3.37254901960784, size: 1 },\r\n // { x: 345.081081081081, y: 3.17647058823529, size: 1 },\r\n // { x: 348.324324324324, y: 3.37254901960784, size: 1 },\r\n // { x: 352.864864864865, y: 3.17647058823529, size: 1 },\r\n // { x: 354.162162162162, y: 3.84313725490196, size: 1 },\r\n // { x: 356.108108108108, y: 3.56862745098039, size: 1 },\r\n // { x: 47.9136690647482, y: 3.84313725490196, size: 1 },\r\n // { x: 56.9784172661871, y: 2.94117647058824, size: 1 },\r\n // { x: 57.6258992805755, y: 3.05882352941176, size: 1 },\r\n // { x: 73.8129496402878, y: 4.03921568627451, size: 1 },\r\n // { x: 80.9352517985612, y: 3.80392156862745, size: 1 },\r\n // { x: 110.719424460432, y: 4, size: 1 },\r\n // { x: 143.093525179856, y: 3.13725490196078, size: 1 },\r\n // { x: 163.812949640288, y: 3.13725490196078, size: 1 },\r\n // { x: 164.460431654676, y: 3.17647058823529, size: 1 },\r\n // { x: 165.107913669065, y: 2.7843137254902, size: 1 },\r\n // { x: 165.755395683453, y: 2.90196078431373, size: 1 },\r\n // { x: 166.402877697842, y: 2.82352941176471, size: 1 },\r\n // { x: 167.05035971223, y: 2.54901960784314, size: 1 },\r\n // { x: 195.539568345324, y: 4.03921568627451, size: 1 },\r\n // { x: 199.424460431655, y: 4, size: 1 },\r\n // { x: 211.726618705036, y: 4.27450980392157, size: 1 },\r\n // { x: 213.021582733813, y: 3.92156862745098, size: 1 },\r\n // { x: 214.31654676259, y: 3.96078431372549, size: 1 },\r\n // { x: 221.438848920863, y: 4.07843137254902, size: 1 },\r\n // { x: 223.381294964029, y: 4.03921568627451, size: 1 },\r\n // { x: 226.618705035971, y: 3.96078431372549, size: 1 },\r\n // { x: 257.697841726619, y: 3.96078431372549, size: 1 },\r\n // { x: 279.064748201439, y: 3.88235294117647, size: 1 },\r\n // { x: 326.330935251799, y: 4, size: 1 },\r\n // { x: 350.935251798561, y: 3.92156862745098, size: 1 },\r\n // { x: 358.705035971223, y: 2.82352941176471, size: 1 },\r\n // { x: 359.352517985611, y: 1.33333333333333, size: 1 },\r\n // { x: 0, y: 1.13725490196078, size: 1 },\r\n // { x: 0.647482014388489, y: 1.25490196078431, size: 1 },\r\n // { x: 1.29496402877698, y: 1.25490196078431, size: 1 },\r\n // { x: 8.41726618705036, y: 3.05882352941176, size: 1 },\r\n // { x: 9.06474820143885, y: 3.13725490196078, size: 1 },\r\n // { x: 14.2446043165468, y: 3.25490196078431, size: 1 },\r\n // { x: 14.8920863309353, y: 2.86274509803922, size: 1 },\r\n // { x: 16.1870503597122, y: 3.17647058823529, size: 1 },\r\n // { x: 19.4244604316547, y: 3.17647058823529, size: 1 },\r\n // { x: 20.7194244604317, y: 1.88235294117647, size: 1 },\r\n // { x: 21.3669064748201, y: 2.11764705882353, size: 1 },\r\n // { x: 43.3812949640288, y: 3.92156862745098, size: 1 },\r\n // { x: 45.9712230215827, y: 4, size: 1 },\r\n // { x: 52.4460431654676, y: 4, size: 1 },\r\n // { x: 58.273381294964, y: 4, size: 1 },\r\n // { x: 64.1007194244604, y: 2.15686274509804, size: 1 },\r\n // { x: 84.8201438848921, y: 3.17647058823529, size: 1 },\r\n // { x: 85.4676258992806, y: 2.15686274509804, size: 1 },\r\n // { x: 86.1151079136691, y: 2, size: 1 },\r\n // { x: 106.834532374101, y: 2.82352941176471, size: 1 },\r\n // { x: 107.482014388489, y: 3.05882352941176, size: 1 },\r\n // { x: 119.784172661871, y: 4, size: 1 },\r\n // { x: 178.057553956835, y: 4.27450980392157, size: 1 },\r\n // { x: 264.172661870504, y: 3.88235294117647, size: 1 },\r\n // { x: 271.294964028777, y: 3.84313725490196, size: 1 },\r\n // { x: 284.244604316547, y: 4.11764705882353, size: 1 },\r\n // { x: 303.021582733813, y: 2.62745098039216, size: 1 },\r\n // { x: 304.31654676259, y: 2.43137254901961, size: 1 },\r\n // { x: 306.258992805755, y: 3.17647058823529, size: 1 },\r\n // { x: 306.906474820144, y: 3.05882352941176, size: 1 },\r\n // { x: 307.553956834532, y: 2.90196078431373, size: 1 },\r\n // { x: 308.201438848921, y: 2.62745098039216, size: 1 },\r\n // { x: 308.848920863309, y: 2.66666666666667, size: 1 },\r\n // { x: 309.496402877698, y: 2.62745098039216, size: 1 },\r\n // { x: 310.791366906475, y: 3.05882352941176, size: 1 },\r\n // { x: 312.086330935252, y: 2.50980392156863, size: 1 },\r\n // { x: 312.73381294964, y: 2.74509803921569, size: 1 },\r\n // { x: 313.381294964029, y: 2.50980392156863, size: 1 },\r\n // { x: 314.676258992806, y: 2.50980392156863, size: 1 },\r\n // { x: 315.323741007194, y: 2.62745098039216, size: 1 },\r\n // { x: 315.971223021583, y: 2.43137254901961, size: 1 },\r\n // { x: 316.618705035971, y: 2.98039215686275, size: 1 },\r\n // { x: 317.26618705036, y: 3.25490196078431, size: 1 },\r\n // { x: 317.913669064748, y: 3.17647058823529, size: 1 },\r\n // { x: 318.561151079137, y: 2.66666666666667, size: 1 },\r\n // { x: 319.208633093525, y: 2.74509803921569, size: 1 },\r\n // { x: 319.856115107914, y: 2.50980392156863, size: 1 },\r\n // { x: 320.503597122302, y: 2.62745098039216, size: 1 },\r\n // { x: 321.151079136691, y: 3.88235294117647, size: 1 },\r\n // { x: 345.755395683453, y: 2.82352941176471, size: 1 },\r\n // { x: 354.172661870504, y: 4.11764705882353, size: 1 },\r\n // { x: 358.705035971223, y: 3.96078431372549, size: 1 },\r\n // { x: 1.94594594594595, y: 3.52941176470588, size: 1 },\r\n // { x: 2.59459459459459, y: 3.72549019607843, size: 1 },\r\n // { x: 3.24324324324324, y: 3.92156862745098, size: 1 },\r\n // { x: 7.78378378378378, y: 3.25490196078431, size: 1 },\r\n // { x: 9.72972972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 11.027027027027, y: 4, size: 1 },\r\n // { x: 12.972972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 15.5675675675676, y: 3.84313725490196, size: 1 },\r\n // { x: 16.8648648648649, y: 3.84313725490196, size: 1 },\r\n // { x: 19.4594594594595, y: 4, size: 1 },\r\n // { x: 21.4054054054054, y: 3.72549019607843, size: 1 },\r\n // { x: 25.2972972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 27.8918918918919, y: 3.09803921568627, size: 1 },\r\n // { x: 28.5405405405405, y: 3.17647058823529, size: 1 },\r\n // { x: 29.1891891891892, y: 3.17647058823529, size: 1 },\r\n // { x: 29.8378378378378, y: 3.17647058823529, size: 1 },\r\n // { x: 32.4324324324324, y: 3.80392156862745, size: 1 },\r\n // { x: 45.4054054054054, y: 3.76470588235294, size: 1 },\r\n // { x: 50.5945945945946, y: 3.13725490196078, size: 1 },\r\n // { x: 55.1351351351351, y: 3.80392156862745, size: 1 },\r\n // { x: 58.3783783783784, y: 3.84313725490196, size: 1 },\r\n // { x: 63.5675675675676, y: 3.92156862745098, size: 1 },\r\n // { x: 66.1621621621622, y: 3.76470588235294, size: 1 },\r\n // { x: 70.054054054054, y: 3.37254901960784, size: 1 },\r\n // { x: 70.7027027027027, y: 3.01960784313725, size: 1 },\r\n // { x: 71.3513513513514, y: 3.01960784313725, size: 1 },\r\n // { x: 72, y: 3.01960784313725, size: 1 },\r\n // { x: 72.6486486486486, y: 2.94117647058824, size: 1 },\r\n // { x: 83.027027027027, y: 3.68627450980392, size: 1 },\r\n // { x: 93.4054054054054, y: 3.2156862745098, size: 1 },\r\n // { x: 105.72972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 106.378378378378, y: 3.80392156862745, size: 1 },\r\n // { x: 110.27027027027, y: 3.76470588235294, size: 1 },\r\n // { x: 114.162162162162, y: 3.05882352941176, size: 1 },\r\n // { x: 114.810810810811, y: 3.13725490196078, size: 1 },\r\n // { x: 116.756756756757, y: 3.80392156862745, size: 1 },\r\n // { x: 120, y: 3.80392156862745, size: 1 },\r\n // { x: 127.783783783784, y: 3.80392156862745, size: 1 },\r\n // { x: 135.567567567568, y: 3.25490196078431, size: 1 },\r\n // { x: 137.513513513514, y: 3.41176470588235, size: 1 },\r\n // { x: 142.702702702703, y: 3.45098039215686, size: 1 },\r\n // { x: 147.243243243243, y: 3.33333333333333, size: 1 },\r\n // { x: 147.891891891892, y: 3.37254901960784, size: 1 },\r\n // { x: 148.540540540541, y: 3.33333333333333, size: 1 },\r\n // { x: 151.135135135135, y: 3.80392156862745, size: 1 },\r\n // { x: 153.081081081081, y: 3.37254901960784, size: 1 },\r\n // { x: 153.72972972973, y: 3.25490196078431, size: 1 },\r\n // { x: 154.378378378378, y: 3.33333333333333, size: 1 },\r\n // { x: 156.972972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 178.378378378378, y: 3.88235294117647, size: 1 },\r\n // { x: 179.027027027027, y: 3.56862745098039, size: 1 },\r\n // { x: 179.675675675676, y: 3.45098039215686, size: 1 },\r\n // { x: 181.621621621622, y: 3.52941176470588, size: 1 },\r\n // { x: 184.864864864865, y: 3.80392156862745, size: 1 },\r\n // { x: 195.891891891892, y: 3.76470588235294, size: 1 },\r\n // { x: 199.783783783784, y: 3.84313725490196, size: 1 },\r\n // { x: 201.72972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 217.945945945946, y: 3.2156862745098, size: 1 },\r\n // { x: 220.540540540541, y: 3.45098039215686, size: 1 },\r\n // { x: 224.432432432432, y: 3.05882352941176, size: 1 },\r\n // { x: 228.972972972973, y: 3.96078431372549, size: 1 },\r\n // { x: 231.567567567568, y: 3.96078431372549, size: 1 },\r\n // { x: 236.108108108108, y: 3.76470588235294, size: 1 },\r\n // { x: 243.891891891892, y: 3.33333333333333, size: 1 },\r\n // { x: 244.540540540541, y: 3.25490196078431, size: 1 },\r\n // { x: 249.081081081081, y: 3.92156862745098, size: 1 },\r\n // { x: 255.567567567568, y: 4.11764705882353, size: 1 },\r\n // { x: 257.513513513513, y: 4, size: 1 },\r\n // { x: 261.405405405405, y: 3.84313725490196, size: 1 },\r\n // { x: 267.243243243243, y: 3.37254901960784, size: 1 },\r\n // { x: 267.891891891892, y: 3.25490196078431, size: 1 },\r\n // { x: 271.135135135135, y: 3.2156862745098, size: 1 },\r\n // { x: 282.162162162162, y: 3.2156862745098, size: 1 },\r\n // { x: 284.756756756757, y: 3.37254901960784, size: 1 },\r\n // { x: 286.702702702703, y: 3.29411764705882, size: 1 },\r\n // { x: 287.351351351351, y: 3.13725490196078, size: 1 },\r\n // { x: 288, y: 3.29411764705882, size: 1 },\r\n // { x: 291.243243243243, y: 3.45098039215686, size: 1 },\r\n // { x: 297.72972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 300.972972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 305.513513513513, y: 3.29411764705882, size: 1 },\r\n // { x: 309.405405405405, y: 3.88235294117647, size: 1 },\r\n // { x: 312, y: 3.96078431372549, size: 1 },\r\n // { x: 322.378378378378, y: 4.03921568627451, size: 1 },\r\n // { x: 323.675675675676, y: 3.92156862745098, size: 1 },\r\n // { x: 330.162162162162, y: 3.33333333333333, size: 1 },\r\n // { x: 332.108108108108, y: 3.25490196078431, size: 1 },\r\n // { x: 332.756756756757, y: 3.45098039215686, size: 1 },\r\n // { x: 339.243243243243, y: 3.80392156862745, size: 1 },\r\n // { x: 346.378378378378, y: 3.92156862745098, size: 1 },\r\n // { x: 350.27027027027, y: 3.37254901960784, size: 1 },\r\n // { x: 352.216216216216, y: 3.13725490196078, size: 1 },\r\n // { x: 352.864864864865, y: 3.13725490196078, size: 1 },\r\n // { x: 353.513513513513, y: 3.13725490196078, size: 1 },\r\n // { x: 354.162162162162, y: 3.17647058823529, size: 1 },\r\n // { x: 355.459459459459, y: 3.72549019607843, size: 1 },\r\n // { x: 356.756756756757, y: 3.37254901960784, size: 1 },\r\n // { x: 359.351351351351, y: 3.37254901960784, size: 1 },\r\n // { x: 14.8920863309353, y: 3.01960784313725, size: 1 },\r\n // { x: 16.1870503597122, y: 3.25490196078431, size: 1 },\r\n // { x: 16.8345323741007, y: 3.29411764705882, size: 1 },\r\n // { x: 20.0719424460432, y: 3.17647058823529, size: 1 },\r\n // { x: 35.6115107913669, y: 3.17647058823529, size: 1 },\r\n // { x: 36.2589928057554, y: 3.25490196078431, size: 1 },\r\n // { x: 36.9064748201439, y: 2.74509803921569, size: 1 },\r\n // { x: 37.5539568345324, y: 3.09803921568627, size: 1 },\r\n // { x: 58.9208633093525, y: 3.09803921568627, size: 1 },\r\n // { x: 68.6330935251799, y: 3.80392156862745, size: 1 },\r\n // { x: 122.374100719424, y: 3.17647058823529, size: 1 },\r\n // { x: 124.964028776978, y: 3.25490196078431, size: 1 },\r\n // { x: 134.028776978417, y: 3.09803921568627, size: 1 },\r\n // { x: 138.561151079137, y: 3.05882352941176, size: 1 },\r\n // { x: 143.741007194245, y: 3.25490196078431, size: 1 },\r\n // { x: 164.460431654676, y: 2.98039215686275, size: 1 },\r\n // { x: 165.107913669065, y: 3.09803921568627, size: 1 },\r\n // { x: 167.697841726619, y: 4, size: 1 },\r\n // { x: 168.345323741007, y: 4, size: 1 },\r\n // { x: 178.705035971223, y: 3.96078431372549, size: 1 },\r\n // { x: 183.237410071942, y: 4, size: 1 },\r\n // { x: 189.712230215827, y: 3.41176470588235, size: 1 },\r\n // { x: 191.654676258993, y: 3.33333333333333, size: 1 },\r\n // { x: 231.151079136691, y: 3.17647058823529, size: 1 },\r\n // { x: 246.690647482014, y: 3.96078431372549, size: 1 },\r\n // { x: 249.928057553957, y: 3.41176470588235, size: 1 },\r\n // { x: 251.223021582734, y: 3.01960784313725, size: 1 },\r\n // { x: 251.870503597122, y: 2.98039215686275, size: 1 },\r\n // { x: 294.604316546763, y: 3.05882352941176, size: 1 },\r\n // { x: 295.251798561151, y: 3.17647058823529, size: 1 },\r\n // { x: 310.143884892086, y: 3.88235294117647, size: 1 },\r\n // { x: 334.748201438849, y: 3.29411764705882, size: 1 },\r\n // { x: 337.338129496403, y: 3.09803921568627, size: 1 },\r\n // { x: 337.985611510791, y: 2.7843137254902, size: 1 },\r\n // { x: 338.63309352518, y: 2.86274509803922, size: 1 },\r\n // { x: 339.280575539568, y: 3.01960784313725, size: 1 },\r\n // { x: 339.928057553957, y: 2.98039215686275, size: 1 },\r\n // { x: 354.172661870504, y: 3.29411764705882, size: 1 },\r\n // { x: 356.762589928058, y: 3.17647058823529, size: 1 },\r\n // { x: 358.705035971223, y: 3.2156862745098, size: 1 },\r\n // { x: 359.352517985611, y: 3.29411764705882, size: 1 },\r\n // { x: 22.6618705035971, y: 3.96078431372549, size: 1 },\r\n // { x: 29.136690647482, y: 3.88235294117647, size: 1 },\r\n // { x: 42.7338129496403, y: 3.25490196078431, size: 1 },\r\n // { x: 51.7985611510791, y: 3.92156862745098, size: 1 },\r\n // { x: 62.8057553956835, y: 4.03921568627451, size: 1 },\r\n // { x: 93.2374100719424, y: 3.13725490196078, size: 1 },\r\n // { x: 99.7122302158273, y: 3.13725490196078, size: 1 },\r\n // { x: 108.129496402878, y: 2.70588235294118, size: 1 },\r\n // { x: 108.776978417266, y: 2.62745098039216, size: 1 },\r\n // { x: 157.985611510791, y: 3.29411764705882, size: 1 },\r\n // { x: 184.532374100719, y: 3.25490196078431, size: 1 },\r\n // { x: 202.661870503597, y: 3.92156862745098, size: 1 },\r\n // { x: 209.136690647482, y: 4.07843137254902, size: 1 },\r\n // { x: 210.431654676259, y: 3.92156862745098, size: 1 },\r\n // { x: 218.848920863309, y: 3.88235294117647, size: 1 },\r\n // { x: 257.697841726619, y: 3.05882352941176, size: 1 },\r\n // { x: 259.640287769784, y: 2.98039215686275, size: 1 },\r\n // { x: 301.079136690647, y: 3.05882352941176, size: 1 },\r\n // { x: 302.374100719424, y: 3.2156862745098, size: 1 },\r\n // { x: 303.021582733813, y: 3.25490196078431, size: 1 },\r\n // { x: 345.107913669065, y: 3.29411764705882, size: 1 },\r\n // { x: 345.755395683453, y: 2.54901960784314, size: 1 },\r\n // { x: 346.402877697842, y: 2.58823529411765, size: 1 },\r\n // { x: 352.877697841727, y: 3.2156862745098, size: 1 },\r\n // { x: 354.820143884892, y: 3.17647058823529, size: 1 },\r\n // { x: 356.115107913669, y: 3.33333333333333, size: 1 },\r\n // { x: 1.29496402877698, y: 3.09803921568627, size: 1 },\r\n // { x: 3.23741007194245, y: 3.17647058823529, size: 1 },\r\n // { x: 7.76978417266187, y: 2.86274509803922, size: 1 },\r\n // { x: 38.2014388489209, y: 3.33333333333333, size: 1 },\r\n // { x: 59.568345323741, y: 3.25490196078431, size: 1 },\r\n // { x: 70.5755395683453, y: 2.86274509803922, size: 1 },\r\n // { x: 71.2230215827338, y: 2.66666666666667, size: 1 },\r\n // { x: 72.5179856115108, y: 2.62745098039216, size: 1 },\r\n // { x: 93.8848920863309, y: 2.86274509803922, size: 1 },\r\n // { x: 94.5323741007194, y: 3.17647058823529, size: 1 },\r\n // { x: 108.129496402878, y: 3.84313725490196, size: 1 },\r\n // { x: 117.841726618705, y: 4.15686274509804, size: 1 },\r\n // { x: 128.201438848921, y: 3.88235294117647, size: 1 },\r\n // { x: 134.028776978417, y: 3.88235294117647, size: 1 },\r\n // { x: 134.676258992806, y: 3.88235294117647, size: 1 },\r\n // { x: 135.971223021583, y: 3.33333333333333, size: 1 },\r\n // { x: 148.273381294964, y: 3.2156862745098, size: 1 },\r\n // { x: 154.10071942446, y: 3.2156862745098, size: 1 },\r\n // { x: 170.287769784173, y: 3.25490196078431, size: 1 },\r\n // { x: 199.424460431655, y: 3.17647058823529, size: 1 },\r\n // { x: 202.014388489209, y: 2.98039215686275, size: 1 },\r\n // { x: 205.251798561151, y: 3.88235294117647, size: 1 },\r\n // { x: 223.381294964029, y: 3.13725490196078, size: 1 },\r\n // { x: 241.510791366906, y: 3.25490196078431, size: 1 },\r\n // { x: 243.453237410072, y: 3.09803921568627, size: 1 },\r\n // { x: 244.10071942446, y: 2.98039215686275, size: 1 },\r\n // { x: 253.812949640288, y: 3.88235294117647, size: 1 },\r\n // { x: 256.402877697842, y: 3.88235294117647, size: 1 },\r\n // { x: 286.187050359712, y: 2.82352941176471, size: 1 },\r\n // { x: 286.834532374101, y: 2.90196078431373, size: 1 },\r\n // { x: 287.482014388489, y: 2.74509803921569, size: 1 },\r\n // { x: 288.129496402878, y: 2.7843137254902, size: 1 },\r\n // { x: 308.848920863309, y: 2.58823529411765, size: 1 },\r\n // { x: 310.143884892086, y: 2.66666666666667, size: 1 },\r\n // { x: 329.568345323741, y: 3.2156862745098, size: 1 },\r\n // { x: 330.215827338129, y: 2.90196078431373, size: 1 },\r\n // { x: 350.287769784173, y: 3.33333333333333, size: 1 },\r\n // { x: 350.935251798561, y: 2.43137254901961, size: 1 },\r\n // { x: 351.58273381295, y: 1.84313725490196, size: 1 },\r\n // { x: 10.3783783783784, y: 3.88235294117647, size: 1 },\r\n // { x: 11.027027027027, y: 3.09803921568627, size: 1 },\r\n // { x: 11.6756756756757, y: 3.09803921568627, size: 1 },\r\n // { x: 12.3243243243243, y: 2.94117647058824, size: 1 },\r\n // { x: 12.972972972973, y: 1.92156862745098, size: 1 },\r\n // { x: 20.7567567567568, y: 3.88235294117647, size: 1 },\r\n // { x: 22.7027027027027, y: 3.88235294117647, size: 1 },\r\n // { x: 27.2432432432432, y: 3.76470588235294, size: 1 },\r\n // { x: 27.8918918918919, y: 3.84313725490196, size: 1 },\r\n // { x: 31.1351351351351, y: 4, size: 1 },\r\n // { x: 34.3783783783784, y: 2.3921568627451, size: 1 },\r\n // { x: 35.027027027027, y: 2.54901960784314, size: 1 },\r\n // { x: 35.6756756756757, y: 3.96078431372549, size: 1 },\r\n // { x: 48.6486486486486, y: 3.49019607843137, size: 1 },\r\n // { x: 49.9459459459459, y: 3.68627450980392, size: 1 },\r\n // { x: 55.7837837837838, y: 3.76470588235294, size: 1 },\r\n // { x: 58.3783783783784, y: 3.72549019607843, size: 1 },\r\n // { x: 62.2702702702703, y: 3.92156862745098, size: 1 },\r\n // { x: 65.5135135135135, y: 3.88235294117647, size: 1 },\r\n // { x: 67.4594594594595, y: 3.6078431372549, size: 1 },\r\n // { x: 68.7567567567568, y: 3.92156862745098, size: 1 },\r\n // { x: 73.2972972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 76.5405405405405, y: 3.29411764705882, size: 1 },\r\n // { x: 89.5135135135135, y: 3.56862745098039, size: 1 },\r\n // { x: 105.081081081081, y: 3.84313725490196, size: 1 },\r\n // { x: 108.972972972973, y: 4, size: 1 },\r\n // { x: 109.621621621622, y: 4.15686274509804, size: 1 },\r\n // { x: 110.918918918919, y: 4.19607843137255, size: 1 },\r\n // { x: 112.216216216216, y: 3.80392156862745, size: 1 },\r\n // { x: 115.459459459459, y: 3.84313725490196, size: 1 },\r\n // { x: 117.405405405405, y: 4.03921568627451, size: 1 },\r\n // { x: 118.054054054054, y: 3.76470588235294, size: 1 },\r\n // { x: 119.351351351351, y: 3.41176470588235, size: 1 },\r\n // { x: 127.135135135135, y: 3.72549019607843, size: 1 },\r\n // { x: 132.324324324324, y: 3.41176470588235, size: 1 },\r\n // { x: 138.162162162162, y: 3.92156862745098, size: 1 },\r\n // { x: 140.756756756757, y: 3.05882352941176, size: 1 },\r\n // { x: 146.594594594595, y: 3.37254901960784, size: 1 },\r\n // { x: 149.837837837838, y: 3.49019607843137, size: 1 },\r\n // { x: 156.972972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 162.162162162162, y: 3.29411764705882, size: 1 },\r\n // { x: 162.810810810811, y: 3.17647058823529, size: 1 },\r\n // { x: 163.459459459459, y: 3.13725490196078, size: 1 },\r\n // { x: 164.108108108108, y: 2.27450980392157, size: 1 },\r\n // { x: 164.756756756757, y: 2.47058823529412, size: 1 },\r\n // { x: 165.405405405405, y: 3.76470588235294, size: 1 },\r\n // { x: 169.945945945946, y: 3.84313725490196, size: 1 },\r\n // { x: 173.837837837838, y: 3.96078431372549, size: 1 },\r\n // { x: 175.135135135135, y: 3.96078431372549, size: 1 },\r\n // { x: 179.027027027027, y: 3.96078431372549, size: 1 },\r\n // { x: 184.864864864865, y: 3.41176470588235, size: 1 },\r\n // { x: 186.810810810811, y: 3.88235294117647, size: 1 },\r\n // { x: 193.945945945946, y: 3.88235294117647, size: 1 },\r\n // { x: 195.243243243243, y: 3.88235294117647, size: 1 },\r\n // { x: 200.432432432432, y: 3.80392156862745, size: 1 },\r\n // { x: 202.378378378378, y: 3.96078431372549, size: 1 },\r\n // { x: 206.27027027027, y: 3.25490196078431, size: 1 },\r\n // { x: 214.054054054054, y: 3.84313725490196, size: 1 },\r\n // { x: 216, y: 3.84313725490196, size: 1 },\r\n // { x: 218.594594594595, y: 3.80392156862745, size: 1 },\r\n // { x: 223.135135135135, y: 3.84313725490196, size: 1 },\r\n // { x: 223.783783783784, y: 3.80392156862745, size: 1 },\r\n // { x: 227.027027027027, y: 3.80392156862745, size: 1 },\r\n // { x: 234.810810810811, y: 3.76470588235294, size: 1 },\r\n // { x: 252.324324324324, y: 3.84313725490196, size: 1 },\r\n // { x: 265.945945945946, y: 3.88235294117647, size: 1 },\r\n // { x: 270.486486486487, y: 3.84313725490196, size: 1 },\r\n // { x: 275.027027027027, y: 3.49019607843137, size: 1 },\r\n // { x: 293.837837837838, y: 3.17647058823529, size: 1 },\r\n // { x: 294.486486486487, y: 3.01960784313725, size: 1 },\r\n // { x: 295.783783783784, y: 3.49019607843137, size: 1 },\r\n // { x: 309.405405405405, y: 3.52941176470588, size: 1 },\r\n // { x: 312.648648648649, y: 3.88235294117647, size: 1 },\r\n // { x: 313.297297297297, y: 3.45098039215686, size: 1 },\r\n // { x: 314.594594594595, y: 3.49019607843137, size: 1 },\r\n // { x: 315.243243243243, y: 2.82352941176471, size: 1 },\r\n // { x: 315.891891891892, y: 2.94117647058824, size: 1 },\r\n // { x: 316.540540540541, y: 3.2156862745098, size: 1 },\r\n // { x: 318.486486486487, y: 3.76470588235294, size: 1 },\r\n // { x: 325.621621621622, y: 3.92156862745098, size: 1 },\r\n // { x: 330.162162162162, y: 3.76470588235294, size: 1 },\r\n // { x: 335.351351351351, y: 3.33333333333333, size: 1 },\r\n // { x: 336.648648648649, y: 3.2156862745098, size: 1 },\r\n // { x: 337.297297297297, y: 2.98039215686275, size: 1 },\r\n // { x: 337.945945945946, y: 3.05882352941176, size: 1 },\r\n // { x: 338.594594594595, y: 2.7843137254902, size: 1 },\r\n // { x: 339.243243243243, y: 2.7843137254902, size: 1 },\r\n // { x: 348.972972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 352.216216216216, y: 3.92156862745098, size: 1 },\r\n // { x: 354.162162162162, y: 3.76470588235294, size: 1 },\r\n // { x: 358.054054054054, y: 3.29411764705882, size: 1 },\r\n // { x: 358.702702702703, y: 3.17647058823529, size: 1 },\r\n // { x: 359.351351351351, y: 3.25490196078431, size: 1 },\r\n // { x: 20.0719424460432, y: 3.25490196078431, size: 1 },\r\n // { x: 43.3812949640288, y: 4, size: 1 },\r\n // { x: 63.4532374100719, y: 2.98039215686275, size: 1 },\r\n // { x: 67.9856115107914, y: 4, size: 1 },\r\n // { x: 91.9424460431655, y: 3.84313725490196, size: 1 },\r\n // { x: 92.589928057554, y: 3.92156862745098, size: 1 },\r\n // { x: 109.424460431655, y: 3.17647058823529, size: 1 },\r\n // { x: 112.661870503597, y: 3.09803921568627, size: 1 },\r\n // { x: 114.604316546763, y: 3.29411764705882, size: 1 },\r\n // { x: 124.964028776978, y: 3.09803921568627, size: 1 },\r\n // { x: 132.086330935252, y: 3.88235294117647, size: 1 },\r\n // { x: 174.820143884892, y: 3.25490196078431, size: 1 },\r\n // { x: 175.467625899281, y: 3.33333333333333, size: 1 },\r\n // { x: 177.410071942446, y: 3.29411764705882, size: 1 },\r\n // { x: 180, y: 3.13725490196078, size: 1 },\r\n // { x: 188.41726618705, y: 3.25490196078431, size: 1 },\r\n // { x: 190.359712230216, y: 3.25490196078431, size: 1 },\r\n // { x: 214.964028776978, y: 3.01960784313725, size: 1 },\r\n // { x: 235.68345323741, y: 3.09803921568627, size: 1 },\r\n // { x: 236.978417266187, y: 2.90196078431373, size: 1 },\r\n // { x: 237.625899280576, y: 2.82352941176471, size: 1 },\r\n // { x: 238.273381294964, y: 3.05882352941176, size: 1 },\r\n // { x: 267.410071942446, y: 4.03921568627451, size: 1 },\r\n // { x: 282.302158273381, y: 3.25490196078431, size: 1 },\r\n // { x: 282.94964028777, y: 3.33333333333333, size: 1 },\r\n // { x: 286.834532374101, y: 3.25490196078431, size: 1 },\r\n // { x: 297.841726618705, y: 3.09803921568627, size: 1 },\r\n // { x: 321.798561151079, y: 2.98039215686275, size: 1 },\r\n // { x: 322.446043165468, y: 2.70588235294118, size: 1 },\r\n // { x: 323.093525179856, y: 2.90196078431373, size: 1 },\r\n // { x: 323.741007194245, y: 3.01960784313725, size: 1 },\r\n // { x: 324.388489208633, y: 3.09803921568627, size: 1 },\r\n // { x: 333.453237410072, y: 3.2156862745098, size: 1 },\r\n // { x: 336.043165467626, y: 3.2156862745098, size: 1 },\r\n // { x: 24.6043165467626, y: 3.41176470588235, size: 1 },\r\n // { x: 27.841726618705, y: 2.7843137254902, size: 1 },\r\n // { x: 28.4892086330935, y: 3.05882352941176, size: 1 },\r\n // { x: 29.136690647482, y: 2.90196078431373, size: 1 },\r\n // { x: 84.1726618705036, y: 4, size: 1 },\r\n // { x: 92.589928057554, y: 3.01960784313725, size: 1 },\r\n // { x: 93.2374100719424, y: 2.98039215686275, size: 1 },\r\n // { x: 93.8848920863309, y: 3.2156862745098, size: 1 },\r\n // { x: 101.654676258993, y: 4, size: 1 },\r\n // { x: 113.309352517986, y: 2.94117647058824, size: 1 },\r\n // { x: 113.956834532374, y: 2.82352941176471, size: 1 },\r\n // { x: 114.604316546763, y: 2.74509803921569, size: 1 },\r\n // { x: 115.251798561151, y: 2.90196078431373, size: 1 },\r\n // { x: 125.611510791367, y: 3.96078431372549, size: 1 },\r\n // { x: 137.913669064748, y: 3.92156862745098, size: 1 },\r\n // { x: 145.68345323741, y: 4.15686274509804, size: 1 },\r\n // { x: 149.568345323741, y: 4, size: 1 },\r\n // { x: 154.10071942446, y: 3.92156862745098, size: 1 },\r\n // { x: 178.057553956835, y: 3.17647058823529, size: 1 },\r\n // { x: 183.237410071942, y: 4.03921568627451, size: 1 },\r\n // { x: 184.532374100719, y: 4, size: 1 },\r\n // { x: 185.827338129496, y: 4.11764705882353, size: 1 },\r\n // { x: 186.474820143885, y: 3.92156862745098, size: 1 },\r\n // { x: 189.064748201439, y: 4.19607843137255, size: 1 },\r\n // { x: 190.359712230216, y: 3.92156862745098, size: 1 },\r\n // { x: 191.007194244604, y: 4, size: 1 },\r\n // { x: 191.654676258993, y: 4.03921568627451, size: 1 },\r\n // { x: 193.597122302158, y: 3.88235294117647, size: 1 },\r\n // { x: 200.071942446043, y: 3.17647058823529, size: 1 },\r\n // { x: 225.323741007194, y: 3.88235294117647, size: 1 },\r\n // { x: 232.446043165468, y: 4, size: 1 },\r\n // { x: 246.690647482014, y: 3.88235294117647, size: 1 },\r\n // { x: 273.884892086331, y: 3.96078431372549, size: 1 },\r\n // { x: 277.769784172662, y: 3.96078431372549, size: 1 },\r\n // { x: 281.654676258993, y: 3.88235294117647, size: 1 },\r\n // { x: 303.669064748201, y: 3.96078431372549, size: 1 },\r\n // { x: 307.553956834532, y: 3.13725490196078, size: 1 },\r\n // { x: 311.438848920863, y: 4.07843137254902, size: 1 },\r\n // { x: 335.395683453237, y: 3.84313725490196, size: 1 },\r\n // { x: 348.992805755396, y: 3.96078431372549, size: 1 },\r\n // { x: 12.3021582733813, y: 2.98039215686275, size: 1 },\r\n // { x: 14.2446043165468, y: 3.2156862745098, size: 1 },\r\n // { x: 24.6043165467626, y: 3.88235294117647, size: 1 },\r\n // { x: 34.9640287769784, y: 3.33333333333333, size: 1 },\r\n // { x: 36.2589928057554, y: 3.37254901960784, size: 1 },\r\n // { x: 47.2661870503597, y: 3.45098039215686, size: 1 },\r\n // { x: 49.2086330935252, y: 3.84313725490196, size: 1 },\r\n // { x: 53.0935251798561, y: 3.37254901960784, size: 1 },\r\n // { x: 63.4532374100719, y: 3.33333333333333, size: 1 },\r\n // { x: 114.604316546763, y: 4.07843137254902, size: 1 },\r\n // { x: 131.438848920863, y: 3.84313725490196, size: 1 },\r\n // { x: 168.992805755396, y: 4.03921568627451, size: 1 },\r\n // { x: 189.712230215827, y: 3.92156862745098, size: 1 },\r\n // { x: 194.892086330935, y: 3.96078431372549, size: 1 },\r\n // { x: 249.928057553957, y: 3.05882352941176, size: 1 },\r\n // { x: 250.575539568345, y: 3.05882352941176, size: 1 },\r\n // { x: 251.870503597122, y: 3.29411764705882, size: 1 },\r\n // { x: 253.812949640288, y: 3.80392156862745, size: 1 },\r\n // { x: 262.230215827338, y: 3.92156862745098, size: 1 },\r\n // { x: 271.942446043165, y: 3.09803921568627, size: 1 },\r\n // { x: 293.309352517986, y: 3.01960784313725, size: 1 },\r\n // { x: 293.956834532374, y: 2.98039215686275, size: 1 },\r\n // { x: 294.604316546763, y: 2.43137254901961, size: 1 },\r\n // { x: 295.251798561151, y: 2.62745098039216, size: 1 },\r\n // { x: 314.676258992806, y: 2.66666666666667, size: 1 },\r\n // { x: 0.648648648648649, y: 3.92156862745098, size: 1 },\r\n // { x: 8.43243243243243, y: 3.84313725490196, size: 1 },\r\n // { x: 16.2162162162162, y: 3.45098039215686, size: 1 },\r\n // { x: 18.1621621621622, y: 3.25490196078431, size: 1 },\r\n // { x: 19.4594594594595, y: 3.25490196078431, size: 1 },\r\n // { x: 33.7297297297297, y: 3.64705882352941, size: 1 },\r\n // { x: 41.5135135135135, y: 3.13725490196078, size: 1 },\r\n // { x: 42.1621621621622, y: 3.41176470588235, size: 1 },\r\n // { x: 49.9459459459459, y: 3.72549019607843, size: 1 },\r\n // { x: 57.0810810810811, y: 3.76470588235294, size: 1 },\r\n // { x: 62.2702702702703, y: 3.17647058823529, size: 1 },\r\n // { x: 79.7837837837838, y: 3.41176470588235, size: 1 },\r\n // { x: 80.4324324324324, y: 3.84313725490196, size: 1 },\r\n // { x: 88.2162162162162, y: 3.49019607843137, size: 1 },\r\n // { x: 92.7567567567568, y: 3.80392156862745, size: 1 },\r\n // { x: 101.837837837838, y: 3.80392156862745, size: 1 },\r\n // { x: 104.432432432432, y: 3.33333333333333, size: 1 },\r\n // { x: 105.081081081081, y: 3.45098039215686, size: 1 },\r\n // { x: 106.378378378378, y: 2.82352941176471, size: 1 },\r\n // { x: 108.324324324324, y: 3.92156862745098, size: 1 },\r\n // { x: 110.27027027027, y: 3.68627450980392, size: 1 },\r\n // { x: 119.351351351351, y: 3.64705882352941, size: 1 },\r\n // { x: 127.783783783784, y: 3.05882352941176, size: 1 },\r\n // { x: 128.432432432432, y: 3.2156862745098, size: 1 },\r\n // { x: 135.567567567568, y: 3.80392156862745, size: 1 },\r\n // { x: 149.189189189189, y: 2.90196078431373, size: 1 },\r\n // { x: 149.837837837838, y: 2.82352941176471, size: 1 },\r\n // { x: 156.324324324324, y: 3.72549019607843, size: 1 },\r\n // { x: 163.459459459459, y: 3.96078431372549, size: 1 },\r\n // { x: 164.756756756757, y: 3.72549019607843, size: 1 },\r\n // { x: 168, y: 3.52941176470588, size: 1 },\r\n // { x: 170.594594594595, y: 3.84313725490196, size: 1 },\r\n // { x: 171.243243243243, y: 3.25490196078431, size: 1 },\r\n // { x: 175.783783783784, y: 3.56862745098039, size: 1 },\r\n // { x: 185.513513513514, y: 3.52941176470588, size: 1 },\r\n // { x: 188.108108108108, y: 3.76470588235294, size: 1 },\r\n // { x: 189.405405405405, y: 3.88235294117647, size: 1 },\r\n // { x: 192.648648648649, y: 3.2156862745098, size: 1 },\r\n // { x: 193.945945945946, y: 3.84313725490196, size: 1 },\r\n // { x: 197.189189189189, y: 3.92156862745098, size: 1 },\r\n // { x: 197.837837837838, y: 3.80392156862745, size: 1 },\r\n // { x: 198.486486486486, y: 4.03921568627451, size: 1 },\r\n // { x: 199.135135135135, y: 4.07843137254902, size: 1 },\r\n // { x: 199.783783783784, y: 3.80392156862745, size: 1 },\r\n // { x: 200.432432432432, y: 3.84313725490196, size: 1 },\r\n // { x: 202.378378378378, y: 3.92156862745098, size: 1 },\r\n // { x: 204.324324324324, y: 4.11764705882353, size: 1 },\r\n // { x: 205.621621621622, y: 3.96078431372549, size: 1 },\r\n // { x: 208.216216216216, y: 4.03921568627451, size: 1 },\r\n // { x: 209.513513513514, y: 3.92156862745098, size: 1 },\r\n // { x: 212.756756756757, y: 3.25490196078431, size: 1 },\r\n // { x: 213.405405405405, y: 3.17647058823529, size: 1 },\r\n // { x: 214.054054054054, y: 0.823529411764706, size: 1 },\r\n // { x: 214.702702702703, y: 0.862745098039216, size: 1 },\r\n // { x: 215.351351351351, y: 1.09803921568627, size: 1 },\r\n // { x: 216, y: 1.13725490196078, size: 1 },\r\n // { x: 216.648648648649, y: 3.25490196078431, size: 1 },\r\n // { x: 217.297297297297, y: 3.33333333333333, size: 1 },\r\n // { x: 218.594594594595, y: 3.09803921568627, size: 1 },\r\n // { x: 223.783783783784, y: 2.86274509803922, size: 1 },\r\n // { x: 229.621621621622, y: 2.7843137254902, size: 1 },\r\n // { x: 230.27027027027, y: 3.09803921568627, size: 1 },\r\n // { x: 230.918918918919, y: 3.33333333333333, size: 1 },\r\n // { x: 231.567567567568, y: 3.17647058823529, size: 1 },\r\n // { x: 232.864864864865, y: 3.29411764705882, size: 1 },\r\n // { x: 233.513513513514, y: 3.13725490196078, size: 1 },\r\n // { x: 235.459459459459, y: 2.86274509803922, size: 1 },\r\n // { x: 236.108108108108, y: 2.90196078431373, size: 1 },\r\n // { x: 238.702702702703, y: 3.76470588235294, size: 1 },\r\n // { x: 242.594594594595, y: 3.84313725490196, size: 1 },\r\n // { x: 245.189189189189, y: 3.92156862745098, size: 1 },\r\n // { x: 246.486486486486, y: 4, size: 1 },\r\n // { x: 256.864864864865, y: 3.2156862745098, size: 1 },\r\n // { x: 257.513513513513, y: 2.94117647058824, size: 1 },\r\n // { x: 258.162162162162, y: 3.29411764705882, size: 1 },\r\n // { x: 259.459459459459, y: 4, size: 1 },\r\n // { x: 273.081081081081, y: 3.88235294117647, size: 1 },\r\n // { x: 277.621621621622, y: 3.05882352941176, size: 1 },\r\n // { x: 278.918918918919, y: 2.31372549019608, size: 1 },\r\n // { x: 279.567567567568, y: 2.58823529411765, size: 1 },\r\n // { x: 282.162162162162, y: 3.80392156862745, size: 1 },\r\n // { x: 299.027027027027, y: 3.29411764705882, size: 1 },\r\n // { x: 299.675675675676, y: 3.33333333333333, size: 1 },\r\n // { x: 300.324324324324, y: 2.47058823529412, size: 1 },\r\n // { x: 300.972972972973, y: 2.47058823529412, size: 1 },\r\n // { x: 312, y: 3.52941176470588, size: 1 },\r\n // { x: 314.594594594595, y: 3.25490196078431, size: 1 },\r\n // { x: 320.432432432432, y: 3.09803921568627, size: 1 },\r\n // { x: 321.081081081081, y: 3.2156862745098, size: 1 },\r\n // { x: 321.72972972973, y: 2.94117647058824, size: 1 },\r\n // { x: 322.378378378378, y: 2.74509803921569, size: 1 },\r\n // { x: 333.405405405405, y: 3.88235294117647, size: 1 },\r\n // { x: 334.054054054054, y: 3.80392156862745, size: 1 },\r\n // { x: 353.513513513513, y: 4.03921568627451, size: 1 },\r\n // { x: 354.810810810811, y: 3.92156862745098, size: 1 },\r\n // { x: 21.3669064748201, y: 4.03921568627451, size: 1 },\r\n // { x: 66.0431654676259, y: 3.92156862745098, size: 1 },\r\n // { x: 90, y: 3.29411764705882, size: 1 },\r\n // { x: 90.6474820143885, y: 3.01960784313725, size: 1 },\r\n // { x: 91.9424460431655, y: 2.54901960784314, size: 1 },\r\n // { x: 129.496402877698, y: 3.88235294117647, size: 1 },\r\n // { x: 133.381294964029, y: 2.98039215686275, size: 1 },\r\n // { x: 150.863309352518, y: 3.96078431372549, size: 1 },\r\n // { x: 172.877697841727, y: 4, size: 1 },\r\n // { x: 174.172661870504, y: 4.03921568627451, size: 1 },\r\n // { x: 174.820143884892, y: 3.92156862745098, size: 1 },\r\n // { x: 192.302158273381, y: 4, size: 1 },\r\n // { x: 234.388489208633, y: 3.29411764705882, size: 1 },\r\n // { x: 257.05035971223, y: 4.03921568627451, size: 1 },\r\n // { x: 264.172661870504, y: 3.05882352941176, size: 1 },\r\n // { x: 264.820143884892, y: 3.05882352941176, size: 1 },\r\n // { x: 265.467625899281, y: 2.98039215686275, size: 1 },\r\n // { x: 266.115107913669, y: 2.7843137254902, size: 1 },\r\n // { x: 289.424460431655, y: 3.45098039215686, size: 1 },\r\n // { x: 329.568345323741, y: 2.50980392156863, size: 1 },\r\n // { x: 330.215827338129, y: 2.54901960784314, size: 1 },\r\n // { x: 330.863309352518, y: 2.70588235294118, size: 1 },\r\n // { x: 331.510791366906, y: 3.25490196078431, size: 1 },\r\n // { x: 350.287769784173, y: 3.01960784313725, size: 1 },\r\n // { x: 350.935251798561, y: 2.86274509803922, size: 1 },\r\n // { x: 4.53237410071942, y: 4, size: 1 },\r\n // { x: 5.17985611510791, y: 3.96078431372549, size: 1 },\r\n // { x: 5.8273381294964, y: 3.92156862745098, size: 1 },\r\n // { x: 19.4244604316547, y: 3.96078431372549, size: 1 },\r\n // { x: 24.6043165467626, y: 4.15686274509804, size: 1 },\r\n // { x: 67.3381294964029, y: 4.03921568627451, size: 1 },\r\n // { x: 68.6330935251799, y: 4.15686274509804, size: 1 },\r\n // { x: 99.0647482014388, y: 3.17647058823529, size: 1 },\r\n // { x: 118.489208633094, y: 3.45098039215686, size: 1 },\r\n // { x: 206.546762589928, y: 3.13725490196078, size: 1 },\r\n // { x: 227.26618705036, y: 3.88235294117647, size: 1 },\r\n // { x: 264.820143884892, y: 4.03921568627451, size: 1 },\r\n // { x: 268.705035971223, y: 3.88235294117647, size: 1 },\r\n // { x: 271.942446043165, y: 3.2156862745098, size: 1 },\r\n // { x: 291.36690647482, y: 3.25490196078431, size: 1 },\r\n // { x: 292.661870503597, y: 3.09803921568627, size: 1 },\r\n // { x: 293.309352517986, y: 3.17647058823529, size: 1 },\r\n // { x: 302.374100719424, y: 3.88235294117647, size: 1 },\r\n // { x: 356.762589928058, y: 3.29411764705882, size: 1 },\r\n // { x: 357.410071942446, y: 3.05882352941176, size: 1 },\r\n // { x: 29.7841726618705, y: 4, size: 1 },\r\n // { x: 34.9640287769784, y: 3.84313725490196, size: 1 },\r\n // { x: 67.3381294964029, y: 3.96078431372549, size: 1 },\r\n // { x: 71.2230215827338, y: 4.03921568627451, size: 1 },\r\n // { x: 105.539568345324, y: 3.05882352941176, size: 1 },\r\n // { x: 106.834532374101, y: 3.2156862745098, size: 1 },\r\n // { x: 117.194244604317, y: 4.23529411764706, size: 1 },\r\n // { x: 121.079136690647, y: 3.96078431372549, size: 1 },\r\n // { x: 150.863309352518, y: 3.09803921568627, size: 1 },\r\n // { x: 157.985611510791, y: 4.03921568627451, size: 1 },\r\n // { x: 174.820143884892, y: 3.88235294117647, size: 1 },\r\n // { x: 213.669064748201, y: 3.13725490196078, size: 1 },\r\n // { x: 235.68345323741, y: 3.17647058823529, size: 1 },\r\n // { x: 246.043165467626, y: 3.92156862745098, size: 1 },\r\n // { x: 256.402877697842, y: 3.01960784313725, size: 1 },\r\n // { x: 257.05035971223, y: 2.86274509803922, size: 1 },\r\n // { x: 257.697841726619, y: 2.90196078431373, size: 1 },\r\n // { x: 258.345323741007, y: 2.7843137254902, size: 1 },\r\n // { x: 321.151079136691, y: 3.17647058823529, size: 1 },\r\n // { x: 321.798561151079, y: 3.25490196078431, size: 1 },\r\n // { x: 330.215827338129, y: 4.07843137254902, size: 1 },\r\n // { x: 2.59459459459459, y: 3.64705882352941, size: 1 },\r\n // { x: 3.24324324324324, y: 3.41176470588235, size: 1 },\r\n // { x: 4.54054054054054, y: 2.82352941176471, size: 1 },\r\n // { x: 6.48648648648649, y: 3.01960784313725, size: 1 },\r\n // { x: 14.9189189189189, y: 4, size: 1 },\r\n // { x: 16.2162162162162, y: 4.07843137254902, size: 1 },\r\n // { x: 19.4594594594595, y: 3.80392156862745, size: 1 },\r\n // { x: 25.9459459459459, y: 3.25490196078431, size: 1 },\r\n // { x: 48, y: 2.94117647058824, size: 1 },\r\n // { x: 48.6486486486486, y: 2.86274509803922, size: 1 },\r\n // { x: 49.9459459459459, y: 3.05882352941176, size: 1 },\r\n // { x: 51.2432432432432, y: 3.88235294117647, size: 1 },\r\n // { x: 53.1891891891892, y: 3.68627450980392, size: 1 },\r\n // { x: 57.7297297297297, y: 3.84313725490196, size: 1 },\r\n // { x: 69.4054054054054, y: 3.01960784313725, size: 1 },\r\n // { x: 70.054054054054, y: 2.98039215686275, size: 1 },\r\n // { x: 72.6486486486486, y: 3.84313725490196, size: 1 },\r\n // { x: 75.8918918918919, y: 3.92156862745098, size: 1 },\r\n // { x: 76.5405405405405, y: 3.76470588235294, size: 1 },\r\n // { x: 81.7297297297297, y: 3.84313725490196, size: 1 },\r\n // { x: 94.054054054054, y: 3.92156862745098, size: 1 },\r\n // { x: 97.2972972972973, y: 3.68627450980392, size: 1 },\r\n // { x: 100.540540540541, y: 4.03921568627451, size: 1 },\r\n // { x: 103.135135135135, y: 4.11764705882353, size: 1 },\r\n // { x: 109.621621621622, y: 4.03921568627451, size: 1 },\r\n // { x: 125.837837837838, y: 3.84313725490196, size: 1 },\r\n // { x: 128.432432432432, y: 3.80392156862745, size: 1 },\r\n // { x: 133.621621621622, y: 3.52941176470588, size: 1 },\r\n // { x: 141.405405405405, y: 3.49019607843137, size: 1 },\r\n // { x: 154.378378378378, y: 3.56862745098039, size: 1 },\r\n // { x: 156.324324324324, y: 3.29411764705882, size: 1 },\r\n // { x: 157.621621621622, y: 3.96078431372549, size: 1 },\r\n // { x: 166.054054054054, y: 4.07843137254902, size: 1 },\r\n // { x: 166.702702702703, y: 3.49019607843137, size: 1 },\r\n // { x: 167.351351351351, y: 3.92156862745098, size: 1 },\r\n // { x: 177.081081081081, y: 3.25490196078431, size: 1 },\r\n // { x: 179.675675675676, y: 3.52941176470588, size: 1 },\r\n // { x: 180.972972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 191.351351351351, y: 3.45098039215686, size: 1 },\r\n // { x: 197.189189189189, y: 3.37254901960784, size: 1 },\r\n // { x: 199.135135135135, y: 2.74509803921569, size: 1 },\r\n // { x: 199.783783783784, y: 2.70588235294118, size: 1 },\r\n // { x: 212.756756756757, y: 3.76470588235294, size: 1 },\r\n // { x: 223.783783783784, y: 3.88235294117647, size: 1 },\r\n // { x: 225.081081081081, y: 3.41176470588235, size: 1 },\r\n // { x: 230.27027027027, y: 3.88235294117647, size: 1 },\r\n // { x: 230.918918918919, y: 3.80392156862745, size: 1 },\r\n // { x: 247.783783783784, y: 4, size: 1 },\r\n // { x: 250.378378378378, y: 3.52941176470588, size: 1 },\r\n // { x: 255.567567567568, y: 3.37254901960784, size: 1 },\r\n // { x: 257.513513513513, y: 3.49019607843137, size: 1 },\r\n // { x: 258.162162162162, y: 3.72549019607843, size: 1 },\r\n // { x: 260.756756756757, y: 3.52941176470588, size: 1 },\r\n // { x: 262.702702702703, y: 4.03921568627451, size: 1 },\r\n // { x: 265.297297297297, y: 3.96078431372549, size: 1 },\r\n // { x: 267.891891891892, y: 3.45098039215686, size: 1 },\r\n // { x: 270.486486486487, y: 3.92156862745098, size: 1 },\r\n // { x: 280.864864864865, y: 3.76470588235294, size: 1 },\r\n // { x: 289.297297297297, y: 3.29411764705882, size: 1 },\r\n // { x: 300.324324324324, y: 3.41176470588235, size: 1 },\r\n // { x: 302.27027027027, y: 3.41176470588235, size: 1 },\r\n // { x: 306.810810810811, y: 3.29411764705882, size: 1 },\r\n // { x: 307.459459459459, y: 2.82352941176471, size: 1 },\r\n // { x: 308.108108108108, y: 3.05882352941176, size: 1 },\r\n // { x: 308.756756756757, y: 2.90196078431373, size: 1 },\r\n // { x: 309.405405405405, y: 2.94117647058824, size: 1 },\r\n // { x: 312.648648648649, y: 3.92156862745098, size: 1 },\r\n // { x: 314.594594594595, y: 3.84313725490196, size: 1 },\r\n // { x: 315.243243243243, y: 3.76470588235294, size: 1 },\r\n // { x: 317.189189189189, y: 3.76470588235294, size: 1 },\r\n // { x: 319.783783783784, y: 3.56862745098039, size: 1 },\r\n // { x: 328.216216216216, y: 3.84313725490196, size: 1 },\r\n // { x: 329.513513513513, y: 3.45098039215686, size: 1 },\r\n // { x: 334.702702702703, y: 3.96078431372549, size: 1 },\r\n // { x: 337.297297297297, y: 3.92156862745098, size: 1 },\r\n // { x: 351.567567567568, y: 3.49019607843137, size: 1 },\r\n // { x: 23.9568345323741, y: 3.17647058823529, size: 1 },\r\n // { x: 25.8992805755396, y: 3.25490196078431, size: 1 },\r\n // { x: 163.165467625899, y: 2.62745098039216, size: 1 },\r\n // { x: 163.812949640288, y: 2.74509803921569, size: 1 },\r\n // { x: 183.884892086331, y: 3.33333333333333, size: 1 },\r\n // { x: 184.532374100719, y: 2.98039215686275, size: 1 },\r\n // { x: 185.179856115108, y: 2.90196078431373, size: 1 },\r\n // { x: 206.546762589928, y: 2.74509803921569, size: 1 },\r\n // { x: 227.26618705036, y: 3.25490196078431, size: 1 },\r\n // { x: 227.913669064748, y: 2.11764705882353, size: 1 },\r\n // { x: 228.561151079137, y: 2.43137254901961, size: 1 },\r\n // { x: 236.978417266187, y: 4.03921568627451, size: 1 },\r\n // { x: 247.985611510791, y: 3.29411764705882, size: 1 },\r\n // { x: 265.467625899281, y: 3.88235294117647, size: 1 },\r\n // { x: 287.482014388489, y: 3.88235294117647, size: 1 },\r\n // { x: 292.661870503597, y: 2.47058823529412, size: 1 },\r\n // { x: 293.309352517986, y: 2.35294117647059, size: 1 },\r\n // { x: 317.26618705036, y: 4.03921568627451, size: 1 },\r\n // { x: 327.625899280576, y: 4.23529411764706, size: 1 },\r\n // { x: 343.812949640288, y: 3.88235294117647, size: 1 },\r\n // { x: 356.115107913669, y: 3.2156862745098, size: 1 },\r\n // { x: 357.410071942446, y: 3.09803921568627, size: 1 },\r\n // { x: 358.057553956835, y: 2.7843137254902, size: 1 },\r\n // { x: 7.76978417266187, y: 4.15686274509804, size: 1 },\r\n // { x: 18.7769784172662, y: 2.74509803921569, size: 1 },\r\n // { x: 19.4244604316547, y: 2.47058823529412, size: 1 },\r\n // { x: 39.4964028776978, y: 3.09803921568627, size: 1 },\r\n // { x: 40.1438848920863, y: 2.94117647058824, size: 1 },\r\n // { x: 40.7913669064748, y: 2.11764705882353, size: 1 },\r\n // { x: 41.4388489208633, y: 3.09803921568627, size: 1 },\r\n // { x: 70.5755395683453, y: 3.88235294117647, size: 1 },\r\n // { x: 89.3525179856115, y: 3.96078431372549, size: 1 },\r\n // { x: 90.6474820143885, y: 4, size: 1 },\r\n // { x: 101.007194244604, y: 4.03921568627451, size: 1 },\r\n // { x: 131.438848920863, y: 4, size: 1 },\r\n // { x: 149.568345323741, y: 3.17647058823529, size: 1 },\r\n // { x: 150.215827338129, y: 3.17647058823529, size: 1 },\r\n // { x: 170.287769784173, y: 2.7843137254902, size: 1 },\r\n // { x: 170.935251798561, y: 3.13725490196078, size: 1 },\r\n // { x: 172.230215827338, y: 3.13725490196078, size: 1 },\r\n // { x: 191.654676258993, y: 2.98039215686275, size: 1 },\r\n // { x: 192.94964028777, y: 2.90196078431373, size: 1 },\r\n // { x: 196.834532374101, y: 3.88235294117647, size: 1 },\r\n // { x: 200.071942446043, y: 3.96078431372549, size: 1 },\r\n // { x: 226.618705035971, y: 3.29411764705882, size: 1 },\r\n // { x: 235.035971223022, y: 2.82352941176471, size: 1 },\r\n // { x: 235.68345323741, y: 2.94117647058824, size: 1 },\r\n // { x: 246.043165467626, y: 3.96078431372549, size: 1 },\r\n // { x: 256.402877697842, y: 2.94117647058824, size: 1 },\r\n // { x: 257.05035971223, y: 2.7843137254902, size: 1 },\r\n // { x: 257.697841726619, y: 2.94117647058824, size: 1 },\r\n // { x: 258.345323741007, y: 3.05882352941176, size: 1 },\r\n // { x: 262.230215827338, y: 3.33333333333333, size: 1 },\r\n // { x: 277.769784172662, y: 2.58823529411765, size: 1 },\r\n // { x: 278.41726618705, y: 2.31372549019608, size: 1 },\r\n // { x: 279.064748201439, y: 2.47058823529412, size: 1 },\r\n // { x: 279.712230215827, y: 2.35294117647059, size: 1 },\r\n // { x: 280.359712230216, y: 3.29411764705882, size: 1 },\r\n // { x: 332.158273381295, y: 3.92156862745098, size: 1 },\r\n // { x: 20.7194244604317, y: 3.84313725490196, size: 1 },\r\n // { x: 34.3165467625899, y: 3.88235294117647, size: 1 },\r\n // { x: 71.2230215827338, y: 3.2156862745098, size: 1 },\r\n // { x: 74.4604316546763, y: 3.92156862745098, size: 1 },\r\n // { x: 90.6474820143885, y: 3.13725490196078, size: 1 },\r\n // { x: 91.294964028777, y: 3.09803921568627, size: 1 },\r\n // { x: 91.9424460431655, y: 2.74509803921569, size: 1 },\r\n // { x: 92.589928057554, y: 2.7843137254902, size: 1 },\r\n // { x: 99.0647482014388, y: 3.96078431372549, size: 1 },\r\n // { x: 113.956834532374, y: 3.09803921568627, size: 1 },\r\n // { x: 125.611510791367, y: 3.33333333333333, size: 1 },\r\n // { x: 134.028776978417, y: 3.05882352941176, size: 1 },\r\n // { x: 134.676258992806, y: 3.05882352941176, size: 1 },\r\n // { x: 156.690647482014, y: 2.74509803921569, size: 1 },\r\n // { x: 157.338129496403, y: 2.86274509803922, size: 1 },\r\n // { x: 177.410071942446, y: 2.94117647058824, size: 1 },\r\n // { x: 178.705035971223, y: 3.17647058823529, size: 1 },\r\n // { x: 185.827338129496, y: 3.84313725490196, size: 1 },\r\n // { x: 192.302158273381, y: 4.03921568627451, size: 1 },\r\n // { x: 198.776978417266, y: 3.13725490196078, size: 1 },\r\n // { x: 220.143884892086, y: 2.54901960784314, size: 1 },\r\n // { x: 220.791366906475, y: 2.50980392156863, size: 1 },\r\n // { x: 221.438848920863, y: 2.98039215686275, size: 1 },\r\n // { x: 283.597122302158, y: 3.84313725490196, size: 1 },\r\n // { x: 306.906474820144, y: 3.29411764705882, size: 1 },\r\n // { x: 315.323741007194, y: 4, size: 1 },\r\n // { x: 349.640287769784, y: 3.17647058823529, size: 1 },\r\n // { x: 48.5611510791367, y: 3.96078431372549, size: 1 },\r\n // { x: 63.4532374100719, y: 4.15686274509804, size: 1 },\r\n // { x: 76.4028776978417, y: 3.29411764705882, size: 1 },\r\n // { x: 85.4676258992806, y: 3.92156862745098, size: 1 },\r\n // { x: 99.0647482014388, y: 3.01960784313725, size: 1 },\r\n // { x: 118.489208633094, y: 3.05882352941176, size: 1 },\r\n // { x: 119.136690647482, y: 3.01960784313725, size: 1 },\r\n // { x: 119.784172661871, y: 2.86274509803922, size: 1 },\r\n // { x: 126.258992805755, y: 3.29411764705882, size: 1 },\r\n // { x: 183.884892086331, y: 3.01960784313725, size: 1 },\r\n // { x: 204.604316546763, y: 4.35294117647059, size: 1 },\r\n // { x: 227.26618705036, y: 3.09803921568627, size: 1 },\r\n // { x: 229.208633093525, y: 3.96078431372549, size: 1 },\r\n // { x: 233.741007194245, y: 3.92156862745098, size: 1 },\r\n // { x: 326.978417266187, y: 4.03921568627451, size: 1 },\r\n // { x: 334.748201438849, y: 3.09803921568627, size: 1 },\r\n // { x: 5.83783783783784, y: 4, size: 1 },\r\n // { x: 18.1621621621622, y: 3.13725490196078, size: 1 },\r\n // { x: 18.8108108108108, y: 3.13725490196078, size: 1 },\r\n // { x: 23.3513513513514, y: 3.68627450980392, size: 1 },\r\n // { x: 31.1351351351351, y: 3.45098039215686, size: 1 },\r\n // { x: 33.7297297297297, y: 3.84313725490196, size: 1 },\r\n // { x: 39.5675675675676, y: 3.29411764705882, size: 1 },\r\n // { x: 56.4324324324324, y: 3.33333333333333, size: 1 },\r\n // { x: 62.9189189189189, y: 3.96078431372549, size: 1 },\r\n // { x: 70.7027027027027, y: 3.6078431372549, size: 1 },\r\n // { x: 74.5945945945946, y: 3.49019607843137, size: 1 },\r\n // { x: 82.3783783783784, y: 3.29411764705882, size: 1 },\r\n // { x: 83.027027027027, y: 3.25490196078431, size: 1 },\r\n // { x: 83.6756756756757, y: 3.17647058823529, size: 1 },\r\n // { x: 95.3513513513514, y: 3.72549019607843, size: 1 },\r\n // { x: 100.540540540541, y: 3.49019607843137, size: 1 },\r\n // { x: 103.783783783784, y: 3.01960784313725, size: 1 },\r\n // { x: 104.432432432432, y: 3.13725490196078, size: 1 },\r\n // { x: 105.081081081081, y: 2.7843137254902, size: 1 },\r\n // { x: 105.72972972973, y: 2.82352941176471, size: 1 },\r\n // { x: 106.378378378378, y: 2.54901960784314, size: 1 },\r\n // { x: 107.027027027027, y: 3.25490196078431, size: 1 },\r\n // { x: 117.405405405405, y: 3.37254901960784, size: 1 },\r\n // { x: 122.594594594595, y: 3.33333333333333, size: 1 },\r\n // { x: 123.243243243243, y: 3.33333333333333, size: 1 },\r\n // { x: 125.189189189189, y: 3.17647058823529, size: 1 },\r\n // { x: 126.486486486486, y: 2.66666666666667, size: 1 },\r\n // { x: 130.378378378378, y: 3.80392156862745, size: 1 },\r\n // { x: 139.459459459459, y: 3.96078431372549, size: 1 },\r\n // { x: 140.108108108108, y: 4.15686274509804, size: 1 },\r\n // { x: 146.594594594595, y: 3.45098039215686, size: 1 },\r\n // { x: 148.540540540541, y: 3.2156862745098, size: 1 },\r\n // { x: 149.189189189189, y: 3.76470588235294, size: 1 },\r\n // { x: 155.675675675676, y: 3.84313725490196, size: 1 },\r\n // { x: 160.216216216216, y: 3.56862745098039, size: 1 },\r\n // { x: 168.648648648649, y: 3.29411764705882, size: 1 },\r\n // { x: 169.297297297297, y: 3.13725490196078, size: 1 },\r\n // { x: 169.945945945946, y: 3.13725490196078, size: 1 },\r\n // { x: 171.243243243243, y: 3.49019607843137, size: 1 },\r\n // { x: 172.540540540541, y: 3.56862745098039, size: 1 },\r\n // { x: 178.378378378378, y: 3.6078431372549, size: 1 },\r\n // { x: 181.621621621622, y: 3.92156862745098, size: 1 },\r\n // { x: 191.351351351351, y: 3.2156862745098, size: 1 },\r\n // { x: 192, y: 3.29411764705882, size: 1 },\r\n // { x: 193.945945945946, y: 3.33333333333333, size: 1 },\r\n // { x: 195.891891891892, y: 3.41176470588235, size: 1 },\r\n // { x: 200.432432432432, y: 3.49019607843137, size: 1 },\r\n // { x: 201.72972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 212.756756756757, y: 3.05882352941176, size: 1 },\r\n // { x: 213.405405405405, y: 3.29411764705882, size: 1 },\r\n // { x: 217.945945945946, y: 3.88235294117647, size: 1 },\r\n // { x: 234.162162162162, y: 3.25490196078431, size: 1 },\r\n // { x: 234.810810810811, y: 3.41176470588235, size: 1 },\r\n // { x: 237.405405405405, y: 3.84313725490196, size: 1 },\r\n // { x: 243.891891891892, y: 3.80392156862745, size: 1 },\r\n // { x: 249.081081081081, y: 3.41176470588235, size: 1 },\r\n // { x: 250.378378378378, y: 3.80392156862745, size: 1 },\r\n // { x: 254.27027027027, y: 3.37254901960784, size: 1 },\r\n // { x: 254.918918918919, y: 3.49019607843137, size: 1 },\r\n // { x: 258.810810810811, y: 3.80392156862745, size: 1 },\r\n // { x: 259.459459459459, y: 3.92156862745098, size: 1 },\r\n // { x: 262.702702702703, y: 3.92156862745098, size: 1 },\r\n // { x: 263.351351351351, y: 3.92156862745098, size: 1 },\r\n // { x: 265.297297297297, y: 3.88235294117647, size: 1 },\r\n // { x: 278.27027027027, y: 3.45098039215686, size: 1 },\r\n // { x: 301.621621621622, y: 3.37254901960784, size: 1 },\r\n // { x: 312.648648648649, y: 3.37254901960784, size: 1 },\r\n // { x: 315.243243243243, y: 3.37254901960784, size: 1 },\r\n // { x: 315.891891891892, y: 3.45098039215686, size: 1 },\r\n // { x: 319.135135135135, y: 3.33333333333333, size: 1 },\r\n // { x: 321.081081081081, y: 3.09803921568627, size: 1 },\r\n // { x: 323.027027027027, y: 3.2156862745098, size: 1 },\r\n // { x: 323.675675675676, y: 4.11764705882353, size: 1 },\r\n // { x: 324.972972972973, y: 3.96078431372549, size: 1 },\r\n // { x: 337.945945945946, y: 3.52941176470588, size: 1 },\r\n // { x: 350.27027027027, y: 3.84313725490196, size: 1 },\r\n // { x: 353.513513513513, y: 3.45098039215686, size: 1 },\r\n // { x: 358.054054054054, y: 3.72549019607843, size: 1 },\r\n // { x: 22.0143884892086, y: 3.33333333333333, size: 1 },\r\n // { x: 27.1942446043165, y: 3.25490196078431, size: 1 },\r\n // { x: 34.3165467625899, y: 3.37254901960784, size: 1 },\r\n // { x: 39.4964028776978, y: 3.33333333333333, size: 1 },\r\n // { x: 44.0287769784173, y: 3.29411764705882, size: 1 },\r\n // { x: 69.2805755395683, y: 1.25490196078431, size: 1 },\r\n // { x: 69.9280575539568, y: 1.45098039215686, size: 1 },\r\n // { x: 70.5755395683453, y: 1.41176470588235, size: 1 },\r\n // { x: 71.2230215827338, y: 3.09803921568627, size: 1 },\r\n // { x: 73.1654676258993, y: 3.09803921568627, size: 1 },\r\n // { x: 73.8129496402878, y: 2.98039215686275, size: 1 },\r\n // { x: 78.3453237410072, y: 2.86274509803922, size: 1 },\r\n // { x: 84.1726618705036, y: 2.90196078431373, size: 1 },\r\n // { x: 84.8201438848921, y: 2.90196078431373, size: 1 },\r\n // { x: 85.4676258992806, y: 3.25490196078431, size: 1 },\r\n // { x: 90.6474820143885, y: 2.7843137254902, size: 1 },\r\n // { x: 133.381294964029, y: 3.29411764705882, size: 1 },\r\n // { x: 153.453237410072, y: 2.98039215686275, size: 1 },\r\n // { x: 154.748201438849, y: 3.01960784313725, size: 1 },\r\n // { x: 155.395683453237, y: 1.88235294117647, size: 1 },\r\n // { x: 176.115107913669, y: 3.05882352941176, size: 1 },\r\n // { x: 176.762589928058, y: 1.96078431372549, size: 1 },\r\n // { x: 177.410071942446, y: 1.96078431372549, size: 1 },\r\n // { x: 191.007194244604, y: 4.11764705882353, size: 1 },\r\n // { x: 194.892086330935, y: 4.19607843137255, size: 1 },\r\n // { x: 198.776978417266, y: 3.33333333333333, size: 1 },\r\n // { x: 223.381294964029, y: 4, size: 1 },\r\n // { x: 296.546762589928, y: 4.03921568627451, size: 1 },\r\n // { x: 306.258992805755, y: 2.54901960784314, size: 1 },\r\n // { x: 306.906474820144, y: 2.50980392156863, size: 1 },\r\n // { x: 347.697841726619, y: 3.09803921568627, size: 1 },\r\n // { x: 16.8345323741007, y: 4, size: 1 },\r\n // { x: 97.7697841726619, y: 3.09803921568627, size: 1 },\r\n // { x: 124.31654676259, y: 4.03921568627451, size: 1 },\r\n // { x: 137.913669064748, y: 4.03921568627451, size: 1 },\r\n // { x: 139.856115107914, y: 3.17647058823529, size: 1 },\r\n // { x: 140.503597122302, y: 2.86274509803922, size: 1 },\r\n // { x: 141.798561151079, y: 3.05882352941176, size: 1 },\r\n // { x: 142.446043165468, y: 2.98039215686275, size: 1 },\r\n // { x: 164.460431654676, y: 3.96078431372549, size: 1 },\r\n // { x: 183.884892086331, y: 3.13725490196078, size: 1 },\r\n // { x: 208.489208633094, y: 3.45098039215686, size: 1 },\r\n // { x: 227.26618705036, y: 3.13725490196078, size: 1 },\r\n // { x: 246.690647482014, y: 3.37254901960784, size: 1 },\r\n // { x: 247.985611510791, y: 3.2156862745098, size: 1 },\r\n // { x: 249.928057553957, y: 2.98039215686275, size: 1 },\r\n // { x: 335.395683453237, y: 2.86274509803922, size: 1 },\r\n // { x: 336.043165467626, y: 2.94117647058824, size: 1 },\r\n // { x: 336.690647482014, y: 3.09803921568627, size: 1 },\r\n // { x: 356.115107913669, y: 2.74509803921569, size: 1 },\r\n // { x: 356.762589928058, y: 2.70588235294118, size: 1 },\r\n // { x: 357.410071942446, y: 3.2156862745098, size: 1 },\r\n // { x: 358.705035971223, y: 3.33333333333333, size: 1 },\r\n // { x: 3.89189189189189, y: 3.84313725490196, size: 1 },\r\n // { x: 18.8108108108108, y: 3.2156862745098, size: 1 },\r\n // { x: 19.4594594594595, y: 2.98039215686275, size: 1 },\r\n // { x: 20.1081081081081, y: 3.09803921568627, size: 1 },\r\n // { x: 20.7567567567568, y: 3.92156862745098, size: 1 },\r\n // { x: 24.6486486486486, y: 3.92156862745098, size: 1 },\r\n // { x: 34.3783783783784, y: 3.52941176470588, size: 1 },\r\n // { x: 40.2162162162162, y: 3.05882352941176, size: 1 },\r\n // { x: 53.8378378378378, y: 3.37254901960784, size: 1 },\r\n // { x: 69.4054054054054, y: 3.84313725490196, size: 1 },\r\n // { x: 72, y: 3.88235294117647, size: 1 },\r\n // { x: 84.3243243243243, y: 3.80392156862745, size: 1 },\r\n // { x: 114.162162162162, y: 3.88235294117647, size: 1 },\r\n // { x: 114.810810810811, y: 4, size: 1 },\r\n // { x: 118.054054054054, y: 3.88235294117647, size: 1 },\r\n // { x: 119.351351351351, y: 3.88235294117647, size: 1 },\r\n // { x: 121.945945945946, y: 3.84313725490196, size: 1 },\r\n // { x: 125.837837837838, y: 3.25490196078431, size: 1 },\r\n // { x: 126.486486486486, y: 3.2156862745098, size: 1 },\r\n // { x: 129.081081081081, y: 3.64705882352941, size: 1 },\r\n // { x: 147.891891891892, y: 3.05882352941176, size: 1 },\r\n // { x: 148.540540540541, y: 3.29411764705882, size: 1 },\r\n // { x: 188.756756756757, y: 3.41176470588235, size: 1 },\r\n // { x: 196.540540540541, y: 4.11764705882353, size: 1 },\r\n // { x: 201.72972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 203.675675675676, y: 3.88235294117647, size: 1 },\r\n // { x: 204.324324324324, y: 3.80392156862745, size: 1 },\r\n // { x: 212.756756756757, y: 3.84313725490196, size: 1 },\r\n // { x: 221.837837837838, y: 3.76470588235294, size: 1 },\r\n // { x: 231.567567567568, y: 3.92156862745098, size: 1 },\r\n // { x: 240.648648648649, y: 3.80392156862745, size: 1 },\r\n // { x: 252.324324324324, y: 3.92156862745098, size: 1 },\r\n // { x: 253.621621621622, y: 3.88235294117647, size: 1 },\r\n // { x: 254.27027027027, y: 3.84313725490196, size: 1 },\r\n // { x: 256.216216216216, y: 3.25490196078431, size: 1 },\r\n // { x: 276.324324324324, y: 3.2156862745098, size: 1 },\r\n // { x: 276.972972972973, y: 3.09803921568627, size: 1 },\r\n // { x: 277.621621621622, y: 2.98039215686275, size: 1 },\r\n // { x: 289.945945945946, y: 3.41176470588235, size: 1 },\r\n // { x: 297.081081081081, y: 3.2156862745098, size: 1 },\r\n // { x: 298.378378378378, y: 3.17647058823529, size: 1 },\r\n // { x: 299.027027027027, y: 2.47058823529412, size: 1 },\r\n // { x: 299.675675675676, y: 2.54901960784314, size: 1 },\r\n // { x: 300.324324324324, y: 2.86274509803922, size: 1 },\r\n // { x: 300.972972972973, y: 2.66666666666667, size: 1 },\r\n // { x: 306.162162162162, y: 3.84313725490196, size: 1 },\r\n // { x: 310.702702702703, y: 3.88235294117647, size: 1 },\r\n // { x: 320.432432432432, y: 3.01960784313725, size: 1 },\r\n // { x: 321.081081081081, y: 3.01960784313725, size: 1 },\r\n // { x: 323.675675675676, y: 3.68627450980392, size: 1 },\r\n // { x: 325.621621621622, y: 3.37254901960784, size: 1 },\r\n // { x: 328.864864864865, y: 4.03921568627451, size: 1 },\r\n // { x: 341.837837837838, y: 3.37254901960784, size: 1 },\r\n // { x: 342.486486486487, y: 3.33333333333333, size: 1 },\r\n // { x: 344.432432432432, y: 3.29411764705882, size: 1 },\r\n // { x: 352.864864864865, y: 3.41176470588235, size: 1 },\r\n // { x: 357.405405405405, y: 3.88235294117647, size: 1 },\r\n // { x: 7.12230215827338, y: 4, size: 1 },\r\n // { x: 11.6546762589928, y: 3.80392156862745, size: 1 },\r\n // { x: 25.8992805755396, y: 3.05882352941176, size: 1 },\r\n // { x: 67.9856115107914, y: 3.17647058823529, size: 1 },\r\n // { x: 69.2805755395683, y: 2.31372549019608, size: 1 },\r\n // { x: 93.2374100719424, y: 3.88235294117647, size: 1 },\r\n // { x: 98.4172661870504, y: 3.96078431372549, size: 1 },\r\n // { x: 121.079136690647, y: 4.03921568627451, size: 1 },\r\n // { x: 144.388489208633, y: 3.96078431372549, size: 1 },\r\n // { x: 176.762589928058, y: 3.09803921568627, size: 1 },\r\n // { x: 214.31654676259, y: 3.88235294117647, size: 1 },\r\n // { x: 219.496402877698, y: 3.05882352941176, size: 1 },\r\n // { x: 220.143884892086, y: 2.94117647058824, size: 1 },\r\n // { x: 263.525179856115, y: 3.13725490196078, size: 1 },\r\n // { x: 266.115107913669, y: 4, size: 1 },\r\n // { x: 284.244604316547, y: 2.98039215686275, size: 1 },\r\n // { x: 328.273381294964, y: 3.2156862745098, size: 1 },\r\n // { x: 11.0071942446043, y: 3.13725490196078, size: 1 },\r\n // { x: 53.7410071942446, y: 3.13725490196078, size: 1 },\r\n // { x: 60.863309352518, y: 3.80392156862745, size: 1 },\r\n // { x: 119.136690647482, y: 3.13725490196078, size: 1 },\r\n // { x: 157.338129496403, y: 3.2156862745098, size: 1 },\r\n // { x: 183.884892086331, y: 2.86274509803922, size: 1 },\r\n // { x: 220.143884892086, y: 3.84313725490196, size: 1 },\r\n // { x: 236.330935251799, y: 3.92156862745098, size: 1 },\r\n // { x: 266.115107913669, y: 3.92156862745098, size: 1 },\r\n // { x: 356.115107913669, y: 2.58823529411765, size: 1 },\r\n // { x: 356.762589928058, y: 2.7843137254902, size: 1 },\r\n // { x: 17.4820143884892, y: 2.74509803921569, size: 1 },\r\n // { x: 18.1294964028777, y: 1.84313725490196, size: 1 },\r\n // { x: 38.2014388489209, y: 3.09803921568627, size: 1 },\r\n // { x: 39.4964028776978, y: 2.90196078431373, size: 1 },\r\n // { x: 60.863309352518, y: 2.62745098039216, size: 1 },\r\n // { x: 82.2302158273381, y: 2.43137254901961, size: 1 },\r\n // { x: 82.8776978417266, y: 2.35294117647059, size: 1 },\r\n // { x: 92.589928057554, y: 4.23529411764706, size: 1 },\r\n // { x: 103.597122302158, y: 2.82352941176471, size: 1 },\r\n // { x: 104.244604316547, y: 1.96078431372549, size: 1 },\r\n // { x: 130.791366906475, y: 3.92156862745098, size: 1 },\r\n // { x: 143.741007194245, y: 4, size: 1 },\r\n // { x: 145.035971223022, y: 4, size: 1 },\r\n // { x: 165.107913669065, y: 3.96078431372549, size: 1 },\r\n // { x: 170.287769784173, y: 3.33333333333333, size: 1 },\r\n // { x: 172.877697841727, y: 3.80392156862745, size: 1 },\r\n // { x: 228.561151079137, y: 3.84313725490196, size: 1 },\r\n // { x: 229.856115107914, y: 3.96078431372549, size: 1 },\r\n // { x: 233.741007194245, y: 2.50980392156863, size: 1 },\r\n // { x: 345.107913669065, y: 4.03921568627451, size: 1 },\r\n // { x: 347.05035971223, y: 3.92156862745098, size: 1 },\r\n // { x: 358.057553956835, y: 3.96078431372549, size: 1 },\r\n // { x: 359.352517985611, y: 4.07843137254902, size: 1 },\r\n // { x: 12.9496402877698, y: 3.88235294117647, size: 1 },\r\n // { x: 16.1870503597122, y: 3.96078431372549, size: 1 },\r\n // { x: 18.1294964028777, y: 4, size: 1 },\r\n // { x: 25.2517985611511, y: 3.01960784313725, size: 1 },\r\n // { x: 33.0215827338129, y: 3.88235294117647, size: 1 },\r\n // { x: 73.8129496402878, y: 4.11764705882353, size: 1 },\r\n // { x: 93.2374100719424, y: 4, size: 1 },\r\n // { x: 105.539568345324, y: 4, size: 1 },\r\n // { x: 132.73381294964, y: 2.66666666666667, size: 1 },\r\n // { x: 154.748201438849, y: 3.05882352941176, size: 1 },\r\n // { x: 156.690647482014, y: 4.03921568627451, size: 1 },\r\n // { x: 178.705035971223, y: 3.25490196078431, size: 1 },\r\n // { x: 220.791366906475, y: 3.96078431372549, size: 1 },\r\n // { x: 252.517985611511, y: 4, size: 1 },\r\n // { x: 264.172661870504, y: 3.84313725490196, size: 1 },\r\n // { x: 264.820143884892, y: 3.92156862745098, size: 1 },\r\n // { x: 281.007194244604, y: 3.96078431372549, size: 1 },\r\n // { x: 284.244604316547, y: 3.17647058823529, size: 1 },\r\n // { x: 326.978417266187, y: 3.2156862745098, size: 1 },\r\n // { x: 327.625899280576, y: 2.98039215686275, size: 1 },\r\n // { x: 328.273381294964, y: 2.94117647058824, size: 1 },\r\n // { x: 328.920863309353, y: 3.13725490196078, size: 1 },\r\n // { x: 348.992805755396, y: 2.98039215686275, size: 1 },\r\n // { x: 350.287769784173, y: 2.98039215686275, size: 1 },\r\n // { x: 7.13513513513514, y: 3.45098039215686, size: 1 },\r\n // { x: 9.72972972972973, y: 3.01960784313725, size: 1 },\r\n // { x: 10.3783783783784, y: 3.01960784313725, size: 1 },\r\n // { x: 19.4594594594595, y: 3.96078431372549, size: 1 },\r\n // { x: 22.0540540540541, y: 3.92156862745098, size: 1 },\r\n // { x: 22.7027027027027, y: 3.96078431372549, size: 1 },\r\n // { x: 30.4864864864865, y: 3.49019607843137, size: 1 },\r\n // { x: 31.1351351351351, y: 3.2156862745098, size: 1 },\r\n // { x: 31.7837837837838, y: 3.13725490196078, size: 1 },\r\n // { x: 32.4324324324324, y: 2.98039215686275, size: 1 },\r\n // { x: 33.0810810810811, y: 2.98039215686275, size: 1 },\r\n // { x: 33.7297297297297, y: 2.94117647058824, size: 1 },\r\n // { x: 35.027027027027, y: 3.72549019607843, size: 1 },\r\n // { x: 53.1891891891892, y: 3.13725490196078, size: 1 },\r\n // { x: 53.8378378378378, y: 3.13725490196078, size: 1 },\r\n // { x: 58.3783783783784, y: 4, size: 1 },\r\n // { x: 62.2702702702703, y: 3.80392156862745, size: 1 },\r\n // { x: 75.2432432432432, y: 3.05882352941176, size: 1 },\r\n // { x: 96.6486486486486, y: 3.17647058823529, size: 1 },\r\n // { x: 105.72972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 116.756756756757, y: 3.49019607843137, size: 1 },\r\n // { x: 118.702702702703, y: 2.98039215686275, size: 1 },\r\n // { x: 122.594594594595, y: 3.84313725490196, size: 1 },\r\n // { x: 127.135135135135, y: 3.92156862745098, size: 1 },\r\n // { x: 131.027027027027, y: 3.96078431372549, size: 1 },\r\n // { x: 159.567567567568, y: 3.37254901960784, size: 1 },\r\n // { x: 169.945945945946, y: 3.80392156862745, size: 1 },\r\n // { x: 182.918918918919, y: 3.37254901960784, size: 1 },\r\n // { x: 203.675675675676, y: 4.15686274509804, size: 1 },\r\n // { x: 204.324324324324, y: 3.13725490196078, size: 1 },\r\n // { x: 204.972972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 241.297297297297, y: 3.52941176470588, size: 1 },\r\n // { x: 246.486486486486, y: 3.88235294117647, size: 1 },\r\n // { x: 247.783783783784, y: 3.88235294117647, size: 1 },\r\n // { x: 274.378378378378, y: 3.84313725490196, size: 1 },\r\n // { x: 282.162162162162, y: 3.37254901960784, size: 1 },\r\n // { x: 288.648648648649, y: 4, size: 1 },\r\n // { x: 298.378378378378, y: 3.72549019607843, size: 1 },\r\n // { x: 299.675675675676, y: 3.49019607843137, size: 1 },\r\n // { x: 303.567567567568, y: 3.37254901960784, size: 1 },\r\n // { x: 311.351351351351, y: 3.80392156862745, size: 1 },\r\n // { x: 319.135135135135, y: 3.92156862745098, size: 1 },\r\n // { x: 323.027027027027, y: 3.68627450980392, size: 1 },\r\n // { x: 338.594594594595, y: 3.88235294117647, size: 1 },\r\n // { x: 348.972972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 355.459459459459, y: 3.25490196078431, size: 1 },\r\n // { x: 356.108108108108, y: 3.01960784313725, size: 1 },\r\n // { x: 356.756756756757, y: 2.94117647058824, size: 1 },\r\n // { x: 357.405405405405, y: 2.98039215686275, size: 1 },\r\n // { x: 358.054054054054, y: 2.98039215686275, size: 1 },\r\n // { x: 0, y: 3.96078431372549, size: 1 },\r\n // { x: 18.7769784172662, y: 3.09803921568627, size: 1 },\r\n // { x: 34.3165467625899, y: 3.96078431372549, size: 1 },\r\n // { x: 35.6115107913669, y: 4, size: 1 },\r\n // { x: 38.8489208633094, y: 3.2156862745098, size: 1 },\r\n // { x: 56.9784172661871, y: 4.03921568627451, size: 1 },\r\n // { x: 65.3956834532374, y: 3.88235294117647, size: 1 },\r\n // { x: 152.805755395683, y: 3.96078431372549, size: 1 },\r\n // { x: 161.223021582734, y: 4.11764705882353, size: 1 },\r\n // { x: 191.007194244604, y: 3.33333333333333, size: 1 },\r\n // { x: 210.431654676259, y: 3.37254901960784, size: 1 },\r\n // { x: 219.496402877698, y: 4, size: 1 },\r\n // { x: 233.093525179856, y: 3.2156862745098, size: 1 },\r\n // { x: 233.741007194245, y: 3.01960784313725, size: 1 },\r\n // { x: 319.856115107914, y: 3.01960784313725, size: 1 },\r\n // { x: 320.503597122302, y: 2.94117647058824, size: 1 },\r\n // { x: 321.151079136691, y: 2.50980392156863, size: 1 },\r\n // { x: 321.798561151079, y: 2.7843137254902, size: 1 },\r\n // { x: 341.223021582734, y: 3.05882352941176, size: 1 },\r\n // { x: 341.870503597122, y: 3.29411764705882, size: 1 },\r\n // { x: 16.8345323741007, y: 3.92156862745098, size: 1 },\r\n // { x: 24.6043165467626, y: 2.98039215686275, size: 1 },\r\n // { x: 45.3237410071942, y: 3.13725490196078, size: 1 },\r\n // { x: 45.9712230215827, y: 3.09803921568627, size: 1 },\r\n // { x: 67.9856115107914, y: 2.94117647058824, size: 1 },\r\n // { x: 153.453237410072, y: 3.92156862745098, size: 1 },\r\n // { x: 213.021582733813, y: 4.23529411764706, size: 1 },\r\n // { x: 218.201438848921, y: 3.25490196078431, size: 1 },\r\n // { x: 248.63309352518, y: 4.03921568627451, size: 1 },\r\n // { x: 282.94964028777, y: 2.94117647058824, size: 1 },\r\n // { x: 283.597122302158, y: 1.37254901960784, size: 1 },\r\n // { x: 284.244604316547, y: 1.13725490196078, size: 1 },\r\n // { x: 284.892086330935, y: 1.2156862745098, size: 1 },\r\n // { x: 285.539568345324, y: 0.823529411764706, size: 1 },\r\n // { x: 288.129496402878, y: 2.86274509803922, size: 1 },\r\n // { x: 299.136690647482, y: 2.82352941176471, size: 1 },\r\n // { x: 304.964028776978, y: 2.82352941176471, size: 1 },\r\n // { x: 305.611510791367, y: 2.74509803921569, size: 1 },\r\n // { x: 326.330935251799, y: 2.82352941176471, size: 1 },\r\n // { x: 347.697841726619, y: 3.29411764705882, size: 1 },\r\n // { x: 352.877697841727, y: 4, size: 1 },\r\n // { x: 3.89189189189189, y: 3.96078431372549, size: 1 },\r\n // { x: 7.78378378378378, y: 3.33333333333333, size: 1 },\r\n // { x: 8.43243243243243, y: 3.17647058823529, size: 1 },\r\n // { x: 9.72972972972973, y: 2.19607843137255, size: 1 },\r\n // { x: 10.3783783783784, y: 2.19607843137255, size: 1 },\r\n // { x: 14.9189189189189, y: 3.76470588235294, size: 1 },\r\n // { x: 20.1081081081081, y: 3.84313725490196, size: 1 },\r\n // { x: 29.1891891891892, y: 3.84313725490196, size: 1 },\r\n // { x: 31.1351351351351, y: 3.37254901960784, size: 1 },\r\n // { x: 31.7837837837838, y: 3.01960784313725, size: 1 },\r\n // { x: 42.8108108108108, y: 3.76470588235294, size: 1 },\r\n // { x: 51.8918918918919, y: 3.05882352941176, size: 1 },\r\n // { x: 52.5405405405405, y: 3.13725490196078, size: 1 },\r\n // { x: 53.1891891891892, y: 2.11764705882353, size: 1 },\r\n // { x: 73.2972972972973, y: 3.33333333333333, size: 1 },\r\n // { x: 73.945945945946, y: 3.25490196078431, size: 1 },\r\n // { x: 74.5945945945946, y: 2.54901960784314, size: 1 },\r\n // { x: 75.2432432432432, y: 2.86274509803922, size: 1 },\r\n // { x: 77.1891891891892, y: 3.72549019607843, size: 1 },\r\n // { x: 80.4324324324324, y: 3.92156862745098, size: 1 },\r\n // { x: 86.2702702702703, y: 3.88235294117647, size: 1 },\r\n // { x: 90.8108108108108, y: 4.15686274509804, size: 1 },\r\n // { x: 101.189189189189, y: 3.84313725490196, size: 1 },\r\n // { x: 106.378378378378, y: 3.92156862745098, size: 1 },\r\n // { x: 110.918918918919, y: 3.80392156862745, size: 1 },\r\n // { x: 114.162162162162, y: 3.84313725490196, size: 1 },\r\n // { x: 116.756756756757, y: 3.05882352941176, size: 1 },\r\n // { x: 117.405405405405, y: 3.29411764705882, size: 1 },\r\n // { x: 118.054054054054, y: 2.66666666666667, size: 1 },\r\n // { x: 118.702702702703, y: 3.09803921568627, size: 1 },\r\n // { x: 132.324324324324, y: 3.33333333333333, size: 1 },\r\n // { x: 133.621621621622, y: 3.80392156862745, size: 1 },\r\n // { x: 134.27027027027, y: 3.80392156862745, size: 1 },\r\n // { x: 138.810810810811, y: 2.7843137254902, size: 1 },\r\n // { x: 139.459459459459, y: 1.88235294117647, size: 1 },\r\n // { x: 140.108108108108, y: 2.11764705882353, size: 1 },\r\n // { x: 146.594594594595, y: 3.2156862745098, size: 1 },\r\n // { x: 159.567567567568, y: 3.13725490196078, size: 1 },\r\n // { x: 160.864864864865, y: 2.66666666666667, size: 1 },\r\n // { x: 161.513513513514, y: 2.7843137254902, size: 1 },\r\n // { x: 171.891891891892, y: 3.80392156862745, size: 1 },\r\n // { x: 173.189189189189, y: 3.84313725490196, size: 1 },\r\n // { x: 177.72972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 180.324324324324, y: 3.45098039215686, size: 1 },\r\n // { x: 182.918918918919, y: 3.41176470588235, size: 1 },\r\n // { x: 184.864864864865, y: 3.33333333333333, size: 1 },\r\n // { x: 187.459459459459, y: 3.52941176470588, size: 1 },\r\n // { x: 194.594594594595, y: 3.33333333333333, size: 1 },\r\n // { x: 236.108108108108, y: 3.92156862745098, size: 1 },\r\n // { x: 256.216216216216, y: 3.88235294117647, size: 1 },\r\n // { x: 269.189189189189, y: 3.25490196078431, size: 1 },\r\n // { x: 269.837837837838, y: 3.29411764705882, size: 1 },\r\n // { x: 277.621621621622, y: 3.88235294117647, size: 1 },\r\n // { x: 279.567567567568, y: 3.88235294117647, size: 1 },\r\n // { x: 286.702702702703, y: 4, size: 1 },\r\n // { x: 287.351351351351, y: 3.33333333333333, size: 1 },\r\n // { x: 289.297297297297, y: 3.37254901960784, size: 1 },\r\n // { x: 291.891891891892, y: 3.05882352941176, size: 1 },\r\n // { x: 292.540540540541, y: 2.94117647058824, size: 1 },\r\n // { x: 301.621621621622, y: 4, size: 1 },\r\n // { x: 306.810810810811, y: 3.76470588235294, size: 1 },\r\n // { x: 309.405405405405, y: 3.80392156862745, size: 1 },\r\n // { x: 311.351351351351, y: 3.45098039215686, size: 1 },\r\n // { x: 312, y: 3.17647058823529, size: 1 },\r\n // { x: 312.648648648649, y: 3.13725490196078, size: 1 },\r\n // { x: 313.297297297297, y: 3.13725490196078, size: 1 },\r\n // { x: 313.945945945946, y: 3.33333333333333, size: 1 },\r\n // { x: 314.594594594595, y: 3.37254901960784, size: 1 },\r\n // { x: 320.432432432432, y: 3.88235294117647, size: 1 },\r\n // { x: 330.810810810811, y: 4.03921568627451, size: 1 },\r\n // { x: 334.702702702703, y: 3.37254901960784, size: 1 },\r\n // { x: 335.351351351351, y: 3.05882352941176, size: 1 },\r\n // { x: 356.108108108108, y: 3.25490196078431, size: 1 },\r\n // { x: 356.756756756757, y: 3.2156862745098, size: 1 },\r\n // { x: 17.4820143884892, y: 2.98039215686275, size: 1 },\r\n // { x: 18.1294964028777, y: 3.01960784313725, size: 1 },\r\n // { x: 18.7769784172662, y: 2.94117647058824, size: 1 },\r\n // { x: 19.4244604316547, y: 3.05882352941176, size: 1 },\r\n // { x: 38.8489208633094, y: 2.98039215686275, size: 1 },\r\n // { x: 39.4964028776978, y: 2.94117647058824, size: 1 },\r\n // { x: 40.1438848920863, y: 2.58823529411765, size: 1 },\r\n // { x: 40.7913669064748, y: 2.7843137254902, size: 1 },\r\n // { x: 80.9352517985612, y: 3.17647058823529, size: 1 },\r\n // { x: 82.2302158273381, y: 3.01960784313725, size: 1 },\r\n // { x: 104.244604316547, y: 2.98039215686275, size: 1 },\r\n // { x: 104.892086330935, y: 2.98039215686275, size: 1 },\r\n // { x: 105.539568345324, y: 3.25490196078431, size: 1 },\r\n // { x: 148.273381294964, y: 3.92156862745098, size: 1 },\r\n // { x: 168.345323741007, y: 3.37254901960784, size: 1 },\r\n // { x: 218.848920863309, y: 3.80392156862745, size: 1 },\r\n // { x: 233.093525179856, y: 3.29411764705882, size: 1 },\r\n // { x: 235.035971223022, y: 2.98039215686275, size: 1 },\r\n // { x: 254.460431654676, y: 2.90196078431373, size: 1 },\r\n // { x: 255.107913669065, y: 3.01960784313725, size: 1 },\r\n // { x: 256.402877697842, y: 3.25490196078431, size: 1 },\r\n // { x: 257.05035971223, y: 3.13725490196078, size: 1 },\r\n // { x: 266.115107913669, y: 3.25490196078431, size: 1 },\r\n // { x: 269.352517985611, y: 3.33333333333333, size: 1 },\r\n // { x: 319.208633093525, y: 3.01960784313725, size: 1 },\r\n // { x: 320.503597122302, y: 2.86274509803922, size: 1 },\r\n // { x: 341.223021582734, y: 2.98039215686275, size: 1 },\r\n // { x: 341.870503597122, y: 2.98039215686275, size: 1 },\r\n // { x: 342.517985611511, y: 2.7843137254902, size: 1 },\r\n // { x: 343.165467625899, y: 2.74509803921569, size: 1 },\r\n // { x: 2.58992805755396, y: 2.54901960784314, size: 1 },\r\n // { x: 3.23741007194245, y: 2.90196078431373, size: 1 },\r\n // { x: 3.88489208633094, y: 2.43137254901961, size: 1 },\r\n // { x: 4.53237410071942, y: 2.54901960784314, size: 1 },\r\n // { x: 53.7410071942446, y: 3.88235294117647, size: 1 },\r\n // { x: 68.6330935251799, y: 3.2156862745098, size: 1 },\r\n // { x: 88.705035971223, y: 2.50980392156863, size: 1 },\r\n // { x: 89.3525179856115, y: 2.86274509803922, size: 1 },\r\n // { x: 110.719424460432, y: 2.98039215686275, size: 1 },\r\n // { x: 111.36690647482, y: 3.13725490196078, size: 1 },\r\n // { x: 112.661870503597, y: 3.13725490196078, size: 1 },\r\n // { x: 132.086330935252, y: 2.58823529411765, size: 1 },\r\n // { x: 132.73381294964, y: 2.98039215686275, size: 1 },\r\n // { x: 133.381294964029, y: 2.47058823529412, size: 1 },\r\n // { x: 134.028776978417, y: 2.74509803921569, size: 1 },\r\n // { x: 175.467625899281, y: 3.96078431372549, size: 1 },\r\n // { x: 184.532374100719, y: 3.92156862745098, size: 1 },\r\n // { x: 196.187050359712, y: 3.25490196078431, size: 1 },\r\n // { x: 197.482014388489, y: 3.17647058823529, size: 1 },\r\n // { x: 244.748201438849, y: 3.88235294117647, size: 1 },\r\n // { x: 282.94964028777, y: 2.74509803921569, size: 1 },\r\n // { x: 315.323741007194, y: 4.03921568627451, size: 1 },\r\n // { x: 319.208633093525, y: 3.96078431372549, size: 1 },\r\n // { x: 19.4244604316547, y: 4, size: 1 },\r\n // { x: 31.0791366906475, y: 3.09803921568627, size: 1 },\r\n // { x: 33.0215827338129, y: 3.17647058823529, size: 1 },\r\n // { x: 52.4460431654676, y: 3.09803921568627, size: 1 },\r\n // { x: 56.3309352517986, y: 3.92156862745098, size: 1 },\r\n // { x: 59.568345323741, y: 3.84313725490196, size: 1 },\r\n // { x: 113.309352517986, y: 4.07843137254902, size: 1 },\r\n // { x: 115.251798561151, y: 4, size: 1 },\r\n // { x: 128.848920863309, y: 4.03921568627451, size: 1 },\r\n // { x: 132.73381294964, y: 4, size: 1 },\r\n // { x: 148.920863309353, y: 4, size: 1 },\r\n // { x: 170.287769784173, y: 4.07843137254902, size: 1 },\r\n // { x: 181.942446043165, y: 3.2156862745098, size: 1 },\r\n // { x: 196.834532374101, y: 3.96078431372549, size: 1 },\r\n // { x: 249.928057553957, y: 3.96078431372549, size: 1 },\r\n // { x: 291.36690647482, y: 3.05882352941176, size: 1 },\r\n // { x: 305.611510791367, y: 3.84313725490196, size: 1 },\r\n // { x: 311.438848920863, y: 2.3921568627451, size: 1 },\r\n // { x: 312.086330935252, y: 2.70588235294118, size: 1 },\r\n // { x: 313.381294964029, y: 2.94117647058824, size: 1 },\r\n // { x: 333.453237410072, y: 2.74509803921569, size: 1 },\r\n // { x: 11.027027027027, y: 3.84313725490196, size: 1 },\r\n // { x: 17.5135135135135, y: 3.84313725490196, size: 1 },\r\n // { x: 19.4594594594595, y: 3.88235294117647, size: 1 },\r\n // { x: 27.8918918918919, y: 3.88235294117647, size: 1 },\r\n // { x: 37.6216216216216, y: 3.17647058823529, size: 1 },\r\n // { x: 42.1621621621622, y: 3.76470588235294, size: 1 },\r\n // { x: 47.3513513513514, y: 3.88235294117647, size: 1 },\r\n // { x: 55.7837837837838, y: 3.84313725490196, size: 1 },\r\n // { x: 57.0810810810811, y: 4.03921568627451, size: 1 },\r\n // { x: 59.6756756756757, y: 2.86274509803922, size: 1 },\r\n // { x: 60.3243243243243, y: 2.94117647058824, size: 1 },\r\n // { x: 63.5675675675676, y: 3.96078431372549, size: 1 },\r\n // { x: 66.1621621621622, y: 3.41176470588235, size: 1 },\r\n // { x: 72, y: 3.45098039215686, size: 1 },\r\n // { x: 73.2972972972973, y: 3.64705882352941, size: 1 },\r\n // { x: 77.1891891891892, y: 3.80392156862745, size: 1 },\r\n // { x: 81.0810810810811, y: 2.86274509803922, size: 1 },\r\n // { x: 81.7297297297297, y: 2.82352941176471, size: 1 },\r\n // { x: 93.4054054054054, y: 3.49019607843137, size: 1 },\r\n // { x: 118.054054054054, y: 3.92156862745098, size: 1 },\r\n // { x: 118.702702702703, y: 3.92156862745098, size: 1 },\r\n // { x: 120.648648648649, y: 3.92156862745098, size: 1 },\r\n // { x: 131.027027027027, y: 3.64705882352941, size: 1 },\r\n // { x: 142.054054054054, y: 3.29411764705882, size: 1 },\r\n // { x: 145.945945945946, y: 3.13725490196078, size: 1 },\r\n // { x: 160.864864864865, y: 3.76470588235294, size: 1 },\r\n // { x: 162.162162162162, y: 4, size: 1 },\r\n // { x: 166.054054054054, y: 3.25490196078431, size: 1 },\r\n // { x: 168, y: 3.25490196078431, size: 1 },\r\n // { x: 173.189189189189, y: 4.07843137254902, size: 1 },\r\n // { x: 189.405405405405, y: 2.98039215686275, size: 1 },\r\n // { x: 190.054054054054, y: 2.70588235294118, size: 1 },\r\n // { x: 210.810810810811, y: 3.05882352941176, size: 1 },\r\n // { x: 211.459459459459, y: 3.25490196078431, size: 1 },\r\n // { x: 220.540540540541, y: 3.84313725490196, size: 1 },\r\n // { x: 221.189189189189, y: 3.92156862745098, size: 1 },\r\n // { x: 222.486486486486, y: 3.92156862745098, size: 1 },\r\n // { x: 225.72972972973, y: 4.15686274509804, size: 1 },\r\n // { x: 229.621621621622, y: 3.92156862745098, size: 1 },\r\n // { x: 231.567567567568, y: 3.29411764705882, size: 1 },\r\n // { x: 232.216216216216, y: 3.25490196078431, size: 1 },\r\n // { x: 232.864864864865, y: 2.35294117647059, size: 1 },\r\n // { x: 239.351351351351, y: 3.76470588235294, size: 1 },\r\n // { x: 240, y: 3.96078431372549, size: 1 },\r\n // { x: 252.324324324324, y: 3.80392156862745, size: 1 },\r\n // { x: 254.27027027027, y: 2.86274509803922, size: 1 },\r\n // { x: 254.918918918919, y: 3.05882352941176, size: 1 },\r\n // { x: 258.810810810811, y: 3.84313725490196, size: 1 },\r\n // { x: 264.648648648649, y: 3.92156862745098, size: 1 },\r\n // { x: 265.297297297297, y: 3.76470588235294, size: 1 },\r\n // { x: 269.189189189189, y: 4.03921568627451, size: 1 },\r\n // { x: 273.72972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 274.378378378378, y: 3.33333333333333, size: 1 },\r\n // { x: 275.675675675676, y: 2.86274509803922, size: 1 },\r\n // { x: 276.324324324324, y: 3.09803921568627, size: 1 },\r\n // { x: 284.108108108108, y: 3.49019607843137, size: 1 },\r\n // { x: 284.756756756757, y: 3.84313725490196, size: 1 },\r\n // { x: 296.432432432432, y: 3.45098039215686, size: 1 },\r\n // { x: 297.081081081081, y: 3.05882352941176, size: 1 },\r\n // { x: 297.72972972973, y: 2.58823529411765, size: 1 },\r\n // { x: 305.513513513513, y: 3.49019607843137, size: 1 },\r\n // { x: 310.702702702703, y: 3.84313725490196, size: 1 },\r\n // { x: 317.837837837838, y: 3.33333333333333, size: 1 },\r\n // { x: 319.135135135135, y: 2.62745098039216, size: 1 },\r\n // { x: 319.783783783784, y: 2.54901960784314, size: 1 },\r\n // { x: 326.27027027027, y: 3.92156862745098, size: 1 },\r\n // { x: 328.864864864865, y: 3.96078431372549, size: 1 },\r\n // { x: 336, y: 3.92156862745098, size: 1 },\r\n // { x: 349.621621621622, y: 3.84313725490196, size: 1 },\r\n // { x: 353.513513513513, y: 3.92156862745098, size: 1 },\r\n // { x: 354.810810810811, y: 3.56862745098039, size: 1 },\r\n // { x: 356.108108108108, y: 3.92156862745098, size: 1 },\r\n // { x: 358.054054054054, y: 3.88235294117647, size: 1 },\r\n // { x: 23.3093525179856, y: 3.17647058823529, size: 1 },\r\n // { x: 23.9568345323741, y: 2.35294117647059, size: 1 },\r\n // { x: 24.6043165467626, y: 2.35294117647059, size: 1 },\r\n // { x: 33.6690647482014, y: 3.84313725490196, size: 1 },\r\n // { x: 45.3237410071942, y: 2.7843137254902, size: 1 },\r\n // { x: 45.9712230215827, y: 2.86274509803922, size: 1 },\r\n // { x: 66.0431654676259, y: 3.13725490196078, size: 1 },\r\n // { x: 67.3381294964029, y: 2.15686274509804, size: 1 },\r\n // { x: 87.410071942446, y: 3.05882352941176, size: 1 },\r\n // { x: 88.705035971223, y: 2.27450980392157, size: 1 },\r\n // { x: 89.3525179856115, y: 2.47058823529412, size: 1 },\r\n // { x: 145.68345323741, y: 3.88235294117647, size: 1 },\r\n // { x: 154.748201438849, y: 3.80392156862745, size: 1 },\r\n // { x: 194.244604316547, y: 3.84313725490196, size: 1 },\r\n // { x: 200.719424460432, y: 3.96078431372549, size: 1 },\r\n // { x: 215.611510791367, y: 4, size: 1 },\r\n // { x: 220.143884892086, y: 3.88235294117647, size: 1 },\r\n // { x: 252.517985611511, y: 3.92156862745098, size: 1 },\r\n // { x: 261.58273381295, y: 3.13725490196078, size: 1 },\r\n // { x: 282.94964028777, y: 3.25490196078431, size: 1 },\r\n // { x: 343.812949640288, y: 3.84313725490196, size: 1 },\r\n // { x: 52.4460431654676, y: 2.98039215686275, size: 1 },\r\n // { x: 55.6834532374101, y: 3.92156862745098, size: 1 },\r\n // { x: 160.575539568345, y: 3.13725490196078, size: 1 },\r\n // { x: 161.870503597122, y: 2.94117647058824, size: 1 },\r\n // { x: 162.517985611511, y: 3.01960784313725, size: 1 },\r\n // { x: 203.309352517986, y: 3.17647058823529, size: 1 },\r\n // { x: 246.690647482014, y: 2.98039215686275, size: 1 },\r\n // { x: 290.719424460432, y: 3.05882352941176, size: 1 },\r\n // { x: 332.805755395683, y: 3.09803921568627, size: 1 },\r\n // { x: 333.453237410072, y: 2.94117647058824, size: 1 },\r\n // { x: 38.2014388489209, y: 3.13725490196078, size: 1 },\r\n // { x: 78.9928057553957, y: 3.96078431372549, size: 1 },\r\n // { x: 102.302158273381, y: 3.09803921568627, size: 1 },\r\n // { x: 170.935251798561, y: 4.11764705882353, size: 1 },\r\n // { x: 189.064748201439, y: 3.01960784313725, size: 1 },\r\n // { x: 210.431654676259, y: 3.29411764705882, size: 1 },\r\n // { x: 224.028776978417, y: 3.88235294117647, size: 1 },\r\n // { x: 235.035971223022, y: 4, size: 1 },\r\n // { x: 249.928057553957, y: 3.92156862745098, size: 1 },\r\n // { x: 251.870503597122, y: 3.96078431372549, size: 1 },\r\n // { x: 253.812949640288, y: 3.13725490196078, size: 1 },\r\n // { x: 257.697841726619, y: 3.92156862745098, size: 1 },\r\n // { x: 268.057553956835, y: 4.15686274509804, size: 1 },\r\n // { x: 275.179856115108, y: 3.09803921568627, size: 1 },\r\n // { x: 275.827338129496, y: 2.94117647058824, size: 1 },\r\n // { x: 281.654676258993, y: 3.92156862745098, size: 1 },\r\n // { x: 285.539568345324, y: 3.88235294117647, size: 1 },\r\n // { x: 306.906474820144, y: 4.11764705882353, size: 1 },\r\n // { x: 339.928057553957, y: 3.05882352941176, size: 1 },\r\n // { x: 358.705035971223, y: 4.03921568627451, size: 1 },\r\n // { x: 1.2972972972973, y: 3.17647058823529, size: 1 },\r\n // { x: 1.94594594594595, y: 3.29411764705882, size: 1 },\r\n // { x: 4.54054054054054, y: 3.76470588235294, size: 1 },\r\n // { x: 7.78378378378378, y: 4, size: 1 },\r\n // { x: 12.3243243243243, y: 3.96078431372549, size: 1 },\r\n // { x: 18.8108108108108, y: 4, size: 1 },\r\n // { x: 21.4054054054054, y: 3.2156862745098, size: 1 },\r\n // { x: 22.0540540540541, y: 3.33333333333333, size: 1 },\r\n // { x: 23.3513513513514, y: 2.82352941176471, size: 1 },\r\n // { x: 24.6486486486486, y: 3.96078431372549, size: 1 },\r\n // { x: 25.9459459459459, y: 3.96078431372549, size: 1 },\r\n // { x: 32.4324324324324, y: 3.88235294117647, size: 1 },\r\n // { x: 33.0810810810811, y: 3.92156862745098, size: 1 },\r\n // { x: 33.7297297297297, y: 3.92156862745098, size: 1 },\r\n // { x: 44.7567567567568, y: 3.25490196078431, size: 1 },\r\n // { x: 45.4054054054054, y: 3.25490196078431, size: 1 },\r\n // { x: 56.4324324324324, y: 3.84313725490196, size: 1 },\r\n // { x: 59.6756756756757, y: 3.96078431372549, size: 1 },\r\n // { x: 64.2162162162162, y: 3.80392156862745, size: 1 },\r\n // { x: 66.8108108108108, y: 3.37254901960784, size: 1 },\r\n // { x: 77.8378378378378, y: 3.41176470588235, size: 1 },\r\n // { x: 78.4864864864865, y: 3.76470588235294, size: 1 },\r\n // { x: 86.9189189189189, y: 3.17647058823529, size: 1 },\r\n // { x: 87.5675675675676, y: 3.2156862745098, size: 1 },\r\n // { x: 88.2162162162162, y: 3.05882352941176, size: 1 },\r\n // { x: 95.3513513513514, y: 3.6078431372549, size: 1 },\r\n // { x: 99.2432432432432, y: 3.76470588235294, size: 1 },\r\n // { x: 105.081081081081, y: 3.80392156862745, size: 1 },\r\n // { x: 105.72972972973, y: 4, size: 1 },\r\n // { x: 111.567567567568, y: 3.92156862745098, size: 1 },\r\n // { x: 112.216216216216, y: 4, size: 1 },\r\n // { x: 124.540540540541, y: 3.56862745098039, size: 1 },\r\n // { x: 129.081081081081, y: 3.45098039215686, size: 1 },\r\n // { x: 129.72972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 131.027027027027, y: 3.2156862745098, size: 1 },\r\n // { x: 140.108108108108, y: 3.92156862745098, size: 1 },\r\n // { x: 147.243243243243, y: 4, size: 1 },\r\n // { x: 147.891891891892, y: 3.84313725490196, size: 1 },\r\n // { x: 153.72972972973, y: 3.2156862745098, size: 1 },\r\n // { x: 166.054054054054, y: 3.49019607843137, size: 1 },\r\n // { x: 169.945945945946, y: 3.72549019607843, size: 1 },\r\n // { x: 174.486486486486, y: 3.17647058823529, size: 1 },\r\n // { x: 175.135135135135, y: 3.25490196078431, size: 1 },\r\n // { x: 175.783783783784, y: 3.76470588235294, size: 1 },\r\n // { x: 191.351351351351, y: 4, size: 1 },\r\n // { x: 192.648648648649, y: 3.41176470588235, size: 1 },\r\n // { x: 195.891891891892, y: 3.13725490196078, size: 1 },\r\n // { x: 206.27027027027, y: 3.96078431372549, size: 1 },\r\n // { x: 207.567567567568, y: 3.88235294117647, size: 1 },\r\n // { x: 216, y: 3.41176470588235, size: 1 },\r\n // { x: 217.297297297297, y: 3.17647058823529, size: 1 },\r\n // { x: 221.189189189189, y: 3.96078431372549, size: 1 },\r\n // { x: 227.675675675676, y: 4.03921568627451, size: 1 },\r\n // { x: 228.324324324324, y: 3.92156862745098, size: 1 },\r\n // { x: 238.054054054054, y: 3.45098039215686, size: 1 },\r\n // { x: 240, y: 2.90196078431373, size: 1 },\r\n // { x: 245.837837837838, y: 3.88235294117647, size: 1 },\r\n // { x: 255.567567567568, y: 3.92156862745098, size: 1 },\r\n // { x: 269.837837837838, y: 4, size: 1 },\r\n // { x: 271.135135135135, y: 4.03921568627451, size: 1 },\r\n // { x: 276.324324324324, y: 3.92156862745098, size: 1 },\r\n // { x: 281.513513513513, y: 4.11764705882353, size: 1 },\r\n // { x: 282.810810810811, y: 2.94117647058824, size: 1 },\r\n // { x: 284.108108108108, y: 4.03921568627451, size: 1 },\r\n // { x: 286.702702702703, y: 3.84313725490196, size: 1 },\r\n // { x: 292.540540540541, y: 3.80392156862745, size: 1 },\r\n // { x: 294.486486486487, y: 3.96078431372549, size: 1 },\r\n // { x: 295.783783783784, y: 3.76470588235294, size: 1 },\r\n // { x: 304.216216216216, y: 3.29411764705882, size: 1 },\r\n // { x: 307.459459459459, y: 3.96078431372549, size: 1 },\r\n // { x: 325.621621621622, y: 3.17647058823529, size: 1 },\r\n // { x: 327.567567567568, y: 3.88235294117647, size: 1 },\r\n // { x: 328.864864864865, y: 4, size: 1 },\r\n // { x: 342.486486486487, y: 3.84313725490196, size: 1 },\r\n // { x: 343.135135135135, y: 4.15686274509804, size: 1 },\r\n // { x: 345.081081081081, y: 3.96078431372549, size: 1 },\r\n // { x: 345.72972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 350.918918918919, y: 3.72549019607843, size: 1 },\r\n // { x: 352.216216216216, y: 4.15686274509804, size: 1 },\r\n // { x: 358.702702702703, y: 3.64705882352941, size: 1 },\r\n // { x: 7.76978417266187, y: 3.25490196078431, size: 1 },\r\n // { x: 9.06474820143885, y: 2.7843137254902, size: 1 },\r\n // { x: 9.71223021582734, y: 2.90196078431373, size: 1 },\r\n // { x: 52.4460431654676, y: 3.05882352941176, size: 1 },\r\n // { x: 72.5179856115108, y: 3.25490196078431, size: 1 },\r\n // { x: 73.8129496402878, y: 3.17647058823529, size: 1 },\r\n // { x: 74.4604316546763, y: 3.01960784313725, size: 1 },\r\n // { x: 95.1798561151079, y: 3.17647058823529, size: 1 },\r\n // { x: 117.194244604317, y: 3.05882352941176, size: 1 },\r\n // { x: 137.913669064748, y: 2.90196078431373, size: 1 },\r\n // { x: 139.208633093525, y: 1.49019607843137, size: 1 },\r\n // { x: 139.856115107914, y: 0.705882352941177, size: 1 },\r\n // { x: 140.503597122302, y: 1.2156862745098, size: 1 },\r\n // { x: 148.273381294964, y: 2.90196078431373, size: 1 },\r\n // { x: 154.10071942446, y: 2.86274509803922, size: 1 },\r\n // { x: 154.748201438849, y: 3.09803921568627, size: 1 },\r\n // { x: 158.63309352518, y: 3.09803921568627, size: 1 },\r\n // { x: 159.928057553957, y: 2.98039215686275, size: 1 },\r\n // { x: 160.575539568345, y: 2.50980392156863, size: 1 },\r\n // { x: 180.647482014388, y: 3.09803921568627, size: 1 },\r\n // { x: 181.294964028777, y: 3.25490196078431, size: 1 },\r\n // { x: 181.942446043165, y: 2.31372549019608, size: 1 },\r\n // { x: 182.589928057554, y: 2.98039215686275, size: 1 },\r\n // { x: 203.309352517986, y: 1.92156862745098, size: 1 },\r\n // { x: 203.956834532374, y: 1.72549019607843, size: 1 },\r\n // { x: 225.323741007194, y: 4, size: 1 },\r\n // { x: 240.863309352518, y: 3.96078431372549, size: 1 },\r\n // { x: 244.10071942446, y: 4.03921568627451, size: 1 },\r\n // { x: 306.906474820144, y: 4, size: 1 },\r\n // { x: 309.496402877698, y: 3.05882352941176, size: 1 },\r\n // { x: 28.4892086330935, y: 4.07843137254902, size: 1 },\r\n // { x: 57.6258992805755, y: 3.01960784313725, size: 1 },\r\n // { x: 98.4172661870504, y: 4.11764705882353, size: 1 },\r\n // { x: 116.546762589928, y: 3.92156862745098, size: 1 },\r\n // { x: 139.856115107914, y: 3.88235294117647, size: 1 },\r\n // { x: 150.215827338129, y: 4.07843137254902, size: 1 },\r\n // { x: 170.935251798561, y: 4, size: 1 },\r\n // { x: 188.41726618705, y: 2.98039215686275, size: 1 },\r\n // { x: 189.064748201439, y: 3.09803921568627, size: 1 },\r\n // { x: 192.94964028777, y: 4.19607843137255, size: 1 },\r\n // { x: 209.136690647482, y: 3.92156862745098, size: 1 },\r\n // { x: 237.625899280576, y: 3.96078431372549, size: 1 },\r\n // { x: 240.863309352518, y: 4.23529411764706, size: 1 },\r\n // { x: 250.575539568345, y: 3.92156862745098, size: 1 },\r\n // { x: 253.165467625899, y: 2.82352941176471, size: 1 },\r\n // { x: 253.812949640288, y: 2.43137254901961, size: 1 },\r\n // { x: 256.402877697842, y: 4.03921568627451, size: 1 },\r\n // { x: 271.942446043165, y: 4.03921568627451, size: 1 },\r\n // { x: 272.589928057554, y: 3.84313725490196, size: 1 },\r\n // { x: 275.827338129496, y: 3.09803921568627, size: 1 },\r\n // { x: 298.489208633094, y: 4.03921568627451, size: 1 },\r\n // { x: 339.928057553957, y: 3.09803921568627, size: 1 },\r\n // { x: 42.7338129496403, y: 3.96078431372549, size: 1 },\r\n // { x: 63.4532374100719, y: 4.11764705882353, size: 1 },\r\n // { x: 109.424460431655, y: 2.94117647058824, size: 1 },\r\n // { x: 133.381294964029, y: 4.03921568627451, size: 1 },\r\n // { x: 134.028776978417, y: 3.96078431372549, size: 1 },\r\n // { x: 138.561151079137, y: 4, size: 1 },\r\n // { x: 146.330935251799, y: 4.19607843137255, size: 1 },\r\n // { x: 164.460431654676, y: 3.92156862745098, size: 1 },\r\n // { x: 165.755395683453, y: 4.15686274509804, size: 1 },\r\n // { x: 171.58273381295, y: 4, size: 1 },\r\n // { x: 194.244604316547, y: 3.29411764705882, size: 1 },\r\n // { x: 195.539568345324, y: 2.98039215686275, size: 1 },\r\n // { x: 196.187050359712, y: 2.82352941176471, size: 1 },\r\n // { x: 204.604316546763, y: 3.92156862745098, size: 1 },\r\n // { x: 238.273381294964, y: 3.33333333333333, size: 1 },\r\n // { x: 242.805755395683, y: 4.15686274509804, size: 1 },\r\n // { x: 257.697841726619, y: 3.88235294117647, size: 1 },\r\n // { x: 295.89928057554, y: 4, size: 1 },\r\n // { x: 312.73381294964, y: 3.96078431372549, size: 1 },\r\n // { x: 317.26618705036, y: 3.96078431372549, size: 1 },\r\n // { x: 325.68345323741, y: 3.05882352941176, size: 1 },\r\n // { x: 346.402877697842, y: 3.37254901960784, size: 1 },\r\n // { x: 9.72972972972973, y: 3.96078431372549, size: 1 },\r\n // { x: 25.9459459459459, y: 4.11764705882353, size: 1 },\r\n // { x: 31.1351351351351, y: 3.09803921568627, size: 1 },\r\n // { x: 31.7837837837838, y: 3.2156862745098, size: 1 },\r\n // { x: 49.2972972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 50.5945945945946, y: 3.80392156862745, size: 1 },\r\n // { x: 68.1081081081081, y: 4.07843137254902, size: 1 },\r\n // { x: 69.4054054054054, y: 4.07843137254902, size: 1 },\r\n // { x: 73.2972972972973, y: 3.09803921568627, size: 1 },\r\n // { x: 79.7837837837838, y: 3.88235294117647, size: 1 },\r\n // { x: 95.3513513513514, y: 3.33333333333333, size: 1 },\r\n // { x: 108.324324324324, y: 3.84313725490196, size: 1 },\r\n // { x: 112.864864864865, y: 3.80392156862745, size: 1 },\r\n // { x: 121.297297297297, y: 3.84313725490196, size: 1 },\r\n // { x: 127.135135135135, y: 3.88235294117647, size: 1 },\r\n // { x: 136.864864864865, y: 3.41176470588235, size: 1 },\r\n // { x: 138.162162162162, y: 2.98039215686275, size: 1 },\r\n // { x: 138.810810810811, y: 3.29411764705882, size: 1 },\r\n // { x: 140.108108108108, y: 3.84313725490196, size: 1 },\r\n // { x: 144.648648648649, y: 4.07843137254902, size: 1 },\r\n // { x: 147.891891891892, y: 3.96078431372549, size: 1 },\r\n // { x: 148.540540540541, y: 3.88235294117647, size: 1 },\r\n // { x: 158.918918918919, y: 3.17647058823529, size: 1 },\r\n // { x: 160.216216216216, y: 3.29411764705882, size: 1 },\r\n // { x: 160.864864864865, y: 2.98039215686275, size: 1 },\r\n // { x: 161.513513513514, y: 3.2156862745098, size: 1 },\r\n // { x: 162.162162162162, y: 3.37254901960784, size: 1 },\r\n // { x: 162.810810810811, y: 3.88235294117647, size: 1 },\r\n // { x: 169.945945945946, y: 4.03921568627451, size: 1 },\r\n // { x: 179.675675675676, y: 3.2156862745098, size: 1 },\r\n // { x: 180.972972972973, y: 3.2156862745098, size: 1 },\r\n // { x: 181.621621621622, y: 3.17647058823529, size: 1 },\r\n // { x: 186.162162162162, y: 3.80392156862745, size: 1 },\r\n // { x: 203.027027027027, y: 2.90196078431373, size: 1 },\r\n // { x: 203.675675675676, y: 3.29411764705882, size: 1 },\r\n // { x: 206.27027027027, y: 3.80392156862745, size: 1 },\r\n // { x: 206.918918918919, y: 3.92156862745098, size: 1 },\r\n // { x: 208.216216216216, y: 3.88235294117647, size: 1 },\r\n // { x: 220.540540540541, y: 3.76470588235294, size: 1 },\r\n // { x: 224.432432432432, y: 3.33333333333333, size: 1 },\r\n // { x: 225.081081081081, y: 3.25490196078431, size: 1 },\r\n // { x: 228.324324324324, y: 3.88235294117647, size: 1 },\r\n // { x: 245.189189189189, y: 3.41176470588235, size: 1 },\r\n // { x: 245.837837837838, y: 2.82352941176471, size: 1 },\r\n // { x: 246.486486486486, y: 2.86274509803922, size: 1 },\r\n // { x: 251.675675675676, y: 3.88235294117647, size: 1 },\r\n // { x: 256.216216216216, y: 4, size: 1 },\r\n // { x: 258.810810810811, y: 3.76470588235294, size: 1 },\r\n // { x: 262.054054054054, y: 4.03921568627451, size: 1 },\r\n // { x: 266.594594594595, y: 3.49019607843137, size: 1 },\r\n // { x: 267.243243243243, y: 3.13725490196078, size: 1 },\r\n // { x: 267.891891891892, y: 3.09803921568627, size: 1 },\r\n // { x: 268.540540540541, y: 3.25490196078431, size: 1 },\r\n // { x: 276.972972972973, y: 3.92156862745098, size: 1 },\r\n // { x: 283.459459459459, y: 3.80392156862745, size: 1 },\r\n // { x: 292.540540540541, y: 3.76470588235294, size: 1 },\r\n // { x: 300.324324324324, y: 4, size: 1 },\r\n // { x: 308.756756756757, y: 3.84313725490196, size: 1 },\r\n // { x: 310.702702702703, y: 3.25490196078431, size: 1 },\r\n // { x: 311.351351351351, y: 3.05882352941176, size: 1 },\r\n // { x: 313.297297297297, y: 4, size: 1 },\r\n // { x: 318.486486486487, y: 3.96078431372549, size: 1 },\r\n // { x: 320.432432432432, y: 3.76470588235294, size: 1 },\r\n // { x: 321.72972972973, y: 4.15686274509804, size: 1 },\r\n // { x: 329.513513513513, y: 3.96078431372549, size: 1 },\r\n // { x: 330.810810810811, y: 3.33333333333333, size: 1 },\r\n // { x: 331.459459459459, y: 3.37254901960784, size: 1 },\r\n // { x: 332.756756756757, y: 2.74509803921569, size: 1 },\r\n // { x: 333.405405405405, y: 3.2156862745098, size: 1 },\r\n // { x: 352.864864864865, y: 3.29411764705882, size: 1 },\r\n // { x: 15.5395683453237, y: 2.90196078431373, size: 1 },\r\n // { x: 16.1870503597122, y: 3.13725490196078, size: 1 },\r\n // { x: 38.2014388489209, y: 3.2156862745098, size: 1 },\r\n // { x: 69.2805755395683, y: 3.92156862745098, size: 1 },\r\n // { x: 79.6402877697842, y: 3.88235294117647, size: 1 },\r\n // { x: 145.035971223022, y: 2.82352941176471, size: 1 },\r\n // { x: 146.330935251799, y: 2.35294117647059, size: 1 },\r\n // { x: 146.978417266187, y: 2.23529411764706, size: 1 },\r\n // { x: 151.510791366906, y: 4.03921568627451, size: 1 },\r\n // { x: 156.690647482014, y: 4, size: 1 },\r\n // { x: 167.05035971223, y: 3.29411764705882, size: 1 },\r\n // { x: 186.474820143885, y: 3.33333333333333, size: 1 },\r\n // { x: 231.151079136691, y: 3.05882352941176, size: 1 },\r\n // { x: 253.165467625899, y: 2.3921568627451, size: 1 },\r\n // { x: 253.812949640288, y: 2.70588235294118, size: 1 },\r\n // { x: 274.532374100719, y: 2.98039215686275, size: 1 },\r\n // { x: 275.179856115108, y: 2.98039215686275, size: 1 },\r\n // { x: 14.2446043165468, y: 3.88235294117647, size: 1 },\r\n // { x: 44.6762589928058, y: 3.13725490196078, size: 1 },\r\n // { x: 53.7410071942446, y: 3.96078431372549, size: 1 },\r\n // { x: 66.0431654676259, y: 2.86274509803922, size: 1 },\r\n // { x: 87.410071942446, y: 2.50980392156863, size: 1 },\r\n // { x: 88.0575539568345, y: 2.58823529411765, size: 1 },\r\n // { x: 108.776978417266, y: 2.3921568627451, size: 1 },\r\n // { x: 109.424460431655, y: 2.11764705882353, size: 1 },\r\n // { x: 143.741007194245, y: 3.84313725490196, size: 1 },\r\n // { x: 151.510791366906, y: 3.09803921568627, size: 1 },\r\n // { x: 152.158273381295, y: 2.94117647058824, size: 1 },\r\n // { x: 229.856115107914, y: 4.07843137254902, size: 1 },\r\n // { x: 240.215827338129, y: 3.96078431372549, size: 1 },\r\n // { x: 256.402877697842, y: 4.27450980392157, size: 1 },\r\n // { x: 286.834532374101, y: 3.88235294117647, size: 1 },\r\n // { x: 303.021582733813, y: 2.54901960784314, size: 1 },\r\n // { x: 345.107913669065, y: 3.2156862745098, size: 1 },\r\n // { x: 14.2446043165468, y: 3.92156862745098, size: 1 },\r\n // { x: 22.6618705035971, y: 3.84313725490196, size: 1 },\r\n // { x: 51.7985611510791, y: 3.29411764705882, size: 1 },\r\n // { x: 61.5107913669065, y: 4.23529411764706, size: 1 },\r\n // { x: 69.2805755395683, y: 4.07843137254902, size: 1 },\r\n // { x: 106.187050359712, y: 4, size: 1 },\r\n // { x: 116.546762589928, y: 3.13725490196078, size: 1 },\r\n // { x: 117.194244604317, y: 2.7843137254902, size: 1 },\r\n // { x: 117.841726618705, y: 2.62745098039216, size: 1 },\r\n // { x: 119.136690647482, y: 4.11764705882353, size: 1 },\r\n // { x: 125.611510791367, y: 4, size: 1 },\r\n // { x: 137.26618705036, y: 3.33333333333333, size: 1 },\r\n // { x: 159.280575539568, y: 3.2156862745098, size: 1 },\r\n // { x: 180.647482014388, y: 2.7843137254902, size: 1 },\r\n // { x: 181.294964028777, y: 2.86274509803922, size: 1 },\r\n // { x: 246.043165467626, y: 3.05882352941176, size: 1 },\r\n // { x: 255.107913669065, y: 4.11764705882353, size: 1 },\r\n // { x: 326.978417266187, y: 3.96078431372549, size: 1 },\r\n // { x: 15.5675675675676, y: 3.29411764705882, size: 1 },\r\n // { x: 16.2162162162162, y: 3.13725490196078, size: 1 },\r\n // { x: 16.8648648648649, y: 2.62745098039216, size: 1 },\r\n // { x: 22.7027027027027, y: 3.92156862745098, size: 1 },\r\n // { x: 36.3243243243243, y: 3.09803921568627, size: 1 },\r\n // { x: 36.972972972973, y: 2.90196078431373, size: 1 },\r\n // { x: 37.6216216216216, y: 3.05882352941176, size: 1 },\r\n // { x: 38.2702702702703, y: 2.94117647058824, size: 1 },\r\n // { x: 47.3513513513514, y: 3.33333333333333, size: 1 },\r\n // { x: 69.4054054054054, y: 3.80392156862745, size: 1 },\r\n // { x: 71.3513513513514, y: 3.41176470588235, size: 1 },\r\n // { x: 88.2162162162162, y: 3.80392156862745, size: 1 },\r\n // { x: 116.756756756757, y: 3.88235294117647, size: 1 },\r\n // { x: 123.243243243243, y: 2.74509803921569, size: 1 },\r\n // { x: 123.891891891892, y: 3.25490196078431, size: 1 },\r\n // { x: 125.837837837838, y: 3.80392156862745, size: 1 },\r\n // { x: 153.081081081081, y: 3.92156862745098, size: 1 },\r\n // { x: 155.027027027027, y: 3.37254901960784, size: 1 },\r\n // { x: 159.567567567568, y: 3.84313725490196, size: 1 },\r\n // { x: 166.054054054054, y: 3.17647058823529, size: 1 },\r\n // { x: 166.702702702703, y: 3.13725490196078, size: 1 },\r\n // { x: 179.027027027027, y: 3.76470588235294, size: 1 },\r\n // { x: 192, y: 3.72549019607843, size: 1 },\r\n // { x: 198.486486486486, y: 3.96078431372549, size: 1 },\r\n // { x: 206.918918918919, y: 3.80392156862745, size: 1 },\r\n // { x: 219.243243243243, y: 3.45098039215686, size: 1 },\r\n // { x: 219.891891891892, y: 4.15686274509804, size: 1 },\r\n // { x: 232.864864864865, y: 3.88235294117647, size: 1 },\r\n // { x: 233.513513513514, y: 3.92156862745098, size: 1 },\r\n // { x: 250.378378378378, y: 3.92156862745098, size: 1 },\r\n // { x: 252.972972972973, y: 3.2156862745098, size: 1 },\r\n // { x: 253.621621621622, y: 3.41176470588235, size: 1 },\r\n // { x: 256.864864864865, y: 3.84313725490196, size: 1 },\r\n // { x: 269.189189189189, y: 3.88235294117647, size: 1 },\r\n // { x: 275.675675675676, y: 4.27450980392157, size: 1 },\r\n // { x: 276.324324324324, y: 4.03921568627451, size: 1 },\r\n // { x: 276.972972972973, y: 4.19607843137255, size: 1 },\r\n // { x: 277.621621621622, y: 4.03921568627451, size: 1 },\r\n // { x: 278.27027027027, y: 4.19607843137255, size: 1 },\r\n // { x: 278.918918918919, y: 3.96078431372549, size: 1 },\r\n // { x: 280.864864864865, y: 3.88235294117647, size: 1 },\r\n // { x: 281.513513513513, y: 4.19607843137255, size: 1 },\r\n // { x: 282.162162162162, y: 4.07843137254902, size: 1 },\r\n // { x: 283.459459459459, y: 4.19607843137255, size: 1 },\r\n // { x: 284.108108108108, y: 4.19607843137255, size: 1 },\r\n // { x: 284.756756756757, y: 3.96078431372549, size: 1 },\r\n // { x: 287.351351351351, y: 4.03921568627451, size: 1 },\r\n // { x: 288.648648648649, y: 3.92156862745098, size: 1 },\r\n // { x: 289.297297297297, y: 4.03921568627451, size: 1 },\r\n // { x: 291.243243243243, y: 4.07843137254902, size: 1 },\r\n // { x: 291.891891891892, y: 4.07843137254902, size: 1 },\r\n // { x: 292.540540540541, y: 4.15686274509804, size: 1 },\r\n // { x: 293.189189189189, y: 4.23529411764706, size: 1 },\r\n // { x: 293.837837837838, y: 4.19607843137255, size: 1 },\r\n // { x: 295.135135135135, y: 3.41176470588235, size: 1 },\r\n // { x: 319.783783783784, y: 3.2156862745098, size: 1 },\r\n // { x: 321.081081081081, y: 3.88235294117647, size: 1 },\r\n // { x: 329.513513513513, y: 3.88235294117647, size: 1 },\r\n // { x: 339.243243243243, y: 3.41176470588235, size: 1 },\r\n // { x: 339.891891891892, y: 3.25490196078431, size: 1 },\r\n // { x: 0.647482014388489, y: 3.05882352941176, size: 1 },\r\n // { x: 1.29496402877698, y: 2.54901960784314, size: 1 },\r\n // { x: 1.94244604316547, y: 2.98039215686275, size: 1 },\r\n // { x: 2.58992805755396, y: 2.74509803921569, size: 1 },\r\n // { x: 10.3597122302158, y: 3.92156862745098, size: 1 },\r\n // { x: 35.6115107913669, y: 4.03921568627451, size: 1 },\r\n // { x: 44.0287769784173, y: 2.07843137254902, size: 1 },\r\n // { x: 44.6762589928058, y: 2.19607843137255, size: 1 },\r\n // { x: 65.3956834532374, y: 3.01960784313725, size: 1 },\r\n // { x: 71.2230215827338, y: 4.15686274509804, size: 1 },\r\n // { x: 75.7553956834532, y: 4.07843137254902, size: 1 },\r\n // { x: 89.3525179856115, y: 4.03921568627451, size: 1 },\r\n // { x: 97.1223021582734, y: 4, size: 1 },\r\n // { x: 112.014388489209, y: 4.07843137254902, size: 1 },\r\n // { x: 135.971223021583, y: 4.03921568627451, size: 1 },\r\n // { x: 137.26618705036, y: 3.96078431372549, size: 1 },\r\n // { x: 172.877697841727, y: 3.2156862745098, size: 1 },\r\n // { x: 173.525179856115, y: 2.90196078431373, size: 1 },\r\n // { x: 174.172661870504, y: 3.17647058823529, size: 1 },\r\n // { x: 174.820143884892, y: 3.05882352941176, size: 1 },\r\n // { x: 175.467625899281, y: 2.98039215686275, size: 1 },\r\n // { x: 216.906474820144, y: 3.25490196078431, size: 1 },\r\n // { x: 217.553956834532, y: 3.17647058823529, size: 1 },\r\n // { x: 247.338129496403, y: 3.96078431372549, size: 1 },\r\n // { x: 253.812949640288, y: 4.15686274509804, size: 1 },\r\n // { x: 266.115107913669, y: 4.03921568627451, size: 1 },\r\n // { x: 277.769784172662, y: 3.84313725490196, size: 1 },\r\n // { x: 289.424460431655, y: 4.07843137254902, size: 1 },\r\n // { x: 291.36690647482, y: 4.15686274509804, size: 1 },\r\n // { x: 28.4892086330935, y: 3.2156862745098, size: 1 },\r\n // { x: 29.7841726618705, y: 2.94117647058824, size: 1 },\r\n // { x: 30.431654676259, y: 2.86274509803922, size: 1 },\r\n // { x: 31.0791366906475, y: 2.74509803921569, size: 1 },\r\n // { x: 36.2589928057554, y: 3.84313725490196, size: 1 },\r\n // { x: 93.8848920863309, y: 3.13725490196078, size: 1 },\r\n // { x: 103.597122302158, y: 4.03921568627451, size: 1 },\r\n // { x: 127.553956834532, y: 3.33333333333333, size: 1 },\r\n // { x: 135.323741007194, y: 3.25490196078431, size: 1 },\r\n // { x: 137.26618705036, y: 3.01960784313725, size: 1 },\r\n // { x: 137.913669064748, y: 3.05882352941176, size: 1 },\r\n // { x: 140.503597122302, y: 3.92156862745098, size: 1 },\r\n // { x: 178.705035971223, y: 3.88235294117647, size: 1 },\r\n // { x: 215.611510791367, y: 3.88235294117647, size: 1 },\r\n // { x: 238.273381294964, y: 3.84313725490196, size: 1 },\r\n // { x: 266.762589928058, y: 3.17647058823529, size: 1 },\r\n // { x: 267.410071942446, y: 2.86274509803922, size: 1 },\r\n // { x: 288.776978417266, y: 2.98039215686275, size: 1 },\r\n // { x: 352.877697841727, y: 2.23529411764706, size: 1 },\r\n // { x: 353.525179856115, y: 1.25490196078431, size: 1 },\r\n // { x: 354.172661870504, y: 1.17647058823529, size: 1 },\r\n // { x: 354.820143884892, y: 1.09803921568627, size: 1 },\r\n // { x: 358.057553956835, y: 3.01960784313725, size: 1 },\r\n // { x: 23.9568345323741, y: 3.88235294117647, size: 1 },\r\n // { x: 36.2589928057554, y: 2.43137254901961, size: 1 },\r\n // { x: 36.9064748201439, y: 2.35294117647059, size: 1 },\r\n // { x: 57.6258992805755, y: 2.58823529411765, size: 1 },\r\n // { x: 58.273381294964, y: 2.19607843137255, size: 1 },\r\n // { x: 78.9928057553957, y: 2.94117647058824, size: 1 },\r\n // { x: 79.6402877697842, y: 1.56862745098039, size: 1 },\r\n // { x: 80.2877697841727, y: 3.13725490196078, size: 1 },\r\n // { x: 90.6474820143885, y: 4.03921568627451, size: 1 },\r\n // { x: 95.1798561151079, y: 3.84313725490196, size: 1 },\r\n // { x: 165.107913669065, y: 3.2156862745098, size: 1 },\r\n // { x: 185.827338129496, y: 3.25490196078431, size: 1 },\r\n // { x: 251.870503597122, y: 2.62745098039216, size: 1 },\r\n // { x: 252.517985611511, y: 2.31372549019608, size: 1 },\r\n // { x: 266.115107913669, y: 3.96078431372549, size: 1 },\r\n // { x: 272.589928057554, y: 3.17647058823529, size: 1 },\r\n // { x: 284.892086330935, y: 3.88235294117647, size: 1 },\r\n // { x: 328.920863309353, y: 3.29411764705882, size: 1 },\r\n // { x: 346.402877697842, y: 3.92156862745098, size: 1 },\r\n // { x: 28.4892086330935, y: 4, size: 1 },\r\n // { x: 30.431654676259, y: 3.92156862745098, size: 1 },\r\n // { x: 117.194244604317, y: 4, size: 1 },\r\n // { x: 160.575539568345, y: 4, size: 1 },\r\n // { x: 194.244604316547, y: 3.13725490196078, size: 1 },\r\n // { x: 195.539568345324, y: 3.29411764705882, size: 1 },\r\n // { x: 196.187050359712, y: 3.05882352941176, size: 1 },\r\n // { x: 216.258992805755, y: 3.09803921568627, size: 1 },\r\n // { x: 237.625899280576, y: 2.50980392156863, size: 1 },\r\n // { x: 238.273381294964, y: 3.01960784313725, size: 1 },\r\n // { x: 238.920863309353, y: 2.98039215686275, size: 1 },\r\n // { x: 239.568345323741, y: 2.7843137254902, size: 1 },\r\n // { x: 281.007194244604, y: 3.05882352941176, size: 1 },\r\n // { x: 281.654676258993, y: 3.09803921568627, size: 1 },\r\n // { x: 303.021582733813, y: 3.13725490196078, size: 1 },\r\n // { x: 323.741007194245, y: 2.7843137254902, size: 1 },\r\n // { x: 324.388489208633, y: 2.98039215686275, size: 1 },\r\n // { x: 342.517985611511, y: 3.29411764705882, size: 1 },\r\n // { x: 6.48648648648649, y: 3.41176470588235, size: 1 },\r\n // { x: 9.08108108108108, y: 3.49019607843137, size: 1 },\r\n // { x: 24, y: 3.96078431372549, size: 1 },\r\n // { x: 29.1891891891892, y: 3.13725490196078, size: 1 },\r\n // { x: 31.7837837837838, y: 3.41176470588235, size: 1 },\r\n // { x: 40.8648648648649, y: 3.2156862745098, size: 1 },\r\n // { x: 49.9459459459459, y: 3.25490196078431, size: 1 },\r\n // { x: 52.5405405405405, y: 3.88235294117647, size: 1 },\r\n // { x: 69.4054054054054, y: 4, size: 1 },\r\n // { x: 73.945945945946, y: 3.2156862745098, size: 1 },\r\n // { x: 79.7837837837838, y: 3.09803921568627, size: 1 },\r\n // { x: 81.0810810810811, y: 3.17647058823529, size: 1 },\r\n // { x: 82.3783783783784, y: 3.2156862745098, size: 1 },\r\n // { x: 84.972972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 85.6216216216216, y: 3.33333333333333, size: 1 },\r\n // { x: 91.4594594594595, y: 3.2156862745098, size: 1 },\r\n // { x: 92.7567567567568, y: 3.25490196078431, size: 1 },\r\n // { x: 93.4054054054054, y: 3.01960784313725, size: 1 },\r\n // { x: 94.054054054054, y: 3.05882352941176, size: 1 },\r\n // { x: 115.459459459459, y: 3.29411764705882, size: 1 },\r\n // { x: 116.756756756757, y: 2.98039215686275, size: 1 },\r\n // { x: 119.351351351351, y: 3.72549019607843, size: 1 },\r\n // { x: 123.243243243243, y: 3.96078431372549, size: 1 },\r\n // { x: 128.432432432432, y: 3.92156862745098, size: 1 },\r\n // { x: 135.567567567568, y: 3.09803921568627, size: 1 },\r\n // { x: 136.864864864865, y: 2.7843137254902, size: 1 },\r\n // { x: 137.513513513514, y: 3.01960784313725, size: 1 },\r\n // { x: 146.594594594595, y: 3.96078431372549, size: 1 },\r\n // { x: 163.459459459459, y: 3.41176470588235, size: 1 },\r\n // { x: 166.054054054054, y: 3.29411764705882, size: 1 },\r\n // { x: 167.351351351351, y: 3.72549019607843, size: 1 },\r\n // { x: 171.243243243243, y: 3.6078431372549, size: 1 },\r\n // { x: 176.432432432432, y: 3.29411764705882, size: 1 },\r\n // { x: 179.027027027027, y: 3.92156862745098, size: 1 },\r\n // { x: 198.486486486486, y: 3.29411764705882, size: 1 },\r\n // { x: 203.027027027027, y: 3.37254901960784, size: 1 },\r\n // { x: 213.405405405405, y: 3.41176470588235, size: 1 },\r\n // { x: 218.594594594595, y: 3.72549019607843, size: 1 },\r\n // { x: 223.135135135135, y: 3.17647058823529, size: 1 },\r\n // { x: 223.783783783784, y: 3.09803921568627, size: 1 },\r\n // { x: 224.432432432432, y: 3.88235294117647, size: 1 },\r\n // { x: 228.972972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 237.405405405405, y: 3.76470588235294, size: 1 },\r\n // { x: 241.297297297297, y: 3.88235294117647, size: 1 },\r\n // { x: 245.837837837838, y: 3.33333333333333, size: 1 },\r\n // { x: 247.135135135135, y: 3.33333333333333, size: 1 },\r\n // { x: 247.783783783784, y: 3.41176470588235, size: 1 },\r\n // { x: 252.324324324324, y: 3.13725490196078, size: 1 },\r\n // { x: 255.567567567568, y: 3.29411764705882, size: 1 },\r\n // { x: 256.216216216216, y: 3.17647058823529, size: 1 },\r\n // { x: 256.864864864865, y: 3.17647058823529, size: 1 },\r\n // { x: 257.513513513513, y: 3.2156862745098, size: 1 },\r\n // { x: 258.162162162162, y: 3.2156862745098, size: 1 },\r\n // { x: 258.810810810811, y: 3.25490196078431, size: 1 },\r\n // { x: 259.459459459459, y: 3.01960784313725, size: 1 },\r\n // { x: 261.405405405405, y: 3.17647058823529, size: 1 },\r\n // { x: 262.054054054054, y: 3.13725490196078, size: 1 },\r\n // { x: 263.351351351351, y: 3.2156862745098, size: 1 },\r\n // { x: 266.594594594595, y: 2.98039215686275, size: 1 },\r\n // { x: 275.675675675676, y: 3.49019607843137, size: 1 },\r\n // { x: 284.108108108108, y: 3.29411764705882, size: 1 },\r\n // { x: 284.756756756757, y: 3.41176470588235, size: 1 },\r\n // { x: 297.081081081081, y: 3.80392156862745, size: 1 },\r\n // { x: 309.405405405405, y: 3.25490196078431, size: 1 },\r\n // { x: 310.054054054054, y: 3.25490196078431, size: 1 },\r\n // { x: 320.432432432432, y: 3.49019607843137, size: 1 },\r\n // { x: 326.27027027027, y: 3.33333333333333, size: 1 },\r\n // { x: 328.864864864865, y: 3.41176470588235, size: 1 },\r\n // { x: 330.162162162162, y: 3.37254901960784, size: 1 },\r\n // { x: 330.810810810811, y: 3.37254901960784, size: 1 },\r\n // { x: 352.216216216216, y: 3.25490196078431, size: 1 },\r\n // { x: 354.810810810811, y: 3.84313725490196, size: 1 },\r\n // { x: 359.351351351351, y: 3.88235294117647, size: 1 },\r\n // { x: 1.29496402877698, y: 3.96078431372549, size: 1 },\r\n // { x: 8.41726618705036, y: 3.88235294117647, size: 1 },\r\n // { x: 14.2446043165468, y: 2.90196078431373, size: 1 },\r\n // { x: 17.4820143884892, y: 4.03921568627451, size: 1 },\r\n // { x: 42.0863309352518, y: 3.96078431372549, size: 1 },\r\n // { x: 86.1151079136691, y: 4, size: 1 },\r\n // { x: 97.7697841726619, y: 3.92156862745098, size: 1 },\r\n // { x: 101.007194244604, y: 3.05882352941176, size: 1 },\r\n // { x: 143.741007194245, y: 3.09803921568627, size: 1 },\r\n // { x: 144.388489208633, y: 3.05882352941176, size: 1 },\r\n // { x: 161.870503597122, y: 3.92156862745098, size: 1 },\r\n // { x: 165.107913669065, y: 3.29411764705882, size: 1 },\r\n // { x: 165.755395683453, y: 3.17647058823529, size: 1 },\r\n // { x: 272.589928057554, y: 3.2156862745098, size: 1 },\r\n // { x: 273.237410071942, y: 2.62745098039216, size: 1 },\r\n // { x: 273.884892086331, y: 2.62745098039216, size: 1 },\r\n // { x: 274.532374100719, y: 2.62745098039216, size: 1 },\r\n // { x: 275.179856115108, y: 2.47058823529412, size: 1 },\r\n // { x: 295.251798561151, y: 2.90196078431373, size: 1 },\r\n // { x: 317.26618705036, y: 3.17647058823529, size: 1 },\r\n // { x: 337.985611510791, y: 2.86274509803922, size: 1 },\r\n // { x: 338.63309352518, y: 2.70588235294118, size: 1 },\r\n // { x: 354.172661870504, y: 4.07843137254902, size: 1 },\r\n // { x: 7.12230215827338, y: 3.88235294117647, size: 1 },\r\n // { x: 42.7338129496403, y: 3.13725490196078, size: 1 },\r\n // { x: 131.438848920863, y: 3.96078431372549, size: 1 },\r\n // { x: 134.028776978417, y: 4.03921568627451, size: 1 },\r\n // { x: 135.323741007194, y: 4, size: 1 },\r\n // { x: 161.870503597122, y: 4.15686274509804, size: 1 },\r\n // { x: 187.769784172662, y: 3.88235294117647, size: 1 },\r\n // { x: 236.978417266187, y: 2.27450980392157, size: 1 },\r\n // { x: 237.625899280576, y: 2.27450980392157, size: 1 },\r\n // { x: 258.992805755396, y: 3.01960784313725, size: 1 },\r\n // { x: 279.064748201439, y: 3.17647058823529, size: 1 },\r\n // { x: 279.712230215827, y: 3.09803921568627, size: 1 },\r\n // { x: 280.359712230216, y: 1.37254901960784, size: 1 },\r\n // { x: 281.007194244604, y: 1.37254901960784, size: 1 },\r\n // { x: 302.374100719424, y: 2.43137254901961, size: 1 },\r\n // { x: 322.446043165468, y: 3.17647058823529, size: 1 },\r\n // { x: 324.388489208633, y: 4.11764705882353, size: 1 },\r\n // { x: 329.568345323741, y: 3.88235294117647, size: 1 },\r\n // { x: 345.755395683453, y: 2.86274509803922, size: 1 },\r\n // { x: 349.640287769784, y: 3.96078431372549, size: 1 },\r\n // { x: 359.352517985611, y: 3.33333333333333, size: 1 },\r\n // { x: 26.5467625899281, y: 2.7843137254902, size: 1 },\r\n // { x: 27.1942446043165, y: 3.01960784313725, size: 1 },\r\n // { x: 51.1510791366906, y: 3.92156862745098, size: 1 },\r\n // { x: 51.7985611510791, y: 4, size: 1 },\r\n // { x: 77.6978417266187, y: 4.03921568627451, size: 1 },\r\n // { x: 90.6474820143885, y: 4.07843137254902, size: 1 },\r\n // { x: 91.294964028777, y: 3.25490196078431, size: 1 },\r\n // { x: 91.9424460431655, y: 3.09803921568627, size: 1 },\r\n // { x: 112.014388489209, y: 4, size: 1 },\r\n // { x: 113.956834532374, y: 2.94117647058824, size: 1 },\r\n // { x: 114.604316546763, y: 2.47058823529412, size: 1 },\r\n // { x: 115.251798561151, y: 2.70588235294118, size: 1 },\r\n // { x: 157.338129496403, y: 3.05882352941176, size: 1 },\r\n // { x: 157.985611510791, y: 2.7843137254902, size: 1 },\r\n // { x: 270.647482014389, y: 3.88235294117647, size: 1 },\r\n // { x: 352.230215827338, y: 3.01960784313725, size: 1 },\r\n // { x: 352.877697841727, y: 3.13725490196078, size: 1 },\r\n // { x: 11.6756756756757, y: 3.33333333333333, size: 1 },\r\n // { x: 12.972972972973, y: 3.17647058823529, size: 1 },\r\n // { x: 13.6216216216216, y: 3.05882352941176, size: 1 },\r\n // { x: 14.2702702702703, y: 2.54901960784314, size: 1 },\r\n // { x: 14.9189189189189, y: 2.70588235294118, size: 1 },\r\n // { x: 15.5675675675676, y: 2.90196078431373, size: 1 },\r\n // { x: 35.027027027027, y: 3.29411764705882, size: 1 },\r\n // { x: 35.6756756756757, y: 2.90196078431373, size: 1 },\r\n // { x: 44.7567567567568, y: 3.80392156862745, size: 1 },\r\n // { x: 51.8918918918919, y: 3.88235294117647, size: 1 },\r\n // { x: 66.1621621621622, y: 3.92156862745098, size: 1 },\r\n // { x: 68.1081081081081, y: 3.96078431372549, size: 1 },\r\n // { x: 84.972972972973, y: 3.92156862745098, size: 1 },\r\n // { x: 109.621621621622, y: 3.96078431372549, size: 1 },\r\n // { x: 129.081081081081, y: 3.76470588235294, size: 1 },\r\n // { x: 134.918918918919, y: 3.64705882352941, size: 1 },\r\n // { x: 145.297297297297, y: 3.84313725490196, size: 1 },\r\n // { x: 146.594594594595, y: 3.80392156862745, size: 1 },\r\n // { x: 149.837837837838, y: 3.88235294117647, size: 1 },\r\n // { x: 153.081081081081, y: 3.88235294117647, size: 1 },\r\n // { x: 163.459459459459, y: 3.29411764705882, size: 1 },\r\n // { x: 164.756756756757, y: 2.86274509803922, size: 1 },\r\n // { x: 165.405405405405, y: 3.17647058823529, size: 1 },\r\n // { x: 166.054054054054, y: 3.2156862745098, size: 1 },\r\n // { x: 167.351351351351, y: 3.29411764705882, size: 1 },\r\n // { x: 170.594594594595, y: 3.56862745098039, size: 1 },\r\n // { x: 186.162162162162, y: 3.25490196078431, size: 1 },\r\n // { x: 188.108108108108, y: 2.90196078431373, size: 1 },\r\n // { x: 188.756756756757, y: 3.05882352941176, size: 1 },\r\n // { x: 189.405405405405, y: 3.84313725490196, size: 1 },\r\n // { x: 192.648648648649, y: 3.92156862745098, size: 1 },\r\n // { x: 193.945945945946, y: 3.92156862745098, size: 1 },\r\n // { x: 199.783783783784, y: 3.92156862745098, size: 1 },\r\n // { x: 207.567567567568, y: 3.13725490196078, size: 1 },\r\n // { x: 208.216216216216, y: 2.3921568627451, size: 1 },\r\n // { x: 208.864864864865, y: 2.74509803921569, size: 1 },\r\n // { x: 209.513513513514, y: 3.05882352941176, size: 1 },\r\n // { x: 210.162162162162, y: 2.82352941176471, size: 1 },\r\n // { x: 230.27027027027, y: 3.2156862745098, size: 1 },\r\n // { x: 238.702702702703, y: 3.41176470588235, size: 1 },\r\n // { x: 245.837837837838, y: 3.56862745098039, size: 1 },\r\n // { x: 261.405405405405, y: 3.88235294117647, size: 1 },\r\n // { x: 264.648648648649, y: 3.88235294117647, size: 1 },\r\n // { x: 271.783783783784, y: 3.88235294117647, size: 1 },\r\n // { x: 273.081081081081, y: 3.25490196078431, size: 1 },\r\n // { x: 273.72972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 282.810810810811, y: 3.76470588235294, size: 1 },\r\n // { x: 289.945945945946, y: 4, size: 1 },\r\n // { x: 302.27027027027, y: 3.92156862745098, size: 1 },\r\n // { x: 312, y: 3.80392156862745, size: 1 },\r\n // { x: 312.648648648649, y: 3.80392156862745, size: 1 },\r\n // { x: 334.054054054054, y: 3.49019607843137, size: 1 },\r\n // { x: 352.864864864865, y: 3.96078431372549, size: 1 },\r\n // { x: 66.0431654676259, y: 3.01960784313725, size: 1 },\r\n // { x: 86.1151079136691, y: 3.09803921568627, size: 1 },\r\n // { x: 86.7625899280576, y: 2.90196078431373, size: 1 },\r\n // { x: 87.410071942446, y: 2.90196078431373, size: 1 },\r\n // { x: 95.8273381294964, y: 4.03921568627451, size: 1 },\r\n // { x: 129.496402877698, y: 3.01960784313725, size: 1 },\r\n // { x: 174.172661870504, y: 4, size: 1 },\r\n // { x: 184.532374100719, y: 3.96078431372549, size: 1 },\r\n // { x: 193.597122302158, y: 3.2156862745098, size: 1 },\r\n // { x: 197.482014388489, y: 4.03921568627451, size: 1 },\r\n // { x: 239.568345323741, y: 3.88235294117647, size: 1 },\r\n // { x: 248.63309352518, y: 3.96078431372549, size: 1 },\r\n // { x: 258.992805755396, y: 3.13725490196078, size: 1 },\r\n // { x: 266.762589928058, y: 3.92156862745098, size: 1 },\r\n // { x: 272.589928057554, y: 3.96078431372549, size: 1 },\r\n // { x: 278.41726618705, y: 3.96078431372549, size: 1 },\r\n // { x: 286.834532374101, y: 4.15686274509804, size: 1 },\r\n // { x: 302.374100719424, y: 3.17647058823529, size: 1 },\r\n // { x: 303.669064748201, y: 3.92156862745098, size: 1 },\r\n // { x: 304.31654676259, y: 4, size: 1 },\r\n // { x: 346.402877697842, y: 4.11764705882353, size: 1 },\r\n // { x: 347.05035971223, y: 4, size: 1 },\r\n // { x: 348.345323741007, y: 4.03921568627451, size: 1 },\r\n // { x: 350.935251798561, y: 4.11764705882353, size: 1 },\r\n // { x: 356.115107913669, y: 4.03921568627451, size: 1 },\r\n // { x: 358.705035971223, y: 4, size: 1 },\r\n // { x: 1.29496402877698, y: 4.3921568627451, size: 1 },\r\n // { x: 1.94244604316547, y: 4.23529411764706, size: 1 },\r\n // { x: 3.23741007194245, y: 4.07843137254902, size: 1 },\r\n // { x: 7.12230215827338, y: 3.13725490196078, size: 1 },\r\n // { x: 18.7769784172662, y: 4, size: 1 },\r\n // { x: 28.4892086330935, y: 3.01960784313725, size: 1 },\r\n // { x: 49.8561151079137, y: 3.17647058823529, size: 1 },\r\n // { x: 66.6906474820144, y: 4, size: 1 },\r\n // { x: 79.6402877697842, y: 3.96078431372549, size: 1 },\r\n // { x: 88.0575539568345, y: 4, size: 1 },\r\n // { x: 114.604316546763, y: 3.13725490196078, size: 1 },\r\n // { x: 136.618705035971, y: 2.94117647058824, size: 1 },\r\n // { x: 161.223021582734, y: 4.03921568627451, size: 1 },\r\n // { x: 166.402877697842, y: 4.03921568627451, size: 1 },\r\n // { x: 176.762589928058, y: 4.19607843137255, size: 1 },\r\n // { x: 178.057553956835, y: 3.2156862745098, size: 1 },\r\n // { x: 240.215827338129, y: 4.03921568627451, size: 1 },\r\n // { x: 262.877697841727, y: 3.92156862745098, size: 1 },\r\n // { x: 266.115107913669, y: 3.13725490196078, size: 1 },\r\n // { x: 288.129496402878, y: 3.25490196078431, size: 1 },\r\n // { x: 288.776978417266, y: 3.01960784313725, size: 1 },\r\n // { x: 308.848920863309, y: 2.7843137254902, size: 1 },\r\n // { x: 352.230215827338, y: 3.17647058823529, size: 1 },\r\n // { x: 5.83783783783784, y: 3.80392156862745, size: 1 },\r\n // { x: 11.6756756756757, y: 3.17647058823529, size: 1 },\r\n // { x: 14.9189189189189, y: 3.13725490196078, size: 1 },\r\n // { x: 15.5675675675676, y: 3.2156862745098, size: 1 },\r\n // { x: 18.8108108108108, y: 3.80392156862745, size: 1 },\r\n // { x: 46.7027027027027, y: 3.92156862745098, size: 1 },\r\n // { x: 49.2972972972973, y: 4.07843137254902, size: 1 },\r\n // { x: 60.3243243243243, y: 3.92156862745098, size: 1 },\r\n // { x: 64.2162162162162, y: 4.03921568627451, size: 1 },\r\n // { x: 71.3513513513514, y: 3.68627450980392, size: 1 },\r\n // { x: 75.2432432432432, y: 3.88235294117647, size: 1 },\r\n // { x: 97.2972972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 99.2432432432432, y: 3.37254901960784, size: 1 },\r\n // { x: 99.8918918918919, y: 3.17647058823529, size: 1 },\r\n // { x: 103.135135135135, y: 3.96078431372549, size: 1 },\r\n // { x: 109.621621621622, y: 3.92156862745098, size: 1 },\r\n // { x: 112.216216216216, y: 3.96078431372549, size: 1 },\r\n // { x: 112.864864864865, y: 3.92156862745098, size: 1 },\r\n // { x: 116.756756756757, y: 3.92156862745098, size: 1 },\r\n // { x: 143.351351351351, y: 3.17647058823529, size: 1 },\r\n // { x: 149.837837837838, y: 4, size: 1 },\r\n // { x: 150.486486486486, y: 3.84313725490196, size: 1 },\r\n // { x: 151.783783783784, y: 4.07843137254902, size: 1 },\r\n // { x: 155.675675675676, y: 3.96078431372549, size: 1 },\r\n // { x: 160.216216216216, y: 3.72549019607843, size: 1 },\r\n // { x: 160.864864864865, y: 3.84313725490196, size: 1 },\r\n // { x: 163.459459459459, y: 3.17647058823529, size: 1 },\r\n // { x: 164.108108108108, y: 3.05882352941176, size: 1 },\r\n // { x: 164.756756756757, y: 3.09803921568627, size: 1 },\r\n // { x: 165.405405405405, y: 3.09803921568627, size: 1 },\r\n // { x: 180.324324324324, y: 3.84313725490196, size: 1 },\r\n // { x: 189.405405405405, y: 3.96078431372549, size: 1 },\r\n // { x: 197.189189189189, y: 3.33333333333333, size: 1 },\r\n // { x: 205.621621621622, y: 3.84313725490196, size: 1 },\r\n // { x: 206.918918918919, y: 3.25490196078431, size: 1 },\r\n // { x: 207.567567567568, y: 2.94117647058824, size: 1 },\r\n // { x: 208.216216216216, y: 2.43137254901961, size: 1 },\r\n // { x: 208.864864864865, y: 2.19607843137255, size: 1 },\r\n // { x: 209.513513513514, y: 2.03921568627451, size: 1 },\r\n // { x: 210.162162162162, y: 2, size: 1 },\r\n // { x: 212.756756756757, y: 2.82352941176471, size: 1 },\r\n // { x: 213.405405405405, y: 3.33333333333333, size: 1 },\r\n // { x: 217.297297297297, y: 2.94117647058824, size: 1 },\r\n // { x: 217.945945945946, y: 3.01960784313725, size: 1 },\r\n // { x: 219.243243243243, y: 3.80392156862745, size: 1 },\r\n // { x: 223.783783783784, y: 2.82352941176471, size: 1 },\r\n // { x: 245.189189189189, y: 3.45098039215686, size: 1 },\r\n // { x: 251.027027027027, y: 2.66666666666667, size: 1 },\r\n // { x: 251.675675675676, y: 2.62745098039216, size: 1 },\r\n // { x: 270.486486486487, y: 4, size: 1 },\r\n // { x: 271.783783783784, y: 3.09803921568627, size: 1 },\r\n // { x: 272.432432432432, y: 3.37254901960784, size: 1 },\r\n // { x: 273.081081081081, y: 2.70588235294118, size: 1 },\r\n // { x: 273.72972972973, y: 3.17647058823529, size: 1 },\r\n // { x: 291.891891891892, y: 3.41176470588235, size: 1 },\r\n // { x: 294.486486486487, y: 2.98039215686275, size: 1 },\r\n // { x: 295.135135135135, y: 3.17647058823529, size: 1 },\r\n // { x: 301.621621621622, y: 3.84313725490196, size: 1 },\r\n // { x: 304.864864864865, y: 3.84313725490196, size: 1 },\r\n // { x: 310.702702702703, y: 3.80392156862745, size: 1 },\r\n // { x: 312.648648648649, y: 4, size: 1 },\r\n // { x: 316.540540540541, y: 3.01960784313725, size: 1 },\r\n // { x: 317.189189189189, y: 3.29411764705882, size: 1 },\r\n // { x: 319.135135135135, y: 3.76470588235294, size: 1 },\r\n // { x: 321.72972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 326.918918918919, y: 3.88235294117647, size: 1 },\r\n // { x: 329.513513513513, y: 4.03921568627451, size: 1 },\r\n // { x: 336, y: 3.17647058823529, size: 1 },\r\n // { x: 337.297297297297, y: 3.09803921568627, size: 1 },\r\n // { x: 337.945945945946, y: 1.88235294117647, size: 1 },\r\n // { x: 340.540540540541, y: 3.49019607843137, size: 1 },\r\n // { x: 347.675675675676, y: 3.88235294117647, size: 1 },\r\n // { x: 350.27027027027, y: 3.92156862745098, size: 1 },\r\n // { x: 352.864864864865, y: 3.92156862745098, size: 1 },\r\n // { x: 359.351351351351, y: 2.7843137254902, size: 1 },\r\n // { x: 0, y: 2.74509803921569, size: 1 },\r\n // { x: 4.53237410071942, y: 3.92156862745098, size: 1 },\r\n // { x: 14.2446043165468, y: 3.96078431372549, size: 1 },\r\n // { x: 42.0863309352518, y: 3.01960784313725, size: 1 },\r\n // { x: 42.7338129496403, y: 2.94117647058824, size: 1 },\r\n // { x: 43.3812949640288, y: 3.2156862745098, size: 1 },\r\n // { x: 63.4532374100719, y: 3.01960784313725, size: 1 },\r\n // { x: 64.1007194244604, y: 1.88235294117647, size: 1 },\r\n // { x: 64.7482014388489, y: 1.92156862745098, size: 1 },\r\n // { x: 129.496402877698, y: 2.98039215686275, size: 1 },\r\n // { x: 193.597122302158, y: 3.05882352941176, size: 1 },\r\n // { x: 226.618705035971, y: 3.92156862745098, size: 1 },\r\n // { x: 238.273381294964, y: 2.82352941176471, size: 1 },\r\n // { x: 238.920863309353, y: 3.2156862745098, size: 1 },\r\n // { x: 258.345323741007, y: 2.98039215686275, size: 1 },\r\n // { x: 258.992805755396, y: 3.09803921568627, size: 1 },\r\n // { x: 259.640287769784, y: 2.90196078431373, size: 1 },\r\n // { x: 270.647482014389, y: 3.92156862745098, size: 1 },\r\n // { x: 271.294964028777, y: 4, size: 1 },\r\n // { x: 274.532374100719, y: 3.84313725490196, size: 1 },\r\n // { x: 311.438848920863, y: 3.92156862745098, size: 1 },\r\n // { x: 312.086330935252, y: 3.92156862745098, size: 1 },\r\n // { x: 323.741007194245, y: 3.13725490196078, size: 1 },\r\n // { x: 341.870503597122, y: 3.92156862745098, size: 1 },\r\n // { x: 344.460431654676, y: 2.74509803921569, size: 1 },\r\n // { x: 345.107913669065, y: 2.7843137254902, size: 1 },\r\n // { x: 346.402877697842, y: 2.47058823529412, size: 1 },\r\n // { x: 347.05035971223, y: 2.94117647058824, size: 1 },\r\n // { x: 7.12230215827338, y: 3.25490196078431, size: 1 },\r\n // { x: 7.76978417266187, y: 3.88235294117647, size: 1 },\r\n // { x: 49.8561151079137, y: 3.09803921568627, size: 1 },\r\n // { x: 62.158273381295, y: 4.03921568627451, size: 1 },\r\n // { x: 70.5755395683453, y: 3.05882352941176, size: 1 },\r\n // { x: 121.726618705036, y: 3.96078431372549, size: 1 },\r\n // { x: 141.151079136691, y: 3.96078431372549, size: 1 },\r\n // { x: 179.352517985612, y: 3.2156862745098, size: 1 },\r\n // { x: 194.244604316547, y: 4, size: 1 },\r\n // { x: 200.071942446043, y: 3.01960784313725, size: 1 },\r\n // { x: 200.719424460432, y: 2.82352941176471, size: 1 },\r\n // { x: 203.956834532374, y: 4, size: 1 },\r\n // { x: 222.086330935252, y: 2.82352941176471, size: 1 },\r\n // { x: 227.913669064748, y: 3.33333333333333, size: 1 },\r\n // { x: 243.453237410072, y: 3.05882352941176, size: 1 },\r\n // { x: 244.10071942446, y: 3.01960784313725, size: 1 },\r\n // { x: 264.820143884892, y: 3.13725490196078, size: 1 },\r\n // { x: 265.467625899281, y: 1.64705882352941, size: 1 },\r\n // { x: 279.064748201439, y: 4.11764705882353, size: 1 },\r\n // { x: 295.89928057554, y: 4.15686274509804, size: 1 },\r\n // { x: 317.913669064748, y: 4.07843137254902, size: 1 },\r\n // { x: 330.215827338129, y: 2.7843137254902, size: 1 },\r\n // { x: 28.4892086330935, y: 4.03921568627451, size: 1 },\r\n // { x: 42.0863309352518, y: 3.92156862745098, size: 1 },\r\n // { x: 47.9136690647482, y: 4, size: 1 },\r\n // { x: 53.7410071942446, y: 4.15686274509804, size: 1 },\r\n // { x: 56.9784172661871, y: 3.13725490196078, size: 1 },\r\n // { x: 78.3453237410072, y: 3.01960784313725, size: 1 },\r\n // { x: 88.705035971223, y: 3.96078431372549, size: 1 },\r\n // { x: 115.89928057554, y: 4.03921568627451, size: 1 },\r\n // { x: 121.079136690647, y: 2.94117647058824, size: 1 },\r\n // { x: 121.726618705036, y: 2.98039215686275, size: 1 },\r\n // { x: 128.848920863309, y: 3.92156862745098, size: 1 },\r\n // { x: 142.446043165468, y: 2.74509803921569, size: 1 },\r\n // { x: 157.338129496403, y: 4.03921568627451, size: 1 },\r\n // { x: 185.827338129496, y: 2.82352941176471, size: 1 },\r\n // { x: 186.474820143885, y: 2.86274509803922, size: 1 },\r\n // { x: 196.834532374101, y: 4.03921568627451, size: 1 },\r\n // { x: 197.482014388489, y: 4, size: 1 },\r\n // { x: 250.575539568345, y: 2.19607843137255, size: 1 },\r\n // { x: 251.223021582734, y: 2.58823529411765, size: 1 },\r\n // { x: 260.935251798561, y: 4.03921568627451, size: 1 },\r\n // { x: 271.294964028777, y: 4.03921568627451, size: 1 },\r\n // { x: 315.323741007194, y: 3.09803921568627, size: 1 },\r\n // { x: 0.648648648648649, y: 3.84313725490196, size: 1 },\r\n // { x: 5.18918918918919, y: 3.84313725490196, size: 1 },\r\n // { x: 9.08108108108108, y: 3.96078431372549, size: 1 },\r\n // { x: 10.3783783783784, y: 4, size: 1 },\r\n // { x: 14.2702702702703, y: 3.72549019607843, size: 1 },\r\n // { x: 15.5675675675676, y: 3.88235294117647, size: 1 },\r\n // { x: 19.4594594594595, y: 3.01960784313725, size: 1 },\r\n // { x: 20.1081081081081, y: 2.11764705882353, size: 1 },\r\n // { x: 20.7567567567568, y: 2.11764705882353, size: 1 },\r\n // { x: 25.9459459459459, y: 3.29411764705882, size: 1 },\r\n // { x: 26.5945945945946, y: 3.33333333333333, size: 1 },\r\n // { x: 36.972972972973, y: 3.25490196078431, size: 1 },\r\n // { x: 40.2162162162162, y: 3.37254901960784, size: 1 },\r\n // { x: 41.5135135135135, y: 2.7843137254902, size: 1 },\r\n // { x: 42.1621621621622, y: 2.94117647058824, size: 1 },\r\n // { x: 47.3513513513514, y: 4.07843137254902, size: 1 },\r\n // { x: 48, y: 3.2156862745098, size: 1 },\r\n // { x: 48.6486486486486, y: 3.29411764705882, size: 1 },\r\n // { x: 54.4864864864865, y: 3.17647058823529, size: 1 },\r\n // { x: 62.2702702702703, y: 3.25490196078431, size: 1 },\r\n // { x: 62.9189189189189, y: 3.09803921568627, size: 1 },\r\n // { x: 64.2162162162162, y: 3.29411764705882, size: 1 },\r\n // { x: 68.1081081081081, y: 3.29411764705882, size: 1 },\r\n // { x: 82.3783783783784, y: 3.37254901960784, size: 1 },\r\n // { x: 85.6216216216216, y: 3.41176470588235, size: 1 },\r\n // { x: 88.2162162162162, y: 3.92156862745098, size: 1 },\r\n // { x: 88.8648648648649, y: 3.52941176470588, size: 1 },\r\n // { x: 99.2432432432432, y: 3.88235294117647, size: 1 },\r\n // { x: 104.432432432432, y: 3.52941176470588, size: 1 },\r\n // { x: 105.72972972973, y: 3.96078431372549, size: 1 },\r\n // { x: 107.027027027027, y: 3.80392156862745, size: 1 },\r\n // { x: 115.459459459459, y: 3.88235294117647, size: 1 },\r\n // { x: 127.135135135135, y: 3.25490196078431, size: 1 },\r\n // { x: 128.432432432432, y: 3.01960784313725, size: 1 },\r\n // { x: 133.621621621622, y: 4.03921568627451, size: 1 },\r\n // { x: 138.162162162162, y: 3.80392156862745, size: 1 },\r\n // { x: 143.351351351351, y: 4, size: 1 },\r\n // { x: 147.243243243243, y: 3.80392156862745, size: 1 },\r\n // { x: 149.837837837838, y: 3.25490196078431, size: 1 },\r\n // { x: 150.486486486486, y: 3.2156862745098, size: 1 },\r\n // { x: 156.324324324324, y: 3.84313725490196, size: 1 },\r\n // { x: 171.891891891892, y: 3.41176470588235, size: 1 },\r\n // { x: 193.297297297297, y: 3.25490196078431, size: 1 },\r\n // { x: 196.540540540541, y: 3.25490196078431, size: 1 },\r\n // { x: 204.324324324324, y: 3.41176470588235, size: 1 },\r\n // { x: 205.621621621622, y: 3.25490196078431, size: 1 },\r\n // { x: 210.162162162162, y: 3.2156862745098, size: 1 },\r\n // { x: 213.405405405405, y: 3.13725490196078, size: 1 },\r\n // { x: 214.702702702703, y: 3.17647058823529, size: 1 },\r\n // { x: 215.351351351351, y: 3.01960784313725, size: 1 },\r\n // { x: 216, y: 3.09803921568627, size: 1 },\r\n // { x: 230.27027027027, y: 3.96078431372549, size: 1 },\r\n // { x: 241.945945945946, y: 3.84313725490196, size: 1 },\r\n // { x: 244.540540540541, y: 3.80392156862745, size: 1 },\r\n // { x: 253.621621621622, y: 4, size: 1 },\r\n // { x: 261.405405405405, y: 3.72549019607843, size: 1 },\r\n // { x: 262.054054054054, y: 3.88235294117647, size: 1 },\r\n // { x: 265.297297297297, y: 4.03921568627451, size: 1 },\r\n // { x: 266.594594594595, y: 4.03921568627451, size: 1 },\r\n // { x: 269.189189189189, y: 3.92156862745098, size: 1 },\r\n // { x: 272.432432432432, y: 3.88235294117647, size: 1 },\r\n // { x: 275.027027027027, y: 4.07843137254902, size: 1 },\r\n // { x: 282.162162162162, y: 3.45098039215686, size: 1 },\r\n // { x: 284.756756756757, y: 4.03921568627451, size: 1 },\r\n // { x: 297.081081081081, y: 3.33333333333333, size: 1 },\r\n // { x: 299.027027027027, y: 3.76470588235294, size: 1 },\r\n // { x: 299.675675675676, y: 3.37254901960784, size: 1 },\r\n // { x: 321.72972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 322.378378378378, y: 3.37254901960784, size: 1 },\r\n // { x: 323.675675675676, y: 2.98039215686275, size: 1 },\r\n // { x: 329.513513513513, y: 3.29411764705882, size: 1 },\r\n // { x: 347.027027027027, y: 3.76470588235294, size: 1 },\r\n // { x: 347.675675675676, y: 3.80392156862745, size: 1 },\r\n // { x: 354.810810810811, y: 3.96078431372549, size: 1 },\r\n // { x: 356.108108108108, y: 4.03921568627451, size: 1 },\r\n // { x: 358.702702702703, y: 3.88235294117647, size: 1 },\r\n // { x: 19.4244604316547, y: 3.09803921568627, size: 1 },\r\n // { x: 49.2086330935252, y: 3.13725490196078, size: 1 },\r\n // { x: 49.8561151079137, y: 3.05882352941176, size: 1 },\r\n // { x: 92.589928057554, y: 3.09803921568627, size: 1 },\r\n // { x: 109.424460431655, y: 3.92156862745098, size: 1 },\r\n // { x: 112.014388489209, y: 3.29411764705882, size: 1 },\r\n // { x: 113.956834532374, y: 2.54901960784314, size: 1 },\r\n // { x: 114.604316546763, y: 2.43137254901961, size: 1 },\r\n // { x: 135.323741007194, y: 3.13725490196078, size: 1 },\r\n // { x: 156.690647482014, y: 3.01960784313725, size: 1 },\r\n // { x: 157.338129496403, y: 1.88235294117647, size: 1 },\r\n // { x: 177.410071942446, y: 3.13725490196078, size: 1 },\r\n // { x: 178.705035971223, y: 2.19607843137255, size: 1 },\r\n // { x: 179.352517985612, y: 2, size: 1 },\r\n // { x: 185.179856115108, y: 4.27450980392157, size: 1 },\r\n // { x: 187.122302158273, y: 4, size: 1 },\r\n // { x: 187.769784172662, y: 3.96078431372549, size: 1 },\r\n // { x: 192.94964028777, y: 3.88235294117647, size: 1 },\r\n // { x: 221.438848920863, y: 3.01960784313725, size: 1 },\r\n // { x: 222.086330935252, y: 2.35294117647059, size: 1 },\r\n // { x: 239.568345323741, y: 3.92156862745098, size: 1 },\r\n // { x: 243.453237410072, y: 2.7843137254902, size: 1 },\r\n // { x: 244.10071942446, y: 2.62745098039216, size: 1 },\r\n // { x: 264.820143884892, y: 2.7843137254902, size: 1 },\r\n // { x: 265.467625899281, y: 2.23529411764706, size: 1 },\r\n // { x: 288.776978417266, y: 4, size: 1 },\r\n // { x: 329.568345323741, y: 2.62745098039216, size: 1 },\r\n // { x: 12.9496402877698, y: 2.23529411764706, size: 1 },\r\n // { x: 13.5971223021583, y: 2.54901960784314, size: 1 },\r\n // { x: 56.3309352517986, y: 3.17647058823529, size: 1 },\r\n // { x: 176.762589928058, y: 3.2156862745098, size: 1 },\r\n // { x: 203.309352517986, y: 4, size: 1 },\r\n // { x: 206.546762589928, y: 3.25490196078431, size: 1 },\r\n // { x: 209.136690647482, y: 2.90196078431373, size: 1 },\r\n // { x: 222.73381294964, y: 3.96078431372549, size: 1 },\r\n // { x: 229.208633093525, y: 3.01960784313725, size: 1 },\r\n // { x: 229.856115107914, y: 3.13725490196078, size: 1 },\r\n // { x: 230.503597122302, y: 3.13725490196078, size: 1 },\r\n // { x: 271.294964028777, y: 3.25490196078431, size: 1 },\r\n // { x: 271.942446043165, y: 2.43137254901961, size: 1 },\r\n // { x: 272.589928057554, y: 2.47058823529412, size: 1 },\r\n // { x: 273.237410071942, y: 1.56862745098039, size: 1 },\r\n // { x: 301.079136690647, y: 4.07843137254902, size: 1 },\r\n // { x: 302.374100719424, y: 4, size: 1 },\r\n // { x: 304.31654676259, y: 3.96078431372549, size: 1 },\r\n // { x: 315.323741007194, y: 3.17647058823529, size: 1 },\r\n // { x: 321.151079136691, y: 3.96078431372549, size: 1 },\r\n // { x: 330.863309352518, y: 4.07843137254902, size: 1 },\r\n // { x: 358.057553956835, y: 3.2156862745098, size: 1 },\r\n // { x: 56.9784172661871, y: 3.88235294117647, size: 1 },\r\n // { x: 62.8057553956835, y: 3.17647058823529, size: 1 },\r\n // { x: 82.8776978417266, y: 3.17647058823529, size: 1 },\r\n // { x: 85.4676258992806, y: 3.17647058823529, size: 1 },\r\n // { x: 103.597122302158, y: 4, size: 1 },\r\n // { x: 106.187050359712, y: 3.05882352941176, size: 1 },\r\n // { x: 106.834532374101, y: 3.09803921568627, size: 1 },\r\n // { x: 119.136690647482, y: 3.2156862745098, size: 1 },\r\n // { x: 128.201438848921, y: 3.33333333333333, size: 1 },\r\n // { x: 130.791366906475, y: 4, size: 1 },\r\n // { x: 139.856115107914, y: 4.07843137254902, size: 1 },\r\n // { x: 148.920863309353, y: 3.13725490196078, size: 1 },\r\n // { x: 149.568345323741, y: 2.86274509803922, size: 1 },\r\n // { x: 152.158273381295, y: 4, size: 1 },\r\n // { x: 170.935251798561, y: 2.7843137254902, size: 1 },\r\n // { x: 171.58273381295, y: 3.09803921568627, size: 1 },\r\n // { x: 207.841726618705, y: 4, size: 1 },\r\n // { x: 245.395683453237, y: 4.07843137254902, size: 1 },\r\n // { x: 253.812949640288, y: 3.96078431372549, size: 1 },\r\n // { x: 257.697841726619, y: 2.98039215686275, size: 1 },\r\n // { x: 327.625899280576, y: 4.03921568627451, size: 1 },\r\n // { x: 334.748201438849, y: 4.27450980392157, size: 1 },\r\n // { x: 335.395683453237, y: 4, size: 1 },\r\n // { x: 343.165467625899, y: 3.25490196078431, size: 1 },\r\n // { x: 344.460431654676, y: 2.94117647058824, size: 1 },\r\n // { x: 345.107913669065, y: 3.01960784313725, size: 1 },\r\n // { x: 345.755395683453, y: 3.2156862745098, size: 1 },\r\n // { x: 346.402877697842, y: 3.13725490196078, size: 1 },\r\n // { x: 7.12230215827338, y: 3.09803921568627, size: 1 },\r\n // { x: 11.0071942446043, y: 3.88235294117647, size: 1 },\r\n // { x: 23.3093525179856, y: 4.03921568627451, size: 1 },\r\n // { x: 36.2589928057554, y: 3.96078431372549, size: 1 },\r\n // { x: 49.2086330935252, y: 3.09803921568627, size: 1 },\r\n // { x: 51.1510791366906, y: 4, size: 1 },\r\n // { x: 69.2805755395683, y: 3.17647058823529, size: 1 },\r\n // { x: 69.9280575539568, y: 3.13725490196078, size: 1 },\r\n // { x: 151.510791366906, y: 3.96078431372549, size: 1 },\r\n // { x: 157.338129496403, y: 3.13725490196078, size: 1 },\r\n // { x: 158.63309352518, y: 3.25490196078431, size: 1 },\r\n // { x: 167.05035971223, y: 3.96078431372549, size: 1 },\r\n // { x: 179.352517985612, y: 3.29411764705882, size: 1 },\r\n // { x: 191.654676258993, y: 3.2156862745098, size: 1 },\r\n // { x: 201.36690647482, y: 3.13725490196078, size: 1 },\r\n // { x: 202.014388489209, y: 3.09803921568627, size: 1 },\r\n // { x: 205.251798561151, y: 3.05882352941176, size: 1 },\r\n // { x: 222.086330935252, y: 3.05882352941176, size: 1 },\r\n // { x: 247.985611510791, y: 4.03921568627451, size: 1 },\r\n // { x: 249.928057553957, y: 4, size: 1 },\r\n // { x: 309.496402877698, y: 2.94117647058824, size: 1 },\r\n // { x: 7.13513513513514, y: 3.80392156862745, size: 1 },\r\n // { x: 12.3243243243243, y: 3.25490196078431, size: 1 },\r\n // { x: 14.2702702702703, y: 3.09803921568627, size: 1 },\r\n // { x: 24.6486486486486, y: 3.84313725490196, size: 1 },\r\n // { x: 26.5945945945946, y: 3.96078431372549, size: 1 },\r\n // { x: 35.6756756756757, y: 3.05882352941176, size: 1 },\r\n // { x: 48.6486486486486, y: 3.41176470588235, size: 1 },\r\n // { x: 55.1351351351351, y: 3.05882352941176, size: 1 },\r\n // { x: 55.7837837837838, y: 2.74509803921569, size: 1 },\r\n // { x: 56.4324324324324, y: 3.09803921568627, size: 1 },\r\n // { x: 57.0810810810811, y: 2.98039215686275, size: 1 },\r\n // { x: 66.1621621621622, y: 3.72549019607843, size: 1 },\r\n // { x: 75.2432432432432, y: 3.41176470588235, size: 1 },\r\n // { x: 78.4864864864865, y: 2.90196078431373, size: 1 },\r\n // { x: 79.1351351351351, y: 2.74509803921569, size: 1 },\r\n // { x: 105.72972972973, y: 3.33333333333333, size: 1 },\r\n // { x: 116.108108108108, y: 3.96078431372549, size: 1 },\r\n // { x: 118.702702702703, y: 3.45098039215686, size: 1 },\r\n // { x: 120, y: 2.98039215686275, size: 1 },\r\n // { x: 120.648648648649, y: 2.70588235294118, size: 1 },\r\n // { x: 121.297297297297, y: 2.86274509803922, size: 1 },\r\n // { x: 121.945945945946, y: 2.70588235294118, size: 1 },\r\n // { x: 122.594594594595, y: 2.98039215686275, size: 1 },\r\n // { x: 131.027027027027, y: 3.29411764705882, size: 1 },\r\n // { x: 135.567567567568, y: 3.92156862745098, size: 1 },\r\n // { x: 146.594594594595, y: 3.72549019607843, size: 1 },\r\n // { x: 149.189189189189, y: 3.92156862745098, size: 1 },\r\n // { x: 157.621621621622, y: 3.52941176470588, size: 1 },\r\n // { x: 164.108108108108, y: 3.17647058823529, size: 1 },\r\n // { x: 164.756756756757, y: 3.2156862745098, size: 1 },\r\n // { x: 166.054054054054, y: 3.45098039215686, size: 1 },\r\n // { x: 166.702702702703, y: 3.25490196078431, size: 1 },\r\n // { x: 168, y: 3.41176470588235, size: 1 },\r\n // { x: 181.621621621622, y: 3.41176470588235, size: 1 },\r\n // { x: 182.27027027027, y: 3.45098039215686, size: 1 },\r\n // { x: 183.567567567568, y: 3.68627450980392, size: 1 },\r\n // { x: 186.810810810811, y: 3.33333333333333, size: 1 },\r\n // { x: 195.891891891892, y: 3.37254901960784, size: 1 },\r\n // { x: 199.135135135135, y: 3.41176470588235, size: 1 },\r\n // { x: 205.621621621622, y: 3.92156862745098, size: 1 },\r\n // { x: 206.918918918919, y: 3.13725490196078, size: 1 },\r\n // { x: 210.810810810811, y: 3.96078431372549, size: 1 },\r\n // { x: 216.648648648649, y: 3.96078431372549, size: 1 },\r\n // { x: 218.594594594595, y: 3.37254901960784, size: 1 },\r\n // { x: 220.540540540541, y: 3.41176470588235, size: 1 },\r\n // { x: 227.027027027027, y: 3.29411764705882, size: 1 },\r\n // { x: 228.972972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 229.621621621622, y: 3.09803921568627, size: 1 },\r\n // { x: 230.27027027027, y: 3.29411764705882, size: 1 },\r\n // { x: 253.621621621622, y: 3.80392156862745, size: 1 },\r\n // { x: 257.513513513513, y: 3.88235294117647, size: 1 },\r\n // { x: 260.756756756757, y: 3.92156862745098, size: 1 },\r\n // { x: 266.594594594595, y: 3.80392156862745, size: 1 },\r\n // { x: 274.378378378378, y: 3.88235294117647, size: 1 },\r\n // { x: 276.972972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 280.216216216216, y: 3.41176470588235, size: 1 },\r\n // { x: 292.540540540541, y: 3.17647058823529, size: 1 },\r\n // { x: 293.189189189189, y: 2.70588235294118, size: 1 },\r\n // { x: 293.837837837838, y: 2.86274509803922, size: 1 },\r\n // { x: 294.486486486487, y: 2.54901960784314, size: 1 },\r\n // { x: 315.891891891892, y: 3.25490196078431, size: 1 },\r\n // { x: 316.540540540541, y: 3.25490196078431, size: 1 },\r\n // { x: 331.459459459459, y: 3.29411764705882, size: 1 },\r\n // { x: 339.243243243243, y: 4, size: 1 },\r\n // { x: 347.675675675676, y: 3.45098039215686, size: 1 },\r\n // { x: 348.972972972973, y: 3.49019607843137, size: 1 },\r\n // { x: 355.459459459459, y: 3.88235294117647, size: 1 },\r\n // { x: 358.054054054054, y: 3.13725490196078, size: 1 },\r\n // { x: 19.4244604316547, y: 3.25490196078431, size: 1 },\r\n // { x: 20.7194244604317, y: 2.90196078431373, size: 1 },\r\n // { x: 22.0143884892086, y: 3.09803921568627, size: 1 },\r\n // { x: 41.4388489208633, y: 3.01960784313725, size: 1 },\r\n // { x: 42.7338129496403, y: 2.98039215686275, size: 1 },\r\n // { x: 43.3812949640288, y: 3.09803921568627, size: 1 },\r\n // { x: 58.273381294964, y: 3.17647058823529, size: 1 },\r\n // { x: 62.8057553956835, y: 0.980392156862745, size: 1 },\r\n // { x: 63.4532374100719, y: 1.2156862745098, size: 1 },\r\n // { x: 64.1007194244604, y: 1.01960784313725, size: 1 },\r\n // { x: 64.7482014388489, y: 1.09803921568627, size: 1 },\r\n // { x: 67.3381294964029, y: 3.17647058823529, size: 1 },\r\n // { x: 71.8705035971223, y: 2.94117647058824, size: 1 },\r\n // { x: 72.5179856115108, y: 2.94117647058824, size: 1 },\r\n // { x: 78.9928057553957, y: 3.13725490196078, size: 1 },\r\n // { x: 84.1726618705036, y: 2.98039215686275, size: 1 },\r\n // { x: 84.8201438848921, y: 2.62745098039216, size: 1 },\r\n // { x: 106.187050359712, y: 2.90196078431373, size: 1 },\r\n // { x: 127.553956834532, y: 2.98039215686275, size: 1 },\r\n // { x: 128.201438848921, y: 2.7843137254902, size: 1 },\r\n // { x: 148.920863309353, y: 2.82352941176471, size: 1 },\r\n // { x: 149.568345323741, y: 2.82352941176471, size: 1 },\r\n // { x: 170.287769784173, y: 2.98039215686275, size: 1 },\r\n // { x: 170.935251798561, y: 2.82352941176471, size: 1 },\r\n // { x: 171.58273381295, y: 3.17647058823529, size: 1 },\r\n // { x: 192.302158273381, y: 2.50980392156863, size: 1 },\r\n // { x: 207.194244604317, y: 3.88235294117647, size: 1 },\r\n // { x: 214.31654676259, y: 2.86274509803922, size: 1 },\r\n // { x: 229.856115107914, y: 4.35294117647059, size: 1 },\r\n // { x: 274.532374100719, y: 4, size: 1 },\r\n // { x: 277.769784172662, y: 3.09803921568627, size: 1 },\r\n // { x: 278.41726618705, y: 2.03921568627451, size: 1 },\r\n // { x: 279.064748201439, y: 1.80392156862745, size: 1 },\r\n // { x: 284.244604316547, y: 4.35294117647059, size: 1 },\r\n // { x: 299.136690647482, y: 3.01960784313725, size: 1 },\r\n // { x: 299.784172661871, y: 3.05882352941176, size: 1 },\r\n // { x: 300.431654676259, y: 2.27450980392157, size: 1 },\r\n // { x: 337.338129496403, y: 3.88235294117647, size: 1 },\r\n // { x: 49.8561151079137, y: 3.13725490196078, size: 1 },\r\n // { x: 50.5035971223022, y: 3.09803921568627, size: 1 },\r\n // { x: 58.9208633093525, y: 3.25490196078431, size: 1 },\r\n // { x: 113.309352517986, y: 3.09803921568627, size: 1 },\r\n // { x: 134.676258992806, y: 2.90196078431373, size: 1 },\r\n // { x: 174.172661870504, y: 3.96078431372549, size: 1 },\r\n // { x: 183.237410071942, y: 4.11764705882353, size: 1 },\r\n // { x: 199.424460431655, y: 2.86274509803922, size: 1 },\r\n // { x: 200.719424460432, y: 2.86274509803922, size: 1 },\r\n // { x: 201.36690647482, y: 2.90196078431373, size: 1 },\r\n // { x: 220.791366906475, y: 3.05882352941176, size: 1 },\r\n // { x: 221.438848920863, y: 2.74509803921569, size: 1 },\r\n // { x: 222.086330935252, y: 2.70588235294118, size: 1 },\r\n // { x: 245.395683453237, y: 4.03921568627451, size: 1 },\r\n // { x: 306.906474820144, y: 2.86274509803922, size: 1 },\r\n // { x: 308.201438848921, y: 2.70588235294118, size: 1 },\r\n // { x: 308.848920863309, y: 2.54901960784314, size: 1 },\r\n // { x: 309.496402877698, y: 3.2156862745098, size: 1 },\r\n // { x: 310.143884892086, y: 3.13725490196078, size: 1 },\r\n // { x: 310.791366906475, y: 3.13725490196078, size: 1 },\r\n // { x: 314.028776978417, y: 3.25490196078431, size: 1 },\r\n // { x: 321.798561151079, y: 3.05882352941176, size: 1 },\r\n // { x: 328.273381294964, y: 3.05882352941176, size: 1 },\r\n // { x: 328.920863309353, y: 2.86274509803922, size: 1 },\r\n // { x: 329.568345323741, y: 2.82352941176471, size: 1 },\r\n // { x: 349.640287769784, y: 3.92156862745098, size: 1 },\r\n // { x: 350.287769784173, y: 2.90196078431373, size: 1 },\r\n // { x: 356.762589928058, y: 4.03921568627451, size: 1 },\r\n // { x: 5.18918918918919, y: 3.92156862745098, size: 1 },\r\n // { x: 7.13513513513514, y: 3.92156862745098, size: 1 },\r\n // { x: 7.78378378378378, y: 3.88235294117647, size: 1 },\r\n // { x: 12.972972972973, y: 3.2156862745098, size: 1 },\r\n // { x: 13.6216216216216, y: 2.86274509803922, size: 1 },\r\n // { x: 14.9189189189189, y: 3.84313725490196, size: 1 },\r\n // { x: 18.8108108108108, y: 3.88235294117647, size: 1 },\r\n // { x: 34.3783783783784, y: 3.13725490196078, size: 1 },\r\n // { x: 38.2702702702703, y: 3.41176470588235, size: 1 },\r\n // { x: 55.1351351351351, y: 3.29411764705882, size: 1 },\r\n // { x: 55.7837837837838, y: 3.25490196078431, size: 1 },\r\n // { x: 58.3783783783784, y: 3.88235294117647, size: 1 },\r\n // { x: 59.6756756756757, y: 3.49019607843137, size: 1 },\r\n // { x: 71.3513513513514, y: 3.92156862745098, size: 1 },\r\n // { x: 75.8918918918919, y: 3.41176470588235, size: 1 },\r\n // { x: 78.4864864864865, y: 3.96078431372549, size: 1 },\r\n // { x: 79.1351351351351, y: 3.96078431372549, size: 1 },\r\n // { x: 80.4324324324324, y: 3.88235294117647, size: 1 },\r\n // { x: 81.0810810810811, y: 3.96078431372549, size: 1 },\r\n // { x: 85.6216216216216, y: 3.92156862745098, size: 1 },\r\n // { x: 86.2702702702703, y: 3.76470588235294, size: 1 },\r\n // { x: 90.8108108108108, y: 3.92156862745098, size: 1 },\r\n // { x: 91.4594594594595, y: 4, size: 1 },\r\n // { x: 92.1081081081081, y: 3.80392156862745, size: 1 },\r\n // { x: 94.7027027027027, y: 3.88235294117647, size: 1 },\r\n // { x: 96, y: 3.92156862745098, size: 1 },\r\n // { x: 96.6486486486486, y: 3.29411764705882, size: 1 },\r\n // { x: 97.2972972972973, y: 3.2156862745098, size: 1 },\r\n // { x: 97.945945945946, y: 3.2156862745098, size: 1 },\r\n // { x: 99.8918918918919, y: 3.29411764705882, size: 1 },\r\n // { x: 118.054054054054, y: 3.80392156862745, size: 1 },\r\n // { x: 139.459459459459, y: 3.49019607843137, size: 1 },\r\n // { x: 148.540540540541, y: 3.80392156862745, size: 1 },\r\n // { x: 151.783783783784, y: 3.96078431372549, size: 1 },\r\n // { x: 153.081081081081, y: 3.84313725490196, size: 1 },\r\n // { x: 153.72972972973, y: 3.92156862745098, size: 1 },\r\n // { x: 155.675675675676, y: 4, size: 1 },\r\n // { x: 177.72972972973, y: 3.96078431372549, size: 1 },\r\n // { x: 206.918918918919, y: 3.17647058823529, size: 1 },\r\n // { x: 212.756756756757, y: 3.88235294117647, size: 1 },\r\n // { x: 227.675675675676, y: 3.33333333333333, size: 1 },\r\n // { x: 228.972972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 231.567567567568, y: 3.88235294117647, size: 1 },\r\n // { x: 232.864864864865, y: 3.96078431372549, size: 1 },\r\n // { x: 235.459459459459, y: 3.96078431372549, size: 1 },\r\n // { x: 242.594594594595, y: 4, size: 1 },\r\n // { x: 244.540540540541, y: 3.96078431372549, size: 1 },\r\n // { x: 245.189189189189, y: 3.80392156862745, size: 1 },\r\n // { x: 251.675675675676, y: 3.33333333333333, size: 1 },\r\n // { x: 271.783783783784, y: 3.17647058823529, size: 1 },\r\n // { x: 272.432432432432, y: 3.25490196078431, size: 1 },\r\n // { x: 273.081081081081, y: 3.37254901960784, size: 1 },\r\n // { x: 293.837837837838, y: 3.25490196078431, size: 1 },\r\n // { x: 294.486486486487, y: 3.09803921568627, size: 1 },\r\n // { x: 295.135135135135, y: 3.25490196078431, size: 1 },\r\n // { x: 317.837837837838, y: 3.37254901960784, size: 1 },\r\n // { x: 330.810810810811, y: 3.49019607843137, size: 1 },\r\n // { x: 334.054054054054, y: 3.37254901960784, size: 1 },\r\n // { x: 334.702702702703, y: 3.29411764705882, size: 1 },\r\n // { x: 336.648648648649, y: 3.01960784313725, size: 1 },\r\n // { x: 337.297297297297, y: 3.37254901960784, size: 1 },\r\n // { x: 337.945945945946, y: 3.29411764705882, size: 1 },\r\n // { x: 340.540540540541, y: 3.84313725490196, size: 1 },\r\n // { x: 342.486486486487, y: 4, size: 1 },\r\n // { x: 344.432432432432, y: 3.84313725490196, size: 1 },\r\n // { x: 357.405405405405, y: 3.13725490196078, size: 1 },\r\n // { x: 358.054054054054, y: 3.05882352941176, size: 1 },\r\n // { x: 358.702702702703, y: 2.74509803921569, size: 1 },\r\n // { x: 359.351351351351, y: 3.13725490196078, size: 1 },\r\n // { x: 0, y: 2.66666666666667, size: 1 },\r\n // { x: 0.647482014388489, y: 4, size: 1 },\r\n // { x: 5.8273381294964, y: 4.27450980392157, size: 1 },\r\n // { x: 22.0143884892086, y: 3.96078431372549, size: 1 },\r\n // { x: 26.5467625899281, y: 3.92156862745098, size: 1 },\r\n // { x: 37.5539568345324, y: 3.88235294117647, size: 1 },\r\n // { x: 64.7482014388489, y: 3.13725490196078, size: 1 },\r\n // { x: 71.8705035971223, y: 4, size: 1 },\r\n // { x: 81.5827338129496, y: 3.92156862745098, size: 1 },\r\n // { x: 128.201438848921, y: 3.25490196078431, size: 1 },\r\n // { x: 128.848920863309, y: 3.13725490196078, size: 1 },\r\n // { x: 129.496402877698, y: 3.09803921568627, size: 1 },\r\n // { x: 157.985611510791, y: 3.96078431372549, size: 1 },\r\n // { x: 158.63309352518, y: 3.96078431372549, size: 1 },\r\n // { x: 161.870503597122, y: 3.96078431372549, size: 1 },\r\n // { x: 164.460431654676, y: 4.15686274509804, size: 1 },\r\n // { x: 235.035971223022, y: 2.90196078431373, size: 1 },\r\n // { x: 235.68345323741, y: 2.82352941176471, size: 1 },\r\n // { x: 236.330935251799, y: 3.09803921568627, size: 1 },\r\n // { x: 236.978417266187, y: 3.01960784313725, size: 1 },\r\n // { x: 241.510791366906, y: 3.01960784313725, size: 1 },\r\n // { x: 247.985611510791, y: 3.13725490196078, size: 1 },\r\n // { x: 251.223021582734, y: 3.25490196078431, size: 1 },\r\n // { x: 251.870503597122, y: 3.17647058823529, size: 1 },\r\n // { x: 253.165467625899, y: 3.01960784313725, size: 1 },\r\n // { x: 254.460431654676, y: 3.41176470588235, size: 1 },\r\n // { x: 258.345323741007, y: 3.2156862745098, size: 1 },\r\n // { x: 279.064748201439, y: 2.90196078431373, size: 1 },\r\n // { x: 286.187050359712, y: 4, size: 1 },\r\n // { x: 323.741007194245, y: 2.98039215686275, size: 1 },\r\n // { x: 339.280575539568, y: 3.17647058823529, size: 1 },\r\n // { x: 343.165467625899, y: 3.01960784313725, size: 1 },\r\n // { x: 343.812949640288, y: 2.98039215686275, size: 1 },\r\n // { x: 345.107913669065, y: 2.82352941176471, size: 1 },\r\n // { x: 71.2230215827338, y: 2.98039215686275, size: 1 },\r\n // { x: 89.3525179856115, y: 3.25490196078431, size: 1 },\r\n // { x: 90.6474820143885, y: 3.05882352941176, size: 1 },\r\n // { x: 91.9424460431655, y: 2.70588235294118, size: 1 },\r\n // { x: 93.2374100719424, y: 2.7843137254902, size: 1 },\r\n // { x: 107.482014388489, y: 3.41176470588235, size: 1 },\r\n // { x: 113.309352517986, y: 3.17647058823529, size: 1 },\r\n // { x: 134.028776978417, y: 2.90196078431373, size: 1 },\r\n // { x: 134.676258992806, y: 2.66666666666667, size: 1 },\r\n // { x: 135.323741007194, y: 2.86274509803922, size: 1 },\r\n // { x: 147.625899280576, y: 3.25490196078431, size: 1 },\r\n // { x: 152.158273381295, y: 3.25490196078431, size: 1 },\r\n // { x: 178.057553956835, y: 3.25490196078431, size: 1 },\r\n // { x: 198.776978417266, y: 2.82352941176471, size: 1 },\r\n // { x: 199.424460431655, y: 3.09803921568627, size: 1 },\r\n // { x: 200.071942446043, y: 2.90196078431373, size: 1 },\r\n // { x: 205.89928057554, y: 3.29411764705882, size: 1 },\r\n // { x: 262.877697841727, y: 3.33333333333333, size: 1 },\r\n // { x: 264.820143884892, y: 2.98039215686275, size: 1 },\r\n // { x: 265.467625899281, y: 2.86274509803922, size: 1 },\r\n // { x: 266.115107913669, y: 3.2156862745098, size: 1 },\r\n // { x: 290.071942446043, y: 4.11764705882353, size: 1 },\r\n // { x: 349.640287769784, y: 3.13725490196078, size: 1 },\r\n // { x: 350.287769784173, y: 2.11764705882353, size: 1 },\r\n // { x: 350.935251798561, y: 2.11764705882353, size: 1 },\r\n // { x: 351.58273381295, y: 1.92156862745098, size: 1 },\r\n // { x: 352.230215827338, y: 2.15686274509804, size: 1 },\r\n // { x: 11.6546762589928, y: 2.31372549019608, size: 1 },\r\n // { x: 12.3021582733813, y: 2.47058823529412, size: 1 },\r\n // { x: 12.9496402877698, y: 2.50980392156863, size: 1 },\r\n // { x: 13.5971223021583, y: 2.58823529411765, size: 1 },\r\n // { x: 33.0215827338129, y: 2.74509803921569, size: 1 },\r\n // { x: 33.6690647482014, y: 2.74509803921569, size: 1 },\r\n // { x: 36.9064748201439, y: 4.07843137254902, size: 1 },\r\n // { x: 42.7338129496403, y: 4.11764705882353, size: 1 },\r\n // { x: 49.8561151079137, y: 3.96078431372549, size: 1 },\r\n // { x: 54.3884892086331, y: 3.05882352941176, size: 1 },\r\n // { x: 55.0359712230216, y: 2.50980392156863, size: 1 },\r\n // { x: 55.6834532374101, y: 3.25490196078431, size: 1 },\r\n // { x: 76.4028776978417, y: 2.27450980392157, size: 1 },\r\n // { x: 77.0503597122302, y: 2.3921568627451, size: 1 },\r\n // { x: 119.784172661871, y: 2.11764705882353, size: 1 },\r\n // { x: 141.151079136691, y: 2.86274509803922, size: 1 },\r\n // { x: 158.63309352518, y: 4, size: 1 },\r\n // { x: 161.223021582734, y: 3.33333333333333, size: 1 },\r\n // { x: 161.870503597122, y: 3.01960784313725, size: 1 },\r\n // { x: 162.517985611511, y: 2.15686274509804, size: 1 },\r\n // { x: 163.165467625899, y: 2.15686274509804, size: 1 },\r\n // { x: 170.287769784173, y: 4.03921568627451, size: 1 },\r\n // { x: 182.589928057554, y: 3.2156862745098, size: 1 },\r\n // { x: 183.237410071942, y: 2.82352941176471, size: 1 },\r\n // { x: 183.884892086331, y: 2.98039215686275, size: 1 },\r\n // { x: 184.532374100719, y: 1.96078431372549, size: 1 },\r\n // { x: 221.438848920863, y: 4, size: 1 },\r\n // { x: 226.618705035971, y: 3.13725490196078, size: 1 },\r\n // { x: 227.913669064748, y: 2.47058823529412, size: 1 },\r\n // { x: 283.597122302158, y: 3.2156862745098, size: 1 },\r\n // { x: 13.6216216216216, y: 3.6078431372549, size: 1 },\r\n // { x: 18.8108108108108, y: 2.98039215686275, size: 1 },\r\n // { x: 19.4594594594595, y: 3.05882352941176, size: 1 },\r\n // { x: 20.1081081081081, y: 3.29411764705882, size: 1 },\r\n // { x: 21.4054054054054, y: 3.41176470588235, size: 1 },\r\n // { x: 24.6486486486486, y: 3.37254901960784, size: 1 },\r\n // { x: 35.6756756756757, y: 3.80392156862745, size: 1 },\r\n // { x: 40.8648648648649, y: 3.09803921568627, size: 1 },\r\n // { x: 42.1621621621622, y: 3.29411764705882, size: 1 },\r\n // { x: 45.4054054054054, y: 3.80392156862745, size: 1 },\r\n // { x: 50.5945945945946, y: 3.84313725490196, size: 1 },\r\n // { x: 61.6216216216216, y: 3.29411764705882, size: 1 },\r\n // { x: 62.2702702702703, y: 3.05882352941176, size: 1 },\r\n // { x: 62.9189189189189, y: 3.33333333333333, size: 1 },\r\n // { x: 70.054054054054, y: 4.07843137254902, size: 1 },\r\n // { x: 85.6216216216216, y: 3.29411764705882, size: 1 },\r\n // { x: 104.432432432432, y: 3.37254901960784, size: 1 },\r\n // { x: 105.081081081081, y: 2.94117647058824, size: 1 },\r\n // { x: 106.378378378378, y: 2.86274509803922, size: 1 },\r\n // { x: 112.864864864865, y: 3.2156862745098, size: 1 },\r\n // { x: 127.135135135135, y: 3.37254901960784, size: 1 },\r\n // { x: 127.783783783784, y: 3.2156862745098, size: 1 },\r\n // { x: 128.432432432432, y: 3.09803921568627, size: 1 },\r\n // { x: 129.081081081081, y: 3.33333333333333, size: 1 },\r\n // { x: 145.945945945946, y: 3.84313725490196, size: 1 },\r\n // { x: 148.540540540541, y: 3.09803921568627, size: 1 },\r\n // { x: 149.837837837838, y: 3.17647058823529, size: 1 },\r\n // { x: 150.486486486486, y: 3.05882352941176, size: 1 },\r\n // { x: 155.027027027027, y: 3.88235294117647, size: 1 },\r\n // { x: 161.513513513514, y: 3.88235294117647, size: 1 },\r\n // { x: 171.243243243243, y: 3.13725490196078, size: 1 },\r\n // { x: 171.891891891892, y: 3.05882352941176, size: 1 },\r\n // { x: 199.135135135135, y: 3.84313725490196, size: 1 },\r\n // { x: 201.081081081081, y: 3.92156862745098, size: 1 },\r\n // { x: 201.72972972973, y: 3.92156862745098, size: 1 },\r\n // { x: 213.405405405405, y: 3.37254901960784, size: 1 },\r\n // { x: 214.702702702703, y: 3.13725490196078, size: 1 },\r\n // { x: 215.351351351351, y: 3.17647058823529, size: 1 },\r\n // { x: 233.513513513514, y: 3.45098039215686, size: 1 },\r\n // { x: 234.810810810811, y: 3.17647058823529, size: 1 },\r\n // { x: 235.459459459459, y: 3.17647058823529, size: 1 },\r\n // { x: 239.351351351351, y: 3.33333333333333, size: 1 },\r\n // { x: 240, y: 3.37254901960784, size: 1 },\r\n // { x: 247.135135135135, y: 3.37254901960784, size: 1 },\r\n // { x: 256.216216216216, y: 3.33333333333333, size: 1 },\r\n // { x: 256.864864864865, y: 3.09803921568627, size: 1 },\r\n // { x: 266.594594594595, y: 3.88235294117647, size: 1 },\r\n // { x: 270.486486486487, y: 3.37254901960784, size: 1 },\r\n // { x: 278.27027027027, y: 2.15686274509804, size: 1 },\r\n // { x: 278.918918918919, y: 3.01960784313725, size: 1 },\r\n // { x: 279.567567567568, y: 2.7843137254902, size: 1 },\r\n // { x: 280.216216216216, y: 3.01960784313725, size: 1 },\r\n // { x: 290.594594594595, y: 3.49019607843137, size: 1 },\r\n // { x: 302.918918918919, y: 4, size: 1 },\r\n // { x: 313.297297297297, y: 4.03921568627451, size: 1 },\r\n // { x: 337.945945945946, y: 4.07843137254902, size: 1 },\r\n // { x: 341.189189189189, y: 3.37254901960784, size: 1 },\r\n // { x: 343.135135135135, y: 2.54901960784314, size: 1 },\r\n // { x: 343.783783783784, y: 2.7843137254902, size: 1 },\r\n // { x: 344.432432432432, y: 2.74509803921569, size: 1 },\r\n // { x: 345.081081081081, y: 2.98039215686275, size: 1 },\r\n // { x: 18.1294964028777, y: 4.15686274509804, size: 1 },\r\n // { x: 24.6043165467626, y: 3.29411764705882, size: 1 },\r\n // { x: 25.8992805755396, y: 2.90196078431373, size: 1 },\r\n // { x: 26.5467625899281, y: 3.09803921568627, size: 1 },\r\n // { x: 27.1942446043165, y: 3.13725490196078, size: 1 },\r\n // { x: 27.841726618705, y: 2.54901960784314, size: 1 },\r\n // { x: 35.6115107913669, y: 3.88235294117647, size: 1 },\r\n // { x: 69.2805755395683, y: 3.01960784313725, size: 1 },\r\n // { x: 90.6474820143885, y: 2.58823529411765, size: 1 },\r\n // { x: 91.294964028777, y: 2.82352941176471, size: 1 },\r\n // { x: 112.661870503597, y: 2.70588235294118, size: 1 },\r\n // { x: 154.748201438849, y: 3.25490196078431, size: 1 },\r\n // { x: 180, y: 4.03921568627451, size: 1 },\r\n // { x: 195.539568345324, y: 3.92156862745098, size: 1 },\r\n // { x: 242.158273381295, y: 2.70588235294118, size: 1 },\r\n // { x: 242.805755395683, y: 2.86274509803922, size: 1 },\r\n // { x: 243.453237410072, y: 3.01960784313725, size: 1 },\r\n // { x: 244.10071942446, y: 3.13725490196078, size: 1 },\r\n // { x: 251.870503597122, y: 3.92156862745098, size: 1 },\r\n // { x: 281.654676258993, y: 4.07843137254902, size: 1 },\r\n // { x: 306.258992805755, y: 2.7843137254902, size: 1 },\r\n // { x: 306.906474820144, y: 2.27450980392157, size: 1 },\r\n // { x: 307.553956834532, y: 2.35294117647059, size: 1 },\r\n // { x: 308.848920863309, y: 2.43137254901961, size: 1 },\r\n // { x: 337.985611510791, y: 3.88235294117647, size: 1 },\r\n // { x: 347.697841726619, y: 4.03921568627451, size: 1 },\r\n // { x: 349.640287769784, y: 3.25490196078431, size: 1 },\r\n // { x: 350.287769784173, y: 3.17647058823529, size: 1 },\r\n // { x: 104.244604316547, y: 3.17647058823529, size: 1 },\r\n // { x: 111.36690647482, y: 3.2156862745098, size: 1 },\r\n // { x: 115.251798561151, y: 3.25490196078431, size: 1 },\r\n // { x: 162.517985611511, y: 2.54901960784314, size: 1 },\r\n // { x: 163.165467625899, y: 2.54901960784314, size: 1 },\r\n // { x: 174.172661870504, y: 4.11764705882353, size: 1 },\r\n // { x: 220.791366906475, y: 3.92156862745098, size: 1 },\r\n // { x: 233.741007194245, y: 4.11764705882353, size: 1 },\r\n // { x: 242.158273381295, y: 4.07843137254902, size: 1 },\r\n // { x: 244.748201438849, y: 4.07843137254902, size: 1 },\r\n // { x: 248.63309352518, y: 2.86274509803922, size: 1 },\r\n // { x: 249.280575539568, y: 3.01960784313725, size: 1 },\r\n // { x: 272.589928057554, y: 3.13725490196078, size: 1 },\r\n // { x: 281.007194244604, y: 4, size: 1 },\r\n // { x: 285.539568345324, y: 4.03921568627451, size: 1 },\r\n // { x: 314.676258992806, y: 3.05882352941176, size: 1 },\r\n // { x: 336.690647482014, y: 3.13725490196078, size: 1 },\r\n // { x: 337.338129496403, y: 3.17647058823529, size: 1 },\r\n // { x: 337.985611510791, y: 4.07843137254902, size: 1 },\r\n // { x: 18.1294964028777, y: 2.98039215686275, size: 1 },\r\n // { x: 18.7769784172662, y: 2.86274509803922, size: 1 },\r\n // { x: 19.4244604316547, y: 2.66666666666667, size: 1 },\r\n // { x: 20.0719424460432, y: 2.86274509803922, size: 1 },\r\n // { x: 24.6043165467626, y: 3.92156862745098, size: 1 },\r\n // { x: 25.8992805755396, y: 4.23529411764706, size: 1 },\r\n // { x: 26.5467625899281, y: 4, size: 1 },\r\n // { x: 31.0791366906475, y: 3.88235294117647, size: 1 },\r\n // { x: 31.726618705036, y: 3.92156862745098, size: 1 },\r\n // { x: 35.6115107913669, y: 3.96078431372549, size: 1 },\r\n // { x: 49.8561151079137, y: 3.88235294117647, size: 1 },\r\n // { x: 127.553956834532, y: 3.96078431372549, size: 1 },\r\n // { x: 145.035971223022, y: 3.96078431372549, size: 1 },\r\n // { x: 148.273381294964, y: 3.09803921568627, size: 1 },\r\n // { x: 156.690647482014, y: 3.92156862745098, size: 1 },\r\n // { x: 192.302158273381, y: 2.98039215686275, size: 1 },\r\n // { x: 234.388489208633, y: 3.2156862745098, size: 1 },\r\n // { x: 257.697841726619, y: 3.17647058823529, size: 1 },\r\n // { x: 276.474820143885, y: 3.05882352941176, size: 1 },\r\n // { x: 277.122302158273, y: 2.3921568627451, size: 1 },\r\n // { x: 277.769784172662, y: 0.980392156862745, size: 1 },\r\n // { x: 278.41726618705, y: 1.01960784313725, size: 1 },\r\n // { x: 279.064748201439, y: 1.17647058823529, size: 1 },\r\n // { x: 279.712230215827, y: 2.98039215686275, size: 1 },\r\n // { x: 282.302158273381, y: 2.98039215686275, size: 1 },\r\n // { x: 292.661870503597, y: 2.90196078431373, size: 1 },\r\n // { x: 293.309352517986, y: 2.94117647058824, size: 1 },\r\n // { x: 295.89928057554, y: 3.29411764705882, size: 1 },\r\n // { x: 297.194244604317, y: 3.01960784313725, size: 1 },\r\n // { x: 297.841726618705, y: 2.98039215686275, size: 1 },\r\n // { x: 299.136690647482, y: 2.62745098039216, size: 1 },\r\n // { x: 299.784172661871, y: 2.74509803921569, size: 1 },\r\n // { x: 300.431654676259, y: 1.96078431372549, size: 1 },\r\n // { x: 301.079136690647, y: 2.11764705882353, size: 1 },\r\n // { x: 303.021582733813, y: 4, size: 1 },\r\n // { x: 320.503597122302, y: 3.17647058823529, size: 1 },\r\n // { x: 321.151079136691, y: 3.01960784313725, size: 1 },\r\n // { x: 341.870503597122, y: 1.88235294117647, size: 1 },\r\n // { x: 342.517985611511, y: 1.45098039215686, size: 1 },\r\n // { x: 3.23741007194245, y: 2.82352941176471, size: 1 },\r\n // { x: 3.88489208633094, y: 2.62745098039216, size: 1 },\r\n // { x: 23.3093525179856, y: 3.92156862745098, size: 1 },\r\n // { x: 67.9856115107914, y: 3.25490196078431, size: 1 },\r\n // { x: 68.6330935251799, y: 2.66666666666667, size: 1 },\r\n // { x: 69.2805755395683, y: 3.25490196078431, size: 1 },\r\n // { x: 132.086330935252, y: 3.2156862745098, size: 1 },\r\n // { x: 154.748201438849, y: 2.7843137254902, size: 1 },\r\n // { x: 155.395683453237, y: 3.05882352941176, size: 1 },\r\n // { x: 207.841726618705, y: 3.96078431372549, size: 1 },\r\n // { x: 292.661870503597, y: 4, size: 1 },\r\n // { x: 327.625899280576, y: 2.70588235294118, size: 1 },\r\n // { x: 334.10071942446, y: 4.07843137254902, size: 1 },\r\n // { x: 345.755395683453, y: 3.92156862745098, size: 1 },\r\n // { x: 348.345323741007, y: 3.05882352941176, size: 1 },\r\n // { x: 349.640287769784, y: 2.90196078431373, size: 1 },\r\n // { x: 350.935251798561, y: 3.17647058823529, size: 1 },\r\n // { x: 7.13513513513514, y: 3.96078431372549, size: 1 },\r\n // { x: 9.08108108108108, y: 3.13725490196078, size: 1 },\r\n // { x: 9.72972972972973, y: 3.09803921568627, size: 1 },\r\n // { x: 10.3783783783784, y: 2.98039215686275, size: 1 },\r\n // { x: 11.027027027027, y: 2.50980392156863, size: 1 },\r\n // { x: 14.9189189189189, y: 3.2156862745098, size: 1 },\r\n // { x: 24, y: 3.25490196078431, size: 1 },\r\n // { x: 29.8378378378378, y: 3.33333333333333, size: 1 },\r\n // { x: 32.4324324324324, y: 3.17647058823529, size: 1 },\r\n // { x: 53.8378378378378, y: 2.82352941176471, size: 1 },\r\n // { x: 55.1351351351351, y: 3.01960784313725, size: 1 },\r\n // { x: 55.7837837837838, y: 3.05882352941176, size: 1 },\r\n // { x: 58.3783783783784, y: 3.92156862745098, size: 1 },\r\n // { x: 59.6756756756757, y: 3.41176470588235, size: 1 },\r\n // { x: 62.9189189189189, y: 4.03921568627451, size: 1 },\r\n // { x: 75.2432432432432, y: 3.01960784313725, size: 1 },\r\n // { x: 75.8918918918919, y: 2.70588235294118, size: 1 },\r\n // { x: 77.8378378378378, y: 3.92156862745098, size: 1 },\r\n // { x: 79.1351351351351, y: 3.88235294117647, size: 1 },\r\n // { x: 81.0810810810811, y: 3.92156862745098, size: 1 },\r\n // { x: 82.3783783783784, y: 4, size: 1 },\r\n // { x: 86.2702702702703, y: 3.92156862745098, size: 1 },\r\n // { x: 86.9189189189189, y: 3.96078431372549, size: 1 },\r\n // { x: 91.4594594594595, y: 3.88235294117647, size: 1 },\r\n // { x: 93.4054054054054, y: 3.88235294117647, size: 1 },\r\n // { x: 102.486486486486, y: 3.88235294117647, size: 1 },\r\n // { x: 105.081081081081, y: 3.72549019607843, size: 1 },\r\n // { x: 119.351351351351, y: 3.25490196078431, size: 1 },\r\n // { x: 122.594594594595, y: 3.41176470588235, size: 1 },\r\n // { x: 124.540540540541, y: 3.29411764705882, size: 1 },\r\n // { x: 132.324324324324, y: 3.37254901960784, size: 1 },\r\n // { x: 138.810810810811, y: 3.80392156862745, size: 1 },\r\n // { x: 144.648648648649, y: 3.45098039215686, size: 1 },\r\n // { x: 146.594594594595, y: 3.41176470588235, size: 1 },\r\n // { x: 150.486486486486, y: 3.76470588235294, size: 1 },\r\n // { x: 153.72972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 161.513513513514, y: 3.33333333333333, size: 1 },\r\n // { x: 166.054054054054, y: 3.33333333333333, size: 1 },\r\n // { x: 169.945945945946, y: 3.6078431372549, size: 1 },\r\n // { x: 170.594594594595, y: 3.37254901960784, size: 1 },\r\n // { x: 179.675675675676, y: 3.41176470588235, size: 1 },\r\n // { x: 212.756756756757, y: 3.45098039215686, size: 1 },\r\n // { x: 217.297297297297, y: 3.45098039215686, size: 1 },\r\n // { x: 217.945945945946, y: 3.49019607843137, size: 1 },\r\n // { x: 221.837837837838, y: 3.33333333333333, size: 1 },\r\n // { x: 225.72972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 229.621621621622, y: 3.84313725490196, size: 1 },\r\n // { x: 235.459459459459, y: 4, size: 1 },\r\n // { x: 236.108108108108, y: 3.49019607843137, size: 1 },\r\n // { x: 240.648648648649, y: 3.88235294117647, size: 1 },\r\n // { x: 246.486486486486, y: 4.07843137254902, size: 1 },\r\n // { x: 248.432432432432, y: 3.2156862745098, size: 1 },\r\n // { x: 249.081081081081, y: 3.29411764705882, size: 1 },\r\n // { x: 249.72972972973, y: 3.09803921568627, size: 1 },\r\n // { x: 273.72972972973, y: 4.03921568627451, size: 1 },\r\n // { x: 276.324324324324, y: 4.07843137254902, size: 1 },\r\n // { x: 276.972972972973, y: 4, size: 1 },\r\n // { x: 277.621621621622, y: 3.92156862745098, size: 1 },\r\n // { x: 280.216216216216, y: 3.68627450980392, size: 1 },\r\n // { x: 284.108108108108, y: 3.88235294117647, size: 1 },\r\n // { x: 286.054054054054, y: 3.88235294117647, size: 1 },\r\n // { x: 287.351351351351, y: 3.80392156862745, size: 1 },\r\n // { x: 289.945945945946, y: 3.25490196078431, size: 1 },\r\n // { x: 290.594594594595, y: 3.17647058823529, size: 1 },\r\n // { x: 291.243243243243, y: 3.25490196078431, size: 1 },\r\n // { x: 291.891891891892, y: 2.98039215686275, size: 1 },\r\n // { x: 293.189189189189, y: 2.74509803921569, size: 1 },\r\n // { x: 312, y: 3.2156862745098, size: 1 },\r\n // { x: 312.648648648649, y: 3.09803921568627, size: 1 },\r\n // { x: 313.297297297297, y: 2.98039215686275, size: 1 },\r\n // { x: 315.243243243243, y: 2.90196078431373, size: 1 },\r\n // { x: 333.405405405405, y: 3.92156862745098, size: 1 },\r\n // { x: 335.351351351351, y: 3.17647058823529, size: 1 },\r\n // { x: 336.648648648649, y: 3.33333333333333, size: 1 },\r\n // { x: 345.081081081081, y: 3.41176470588235, size: 1 },\r\n // { x: 345.72972972973, y: 3.56862745098039, size: 1 },\r\n // { x: 354.162162162162, y: 4.15686274509804, size: 1 },\r\n // { x: 357.405405405405, y: 3.2156862745098, size: 1 },\r\n // { x: 358.702702702703, y: 3.37254901960784, size: 1 },\r\n // { x: 12.3021582733813, y: 4.11764705882353, size: 1 },\r\n // { x: 12.9496402877698, y: 4.03921568627451, size: 1 },\r\n // { x: 60.863309352518, y: 3.05882352941176, size: 1 },\r\n // { x: 80.9352517985612, y: 3.25490196078431, size: 1 },\r\n // { x: 82.8776978417266, y: 2.90196078431373, size: 1 },\r\n // { x: 83.5251798561151, y: 3.05882352941176, size: 1 },\r\n // { x: 84.1726618705036, y: 2.62745098039216, size: 1 },\r\n // { x: 84.8201438848921, y: 2.70588235294118, size: 1 },\r\n // { x: 126.906474820144, y: 3.13725490196078, size: 1 },\r\n // { x: 137.913669064748, y: 3.2156862745098, size: 1 },\r\n // { x: 154.10071942446, y: 4.07843137254902, size: 1 },\r\n // { x: 159.280575539568, y: 3.96078431372549, size: 1 },\r\n // { x: 168.345323741007, y: 3.01960784313725, size: 1 },\r\n // { x: 168.992805755396, y: 3.09803921568627, size: 1 },\r\n // { x: 169.640287769784, y: 3.13725490196078, size: 1 },\r\n // { x: 175.467625899281, y: 4, size: 1 },\r\n // { x: 228.561151079137, y: 3.96078431372549, size: 1 },\r\n // { x: 238.273381294964, y: 3.96078431372549, size: 1 },\r\n // { x: 260.287769784173, y: 4.07843137254902, size: 1 },\r\n // { x: 292.014388489209, y: 4, size: 1 },\r\n // { x: 293.309352517986, y: 4.19607843137255, size: 1 },\r\n // { x: 320.503597122302, y: 3.29411764705882, size: 1 },\r\n // { x: 322.446043165468, y: 3.09803921568627, size: 1 },\r\n // { x: 324.388489208633, y: 4.15686274509804, size: 1 },\r\n // { x: 326.978417266187, y: 4.27450980392157, size: 1 },\r\n // { x: 329.568345323741, y: 4.07843137254902, size: 1 },\r\n // { x: 337.985611510791, y: 4, size: 1 },\r\n // { x: 342.517985611511, y: 2.98039215686275, size: 1 },\r\n // { x: 343.165467625899, y: 3.13725490196078, size: 1 },\r\n // { x: 343.812949640288, y: 2.94117647058824, size: 1 },\r\n // { x: 357.410071942446, y: 4, size: 1 },\r\n // { x: 3.23741007194245, y: 3.09803921568627, size: 1 },\r\n // { x: 3.88489208633094, y: 2.47058823529412, size: 1 },\r\n // { x: 4.53237410071942, y: 2.94117647058824, size: 1 },\r\n // { x: 5.17985611510791, y: 2.86274509803922, size: 1 },\r\n // { x: 25.8992805755396, y: 2.7843137254902, size: 1 },\r\n // { x: 26.5467625899281, y: 2.43137254901961, size: 1 },\r\n // { x: 27.1942446043165, y: 2.70588235294118, size: 1 },\r\n // { x: 46.6187050359712, y: 3.13725490196078, size: 1 },\r\n // { x: 56.9784172661871, y: 4.07843137254902, size: 1 },\r\n // { x: 88.705035971223, y: 3.33333333333333, size: 1 },\r\n // { x: 90, y: 2.86274509803922, size: 1 },\r\n // { x: 90.6474820143885, y: 3.09803921568627, size: 1 },\r\n // { x: 110.719424460432, y: 3.09803921568627, size: 1 },\r\n // { x: 111.36690647482, y: 2.70588235294118, size: 1 },\r\n // { x: 112.014388489209, y: 2.54901960784314, size: 1 },\r\n // { x: 117.194244604317, y: 3.92156862745098, size: 1 },\r\n // { x: 132.73381294964, y: 2.62745098039216, size: 1 },\r\n // { x: 133.381294964029, y: 2.82352941176471, size: 1 },\r\n // { x: 143.093525179856, y: 4, size: 1 },\r\n // { x: 144.388489208633, y: 4, size: 1 },\r\n // { x: 172.230215827338, y: 4.11764705882353, size: 1 },\r\n // { x: 176.762589928058, y: 3.01960784313725, size: 1 },\r\n // { x: 189.712230215827, y: 4, size: 1 },\r\n // { x: 191.007194244604, y: 4.07843137254902, size: 1 },\r\n // { x: 197.482014388489, y: 3.05882352941176, size: 1 },\r\n // { x: 198.129496402878, y: 3.13725490196078, size: 1 },\r\n // { x: 218.848920863309, y: 3.13725490196078, size: 1 },\r\n // { x: 219.496402877698, y: 3.09803921568627, size: 1 },\r\n // { x: 240.863309352518, y: 3.01960784313725, size: 1 },\r\n // { x: 241.510791366906, y: 2.98039215686275, size: 1 },\r\n // { x: 305.611510791367, y: 2.86274509803922, size: 1 },\r\n // { x: 306.258992805755, y: 3.01960784313725, size: 1 },\r\n // { x: 339.928057553957, y: 4, size: 1 },\r\n // { x: 346.402877697842, y: 3.96078431372549, size: 1 },\r\n // { x: 75.7553956834532, y: 2.86274509803922, size: 1 },\r\n // { x: 117.841726618705, y: 3.25490196078431, size: 1 },\r\n // { x: 124.964028776978, y: 3.88235294117647, size: 1 },\r\n // { x: 134.028776978417, y: 4, size: 1 },\r\n // { x: 139.208633093525, y: 3.2156862745098, size: 1 },\r\n // { x: 140.503597122302, y: 3.01960784313725, size: 1 },\r\n // { x: 161.870503597122, y: 2.86274509803922, size: 1 },\r\n // { x: 183.237410071942, y: 3.13725490196078, size: 1 },\r\n // { x: 204.604316546763, y: 2.27450980392157, size: 1 },\r\n // { x: 205.251798561151, y: 2.31372549019608, size: 1 },\r\n // { x: 225.971223021583, y: 2.58823529411765, size: 1 },\r\n // { x: 226.618705035971, y: 2.70588235294118, size: 1 },\r\n // { x: 270, y: 2.54901960784314, size: 1 },\r\n // { x: 290.719424460432, y: 2.58823529411765, size: 1 },\r\n // { x: 291.36690647482, y: 2.43137254901961, size: 1 },\r\n // { x: 312.73381294964, y: 2.98039215686275, size: 1 },\r\n // { x: 334.748201438849, y: 1.80392156862745, size: 1 },\r\n // { x: 4.54054054054054, y: 3.45098039215686, size: 1 },\r\n // { x: 13.6216216216216, y: 3.92156862745098, size: 1 },\r\n // { x: 15.5675675675676, y: 3.13725490196078, size: 1 },\r\n // { x: 34.3783783783784, y: 3.84313725490196, size: 1 },\r\n // { x: 40.8648648648649, y: 3.84313725490196, size: 1 },\r\n // { x: 49.2972972972973, y: 3.92156862745098, size: 1 },\r\n // { x: 55.1351351351351, y: 3.84313725490196, size: 1 },\r\n // { x: 59.027027027027, y: 3.2156862745098, size: 1 },\r\n // { x: 60.972972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 61.6216216216216, y: 3.84313725490196, size: 1 },\r\n // { x: 62.2702702702703, y: 4.07843137254902, size: 1 },\r\n // { x: 65.5135135135135, y: 3.80392156862745, size: 1 },\r\n // { x: 66.8108108108108, y: 4, size: 1 },\r\n // { x: 67.4594594594595, y: 4, size: 1 },\r\n // { x: 68.1081081081081, y: 3.92156862745098, size: 1 },\r\n // { x: 72, y: 3.84313725490196, size: 1 },\r\n // { x: 73.945945945946, y: 3.92156862745098, size: 1 },\r\n // { x: 75.8918918918919, y: 4.03921568627451, size: 1 },\r\n // { x: 77.8378378378378, y: 3.88235294117647, size: 1 },\r\n // { x: 78.4864864864865, y: 3.92156862745098, size: 1 },\r\n // { x: 80.4324324324324, y: 3.2156862745098, size: 1 },\r\n // { x: 81.0810810810811, y: 3.05882352941176, size: 1 },\r\n // { x: 81.7297297297297, y: 3.05882352941176, size: 1 },\r\n // { x: 82.3783783783784, y: 2.58823529411765, size: 1 },\r\n // { x: 88.8648648648649, y: 3.41176470588235, size: 1 },\r\n // { x: 90.8108108108108, y: 3.80392156862745, size: 1 },\r\n // { x: 94.7027027027027, y: 3.92156862745098, size: 1 },\r\n // { x: 105.72972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 108.324324324324, y: 3.80392156862745, size: 1 },\r\n // { x: 112.216216216216, y: 3.84313725490196, size: 1 },\r\n // { x: 121.297297297297, y: 4, size: 1 },\r\n // { x: 123.891891891892, y: 3.2156862745098, size: 1 },\r\n // { x: 125.189189189189, y: 2.03921568627451, size: 1 },\r\n // { x: 125.837837837838, y: 2.3921568627451, size: 1 },\r\n // { x: 126.486486486486, y: 3.29411764705882, size: 1 },\r\n // { x: 151.135135135135, y: 3.96078431372549, size: 1 },\r\n // { x: 155.027027027027, y: 3.92156862745098, size: 1 },\r\n // { x: 155.675675675676, y: 4.07843137254902, size: 1 },\r\n // { x: 168, y: 3.37254901960784, size: 1 },\r\n // { x: 171.243243243243, y: 3.80392156862745, size: 1 },\r\n // { x: 172.540540540541, y: 3.80392156862745, size: 1 },\r\n // { x: 175.783783783784, y: 3.84313725490196, size: 1 },\r\n // { x: 187.459459459459, y: 3.96078431372549, size: 1 },\r\n // { x: 214.054054054054, y: 3.29411764705882, size: 1 },\r\n // { x: 224.432432432432, y: 3.80392156862745, size: 1 },\r\n // { x: 234.162162162162, y: 2.98039215686275, size: 1 },\r\n // { x: 235.459459459459, y: 3.09803921568627, size: 1 },\r\n // { x: 254.918918918919, y: 3.01960784313725, size: 1 },\r\n // { x: 255.567567567568, y: 2.90196078431373, size: 1 },\r\n // { x: 256.216216216216, y: 2.66666666666667, size: 1 },\r\n // { x: 256.864864864865, y: 2.98039215686275, size: 1 },\r\n // { x: 267.891891891892, y: 3.41176470588235, size: 1 },\r\n // { x: 275.675675675676, y: 3.33333333333333, size: 1 },\r\n // { x: 276.972972972973, y: 3.17647058823529, size: 1 },\r\n // { x: 278.918918918919, y: 3.33333333333333, size: 1 },\r\n // { x: 285.405405405405, y: 3.96078431372549, size: 1 },\r\n // { x: 293.837837837838, y: 3.68627450980392, size: 1 },\r\n // { x: 298.378378378378, y: 2.90196078431373, size: 1 },\r\n // { x: 299.027027027027, y: 2.7843137254902, size: 1 },\r\n // { x: 299.675675675676, y: 2.62745098039216, size: 1 },\r\n // { x: 300.324324324324, y: 2.62745098039216, size: 1 },\r\n // { x: 319.135135135135, y: 3.29411764705882, size: 1 },\r\n // { x: 319.783783783784, y: 2.90196078431373, size: 1 },\r\n // { x: 320.432432432432, y: 2.43137254901961, size: 1 },\r\n // { x: 321.081081081081, y: 2.31372549019608, size: 1 },\r\n // { x: 321.72972972973, y: 2.3921568627451, size: 1 },\r\n // { x: 322.378378378378, y: 3.2156862745098, size: 1 },\r\n // { x: 327.567567567568, y: 3.45098039215686, size: 1 },\r\n // { x: 328.216216216216, y: 3.88235294117647, size: 1 },\r\n // { x: 340.540540540541, y: 3.2156862745098, size: 1 },\r\n // { x: 341.837837837838, y: 3.01960784313725, size: 1 },\r\n // { x: 345.081081081081, y: 3.88235294117647, size: 1 },\r\n // { x: 346.378378378378, y: 4, size: 1 },\r\n // { x: 353.513513513513, y: 3.88235294117647, size: 1 },\r\n // { x: 359.351351351351, y: 3.92156862745098, size: 1 },\r\n // { x: 33.6690647482014, y: 3.96078431372549, size: 1 },\r\n // { x: 93.8848920863309, y: 4, size: 1 },\r\n // { x: 112.014388489209, y: 3.09803921568627, size: 1 },\r\n // { x: 112.661870503597, y: 2.90196078431373, size: 1 },\r\n // { x: 113.309352517986, y: 2.86274509803922, size: 1 },\r\n // { x: 132.73381294964, y: 3.2156862745098, size: 1 },\r\n // { x: 155.395683453237, y: 3.25490196078431, size: 1 },\r\n // { x: 157.338129496403, y: 3.96078431372549, size: 1 },\r\n // { x: 176.762589928058, y: 3.13725490196078, size: 1 },\r\n // { x: 177.410071942446, y: 2.86274509803922, size: 1 },\r\n // { x: 197.482014388489, y: 2.74509803921569, size: 1 },\r\n // { x: 199.424460431655, y: 3.01960784313725, size: 1 },\r\n // { x: 218.848920863309, y: 2.90196078431373, size: 1 },\r\n // { x: 220.791366906475, y: 2.62745098039216, size: 1 },\r\n // { x: 236.330935251799, y: 4.03921568627451, size: 1 },\r\n // { x: 240.863309352518, y: 3.05882352941176, size: 1 },\r\n // { x: 241.510791366906, y: 2.94117647058824, size: 1 },\r\n // { x: 242.158273381295, y: 2.90196078431373, size: 1 },\r\n // { x: 272.589928057554, y: 4.03921568627451, size: 1 },\r\n // { x: 283.597122302158, y: 3.13725490196078, size: 1 },\r\n // { x: 284.244604316547, y: 3.13725490196078, size: 1 },\r\n // { x: 348.345323741007, y: 3.2156862745098, size: 1 },\r\n // { x: 119.136690647482, y: 2.82352941176471, size: 1 },\r\n // { x: 119.784172661871, y: 2.7843137254902, size: 1 },\r\n // { x: 181.294964028777, y: 3.09803921568627, size: 1 },\r\n // { x: 182.589928057554, y: 2.94117647058824, size: 1 },\r\n // { x: 183.237410071942, y: 3.17647058823529, size: 1 },\r\n // { x: 277.122302158273, y: 3.96078431372549, size: 1 },\r\n // { x: 277.769784172662, y: 3.92156862745098, size: 1 },\r\n // { x: 308.201438848921, y: 4.07843137254902, size: 1 },\r\n // { x: 311.438848920863, y: 3.01960784313725, size: 1 },\r\n // { x: 312.73381294964, y: 2.90196078431373, size: 1 },\r\n // { x: 313.381294964029, y: 2.66666666666667, size: 1 },\r\n // { x: 314.028776978417, y: 2.90196078431373, size: 1 },\r\n // { x: 334.10071942446, y: 2.70588235294118, size: 1 },\r\n // { x: 355.467625899281, y: 3.2156862745098, size: 1 },\r\n // { x: 59.568345323741, y: 3.2156862745098, size: 1 },\r\n // { x: 91.9424460431655, y: 4.15686274509804, size: 1 },\r\n // { x: 95.8273381294964, y: 4.11764705882353, size: 1 },\r\n // { x: 100.359712230216, y: 4.07843137254902, size: 1 },\r\n // { x: 103.597122302158, y: 3.33333333333333, size: 1 },\r\n // { x: 123.669064748201, y: 3.33333333333333, size: 1 },\r\n // { x: 124.964028776978, y: 2.7843137254902, size: 1 },\r\n // { x: 125.611510791367, y: 2.98039215686275, size: 1 },\r\n // { x: 190.359712230216, y: 3.2156862745098, size: 1 },\r\n // { x: 241.510791366906, y: 4, size: 1 },\r\n // { x: 255.755395683453, y: 3.96078431372549, size: 1 },\r\n // { x: 319.208633093525, y: 2.90196078431373, size: 1 },\r\n // { x: 319.856115107914, y: 2.82352941176471, size: 1 },\r\n // { x: 343.812949640288, y: 3.96078431372549, size: 1 },\r\n // { x: 348.992805755396, y: 3.92156862745098, size: 1 },\r\n // { x: 0.648648648648649, y: 3.37254901960784, size: 1 },\r\n // { x: 1.94594594594595, y: 3.37254901960784, size: 1 },\r\n // { x: 2.59459459459459, y: 3.25490196078431, size: 1 },\r\n // { x: 24, y: 3.37254901960784, size: 1 },\r\n // { x: 24.6486486486486, y: 3.2156862745098, size: 1 },\r\n // { x: 33.0810810810811, y: 4.07843137254902, size: 1 },\r\n // { x: 34.3783783783784, y: 3.96078431372549, size: 1 },\r\n // { x: 72.6486486486486, y: 3.88235294117647, size: 1 },\r\n // { x: 89.5135135135135, y: 3.17647058823529, size: 1 },\r\n // { x: 94.054054054054, y: 3.88235294117647, size: 1 },\r\n // { x: 96.6486486486486, y: 3.88235294117647, size: 1 },\r\n // { x: 99.8918918918919, y: 3.96078431372549, size: 1 },\r\n // { x: 101.837837837838, y: 3.92156862745098, size: 1 },\r\n // { x: 106.378378378378, y: 3.88235294117647, size: 1 },\r\n // { x: 109.621621621622, y: 3.37254901960784, size: 1 },\r\n // { x: 110.27027027027, y: 3.13725490196078, size: 1 },\r\n // { x: 119.351351351351, y: 3.96078431372549, size: 1 },\r\n // { x: 130.378378378378, y: 3.33333333333333, size: 1 },\r\n // { x: 131.027027027027, y: 3.09803921568627, size: 1 },\r\n // { x: 131.675675675676, y: 2.74509803921569, size: 1 },\r\n // { x: 132.324324324324, y: 1.52941176470588, size: 1 },\r\n // { x: 132.972972972973, y: 2.03921568627451, size: 1 },\r\n // { x: 133.621621621622, y: 2.23529411764706, size: 1 },\r\n // { x: 134.27027027027, y: 2.47058823529412, size: 1 },\r\n // { x: 134.918918918919, y: 3.45098039215686, size: 1 },\r\n // { x: 137.513513513514, y: 3.2156862745098, size: 1 },\r\n // { x: 141.405405405405, y: 2.7843137254902, size: 1 },\r\n // { x: 142.054054054054, y: 2.94117647058824, size: 1 },\r\n // { x: 147.891891891892, y: 2.7843137254902, size: 1 },\r\n // { x: 149.189189189189, y: 3.25490196078431, size: 1 },\r\n // { x: 149.837837837838, y: 3.45098039215686, size: 1 },\r\n // { x: 150.486486486486, y: 3.37254901960784, size: 1 },\r\n // { x: 151.135135135135, y: 3.33333333333333, size: 1 },\r\n // { x: 152.432432432432, y: 3.33333333333333, size: 1 },\r\n // { x: 153.72972972973, y: 3.01960784313725, size: 1 },\r\n // { x: 154.378378378378, y: 3.17647058823529, size: 1 },\r\n // { x: 160.216216216216, y: 3.84313725490196, size: 1 },\r\n // { x: 162.162162162162, y: 3.96078431372549, size: 1 },\r\n // { x: 165.405405405405, y: 4.03921568627451, size: 1 },\r\n // { x: 166.702702702703, y: 4.19607843137255, size: 1 },\r\n // { x: 168.648648648649, y: 3.80392156862745, size: 1 },\r\n // { x: 169.297297297297, y: 3.84313725490196, size: 1 },\r\n // { x: 171.891891891892, y: 3.96078431372549, size: 1 },\r\n // { x: 174.486486486486, y: 3.25490196078431, size: 1 },\r\n // { x: 175.135135135135, y: 2.47058823529412, size: 1 },\r\n // { x: 175.783783783784, y: 1.84313725490196, size: 1 },\r\n // { x: 183.567567567568, y: 4.15686274509804, size: 1 },\r\n // { x: 195.243243243243, y: 3.25490196078431, size: 1 },\r\n // { x: 197.189189189189, y: 2.54901960784314, size: 1 },\r\n // { x: 198.486486486486, y: 3.80392156862745, size: 1 },\r\n // { x: 201.72972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 215.351351351351, y: 3.29411764705882, size: 1 },\r\n // { x: 218.594594594595, y: 1.96078431372549, size: 1 },\r\n // { x: 219.243243243243, y: 1.88235294117647, size: 1 },\r\n // { x: 226.378378378378, y: 3.96078431372549, size: 1 },\r\n // { x: 238.702702702703, y: 3.25490196078431, size: 1 },\r\n // { x: 240.648648648649, y: 2.31372549019608, size: 1 },\r\n // { x: 260.108108108108, y: 3.2156862745098, size: 1 },\r\n // { x: 264.648648648649, y: 4.15686274509804, size: 1 },\r\n // { x: 265.297297297297, y: 3.92156862745098, size: 1 },\r\n // { x: 286.702702702703, y: 3.56862745098039, size: 1 },\r\n // { x: 291.891891891892, y: 3.72549019607843, size: 1 },\r\n // { x: 303.567567567568, y: 3.33333333333333, size: 1 },\r\n // { x: 310.702702702703, y: 3.96078431372549, size: 1 },\r\n // { x: 324.324324324324, y: 3.45098039215686, size: 1 },\r\n // { x: 325.621621621622, y: 3.33333333333333, size: 1 },\r\n // { x: 347.027027027027, y: 3.17647058823529, size: 1 },\r\n // { x: 349.621621621622, y: 3.96078431372549, size: 1 },\r\n // { x: 350.918918918919, y: 3.88235294117647, size: 1 },\r\n // { x: 351.567567567568, y: 4, size: 1 },\r\n // { x: 352.216216216216, y: 4.03921568627451, size: 1 },\r\n // { x: 352.864864864865, y: 3.80392156862745, size: 1 },\r\n // { x: 354.162162162162, y: 3.96078431372549, size: 1 },\r\n // { x: 355.459459459459, y: 4.15686274509804, size: 1 },\r\n // { x: 356.108108108108, y: 4.11764705882353, size: 1 },\r\n // { x: 358.054054054054, y: 3.92156862745098, size: 1 },\r\n // { x: 358.702702702703, y: 4.07843137254902, size: 1 },\r\n // { x: 359.351351351351, y: 3.96078431372549, size: 1 },\r\n // { x: 6.47482014388489, y: 4.03921568627451, size: 1 },\r\n // { x: 8.41726618705036, y: 3.2156862745098, size: 1 },\r\n // { x: 9.71223021582734, y: 2.58823529411765, size: 1 },\r\n // { x: 10.3597122302158, y: 2.3921568627451, size: 1 },\r\n // { x: 30.431654676259, y: 2.98039215686275, size: 1 },\r\n // { x: 104.244604316547, y: 3.96078431372549, size: 1 },\r\n // { x: 119.136690647482, y: 3.92156862745098, size: 1 },\r\n // { x: 126.258992805755, y: 4, size: 1 },\r\n // { x: 132.086330935252, y: 4.11764705882353, size: 1 },\r\n // { x: 161.870503597122, y: 2.90196078431373, size: 1 },\r\n // { x: 163.165467625899, y: 2.98039215686275, size: 1 },\r\n // { x: 181.942446043165, y: 3.05882352941176, size: 1 },\r\n // { x: 182.589928057554, y: 2.47058823529412, size: 1 },\r\n // { x: 183.237410071942, y: 2.54901960784314, size: 1 },\r\n // { x: 183.884892086331, y: 2.54901960784314, size: 1 },\r\n // { x: 184.532374100719, y: 2.90196078431373, size: 1 },\r\n // { x: 203.956834532374, y: 2.86274509803922, size: 1 },\r\n // { x: 204.604316546763, y: 3.01960784313725, size: 1 },\r\n // { x: 225.971223021583, y: 2.98039215686275, size: 1 },\r\n // { x: 271.942446043165, y: 3.96078431372549, size: 1 },\r\n // { x: 290.719424460432, y: 2.98039215686275, size: 1 },\r\n // { x: 293.309352517986, y: 4.15686274509804, size: 1 },\r\n // { x: 301.079136690647, y: 3.92156862745098, size: 1 },\r\n // { x: 354.820143884892, y: 3.13725490196078, size: 1 },\r\n // { x: 355.467625899281, y: 2.66666666666667, size: 1 },\r\n // { x: 356.115107913669, y: 2.47058823529412, size: 1 },\r\n // { x: 356.762589928058, y: 2.31372549019608, size: 1 },\r\n // { x: 357.410071942446, y: 2.27450980392157, size: 1 },\r\n // { x: 29.136690647482, y: 3.25490196078431, size: 1 },\r\n // { x: 73.8129496402878, y: 3.29411764705882, size: 1 },\r\n // { x: 102.302158273381, y: 4, size: 1 },\r\n // { x: 104.244604316547, y: 3.13725490196078, size: 1 },\r\n // { x: 104.892086330935, y: 3.25490196078431, size: 1 },\r\n // { x: 146.330935251799, y: 3.01960784313725, size: 1 },\r\n // { x: 147.625899280576, y: 2.74509803921569, size: 1 },\r\n // { x: 148.273381294964, y: 2.58823529411765, size: 1 },\r\n // { x: 166.402877697842, y: 3.09803921568627, size: 1 },\r\n // { x: 167.05035971223, y: 3.01960784313725, size: 1 },\r\n // { x: 167.697841726619, y: 2.70588235294118, size: 1 },\r\n // { x: 168.345323741007, y: 2.7843137254902, size: 1 },\r\n // { x: 168.992805755396, y: 2.62745098039216, size: 1 },\r\n // { x: 169.640287769784, y: 2.86274509803922, size: 1 },\r\n // { x: 178.705035971223, y: 4.07843137254902, size: 1 },\r\n // { x: 189.064748201439, y: 3.13725490196078, size: 1 },\r\n // { x: 189.712230215827, y: 2.47058823529412, size: 1 },\r\n // { x: 211.079136690647, y: 2.98039215686275, size: 1 },\r\n // { x: 211.726618705036, y: 3.13725490196078, size: 1 },\r\n // { x: 275.827338129496, y: 2.50980392156863, size: 1 },\r\n // { x: 276.474820143885, y: 2.74509803921569, size: 1 },\r\n // { x: 297.841726618705, y: 3.37254901960784, size: 1 },\r\n // { x: 306.906474820144, y: 4.15686274509804, size: 1 },\r\n // { x: 327.625899280576, y: 3.96078431372549, size: 1 },\r\n // { x: 30.431654676259, y: 4.15686274509804, size: 1 },\r\n // { x: 31.0791366906475, y: 4.03921568627451, size: 1 },\r\n // { x: 31.726618705036, y: 4, size: 1 },\r\n // { x: 32.3741007194245, y: 3.96078431372549, size: 1 },\r\n // { x: 35.6115107913669, y: 3.92156862745098, size: 1 },\r\n // { x: 36.2589928057554, y: 4.07843137254902, size: 1 },\r\n // { x: 41.4388489208633, y: 4, size: 1 },\r\n // { x: 45.9712230215827, y: 3.05882352941176, size: 1 },\r\n // { x: 67.3381294964029, y: 2.98039215686275, size: 1 },\r\n // { x: 68.6330935251799, y: 2.7843137254902, size: 1 },\r\n // { x: 152.158273381295, y: 3.17647058823529, size: 1 },\r\n // { x: 153.453237410072, y: 3.05882352941176, size: 1 },\r\n // { x: 154.10071942446, y: 3.05882352941176, size: 1 },\r\n // { x: 171.58273381295, y: 4.03921568627451, size: 1 },\r\n // { x: 174.820143884892, y: 2.50980392156863, size: 1 },\r\n // { x: 175.467625899281, y: 2.47058823529412, size: 1 },\r\n // { x: 176.115107913669, y: 2.82352941176471, size: 1 },\r\n // { x: 176.762589928058, y: 2.62745098039216, size: 1 },\r\n // { x: 199.424460431655, y: 4.19607843137255, size: 1 },\r\n // { x: 207.194244604317, y: 4.03921568627451, size: 1 },\r\n // { x: 211.079136690647, y: 4.11764705882353, size: 1 },\r\n // { x: 218.201438848921, y: 2.74509803921569, size: 1 },\r\n // { x: 239.568345323741, y: 3.01960784313725, size: 1 },\r\n // { x: 243.453237410072, y: 4.15686274509804, size: 1 },\r\n // { x: 260.935251798561, y: 2.98039215686275, size: 1 },\r\n // { x: 261.58273381295, y: 2.82352941176471, size: 1 },\r\n // { x: 292.661870503597, y: 3.96078431372549, size: 1 },\r\n // { x: 294.604316546763, y: 4.03921568627451, size: 1 },\r\n // { x: 324.388489208633, y: 3.2156862745098, size: 1 },\r\n // { x: 326.330935251799, y: 2.90196078431373, size: 1 },\r\n // { x: 2.59459459459459, y: 3.41176470588235, size: 1 },\r\n // { x: 10.3783783783784, y: 3.80392156862745, size: 1 },\r\n // { x: 12.972972972973, y: 3.92156862745098, size: 1 },\r\n // { x: 18.1621621621622, y: 4.07843137254902, size: 1 },\r\n // { x: 30.4864864864865, y: 2.90196078431373, size: 1 },\r\n // { x: 31.1351351351351, y: 2.47058823529412, size: 1 },\r\n // { x: 31.7837837837838, y: 2.58823529411765, size: 1 },\r\n // { x: 32.4324324324324, y: 2.86274509803922, size: 1 },\r\n // { x: 36.972972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 53.1891891891892, y: 3.41176470588235, size: 1 },\r\n // { x: 73.2972972972973, y: 3.13725490196078, size: 1 },\r\n // { x: 73.945945945946, y: 3.01960784313725, size: 1 },\r\n // { x: 74.5945945945946, y: 2.98039215686275, size: 1 },\r\n // { x: 80.4324324324324, y: 3.37254901960784, size: 1 },\r\n // { x: 88.2162162162162, y: 3.76470588235294, size: 1 },\r\n // { x: 94.054054054054, y: 3.33333333333333, size: 1 },\r\n // { x: 95.3513513513514, y: 3.29411764705882, size: 1 },\r\n // { x: 96, y: 3.33333333333333, size: 1 },\r\n // { x: 114.810810810811, y: 3.37254901960784, size: 1 },\r\n // { x: 117.405405405405, y: 2.86274509803922, size: 1 },\r\n // { x: 118.054054054054, y: 3.33333333333333, size: 1 },\r\n // { x: 133.621621621622, y: 3.76470588235294, size: 1 },\r\n // { x: 137.513513513514, y: 3.33333333333333, size: 1 },\r\n // { x: 139.459459459459, y: 3.37254901960784, size: 1 },\r\n // { x: 147.243243243243, y: 3.37254901960784, size: 1 },\r\n // { x: 160.216216216216, y: 3.25490196078431, size: 1 },\r\n // { x: 160.864864864865, y: 3.33333333333333, size: 1 },\r\n // { x: 188.756756756757, y: 3.88235294117647, size: 1 },\r\n // { x: 190.702702702703, y: 3.88235294117647, size: 1 },\r\n // { x: 195.243243243243, y: 3.84313725490196, size: 1 },\r\n // { x: 197.837837837838, y: 3.96078431372549, size: 1 },\r\n // { x: 203.675675675676, y: 3.25490196078431, size: 1 },\r\n // { x: 213.405405405405, y: 4, size: 1 },\r\n // { x: 245.189189189189, y: 3.25490196078431, size: 1 },\r\n // { x: 246.486486486486, y: 3.25490196078431, size: 1 },\r\n // { x: 247.783783783784, y: 2.70588235294118, size: 1 },\r\n // { x: 248.432432432432, y: 2.70588235294118, size: 1 },\r\n // { x: 249.081081081081, y: 2.82352941176471, size: 1 },\r\n // { x: 254.918918918919, y: 3.84313725490196, size: 1 },\r\n // { x: 267.891891891892, y: 3.17647058823529, size: 1 },\r\n // { x: 268.540540540541, y: 2.66666666666667, size: 1 },\r\n // { x: 269.189189189189, y: 2.7843137254902, size: 1 },\r\n // { x: 269.837837837838, y: 2.19607843137255, size: 1 },\r\n // { x: 270.486486486487, y: 2.11764705882353, size: 1 },\r\n // { x: 280.864864864865, y: 3.92156862745098, size: 1 },\r\n // { x: 289.297297297297, y: 3.2156862745098, size: 1 },\r\n // { x: 289.945945945946, y: 3.2156862745098, size: 1 },\r\n // { x: 302.918918918919, y: 3.88235294117647, size: 1 },\r\n // { x: 332.756756756757, y: 3.25490196078431, size: 1 },\r\n // { x: 333.405405405405, y: 3.05882352941176, size: 1 },\r\n // { x: 334.054054054054, y: 3.01960784313725, size: 1 },\r\n // { x: 339.243243243243, y: 3.25490196078431, size: 1 },\r\n // { x: 342.486486486487, y: 3.49019607843137, size: 1 },\r\n // { x: 350.27027027027, y: 3.41176470588235, size: 1 },\r\n // { x: 358.054054054054, y: 3.96078431372549, size: 1 },\r\n // { x: 3.88489208633094, y: 3.96078431372549, size: 1 },\r\n // { x: 14.8920863309353, y: 3.05882352941176, size: 1 },\r\n // { x: 16.8345323741007, y: 2.70588235294118, size: 1 },\r\n // { x: 79.6402877697842, y: 3.33333333333333, size: 1 },\r\n // { x: 80.2877697841727, y: 3.29411764705882, size: 1 },\r\n // { x: 80.9352517985612, y: 2.90196078431373, size: 1 },\r\n // { x: 81.5827338129496, y: 2.86274509803922, size: 1 },\r\n // { x: 102.302158273381, y: 3.17647058823529, size: 1 },\r\n // { x: 102.94964028777, y: 2.54901960784314, size: 1 },\r\n // { x: 103.597122302158, y: 2.50980392156863, size: 1 },\r\n // { x: 124.964028776978, y: 3.05882352941176, size: 1 },\r\n // { x: 145.035971223022, y: 2.98039215686275, size: 1 },\r\n // { x: 145.68345323741, y: 2.90196078431373, size: 1 },\r\n // { x: 146.330935251799, y: 1.68627450980392, size: 1 },\r\n // { x: 167.697841726619, y: 2.94117647058824, size: 1 },\r\n // { x: 187.769784172662, y: 3.13725490196078, size: 1 },\r\n // { x: 189.064748201439, y: 2.7843137254902, size: 1 },\r\n // { x: 189.712230215827, y: 2.03921568627451, size: 1 },\r\n // { x: 231.151079136691, y: 3.13725490196078, size: 1 },\r\n // { x: 234.388489208633, y: 3.92156862745098, size: 1 },\r\n // { x: 236.978417266187, y: 3.96078431372549, size: 1 },\r\n // { x: 274.532374100719, y: 3.17647058823529, size: 1 },\r\n // { x: 297.194244604317, y: 2.62745098039216, size: 1 },\r\n // { x: 297.841726618705, y: 2.54901960784314, size: 1 },\r\n // { x: 311.438848920863, y: 3.88235294117647, size: 1 },\r\n // { x: 9.71223021582734, y: 3.96078431372549, size: 1 },\r\n // { x: 18.1294964028777, y: 4.07843137254902, size: 1 },\r\n // { x: 20.0719424460432, y: 4.03921568627451, size: 1 },\r\n // { x: 20.7194244604317, y: 4.03921568627451, size: 1 },\r\n // { x: 43.3812949640288, y: 3.96078431372549, size: 1 },\r\n // { x: 77.0503597122302, y: 3.96078431372549, size: 1 },\r\n // { x: 82.8776978417266, y: 3.92156862745098, size: 1 },\r\n // { x: 88.705035971223, y: 2.58823529411765, size: 1 },\r\n // { x: 90, y: 2.90196078431373, size: 1 },\r\n // { x: 110.071942446043, y: 3.13725490196078, size: 1 },\r\n // { x: 111.36690647482, y: 3.05882352941176, size: 1 },\r\n // { x: 112.014388489209, y: 2.98039215686275, size: 1 },\r\n // { x: 130.791366906475, y: 3.09803921568627, size: 1 },\r\n // { x: 132.086330935252, y: 2.74509803921569, size: 1 },\r\n // { x: 133.381294964029, y: 3.09803921568627, size: 1 },\r\n // { x: 176.115107913669, y: 4, size: 1 },\r\n // { x: 177.410071942446, y: 4.07843137254902, size: 1 },\r\n // { x: 180.647482014388, y: 4.03921568627451, size: 1 },\r\n // { x: 181.294964028777, y: 4.23529411764706, size: 1 },\r\n // { x: 182.589928057554, y: 4.03921568627451, size: 1 },\r\n // { x: 183.237410071942, y: 4.07843137254902, size: 1 },\r\n // { x: 188.41726618705, y: 4.19607843137255, size: 1 },\r\n // { x: 206.546762589928, y: 4.03921568627451, size: 1 },\r\n // { x: 207.841726618705, y: 4.03921568627451, size: 1 },\r\n // { x: 223.381294964029, y: 3.96078431372549, size: 1 },\r\n // { x: 224.676258992806, y: 3.96078431372549, size: 1 },\r\n // { x: 261.58273381295, y: 2.94117647058824, size: 1 },\r\n // { x: 262.877697841727, y: 3.01960784313725, size: 1 },\r\n // { x: 270, y: 4, size: 1 },\r\n // { x: 271.942446043165, y: 3.92156862745098, size: 1 },\r\n // { x: 282.302158273381, y: 2.7843137254902, size: 1 },\r\n // { x: 282.94964028777, y: 2.62745098039216, size: 1 },\r\n // { x: 283.597122302158, y: 2.50980392156863, size: 1 },\r\n // { x: 284.244604316547, y: 2.50980392156863, size: 1 },\r\n // { x: 322.446043165468, y: 4.03921568627451, size: 1 },\r\n // { x: 325.68345323741, y: 3.2156862745098, size: 1 },\r\n // { x: 336.043165467626, y: 4, size: 1 },\r\n // { x: 347.05035971223, y: 3.25490196078431, size: 1 },\r\n // { x: 354.172661870504, y: 3.2156862745098, size: 1 },\r\n // { x: 7.12230215827338, y: 3.05882352941176, size: 1 },\r\n // { x: 9.06474820143885, y: 3.05882352941176, size: 1 },\r\n // { x: 80.9352517985612, y: 4, size: 1 },\r\n // { x: 91.9424460431655, y: 4.03921568627451, size: 1 },\r\n // { x: 130.143884892086, y: 4.03921568627451, size: 1 },\r\n // { x: 143.741007194245, y: 4.03921568627451, size: 1 },\r\n // { x: 159.928057553957, y: 3.17647058823529, size: 1 },\r\n // { x: 195.539568345324, y: 3.88235294117647, size: 1 },\r\n // { x: 201.36690647482, y: 3.17647058823529, size: 1 },\r\n // { x: 202.661870503597, y: 3.05882352941176, size: 1 },\r\n // { x: 203.309352517986, y: 2.15686274509804, size: 1 },\r\n // { x: 254.460431654676, y: 3.88235294117647, size: 1 },\r\n // { x: 257.697841726619, y: 4, size: 1 },\r\n // { x: 260.287769784173, y: 4.03921568627451, size: 1 },\r\n // { x: 263.525179856115, y: 4.03921568627451, size: 1 },\r\n // { x: 290.071942446043, y: 3.01960784313725, size: 1 },\r\n // { x: 314.028776978417, y: 4.19607843137255, size: 1 },\r\n // { x: 332.805755395683, y: 2.58823529411765, size: 1 },\r\n // { x: 333.453237410072, y: 3.25490196078431, size: 1 },\r\n // { x: 356.115107913669, y: 3.29411764705882, size: 1 },\r\n // { x: 5.18918918918919, y: 3.41176470588235, size: 1 },\r\n // { x: 14.9189189189189, y: 3.25490196078431, size: 1 },\r\n // { x: 16.2162162162162, y: 2.90196078431373, size: 1 },\r\n // { x: 21.4054054054054, y: 4, size: 1 },\r\n // { x: 27.8918918918919, y: 3.96078431372549, size: 1 },\r\n // { x: 35.027027027027, y: 3.92156862745098, size: 1 },\r\n // { x: 41.5135135135135, y: 3.92156862745098, size: 1 },\r\n // { x: 43.4594594594595, y: 3.84313725490196, size: 1 },\r\n // { x: 58.3783783783784, y: 3.2156862745098, size: 1 },\r\n // { x: 59.027027027027, y: 2.98039215686275, size: 1 },\r\n // { x: 60.3243243243243, y: 3.96078431372549, size: 1 },\r\n // { x: 60.972972972973, y: 3.92156862745098, size: 1 },\r\n // { x: 64.8648648648649, y: 3.84313725490196, size: 1 },\r\n // { x: 66.1621621621622, y: 3.96078431372549, size: 1 },\r\n // { x: 67.4594594594595, y: 3.84313725490196, size: 1 },\r\n // { x: 68.7567567567568, y: 4.03921568627451, size: 1 },\r\n // { x: 69.4054054054054, y: 3.88235294117647, size: 1 },\r\n // { x: 70.054054054054, y: 3.88235294117647, size: 1 },\r\n // { x: 70.7027027027027, y: 3.96078431372549, size: 1 },\r\n // { x: 71.3513513513514, y: 4.19607843137255, size: 1 },\r\n // { x: 76.5405405405405, y: 4, size: 1 },\r\n // { x: 79.1351351351351, y: 3.37254901960784, size: 1 },\r\n // { x: 80.4324324324324, y: 3.17647058823529, size: 1 },\r\n // { x: 81.0810810810811, y: 2.90196078431373, size: 1 },\r\n // { x: 84.972972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 88.8648648648649, y: 3.88235294117647, size: 1 },\r\n // { x: 96, y: 3.84313725490196, size: 1 },\r\n // { x: 96.6486486486486, y: 3.76470588235294, size: 1 },\r\n // { x: 103.783783783784, y: 3.72549019607843, size: 1 },\r\n // { x: 113.513513513514, y: 3.84313725490196, size: 1 },\r\n // { x: 136.216216216216, y: 3.92156862745098, size: 1 },\r\n // { x: 138.810810810811, y: 3.84313725490196, size: 1 },\r\n // { x: 145.297297297297, y: 3.09803921568627, size: 1 },\r\n // { x: 145.945945945946, y: 3.09803921568627, size: 1 },\r\n // { x: 165.405405405405, y: 3.05882352941176, size: 1 },\r\n // { x: 166.702702702703, y: 2.90196078431373, size: 1 },\r\n // { x: 167.351351351351, y: 2.3921568627451, size: 1 },\r\n // { x: 178.378378378378, y: 4, size: 1 },\r\n // { x: 188.756756756757, y: 2.82352941176471, size: 1 },\r\n // { x: 189.405405405405, y: 2.74509803921569, size: 1 },\r\n // { x: 192.648648648649, y: 3.88235294117647, size: 1 },\r\n // { x: 208.864864864865, y: 3.37254901960784, size: 1 },\r\n // { x: 209.513513513514, y: 3.33333333333333, size: 1 },\r\n // { x: 210.810810810811, y: 3.17647058823529, size: 1 },\r\n // { x: 211.459459459459, y: 4.03921568627451, size: 1 },\r\n // { x: 213.405405405405, y: 3.80392156862745, size: 1 },\r\n // { x: 214.054054054054, y: 4.15686274509804, size: 1 },\r\n // { x: 214.702702702703, y: 4.27450980392157, size: 1 },\r\n // { x: 217.297297297297, y: 3.96078431372549, size: 1 },\r\n // { x: 220.540540540541, y: 3.92156862745098, size: 1 },\r\n // { x: 222.486486486486, y: 4, size: 1 },\r\n // { x: 223.783783783784, y: 3.84313725490196, size: 1 },\r\n // { x: 225.72972972973, y: 3.96078431372549, size: 1 },\r\n // { x: 228.324324324324, y: 3.96078431372549, size: 1 },\r\n // { x: 228.972972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 229.621621621622, y: 3.88235294117647, size: 1 },\r\n // { x: 234.810810810811, y: 4.03921568627451, size: 1 },\r\n // { x: 238.702702702703, y: 4.03921568627451, size: 1 },\r\n // { x: 239.351351351351, y: 4.11764705882353, size: 1 },\r\n // { x: 240, y: 4.15686274509804, size: 1 },\r\n // { x: 241.297297297297, y: 4.03921568627451, size: 1 },\r\n // { x: 243.243243243243, y: 3.92156862745098, size: 1 },\r\n // { x: 245.837837837838, y: 3.92156862745098, size: 1 },\r\n // { x: 248.432432432432, y: 4.03921568627451, size: 1 },\r\n // { x: 249.081081081081, y: 4, size: 1 },\r\n // { x: 251.675675675676, y: 3.96078431372549, size: 1 },\r\n // { x: 252.324324324324, y: 3.29411764705882, size: 1 },\r\n // { x: 252.972972972973, y: 3.25490196078431, size: 1 },\r\n // { x: 253.621621621622, y: 2.82352941176471, size: 1 },\r\n // { x: 254.27027027027, y: 2.58823529411765, size: 1 },\r\n // { x: 265.297297297297, y: 4.07843137254902, size: 1 },\r\n // { x: 275.027027027027, y: 3.01960784313725, size: 1 },\r\n // { x: 275.675675675676, y: 2.98039215686275, size: 1 },\r\n // { x: 286.054054054054, y: 3.92156862745098, size: 1 },\r\n // { x: 298.378378378378, y: 3.88235294117647, size: 1 },\r\n // { x: 299.675675675676, y: 3.96078431372549, size: 1 },\r\n // { x: 304.216216216216, y: 3.88235294117647, size: 1 },\r\n // { x: 305.513513513513, y: 3.80392156862745, size: 1 },\r\n // { x: 306.162162162162, y: 3.96078431372549, size: 1 },\r\n // { x: 312, y: 3.84313725490196, size: 1 },\r\n // { x: 313.297297297297, y: 3.84313725490196, size: 1 },\r\n // { x: 314.594594594595, y: 3.96078431372549, size: 1 },\r\n // { x: 315.243243243243, y: 3.92156862745098, size: 1 },\r\n // { x: 322.378378378378, y: 3.72549019607843, size: 1 },\r\n // { x: 339.891891891892, y: 3.29411764705882, size: 1 },\r\n // { x: 353.513513513513, y: 3.96078431372549, size: 1 },\r\n // { x: 354.162162162162, y: 3.92156862745098, size: 1 },\r\n // { x: 0, y: 3.05882352941176, size: 1 },\r\n // { x: 1.94244604316547, y: 2.90196078431373, size: 1 },\r\n // { x: 45.3237410071942, y: 2.98039215686275, size: 1 },\r\n // { x: 47.2661870503597, y: 3.92156862745098, size: 1 },\r\n // { x: 50.5035971223022, y: 4.07843137254902, size: 1 },\r\n // { x: 56.3309352517986, y: 4.07843137254902, size: 1 },\r\n // { x: 59.568345323741, y: 4, size: 1 },\r\n // { x: 88.0575539568345, y: 2.90196078431373, size: 1 },\r\n // { x: 88.705035971223, y: 2.66666666666667, size: 1 },\r\n // { x: 98.4172661870504, y: 4.07843137254902, size: 1 },\r\n // { x: 99.7122302158273, y: 4.03921568627451, size: 1 },\r\n // { x: 106.187050359712, y: 4.03921568627451, size: 1 },\r\n // { x: 131.438848920863, y: 2.54901960784314, size: 1 },\r\n // { x: 132.086330935252, y: 2.98039215686275, size: 1 },\r\n // { x: 152.805755395683, y: 2.98039215686275, size: 1 },\r\n // { x: 201.36690647482, y: 3.88235294117647, size: 1 },\r\n // { x: 220.143884892086, y: 4, size: 1 },\r\n // { x: 224.028776978417, y: 4.07843137254902, size: 1 },\r\n // { x: 224.676258992806, y: 4, size: 1 },\r\n // { x: 225.971223021583, y: 4, size: 1 },\r\n // { x: 235.68345323741, y: 4.03921568627451, size: 1 },\r\n // { x: 302.374100719424, y: 3.09803921568627, size: 1 },\r\n // { x: 303.669064748201, y: 3.09803921568627, size: 1 },\r\n // { x: 304.964028776978, y: 3.09803921568627, size: 1 },\r\n // { x: 347.05035971223, y: 1.72549019607843, size: 1 },\r\n // { x: 347.697841726619, y: 1.72549019607843, size: 1 },\r\n // { x: 348.345323741007, y: 1.6078431372549, size: 1 },\r\n // { x: 348.992805755396, y: 1.64705882352941, size: 1 },\r\n // { x: 351.58273381295, y: 3.09803921568627, size: 1 },\r\n // { x: 356.762589928058, y: 2.86274509803922, size: 1 },\r\n // { x: 2.58992805755396, y: 2.70588235294118, size: 1 },\r\n // { x: 7.76978417266187, y: 3.2156862745098, size: 1 },\r\n // { x: 8.41726618705036, y: 2.94117647058824, size: 1 },\r\n // { x: 9.06474820143885, y: 2.62745098039216, size: 1 },\r\n // { x: 27.841726618705, y: 3.96078431372549, size: 1 },\r\n // { x: 29.136690647482, y: 3.29411764705882, size: 1 },\r\n // { x: 31.0791366906475, y: 3.92156862745098, size: 1 },\r\n // { x: 36.9064748201439, y: 3.92156862745098, size: 1 },\r\n // { x: 41.4388489208633, y: 4.07843137254902, size: 1 },\r\n // { x: 42.0863309352518, y: 4.07843137254902, size: 1 },\r\n // { x: 44.0287769784173, y: 4.07843137254902, size: 1 },\r\n // { x: 46.6187050359712, y: 4.07843137254902, size: 1 },\r\n // { x: 48.5611510791367, y: 4, size: 1 },\r\n // { x: 51.7985611510791, y: 2.66666666666667, size: 1 },\r\n // { x: 52.4460431654676, y: 2.74509803921569, size: 1 },\r\n // { x: 72.5179856115108, y: 2.98039215686275, size: 1 },\r\n // { x: 73.1654676258993, y: 2.74509803921569, size: 1 },\r\n // { x: 73.8129496402878, y: 1.96078431372549, size: 1 },\r\n // { x: 95.1798561151079, y: 2.98039215686275, size: 1 },\r\n // { x: 137.26618705036, y: 3.13725490196078, size: 1 },\r\n // { x: 138.561151079137, y: 2.3921568627451, size: 1 },\r\n // { x: 224.676258992806, y: 2.74509803921569, size: 1 },\r\n // { x: 293.309352517986, y: 3.92156862745098, size: 1 },\r\n // { x: 295.251798561151, y: 4.03921568627451, size: 1 },\r\n // { x: 336.043165467626, y: 4.03921568627451, size: 1 },\r\n // { x: 344.460431654676, y: 3.92156862745098, size: 1 },\r\n // { x: 345.755395683453, y: 3.84313725490196, size: 1 },\r\n // { x: 350.935251798561, y: 4.07843137254902, size: 1 },\r\n // { x: 15.5395683453237, y: 3.25490196078431, size: 1 },\r\n // { x: 36.9064748201439, y: 2.86274509803922, size: 1 },\r\n // { x: 37.5539568345324, y: 2.82352941176471, size: 1 },\r\n // { x: 38.8489208633094, y: 3.01960784313725, size: 1 },\r\n // { x: 56.9784172661871, y: 3.25490196078431, size: 1 },\r\n // { x: 58.273381294964, y: 3.05882352941176, size: 1 },\r\n // { x: 58.9208633093525, y: 2.94117647058824, size: 1 },\r\n // { x: 59.568345323741, y: 2.90196078431373, size: 1 },\r\n // { x: 60.863309352518, y: 2.82352941176471, size: 1 },\r\n // { x: 101.654676258993, y: 2.98039215686275, size: 1 },\r\n // { x: 102.302158273381, y: 2.86274509803922, size: 1 },\r\n // { x: 102.94964028777, y: 2.90196078431373, size: 1 },\r\n // { x: 103.597122302158, y: 2.62745098039216, size: 1 },\r\n // { x: 123.021582733813, y: 3.2156862745098, size: 1 },\r\n // { x: 123.669064748201, y: 2.94117647058824, size: 1 },\r\n // { x: 145.035971223022, y: 3.17647058823529, size: 1 },\r\n // { x: 151.510791366906, y: 4.07843137254902, size: 1 },\r\n // { x: 153.453237410072, y: 4, size: 1 },\r\n // { x: 163.165467625899, y: 4.03921568627451, size: 1 },\r\n // { x: 210.431654676259, y: 3.09803921568627, size: 1 },\r\n // { x: 214.964028776978, y: 4.03921568627451, size: 1 },\r\n // { x: 275.179856115108, y: 3.17647058823529, size: 1 },\r\n // { x: 335.395683453237, y: 3.96078431372549, size: 1 },\r\n // { x: 339.280575539568, y: 2.98039215686275, size: 1 },\r\n // { x: 339.928057553957, y: 2.86274509803922, size: 1 },\r\n // { x: 340.575539568345, y: 2.82352941176471, size: 1 },\r\n // { x: 0.647482014388489, y: 2.98039215686275, size: 1 },\r\n // { x: 1.29496402877698, y: 2.94117647058824, size: 1 },\r\n // { x: 1.94244604316547, y: 3.01960784313725, size: 1 },\r\n // { x: 87.410071942446, y: 2.7843137254902, size: 1 },\r\n // { x: 88.0575539568345, y: 3.05882352941176, size: 1 },\r\n // { x: 159.928057553957, y: 3.96078431372549, size: 1 },\r\n // { x: 163.165467625899, y: 4.11764705882353, size: 1 },\r\n // { x: 175.467625899281, y: 2.90196078431373, size: 1 },\r\n // { x: 192.94964028777, y: 3.29411764705882, size: 1 },\r\n // { x: 194.892086330935, y: 3.09803921568627, size: 1 },\r\n // { x: 195.539568345324, y: 2.94117647058824, size: 1 },\r\n // { x: 196.187050359712, y: 2.98039215686275, size: 1 },\r\n // { x: 196.834532374101, y: 2.74509803921569, size: 1 },\r\n // { x: 216.906474820144, y: 2.62745098039216, size: 1 },\r\n // { x: 217.553956834532, y: 2.15686274509804, size: 1 },\r\n // { x: 218.201438848921, y: 2.43137254901961, size: 1 },\r\n // { x: 218.848920863309, y: 2.35294117647059, size: 1 },\r\n // { x: 282.94964028777, y: 3.29411764705882, size: 1 },\r\n // { x: 303.021582733813, y: 2.82352941176471, size: 1 },\r\n // { x: 303.669064748201, y: 2.94117647058824, size: 1 },\r\n // { x: 304.964028776978, y: 2.98039215686275, size: 1 },\r\n // { x: 336.690647482014, y: 3.25490196078431, size: 1 },\r\n // { x: 354.172661870504, y: 3.96078431372549, size: 1 },\r\n // { x: 6.48648648648649, y: 3.33333333333333, size: 1 },\r\n // { x: 29.1891891891892, y: 3.25490196078431, size: 1 },\r\n // { x: 30.4864864864865, y: 3.2156862745098, size: 1 },\r\n // { x: 31.1351351351351, y: 3.05882352941176, size: 1 },\r\n // { x: 44.1081081081081, y: 3.88235294117647, size: 1 },\r\n // { x: 48, y: 4, size: 1 },\r\n // { x: 52.5405405405405, y: 3.01960784313725, size: 1 },\r\n // { x: 53.1891891891892, y: 2.98039215686275, size: 1 },\r\n // { x: 57.7297297297297, y: 4.03921568627451, size: 1 },\r\n // { x: 60.972972972973, y: 3.76470588235294, size: 1 },\r\n // { x: 62.2702702702703, y: 3.68627450980392, size: 1 },\r\n // { x: 65.5135135135135, y: 4, size: 1 },\r\n // { x: 73.945945945946, y: 2.70588235294118, size: 1 },\r\n // { x: 74.5945945945946, y: 2.82352941176471, size: 1 },\r\n // { x: 91.4594594594595, y: 3.84313725490196, size: 1 },\r\n // { x: 94.054054054054, y: 3.37254901960784, size: 1 },\r\n // { x: 101.837837837838, y: 3.45098039215686, size: 1 },\r\n // { x: 116.108108108108, y: 3.01960784313725, size: 1 },\r\n // { x: 144, y: 3.88235294117647, size: 1 },\r\n // { x: 151.783783783784, y: 4.03921568627451, size: 1 },\r\n // { x: 155.675675675676, y: 3.88235294117647, size: 1 },\r\n // { x: 158.918918918919, y: 2.90196078431373, size: 1 },\r\n // { x: 159.567567567568, y: 2.58823529411765, size: 1 },\r\n // { x: 162.810810810811, y: 3.45098039215686, size: 1 },\r\n // { x: 165.405405405405, y: 3.41176470588235, size: 1 },\r\n // { x: 179.027027027027, y: 3.41176470588235, size: 1 },\r\n // { x: 180.324324324324, y: 3.33333333333333, size: 1 },\r\n // { x: 180.972972972973, y: 2.70588235294118, size: 1 },\r\n // { x: 201.72972972973, y: 3.33333333333333, size: 1 },\r\n // { x: 204.972972972973, y: 4, size: 1 },\r\n // { x: 208.216216216216, y: 4.15686274509804, size: 1 },\r\n // { x: 208.864864864865, y: 3.96078431372549, size: 1 },\r\n // { x: 209.513513513514, y: 4.19607843137255, size: 1 },\r\n // { x: 210.162162162162, y: 3.88235294117647, size: 1 },\r\n // { x: 219.243243243243, y: 3.88235294117647, size: 1 },\r\n // { x: 223.783783783784, y: 3.33333333333333, size: 1 },\r\n // { x: 226.378378378378, y: 3.92156862745098, size: 1 },\r\n // { x: 227.675675675676, y: 3.92156862745098, size: 1 },\r\n // { x: 230.918918918919, y: 3.96078431372549, size: 1 },\r\n // { x: 234.162162162162, y: 3.88235294117647, size: 1 },\r\n // { x: 236.756756756757, y: 3.88235294117647, size: 1 },\r\n // { x: 243.243243243243, y: 4, size: 1 },\r\n // { x: 247.135135135135, y: 3.25490196078431, size: 1 },\r\n // { x: 258.810810810811, y: 3.45098039215686, size: 1 },\r\n // { x: 267.243243243243, y: 3.05882352941176, size: 1 },\r\n // { x: 267.891891891892, y: 3.01960784313725, size: 1 },\r\n // { x: 277.621621621622, y: 3.76470588235294, size: 1 },\r\n // { x: 288.648648648649, y: 2.90196078431373, size: 1 },\r\n // { x: 289.945945945946, y: 2.82352941176471, size: 1 },\r\n // { x: 290.594594594595, y: 2.90196078431373, size: 1 },\r\n // { x: 313.945945945946, y: 3.84313725490196, size: 1 },\r\n // { x: 319.783783783784, y: 4.03921568627451, size: 1 },\r\n // { x: 320.432432432432, y: 3.92156862745098, size: 1 },\r\n // { x: 323.675675675676, y: 3.88235294117647, size: 1 },\r\n // { x: 332.108108108108, y: 3.2156862745098, size: 1 },\r\n // { x: 333.405405405405, y: 2.62745098039216, size: 1 },\r\n // { x: 334.054054054054, y: 2.58823529411765, size: 1 },\r\n // { x: 353.513513513513, y: 3.2156862745098, size: 1 },\r\n // { x: 354.162162162162, y: 3.25490196078431, size: 1 },\r\n // { x: 354.810810810811, y: 3.2156862745098, size: 1 },\r\n // { x: 355.459459459459, y: 3.17647058823529, size: 1 },\r\n // { x: 15.5395683453237, y: 2.70588235294118, size: 1 },\r\n // { x: 38.8489208633094, y: 4, size: 1 },\r\n // { x: 45.3237410071942, y: 4.23529411764706, size: 1 },\r\n // { x: 64.1007194244604, y: 4, size: 1 },\r\n // { x: 66.0431654676259, y: 4, size: 1 },\r\n // { x: 80.2877697841727, y: 3.01960784313725, size: 1 },\r\n // { x: 80.9352517985612, y: 2.74509803921569, size: 1 },\r\n // { x: 81.5827338129496, y: 2.70588235294118, size: 1 },\r\n // { x: 82.2302158273381, y: 2.66666666666667, size: 1 },\r\n // { x: 101.654676258993, y: 2.86274509803922, size: 1 },\r\n // { x: 102.302158273381, y: 2.7843137254902, size: 1 },\r\n // { x: 103.597122302158, y: 3.13725490196078, size: 1 },\r\n // { x: 145.035971223022, y: 2.62745098039216, size: 1 },\r\n // { x: 145.68345323741, y: 3.13725490196078, size: 1 },\r\n // { x: 187.769784172662, y: 2.94117647058824, size: 1 },\r\n // { x: 230.503597122302, y: 3.33333333333333, size: 1 },\r\n // { x: 231.151079136691, y: 2.94117647058824, size: 1 },\r\n // { x: 253.165467625899, y: 2.98039215686275, size: 1 },\r\n // { x: 273.884892086331, y: 3.17647058823529, size: 1 },\r\n // { x: 274.532374100719, y: 3.05882352941176, size: 1 },\r\n // { x: 317.26618705036, y: 2.3921568627451, size: 1 },\r\n // { x: 317.913669064748, y: 2.3921568627451, size: 1 },\r\n // { x: 339.280575539568, y: 2.47058823529412, size: 1 },\r\n // { x: 9.06474820143885, y: 4.03921568627451, size: 1 },\r\n // { x: 22.6618705035971, y: 2.03921568627451, size: 1 },\r\n // { x: 44.0287769784173, y: 2.66666666666667, size: 1 },\r\n // { x: 86.1151079136691, y: 3.13725490196078, size: 1 },\r\n // { x: 86.7625899280576, y: 1.80392156862745, size: 1 },\r\n // { x: 87.410071942446, y: 1.68627450980392, size: 1 },\r\n // { x: 151.510791366906, y: 2.62745098039216, size: 1 },\r\n // { x: 168.992805755396, y: 4.07843137254902, size: 1 },\r\n // { x: 193.597122302158, y: 3.25490196078431, size: 1 },\r\n // { x: 218.848920863309, y: 4.03921568627451, size: 1 },\r\n // { x: 231.151079136691, y: 4.07843137254902, size: 1 },\r\n // { x: 244.10071942446, y: 4, size: 1 },\r\n // { x: 244.748201438849, y: 4.03921568627451, size: 1 },\r\n // { x: 246.043165467626, y: 4.07843137254902, size: 1 },\r\n // { x: 250.575539568345, y: 4, size: 1 },\r\n // { x: 252.517985611511, y: 4.11764705882353, size: 1 },\r\n // { x: 260.287769784173, y: 3.09803921568627, size: 1 },\r\n // { x: 260.935251798561, y: 3.01960784313725, size: 1 },\r\n // { x: 281.654676258993, y: 2.90196078431373, size: 1 },\r\n // { x: 303.021582733813, y: 2.19607843137255, size: 1 },\r\n // { x: 303.669064748201, y: 2.47058823529412, size: 1 },\r\n // { x: 304.31654676259, y: 2.50980392156863, size: 1 },\r\n // { x: 304.964028776978, y: 2.62745098039216, size: 1 },\r\n // { x: 324.388489208633, y: 2.90196078431373, size: 1 },\r\n // { x: 325.035971223022, y: 2.7843137254902, size: 1 },\r\n // { x: 346.402877697842, y: 3.09803921568627, size: 1 },\r\n // { x: 5.83783783783784, y: 3.33333333333333, size: 1 },\r\n // { x: 7.78378378378378, y: 3.29411764705882, size: 1 },\r\n // { x: 9.08108108108108, y: 3.92156862745098, size: 1 },\r\n // { x: 14.2702702702703, y: 3.92156862745098, size: 1 },\r\n // { x: 17.5135135135135, y: 3.92156862745098, size: 1 },\r\n // { x: 20.1081081081081, y: 3.92156862745098, size: 1 },\r\n // { x: 22.0540540540541, y: 4, size: 1 },\r\n // { x: 24, y: 3.80392156862745, size: 1 },\r\n // { x: 28.5405405405405, y: 3.41176470588235, size: 1 },\r\n // { x: 29.1891891891892, y: 3.09803921568627, size: 1 },\r\n // { x: 29.8378378378378, y: 3.09803921568627, size: 1 },\r\n // { x: 33.0810810810811, y: 4.11764705882353, size: 1 },\r\n // { x: 44.1081081081081, y: 3.92156862745098, size: 1 },\r\n // { x: 46.0540540540541, y: 3.88235294117647, size: 1 },\r\n // { x: 48.6486486486486, y: 3.92156862745098, size: 1 },\r\n // { x: 51.2432432432432, y: 2.7843137254902, size: 1 },\r\n // { x: 55.7837837837838, y: 3.80392156862745, size: 1 },\r\n // { x: 70.7027027027027, y: 3.33333333333333, size: 1 },\r\n // { x: 72.6486486486486, y: 3.05882352941176, size: 1 },\r\n // { x: 73.2972972972973, y: 3.25490196078431, size: 1 },\r\n // { x: 111.567567567568, y: 3.41176470588235, size: 1 },\r\n // { x: 115.459459459459, y: 3.17647058823529, size: 1 },\r\n // { x: 125.189189189189, y: 3.92156862745098, size: 1 },\r\n // { x: 136.216216216216, y: 3.33333333333333, size: 1 },\r\n // { x: 136.864864864865, y: 3.13725490196078, size: 1 },\r\n // { x: 137.513513513514, y: 2.98039215686275, size: 1 },\r\n // { x: 158.918918918919, y: 3.13725490196078, size: 1 },\r\n // { x: 166.054054054054, y: 3.84313725490196, size: 1 },\r\n // { x: 168.648648648649, y: 3.92156862745098, size: 1 },\r\n // { x: 197.189189189189, y: 3.84313725490196, size: 1 },\r\n // { x: 199.135135135135, y: 3.80392156862745, size: 1 },\r\n // { x: 206.918918918919, y: 3.76470588235294, size: 1 },\r\n // { x: 207.567567567568, y: 4.31372549019608, size: 1 },\r\n // { x: 223.135135135135, y: 3.25490196078431, size: 1 },\r\n // { x: 243.891891891892, y: 3.05882352941176, size: 1 },\r\n // { x: 245.189189189189, y: 3.05882352941176, size: 1 },\r\n // { x: 245.837837837838, y: 3.09803921568627, size: 1 },\r\n // { x: 247.783783783784, y: 3.25490196078431, size: 1 },\r\n // { x: 267.243243243243, y: 2.94117647058824, size: 1 },\r\n // { x: 267.891891891892, y: 3.33333333333333, size: 1 },\r\n // { x: 273.72972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 274.378378378378, y: 3.80392156862745, size: 1 },\r\n // { x: 278.918918918919, y: 3.84313725490196, size: 1 },\r\n // { x: 281.513513513513, y: 3.88235294117647, size: 1 },\r\n // { x: 282.162162162162, y: 3.92156862745098, size: 1 },\r\n // { x: 285.405405405405, y: 4.03921568627451, size: 1 },\r\n // { x: 288.648648648649, y: 3.25490196078431, size: 1 },\r\n // { x: 289.945945945946, y: 2.74509803921569, size: 1 },\r\n // { x: 290.594594594595, y: 2.98039215686275, size: 1 },\r\n // { x: 295.135135135135, y: 3.92156862745098, size: 1 },\r\n // { x: 308.756756756757, y: 3.17647058823529, size: 1 },\r\n // { x: 309.405405405405, y: 3.33333333333333, size: 1 },\r\n // { x: 310.702702702703, y: 3.01960784313725, size: 1 },\r\n // { x: 311.351351351351, y: 3.29411764705882, size: 1 },\r\n // { x: 317.837837837838, y: 4.03921568627451, size: 1 },\r\n // { x: 321.72972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 322.378378378378, y: 3.92156862745098, size: 1 },\r\n // { x: 323.675675675676, y: 4.07843137254902, size: 1 },\r\n // { x: 324.972972972973, y: 4.07843137254902, size: 1 },\r\n // { x: 325.621621621622, y: 4, size: 1 },\r\n // { x: 328.216216216216, y: 4, size: 1 },\r\n // { x: 334.054054054054, y: 3.96078431372549, size: 1 },\r\n // { x: 334.702702702703, y: 3.92156862745098, size: 1 },\r\n // { x: 339.891891891892, y: 3.96078431372549, size: 1 },\r\n // { x: 341.189189189189, y: 3.84313725490196, size: 1 },\r\n // { x: 343.135135135135, y: 4, size: 1 },\r\n // { x: 343.783783783784, y: 4.19607843137255, size: 1 },\r\n // { x: 349.621621621622, y: 3.92156862745098, size: 1 },\r\n // { x: 355.459459459459, y: 3.05882352941176, size: 1 },\r\n // { x: 6.47482014388489, y: 3.96078431372549, size: 1 },\r\n // { x: 7.12230215827338, y: 4.07843137254902, size: 1 },\r\n // { x: 14.8920863309353, y: 2.94117647058824, size: 1 },\r\n // { x: 15.5395683453237, y: 2.74509803921569, size: 1 },\r\n // { x: 19.4244604316547, y: 3.84313725490196, size: 1 },\r\n // { x: 37.5539568345324, y: 2.90196078431373, size: 1 },\r\n // { x: 57.6258992805755, y: 3.13725490196078, size: 1 },\r\n // { x: 58.273381294964, y: 3.13725490196078, size: 1 },\r\n // { x: 58.9208633093525, y: 3.2156862745098, size: 1 },\r\n // { x: 101.007194244604, y: 3.29411764705882, size: 1 },\r\n // { x: 101.654676258993, y: 2.82352941176471, size: 1 },\r\n // { x: 103.597122302158, y: 3.05882352941176, size: 1 },\r\n // { x: 145.68345323741, y: 2.74509803921569, size: 1 },\r\n // { x: 146.330935251799, y: 2.86274509803922, size: 1 },\r\n // { x: 162.517985611511, y: 3.92156862745098, size: 1 },\r\n // { x: 167.05035971223, y: 3.05882352941176, size: 1 },\r\n // { x: 188.41726618705, y: 3.2156862745098, size: 1 },\r\n // { x: 252.517985611511, y: 3.17647058823529, size: 1 },\r\n // { x: 255.755395683453, y: 3.92156862745098, size: 1 },\r\n // { x: 258.992805755396, y: 3.96078431372549, size: 1 },\r\n // { x: 318.561151079137, y: 3.13725490196078, size: 1 },\r\n // { x: 319.208633093525, y: 3.2156862745098, size: 1 },\r\n // { x: 0, y: 2.98039215686275, size: 1 },\r\n // { x: 1.29496402877698, y: 2.90196078431373, size: 1 },\r\n // { x: 1.94244604316547, y: 2.54901960784314, size: 1 },\r\n // { x: 2.58992805755396, y: 2.35294117647059, size: 1 },\r\n // { x: 30.431654676259, y: 3.84313725490196, size: 1 },\r\n // { x: 80.2877697841727, y: 4.07843137254902, size: 1 },\r\n // { x: 110.071942446043, y: 3.09803921568627, size: 1 },\r\n // { x: 130.143884892086, y: 3.05882352941176, size: 1 },\r\n // { x: 131.438848920863, y: 3.25490196078431, size: 1 },\r\n // { x: 174.820143884892, y: 2.90196078431373, size: 1 },\r\n // { x: 194.892086330935, y: 2.35294117647059, size: 1 },\r\n // { x: 195.539568345324, y: 3.01960784313725, size: 1 },\r\n // { x: 196.187050359712, y: 2.43137254901961, size: 1 },\r\n // { x: 196.834532374101, y: 2.3921568627451, size: 1 },\r\n // { x: 222.086330935252, y: 4.15686274509804, size: 1 },\r\n // { x: 223.381294964029, y: 4.15686274509804, size: 1 },\r\n // { x: 259.640287769784, y: 2.86274509803922, size: 1 },\r\n // { x: 260.287769784173, y: 2.94117647058824, size: 1 },\r\n // { x: 260.935251798561, y: 2.66666666666667, size: 1 },\r\n // { x: 261.58273381295, y: 2.86274509803922, size: 1 },\r\n // { x: 282.302158273381, y: 2.94117647058824, size: 1 },\r\n // { x: 303.021582733813, y: 3.09803921568627, size: 1 },\r\n // { x: 30.431654676259, y: 3.96078431372549, size: 1 },\r\n // { x: 31.726618705036, y: 4.03921568627451, size: 1 },\r\n // { x: 45.3237410071942, y: 4.03921568627451, size: 1 },\r\n // { x: 115.251798561151, y: 3.01960784313725, size: 1 },\r\n // { x: 115.89928057554, y: 2.47058823529412, size: 1 },\r\n // { x: 137.26618705036, y: 2.94117647058824, size: 1 },\r\n // { x: 137.913669064748, y: 3.01960784313725, size: 1 },\r\n // { x: 138.561151079137, y: 2.86274509803922, size: 1 },\r\n // { x: 157.985611510791, y: 3.2156862745098, size: 1 },\r\n // { x: 200.719424460432, y: 3.25490196078431, size: 1 },\r\n // { x: 201.36690647482, y: 2.47058823529412, size: 1 },\r\n // { x: 202.014388489209, y: 0.941176470588235, size: 1 },\r\n // { x: 202.661870503597, y: 1.17647058823529, size: 1 },\r\n // { x: 203.309352517986, y: 1.2156862745098, size: 1 },\r\n // { x: 203.956834532374, y: 2.94117647058824, size: 1 },\r\n // { x: 206.546762589928, y: 2.90196078431373, size: 1 },\r\n // { x: 211.079136690647, y: 2.86274509803922, size: 1 },\r\n // { x: 216.906474820144, y: 2.7843137254902, size: 1 },\r\n // { x: 217.553956834532, y: 2.86274509803922, size: 1 },\r\n // { x: 224.676258992806, y: 4.03921568627451, size: 1 },\r\n // { x: 237.625899280576, y: 4, size: 1 },\r\n // { x: 238.273381294964, y: 4.07843137254902, size: 1 },\r\n // { x: 244.748201438849, y: 2.98039215686275, size: 1 },\r\n // { x: 245.395683453237, y: 2.98039215686275, size: 1 },\r\n // { x: 264.820143884892, y: 3.17647058823529, size: 1 },\r\n // { x: 266.115107913669, y: 2.66666666666667, size: 1 },\r\n // { x: 266.762589928058, y: 1.96078431372549, size: 1 },\r\n // { x: 286.187050359712, y: 3.01960784313725, size: 1 },\r\n // { x: 287.482014388489, y: 2.7843137254902, size: 1 },\r\n // { x: 288.129496402878, y: 1.84313725490196, size: 1 },\r\n // { x: 310.143884892086, y: 2.98039215686275, size: 1 },\r\n // { x: 330.215827338129, y: 3.13725490196078, size: 1 },\r\n // { x: 350.935251798561, y: 3.2156862745098, size: 1 },\r\n // { x: 352.230215827338, y: 2.98039215686275, size: 1 },\r\n // { x: 352.877697841727, y: 2.74509803921569, size: 1 },\r\n // { x: 9.08108108108108, y: 4.07843137254902, size: 1 },\r\n // { x: 34.3783783783784, y: 3.25490196078431, size: 1 },\r\n // { x: 35.6756756756757, y: 2.31372549019608, size: 1 },\r\n // { x: 36.3243243243243, y: 2.31372549019608, size: 1 },\r\n // { x: 78.4864864864865, y: 3.17647058823529, size: 1 },\r\n // { x: 79.1351351351351, y: 2.47058823529412, size: 1 },\r\n // { x: 88.8648648648649, y: 3.80392156862745, size: 1 },\r\n // { x: 99.2432432432432, y: 3.17647058823529, size: 1 },\r\n // { x: 100.540540540541, y: 3.76470588235294, size: 1 },\r\n // { x: 108.972972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 110.918918918919, y: 3.45098039215686, size: 1 },\r\n // { x: 121.297297297297, y: 3.17647058823529, size: 1 },\r\n // { x: 124.540540540541, y: 3.45098039215686, size: 1 },\r\n // { x: 142.054054054054, y: 3.45098039215686, size: 1 },\r\n // { x: 144, y: 3.25490196078431, size: 1 },\r\n // { x: 144.648648648649, y: 3.29411764705882, size: 1 },\r\n // { x: 146.594594594595, y: 3.33333333333333, size: 1 },\r\n // { x: 147.891891891892, y: 3.17647058823529, size: 1 },\r\n // { x: 151.783783783784, y: 3.37254901960784, size: 1 },\r\n // { x: 155.027027027027, y: 3.76470588235294, size: 1 },\r\n // { x: 155.675675675676, y: 3.29411764705882, size: 1 },\r\n // { x: 186.810810810811, y: 3.37254901960784, size: 1 },\r\n // { x: 187.459459459459, y: 3.41176470588235, size: 1 },\r\n // { x: 210.810810810811, y: 3.2156862745098, size: 1 },\r\n // { x: 224.432432432432, y: 3.96078431372549, size: 1 },\r\n // { x: 229.621621621622, y: 3.17647058823529, size: 1 },\r\n // { x: 230.27027027027, y: 3.01960784313725, size: 1 },\r\n // { x: 231.567567567568, y: 2.94117647058824, size: 1 },\r\n // { x: 232.216216216216, y: 3.29411764705882, size: 1 },\r\n // { x: 251.027027027027, y: 3.01960784313725, size: 1 },\r\n // { x: 251.675675675676, y: 3.37254901960784, size: 1 },\r\n // { x: 252.324324324324, y: 2.98039215686275, size: 1 },\r\n // { x: 252.972972972973, y: 2.94117647058824, size: 1 },\r\n // { x: 253.621621621622, y: 2.74509803921569, size: 1 },\r\n // { x: 254.27027027027, y: 2.47058823529412, size: 1 },\r\n // { x: 265.297297297297, y: 3.29411764705882, size: 1 },\r\n // { x: 271.783783783784, y: 3.29411764705882, size: 1 },\r\n // { x: 273.72972972973, y: 2.62745098039216, size: 1 },\r\n // { x: 274.378378378378, y: 2.74509803921569, size: 1 },\r\n // { x: 275.027027027027, y: 2.66666666666667, size: 1 },\r\n // { x: 275.675675675676, y: 2.7843137254902, size: 1 },\r\n // { x: 288.648648648649, y: 3.37254901960784, size: 1 },\r\n // { x: 293.837837837838, y: 3.09803921568627, size: 1 },\r\n // { x: 295.135135135135, y: 3.37254901960784, size: 1 },\r\n // { x: 295.783783783784, y: 3.01960784313725, size: 1 },\r\n // { x: 317.189189189189, y: 3.09803921568627, size: 1 },\r\n // { x: 334.702702702703, y: 3.56862745098039, size: 1 },\r\n // { x: 338.594594594595, y: 2.90196078431373, size: 1 },\r\n // { x: 339.243243243243, y: 2.98039215686275, size: 1 },\r\n // { x: 343.783783783784, y: 3.41176470588235, size: 1 },\r\n // { x: 351.567567567568, y: 3.33333333333333, size: 1 },\r\n // { x: 84.8201438848921, y: 3.25490196078431, size: 1 },\r\n // { x: 86.7625899280576, y: 2.86274509803922, size: 1 },\r\n // { x: 151.510791366906, y: 3.29411764705882, size: 1 },\r\n // { x: 167.697841726619, y: 3.33333333333333, size: 1 },\r\n // { x: 174.172661870504, y: 3.05882352941176, size: 1 },\r\n // { x: 174.820143884892, y: 2.98039215686275, size: 1 },\r\n // { x: 194.244604316547, y: 2.86274509803922, size: 1 },\r\n // { x: 195.539568345324, y: 2.66666666666667, size: 1 },\r\n // { x: 196.187050359712, y: 2.94117647058824, size: 1 },\r\n // { x: 233.741007194245, y: 3.88235294117647, size: 1 },\r\n // { x: 236.978417266187, y: 3.05882352941176, size: 1 },\r\n // { x: 275.827338129496, y: 3.33333333333333, size: 1 },\r\n // { x: 281.654676258993, y: 2.86274509803922, size: 1 },\r\n // { x: 312.086330935252, y: 4, size: 1 },\r\n // { x: 72.5179856115108, y: 3.09803921568627, size: 1 },\r\n // { x: 95.1798561151079, y: 4.07843137254902, size: 1 },\r\n // { x: 108.776978417266, y: 3.96078431372549, size: 1 },\r\n // { x: 110.719424460432, y: 3.96078431372549, size: 1 },\r\n // { x: 114.604316546763, y: 3.05882352941176, size: 1 },\r\n // { x: 117.194244604317, y: 2.90196078431373, size: 1 },\r\n // { x: 136.618705035971, y: 2.82352941176471, size: 1 },\r\n // { x: 137.26618705036, y: 2.98039215686275, size: 1 },\r\n // { x: 157.985611510791, y: 2.94117647058824, size: 1 },\r\n // { x: 163.812949640288, y: 3.33333333333333, size: 1 },\r\n // { x: 208.489208633094, y: 3.25490196078431, size: 1 },\r\n // { x: 224.028776978417, y: 3.05882352941176, size: 1 },\r\n // { x: 224.676258992806, y: 2.98039215686275, size: 1 },\r\n // { x: 288.776978417266, y: 2.58823529411765, size: 1 },\r\n // { x: 289.424460431655, y: 2.74509803921569, size: 1 },\r\n // { x: 290.071942446043, y: 2.90196078431373, size: 1 },\r\n // { x: 309.496402877698, y: 3.33333333333333, size: 1 },\r\n // { x: 341.223021582734, y: 3.88235294117647, size: 1 },\r\n // { x: 57.6258992805755, y: 2.86274509803922, size: 1 },\r\n // { x: 58.273381294964, y: 2.98039215686275, size: 1 },\r\n // { x: 78.9928057553957, y: 3.17647058823529, size: 1 },\r\n // { x: 122.374100719424, y: 3.09803921568627, size: 1 },\r\n // { x: 123.021582733813, y: 2.90196078431373, size: 1 },\r\n // { x: 124.31654676259, y: 3.17647058823529, size: 1 },\r\n // { x: 143.741007194245, y: 2.98039215686275, size: 1 },\r\n // { x: 165.755395683453, y: 3.2156862745098, size: 1 },\r\n // { x: 178.705035971223, y: 4.11764705882353, size: 1 },\r\n // { x: 187.769784172662, y: 2.7843137254902, size: 1 },\r\n // { x: 209.136690647482, y: 3.05882352941176, size: 1 },\r\n // { x: 210.431654676259, y: 2.70588235294118, size: 1 },\r\n // { x: 229.856115107914, y: 2.58823529411765, size: 1 },\r\n // { x: 230.503597122302, y: 2.54901960784314, size: 1 },\r\n // { x: 292.014388489209, y: 3.88235294117647, size: 1 },\r\n // { x: 358.705035971223, y: 3.13725490196078, size: 1 },\r\n // { x: 359.352517985611, y: 3.05882352941176, size: 1 },\r\n // { x: 22.6618705035971, y: 2.82352941176471, size: 1 },\r\n // { x: 58.9208633093525, y: 4.03921568627451, size: 1 },\r\n // { x: 85.4676258992806, y: 3.05882352941176, size: 1 },\r\n // { x: 128.201438848921, y: 3.01960784313725, size: 1 },\r\n // { x: 128.848920863309, y: 2.19607843137255, size: 1 },\r\n // { x: 129.496402877698, y: 2.19607843137255, size: 1 },\r\n // { x: 142.446043165468, y: 4.07843137254902, size: 1 },\r\n // { x: 172.230215827338, y: 2.70588235294118, size: 1 },\r\n // { x: 189.712230215827, y: 3.25490196078431, size: 1 },\r\n // { x: 214.31654676259, y: 3.01960784313725, size: 1 },\r\n // { x: 215.611510791367, y: 2.62745098039216, size: 1 },\r\n // { x: 221.438848920863, y: 3.92156862745098, size: 1 },\r\n // { x: 236.978417266187, y: 2.62745098039216, size: 1 },\r\n // { x: 258.345323741007, y: 1.80392156862745, size: 1 },\r\n // { x: 258.992805755396, y: 1.92156862745098, size: 1 },\r\n // { x: 270, y: 3.09803921568627, size: 1 },\r\n // { x: 272.589928057554, y: 3.09803921568627, size: 1 },\r\n // { x: 282.94964028777, y: 3.2156862745098, size: 1 },\r\n // { x: 287.482014388489, y: 3.13725490196078, size: 1 },\r\n // { x: 297.194244604317, y: 3.17647058823529, size: 1 },\r\n // { x: 298.489208633094, y: 3.13725490196078, size: 1 },\r\n // { x: 342.517985611511, y: 3.25490196078431, size: 1 },\r\n // { x: 344.460431654676, y: 2.98039215686275, size: 1 },\r\n // { x: 347.05035971223, y: 3.13725490196078, size: 1 },\r\n // { x: 350.935251798561, y: 3.05882352941176, size: 1 },\r\n // { x: 356.762589928058, y: 3.09803921568627, size: 1 },\r\n // { x: 1.2972972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 1.94594594594595, y: 3.25490196078431, size: 1 },\r\n // { x: 2.59459459459459, y: 3.01960784313725, size: 1 },\r\n // { x: 3.89189189189189, y: 3.29411764705882, size: 1 },\r\n // { x: 5.18918918918919, y: 3.2156862745098, size: 1 },\r\n // { x: 5.83783783783784, y: 3.13725490196078, size: 1 },\r\n // { x: 6.48648648648649, y: 3.09803921568627, size: 1 },\r\n // { x: 27.8918918918919, y: 2.31372549019608, size: 1 },\r\n // { x: 28.5405405405405, y: 2, size: 1 },\r\n // { x: 29.8378378378378, y: 3.25490196078431, size: 1 },\r\n // { x: 30.4864864864865, y: 3.17647058823529, size: 1 },\r\n // { x: 32.4324324324324, y: 3.33333333333333, size: 1 },\r\n // { x: 35.6756756756757, y: 3.09803921568627, size: 1 },\r\n // { x: 41.5135135135135, y: 3.25490196078431, size: 1 },\r\n // { x: 42.1621621621622, y: 3.25490196078431, size: 1 },\r\n // { x: 46.0540540540541, y: 3.09803921568627, size: 1 },\r\n // { x: 55.1351351351351, y: 3.2156862745098, size: 1 },\r\n // { x: 70.054054054054, y: 3.41176470588235, size: 1 },\r\n // { x: 76.5405405405405, y: 3.37254901960784, size: 1 },\r\n // { x: 86.9189189189189, y: 3.41176470588235, size: 1 },\r\n // { x: 109.621621621622, y: 3.33333333333333, size: 1 },\r\n // { x: 114.162162162162, y: 3.29411764705882, size: 1 },\r\n // { x: 114.810810810811, y: 3.09803921568627, size: 1 },\r\n // { x: 136.216216216216, y: 3.37254901960784, size: 1 },\r\n // { x: 139.459459459459, y: 3.33333333333333, size: 1 },\r\n // { x: 158.918918918919, y: 3.2156862745098, size: 1 },\r\n // { x: 177.081081081081, y: 3.33333333333333, size: 1 },\r\n // { x: 179.027027027027, y: 3.05882352941176, size: 1 },\r\n // { x: 181.621621621622, y: 4, size: 1 },\r\n // { x: 194.594594594595, y: 3.41176470588235, size: 1 },\r\n // { x: 199.783783783784, y: 3.2156862745098, size: 1 },\r\n // { x: 201.081081081081, y: 3.01960784313725, size: 1 },\r\n // { x: 201.72972972973, y: 2.98039215686275, size: 1 },\r\n // { x: 202.378378378378, y: 2.70588235294118, size: 1 },\r\n // { x: 203.027027027027, y: 2.66666666666667, size: 1 },\r\n // { x: 221.189189189189, y: 3.37254901960784, size: 1 },\r\n // { x: 222.486486486486, y: 2.94117647058824, size: 1 },\r\n // { x: 223.135135135135, y: 2.70588235294118, size: 1 },\r\n // { x: 224.432432432432, y: 2.94117647058824, size: 1 },\r\n // { x: 225.081081081081, y: 3.09803921568627, size: 1 },\r\n // { x: 227.027027027027, y: 3.33333333333333, size: 1 },\r\n // { x: 230.918918918919, y: 3.17647058823529, size: 1 },\r\n // { x: 232.864864864865, y: 3.45098039215686, size: 1 },\r\n // { x: 234.162162162162, y: 3.29411764705882, size: 1 },\r\n // { x: 236.108108108108, y: 3.17647058823529, size: 1 },\r\n // { x: 238.054054054054, y: 3.41176470588235, size: 1 },\r\n // { x: 241.297297297297, y: 3.33333333333333, size: 1 },\r\n // { x: 242.594594594595, y: 3.2156862745098, size: 1 },\r\n // { x: 243.891891891892, y: 2.86274509803922, size: 1 },\r\n // { x: 245.189189189189, y: 2.70588235294118, size: 1 },\r\n // { x: 245.837837837838, y: 3.05882352941176, size: 1 },\r\n // { x: 267.891891891892, y: 3.84313725490196, size: 1 },\r\n // { x: 286.702702702703, y: 3.13725490196078, size: 1 },\r\n // { x: 287.351351351351, y: 3.05882352941176, size: 1 },\r\n // { x: 288, y: 2.82352941176471, size: 1 },\r\n // { x: 292.540540540541, y: 3.33333333333333, size: 1 },\r\n // { x: 293.837837837838, y: 3.45098039215686, size: 1 },\r\n // { x: 13.5971223021583, y: 2.7843137254902, size: 1 },\r\n // { x: 14.2446043165468, y: 2.98039215686275, size: 1 },\r\n // { x: 35.6115107913669, y: 3.25490196078431, size: 1 },\r\n // { x: 36.2589928057554, y: 2.86274509803922, size: 1 },\r\n // { x: 36.9064748201439, y: 2.98039215686275, size: 1 },\r\n // { x: 37.5539568345324, y: 2.7843137254902, size: 1 },\r\n // { x: 56.9784172661871, y: 2.70588235294118, size: 1 },\r\n // { x: 57.6258992805755, y: 2.90196078431373, size: 1 },\r\n // { x: 121.726618705036, y: 2.7843137254902, size: 1 },\r\n // { x: 122.374100719424, y: 2.94117647058824, size: 1 },\r\n // { x: 144.388489208633, y: 2.90196078431373, size: 1 },\r\n // { x: 231.151079136691, y: 2.82352941176471, size: 1 },\r\n // { x: 231.798561151079, y: 2.66666666666667, size: 1 },\r\n // { x: 251.223021582734, y: 2.3921568627451, size: 1 },\r\n // { x: 251.870503597122, y: 2.70588235294118, size: 1 },\r\n // { x: 252.517985611511, y: 2.74509803921569, size: 1 },\r\n // { x: 253.165467625899, y: 2.50980392156863, size: 1 },\r\n // { x: 337.338129496403, y: 2.90196078431373, size: 1 },\r\n // { x: 337.985611510791, y: 2.74509803921569, size: 1 },\r\n // { x: 338.63309352518, y: 2.47058823529412, size: 1 },\r\n // { x: 339.280575539568, y: 2.58823529411765, size: 1 },\r\n // { x: 358.705035971223, y: 3.05882352941176, size: 1 },\r\n // { x: 0, y: 3.01960784313725, size: 1 },\r\n // { x: 1.94244604316547, y: 4, size: 1 },\r\n // { x: 20.7194244604317, y: 3.05882352941176, size: 1 },\r\n // { x: 21.3669064748201, y: 3.01960784313725, size: 1 },\r\n // { x: 40.7913669064748, y: 4, size: 1 },\r\n // { x: 64.1007194244604, y: 2.82352941176471, size: 1 },\r\n // { x: 65.3956834532374, y: 3.17647058823529, size: 1 },\r\n // { x: 66.0431654676259, y: 2.98039215686275, size: 1 },\r\n // { x: 85.4676258992806, y: 2.74509803921569, size: 1 },\r\n // { x: 86.7625899280576, y: 2.82352941176471, size: 1 },\r\n // { x: 87.410071942446, y: 2.98039215686275, size: 1 },\r\n // { x: 106.834532374101, y: 3.05882352941176, size: 1 },\r\n // { x: 108.776978417266, y: 3.92156862745098, size: 1 },\r\n // { x: 215.611510791367, y: 2.94117647058824, size: 1 },\r\n // { x: 289.424460431655, y: 4.03921568627451, size: 1 },\r\n // { x: 301.079136690647, y: 3.01960784313725, size: 1 },\r\n // { x: 312.73381294964, y: 4.03921568627451, size: 1 },\r\n // { x: 323.093525179856, y: 2.11764705882353, size: 1 },\r\n // { x: 345.107913669065, y: 3.13725490196078, size: 1 },\r\n // { x: 5.8273381294964, y: 3.25490196078431, size: 1 },\r\n // { x: 49.2086330935252, y: 3.17647058823529, size: 1 },\r\n // { x: 50.5035971223022, y: 2.86274509803922, size: 1 },\r\n // { x: 70.5755395683453, y: 3.09803921568627, size: 1 },\r\n // { x: 91.9424460431655, y: 2.90196078431373, size: 1 },\r\n // { x: 93.8848920863309, y: 3.09803921568627, size: 1 },\r\n // { x: 117.841726618705, y: 3.96078431372549, size: 1 },\r\n // { x: 168.345323741007, y: 3.96078431372549, size: 1 },\r\n // { x: 185.827338129496, y: 3.92156862745098, size: 1 },\r\n // { x: 186.474820143885, y: 3.88235294117647, size: 1 },\r\n // { x: 196.187050359712, y: 4, size: 1 },\r\n // { x: 200.719424460432, y: 3.01960784313725, size: 1 },\r\n // { x: 308.201438848921, y: 3.05882352941176, size: 1 },\r\n // { x: 308.848920863309, y: 3.05882352941176, size: 1 },\r\n // { x: 5.18918918918919, y: 3.96078431372549, size: 1 },\r\n // { x: 6.48648648648649, y: 3.76470588235294, size: 1 },\r\n // { x: 12.3243243243243, y: 3.2156862745098, size: 1 },\r\n // { x: 24.6486486486486, y: 3.41176470588235, size: 1 },\r\n // { x: 33.0810810810811, y: 3.2156862745098, size: 1 },\r\n // { x: 35.027027027027, y: 3.2156862745098, size: 1 },\r\n // { x: 36.3243243243243, y: 3.88235294117647, size: 1 },\r\n // { x: 40.2162162162162, y: 3.49019607843137, size: 1 },\r\n // { x: 48.6486486486486, y: 3.76470588235294, size: 1 },\r\n // { x: 55.1351351351351, y: 3.13725490196078, size: 1 },\r\n // { x: 55.7837837837838, y: 3.13725490196078, size: 1 },\r\n // { x: 56.4324324324324, y: 1.49019607843137, size: 1 },\r\n // { x: 57.0810810810811, y: 1.17647058823529, size: 1 },\r\n // { x: 57.7297297297297, y: 1.01960784313725, size: 1 },\r\n // { x: 58.3783783783784, y: 1.2156862745098, size: 1 },\r\n // { x: 60.972972972973, y: 2.82352941176471, size: 1 },\r\n // { x: 61.6216216216216, y: 3.13725490196078, size: 1 },\r\n // { x: 65.5135135135135, y: 2.82352941176471, size: 1 },\r\n // { x: 66.1621621621622, y: 3.01960784313725, size: 1 },\r\n // { x: 72, y: 2.7843137254902, size: 1 },\r\n // { x: 73.945945945946, y: 3.41176470588235, size: 1 },\r\n // { x: 75.2432432432432, y: 3.37254901960784, size: 1 },\r\n // { x: 75.8918918918919, y: 3.33333333333333, size: 1 },\r\n // { x: 77.1891891891892, y: 3.29411764705882, size: 1 },\r\n // { x: 77.8378378378378, y: 2.86274509803922, size: 1 },\r\n // { x: 78.4864864864865, y: 2.82352941176471, size: 1 },\r\n // { x: 86.9189189189189, y: 3.84313725490196, size: 1 },\r\n // { x: 97.2972972972973, y: 3.41176470588235, size: 1 },\r\n // { x: 97.945945945946, y: 3.33333333333333, size: 1 },\r\n // { x: 98.5945945945946, y: 3.29411764705882, size: 1 },\r\n // { x: 99.2432432432432, y: 2.98039215686275, size: 1 },\r\n // { x: 103.135135135135, y: 4.03921568627451, size: 1 },\r\n // { x: 104.432432432432, y: 3.96078431372549, size: 1 },\r\n // { x: 111.567567567568, y: 4.11764705882353, size: 1 },\r\n // { x: 112.864864864865, y: 4, size: 1 },\r\n // { x: 118.702702702703, y: 3.96078431372549, size: 1 },\r\n // { x: 119.351351351351, y: 3.49019607843137, size: 1 },\r\n // { x: 120, y: 3.25490196078431, size: 1 },\r\n // { x: 120.648648648649, y: 3.29411764705882, size: 1 },\r\n // { x: 121.297297297297, y: 2.82352941176471, size: 1 },\r\n // { x: 136.216216216216, y: 3.84313725490196, size: 1 },\r\n // { x: 142.054054054054, y: 3.09803921568627, size: 1 },\r\n // { x: 142.702702702703, y: 2.66666666666667, size: 1 },\r\n // { x: 143.351351351351, y: 2.54901960784314, size: 1 },\r\n // { x: 162.810810810811, y: 3.05882352941176, size: 1 },\r\n // { x: 164.108108108108, y: 2.90196078431373, size: 1 },\r\n // { x: 169.297297297297, y: 3.92156862745098, size: 1 },\r\n // { x: 186.162162162162, y: 2.90196078431373, size: 1 },\r\n // { x: 225.72972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 228.324324324324, y: 3.09803921568627, size: 1 },\r\n // { x: 228.972972972973, y: 1.88235294117647, size: 1 },\r\n // { x: 229.621621621622, y: 1.84313725490196, size: 1 },\r\n // { x: 249.081081081081, y: 3.05882352941176, size: 1 },\r\n // { x: 249.72972972973, y: 2.94117647058824, size: 1 },\r\n // { x: 250.378378378378, y: 2.98039215686275, size: 1 },\r\n // { x: 251.027027027027, y: 2.03921568627451, size: 1 },\r\n // { x: 273.72972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 282.810810810811, y: 3.92156862745098, size: 1 },\r\n // { x: 286.054054054054, y: 3.80392156862745, size: 1 },\r\n // { x: 293.837837837838, y: 2.82352941176471, size: 1 },\r\n // { x: 310.702702702703, y: 4, size: 1 },\r\n // { x: 324.324324324324, y: 3.84313725490196, size: 1 },\r\n // { x: 328.216216216216, y: 4.11764705882353, size: 1 },\r\n // { x: 330.162162162162, y: 4, size: 1 },\r\n // { x: 337.297297297297, y: 3.29411764705882, size: 1 },\r\n // { x: 338.594594594595, y: 3.80392156862745, size: 1 },\r\n // { x: 348.324324324324, y: 3.96078431372549, size: 1 },\r\n // { x: 355.459459459459, y: 3.37254901960784, size: 1 },\r\n // { x: 5.17985611510791, y: 3.13725490196078, size: 1 },\r\n // { x: 62.158273381295, y: 3.29411764705882, size: 1 },\r\n // { x: 62.8057553956835, y: 3.25490196078431, size: 1 },\r\n // { x: 64.7482014388489, y: 3.09803921568627, size: 1 },\r\n // { x: 65.3956834532374, y: 3.05882352941176, size: 1 },\r\n // { x: 86.1151079136691, y: 2.70588235294118, size: 1 },\r\n // { x: 87.410071942446, y: 2.94117647058824, size: 1 },\r\n // { x: 105.539568345324, y: 3.17647058823529, size: 1 },\r\n // { x: 106.834532374101, y: 2.90196078431373, size: 1 },\r\n // { x: 107.482014388489, y: 3.01960784313725, size: 1 },\r\n // { x: 108.129496402878, y: 2.54901960784314, size: 1 },\r\n // { x: 108.776978417266, y: 2.47058823529412, size: 1 },\r\n // { x: 179.352517985612, y: 4.03921568627451, size: 1 },\r\n // { x: 192.94964028777, y: 2.94117647058824, size: 1 },\r\n // { x: 193.597122302158, y: 3.17647058823529, size: 1 },\r\n // { x: 194.244604316547, y: 3.09803921568627, size: 1 },\r\n // { x: 277.769784172662, y: 3.17647058823529, size: 1 },\r\n // { x: 281.654676258993, y: 3.01960784313725, size: 1 },\r\n // { x: 343.812949640288, y: 3.09803921568627, size: 1 },\r\n // { x: 344.460431654676, y: 2.86274509803922, size: 1 },\r\n // { x: 345.107913669065, y: 3.05882352941176, size: 1 },\r\n // { x: 13.5971223021583, y: 3.88235294117647, size: 1 },\r\n // { x: 27.1942446043165, y: 3.09803921568627, size: 1 },\r\n // { x: 49.2086330935252, y: 3.01960784313725, size: 1 },\r\n // { x: 51.1510791366906, y: 2.98039215686275, size: 1 },\r\n // { x: 70.5755395683453, y: 2.66666666666667, size: 1 },\r\n // { x: 71.8705035971223, y: 2.90196078431373, size: 1 },\r\n // { x: 94.5323741007194, y: 3.13725490196078, size: 1 },\r\n // { x: 95.1798561151079, y: 4.03921568627451, size: 1 },\r\n // { x: 110.071942446043, y: 3.29411764705882, size: 1 },\r\n // { x: 135.323741007194, y: 2.94117647058824, size: 1 },\r\n // { x: 135.971223021583, y: 3.09803921568627, size: 1 },\r\n // { x: 136.618705035971, y: 2.62745098039216, size: 1 },\r\n // { x: 137.26618705036, y: 2.70588235294118, size: 1 },\r\n // { x: 138.561151079137, y: 3.88235294117647, size: 1 },\r\n // { x: 143.093525179856, y: 4.03921568627451, size: 1 },\r\n // { x: 146.330935251799, y: 3.96078431372549, size: 1 },\r\n // { x: 156.690647482014, y: 2.82352941176471, size: 1 },\r\n // { x: 265.467625899281, y: 2.70588235294118, size: 1 },\r\n // { x: 266.115107913669, y: 2.70588235294118, size: 1 },\r\n // { x: 266.762589928058, y: 2.7843137254902, size: 1 },\r\n // { x: 296.546762589928, y: 4.07843137254902, size: 1 },\r\n // { x: 329.568345323741, y: 2.94117647058824, size: 1 },\r\n // { x: 330.215827338129, y: 2.98039215686275, size: 1 },\r\n // { x: 330.863309352518, y: 2.47058823529412, size: 1 },\r\n // { x: 331.510791366906, y: 2.90196078431373, size: 1 },\r\n // { x: 74.4604316546763, y: 4.03921568627451, size: 1 },\r\n // { x: 78.3453237410072, y: 3.17647058823529, size: 1 },\r\n // { x: 99.7122302158273, y: 3.01960784313725, size: 1 },\r\n // { x: 100.359712230216, y: 2.70588235294118, size: 1 },\r\n // { x: 101.007194244604, y: 2.66666666666667, size: 1 },\r\n // { x: 144.388489208633, y: 4.03921568627451, size: 1 },\r\n // { x: 161.870503597122, y: 3.45098039215686, size: 1 },\r\n // { x: 183.884892086331, y: 4.07843137254902, size: 1 },\r\n // { x: 228.561151079137, y: 2.66666666666667, size: 1 },\r\n // { x: 229.208633093525, y: 2.82352941176471, size: 1 },\r\n // { x: 230.503597122302, y: 2.86274509803922, size: 1 },\r\n // { x: 250.575539568345, y: 3.2156862745098, size: 1 },\r\n // { x: 251.223021582734, y: 2.98039215686275, size: 1 },\r\n // { x: 0, y: 3.25490196078431, size: 1 },\r\n // { x: 41.5135135135135, y: 3.37254901960784, size: 1 },\r\n // { x: 42.8108108108108, y: 3.05882352941176, size: 1 },\r\n // { x: 43.4594594594595, y: 3.33333333333333, size: 1 },\r\n // { x: 55.1351351351351, y: 3.92156862745098, size: 1 },\r\n // { x: 64.2162162162162, y: 3.01960784313725, size: 1 },\r\n // { x: 64.8648648648649, y: 3.09803921568627, size: 1 },\r\n // { x: 84.3243243243243, y: 2.43137254901961, size: 1 },\r\n // { x: 84.972972972973, y: 2.86274509803922, size: 1 },\r\n // { x: 86.2702702702703, y: 2.70588235294118, size: 1 },\r\n // { x: 99.8918918918919, y: 3.92156862745098, size: 1 },\r\n // { x: 106.378378378378, y: 3.17647058823529, size: 1 },\r\n // { x: 127.135135135135, y: 3.2156862745098, size: 1 },\r\n // { x: 127.783783783784, y: 3.33333333333333, size: 1 },\r\n // { x: 143.351351351351, y: 3.84313725490196, size: 1 },\r\n // { x: 172.540540540541, y: 3.92156862745098, size: 1 },\r\n // { x: 173.189189189189, y: 4, size: 1 },\r\n // { x: 174.486486486486, y: 3.88235294117647, size: 1 },\r\n // { x: 175.135135135135, y: 4.07843137254902, size: 1 },\r\n // { x: 179.027027027027, y: 4.11764705882353, size: 1 },\r\n // { x: 180.324324324324, y: 4.11764705882353, size: 1 },\r\n // { x: 180.972972972973, y: 3.96078431372549, size: 1 },\r\n // { x: 182.918918918919, y: 3.92156862745098, size: 1 },\r\n // { x: 184.216216216216, y: 4.07843137254902, size: 1 },\r\n // { x: 185.513513513514, y: 4.07843137254902, size: 1 },\r\n // { x: 188.108108108108, y: 3.96078431372549, size: 1 },\r\n // { x: 189.405405405405, y: 4.03921568627451, size: 1 },\r\n // { x: 190.702702702703, y: 4, size: 1 },\r\n // { x: 198.486486486486, y: 3.88235294117647, size: 1 },\r\n // { x: 201.081081081081, y: 3.88235294117647, size: 1 },\r\n // { x: 202.378378378378, y: 3.88235294117647, size: 1 },\r\n // { x: 203.027027027027, y: 3.96078431372549, size: 1 },\r\n // { x: 209.513513513514, y: 3.84313725490196, size: 1 },\r\n // { x: 214.702702702703, y: 3.29411764705882, size: 1 },\r\n // { x: 222.486486486486, y: 3.88235294117647, size: 1 },\r\n // { x: 224.432432432432, y: 3.84313725490196, size: 1 },\r\n // { x: 235.459459459459, y: 3.25490196078431, size: 1 },\r\n // { x: 236.108108108108, y: 2.58823529411765, size: 1 },\r\n // { x: 236.756756756757, y: 2.82352941176471, size: 1 },\r\n // { x: 237.405405405405, y: 2.74509803921569, size: 1 },\r\n // { x: 254.27027027027, y: 4.07843137254902, size: 1 },\r\n // { x: 255.567567567568, y: 3.88235294117647, size: 1 },\r\n // { x: 256.864864864865, y: 3.01960784313725, size: 1 },\r\n // { x: 258.162162162162, y: 3.01960784313725, size: 1 },\r\n // { x: 258.810810810811, y: 2.98039215686275, size: 1 },\r\n // { x: 264, y: 3.96078431372549, size: 1 },\r\n // { x: 265.297297297297, y: 3.80392156862745, size: 1 },\r\n // { x: 273.081081081081, y: 3.45098039215686, size: 1 },\r\n // { x: 275.027027027027, y: 3.37254901960784, size: 1 },\r\n // { x: 275.675675675676, y: 3.41176470588235, size: 1 },\r\n // { x: 292.540540540541, y: 3.72549019607843, size: 1 },\r\n // { x: 296.432432432432, y: 3.92156862745098, size: 1 },\r\n // { x: 300.972972972973, y: 3.25490196078431, size: 1 },\r\n // { x: 302.27027027027, y: 4, size: 1 },\r\n // { x: 311.351351351351, y: 3.84313725490196, size: 1 },\r\n // { x: 321.72972972973, y: 3.09803921568627, size: 1 },\r\n // { x: 322.378378378378, y: 2.82352941176471, size: 1 },\r\n // { x: 323.675675675676, y: 2.62745098039216, size: 1 },\r\n // { x: 324.324324324324, y: 2.43137254901961, size: 1 },\r\n // { x: 326.27027027027, y: 3.41176470588235, size: 1 },\r\n // { x: 340.540540540541, y: 3.37254901960784, size: 1 },\r\n // { x: 344.432432432432, y: 2.82352941176471, size: 1 },\r\n // { x: 345.72972972973, y: 2.70588235294118, size: 1 },\r\n // { x: 346.378378378378, y: 3.13725490196078, size: 1 },\r\n // { x: 5.8273381294964, y: 3.01960784313725, size: 1 },\r\n // { x: 27.841726618705, y: 3.2156862745098, size: 1 },\r\n // { x: 38.8489208633094, y: 3.96078431372549, size: 1 },\r\n // { x: 48.5611510791367, y: 2.94117647058824, size: 1 },\r\n // { x: 53.0935251798561, y: 3.92156862745098, size: 1 },\r\n // { x: 55.6834532374101, y: 4, size: 1 },\r\n // { x: 70.5755395683453, y: 3.01960784313725, size: 1 },\r\n // { x: 91.9424460431655, y: 2.94117647058824, size: 1 },\r\n // { x: 106.187050359712, y: 4.07843137254902, size: 1 },\r\n // { x: 113.309352517986, y: 3.13725490196078, size: 1 },\r\n // { x: 135.323741007194, y: 2.70588235294118, size: 1 },\r\n // { x: 156.690647482014, y: 2.86274509803922, size: 1 },\r\n // { x: 178.705035971223, y: 2.7843137254902, size: 1 },\r\n // { x: 188.41726618705, y: 3.92156862745098, size: 1 },\r\n // { x: 200.071942446043, y: 2.35294117647059, size: 1 },\r\n // { x: 221.438848920863, y: 2.86274509803922, size: 1 },\r\n // { x: 242.805755395683, y: 2.70588235294118, size: 1 },\r\n // { x: 243.453237410072, y: 2.50980392156863, size: 1 },\r\n // { x: 261.58273381295, y: 4.03921568627451, size: 1 },\r\n // { x: 263.525179856115, y: 3.17647058823529, size: 1 },\r\n // { x: 264.820143884892, y: 2.82352941176471, size: 1 },\r\n // { x: 269.352517985611, y: 3.96078431372549, size: 1 },\r\n // { x: 0.647482014388489, y: 3.96078431372549, size: 1 },\r\n // { x: 56.3309352517986, y: 3.05882352941176, size: 1 },\r\n // { x: 75.7553956834532, y: 4.03921568627451, size: 1 },\r\n // { x: 92.589928057554, y: 3.96078431372549, size: 1 },\r\n // { x: 143.093525179856, y: 2.98039215686275, size: 1 },\r\n // { x: 173.525179856115, y: 4, size: 1 },\r\n // { x: 207.194244604317, y: 3.13725490196078, size: 1 },\r\n // { x: 251.223021582734, y: 3.17647058823529, size: 1 },\r\n // { x: 276.474820143885, y: 3.96078431372549, size: 1 },\r\n // { x: 340.575539568345, y: 3.96078431372549, size: 1 },\r\n // { x: 347.697841726619, y: 4.23529411764706, size: 1 },\r\n // { x: 358.057553956835, y: 2.58823529411765, size: 1 },\r\n // { x: 358.705035971223, y: 2.70588235294118, size: 1 },\r\n // { x: 359.352517985611, y: 2.66666666666667, size: 1 },\r\n // { x: 3.88489208633094, y: 4, size: 1 },\r\n // { x: 4.53237410071942, y: 4.15686274509804, size: 1 },\r\n // { x: 20.0719424460432, y: 3.05882352941176, size: 1 },\r\n // { x: 84.1726618705036, y: 3.25490196078431, size: 1 },\r\n // { x: 96.4748201438849, y: 4, size: 1 },\r\n // { x: 127.553956834532, y: 2.90196078431373, size: 1 },\r\n // { x: 128.201438848921, y: 3.2156862745098, size: 1 },\r\n // { x: 128.848920863309, y: 2.98039215686275, size: 1 },\r\n // { x: 156.690647482014, y: 3.96078431372549, size: 1 },\r\n // { x: 192.302158273381, y: 2.82352941176471, size: 1 },\r\n // { x: 193.597122302158, y: 2.50980392156863, size: 1 },\r\n // { x: 194.244604316547, y: 2.66666666666667, size: 1 },\r\n // { x: 350.935251798561, y: 3.96078431372549, size: 1 },\r\n // { x: 4.54054054054054, y: 3.33333333333333, size: 1 },\r\n // { x: 5.18918918918919, y: 3.29411764705882, size: 1 },\r\n // { x: 8.43243243243243, y: 3.88235294117647, size: 1 },\r\n // { x: 27.2432432432432, y: 3.2156862745098, size: 1 },\r\n // { x: 29.1891891891892, y: 3.92156862745098, size: 1 },\r\n // { x: 42.8108108108108, y: 3.84313725490196, size: 1 },\r\n // { x: 49.2972972972973, y: 3.05882352941176, size: 1 },\r\n // { x: 55.7837837837838, y: 3.88235294117647, size: 1 },\r\n // { x: 61.6216216216216, y: 3.88235294117647, size: 1 },\r\n // { x: 90.8108108108108, y: 3.41176470588235, size: 1 },\r\n // { x: 91.4594594594595, y: 2.94117647058824, size: 1 },\r\n // { x: 92.1081081081081, y: 3.05882352941176, size: 1 },\r\n // { x: 92.7567567567568, y: 2.90196078431373, size: 1 },\r\n // { x: 114.810810810811, y: 3.29411764705882, size: 1 },\r\n // { x: 121.945945945946, y: 3.88235294117647, size: 1 },\r\n // { x: 134.918918918919, y: 3.25490196078431, size: 1 },\r\n // { x: 136.216216216216, y: 3.29411764705882, size: 1 },\r\n // { x: 140.108108108108, y: 3.88235294117647, size: 1 },\r\n // { x: 140.756756756757, y: 4.07843137254902, size: 1 },\r\n // { x: 147.891891891892, y: 4.03921568627451, size: 1 },\r\n // { x: 151.135135135135, y: 3.92156862745098, size: 1 },\r\n // { x: 153.081081081081, y: 3.96078431372549, size: 1 },\r\n // { x: 158.27027027027, y: 3.25490196078431, size: 1 },\r\n // { x: 162.162162162162, y: 4.07843137254902, size: 1 },\r\n // { x: 177.72972972973, y: 2.70588235294118, size: 1 },\r\n // { x: 179.027027027027, y: 2.70588235294118, size: 1 },\r\n // { x: 179.675675675676, y: 2.74509803921569, size: 1 },\r\n // { x: 199.783783783784, y: 3.09803921568627, size: 1 },\r\n // { x: 200.432432432432, y: 3.17647058823529, size: 1 },\r\n // { x: 230.918918918919, y: 4.07843137254902, size: 1 },\r\n // { x: 250.378378378378, y: 3.96078431372549, size: 1 },\r\n // { x: 257.513513513513, y: 3.80392156862745, size: 1 },\r\n // { x: 264, y: 2.7843137254902, size: 1 },\r\n // { x: 264.648648648649, y: 2.7843137254902, size: 1 },\r\n // { x: 265.297297297297, y: 2.66666666666667, size: 1 },\r\n // { x: 265.945945945946, y: 2.7843137254902, size: 1 },\r\n // { x: 286.702702702703, y: 3.25490196078431, size: 1 },\r\n // { x: 287.351351351351, y: 3.01960784313725, size: 1 },\r\n // { x: 288, y: 3.17647058823529, size: 1 },\r\n // { x: 306.162162162162, y: 3.41176470588235, size: 1 },\r\n // { x: 308.756756756757, y: 3.37254901960784, size: 1 },\r\n // { x: 319.783783783784, y: 3.84313725490196, size: 1 },\r\n // { x: 325.621621621622, y: 3.88235294117647, size: 1 },\r\n // { x: 329.513513513513, y: 3.13725490196078, size: 1 },\r\n // { x: 330.162162162162, y: 3.2156862745098, size: 1 },\r\n // { x: 342.486486486487, y: 3.13725490196078, size: 1 },\r\n // { x: 343.135135135135, y: 3.09803921568627, size: 1 },\r\n // { x: 347.675675675676, y: 3.37254901960784, size: 1 },\r\n // { x: 350.27027027027, y: 3.33333333333333, size: 1 },\r\n // { x: 351.567567567568, y: 3.25490196078431, size: 1 },\r\n // { x: 352.216216216216, y: 2.98039215686275, size: 1 },\r\n // { x: 352.864864864865, y: 3.05882352941176, size: 1 },\r\n // { x: 356.108108108108, y: 3.88235294117647, size: 1 },\r\n // { x: 34.9640287769784, y: 3.05882352941176, size: 1 },\r\n // { x: 35.6115107913669, y: 3.13725490196078, size: 1 },\r\n // { x: 55.0359712230216, y: 3.17647058823529, size: 1 },\r\n // { x: 78.3453237410072, y: 3.05882352941176, size: 1 },\r\n // { x: 78.9928057553957, y: 2.90196078431373, size: 1 },\r\n // { x: 98.4172661870504, y: 3.17647058823529, size: 1 },\r\n // { x: 163.812949640288, y: 2.90196078431373, size: 1 },\r\n // { x: 164.460431654676, y: 3.09803921568627, size: 1 },\r\n // { x: 227.913669064748, y: 3.01960784313725, size: 1 },\r\n // { x: 228.561151079137, y: 2.98039215686275, size: 1 },\r\n // { x: 251.223021582734, y: 2.90196078431373, size: 1 },\r\n // { x: 251.870503597122, y: 2.7843137254902, size: 1 },\r\n // { x: 271.294964028777, y: 1.41176470588235, size: 1 },\r\n // { x: 271.942446043165, y: 1.49019607843137, size: 1 },\r\n // { x: 272.589928057554, y: 1.17647058823529, size: 1 },\r\n // { x: 273.237410071942, y: 1.01960784313725, size: 1 },\r\n // { x: 281.007194244604, y: 2.86274509803922, size: 1 },\r\n // { x: 286.834532374101, y: 2.74509803921569, size: 1 },\r\n // { x: 292.014388489209, y: 3.25490196078431, size: 1 },\r\n // { x: 293.309352517986, y: 2.62745098039216, size: 1 },\r\n // { x: 293.956834532374, y: 2.90196078431373, size: 1 },\r\n // { x: 294.604316546763, y: 2.35294117647059, size: 1 },\r\n // { x: 336.690647482014, y: 3.17647058823529, size: 1 },\r\n // { x: 358.057553956835, y: 2.90196078431373, size: 1 },\r\n // { x: 10.3597122302158, y: 4, size: 1 },\r\n // { x: 29.7841726618705, y: 4.03921568627451, size: 1 },\r\n // { x: 40.7913669064748, y: 2.70588235294118, size: 1 },\r\n // { x: 84.1726618705036, y: 2.86274509803922, size: 1 },\r\n // { x: 105.539568345324, y: 2.74509803921569, size: 1 },\r\n // { x: 127.553956834532, y: 3.05882352941176, size: 1 },\r\n // { x: 148.920863309353, y: 2.66666666666667, size: 1 },\r\n // { x: 170.287769784173, y: 2.19607843137255, size: 1 },\r\n // { x: 170.935251798561, y: 2.62745098039216, size: 1 },\r\n // { x: 191.007194244604, y: 3.09803921568627, size: 1 },\r\n // { x: 191.654676258993, y: 2.54901960784314, size: 1 },\r\n // { x: 192.302158273381, y: 2.54901960784314, size: 1 },\r\n // { x: 279.712230215827, y: 2.74509803921569, size: 1 },\r\n // { x: 280.359712230216, y: 2.66666666666667, size: 1 },\r\n // { x: 281.654676258993, y: 3.96078431372549, size: 1 },\r\n // { x: 284.244604316547, y: 4.03921568627451, size: 1 },\r\n // { x: 286.834532374101, y: 4, size: 1 },\r\n // { x: 288.776978417266, y: 3.92156862745098, size: 1 },\r\n // { x: 299.136690647482, y: 3.2156862745098, size: 1 },\r\n // { x: 323.093525179856, y: 3.01960784313725, size: 1 },\r\n // { x: 342.517985611511, y: 3.2156862745098, size: 1 },\r\n // { x: 4.53237410071942, y: 2.66666666666667, size: 1 },\r\n // { x: 5.17985611510791, y: 2.98039215686275, size: 1 },\r\n // { x: 6.47482014388489, y: 3.01960784313725, size: 1 },\r\n // { x: 90.6474820143885, y: 3.17647058823529, size: 1 },\r\n // { x: 109.424460431655, y: 4.03921568627451, size: 1 },\r\n // { x: 178.705035971223, y: 2.70588235294118, size: 1 },\r\n // { x: 179.352517985612, y: 3.05882352941176, size: 1 },\r\n // { x: 180.647482014388, y: 3.33333333333333, size: 1 },\r\n // { x: 199.424460431655, y: 2.82352941176471, size: 1 },\r\n // { x: 218.201438848921, y: 3.88235294117647, size: 1 },\r\n // { x: 222.086330935252, y: 2.94117647058824, size: 1 },\r\n // { x: 223.381294964029, y: 3.92156862745098, size: 1 },\r\n // { x: 242.805755395683, y: 3.05882352941176, size: 1 },\r\n // { x: 264.172661870504, y: 3.09803921568627, size: 1 },\r\n // { x: 272.589928057554, y: 4.07843137254902, size: 1 },\r\n // { x: 275.179856115108, y: 4, size: 1 },\r\n // { x: 281.007194244604, y: 4.03921568627451, size: 1 },\r\n // { x: 285.539568345324, y: 3.17647058823529, size: 1 },\r\n // { x: 306.258992805755, y: 3.09803921568627, size: 1 },\r\n // { x: 308.201438848921, y: 2.94117647058824, size: 1 },\r\n // { x: 330.215827338129, y: 4, size: 1 },\r\n // { x: 336.043165467626, y: 4.15686274509804, size: 1 },\r\n // { x: 336.690647482014, y: 4.11764705882353, size: 1 },\r\n // { x: 340.575539568345, y: 4.07843137254902, size: 1 },\r\n // { x: 36.2589928057554, y: 4.03921568627451, size: 1 },\r\n // { x: 37.5539568345324, y: 3.96078431372549, size: 1 },\r\n // { x: 53.0935251798561, y: 3.09803921568627, size: 1 },\r\n // { x: 55.0359712230216, y: 2.7843137254902, size: 1 },\r\n // { x: 55.6834532374101, y: 3.2156862745098, size: 1 },\r\n // { x: 133.381294964029, y: 3.88235294117647, size: 1 },\r\n // { x: 142.446043165468, y: 3.05882352941176, size: 1 },\r\n // { x: 164.460431654676, y: 3.13725490196078, size: 1 },\r\n // { x: 205.89928057554, y: 2.98039215686275, size: 1 },\r\n // { x: 207.194244604317, y: 2.98039215686275, size: 1 },\r\n // { x: 207.841726618705, y: 2.7843137254902, size: 1 },\r\n // { x: 227.26618705036, y: 2.86274509803922, size: 1 },\r\n // { x: 227.913669064748, y: 2.70588235294118, size: 1 },\r\n // { x: 234.388489208633, y: 3.96078431372549, size: 1 },\r\n // { x: 254.460431654676, y: 3.96078431372549, size: 1 },\r\n // { x: 283.597122302158, y: 3.96078431372549, size: 1 },\r\n // { x: 315.323741007194, y: 2.94117647058824, size: 1 },\r\n // { x: 345.755395683453, y: 3.96078431372549, size: 1 },\r\n // { x: 18.1621621621622, y: 3.33333333333333, size: 1 },\r\n // { x: 20.1081081081081, y: 3.2156862745098, size: 1 },\r\n // { x: 22.0540540540541, y: 3.76470588235294, size: 1 },\r\n // { x: 41.5135135135135, y: 3.09803921568627, size: 1 },\r\n // { x: 42.1621621621622, y: 3.09803921568627, size: 1 },\r\n // { x: 42.8108108108108, y: 3.88235294117647, size: 1 },\r\n // { x: 45.4054054054054, y: 3.92156862745098, size: 1 },\r\n // { x: 47.3513513513514, y: 3.96078431372549, size: 1 },\r\n // { x: 62.2702702702703, y: 3.29411764705882, size: 1 },\r\n // { x: 69.4054054054054, y: 3.37254901960784, size: 1 },\r\n // { x: 81.7297297297297, y: 3.13725490196078, size: 1 },\r\n // { x: 83.6756756756757, y: 2.86274509803922, size: 1 },\r\n // { x: 84.972972972973, y: 3.17647058823529, size: 1 },\r\n // { x: 96.6486486486486, y: 3.80392156862745, size: 1 },\r\n // { x: 104.432432432432, y: 3.29411764705882, size: 1 },\r\n // { x: 105.72972972973, y: 2.98039215686275, size: 1 },\r\n // { x: 121.297297297297, y: 3.49019607843137, size: 1 },\r\n // { x: 124.540540540541, y: 3.88235294117647, size: 1 },\r\n // { x: 142.702702702703, y: 4.03921568627451, size: 1 },\r\n // { x: 149.837837837838, y: 3.84313725490196, size: 1 },\r\n // { x: 157.621621621622, y: 4.07843137254902, size: 1 },\r\n // { x: 171.891891891892, y: 3.13725490196078, size: 1 },\r\n // { x: 215.351351351351, y: 3.2156862745098, size: 1 },\r\n // { x: 232.864864864865, y: 3.25490196078431, size: 1 },\r\n // { x: 234.810810810811, y: 3.01960784313725, size: 1 },\r\n // { x: 235.459459459459, y: 2.98039215686275, size: 1 },\r\n // { x: 239.351351351351, y: 3.88235294117647, size: 1 },\r\n // { x: 241.297297297297, y: 3.84313725490196, size: 1 },\r\n // { x: 254.27027027027, y: 3.29411764705882, size: 1 },\r\n // { x: 258.162162162162, y: 2.82352941176471, size: 1 },\r\n // { x: 304.216216216216, y: 3.92156862745098, size: 1 },\r\n // { x: 321.72972972973, y: 3.2156862745098, size: 1 },\r\n // { x: 322.378378378378, y: 3.13725490196078, size: 1 },\r\n // { x: 323.027027027027, y: 3.05882352941176, size: 1 },\r\n // { x: 337.297297297297, y: 3.88235294117647, size: 1 },\r\n // { x: 341.189189189189, y: 3.2156862745098, size: 1 },\r\n // { x: 342.486486486487, y: 3.01960784313725, size: 1 },\r\n // { x: 343.783783783784, y: 3.01960784313725, size: 1 },\r\n // { x: 26.5467625899281, y: 2.90196078431373, size: 1 },\r\n // { x: 47.2661870503597, y: 3.17647058823529, size: 1 },\r\n // { x: 47.9136690647482, y: 3.13725490196078, size: 1 },\r\n // { x: 70.5755395683453, y: 2.94117647058824, size: 1 },\r\n // { x: 71.2230215827338, y: 2.70588235294118, size: 1 },\r\n // { x: 189.064748201439, y: 3.84313725490196, size: 1 },\r\n // { x: 190.359712230216, y: 3.96078431372549, size: 1 },\r\n // { x: 191.654676258993, y: 3.96078431372549, size: 1 },\r\n // { x: 194.244604316547, y: 3.92156862745098, size: 1 },\r\n // { x: 198.776978417266, y: 2.54901960784314, size: 1 },\r\n // { x: 222.086330935252, y: 2.86274509803922, size: 1 },\r\n // { x: 263.525179856115, y: 2.94117647058824, size: 1 },\r\n // { x: 267.410071942446, y: 4, size: 1 },\r\n // { x: 271.294964028777, y: 4.11764705882353, size: 1 },\r\n // { x: 280.359712230216, y: 4, size: 1 },\r\n // { x: 285.539568345324, y: 2.58823529411765, size: 1 },\r\n // { x: 287.482014388489, y: 4, size: 1 },\r\n // { x: 306.906474820144, y: 2.7843137254902, size: 1 },\r\n // { x: 313.381294964029, y: 3.96078431372549, size: 1 },\r\n // { x: 331.510791366906, y: 4.11764705882353, size: 1 },\r\n // { x: 337.338129496403, y: 4.03921568627451, size: 1 },\r\n // { x: 349.640287769784, y: 2.98039215686275, size: 1 },\r\n // { x: 1.29496402877698, y: 4, size: 1 },\r\n // { x: 11.0071942446043, y: 2.35294117647059, size: 1 },\r\n // { x: 11.6546762589928, y: 2.3921568627451, size: 1 },\r\n // { x: 26.5467625899281, y: 4.11764705882353, size: 1 },\r\n // { x: 32.3741007194245, y: 3.05882352941176, size: 1 },\r\n // { x: 33.0215827338129, y: 2.23529411764706, size: 1 },\r\n // { x: 54.3884892086331, y: 2.58823529411765, size: 1 },\r\n // { x: 55.0359712230216, y: 2.70588235294118, size: 1 },\r\n // { x: 75.7553956834532, y: 2.90196078431373, size: 1 },\r\n // { x: 185.827338129496, y: 2.94117647058824, size: 1 },\r\n // { x: 194.892086330935, y: 4.11764705882353, size: 1 },\r\n // { x: 249.928057553957, y: 2.94117647058824, size: 1 },\r\n // { x: 250.575539568345, y: 2.86274509803922, size: 1 },\r\n // { x: 324.388489208633, y: 4, size: 1 },\r\n // { x: 358.057553956835, y: 2.82352941176471, size: 1 },\r\n // { x: 16.1870503597122, y: 4.03921568627451, size: 1 },\r\n // { x: 105.539568345324, y: 3.09803921568627, size: 1 },\r\n // { x: 106.187050359712, y: 3.09803921568627, size: 1 },\r\n // { x: 148.273381294964, y: 3.05882352941176, size: 1 },\r\n // { x: 149.568345323741, y: 3.2156862745098, size: 1 },\r\n // { x: 203.956834532374, y: 3.92156862745098, size: 1 },\r\n // { x: 262.230215827338, y: 4, size: 1 },\r\n // { x: 264.820143884892, y: 4, size: 1 },\r\n // { x: 300.431654676259, y: 2.94117647058824, size: 1 },\r\n // { x: 322.446043165468, y: 2.86274509803922, size: 1 },\r\n // { x: 341.223021582734, y: 3.13725490196078, size: 1 },\r\n // { x: 341.870503597122, y: 3.05882352941176, size: 1 },\r\n // { x: 12.972972972973, y: 4.11764705882353, size: 1 },\r\n // { x: 17.5135135135135, y: 4.03921568627451, size: 1 },\r\n // { x: 25.2972972972973, y: 2.74509803921569, size: 1 },\r\n // { x: 25.9459459459459, y: 2.82352941176471, size: 1 },\r\n // { x: 37.6216216216216, y: 3.41176470588235, size: 1 },\r\n // { x: 68.7567567567568, y: 3.09803921568627, size: 1 },\r\n // { x: 88.2162162162162, y: 3.37254901960784, size: 1 },\r\n // { x: 88.8648648648649, y: 3.13725490196078, size: 1 },\r\n // { x: 89.5135135135135, y: 3.33333333333333, size: 1 },\r\n // { x: 90.1621621621622, y: 2.98039215686275, size: 1 },\r\n // { x: 90.8108108108108, y: 3.09803921568627, size: 1 },\r\n // { x: 91.4594594594595, y: 2.7843137254902, size: 1 },\r\n // { x: 92.1081081081081, y: 3.09803921568627, size: 1 },\r\n // { x: 148.540540540541, y: 3.92156862745098, size: 1 },\r\n // { x: 181.621621621622, y: 3.84313725490196, size: 1 },\r\n // { x: 185.513513513514, y: 3.88235294117647, size: 1 },\r\n // { x: 203.027027027027, y: 3.41176470588235, size: 1 },\r\n // { x: 217.945945945946, y: 3.25490196078431, size: 1 },\r\n // { x: 241.297297297297, y: 2.74509803921569, size: 1 },\r\n // { x: 241.945945945946, y: 2.82352941176471, size: 1 },\r\n // { x: 242.594594594595, y: 3.09803921568627, size: 1 },\r\n // { x: 243.243243243243, y: 3.05882352941176, size: 1 },\r\n // { x: 262.054054054054, y: 3.92156862745098, size: 1 },\r\n // { x: 267.243243243243, y: 3.88235294117647, size: 1 },\r\n // { x: 275.027027027027, y: 3.76470588235294, size: 1 },\r\n // { x: 278.918918918919, y: 3.88235294117647, size: 1 },\r\n // { x: 280.216216216216, y: 3.96078431372549, size: 1 },\r\n // { x: 282.810810810811, y: 3.25490196078431, size: 1 },\r\n // { x: 284.108108108108, y: 3.25490196078431, size: 1 },\r\n // { x: 284.756756756757, y: 3.09803921568627, size: 1 },\r\n // { x: 285.405405405405, y: 3.01960784313725, size: 1 },\r\n // { x: 286.054054054054, y: 3.13725490196078, size: 1 },\r\n // { x: 286.702702702703, y: 3.17647058823529, size: 1 },\r\n // { x: 287.351351351351, y: 3.88235294117647, size: 1 },\r\n // { x: 308.756756756757, y: 3.80392156862745, size: 1 },\r\n // { x: 328.864864864865, y: 3.25490196078431, size: 1 },\r\n // { x: 329.513513513513, y: 3.01960784313725, size: 1 },\r\n // { x: 349.621621621622, y: 3.17647058823529, size: 1 },\r\n // { x: 358.054054054054, y: 4, size: 1 },\r\n // { x: 11.0071942446043, y: 2.47058823529412, size: 1 },\r\n // { x: 12.3021582733813, y: 2.7843137254902, size: 1 },\r\n // { x: 34.3165467625899, y: 3.13725490196078, size: 1 },\r\n // { x: 54.3884892086331, y: 3.09803921568627, size: 1 },\r\n // { x: 75.7553956834532, y: 3.09803921568627, size: 1 },\r\n // { x: 166.402877697842, y: 4, size: 1 },\r\n // { x: 176.762589928058, y: 4, size: 1 },\r\n // { x: 179.352517985612, y: 4, size: 1 },\r\n // { x: 185.827338129496, y: 2.98039215686275, size: 1 },\r\n // { x: 266.762589928058, y: 4.11764705882353, size: 1 },\r\n // { x: 270.647482014389, y: 2.98039215686275, size: 1 },\r\n // { x: 271.294964028777, y: 2.66666666666667, size: 1 },\r\n // { x: 283.597122302158, y: 3.92156862745098, size: 1 },\r\n // { x: 333.453237410072, y: 4.07843137254902, size: 1 },\r\n // { x: 345.107913669065, y: 4.19607843137255, size: 1 },\r\n // { x: 356.115107913669, y: 2.90196078431373, size: 1 },\r\n // { x: 17.4820143884892, y: 3.09803921568627, size: 1 },\r\n // { x: 18.1294964028777, y: 3.09803921568627, size: 1 },\r\n // { x: 27.1942446043165, y: 4, size: 1 },\r\n // { x: 64.1007194244604, y: 3.96078431372549, size: 1 },\r\n // { x: 69.9280575539568, y: 4.19607843137255, size: 1 },\r\n // { x: 82.8776978417266, y: 2.98039215686275, size: 1 },\r\n // { x: 109.424460431655, y: 3.96078431372549, size: 1 },\r\n // { x: 125.611510791367, y: 2.19607843137255, size: 1 },\r\n // { x: 126.258992805755, y: 1.49019607843137, size: 1 },\r\n // { x: 126.906474820144, y: 1.92156862745098, size: 1 },\r\n // { x: 127.553956834532, y: 2.15686274509804, size: 1 },\r\n // { x: 128.201438848921, y: 3.05882352941176, size: 1 },\r\n // { x: 130.791366906475, y: 2.7843137254902, size: 1 },\r\n // { x: 135.323741007194, y: 2.82352941176471, size: 1 },\r\n // { x: 141.151079136691, y: 2.74509803921569, size: 1 },\r\n // { x: 141.798561151079, y: 2.82352941176471, size: 1 },\r\n // { x: 201.36690647482, y: 4, size: 1 },\r\n // { x: 233.093525179856, y: 3.05882352941176, size: 1 },\r\n // { x: 233.741007194245, y: 2.66666666666667, size: 1 },\r\n // { x: 234.388489208633, y: 2.54901960784314, size: 1 },\r\n // { x: 277.122302158273, y: 2.70588235294118, size: 1 },\r\n // { x: 297.841726618705, y: 3.05882352941176, size: 1 },\r\n // { x: 298.489208633094, y: 2.35294117647059, size: 1 },\r\n // { x: 299.136690647482, y: 2.47058823529412, size: 1 },\r\n // { x: 306.258992805755, y: 3.92156862745098, size: 1 },\r\n // { x: 319.856115107914, y: 2.43137254901961, size: 1 },\r\n // { x: 320.503597122302, y: 2.15686274509804, size: 1 },\r\n // { x: 3.23741007194245, y: 2.74509803921569, size: 1 },\r\n // { x: 3.88489208633094, y: 2.86274509803922, size: 1 },\r\n // { x: 24.6043165467626, y: 2.58823529411765, size: 1 },\r\n // { x: 25.2517985611511, y: 2.50980392156863, size: 1 },\r\n // { x: 138.561151079137, y: 4.07843137254902, size: 1 },\r\n // { x: 239.568345323741, y: 3.37254901960784, size: 1 },\r\n // { x: 241.510791366906, y: 3.13725490196078, size: 1 },\r\n // { x: 262.230215827338, y: 2.7843137254902, size: 1 },\r\n // { x: 284.244604316547, y: 3.2156862745098, size: 1 },\r\n // { x: 285.539568345324, y: 2.86274509803922, size: 1 },\r\n // { x: 307.553956834532, y: 3.96078431372549, size: 1 },\r\n // { x: 328.920863309353, y: 3.09803921568627, size: 1 },\r\n // { x: 348.345323741007, y: 3.13725490196078, size: 1 },\r\n // { x: 349.640287769784, y: 3.09803921568627, size: 1 },\r\n // { x: 9.72972972972973, y: 3.05882352941176, size: 1 },\r\n // { x: 10.3783783783784, y: 3.05882352941176, size: 1 },\r\n // { x: 11.027027027027, y: 2.94117647058824, size: 1 },\r\n // { x: 33.0810810810811, y: 2.74509803921569, size: 1 },\r\n // { x: 53.1891891891892, y: 2.94117647058824, size: 1 },\r\n // { x: 53.8378378378378, y: 2.98039215686275, size: 1 },\r\n // { x: 77.1891891891892, y: 3.2156862745098, size: 1 },\r\n // { x: 96.6486486486486, y: 3.13725490196078, size: 1 },\r\n // { x: 97.2972972972973, y: 3.13725490196078, size: 1 },\r\n // { x: 97.945945945946, y: 3.05882352941176, size: 1 },\r\n // { x: 98.5945945945946, y: 2.90196078431373, size: 1 },\r\n // { x: 99.8918918918919, y: 3.33333333333333, size: 1 },\r\n // { x: 107.027027027027, y: 4.07843137254902, size: 1 },\r\n // { x: 111.567567567568, y: 3.80392156862745, size: 1 },\r\n // { x: 118.054054054054, y: 2.94117647058824, size: 1 },\r\n // { x: 118.702702702703, y: 3.2156862745098, size: 1 },\r\n // { x: 119.351351351351, y: 3.2156862745098, size: 1 },\r\n // { x: 125.837837837838, y: 3.92156862745098, size: 1 },\r\n // { x: 141.405405405405, y: 3.29411764705882, size: 1 },\r\n // { x: 142.054054054054, y: 3.25490196078431, size: 1 },\r\n // { x: 145.945945945946, y: 3.88235294117647, size: 1 },\r\n // { x: 161.513513513514, y: 3.05882352941176, size: 1 },\r\n // { x: 162.162162162162, y: 3.2156862745098, size: 1 },\r\n // { x: 162.810810810811, y: 2.98039215686275, size: 1 },\r\n // { x: 163.459459459459, y: 3.09803921568627, size: 1 },\r\n // { x: 182.918918918919, y: 2.90196078431373, size: 1 },\r\n // { x: 184.864864864865, y: 2.82352941176471, size: 1 },\r\n // { x: 185.513513513514, y: 3.17647058823529, size: 1 },\r\n // { x: 199.783783783784, y: 3.88235294117647, size: 1 },\r\n // { x: 207.567567567568, y: 4.11764705882353, size: 1 },\r\n // { x: 241.297297297297, y: 4, size: 1 },\r\n // { x: 247.783783783784, y: 2.94117647058824, size: 1 },\r\n // { x: 248.432432432432, y: 3.05882352941176, size: 1 },\r\n // { x: 249.081081081081, y: 2.54901960784314, size: 1 },\r\n // { x: 249.72972972973, y: 2.47058823529412, size: 1 },\r\n // { x: 258.162162162162, y: 3.92156862745098, size: 1 },\r\n // { x: 280.864864864865, y: 3.80392156862745, size: 1 },\r\n // { x: 291.243243243243, y: 3.92156862745098, size: 1 },\r\n // { x: 292.540540540541, y: 3.88235294117647, size: 1 },\r\n // { x: 293.189189189189, y: 3.84313725490196, size: 1 },\r\n // { x: 299.027027027027, y: 3.96078431372549, size: 1 },\r\n // { x: 300.324324324324, y: 3.92156862745098, size: 1 },\r\n // { x: 313.297297297297, y: 3.05882352941176, size: 1 },\r\n // { x: 313.945945945946, y: 3.05882352941176, size: 1 },\r\n // { x: 333.405405405405, y: 3.09803921568627, size: 1 },\r\n // { x: 334.702702702703, y: 2.62745098039216, size: 1 },\r\n // { x: 335.351351351351, y: 2.58823529411765, size: 1 },\r\n // { x: 336, y: 2.98039215686275, size: 1 },\r\n // { x: 336.648648648649, y: 2.98039215686275, size: 1 },\r\n // { x: 343.135135135135, y: 4.03921568627451, size: 1 },\r\n // { x: 21.3669064748201, y: 3.92156862745098, size: 1 },\r\n // { x: 22.6618705035971, y: 4.15686274509804, size: 1 },\r\n // { x: 30.431654676259, y: 4.07843137254902, size: 1 },\r\n // { x: 34.9640287769784, y: 4, size: 1 },\r\n // { x: 36.9064748201439, y: 3.96078431372549, size: 1 },\r\n // { x: 51.1510791366906, y: 4.11764705882353, size: 1 },\r\n // { x: 55.6834532374101, y: 4.15686274509804, size: 1 },\r\n // { x: 56.3309352517986, y: 4.03921568627451, size: 1 },\r\n // { x: 56.9784172661871, y: 3.92156862745098, size: 1 },\r\n // { x: 67.9856115107914, y: 4.23529411764706, size: 1 },\r\n // { x: 70.5755395683453, y: 4.11764705882353, size: 1 },\r\n // { x: 75.7553956834532, y: 4.15686274509804, size: 1 },\r\n // { x: 125.611510791367, y: 2.7843137254902, size: 1 },\r\n // { x: 126.258992805755, y: 3.05882352941176, size: 1 },\r\n // { x: 211.726618705036, y: 3.17647058823529, size: 1 },\r\n // { x: 212.374100719424, y: 3.09803921568627, size: 1 },\r\n // { x: 218.201438848921, y: 4.03921568627451, size: 1 },\r\n // { x: 229.208633093525, y: 4.03921568627451, size: 1 },\r\n // { x: 230.503597122302, y: 4.11764705882353, size: 1 },\r\n // { x: 234.388489208633, y: 3.05882352941176, size: 1 },\r\n // { x: 235.035971223022, y: 2.74509803921569, size: 1 },\r\n // { x: 235.68345323741, y: 2.74509803921569, size: 1 },\r\n // { x: 53.0935251798561, y: 3.96078431372549, size: 1 },\r\n // { x: 67.3381294964029, y: 3.13725490196078, size: 1 },\r\n // { x: 90, y: 3.17647058823529, size: 1 },\r\n // { x: 179.352517985612, y: 3.88235294117647, size: 1 },\r\n // { x: 304.31654676259, y: 3.13725490196078, size: 1 },\r\n // { x: 306.258992805755, y: 2.70588235294118, size: 1 },\r\n // { x: 357.410071942446, y: 4.03921568627451, size: 1 },\r\n // { x: 51.1510791366906, y: 3.29411764705882, size: 1 },\r\n // { x: 53.0935251798561, y: 2.27450980392157, size: 1 },\r\n // { x: 73.1654676258993, y: 3.13725490196078, size: 1 },\r\n // { x: 74.4604316546763, y: 2.54901960784314, size: 1 },\r\n // { x: 75.1079136690647, y: 2.54901960784314, size: 1 },\r\n // { x: 82.2302158273381, y: 3.96078431372549, size: 1 },\r\n // { x: 96.4748201438849, y: 3.13725490196078, size: 1 },\r\n // { x: 117.841726618705, y: 2.7843137254902, size: 1 },\r\n // { x: 118.489208633094, y: 2.66666666666667, size: 1 },\r\n // { x: 139.208633093525, y: 2.54901960784314, size: 1 },\r\n // { x: 139.856115107914, y: 2.31372549019608, size: 1 },\r\n // { x: 159.280575539568, y: 3.13725490196078, size: 1 },\r\n // { x: 160.575539568345, y: 2.86274509803922, size: 1 },\r\n // { x: 161.223021582734, y: 2.62745098039216, size: 1 },\r\n // { x: 203.309352517986, y: 3.05882352941176, size: 1 },\r\n // { x: 203.956834532374, y: 2.90196078431373, size: 1 },\r\n // { x: 204.604316546763, y: 1.88235294117647, size: 1 },\r\n // { x: 209.136690647482, y: 4, size: 1 },\r\n // { x: 219.496402877698, y: 4.07843137254902, size: 1 },\r\n // { x: 224.028776978417, y: 3.01960784313725, size: 1 },\r\n // { x: 224.676258992806, y: 2.86274509803922, size: 1 },\r\n // { x: 225.971223021583, y: 1.56862745098039, size: 1 },\r\n // { x: 268.057553956835, y: 3.09803921568627, size: 1 },\r\n // { x: 268.705035971223, y: 2.74509803921569, size: 1 },\r\n // { x: 269.352517985611, y: 2.43137254901961, size: 1 },\r\n // { x: 312.086330935252, y: 2.31372549019608, size: 1 },\r\n // { x: 312.73381294964, y: 2.35294117647059, size: 1 },\r\n // { x: 1.94594594594595, y: 3.96078431372549, size: 1 },\r\n // { x: 11.027027027027, y: 3.80392156862745, size: 1 },\r\n // { x: 16.2162162162162, y: 3.29411764705882, size: 1 },\r\n // { x: 17.5135135135135, y: 3.09803921568627, size: 1 },\r\n // { x: 18.1621621621622, y: 2.82352941176471, size: 1 },\r\n // { x: 18.8108108108108, y: 2.90196078431373, size: 1 },\r\n // { x: 38.9189189189189, y: 3.05882352941176, size: 1 },\r\n // { x: 53.8378378378378, y: 3.84313725490196, size: 1 },\r\n // { x: 63.5675675675676, y: 4.03921568627451, size: 1 },\r\n // { x: 81.7297297297297, y: 3.37254901960784, size: 1 },\r\n // { x: 82.3783783783784, y: 3.49019607843137, size: 1 },\r\n // { x: 89.5135135135135, y: 4, size: 1 },\r\n // { x: 101.837837837838, y: 3.29411764705882, size: 1 },\r\n // { x: 103.135135135135, y: 2.94117647058824, size: 1 },\r\n // { x: 103.783783783784, y: 3.17647058823529, size: 1 },\r\n // { x: 104.432432432432, y: 3.05882352941176, size: 1 },\r\n // { x: 105.081081081081, y: 2.90196078431373, size: 1 },\r\n // { x: 112.216216216216, y: 3.49019607843137, size: 1 },\r\n // { x: 123.243243243243, y: 3.41176470588235, size: 1 },\r\n // { x: 124.540540540541, y: 3.13725490196078, size: 1 },\r\n // { x: 125.189189189189, y: 2.86274509803922, size: 1 },\r\n // { x: 125.837837837838, y: 3.09803921568627, size: 1 },\r\n // { x: 126.486486486486, y: 3.05882352941176, size: 1 },\r\n // { x: 127.135135135135, y: 3.13725490196078, size: 1 },\r\n // { x: 145.945945945946, y: 3.33333333333333, size: 1 },\r\n // { x: 147.891891891892, y: 3.2156862745098, size: 1 },\r\n // { x: 154.378378378378, y: 3.45098039215686, size: 1 },\r\n // { x: 166.702702702703, y: 3.96078431372549, size: 1 },\r\n // { x: 169.297297297297, y: 2.98039215686275, size: 1 },\r\n // { x: 169.945945945946, y: 2.7843137254902, size: 1 },\r\n // { x: 174.486486486486, y: 4, size: 1 },\r\n // { x: 175.783783783784, y: 3.96078431372549, size: 1 },\r\n // { x: 178.378378378378, y: 3.96078431372549, size: 1 },\r\n // { x: 179.675675675676, y: 3.84313725490196, size: 1 },\r\n // { x: 182.918918918919, y: 3.88235294117647, size: 1 },\r\n // { x: 184.864864864865, y: 3.88235294117647, size: 1 },\r\n // { x: 188.756756756757, y: 3.09803921568627, size: 1 },\r\n // { x: 190.054054054054, y: 2.94117647058824, size: 1 },\r\n // { x: 190.702702702703, y: 2.66666666666667, size: 1 },\r\n // { x: 191.351351351351, y: 2.7843137254902, size: 1 },\r\n // { x: 192, y: 2.98039215686275, size: 1 },\r\n // { x: 195.891891891892, y: 3.80392156862745, size: 1 },\r\n // { x: 202.378378378378, y: 4.15686274509804, size: 1 },\r\n // { x: 211.459459459459, y: 3.29411764705882, size: 1 },\r\n // { x: 212.108108108108, y: 3.05882352941176, size: 1 },\r\n // { x: 225.081081081081, y: 3.45098039215686, size: 1 },\r\n // { x: 240, y: 3.92156862745098, size: 1 },\r\n // { x: 249.081081081081, y: 3.96078431372549, size: 1 },\r\n // { x: 252.972972972973, y: 3.45098039215686, size: 1 },\r\n // { x: 254.27027027027, y: 3.33333333333333, size: 1 },\r\n // { x: 276.324324324324, y: 3.29411764705882, size: 1 },\r\n // { x: 309.405405405405, y: 3.92156862745098, size: 1 },\r\n // { x: 336, y: 3.49019607843137, size: 1 },\r\n // { x: 347.675675675676, y: 3.92156862745098, size: 1 },\r\n // { x: 356.756756756757, y: 4, size: 1 },\r\n // { x: 2.58992805755396, y: 3.2156862745098, size: 1 },\r\n // { x: 3.88489208633094, y: 3.09803921568627, size: 1 },\r\n // { x: 47.2661870503597, y: 4, size: 1 },\r\n // { x: 64.7482014388489, y: 3.92156862745098, size: 1 },\r\n // { x: 68.6330935251799, y: 3.13725490196078, size: 1 },\r\n // { x: 89.3525179856115, y: 2.43137254901961, size: 1 },\r\n // { x: 90, y: 2.82352941176471, size: 1 },\r\n // { x: 107.482014388489, y: 3.96078431372549, size: 1 },\r\n // { x: 110.719424460432, y: 3.05882352941176, size: 1 },\r\n // { x: 135.323741007194, y: 3.88235294117647, size: 1 },\r\n // { x: 262.230215827338, y: 2.94117647058824, size: 1 },\r\n // { x: 263.525179856115, y: 3.05882352941176, size: 1 },\r\n // { x: 304.964028776978, y: 3.2156862745098, size: 1 },\r\n // { x: 327.625899280576, y: 2.94117647058824, size: 1 },\r\n // { x: 328.273381294964, y: 3.09803921568627, size: 1 },\r\n // { x: 349.640287769784, y: 2.86274509803922, size: 1 },\r\n // { x: 350.287769784173, y: 2.86274509803922, size: 1 },\r\n // { x: 9.71223021582734, y: 3.09803921568627, size: 1 },\r\n // { x: 14.2446043165468, y: 4.11764705882353, size: 1 },\r\n // { x: 74.4604316546763, y: 2.94117647058824, size: 1 },\r\n // { x: 75.1079136690647, y: 3.09803921568627, size: 1 },\r\n // { x: 76.4028776978417, y: 2.82352941176471, size: 1 },\r\n // { x: 154.748201438849, y: 4.07843137254902, size: 1 },\r\n // { x: 185.179856115108, y: 4.11764705882353, size: 1 },\r\n // { x: 186.474820143885, y: 4.07843137254902, size: 1 },\r\n // { x: 235.035971223022, y: 3.92156862745098, size: 1 },\r\n // { x: 248.63309352518, y: 4, size: 1 },\r\n // { x: 290.071942446043, y: 2.74509803921569, size: 1 },\r\n // { x: 290.719424460432, y: 2.54901960784314, size: 1 },\r\n // { x: 292.014388489209, y: 2.98039215686275, size: 1 },\r\n // { x: 59.568345323741, y: 3.09803921568627, size: 1 },\r\n // { x: 88.705035971223, y: 4, size: 1 },\r\n // { x: 103.597122302158, y: 3.17647058823529, size: 1 },\r\n // { x: 124.31654676259, y: 2.94117647058824, size: 1 },\r\n // { x: 124.964028776978, y: 2.62745098039216, size: 1 },\r\n // { x: 172.230215827338, y: 3.96078431372549, size: 1 },\r\n // { x: 214.964028776978, y: 3.96078431372549, size: 1 },\r\n // { x: 276.474820143885, y: 2.98039215686275, size: 1 },\r\n // { x: 277.122302158273, y: 2.35294117647059, size: 1 },\r\n // { x: 277.769784172662, y: 2.35294117647059, size: 1 },\r\n // { x: 323.741007194245, y: 4.03921568627451, size: 1 },\r\n // { x: 339.280575539568, y: 2.90196078431373, size: 1 },\r\n // { x: 340.575539568345, y: 2.19607843137255, size: 1 },\r\n // { x: 341.223021582734, y: 2.15686274509804, size: 1 },\r\n // { x: 341.870503597122, y: 3.25490196078431, size: 1 },\r\n // { x: 342.517985611511, y: 2.50980392156863, size: 1 },\r\n // { x: 345.107913669065, y: 2.90196078431373, size: 1 },\r\n // { x: 345.755395683453, y: 3.13725490196078, size: 1 },\r\n // { x: 350.287769784173, y: 2.94117647058824, size: 1 },\r\n // { x: 1.94244604316547, y: 3.05882352941176, size: 1 },\r\n // { x: 42.7338129496403, y: 4.07843137254902, size: 1 },\r\n // { x: 44.6762589928058, y: 3.25490196078431, size: 1 },\r\n // { x: 45.3237410071942, y: 2.43137254901961, size: 1 },\r\n // { x: 66.6906474820144, y: 2.7843137254902, size: 1 },\r\n // { x: 67.3381294964029, y: 2.86274509803922, size: 1 },\r\n // { x: 109.424460431655, y: 3.2156862745098, size: 1 },\r\n // { x: 110.071942446043, y: 2.54901960784314, size: 1 },\r\n // { x: 131.438848920863, y: 2.70588235294118, size: 1 },\r\n // { x: 147.625899280576, y: 4.15686274509804, size: 1 },\r\n // { x: 152.805755395683, y: 1.88235294117647, size: 1 },\r\n // { x: 153.453237410072, y: 1.92156862745098, size: 1 },\r\n // { x: 216.906474820144, y: 3.2156862745098, size: 1 },\r\n // { x: 217.553956834532, y: 2.70588235294118, size: 1 },\r\n // { x: 218.201438848921, y: 2.7843137254902, size: 1 },\r\n // { x: 277.122302158273, y: 4.19607843137255, size: 1 },\r\n // { x: 9.08108108108108, y: 3.2156862745098, size: 1 },\r\n // { x: 10.3783783783784, y: 3.96078431372549, size: 1 },\r\n // { x: 30.4864864864865, y: 3.05882352941176, size: 1 },\r\n // { x: 31.1351351351351, y: 3.13725490196078, size: 1 },\r\n // { x: 74.5945945945946, y: 3.2156862745098, size: 1 },\r\n // { x: 96, y: 3.29411764705882, size: 1 },\r\n // { x: 101.189189189189, y: 3.88235294117647, size: 1 },\r\n // { x: 103.783783783784, y: 3.92156862745098, size: 1 },\r\n // { x: 104.432432432432, y: 4.03921568627451, size: 1 },\r\n // { x: 129.081081081081, y: 3.88235294117647, size: 1 },\r\n // { x: 138.810810810811, y: 3.05882352941176, size: 1 },\r\n // { x: 139.459459459459, y: 3.2156862745098, size: 1 },\r\n // { x: 142.702702702703, y: 3.92156862745098, size: 1 },\r\n // { x: 151.783783783784, y: 3.88235294117647, size: 1 },\r\n // { x: 177.72972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 180.324324324324, y: 3.96078431372549, size: 1 },\r\n // { x: 198.486486486486, y: 3.92156862745098, size: 1 },\r\n // { x: 203.027027027027, y: 3.33333333333333, size: 1 },\r\n // { x: 204.972972972973, y: 4.11764705882353, size: 1 },\r\n // { x: 206.918918918919, y: 4.03921568627451, size: 1 },\r\n // { x: 208.864864864865, y: 3.88235294117647, size: 1 },\r\n // { x: 209.513513513514, y: 3.88235294117647, size: 1 },\r\n // { x: 211.459459459459, y: 4.11764705882353, size: 1 },\r\n // { x: 214.702702702703, y: 4.07843137254902, size: 1 },\r\n // { x: 216, y: 4, size: 1 },\r\n // { x: 217.945945945946, y: 4, size: 1 },\r\n // { x: 220.540540540541, y: 4.07843137254902, size: 1 },\r\n // { x: 222.486486486486, y: 3.96078431372549, size: 1 },\r\n // { x: 236.756756756757, y: 3.92156862745098, size: 1 },\r\n // { x: 238.702702702703, y: 3.88235294117647, size: 1 },\r\n // { x: 253.621621621622, y: 3.92156862745098, size: 1 },\r\n // { x: 254.27027027027, y: 3.88235294117647, size: 1 },\r\n // { x: 258.162162162162, y: 3.88235294117647, size: 1 },\r\n // { x: 258.810810810811, y: 4.07843137254902, size: 1 },\r\n // { x: 259.459459459459, y: 3.88235294117647, size: 1 },\r\n // { x: 260.108108108108, y: 3.92156862745098, size: 1 },\r\n // { x: 260.756756756757, y: 4.07843137254902, size: 1 },\r\n // { x: 267.243243243243, y: 3.29411764705882, size: 1 },\r\n // { x: 275.675675675676, y: 3.96078431372549, size: 1 },\r\n // { x: 289.297297297297, y: 3.33333333333333, size: 1 },\r\n // { x: 289.945945945946, y: 3.13725490196078, size: 1 },\r\n // { x: 290.594594594595, y: 3.2156862745098, size: 1 },\r\n // { x: 291.243243243243, y: 2.62745098039216, size: 1 },\r\n // { x: 323.027027027027, y: 3.41176470588235, size: 1 },\r\n // { x: 339.243243243243, y: 4.11764705882353, size: 1 },\r\n // { x: 341.837837837838, y: 3.92156862745098, size: 1 },\r\n // { x: 349.621621621622, y: 3.88235294117647, size: 1 },\r\n // { x: 354.810810810811, y: 2.98039215686275, size: 1 },\r\n // { x: 355.459459459459, y: 3.13725490196078, size: 1 },\r\n // { x: 46.6187050359712, y: 4.03921568627451, size: 1 },\r\n // { x: 56.3309352517986, y: 4, size: 1 },\r\n // { x: 59.568345323741, y: 3.13725490196078, size: 1 },\r\n // { x: 60.2158273381295, y: 3.01960784313725, size: 1 },\r\n // { x: 73.8129496402878, y: 3.2156862745098, size: 1 },\r\n // { x: 102.94964028777, y: 3.2156862745098, size: 1 },\r\n // { x: 123.021582733813, y: 4, size: 1 },\r\n // { x: 155.395683453237, y: 4.03921568627451, size: 1 },\r\n // { x: 168.992805755396, y: 2.98039215686275, size: 1 },\r\n // { x: 169.640287769784, y: 3.05882352941176, size: 1 },\r\n // { x: 170.287769784173, y: 3.01960784313725, size: 1 },\r\n // { x: 170.935251798561, y: 3.17647058823529, size: 1 },\r\n // { x: 172.877697841727, y: 3.25490196078431, size: 1 },\r\n // { x: 174.172661870504, y: 3.01960784313725, size: 1 },\r\n // { x: 178.057553956835, y: 3.13725490196078, size: 1 },\r\n // { x: 179.352517985612, y: 2.82352941176471, size: 1 },\r\n // { x: 180, y: 3.05882352941176, size: 1 },\r\n // { x: 181.294964028777, y: 2.90196078431373, size: 1 },\r\n // { x: 181.942446043165, y: 2.82352941176471, size: 1 },\r\n // { x: 186.474820143885, y: 3.09803921568627, size: 1 },\r\n // { x: 187.769784172662, y: 3.17647058823529, size: 1 },\r\n // { x: 189.712230215827, y: 2.90196078431373, size: 1 },\r\n // { x: 194.892086330935, y: 4.23529411764706, size: 1 },\r\n // { x: 204.604316546763, y: 4.03921568627451, size: 1 },\r\n // { x: 210.431654676259, y: 2.62745098039216, size: 1 },\r\n // { x: 211.079136690647, y: 2.7843137254902, size: 1 },\r\n // { x: 211.726618705036, y: 2.62745098039216, size: 1 },\r\n // { x: 212.374100719424, y: 2.47058823529412, size: 1 },\r\n // { x: 233.093525179856, y: 2.90196078431373, size: 1 },\r\n // { x: 234.388489208633, y: 2.7843137254902, size: 1 },\r\n // { x: 247.985611510791, y: 4.07843137254902, size: 1 },\r\n // { x: 268.705035971223, y: 4.03921568627451, size: 1 },\r\n // { x: 278.41726618705, y: 3.92156862745098, size: 1 },\r\n // { x: 280.359712230216, y: 4.03921568627451, size: 1 },\r\n // { x: 284.892086330935, y: 4.07843137254902, size: 1 },\r\n // { x: 318.561151079137, y: 2.98039215686275, size: 1 },\r\n // { x: 319.208633093525, y: 3.09803921568627, size: 1 },\r\n // { x: 23.3093525179856, y: 2.74509803921569, size: 1 },\r\n // { x: 23.9568345323741, y: 2.70588235294118, size: 1 },\r\n // { x: 66.6906474820144, y: 3.2156862745098, size: 1 },\r\n // { x: 88.705035971223, y: 3.17647058823529, size: 1 },\r\n // { x: 89.3525179856115, y: 2.7843137254902, size: 1 },\r\n // { x: 109.424460431655, y: 2.98039215686275, size: 1 },\r\n // { x: 132.73381294964, y: 3.96078431372549, size: 1 },\r\n // { x: 133.381294964029, y: 4.11764705882353, size: 1 },\r\n // { x: 134.676258992806, y: 4.15686274509804, size: 1 },\r\n // { x: 137.913669064748, y: 4, size: 1 },\r\n // { x: 140.503597122302, y: 4, size: 1 },\r\n // { x: 141.151079136691, y: 4.15686274509804, size: 1 },\r\n // { x: 142.446043165468, y: 4.11764705882353, size: 1 },\r\n // { x: 145.035971223022, y: 4.15686274509804, size: 1 },\r\n // { x: 154.748201438849, y: 4.27450980392157, size: 1 },\r\n // { x: 162.517985611511, y: 4.07843137254902, size: 1 },\r\n // { x: 163.812949640288, y: 4, size: 1 },\r\n // { x: 165.755395683453, y: 4, size: 1 },\r\n // { x: 167.05035971223, y: 4.07843137254902, size: 1 },\r\n // { x: 181.294964028777, y: 4.03921568627451, size: 1 },\r\n // { x: 182.589928057554, y: 3.96078431372549, size: 1 },\r\n // { x: 222.73381294964, y: 4.03921568627451, size: 1 },\r\n // { x: 227.26618705036, y: 4, size: 1 },\r\n // { x: 253.165467625899, y: 4.03921568627451, size: 1 },\r\n // { x: 341.870503597122, y: 4, size: 1 },\r\n // { x: 343.812949640288, y: 4.03921568627451, size: 1 },\r\n // { x: 346.402877697842, y: 3.25490196078431, size: 1 },\r\n // { x: 347.697841726619, y: 2.90196078431373, size: 1 },\r\n // { x: 7.13513513513514, y: 3.37254901960784, size: 1 },\r\n // { x: 8.43243243243243, y: 2.66666666666667, size: 1 },\r\n // { x: 9.08108108108108, y: 2.74509803921569, size: 1 },\r\n // { x: 30.4864864864865, y: 3.25490196078431, size: 1 },\r\n // { x: 31.1351351351351, y: 3.33333333333333, size: 1 },\r\n // { x: 38.2702702702703, y: 3.96078431372549, size: 1 },\r\n // { x: 43.4594594594595, y: 3.88235294117647, size: 1 },\r\n // { x: 44.1081081081081, y: 3.80392156862745, size: 1 },\r\n // { x: 49.2972972972973, y: 3.72549019607843, size: 1 },\r\n // { x: 97.945945945946, y: 3.88235294117647, size: 1 },\r\n // { x: 103.135135135135, y: 4.07843137254902, size: 1 },\r\n // { x: 111.567567567568, y: 4.23529411764706, size: 1 },\r\n // { x: 112.216216216216, y: 3.88235294117647, size: 1 },\r\n // { x: 113.513513513514, y: 3.92156862745098, size: 1 },\r\n // { x: 114.810810810811, y: 3.84313725490196, size: 1 },\r\n // { x: 116.756756756757, y: 3.25490196078431, size: 1 },\r\n // { x: 117.405405405405, y: 3.25490196078431, size: 1 },\r\n // { x: 138.162162162162, y: 3.29411764705882, size: 1 },\r\n // { x: 138.810810810811, y: 3.01960784313725, size: 1 },\r\n // { x: 158.918918918919, y: 3.09803921568627, size: 1 },\r\n // { x: 159.567567567568, y: 3.01960784313725, size: 1 },\r\n // { x: 160.216216216216, y: 3.09803921568627, size: 1 },\r\n // { x: 160.864864864865, y: 3.09803921568627, size: 1 },\r\n // { x: 161.513513513514, y: 2.86274509803922, size: 1 },\r\n // { x: 162.162162162162, y: 2.66666666666667, size: 1 },\r\n // { x: 209.513513513514, y: 4.03921568627451, size: 1 },\r\n // { x: 210.810810810811, y: 3.88235294117647, size: 1 },\r\n // { x: 219.243243243243, y: 4.15686274509804, size: 1 },\r\n // { x: 247.135135135135, y: 3.29411764705882, size: 1 },\r\n // { x: 254.27027027027, y: 3.96078431372549, size: 1 },\r\n // { x: 254.918918918919, y: 4.03921568627451, size: 1 },\r\n // { x: 256.216216216216, y: 4.11764705882353, size: 1 },\r\n // { x: 256.864864864865, y: 3.92156862745098, size: 1 },\r\n // { x: 257.513513513513, y: 3.96078431372549, size: 1 },\r\n // { x: 258.810810810811, y: 3.96078431372549, size: 1 },\r\n // { x: 264, y: 3.88235294117647, size: 1 },\r\n // { x: 265.297297297297, y: 4, size: 1 },\r\n // { x: 267.243243243243, y: 3.41176470588235, size: 1 },\r\n // { x: 268.540540540541, y: 3.09803921568627, size: 1 },\r\n // { x: 274.378378378378, y: 3.92156862745098, size: 1 },\r\n // { x: 276.324324324324, y: 4.11764705882353, size: 1 },\r\n // { x: 280.864864864865, y: 4.03921568627451, size: 1 },\r\n // { x: 281.513513513513, y: 3.84313725490196, size: 1 },\r\n // { x: 289.945945945946, y: 3.17647058823529, size: 1 },\r\n // { x: 296.432432432432, y: 3.84313725490196, size: 1 },\r\n // { x: 297.081081081081, y: 3.92156862745098, size: 1 },\r\n // { x: 299.027027027027, y: 3.84313725490196, size: 1 },\r\n // { x: 312, y: 3.05882352941176, size: 1 },\r\n // { x: 323.027027027027, y: 3.33333333333333, size: 1 },\r\n // { x: 324.972972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 332.756756756757, y: 3.09803921568627, size: 1 },\r\n // { x: 333.405405405405, y: 2.82352941176471, size: 1 },\r\n // { x: 338.594594594595, y: 3.45098039215686, size: 1 },\r\n // { x: 342.486486486487, y: 3.96078431372549, size: 1 },\r\n // { x: 354.810810810811, y: 3.33333333333333, size: 1 },\r\n // { x: 15.5395683453237, y: 3.09803921568627, size: 1 },\r\n // { x: 16.1870503597122, y: 2.74509803921569, size: 1 },\r\n // { x: 16.8345323741007, y: 3.2156862745098, size: 1 },\r\n // { x: 37.5539568345324, y: 2.66666666666667, size: 1 },\r\n // { x: 38.2014388489209, y: 2.82352941176471, size: 1 },\r\n // { x: 58.273381294964, y: 3.2156862745098, size: 1 },\r\n // { x: 59.568345323741, y: 2.62745098039216, size: 1 },\r\n // { x: 81.5827338129496, y: 2.31372549019608, size: 1 },\r\n // { x: 84.1726618705036, y: 4.07843137254902, size: 1 },\r\n // { x: 91.9424460431655, y: 4.19607843137255, size: 1 },\r\n // { x: 93.8848920863309, y: 4.07843137254902, size: 1 },\r\n // { x: 94.5323741007194, y: 3.96078431372549, size: 1 },\r\n // { x: 102.302158273381, y: 2.43137254901961, size: 1 },\r\n // { x: 102.94964028777, y: 2.43137254901961, size: 1 },\r\n // { x: 133.381294964029, y: 4, size: 1 },\r\n // { x: 141.151079136691, y: 4.03921568627451, size: 1 },\r\n // { x: 167.05035971223, y: 2.98039215686275, size: 1 },\r\n // { x: 167.697841726619, y: 2.19607843137255, size: 1 },\r\n // { x: 187.769784172662, y: 3.01960784313725, size: 1 },\r\n // { x: 189.064748201439, y: 2.35294117647059, size: 1 },\r\n // { x: 233.741007194245, y: 3.96078431372549, size: 1 },\r\n // { x: 287.482014388489, y: 4.23529411764706, size: 1 },\r\n // { x: 292.014388489209, y: 4.11764705882353, size: 1 },\r\n // { x: 339.928057553957, y: 3.25490196078431, size: 1 },\r\n // { x: 350.287769784173, y: 3.96078431372549, size: 1 },\r\n // { x: 5.8273381294964, y: 4, size: 1 },\r\n // { x: 6.47482014388489, y: 3.88235294117647, size: 1 },\r\n // { x: 32.3741007194245, y: 4.11764705882353, size: 1 },\r\n // { x: 55.0359712230216, y: 3.96078431372549, size: 1 },\r\n // { x: 56.9784172661871, y: 4.11764705882353, size: 1 },\r\n // { x: 57.6258992805755, y: 4.03921568627451, size: 1 },\r\n // { x: 69.2805755395683, y: 4.03921568627451, size: 1 },\r\n // { x: 73.1654676258993, y: 4.07843137254902, size: 1 },\r\n // { x: 101.007194244604, y: 3.96078431372549, size: 1 },\r\n // { x: 106.187050359712, y: 4.15686274509804, size: 1 },\r\n // { x: 110.071942446043, y: 3.01960784313725, size: 1 },\r\n // { x: 111.36690647482, y: 3.01960784313725, size: 1 },\r\n // { x: 115.89928057554, y: 4, size: 1 },\r\n // { x: 116.546762589928, y: 4.03921568627451, size: 1 },\r\n // { x: 121.726618705036, y: 3.92156862745098, size: 1 },\r\n // { x: 122.374100719424, y: 4.11764705882353, size: 1 },\r\n // { x: 125.611510791367, y: 4.07843137254902, size: 1 },\r\n // { x: 130.791366906475, y: 3.13725490196078, size: 1 },\r\n // { x: 134.028776978417, y: 4.11764705882353, size: 1 },\r\n // { x: 143.741007194245, y: 3.96078431372549, size: 1 },\r\n // { x: 154.748201438849, y: 4, size: 1 },\r\n // { x: 159.928057553957, y: 4, size: 1 },\r\n // { x: 163.165467625899, y: 4.07843137254902, size: 1 },\r\n // { x: 167.697841726619, y: 4.03921568627451, size: 1 },\r\n // { x: 181.942446043165, y: 3.96078431372549, size: 1 },\r\n // { x: 198.129496402878, y: 4, size: 1 },\r\n // { x: 200.071942446043, y: 4.03921568627451, size: 1 },\r\n // { x: 217.553956834532, y: 3.01960784313725, size: 1 },\r\n // { x: 218.848920863309, y: 2.74509803921569, size: 1 },\r\n // { x: 219.496402877698, y: 3.01960784313725, size: 1 },\r\n // { x: 252.517985611511, y: 4.03921568627451, size: 1 },\r\n // { x: 255.755395683453, y: 4.07843137254902, size: 1 },\r\n // { x: 257.05035971223, y: 4.15686274509804, size: 1 },\r\n // { x: 257.697841726619, y: 4.15686274509804, size: 1 },\r\n // { x: 267.410071942446, y: 4.35294117647059, size: 1 },\r\n // { x: 276.474820143885, y: 4.03921568627451, size: 1 },\r\n // { x: 291.36690647482, y: 4.11764705882353, size: 1 },\r\n // { x: 292.661870503597, y: 4.03921568627451, size: 1 },\r\n // { x: 293.309352517986, y: 4.07843137254902, size: 1 },\r\n // { x: 295.89928057554, y: 4.19607843137255, size: 1 },\r\n // { x: 300.431654676259, y: 4.15686274509804, size: 1 },\r\n // { x: 301.726618705036, y: 4, size: 1 },\r\n // { x: 325.035971223022, y: 2.98039215686275, size: 1 },\r\n // { x: 325.68345323741, y: 2.94117647058824, size: 1 },\r\n // { x: 326.330935251799, y: 3.05882352941176, size: 1 },\r\n // { x: 3.88489208633094, y: 4.03921568627451, size: 1 },\r\n // { x: 15.5395683453237, y: 4, size: 1 },\r\n // { x: 25.8992805755396, y: 3.92156862745098, size: 1 },\r\n // { x: 95.1798561151079, y: 3.05882352941176, size: 1 },\r\n // { x: 138.561151079137, y: 3.09803921568627, size: 1 },\r\n // { x: 139.208633093525, y: 4.15686274509804, size: 1 },\r\n // { x: 141.798561151079, y: 4.11764705882353, size: 1 },\r\n // { x: 152.158273381295, y: 4.07843137254902, size: 1 },\r\n // { x: 152.805755395683, y: 4.19607843137255, size: 1 },\r\n // { x: 196.187050359712, y: 4.11764705882353, size: 1 },\r\n // { x: 226.618705035971, y: 4, size: 1 },\r\n // { x: 231.798561151079, y: 4, size: 1 },\r\n // { x: 252.517985611511, y: 4.07843137254902, size: 1 },\r\n // { x: 268.057553956835, y: 3.13725490196078, size: 1 },\r\n // { x: 292.014388489209, y: 3.96078431372549, size: 1 },\r\n // { x: 310.143884892086, y: 3.2156862745098, size: 1 },\r\n // { x: 310.791366906475, y: 2.7843137254902, size: 1 },\r\n // { x: 311.438848920863, y: 3.29411764705882, size: 1 },\r\n // { x: 317.26618705036, y: 4, size: 1 },\r\n // { x: 352.877697841727, y: 3.96078431372549, size: 1 },\r\n // { x: 15.5675675675676, y: 3.09803921568627, size: 1 },\r\n // { x: 18.1621621621622, y: 3.72549019607843, size: 1 },\r\n // { x: 31.1351351351351, y: 3.76470588235294, size: 1 },\r\n // { x: 36.972972972973, y: 2.98039215686275, size: 1 },\r\n // { x: 37.6216216216216, y: 3.09803921568627, size: 1 },\r\n // { x: 38.9189189189189, y: 4.07843137254902, size: 1 },\r\n // { x: 40.2162162162162, y: 3.96078431372549, size: 1 },\r\n // { x: 44.1081081081081, y: 4, size: 1 },\r\n // { x: 49.9459459459459, y: 3.84313725490196, size: 1 },\r\n // { x: 51.2432432432432, y: 3.76470588235294, size: 1 },\r\n // { x: 53.1891891891892, y: 4.03921568627451, size: 1 },\r\n // { x: 54.4864864864865, y: 3.92156862745098, size: 1 },\r\n // { x: 60.3243243243243, y: 3.80392156862745, size: 1 },\r\n // { x: 73.945945945946, y: 4, size: 1 },\r\n // { x: 79.7837837837838, y: 3.2156862745098, size: 1 },\r\n // { x: 81.7297297297297, y: 3.96078431372549, size: 1 },\r\n // { x: 93.4054054054054, y: 4, size: 1 },\r\n // { x: 97.945945945946, y: 3.92156862745098, size: 1 },\r\n // { x: 101.189189189189, y: 3.33333333333333, size: 1 },\r\n // { x: 102.486486486486, y: 2.90196078431373, size: 1 },\r\n // { x: 117.405405405405, y: 3.49019607843137, size: 1 },\r\n // { x: 123.243243243243, y: 3.13725490196078, size: 1 },\r\n // { x: 123.891891891892, y: 3.17647058823529, size: 1 },\r\n // { x: 147.243243243243, y: 3.96078431372549, size: 1 },\r\n // { x: 149.189189189189, y: 4, size: 1 },\r\n // { x: 155.027027027027, y: 3.96078431372549, size: 1 },\r\n // { x: 157.621621621622, y: 3.92156862745098, size: 1 },\r\n // { x: 160.864864864865, y: 4, size: 1 },\r\n // { x: 166.702702702703, y: 2.94117647058824, size: 1 },\r\n // { x: 167.351351351351, y: 3.01960784313725, size: 1 },\r\n // { x: 168, y: 3.92156862745098, size: 1 },\r\n // { x: 169.297297297297, y: 3.96078431372549, size: 1 },\r\n // { x: 171.891891891892, y: 4.03921568627451, size: 1 },\r\n // { x: 172.540540540541, y: 3.84313725490196, size: 1 },\r\n // { x: 174.486486486486, y: 4.07843137254902, size: 1 },\r\n // { x: 177.081081081081, y: 4.11764705882353, size: 1 },\r\n // { x: 177.72972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 178.378378378378, y: 4.03921568627451, size: 1 },\r\n // { x: 181.621621621622, y: 3.96078431372549, size: 1 },\r\n // { x: 182.918918918919, y: 4.07843137254902, size: 1 },\r\n // { x: 183.567567567568, y: 3.92156862745098, size: 1 },\r\n // { x: 184.864864864865, y: 4.03921568627451, size: 1 },\r\n // { x: 185.513513513514, y: 4.03921568627451, size: 1 },\r\n // { x: 188.108108108108, y: 3.2156862745098, size: 1 },\r\n // { x: 188.756756756757, y: 3.25490196078431, size: 1 },\r\n // { x: 194.594594594595, y: 3.25490196078431, size: 1 },\r\n // { x: 210.162162162162, y: 3.13725490196078, size: 1 },\r\n // { x: 210.810810810811, y: 3.25490196078431, size: 1 },\r\n // { x: 236.756756756757, y: 4, size: 1 },\r\n // { x: 239.351351351351, y: 4.07843137254902, size: 1 },\r\n // { x: 240.648648648649, y: 3.84313725490196, size: 1 },\r\n // { x: 243.891891891892, y: 3.96078431372549, size: 1 },\r\n // { x: 249.72972972973, y: 4.19607843137255, size: 1 },\r\n // { x: 251.675675675676, y: 3.84313725490196, size: 1 },\r\n // { x: 267.243243243243, y: 3.92156862745098, size: 1 },\r\n // { x: 268.540540540541, y: 3.84313725490196, size: 1 },\r\n // { x: 284.756756756757, y: 3.92156862745098, size: 1 },\r\n // { x: 295.783783783784, y: 3.17647058823529, size: 1 },\r\n // { x: 296.432432432432, y: 2.90196078431373, size: 1 },\r\n // { x: 297.081081081081, y: 2.82352941176471, size: 1 },\r\n // { x: 318.486486486487, y: 3.33333333333333, size: 1 },\r\n // { x: 323.027027027027, y: 3.88235294117647, size: 1 },\r\n // { x: 339.891891891892, y: 3.37254901960784, size: 1 },\r\n // { x: 1.29496402877698, y: 3.01960784313725, size: 1 },\r\n // { x: 3.23741007194245, y: 2.98039215686275, size: 1 },\r\n // { x: 22.6618705035971, y: 3.05882352941176, size: 1 },\r\n // { x: 84.8201438848921, y: 3.96078431372549, size: 1 },\r\n // { x: 136.618705035971, y: 3.96078431372549, size: 1 },\r\n // { x: 141.151079136691, y: 4, size: 1 },\r\n // { x: 142.446043165468, y: 3.96078431372549, size: 1 },\r\n // { x: 174.172661870504, y: 2.74509803921569, size: 1 },\r\n // { x: 195.539568345324, y: 1.84313725490196, size: 1 },\r\n // { x: 196.187050359712, y: 2.35294117647059, size: 1 },\r\n // { x: 196.834532374101, y: 2.19607843137255, size: 1 },\r\n // { x: 197.482014388489, y: 2.11764705882353, size: 1 },\r\n // { x: 200.071942446043, y: 3.13725490196078, size: 1 },\r\n // { x: 204.604316546763, y: 2.82352941176471, size: 1 },\r\n // { x: 205.251798561151, y: 2.94117647058824, size: 1 },\r\n // { x: 232.446043165468, y: 3.92156862745098, size: 1 },\r\n // { x: 260.287769784173, y: 2.35294117647059, size: 1 },\r\n // { x: 260.935251798561, y: 2.35294117647059, size: 1 },\r\n // { x: 263.525179856115, y: 4, size: 1 },\r\n // { x: 282.302158273381, y: 2.35294117647059, size: 1 },\r\n // { x: 303.021582733813, y: 2.90196078431373, size: 1 },\r\n // { x: 303.669064748201, y: 2.58823529411765, size: 1 },\r\n // { x: 325.035971223022, y: 2.43137254901961, size: 1 },\r\n // { x: 329.568345323741, y: 4, size: 1 },\r\n // { x: 332.158273381295, y: 4.19607843137255, size: 1 },\r\n // { x: 340.575539568345, y: 4.11764705882353, size: 1 },\r\n // { x: 5.17985611510791, y: 4, size: 1 },\r\n // { x: 8.41726618705036, y: 3.25490196078431, size: 1 },\r\n // { x: 13.5971223021583, y: 4.23529411764706, size: 1 },\r\n // { x: 14.8920863309353, y: 4.03921568627451, size: 1 },\r\n // { x: 29.7841726618705, y: 2.27450980392157, size: 1 },\r\n // { x: 30.431654676259, y: 2.31372549019608, size: 1 },\r\n // { x: 49.8561151079137, y: 4.11764705882353, size: 1 },\r\n // { x: 50.5035971223022, y: 3.2156862745098, size: 1 },\r\n // { x: 51.1510791366906, y: 2.94117647058824, size: 1 },\r\n // { x: 51.7985611510791, y: 2.7843137254902, size: 1 },\r\n // { x: 66.6906474820144, y: 3.96078431372549, size: 1 },\r\n // { x: 72.5179856115108, y: 3.01960784313725, size: 1 },\r\n // { x: 73.1654676258993, y: 2.66666666666667, size: 1 },\r\n // { x: 93.8848920863309, y: 2.94117647058824, size: 1 },\r\n // { x: 94.5323741007194, y: 1.96078431372549, size: 1 },\r\n // { x: 95.1798561151079, y: 1.68627450980392, size: 1 },\r\n // { x: 119.136690647482, y: 4.07843137254902, size: 1 },\r\n // { x: 139.208633093525, y: 4, size: 1 },\r\n // { x: 141.798561151079, y: 4.03921568627451, size: 1 },\r\n // { x: 218.201438848921, y: 4.07843137254902, size: 1 },\r\n // { x: 238.920863309353, y: 3.96078431372549, size: 1 },\r\n // { x: 242.805755395683, y: 4.07843137254902, size: 1 },\r\n // { x: 268.057553956835, y: 3.25490196078431, size: 1 },\r\n // { x: 277.122302158273, y: 4, size: 1 },\r\n // { x: 283.597122302158, y: 4, size: 1 },\r\n // { x: 289.424460431655, y: 3.09803921568627, size: 1 },\r\n // { x: 311.438848920863, y: 4.19607843137255, size: 1 },\r\n // { x: 316.618705035971, y: 4.11764705882353, size: 1 },\r\n // { x: 12.3021582733813, y: 4.03921568627451, size: 1 },\r\n // { x: 38.2014388489209, y: 3.96078431372549, size: 1 },\r\n // { x: 49.2086330935252, y: 4, size: 1 },\r\n // { x: 53.0935251798561, y: 4.11764705882353, size: 1 },\r\n // { x: 53.7410071942446, y: 4.11764705882353, size: 1 },\r\n // { x: 54.3884892086331, y: 3.96078431372549, size: 1 },\r\n // { x: 56.3309352517986, y: 4.15686274509804, size: 1 },\r\n // { x: 75.1079136690647, y: 3.96078431372549, size: 1 },\r\n // { x: 79.6402877697842, y: 3.09803921568627, size: 1 },\r\n // { x: 92.589928057554, y: 4.07843137254902, size: 1 },\r\n // { x: 103.597122302158, y: 3.96078431372549, size: 1 },\r\n // { x: 124.964028776978, y: 4.07843137254902, size: 1 },\r\n // { x: 127.553956834532, y: 4.07843137254902, size: 1 },\r\n // { x: 166.402877697842, y: 3.2156862745098, size: 1 },\r\n // { x: 169.640287769784, y: 4.23529411764706, size: 1 },\r\n // { x: 172.877697841727, y: 4.03921568627451, size: 1 },\r\n // { x: 202.014388489209, y: 4, size: 1 },\r\n // { x: 229.208633093525, y: 4, size: 1 },\r\n // { x: 248.63309352518, y: 3.92156862745098, size: 1 },\r\n // { x: 289.424460431655, y: 4.11764705882353, size: 1 },\r\n // { x: 295.251798561151, y: 3.25490196078431, size: 1 },\r\n // { x: 295.89928057554, y: 3.01960784313725, size: 1 },\r\n // { x: 301.726618705036, y: 4.19607843137255, size: 1 },\r\n // { x: 306.258992805755, y: 4.11764705882353, size: 1 },\r\n // { x: 307.553956834532, y: 4.15686274509804, size: 1 },\r\n // { x: 309.496402877698, y: 4.07843137254902, size: 1 },\r\n // { x: 320.503597122302, y: 3.96078431372549, size: 1 },\r\n // { x: 331.510791366906, y: 4.19607843137255, size: 1 },\r\n // { x: 332.158273381295, y: 3.96078431372549, size: 1 },\r\n // { x: 358.057553956835, y: 4.03921568627451, size: 1 },\r\n // { x: 7.13513513513514, y: 4, size: 1 },\r\n // { x: 8.43243243243243, y: 3.92156862745098, size: 1 },\r\n // { x: 14.2702702702703, y: 3.88235294117647, size: 1 },\r\n // { x: 16.2162162162162, y: 3.92156862745098, size: 1 },\r\n // { x: 16.8648648648649, y: 4, size: 1 },\r\n // { x: 18.8108108108108, y: 4.07843137254902, size: 1 },\r\n // { x: 20.7567567567568, y: 3.37254901960784, size: 1 },\r\n // { x: 22.0540540540541, y: 3.05882352941176, size: 1 },\r\n // { x: 22.7027027027027, y: 2.98039215686275, size: 1 },\r\n // { x: 27.2432432432432, y: 4, size: 1 },\r\n // { x: 28.5405405405405, y: 3.88235294117647, size: 1 },\r\n // { x: 31.1351351351351, y: 3.92156862745098, size: 1 },\r\n // { x: 33.0810810810811, y: 4, size: 1 },\r\n // { x: 36.972972972973, y: 3.96078431372549, size: 1 },\r\n // { x: 40.8648648648649, y: 3.88235294117647, size: 1 },\r\n // { x: 43.4594594594595, y: 3.25490196078431, size: 1 },\r\n // { x: 46.0540540540541, y: 3.92156862745098, size: 1 },\r\n // { x: 46.7027027027027, y: 4, size: 1 },\r\n // { x: 51.8918918918919, y: 3.92156862745098, size: 1 },\r\n // { x: 52.5405405405405, y: 3.84313725490196, size: 1 },\r\n // { x: 61.6216216216216, y: 3.96078431372549, size: 1 },\r\n // { x: 62.9189189189189, y: 3.92156862745098, size: 1 },\r\n // { x: 65.5135135135135, y: 3.13725490196078, size: 1 },\r\n // { x: 72, y: 4, size: 1 },\r\n // { x: 84.3243243243243, y: 3.88235294117647, size: 1 },\r\n // { x: 99.2432432432432, y: 3.80392156862745, size: 1 },\r\n // { x: 110.27027027027, y: 3.88235294117647, size: 1 },\r\n // { x: 112.216216216216, y: 3.92156862745098, size: 1 },\r\n // { x: 114.810810810811, y: 3.96078431372549, size: 1 },\r\n // { x: 129.72972972973, y: 3.17647058823529, size: 1 },\r\n // { x: 130.378378378378, y: 3.17647058823529, size: 1 },\r\n // { x: 173.837837837838, y: 3.25490196078431, size: 1 },\r\n // { x: 194.594594594595, y: 3.17647058823529, size: 1 },\r\n // { x: 195.243243243243, y: 2.94117647058824, size: 1 },\r\n // { x: 232.864864864865, y: 4.07843137254902, size: 1 },\r\n // { x: 234.810810810811, y: 3.96078431372549, size: 1 },\r\n // { x: 237.405405405405, y: 3.2156862745098, size: 1 },\r\n // { x: 238.054054054054, y: 2.7843137254902, size: 1 },\r\n // { x: 249.081081081081, y: 3.84313725490196, size: 1 },\r\n // { x: 279.567567567568, y: 4, size: 1 },\r\n // { x: 281.513513513513, y: 3.01960784313725, size: 1 },\r\n // { x: 291.891891891892, y: 3.84313725490196, size: 1 },\r\n // { x: 304.216216216216, y: 4, size: 1 },\r\n // { x: 312, y: 3.92156862745098, size: 1 },\r\n // { x: 322.378378378378, y: 3.84313725490196, size: 1 },\r\n // { x: 350.918918918919, y: 3.92156862745098, size: 1 },\r\n // { x: 2.58992805755396, y: 4.23529411764706, size: 1 },\r\n // { x: 29.7841726618705, y: 2.86274509803922, size: 1 },\r\n // { x: 38.2014388489209, y: 4.03921568627451, size: 1 },\r\n // { x: 116.546762589928, y: 3.09803921568627, size: 1 },\r\n // { x: 150.863309352518, y: 4.07843137254902, size: 1 },\r\n // { x: 176.115107913669, y: 3.88235294117647, size: 1 },\r\n // { x: 246.690647482014, y: 2.86274509803922, size: 1 },\r\n // { x: 247.338129496403, y: 2.50980392156863, size: 1 },\r\n // { x: 331.510791366906, y: 2.82352941176471, size: 1 },\r\n // { x: 332.158273381295, y: 2.50980392156863, size: 1 },\r\n // { x: 353.525179856115, y: 3.01960784313725, size: 1 },\r\n // { x: 36.2589928057554, y: 3.01960784313725, size: 1 },\r\n // { x: 79.6402877697842, y: 2.62745098039216, size: 1 },\r\n // { x: 80.2877697841727, y: 2.94117647058824, size: 1 },\r\n // { x: 122.374100719424, y: 2.86274509803922, size: 1 },\r\n // { x: 123.021582733813, y: 2, size: 1 },\r\n // { x: 139.208633093525, y: 4.23529411764706, size: 1 },\r\n // { x: 144.388489208633, y: 2.74509803921569, size: 1 },\r\n // { x: 145.035971223022, y: 2.7843137254902, size: 1 },\r\n // { x: 165.755395683453, y: 2.74509803921569, size: 1 },\r\n // { x: 166.402877697842, y: 2.70588235294118, size: 1 },\r\n // { x: 187.769784172662, y: 2.62745098039216, size: 1 },\r\n // { x: 209.136690647482, y: 2.07843137254902, size: 1 },\r\n // { x: 209.784172661871, y: 2.31372549019608, size: 1 },\r\n // { x: 213.021582733813, y: 4, size: 1 },\r\n // { x: 216.906474820144, y: 4, size: 1 },\r\n // { x: 252.517985611511, y: 2.23529411764706, size: 1 },\r\n // { x: 317.26618705036, y: 2.50980392156863, size: 1 },\r\n // { x: 338.63309352518, y: 2.62745098039216, size: 1 },\r\n // { x: 0, y: 2.62745098039216, size: 1 },\r\n // { x: 20.7194244604317, y: 2.94117647058824, size: 1 },\r\n // { x: 22.0143884892086, y: 2.23529411764706, size: 1 },\r\n // { x: 134.676258992806, y: 4.03921568627451, size: 1 },\r\n // { x: 208.489208633094, y: 4.03921568627451, size: 1 },\r\n // { x: 242.158273381295, y: 3.96078431372549, size: 1 },\r\n // { x: 258.992805755396, y: 2.98039215686275, size: 1 },\r\n // { x: 260.287769784173, y: 2.86274509803922, size: 1 },\r\n // { x: 314.028776978417, y: 4.11764705882353, size: 1 },\r\n // { x: 318.561151079137, y: 4, size: 1 },\r\n // { x: 325.68345323741, y: 2.90196078431373, size: 1 },\r\n // { x: 341.223021582734, y: 4, size: 1 },\r\n // { x: 345.755395683453, y: 2.98039215686275, size: 1 },\r\n // { x: 14.9189189189189, y: 3.88235294117647, size: 1 },\r\n // { x: 28.5405405405405, y: 3.01960784313725, size: 1 },\r\n // { x: 93.4054054054054, y: 3.05882352941176, size: 1 },\r\n // { x: 94.054054054054, y: 3.13725490196078, size: 1 },\r\n // { x: 108.972972972973, y: 3.92156862745098, size: 1 },\r\n // { x: 117.405405405405, y: 3.96078431372549, size: 1 },\r\n // { x: 119.351351351351, y: 4.03921568627451, size: 1 },\r\n // { x: 121.297297297297, y: 3.92156862745098, size: 1 },\r\n // { x: 127.135135135135, y: 4.23529411764706, size: 1 },\r\n // { x: 129.72972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 132.972972972973, y: 3.96078431372549, size: 1 },\r\n // { x: 139.459459459459, y: 3.84313725490196, size: 1 },\r\n // { x: 140.756756756757, y: 3.96078431372549, size: 1 },\r\n // { x: 143.351351351351, y: 4.03921568627451, size: 1 },\r\n // { x: 144, y: 4.03921568627451, size: 1 },\r\n // { x: 151.135135135135, y: 4.03921568627451, size: 1 },\r\n // { x: 151.783783783784, y: 4.15686274509804, size: 1 },\r\n // { x: 153.72972972973, y: 4, size: 1 },\r\n // { x: 163.459459459459, y: 3.33333333333333, size: 1 },\r\n // { x: 171.891891891892, y: 3.33333333333333, size: 1 },\r\n // { x: 186.162162162162, y: 4.19607843137255, size: 1 },\r\n // { x: 187.459459459459, y: 3.88235294117647, size: 1 },\r\n // { x: 190.054054054054, y: 4.11764705882353, size: 1 },\r\n // { x: 192, y: 3.96078431372549, size: 1 },\r\n // { x: 195.243243243243, y: 3.96078431372549, size: 1 },\r\n // { x: 197.189189189189, y: 3.88235294117647, size: 1 },\r\n // { x: 201.72972972973, y: 3.17647058823529, size: 1 },\r\n // { x: 202.378378378378, y: 3.13725490196078, size: 1 },\r\n // { x: 223.135135135135, y: 3.29411764705882, size: 1 },\r\n // { x: 239.351351351351, y: 3.84313725490196, size: 1 },\r\n // { x: 240.648648648649, y: 3.92156862745098, size: 1 },\r\n // { x: 267.243243243243, y: 3.17647058823529, size: 1 },\r\n // { x: 271.135135135135, y: 3.96078431372549, size: 1 },\r\n // { x: 289.945945945946, y: 3.96078431372549, size: 1 },\r\n // { x: 290.594594594595, y: 3.84313725490196, size: 1 },\r\n // { x: 291.243243243243, y: 3.88235294117647, size: 1 },\r\n // { x: 291.891891891892, y: 3.96078431372549, size: 1 },\r\n // { x: 294.486486486487, y: 4.07843137254902, size: 1 },\r\n // { x: 296.432432432432, y: 4, size: 1 },\r\n // { x: 297.081081081081, y: 3.96078431372549, size: 1 },\r\n // { x: 298.378378378378, y: 3.84313725490196, size: 1 },\r\n // { x: 301.621621621622, y: 3.88235294117647, size: 1 },\r\n // { x: 302.918918918919, y: 3.92156862745098, size: 1 },\r\n // { x: 310.054054054054, y: 2.66666666666667, size: 1 },\r\n // { x: 310.702702702703, y: 2.82352941176471, size: 1 },\r\n // { x: 311.351351351351, y: 2.86274509803922, size: 1 },\r\n // { x: 312, y: 2.70588235294118, size: 1 },\r\n // { x: 331.459459459459, y: 3.09803921568627, size: 1 },\r\n // { x: 332.108108108108, y: 2.82352941176471, size: 1 },\r\n // { x: 332.756756756757, y: 2.70588235294118, size: 1 },\r\n // { x: 333.405405405405, y: 2.94117647058824, size: 1 },\r\n // { x: 352.864864864865, y: 3.25490196078431, size: 1 },\r\n // { x: 353.513513513513, y: 3.09803921568627, size: 1 },\r\n // { x: 0.647482014388489, y: 4.07843137254902, size: 1 },\r\n // { x: 6.47482014388489, y: 4, size: 1 },\r\n // { x: 11.6546762589928, y: 3.88235294117647, size: 1 },\r\n // { x: 36.2589928057554, y: 2.7843137254902, size: 1 },\r\n // { x: 36.9064748201439, y: 2.70588235294118, size: 1 },\r\n // { x: 44.0287769784173, y: 4.15686274509804, size: 1 },\r\n // { x: 75.1079136690647, y: 4, size: 1 },\r\n // { x: 106.834532374101, y: 4.03921568627451, size: 1 },\r\n // { x: 122.374100719424, y: 2.98039215686275, size: 1 },\r\n // { x: 123.021582733813, y: 2.82352941176471, size: 1 },\r\n // { x: 143.741007194245, y: 3.17647058823529, size: 1 },\r\n // { x: 165.107913669065, y: 3.33333333333333, size: 1 },\r\n // { x: 165.755395683453, y: 2.62745098039216, size: 1 },\r\n // { x: 166.402877697842, y: 2.47058823529412, size: 1 },\r\n // { x: 183.884892086331, y: 3.96078431372549, size: 1 },\r\n // { x: 199.424460431655, y: 3.29411764705882, size: 1 },\r\n // { x: 213.021582733813, y: 4.15686274509804, size: 1 },\r\n // { x: 227.26618705036, y: 4.19607843137255, size: 1 },\r\n // { x: 230.503597122302, y: 3.25490196078431, size: 1 },\r\n // { x: 252.517985611511, y: 2.7843137254902, size: 1 },\r\n // { x: 295.251798561151, y: 2.23529411764706, size: 1 },\r\n // { x: 295.89928057554, y: 2.43137254901961, size: 1 },\r\n // { x: 338.63309352518, y: 3.09803921568627, size: 1 },\r\n // { x: 352.877697841727, y: 4.03921568627451, size: 1 },\r\n // { x: 354.820143884892, y: 4.23529411764706, size: 1 },\r\n // { x: 356.115107913669, y: 4.11764705882353, size: 1 },\r\n // { x: 21.3669064748201, y: 3.25490196078431, size: 1 },\r\n // { x: 22.0143884892086, y: 2.66666666666667, size: 1 },\r\n // { x: 43.3812949640288, y: 3.01960784313725, size: 1 },\r\n // { x: 64.7482014388489, y: 2.70588235294118, size: 1 },\r\n // { x: 96.4748201438849, y: 3.92156862745098, size: 1 },\r\n // { x: 106.834532374101, y: 3.17647058823529, size: 1 },\r\n // { x: 108.129496402878, y: 2.74509803921569, size: 1 },\r\n // { x: 120.431654676259, y: 4, size: 1 },\r\n // { x: 130.143884892086, y: 3.13725490196078, size: 1 },\r\n // { x: 165.755395683453, y: 3.96078431372549, size: 1 },\r\n // { x: 236.330935251799, y: 3.2156862745098, size: 1 },\r\n // { x: 237.625899280576, y: 3.05882352941176, size: 1 },\r\n // { x: 238.273381294964, y: 3.17647058823529, size: 1 },\r\n // { x: 284.244604316547, y: 4.15686274509804, size: 1 },\r\n // { x: 290.719424460432, y: 4.11764705882353, size: 1 },\r\n // { x: 292.014388489209, y: 4.15686274509804, size: 1 },\r\n // { x: 293.309352517986, y: 3.96078431372549, size: 1 },\r\n // { x: 299.784172661871, y: 4.03921568627451, size: 1 },\r\n // { x: 324.388489208633, y: 3.13725490196078, size: 1 },\r\n // { x: 0.647482014388489, y: 4.19607843137255, size: 1 },\r\n // { x: 7.12230215827338, y: 2.70588235294118, size: 1 },\r\n // { x: 20.7194244604317, y: 4.07843137254902, size: 1 },\r\n // { x: 49.8561151079137, y: 2.15686274509804, size: 1 },\r\n // { x: 50.5035971223022, y: 1.41176470588235, size: 1 },\r\n // { x: 51.1510791366906, y: 1.41176470588235, size: 1 },\r\n // { x: 51.7985611510791, y: 0.784313725490196, size: 1 },\r\n // { x: 59.568345323741, y: 2.98039215686275, size: 1 },\r\n // { x: 114.604316546763, y: 2.86274509803922, size: 1 },\r\n // { x: 115.251798561151, y: 3.17647058823529, size: 1 },\r\n // { x: 135.971223021583, y: 3.17647058823529, size: 1 },\r\n // { x: 136.618705035971, y: 2.23529411764706, size: 1 },\r\n // { x: 157.985611510791, y: 2.74509803921569, size: 1 },\r\n // { x: 158.63309352518, y: 2.66666666666667, size: 1 },\r\n // { x: 189.064748201439, y: 4, size: 1 },\r\n // { x: 207.841726618705, y: 3.2156862745098, size: 1 },\r\n // { x: 222.73381294964, y: 3.01960784313725, size: 1 },\r\n // { x: 223.381294964029, y: 2.70588235294118, size: 1 },\r\n // { x: 250.575539568345, y: 4.15686274509804, size: 1 },\r\n // { x: 266.115107913669, y: 2.82352941176471, size: 1 },\r\n // { x: 288.129496402878, y: 2.82352941176471, size: 1 },\r\n // { x: 309.496402877698, y: 2.23529411764706, size: 1 },\r\n // { x: 330.863309352518, y: 2.23529411764706, size: 1 },\r\n // { x: 28.5405405405405, y: 3.33333333333333, size: 1 },\r\n // { x: 35.027027027027, y: 3.25490196078431, size: 1 },\r\n // { x: 35.6756756756757, y: 2.7843137254902, size: 1 },\r\n // { x: 36.3243243243243, y: 3.2156862745098, size: 1 },\r\n // { x: 42.8108108108108, y: 3.41176470588235, size: 1 },\r\n // { x: 75.8918918918919, y: 3.96078431372549, size: 1 },\r\n // { x: 79.1351351351351, y: 2.98039215686275, size: 1 },\r\n // { x: 79.7837837837838, y: 3.01960784313725, size: 1 },\r\n // { x: 80.4324324324324, y: 2.66666666666667, size: 1 },\r\n // { x: 98.5945945945946, y: 3.33333333333333, size: 1 },\r\n // { x: 100.540540540541, y: 3.33333333333333, size: 1 },\r\n // { x: 108.324324324324, y: 3.96078431372549, size: 1 },\r\n // { x: 114.162162162162, y: 4.07843137254902, size: 1 },\r\n // { x: 121.945945945946, y: 3.13725490196078, size: 1 },\r\n // { x: 122.594594594595, y: 3.25490196078431, size: 1 },\r\n // { x: 147.243243243243, y: 3.92156862745098, size: 1 },\r\n // { x: 153.081081081081, y: 4.03921568627451, size: 1 },\r\n // { x: 186.810810810811, y: 3.05882352941176, size: 1 },\r\n // { x: 187.459459459459, y: 3.17647058823529, size: 1 },\r\n // { x: 188.756756756757, y: 3.17647058823529, size: 1 },\r\n // { x: 191.351351351351, y: 3.84313725490196, size: 1 },\r\n // { x: 208.216216216216, y: 2.98039215686275, size: 1 },\r\n // { x: 208.864864864865, y: 3.09803921568627, size: 1 },\r\n // { x: 209.513513513514, y: 2.74509803921569, size: 1 },\r\n // { x: 210.162162162162, y: 3.01960784313725, size: 1 },\r\n // { x: 248.432432432432, y: 3.88235294117647, size: 1 },\r\n // { x: 274.378378378378, y: 3.09803921568627, size: 1 },\r\n // { x: 275.027027027027, y: 2.90196078431373, size: 1 },\r\n // { x: 288, y: 3.96078431372549, size: 1 },\r\n // { x: 295.135135135135, y: 3.13725490196078, size: 1 },\r\n // { x: 295.783783783784, y: 2.74509803921569, size: 1 },\r\n // { x: 296.432432432432, y: 2.66666666666667, size: 1 },\r\n // { x: 297.081081081081, y: 3.09803921568627, size: 1 },\r\n // { x: 308.108108108108, y: 3.84313725490196, size: 1 },\r\n // { x: 347.027027027027, y: 3.88235294117647, size: 1 },\r\n // { x: 357.405405405405, y: 4.15686274509804, size: 1 },\r\n // { x: 10.3597122302158, y: 3.96078431372549, size: 1 },\r\n // { x: 23.3093525179856, y: 3.09803921568627, size: 1 },\r\n // { x: 108.776978417266, y: 3.17647058823529, size: 1 },\r\n // { x: 131.438848920863, y: 2.66666666666667, size: 1 },\r\n // { x: 296.546762589928, y: 4.15686274509804, size: 1 },\r\n // { x: 302.374100719424, y: 2.90196078431373, size: 1 },\r\n // { x: 323.741007194245, y: 2.94117647058824, size: 1 },\r\n // { x: 45.3237410071942, y: 3.92156862745098, size: 1 },\r\n // { x: 58.9208633093525, y: 3.92156862745098, size: 1 },\r\n // { x: 84.1726618705036, y: 4.11764705882353, size: 1 },\r\n // { x: 88.0575539568345, y: 4.11764705882353, size: 1 },\r\n // { x: 102.94964028777, y: 4.03921568627451, size: 1 },\r\n // { x: 104.244604316547, y: 4.27450980392157, size: 1 },\r\n // { x: 111.36690647482, y: 4.07843137254902, size: 1 },\r\n // { x: 113.309352517986, y: 4.03921568627451, size: 1 },\r\n // { x: 115.89928057554, y: 4.07843137254902, size: 1 },\r\n // { x: 124.31654676259, y: 3.84313725490196, size: 1 },\r\n // { x: 128.201438848921, y: 4, size: 1 },\r\n // { x: 131.438848920863, y: 4.03921568627451, size: 1 },\r\n // { x: 135.971223021583, y: 2.31372549019608, size: 1 },\r\n // { x: 136.618705035971, y: 2.50980392156863, size: 1 },\r\n // { x: 137.26618705036, y: 2.50980392156863, size: 1 },\r\n // { x: 137.913669064748, y: 2.70588235294118, size: 1 },\r\n // { x: 157.985611510791, y: 3.01960784313725, size: 1 },\r\n // { x: 158.63309352518, y: 3.13725490196078, size: 1 },\r\n // { x: 185.179856115108, y: 4.03921568627451, size: 1 },\r\n // { x: 219.496402877698, y: 3.96078431372549, size: 1 },\r\n // { x: 221.438848920863, y: 3.25490196078431, size: 1 },\r\n // { x: 226.618705035971, y: 4.19607843137255, size: 1 },\r\n // { x: 230.503597122302, y: 4, size: 1 },\r\n // { x: 232.446043165468, y: 4.07843137254902, size: 1 },\r\n // { x: 281.654676258993, y: 4.11764705882353, size: 1 },\r\n // { x: 20.7567567567568, y: 4.03921568627451, size: 1 },\r\n // { x: 35.6756756756757, y: 3.29411764705882, size: 1 },\r\n // { x: 57.0810810810811, y: 3.96078431372549, size: 1 },\r\n // { x: 59.027027027027, y: 3.29411764705882, size: 1 },\r\n // { x: 80.4324324324324, y: 3.96078431372549, size: 1 },\r\n // { x: 86.2702702702703, y: 3.96078431372549, size: 1 },\r\n // { x: 87.5675675675676, y: 3.96078431372549, size: 1 },\r\n // { x: 90.8108108108108, y: 4, size: 1 },\r\n // { x: 91.4594594594595, y: 3.96078431372549, size: 1 },\r\n // { x: 93.4054054054054, y: 4.15686274509804, size: 1 },\r\n // { x: 96.6486486486486, y: 3.92156862745098, size: 1 },\r\n // { x: 97.2972972972973, y: 4.15686274509804, size: 1 },\r\n // { x: 99.8918918918919, y: 3.41176470588235, size: 1 },\r\n // { x: 109.621621621622, y: 4, size: 1 },\r\n // { x: 114.810810810811, y: 3.88235294117647, size: 1 },\r\n // { x: 118.702702702703, y: 3.80392156862745, size: 1 },\r\n // { x: 121.297297297297, y: 3.09803921568627, size: 1 },\r\n // { x: 121.945945945946, y: 2.82352941176471, size: 1 },\r\n // { x: 125.189189189189, y: 3.33333333333333, size: 1 },\r\n // { x: 125.837837837838, y: 3.37254901960784, size: 1 },\r\n // { x: 133.621621621622, y: 3.41176470588235, size: 1 },\r\n // { x: 140.108108108108, y: 3.41176470588235, size: 1 },\r\n // { x: 144.648648648649, y: 3.17647058823529, size: 1 },\r\n // { x: 145.297297297297, y: 2.98039215686275, size: 1 },\r\n // { x: 183.567567567568, y: 3.33333333333333, size: 1 },\r\n // { x: 192, y: 3.92156862745098, size: 1 },\r\n // { x: 197.837837837838, y: 3.45098039215686, size: 1 },\r\n // { x: 200.432432432432, y: 3.88235294117647, size: 1 },\r\n // { x: 207.567567567568, y: 3.37254901960784, size: 1 },\r\n // { x: 209.513513513514, y: 3.37254901960784, size: 1 },\r\n // { x: 210.810810810811, y: 4, size: 1 },\r\n // { x: 219.891891891892, y: 4.07843137254902, size: 1 },\r\n // { x: 221.189189189189, y: 3.88235294117647, size: 1 },\r\n // { x: 221.837837837838, y: 3.96078431372549, size: 1 },\r\n // { x: 230.918918918919, y: 3.92156862745098, size: 1 },\r\n // { x: 232.216216216216, y: 3.80392156862745, size: 1 },\r\n // { x: 232.864864864865, y: 4, size: 1 },\r\n // { x: 236.756756756757, y: 4.03921568627451, size: 1 },\r\n // { x: 238.054054054054, y: 4.03921568627451, size: 1 },\r\n // { x: 240, y: 4.03921568627451, size: 1 },\r\n // { x: 241.945945945946, y: 4.03921568627451, size: 1 },\r\n // { x: 242.594594594595, y: 3.92156862745098, size: 1 },\r\n // { x: 246.486486486486, y: 4.11764705882353, size: 1 },\r\n // { x: 273.72972972973, y: 3.13725490196078, size: 1 },\r\n // { x: 275.675675675676, y: 3.92156862745098, size: 1 },\r\n // { x: 280.216216216216, y: 4.19607843137255, size: 1 },\r\n // { x: 285.405405405405, y: 4, size: 1 },\r\n // { x: 288.648648648649, y: 4.15686274509804, size: 1 },\r\n // { x: 295.135135135135, y: 2.70588235294118, size: 1 },\r\n // { x: 295.783783783784, y: 2.98039215686275, size: 1 },\r\n // { x: 296.432432432432, y: 2.94117647058824, size: 1 },\r\n // { x: 297.72972972973, y: 4.11764705882353, size: 1 },\r\n // { x: 302.27027027027, y: 4.03921568627451, size: 1 },\r\n // { x: 304.216216216216, y: 4.03921568627451, size: 1 },\r\n // { x: 308.108108108108, y: 4.11764705882353, size: 1 },\r\n // { x: 309.405405405405, y: 4.07843137254902, size: 1 },\r\n // { x: 315.891891891892, y: 3.37254901960784, size: 1 },\r\n // { x: 317.837837837838, y: 3.96078431372549, size: 1 },\r\n // { x: 337.945945945946, y: 2.74509803921569, size: 1 },\r\n // { x: 338.594594594595, y: 2.47058823529412, size: 1 },\r\n // { x: 342.486486486487, y: 3.88235294117647, size: 1 },\r\n // { x: 358.054054054054, y: 3.37254901960784, size: 1 },\r\n // { x: 359.351351351351, y: 3.01960784313725, size: 1 },\r\n // { x: 43.3812949640288, y: 2.90196078431373, size: 1 },\r\n // { x: 64.1007194244604, y: 3.05882352941176, size: 1 },\r\n // { x: 81.5827338129496, y: 3.96078431372549, size: 1 },\r\n // { x: 83.5251798561151, y: 4, size: 1 },\r\n // { x: 110.719424460432, y: 4.07843137254902, size: 1 },\r\n // { x: 114.604316546763, y: 4, size: 1 },\r\n // { x: 115.251798561151, y: 4.03921568627451, size: 1 },\r\n // { x: 125.611510791367, y: 4.15686274509804, size: 1 },\r\n // { x: 126.258992805755, y: 4.03921568627451, size: 1 },\r\n // { x: 129.496402877698, y: 2, size: 1 },\r\n // { x: 135.971223021583, y: 4.07843137254902, size: 1 },\r\n // { x: 136.618705035971, y: 4.07843137254902, size: 1 },\r\n // { x: 139.856115107914, y: 4, size: 1 },\r\n // { x: 141.151079136691, y: 4.11764705882353, size: 1 },\r\n // { x: 145.035971223022, y: 4.07843137254902, size: 1 },\r\n // { x: 146.330935251799, y: 4.15686274509804, size: 1 },\r\n // { x: 150.863309352518, y: 3.13725490196078, size: 1 },\r\n // { x: 157.338129496403, y: 3.92156862745098, size: 1 },\r\n // { x: 169.640287769784, y: 4.07843137254902, size: 1 },\r\n // { x: 172.230215827338, y: 2.15686274509804, size: 1 },\r\n // { x: 172.877697841727, y: 2.23529411764706, size: 1 },\r\n // { x: 180, y: 3.92156862745098, size: 1 },\r\n // { x: 189.712230215827, y: 3.96078431372549, size: 1 },\r\n // { x: 193.597122302158, y: 2.94117647058824, size: 1 },\r\n // { x: 236.978417266187, y: 2.86274509803922, size: 1 },\r\n // { x: 237.625899280576, y: 2.66666666666667, size: 1 },\r\n // { x: 239.568345323741, y: 3.96078431372549, size: 1 },\r\n // { x: 245.395683453237, y: 4, size: 1 },\r\n // { x: 247.985611510791, y: 4.15686274509804, size: 1 },\r\n // { x: 257.05035971223, y: 3.2156862745098, size: 1 },\r\n // { x: 258.345323741007, y: 2.86274509803922, size: 1 },\r\n // { x: 258.992805755396, y: 2.35294117647059, size: 1 },\r\n // { x: 270.647482014389, y: 3.96078431372549, size: 1 },\r\n // { x: 271.942446043165, y: 4.07843137254902, size: 1 },\r\n // { x: 347.05035971223, y: 4.03921568627451, size: 1 },\r\n // { x: 348.345323741007, y: 4.11764705882353, size: 1 },\r\n // { x: 349.640287769784, y: 4.03921568627451, size: 1 },\r\n // { x: 351.58273381295, y: 4.23529411764706, size: 1 },\r\n // { x: 355.467625899281, y: 4.03921568627451, size: 1 },\r\n // { x: 356.762589928058, y: 4.11764705882353, size: 1 },\r\n // { x: 2.58992805755396, y: 4.19607843137255, size: 1 },\r\n // { x: 4.53237410071942, y: 4.03921568627451, size: 1 },\r\n // { x: 10.3597122302158, y: 4.15686274509804, size: 1 },\r\n // { x: 20.7194244604317, y: 3.88235294117647, size: 1 },\r\n // { x: 23.9568345323741, y: 4.03921568627451, size: 1 },\r\n // { x: 28.4892086330935, y: 2.7843137254902, size: 1 },\r\n // { x: 129.496402877698, y: 4.19607843137255, size: 1 },\r\n // { x: 135.971223021583, y: 2.70588235294118, size: 1 },\r\n // { x: 136.618705035971, y: 2.70588235294118, size: 1 },\r\n // { x: 137.26618705036, y: 2.54901960784314, size: 1 },\r\n // { x: 137.913669064748, y: 2.86274509803922, size: 1 },\r\n // { x: 153.453237410072, y: 4.07843137254902, size: 1 },\r\n // { x: 159.928057553957, y: 4.11764705882353, size: 1 },\r\n // { x: 193.597122302158, y: 4.03921568627451, size: 1 },\r\n // { x: 222.73381294964, y: 3.17647058823529, size: 1 },\r\n // { x: 243.453237410072, y: 3.25490196078431, size: 1 },\r\n // { x: 245.395683453237, y: 3.05882352941176, size: 1 },\r\n // { x: 265.467625899281, y: 3.09803921568627, size: 1 },\r\n // { x: 269.352517985611, y: 4.15686274509804, size: 1 },\r\n // { x: 288.129496402878, y: 3.01960784313725, size: 1 },\r\n // { x: 288.776978417266, y: 2.90196078431373, size: 1 },\r\n // { x: 293.956834532374, y: 3.96078431372549, size: 1 },\r\n // { x: 294.604316546763, y: 4.11764705882353, size: 1 },\r\n // { x: 333.453237410072, y: 4.03921568627451, size: 1 },\r\n // { x: 348.992805755396, y: 4.07843137254902, size: 1 },\r\n // { x: 7.12230215827338, y: 3.96078431372549, size: 1 },\r\n // { x: 23.3093525179856, y: 4, size: 1 },\r\n // { x: 36.2589928057554, y: 2.70588235294118, size: 1 },\r\n // { x: 56.9784172661871, y: 2.7843137254902, size: 1 },\r\n // { x: 77.0503597122302, y: 3.17647058823529, size: 1 },\r\n // { x: 78.3453237410072, y: 2.94117647058824, size: 1 },\r\n // { x: 79.6402877697842, y: 3.17647058823529, size: 1 },\r\n // { x: 93.8848920863309, y: 4.23529411764706, size: 1 },\r\n // { x: 124.964028776978, y: 4, size: 1 },\r\n // { x: 135.323741007194, y: 4.03921568627451, size: 1 },\r\n // { x: 178.057553956835, y: 4.03921568627451, size: 1 },\r\n // { x: 185.827338129496, y: 3.01960784313725, size: 1 },\r\n // { x: 186.474820143885, y: 2.94117647058824, size: 1 },\r\n // { x: 217.553956834532, y: 4, size: 1 },\r\n // { x: 232.446043165468, y: 4.03921568627451, size: 1 },\r\n // { x: 260.287769784173, y: 4.15686274509804, size: 1 },\r\n // { x: 297.194244604317, y: 4.03921568627451, size: 1 },\r\n // { x: 299.136690647482, y: 4.3921568627451, size: 1 },\r\n // { x: 308.848920863309, y: 4.03921568627451, size: 1 },\r\n // { x: 321.798561151079, y: 4.27450980392157, size: 1 },\r\n // { x: 322.446043165468, y: 4, size: 1 },\r\n // { x: 336.043165467626, y: 3.09803921568627, size: 1 },\r\n // { x: 337.338129496403, y: 1.96078431372549, size: 1 },\r\n // { x: 337.985611510791, y: 1.96078431372549, size: 1 },\r\n // { x: 338.63309352518, y: 1.92156862745098, size: 1 },\r\n // { x: 339.280575539568, y: 1.84313725490196, size: 1 },\r\n // { x: 13.6216216216216, y: 3.96078431372549, size: 1 },\r\n // { x: 16.8648648648649, y: 3.96078431372549, size: 1 },\r\n // { x: 27.2432432432432, y: 3.96078431372549, size: 1 },\r\n // { x: 51.8918918918919, y: 4.03921568627451, size: 1 },\r\n // { x: 55.7837837837838, y: 3.92156862745098, size: 1 },\r\n // { x: 59.6756756756757, y: 4, size: 1 },\r\n // { x: 62.9189189189189, y: 3.2156862745098, size: 1 },\r\n // { x: 63.5675675675676, y: 2.66666666666667, size: 1 },\r\n // { x: 64.2162162162162, y: 2.66666666666667, size: 1 },\r\n // { x: 64.8648648648649, y: 3.13725490196078, size: 1 },\r\n // { x: 78.4864864864865, y: 3.84313725490196, size: 1 },\r\n // { x: 81.7297297297297, y: 3.88235294117647, size: 1 },\r\n // { x: 85.6216216216216, y: 3.09803921568627, size: 1 },\r\n // { x: 86.2702702702703, y: 3.2156862745098, size: 1 },\r\n // { x: 86.9189189189189, y: 2.94117647058824, size: 1 },\r\n // { x: 107.675675675676, y: 3.29411764705882, size: 1 },\r\n // { x: 128.432432432432, y: 3.33333333333333, size: 1 },\r\n // { x: 129.72972972973, y: 2.98039215686275, size: 1 },\r\n // { x: 134.27027027027, y: 3.96078431372549, size: 1 },\r\n // { x: 138.162162162162, y: 3.96078431372549, size: 1 },\r\n // { x: 142.054054054054, y: 3.92156862745098, size: 1 },\r\n // { x: 145.945945945946, y: 4.03921568627451, size: 1 },\r\n // { x: 146.594594594595, y: 3.84313725490196, size: 1 },\r\n // { x: 149.189189189189, y: 3.29411764705882, size: 1 },\r\n // { x: 149.837837837838, y: 2.54901960784314, size: 1 },\r\n // { x: 150.486486486486, y: 2.27450980392157, size: 1 },\r\n // { x: 151.135135135135, y: 2.58823529411765, size: 1 },\r\n // { x: 151.783783783784, y: 2.35294117647059, size: 1 },\r\n // { x: 153.081081081081, y: 3.80392156862745, size: 1 },\r\n // { x: 155.027027027027, y: 4.03921568627451, size: 1 },\r\n // { x: 157.621621621622, y: 4, size: 1 },\r\n // { x: 159.567567567568, y: 4, size: 1 },\r\n // { x: 160.864864864865, y: 4.03921568627451, size: 1 },\r\n // { x: 161.513513513514, y: 3.96078431372549, size: 1 },\r\n // { x: 162.810810810811, y: 4.07843137254902, size: 1 },\r\n // { x: 168, y: 3.88235294117647, size: 1 },\r\n // { x: 168.648648648649, y: 4.11764705882353, size: 1 },\r\n // { x: 219.891891891892, y: 3.96078431372549, size: 1 },\r\n // { x: 228.324324324324, y: 4.03921568627451, size: 1 },\r\n // { x: 232.864864864865, y: 3.84313725490196, size: 1 },\r\n // { x: 236.756756756757, y: 3.13725490196078, size: 1 },\r\n // { x: 237.405405405405, y: 3.37254901960784, size: 1 },\r\n // { x: 262.702702702703, y: 3.88235294117647, size: 1 },\r\n // { x: 265.945945945946, y: 3.92156862745098, size: 1 },\r\n // { x: 270.486486486487, y: 4.11764705882353, size: 1 },\r\n // { x: 271.783783783784, y: 4, size: 1 },\r\n // { x: 275.675675675676, y: 4, size: 1 },\r\n // { x: 276.324324324324, y: 3.96078431372549, size: 1 },\r\n // { x: 303.567567567568, y: 3.05882352941176, size: 1 },\r\n // { x: 308.108108108108, y: 3.80392156862745, size: 1 },\r\n // { x: 313.945945945946, y: 4.07843137254902, size: 1 },\r\n // { x: 317.189189189189, y: 3.96078431372549, size: 1 },\r\n // { x: 323.027027027027, y: 2.62745098039216, size: 1 },\r\n // { x: 323.675675675676, y: 2.50980392156863, size: 1 },\r\n // { x: 324.324324324324, y: 2.70588235294118, size: 1 },\r\n // { x: 324.972972972973, y: 2.82352941176471, size: 1 },\r\n // { x: 343.783783783784, y: 3.33333333333333, size: 1 },\r\n // { x: 344.432432432432, y: 3.25490196078431, size: 1 },\r\n // { x: 346.378378378378, y: 3.2156862745098, size: 1 },\r\n // { x: 27.841726618705, y: 3.17647058823529, size: 1 },\r\n // { x: 28.4892086330935, y: 3.09803921568627, size: 1 },\r\n // { x: 93.2374100719424, y: 3.09803921568627, size: 1 },\r\n // { x: 101.654676258993, y: 3.96078431372549, size: 1 },\r\n // { x: 119.136690647482, y: 3.96078431372549, size: 1 },\r\n // { x: 139.208633093525, y: 4.07843137254902, size: 1 },\r\n // { x: 149.568345323741, y: 4.03921568627451, size: 1 },\r\n // { x: 156.690647482014, y: 3.09803921568627, size: 1 },\r\n // { x: 222.73381294964, y: 3.09803921568627, size: 1 },\r\n // { x: 266.115107913669, y: 2.3921568627451, size: 1 },\r\n // { x: 266.762589928058, y: 2.58823529411765, size: 1 },\r\n // { x: 267.410071942446, y: 2.7843137254902, size: 1 },\r\n // { x: 270, y: 2.86274509803922, size: 1 },\r\n // { x: 270.647482014389, y: 3.17647058823529, size: 1 },\r\n // { x: 286.834532374101, y: 2.94117647058824, size: 1 },\r\n // { x: 287.482014388489, y: 2.98039215686275, size: 1 },\r\n // { x: 308.848920863309, y: 3.01960784313725, size: 1 },\r\n // { x: 330.215827338129, y: 2.19607843137255, size: 1 },\r\n // { x: 351.58273381295, y: 2.98039215686275, size: 1 },\r\n // { x: 12.9496402877698, y: 2.94117647058824, size: 1 },\r\n // { x: 13.5971223021583, y: 2.47058823529412, size: 1 },\r\n // { x: 24.6043165467626, y: 4.31372549019608, size: 1 },\r\n // { x: 30.431654676259, y: 4.03921568627451, size: 1 },\r\n // { x: 31.726618705036, y: 4.07843137254902, size: 1 },\r\n // { x: 33.6690647482014, y: 3.05882352941176, size: 1 },\r\n // { x: 35.6115107913669, y: 3.05882352941176, size: 1 },\r\n // { x: 55.6834532374101, y: 2.90196078431373, size: 1 },\r\n // { x: 56.3309352517986, y: 2.43137254901961, size: 1 },\r\n // { x: 56.9784172661871, y: 2.35294117647059, size: 1 },\r\n // { x: 66.6906474820144, y: 4.07843137254902, size: 1 },\r\n // { x: 67.9856115107914, y: 4.03921568627451, size: 1 },\r\n // { x: 77.6978417266187, y: 2.07843137254902, size: 1 },\r\n // { x: 78.3453237410072, y: 2.11764705882353, size: 1 },\r\n // { x: 99.7122302158273, y: 2.74509803921569, size: 1 },\r\n // { x: 120.431654676259, y: 3.01960784313725, size: 1 },\r\n // { x: 121.079136690647, y: 1.76470588235294, size: 1 },\r\n // { x: 121.726618705036, y: 1.96078431372549, size: 1 },\r\n // { x: 142.446043165468, y: 3.01960784313725, size: 1 },\r\n // { x: 143.093525179856, y: 2.7843137254902, size: 1 },\r\n // { x: 272.589928057554, y: 3.05882352941176, size: 1 },\r\n // { x: 304.964028776978, y: 3.96078431372549, size: 1 },\r\n // { x: 318.561151079137, y: 4.03921568627451, size: 1 },\r\n // { x: 41.4388489208633, y: 2.98039215686275, size: 1 },\r\n // { x: 42.0863309352518, y: 2.74509803921569, size: 1 },\r\n // { x: 42.7338129496403, y: 2.70588235294118, size: 1 },\r\n // { x: 43.3812949640288, y: 3.17647058823529, size: 1 },\r\n // { x: 108.129496402878, y: 3.2156862745098, size: 1 },\r\n // { x: 112.014388489209, y: 3.96078431372549, size: 1 },\r\n // { x: 122.374100719424, y: 4.23529411764706, size: 1 },\r\n // { x: 150.215827338129, y: 2.74509803921569, size: 1 },\r\n // { x: 150.863309352518, y: 2.70588235294118, size: 1 },\r\n // { x: 195.539568345324, y: 4, size: 1 },\r\n // { x: 235.68345323741, y: 2.98039215686275, size: 1 },\r\n // { x: 237.625899280576, y: 2.94117647058824, size: 1 },\r\n // { x: 358.705035971223, y: 3.92156862745098, size: 1 },\r\n // { x: 0.648648648648649, y: 3.96078431372549, size: 1 },\r\n // { x: 2.59459459459459, y: 3.92156862745098, size: 1 },\r\n // { x: 3.24324324324324, y: 4.07843137254902, size: 1 },\r\n // { x: 18.8108108108108, y: 3.41176470588235, size: 1 },\r\n // { x: 25.9459459459459, y: 3.37254901960784, size: 1 },\r\n // { x: 27.2432432432432, y: 3.17647058823529, size: 1 },\r\n // { x: 27.8918918918919, y: 2.7843137254902, size: 1 },\r\n // { x: 28.5405405405405, y: 2.86274509803922, size: 1 },\r\n // { x: 29.1891891891892, y: 2.94117647058824, size: 1 },\r\n // { x: 42.1621621621622, y: 3.88235294117647, size: 1 },\r\n // { x: 48.6486486486486, y: 2.50980392156863, size: 1 },\r\n // { x: 49.2972972972973, y: 2.43137254901961, size: 1 },\r\n // { x: 49.9459459459459, y: 2.70588235294118, size: 1 },\r\n // { x: 50.5945945945946, y: 2.90196078431373, size: 1 },\r\n // { x: 72, y: 3.29411764705882, size: 1 },\r\n // { x: 75.2432432432432, y: 3.25490196078431, size: 1 },\r\n // { x: 78.4864864864865, y: 3.25490196078431, size: 1 },\r\n // { x: 86.9189189189189, y: 3.33333333333333, size: 1 },\r\n // { x: 92.1081081081081, y: 3.25490196078431, size: 1 },\r\n // { x: 114.162162162162, y: 3.2156862745098, size: 1 },\r\n // { x: 123.891891891892, y: 3.92156862745098, size: 1 },\r\n // { x: 131.027027027027, y: 3.88235294117647, size: 1 },\r\n // { x: 134.918918918919, y: 2.58823529411765, size: 1 },\r\n // { x: 135.567567567568, y: 2.43137254901961, size: 1 },\r\n // { x: 136.216216216216, y: 2.43137254901961, size: 1 },\r\n // { x: 137.513513513514, y: 3.13725490196078, size: 1 },\r\n // { x: 147.891891891892, y: 3.80392156862745, size: 1 },\r\n // { x: 156.972972972973, y: 3.25490196078431, size: 1 },\r\n // { x: 157.621621621622, y: 3.25490196078431, size: 1 },\r\n // { x: 158.27027027027, y: 2.86274509803922, size: 1 },\r\n // { x: 166.054054054054, y: 4.03921568627451, size: 1 },\r\n // { x: 178.378378378378, y: 3.05882352941176, size: 1 },\r\n // { x: 180.324324324324, y: 3.09803921568627, size: 1 },\r\n // { x: 190.702702702703, y: 3.96078431372549, size: 1 },\r\n // { x: 199.783783783784, y: 2.90196078431373, size: 1 },\r\n // { x: 200.432432432432, y: 3.13725490196078, size: 1 },\r\n // { x: 205.621621621622, y: 3.80392156862745, size: 1 },\r\n // { x: 212.756756756757, y: 4, size: 1 },\r\n // { x: 215.351351351351, y: 4.07843137254902, size: 1 },\r\n // { x: 223.783783783784, y: 3.25490196078431, size: 1 },\r\n // { x: 224.432432432432, y: 3.09803921568627, size: 1 },\r\n // { x: 225.081081081081, y: 3.33333333333333, size: 1 },\r\n // { x: 228.972972972973, y: 3.09803921568627, size: 1 },\r\n // { x: 229.621621621622, y: 3.2156862745098, size: 1 },\r\n // { x: 230.27027027027, y: 3.41176470588235, size: 1 },\r\n // { x: 230.918918918919, y: 3.29411764705882, size: 1 },\r\n // { x: 234.810810810811, y: 3.29411764705882, size: 1 },\r\n // { x: 240, y: 3.2156862745098, size: 1 },\r\n // { x: 264.648648648649, y: 2.94117647058824, size: 1 },\r\n // { x: 265.297297297297, y: 3.05882352941176, size: 1 },\r\n // { x: 265.945945945946, y: 3.25490196078431, size: 1 },\r\n // { x: 266.594594594595, y: 3.2156862745098, size: 1 },\r\n // { x: 271.135135135135, y: 3.29411764705882, size: 1 },\r\n // { x: 276.972972972973, y: 3.25490196078431, size: 1 },\r\n // { x: 281.513513513513, y: 3.25490196078431, size: 1 },\r\n // { x: 282.810810810811, y: 3.29411764705882, size: 1 },\r\n // { x: 286.702702702703, y: 3.09803921568627, size: 1 },\r\n // { x: 287.351351351351, y: 3.09803921568627, size: 1 },\r\n // { x: 339.243243243243, y: 3.88235294117647, size: 1 },\r\n // { x: 350.918918918919, y: 3.09803921568627, size: 1 },\r\n // { x: 351.567567567568, y: 2.50980392156863, size: 1 },\r\n // { x: 352.216216216216, y: 2.47058823529412, size: 1 },\r\n // { x: 352.864864864865, y: 2.62745098039216, size: 1 },\r\n // { x: 353.513513513513, y: 2.90196078431373, size: 1 },\r\n // { x: 62.8057553956835, y: 4.07843137254902, size: 1 },\r\n // { x: 66.6906474820144, y: 4.15686274509804, size: 1 },\r\n // { x: 69.2805755395683, y: 4.15686274509804, size: 1 },\r\n // { x: 74.4604316546763, y: 4.07843137254902, size: 1 },\r\n // { x: 78.3453237410072, y: 2.90196078431373, size: 1 },\r\n // { x: 78.9928057553957, y: 3.05882352941176, size: 1 },\r\n // { x: 79.6402877697842, y: 2.82352941176471, size: 1 },\r\n // { x: 130.791366906475, y: 4.11764705882353, size: 1 },\r\n // { x: 206.546762589928, y: 3.09803921568627, size: 1 },\r\n // { x: 207.194244604317, y: 2.47058823529412, size: 1 },\r\n // { x: 207.841726618705, y: 2.15686274509804, size: 1 },\r\n // { x: 208.489208633094, y: 2.58823529411765, size: 1 },\r\n // { x: 209.136690647482, y: 2.50980392156863, size: 1 },\r\n // { x: 244.748201438849, y: 3.96078431372549, size: 1 },\r\n // { x: 281.654676258993, y: 4.15686274509804, size: 1 },\r\n // { x: 293.309352517986, y: 2.47058823529412, size: 1 },\r\n // { x: 293.956834532374, y: 2.43137254901961, size: 1 },\r\n // { x: 314.676258992806, y: 3.25490196078431, size: 1 },\r\n // { x: 315.971223021583, y: 3.09803921568627, size: 1 },\r\n // { x: 336.690647482014, y: 2.70588235294118, size: 1 },\r\n // { x: 337.338129496403, y: 2.7843137254902, size: 1 },\r\n // { x: 42.0863309352518, y: 3.29411764705882, size: 1 },\r\n // { x: 43.3812949640288, y: 2.94117647058824, size: 1 },\r\n // { x: 44.0287769784173, y: 3.01960784313725, size: 1 },\r\n // { x: 51.1510791366906, y: 3.2156862745098, size: 1 },\r\n // { x: 55.0359712230216, y: 3.01960784313725, size: 1 },\r\n // { x: 60.863309352518, y: 3.29411764705882, size: 1 },\r\n // { x: 107.482014388489, y: 2.70588235294118, size: 1 },\r\n // { x: 135.323741007194, y: 3.09803921568627, size: 1 },\r\n // { x: 135.971223021583, y: 3.05882352941176, size: 1 },\r\n // { x: 138.561151079137, y: 3.01960784313725, size: 1 },\r\n // { x: 146.330935251799, y: 3.05882352941176, size: 1 },\r\n // { x: 146.978417266187, y: 3.13725490196078, size: 1 },\r\n // { x: 150.863309352518, y: 2.90196078431373, size: 1 },\r\n // { x: 151.510791366906, y: 2.82352941176471, size: 1 },\r\n // { x: 170.935251798561, y: 2.90196078431373, size: 1 },\r\n // { x: 171.58273381295, y: 2.98039215686275, size: 1 },\r\n // { x: 172.230215827338, y: 3.05882352941176, size: 1 },\r\n // { x: 172.877697841727, y: 2.86274509803922, size: 1 },\r\n // { x: 192.302158273381, y: 3.13725490196078, size: 1 },\r\n // { x: 193.597122302158, y: 2.7843137254902, size: 1 },\r\n // { x: 194.244604316547, y: 2.58823529411765, size: 1 },\r\n // { x: 200.071942446043, y: 4.07843137254902, size: 1 },\r\n // { x: 201.36690647482, y: 4.03921568627451, size: 1 },\r\n // { x: 203.309352517986, y: 4.15686274509804, size: 1 },\r\n // { x: 257.05035971223, y: 3.05882352941176, size: 1 },\r\n // { x: 257.697841726619, y: 3.09803921568627, size: 1 },\r\n // { x: 306.906474820144, y: 3.01960784313725, size: 1 },\r\n // { x: 317.913669064748, y: 3.09803921568627, size: 1 },\r\n // { x: 322.446043165468, y: 2.94117647058824, size: 1 },\r\n // { x: 343.812949640288, y: 2.90196078431373, size: 1 },\r\n // { x: 4.53237410071942, y: 2.90196078431373, size: 1 },\r\n // { x: 5.17985611510791, y: 2.58823529411765, size: 1 },\r\n // { x: 5.8273381294964, y: 2.98039215686275, size: 1 },\r\n // { x: 26.5467625899281, y: 2.94117647058824, size: 1 },\r\n // { x: 40.1438848920863, y: 4.11764705882353, size: 1 },\r\n // { x: 65.3956834532374, y: 3.96078431372549, size: 1 },\r\n // { x: 91.9424460431655, y: 2.82352941176471, size: 1 },\r\n // { x: 110.719424460432, y: 4.03921568627451, size: 1 },\r\n // { x: 172.230215827338, y: 4, size: 1 },\r\n // { x: 187.769784172662, y: 4.19607843137255, size: 1 },\r\n // { x: 192.94964028777, y: 4.07843137254902, size: 1 },\r\n // { x: 220.791366906475, y: 2.66666666666667, size: 1 },\r\n // { x: 221.438848920863, y: 2.7843137254902, size: 1 },\r\n // { x: 307.553956834532, y: 2.86274509803922, size: 1 },\r\n // { x: 309.496402877698, y: 2.70588235294118, size: 1 },\r\n // { x: 328.920863309353, y: 2.50980392156863, size: 1 },\r\n // { x: 330.215827338129, y: 2.50980392156863, size: 1 },\r\n // { x: 330.863309352518, y: 2.3921568627451, size: 1 },\r\n // { x: 334.10071942446, y: 4.03921568627451, size: 1 },\r\n // { x: 344.460431654676, y: 4.11764705882353, size: 1 },\r\n // { x: 9.72972972972973, y: 3.92156862745098, size: 1 },\r\n // { x: 16.2162162162162, y: 3.33333333333333, size: 1 },\r\n // { x: 23.3513513513514, y: 3.2156862745098, size: 1 },\r\n // { x: 24, y: 3.45098039215686, size: 1 },\r\n // { x: 53.8378378378378, y: 3.88235294117647, size: 1 },\r\n // { x: 56.4324324324324, y: 3.88235294117647, size: 1 },\r\n // { x: 57.7297297297297, y: 4.11764705882353, size: 1 },\r\n // { x: 59.027027027027, y: 3.84313725490196, size: 1 },\r\n // { x: 61.6216216216216, y: 4, size: 1 },\r\n // { x: 64.2162162162162, y: 4.19607843137255, size: 1 },\r\n // { x: 65.5135135135135, y: 3.92156862745098, size: 1 },\r\n // { x: 66.1621621621622, y: 4.07843137254902, size: 1 },\r\n // { x: 66.8108108108108, y: 4.07843137254902, size: 1 },\r\n // { x: 68.1081081081081, y: 3.84313725490196, size: 1 },\r\n // { x: 72, y: 3.92156862745098, size: 1 },\r\n // { x: 73.2972972972973, y: 4, size: 1 },\r\n // { x: 73.945945945946, y: 3.88235294117647, size: 1 },\r\n // { x: 76.5405405405405, y: 3.2156862745098, size: 1 },\r\n // { x: 77.1891891891892, y: 3.33333333333333, size: 1 },\r\n // { x: 107.027027027027, y: 3.96078431372549, size: 1 },\r\n // { x: 108.324324324324, y: 3.88235294117647, size: 1 },\r\n // { x: 113.513513513514, y: 3.96078431372549, size: 1 },\r\n // { x: 120, y: 2.82352941176471, size: 1 },\r\n // { x: 120.648648648649, y: 2.66666666666667, size: 1 },\r\n // { x: 125.189189189189, y: 4, size: 1 },\r\n // { x: 129.081081081081, y: 4, size: 1 },\r\n // { x: 140.108108108108, y: 3.25490196078431, size: 1 },\r\n // { x: 142.702702702703, y: 3.13725490196078, size: 1 },\r\n // { x: 143.351351351351, y: 3.05882352941176, size: 1 },\r\n // { x: 162.162162162162, y: 4.11764705882353, size: 1 },\r\n // { x: 174.486486486486, y: 3.29411764705882, size: 1 },\r\n // { x: 200.432432432432, y: 4, size: 1 },\r\n // { x: 206.27027027027, y: 3.13725490196078, size: 1 },\r\n // { x: 206.918918918919, y: 2.82352941176471, size: 1 },\r\n // { x: 207.567567567568, y: 2.7843137254902, size: 1 },\r\n // { x: 208.216216216216, y: 3.01960784313725, size: 1 },\r\n // { x: 210.162162162162, y: 3.80392156862745, size: 1 },\r\n // { x: 228.324324324324, y: 3.25490196078431, size: 1 },\r\n // { x: 230.27027027027, y: 2.58823529411765, size: 1 },\r\n // { x: 273.72972972973, y: 4.07843137254902, size: 1 },\r\n // { x: 275.027027027027, y: 4.03921568627451, size: 1 },\r\n // { x: 278.27027027027, y: 4.03921568627451, size: 1 },\r\n // { x: 279.567567567568, y: 3.84313725490196, size: 1 },\r\n // { x: 288, y: 3.92156862745098, size: 1 },\r\n // { x: 289.945945945946, y: 3.92156862745098, size: 1 },\r\n // { x: 293.189189189189, y: 3.25490196078431, size: 1 },\r\n // { x: 294.486486486487, y: 3.13725490196078, size: 1 },\r\n // { x: 295.135135135135, y: 2.94117647058824, size: 1 },\r\n // { x: 315.243243243243, y: 3.25490196078431, size: 1 },\r\n // { x: 323.027027027027, y: 3.96078431372549, size: 1 },\r\n // { x: 324.324324324324, y: 4.15686274509804, size: 1 },\r\n // { x: 326.918918918919, y: 4.03921568627451, size: 1 },\r\n // { x: 327.567567567568, y: 3.96078431372549, size: 1 },\r\n // { x: 328.216216216216, y: 3.92156862745098, size: 1 },\r\n // { x: 331.459459459459, y: 4, size: 1 },\r\n // { x: 332.756756756757, y: 4.11764705882353, size: 1 },\r\n // { x: 333.405405405405, y: 3.96078431372549, size: 1 },\r\n // { x: 345.081081081081, y: 3.25490196078431, size: 1 },\r\n // { x: 348.324324324324, y: 3.2156862745098, size: 1 },\r\n // { x: 348.972972972973, y: 3.33333333333333, size: 1 },\r\n // { x: 350.27027027027, y: 3.29411764705882, size: 1 },\r\n // { x: 20.0719424460432, y: 3.09803921568627, size: 1 },\r\n // { x: 73.1654676258993, y: 4.03921568627451, size: 1 },\r\n // { x: 129.496402877698, y: 4.11764705882353, size: 1 },\r\n // { x: 159.928057553957, y: 3.41176470588235, size: 1 },\r\n // { x: 192.94964028777, y: 3.09803921568627, size: 1 },\r\n // { x: 198.129496402878, y: 4.03921568627451, size: 1 },\r\n // { x: 203.956834532374, y: 4.03921568627451, size: 1 },\r\n // { x: 204.604316546763, y: 4, size: 1 },\r\n // { x: 279.064748201439, y: 2.98039215686275, size: 1 },\r\n // { x: 290.071942446043, y: 4, size: 1 },\r\n // { x: 304.964028776978, y: 4.03921568627451, size: 1 },\r\n // { x: 28.4892086330935, y: 3.96078431372549, size: 1 },\r\n // { x: 40.1438848920863, y: 4.07843137254902, size: 1 },\r\n // { x: 264.172661870504, y: 2.7843137254902, size: 1 },\r\n // { x: 264.820143884892, y: 2.70588235294118, size: 1 },\r\n // { x: 265.467625899281, y: 2.74509803921569, size: 1 },\r\n // { x: 285.539568345324, y: 2.94117647058824, size: 1 },\r\n // { x: 341.870503597122, y: 4.19607843137255, size: 1 },\r\n // { x: 345.755395683453, y: 4.07843137254902, size: 1 },\r\n // { x: 350.287769784173, y: 2.70588235294118, size: 1 },\r\n // { x: 350.935251798561, y: 2.58823529411765, size: 1 },\r\n // { x: 11.6546762589928, y: 2.98039215686275, size: 1 },\r\n // { x: 12.3021582733813, y: 2.90196078431373, size: 1 },\r\n // { x: 12.9496402877698, y: 2.86274509803922, size: 1 },\r\n // { x: 13.5971223021583, y: 3.05882352941176, size: 1 },\r\n // { x: 119.784172661871, y: 1.6078431372549, size: 1 },\r\n // { x: 120.431654676259, y: 1.80392156862745, size: 1 },\r\n // { x: 121.079136690647, y: 1.80392156862745, size: 1 },\r\n // { x: 121.726618705036, y: 1.76470588235294, size: 1 },\r\n // { x: 129.496402877698, y: 2.94117647058824, size: 1 },\r\n // { x: 135.971223021583, y: 2.98039215686275, size: 1 },\r\n // { x: 148.273381294964, y: 4.07843137254902, size: 1 },\r\n // { x: 163.165467625899, y: 3.09803921568627, size: 1 },\r\n // { x: 184.532374100719, y: 2.94117647058824, size: 1 },\r\n // { x: 185.179856115108, y: 2.86274509803922, size: 1 },\r\n // { x: 206.546762589928, y: 2.31372549019608, size: 1 },\r\n // { x: 249.280575539568, y: 2.50980392156863, size: 1 },\r\n // { x: 249.928057553957, y: 2.74509803921569, size: 1 },\r\n // { x: 271.294964028777, y: 2.94117647058824, size: 1 },\r\n // { x: 286.834532374101, y: 4.3921568627451, size: 1 },\r\n // { x: 291.36690647482, y: 3.17647058823529, size: 1 },\r\n // { x: 292.661870503597, y: 2.86274509803922, size: 1 },\r\n // { x: 293.309352517986, y: 2.98039215686275, size: 1 },\r\n // { x: 299.136690647482, y: 3.05882352941176, size: 1 },\r\n // { x: 314.676258992806, y: 2.90196078431373, size: 1 },\r\n // { x: 335.395683453237, y: 2.7843137254902, size: 1 },\r\n // { x: 336.043165467626, y: 2.86274509803922, size: 1 },\r\n // { x: 356.762589928058, y: 2.94117647058824, size: 1 },\r\n // { x: 357.410071942446, y: 2.50980392156863, size: 1 },\r\n // { x: 19.4594594594595, y: 3.17647058823529, size: 1 },\r\n // { x: 20.7567567567568, y: 3.33333333333333, size: 1 },\r\n // { x: 26.5945945945946, y: 3.2156862745098, size: 1 },\r\n // { x: 27.2432432432432, y: 3.13725490196078, size: 1 },\r\n // { x: 28.5405405405405, y: 3.37254901960784, size: 1 },\r\n // { x: 42.8108108108108, y: 3.2156862745098, size: 1 },\r\n // { x: 52.5405405405405, y: 3.25490196078431, size: 1 },\r\n // { x: 54.4864864864865, y: 3.33333333333333, size: 1 },\r\n // { x: 96.6486486486486, y: 4, size: 1 },\r\n // { x: 97.945945945946, y: 4, size: 1 },\r\n // { x: 105.081081081081, y: 3.17647058823529, size: 1 },\r\n // { x: 107.027027027027, y: 3.29411764705882, size: 1 },\r\n // { x: 108.324324324324, y: 3.29411764705882, size: 1 },\r\n // { x: 111.567567567568, y: 3.25490196078431, size: 1 },\r\n // { x: 112.864864864865, y: 3.25490196078431, size: 1 },\r\n // { x: 116.108108108108, y: 3.2156862745098, size: 1 },\r\n // { x: 116.756756756757, y: 3.29411764705882, size: 1 },\r\n // { x: 122.594594594595, y: 3.2156862745098, size: 1 },\r\n // { x: 134.27027027027, y: 4.03921568627451, size: 1 },\r\n // { x: 137.513513513514, y: 3.88235294117647, size: 1 },\r\n // { x: 148.540540540541, y: 3.17647058823529, size: 1 },\r\n // { x: 149.189189189189, y: 3.33333333333333, size: 1 },\r\n // { x: 151.783783783784, y: 3.29411764705882, size: 1 },\r\n // { x: 152.432432432432, y: 3.25490196078431, size: 1 },\r\n // { x: 155.027027027027, y: 3.25490196078431, size: 1 },\r\n // { x: 156.324324324324, y: 3.2156862745098, size: 1 },\r\n // { x: 158.27027027027, y: 3.37254901960784, size: 1 },\r\n // { x: 160.864864864865, y: 3.13725490196078, size: 1 },\r\n // { x: 162.162162162162, y: 3.05882352941176, size: 1 },\r\n // { x: 162.810810810811, y: 3.13725490196078, size: 1 },\r\n // { x: 163.459459459459, y: 3.37254901960784, size: 1 },\r\n // { x: 164.108108108108, y: 3.37254901960784, size: 1 },\r\n // { x: 164.756756756757, y: 3.29411764705882, size: 1 },\r\n // { x: 166.702702702703, y: 3.29411764705882, size: 1 },\r\n // { x: 167.351351351351, y: 3.13725490196078, size: 1 },\r\n // { x: 169.945945945946, y: 3.05882352941176, size: 1 },\r\n // { x: 170.594594594595, y: 3.2156862745098, size: 1 },\r\n // { x: 190.702702702703, y: 3.09803921568627, size: 1 },\r\n // { x: 204.324324324324, y: 4.03921568627451, size: 1 },\r\n // { x: 219.891891891892, y: 3.09803921568627, size: 1 },\r\n // { x: 221.837837837838, y: 3.2156862745098, size: 1 },\r\n // { x: 224.432432432432, y: 3.25490196078431, size: 1 },\r\n // { x: 225.081081081081, y: 3.17647058823529, size: 1 },\r\n // { x: 225.72972972973, y: 3.33333333333333, size: 1 },\r\n // { x: 226.378378378378, y: 3.29411764705882, size: 1 },\r\n // { x: 227.027027027027, y: 3.13725490196078, size: 1 },\r\n // { x: 227.675675675676, y: 3.2156862745098, size: 1 },\r\n // { x: 230.918918918919, y: 3.2156862745098, size: 1 },\r\n // { x: 232.216216216216, y: 3.17647058823529, size: 1 },\r\n // { x: 235.459459459459, y: 3.33333333333333, size: 1 },\r\n // { x: 239.351351351351, y: 3.37254901960784, size: 1 },\r\n // { x: 240, y: 3.80392156862745, size: 1 },\r\n // { x: 254.918918918919, y: 3.25490196078431, size: 1 },\r\n // { x: 256.864864864865, y: 2.54901960784314, size: 1 },\r\n // { x: 271.135135135135, y: 3.84313725490196, size: 1 },\r\n // { x: 275.675675675676, y: 3.84313725490196, size: 1 },\r\n // { x: 277.621621621622, y: 3.17647058823529, size: 1 },\r\n // { x: 278.27027027027, y: 2.70588235294118, size: 1 },\r\n // { x: 278.918918918919, y: 2.98039215686275, size: 1 },\r\n // { x: 279.567567567568, y: 3.2156862745098, size: 1 },\r\n // { x: 280.216216216216, y: 3.09803921568627, size: 1 },\r\n // { x: 280.864864864865, y: 3.25490196078431, size: 1 },\r\n // { x: 284.108108108108, y: 3.2156862745098, size: 1 },\r\n // { x: 284.756756756757, y: 3.13725490196078, size: 1 },\r\n // { x: 286.054054054054, y: 3.33333333333333, size: 1 },\r\n // { x: 291.891891891892, y: 3.17647058823529, size: 1 },\r\n // { x: 293.837837837838, y: 3.33333333333333, size: 1 },\r\n // { x: 295.783783783784, y: 3.13725490196078, size: 1 },\r\n // { x: 299.675675675676, y: 3.09803921568627, size: 1 },\r\n // { x: 324.972972972973, y: 3.33333333333333, size: 1 },\r\n // { x: 327.567567567568, y: 3.2156862745098, size: 1 },\r\n // { x: 332.108108108108, y: 3.01960784313725, size: 1 },\r\n // { x: 332.756756756757, y: 3.13725490196078, size: 1 },\r\n // { x: 334.054054054054, y: 3.2156862745098, size: 1 },\r\n // { x: 334.702702702703, y: 3.17647058823529, size: 1 },\r\n // { x: 335.351351351351, y: 3.25490196078431, size: 1 },\r\n // { x: 338.594594594595, y: 3.25490196078431, size: 1 },\r\n // { x: 339.243243243243, y: 3.17647058823529, size: 1 },\r\n // { x: 340.540540540541, y: 3.17647058823529, size: 1 },\r\n // { x: 343.783783783784, y: 2.98039215686275, size: 1 },\r\n // { x: 62.158273381295, y: 4, size: 1 },\r\n // { x: 101.654676258993, y: 3.13725490196078, size: 1 },\r\n // { x: 157.338129496403, y: 2.7843137254902, size: 1 },\r\n // { x: 164.460431654676, y: 3.2156862745098, size: 1 },\r\n // { x: 198.776978417266, y: 2.86274509803922, size: 1 },\r\n // { x: 220.791366906475, y: 2.98039215686275, size: 1 },\r\n // { x: 249.928057553957, y: 4.03921568627451, size: 1 },\r\n // { x: 288.129496402878, y: 3.13725490196078, size: 1 },\r\n // { x: 293.309352517986, y: 3.13725490196078, size: 1 },\r\n // { x: 297.841726618705, y: 3.17647058823529, size: 1 },\r\n // { x: 328.273381294964, y: 2.86274509803922, size: 1 },\r\n // { x: 72.5179856115108, y: 3.17647058823529, size: 1 },\r\n // { x: 119.784172661871, y: 2.19607843137255, size: 1 },\r\n // { x: 120.431654676259, y: 2.82352941176471, size: 1 },\r\n // { x: 123.669064748201, y: 3.17647058823529, size: 1 },\r\n // { x: 137.913669064748, y: 3.17647058823529, size: 1 },\r\n // { x: 140.503597122302, y: 3.17647058823529, size: 1 },\r\n // { x: 141.798561151079, y: 3.01960784313725, size: 1 },\r\n // { x: 149.568345323741, y: 4.07843137254902, size: 1 },\r\n // { x: 165.755395683453, y: 3.25490196078431, size: 1 },\r\n // { x: 168.345323741007, y: 3.25490196078431, size: 1 },\r\n // { x: 187.122302158273, y: 3.17647058823529, size: 1 },\r\n // { x: 195.539568345324, y: 3.09803921568627, size: 1 },\r\n // { x: 207.194244604317, y: 3.01960784313725, size: 1 },\r\n // { x: 213.669064748201, y: 3.05882352941176, size: 1 },\r\n // { x: 214.31654676259, y: 3.13725490196078, size: 1 },\r\n // { x: 218.848920863309, y: 3.17647058823529, size: 1 },\r\n // { x: 220.143884892086, y: 3.13725490196078, size: 1 },\r\n // { x: 249.280575539568, y: 3.17647058823529, size: 1 },\r\n // { x: 249.928057553957, y: 3.09803921568627, size: 1 },\r\n // { x: 250.575539568345, y: 3.17647058823529, size: 1 },\r\n // { x: 252.517985611511, y: 3.2156862745098, size: 1 },\r\n // { x: 255.755395683453, y: 3.2156862745098, size: 1 },\r\n // { x: 262.230215827338, y: 3.17647058823529, size: 1 },\r\n // { x: 270.647482014389, y: 3.13725490196078, size: 1 },\r\n // { x: 282.302158273381, y: 3.05882352941176, size: 1 },\r\n // { x: 282.94964028777, y: 3.13725490196078, size: 1 },\r\n // { x: 292.661870503597, y: 3.01960784313725, size: 1 },\r\n // { x: 314.028776978417, y: 2.50980392156863, size: 1 },\r\n // { x: 314.676258992806, y: 2.7843137254902, size: 1 },\r\n // { x: 319.856115107914, y: 3.17647058823529, size: 1 },\r\n // { x: 325.035971223022, y: 3.09803921568627, size: 1 },\r\n // { x: 335.395683453237, y: 2.90196078431373, size: 1 },\r\n // { x: 336.043165467626, y: 2.74509803921569, size: 1 },\r\n // { x: 352.230215827338, y: 3.2156862745098, size: 1 },\r\n // { x: 3.24324324324324, y: 3.29411764705882, size: 1 },\r\n // { x: 13.6216216216216, y: 3.25490196078431, size: 1 },\r\n // { x: 22.0540540540541, y: 3.17647058823529, size: 1 },\r\n // { x: 31.7837837837838, y: 3.29411764705882, size: 1 },\r\n // { x: 48, y: 3.33333333333333, size: 1 },\r\n // { x: 62.2702702702703, y: 3.01960784313725, size: 1 },\r\n // { x: 64.8648648648649, y: 3.05882352941176, size: 1 },\r\n // { x: 65.5135135135135, y: 3.29411764705882, size: 1 },\r\n // { x: 70.054054054054, y: 3.33333333333333, size: 1 },\r\n // { x: 74.5945945945946, y: 3.17647058823529, size: 1 },\r\n // { x: 79.1351351351351, y: 3.29411764705882, size: 1 },\r\n // { x: 102.486486486486, y: 4.03921568627451, size: 1 },\r\n // { x: 129.081081081081, y: 3.92156862745098, size: 1 },\r\n // { x: 147.891891891892, y: 3.09803921568627, size: 1 },\r\n // { x: 148.540540540541, y: 2.66666666666667, size: 1 },\r\n // { x: 169.297297297297, y: 3.33333333333333, size: 1 },\r\n // { x: 170.594594594595, y: 3.01960784313725, size: 1 },\r\n // { x: 190.054054054054, y: 3.25490196078431, size: 1 },\r\n // { x: 191.351351351351, y: 2.54901960784314, size: 1 },\r\n // { x: 192, y: 2.43137254901961, size: 1 },\r\n // { x: 228.972972972973, y: 3.92156862745098, size: 1 },\r\n // { x: 238.054054054054, y: 3.2156862745098, size: 1 },\r\n // { x: 239.351351351351, y: 3.41176470588235, size: 1 },\r\n // { x: 252.972972972973, y: 3.17647058823529, size: 1 },\r\n // { x: 256.216216216216, y: 3.05882352941176, size: 1 },\r\n // { x: 256.864864864865, y: 2.86274509803922, size: 1 },\r\n // { x: 295.135135135135, y: 4.03921568627451, size: 1 },\r\n // { x: 298.378378378378, y: 3.33333333333333, size: 1 },\r\n // { x: 299.675675675676, y: 2.90196078431373, size: 1 },\r\n // { x: 308.756756756757, y: 3.92156862745098, size: 1 },\r\n // { x: 321.72972972973, y: 3.33333333333333, size: 1 },\r\n // { x: 332.108108108108, y: 3.96078431372549, size: 1 },\r\n // { x: 344.432432432432, y: 4.07843137254902, size: 1 },\r\n // { x: 346.378378378378, y: 4.03921568627451, size: 1 },\r\n // { x: 348.972972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 351.567567567568, y: 3.96078431372549, size: 1 },\r\n // { x: 352.216216216216, y: 3.84313725490196, size: 1 },\r\n // { x: 355.459459459459, y: 4.19607843137255, size: 1 },\r\n // { x: 357.405405405405, y: 4.03921568627451, size: 1 },\r\n // { x: 5.8273381294964, y: 4.03921568627451, size: 1 },\r\n // { x: 6.47482014388489, y: 4.07843137254902, size: 1 },\r\n // { x: 12.9496402877698, y: 4.11764705882353, size: 1 },\r\n // { x: 16.1870503597122, y: 4.07843137254902, size: 1 },\r\n // { x: 18.1294964028777, y: 4.03921568627451, size: 1 },\r\n // { x: 18.7769784172662, y: 4.07843137254902, size: 1 },\r\n // { x: 22.0143884892086, y: 4, size: 1 },\r\n // { x: 25.8992805755396, y: 2.98039215686275, size: 1 },\r\n // { x: 26.5467625899281, y: 2.86274509803922, size: 1 },\r\n // { x: 29.136690647482, y: 4, size: 1 },\r\n // { x: 29.7841726618705, y: 3.92156862745098, size: 1 },\r\n // { x: 33.6690647482014, y: 4.03921568627451, size: 1 },\r\n // { x: 37.5539568345324, y: 4, size: 1 },\r\n // { x: 38.2014388489209, y: 4, size: 1 },\r\n // { x: 47.9136690647482, y: 3.01960784313725, size: 1 },\r\n // { x: 49.8561151079137, y: 4, size: 1 },\r\n // { x: 50.5035971223022, y: 3.96078431372549, size: 1 },\r\n // { x: 51.7985611510791, y: 4.23529411764706, size: 1 },\r\n // { x: 55.0359712230216, y: 4.11764705882353, size: 1 },\r\n // { x: 56.9784172661871, y: 4.19607843137255, size: 1 },\r\n // { x: 60.2158273381295, y: 3.96078431372549, size: 1 },\r\n // { x: 62.8057553956835, y: 4, size: 1 },\r\n // { x: 66.6906474820144, y: 4.19607843137255, size: 1 },\r\n // { x: 78.9928057553957, y: 4, size: 1 },\r\n // { x: 112.661870503597, y: 2.3921568627451, size: 1 },\r\n // { x: 134.028776978417, y: 2.82352941176471, size: 1 },\r\n // { x: 140.503597122302, y: 4.23529411764706, size: 1 },\r\n // { x: 144.388489208633, y: 4.27450980392157, size: 1 },\r\n // { x: 146.330935251799, y: 4.03921568627451, size: 1 },\r\n // { x: 152.158273381295, y: 4.03921568627451, size: 1 },\r\n // { x: 152.805755395683, y: 4.15686274509804, size: 1 },\r\n // { x: 161.870503597122, y: 4.07843137254902, size: 1 },\r\n // { x: 163.812949640288, y: 4.27450980392157, size: 1 },\r\n // { x: 166.402877697842, y: 4.19607843137255, size: 1 },\r\n // { x: 167.697841726619, y: 4.07843137254902, size: 1 },\r\n // { x: 169.640287769784, y: 4.03921568627451, size: 1 },\r\n // { x: 177.410071942446, y: 2.62745098039216, size: 1 },\r\n // { x: 198.776978417266, y: 2.7843137254902, size: 1 },\r\n // { x: 200.719424460432, y: 4.11764705882353, size: 1 },\r\n // { x: 203.956834532374, y: 4.15686274509804, size: 1 },\r\n // { x: 205.251798561151, y: 4.07843137254902, size: 1 },\r\n // { x: 206.546762589928, y: 4.15686274509804, size: 1 },\r\n // { x: 211.079136690647, y: 4.07843137254902, size: 1 },\r\n // { x: 212.374100719424, y: 4.03921568627451, size: 1 },\r\n // { x: 214.964028776978, y: 4, size: 1 },\r\n // { x: 216.258992805755, y: 4.15686274509804, size: 1 },\r\n // { x: 216.906474820144, y: 4.07843137254902, size: 1 },\r\n // { x: 220.143884892086, y: 2.74509803921569, size: 1 },\r\n // { x: 220.791366906475, y: 2.58823529411765, size: 1 },\r\n // { x: 237.625899280576, y: 3.25490196078431, size: 1 },\r\n // { x: 242.158273381295, y: 2.74509803921569, size: 1 },\r\n // { x: 242.805755395683, y: 3.13725490196078, size: 1 },\r\n // { x: 249.928057553957, y: 3.17647058823529, size: 1 },\r\n // { x: 263.525179856115, y: 2.74509803921569, size: 1 },\r\n // { x: 264.172661870504, y: 2.66666666666667, size: 1 },\r\n // { x: 297.841726618705, y: 3.96078431372549, size: 1 },\r\n // { x: 323.741007194245, y: 3.88235294117647, size: 1 },\r\n // { x: 47.2661870503597, y: 2.98039215686275, size: 1 },\r\n // { x: 50.5035971223022, y: 3.25490196078431, size: 1 },\r\n // { x: 68.6330935251799, y: 4, size: 1 },\r\n // { x: 119.784172661871, y: 2.43137254901961, size: 1 },\r\n // { x: 162.517985611511, y: 2.47058823529412, size: 1 },\r\n // { x: 163.165467625899, y: 2.50980392156863, size: 1 },\r\n // { x: 185.827338129496, y: 3.96078431372549, size: 1 },\r\n // { x: 188.41726618705, y: 3.96078431372549, size: 1 },\r\n // { x: 189.712230215827, y: 4.11764705882353, size: 1 },\r\n // { x: 190.359712230216, y: 4.03921568627451, size: 1 },\r\n // { x: 191.007194244604, y: 4.03921568627451, size: 1 },\r\n // { x: 199.424460431655, y: 4.11764705882353, size: 1 },\r\n // { x: 202.661870503597, y: 3.96078431372549, size: 1 },\r\n // { x: 233.741007194245, y: 4.03921568627451, size: 1 },\r\n // { x: 299.136690647482, y: 4.11764705882353, size: 1 },\r\n // { x: 316.618705035971, y: 3.96078431372549, size: 1 },\r\n // { x: 352.877697841727, y: 3.92156862745098, size: 1 },\r\n // { x: 25.2517985611511, y: 3.09803921568627, size: 1 },\r\n // { x: 32.3741007194245, y: 3.2156862745098, size: 1 },\r\n // { x: 36.2589928057554, y: 3.05882352941176, size: 1 },\r\n // { x: 113.956834532374, y: 4.15686274509804, size: 1 },\r\n // { x: 119.784172661871, y: 4.15686274509804, size: 1 },\r\n // { x: 218.201438848921, y: 3.96078431372549, size: 1 },\r\n // { x: 255.755395683453, y: 2.86274509803922, size: 1 },\r\n // { x: 257.05035971223, y: 3.09803921568627, size: 1 },\r\n // { x: 279.064748201439, y: 2.70588235294118, size: 1 },\r\n // { x: 304.964028776978, y: 4, size: 1 },\r\n // { x: 308.201438848921, y: 4, size: 1 },\r\n // { x: 310.791366906475, y: 4.07843137254902, size: 1 },\r\n // { x: 311.438848920863, y: 3.96078431372549, size: 1 },\r\n // { x: 315.971223021583, y: 4.19607843137255, size: 1 },\r\n // { x: 5.18918918918919, y: 3.37254901960784, size: 1 },\r\n // { x: 10.3783783783784, y: 3.2156862745098, size: 1 },\r\n // { x: 15.5675675675676, y: 3.17647058823529, size: 1 },\r\n // { x: 16.8648648648649, y: 3.2156862745098, size: 1 },\r\n // { x: 17.5135135135135, y: 3.2156862745098, size: 1 },\r\n // { x: 18.8108108108108, y: 3.29411764705882, size: 1 },\r\n // { x: 20.7567567567568, y: 3.05882352941176, size: 1 },\r\n // { x: 21.4054054054054, y: 3.33333333333333, size: 1 },\r\n // { x: 29.1891891891892, y: 3.96078431372549, size: 1 },\r\n // { x: 46.7027027027027, y: 3.29411764705882, size: 1 },\r\n // { x: 51.2432432432432, y: 3.84313725490196, size: 1 },\r\n // { x: 72, y: 3.96078431372549, size: 1 },\r\n // { x: 76.5405405405405, y: 3.88235294117647, size: 1 },\r\n // { x: 89.5135135135135, y: 3.37254901960784, size: 1 },\r\n // { x: 90.1621621621622, y: 3.09803921568627, size: 1 },\r\n // { x: 91.4594594594595, y: 3.09803921568627, size: 1 },\r\n // { x: 105.081081081081, y: 3.96078431372549, size: 1 },\r\n // { x: 112.216216216216, y: 2.94117647058824, size: 1 },\r\n // { x: 112.864864864865, y: 3.09803921568627, size: 1 },\r\n // { x: 113.513513513514, y: 2.94117647058824, size: 1 },\r\n // { x: 116.108108108108, y: 3.88235294117647, size: 1 },\r\n // { x: 120.648648648649, y: 3.88235294117647, size: 1 },\r\n // { x: 133.621621621622, y: 2.98039215686275, size: 1 },\r\n // { x: 134.27027027027, y: 3.13725490196078, size: 1 },\r\n // { x: 134.918918918919, y: 3.2156862745098, size: 1 },\r\n // { x: 135.567567567568, y: 2.94117647058824, size: 1 },\r\n // { x: 153.081081081081, y: 3.29411764705882, size: 1 },\r\n // { x: 155.027027027027, y: 2.90196078431373, size: 1 },\r\n // { x: 156.324324324324, y: 2.98039215686275, size: 1 },\r\n // { x: 156.972972972973, y: 2.98039215686275, size: 1 },\r\n // { x: 178.378378378378, y: 3.25490196078431, size: 1 },\r\n // { x: 179.675675675676, y: 3.05882352941176, size: 1 },\r\n // { x: 182.918918918919, y: 3.29411764705882, size: 1 },\r\n // { x: 184.864864864865, y: 3.09803921568627, size: 1 },\r\n // { x: 188.756756756757, y: 3.2156862745098, size: 1 },\r\n // { x: 189.405405405405, y: 3.33333333333333, size: 1 },\r\n // { x: 191.351351351351, y: 3.25490196078431, size: 1 },\r\n // { x: 193.945945945946, y: 3.25490196078431, size: 1 },\r\n // { x: 219.891891891892, y: 2.90196078431373, size: 1 },\r\n // { x: 220.540540540541, y: 3.17647058823529, size: 1 },\r\n // { x: 221.189189189189, y: 3.13725490196078, size: 1 },\r\n // { x: 241.297297297297, y: 2.98039215686275, size: 1 },\r\n // { x: 241.945945945946, y: 2.74509803921569, size: 1 },\r\n // { x: 242.594594594595, y: 2.62745098039216, size: 1 },\r\n // { x: 243.243243243243, y: 2.70588235294118, size: 1 },\r\n // { x: 255.567567567568, y: 3.41176470588235, size: 1 },\r\n // { x: 295.135135135135, y: 4.07843137254902, size: 1 },\r\n // { x: 295.783783783784, y: 4.03921568627451, size: 1 },\r\n // { x: 300.324324324324, y: 4.07843137254902, size: 1 },\r\n // { x: 306.162162162162, y: 3.2156862745098, size: 1 },\r\n // { x: 306.810810810811, y: 3.25490196078431, size: 1 },\r\n // { x: 308.108108108108, y: 2.94117647058824, size: 1 },\r\n // { x: 321.72972972973, y: 3.96078431372549, size: 1 },\r\n // { x: 327.567567567568, y: 3.33333333333333, size: 1 },\r\n // { x: 341.189189189189, y: 3.92156862745098, size: 1 },\r\n // { x: 349.621621621622, y: 3.13725490196078, size: 1 },\r\n // { x: 351.567567567568, y: 3.29411764705882, size: 1 },\r\n // { x: 14.8920863309353, y: 3.96078431372549, size: 1 },\r\n // { x: 17.4820143884892, y: 3.96078431372549, size: 1 },\r\n // { x: 74.4604316546763, y: 3.29411764705882, size: 1 },\r\n // { x: 75.7553956834532, y: 2.98039215686275, size: 1 },\r\n // { x: 77.0503597122302, y: 3.05882352941176, size: 1 },\r\n // { x: 98.4172661870504, y: 4.03921568627451, size: 1 },\r\n // { x: 103.597122302158, y: 4.27450980392157, size: 1 },\r\n // { x: 104.244604316547, y: 4.11764705882353, size: 1 },\r\n // { x: 109.424460431655, y: 4, size: 1 },\r\n // { x: 116.546762589928, y: 4.07843137254902, size: 1 },\r\n // { x: 121.726618705036, y: 4.03921568627451, size: 1 },\r\n // { x: 122.374100719424, y: 4.07843137254902, size: 1 },\r\n // { x: 126.258992805755, y: 4.19607843137255, size: 1 },\r\n // { x: 128.848920863309, y: 4.11764705882353, size: 1 },\r\n // { x: 131.438848920863, y: 4.11764705882353, size: 1 },\r\n // { x: 132.086330935252, y: 4.03921568627451, size: 1 },\r\n // { x: 135.323741007194, y: 3.96078431372549, size: 1 },\r\n // { x: 137.26618705036, y: 4.15686274509804, size: 1 },\r\n // { x: 150.863309352518, y: 4, size: 1 },\r\n // { x: 152.805755395683, y: 4.03921568627451, size: 1 },\r\n // { x: 154.10071942446, y: 3.96078431372549, size: 1 },\r\n // { x: 162.517985611511, y: 2.66666666666667, size: 1 },\r\n // { x: 163.165467625899, y: 2.86274509803922, size: 1 },\r\n // { x: 163.812949640288, y: 2.94117647058824, size: 1 },\r\n // { x: 164.460431654676, y: 2.82352941176471, size: 1 },\r\n // { x: 165.107913669065, y: 4.43137254901961, size: 1 },\r\n // { x: 166.402877697842, y: 4.31372549019608, size: 1 },\r\n // { x: 172.877697841727, y: 4.07843137254902, size: 1 },\r\n // { x: 174.820143884892, y: 4.07843137254902, size: 1 },\r\n // { x: 175.467625899281, y: 4.11764705882353, size: 1 },\r\n // { x: 179.352517985612, y: 4.15686274509804, size: 1 },\r\n // { x: 181.294964028777, y: 4, size: 1 },\r\n // { x: 184.532374100719, y: 3.2156862745098, size: 1 },\r\n // { x: 185.179856115108, y: 4, size: 1 },\r\n // { x: 194.244604316547, y: 4.23529411764706, size: 1 },\r\n // { x: 198.776978417266, y: 4.07843137254902, size: 1 },\r\n // { x: 202.014388489209, y: 3.96078431372549, size: 1 },\r\n // { x: 202.661870503597, y: 4.03921568627451, size: 1 },\r\n // { x: 209.136690647482, y: 4.03921568627451, size: 1 },\r\n // { x: 211.726618705036, y: 4, size: 1 },\r\n // { x: 216.258992805755, y: 4.03921568627451, size: 1 },\r\n // { x: 216.906474820144, y: 4.15686274509804, size: 1 },\r\n // { x: 222.086330935252, y: 4.03921568627451, size: 1 },\r\n // { x: 228.561151079137, y: 3.05882352941176, size: 1 },\r\n // { x: 248.63309352518, y: 3.13725490196078, size: 1 },\r\n // { x: 253.165467625899, y: 4, size: 1 },\r\n // { x: 258.992805755396, y: 4, size: 1 },\r\n // { x: 260.935251798561, y: 4, size: 1 },\r\n // { x: 261.58273381295, y: 4, size: 1 },\r\n // { x: 288.129496402878, y: 3.88235294117647, size: 1 },\r\n // { x: 289.424460431655, y: 3.96078431372549, size: 1 },\r\n // { x: 290.071942446043, y: 3.13725490196078, size: 1 },\r\n // { x: 292.014388489209, y: 2.62745098039216, size: 1 },\r\n // { x: 292.661870503597, y: 2.82352941176471, size: 1 },\r\n // { x: 297.841726618705, y: 4.07843137254902, size: 1 },\r\n // { x: 314.028776978417, y: 3.05882352941176, size: 1 },\r\n // { x: 321.798561151079, y: 4.03921568627451, size: 1 },\r\n // { x: 334.748201438849, y: 2.11764705882353, size: 1 },\r\n // { x: 335.395683453237, y: 1.64705882352941, size: 1 },\r\n // { x: 336.043165467626, y: 2.15686274509804, size: 1 },\r\n // { x: 337.338129496403, y: 2.66666666666667, size: 1 },\r\n // { x: 339.928057553957, y: 2.90196078431373, size: 1 },\r\n // { x: 350.935251798561, y: 3.01960784313725, size: 1 },\r\n // { x: 352.230215827338, y: 3.13725490196078, size: 1 },\r\n // { x: 353.525179856115, y: 3.13725490196078, size: 1 },\r\n // { x: 358.057553956835, y: 4.31372549019608, size: 1 },\r\n // { x: 2.58992805755396, y: 3.96078431372549, size: 1 },\r\n // { x: 4.53237410071942, y: 4.23529411764706, size: 1 },\r\n // { x: 9.06474820143885, y: 4, size: 1 },\r\n // { x: 9.71223021582734, y: 4.03921568627451, size: 1 },\r\n // { x: 10.3597122302158, y: 3.88235294117647, size: 1 },\r\n // { x: 11.6546762589928, y: 4.11764705882353, size: 1 },\r\n // { x: 12.9496402877698, y: 4.19607843137255, size: 1 },\r\n // { x: 13.5971223021583, y: 4.11764705882353, size: 1 },\r\n // { x: 14.8920863309353, y: 4.19607843137255, size: 1 },\r\n // { x: 20.0719424460432, y: 4.07843137254902, size: 1 },\r\n // { x: 22.0143884892086, y: 4.11764705882353, size: 1 },\r\n // { x: 29.136690647482, y: 4.19607843137255, size: 1 },\r\n // { x: 36.9064748201439, y: 4, size: 1 },\r\n // { x: 39.4964028776978, y: 2.82352941176471, size: 1 },\r\n // { x: 40.1438848920863, y: 2.82352941176471, size: 1 },\r\n // { x: 61.5107913669065, y: 2.98039215686275, size: 1 },\r\n // { x: 68.6330935251799, y: 4.03921568627451, size: 1 },\r\n // { x: 69.9280575539568, y: 4.11764705882353, size: 1 },\r\n // { x: 74.4604316546763, y: 4.27450980392157, size: 1 },\r\n // { x: 104.244604316547, y: 2.90196078431373, size: 1 },\r\n // { x: 104.892086330935, y: 2.82352941176471, size: 1 },\r\n // { x: 125.611510791367, y: 3.17647058823529, size: 1 },\r\n // { x: 126.258992805755, y: 1.96078431372549, size: 1 },\r\n // { x: 147.625899280576, y: 2.43137254901961, size: 1 },\r\n // { x: 148.273381294964, y: 2.43137254901961, size: 1 },\r\n // { x: 168.992805755396, y: 2.58823529411765, size: 1 },\r\n // { x: 169.640287769784, y: 2.66666666666667, size: 1 },\r\n // { x: 189.712230215827, y: 3.01960784313725, size: 1 },\r\n // { x: 191.007194244604, y: 2.03921568627451, size: 1 },\r\n // { x: 212.374100719424, y: 2.98039215686275, size: 1 },\r\n // { x: 256.402877697842, y: 3.33333333333333, size: 1 },\r\n // { x: 282.302158273381, y: 4, size: 1 },\r\n // { x: 292.014388489209, y: 4.07843137254902, size: 1 },\r\n // { x: 294.604316546763, y: 3.88235294117647, size: 1 },\r\n // { x: 301.079136690647, y: 3.96078431372549, size: 1 },\r\n // { x: 339.280575539568, y: 3.96078431372549, size: 1 },\r\n // { x: 4.53237410071942, y: 2.98039215686275, size: 1 },\r\n // { x: 5.17985611510791, y: 3.01960784313725, size: 1 },\r\n // { x: 46.6187050359712, y: 2.7843137254902, size: 1 },\r\n // { x: 47.2661870503597, y: 2.58823529411765, size: 1 },\r\n // { x: 51.7985611510791, y: 4.03921568627451, size: 1 },\r\n // { x: 119.784172661871, y: 3.96078431372549, size: 1 },\r\n // { x: 134.676258992806, y: 3.96078431372549, size: 1 },\r\n // { x: 145.035971223022, y: 4.27450980392157, size: 1 },\r\n // { x: 158.63309352518, y: 4.03921568627451, size: 1 },\r\n // { x: 219.496402877698, y: 2.82352941176471, size: 1 },\r\n // { x: 220.143884892086, y: 2.82352941176471, size: 1 },\r\n // { x: 306.258992805755, y: 3.2156862745098, size: 1 },\r\n // { x: 348.992805755396, y: 2.90196078431373, size: 1 },\r\n // { x: 349.640287769784, y: 2.94117647058824, size: 1 },\r\n // { x: 1.94594594594595, y: 3.45098039215686, size: 1 },\r\n // { x: 11.6756756756757, y: 2.98039215686275, size: 1 },\r\n // { x: 12.3243243243243, y: 3.01960784313725, size: 1 },\r\n // { x: 19.4594594594595, y: 3.33333333333333, size: 1 },\r\n // { x: 53.1891891891892, y: 3.29411764705882, size: 1 },\r\n // { x: 55.7837837837838, y: 4.03921568627451, size: 1 },\r\n // { x: 57.7297297297297, y: 4, size: 1 },\r\n // { x: 63.5675675675676, y: 3.88235294117647, size: 1 },\r\n // { x: 64.8648648648649, y: 3.92156862745098, size: 1 },\r\n // { x: 68.7567567567568, y: 4, size: 1 },\r\n // { x: 72.6486486486486, y: 4.03921568627451, size: 1 },\r\n // { x: 97.2972972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 100.540540540541, y: 3.41176470588235, size: 1 },\r\n // { x: 131.675675675676, y: 3.88235294117647, size: 1 },\r\n // { x: 138.810810810811, y: 3.88235294117647, size: 1 },\r\n // { x: 149.189189189189, y: 3.88235294117647, size: 1 },\r\n // { x: 167.351351351351, y: 3.41176470588235, size: 1 },\r\n // { x: 182.918918918919, y: 3.2156862745098, size: 1 },\r\n // { x: 183.567567567568, y: 2.90196078431373, size: 1 },\r\n // { x: 203.675675675676, y: 3.84313725490196, size: 1 },\r\n // { x: 210.810810810811, y: 3.33333333333333, size: 1 },\r\n // { x: 249.72972972973, y: 3.17647058823529, size: 1 },\r\n // { x: 270.486486486487, y: 3.2156862745098, size: 1 },\r\n // { x: 271.135135135135, y: 3.01960784313725, size: 1 },\r\n // { x: 271.783783783784, y: 3.01960784313725, size: 1 },\r\n // { x: 275.675675675676, y: 3.80392156862745, size: 1 },\r\n // { x: 302.27027027027, y: 3.88235294117647, size: 1 },\r\n // { x: 302.918918918919, y: 3.2156862745098, size: 1 },\r\n // { x: 313.945945945946, y: 3.13725490196078, size: 1 },\r\n // { x: 356.108108108108, y: 3.33333333333333, size: 1 },\r\n // { x: 16.1870503597122, y: 3.29411764705882, size: 1 },\r\n // { x: 19.4244604316547, y: 2.74509803921569, size: 1 },\r\n // { x: 20.0719424460432, y: 2.74509803921569, size: 1 },\r\n // { x: 60.863309352518, y: 2.7843137254902, size: 1 },\r\n // { x: 61.5107913669065, y: 3.01960784313725, size: 1 },\r\n // { x: 62.8057553956835, y: 3.09803921568627, size: 1 },\r\n // { x: 80.2877697841727, y: 4.03921568627451, size: 1 },\r\n // { x: 104.244604316547, y: 2.94117647058824, size: 1 },\r\n // { x: 105.539568345324, y: 2.86274509803922, size: 1 },\r\n // { x: 106.187050359712, y: 2.98039215686275, size: 1 },\r\n // { x: 126.258992805755, y: 2.94117647058824, size: 1 },\r\n // { x: 184.532374100719, y: 4.07843137254902, size: 1 },\r\n // { x: 199.424460431655, y: 4.07843137254902, size: 1 },\r\n // { x: 220.143884892086, y: 4.03921568627451, size: 1 },\r\n // { x: 233.741007194245, y: 2.94117647058824, size: 1 },\r\n // { x: 234.388489208633, y: 3.09803921568627, size: 1 },\r\n // { x: 235.035971223022, y: 2.66666666666667, size: 1 },\r\n // { x: 255.107913669065, y: 3.25490196078431, size: 1 },\r\n // { x: 277.122302158273, y: 2.62745098039216, size: 1 },\r\n // { x: 4.53237410071942, y: 3.96078431372549, size: 1 },\r\n // { x: 5.17985611510791, y: 4.03921568627451, size: 1 },\r\n // { x: 45.9712230215827, y: 3.92156862745098, size: 1 },\r\n // { x: 101.007194244604, y: 4.07843137254902, size: 1 },\r\n // { x: 112.661870503597, y: 4, size: 1 },\r\n // { x: 133.381294964029, y: 3.01960784313725, size: 1 },\r\n // { x: 260.287769784173, y: 3.05882352941176, size: 1 },\r\n // { x: 262.230215827338, y: 1.92156862745098, size: 1 },\r\n // { x: 262.877697841727, y: 2.03921568627451, size: 1 },\r\n // { x: 305.611510791367, y: 2.62745098039216, size: 1 },\r\n // { x: 327.625899280576, y: 2.66666666666667, size: 1 },\r\n // { x: 348.345323741007, y: 2.66666666666667, size: 1 },\r\n // { x: 348.992805755396, y: 2.11764705882353, size: 1 },\r\n // { x: 1.2972972972973, y: 4, size: 1 },\r\n // { x: 3.89189189189189, y: 4.03921568627451, size: 1 },\r\n // { x: 26.5945945945946, y: 3.92156862745098, size: 1 },\r\n // { x: 31.7837837837838, y: 3.05882352941176, size: 1 },\r\n // { x: 32.4324324324324, y: 3.01960784313725, size: 1 },\r\n // { x: 42.1621621621622, y: 3.84313725490196, size: 1 },\r\n // { x: 53.8378378378378, y: 2.62745098039216, size: 1 },\r\n // { x: 54.4864864864865, y: 3.88235294117647, size: 1 },\r\n // { x: 69.4054054054054, y: 3.96078431372549, size: 1 },\r\n // { x: 73.945945945946, y: 3.17647058823529, size: 1 },\r\n // { x: 74.5945945945946, y: 2.94117647058824, size: 1 },\r\n // { x: 75.2432432432432, y: 2.50980392156863, size: 1 },\r\n // { x: 86.2702702702703, y: 3.80392156862745, size: 1 },\r\n // { x: 95.3513513513514, y: 3.2156862745098, size: 1 },\r\n // { x: 96, y: 3.05882352941176, size: 1 },\r\n // { x: 96.6486486486486, y: 2.43137254901961, size: 1 },\r\n // { x: 97.2972972972973, y: 2.43137254901961, size: 1 },\r\n // { x: 100.540540540541, y: 4, size: 1 },\r\n // { x: 103.783783783784, y: 3.29411764705882, size: 1 },\r\n // { x: 118.054054054054, y: 2.50980392156863, size: 1 },\r\n // { x: 118.702702702703, y: 2.31372549019608, size: 1 },\r\n // { x: 120.648648648649, y: 3.96078431372549, size: 1 },\r\n // { x: 124.540540540541, y: 3.92156862745098, size: 1 },\r\n // { x: 129.72972972973, y: 4, size: 1 },\r\n // { x: 135.567567567568, y: 3.88235294117647, size: 1 },\r\n // { x: 149.189189189189, y: 3.84313725490196, size: 1 },\r\n // { x: 152.432432432432, y: 3.96078431372549, size: 1 },\r\n // { x: 156.324324324324, y: 3.92156862745098, size: 1 },\r\n // { x: 156.972972972973, y: 3.92156862745098, size: 1 },\r\n // { x: 162.162162162162, y: 2.74509803921569, size: 1 },\r\n // { x: 164.108108108108, y: 3.96078431372549, size: 1 },\r\n // { x: 165.405405405405, y: 4.11764705882353, size: 1 },\r\n // { x: 168, y: 4.19607843137255, size: 1 },\r\n // { x: 171.891891891892, y: 3.88235294117647, size: 1 },\r\n // { x: 173.189189189189, y: 3.96078431372549, size: 1 },\r\n // { x: 173.837837837838, y: 4.03921568627451, size: 1 },\r\n // { x: 179.027027027027, y: 4, size: 1 },\r\n // { x: 182.918918918919, y: 2.98039215686275, size: 1 },\r\n // { x: 183.567567567568, y: 3.05882352941176, size: 1 },\r\n // { x: 186.162162162162, y: 4, size: 1 },\r\n // { x: 232.864864864865, y: 4.03921568627451, size: 1 },\r\n // { x: 249.72972972973, y: 4.03921568627451, size: 1 },\r\n // { x: 250.378378378378, y: 4.07843137254902, size: 1 },\r\n // { x: 252.324324324324, y: 3.88235294117647, size: 1 },\r\n // { x: 252.972972972973, y: 3.92156862745098, size: 1 },\r\n // { x: 253.621621621622, y: 4.11764705882353, size: 1 },\r\n // { x: 254.918918918919, y: 3.88235294117647, size: 1 },\r\n // { x: 261.405405405405, y: 4.03921568627451, size: 1 },\r\n // { x: 265.945945945946, y: 4, size: 1 },\r\n // { x: 270.486486486487, y: 3.33333333333333, size: 1 },\r\n // { x: 286.054054054054, y: 4.03921568627451, size: 1 },\r\n // { x: 294.486486486487, y: 3.25490196078431, size: 1 },\r\n // { x: 304.864864864865, y: 3.25490196078431, size: 1 },\r\n // { x: 314.594594594595, y: 3.09803921568627, size: 1 },\r\n // { x: 329.513513513513, y: 3.41176470588235, size: 1 },\r\n // { x: 334.702702702703, y: 3.13725490196078, size: 1 },\r\n // { x: 336.648648648649, y: 3.25490196078431, size: 1 },\r\n // { x: 339.891891891892, y: 3.92156862745098, size: 1 },\r\n // { x: 51.7985611510791, y: 3.96078431372549, size: 1 },\r\n // { x: 60.863309352518, y: 2.98039215686275, size: 1 },\r\n // { x: 62.8057553956835, y: 3.13725490196078, size: 1 },\r\n // { x: 66.6906474820144, y: 3.17647058823529, size: 1 },\r\n // { x: 74.4604316546763, y: 3.17647058823529, size: 1 },\r\n // { x: 77.6978417266187, y: 3.13725490196078, size: 1 },\r\n // { x: 88.705035971223, y: 4.27450980392157, size: 1 },\r\n // { x: 99.0647482014388, y: 4.23529411764706, size: 1 },\r\n // { x: 126.906474820144, y: 2.98039215686275, size: 1 },\r\n // { x: 127.553956834532, y: 3.09803921568627, size: 1 },\r\n // { x: 147.625899280576, y: 3.13725490196078, size: 1 },\r\n // { x: 155.395683453237, y: 3.2156862745098, size: 1 },\r\n // { x: 170.287769784173, y: 3.05882352941176, size: 1 },\r\n // { x: 170.935251798561, y: 2.98039215686275, size: 1 },\r\n // { x: 177.410071942446, y: 3.2156862745098, size: 1 },\r\n // { x: 179.352517985612, y: 3.25490196078431, size: 1 },\r\n // { x: 180, y: 3.25490196078431, size: 1 },\r\n // { x: 180.647482014388, y: 3.17647058823529, size: 1 },\r\n // { x: 181.294964028777, y: 3.05882352941176, size: 1 },\r\n // { x: 191.007194244604, y: 2.66666666666667, size: 1 },\r\n // { x: 191.654676258993, y: 2.7843137254902, size: 1 },\r\n // { x: 193.597122302158, y: 3.13725490196078, size: 1 },\r\n // { x: 242.158273381295, y: 3.2156862745098, size: 1 },\r\n // { x: 244.10071942446, y: 3.17647058823529, size: 1 },\r\n // { x: 246.043165467626, y: 3.09803921568627, size: 1 },\r\n // { x: 247.338129496403, y: 3.17647058823529, size: 1 },\r\n // { x: 276.474820143885, y: 2.90196078431373, size: 1 },\r\n // { x: 277.122302158273, y: 2.94117647058824, size: 1 },\r\n // { x: 317.913669064748, y: 4.03921568627451, size: 1 },\r\n // { x: 331.510791366906, y: 3.09803921568627, size: 1 },\r\n // { x: 14.8920863309353, y: 3.2156862745098, size: 1 },\r\n // { x: 25.8992805755396, y: 2.94117647058824, size: 1 },\r\n // { x: 26.5467625899281, y: 3.01960784313725, size: 1 },\r\n // { x: 67.9856115107914, y: 2.7843137254902, size: 1 },\r\n // { x: 69.2805755395683, y: 2.82352941176471, size: 1 },\r\n // { x: 88.705035971223, y: 3.25490196078431, size: 1 },\r\n // { x: 89.3525179856115, y: 3.09803921568627, size: 1 },\r\n // { x: 90, y: 2.66666666666667, size: 1 },\r\n // { x: 91.294964028777, y: 2.62745098039216, size: 1 },\r\n // { x: 101.007194244604, y: 3.2156862745098, size: 1 },\r\n // { x: 102.94964028777, y: 3.17647058823529, size: 1 },\r\n // { x: 107.482014388489, y: 3.25490196078431, size: 1 },\r\n // { x: 110.071942446043, y: 4.15686274509804, size: 1 },\r\n // { x: 146.330935251799, y: 3.13725490196078, size: 1 },\r\n // { x: 165.107913669065, y: 3.25490196078431, size: 1 },\r\n // { x: 170.935251798561, y: 3.2156862745098, size: 1 },\r\n // { x: 326.978417266187, y: 3.05882352941176, size: 1 },\r\n // { x: 337.338129496403, y: 4.07843137254902, size: 1 },\r\n // { x: 75.1079136690647, y: 3.01960784313725, size: 1 },\r\n // { x: 101.007194244604, y: 4.15686274509804, size: 1 },\r\n // { x: 109.424460431655, y: 4.07843137254902, size: 1 },\r\n // { x: 146.978417266187, y: 4.23529411764706, size: 1 },\r\n // { x: 147.625899280576, y: 4.23529411764706, size: 1 },\r\n // { x: 153.453237410072, y: 4.03921568627451, size: 1 },\r\n // { x: 156.690647482014, y: 4.23529411764706, size: 1 },\r\n // { x: 231.798561151079, y: 4.03921568627451, size: 1 },\r\n // { x: 268.705035971223, y: 2.98039215686275, size: 1 },\r\n // { x: 291.36690647482, y: 3.2156862745098, size: 1 },\r\n // { x: 319.856115107914, y: 4.07843137254902, size: 1 },\r\n // { x: 17.5135135135135, y: 3.29411764705882, size: 1 },\r\n // { x: 49.9459459459459, y: 3.88235294117647, size: 1 },\r\n // { x: 51.8918918918919, y: 4, size: 1 },\r\n // { x: 62.9189189189189, y: 3.25490196078431, size: 1 },\r\n // { x: 90.8108108108108, y: 4.07843137254902, size: 1 },\r\n // { x: 103.783783783784, y: 2.94117647058824, size: 1 },\r\n // { x: 126.486486486486, y: 3.13725490196078, size: 1 },\r\n // { x: 134.918918918919, y: 3.88235294117647, size: 1 },\r\n // { x: 186.810810810811, y: 3.84313725490196, size: 1 },\r\n // { x: 188.108108108108, y: 3.01960784313725, size: 1 },\r\n // { x: 188.756756756757, y: 3.13725490196078, size: 1 },\r\n // { x: 190.054054054054, y: 1.64705882352941, size: 1 },\r\n // { x: 190.702702702703, y: 2.03921568627451, size: 1 },\r\n // { x: 191.351351351351, y: 1.72549019607843, size: 1 },\r\n // { x: 192, y: 1.49019607843137, size: 1 },\r\n // { x: 193.297297297297, y: 3.29411764705882, size: 1 },\r\n // { x: 194.594594594595, y: 2.7843137254902, size: 1 },\r\n // { x: 195.243243243243, y: 3.09803921568627, size: 1 },\r\n // { x: 199.135135135135, y: 2.90196078431373, size: 1 },\r\n // { x: 199.783783783784, y: 2.98039215686275, size: 1 },\r\n // { x: 205.621621621622, y: 2.7843137254902, size: 1 },\r\n // { x: 206.27027027027, y: 3.17647058823529, size: 1 },\r\n // { x: 207.567567567568, y: 3.25490196078431, size: 1 },\r\n // { x: 208.216216216216, y: 3.25490196078431, size: 1 },\r\n // { x: 210.810810810811, y: 3.41176470588235, size: 1 },\r\n // { x: 212.756756756757, y: 2.74509803921569, size: 1 },\r\n // { x: 220.540540540541, y: 3.96078431372549, size: 1 },\r\n // { x: 228.972972972973, y: 4.11764705882353, size: 1 },\r\n // { x: 232.864864864865, y: 2.94117647058824, size: 1 },\r\n // { x: 233.513513513514, y: 2.50980392156863, size: 1 },\r\n // { x: 244.540540540541, y: 4, size: 1 },\r\n // { x: 247.783783783784, y: 4.03921568627451, size: 1 },\r\n // { x: 248.432432432432, y: 4, size: 1 },\r\n // { x: 253.621621621622, y: 3.17647058823529, size: 1 },\r\n // { x: 254.27027027027, y: 3.2156862745098, size: 1 },\r\n // { x: 254.918918918919, y: 2.86274509803922, size: 1 },\r\n // { x: 257.513513513513, y: 4.11764705882353, size: 1 },\r\n // { x: 258.162162162162, y: 3.45098039215686, size: 1 },\r\n // { x: 265.945945945946, y: 3.41176470588235, size: 1 },\r\n // { x: 276.324324324324, y: 2.62745098039216, size: 1 },\r\n // { x: 276.972972972973, y: 2.66666666666667, size: 1 },\r\n // { x: 289.945945945946, y: 3.37254901960784, size: 1 },\r\n // { x: 300.972972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 301.621621621622, y: 3.29411764705882, size: 1 },\r\n // { x: 309.405405405405, y: 3.37254901960784, size: 1 },\r\n // { x: 315.243243243243, y: 3.17647058823529, size: 1 },\r\n // { x: 318.486486486487, y: 3.01960784313725, size: 1 },\r\n // { x: 319.135135135135, y: 2.94117647058824, size: 1 },\r\n // { x: 319.783783783784, y: 2.62745098039216, size: 1 },\r\n // { x: 332.108108108108, y: 4.07843137254902, size: 1 },\r\n // { x: 332.756756756757, y: 3.88235294117647, size: 1 },\r\n // { x: 339.243243243243, y: 3.29411764705882, size: 1 },\r\n // { x: 340.540540540541, y: 3.09803921568627, size: 1 },\r\n // { x: 341.189189189189, y: 2.62745098039216, size: 1 },\r\n // { x: 341.837837837838, y: 2.43137254901961, size: 1 },\r\n // { x: 343.783783783784, y: 3.25490196078431, size: 1 },\r\n // { x: 347.675675675676, y: 3.33333333333333, size: 1 },\r\n // { x: 348.972972972973, y: 3.2156862745098, size: 1 },\r\n // { x: 359.351351351351, y: 3.2156862745098, size: 1 },\r\n // { x: 0.647482014388489, y: 3.2156862745098, size: 1 },\r\n // { x: 2.58992805755396, y: 2.50980392156863, size: 1 },\r\n // { x: 3.23741007194245, y: 2.58823529411765, size: 1 },\r\n // { x: 23.9568345323741, y: 3.13725490196078, size: 1 },\r\n // { x: 24.6043165467626, y: 2.74509803921569, size: 1 },\r\n // { x: 46.6187050359712, y: 2.47058823529412, size: 1 },\r\n // { x: 49.2086330935252, y: 3.2156862745098, size: 1 },\r\n // { x: 60.2158273381295, y: 3.13725490196078, size: 1 },\r\n // { x: 63.4532374100719, y: 3.13725490196078, size: 1 },\r\n // { x: 67.9856115107914, y: 2.58823529411765, size: 1 },\r\n // { x: 209.136690647482, y: 3.88235294117647, size: 1 },\r\n // { x: 220.143884892086, y: 3.09803921568627, size: 1 },\r\n // { x: 240.215827338129, y: 2.66666666666667, size: 1 },\r\n // { x: 240.863309352518, y: 2.98039215686275, size: 1 },\r\n // { x: 241.510791366906, y: 2.7843137254902, size: 1 },\r\n // { x: 242.158273381295, y: 2.98039215686275, size: 1 },\r\n // { x: 279.064748201439, y: 3.96078431372549, size: 1 },\r\n // { x: 305.611510791367, y: 3.01960784313725, size: 1 },\r\n // { x: 326.330935251799, y: 2.50980392156863, size: 1 },\r\n // { x: 326.978417266187, y: 2.35294117647059, size: 1 },\r\n // { x: 327.625899280576, y: 2.50980392156863, size: 1 },\r\n // { x: 337.985611510791, y: 3.17647058823529, size: 1 },\r\n // { x: 141.151079136691, y: 3.05882352941176, size: 1 },\r\n // { x: 180.647482014388, y: 3.25490196078431, size: 1 },\r\n // { x: 182.589928057554, y: 3.09803921568627, size: 1 },\r\n // { x: 183.237410071942, y: 2.98039215686275, size: 1 },\r\n // { x: 184.532374100719, y: 3.09803921568627, size: 1 },\r\n // { x: 200.071942446043, y: 4.23529411764706, size: 1 },\r\n // { x: 204.604316546763, y: 2.90196078431373, size: 1 },\r\n // { x: 229.208633093525, y: 4.07843137254902, size: 1 },\r\n // { x: 261.58273381295, y: 3.25490196078431, size: 1 },\r\n // { x: 312.086330935252, y: 2.54901960784314, size: 1 },\r\n // { x: 312.73381294964, y: 2.54901960784314, size: 1 },\r\n // { x: 313.381294964029, y: 2.62745098039216, size: 1 },\r\n // { x: 314.028776978417, y: 2.54901960784314, size: 1 },\r\n // { x: 328.920863309353, y: 4.19607843137255, size: 1 },\r\n // { x: 332.805755395683, y: 3.33333333333333, size: 1 },\r\n // { x: 354.820143884892, y: 2.82352941176471, size: 1 },\r\n // { x: 56.3309352517986, y: 3.13725490196078, size: 1 },\r\n // { x: 59.568345323741, y: 3.01960784313725, size: 1 },\r\n // { x: 85.4676258992806, y: 4, size: 1 },\r\n // { x: 100.359712230216, y: 4, size: 1 },\r\n // { x: 124.31654676259, y: 2.86274509803922, size: 1 },\r\n // { x: 126.258992805755, y: 2.66666666666667, size: 1 },\r\n // { x: 126.906474820144, y: 3.05882352941176, size: 1 },\r\n // { x: 168.345323741007, y: 2.98039215686275, size: 1 },\r\n // { x: 182.589928057554, y: 4.15686274509804, size: 1 },\r\n // { x: 189.064748201439, y: 2.43137254901961, size: 1 },\r\n // { x: 189.712230215827, y: 2.43137254901961, size: 1 },\r\n // { x: 227.26618705036, y: 4.03921568627451, size: 1 },\r\n // { x: 232.446043165468, y: 3.09803921568627, size: 1 },\r\n // { x: 254.460431654676, y: 3.01960784313725, size: 1 },\r\n // { x: 319.208633093525, y: 2.86274509803922, size: 1 },\r\n // { x: 340.575539568345, y: 3.2156862745098, size: 1 },\r\n // { x: 23.3513513513514, y: 2.98039215686275, size: 1 },\r\n // { x: 24, y: 2.98039215686275, size: 1 },\r\n // { x: 24.6486486486486, y: 3.13725490196078, size: 1 },\r\n // { x: 25.9459459459459, y: 3.33333333333333, size: 1 },\r\n // { x: 36.972972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 49.2972972972973, y: 3.96078431372549, size: 1 },\r\n // { x: 59.027027027027, y: 3.88235294117647, size: 1 },\r\n // { x: 66.1621621621622, y: 3.17647058823529, size: 1 },\r\n // { x: 66.8108108108108, y: 3.29411764705882, size: 1 },\r\n // { x: 84.3243243243243, y: 3.92156862745098, size: 1 },\r\n // { x: 88.2162162162162, y: 3.41176470588235, size: 1 },\r\n // { x: 88.8648648648649, y: 3.25490196078431, size: 1 },\r\n // { x: 97.2972972972973, y: 3.80392156862745, size: 1 },\r\n // { x: 109.621621621622, y: 3.17647058823529, size: 1 },\r\n // { x: 110.27027027027, y: 3.01960784313725, size: 1 },\r\n // { x: 129.72972972973, y: 3.33333333333333, size: 1 },\r\n // { x: 131.675675675676, y: 3.05882352941176, size: 1 },\r\n // { x: 132.324324324324, y: 3.13725490196078, size: 1 },\r\n // { x: 142.702702702703, y: 3.33333333333333, size: 1 },\r\n // { x: 151.783783783784, y: 3.33333333333333, size: 1 },\r\n // { x: 156.972972972973, y: 3.96078431372549, size: 1 },\r\n // { x: 177.72972972973, y: 3.33333333333333, size: 1 },\r\n // { x: 181.621621621622, y: 3.29411764705882, size: 1 },\r\n // { x: 186.162162162162, y: 3.13725490196078, size: 1 },\r\n // { x: 192.648648648649, y: 3.09803921568627, size: 1 },\r\n // { x: 196.540540540541, y: 3.2156862745098, size: 1 },\r\n // { x: 197.189189189189, y: 3.05882352941176, size: 1 },\r\n // { x: 245.837837837838, y: 3.80392156862745, size: 1 },\r\n // { x: 256.864864864865, y: 3.96078431372549, size: 1 },\r\n // { x: 260.756756756757, y: 3.29411764705882, size: 1 },\r\n // { x: 261.405405405405, y: 2.90196078431373, size: 1 },\r\n // { x: 262.054054054054, y: 3.01960784313725, size: 1 },\r\n // { x: 268.540540540541, y: 4.07843137254902, size: 1 },\r\n // { x: 272.432432432432, y: 4, size: 1 },\r\n // { x: 299.027027027027, y: 3.92156862745098, size: 1 },\r\n // { x: 303.567567567568, y: 3.2156862745098, size: 1 },\r\n // { x: 304.216216216216, y: 3.13725490196078, size: 1 },\r\n // { x: 304.864864864865, y: 2.70588235294118, size: 1 },\r\n // { x: 305.513513513513, y: 3.01960784313725, size: 1 },\r\n // { x: 307.459459459459, y: 3.29411764705882, size: 1 },\r\n // { x: 308.108108108108, y: 3.2156862745098, size: 1 },\r\n // { x: 310.702702702703, y: 3.29411764705882, size: 1 },\r\n // { x: 324.972972972973, y: 3.09803921568627, size: 1 },\r\n // { x: 326.27027027027, y: 2.94117647058824, size: 1 },\r\n // { x: 326.918918918919, y: 2.98039215686275, size: 1 },\r\n // { x: 346.378378378378, y: 3.05882352941176, size: 1 },\r\n // { x: 347.027027027027, y: 3.13725490196078, size: 1 },\r\n // { x: 347.675675675676, y: 2.43137254901961, size: 1 },\r\n // { x: 348.324324324324, y: 2.54901960784314, size: 1 },\r\n // { x: 9.71223021582734, y: 3.13725490196078, size: 1 },\r\n // { x: 31.0791366906475, y: 3.01960784313725, size: 1 },\r\n // { x: 31.726618705036, y: 2.98039215686275, size: 1 },\r\n // { x: 53.0935251798561, y: 2.90196078431373, size: 1 },\r\n // { x: 74.4604316546763, y: 2.82352941176471, size: 1 },\r\n // { x: 96.4748201438849, y: 3.09803921568627, size: 1 },\r\n // { x: 115.89928057554, y: 3.17647058823529, size: 1 },\r\n // { x: 117.194244604317, y: 2.43137254901961, size: 1 },\r\n // { x: 117.841726618705, y: 2.19607843137255, size: 1 },\r\n // { x: 119.784172661871, y: 3.25490196078431, size: 1 },\r\n // { x: 139.208633093525, y: 2.62745098039216, size: 1 },\r\n // { x: 160.575539568345, y: 2.43137254901961, size: 1 },\r\n // { x: 161.223021582734, y: 2.66666666666667, size: 1 },\r\n // { x: 181.942446043165, y: 2.74509803921569, size: 1 },\r\n // { x: 182.589928057554, y: 2.50980392156863, size: 1 },\r\n // { x: 203.309352517986, y: 3.09803921568627, size: 1 },\r\n // { x: 203.956834532374, y: 2.11764705882353, size: 1 },\r\n // { x: 242.805755395683, y: 4, size: 1 },\r\n // { x: 267.410071942446, y: 3.2156862745098, size: 1 },\r\n // { x: 268.057553956835, y: 2.82352941176471, size: 1 },\r\n // { x: 268.705035971223, y: 2.15686274509804, size: 1 },\r\n // { x: 333.453237410072, y: 2.66666666666667, size: 1 },\r\n // { x: 335.395683453237, y: 3.29411764705882, size: 1 },\r\n // { x: 354.820143884892, y: 2.7843137254902, size: 1 },\r\n // { x: 37.5539568345324, y: 3.01960784313725, size: 1 },\r\n // { x: 38.2014388489209, y: 1.92156862745098, size: 1 },\r\n // { x: 126.906474820144, y: 4.03921568627451, size: 1 },\r\n // { x: 128.201438848921, y: 4.11764705882353, size: 1 },\r\n // { x: 168.992805755396, y: 3.01960784313725, size: 1 },\r\n // { x: 169.640287769784, y: 3.09803921568627, size: 1 },\r\n // { x: 211.079136690647, y: 2.3921568627451, size: 1 },\r\n // { x: 211.726618705036, y: 2.47058823529412, size: 1 },\r\n // { x: 212.374100719424, y: 1.96078431372549, size: 1 },\r\n // { x: 232.446043165468, y: 2.90196078431373, size: 1 },\r\n // { x: 314.028776978417, y: 4.03921568627451, size: 1 },\r\n // { x: 88.705035971223, y: 2.70588235294118, size: 1 },\r\n // { x: 89.3525179856115, y: 2.94117647058824, size: 1 },\r\n // { x: 101.654676258993, y: 4.03921568627451, size: 1 },\r\n // { x: 129.496402877698, y: 3.13725490196078, size: 1 },\r\n // { x: 131.438848920863, y: 2.19607843137255, size: 1 },\r\n // { x: 132.73381294964, y: 2.90196078431373, size: 1 },\r\n // { x: 133.381294964029, y: 2.62745098039216, size: 1 },\r\n // { x: 143.093525179856, y: 3.17647058823529, size: 1 },\r\n // { x: 144.388489208633, y: 3.17647058823529, size: 1 },\r\n // { x: 187.122302158273, y: 4.03921568627451, size: 1 },\r\n // { x: 196.187050359712, y: 3.01960784313725, size: 1 },\r\n // { x: 198.129496402878, y: 3.96078431372549, size: 1 },\r\n // { x: 203.956834532374, y: 4.07843137254902, size: 1 },\r\n // { x: 233.741007194245, y: 4, size: 1 },\r\n // { x: 260.935251798561, y: 2.82352941176471, size: 1 },\r\n // { x: 261.58273381295, y: 2.74509803921569, size: 1 },\r\n // { x: 262.877697841727, y: 2.70588235294118, size: 1 },\r\n // { x: 273.884892086331, y: 4.15686274509804, size: 1 },\r\n // { x: 275.827338129496, y: 4.15686274509804, size: 1 },\r\n // { x: 282.94964028777, y: 2.82352941176471, size: 1 },\r\n // { x: 283.597122302158, y: 3.33333333333333, size: 1 },\r\n // { x: 342.517985611511, y: 3.92156862745098, size: 1 },\r\n // { x: 8.43243243243243, y: 3.13725490196078, size: 1 },\r\n // { x: 9.72972972972973, y: 3.2156862745098, size: 1 },\r\n // { x: 10.3783783783784, y: 2.90196078431373, size: 1 },\r\n // { x: 16.8648648648649, y: 3.88235294117647, size: 1 },\r\n // { x: 18.1621621621622, y: 3.88235294117647, size: 1 },\r\n // { x: 23.3513513513514, y: 3.92156862745098, size: 1 },\r\n // { x: 24, y: 4.11764705882353, size: 1 },\r\n // { x: 26.5945945945946, y: 3.88235294117647, size: 1 },\r\n // { x: 29.1891891891892, y: 3.33333333333333, size: 1 },\r\n // { x: 53.8378378378378, y: 3.33333333333333, size: 1 },\r\n // { x: 64.8648648648649, y: 3.29411764705882, size: 1 },\r\n // { x: 65.5135135135135, y: 3.25490196078431, size: 1 },\r\n // { x: 66.1621621621622, y: 3.25490196078431, size: 1 },\r\n // { x: 90.8108108108108, y: 3.37254901960784, size: 1 },\r\n // { x: 97.2972972972973, y: 3.92156862745098, size: 1 },\r\n // { x: 115.459459459459, y: 3.33333333333333, size: 1 },\r\n // { x: 116.756756756757, y: 3.13725490196078, size: 1 },\r\n // { x: 120, y: 4.03921568627451, size: 1 },\r\n // { x: 123.243243243243, y: 3.92156862745098, size: 1 },\r\n // { x: 123.891891891892, y: 4.03921568627451, size: 1 },\r\n // { x: 127.135135135135, y: 3.96078431372549, size: 1 },\r\n // { x: 135.567567567568, y: 4.03921568627451, size: 1 },\r\n // { x: 136.864864864865, y: 3.2156862745098, size: 1 },\r\n // { x: 138.162162162162, y: 2.7843137254902, size: 1 },\r\n // { x: 138.810810810811, y: 2.70588235294118, size: 1 },\r\n // { x: 139.459459459459, y: 3.09803921568627, size: 1 },\r\n // { x: 140.108108108108, y: 2.98039215686275, size: 1 },\r\n // { x: 162.162162162162, y: 3.45098039215686, size: 1 },\r\n // { x: 187.459459459459, y: 4, size: 1 },\r\n // { x: 188.756756756757, y: 3.96078431372549, size: 1 },\r\n // { x: 191.351351351351, y: 4.27450980392157, size: 1 },\r\n // { x: 203.027027027027, y: 2.86274509803922, size: 1 },\r\n // { x: 203.675675675676, y: 2.82352941176471, size: 1 },\r\n // { x: 204.324324324324, y: 3.29411764705882, size: 1 },\r\n // { x: 245.837837837838, y: 3.96078431372549, size: 1 },\r\n // { x: 247.783783783784, y: 3.33333333333333, size: 1 },\r\n // { x: 249.72972972973, y: 3.33333333333333, size: 1 },\r\n // { x: 258.162162162162, y: 3.25490196078431, size: 1 },\r\n // { x: 259.459459459459, y: 3.29411764705882, size: 1 },\r\n // { x: 261.405405405405, y: 3.25490196078431, size: 1 },\r\n // { x: 263.351351351351, y: 3.29411764705882, size: 1 },\r\n // { x: 264, y: 3.2156862745098, size: 1 },\r\n // { x: 271.783783783784, y: 3.84313725490196, size: 1 },\r\n // { x: 272.432432432432, y: 3.92156862745098, size: 1 },\r\n // { x: 273.72972972973, y: 3.96078431372549, size: 1 },\r\n // { x: 284.108108108108, y: 4, size: 1 },\r\n // { x: 288, y: 3.13725490196078, size: 1 },\r\n // { x: 288.648648648649, y: 3.2156862745098, size: 1 },\r\n // { x: 289.945945945946, y: 2.3921568627451, size: 1 },\r\n // { x: 290.594594594595, y: 2.7843137254902, size: 1 },\r\n // { x: 291.243243243243, y: 2.74509803921569, size: 1 },\r\n // { x: 291.891891891892, y: 2.66666666666667, size: 1 },\r\n // { x: 312, y: 3.09803921568627, size: 1 },\r\n // { x: 332.756756756757, y: 2.90196078431373, size: 1 },\r\n // { x: 333.405405405405, y: 3.13725490196078, size: 1 },\r\n // { x: 334.054054054054, y: 3.05882352941176, size: 1 },\r\n // { x: 345.081081081081, y: 3.37254901960784, size: 1 },\r\n // { x: 345.72972972973, y: 3.33333333333333, size: 1 },\r\n // { x: 350.918918918919, y: 4.03921568627451, size: 1 },\r\n // { x: 1.94244604316547, y: 3.96078431372549, size: 1 },\r\n // { x: 5.8273381294964, y: 4.07843137254902, size: 1 },\r\n // { x: 37.5539568345324, y: 2.94117647058824, size: 1 },\r\n // { x: 40.1438848920863, y: 3.09803921568627, size: 1 },\r\n // { x: 91.294964028777, y: 4.19607843137255, size: 1 },\r\n // { x: 97.7697841726619, y: 4.07843137254902, size: 1 },\r\n // { x: 99.7122302158273, y: 4, size: 1 },\r\n // { x: 100.359712230216, y: 3.96078431372549, size: 1 },\r\n // { x: 102.302158273381, y: 3.13725490196078, size: 1 },\r\n // { x: 104.892086330935, y: 4, size: 1 },\r\n // { x: 107.482014388489, y: 4.11764705882353, size: 1 },\r\n // { x: 115.251798561151, y: 4.23529411764706, size: 1 },\r\n // { x: 124.31654676259, y: 3.13725490196078, size: 1 },\r\n // { x: 124.964028776978, y: 3.01960784313725, size: 1 },\r\n // { x: 125.611510791367, y: 2.66666666666667, size: 1 },\r\n // { x: 189.712230215827, y: 2.54901960784314, size: 1 },\r\n // { x: 190.359712230216, y: 2.47058823529412, size: 1 },\r\n // { x: 191.007194244604, y: 2.47058823529412, size: 1 },\r\n // { x: 253.812949640288, y: 2.98039215686275, size: 1 },\r\n // { x: 254.460431654676, y: 2.82352941176471, size: 1 },\r\n // { x: 255.107913669065, y: 2.90196078431373, size: 1 },\r\n // { x: 255.755395683453, y: 2.7843137254902, size: 1 },\r\n // { x: 260.287769784173, y: 4, size: 1 },\r\n // { x: 275.179856115108, y: 2.86274509803922, size: 1 },\r\n // { x: 296.546762589928, y: 3.09803921568627, size: 1 },\r\n // { x: 297.194244604317, y: 2.82352941176471, size: 1 },\r\n // { x: 325.035971223022, y: 3.96078431372549, size: 1 },\r\n // { x: 349.640287769784, y: 4.11764705882353, size: 1 },\r\n // { x: 44.6762589928058, y: 2.43137254901961, size: 1 },\r\n // { x: 45.9712230215827, y: 2.82352941176471, size: 1 },\r\n // { x: 53.7410071942446, y: 2.86274509803922, size: 1 },\r\n // { x: 54.3884892086331, y: 2.82352941176471, size: 1 },\r\n // { x: 60.2158273381295, y: 2.7843137254902, size: 1 },\r\n // { x: 60.863309352518, y: 2.90196078431373, size: 1 },\r\n // { x: 66.0431654676259, y: 3.05882352941176, size: 1 },\r\n // { x: 87.410071942446, y: 3.25490196078431, size: 1 },\r\n // { x: 88.705035971223, y: 3.05882352941176, size: 1 },\r\n // { x: 109.424460431655, y: 3.25490196078431, size: 1 },\r\n // { x: 174.172661870504, y: 2.98039215686275, size: 1 },\r\n // { x: 174.820143884892, y: 2.66666666666667, size: 1 },\r\n // { x: 196.187050359712, y: 2.47058823529412, size: 1 },\r\n // { x: 200.071942446043, y: 4.11764705882353, size: 1 },\r\n // { x: 213.669064748201, y: 4, size: 1 },\r\n // { x: 238.920863309353, y: 2.94117647058824, size: 1 },\r\n // { x: 246.690647482014, y: 3.25490196078431, size: 1 },\r\n // { x: 260.287769784173, y: 2.90196078431373, size: 1 },\r\n // { x: 303.669064748201, y: 2.23529411764706, size: 1 },\r\n // { x: 304.31654676259, y: 2.15686274509804, size: 1 },\r\n // { x: 16.8648648648649, y: 3.17647058823529, size: 1 },\r\n // { x: 24.6486486486486, y: 3.33333333333333, size: 1 },\r\n // { x: 25.2972972972973, y: 3.33333333333333, size: 1 },\r\n // { x: 31.7837837837838, y: 3.37254901960784, size: 1 },\r\n // { x: 37.6216216216216, y: 3.84313725490196, size: 1 },\r\n // { x: 39.5675675675676, y: 3.96078431372549, size: 1 },\r\n // { x: 41.5135135135135, y: 3.88235294117647, size: 1 },\r\n // { x: 43.4594594594595, y: 4.03921568627451, size: 1 },\r\n // { x: 59.6756756756757, y: 3.84313725490196, size: 1 },\r\n // { x: 68.1081081081081, y: 4, size: 1 },\r\n // { x: 73.2972972972973, y: 2.66666666666667, size: 1 },\r\n // { x: 74.5945945945946, y: 2.62745098039216, size: 1 },\r\n // { x: 75.2432432432432, y: 2.43137254901961, size: 1 },\r\n // { x: 94.7027027027027, y: 3.2156862745098, size: 1 },\r\n // { x: 95.3513513513514, y: 3.25490196078431, size: 1 },\r\n // { x: 96, y: 2.90196078431373, size: 1 },\r\n // { x: 96.6486486486486, y: 3.05882352941176, size: 1 },\r\n // { x: 110.918918918919, y: 3.88235294117647, size: 1 },\r\n // { x: 138.162162162162, y: 3.2156862745098, size: 1 },\r\n // { x: 139.459459459459, y: 3.17647058823529, size: 1 },\r\n // { x: 158.27027027027, y: 3.2156862745098, size: 1 },\r\n // { x: 159.567567567568, y: 2.7843137254902, size: 1 },\r\n // { x: 160.216216216216, y: 2.58823529411765, size: 1 },\r\n // { x: 160.864864864865, y: 2.74509803921569, size: 1 },\r\n // { x: 180.972972972973, y: 3.05882352941176, size: 1 },\r\n // { x: 181.621621621622, y: 3.01960784313725, size: 1 },\r\n // { x: 182.27027027027, y: 2.98039215686275, size: 1 },\r\n // { x: 182.918918918919, y: 2.86274509803922, size: 1 },\r\n // { x: 183.567567567568, y: 2.94117647058824, size: 1 },\r\n // { x: 222.486486486486, y: 3.33333333333333, size: 1 },\r\n // { x: 224.432432432432, y: 3.17647058823529, size: 1 },\r\n // { x: 225.081081081081, y: 3.13725490196078, size: 1 },\r\n // { x: 226.378378378378, y: 3.17647058823529, size: 1 },\r\n // { x: 238.054054054054, y: 4.07843137254902, size: 1 },\r\n // { x: 240, y: 4.19607843137255, size: 1 },\r\n // { x: 243.243243243243, y: 3.96078431372549, size: 1 },\r\n // { x: 272.432432432432, y: 3.96078431372549, size: 1 },\r\n // { x: 289.297297297297, y: 3.13725490196078, size: 1 },\r\n // { x: 291.243243243243, y: 3.09803921568627, size: 1 },\r\n // { x: 312.648648648649, y: 2.94117647058824, size: 1 },\r\n // { x: 313.297297297297, y: 2.90196078431373, size: 1 },\r\n // { x: 347.027027027027, y: 4.03921568627451, size: 1 },\r\n // { x: 355.459459459459, y: 3.33333333333333, size: 1 },\r\n // { x: 356.108108108108, y: 3.09803921568627, size: 1 },\r\n // { x: 16.8345323741007, y: 2.98039215686275, size: 1 },\r\n // { x: 18.1294964028777, y: 2.7843137254902, size: 1 },\r\n // { x: 37.5539568345324, y: 3.2156862745098, size: 1 },\r\n // { x: 58.9208633093525, y: 2.86274509803922, size: 1 },\r\n // { x: 61.5107913669065, y: 3.05882352941176, size: 1 },\r\n // { x: 80.2877697841727, y: 2.98039215686275, size: 1 },\r\n // { x: 80.9352517985612, y: 3.09803921568627, size: 1 },\r\n // { x: 81.5827338129496, y: 2.98039215686275, size: 1 },\r\n // { x: 82.8776978417266, y: 2.66666666666667, size: 1 },\r\n // { x: 147.625899280576, y: 2.98039215686275, size: 1 },\r\n // { x: 188.41726618705, y: 3.05882352941176, size: 1 },\r\n // { x: 259.640287769784, y: 4.11764705882353, size: 1 },\r\n // { x: 277.122302158273, y: 2.98039215686275, size: 1 },\r\n // { x: 297.194244604317, y: 3.13725490196078, size: 1 },\r\n // { x: 325.035971223022, y: 4.15686274509804, size: 1 },\r\n // { x: 23.9568345323741, y: 3.05882352941176, size: 1 },\r\n // { x: 46.6187050359712, y: 3.29411764705882, size: 1 },\r\n // { x: 63.4532374100719, y: 3.96078431372549, size: 1 },\r\n // { x: 87.410071942446, y: 3.01960784313725, size: 1 },\r\n // { x: 88.0575539568345, y: 3.13725490196078, size: 1 },\r\n // { x: 93.8848920863309, y: 3.96078431372549, size: 1 },\r\n // { x: 106.834532374101, y: 4.15686274509804, size: 1 },\r\n // { x: 108.776978417266, y: 4, size: 1 },\r\n // { x: 116.546762589928, y: 4.19607843137255, size: 1 },\r\n // { x: 130.791366906475, y: 2.62745098039216, size: 1 },\r\n // { x: 131.438848920863, y: 2.74509803921569, size: 1 },\r\n // { x: 132.086330935252, y: 2.50980392156863, size: 1 },\r\n // { x: 132.73381294964, y: 2.23529411764706, size: 1 },\r\n // { x: 135.971223021583, y: 4.15686274509804, size: 1 },\r\n // { x: 176.762589928058, y: 4.07843137254902, size: 1 },\r\n // { x: 180.647482014388, y: 4.07843137254902, size: 1 },\r\n // { x: 189.064748201439, y: 4.15686274509804, size: 1 },\r\n // { x: 195.539568345324, y: 2.82352941176471, size: 1 },\r\n // { x: 196.834532374101, y: 2.90196078431373, size: 1 },\r\n // { x: 197.482014388489, y: 2.82352941176471, size: 1 },\r\n // { x: 217.553956834532, y: 2.50980392156863, size: 1 },\r\n // { x: 309.496402877698, y: 3.17647058823529, size: 1 },\r\n // { x: 316.618705035971, y: 3.09803921568627, size: 1 },\r\n // { x: 323.093525179856, y: 3.25490196078431, size: 1 },\r\n // { x: 325.68345323741, y: 3.01960784313725, size: 1 },\r\n // { x: 326.330935251799, y: 2.74509803921569, size: 1 },\r\n // { x: 326.978417266187, y: 2.66666666666667, size: 1 },\r\n // { x: 347.697841726619, y: 2.86274509803922, size: 1 },\r\n // { x: 359.352517985611, y: 4.03921568627451, size: 1 },\r\n // { x: 0.648648648648649, y: 4.07843137254902, size: 1 },\r\n // { x: 1.2972972972973, y: 3.96078431372549, size: 1 },\r\n // { x: 3.24324324324324, y: 4, size: 1 },\r\n // { x: 6.48648648648649, y: 3.37254901960784, size: 1 },\r\n // { x: 22.0540540540541, y: 3.84313725490196, size: 1 },\r\n // { x: 31.1351351351351, y: 2.98039215686275, size: 1 },\r\n // { x: 57.7297297297297, y: 3.88235294117647, size: 1 },\r\n // { x: 74.5945945945946, y: 3.41176470588235, size: 1 },\r\n // { x: 81.0810810810811, y: 3.25490196078431, size: 1 },\r\n // { x: 84.3243243243243, y: 3.13725490196078, size: 1 },\r\n // { x: 91.4594594594595, y: 3.41176470588235, size: 1 },\r\n // { x: 112.216216216216, y: 3.29411764705882, size: 1 },\r\n // { x: 115.459459459459, y: 3.37254901960784, size: 1 },\r\n // { x: 116.756756756757, y: 2.94117647058824, size: 1 },\r\n // { x: 138.162162162162, y: 3.33333333333333, size: 1 },\r\n // { x: 158.918918918919, y: 3.88235294117647, size: 1 },\r\n // { x: 159.567567567568, y: 3.88235294117647, size: 1 },\r\n // { x: 180.972972972973, y: 3.09803921568627, size: 1 },\r\n // { x: 194.594594594595, y: 3.92156862745098, size: 1 },\r\n // { x: 204.972972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 208.864864864865, y: 3.33333333333333, size: 1 },\r\n // { x: 214.702702702703, y: 3.33333333333333, size: 1 },\r\n // { x: 216.648648648649, y: 3.29411764705882, size: 1 },\r\n // { x: 220.540540540541, y: 3.37254901960784, size: 1 },\r\n // { x: 225.081081081081, y: 2.94117647058824, size: 1 },\r\n // { x: 225.72972972973, y: 3.25490196078431, size: 1 },\r\n // { x: 247.783783783784, y: 2.90196078431373, size: 1 },\r\n // { x: 248.432432432432, y: 3.13725490196078, size: 1 },\r\n // { x: 287.351351351351, y: 3.37254901960784, size: 1 },\r\n // { x: 289.297297297297, y: 2.70588235294118, size: 1 },\r\n // { x: 289.945945945946, y: 2.86274509803922, size: 1 },\r\n // { x: 291.243243243243, y: 2.98039215686275, size: 1 },\r\n // { x: 291.891891891892, y: 4.03921568627451, size: 1 },\r\n // { x: 293.189189189189, y: 3.92156862745098, size: 1 },\r\n // { x: 293.837837837838, y: 4, size: 1 },\r\n // { x: 310.054054054054, y: 3.41176470588235, size: 1 },\r\n // { x: 310.702702702703, y: 2.94117647058824, size: 1 },\r\n // { x: 312, y: 2.90196078431373, size: 1 },\r\n // { x: 312.648648648649, y: 2.74509803921569, size: 1 },\r\n // { x: 347.027027027027, y: 3.33333333333333, size: 1 },\r\n // { x: 354.162162162162, y: 3.13725490196078, size: 1 },\r\n // { x: 7.12230215827338, y: 4.03921568627451, size: 1 },\r\n // { x: 16.1870503597122, y: 2.31372549019608, size: 1 },\r\n // { x: 29.7841726618705, y: 3.96078431372549, size: 1 },\r\n // { x: 36.2589928057554, y: 2.98039215686275, size: 1 },\r\n // { x: 36.9064748201439, y: 3.05882352941176, size: 1 },\r\n // { x: 37.5539568345324, y: 2.19607843137255, size: 1 },\r\n // { x: 58.9208633093525, y: 2.43137254901961, size: 1 },\r\n // { x: 59.568345323741, y: 2.70588235294118, size: 1 },\r\n // { x: 76.4028776978417, y: 4, size: 1 },\r\n // { x: 80.9352517985612, y: 3.13725490196078, size: 1 },\r\n // { x: 123.669064748201, y: 2.74509803921569, size: 1 },\r\n // { x: 124.31654676259, y: 2.58823529411765, size: 1 },\r\n // { x: 145.035971223022, y: 2.43137254901961, size: 1 },\r\n // { x: 145.68345323741, y: 2.50980392156863, size: 1 },\r\n // { x: 167.05035971223, y: 2.27450980392157, size: 1 },\r\n // { x: 188.41726618705, y: 2.23529411764706, size: 1 },\r\n // { x: 209.784172661871, y: 2.62745098039216, size: 1 },\r\n // { x: 210.431654676259, y: 2.66666666666667, size: 1 },\r\n // { x: 317.913669064748, y: 2.82352941176471, size: 1 },\r\n // { x: 318.561151079137, y: 2.86274509803922, size: 1 },\r\n // { x: 319.208633093525, y: 2.7843137254902, size: 1 },\r\n // { x: 319.856115107914, y: 2.86274509803922, size: 1 },\r\n // { x: 354.820143884892, y: 4.07843137254902, size: 1 },\r\n // { x: 23.9568345323741, y: 2.94117647058824, size: 1 },\r\n // { x: 24.6043165467626, y: 2.70588235294118, size: 1 },\r\n // { x: 44.0287769784173, y: 2.7843137254902, size: 1 },\r\n // { x: 64.1007194244604, y: 3.17647058823529, size: 1 },\r\n // { x: 108.776978417266, y: 2.54901960784314, size: 1 },\r\n // { x: 109.424460431655, y: 2.70588235294118, size: 1 },\r\n // { x: 110.071942446043, y: 2.35294117647059, size: 1 },\r\n // { x: 110.719424460432, y: 2.50980392156863, size: 1 },\r\n // { x: 118.489208633094, y: 4.15686274509804, size: 1 },\r\n // { x: 195.539568345324, y: 3.05882352941176, size: 1 },\r\n // { x: 200.719424460432, y: 4, size: 1 },\r\n // { x: 215.611510791367, y: 2.90196078431373, size: 1 },\r\n // { x: 216.906474820144, y: 2.58823529411765, size: 1 },\r\n // { x: 217.553956834532, y: 2.94117647058824, size: 1 },\r\n // { x: 249.280575539568, y: 3.2156862745098, size: 1 },\r\n // { x: 292.661870503597, y: 3.25490196078431, size: 1 },\r\n // { x: 303.669064748201, y: 3.2156862745098, size: 1 },\r\n // { x: 307.553956834532, y: 3.2156862745098, size: 1 },\r\n // { x: 309.496402877698, y: 2.98039215686275, size: 1 },\r\n // { x: 315.323741007194, y: 3.01960784313725, size: 1 },\r\n // { x: 328.273381294964, y: 4.03921568627451, size: 1 },\r\n // { x: 346.402877697842, y: 3.01960784313725, size: 1 },\r\n // { x: 347.697841726619, y: 3.01960784313725, size: 1 },\r\n // { x: 29.7841726618705, y: 3.05882352941176, size: 1 },\r\n // { x: 54.3884892086331, y: 4.15686274509804, size: 1 },\r\n // { x: 69.9280575539568, y: 4, size: 1 },\r\n // { x: 72.5179856115108, y: 2.74509803921569, size: 1 },\r\n // { x: 73.1654676258993, y: 2.94117647058824, size: 1 },\r\n // { x: 73.8129496402878, y: 2.74509803921569, size: 1 },\r\n // { x: 78.3453237410072, y: 4.07843137254902, size: 1 },\r\n // { x: 95.1798561151079, y: 2.90196078431373, size: 1 },\r\n // { x: 115.89928057554, y: 2.43137254901961, size: 1 },\r\n // { x: 116.546762589928, y: 2.82352941176471, size: 1 },\r\n // { x: 117.841726618705, y: 2.90196078431373, size: 1 },\r\n // { x: 266.762589928058, y: 2.86274509803922, size: 1 },\r\n // { x: 267.410071942446, y: 2.66666666666667, size: 1 },\r\n // { x: 268.057553956835, y: 2.54901960784314, size: 1 },\r\n // { x: 268.705035971223, y: 2.82352941176471, size: 1 },\r\n // { x: 330.215827338129, y: 3.25490196078431, size: 1 },\r\n // { x: 332.158273381295, y: 2.86274509803922, size: 1 },\r\n // { x: 354.172661870504, y: 3.13725490196078, size: 1 },\r\n // { x: 354.820143884892, y: 3.09803921568627, size: 1 },\r\n // { x: 13.6216216216216, y: 3.41176470588235, size: 1 },\r\n // { x: 18.8108108108108, y: 3.09803921568627, size: 1 },\r\n // { x: 31.7837837837838, y: 3.25490196078431, size: 1 },\r\n // { x: 48.6486486486486, y: 3.25490196078431, size: 1 },\r\n // { x: 58.3783783783784, y: 2.74509803921569, size: 1 },\r\n // { x: 59.027027027027, y: 2.74509803921569, size: 1 },\r\n // { x: 59.6756756756757, y: 2.66666666666667, size: 1 },\r\n // { x: 60.3243243243243, y: 2.7843137254902, size: 1 },\r\n // { x: 76.5405405405405, y: 3.96078431372549, size: 1 },\r\n // { x: 78.4864864864865, y: 3.09803921568627, size: 1 },\r\n // { x: 79.7837837837838, y: 2.94117647058824, size: 1 },\r\n // { x: 80.4324324324324, y: 2.98039215686275, size: 1 },\r\n // { x: 83.6756756756757, y: 4.07843137254902, size: 1 },\r\n // { x: 85.6216216216216, y: 3.88235294117647, size: 1 },\r\n // { x: 88.8648648648649, y: 3.96078431372549, size: 1 },\r\n // { x: 90.8108108108108, y: 4.03921568627451, size: 1 },\r\n // { x: 98.5945945945946, y: 4.03921568627451, size: 1 },\r\n // { x: 99.2432432432432, y: 3.92156862745098, size: 1 },\r\n // { x: 101.837837837838, y: 2.90196078431373, size: 1 },\r\n // { x: 144.648648648649, y: 2.7843137254902, size: 1 },\r\n // { x: 145.297297297297, y: 2.70588235294118, size: 1 },\r\n // { x: 145.945945945946, y: 3.92156862745098, size: 1 },\r\n // { x: 147.891891891892, y: 4.15686274509804, size: 1 },\r\n // { x: 175.135135135135, y: 3.92156862745098, size: 1 },\r\n // { x: 180.972972972973, y: 4.15686274509804, size: 1 },\r\n // { x: 188.108108108108, y: 3.33333333333333, size: 1 },\r\n // { x: 191.351351351351, y: 4.07843137254902, size: 1 },\r\n // { x: 197.837837837838, y: 3.92156862745098, size: 1 },\r\n // { x: 206.27027027027, y: 4.23529411764706, size: 1 },\r\n // { x: 213.405405405405, y: 4.11764705882353, size: 1 },\r\n // { x: 216.648648648649, y: 4.03921568627451, size: 1 },\r\n // { x: 217.297297297297, y: 4, size: 1 },\r\n // { x: 226.378378378378, y: 4.03921568627451, size: 1 },\r\n // { x: 228.324324324324, y: 4, size: 1 },\r\n // { x: 230.27027027027, y: 3.33333333333333, size: 1 },\r\n // { x: 230.918918918919, y: 3.09803921568627, size: 1 },\r\n // { x: 231.567567567568, y: 3.09803921568627, size: 1 },\r\n // { x: 232.216216216216, y: 3.01960784313725, size: 1 },\r\n // { x: 232.864864864865, y: 2.74509803921569, size: 1 },\r\n // { x: 239.351351351351, y: 4, size: 1 },\r\n // { x: 245.837837837838, y: 3.84313725490196, size: 1 },\r\n // { x: 249.72972972973, y: 4, size: 1 },\r\n // { x: 263.351351351351, y: 3.88235294117647, size: 1 },\r\n // { x: 310.054054054054, y: 3.84313725490196, size: 1 },\r\n // { x: 317.189189189189, y: 3.13725490196078, size: 1 },\r\n // { x: 317.837837837838, y: 3.2156862745098, size: 1 },\r\n // { x: 319.135135135135, y: 2.74509803921569, size: 1 },\r\n // { x: 319.783783783784, y: 2.58823529411765, size: 1 },\r\n // { x: 326.918918918919, y: 4, size: 1 },\r\n // { x: 332.108108108108, y: 3.88235294117647, size: 1 },\r\n // { x: 334.054054054054, y: 3.92156862745098, size: 1 },\r\n // { x: 335.351351351351, y: 3.96078431372549, size: 1 },\r\n // { x: 338.594594594595, y: 3.13725490196078, size: 1 },\r\n // { x: 339.243243243243, y: 3.01960784313725, size: 1 },\r\n // { x: 340.540540540541, y: 2.94117647058824, size: 1 },\r\n // { x: 341.189189189189, y: 2.82352941176471, size: 1 },\r\n // { x: 1.94244604316547, y: 3.25490196078431, size: 1 },\r\n // { x: 3.23741007194245, y: 3.2156862745098, size: 1 },\r\n // { x: 17.4820143884892, y: 3.2156862745098, size: 1 },\r\n // { x: 24.6043165467626, y: 2.86274509803922, size: 1 },\r\n // { x: 44.0287769784173, y: 2.82352941176471, size: 1 },\r\n // { x: 44.6762589928058, y: 2.58823529411765, size: 1 },\r\n // { x: 45.3237410071942, y: 3.05882352941176, size: 1 },\r\n // { x: 66.6906474820144, y: 2.86274509803922, size: 1 },\r\n // { x: 108.776978417266, y: 3.01960784313725, size: 1 },\r\n // { x: 109.424460431655, y: 3.05882352941176, size: 1 },\r\n // { x: 216.906474820144, y: 3.13725490196078, size: 1 },\r\n // { x: 258.345323741007, y: 3.09803921568627, size: 1 },\r\n // { x: 259.640287769784, y: 2.07843137254902, size: 1 },\r\n // { x: 260.287769784173, y: 1.76470588235294, size: 1 },\r\n // { x: 260.935251798561, y: 2.74509803921569, size: 1 },\r\n // { x: 261.58273381295, y: 2.54901960784314, size: 1 },\r\n // { x: 269.352517985611, y: 2.86274509803922, size: 1 },\r\n // { x: 276.474820143885, y: 3.17647058823529, size: 1 },\r\n // { x: 303.021582733813, y: 2, size: 1 },\r\n // { x: 303.669064748201, y: 2.03921568627451, size: 1 },\r\n // { x: 324.388489208633, y: 2.62745098039216, size: 1 },\r\n // { x: 325.035971223022, y: 2.50980392156863, size: 1 },\r\n // { x: 344.460431654676, y: 3.13725490196078, size: 1 },\r\n // { x: 345.107913669065, y: 3.09803921568627, size: 1 },\r\n // { x: 345.755395683453, y: 2.94117647058824, size: 1 },\r\n // { x: 346.402877697842, y: 1.92156862745098, size: 1 },\r\n // { x: 7.76978417266187, y: 3.13725490196078, size: 1 },\r\n // { x: 29.136690647482, y: 2.94117647058824, size: 1 },\r\n // { x: 29.7841726618705, y: 2.98039215686275, size: 1 },\r\n // { x: 51.1510791366906, y: 2.54901960784314, size: 1 },\r\n // { x: 67.3381294964029, y: 4.19607843137255, size: 1 },\r\n // { x: 71.8705035971223, y: 3.09803921568627, size: 1 },\r\n // { x: 73.1654676258993, y: 2.90196078431373, size: 1 },\r\n // { x: 82.2302158273381, y: 4.15686274509804, size: 1 },\r\n // { x: 93.8848920863309, y: 3.25490196078431, size: 1 },\r\n // { x: 94.5323741007194, y: 2.35294117647059, size: 1 },\r\n // { x: 122.374100719424, y: 3.96078431372549, size: 1 },\r\n // { x: 123.669064748201, y: 3.96078431372549, size: 1 },\r\n // { x: 135.971223021583, y: 3.13725490196078, size: 1 },\r\n // { x: 136.618705035971, y: 2.98039215686275, size: 1 },\r\n // { x: 158.63309352518, y: 2.54901960784314, size: 1 },\r\n // { x: 161.870503597122, y: 3.25490196078431, size: 1 },\r\n // { x: 288.129496402878, y: 2.98039215686275, size: 1 },\r\n // { x: 288.776978417266, y: 2.82352941176471, size: 1 },\r\n // { x: 297.841726618705, y: 4, size: 1 },\r\n // { x: 312.086330935252, y: 2.7843137254902, size: 1 },\r\n // { x: 331.510791366906, y: 3.05882352941176, size: 1 },\r\n // { x: 332.158273381295, y: 2.7843137254902, size: 1 },\r\n // { x: 332.805755395683, y: 2.98039215686275, size: 1 },\r\n // { x: 333.453237410072, y: 2.98039215686275, size: 1 },\r\n // { x: 343.812949640288, y: 4, size: 1 },\r\n // { x: 352.230215827338, y: 3.05882352941176, size: 1 },\r\n // { x: 352.877697841727, y: 2.94117647058824, size: 1 },\r\n // { x: 354.172661870504, y: 2.58823529411765, size: 1 },\r\n // { x: 354.820143884892, y: 2.31372549019608, size: 1 },\r\n // { x: 1.2972972972973, y: 3.92156862745098, size: 1 },\r\n // { x: 2.59459459459459, y: 3.96078431372549, size: 1 },\r\n // { x: 6.48648648648649, y: 3.88235294117647, size: 1 },\r\n // { x: 11.027027027027, y: 4.19607843137255, size: 1 },\r\n // { x: 14.2702702702703, y: 3.2156862745098, size: 1 },\r\n // { x: 15.5675675675676, y: 3.33333333333333, size: 1 },\r\n // { x: 29.8378378378378, y: 3.84313725490196, size: 1 },\r\n // { x: 57.7297297297297, y: 3.37254901960784, size: 1 },\r\n // { x: 60.972972972973, y: 3.33333333333333, size: 1 },\r\n // { x: 72.6486486486486, y: 3.33333333333333, size: 1 },\r\n // { x: 74.5945945945946, y: 3.13725490196078, size: 1 },\r\n // { x: 90.1621621621622, y: 3.84313725490196, size: 1 },\r\n // { x: 102.486486486486, y: 3.13725490196078, size: 1 },\r\n // { x: 103.135135135135, y: 3.13725490196078, size: 1 },\r\n // { x: 123.891891891892, y: 3.33333333333333, size: 1 },\r\n // { x: 140.756756756757, y: 3.29411764705882, size: 1 },\r\n // { x: 142.702702702703, y: 3.09803921568627, size: 1 },\r\n // { x: 143.351351351351, y: 3.25490196078431, size: 1 },\r\n // { x: 144, y: 3.05882352941176, size: 1 },\r\n // { x: 144.648648648649, y: 2.50980392156863, size: 1 },\r\n // { x: 145.297297297297, y: 2.74509803921569, size: 1 },\r\n // { x: 145.945945945946, y: 2.86274509803922, size: 1 },\r\n // { x: 146.594594594595, y: 3.05882352941176, size: 1 },\r\n // { x: 164.756756756757, y: 3.45098039215686, size: 1 },\r\n // { x: 168.648648648649, y: 3.25490196078431, size: 1 },\r\n // { x: 169.945945945946, y: 3.17647058823529, size: 1 },\r\n // { x: 172.540540540541, y: 3.09803921568627, size: 1 },\r\n // { x: 173.189189189189, y: 3.09803921568627, size: 1 },\r\n // { x: 173.837837837838, y: 3.13725490196078, size: 1 },\r\n // { x: 177.081081081081, y: 3.29411764705882, size: 1 },\r\n // { x: 177.72972972973, y: 3.01960784313725, size: 1 },\r\n // { x: 182.918918918919, y: 3.17647058823529, size: 1 },\r\n // { x: 183.567567567568, y: 3.2156862745098, size: 1 },\r\n // { x: 185.513513513514, y: 3.05882352941176, size: 1 },\r\n // { x: 231.567567567568, y: 3.25490196078431, size: 1 },\r\n // { x: 232.216216216216, y: 3.05882352941176, size: 1 },\r\n // { x: 244.540540540541, y: 3.29411764705882, size: 1 },\r\n // { x: 252.972972972973, y: 2.98039215686275, size: 1 },\r\n // { x: 253.621621621622, y: 3.13725490196078, size: 1 },\r\n // { x: 272.432432432432, y: 3.17647058823529, size: 1 },\r\n // { x: 275.027027027027, y: 3.05882352941176, size: 1 },\r\n // { x: 275.675675675676, y: 2.66666666666667, size: 1 },\r\n // { x: 276.324324324324, y: 3.01960784313725, size: 1 },\r\n // { x: 294.486486486487, y: 3.37254901960784, size: 1 },\r\n // { x: 295.783783783784, y: 3.2156862745098, size: 1 },\r\n // { x: 296.432432432432, y: 3.33333333333333, size: 1 },\r\n // { x: 317.189189189189, y: 3.17647058823529, size: 1 },\r\n // { x: 317.837837837838, y: 3.13725490196078, size: 1 },\r\n // { x: 318.486486486487, y: 2.82352941176471, size: 1 },\r\n // { x: 319.135135135135, y: 2.70588235294118, size: 1 },\r\n // { x: 319.783783783784, y: 3.37254901960784, size: 1 },\r\n // { x: 337.297297297297, y: 3.25490196078431, size: 1 },\r\n // { x: 339.243243243243, y: 2.86274509803922, size: 1 },\r\n // { x: 339.891891891892, y: 2.7843137254902, size: 1 },\r\n // { x: 340.540540540541, y: 2.98039215686275, size: 1 },\r\n // { x: 22.0143884892086, y: 3.05882352941176, size: 1 },\r\n // { x: 22.6618705035971, y: 2.7843137254902, size: 1 },\r\n // { x: 23.3093525179856, y: 2.3921568627451, size: 1 },\r\n // { x: 23.9568345323741, y: 2.47058823529412, size: 1 },\r\n // { x: 24.6043165467626, y: 3.13725490196078, size: 1 },\r\n // { x: 77.0503597122302, y: 3.25490196078431, size: 1 },\r\n // { x: 89.3525179856115, y: 3.17647058823529, size: 1 },\r\n // { x: 90, y: 3.05882352941176, size: 1 },\r\n // { x: 101.007194244604, y: 3.25490196078431, size: 1 },\r\n // { x: 103.597122302158, y: 3.25490196078431, size: 1 },\r\n // { x: 110.071942446043, y: 2.94117647058824, size: 1 },\r\n // { x: 130.791366906475, y: 2.98039215686275, size: 1 },\r\n // { x: 152.158273381295, y: 3.13725490196078, size: 1 },\r\n // { x: 234.388489208633, y: 4.07843137254902, size: 1 },\r\n // { x: 260.935251798561, y: 3.17647058823529, size: 1 },\r\n // { x: 270.647482014389, y: 3.25490196078431, size: 1 },\r\n // { x: 325.035971223022, y: 3.01960784313725, size: 1 },\r\n // { x: 326.330935251799, y: 3.09803921568627, size: 1 },\r\n // { x: 336.690647482014, y: 4.03921568627451, size: 1 },\r\n // { x: 352.877697841727, y: 3.09803921568627, size: 1 },\r\n // { x: 356.762589928058, y: 3.13725490196078, size: 1 },\r\n // { x: 7.76978417266187, y: 3.17647058823529, size: 1 },\r\n // { x: 72.5179856115108, y: 2.35294117647059, size: 1 },\r\n // { x: 73.8129496402878, y: 2.86274509803922, size: 1 },\r\n // { x: 74.4604316546763, y: 2.74509803921569, size: 1 },\r\n // { x: 94.5323741007194, y: 2.90196078431373, size: 1 },\r\n // { x: 95.8273381294964, y: 3.05882352941176, size: 1 },\r\n // { x: 159.280575539568, y: 3.05882352941176, size: 1 },\r\n // { x: 162.517985611511, y: 3.09803921568627, size: 1 },\r\n // { x: 166.402877697842, y: 3.13725490196078, size: 1 },\r\n // { x: 173.525179856115, y: 3.2156862745098, size: 1 },\r\n // { x: 175.467625899281, y: 3.2156862745098, size: 1 },\r\n // { x: 176.115107913669, y: 3.17647058823529, size: 1 },\r\n // { x: 201.36690647482, y: 3.05882352941176, size: 1 },\r\n // { x: 202.014388489209, y: 2.62745098039216, size: 1 },\r\n // { x: 202.661870503597, y: 2.58823529411765, size: 1 },\r\n // { x: 203.309352517986, y: 2.90196078431373, size: 1 },\r\n // { x: 227.913669064748, y: 3.96078431372549, size: 1 },\r\n // { x: 231.151079136691, y: 4, size: 1 },\r\n // { x: 234.388489208633, y: 4.23529411764706, size: 1 },\r\n // { x: 245.395683453237, y: 2.74509803921569, size: 1 },\r\n // { x: 246.690647482014, y: 3.13725490196078, size: 1 },\r\n // { x: 14.8920863309353, y: 2.90196078431373, size: 1 },\r\n // { x: 15.5395683453237, y: 2.94117647058824, size: 1 },\r\n // { x: 16.1870503597122, y: 2.62745098039216, size: 1 },\r\n // { x: 36.2589928057554, y: 2.82352941176471, size: 1 },\r\n // { x: 38.2014388489209, y: 2.86274509803922, size: 1 },\r\n // { x: 44.0287769784173, y: 4, size: 1 },\r\n // { x: 145.68345323741, y: 3.01960784313725, size: 1 },\r\n // { x: 166.402877697842, y: 2.7843137254902, size: 1 },\r\n // { x: 167.05035971223, y: 2.7843137254902, size: 1 },\r\n // { x: 167.697841726619, y: 2.86274509803922, size: 1 },\r\n // { x: 188.41726618705, y: 4.03921568627451, size: 1 },\r\n // { x: 192.302158273381, y: 3.96078431372549, size: 1 },\r\n // { x: 201.36690647482, y: 4.07843137254902, size: 1 },\r\n // { x: 203.309352517986, y: 4.07843137254902, size: 1 },\r\n // { x: 205.89928057554, y: 4, size: 1 },\r\n // { x: 209.136690647482, y: 2.98039215686275, size: 1 },\r\n // { x: 216.906474820144, y: 3.96078431372549, size: 1 },\r\n // { x: 217.553956834532, y: 4.15686274509804, size: 1 },\r\n // { x: 227.26618705036, y: 3.96078431372549, size: 1 },\r\n // { x: 229.856115107914, y: 3.2156862745098, size: 1 },\r\n // { x: 230.503597122302, y: 2.98039215686275, size: 1 },\r\n // { x: 245.395683453237, y: 4.23529411764706, size: 1 },\r\n // { x: 251.870503597122, y: 2.82352941176471, size: 1 },\r\n // { x: 252.517985611511, y: 2.86274509803922, size: 1 },\r\n // { x: 273.237410071942, y: 2.98039215686275, size: 1 },\r\n // { x: 273.884892086331, y: 2.70588235294118, size: 1 },\r\n // { x: 323.093525179856, y: 3.96078431372549, size: 1 },\r\n // { x: 329.568345323741, y: 4.11764705882353, size: 1 },\r\n // { x: 337.985611510791, y: 2.90196078431373, size: 1 },\r\n // { x: 21.4054054054054, y: 3.09803921568627, size: 1 },\r\n // { x: 22.0540540540541, y: 3.01960784313725, size: 1 },\r\n // { x: 26.5945945945946, y: 4.15686274509804, size: 1 },\r\n // { x: 30.4864864864865, y: 3.96078431372549, size: 1 },\r\n // { x: 33.0810810810811, y: 3.96078431372549, size: 1 },\r\n // { x: 37.6216216216216, y: 3.96078431372549, size: 1 },\r\n // { x: 38.9189189189189, y: 4, size: 1 },\r\n // { x: 40.2162162162162, y: 4.03921568627451, size: 1 },\r\n // { x: 42.1621621621622, y: 3.17647058823529, size: 1 },\r\n // { x: 42.8108108108108, y: 3.09803921568627, size: 1 },\r\n // { x: 43.4594594594595, y: 3.2156862745098, size: 1 },\r\n // { x: 48.6486486486486, y: 3.96078431372549, size: 1 },\r\n // { x: 58.3783783783784, y: 3.80392156862745, size: 1 },\r\n // { x: 59.6756756756757, y: 3.88235294117647, size: 1 },\r\n // { x: 64.2162162162162, y: 3.17647058823529, size: 1 },\r\n // { x: 64.8648648648649, y: 2.7843137254902, size: 1 },\r\n // { x: 73.945945945946, y: 3.96078431372549, size: 1 },\r\n // { x: 86.2702702702703, y: 2.62745098039216, size: 1 },\r\n // { x: 86.9189189189189, y: 2.3921568627451, size: 1 },\r\n // { x: 94.7027027027027, y: 4, size: 1 },\r\n // { x: 106.378378378378, y: 3.25490196078431, size: 1 },\r\n // { x: 107.675675675676, y: 2.07843137254902, size: 1 },\r\n // { x: 108.324324324324, y: 2.19607843137255, size: 1 },\r\n // { x: 110.27027027027, y: 4.27450980392157, size: 1 },\r\n // { x: 111.567567567568, y: 4.15686274509804, size: 1 },\r\n // { x: 112.864864864865, y: 4.07843137254902, size: 1 },\r\n // { x: 114.810810810811, y: 4.11764705882353, size: 1 },\r\n // { x: 115.459459459459, y: 4.15686274509804, size: 1 },\r\n // { x: 116.108108108108, y: 4.27450980392157, size: 1 },\r\n // { x: 116.756756756757, y: 4.15686274509804, size: 1 },\r\n // { x: 118.702702702703, y: 4.07843137254902, size: 1 },\r\n // { x: 119.351351351351, y: 4.19607843137255, size: 1 },\r\n // { x: 120, y: 4.23529411764706, size: 1 },\r\n // { x: 121.297297297297, y: 4.27450980392157, size: 1 },\r\n // { x: 121.945945945946, y: 4.35294117647059, size: 1 },\r\n // { x: 124.540540540541, y: 4.23529411764706, size: 1 },\r\n // { x: 125.189189189189, y: 3.96078431372549, size: 1 },\r\n // { x: 125.837837837838, y: 4, size: 1 },\r\n // { x: 126.486486486486, y: 4.07843137254902, size: 1 },\r\n // { x: 132.972972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 148.540540540541, y: 3.13725490196078, size: 1 },\r\n // { x: 150.486486486486, y: 3.33333333333333, size: 1 },\r\n // { x: 152.432432432432, y: 3.2156862745098, size: 1 },\r\n // { x: 153.081081081081, y: 3.33333333333333, size: 1 },\r\n // { x: 154.378378378378, y: 3.37254901960784, size: 1 },\r\n // { x: 172.540540540541, y: 3.17647058823529, size: 1 },\r\n // { x: 190.702702702703, y: 3.92156862745098, size: 1 },\r\n // { x: 196.540540540541, y: 3.05882352941176, size: 1 },\r\n // { x: 200.432432432432, y: 4.03921568627451, size: 1 },\r\n // { x: 201.081081081081, y: 3.96078431372549, size: 1 },\r\n // { x: 203.027027027027, y: 3.84313725490196, size: 1 },\r\n // { x: 203.675675675676, y: 3.92156862745098, size: 1 },\r\n // { x: 208.216216216216, y: 3.96078431372549, size: 1 },\r\n // { x: 211.459459459459, y: 3.92156862745098, size: 1 },\r\n // { x: 216, y: 2.86274509803922, size: 1 },\r\n // { x: 216.648648648649, y: 2.94117647058824, size: 1 },\r\n // { x: 253.621621621622, y: 3.84313725490196, size: 1 },\r\n // { x: 281.513513513513, y: 3.33333333333333, size: 1 },\r\n // { x: 282.162162162162, y: 3.17647058823529, size: 1 },\r\n // { x: 298.378378378378, y: 3.96078431372549, size: 1 },\r\n // { x: 302.27027027027, y: 3.17647058823529, size: 1 },\r\n // { x: 302.918918918919, y: 3.09803921568627, size: 1 },\r\n // { x: 321.081081081081, y: 4, size: 1 },\r\n // { x: 324.324324324324, y: 2.90196078431373, size: 1 },\r\n // { x: 324.972972972973, y: 3.2156862745098, size: 1 },\r\n // { x: 325.621621621622, y: 2.90196078431373, size: 1 },\r\n // { x: 326.27027027027, y: 2.58823529411765, size: 1 },\r\n // { x: 327.567567567568, y: 4, size: 1 },\r\n // { x: 347.027027027027, y: 3.01960784313725, size: 1 },\r\n // { x: 347.675675675676, y: 3.17647058823529, size: 1 },\r\n // { x: 24.6043165467626, y: 4.07843137254902, size: 1 },\r\n // { x: 29.136690647482, y: 3.09803921568627, size: 1 },\r\n // { x: 30.431654676259, y: 3.09803921568627, size: 1 },\r\n // { x: 31.0791366906475, y: 3.05882352941176, size: 1 },\r\n // { x: 80.2877697841727, y: 4.15686274509804, size: 1 },\r\n // { x: 94.5323741007194, y: 3.05882352941176, size: 1 },\r\n // { x: 115.251798561151, y: 3.09803921568627, size: 1 },\r\n // { x: 154.10071942446, y: 4.03921568627451, size: 1 },\r\n // { x: 183.884892086331, y: 4, size: 1 },\r\n // { x: 216.906474820144, y: 4.11764705882353, size: 1 },\r\n // { x: 229.856115107914, y: 4.11764705882353, size: 1 },\r\n // { x: 235.035971223022, y: 3.96078431372549, size: 1 },\r\n // { x: 236.330935251799, y: 4, size: 1 },\r\n // { x: 237.625899280576, y: 4.19607843137255, size: 1 },\r\n // { x: 240.863309352518, y: 4.11764705882353, size: 1 },\r\n // { x: 266.115107913669, y: 3.09803921568627, size: 1 },\r\n // { x: 266.762589928058, y: 3.05882352941176, size: 1 },\r\n // { x: 267.410071942446, y: 3.01960784313725, size: 1 },\r\n // { x: 268.705035971223, y: 3.25490196078431, size: 1 },\r\n // { x: 289.424460431655, y: 2.94117647058824, size: 1 },\r\n // { x: 359.352517985611, y: 3.96078431372549, size: 1 },\r\n // { x: 0, y: 4.11764705882353, size: 1 },\r\n // { x: 1.29496402877698, y: 4.03921568627451, size: 1 },\r\n // { x: 3.23741007194245, y: 3.96078431372549, size: 1 },\r\n // { x: 13.5971223021583, y: 3.13725490196078, size: 1 },\r\n // { x: 36.9064748201439, y: 3.01960784313725, size: 1 },\r\n // { x: 123.669064748201, y: 3.05882352941176, size: 1 },\r\n // { x: 174.820143884892, y: 4.03921568627451, size: 1 },\r\n // { x: 178.057553956835, y: 3.96078431372549, size: 1 },\r\n // { x: 178.705035971223, y: 4, size: 1 },\r\n // { x: 230.503597122302, y: 3.09803921568627, size: 1 },\r\n // { x: 231.798561151079, y: 3.05882352941176, size: 1 },\r\n // { x: 260.287769784173, y: 3.92156862745098, size: 1 },\r\n // { x: 295.89928057554, y: 3.09803921568627, size: 1 },\r\n // { x: 353.525179856115, y: 4.07843137254902, size: 1 },\r\n // { x: 354.820143884892, y: 4, size: 1 },\r\n // { x: 21.3669064748201, y: 2.82352941176471, size: 1 },\r\n // { x: 23.3093525179856, y: 2.50980392156863, size: 1 },\r\n // { x: 108.129496402878, y: 3.01960784313725, size: 1 },\r\n // { x: 108.776978417266, y: 2.86274509803922, size: 1 },\r\n // { x: 109.424460431655, y: 2.74509803921569, size: 1 },\r\n // { x: 135.971223021583, y: 4.11764705882353, size: 1 },\r\n // { x: 156.043165467626, y: 4.19607843137255, size: 1 },\r\n // { x: 215.611510791367, y: 2.98039215686275, size: 1 },\r\n // { x: 303.669064748201, y: 2.90196078431373, size: 1 },\r\n // { x: 324.388489208633, y: 3.05882352941176, size: 1 },\r\n // { x: 345.107913669065, y: 2.98039215686275, size: 1 },\r\n // { x: 346.402877697842, y: 2.82352941176471, size: 1 },\r\n // { x: 19.4594594594595, y: 3.29411764705882, size: 1 },\r\n // { x: 23.3513513513514, y: 3.33333333333333, size: 1 },\r\n // { x: 26.5945945945946, y: 3.45098039215686, size: 1 },\r\n // { x: 35.6756756756757, y: 3.92156862745098, size: 1 },\r\n // { x: 50.5945945945946, y: 3.17647058823529, size: 1 },\r\n // { x: 51.2432432432432, y: 2.74509803921569, size: 1 },\r\n // { x: 51.8918918918919, y: 2.70588235294118, size: 1 },\r\n // { x: 53.1891891891892, y: 3.88235294117647, size: 1 },\r\n // { x: 62.9189189189189, y: 4.07843137254902, size: 1 },\r\n // { x: 80.4324324324324, y: 4.11764705882353, size: 1 },\r\n // { x: 84.972972972973, y: 3.84313725490196, size: 1 },\r\n // { x: 94.054054054054, y: 2.82352941176471, size: 1 },\r\n // { x: 94.7027027027027, y: 2.66666666666667, size: 1 },\r\n // { x: 96.6486486486486, y: 4.07843137254902, size: 1 },\r\n // { x: 103.783783783784, y: 3.96078431372549, size: 1 },\r\n // { x: 114.162162162162, y: 3.09803921568627, size: 1 },\r\n // { x: 114.810810810811, y: 1.84313725490196, size: 1 },\r\n // { x: 115.459459459459, y: 2.50980392156863, size: 1 },\r\n // { x: 116.108108108108, y: 2.66666666666667, size: 1 },\r\n // { x: 116.756756756757, y: 2.62745098039216, size: 1 },\r\n // { x: 119.351351351351, y: 2.82352941176471, size: 1 },\r\n // { x: 120, y: 3.13725490196078, size: 1 },\r\n // { x: 123.891891891892, y: 2.98039215686275, size: 1 },\r\n // { x: 124.540540540541, y: 2.98039215686275, size: 1 },\r\n // { x: 129.72972972973, y: 3.25490196078431, size: 1 },\r\n // { x: 130.378378378378, y: 2.86274509803922, size: 1 },\r\n // { x: 131.027027027027, y: 3.25490196078431, size: 1 },\r\n // { x: 131.675675675676, y: 3.2156862745098, size: 1 },\r\n // { x: 132.972972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 148.540540540541, y: 4.07843137254902, size: 1 },\r\n // { x: 172.540540540541, y: 3.88235294117647, size: 1 },\r\n // { x: 179.675675675676, y: 3.13725490196078, size: 1 },\r\n // { x: 194.594594594595, y: 3.80392156862745, size: 1 },\r\n // { x: 201.081081081081, y: 2.74509803921569, size: 1 },\r\n // { x: 201.72972972973, y: 2.94117647058824, size: 1 },\r\n // { x: 206.918918918919, y: 4, size: 1 },\r\n // { x: 212.756756756757, y: 4.03921568627451, size: 1 },\r\n // { x: 214.054054054054, y: 4.19607843137255, size: 1 },\r\n // { x: 220.540540540541, y: 3.88235294117647, size: 1 },\r\n // { x: 244.540540540541, y: 3.05882352941176, size: 1 },\r\n // { x: 252.324324324324, y: 4.15686274509804, size: 1 },\r\n // { x: 252.972972972973, y: 4.07843137254902, size: 1 },\r\n // { x: 254.918918918919, y: 3.96078431372549, size: 1 },\r\n // { x: 261.405405405405, y: 3.92156862745098, size: 1 },\r\n // { x: 263.351351351351, y: 3.80392156862745, size: 1 },\r\n // { x: 267.243243243243, y: 3.2156862745098, size: 1 },\r\n // { x: 271.783783783784, y: 3.25490196078431, size: 1 },\r\n // { x: 274.378378378378, y: 3.37254901960784, size: 1 },\r\n // { x: 277.621621621622, y: 3.25490196078431, size: 1 },\r\n // { x: 279.567567567568, y: 3.25490196078431, size: 1 },\r\n // { x: 282.810810810811, y: 3.2156862745098, size: 1 },\r\n // { x: 283.459459459459, y: 3.29411764705882, size: 1 },\r\n // { x: 287.351351351351, y: 2.86274509803922, size: 1 },\r\n // { x: 288, y: 2.7843137254902, size: 1 },\r\n // { x: 304.864864864865, y: 3.96078431372549, size: 1 },\r\n // { x: 309.405405405405, y: 2.66666666666667, size: 1 },\r\n // { x: 312, y: 4.03921568627451, size: 1 },\r\n // { x: 313.297297297297, y: 3.96078431372549, size: 1 },\r\n // { x: 319.783783783784, y: 4.07843137254902, size: 1 },\r\n // { x: 323.027027027027, y: 3.84313725490196, size: 1 },\r\n // { x: 323.675675675676, y: 4.03921568627451, size: 1 },\r\n // { x: 330.810810810811, y: 3.01960784313725, size: 1 },\r\n // { x: 331.459459459459, y: 2.86274509803922, size: 1 },\r\n // { x: 342.486486486487, y: 3.25490196078431, size: 1 },\r\n // { x: 343.783783783784, y: 3.09803921568627, size: 1 },\r\n // { x: 348.972972972973, y: 3.25490196078431, size: 1 },\r\n // { x: 352.216216216216, y: 2.74509803921569, size: 1 },\r\n // { x: 358.702702702703, y: 3.92156862745098, size: 1 },\r\n // { x: 14.2446043165468, y: 2, size: 1 },\r\n // { x: 34.9640287769784, y: 3.13725490196078, size: 1 },\r\n // { x: 35.6115107913669, y: 2.15686274509804, size: 1 },\r\n // { x: 36.2589928057554, y: 2.58823529411765, size: 1 },\r\n // { x: 39.4964028776978, y: 4.07843137254902, size: 1 },\r\n // { x: 41.4388489208633, y: 4.31372549019608, size: 1 },\r\n // { x: 53.0935251798561, y: 4, size: 1 },\r\n // { x: 54.3884892086331, y: 4.03921568627451, size: 1 },\r\n // { x: 75.7553956834532, y: 4.23529411764706, size: 1 },\r\n // { x: 144.388489208633, y: 2.86274509803922, size: 1 },\r\n // { x: 166.402877697842, y: 3.96078431372549, size: 1 },\r\n // { x: 168.345323741007, y: 4.03921568627451, size: 1 },\r\n // { x: 229.856115107914, y: 2.70588235294118, size: 1 },\r\n // { x: 231.151079136691, y: 2.70588235294118, size: 1 },\r\n // { x: 231.798561151079, y: 2.58823529411765, size: 1 },\r\n // { x: 246.690647482014, y: 4, size: 1 },\r\n // { x: 251.870503597122, y: 3.05882352941176, size: 1 },\r\n // { x: 266.762589928058, y: 4, size: 1 },\r\n // { x: 337.985611510791, y: 3.05882352941176, size: 1 },\r\n // { x: 338.63309352518, y: 3.01960784313725, size: 1 },\r\n // { x: 359.352517985611, y: 3.17647058823529, size: 1 },\r\n // { x: 55.6834532374101, y: 4.07843137254902, size: 1 },\r\n // { x: 67.3381294964029, y: 4, size: 1 },\r\n // { x: 150.215827338129, y: 4, size: 1 },\r\n // { x: 193.597122302158, y: 2.98039215686275, size: 1 },\r\n // { x: 209.784172661871, y: 4.15686274509804, size: 1 },\r\n // { x: 214.964028776978, y: 2.94117647058824, size: 1 },\r\n // { x: 268.057553956835, y: 4.07843137254902, size: 1 },\r\n // { x: 291.36690647482, y: 4, size: 1 },\r\n // { x: 302.374100719424, y: 3.01960784313725, size: 1 },\r\n // { x: 303.021582733813, y: 3.17647058823529, size: 1 },\r\n // { x: 323.093525179856, y: 2.86274509803922, size: 1 },\r\n // { x: 324.388489208633, y: 2.86274509803922, size: 1 },\r\n // { x: 9.08108108108108, y: 4.15686274509804, size: 1 },\r\n // { x: 9.72972972972973, y: 4.11764705882353, size: 1 },\r\n // { x: 15.5675675675676, y: 4, size: 1 },\r\n // { x: 16.2162162162162, y: 3.96078431372549, size: 1 },\r\n // { x: 17.5135135135135, y: 3.96078431372549, size: 1 },\r\n // { x: 19.4594594594595, y: 4.07843137254902, size: 1 },\r\n // { x: 24.6486486486486, y: 4.07843137254902, size: 1 },\r\n // { x: 38.2702702702703, y: 3.88235294117647, size: 1 },\r\n // { x: 45.4054054054054, y: 3.96078431372549, size: 1 },\r\n // { x: 50.5945945945946, y: 3.01960784313725, size: 1 },\r\n // { x: 51.2432432432432, y: 3.17647058823529, size: 1 },\r\n // { x: 51.8918918918919, y: 3.41176470588235, size: 1 },\r\n // { x: 72, y: 3.17647058823529, size: 1 },\r\n // { x: 79.7837837837838, y: 3.37254901960784, size: 1 },\r\n // { x: 92.7567567567568, y: 2.70588235294118, size: 1 },\r\n // { x: 93.4054054054054, y: 2.66666666666667, size: 1 },\r\n // { x: 94.054054054054, y: 2.62745098039216, size: 1 },\r\n // { x: 94.7027027027027, y: 2.82352941176471, size: 1 },\r\n // { x: 160.864864864865, y: 3.64705882352941, size: 1 },\r\n // { x: 168.648648648649, y: 3.96078431372549, size: 1 },\r\n // { x: 188.108108108108, y: 4, size: 1 },\r\n // { x: 193.297297297297, y: 4.03921568627451, size: 1 },\r\n // { x: 195.243243243243, y: 3.80392156862745, size: 1 },\r\n // { x: 201.081081081081, y: 3.13725490196078, size: 1 },\r\n // { x: 210.810810810811, y: 4.19607843137255, size: 1 },\r\n // { x: 214.054054054054, y: 3.96078431372549, size: 1 },\r\n // { x: 221.189189189189, y: 3.2156862745098, size: 1 },\r\n // { x: 222.486486486486, y: 3.01960784313725, size: 1 },\r\n // { x: 223.135135135135, y: 3.2156862745098, size: 1 },\r\n // { x: 224.432432432432, y: 3.29411764705882, size: 1 },\r\n // { x: 228.972972972973, y: 4, size: 1 },\r\n // { x: 267.243243243243, y: 3.09803921568627, size: 1 },\r\n // { x: 271.135135135135, y: 3.92156862745098, size: 1 },\r\n // { x: 276.972972972973, y: 3.96078431372549, size: 1 },\r\n // { x: 289.297297297297, y: 3.05882352941176, size: 1 },\r\n // { x: 291.243243243243, y: 3.84313725490196, size: 1 },\r\n // { x: 308.756756756757, y: 2.94117647058824, size: 1 },\r\n // { x: 309.405405405405, y: 2.62745098039216, size: 1 },\r\n // { x: 313.297297297297, y: 4.07843137254902, size: 1 },\r\n // { x: 317.189189189189, y: 4, size: 1 },\r\n // { x: 320.432432432432, y: 4, size: 1 },\r\n // { x: 321.081081081081, y: 3.96078431372549, size: 1 },\r\n // { x: 321.72972972973, y: 3.92156862745098, size: 1 },\r\n // { x: 330.810810810811, y: 3.13725490196078, size: 1 },\r\n // { x: 331.459459459459, y: 3.2156862745098, size: 1 },\r\n // { x: 332.108108108108, y: 3.29411764705882, size: 1 },\r\n // { x: 356.756756756757, y: 3.88235294117647, size: 1 },\r\n // { x: 11.0071942446043, y: 4.11764705882353, size: 1 },\r\n // { x: 14.8920863309353, y: 2.98039215686275, size: 1 },\r\n // { x: 35.6115107913669, y: 2.86274509803922, size: 1 },\r\n // { x: 55.6834532374101, y: 4.03921568627451, size: 1 },\r\n // { x: 64.1007194244604, y: 4.03921568627451, size: 1 },\r\n // { x: 143.093525179856, y: 3.09803921568627, size: 1 },\r\n // { x: 187.122302158273, y: 2.70588235294118, size: 1 },\r\n // { x: 208.489208633094, y: 3.01960784313725, size: 1 },\r\n // { x: 295.251798561151, y: 3.09803921568627, size: 1 },\r\n // { x: 324.388489208633, y: 4.03921568627451, size: 1 },\r\n // { x: 341.223021582734, y: 4.11764705882353, size: 1 },\r\n // { x: 42.0863309352518, y: 2.23529411764706, size: 1 },\r\n // { x: 42.7338129496403, y: 1.92156862745098, size: 1 },\r\n // { x: 43.3812949640288, y: 2.47058823529412, size: 1 },\r\n // { x: 44.0287769784173, y: 2.98039215686275, size: 1 },\r\n // { x: 64.7482014388489, y: 4.07843137254902, size: 1 },\r\n // { x: 66.6906474820144, y: 4.11764705882353, size: 1 },\r\n // { x: 85.4676258992806, y: 3.01960784313725, size: 1 },\r\n // { x: 86.1151079136691, y: 3.05882352941176, size: 1 },\r\n // { x: 128.201438848921, y: 2.98039215686275, size: 1 },\r\n // { x: 128.848920863309, y: 2.62745098039216, size: 1 },\r\n // { x: 150.215827338129, y: 2.98039215686275, size: 1 },\r\n // { x: 150.863309352518, y: 3.05882352941176, size: 1 },\r\n // { x: 193.597122302158, y: 2.86274509803922, size: 1 },\r\n // { x: 209.784172661871, y: 4.19607843137255, size: 1 },\r\n // { x: 214.964028776978, y: 2.31372549019608, size: 1 },\r\n // { x: 215.611510791367, y: 2.35294117647059, size: 1 },\r\n // { x: 236.978417266187, y: 3.09803921568627, size: 1 },\r\n // { x: 240.215827338129, y: 3.17647058823529, size: 1 },\r\n // { x: 248.63309352518, y: 3.05882352941176, size: 1 },\r\n // { x: 258.345323741007, y: 2.66666666666667, size: 1 },\r\n // { x: 279.712230215827, y: 2.3921568627451, size: 1 },\r\n // { x: 280.359712230216, y: 2.58823529411765, size: 1 },\r\n // { x: 300.431654676259, y: 3.29411764705882, size: 1 },\r\n // { x: 301.079136690647, y: 2.3921568627451, size: 1 },\r\n // { x: 301.726618705036, y: 2.3921568627451, size: 1 },\r\n // { x: 339.280575539568, y: 4, size: 1 },\r\n // { x: 178.705035971223, y: 2.50980392156863, size: 1 },\r\n // { x: 179.352517985612, y: 2.90196078431373, size: 1 },\r\n // { x: 180.647482014388, y: 2.62745098039216, size: 1 },\r\n // { x: 244.10071942446, y: 2.86274509803922, size: 1 },\r\n // { x: 264.820143884892, y: 3.09803921568627, size: 1 },\r\n // { x: 266.115107913669, y: 3.01960784313725, size: 1 },\r\n // { x: 286.834532374101, y: 3.05882352941176, size: 1 },\r\n // { x: 287.482014388489, y: 2.90196078431373, size: 1 },\r\n // { x: 288.129496402878, y: 2.94117647058824, size: 1 },\r\n // { x: 310.143884892086, y: 2.90196078431373, size: 1 },\r\n // { x: 329.568345323741, y: 2.98039215686275, size: 1 },\r\n // { x: 330.215827338129, y: 2.86274509803922, size: 1 },\r\n // { x: 4.54054054054054, y: 3.96078431372549, size: 1 },\r\n // { x: 12.972972972973, y: 3.09803921568627, size: 1 },\r\n // { x: 13.6216216216216, y: 2.74509803921569, size: 1 },\r\n // { x: 14.9189189189189, y: 2.90196078431373, size: 1 },\r\n // { x: 32.4324324324324, y: 3.37254901960784, size: 1 },\r\n // { x: 34.3783783783784, y: 2.58823529411765, size: 1 },\r\n // { x: 35.027027027027, y: 2.70588235294118, size: 1 },\r\n // { x: 46.0540540540541, y: 3.29411764705882, size: 1 },\r\n // { x: 53.8378378378378, y: 3.2156862745098, size: 1 },\r\n // { x: 56.4324324324324, y: 3.05882352941176, size: 1 },\r\n // { x: 57.0810810810811, y: 3.05882352941176, size: 1 },\r\n // { x: 57.7297297297297, y: 2.94117647058824, size: 1 },\r\n // { x: 58.3783783783784, y: 3.05882352941176, size: 1 },\r\n // { x: 77.8378378378378, y: 3.09803921568627, size: 1 },\r\n // { x: 78.4864864864865, y: 3.05882352941176, size: 1 },\r\n // { x: 121.297297297297, y: 3.37254901960784, size: 1 },\r\n // { x: 123.243243243243, y: 3.37254901960784, size: 1 },\r\n // { x: 126.486486486486, y: 3.25490196078431, size: 1 },\r\n // { x: 127.135135135135, y: 3.17647058823529, size: 1 },\r\n // { x: 128.432432432432, y: 3.25490196078431, size: 1 },\r\n // { x: 129.081081081081, y: 3.17647058823529, size: 1 },\r\n // { x: 131.675675675676, y: 3.25490196078431, size: 1 },\r\n // { x: 132.324324324324, y: 3.25490196078431, size: 1 },\r\n // { x: 133.621621621622, y: 3.2156862745098, size: 1 },\r\n // { x: 134.27027027027, y: 3.29411764705882, size: 1 },\r\n // { x: 134.918918918919, y: 3.33333333333333, size: 1 },\r\n // { x: 135.567567567568, y: 3.13725490196078, size: 1 },\r\n // { x: 138.810810810811, y: 3.25490196078431, size: 1 },\r\n // { x: 139.459459459459, y: 3.29411764705882, size: 1 },\r\n // { x: 142.702702702703, y: 3.29411764705882, size: 1 },\r\n // { x: 144.648648648649, y: 3.01960784313725, size: 1 },\r\n // { x: 153.72972972973, y: 4.11764705882353, size: 1 },\r\n // { x: 208.864864864865, y: 3.13725490196078, size: 1 },\r\n // { x: 230.918918918919, y: 3.01960784313725, size: 1 },\r\n // { x: 251.027027027027, y: 2.62745098039216, size: 1 },\r\n // { x: 251.675675675676, y: 2.70588235294118, size: 1 },\r\n // { x: 252.972972972973, y: 3.01960784313725, size: 1 },\r\n // { x: 273.081081081081, y: 3.29411764705882, size: 1 },\r\n // { x: 296.432432432432, y: 4.03921568627451, size: 1 },\r\n // { x: 302.918918918919, y: 3.80392156862745, size: 1 },\r\n // { x: 306.162162162162, y: 3.92156862745098, size: 1 },\r\n // { x: 310.702702702703, y: 4.03921568627451, size: 1 },\r\n // { x: 316.540540540541, y: 3.37254901960784, size: 1 },\r\n // { x: 320.432432432432, y: 4.07843137254902, size: 1 },\r\n // { x: 326.27027027027, y: 4.07843137254902, size: 1 },\r\n // { x: 331.459459459459, y: 3.92156862745098, size: 1 },\r\n // { x: 335.351351351351, y: 3.92156862745098, size: 1 },\r\n // { x: 339.243243243243, y: 3.09803921568627, size: 1 },\r\n // { x: 358.702702702703, y: 3.2156862745098, size: 1 },\r\n // { x: 359.351351351351, y: 2.98039215686275, size: 1 },\r\n // { x: 42.7338129496403, y: 2.82352941176471, size: 1 },\r\n // { x: 86.1151079136691, y: 3.01960784313725, size: 1 },\r\n // { x: 132.086330935252, y: 3.96078431372549, size: 1 },\r\n // { x: 145.68345323741, y: 4.11764705882353, size: 1 },\r\n // { x: 171.58273381295, y: 2.90196078431373, size: 1 },\r\n // { x: 173.525179856115, y: 2.98039215686275, size: 1 },\r\n // { x: 194.892086330935, y: 3.01960784313725, size: 1 },\r\n // { x: 257.697841726619, y: 2.58823529411765, size: 1 },\r\n // { x: 258.345323741007, y: 2.3921568627451, size: 1 },\r\n // { x: 258.992805755396, y: 2.58823529411765, size: 1 },\r\n // { x: 259.640287769784, y: 2.74509803921569, size: 1 },\r\n // { x: 301.079136690647, y: 3.09803921568627, size: 1 },\r\n // { x: 301.726618705036, y: 3.33333333333333, size: 1 },\r\n // { x: 317.913669064748, y: 4.11764705882353, size: 1 },\r\n // { x: 323.741007194245, y: 2.86274509803922, size: 1 },\r\n // { x: 324.388489208633, y: 2.74509803921569, size: 1 },\r\n // { x: 49.8561151079137, y: 2.98039215686275, size: 1 },\r\n // { x: 51.1510791366906, y: 2.86274509803922, size: 1 },\r\n // { x: 70.5755395683453, y: 2.3921568627451, size: 1 },\r\n // { x: 71.2230215827338, y: 2.19607843137255, size: 1 },\r\n // { x: 71.8705035971223, y: 2.3921568627451, size: 1 },\r\n // { x: 72.5179856115108, y: 2.50980392156863, size: 1 },\r\n // { x: 104.244604316547, y: 4.07843137254902, size: 1 },\r\n // { x: 128.201438848921, y: 3.96078431372549, size: 1 },\r\n // { x: 178.705035971223, y: 2.74509803921569, size: 1 },\r\n // { x: 179.352517985612, y: 2.62745098039216, size: 1 },\r\n // { x: 180, y: 2.66666666666667, size: 1 },\r\n // { x: 180.647482014388, y: 2.3921568627451, size: 1 },\r\n // { x: 200.071942446043, y: 2.82352941176471, size: 1 },\r\n // { x: 213.021582733813, y: 4.03921568627451, size: 1 },\r\n // { x: 329.568345323741, y: 2.15686274509804, size: 1 },\r\n // { x: 330.215827338129, y: 2.11764705882353, size: 1 },\r\n // { x: 330.863309352518, y: 2.50980392156863, size: 1 },\r\n // { x: 331.510791366906, y: 2.7843137254902, size: 1 },\r\n // { x: 334.10071942446, y: 3.09803921568627, size: 1 },\r\n // { x: 338.63309352518, y: 2.90196078431373, size: 1 },\r\n // { x: 345.755395683453, y: 3.01960784313725, size: 1 },\r\n // { x: 348.345323741007, y: 3.25490196078431, size: 1 },\r\n // { x: 34.3783783783784, y: 2.86274509803922, size: 1 },\r\n // { x: 35.027027027027, y: 2.7843137254902, size: 1 },\r\n // { x: 55.1351351351351, y: 3.33333333333333, size: 1 },\r\n // { x: 55.7837837837838, y: 2.82352941176471, size: 1 },\r\n // { x: 56.4324324324324, y: 2.82352941176471, size: 1 },\r\n // { x: 77.8378378378378, y: 3.2156862745098, size: 1 },\r\n // { x: 86.2702702702703, y: 3.17647058823529, size: 1 },\r\n // { x: 90.8108108108108, y: 3.45098039215686, size: 1 },\r\n // { x: 99.2432432432432, y: 3.13725490196078, size: 1 },\r\n // { x: 120.648648648649, y: 2.86274509803922, size: 1 },\r\n // { x: 121.297297297297, y: 2.47058823529412, size: 1 },\r\n // { x: 164.108108108108, y: 2.7843137254902, size: 1 },\r\n // { x: 164.756756756757, y: 2.62745098039216, size: 1 },\r\n // { x: 185.513513513514, y: 2.66666666666667, size: 1 },\r\n // { x: 186.162162162162, y: 2.86274509803922, size: 1 },\r\n // { x: 191.351351351351, y: 3.37254901960784, size: 1 },\r\n // { x: 202.378378378378, y: 3.2156862745098, size: 1 },\r\n // { x: 206.918918918919, y: 2.98039215686275, size: 1 },\r\n // { x: 207.567567567568, y: 2.62745098039216, size: 1 },\r\n // { x: 228.324324324324, y: 3.2156862745098, size: 1 },\r\n // { x: 228.972972972973, y: 2.3921568627451, size: 1 },\r\n // { x: 229.621621621622, y: 2.47058823529412, size: 1 },\r\n // { x: 243.243243243243, y: 3.37254901960784, size: 1 },\r\n // { x: 251.027027027027, y: 2.98039215686275, size: 1 },\r\n // { x: 297.081081081081, y: 4, size: 1 },\r\n // { x: 299.675675675676, y: 3.88235294117647, size: 1 },\r\n // { x: 301.621621621622, y: 4.03921568627451, size: 1 },\r\n // { x: 302.918918918919, y: 3.96078431372549, size: 1 },\r\n // { x: 336, y: 3.2156862745098, size: 1 },\r\n // { x: 337.297297297297, y: 3.13725490196078, size: 1 },\r\n // { x: 338.594594594595, y: 3.17647058823529, size: 1 },\r\n // { x: 339.243243243243, y: 2.90196078431373, size: 1 },\r\n // { x: 349.621621621622, y: 3.2156862745098, size: 1 },\r\n // { x: 354.810810810811, y: 3.41176470588235, size: 1 },\r\n // { x: 358.702702702703, y: 3.05882352941176, size: 1 },\r\n // { x: 5.8273381294964, y: 3.05882352941176, size: 1 },\r\n // { x: 47.2661870503597, y: 4.03921568627451, size: 1 },\r\n // { x: 85.4676258992806, y: 3.09803921568627, size: 1 },\r\n // { x: 106.834532374101, y: 2.86274509803922, size: 1 },\r\n // { x: 128.848920863309, y: 3.01960784313725, size: 1 },\r\n // { x: 130.143884892086, y: 2.98039215686275, size: 1 },\r\n // { x: 157.985611510791, y: 4.07843137254902, size: 1 },\r\n // { x: 167.697841726619, y: 3.96078431372549, size: 1 },\r\n // { x: 192.94964028777, y: 3.01960784313725, size: 1 },\r\n // { x: 193.597122302158, y: 2.82352941176471, size: 1 },\r\n // { x: 215.611510791367, y: 3.05882352941176, size: 1 },\r\n // { x: 238.920863309353, y: 4.15686274509804, size: 1 },\r\n // { x: 246.043165467626, y: 4.11764705882353, size: 1 },\r\n // { x: 258.345323741007, y: 2.90196078431373, size: 1 },\r\n // { x: 280.359712230216, y: 3.17647058823529, size: 1 },\r\n // { x: 3.88489208633094, y: 3.17647058823529, size: 1 },\r\n // { x: 6.47482014388489, y: 2.90196078431373, size: 1 },\r\n // { x: 7.12230215827338, y: 2.98039215686275, size: 1 },\r\n // { x: 7.76978417266187, y: 3.01960784313725, size: 1 },\r\n // { x: 91.9424460431655, y: 2.58823529411765, size: 1 },\r\n // { x: 92.589928057554, y: 2.58823529411765, size: 1 },\r\n // { x: 93.2374100719424, y: 2.66666666666667, size: 1 },\r\n // { x: 93.8848920863309, y: 2.35294117647059, size: 1 },\r\n // { x: 159.928057553957, y: 4.03921568627451, size: 1 },\r\n // { x: 167.05035971223, y: 4.11764705882353, size: 1 },\r\n // { x: 178.057553956835, y: 2.90196078431373, size: 1 },\r\n // { x: 178.705035971223, y: 3.01960784313725, size: 1 },\r\n // { x: 201.36690647482, y: 2.86274509803922, size: 1 },\r\n // { x: 224.676258992806, y: 4.23529411764706, size: 1 },\r\n // { x: 236.978417266187, y: 4.07843137254902, size: 1 },\r\n // { x: 240.215827338129, y: 4.11764705882353, size: 1 },\r\n // { x: 285.539568345324, y: 3.2156862745098, size: 1 },\r\n // { x: 286.187050359712, y: 2.62745098039216, size: 1 },\r\n // { x: 286.834532374101, y: 2.54901960784314, size: 1 },\r\n // { x: 287.482014388489, y: 2.07843137254902, size: 1 },\r\n // { x: 288.129496402878, y: 2.19607843137255, size: 1 },\r\n // { x: 330.863309352518, y: 3.96078431372549, size: 1 },\r\n // { x: 345.755395683453, y: 4, size: 1 },\r\n // { x: 9.08108108108108, y: 3.88235294117647, size: 1 },\r\n // { x: 11.6756756756757, y: 3.88235294117647, size: 1 },\r\n // { x: 36.3243243243243, y: 3.84313725490196, size: 1 },\r\n // { x: 37.6216216216216, y: 4, size: 1 },\r\n // { x: 47.3513513513514, y: 3.84313725490196, size: 1 },\r\n // { x: 48, y: 3.96078431372549, size: 1 },\r\n // { x: 56.4324324324324, y: 3.13725490196078, size: 1 },\r\n // { x: 97.2972972972973, y: 4, size: 1 },\r\n // { x: 127.783783783784, y: 3.88235294117647, size: 1 },\r\n // { x: 134.918918918919, y: 4.07843137254902, size: 1 },\r\n // { x: 143.351351351351, y: 3.29411764705882, size: 1 },\r\n // { x: 144, y: 3.2156862745098, size: 1 },\r\n // { x: 165.405405405405, y: 2.94117647058824, size: 1 },\r\n // { x: 166.054054054054, y: 3.09803921568627, size: 1 },\r\n // { x: 169.945945945946, y: 3.88235294117647, size: 1 },\r\n // { x: 186.162162162162, y: 3.17647058823529, size: 1 },\r\n // { x: 186.810810810811, y: 2.62745098039216, size: 1 },\r\n // { x: 187.459459459459, y: 2.74509803921569, size: 1 },\r\n // { x: 206.918918918919, y: 3.29411764705882, size: 1 },\r\n // { x: 208.864864864865, y: 2.82352941176471, size: 1 },\r\n // { x: 249.72972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 250.378378378378, y: 2.15686274509804, size: 1 },\r\n // { x: 251.675675675676, y: 2.50980392156863, size: 1 },\r\n // { x: 252.324324324324, y: 2.23529411764706, size: 1 },\r\n // { x: 271.135135135135, y: 3.17647058823529, size: 1 },\r\n // { x: 271.783783783784, y: 2.86274509803922, size: 1 },\r\n // { x: 272.432432432432, y: 2.98039215686275, size: 1 },\r\n // { x: 276.324324324324, y: 4, size: 1 },\r\n // { x: 297.72972972973, y: 3.92156862745098, size: 1 },\r\n // { x: 300.324324324324, y: 3.96078431372549, size: 1 },\r\n // { x: 301.621621621622, y: 3.96078431372549, size: 1 },\r\n // { x: 307.459459459459, y: 4, size: 1 },\r\n // { x: 308.108108108108, y: 3.88235294117647, size: 1 },\r\n // { x: 310.054054054054, y: 4.11764705882353, size: 1 },\r\n // { x: 315.891891891892, y: 2.90196078431373, size: 1 },\r\n // { x: 337.945945945946, y: 3.2156862745098, size: 1 },\r\n // { x: 338.594594594595, y: 2.94117647058824, size: 1 },\r\n // { x: 347.027027027027, y: 3.96078431372549, size: 1 },\r\n // { x: 349.621621621622, y: 4, size: 1 },\r\n // { x: 356.108108108108, y: 3.96078431372549, size: 1 },\r\n // { x: 356.756756756757, y: 3.25490196078431, size: 1 },\r\n // { x: 357.405405405405, y: 3.37254901960784, size: 1 },\r\n // { x: 358.702702702703, y: 2.58823529411765, size: 1 },\r\n // { x: 20.0719424460432, y: 2.7843137254902, size: 1 },\r\n // { x: 59.568345323741, y: 4.07843137254902, size: 1 },\r\n // { x: 60.863309352518, y: 3.96078431372549, size: 1 },\r\n // { x: 75.1079136690647, y: 4.11764705882353, size: 1 },\r\n // { x: 85.4676258992806, y: 2.86274509803922, size: 1 },\r\n // { x: 150.215827338129, y: 3.09803921568627, size: 1 },\r\n // { x: 150.863309352518, y: 3.01960784313725, size: 1 },\r\n // { x: 214.31654676259, y: 2.82352941176471, size: 1 },\r\n // { x: 282.302158273381, y: 4.07843137254902, size: 1 },\r\n // { x: 286.834532374101, y: 3.92156862745098, size: 1 },\r\n // { x: 301.079136690647, y: 2.94117647058824, size: 1 },\r\n // { x: 326.978417266187, y: 4.11764705882353, size: 1 },\r\n // { x: 336.043165467626, y: 3.92156862745098, size: 1 },\r\n // { x: 341.223021582734, y: 4.03921568627451, size: 1 },\r\n // { x: 343.812949640288, y: 2.66666666666667, size: 1 },\r\n // { x: 30.431654676259, y: 3.2156862745098, size: 1 },\r\n // { x: 48.5611510791367, y: 2.11764705882353, size: 1 },\r\n // { x: 49.2086330935252, y: 2.07843137254902, size: 1 },\r\n // { x: 69.2805755395683, y: 3.13725490196078, size: 1 },\r\n // { x: 69.9280575539568, y: 2.27450980392157, size: 1 },\r\n // { x: 70.5755395683453, y: 1.68627450980392, size: 1 },\r\n // { x: 91.9424460431655, y: 2.03921568627451, size: 1 },\r\n // { x: 156.690647482014, y: 2.35294117647059, size: 1 },\r\n // { x: 180, y: 4.07843137254902, size: 1 },\r\n // { x: 202.014388489209, y: 4.27450980392157, size: 1 },\r\n // { x: 205.89928057554, y: 4.11764705882353, size: 1 },\r\n // { x: 206.546762589928, y: 4.11764705882353, size: 1 },\r\n // { x: 209.784172661871, y: 4.03921568627451, size: 1 },\r\n // { x: 214.964028776978, y: 4.11764705882353, size: 1 },\r\n // { x: 217.553956834532, y: 4.07843137254902, size: 1 },\r\n // { x: 230.503597122302, y: 4.07843137254902, size: 1 },\r\n // { x: 251.223021582734, y: 4.11764705882353, size: 1 },\r\n // { x: 253.165467625899, y: 4.11764705882353, size: 1 },\r\n // { x: 256.402877697842, y: 4.07843137254902, size: 1 },\r\n // { x: 274.532374100719, y: 3.96078431372549, size: 1 },\r\n // { x: 275.827338129496, y: 4.07843137254902, size: 1 },\r\n // { x: 303.669064748201, y: 3.17647058823529, size: 1 },\r\n // { x: 319.208633093525, y: 4.19607843137255, size: 1 },\r\n // { x: 328.920863309353, y: 2.98039215686275, size: 1 },\r\n // { x: 339.280575539568, y: 4.27450980392157, size: 1 },\r\n // { x: 356.762589928058, y: 4.07843137254902, size: 1 },\r\n // { x: 358.057553956835, y: 4.11764705882353, size: 1 },\r\n // { x: 2.59459459459459, y: 4.23529411764706, size: 1 },\r\n // { x: 3.24324324324324, y: 3.88235294117647, size: 1 },\r\n // { x: 3.89189189189189, y: 4.07843137254902, size: 1 },\r\n // { x: 5.83783783783784, y: 3.88235294117647, size: 1 },\r\n // { x: 6.48648648648649, y: 3.84313725490196, size: 1 },\r\n // { x: 7.78378378378378, y: 3.96078431372549, size: 1 },\r\n // { x: 8.43243243243243, y: 3.96078431372549, size: 1 },\r\n // { x: 9.08108108108108, y: 4.23529411764706, size: 1 },\r\n // { x: 12.3243243243243, y: 2.98039215686275, size: 1 },\r\n // { x: 19.4594594594595, y: 3.92156862745098, size: 1 },\r\n // { x: 20.7567567567568, y: 4, size: 1 },\r\n // { x: 23.3513513513514, y: 3.96078431372549, size: 1 },\r\n // { x: 28.5405405405405, y: 4.07843137254902, size: 1 },\r\n // { x: 33.7297297297297, y: 3.05882352941176, size: 1 },\r\n // { x: 34.3783783783784, y: 3.17647058823529, size: 1 },\r\n // { x: 49.9459459459459, y: 4, size: 1 },\r\n // { x: 55.7837837837838, y: 2.90196078431373, size: 1 },\r\n // { x: 56.4324324324324, y: 2.98039215686275, size: 1 },\r\n // { x: 57.0810810810811, y: 3.29411764705882, size: 1 },\r\n // { x: 77.1891891891892, y: 3.13725490196078, size: 1 },\r\n // { x: 82.3783783783784, y: 3.96078431372549, size: 1 },\r\n // { x: 83.027027027027, y: 3.96078431372549, size: 1 },\r\n // { x: 84.3243243243243, y: 4, size: 1 },\r\n // { x: 85.6216216216216, y: 3.96078431372549, size: 1 },\r\n // { x: 88.2162162162162, y: 4, size: 1 },\r\n // { x: 92.7567567567568, y: 3.88235294117647, size: 1 },\r\n // { x: 93.4054054054054, y: 3.96078431372549, size: 1 },\r\n // { x: 94.7027027027027, y: 3.96078431372549, size: 1 },\r\n // { x: 95.3513513513514, y: 3.92156862745098, size: 1 },\r\n // { x: 97.2972972972973, y: 4.07843137254902, size: 1 },\r\n // { x: 97.945945945946, y: 3.84313725490196, size: 1 },\r\n // { x: 105.081081081081, y: 4.03921568627451, size: 1 },\r\n // { x: 110.27027027027, y: 3.96078431372549, size: 1 },\r\n // { x: 111.567567567568, y: 4, size: 1 },\r\n // { x: 120.648648648649, y: 3.13725490196078, size: 1 },\r\n // { x: 121.945945945946, y: 2.98039215686275, size: 1 },\r\n // { x: 124.540540540541, y: 4.07843137254902, size: 1 },\r\n // { x: 132.972972972973, y: 3.25490196078431, size: 1 },\r\n // { x: 141.405405405405, y: 3.25490196078431, size: 1 },\r\n // { x: 142.054054054054, y: 2.90196078431373, size: 1 },\r\n // { x: 142.702702702703, y: 2.74509803921569, size: 1 },\r\n // { x: 143.351351351351, y: 2.7843137254902, size: 1 },\r\n // { x: 144, y: 3.09803921568627, size: 1 },\r\n // { x: 147.243243243243, y: 4.03921568627451, size: 1 },\r\n // { x: 165.405405405405, y: 3.84313725490196, size: 1 },\r\n // { x: 180.972972972973, y: 3.92156862745098, size: 1 },\r\n // { x: 182.918918918919, y: 3.84313725490196, size: 1 },\r\n // { x: 201.72972972973, y: 3.96078431372549, size: 1 },\r\n // { x: 210.162162162162, y: 4.03921568627451, size: 1 },\r\n // { x: 220.540540540541, y: 4.15686274509804, size: 1 },\r\n // { x: 228.972972972973, y: 2.94117647058824, size: 1 },\r\n // { x: 251.027027027027, y: 3.33333333333333, size: 1 },\r\n // { x: 260.108108108108, y: 4.11764705882353, size: 1 },\r\n // { x: 270.486486486487, y: 3.17647058823529, size: 1 },\r\n // { x: 271.135135135135, y: 3.05882352941176, size: 1 },\r\n // { x: 271.783783783784, y: 2.74509803921569, size: 1 },\r\n // { x: 272.432432432432, y: 3.01960784313725, size: 1 },\r\n // { x: 273.081081081081, y: 2.62745098039216, size: 1 },\r\n // { x: 273.72972972973, y: 2.86274509803922, size: 1 },\r\n // { x: 293.837837837838, y: 2.98039215686275, size: 1 },\r\n // { x: 295.135135135135, y: 3.09803921568627, size: 1 },\r\n // { x: 295.783783783784, y: 2.90196078431373, size: 1 },\r\n // { x: 299.027027027027, y: 3.37254901960784, size: 1 },\r\n // { x: 300.324324324324, y: 3.13725490196078, size: 1 },\r\n // { x: 300.972972972973, y: 3.33333333333333, size: 1 },\r\n // { x: 304.216216216216, y: 3.2156862745098, size: 1 },\r\n // { x: 306.162162162162, y: 3.29411764705882, size: 1 },\r\n // { x: 307.459459459459, y: 3.09803921568627, size: 1 },\r\n // { x: 310.702702702703, y: 3.09803921568627, size: 1 },\r\n // { x: 329.513513513513, y: 4, size: 1 },\r\n // { x: 332.756756756757, y: 4, size: 1 },\r\n // { x: 355.459459459459, y: 4, size: 1 },\r\n // { x: 62.8057553956835, y: 3.01960784313725, size: 1 },\r\n // { x: 63.4532374100719, y: 2.94117647058824, size: 1 },\r\n // { x: 106.187050359712, y: 3.13725490196078, size: 1 },\r\n // { x: 128.201438848921, y: 2.94117647058824, size: 1 },\r\n // { x: 160.575539568345, y: 4.07843137254902, size: 1 },\r\n // { x: 200.719424460432, y: 4.03921568627451, size: 1 },\r\n // { x: 255.755395683453, y: 3.13725490196078, size: 1 },\r\n // { x: 257.05035971223, y: 2.98039215686275, size: 1 },\r\n // { x: 321.798561151079, y: 2.82352941176471, size: 1 },\r\n // { x: 322.446043165468, y: 2.90196078431373, size: 1 },\r\n // { x: 323.093525179856, y: 2.82352941176471, size: 1 },\r\n // { x: 323.741007194245, y: 2.90196078431373, size: 1 },\r\n // { x: 332.158273381295, y: 4, size: 1 },\r\n // { x: 69.9280575539568, y: 2.7843137254902, size: 1 },\r\n // { x: 70.5755395683453, y: 2.58823529411765, size: 1 },\r\n // { x: 97.1223021582734, y: 3.37254901960784, size: 1 },\r\n // { x: 118.489208633094, y: 4.03921568627451, size: 1 },\r\n // { x: 156.690647482014, y: 3.17647058823529, size: 1 },\r\n // { x: 224.028776978417, y: 2.94117647058824, size: 1 },\r\n // { x: 235.035971223022, y: 3.13725490196078, size: 1 },\r\n // { x: 242.158273381295, y: 3.01960784313725, size: 1 },\r\n // { x: 242.805755395683, y: 2.98039215686275, size: 1 },\r\n // { x: 253.812949640288, y: 3.09803921568627, size: 1 },\r\n // { x: 256.402877697842, y: 3.09803921568627, size: 1 },\r\n // { x: 260.287769784173, y: 3.17647058823529, size: 1 },\r\n // { x: 287.482014388489, y: 4.07843137254902, size: 1 },\r\n // { x: 307.553956834532, y: 3.05882352941176, size: 1 },\r\n // { x: 33.6690647482014, y: 2.86274509803922, size: 1 },\r\n // { x: 93.8848920863309, y: 4.03921568627451, size: 1 },\r\n // { x: 120.431654676259, y: 2.7843137254902, size: 1 },\r\n // { x: 152.805755395683, y: 3.17647058823529, size: 1 },\r\n // { x: 184.532374100719, y: 2.07843137254902, size: 1 },\r\n // { x: 185.179856115108, y: 1.33333333333333, size: 1 },\r\n // { x: 185.827338129496, y: 1.68627450980392, size: 1 },\r\n // { x: 186.474820143885, y: 1.05882352941176, size: 1 },\r\n // { x: 187.122302158273, y: 2.54901960784314, size: 1 },\r\n // { x: 189.712230215827, y: 2.82352941176471, size: 1 },\r\n // { x: 194.244604316547, y: 2.90196078431373, size: 1 },\r\n // { x: 202.014388489209, y: 3.05882352941176, size: 1 },\r\n // { x: 203.956834532374, y: 3.05882352941176, size: 1 },\r\n // { x: 205.251798561151, y: 3.09803921568627, size: 1 },\r\n // { x: 205.89928057554, y: 2.94117647058824, size: 1 },\r\n // { x: 206.546762589928, y: 2.03921568627451, size: 1 },\r\n // { x: 207.194244604317, y: 1.88235294117647, size: 1 },\r\n // { x: 207.841726618705, y: 1.76470588235294, size: 1 },\r\n // { x: 208.489208633094, y: 1.88235294117647, size: 1 },\r\n // { x: 228.561151079137, y: 3.09803921568627, size: 1 },\r\n // { x: 249.280575539568, y: 2.82352941176471, size: 1 },\r\n // { x: 249.928057553957, y: 2.66666666666667, size: 1 },\r\n // { x: 271.294964028777, y: 2.58823529411765, size: 1 },\r\n // { x: 310.791366906475, y: 3.17647058823529, size: 1 },\r\n // { x: 357.410071942446, y: 2.43137254901961, size: 1 },\r\n // { x: 358.057553956835, y: 2.70588235294118, size: 1 },\r\n // { x: 18.8108108108108, y: 2.94117647058824, size: 1 },\r\n // { x: 19.4594594594595, y: 2.11764705882353, size: 1 },\r\n // { x: 20.1081081081081, y: 2.86274509803922, size: 1 },\r\n // { x: 20.7567567567568, y: 3.25490196078431, size: 1 },\r\n // { x: 23.3513513513514, y: 3.25490196078431, size: 1 },\r\n // { x: 25.9459459459459, y: 3.2156862745098, size: 1 },\r\n // { x: 26.5945945945946, y: 3.13725490196078, size: 1 },\r\n // { x: 29.8378378378378, y: 3.29411764705882, size: 1 },\r\n // { x: 35.6756756756757, y: 3.25490196078431, size: 1 },\r\n // { x: 36.972972972973, y: 3.09803921568627, size: 1 },\r\n // { x: 38.2702702702703, y: 3.25490196078431, size: 1 },\r\n // { x: 39.5675675675676, y: 3.01960784313725, size: 1 },\r\n // { x: 40.8648648648649, y: 2.70588235294118, size: 1 },\r\n // { x: 61.6216216216216, y: 3.01960784313725, size: 1 },\r\n // { x: 62.2702702702703, y: 2.50980392156863, size: 1 },\r\n // { x: 62.9189189189189, y: 2.58823529411765, size: 1 },\r\n // { x: 83.027027027027, y: 3.2156862745098, size: 1 },\r\n // { x: 83.6756756756757, y: 2.58823529411765, size: 1 },\r\n // { x: 84.3243243243243, y: 1.37254901960784, size: 1 },\r\n // { x: 98.5945945945946, y: 3.96078431372549, size: 1 },\r\n // { x: 131.675675675676, y: 3.96078431372549, size: 1 },\r\n // { x: 133.621621621622, y: 3.96078431372549, size: 1 },\r\n // { x: 141.405405405405, y: 3.92156862745098, size: 1 },\r\n // { x: 142.054054054054, y: 3.96078431372549, size: 1 },\r\n // { x: 144, y: 3.92156862745098, size: 1 },\r\n // { x: 145.297297297297, y: 3.96078431372549, size: 1 },\r\n // { x: 155.675675675676, y: 3.33333333333333, size: 1 },\r\n // { x: 192, y: 3.13725490196078, size: 1 },\r\n // { x: 192.648648648649, y: 2.90196078431373, size: 1 },\r\n // { x: 193.297297297297, y: 2.98039215686275, size: 1 },\r\n // { x: 193.945945945946, y: 2.90196078431373, size: 1 },\r\n // { x: 214.054054054054, y: 2.94117647058824, size: 1 },\r\n // { x: 214.702702702703, y: 3.01960784313725, size: 1 },\r\n // { x: 217.945945945946, y: 3.92156862745098, size: 1 },\r\n // { x: 233.513513513514, y: 3.05882352941176, size: 1 },\r\n // { x: 234.810810810811, y: 3.13725490196078, size: 1 },\r\n // { x: 235.459459459459, y: 3.13725490196078, size: 1 },\r\n // { x: 236.108108108108, y: 2.70588235294118, size: 1 },\r\n // { x: 236.756756756757, y: 2.7843137254902, size: 1 },\r\n // { x: 237.405405405405, y: 2.86274509803922, size: 1 },\r\n // { x: 245.189189189189, y: 3.96078431372549, size: 1 },\r\n // { x: 257.513513513513, y: 2.98039215686275, size: 1 },\r\n // { x: 258.162162162162, y: 3.13725490196078, size: 1 },\r\n // { x: 277.621621621622, y: 3.2156862745098, size: 1 },\r\n // { x: 279.567567567568, y: 3.09803921568627, size: 1 },\r\n // { x: 280.216216216216, y: 2.98039215686275, size: 1 },\r\n // { x: 320.432432432432, y: 3.25490196078431, size: 1 },\r\n // { x: 323.027027027027, y: 2.7843137254902, size: 1 },\r\n // { x: 323.675675675676, y: 2.58823529411765, size: 1 },\r\n // { x: 343.135135135135, y: 3.01960784313725, size: 1 },\r\n // { x: 343.783783783784, y: 2.90196078431373, size: 1 },\r\n // { x: 344.432432432432, y: 3.2156862745098, size: 1 },\r\n // { x: 345.081081081081, y: 3.05882352941176, size: 1 },\r\n // { x: 351.567567567568, y: 4.11764705882353, size: 1 },\r\n // { x: 5.17985611510791, y: 3.25490196078431, size: 1 },\r\n // { x: 68.6330935251799, y: 3.17647058823529, size: 1 },\r\n // { x: 69.9280575539568, y: 2.70588235294118, size: 1 },\r\n // { x: 70.5755395683453, y: 2.50980392156863, size: 1 },\r\n // { x: 71.2230215827338, y: 2.7843137254902, size: 1 },\r\n // { x: 71.8705035971223, y: 2.66666666666667, size: 1 },\r\n // { x: 91.294964028777, y: 2.90196078431373, size: 1 },\r\n // { x: 91.9424460431655, y: 3.01960784313725, size: 1 },\r\n // { x: 157.985611510791, y: 2.98039215686275, size: 1 },\r\n // { x: 198.776978417266, y: 2.98039215686275, size: 1 },\r\n // { x: 200.071942446043, y: 2.62745098039216, size: 1 },\r\n // { x: 200.719424460432, y: 2.62745098039216, size: 1 },\r\n // { x: 201.36690647482, y: 2.35294117647059, size: 1 },\r\n // { x: 222.73381294964, y: 2.94117647058824, size: 1 },\r\n // { x: 255.107913669065, y: 3.13725490196078, size: 1 },\r\n // { x: 290.719424460432, y: 4.03921568627451, size: 1 },\r\n // { x: 305.611510791367, y: 3.17647058823529, size: 1 },\r\n // { x: 307.553956834532, y: 2.74509803921569, size: 1 },\r\n // { x: 308.201438848921, y: 2.47058823529412, size: 1 },\r\n // { x: 308.848920863309, y: 2.50980392156863, size: 1 },\r\n // { x: 309.496402877698, y: 3.13725490196078, size: 1 },\r\n // { x: 328.920863309353, y: 2.70588235294118, size: 1 },\r\n // { x: 329.568345323741, y: 2.86274509803922, size: 1 },\r\n // { x: 330.215827338129, y: 3.05882352941176, size: 1 },\r\n // { x: 330.863309352518, y: 2.94117647058824, size: 1 },\r\n // { x: 351.58273381295, y: 3.25490196078431, size: 1 },\r\n // { x: 35.6115107913669, y: 2.90196078431373, size: 1 },\r\n // { x: 121.079136690647, y: 2.90196078431373, size: 1 },\r\n // { x: 141.151079136691, y: 2.82352941176471, size: 1 },\r\n // { x: 142.446043165468, y: 2.86274509803922, size: 1 },\r\n // { x: 143.093525179856, y: 2.90196078431373, size: 1 },\r\n // { x: 162.517985611511, y: 3.05882352941176, size: 1 },\r\n // { x: 163.165467625899, y: 2.35294117647059, size: 1 },\r\n // { x: 164.460431654676, y: 2.35294117647059, size: 1 },\r\n // { x: 228.561151079137, y: 2.86274509803922, size: 1 },\r\n // { x: 229.208633093525, y: 2.58823529411765, size: 1 },\r\n // { x: 229.856115107914, y: 2.94117647058824, size: 1 },\r\n // { x: 249.928057553957, y: 2.58823529411765, size: 1 },\r\n // { x: 250.575539568345, y: 2.74509803921569, size: 1 },\r\n // { x: 251.223021582734, y: 2.43137254901961, size: 1 },\r\n // { x: 271.294964028777, y: 3.13725490196078, size: 1 },\r\n // { x: 20.1081081081081, y: 3.17647058823529, size: 1 },\r\n // { x: 20.7567567567568, y: 3.13725490196078, size: 1 },\r\n // { x: 83.6756756756757, y: 3.05882352941176, size: 1 },\r\n // { x: 84.3243243243243, y: 3.01960784313725, size: 1 },\r\n // { x: 84.972972972973, y: 3.01960784313725, size: 1 },\r\n // { x: 105.081081081081, y: 3.09803921568627, size: 1 },\r\n // { x: 106.378378378378, y: 3.2156862745098, size: 1 },\r\n // { x: 129.081081081081, y: 3.2156862745098, size: 1 },\r\n // { x: 157.621621621622, y: 3.41176470588235, size: 1 },\r\n // { x: 170.594594594595, y: 3.17647058823529, size: 1 },\r\n // { x: 171.243243243243, y: 3.2156862745098, size: 1 },\r\n // { x: 171.891891891892, y: 3.25490196078431, size: 1 },\r\n // { x: 172.540540540541, y: 3.29411764705882, size: 1 },\r\n // { x: 190.702702702703, y: 3.33333333333333, size: 1 },\r\n // { x: 193.945945945946, y: 2.86274509803922, size: 1 },\r\n // { x: 213.405405405405, y: 2.62745098039216, size: 1 },\r\n // { x: 214.054054054054, y: 2.74509803921569, size: 1 },\r\n // { x: 214.702702702703, y: 2.98039215686275, size: 1 },\r\n // { x: 215.351351351351, y: 2.86274509803922, size: 1 },\r\n // { x: 236.108108108108, y: 3.2156862745098, size: 1 },\r\n // { x: 265.945945945946, y: 3.84313725490196, size: 1 },\r\n // { x: 298.378378378378, y: 3.25490196078431, size: 1 },\r\n // { x: 299.675675675676, y: 3.01960784313725, size: 1 },\r\n // { x: 300.324324324324, y: 2.7843137254902, size: 1 },\r\n // { x: 300.972972972973, y: 2.62745098039216, size: 1 },\r\n // { x: 301.621621621622, y: 2.62745098039216, size: 1 },\r\n // { x: 321.72972972973, y: 3.17647058823529, size: 1 },\r\n // { x: 323.675675675676, y: 3.09803921568627, size: 1 },\r\n // { x: 343.135135135135, y: 3.25490196078431, size: 1 },\r\n // { x: 344.432432432432, y: 3.17647058823529, size: 1 },\r\n // { x: 26.5467625899281, y: 2.62745098039216, size: 1 },\r\n // { x: 27.841726618705, y: 2.31372549019608, size: 1 },\r\n // { x: 28.4892086330935, y: 2.15686274509804, size: 1 },\r\n // { x: 49.2086330935252, y: 4.07843137254902, size: 1 },\r\n // { x: 57.6258992805755, y: 3.96078431372549, size: 1 },\r\n // { x: 62.158273381295, y: 4.07843137254902, size: 1 },\r\n // { x: 63.4532374100719, y: 4.07843137254902, size: 1 },\r\n // { x: 64.7482014388489, y: 4.11764705882353, size: 1 },\r\n // { x: 91.9424460431655, y: 2.86274509803922, size: 1 },\r\n // { x: 92.589928057554, y: 2.70588235294118, size: 1 },\r\n // { x: 93.2374100719424, y: 2.94117647058824, size: 1 },\r\n // { x: 112.661870503597, y: 2.43137254901961, size: 1 },\r\n // { x: 113.309352517986, y: 2.47058823529412, size: 1 },\r\n // { x: 134.676258992806, y: 2.82352941176471, size: 1 },\r\n // { x: 156.043165467626, y: 2.70588235294118, size: 1 },\r\n // { x: 177.410071942446, y: 2.98039215686275, size: 1 },\r\n // { x: 178.057553956835, y: 2.66666666666667, size: 1 },\r\n // { x: 198.776978417266, y: 2.35294117647059, size: 1 },\r\n // { x: 199.424460431655, y: 2.19607843137255, size: 1 },\r\n // { x: 200.719424460432, y: 3.09803921568627, size: 1 },\r\n // { x: 205.89928057554, y: 3.09803921568627, size: 1 },\r\n // { x: 206.546762589928, y: 2.94117647058824, size: 1 },\r\n // { x: 211.079136690647, y: 3.13725490196078, size: 1 },\r\n // { x: 212.374100719424, y: 3.25490196078431, size: 1 },\r\n // { x: 220.791366906475, y: 2.86274509803922, size: 1 },\r\n // { x: 242.158273381295, y: 2, size: 1 },\r\n // { x: 242.805755395683, y: 1.88235294117647, size: 1 },\r\n // { x: 263.525179856115, y: 2.90196078431373, size: 1 },\r\n // { x: 264.172661870504, y: 2.54901960784314, size: 1 },\r\n // { x: 306.906474820144, y: 1.72549019607843, size: 1 },\r\n // { x: 307.553956834532, y: 2.11764705882353, size: 1 },\r\n // { x: 328.273381294964, y: 2.3921568627451, size: 1 },\r\n // { x: 328.920863309353, y: 2.07843137254902, size: 1 },\r\n // { x: 350.287769784173, y: 2.47058823529412, size: 1 },\r\n // { x: 163.165467625899, y: 3.13725490196078, size: 1 },\r\n // { x: 207.194244604317, y: 2.90196078431373, size: 1 },\r\n // { x: 207.841726618705, y: 3.01960784313725, size: 1 },\r\n // { x: 336.690647482014, y: 3.01960784313725, size: 1 },\r\n // { x: 337.338129496403, y: 2.70588235294118, size: 1 },\r\n // { x: 357.410071942446, y: 2.74509803921569, size: 1 },\r\n // { x: 17.4820143884892, y: 3.17647058823529, size: 1 },\r\n // { x: 83.5251798561151, y: 3.13725490196078, size: 1 },\r\n // { x: 104.892086330935, y: 2.90196078431373, size: 1 },\r\n // { x: 113.956834532374, y: 3.25490196078431, size: 1 },\r\n // { x: 126.258992805755, y: 2.43137254901961, size: 1 },\r\n // { x: 126.906474820144, y: 2.62745098039216, size: 1 },\r\n // { x: 127.553956834532, y: 2.54901960784314, size: 1 },\r\n // { x: 128.201438848921, y: 2.43137254901961, size: 1 },\r\n // { x: 171.58273381295, y: 3.01960784313725, size: 1 },\r\n // { x: 191.654676258993, y: 2.90196078431373, size: 1 },\r\n // { x: 192.302158273381, y: 2.62745098039216, size: 1 },\r\n // { x: 192.94964028777, y: 2.74509803921569, size: 1 },\r\n // { x: 213.021582733813, y: 2.70588235294118, size: 1 },\r\n // { x: 234.388489208633, y: 2.94117647058824, size: 1 },\r\n // { x: 235.035971223022, y: 2.7843137254902, size: 1 },\r\n // { x: 255.107913669065, y: 3.17647058823529, size: 1 },\r\n // { x: 258.345323741007, y: 3.01960784313725, size: 1 },\r\n // { x: 279.064748201439, y: 2.7843137254902, size: 1 },\r\n // { x: 340.575539568345, y: 3.09803921568627, size: 1 },\r\n // { x: 342.517985611511, y: 2.31372549019608, size: 1 },\r\n // { x: 343.165467625899, y: 2.35294117647059, size: 1 },\r\n // { x: 343.812949640288, y: 2.23529411764706, size: 1 },\r\n // { x: 344.460431654676, y: 2.15686274509804, size: 1 },\r\n // { x: 3.89189189189189, y: 3.09803921568627, size: 1 },\r\n // { x: 4.54054054054054, y: 3.2156862745098, size: 1 },\r\n // { x: 5.83783783783784, y: 3.01960784313725, size: 1 },\r\n // { x: 8.43243243243243, y: 3.29411764705882, size: 1 },\r\n // { x: 9.08108108108108, y: 3.25490196078431, size: 1 },\r\n // { x: 10.3783783783784, y: 3.13725490196078, size: 1 },\r\n // { x: 16.8648648648649, y: 3.25490196078431, size: 1 },\r\n // { x: 25.9459459459459, y: 3.17647058823529, size: 1 },\r\n // { x: 27.2432432432432, y: 3.01960784313725, size: 1 },\r\n // { x: 27.8918918918919, y: 2.82352941176471, size: 1 },\r\n // { x: 37.6216216216216, y: 3.25490196078431, size: 1 },\r\n // { x: 44.1081081081081, y: 3.29411764705882, size: 1 },\r\n // { x: 47.3513513513514, y: 3.2156862745098, size: 1 },\r\n // { x: 48.6486486486486, y: 3.33333333333333, size: 1 },\r\n // { x: 60.972972972973, y: 3.2156862745098, size: 1 },\r\n // { x: 81.7297297297297, y: 3.33333333333333, size: 1 },\r\n // { x: 90.1621621621622, y: 3.25490196078431, size: 1 },\r\n // { x: 92.1081081081081, y: 2.94117647058824, size: 1 },\r\n // { x: 110.918918918919, y: 3.13725490196078, size: 1 },\r\n // { x: 112.216216216216, y: 2.35294117647059, size: 1 },\r\n // { x: 112.864864864865, y: 2.62745098039216, size: 1 },\r\n // { x: 113.513513513514, y: 2.58823529411765, size: 1 },\r\n // { x: 114.162162162162, y: 2.66666666666667, size: 1 },\r\n // { x: 120.648648648649, y: 3.25490196078431, size: 1 },\r\n // { x: 133.621621621622, y: 3.05882352941176, size: 1 },\r\n // { x: 134.27027027027, y: 2.94117647058824, size: 1 },\r\n // { x: 134.918918918919, y: 2.94117647058824, size: 1 },\r\n // { x: 219.243243243243, y: 3.17647058823529, size: 1 },\r\n // { x: 220.540540540541, y: 3.2156862745098, size: 1 },\r\n // { x: 229.621621621622, y: 3.41176470588235, size: 1 },\r\n // { x: 233.513513513514, y: 3.2156862745098, size: 1 },\r\n // { x: 241.945945945946, y: 3.01960784313725, size: 1 },\r\n // { x: 285.405405405405, y: 2.98039215686275, size: 1 },\r\n // { x: 288, y: 3.37254901960784, size: 1 },\r\n // { x: 302.27027027027, y: 3.09803921568627, size: 1 },\r\n // { x: 306.810810810811, y: 2.82352941176471, size: 1 },\r\n // { x: 308.108108108108, y: 2.82352941176471, size: 1 },\r\n // { x: 308.756756756757, y: 3.2156862745098, size: 1 },\r\n // { x: 326.27027027027, y: 3.13725490196078, size: 1 },\r\n // { x: 326.918918918919, y: 3.17647058823529, size: 1 },\r\n // { x: 328.216216216216, y: 2.90196078431373, size: 1 },\r\n // { x: 328.864864864865, y: 3.05882352941176, size: 1 },\r\n // { x: 329.513513513513, y: 2.90196078431373, size: 1 },\r\n // { x: 348.324324324324, y: 3.25490196078431, size: 1 },\r\n // { x: 350.27027027027, y: 3.09803921568627, size: 1 },\r\n // { x: 12.9496402877698, y: 3.13725490196078, size: 1 },\r\n // { x: 33.0215827338129, y: 3.01960784313725, size: 1 },\r\n // { x: 33.6690647482014, y: 3.13725490196078, size: 1 },\r\n // { x: 34.3165467625899, y: 2.94117647058824, size: 1 },\r\n // { x: 44.0287769784173, y: 3.13725490196078, size: 1 },\r\n // { x: 46.6187050359712, y: 2.98039215686275, size: 1 },\r\n // { x: 54.3884892086331, y: 2.90196078431373, size: 1 },\r\n // { x: 55.0359712230216, y: 2.62745098039216, size: 1 },\r\n // { x: 55.6834532374101, y: 3.05882352941176, size: 1 },\r\n // { x: 60.863309352518, y: 3.17647058823529, size: 1 },\r\n // { x: 75.1079136690647, y: 2.98039215686275, size: 1 },\r\n // { x: 76.4028776978417, y: 3.01960784313725, size: 1 },\r\n // { x: 77.0503597122302, y: 2.82352941176471, size: 1 },\r\n // { x: 142.446043165468, y: 2.94117647058824, size: 1 },\r\n // { x: 163.165467625899, y: 3.2156862745098, size: 1 },\r\n // { x: 194.892086330935, y: 3.2156862745098, size: 1 },\r\n // { x: 207.841726618705, y: 2.98039215686275, size: 1 },\r\n // { x: 271.942446043165, y: 2.98039215686275, size: 1 },\r\n // { x: 314.676258992806, y: 2.98039215686275, size: 1 },\r\n // { x: 315.323741007194, y: 2.98039215686275, size: 1 },\r\n // { x: 40.1438848920863, y: 2.15686274509804, size: 1 },\r\n // { x: 40.7913669064748, y: 2.50980392156863, size: 1 },\r\n // { x: 42.0863309352518, y: 2.47058823529412, size: 1 },\r\n // { x: 45.3237410071942, y: 3.01960784313725, size: 1 },\r\n // { x: 49.2086330935252, y: 2.74509803921569, size: 1 },\r\n // { x: 55.6834532374101, y: 2.70588235294118, size: 1 },\r\n // { x: 56.9784172661871, y: 3.01960784313725, size: 1 },\r\n // { x: 61.5107913669065, y: 2.15686274509804, size: 1 },\r\n // { x: 62.158273381295, y: 2.03921568627451, size: 1 },\r\n // { x: 82.8776978417266, y: 3.13725490196078, size: 1 },\r\n // { x: 83.5251798561151, y: 2.98039215686275, size: 1 },\r\n // { x: 117.841726618705, y: 4.03921568627451, size: 1 },\r\n // { x: 125.611510791367, y: 3.13725490196078, size: 1 },\r\n // { x: 126.258992805755, y: 2.7843137254902, size: 1 },\r\n // { x: 169.640287769784, y: 2.15686274509804, size: 1 },\r\n // { x: 170.287769784173, y: 2.94117647058824, size: 1 },\r\n // { x: 191.007194244604, y: 2.86274509803922, size: 1 },\r\n // { x: 212.374100719424, y: 2.58823529411765, size: 1 },\r\n // { x: 213.021582733813, y: 2.3921568627451, size: 1 },\r\n // { x: 229.856115107914, y: 3.17647058823529, size: 1 },\r\n // { x: 233.093525179856, y: 2.98039215686275, size: 1 },\r\n // { x: 234.388489208633, y: 2.3921568627451, size: 1 },\r\n // { x: 255.107913669065, y: 2.86274509803922, size: 1 },\r\n // { x: 255.755395683453, y: 2, size: 1 },\r\n // { x: 256.402877697842, y: 1.96078431372549, size: 1 },\r\n // { x: 277.122302158273, y: 2.7843137254902, size: 1 },\r\n // { x: 277.769784172662, y: 2.86274509803922, size: 1 },\r\n // { x: 297.841726618705, y: 2.94117647058824, size: 1 },\r\n // { x: 299.136690647482, y: 2.03921568627451, size: 1 },\r\n // { x: 47.3513513513514, y: 3.13725490196078, size: 1 },\r\n // { x: 68.7567567567568, y: 2.94117647058824, size: 1 },\r\n // { x: 70.7027027027027, y: 3.2156862745098, size: 1 },\r\n // { x: 72.6486486486486, y: 3.41176470588235, size: 1 },\r\n // { x: 111.567567567568, y: 2.82352941176471, size: 1 },\r\n // { x: 112.216216216216, y: 3.09803921568627, size: 1 },\r\n // { x: 113.513513513514, y: 3.05882352941176, size: 1 },\r\n // { x: 131.675675675676, y: 3.17647058823529, size: 1 },\r\n // { x: 135.567567567568, y: 2.82352941176471, size: 1 },\r\n // { x: 145.945945945946, y: 3.29411764705882, size: 1 },\r\n // { x: 155.027027027027, y: 3.09803921568627, size: 1 },\r\n // { x: 155.675675675676, y: 2.94117647058824, size: 1 },\r\n // { x: 156.324324324324, y: 2.82352941176471, size: 1 },\r\n // { x: 156.972972972973, y: 3.01960784313725, size: 1 },\r\n // { x: 175.783783783784, y: 3.25490196078431, size: 1 },\r\n // { x: 196.540540540541, y: 3.29411764705882, size: 1 },\r\n // { x: 197.189189189189, y: 3.29411764705882, size: 1 },\r\n // { x: 198.486486486486, y: 3.09803921568627, size: 1 },\r\n // { x: 199.135135135135, y: 2.82352941176471, size: 1 },\r\n // { x: 199.783783783784, y: 2.82352941176471, size: 1 },\r\n // { x: 200.432432432432, y: 2.54901960784314, size: 1 },\r\n // { x: 202.378378378378, y: 3.41176470588235, size: 1 },\r\n // { x: 211.459459459459, y: 3.33333333333333, size: 1 },\r\n // { x: 221.189189189189, y: 3.25490196078431, size: 1 },\r\n // { x: 233.513513513514, y: 3.25490196078431, size: 1 },\r\n // { x: 262.702702702703, y: 3.05882352941176, size: 1 },\r\n // { x: 263.351351351351, y: 2.7843137254902, size: 1 },\r\n // { x: 264, y: 2.82352941176471, size: 1 },\r\n // { x: 264.648648648649, y: 2.90196078431373, size: 1 },\r\n // { x: 265.297297297297, y: 2.86274509803922, size: 1 },\r\n // { x: 283.459459459459, y: 3.09803921568627, size: 1 },\r\n // { x: 284.108108108108, y: 3.13725490196078, size: 1 },\r\n // { x: 284.756756756757, y: 2.70588235294118, size: 1 },\r\n // { x: 286.054054054054, y: 2.7843137254902, size: 1 },\r\n // { x: 290.594594594595, y: 3.37254901960784, size: 1 },\r\n // { x: 21.3669064748201, y: 4.07843137254902, size: 1 },\r\n // { x: 33.0215827338129, y: 2.58823529411765, size: 1 },\r\n // { x: 33.6690647482014, y: 2.62745098039216, size: 1 },\r\n // { x: 34.9640287769784, y: 2.94117647058824, size: 1 },\r\n // { x: 54.3884892086331, y: 2.7843137254902, size: 1 },\r\n // { x: 55.0359712230216, y: 2.66666666666667, size: 1 },\r\n // { x: 55.6834532374101, y: 2.74509803921569, size: 1 },\r\n // { x: 56.3309352517986, y: 2.70588235294118, size: 1 },\r\n // { x: 76.4028776978417, y: 3.17647058823529, size: 1 },\r\n // { x: 77.0503597122302, y: 3.13725490196078, size: 1 },\r\n // { x: 97.7697841726619, y: 2.90196078431373, size: 1 },\r\n // { x: 151.510791366906, y: 3.17647058823529, size: 1 },\r\n // { x: 183.884892086331, y: 2.82352941176471, size: 1 },\r\n // { x: 205.251798561151, y: 3.01960784313725, size: 1 },\r\n // { x: 205.89928057554, y: 2.66666666666667, size: 1 },\r\n // { x: 206.546762589928, y: 2.82352941176471, size: 1 },\r\n // { x: 207.194244604317, y: 2.58823529411765, size: 1 },\r\n // { x: 227.26618705036, y: 2.82352941176471, size: 1 },\r\n // { x: 227.913669064748, y: 2.86274509803922, size: 1 },\r\n // { x: 229.208633093525, y: 2.74509803921569, size: 1 },\r\n // { x: 248.63309352518, y: 2.27450980392157, size: 1 },\r\n // { x: 249.280575539568, y: 2.31372549019608, size: 1 },\r\n // { x: 314.028776978417, y: 3.01960784313725, size: 1 },\r\n // { x: 19.4244604316547, y: 3.01960784313725, size: 1 },\r\n // { x: 34.9640287769784, y: 4.03921568627451, size: 1 },\r\n // { x: 39.4964028776978, y: 2.47058823529412, size: 1 },\r\n // { x: 40.1438848920863, y: 2.07843137254902, size: 1 },\r\n // { x: 40.7913669064748, y: 2.54901960784314, size: 1 },\r\n // { x: 41.4388489208633, y: 2.58823529411765, size: 1 },\r\n // { x: 104.892086330935, y: 2.7843137254902, size: 1 },\r\n // { x: 126.258992805755, y: 2.86274509803922, size: 1 },\r\n // { x: 126.906474820144, y: 3.09803921568627, size: 1 },\r\n // { x: 127.553956834532, y: 2.66666666666667, size: 1 },\r\n // { x: 205.251798561151, y: 4.11764705882353, size: 1 },\r\n // { x: 213.021582733813, y: 2.82352941176471, size: 1 },\r\n // { x: 213.669064748201, y: 2.82352941176471, size: 1 },\r\n // { x: 214.964028776978, y: 3.13725490196078, size: 1 },\r\n // { x: 345.107913669065, y: 4.11764705882353, size: 1 },\r\n // { x: 1.94594594594595, y: 3.2156862745098, size: 1 },\r\n // { x: 2.59459459459459, y: 3.2156862745098, size: 1 },\r\n // { x: 3.24324324324324, y: 3.25490196078431, size: 1 },\r\n // { x: 11.6756756756757, y: 4.03921568627451, size: 1 },\r\n // { x: 16.8648648648649, y: 4.03921568627451, size: 1 },\r\n // { x: 19.4594594594595, y: 3.84313725490196, size: 1 },\r\n // { x: 24.6486486486486, y: 3.09803921568627, size: 1 },\r\n // { x: 25.2972972972973, y: 2.82352941176471, size: 1 },\r\n // { x: 25.9459459459459, y: 3.05882352941176, size: 1 },\r\n // { x: 26.5945945945946, y: 2.66666666666667, size: 1 },\r\n // { x: 27.2432432432432, y: 2.7843137254902, size: 1 },\r\n // { x: 46.7027027027027, y: 3.88235294117647, size: 1 },\r\n // { x: 70.7027027027027, y: 3.29411764705882, size: 1 },\r\n // { x: 88.2162162162162, y: 3.2156862745098, size: 1 },\r\n // { x: 89.5135135135135, y: 2.98039215686275, size: 1 },\r\n // { x: 90.1621621621622, y: 3.29411764705882, size: 1 },\r\n // { x: 90.8108108108108, y: 2.7843137254902, size: 1 },\r\n // { x: 91.4594594594595, y: 2.50980392156863, size: 1 },\r\n // { x: 92.1081081081081, y: 2.54901960784314, size: 1 },\r\n // { x: 110.918918918919, y: 3.29411764705882, size: 1 },\r\n // { x: 111.567567567568, y: 2.62745098039216, size: 1 },\r\n // { x: 112.216216216216, y: 2.62745098039216, size: 1 },\r\n // { x: 118.054054054054, y: 3.41176470588235, size: 1 },\r\n // { x: 136.864864864865, y: 3.29411764705882, size: 1 },\r\n // { x: 171.891891891892, y: 3.92156862745098, size: 1 },\r\n // { x: 197.189189189189, y: 3.25490196078431, size: 1 },\r\n // { x: 197.837837837838, y: 3.01960784313725, size: 1 },\r\n // { x: 198.486486486486, y: 2.94117647058824, size: 1 },\r\n // { x: 218.594594594595, y: 3.17647058823529, size: 1 },\r\n // { x: 219.891891891892, y: 3.25490196078431, size: 1 },\r\n // { x: 241.297297297297, y: 3.25490196078431, size: 1 },\r\n // { x: 241.945945945946, y: 3.25490196078431, size: 1 },\r\n // { x: 247.135135135135, y: 3.96078431372549, size: 1 },\r\n // { x: 262.702702702703, y: 3.25490196078431, size: 1 },\r\n // { x: 306.810810810811, y: 3.17647058823529, size: 1 },\r\n // { x: 323.027027027027, y: 3.49019607843137, size: 1 },\r\n // { x: 326.918918918919, y: 3.29411764705882, size: 1 },\r\n // { x: 327.567567567568, y: 2.98039215686275, size: 1 },\r\n // { x: 328.216216216216, y: 2.86274509803922, size: 1 },\r\n // { x: 346.378378378378, y: 3.80392156862745, size: 1 },\r\n // { x: 11.0071942446043, y: 2.82352941176471, size: 1 },\r\n // { x: 32.3741007194245, y: 2.74509803921569, size: 1 },\r\n // { x: 33.0215827338129, y: 2.70588235294118, size: 1 },\r\n // { x: 95.8273381294964, y: 3.13725490196078, size: 1 },\r\n // { x: 97.1223021582734, y: 2.54901960784314, size: 1 },\r\n // { x: 97.7697841726619, y: 2.70588235294118, size: 1 },\r\n // { x: 117.194244604317, y: 3.13725490196078, size: 1 },\r\n // { x: 119.136690647482, y: 1.92156862745098, size: 1 },\r\n // { x: 139.856115107914, y: 3.09803921568627, size: 1 },\r\n // { x: 140.503597122302, y: 2.31372549019608, size: 1 },\r\n // { x: 141.151079136691, y: 2.54901960784314, size: 1 },\r\n // { x: 183.237410071942, y: 2.86274509803922, size: 1 },\r\n // { x: 183.884892086331, y: 2.50980392156863, size: 1 },\r\n // { x: 226.618705035971, y: 2.66666666666667, size: 1 },\r\n // { x: 227.26618705036, y: 1.64705882352941, size: 1 },\r\n // { x: 261.58273381295, y: 4.07843137254902, size: 1 },\r\n // { x: 263.525179856115, y: 4.07843137254902, size: 1 },\r\n // { x: 12.9496402877698, y: 4.07843137254902, size: 1 },\r\n // { x: 40.1438848920863, y: 2.70588235294118, size: 1 },\r\n // { x: 60.863309352518, y: 3.01960784313725, size: 1 },\r\n // { x: 212.374100719424, y: 2.66666666666667, size: 1 },\r\n // { x: 213.021582733813, y: 2.50980392156863, size: 1 },\r\n // { x: 213.669064748201, y: 2.58823529411765, size: 1 },\r\n // { x: 214.31654676259, y: 2.66666666666667, size: 1 },\r\n // { x: 298.489208633094, y: 2.94117647058824, size: 1 },\r\n // { x: 299.136690647482, y: 2.94117647058824, size: 1 },\r\n // { x: 320.503597122302, y: 2.03921568627451, size: 1 },\r\n // { x: 321.151079136691, y: 2.23529411764706, size: 1 },\r\n // { x: 321.798561151079, y: 2.35294117647059, size: 1 },\r\n // { x: 336.690647482014, y: 4.07843137254902, size: 1 },\r\n // { x: 25.2517985611511, y: 3.13725490196078, size: 1 },\r\n // { x: 30.431654676259, y: 4.11764705882353, size: 1 },\r\n // { x: 42.0863309352518, y: 4, size: 1 },\r\n // { x: 68.6330935251799, y: 2.86274509803922, size: 1 },\r\n // { x: 91.9424460431655, y: 4.11764705882353, size: 1 },\r\n // { x: 127.553956834532, y: 4.03921568627451, size: 1 },\r\n // { x: 243.453237410072, y: 4, size: 1 },\r\n // { x: 262.230215827338, y: 2.98039215686275, size: 1 },\r\n // { x: 262.877697841727, y: 2.98039215686275, size: 1 },\r\n // { x: 263.525179856115, y: 2.86274509803922, size: 1 },\r\n // { x: 264.172661870504, y: 2.58823529411765, size: 1 },\r\n // { x: 285.539568345324, y: 2.82352941176471, size: 1 },\r\n // { x: 332.158273381295, y: 4.07843137254902, size: 1 },\r\n // { x: 342.517985611511, y: 3.96078431372549, size: 1 },\r\n // { x: 352.230215827338, y: 4.11764705882353, size: 1 },\r\n // { x: 12.972972972973, y: 4.07843137254902, size: 1 },\r\n // { x: 14.2702702702703, y: 4, size: 1 },\r\n // { x: 21.4054054054054, y: 4.07843137254902, size: 1 },\r\n // { x: 36.972972972973, y: 4, size: 1 },\r\n // { x: 76.5405405405405, y: 2.62745098039216, size: 1 },\r\n // { x: 77.1891891891892, y: 2.7843137254902, size: 1 },\r\n // { x: 91.4594594594595, y: 3.92156862745098, size: 1 },\r\n // { x: 106.378378378378, y: 3.41176470588235, size: 1 },\r\n // { x: 113.513513513514, y: 3.41176470588235, size: 1 },\r\n // { x: 121.297297297297, y: 3.96078431372549, size: 1 },\r\n // { x: 142.054054054054, y: 3.13725490196078, size: 1 },\r\n // { x: 142.702702702703, y: 3.2156862745098, size: 1 },\r\n // { x: 145.945945945946, y: 3.25490196078431, size: 1 },\r\n // { x: 151.783783783784, y: 3.13725490196078, size: 1 },\r\n // { x: 153.72972972973, y: 3.09803921568627, size: 1 },\r\n // { x: 154.378378378378, y: 3.25490196078431, size: 1 },\r\n // { x: 155.027027027027, y: 3.33333333333333, size: 1 },\r\n // { x: 158.918918918919, y: 3.33333333333333, size: 1 },\r\n // { x: 163.459459459459, y: 2.90196078431373, size: 1 },\r\n // { x: 164.756756756757, y: 3.33333333333333, size: 1 },\r\n // { x: 167.351351351351, y: 3.17647058823529, size: 1 },\r\n // { x: 168, y: 3.09803921568627, size: 1 },\r\n // { x: 168.648648648649, y: 3.17647058823529, size: 1 },\r\n // { x: 174.486486486486, y: 3.09803921568627, size: 1 },\r\n // { x: 175.135135135135, y: 3.29411764705882, size: 1 },\r\n // { x: 175.783783783784, y: 3.09803921568627, size: 1 },\r\n // { x: 176.432432432432, y: 3.13725490196078, size: 1 },\r\n // { x: 178.378378378378, y: 3.01960784313725, size: 1 },\r\n // { x: 189.405405405405, y: 3.29411764705882, size: 1 },\r\n // { x: 193.945945945946, y: 3.13725490196078, size: 1 },\r\n // { x: 200.432432432432, y: 3.33333333333333, size: 1 },\r\n // { x: 201.72972972973, y: 3.2156862745098, size: 1 },\r\n // { x: 205.621621621622, y: 3.17647058823529, size: 1 },\r\n // { x: 206.918918918919, y: 3.09803921568627, size: 1 },\r\n // { x: 225.72972972973, y: 3.2156862745098, size: 1 },\r\n // { x: 226.378378378378, y: 2.7843137254902, size: 1 },\r\n // { x: 227.027027027027, y: 2.90196078431373, size: 1 },\r\n // { x: 227.675675675676, y: 3.25490196078431, size: 1 },\r\n // { x: 228.324324324324, y: 3.05882352941176, size: 1 },\r\n // { x: 256.216216216216, y: 3.84313725490196, size: 1 },\r\n // { x: 278.918918918919, y: 4, size: 1 },\r\n // { x: 306.810810810811, y: 4.03921568627451, size: 1 },\r\n // { x: 311.351351351351, y: 3.92156862745098, size: 1 },\r\n // { x: 313.297297297297, y: 2.94117647058824, size: 1 },\r\n // { x: 336, y: 2.54901960784314, size: 1 },\r\n // { x: 345.081081081081, y: 3.92156862745098, size: 1 },\r\n // { x: 356.108108108108, y: 3.13725490196078, size: 1 },\r\n // { x: 61.5107913669065, y: 3.09803921568627, size: 1 },\r\n // { x: 104.892086330935, y: 3.13725490196078, size: 1 },\r\n // { x: 159.928057553957, y: 4.15686274509804, size: 1 },\r\n // { x: 253.165467625899, y: 3.13725490196078, size: 1 },\r\n // { x: 255.107913669065, y: 1.6078431372549, size: 1 },\r\n // { x: 255.755395683453, y: 1.72549019607843, size: 1 },\r\n // { x: 256.402877697842, y: 1.37254901960784, size: 1 },\r\n // { x: 257.05035971223, y: 1.37254901960784, size: 1 },\r\n // { x: 264.172661870504, y: 2.98039215686275, size: 1 },\r\n // { x: 270.647482014389, y: 2.74509803921569, size: 1 },\r\n // { x: 273.237410071942, y: 3.13725490196078, size: 1 },\r\n // { x: 273.884892086331, y: 3.13725490196078, size: 1 },\r\n // { x: 320.503597122302, y: 2.90196078431373, size: 1 },\r\n // { x: 332.158273381295, y: 3.13725490196078, size: 1 },\r\n // { x: 337.985611510791, y: 3.09803921568627, size: 1 },\r\n // { x: 341.223021582734, y: 2.58823529411765, size: 1 },\r\n // { x: 341.870503597122, y: 2.70588235294118, size: 1 },\r\n // { x: 343.812949640288, y: 4.07843137254902, size: 1 },\r\n // { x: 24.6043165467626, y: 2.31372549019608, size: 1 },\r\n // { x: 45.9712230215827, y: 3.01960784313725, size: 1 },\r\n // { x: 67.3381294964029, y: 3.05882352941176, size: 1 },\r\n // { x: 67.9856115107914, y: 2.43137254901961, size: 1 },\r\n // { x: 88.705035971223, y: 2.98039215686275, size: 1 },\r\n // { x: 89.3525179856115, y: 2.19607843137255, size: 1 },\r\n // { x: 90, y: 1.96078431372549, size: 1 },\r\n // { x: 111.36690647482, y: 2.54901960784314, size: 1 },\r\n // { x: 121.079136690647, y: 4.07843137254902, size: 1 },\r\n // { x: 131.438848920863, y: 2.94117647058824, size: 1 },\r\n // { x: 132.73381294964, y: 2.43137254901961, size: 1 },\r\n // { x: 326.978417266187, y: 2.50980392156863, size: 1 },\r\n // { x: 9.72972972972973, y: 2.82352941176471, size: 1 },\r\n // { x: 10.3783783783784, y: 2.94117647058824, size: 1 },\r\n // { x: 82.3783783783784, y: 4.03921568627451, size: 1 },\r\n // { x: 84.972972972973, y: 3.96078431372549, size: 1 },\r\n // { x: 101.189189189189, y: 4, size: 1 },\r\n // { x: 118.054054054054, y: 3.25490196078431, size: 1 },\r\n // { x: 119.351351351351, y: 4, size: 1 },\r\n // { x: 136.864864864865, y: 4.07843137254902, size: 1 },\r\n // { x: 137.513513513514, y: 4, size: 1 },\r\n // { x: 160.864864864865, y: 3.25490196078431, size: 1 },\r\n // { x: 161.513513513514, y: 3.09803921568627, size: 1 },\r\n // { x: 167.351351351351, y: 3.84313725490196, size: 1 },\r\n // { x: 226.378378378378, y: 3.25490196078431, size: 1 },\r\n // { x: 250.378378378378, y: 3.88235294117647, size: 1 },\r\n // { x: 264, y: 3.92156862745098, size: 1 },\r\n // { x: 266.594594594595, y: 3.92156862745098, size: 1 },\r\n // { x: 269.837837837838, y: 2.94117647058824, size: 1 },\r\n // { x: 291.243243243243, y: 2.7843137254902, size: 1 },\r\n // { x: 292.540540540541, y: 2.35294117647059, size: 1 },\r\n // { x: 293.189189189189, y: 2.58823529411765, size: 1 },\r\n // { x: 300.324324324324, y: 3.80392156862745, size: 1 },\r\n // { x: 313.297297297297, y: 3.17647058823529, size: 1 },\r\n // { x: 334.054054054054, y: 2.70588235294118, size: 1 },\r\n // { x: 334.702702702703, y: 2.82352941176471, size: 1 },\r\n // { x: 347.027027027027, y: 3.41176470588235, size: 1 },\r\n // { x: 356.756756756757, y: 3.29411764705882, size: 1 },\r\n // { x: 36.2589928057554, y: 4.15686274509804, size: 1 },\r\n // { x: 108.129496402878, y: 3.96078431372549, size: 1 },\r\n // { x: 146.978417266187, y: 3.09803921568627, size: 1 },\r\n // { x: 151.510791366906, y: 4.23529411764706, size: 1 },\r\n // { x: 212.374100719424, y: 2.86274509803922, size: 1 },\r\n // { x: 213.669064748201, y: 3.09803921568627, size: 1 },\r\n // { x: 216.258992805755, y: 4, size: 1 },\r\n // { x: 233.741007194245, y: 2.43137254901961, size: 1 },\r\n // { x: 235.035971223022, y: 3.09803921568627, size: 1 },\r\n // { x: 31.0791366906475, y: 3.2156862745098, size: 1 },\r\n // { x: 47.2661870503597, y: 2.90196078431373, size: 1 },\r\n // { x: 110.719424460432, y: 3.25490196078431, size: 1 },\r\n // { x: 112.661870503597, y: 2.98039215686275, size: 1 },\r\n // { x: 119.784172661871, y: 4.03921568627451, size: 1 },\r\n // { x: 156.043165467626, y: 3.01960784313725, size: 1 },\r\n // { x: 350.287769784173, y: 3.09803921568627, size: 1 },\r\n // { x: 20.1081081081081, y: 3.88235294117647, size: 1 },\r\n // { x: 52.5405405405405, y: 3.2156862745098, size: 1 },\r\n // { x: 53.1891891891892, y: 2.90196078431373, size: 1 },\r\n // { x: 123.891891891892, y: 3.96078431372549, size: 1 },\r\n // { x: 182.27027027027, y: 2.90196078431373, size: 1 },\r\n // { x: 182.918918918919, y: 2.11764705882353, size: 1 },\r\n // { x: 186.162162162162, y: 4.07843137254902, size: 1 },\r\n // { x: 190.702702702703, y: 3.2156862745098, size: 1 },\r\n // { x: 195.891891891892, y: 3.25490196078431, size: 1 },\r\n // { x: 199.783783783784, y: 3.29411764705882, size: 1 },\r\n // { x: 204.324324324324, y: 3.17647058823529, size: 1 },\r\n // { x: 205.621621621622, y: 4.11764705882353, size: 1 },\r\n // { x: 218.594594594595, y: 4, size: 1 },\r\n // { x: 225.72972972973, y: 2.7843137254902, size: 1 },\r\n // { x: 226.378378378378, y: 2.94117647058824, size: 1 },\r\n // { x: 246.486486486486, y: 3.09803921568627, size: 1 },\r\n // { x: 247.135135135135, y: 3.13725490196078, size: 1 },\r\n // { x: 247.783783783784, y: 2.62745098039216, size: 1 },\r\n // { x: 267.891891891892, y: 3.13725490196078, size: 1 },\r\n // { x: 268.540540540541, y: 2.94117647058824, size: 1 },\r\n // { x: 269.189189189189, y: 2.19607843137255, size: 1 },\r\n // { x: 269.837837837838, y: 2.58823529411765, size: 1 },\r\n // { x: 291.243243243243, y: 3.13725490196078, size: 1 },\r\n // { x: 326.27027027027, y: 3.96078431372549, size: 1 },\r\n // { x: 333.405405405405, y: 2.98039215686275, size: 1 },\r\n // { x: 334.054054054054, y: 2.03921568627451, size: 1 },\r\n // { x: 334.702702702703, y: 2.23529411764706, size: 1 },\r\n // { x: 338.594594594595, y: 4, size: 1 },\r\n // { x: 355.459459459459, y: 3.2156862745098, size: 1 },\r\n // { x: 16.8345323741007, y: 3.13725490196078, size: 1 },\r\n // { x: 17.4820143884892, y: 2.66666666666667, size: 1 },\r\n // { x: 38.2014388489209, y: 2.90196078431373, size: 1 },\r\n // { x: 38.8489208633094, y: 2.15686274509804, size: 1 },\r\n // { x: 39.4964028776978, y: 1.92156862745098, size: 1 },\r\n // { x: 60.2158273381295, y: 2.86274509803922, size: 1 },\r\n // { x: 60.863309352518, y: 2.50980392156863, size: 1 },\r\n // { x: 97.1223021582734, y: 4.03921568627451, size: 1 },\r\n // { x: 233.093525179856, y: 2.94117647058824, size: 1 },\r\n // { x: 233.741007194245, y: 3.05882352941176, size: 1 },\r\n // { x: 276.474820143885, y: 3.2156862745098, size: 1 },\r\n // { x: 319.208633093525, y: 2.70588235294118, size: 1 },\r\n // { x: 319.856115107914, y: 2.98039215686275, size: 1 },\r\n // { x: 22.6618705035971, y: 4.03921568627451, size: 1 },\r\n // { x: 161.223021582734, y: 3.25490196078431, size: 1 },\r\n // { x: 240.215827338129, y: 3.09803921568627, size: 1 },\r\n // { x: 267.410071942446, y: 3.17647058823529, size: 1 },\r\n // { x: 325.035971223022, y: 4.03921568627451, size: 1 },\r\n // { x: 11.027027027027, y: 3.92156862745098, size: 1 },\r\n // { x: 28.5405405405405, y: 3.80392156862745, size: 1 },\r\n // { x: 31.1351351351351, y: 3.17647058823529, size: 1 },\r\n // { x: 59.027027027027, y: 4.11764705882353, size: 1 },\r\n // { x: 62.2702702702703, y: 3.96078431372549, size: 1 },\r\n // { x: 105.72972972973, y: 3.92156862745098, size: 1 },\r\n // { x: 108.972972972973, y: 4.07843137254902, size: 1 },\r\n // { x: 116.756756756757, y: 3.33333333333333, size: 1 },\r\n // { x: 117.405405405405, y: 3.13725490196078, size: 1 },\r\n // { x: 120, y: 3.96078431372549, size: 1 },\r\n // { x: 126.486486486486, y: 3.88235294117647, size: 1 },\r\n // { x: 158.27027027027, y: 3.96078431372549, size: 1 },\r\n // { x: 182.918918918919, y: 3.13725490196078, size: 1 },\r\n // { x: 192.648648648649, y: 3.96078431372549, size: 1 },\r\n // { x: 212.108108108108, y: 3.92156862745098, size: 1 },\r\n // { x: 217.945945945946, y: 4.03921568627451, size: 1 },\r\n // { x: 219.891891891892, y: 4, size: 1 },\r\n // { x: 225.72972972973, y: 3.13725490196078, size: 1 },\r\n // { x: 226.378378378378, y: 3.09803921568627, size: 1 },\r\n // { x: 247.783783783784, y: 3.13725490196078, size: 1 },\r\n // { x: 269.189189189189, y: 3.29411764705882, size: 1 },\r\n // { x: 283.459459459459, y: 4.11764705882353, size: 1 },\r\n // { x: 303.567567567568, y: 3.09803921568627, size: 1 },\r\n // { x: 304.864864864865, y: 3.33333333333333, size: 1 },\r\n // { x: 310.054054054054, y: 3.96078431372549, size: 1 },\r\n // { x: 337.297297297297, y: 4.07843137254902, size: 1 },\r\n // { x: 341.189189189189, y: 3.96078431372549, size: 1 },\r\n // { x: 357.405405405405, y: 3.92156862745098, size: 1 },\r\n // { x: 12.9496402877698, y: 3.96078431372549, size: 1 },\r\n // { x: 48.5611510791367, y: 4.03921568627451, size: 1 },\r\n // { x: 297.841726618705, y: 3.01960784313725, size: 1 },\r\n // { x: 303.021582733813, y: 4.03921568627451, size: 1 },\r\n // { x: 340.575539568345, y: 3.13725490196078, size: 1 },\r\n // { x: 341.223021582734, y: 2.74509803921569, size: 1 },\r\n // { x: 351.58273381295, y: 4.03921568627451, size: 1 },\r\n // { x: 23.9568345323741, y: 2.74509803921569, size: 1 },\r\n // { x: 24.6043165467626, y: 2.82352941176471, size: 1 },\r\n // { x: 66.6906474820144, y: 3.05882352941176, size: 1 },\r\n // { x: 88.705035971223, y: 2.90196078431373, size: 1 },\r\n // { x: 89.3525179856115, y: 2.90196078431373, size: 1 },\r\n // { x: 110.719424460432, y: 1.56862745098039, size: 1 },\r\n // { x: 111.36690647482, y: 1.52941176470588, size: 1 },\r\n // { x: 112.014388489209, y: 1.49019607843137, size: 1 },\r\n // { x: 112.661870503597, y: 2.66666666666667, size: 1 },\r\n // { x: 131.438848920863, y: 2.98039215686275, size: 1 },\r\n // { x: 132.086330935252, y: 2.54901960784314, size: 1 },\r\n // { x: 153.453237410072, y: 2.86274509803922, size: 1 },\r\n // { x: 154.10071942446, y: 2.47058823529412, size: 1 },\r\n // { x: 174.820143884892, y: 2, size: 1 },\r\n // { x: 175.467625899281, y: 1.80392156862745, size: 1 },\r\n // { x: 218.848920863309, y: 3.01960784313725, size: 1 },\r\n // { x: 246.690647482014, y: 4.23529411764706, size: 1 },\r\n // { x: 247.985611510791, y: 4.19607843137255, size: 1 },\r\n // { x: 261.58273381295, y: 4.11764705882353, size: 1 },\r\n // { x: 273.237410071942, y: 4, size: 1 },\r\n // { x: 279.712230215827, y: 4.07843137254902, size: 1 },\r\n // { x: 347.697841726619, y: 2.43137254901961, size: 1 },\r\n // { x: 1.94594594594595, y: 4, size: 1 },\r\n // { x: 4.54054054054054, y: 4, size: 1 },\r\n // { x: 22.7027027027027, y: 3.2156862745098, size: 1 },\r\n // { x: 40.2162162162162, y: 4.15686274509804, size: 1 },\r\n // { x: 44.1081081081081, y: 4.07843137254902, size: 1 },\r\n // { x: 44.7567567567568, y: 3.96078431372549, size: 1 },\r\n // { x: 46.0540540540541, y: 3.96078431372549, size: 1 },\r\n // { x: 46.7027027027027, y: 4.03921568627451, size: 1 },\r\n // { x: 59.027027027027, y: 3.33333333333333, size: 1 },\r\n // { x: 79.1351351351351, y: 4, size: 1 },\r\n // { x: 82.3783783783784, y: 3.84313725490196, size: 1 },\r\n // { x: 92.1081081081081, y: 4, size: 1 },\r\n // { x: 103.783783783784, y: 4, size: 1 },\r\n // { x: 106.378378378378, y: 4.03921568627451, size: 1 },\r\n // { x: 139.459459459459, y: 2.94117647058824, size: 1 },\r\n // { x: 150.486486486486, y: 4, size: 1 },\r\n // { x: 182.27027027027, y: 3.05882352941176, size: 1 },\r\n // { x: 182.918918918919, y: 2.7843137254902, size: 1 },\r\n // { x: 192, y: 3.84313725490196, size: 1 },\r\n // { x: 193.297297297297, y: 3.92156862745098, size: 1 },\r\n // { x: 203.675675675676, y: 3.17647058823529, size: 1 },\r\n // { x: 205.621621621622, y: 4.03921568627451, size: 1 },\r\n // { x: 206.27027027027, y: 3.72549019607843, size: 1 },\r\n // { x: 208.216216216216, y: 3.92156862745098, size: 1 },\r\n // { x: 210.162162162162, y: 3.92156862745098, size: 1 },\r\n // { x: 212.108108108108, y: 3.88235294117647, size: 1 },\r\n // { x: 223.135135135135, y: 3.92156862745098, size: 1 },\r\n // { x: 226.378378378378, y: 4.11764705882353, size: 1 },\r\n // { x: 241.297297297297, y: 4.15686274509804, size: 1 },\r\n // { x: 247.135135135135, y: 3.05882352941176, size: 1 },\r\n // { x: 247.783783783784, y: 2.98039215686275, size: 1 },\r\n // { x: 268.540540540541, y: 3.17647058823529, size: 1 },\r\n // { x: 269.189189189189, y: 3.13725490196078, size: 1 },\r\n // { x: 278.27027027027, y: 4, size: 1 },\r\n // { x: 293.837837837838, y: 3.92156862745098, size: 1 },\r\n // { x: 332.108108108108, y: 4, size: 1 },\r\n // { x: 336.648648648649, y: 3.05882352941176, size: 1 },\r\n // { x: 346.378378378378, y: 3.29411764705882, size: 1 },\r\n // { x: 347.027027027027, y: 3.29411764705882, size: 1 },\r\n // { x: 348.324324324324, y: 3.17647058823529, size: 1 },\r\n // { x: 350.918918918919, y: 3.25490196078431, size: 1 },\r\n // { x: 56.3309352517986, y: 4.11764705882353, size: 1 },\r\n // { x: 82.8776978417266, y: 2.94117647058824, size: 1 },\r\n // { x: 83.5251798561151, y: 2.74509803921569, size: 1 },\r\n // { x: 85.4676258992806, y: 3.96078431372549, size: 1 },\r\n // { x: 91.9424460431655, y: 4.07843137254902, size: 1 },\r\n // { x: 103.597122302158, y: 3.01960784313725, size: 1 },\r\n // { x: 104.892086330935, y: 2.66666666666667, size: 1 },\r\n // { x: 196.834532374101, y: 3.17647058823529, size: 1 },\r\n // { x: 214.964028776978, y: 4.07843137254902, size: 1 },\r\n // { x: 254.460431654676, y: 2.47058823529412, size: 1 },\r\n // { x: 255.107913669065, y: 2.62745098039216, size: 1 },\r\n // { x: 308.848920863309, y: 3.13725490196078, size: 1 },\r\n // { x: 59.568345323741, y: 4.11764705882353, size: 1 },\r\n // { x: 90.6474820143885, y: 4.15686274509804, size: 1 },\r\n // { x: 132.086330935252, y: 3.01960784313725, size: 1 },\r\n // { x: 132.73381294964, y: 2.94117647058824, size: 1 },\r\n // { x: 133.381294964029, y: 2.7843137254902, size: 1 },\r\n // { x: 218.201438848921, y: 2.94117647058824, size: 1 },\r\n // { x: 218.848920863309, y: 2.86274509803922, size: 1 },\r\n // { x: 219.496402877698, y: 2.54901960784314, size: 1 },\r\n // { x: 220.143884892086, y: 2.58823529411765, size: 1 },\r\n // { x: 240.215827338129, y: 2.98039215686275, size: 1 },\r\n // { x: 249.280575539568, y: 4.11764705882353, size: 1 },\r\n // { x: 282.94964028777, y: 3.05882352941176, size: 1 },\r\n // { x: 318.561151079137, y: 4.15686274509804, size: 1 },\r\n // { x: 73.8129496402878, y: 3.01960784313725, size: 1 },\r\n // { x: 74.4604316546763, y: 3.25490196078431, size: 1 },\r\n // { x: 126.906474820144, y: 4.11764705882353, size: 1 },\r\n // { x: 139.856115107914, y: 3.96078431372549, size: 1 },\r\n // { x: 224.676258992806, y: 2.82352941176471, size: 1 },\r\n // { x: 244.748201438849, y: 3.13725490196078, size: 1 },\r\n // { x: 262.877697841727, y: 4.23529411764706, size: 1 },\r\n // { x: 325.035971223022, y: 4.11764705882353, size: 1 },\r\n // { x: 354.172661870504, y: 2.7843137254902, size: 1 },\r\n // { x: 354.820143884892, y: 2.90196078431373, size: 1 },\r\n // { x: 16.2162162162162, y: 2.7843137254902, size: 1 },\r\n // { x: 25.2972972972973, y: 4, size: 1 },\r\n // { x: 25.9459459459459, y: 4.03921568627451, size: 1 },\r\n // { x: 27.8918918918919, y: 3.92156862745098, size: 1 },\r\n // { x: 37.6216216216216, y: 2.90196078431373, size: 1 },\r\n // { x: 38.2702702702703, y: 2.70588235294118, size: 1 },\r\n // { x: 48, y: 4.07843137254902, size: 1 },\r\n // { x: 59.027027027027, y: 2.58823529411765, size: 1 },\r\n // { x: 59.6756756756757, y: 1.84313725490196, size: 1 },\r\n // { x: 81.0810810810811, y: 2.43137254901961, size: 1 },\r\n // { x: 107.675675675676, y: 3.88235294117647, size: 1 },\r\n // { x: 112.216216216216, y: 4.03921568627451, size: 1 },\r\n // { x: 113.513513513514, y: 4, size: 1 },\r\n // { x: 123.891891891892, y: 2.90196078431373, size: 1 },\r\n // { x: 124.540540540541, y: 2.62745098039216, size: 1 },\r\n // { x: 145.297297297297, y: 3.17647058823529, size: 1 },\r\n // { x: 145.945945945946, y: 2.94117647058824, size: 1 },\r\n // { x: 147.891891891892, y: 4.19607843137255, size: 1 },\r\n // { x: 155.027027027027, y: 4.23529411764706, size: 1 },\r\n // { x: 162.162162162162, y: 3.92156862745098, size: 1 },\r\n // { x: 167.351351351351, y: 2.54901960784314, size: 1 },\r\n // { x: 168, y: 2.66666666666667, size: 1 },\r\n // { x: 188.756756756757, y: 2.98039215686275, size: 1 },\r\n // { x: 189.405405405405, y: 2.66666666666667, size: 1 },\r\n // { x: 197.837837837838, y: 4, size: 1 },\r\n // { x: 208.864864864865, y: 3.2156862745098, size: 1 },\r\n // { x: 209.513513513514, y: 3.17647058823529, size: 1 },\r\n // { x: 210.810810810811, y: 2.70588235294118, size: 1 },\r\n // { x: 211.459459459459, y: 3.2156862745098, size: 1 },\r\n // { x: 271.783783783784, y: 3.37254901960784, size: 1 },\r\n // { x: 274.378378378378, y: 3.13725490196078, size: 1 },\r\n // { x: 275.027027027027, y: 3.13725490196078, size: 1 },\r\n // { x: 275.675675675676, y: 2.70588235294118, size: 1 },\r\n // { x: 288, y: 4, size: 1 },\r\n // { x: 306.162162162162, y: 4.15686274509804, size: 1 },\r\n // { x: 315.891891891892, y: 4.19607843137255, size: 1 },\r\n // { x: 357.405405405405, y: 4, size: 1 },\r\n // { x: 23.3093525179856, y: 3.13725490196078, size: 1 },\r\n // { x: 45.3237410071942, y: 2.94117647058824, size: 1 },\r\n // { x: 52.4460431654676, y: 4.11764705882353, size: 1 },\r\n // { x: 53.7410071942446, y: 4.03921568627451, size: 1 },\r\n // { x: 85.4676258992806, y: 4.03921568627451, size: 1 },\r\n // { x: 111.36690647482, y: 4, size: 1 },\r\n // { x: 136.618705035971, y: 4.03921568627451, size: 1 },\r\n // { x: 152.805755395683, y: 2.86274509803922, size: 1 },\r\n // { x: 153.453237410072, y: 2.82352941176471, size: 1 },\r\n // { x: 174.820143884892, y: 2.74509803921569, size: 1 },\r\n // { x: 222.086330935252, y: 3.96078431372549, size: 1 },\r\n // { x: 235.68345323741, y: 3.96078431372549, size: 1 },\r\n // { x: 257.05035971223, y: 4.07843137254902, size: 1 },\r\n // { x: 260.935251798561, y: 2.50980392156863, size: 1 },\r\n // { x: 270.647482014389, y: 4, size: 1 },\r\n // { x: 282.302158273381, y: 2.3921568627451, size: 1 },\r\n // { x: 282.94964028777, y: 2.27450980392157, size: 1 },\r\n // { x: 309.496402877698, y: 3.96078431372549, size: 1 },\r\n // { x: 325.68345323741, y: 3.13725490196078, size: 1 },\r\n // { x: 20.0719424460432, y: 4.11764705882353, size: 1 },\r\n // { x: 20.7194244604317, y: 4, size: 1 },\r\n // { x: 27.1942446043165, y: 4.03921568627451, size: 1 },\r\n // { x: 31.0791366906475, y: 2.35294117647059, size: 1 },\r\n // { x: 51.7985611510791, y: 3.09803921568627, size: 1 },\r\n // { x: 52.4460431654676, y: 2.47058823529412, size: 1 },\r\n // { x: 55.6834532374101, y: 4.11764705882353, size: 1 },\r\n // { x: 67.9856115107914, y: 4.07843137254902, size: 1 },\r\n // { x: 71.8705035971223, y: 3.17647058823529, size: 1 },\r\n // { x: 138.561151079137, y: 2.58823529411765, size: 1 },\r\n // { x: 168.345323741007, y: 4.15686274509804, size: 1 },\r\n // { x: 171.58273381295, y: 4.07843137254902, size: 1 },\r\n // { x: 181.294964028777, y: 2.98039215686275, size: 1 },\r\n // { x: 181.942446043165, y: 2.70588235294118, size: 1 },\r\n // { x: 224.676258992806, y: 2.43137254901961, size: 1 },\r\n // { x: 225.323741007194, y: 2.3921568627451, size: 1 },\r\n // { x: 233.741007194245, y: 4.07843137254902, size: 1 },\r\n // { x: 244.748201438849, y: 3.05882352941176, size: 1 },\r\n // { x: 246.043165467626, y: 2.74509803921569, size: 1 },\r\n // { x: 246.690647482014, y: 2.3921568627451, size: 1 },\r\n // { x: 310.791366906475, y: 2.94117647058824, size: 1 },\r\n // { x: 311.438848920863, y: 2.90196078431373, size: 1 },\r\n // { x: 337.985611510791, y: 4.15686274509804, size: 1 },\r\n // { x: 354.172661870504, y: 2.3921568627451, size: 1 },\r\n // { x: 354.820143884892, y: 2.50980392156863, size: 1 },\r\n // { x: 8.43243243243243, y: 4, size: 1 },\r\n // { x: 26.5945945945946, y: 4, size: 1 },\r\n // { x: 36.3243243243243, y: 3.13725490196078, size: 1 },\r\n // { x: 37.6216216216216, y: 2.58823529411765, size: 1 },\r\n // { x: 59.027027027027, y: 3.17647058823529, size: 1 },\r\n // { x: 59.6756756756757, y: 3.17647058823529, size: 1 },\r\n // { x: 73.2972972972973, y: 3.88235294117647, size: 1 },\r\n // { x: 77.1891891891892, y: 3.92156862745098, size: 1 },\r\n // { x: 80.4324324324324, y: 2.43137254901961, size: 1 },\r\n // { x: 81.0810810810811, y: 2.31372549019608, size: 1 },\r\n // { x: 101.837837837838, y: 3.09803921568627, size: 1 },\r\n // { x: 102.486486486486, y: 2.7843137254902, size: 1 },\r\n // { x: 103.135135135135, y: 3.25490196078431, size: 1 },\r\n // { x: 118.702702702703, y: 3.88235294117647, size: 1 },\r\n // { x: 123.243243243243, y: 3.05882352941176, size: 1 },\r\n // { x: 123.891891891892, y: 2.94117647058824, size: 1 },\r\n // { x: 145.945945945946, y: 3.05882352941176, size: 1 },\r\n // { x: 150.486486486486, y: 4.07843137254902, size: 1 },\r\n // { x: 167.351351351351, y: 2.62745098039216, size: 1 },\r\n // { x: 195.891891891892, y: 3.96078431372549, size: 1 },\r\n // { x: 210.162162162162, y: 2.58823529411765, size: 1 },\r\n // { x: 210.810810810811, y: 2.58823529411765, size: 1 },\r\n // { x: 232.216216216216, y: 3.13725490196078, size: 1 },\r\n // { x: 252.972972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 254.27027027027, y: 3.05882352941176, size: 1 },\r\n // { x: 275.027027027027, y: 3.2156862745098, size: 1 },\r\n // { x: 296.432432432432, y: 3.13725490196078, size: 1 },\r\n // { x: 297.081081081081, y: 2.90196078431373, size: 1 },\r\n // { x: 297.72972972973, y: 3.13725490196078, size: 1 },\r\n // { x: 339.891891891892, y: 3.05882352941176, size: 1 },\r\n // { x: 340.540540540541, y: 3.05882352941176, size: 1 },\r\n // { x: 1.94244604316547, y: 2.62745098039216, size: 1 },\r\n // { x: 23.3093525179856, y: 2.86274509803922, size: 1 },\r\n // { x: 23.9568345323741, y: 2.82352941176471, size: 1 },\r\n // { x: 66.6906474820144, y: 1.88235294117647, size: 1 },\r\n // { x: 88.0575539568345, y: 2.7843137254902, size: 1 },\r\n // { x: 88.705035971223, y: 2.94117647058824, size: 1 },\r\n // { x: 129.496402877698, y: 3.2156862745098, size: 1 },\r\n // { x: 146.978417266187, y: 4, size: 1 },\r\n // { x: 152.805755395683, y: 2.7843137254902, size: 1 },\r\n // { x: 153.453237410072, y: 2.62745098039216, size: 1 },\r\n // { x: 173.525179856115, y: 3.17647058823529, size: 1 },\r\n // { x: 174.820143884892, y: 2.70588235294118, size: 1 },\r\n // { x: 260.935251798561, y: 2.94117647058824, size: 1 },\r\n // { x: 262.230215827338, y: 4.11764705882353, size: 1 },\r\n // { x: 268.057553956835, y: 4, size: 1 },\r\n // { x: 282.94964028777, y: 2.98039215686275, size: 1 },\r\n // { x: 304.31654676259, y: 2.86274509803922, size: 1 },\r\n // { x: 325.68345323741, y: 1.76470588235294, size: 1 },\r\n // { x: 326.330935251799, y: 1.76470588235294, size: 1 },\r\n // { x: 326.978417266187, y: 1.92156862745098, size: 1 },\r\n // { x: 327.625899280576, y: 2.31372549019608, size: 1 },\r\n // { x: 334.748201438849, y: 2.98039215686275, size: 1 },\r\n // { x: 347.05035971223, y: 2.35294117647059, size: 1 },\r\n // { x: 347.697841726619, y: 2.47058823529412, size: 1 },\r\n // { x: 9.06474820143885, y: 3.2156862745098, size: 1 },\r\n // { x: 28.4892086330935, y: 3.13725490196078, size: 1 },\r\n // { x: 30.431654676259, y: 2.90196078431373, size: 1 },\r\n // { x: 39.4964028776978, y: 4.11764705882353, size: 1 },\r\n // { x: 51.7985611510791, y: 2.47058823529412, size: 1 },\r\n // { x: 52.4460431654676, y: 2.11764705882353, size: 1 },\r\n // { x: 60.2158273381295, y: 4.15686274509804, size: 1 },\r\n // { x: 73.8129496402878, y: 2.82352941176471, size: 1 },\r\n // { x: 310.791366906475, y: 2.82352941176471, size: 1 },\r\n // { x: 311.438848920863, y: 2.86274509803922, size: 1 },\r\n // { x: 354.172661870504, y: 2.94117647058824, size: 1 },\r\n // { x: 24.6486486486486, y: 4, size: 1 },\r\n // { x: 36.972972972973, y: 3.17647058823529, size: 1 },\r\n // { x: 59.027027027027, y: 3.09803921568627, size: 1 },\r\n // { x: 80.4324324324324, y: 2.50980392156863, size: 1 },\r\n // { x: 81.0810810810811, y: 2.3921568627451, size: 1 },\r\n // { x: 90.1621621621622, y: 3.92156862745098, size: 1 },\r\n // { x: 98.5945945945946, y: 3.92156862745098, size: 1 },\r\n // { x: 167.351351351351, y: 2.94117647058824, size: 1 },\r\n // { x: 169.297297297297, y: 3.09803921568627, size: 1 },\r\n // { x: 175.135135135135, y: 3.13725490196078, size: 1 },\r\n // { x: 177.72972972973, y: 2.90196078431373, size: 1 },\r\n // { x: 179.675675675676, y: 3.17647058823529, size: 1 },\r\n // { x: 180.324324324324, y: 3.2156862745098, size: 1 },\r\n // { x: 180.972972972973, y: 3.13725490196078, size: 1 },\r\n // { x: 181.621621621622, y: 3.2156862745098, size: 1 },\r\n // { x: 184.864864864865, y: 3.29411764705882, size: 1 },\r\n // { x: 185.513513513514, y: 2.98039215686275, size: 1 },\r\n // { x: 210.162162162162, y: 2.43137254901961, size: 1 },\r\n // { x: 210.810810810811, y: 2.74509803921569, size: 1 },\r\n // { x: 212.108108108108, y: 3.13725490196078, size: 1 },\r\n // { x: 214.054054054054, y: 3.25490196078431, size: 1 },\r\n // { x: 215.351351351351, y: 3.33333333333333, size: 1 },\r\n // { x: 216, y: 3.17647058823529, size: 1 },\r\n // { x: 216.648648648649, y: 3.09803921568627, size: 1 },\r\n // { x: 217.945945945946, y: 3.09803921568627, size: 1 },\r\n // { x: 221.189189189189, y: 3.17647058823529, size: 1 },\r\n // { x: 221.837837837838, y: 3.17647058823529, size: 1 },\r\n // { x: 222.486486486486, y: 2.90196078431373, size: 1 },\r\n // { x: 224.432432432432, y: 3.13725490196078, size: 1 },\r\n // { x: 225.72972972973, y: 3.17647058823529, size: 1 },\r\n // { x: 227.027027027027, y: 3.25490196078431, size: 1 },\r\n // { x: 232.216216216216, y: 2.70588235294118, size: 1 },\r\n // { x: 232.864864864865, y: 3.41176470588235, size: 1 },\r\n // { x: 296.432432432432, y: 2.82352941176471, size: 1 },\r\n // { x: 297.081081081081, y: 2.50980392156863, size: 1 },\r\n // { x: 318.486486486487, y: 2.98039215686275, size: 1 },\r\n // { x: 326.27027027027, y: 3.37254901960784, size: 1 },\r\n // { x: 335.351351351351, y: 3.29411764705882, size: 1 },\r\n // { x: 339.891891891892, y: 2.86274509803922, size: 1 },\r\n // { x: 347.675675675676, y: 4, size: 1 },\r\n // { x: 353.513513513513, y: 3.33333333333333, size: 1 },\r\n // { x: 15.5395683453237, y: 4.03921568627451, size: 1 },\r\n // { x: 23.3093525179856, y: 2.7843137254902, size: 1 },\r\n // { x: 66.6906474820144, y: 2.82352941176471, size: 1 },\r\n // { x: 67.9856115107914, y: 3.09803921568627, size: 1 },\r\n // { x: 77.6978417266187, y: 3.17647058823529, size: 1 },\r\n // { x: 78.3453237410072, y: 3.13725490196078, size: 1 },\r\n // { x: 82.8776978417266, y: 3.01960784313725, size: 1 },\r\n // { x: 84.8201438848921, y: 3.09803921568627, size: 1 },\r\n // { x: 88.0575539568345, y: 2.82352941176471, size: 1 },\r\n // { x: 89.3525179856115, y: 3.13725490196078, size: 1 },\r\n // { x: 107.482014388489, y: 3.17647058823529, size: 1 },\r\n // { x: 109.424460431655, y: 2.3921568627451, size: 1 },\r\n // { x: 110.071942446043, y: 2.47058823529412, size: 1 },\r\n // { x: 131.438848920863, y: 2.47058823529412, size: 1 },\r\n // { x: 152.805755395683, y: 2.70588235294118, size: 1 },\r\n // { x: 239.568345323741, y: 2.35294117647059, size: 1 },\r\n // { x: 241.510791366906, y: 3.05882352941176, size: 1 },\r\n // { x: 242.805755395683, y: 3.09803921568627, size: 1 },\r\n // { x: 250.575539568345, y: 3.09803921568627, size: 1 },\r\n // { x: 251.223021582734, y: 3.2156862745098, size: 1 },\r\n // { x: 260.287769784173, y: 3.01960784313725, size: 1 },\r\n // { x: 262.877697841727, y: 3.05882352941176, size: 1 },\r\n // { x: 282.302158273381, y: 2.66666666666667, size: 1 },\r\n // { x: 303.669064748201, y: 2.98039215686275, size: 1 },\r\n // { x: 325.035971223022, y: 2.66666666666667, size: 1 },\r\n // { x: 325.68345323741, y: 2.50980392156863, size: 1 },\r\n // { x: 8.41726618705036, y: 3.09803921568627, size: 1 },\r\n // { x: 51.7985611510791, y: 2.82352941176471, size: 1 },\r\n // { x: 52.4460431654676, y: 2.7843137254902, size: 1 },\r\n // { x: 55.0359712230216, y: 3.05882352941176, size: 1 },\r\n // { x: 65.3956834532374, y: 3.25490196078431, size: 1 },\r\n // { x: 68.6330935251799, y: 3.05882352941176, size: 1 },\r\n // { x: 116.546762589928, y: 3.05882352941176, size: 1 },\r\n // { x: 119.784172661871, y: 4.07843137254902, size: 1 },\r\n // { x: 202.661870503597, y: 2.31372549019608, size: 1 },\r\n // { x: 203.309352517986, y: 2.19607843137255, size: 1 },\r\n // { x: 204.604316546763, y: 4.07843137254902, size: 1 },\r\n // { x: 267.410071942446, y: 2.94117647058824, size: 1 },\r\n // { x: 270, y: 3.96078431372549, size: 1 },\r\n // { x: 310.791366906475, y: 2.70588235294118, size: 1 },\r\n // { x: 332.805755395683, y: 2.94117647058824, size: 1 },\r\n // { x: 353.525179856115, y: 2.82352941176471, size: 1 },\r\n // { x: 15.5675675675676, y: 2.66666666666667, size: 1 },\r\n // { x: 37.6216216216216, y: 3.13725490196078, size: 1 },\r\n // { x: 46.7027027027027, y: 3.96078431372549, size: 1 },\r\n // { x: 80.4324324324324, y: 2.86274509803922, size: 1 },\r\n // { x: 88.2162162162162, y: 3.25490196078431, size: 1 },\r\n // { x: 101.837837837838, y: 2.27450980392157, size: 1 },\r\n // { x: 102.486486486486, y: 2.27450980392157, size: 1 },\r\n // { x: 123.243243243243, y: 2.54901960784314, size: 1 },\r\n // { x: 123.891891891892, y: 2.54901960784314, size: 1 },\r\n // { x: 125.189189189189, y: 3.25490196078431, size: 1 },\r\n // { x: 135.567567567568, y: 3.17647058823529, size: 1 },\r\n // { x: 162.810810810811, y: 3.80392156862745, size: 1 },\r\n // { x: 188.108108108108, y: 3.09803921568627, size: 1 },\r\n // { x: 190.054054054054, y: 3.17647058823529, size: 1 },\r\n // { x: 199.783783783784, y: 3.33333333333333, size: 1 },\r\n // { x: 201.081081081081, y: 3.29411764705882, size: 1 },\r\n // { x: 296.432432432432, y: 2.11764705882353, size: 1 },\r\n // { x: 297.081081081081, y: 2.03921568627451, size: 1 },\r\n // { x: 317.837837837838, y: 2.27450980392157, size: 1 },\r\n // { x: 318.486486486487, y: 2.31372549019608, size: 1 },\r\n // { x: 332.108108108108, y: 3.33333333333333, size: 1 },\r\n // { x: 339.243243243243, y: 3.13725490196078, size: 1 },\r\n // { x: 29.7841726618705, y: 3.09803921568627, size: 1 },\r\n // { x: 31.0791366906475, y: 3.25490196078431, size: 1 },\r\n // { x: 40.7913669064748, y: 3.13725490196078, size: 1 },\r\n // { x: 44.0287769784173, y: 3.09803921568627, size: 1 },\r\n // { x: 44.6762589928058, y: 2.23529411764706, size: 1 },\r\n // { x: 65.3956834532374, y: 2.98039215686275, size: 1 },\r\n // { x: 66.0431654676259, y: 2, size: 1 },\r\n // { x: 66.6906474820144, y: 2.11764705882353, size: 1 },\r\n // { x: 87.410071942446, y: 2.82352941176471, size: 1 },\r\n // { x: 88.0575539568345, y: 2.74509803921569, size: 1 },\r\n // { x: 131.438848920863, y: 2.7843137254902, size: 1 },\r\n // { x: 152.158273381295, y: 2.58823529411765, size: 1 },\r\n // { x: 152.805755395683, y: 2.15686274509804, size: 1 },\r\n // { x: 162.517985611511, y: 4.03921568627451, size: 1 },\r\n // { x: 172.877697841727, y: 3.05882352941176, size: 1 },\r\n // { x: 174.172661870504, y: 2.35294117647059, size: 1 },\r\n // { x: 238.920863309353, y: 2.86274509803922, size: 1 },\r\n // { x: 260.287769784173, y: 2.7843137254902, size: 1 },\r\n // { x: 281.654676258993, y: 2.35294117647059, size: 1 },\r\n // { x: 325.68345323741, y: 2.98039215686275, size: 1 },\r\n // { x: 8.41726618705036, y: 2.50980392156863, size: 1 },\r\n // { x: 51.1510791366906, y: 2.90196078431373, size: 1 },\r\n // { x: 51.7985611510791, y: 2.74509803921569, size: 1 },\r\n // { x: 82.8776978417266, y: 4.03921568627451, size: 1 },\r\n // { x: 146.978417266187, y: 4.07843137254902, size: 1 },\r\n // { x: 180.647482014388, y: 3.01960784313725, size: 1 },\r\n // { x: 181.294964028777, y: 2.94117647058824, size: 1 },\r\n // { x: 290.719424460432, y: 3.96078431372549, size: 1 },\r\n // { x: 297.194244604317, y: 3.96078431372549, size: 1 },\r\n // { x: 325.035971223022, y: 4, size: 1 },\r\n // { x: 326.330935251799, y: 4.03921568627451, size: 1 },\r\n // { x: 328.920863309353, y: 4.15686274509804, size: 1 },\r\n // { x: 355.467625899281, y: 4, size: 1 },\r\n // { x: 14.9189189189189, y: 2.98039215686275, size: 1 },\r\n // { x: 15.5675675675676, y: 2.86274509803922, size: 1 },\r\n // { x: 16.2162162162162, y: 2.86274509803922, size: 1 },\r\n // { x: 16.8648648648649, y: 2.82352941176471, size: 1 },\r\n // { x: 35.6756756756757, y: 2.98039215686275, size: 1 },\r\n // { x: 36.972972972973, y: 2.58823529411765, size: 1 },\r\n // { x: 37.6216216216216, y: 2.19607843137255, size: 1 },\r\n // { x: 38.2702702702703, y: 2.54901960784314, size: 1 },\r\n // { x: 38.9189189189189, y: 2.50980392156863, size: 1 },\r\n // { x: 79.7837837837838, y: 3.17647058823529, size: 1 },\r\n // { x: 99.8918918918919, y: 3.2156862745098, size: 1 },\r\n // { x: 100.540540540541, y: 3.09803921568627, size: 1 },\r\n // { x: 101.837837837838, y: 2.66666666666667, size: 1 },\r\n // { x: 102.486486486486, y: 3.05882352941176, size: 1 },\r\n // { x: 123.243243243243, y: 3.09803921568627, size: 1 },\r\n // { x: 125.837837837838, y: 3.96078431372549, size: 1 },\r\n // { x: 140.756756756757, y: 4, size: 1 },\r\n // { x: 156.972972972973, y: 3.33333333333333, size: 1 },\r\n // { x: 166.702702702703, y: 2.3921568627451, size: 1 },\r\n // { x: 168, y: 2.58823529411765, size: 1 },\r\n // { x: 168.648648648649, y: 2.23529411764706, size: 1 },\r\n // { x: 189.405405405405, y: 4.07843137254902, size: 1 },\r\n // { x: 190.702702702703, y: 4.07843137254902, size: 1 },\r\n // { x: 197.189189189189, y: 4.07843137254902, size: 1 },\r\n // { x: 201.081081081081, y: 3.80392156862745, size: 1 },\r\n // { x: 209.513513513514, y: 2.94117647058824, size: 1 },\r\n // { x: 234.162162162162, y: 4.15686274509804, size: 1 },\r\n // { x: 238.054054054054, y: 3.96078431372549, size: 1 },\r\n // { x: 245.189189189189, y: 4.07843137254902, size: 1 },\r\n // { x: 276.324324324324, y: 2.94117647058824, size: 1 },\r\n // { x: 285.405405405405, y: 3.92156862745098, size: 1 },\r\n // { x: 296.432432432432, y: 3.17647058823529, size: 1 },\r\n // { x: 339.891891891892, y: 3.09803921568627, size: 1 },\r\n // { x: 2.58992805755396, y: 2.90196078431373, size: 1 },\r\n // { x: 48.5611510791367, y: 4.07843137254902, size: 1 },\r\n // { x: 68.6330935251799, y: 4.11764705882353, size: 1 },\r\n // { x: 108.776978417266, y: 2.98039215686275, size: 1 },\r\n // { x: 174.172661870504, y: 2.7843137254902, size: 1 },\r\n // { x: 248.63309352518, y: 4.19607843137255, size: 1 },\r\n // { x: 257.05035971223, y: 4.27450980392157, size: 1 },\r\n // { x: 334.748201438849, y: 4, size: 1 },\r\n // { x: 11.6546762589928, y: 3.17647058823529, size: 1 },\r\n // { x: 20.7194244604317, y: 3.09803921568627, size: 1 },\r\n // { x: 25.8992805755396, y: 3.09803921568627, size: 1 },\r\n // { x: 53.0935251798561, y: 2.98039215686275, size: 1 },\r\n // { x: 69.9280575539568, y: 3.29411764705882, size: 1 },\r\n // { x: 104.244604316547, y: 4.03921568627451, size: 1 },\r\n // { x: 159.280575539568, y: 2.7843137254902, size: 1 },\r\n // { x: 159.928057553957, y: 2.66666666666667, size: 1 },\r\n // { x: 160.575539568345, y: 2.66666666666667, size: 1 },\r\n // { x: 161.223021582734, y: 2.90196078431373, size: 1 },\r\n // { x: 180.647482014388, y: 1.88235294117647, size: 1 },\r\n // { x: 181.294964028777, y: 1.80392156862745, size: 1 },\r\n // { x: 181.942446043165, y: 2.7843137254902, size: 1 },\r\n // { x: 182.589928057554, y: 2.58823529411765, size: 1 },\r\n // { x: 185.179856115108, y: 3.13725490196078, size: 1 },\r\n // { x: 189.712230215827, y: 2.94117647058824, size: 1 },\r\n // { x: 190.359712230216, y: 2.86274509803922, size: 1 },\r\n // { x: 196.187050359712, y: 2.74509803921569, size: 1 },\r\n // { x: 196.834532374101, y: 3.01960784313725, size: 1 },\r\n // { x: 246.043165467626, y: 2.86274509803922, size: 1 },\r\n // { x: 250.575539568345, y: 3.96078431372549, size: 1 },\r\n // { x: 266.762589928058, y: 3.09803921568627, size: 1 },\r\n // { x: 310.143884892086, y: 2.27450980392157, size: 1 },\r\n // { x: 310.791366906475, y: 2.50980392156863, size: 1 },\r\n // { x: 311.438848920863, y: 2.62745098039216, size: 1 },\r\n // { x: 312.086330935252, y: 2.43137254901961, size: 1 },\r\n // { x: 328.920863309353, y: 4, size: 1 },\r\n // { x: 352.877697841727, y: 3.05882352941176, size: 1 },\r\n // { x: 14.8920863309353, y: 2.70588235294118, size: 1 },\r\n // { x: 15.5395683453237, y: 2.66666666666667, size: 1 },\r\n // { x: 36.2589928057554, y: 2.27450980392157, size: 1 },\r\n // { x: 36.9064748201439, y: 2.07843137254902, size: 1 },\r\n // { x: 58.273381294964, y: 2.54901960784314, size: 1 },\r\n // { x: 154.748201438849, y: 3.96078431372549, size: 1 },\r\n // { x: 167.05035971223, y: 3.09803921568627, size: 1 },\r\n // { x: 167.697841726619, y: 3.05882352941176, size: 1 },\r\n // { x: 209.784172661871, y: 2.90196078431373, size: 1 },\r\n // { x: 210.431654676259, y: 2.86274509803922, size: 1 },\r\n // { x: 230.503597122302, y: 2.43137254901961, size: 1 },\r\n // { x: 231.151079136691, y: 2.15686274509804, size: 1 },\r\n // { x: 231.798561151079, y: 2.86274509803922, size: 1 },\r\n // { x: 232.446043165468, y: 2.62745098039216, size: 1 },\r\n // { x: 235.035971223022, y: 4.03921568627451, size: 1 },\r\n // { x: 243.453237410072, y: 4.11764705882353, size: 1 },\r\n // { x: 244.748201438849, y: 4.11764705882353, size: 1 },\r\n // { x: 249.280575539568, y: 4.15686274509804, size: 1 },\r\n // { x: 257.697841726619, y: 4.07843137254902, size: 1 },\r\n // { x: 1.2972972972973, y: 3.37254901960784, size: 1 },\r\n // { x: 35.027027027027, y: 3.96078431372549, size: 1 },\r\n // { x: 59.6756756756757, y: 4.11764705882353, size: 1 },\r\n // { x: 60.3243243243243, y: 3.88235294117647, size: 1 },\r\n // { x: 64.8648648648649, y: 2.90196078431373, size: 1 },\r\n // { x: 65.5135135135135, y: 3.09803921568627, size: 1 },\r\n // { x: 66.1621621621622, y: 3.09803921568627, size: 1 },\r\n // { x: 66.8108108108108, y: 2.94117647058824, size: 1 },\r\n // { x: 84.3243243243243, y: 4.03921568627451, size: 1 },\r\n // { x: 85.6216216216216, y: 3.25490196078431, size: 1 },\r\n // { x: 108.972972972973, y: 3.25490196078431, size: 1 },\r\n // { x: 122.594594594595, y: 4.11764705882353, size: 1 },\r\n // { x: 149.837837837838, y: 3.29411764705882, size: 1 },\r\n // { x: 150.486486486486, y: 3.29411764705882, size: 1 },\r\n // { x: 152.432432432432, y: 2.94117647058824, size: 1 },\r\n // { x: 153.081081081081, y: 3.13725490196078, size: 1 },\r\n // { x: 153.72972972973, y: 2.82352941176471, size: 1 },\r\n // { x: 194.594594594595, y: 2.70588235294118, size: 1 },\r\n // { x: 195.243243243243, y: 2.66666666666667, size: 1 },\r\n // { x: 195.891891891892, y: 2.50980392156863, size: 1 },\r\n // { x: 196.540540540541, y: 2.35294117647059, size: 1 },\r\n // { x: 197.189189189189, y: 3.17647058823529, size: 1 },\r\n // { x: 219.891891891892, y: 3.84313725490196, size: 1 },\r\n // { x: 228.324324324324, y: 4.07843137254902, size: 1 },\r\n // { x: 243.891891891892, y: 3.45098039215686, size: 1 },\r\n // { x: 260.108108108108, y: 3.25490196078431, size: 1 },\r\n // { x: 264, y: 4.07843137254902, size: 1 },\r\n // { x: 303.567567567568, y: 3.13725490196078, size: 1 },\r\n // { x: 319.783783783784, y: 3.33333333333333, size: 1 },\r\n // { x: 324.324324324324, y: 2.86274509803922, size: 1 },\r\n // { x: 324.972972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 339.891891891892, y: 4.07843137254902, size: 1 },\r\n // { x: 29.136690647482, y: 2.86274509803922, size: 1 },\r\n // { x: 33.6690647482014, y: 4.07843137254902, size: 1 },\r\n // { x: 40.1438848920863, y: 4.03921568627451, size: 1 },\r\n // { x: 45.9712230215827, y: 4.07843137254902, size: 1 },\r\n // { x: 46.6187050359712, y: 4.15686274509804, size: 1 },\r\n // { x: 48.5611510791367, y: 4.27450980392157, size: 1 },\r\n // { x: 55.0359712230216, y: 4.07843137254902, size: 1 },\r\n // { x: 67.3381294964029, y: 4.15686274509804, size: 1 },\r\n // { x: 121.726618705036, y: 4.07843137254902, size: 1 },\r\n // { x: 150.863309352518, y: 4.23529411764706, size: 1 },\r\n // { x: 202.014388489209, y: 3.01960784313725, size: 1 },\r\n // { x: 202.661870503597, y: 2.90196078431373, size: 1 },\r\n // { x: 203.309352517986, y: 2.86274509803922, size: 1 },\r\n // { x: 254.460431654676, y: 4.03921568627451, size: 1 },\r\n // { x: 290.719424460432, y: 3.17647058823529, size: 1 },\r\n // { x: 296.546762589928, y: 3.25490196078431, size: 1 },\r\n // { x: 331.510791366906, y: 3.01960784313725, size: 1 },\r\n // { x: 1.94244604316547, y: 4.03921568627451, size: 1 },\r\n // { x: 4.53237410071942, y: 4.07843137254902, size: 1 },\r\n // { x: 9.06474820143885, y: 3.96078431372549, size: 1 },\r\n // { x: 66.0431654676259, y: 4.07843137254902, size: 1 },\r\n // { x: 101.007194244604, y: 2.90196078431373, size: 1 },\r\n // { x: 122.374100719424, y: 3.13725490196078, size: 1 },\r\n // { x: 181.942446043165, y: 4.11764705882353, size: 1 },\r\n // { x: 295.251798561151, y: 2.94117647058824, size: 1 },\r\n // { x: 295.89928057554, y: 2.7843137254902, size: 1 },\r\n // { x: 321.798561151079, y: 4.07843137254902, size: 1 },\r\n // { x: 347.697841726619, y: 4.07843137254902, size: 1 },\r\n // { x: 15.5675675675676, y: 3.92156862745098, size: 1 },\r\n // { x: 22.0540540540541, y: 3.13725490196078, size: 1 },\r\n // { x: 43.4594594594595, y: 3.29411764705882, size: 1 },\r\n // { x: 48.6486486486486, y: 3.88235294117647, size: 1 },\r\n // { x: 49.9459459459459, y: 4.19607843137255, size: 1 },\r\n // { x: 51.2432432432432, y: 4.07843137254902, size: 1 },\r\n // { x: 53.8378378378378, y: 4.07843137254902, size: 1 },\r\n // { x: 55.1351351351351, y: 4.07843137254902, size: 1 },\r\n // { x: 55.7837837837838, y: 3.96078431372549, size: 1 },\r\n // { x: 56.4324324324324, y: 4.07843137254902, size: 1 },\r\n // { x: 60.972972972973, y: 4, size: 1 },\r\n // { x: 62.2702702702703, y: 4, size: 1 },\r\n // { x: 64.8648648648649, y: 3.01960784313725, size: 1 },\r\n // { x: 92.7567567567568, y: 4.11764705882353, size: 1 },\r\n // { x: 102.486486486486, y: 4, size: 1 },\r\n // { x: 108.324324324324, y: 2.7843137254902, size: 1 },\r\n // { x: 108.972972972973, y: 3.01960784313725, size: 1 },\r\n // { x: 151.135135135135, y: 2.74509803921569, size: 1 },\r\n // { x: 151.783783783784, y: 2.98039215686275, size: 1 },\r\n // { x: 171.891891891892, y: 3.2156862745098, size: 1 },\r\n // { x: 173.189189189189, y: 2.11764705882353, size: 1 },\r\n // { x: 184.864864864865, y: 3.96078431372549, size: 1 },\r\n // { x: 194.594594594595, y: 3.13725490196078, size: 1 },\r\n // { x: 195.243243243243, y: 2.98039215686275, size: 1 },\r\n // { x: 201.72972972973, y: 4, size: 1 },\r\n // { x: 236.108108108108, y: 3.33333333333333, size: 1 },\r\n // { x: 238.054054054054, y: 2.47058823529412, size: 1 },\r\n // { x: 240.648648648649, y: 4.03921568627451, size: 1 },\r\n // { x: 245.837837837838, y: 4.03921568627451, size: 1 },\r\n // { x: 259.459459459459, y: 2.31372549019608, size: 1 },\r\n // { x: 260.108108108108, y: 2.31372549019608, size: 1 },\r\n // { x: 279.567567567568, y: 3.37254901960784, size: 1 },\r\n // { x: 280.864864864865, y: 2.66666666666667, size: 1 },\r\n // { x: 281.513513513513, y: 2.70588235294118, size: 1 },\r\n // { x: 289.297297297297, y: 4, size: 1 },\r\n // { x: 291.243243243243, y: 3.96078431372549, size: 1 },\r\n // { x: 316.540540540541, y: 4.11764705882353, size: 1 },\r\n // { x: 328.864864864865, y: 4.07843137254902, size: 1 },\r\n // { x: 330.162162162162, y: 3.96078431372549, size: 1 },\r\n // { x: 333.405405405405, y: 4.07843137254902, size: 1 },\r\n // { x: 345.72972972973, y: 2.98039215686275, size: 1 },\r\n // { x: 346.378378378378, y: 3.09803921568627, size: 1 },\r\n // { x: 7.76978417266187, y: 2.62745098039216, size: 1 },\r\n // { x: 27.841726618705, y: 3.33333333333333, size: 1 },\r\n // { x: 29.136690647482, y: 2.11764705882353, size: 1 },\r\n // { x: 72.5179856115108, y: 4.23529411764706, size: 1 },\r\n // { x: 75.1079136690647, y: 2.86274509803922, size: 1 },\r\n // { x: 75.7553956834532, y: 2.70588235294118, size: 1 },\r\n // { x: 78.3453237410072, y: 2.7843137254902, size: 1 },\r\n // { x: 79.6402877697842, y: 2.70588235294118, size: 1 },\r\n // { x: 80.9352517985612, y: 2.94117647058824, size: 1 },\r\n // { x: 82.8776978417266, y: 2.82352941176471, size: 1 },\r\n // { x: 86.1151079136691, y: 2.66666666666667, size: 1 },\r\n // { x: 93.8848920863309, y: 2.7843137254902, size: 1 },\r\n // { x: 94.5323741007194, y: 2.58823529411765, size: 1 },\r\n // { x: 110.071942446043, y: 4.27450980392157, size: 1 },\r\n // { x: 223.381294964029, y: 3.05882352941176, size: 1 },\r\n // { x: 245.395683453237, y: 3.09803921568627, size: 1 },\r\n // { x: 246.043165467626, y: 4.03921568627451, size: 1 },\r\n // { x: 247.338129496403, y: 4, size: 1 },\r\n // { x: 260.935251798561, y: 3.96078431372549, size: 1 },\r\n // { x: 269.352517985611, y: 4.07843137254902, size: 1 },\r\n // { x: 292.661870503597, y: 4.07843137254902, size: 1 },\r\n // { x: 332.805755395683, y: 3.17647058823529, size: 1 },\r\n // { x: 333.453237410072, y: 3.09803921568627, size: 1 },\r\n // { x: 343.165467625899, y: 2.98039215686275, size: 1 },\r\n // { x: 42.0863309352518, y: 4.15686274509804, size: 1 },\r\n // { x: 93.2374100719424, y: 4.15686274509804, size: 1 },\r\n // { x: 121.726618705036, y: 3.13725490196078, size: 1 },\r\n // { x: 122.374100719424, y: 2.54901960784314, size: 1 },\r\n // { x: 123.021582733813, y: 2.58823529411765, size: 1 },\r\n // { x: 123.669064748201, y: 2.66666666666667, size: 1 },\r\n // { x: 124.31654676259, y: 2.43137254901961, size: 1 },\r\n // { x: 145.035971223022, y: 3.05882352941176, size: 1 },\r\n // { x: 176.115107913669, y: 4.07843137254902, size: 1 },\r\n // { x: 202.014388489209, y: 4.03921568627451, size: 1 },\r\n // { x: 241.510791366906, y: 3.09803921568627, size: 1 },\r\n // { x: 244.10071942446, y: 3.2156862745098, size: 1 },\r\n // { x: 273.237410071942, y: 3.09803921568627, size: 1 },\r\n // { x: 273.884892086331, y: 3.09803921568627, size: 1 },\r\n // { x: 316.618705035971, y: 3.05882352941176, size: 1 },\r\n // { x: 317.26618705036, y: 3.01960784313725, size: 1 },\r\n // { x: 12.3243243243243, y: 3.88235294117647, size: 1 },\r\n // { x: 21.4054054054054, y: 2.70588235294118, size: 1 },\r\n // { x: 22.0540540540541, y: 2.94117647058824, size: 1 },\r\n // { x: 27.8918918918919, y: 3.29411764705882, size: 1 },\r\n // { x: 42.8108108108108, y: 2.82352941176471, size: 1 },\r\n // { x: 59.027027027027, y: 4.03921568627451, size: 1 },\r\n // { x: 62.9189189189189, y: 3.01960784313725, size: 1 },\r\n // { x: 63.5675675675676, y: 3.09803921568627, size: 1 },\r\n // { x: 64.2162162162162, y: 2.90196078431373, size: 1 },\r\n // { x: 64.8648648648649, y: 2.07843137254902, size: 1 },\r\n // { x: 79.7837837837838, y: 3.96078431372549, size: 1 },\r\n // { x: 86.9189189189189, y: 3.09803921568627, size: 1 },\r\n // { x: 87.5675675675676, y: 4.07843137254902, size: 1 },\r\n // { x: 90.1621621621622, y: 4.15686274509804, size: 1 },\r\n // { x: 92.7567567567568, y: 3.96078431372549, size: 1 },\r\n // { x: 93.4054054054054, y: 4.03921568627451, size: 1 },\r\n // { x: 99.2432432432432, y: 4.11764705882353, size: 1 },\r\n // { x: 101.837837837838, y: 3.96078431372549, size: 1 },\r\n // { x: 105.081081081081, y: 3.92156862745098, size: 1 },\r\n // { x: 107.675675675676, y: 2.50980392156863, size: 1 },\r\n // { x: 108.324324324324, y: 2.50980392156863, size: 1 },\r\n // { x: 139.459459459459, y: 4, size: 1 },\r\n // { x: 151.135135135135, y: 2.94117647058824, size: 1 },\r\n // { x: 194.594594594595, y: 2.86274509803922, size: 1 },\r\n // { x: 207.567567567568, y: 4, size: 1 },\r\n // { x: 216, y: 2.3921568627451, size: 1 },\r\n // { x: 216.648648648649, y: 2.47058823529412, size: 1 },\r\n // { x: 230.918918918919, y: 3.88235294117647, size: 1 },\r\n // { x: 237.405405405405, y: 2.58823529411765, size: 1 },\r\n // { x: 238.054054054054, y: 2.15686274509804, size: 1 },\r\n // { x: 280.864864864865, y: 2.98039215686275, size: 1 },\r\n // { x: 281.513513513513, y: 2.86274509803922, size: 1 },\r\n // { x: 284.756756756757, y: 3.33333333333333, size: 1 },\r\n // { x: 287.351351351351, y: 3.2156862745098, size: 1 },\r\n // { x: 292.540540540541, y: 3.2156862745098, size: 1 },\r\n // { x: 302.27027027027, y: 3.13725490196078, size: 1 },\r\n // { x: 324.972972972973, y: 3.25490196078431, size: 1 },\r\n // { x: 333.405405405405, y: 4.03921568627451, size: 1 },\r\n // { x: 345.72972972973, y: 2.58823529411765, size: 1 },\r\n // { x: 346.378378378378, y: 2.82352941176471, size: 1 },\r\n // { x: 355.459459459459, y: 4.03921568627451, size: 1 },\r\n // { x: 27.1942446043165, y: 3.2156862745098, size: 1 },\r\n // { x: 29.136690647482, y: 2.66666666666667, size: 1 },\r\n // { x: 93.8848920863309, y: 2.74509803921569, size: 1 },\r\n // { x: 115.251798561151, y: 3.13725490196078, size: 1 },\r\n // { x: 115.89928057554, y: 3.01960784313725, size: 1 },\r\n // { x: 128.848920863309, y: 4, size: 1 },\r\n // { x: 139.208633093525, y: 3.96078431372549, size: 1 },\r\n // { x: 158.63309352518, y: 3.01960784313725, size: 1 },\r\n // { x: 180, y: 2, size: 1 },\r\n // { x: 180.647482014388, y: 2, size: 1 },\r\n // { x: 201.36690647482, y: 2.82352941176471, size: 1 },\r\n // { x: 275.827338129496, y: 4, size: 1 },\r\n // { x: 352.877697841727, y: 3.01960784313725, size: 1 },\r\n // { x: 0.647482014388489, y: 3.88235294117647, size: 1 },\r\n // { x: 2.58992805755396, y: 4, size: 1 },\r\n // { x: 3.88489208633094, y: 4.07843137254902, size: 1 },\r\n // { x: 9.71223021582734, y: 4.07843137254902, size: 1 },\r\n // { x: 14.8920863309353, y: 3.25490196078431, size: 1 },\r\n // { x: 16.1870503597122, y: 4.35294117647059, size: 1 },\r\n // { x: 35.6115107913669, y: 2.19607843137255, size: 1 },\r\n // { x: 36.2589928057554, y: 1.76470588235294, size: 1 },\r\n // { x: 36.9064748201439, y: 2.66666666666667, size: 1 },\r\n // { x: 37.5539568345324, y: 2.70588235294118, size: 1 },\r\n // { x: 38.2014388489209, y: 2.7843137254902, size: 1 },\r\n // { x: 60.2158273381295, y: 4, size: 1 },\r\n // { x: 100.359712230216, y: 2.35294117647059, size: 1 },\r\n // { x: 101.007194244604, y: 2.58823529411765, size: 1 },\r\n // { x: 121.726618705036, y: 3.09803921568627, size: 1 },\r\n // { x: 122.374100719424, y: 1.49019607843137, size: 1 },\r\n // { x: 143.741007194245, y: 2.70588235294118, size: 1 },\r\n // { x: 229.856115107914, y: 2.15686274509804, size: 1 },\r\n // { x: 230.503597122302, y: 1.72549019607843, size: 1 },\r\n // { x: 235.68345323741, y: 4, size: 1 },\r\n // { x: 237.625899280576, y: 4.03921568627451, size: 1 },\r\n // { x: 251.870503597122, y: 2.27450980392157, size: 1 },\r\n // { x: 273.237410071942, y: 2.70588235294118, size: 1 },\r\n // { x: 273.884892086331, y: 2.82352941176471, size: 1 },\r\n // { x: 282.94964028777, y: 4.03921568627451, size: 1 },\r\n // { x: 293.956834532374, y: 4.07843137254902, size: 1 },\r\n // { x: 294.604316546763, y: 4.23529411764706, size: 1 },\r\n // { x: 295.89928057554, y: 4.07843137254902, size: 1 },\r\n // { x: 301.726618705036, y: 4.03921568627451, size: 1 },\r\n // { x: 305.611510791367, y: 4.11764705882353, size: 1 },\r\n // { x: 310.143884892086, y: 4.07843137254902, size: 1 },\r\n // { x: 313.381294964029, y: 4.11764705882353, size: 1 },\r\n // { x: 0, y: 3.13725490196078, size: 1 },\r\n // { x: 31.0791366906475, y: 3.96078431372549, size: 1 },\r\n // { x: 45.3237410071942, y: 4.11764705882353, size: 1 },\r\n // { x: 58.273381294964, y: 4.07843137254902, size: 1 },\r\n // { x: 64.7482014388489, y: 2.90196078431373, size: 1 },\r\n // { x: 78.9928057553957, y: 4.11764705882353, size: 1 },\r\n // { x: 86.1151079136691, y: 2.19607843137255, size: 1 },\r\n // { x: 128.848920863309, y: 2.50980392156863, size: 1 },\r\n // { x: 129.496402877698, y: 1.64705882352941, size: 1 },\r\n // { x: 172.230215827338, y: 1.45098039215686, size: 1 },\r\n // { x: 172.877697841727, y: 1.52941176470588, size: 1 },\r\n // { x: 222.086330935252, y: 4, size: 1 },\r\n // { x: 228.561151079137, y: 4.15686274509804, size: 1 },\r\n // { x: 230.503597122302, y: 4.03921568627451, size: 1 },\r\n // { x: 266.115107913669, y: 4.11764705882353, size: 1 },\r\n // { x: 6.48648648648649, y: 2.50980392156863, size: 1 },\r\n // { x: 7.13513513513514, y: 2.47058823529412, size: 1 },\r\n // { x: 7.78378378378378, y: 4.03921568627451, size: 1 },\r\n // { x: 9.72972972972973, y: 4.03921568627451, size: 1 },\r\n // { x: 14.2702702702703, y: 3.96078431372549, size: 1 },\r\n // { x: 16.2162162162162, y: 4.11764705882353, size: 1 },\r\n // { x: 28.5405405405405, y: 2.74509803921569, size: 1 },\r\n // { x: 76.5405405405405, y: 3.92156862745098, size: 1 },\r\n // { x: 92.7567567567568, y: 3.37254901960784, size: 1 },\r\n // { x: 97.2972972972973, y: 3.96078431372549, size: 1 },\r\n // { x: 108.972972972973, y: 4.19607843137255, size: 1 },\r\n // { x: 121.945945945946, y: 4.07843137254902, size: 1 },\r\n // { x: 131.027027027027, y: 4.07843137254902, size: 1 },\r\n // { x: 137.513513513514, y: 3.92156862745098, size: 1 },\r\n // { x: 138.810810810811, y: 3.92156862745098, size: 1 },\r\n // { x: 139.459459459459, y: 4.03921568627451, size: 1 },\r\n // { x: 142.054054054054, y: 4, size: 1 },\r\n // { x: 142.702702702703, y: 4, size: 1 },\r\n // { x: 146.594594594595, y: 4.15686274509804, size: 1 },\r\n // { x: 147.243243243243, y: 4.07843137254902, size: 1 },\r\n // { x: 147.891891891892, y: 4.11764705882353, size: 1 },\r\n // { x: 161.513513513514, y: 3.92156862745098, size: 1 },\r\n // { x: 182.27027027027, y: 3.25490196078431, size: 1 },\r\n // { x: 184.216216216216, y: 3.92156862745098, size: 1 },\r\n // { x: 186.162162162162, y: 3.05882352941176, size: 1 },\r\n // { x: 222.486486486486, y: 3.17647058823529, size: 1 },\r\n // { x: 223.135135135135, y: 3.01960784313725, size: 1 },\r\n // { x: 225.081081081081, y: 3.84313725490196, size: 1 },\r\n // { x: 240, y: 4, size: 1 },\r\n // { x: 244.540540540541, y: 3.17647058823529, size: 1 },\r\n // { x: 247.783783783784, y: 3.92156862745098, size: 1 },\r\n // { x: 251.027027027027, y: 4.11764705882353, size: 1 },\r\n // { x: 257.513513513513, y: 4.03921568627451, size: 1 },\r\n // { x: 262.702702702703, y: 4.19607843137255, size: 1 },\r\n // { x: 269.189189189189, y: 3.96078431372549, size: 1 },\r\n // { x: 270.486486486487, y: 4.31372549019608, size: 1 },\r\n // { x: 271.783783783784, y: 3.92156862745098, size: 1 },\r\n // { x: 288, y: 2.94117647058824, size: 1 },\r\n // { x: 293.189189189189, y: 4, size: 1 },\r\n // { x: 295.135135135135, y: 3.96078431372549, size: 1 },\r\n // { x: 295.783783783784, y: 4, size: 1 },\r\n // { x: 300.324324324324, y: 4.11764705882353, size: 1 },\r\n // { x: 300.972972972973, y: 3.96078431372549, size: 1 },\r\n // { x: 314.594594594595, y: 3.92156862745098, size: 1 },\r\n // { x: 329.513513513513, y: 3.2156862745098, size: 1 },\r\n // { x: 330.810810810811, y: 2.66666666666667, size: 1 },\r\n // { x: 331.459459459459, y: 2.47058823529412, size: 1 },\r\n // { x: 341.837837837838, y: 3.25490196078431, size: 1 },\r\n // { x: 348.324324324324, y: 3.29411764705882, size: 1 },\r\n // { x: 352.216216216216, y: 3.01960784313725, size: 1 },\r\n // { x: 56.9784172661871, y: 2.98039215686275, size: 1 },\r\n // { x: 57.6258992805755, y: 2.74509803921569, size: 1 },\r\n // { x: 100.359712230216, y: 2.90196078431373, size: 1 },\r\n // { x: 101.007194244604, y: 2.86274509803922, size: 1 },\r\n // { x: 121.079136690647, y: 3.17647058823529, size: 1 },\r\n // { x: 121.726618705036, y: 2.74509803921569, size: 1 },\r\n // { x: 148.273381294964, y: 4.11764705882353, size: 1 },\r\n // { x: 187.122302158273, y: 2.7843137254902, size: 1 },\r\n // { x: 208.489208633094, y: 2.94117647058824, size: 1 },\r\n // { x: 229.856115107914, y: 3.01960784313725, size: 1 },\r\n // { x: 251.870503597122, y: 2.66666666666667, size: 1 },\r\n // { x: 273.237410071942, y: 2.74509803921569, size: 1 },\r\n // { x: 282.94964028777, y: 4.07843137254902, size: 1 },\r\n // { x: 315.971223021583, y: 2.3921568627451, size: 1 },\r\n // { x: 316.618705035971, y: 2.50980392156863, size: 1 },\r\n // { x: 337.338129496403, y: 3.2156862745098, size: 1 },\r\n // { x: 13.6216216216216, y: 3.84313725490196, size: 1 },\r\n // { x: 14.9189189189189, y: 4.07843137254902, size: 1 },\r\n // { x: 21.4054054054054, y: 2.66666666666667, size: 1 },\r\n // { x: 30.4864864864865, y: 4.03921568627451, size: 1 },\r\n // { x: 40.8648648648649, y: 3.33333333333333, size: 1 },\r\n // { x: 42.8108108108108, y: 2.98039215686275, size: 1 },\r\n // { x: 64.2162162162162, y: 3.13725490196078, size: 1 },\r\n // { x: 66.8108108108108, y: 3.96078431372549, size: 1 },\r\n // { x: 71.3513513513514, y: 3.96078431372549, size: 1 },\r\n // { x: 84.3243243243243, y: 3.33333333333333, size: 1 },\r\n // { x: 90.8108108108108, y: 3.96078431372549, size: 1 },\r\n // { x: 129.081081081081, y: 2.74509803921569, size: 1 },\r\n // { x: 129.72972972973, y: 2.82352941176471, size: 1 },\r\n // { x: 151.135135135135, y: 2.86274509803922, size: 1 },\r\n // { x: 171.891891891892, y: 3.09803921568627, size: 1 },\r\n // { x: 172.540540540541, y: 1.64705882352941, size: 1 },\r\n // { x: 192, y: 3.17647058823529, size: 1 },\r\n // { x: 193.297297297297, y: 2.86274509803922, size: 1 },\r\n // { x: 193.945945945946, y: 2.15686274509804, size: 1 },\r\n // { x: 194.594594594595, y: 2.03921568627451, size: 1 },\r\n // { x: 213.405405405405, y: 3.2156862745098, size: 1 },\r\n // { x: 218.594594594595, y: 3.2156862745098, size: 1 },\r\n // { x: 219.243243243243, y: 3.13725490196078, size: 1 },\r\n // { x: 221.837837837838, y: 3.13725490196078, size: 1 },\r\n // { x: 223.135135135135, y: 3.05882352941176, size: 1 },\r\n // { x: 229.621621621622, y: 3.13725490196078, size: 1 },\r\n // { x: 232.864864864865, y: 3.05882352941176, size: 1 },\r\n // { x: 233.513513513514, y: 3.01960784313725, size: 1 },\r\n // { x: 234.162162162162, y: 2.94117647058824, size: 1 },\r\n // { x: 258.810810810811, y: 2.86274509803922, size: 1 },\r\n // { x: 267.891891891892, y: 3.96078431372549, size: 1 },\r\n // { x: 278.918918918919, y: 3.29411764705882, size: 1 },\r\n // { x: 280.216216216216, y: 2.50980392156863, size: 1 },\r\n // { x: 280.864864864865, y: 2.11764705882353, size: 1 },\r\n // { x: 300.324324324324, y: 3.25490196078431, size: 1 },\r\n // { x: 302.27027027027, y: 2.90196078431373, size: 1 },\r\n // { x: 323.675675675676, y: 2.70588235294118, size: 1 },\r\n // { x: 324.324324324324, y: 2.7843137254902, size: 1 },\r\n // { x: 338.594594594595, y: 4.03921568627451, size: 1 },\r\n // { x: 345.081081081081, y: 2.70588235294118, size: 1 },\r\n // { x: 345.72972972973, y: 2.35294117647059, size: 1 },\r\n // { x: 7.12230215827338, y: 2.74509803921569, size: 1 },\r\n // { x: 71.8705035971223, y: 2.98039215686275, size: 1 },\r\n // { x: 88.0575539568345, y: 3.92156862745098, size: 1 },\r\n // { x: 201.36690647482, y: 2.54901960784314, size: 1 },\r\n // { x: 236.330935251799, y: 2.90196078431373, size: 1 },\r\n // { x: 239.568345323741, y: 3.13725490196078, size: 1 },\r\n // { x: 240.215827338129, y: 2.7843137254902, size: 1 },\r\n // { x: 244.10071942446, y: 3.09803921568627, size: 1 },\r\n // { x: 246.043165467626, y: 3.01960784313725, size: 1 },\r\n // { x: 247.338129496403, y: 3.09803921568627, size: 1 },\r\n // { x: 255.755395683453, y: 2.98039215686275, size: 1 },\r\n // { x: 258.992805755396, y: 3.17647058823529, size: 1 },\r\n // { x: 13.5971223021583, y: 2.94117647058824, size: 1 },\r\n // { x: 14.2446043165468, y: 2.74509803921569, size: 1 },\r\n // { x: 31.726618705036, y: 4.11764705882353, size: 1 },\r\n // { x: 35.6115107913669, y: 2.47058823529412, size: 1 },\r\n // { x: 66.0431654676259, y: 4.11764705882353, size: 1 },\r\n // { x: 100.359712230216, y: 2.27450980392157, size: 1 },\r\n // { x: 165.107913669065, y: 2.86274509803922, size: 1 },\r\n // { x: 186.474820143885, y: 2.98039215686275, size: 1 },\r\n // { x: 208.489208633094, y: 2.90196078431373, size: 1 },\r\n // { x: 273.237410071942, y: 2.94117647058824, size: 1 },\r\n // { x: 294.604316546763, y: 2.74509803921569, size: 1 },\r\n // { x: 315.971223021583, y: 2.58823529411765, size: 1 },\r\n // { x: 316.618705035971, y: 2.62745098039216, size: 1 },\r\n // { x: 337.338129496403, y: 3.13725490196078, size: 1 },\r\n // { x: 345.107913669065, y: 3.96078431372549, size: 1 },\r\n // { x: 359.352517985611, y: 2.90196078431373, size: 1 },\r\n // { x: 36.3243243243243, y: 3.92156862745098, size: 1 },\r\n // { x: 42.1621621621622, y: 2.82352941176471, size: 1 },\r\n // { x: 42.8108108108108, y: 2.3921568627451, size: 1 },\r\n // { x: 58.3783783783784, y: 3.96078431372549, size: 1 },\r\n // { x: 64.2162162162162, y: 2.54901960784314, size: 1 },\r\n // { x: 84.3243243243243, y: 3.25490196078431, size: 1 },\r\n // { x: 85.6216216216216, y: 2.43137254901961, size: 1 },\r\n // { x: 86.2702702702703, y: 2.54901960784314, size: 1 },\r\n // { x: 90.1621621621622, y: 4, size: 1 },\r\n // { x: 125.189189189189, y: 4.07843137254902, size: 1 },\r\n // { x: 149.837837837838, y: 3.37254901960784, size: 1 },\r\n // { x: 150.486486486486, y: 2.54901960784314, size: 1 },\r\n // { x: 151.135135135135, y: 2.50980392156863, size: 1 },\r\n // { x: 171.891891891892, y: 2.62745098039216, size: 1 },\r\n // { x: 172.540540540541, y: 2.74509803921569, size: 1 },\r\n // { x: 192, y: 3.2156862745098, size: 1 },\r\n // { x: 192.648648648649, y: 3.29411764705882, size: 1 },\r\n // { x: 193.297297297297, y: 3.09803921568627, size: 1 },\r\n // { x: 193.945945945946, y: 2.82352941176471, size: 1 },\r\n // { x: 216, y: 3.13725490196078, size: 1 },\r\n // { x: 225.081081081081, y: 4, size: 1 },\r\n // { x: 260.756756756757, y: 4, size: 1 },\r\n // { x: 280.216216216216, y: 2.70588235294118, size: 1 },\r\n // { x: 280.864864864865, y: 2.7843137254902, size: 1 },\r\n // { x: 301.621621621622, y: 3.01960784313725, size: 1 },\r\n // { x: 302.27027027027, y: 2.62745098039216, size: 1 },\r\n // { x: 323.675675675676, y: 3.05882352941176, size: 1 },\r\n // { x: 345.72972972973, y: 3.25490196078431, size: 1 },\r\n // { x: 354.162162162162, y: 4.03921568627451, size: 1 },\r\n // { x: 6.47482014388489, y: 2.82352941176471, size: 1 },\r\n // { x: 7.12230215827338, y: 2.50980392156863, size: 1 },\r\n // { x: 32.3741007194245, y: 4.03921568627451, size: 1 },\r\n // { x: 133.381294964029, y: 4.07843137254902, size: 1 },\r\n // { x: 136.618705035971, y: 2.90196078431373, size: 1 },\r\n // { x: 157.985611510791, y: 2.54901960784314, size: 1 },\r\n // { x: 179.352517985612, y: 2.86274509803922, size: 1 },\r\n // { x: 180, y: 2.98039215686275, size: 1 },\r\n // { x: 201.36690647482, y: 2.70588235294118, size: 1 },\r\n // { x: 265.467625899281, y: 3.01960784313725, size: 1 },\r\n // { x: 274.532374100719, y: 4.03921568627451, size: 1 },\r\n // { x: 330.215827338129, y: 3.17647058823529, size: 1 },\r\n // { x: 352.230215827338, y: 2.74509803921569, size: 1 },\r\n // { x: 14.2446043165468, y: 2.27450980392157, size: 1 },\r\n // { x: 33.0215827338129, y: 4.15686274509804, size: 1 },\r\n // { x: 78.9928057553957, y: 2.47058823529412, size: 1 },\r\n // { x: 193.597122302158, y: 4, size: 1 },\r\n // { x: 207.841726618705, y: 2.35294117647059, size: 1 },\r\n // { x: 208.489208633094, y: 2.27450980392157, size: 1 },\r\n // { x: 229.856115107914, y: 2.82352941176471, size: 1 },\r\n // { x: 251.223021582734, y: 1.29411764705882, size: 1 },\r\n // { x: 251.870503597122, y: 1.76470588235294, size: 1 },\r\n // { x: 252.517985611511, y: 1.45098039215686, size: 1 },\r\n // { x: 253.165467625899, y: 1.33333333333333, size: 1 },\r\n // { x: 266.762589928058, y: 2.98039215686275, size: 1 },\r\n // { x: 294.604316546763, y: 2.90196078431373, size: 1 },\r\n // { x: 314.028776978417, y: 3.33333333333333, size: 1 },\r\n // { x: 337.985611510791, y: 3.01960784313725, size: 1 },\r\n // { x: 359.352517985611, y: 2.50980392156863, size: 1 },\r\n // { x: 20.7194244604317, y: 2.66666666666667, size: 1 },\r\n // { x: 56.9784172661871, y: 4.23529411764706, size: 1 },\r\n // { x: 63.4532374100719, y: 2.86274509803922, size: 1 },\r\n // { x: 64.1007194244604, y: 2.7843137254902, size: 1 },\r\n // { x: 107.482014388489, y: 2.35294117647059, size: 1 },\r\n // { x: 117.194244604317, y: 4.07843137254902, size: 1 },\r\n // { x: 128.848920863309, y: 2.47058823529412, size: 1 },\r\n // { x: 139.856115107914, y: 4.03921568627451, size: 1 },\r\n // { x: 150.215827338129, y: 2.3921568627451, size: 1 },\r\n // { x: 153.453237410072, y: 4.11764705882353, size: 1 },\r\n // { x: 299.784172661871, y: 3.13725490196078, size: 1 },\r\n // { x: 301.726618705036, y: 2.03921568627451, size: 1 },\r\n // { x: 302.374100719424, y: 4.07843137254902, size: 1 },\r\n // { x: 322.446043165468, y: 3.01960784313725, size: 1 },\r\n // { x: 323.093525179856, y: 3.13725490196078, size: 1 },\r\n // { x: 342.517985611511, y: 3.09803921568627, size: 1 },\r\n // { x: 344.460431654676, y: 1.88235294117647, size: 1 },\r\n // { x: 354.172661870504, y: 4, size: 1 },\r\n // { x: 5.83783783783784, y: 2.35294117647059, size: 1 },\r\n // { x: 6.48648648648649, y: 2.66666666666667, size: 1 },\r\n // { x: 57.0810810810811, y: 3.84313725490196, size: 1 },\r\n // { x: 60.3243243243243, y: 4.03921568627451, size: 1 },\r\n // { x: 62.9189189189189, y: 3.88235294117647, size: 1 },\r\n // { x: 68.1081081081081, y: 3.80392156862745, size: 1 },\r\n // { x: 70.7027027027027, y: 3.25490196078431, size: 1 },\r\n // { x: 113.513513513514, y: 3.2156862745098, size: 1 },\r\n // { x: 118.702702702703, y: 4, size: 1 },\r\n // { x: 127.783783783784, y: 4, size: 1 },\r\n // { x: 140.756756756757, y: 3.92156862745098, size: 1 },\r\n // { x: 157.621621621622, y: 3.01960784313725, size: 1 },\r\n // { x: 171.243243243243, y: 3.84313725490196, size: 1 },\r\n // { x: 187.459459459459, y: 4.03921568627451, size: 1 },\r\n // { x: 188.108108108108, y: 3.88235294117647, size: 1 },\r\n // { x: 200.432432432432, y: 3.05882352941176, size: 1 },\r\n // { x: 201.081081081081, y: 2.90196078431373, size: 1 },\r\n // { x: 201.72972972973, y: 2.86274509803922, size: 1 },\r\n // { x: 202.378378378378, y: 2.82352941176471, size: 1 },\r\n // { x: 203.675675675676, y: 3.96078431372549, size: 1 },\r\n // { x: 206.27027027027, y: 4.11764705882353, size: 1 },\r\n // { x: 214.054054054054, y: 4, size: 1 },\r\n // { x: 221.837837837838, y: 2.66666666666667, size: 1 },\r\n // { x: 222.486486486486, y: 2.66666666666667, size: 1 },\r\n // { x: 240.648648648649, y: 3.37254901960784, size: 1 },\r\n // { x: 243.243243243243, y: 3.09803921568627, size: 1 },\r\n // { x: 243.891891891892, y: 2.66666666666667, size: 1 },\r\n // { x: 244.540540540541, y: 3.2156862745098, size: 1 },\r\n // { x: 264, y: 3.25490196078431, size: 1 },\r\n // { x: 265.297297297297, y: 2.82352941176471, size: 1 },\r\n // { x: 265.945945945946, y: 2.82352941176471, size: 1 },\r\n // { x: 267.891891891892, y: 3.2156862745098, size: 1 },\r\n // { x: 271.135135135135, y: 3.25490196078431, size: 1 },\r\n // { x: 273.081081081081, y: 3.13725490196078, size: 1 },\r\n // { x: 284.756756756757, y: 3.2156862745098, size: 1 },\r\n // { x: 309.405405405405, y: 3.05882352941176, size: 1 },\r\n // { x: 317.837837837838, y: 3.84313725490196, size: 1 },\r\n // { x: 348.972972972973, y: 4.07843137254902, size: 1 },\r\n // { x: 34.9640287769784, y: 2.7843137254902, size: 1 },\r\n // { x: 56.3309352517986, y: 2.50980392156863, size: 1 },\r\n // { x: 56.9784172661871, y: 2.50980392156863, size: 1 },\r\n // { x: 143.093525179856, y: 3.05882352941176, size: 1 },\r\n // { x: 164.460431654676, y: 2.86274509803922, size: 1 },\r\n // { x: 165.107913669065, y: 2.90196078431373, size: 1 },\r\n // { x: 216.906474820144, y: 4.27450980392157, size: 1 },\r\n // { x: 229.208633093525, y: 3.09803921568627, size: 1 },\r\n // { x: 250.575539568345, y: 3.01960784313725, size: 1 },\r\n // { x: 315.323741007194, y: 2.66666666666667, size: 1 },\r\n // { x: 315.971223021583, y: 2.82352941176471, size: 1 },\r\n // { x: 337.338129496403, y: 2.74509803921569, size: 1 },\r\n // { x: 25.2517985611511, y: 4.03921568627451, size: 1 },\r\n // { x: 42.0863309352518, y: 3.13725490196078, size: 1 },\r\n // { x: 64.1007194244604, y: 2.90196078431373, size: 1 },\r\n // { x: 150.215827338129, y: 2.82352941176471, size: 1 },\r\n // { x: 192.94964028777, y: 2.47058823529412, size: 1 },\r\n // { x: 193.597122302158, y: 2.58823529411765, size: 1 },\r\n // { x: 214.964028776978, y: 2.70588235294118, size: 1 },\r\n // { x: 215.611510791367, y: 3.01960784313725, size: 1 },\r\n // { x: 236.330935251799, y: 2.35294117647059, size: 1 },\r\n // { x: 5.83783783783784, y: 2.82352941176471, size: 1 },\r\n // { x: 12.972972972973, y: 4.03921568627451, size: 1 },\r\n // { x: 27.2432432432432, y: 2.82352941176471, size: 1 },\r\n // { x: 27.8918918918919, y: 2.47058823529412, size: 1 },\r\n // { x: 28.5405405405405, y: 3.25490196078431, size: 1 },\r\n // { x: 30.4864864864865, y: 3.29411764705882, size: 1 },\r\n // { x: 35.6756756756757, y: 3.13725490196078, size: 1 },\r\n // { x: 49.2972972972973, y: 2.54901960784314, size: 1 },\r\n // { x: 52.5405405405405, y: 3.92156862745098, size: 1 },\r\n // { x: 94.054054054054, y: 4.03921568627451, size: 1 },\r\n // { x: 95.3513513513514, y: 4.03921568627451, size: 1 },\r\n // { x: 98.5945945945946, y: 4, size: 1 },\r\n // { x: 99.8918918918919, y: 4.11764705882353, size: 1 },\r\n // { x: 105.72972972973, y: 4.07843137254902, size: 1 },\r\n // { x: 113.513513513514, y: 3.25490196078431, size: 1 },\r\n // { x: 114.162162162162, y: 2.94117647058824, size: 1 },\r\n // { x: 115.459459459459, y: 4, size: 1 },\r\n // { x: 122.594594594595, y: 4.03921568627451, size: 1 },\r\n // { x: 157.621621621622, y: 3.13725490196078, size: 1 },\r\n // { x: 158.918918918919, y: 4.23529411764706, size: 1 },\r\n // { x: 159.567567567568, y: 3.96078431372549, size: 1 },\r\n // { x: 163.459459459459, y: 3.92156862745098, size: 1 },\r\n // { x: 164.756756756757, y: 3.96078431372549, size: 1 },\r\n // { x: 165.405405405405, y: 3.96078431372549, size: 1 },\r\n // { x: 169.297297297297, y: 4.03921568627451, size: 1 },\r\n // { x: 170.594594594595, y: 3.96078431372549, size: 1 },\r\n // { x: 173.837837837838, y: 4, size: 1 },\r\n // { x: 178.378378378378, y: 2.98039215686275, size: 1 },\r\n // { x: 179.027027027027, y: 2.94117647058824, size: 1 },\r\n // { x: 185.513513513514, y: 3.96078431372549, size: 1 },\r\n // { x: 192, y: 3.88235294117647, size: 1 },\r\n // { x: 203.675675675676, y: 4, size: 1 },\r\n // { x: 221.837837837838, y: 2.7843137254902, size: 1 },\r\n // { x: 222.486486486486, y: 2.3921568627451, size: 1 },\r\n // { x: 243.243243243243, y: 2.90196078431373, size: 1 },\r\n // { x: 243.891891891892, y: 3.01960784313725, size: 1 },\r\n // { x: 260.756756756757, y: 4.15686274509804, size: 1 },\r\n // { x: 264.648648648649, y: 2.98039215686275, size: 1 },\r\n // { x: 265.297297297297, y: 2.70588235294118, size: 1 },\r\n // { x: 269.837837837838, y: 4.07843137254902, size: 1 },\r\n // { x: 286.702702702703, y: 2.54901960784314, size: 1 },\r\n // { x: 287.351351351351, y: 2.58823529411765, size: 1 },\r\n // { x: 308.108108108108, y: 2.66666666666667, size: 1 },\r\n // { x: 341.837837837838, y: 3.96078431372549, size: 1 },\r\n // { x: 348.972972972973, y: 4, size: 1 },\r\n // { x: 352.216216216216, y: 3.96078431372549, size: 1 },\r\n // { x: 359.351351351351, y: 4.03921568627451, size: 1 },\r\n // { x: 77.6978417266187, y: 2.90196078431373, size: 1 },\r\n // { x: 164.460431654676, y: 2.50980392156863, size: 1 },\r\n // { x: 207.194244604317, y: 2.74509803921569, size: 1 },\r\n // { x: 213.021582733813, y: 3.96078431372549, size: 1 },\r\n // { x: 222.086330935252, y: 4.11764705882353, size: 1 },\r\n // { x: 226.618705035971, y: 4.15686274509804, size: 1 },\r\n // { x: 234.388489208633, y: 4.15686274509804, size: 1 },\r\n // { x: 242.805755395683, y: 4.03921568627451, size: 1 },\r\n // { x: 243.453237410072, y: 4.03921568627451, size: 1 },\r\n // { x: 250.575539568345, y: 2.66666666666667, size: 1 },\r\n // { x: 251.223021582734, y: 2.70588235294118, size: 1 },\r\n // { x: 265.467625899281, y: 4, size: 1 },\r\n // { x: 271.942446043165, y: 2.66666666666667, size: 1 },\r\n // { x: 315.323741007194, y: 3.05882352941176, size: 1 },\r\n // { x: 42.0863309352518, y: 2.86274509803922, size: 1 },\r\n // { x: 93.2374100719424, y: 3.96078431372549, size: 1 },\r\n // { x: 156.043165467626, y: 4.07843137254902, size: 1 },\r\n // { x: 192.302158273381, y: 3.05882352941176, size: 1 },\r\n // { x: 214.31654676259, y: 2.98039215686275, size: 1 },\r\n // { x: 236.330935251799, y: 2.74509803921569, size: 1 },\r\n // { x: 279.712230215827, y: 3.01960784313725, size: 1 },\r\n // { x: 288.129496402878, y: 4.03921568627451, size: 1 },\r\n // { x: 322.446043165468, y: 3.05882352941176, size: 1 },\r\n // { x: 344.460431654676, y: 2.70588235294118, size: 1 },\r\n // { x: 353.525179856115, y: 4.03921568627451, size: 1 },\r\n // { x: 5.18918918918919, y: 2.62745098039216, size: 1 },\r\n // { x: 5.83783783783784, y: 2.15686274509804, size: 1 },\r\n // { x: 27.2432432432432, y: 2.94117647058824, size: 1 },\r\n // { x: 27.8918918918919, y: 3.01960784313725, size: 1 },\r\n // { x: 48, y: 3.05882352941176, size: 1 },\r\n // { x: 48.6486486486486, y: 2.98039215686275, size: 1 },\r\n // { x: 49.2972972972973, y: 2.7843137254902, size: 1 },\r\n // { x: 112.216216216216, y: 3.05882352941176, size: 1 },\r\n // { x: 113.513513513514, y: 1.41176470588235, size: 1 },\r\n // { x: 114.162162162162, y: 1.56862745098039, size: 1 },\r\n // { x: 134.918918918919, y: 2.7843137254902, size: 1 },\r\n // { x: 135.567567567568, y: 2.74509803921569, size: 1 },\r\n // { x: 175.135135135135, y: 4.03921568627451, size: 1 },\r\n // { x: 221.837837837838, y: 3.01960784313725, size: 1 },\r\n // { x: 243.243243243243, y: 2.74509803921569, size: 1 },\r\n // { x: 264.648648648649, y: 2.62745098039216, size: 1 },\r\n // { x: 265.297297297297, y: 2.31372549019608, size: 1 },\r\n // { x: 305.513513513513, y: 4, size: 1 },\r\n // { x: 308.108108108108, y: 2.70588235294118, size: 1 },\r\n // { x: 308.756756756757, y: 2.50980392156863, size: 1 },\r\n // { x: 321.72972972973, y: 4.07843137254902, size: 1 },\r\n // { x: 329.513513513513, y: 2.98039215686275, size: 1 },\r\n // { x: 330.162162162162, y: 2.82352941176471, size: 1 },\r\n // { x: 345.72972972973, y: 4, size: 1 },\r\n // { x: 348.324324324324, y: 3.92156862745098, size: 1 },\r\n // { x: 351.567567567568, y: 2.27450980392157, size: 1 },\r\n // { x: 13.5971223021583, y: 3.2156862745098, size: 1 },\r\n // { x: 34.3165467625899, y: 2.54901960784314, size: 1 },\r\n // { x: 34.9640287769784, y: 2.54901960784314, size: 1 },\r\n // { x: 88.705035971223, y: 4.03921568627451, size: 1 },\r\n // { x: 99.0647482014388, y: 2.86274509803922, size: 1 },\r\n // { x: 99.7122302158273, y: 2.7843137254902, size: 1 },\r\n // { x: 121.079136690647, y: 2.7843137254902, size: 1 },\r\n // { x: 143.093525179856, y: 2.58823529411765, size: 1 },\r\n // { x: 164.460431654676, y: 2.90196078431373, size: 1 },\r\n // { x: 174.820143884892, y: 4.11764705882353, size: 1 },\r\n // { x: 207.194244604317, y: 2.50980392156863, size: 1 },\r\n // { x: 207.841726618705, y: 2.66666666666667, size: 1 },\r\n // { x: 271.942446043165, y: 2.82352941176471, size: 1 },\r\n // { x: 315.323741007194, y: 2.86274509803922, size: 1 },\r\n // { x: 358.705035971223, y: 2.86274509803922, size: 1 },\r\n // { x: 20.0719424460432, y: 2.54901960784314, size: 1 },\r\n // { x: 41.4388489208633, y: 2.86274509803922, size: 1 },\r\n // { x: 62.8057553956835, y: 2.66666666666667, size: 1 },\r\n // { x: 63.4532374100719, y: 2.62745098039216, size: 1 },\r\n // { x: 106.187050359712, y: 1.41176470588235, size: 1 },\r\n // { x: 106.834532374101, y: 1.49019607843137, size: 1 },\r\n // { x: 107.482014388489, y: 1.84313725490196, size: 1 },\r\n // { x: 108.129496402878, y: 1.52941176470588, size: 1 },\r\n // { x: 110.719424460432, y: 3.17647058823529, size: 1 },\r\n // { x: 115.251798561151, y: 3.05882352941176, size: 1 },\r\n // { x: 121.726618705036, y: 2.86274509803922, size: 1 },\r\n // { x: 122.374100719424, y: 3.05882352941176, size: 1 },\r\n // { x: 126.258992805755, y: 3.2156862745098, size: 1 },\r\n // { x: 126.906474820144, y: 3.2156862745098, size: 1 },\r\n // { x: 127.553956834532, y: 2.27450980392157, size: 1 },\r\n // { x: 128.201438848921, y: 2.11764705882353, size: 1 },\r\n // { x: 164.460431654676, y: 4, size: 1 },\r\n // { x: 170.935251798561, y: 2.31372549019608, size: 1 },\r\n // { x: 171.58273381295, y: 2.35294117647059, size: 1 },\r\n // { x: 192.94964028777, y: 2.31372549019608, size: 1 },\r\n // { x: 214.31654676259, y: 2.50980392156863, size: 1 },\r\n // { x: 217.553956834532, y: 4.03921568627451, size: 1 },\r\n // { x: 277.122302158273, y: 3.17647058823529, size: 1 },\r\n // { x: 343.812949640288, y: 2.50980392156863, size: 1 },\r\n // { x: 113.309352517986, y: 2.98039215686275, size: 1 },\r\n // { x: 134.676258992806, y: 2.43137254901961, size: 1 },\r\n // { x: 135.323741007194, y: 2.62745098039216, size: 1 },\r\n // { x: 156.043165467626, y: 2.82352941176471, size: 1 },\r\n // { x: 178.057553956835, y: 2.74509803921569, size: 1 },\r\n // { x: 264.172661870504, y: 2.82352941176471, size: 1 },\r\n // { x: 286.187050359712, y: 3.05882352941176, size: 1 },\r\n // { x: 317.913669064748, y: 4, size: 1 },\r\n // { x: 329.568345323741, y: 2.7843137254902, size: 1 },\r\n // { x: 33.7297297297297, y: 3.01960784313725, size: 1 },\r\n // { x: 43.4594594594595, y: 3.96078431372549, size: 1 },\r\n // { x: 44.1081081081081, y: 4.03921568627451, size: 1 },\r\n // { x: 50.5945945945946, y: 3.88235294117647, size: 1 },\r\n // { x: 77.1891891891892, y: 3.17647058823529, size: 1 },\r\n // { x: 79.1351351351351, y: 3.92156862745098, size: 1 },\r\n // { x: 90.1621621621622, y: 4.03921568627451, size: 1 },\r\n // { x: 97.2972972972973, y: 3.33333333333333, size: 1 },\r\n // { x: 98.5945945945946, y: 1.96078431372549, size: 1 },\r\n // { x: 99.2432432432432, y: 2.15686274509804, size: 1 },\r\n // { x: 120, y: 3.2156862745098, size: 1 },\r\n // { x: 120.648648648649, y: 2.90196078431373, size: 1 },\r\n // { x: 142.054054054054, y: 2.98039215686275, size: 1 },\r\n // { x: 158.27027027027, y: 3.92156862745098, size: 1 },\r\n // { x: 163.459459459459, y: 2.82352941176471, size: 1 },\r\n // { x: 164.108108108108, y: 2.66666666666667, size: 1 },\r\n // { x: 166.054054054054, y: 3.92156862745098, size: 1 },\r\n // { x: 185.513513513514, y: 2.82352941176471, size: 1 },\r\n // { x: 208.864864864865, y: 4, size: 1 },\r\n // { x: 228.972972972973, y: 3.25490196078431, size: 1 },\r\n // { x: 236.108108108108, y: 3.96078431372549, size: 1 },\r\n // { x: 236.756756756757, y: 3.96078431372549, size: 1 },\r\n // { x: 278.27027027027, y: 3.92156862745098, size: 1 },\r\n // { x: 295.783783783784, y: 3.96078431372549, size: 1 },\r\n // { x: 314.594594594595, y: 2.66666666666667, size: 1 },\r\n // { x: 315.243243243243, y: 2.74509803921569, size: 1 },\r\n // { x: 325.621621621622, y: 4.07843137254902, size: 1 },\r\n // { x: 334.702702702703, y: 3.09803921568627, size: 1 },\r\n // { x: 335.351351351351, y: 3.2156862745098, size: 1 },\r\n // { x: 336, y: 2.90196078431373, size: 1 },\r\n // { x: 336.648648648649, y: 2.15686274509804, size: 1 },\r\n // { x: 345.081081081081, y: 4, size: 1 },\r\n // { x: 359.351351351351, y: 4, size: 1 },\r\n // { x: 5.8273381294964, y: 4.19607843137255, size: 1 },\r\n // { x: 15.5395683453237, y: 4.11764705882353, size: 1 },\r\n // { x: 16.8345323741007, y: 3.96078431372549, size: 1 },\r\n // { x: 27.841726618705, y: 4.15686274509804, size: 1 },\r\n // { x: 29.136690647482, y: 4.03921568627451, size: 1 },\r\n // { x: 34.3165467625899, y: 4.27450980392157, size: 1 },\r\n // { x: 44.0287769784173, y: 4.11764705882353, size: 1 },\r\n // { x: 49.2086330935252, y: 4.15686274509804, size: 1 },\r\n // { x: 57.6258992805755, y: 4, size: 1 },\r\n // { x: 80.9352517985612, y: 4.07843137254902, size: 1 },\r\n // { x: 84.1726618705036, y: 3.17647058823529, size: 1 },\r\n // { x: 214.31654676259, y: 2.94117647058824, size: 1 },\r\n // { x: 235.68345323741, y: 2.11764705882353, size: 1 },\r\n // { x: 257.05035971223, y: 2.62745098039216, size: 1 },\r\n // { x: 258.345323741007, y: 4.11764705882353, size: 1 },\r\n // { x: 262.877697841727, y: 4.11764705882353, size: 1 },\r\n // { x: 263.525179856115, y: 4.19607843137255, size: 1 },\r\n // { x: 270, y: 4.11764705882353, size: 1 },\r\n // { x: 273.237410071942, y: 4.19607843137255, size: 1 },\r\n // { x: 275.179856115108, y: 4.19607843137255, size: 1 },\r\n // { x: 276.474820143885, y: 4.15686274509804, size: 1 },\r\n // { x: 300.431654676259, y: 2.98039215686275, size: 1 },\r\n // { x: 304.964028776978, y: 4.07843137254902, size: 1 },\r\n // { x: 321.798561151079, y: 2.50980392156863, size: 1 },\r\n // { x: 31.0791366906475, y: 4.07843137254902, size: 1 },\r\n // { x: 32.3741007194245, y: 4.07843137254902, size: 1 },\r\n // { x: 36.9064748201439, y: 4.03921568627451, size: 1 },\r\n // { x: 91.294964028777, y: 2.94117647058824, size: 1 },\r\n // { x: 112.661870503597, y: 3.2156862745098, size: 1 },\r\n // { x: 120.431654676259, y: 4.03921568627451, size: 1 },\r\n // { x: 156.043165467626, y: 2.66666666666667, size: 1 },\r\n // { x: 220.791366906475, y: 2.90196078431373, size: 1 },\r\n // { x: 221.438848920863, y: 3.09803921568627, size: 1 },\r\n // { x: 236.330935251799, y: 3.96078431372549, size: 1 },\r\n // { x: 264.172661870504, y: 2.94117647058824, size: 1 },\r\n // { x: 343.165467625899, y: 4.19607843137255, size: 1 },\r\n // { x: 11.6756756756757, y: 3.13725490196078, size: 1 },\r\n // { x: 12.3243243243243, y: 3.05882352941176, size: 1 },\r\n // { x: 33.0810810810811, y: 2.82352941176471, size: 1 },\r\n // { x: 33.7297297297297, y: 1.96078431372549, size: 1 },\r\n // { x: 55.1351351351351, y: 2.98039215686275, size: 1 },\r\n // { x: 62.2702702702703, y: 3.88235294117647, size: 1 },\r\n // { x: 69.4054054054054, y: 3.92156862745098, size: 1 },\r\n // { x: 77.1891891891892, y: 2.43137254901961, size: 1 },\r\n // { x: 97.2972972972973, y: 2.94117647058824, size: 1 },\r\n // { x: 98.5945945945946, y: 2.47058823529412, size: 1 },\r\n // { x: 118.702702702703, y: 3.13725490196078, size: 1 },\r\n // { x: 120, y: 2.15686274509804, size: 1 },\r\n // { x: 120.648648648649, y: 2.15686274509804, size: 1 },\r\n // { x: 142.054054054054, y: 2.62745098039216, size: 1 },\r\n // { x: 162.162162162162, y: 3.33333333333333, size: 1 },\r\n // { x: 184.216216216216, y: 4.11764705882353, size: 1 },\r\n // { x: 265.945945945946, y: 4.07843137254902, size: 1 },\r\n // { x: 269.189189189189, y: 3.37254901960784, size: 1 },\r\n // { x: 269.837837837838, y: 3.17647058823529, size: 1 },\r\n // { x: 270.486486486487, y: 3.13725490196078, size: 1 },\r\n // { x: 271.135135135135, y: 2.62745098039216, size: 1 },\r\n // { x: 271.783783783784, y: 2.47058823529412, size: 1 },\r\n // { x: 300.972972972973, y: 4.07843137254902, size: 1 },\r\n // { x: 40.7913669064748, y: 2.90196078431373, size: 1 },\r\n // { x: 41.4388489208633, y: 2.94117647058824, size: 1 },\r\n // { x: 84.8201438848921, y: 2.94117647058824, size: 1 },\r\n // { x: 106.187050359712, y: 2.62745098039216, size: 1 },\r\n // { x: 127.553956834532, y: 2.70588235294118, size: 1 },\r\n // { x: 170.287769784173, y: 2.62745098039216, size: 1 },\r\n // { x: 170.935251798561, y: 2.58823529411765, size: 1 },\r\n // { x: 224.676258992806, y: 4.11764705882353, size: 1 },\r\n // { x: 290.719424460432, y: 4, size: 1 },\r\n // { x: 344.460431654676, y: 2.90196078431373, size: 1 },\r\n // { x: 345.107913669065, y: 2.94117647058824, size: 1 },\r\n // { x: 346.402877697842, y: 4.07843137254902, size: 1 },\r\n // { x: 4.53237410071942, y: 3.09803921568627, size: 1 },\r\n // { x: 5.8273381294964, y: 4.15686274509804, size: 1 },\r\n // { x: 8.41726618705036, y: 4, size: 1 },\r\n // { x: 33.6690647482014, y: 4, size: 1 },\r\n // { x: 37.5539568345324, y: 4.03921568627451, size: 1 },\r\n // { x: 47.9136690647482, y: 3.17647058823529, size: 1 },\r\n // { x: 48.5611510791367, y: 2.82352941176471, size: 1 },\r\n // { x: 61.5107913669065, y: 4.11764705882353, size: 1 },\r\n // { x: 75.1079136690647, y: 4.07843137254902, size: 1 },\r\n // { x: 91.294964028777, y: 3.05882352941176, size: 1 },\r\n // { x: 113.956834532374, y: 4.19607843137255, size: 1 },\r\n // { x: 131.438848920863, y: 4.07843137254902, size: 1 },\r\n // { x: 137.913669064748, y: 4.07843137254902, size: 1 },\r\n // { x: 165.755395683453, y: 4.07843137254902, size: 1 },\r\n // { x: 210.431654676259, y: 4.07843137254902, size: 1 },\r\n // { x: 306.906474820144, y: 2.90196078431373, size: 1 },\r\n // { x: 307.553956834532, y: 2.94117647058824, size: 1 },\r\n // { x: 337.338129496403, y: 3.96078431372549, size: 1 },\r\n // { x: 7.13513513513514, y: 3.88235294117647, size: 1 },\r\n // { x: 24, y: 4, size: 1 },\r\n // { x: 38.9189189189189, y: 3.92156862745098, size: 1 },\r\n // { x: 40.8648648648649, y: 4, size: 1 },\r\n // { x: 49.9459459459459, y: 4.07843137254902, size: 1 },\r\n // { x: 51.2432432432432, y: 4, size: 1 },\r\n // { x: 65.5135135135135, y: 3.96078431372549, size: 1 },\r\n // { x: 76.5405405405405, y: 3.13725490196078, size: 1 },\r\n // { x: 119.351351351351, y: 3.17647058823529, size: 1 },\r\n // { x: 120, y: 3.09803921568627, size: 1 },\r\n // { x: 162.810810810811, y: 3.09803921568627, size: 1 },\r\n // { x: 163.459459459459, y: 3.25490196078431, size: 1 },\r\n // { x: 166.702702702703, y: 4.07843137254902, size: 1 },\r\n // { x: 171.891891891892, y: 4.07843137254902, size: 1 },\r\n // { x: 217.297297297297, y: 3.88235294117647, size: 1 },\r\n // { x: 227.027027027027, y: 4.19607843137255, size: 1 },\r\n // { x: 249.72972972973, y: 3.25490196078431, size: 1 },\r\n // { x: 251.675675675676, y: 4, size: 1 },\r\n // { x: 283.459459459459, y: 3.33333333333333, size: 1 },\r\n // { x: 291.891891891892, y: 3.2156862745098, size: 1 },\r\n // { x: 292.540540540541, y: 2.82352941176471, size: 1 },\r\n // { x: 293.189189189189, y: 2.19607843137255, size: 1 },\r\n // { x: 314.594594594595, y: 2.54901960784314, size: 1 },\r\n // { x: 325.621621621622, y: 3.96078431372549, size: 1 },\r\n // { x: 336, y: 2.3921568627451, size: 1 },\r\n // { x: 336.648648648649, y: 2.35294117647059, size: 1 },\r\n // { x: 339.891891891892, y: 3.33333333333333, size: 1 },\r\n // { x: 342.486486486487, y: 3.29411764705882, size: 1 },\r\n // { x: 353.513513513513, y: 3.29411764705882, size: 1 },\r\n // { x: 2.58992805755396, y: 4.07843137254902, size: 1 },\r\n // { x: 41.4388489208633, y: 3.05882352941176, size: 1 },\r\n // { x: 105.539568345324, y: 2.07843137254902, size: 1 },\r\n // { x: 106.187050359712, y: 2.19607843137255, size: 1 },\r\n // { x: 150.215827338129, y: 4.19607843137255, size: 1 },\r\n // { x: 156.690647482014, y: 4.07843137254902, size: 1 },\r\n // { x: 176.762589928058, y: 4.27450980392157, size: 1 },\r\n // { x: 184.532374100719, y: 4.15686274509804, size: 1 },\r\n // { x: 191.654676258993, y: 2.94117647058824, size: 1 },\r\n // { x: 237.625899280576, y: 3.17647058823529, size: 1 },\r\n // { x: 278.41726618705, y: 2.90196078431373, size: 1 },\r\n // { x: 321.151079136691, y: 1.96078431372549, size: 1 },\r\n // { x: 321.798561151079, y: 1.96078431372549, size: 1 },\r\n // { x: 322.446043165468, y: 2.43137254901961, size: 1 },\r\n // { x: 323.093525179856, y: 2.3921568627451, size: 1 },\r\n // { x: 323.741007194245, y: 2.66666666666667, size: 1 },\r\n // { x: 326.330935251799, y: 2.98039215686275, size: 1 },\r\n // { x: 330.863309352518, y: 3.05882352941176, size: 1 },\r\n // { x: 336.690647482014, y: 2.98039215686275, size: 1 },\r\n // { x: 337.985611510791, y: 3.13725490196078, size: 1 },\r\n // { x: 343.165467625899, y: 2.50980392156863, size: 1 },\r\n // { x: 4.53237410071942, y: 2.3921568627451, size: 1 },\r\n // { x: 5.17985611510791, y: 2.43137254901961, size: 1 },\r\n // { x: 11.0071942446043, y: 3.05882352941176, size: 1 },\r\n // { x: 22.6618705035971, y: 3.09803921568627, size: 1 },\r\n // { x: 26.5467625899281, y: 2.82352941176471, size: 1 },\r\n // { x: 47.9136690647482, y: 2.54901960784314, size: 1 },\r\n // { x: 66.6906474820144, y: 4.03921568627451, size: 1 },\r\n // { x: 128.848920863309, y: 4.31372549019608, size: 1 },\r\n // { x: 198.776978417266, y: 2.66666666666667, size: 1 },\r\n // { x: 306.906474820144, y: 2.58823529411765, size: 1 },\r\n // { x: 307.553956834532, y: 2.98039215686275, size: 1 },\r\n // { x: 329.568345323741, y: 3.09803921568627, size: 1 },\r\n // { x: 11.027027027027, y: 3.2156862745098, size: 1 },\r\n // { x: 11.6756756756757, y: 2.90196078431373, size: 1 },\r\n // { x: 12.3243243243243, y: 3.13725490196078, size: 1 },\r\n // { x: 33.0810810810811, y: 2.94117647058824, size: 1 },\r\n // { x: 45.4054054054054, y: 3.29411764705882, size: 1 },\r\n // { x: 53.1891891891892, y: 3.17647058823529, size: 1 },\r\n // { x: 54.4864864864865, y: 2.70588235294118, size: 1 },\r\n // { x: 55.1351351351351, y: 2.11764705882353, size: 1 },\r\n // { x: 75.2432432432432, y: 3.2156862745098, size: 1 },\r\n // { x: 75.8918918918919, y: 3.13725490196078, size: 1 },\r\n // { x: 76.5405405405405, y: 3.05882352941176, size: 1 },\r\n // { x: 79.7837837837838, y: 3.92156862745098, size: 1 },\r\n // { x: 86.2702702702703, y: 4.23529411764706, size: 1 },\r\n // { x: 88.8648648648649, y: 4.15686274509804, size: 1 },\r\n // { x: 97.945945945946, y: 3.17647058823529, size: 1 },\r\n // { x: 98.5945945945946, y: 2.86274509803922, size: 1 },\r\n // { x: 127.135135135135, y: 4.07843137254902, size: 1 },\r\n // { x: 128.432432432432, y: 4, size: 1 },\r\n // { x: 129.72972972973, y: 4.03921568627451, size: 1 },\r\n // { x: 131.675675675676, y: 4.03921568627451, size: 1 },\r\n // { x: 132.324324324324, y: 3.96078431372549, size: 1 },\r\n // { x: 136.216216216216, y: 4.11764705882353, size: 1 },\r\n // { x: 155.027027027027, y: 4, size: 1 },\r\n // { x: 167.351351351351, y: 4, size: 1 },\r\n // { x: 169.945945945946, y: 4.19607843137255, size: 1 },\r\n // { x: 173.837837837838, y: 4.15686274509804, size: 1 },\r\n // { x: 174.486486486486, y: 3.96078431372549, size: 1 },\r\n // { x: 179.675675675676, y: 3.92156862745098, size: 1 },\r\n // { x: 184.216216216216, y: 2.94117647058824, size: 1 },\r\n // { x: 184.864864864865, y: 3.05882352941176, size: 1 },\r\n // { x: 185.513513513514, y: 2.86274509803922, size: 1 },\r\n // { x: 206.27027027027, y: 3.2156862745098, size: 1 },\r\n // { x: 206.918918918919, y: 3.05882352941176, size: 1 },\r\n // { x: 207.567567567568, y: 2.90196078431373, size: 1 },\r\n // { x: 209.513513513514, y: 3.2156862745098, size: 1 },\r\n // { x: 212.756756756757, y: 3.29411764705882, size: 1 },\r\n // { x: 231.567567567568, y: 3.80392156862745, size: 1 },\r\n // { x: 256.864864864865, y: 3.41176470588235, size: 1 },\r\n // { x: 257.513513513513, y: 3.37254901960784, size: 1 },\r\n // { x: 261.405405405405, y: 3.29411764705882, size: 1 },\r\n // { x: 269.189189189189, y: 3.17647058823529, size: 1 },\r\n // { x: 271.783783783784, y: 3.13725490196078, size: 1 },\r\n // { x: 273.081081081081, y: 2.90196078431373, size: 1 },\r\n // { x: 278.27027027027, y: 3.96078431372549, size: 1 },\r\n // { x: 293.189189189189, y: 3.01960784313725, size: 1 },\r\n // { x: 313.945945945946, y: 3.25490196078431, size: 1 },\r\n // { x: 336, y: 2.43137254901961, size: 1 },\r\n // { x: 343.783783783784, y: 3.29411764705882, size: 1 },\r\n // { x: 347.027027027027, y: 3.25490196078431, size: 1 },\r\n // { x: 358.054054054054, y: 3.2156862745098, size: 1 },\r\n // { x: 359.351351351351, y: 2.90196078431373, size: 1 },\r\n // { x: 18.7769784172662, y: 2.98039215686275, size: 1 },\r\n // { x: 20.0719424460432, y: 2.98039215686275, size: 1 },\r\n // { x: 47.9136690647482, y: 4.19607843137255, size: 1 },\r\n // { x: 53.0935251798561, y: 4.03921568627451, size: 1 },\r\n // { x: 54.3884892086331, y: 4.07843137254902, size: 1 },\r\n // { x: 102.302158273381, y: 4.03921568627451, size: 1 },\r\n // { x: 135.323741007194, y: 4.11764705882353, size: 1 },\r\n // { x: 189.712230215827, y: 3.13725490196078, size: 1 },\r\n // { x: 191.654676258993, y: 2.74509803921569, size: 1 },\r\n // { x: 342.517985611511, y: 2.66666666666667, size: 1 },\r\n // { x: 343.165467625899, y: 2.86274509803922, size: 1 },\r\n // { x: 4.53237410071942, y: 3.01960784313725, size: 1 },\r\n // { x: 25.8992805755396, y: 3.01960784313725, size: 1 },\r\n // { x: 64.7482014388489, y: 3.2156862745098, size: 1 },\r\n // { x: 90.6474820143885, y: 2.82352941176471, size: 1 },\r\n // { x: 112.014388489209, y: 2.94117647058824, size: 1 },\r\n // { x: 112.661870503597, y: 2.7843137254902, size: 1 },\r\n // { x: 119.136690647482, y: 3.17647058823529, size: 1 },\r\n // { x: 155.395683453237, y: 2.94117647058824, size: 1 },\r\n // { x: 156.043165467626, y: 3.13725490196078, size: 1 },\r\n // { x: 188.41726618705, y: 3.09803921568627, size: 1 },\r\n // { x: 220.791366906475, y: 2.94117647058824, size: 1 },\r\n // { x: 241.510791366906, y: 2.82352941176471, size: 1 },\r\n // { x: 261.58273381295, y: 3.09803921568627, size: 1 },\r\n // { x: 275.827338129496, y: 4.11764705882353, size: 1 },\r\n // { x: 321.151079136691, y: 3.2156862745098, size: 1 },\r\n // { x: 33.0215827338129, y: 2.54901960784314, size: 1 },\r\n // { x: 34.3165467625899, y: 2.50980392156863, size: 1 },\r\n // { x: 34.9640287769784, y: 2.50980392156863, size: 1 },\r\n // { x: 39.4964028776978, y: 3.13725490196078, size: 1 },\r\n // { x: 45.3237410071942, y: 3.17647058823529, size: 1 },\r\n // { x: 141.798561151079, y: 4.07843137254902, size: 1 },\r\n // { x: 205.251798561151, y: 2.70588235294118, size: 1 },\r\n // { x: 205.89928057554, y: 2.50980392156863, size: 1 },\r\n // { x: 227.26618705036, y: 2.58823529411765, size: 1 },\r\n // { x: 248.63309352518, y: 2.66666666666667, size: 1 },\r\n // { x: 249.280575539568, y: 2.58823529411765, size: 1 },\r\n // { x: 285.539568345324, y: 4.11764705882353, size: 1 },\r\n // { x: 286.187050359712, y: 4.03921568627451, size: 1 },\r\n // { x: 304.31654676259, y: 4.11764705882353, size: 1 },\r\n // { x: 310.143884892086, y: 4.03921568627451, size: 1 },\r\n // { x: 331.510791366906, y: 3.96078431372549, size: 1 },\r\n // { x: 334.748201438849, y: 2.7843137254902, size: 1 },\r\n // { x: 335.395683453237, y: 2.19607843137255, size: 1 },\r\n // { x: 5.18918918918919, y: 4.03921568627451, size: 1 },\r\n // { x: 11.6756756756757, y: 4, size: 1 },\r\n // { x: 13.6216216216216, y: 4, size: 1 },\r\n // { x: 18.1621621621622, y: 3.2156862745098, size: 1 },\r\n // { x: 18.8108108108108, y: 3.05882352941176, size: 1 },\r\n // { x: 25.9459459459459, y: 4, size: 1 },\r\n // { x: 38.2702702702703, y: 3.05882352941176, size: 1 },\r\n // { x: 39.5675675675676, y: 2.47058823529412, size: 1 },\r\n // { x: 40.2162162162162, y: 2.47058823529412, size: 1 },\r\n // { x: 49.9459459459459, y: 4.11764705882353, size: 1 },\r\n // { x: 59.6756756756757, y: 3.01960784313725, size: 1 },\r\n // { x: 60.3243243243243, y: 3.17647058823529, size: 1 },\r\n // { x: 61.6216216216216, y: 2.11764705882353, size: 1 },\r\n // { x: 81.7297297297297, y: 3.09803921568627, size: 1 },\r\n // { x: 82.3783783783784, y: 3.33333333333333, size: 1 },\r\n // { x: 83.027027027027, y: 2.43137254901961, size: 1 },\r\n // { x: 83.6756756756757, y: 2.19607843137255, size: 1 },\r\n // { x: 102.486486486486, y: 3.37254901960784, size: 1 },\r\n // { x: 103.783783783784, y: 3.25490196078431, size: 1 },\r\n // { x: 125.837837837838, y: 3.13725490196078, size: 1 },\r\n // { x: 126.486486486486, y: 2.43137254901961, size: 1 },\r\n // { x: 136.216216216216, y: 4.03921568627451, size: 1 },\r\n // { x: 155.027027027027, y: 3.13725490196078, size: 1 },\r\n // { x: 156.324324324324, y: 3.37254901960784, size: 1 },\r\n // { x: 167.351351351351, y: 3.33333333333333, size: 1 },\r\n // { x: 171.243243243243, y: 4, size: 1 },\r\n // { x: 171.891891891892, y: 4.23529411764706, size: 1 },\r\n // { x: 186.162162162162, y: 4.03921568627451, size: 1 },\r\n // { x: 186.810810810811, y: 3.92156862745098, size: 1 },\r\n // { x: 188.756756756757, y: 3.92156862745098, size: 1 },\r\n // { x: 211.459459459459, y: 3.13725490196078, size: 1 },\r\n // { x: 212.756756756757, y: 2.86274509803922, size: 1 },\r\n // { x: 213.405405405405, y: 3.05882352941176, size: 1 },\r\n // { x: 241.945945945946, y: 4, size: 1 },\r\n // { x: 245.189189189189, y: 4.11764705882353, size: 1 },\r\n // { x: 252.324324324324, y: 3.96078431372549, size: 1 },\r\n // { x: 259.459459459459, y: 3.96078431372549, size: 1 },\r\n // { x: 267.891891891892, y: 3.92156862745098, size: 1 },\r\n // { x: 270.486486486487, y: 4.03921568627451, size: 1 },\r\n // { x: 275.027027027027, y: 4, size: 1 },\r\n // { x: 277.621621621622, y: 2.47058823529412, size: 1 },\r\n // { x: 278.27027027027, y: 2.54901960784314, size: 1 },\r\n // { x: 280.216216216216, y: 4, size: 1 },\r\n // { x: 280.864864864865, y: 3.96078431372549, size: 1 },\r\n // { x: 283.459459459459, y: 4.03921568627451, size: 1 },\r\n // { x: 284.108108108108, y: 3.96078431372549, size: 1 },\r\n // { x: 288, y: 4.11764705882353, size: 1 },\r\n // { x: 288.648648648649, y: 4.03921568627451, size: 1 },\r\n // { x: 289.297297297297, y: 4.11764705882353, size: 1 },\r\n // { x: 290.594594594595, y: 4.03921568627451, size: 1 },\r\n // { x: 291.891891891892, y: 4.19607843137255, size: 1 },\r\n // { x: 294.486486486487, y: 4, size: 1 },\r\n // { x: 296.432432432432, y: 4.3921568627451, size: 1 },\r\n // { x: 299.027027027027, y: 3.01960784313725, size: 1 },\r\n // { x: 299.675675675676, y: 3.13725490196078, size: 1 },\r\n // { x: 304.864864864865, y: 4.11764705882353, size: 1 },\r\n // { x: 308.756756756757, y: 3.96078431372549, size: 1 },\r\n // { x: 309.405405405405, y: 4.11764705882353, size: 1 },\r\n // { x: 315.243243243243, y: 4.03921568627451, size: 1 },\r\n // { x: 317.837837837838, y: 3.88235294117647, size: 1 },\r\n // { x: 332.108108108108, y: 4.19607843137255, size: 1 },\r\n // { x: 332.756756756757, y: 3.96078431372549, size: 1 },\r\n // { x: 342.486486486487, y: 2.82352941176471, size: 1 },\r\n // { x: 343.135135135135, y: 2.82352941176471, size: 1 },\r\n // { x: 11.6546762589928, y: 4.07843137254902, size: 1 },\r\n // { x: 12.3021582733813, y: 4.07843137254902, size: 1 },\r\n // { x: 13.5971223021583, y: 4.03921568627451, size: 1 },\r\n // { x: 25.2517985611511, y: 3.25490196078431, size: 1 },\r\n // { x: 34.3165467625899, y: 4.07843137254902, size: 1 },\r\n // { x: 81.5827338129496, y: 4.03921568627451, size: 1 },\r\n // { x: 91.9424460431655, y: 3.05882352941176, size: 1 },\r\n // { x: 96.4748201438849, y: 3.05882352941176, size: 1 },\r\n // { x: 130.791366906475, y: 3.05882352941176, size: 1 },\r\n // { x: 198.129496402878, y: 3.17647058823529, size: 1 },\r\n // { x: 284.892086330935, y: 2.90196078431373, size: 1 },\r\n // { x: 306.258992805755, y: 2.94117647058824, size: 1 },\r\n // { x: 327.625899280576, y: 3.05882352941176, size: 1 },\r\n // { x: 343.812949640288, y: 4.11764705882353, size: 1 },\r\n // { x: 11.0071942446043, y: 3.01960784313725, size: 1 },\r\n // { x: 11.6546762589928, y: 2.7843137254902, size: 1 },\r\n // { x: 21.3669064748201, y: 3.17647058823529, size: 1 },\r\n // { x: 79.6402877697842, y: 3.13725490196078, size: 1 },\r\n // { x: 82.8776978417266, y: 3.05882352941176, size: 1 },\r\n // { x: 97.7697841726619, y: 2.74509803921569, size: 1 },\r\n // { x: 98.4172661870504, y: 3.13725490196078, size: 1 },\r\n // { x: 118.489208633094, y: 3.09803921568627, size: 1 },\r\n // { x: 119.136690647482, y: 2.74509803921569, size: 1 },\r\n // { x: 119.784172661871, y: 2.90196078431373, size: 1 },\r\n // { x: 162.517985611511, y: 2.90196078431373, size: 1 },\r\n // { x: 188.41726618705, y: 4.07843137254902, size: 1 },\r\n // { x: 243.453237410072, y: 3.17647058823529, size: 1 },\r\n // { x: 291.36690647482, y: 2.82352941176471, size: 1 },\r\n // { x: 292.014388489209, y: 2.94117647058824, size: 1 },\r\n // { x: 293.309352517986, y: 3.05882352941176, size: 1 },\r\n // { x: 293.956834532374, y: 3.01960784313725, size: 1 },\r\n // { x: 299.136690647482, y: 3.13725490196078, size: 1 },\r\n // { x: 304.31654676259, y: 3.05882352941176, size: 1 },\r\n // { x: 305.611510791367, y: 3.13725490196078, size: 1 },\r\n // { x: 306.258992805755, y: 3.05882352941176, size: 1 },\r\n // { x: 334.748201438849, y: 2.66666666666667, size: 1 },\r\n // { x: 7.13513513513514, y: 4.07843137254902, size: 1 },\r\n // { x: 18.1621621621622, y: 2.74509803921569, size: 1 },\r\n // { x: 39.5675675675676, y: 3.05882352941176, size: 1 },\r\n // { x: 40.2162162162162, y: 3.01960784313725, size: 1 },\r\n // { x: 42.1621621621622, y: 3.13725490196078, size: 1 },\r\n // { x: 45.4054054054054, y: 3.2156862745098, size: 1 },\r\n // { x: 48, y: 3.17647058823529, size: 1 },\r\n // { x: 51.8918918918919, y: 3.25490196078431, size: 1 },\r\n // { x: 53.1891891891892, y: 3.05882352941176, size: 1 },\r\n // { x: 53.8378378378378, y: 3.01960784313725, size: 1 },\r\n // { x: 56.4324324324324, y: 3.25490196078431, size: 1 },\r\n // { x: 69.4054054054054, y: 3.09803921568627, size: 1 },\r\n // { x: 72, y: 3.2156862745098, size: 1 },\r\n // { x: 75.8918918918919, y: 3.25490196078431, size: 1 },\r\n // { x: 77.1891891891892, y: 3.37254901960784, size: 1 },\r\n // { x: 79.1351351351351, y: 3.13725490196078, size: 1 },\r\n // { x: 93.4054054054054, y: 3.25490196078431, size: 1 },\r\n // { x: 100.540540540541, y: 3.29411764705882, size: 1 },\r\n // { x: 125.837837837838, y: 3.29411764705882, size: 1 },\r\n // { x: 190.702702702703, y: 3.17647058823529, size: 1 },\r\n // { x: 191.351351351351, y: 2.94117647058824, size: 1 },\r\n // { x: 229.621621621622, y: 4.07843137254902, size: 1 },\r\n // { x: 231.567567567568, y: 4, size: 1 },\r\n // { x: 237.405405405405, y: 3.13725490196078, size: 1 },\r\n // { x: 238.054054054054, y: 3.29411764705882, size: 1 },\r\n // { x: 240.648648648649, y: 3.17647058823529, size: 1 },\r\n // { x: 242.594594594595, y: 3.05882352941176, size: 1 },\r\n // { x: 246.486486486486, y: 3.2156862745098, size: 1 },\r\n // { x: 252.972972972973, y: 3.13725490196078, size: 1 },\r\n // { x: 262.702702702703, y: 3.96078431372549, size: 1 },\r\n // { x: 287.351351351351, y: 4.07843137254902, size: 1 },\r\n // { x: 322.378378378378, y: 3.33333333333333, size: 1 },\r\n // { x: 330.810810810811, y: 4.07843137254902, size: 1 },\r\n // { x: 338.594594594595, y: 3.2156862745098, size: 1 },\r\n // { x: 354.810810810811, y: 3.88235294117647, size: 1 },\r\n // { x: 3.88489208633094, y: 3.01960784313725, size: 1 },\r\n // { x: 4.53237410071942, y: 2.70588235294118, size: 1 },\r\n // { x: 27.841726618705, y: 2.98039215686275, size: 1 },\r\n // { x: 29.136690647482, y: 3.17647058823529, size: 1 },\r\n // { x: 33.6690647482014, y: 3.09803921568627, size: 1 },\r\n // { x: 36.9064748201439, y: 3.17647058823529, size: 1 },\r\n // { x: 42.7338129496403, y: 3.05882352941176, size: 1 },\r\n // { x: 53.7410071942446, y: 3.05882352941176, size: 1 },\r\n // { x: 77.0503597122302, y: 4.11764705882353, size: 1 },\r\n // { x: 90.6474820143885, y: 2.98039215686275, size: 1 },\r\n // { x: 93.8848920863309, y: 4.31372549019608, size: 1 },\r\n // { x: 96.4748201438849, y: 4.07843137254902, size: 1 },\r\n // { x: 97.7697841726619, y: 4.15686274509804, size: 1 },\r\n // { x: 102.94964028777, y: 4.15686274509804, size: 1 },\r\n // { x: 103.597122302158, y: 4.11764705882353, size: 1 },\r\n // { x: 115.251798561151, y: 4.07843137254902, size: 1 },\r\n // { x: 127.553956834532, y: 4.11764705882353, size: 1 },\r\n // { x: 134.676258992806, y: 4.11764705882353, size: 1 },\r\n // { x: 154.748201438849, y: 2.94117647058824, size: 1 },\r\n // { x: 176.762589928058, y: 1.2156862745098, size: 1 },\r\n // { x: 177.410071942446, y: 1.37254901960784, size: 1 },\r\n // { x: 178.057553956835, y: 1.41176470588235, size: 1 },\r\n // { x: 178.705035971223, y: 1.64705882352941, size: 1 },\r\n // { x: 185.827338129496, y: 3.05882352941176, size: 1 },\r\n // { x: 195.539568345324, y: 3.25490196078431, size: 1 },\r\n // { x: 214.31654676259, y: 4.03921568627451, size: 1 },\r\n // { x: 220.143884892086, y: 2.62745098039216, size: 1 },\r\n // { x: 227.913669064748, y: 4.15686274509804, size: 1 },\r\n // { x: 235.68345323741, y: 4.23529411764706, size: 1 },\r\n // { x: 262.877697841727, y: 2.27450980392157, size: 1 },\r\n // { x: 263.525179856115, y: 2.3921568627451, size: 1 },\r\n // { x: 284.892086330935, y: 2.70588235294118, size: 1 },\r\n // { x: 292.661870503597, y: 4.23529411764706, size: 1 },\r\n // { x: 299.784172661871, y: 4.07843137254902, size: 1 },\r\n // { x: 303.669064748201, y: 4.07843137254902, size: 1 },\r\n // { x: 10.3597122302158, y: 3.05882352941176, size: 1 },\r\n // { x: 11.0071942446043, y: 2.15686274509804, size: 1 },\r\n // { x: 53.7410071942446, y: 2.62745098039216, size: 1 },\r\n // { x: 54.3884892086331, y: 2.66666666666667, size: 1 },\r\n // { x: 134.676258992806, y: 4, size: 1 },\r\n // { x: 135.971223021583, y: 4, size: 1 },\r\n // { x: 151.510791366906, y: 4.11764705882353, size: 1 },\r\n // { x: 174.820143884892, y: 4, size: 1 },\r\n // { x: 183.237410071942, y: 3.2156862745098, size: 1 },\r\n // { x: 187.122302158273, y: 4.23529411764706, size: 1 },\r\n // { x: 187.769784172662, y: 4.07843137254902, size: 1 },\r\n // { x: 196.187050359712, y: 4.23529411764706, size: 1 },\r\n // { x: 198.776978417266, y: 4.11764705882353, size: 1 },\r\n // { x: 221.438848920863, y: 4.15686274509804, size: 1 },\r\n // { x: 223.381294964029, y: 4.07843137254902, size: 1 },\r\n // { x: 259.640287769784, y: 4.07843137254902, size: 1 },\r\n // { x: 261.58273381295, y: 4.15686274509804, size: 1 },\r\n // { x: 264.172661870504, y: 4.07843137254902, size: 1 },\r\n // { x: 268.057553956835, y: 3.2156862745098, size: 1 },\r\n // { x: 270, y: 2.70588235294118, size: 1 },\r\n // { x: 291.36690647482, y: 2.94117647058824, size: 1 },\r\n // { x: 313.381294964029, y: 2.35294117647059, size: 1 },\r\n // { x: 336.690647482014, y: 4.15686274509804, size: 1 },\r\n // { x: 21.4054054054054, y: 4.03921568627451, size: 1 },\r\n // { x: 22.7027027027027, y: 4.07843137254902, size: 1 },\r\n // { x: 29.1891891891892, y: 4, size: 1 },\r\n // { x: 31.7837837837838, y: 3.96078431372549, size: 1 },\r\n // { x: 42.8108108108108, y: 4.03921568627451, size: 1 },\r\n // { x: 47.3513513513514, y: 3.92156862745098, size: 1 },\r\n // { x: 49.2972972972973, y: 4, size: 1 },\r\n // { x: 50.5945945945946, y: 3.92156862745098, size: 1 },\r\n // { x: 52.5405405405405, y: 3.96078431372549, size: 1 },\r\n // { x: 74.5945945945946, y: 4, size: 1 },\r\n // { x: 78.4864864864865, y: 4, size: 1 },\r\n // { x: 80.4324324324324, y: 4.07843137254902, size: 1 },\r\n // { x: 83.6756756756757, y: 3.96078431372549, size: 1 },\r\n // { x: 84.972972972973, y: 4, size: 1 },\r\n // { x: 85.6216216216216, y: 4, size: 1 },\r\n // { x: 86.2702702702703, y: 4, size: 1 },\r\n // { x: 92.1081081081081, y: 3.96078431372549, size: 1 },\r\n // { x: 99.2432432432432, y: 3.96078431372549, size: 1 },\r\n // { x: 101.189189189189, y: 3.92156862745098, size: 1 },\r\n // { x: 108.324324324324, y: 4.07843137254902, size: 1 },\r\n // { x: 108.972972972973, y: 4.03921568627451, size: 1 },\r\n // { x: 110.918918918919, y: 3.96078431372549, size: 1 },\r\n // { x: 120, y: 3.92156862745098, size: 1 },\r\n // { x: 122.594594594595, y: 4.23529411764706, size: 1 },\r\n // { x: 151.135135135135, y: 3.05882352941176, size: 1 },\r\n // { x: 155.675675675676, y: 3.13725490196078, size: 1 },\r\n // { x: 166.702702702703, y: 3.2156862745098, size: 1 },\r\n // { x: 173.189189189189, y: 3.88235294117647, size: 1 },\r\n // { x: 187.459459459459, y: 3.25490196078431, size: 1 },\r\n // { x: 242.594594594595, y: 3.25490196078431, size: 1 },\r\n // { x: 245.837837837838, y: 3.29411764705882, size: 1 },\r\n // { x: 248.432432432432, y: 3.25490196078431, size: 1 },\r\n // { x: 271.135135135135, y: 4.07843137254902, size: 1 },\r\n // { x: 273.081081081081, y: 3.96078431372549, size: 1 },\r\n // { x: 341.837837837838, y: 3.29411764705882, size: 1 },\r\n // { x: 348.324324324324, y: 3.33333333333333, size: 1 },\r\n // { x: 173.525179856115, y: 4.11764705882353, size: 1 },\r\n // { x: 182.589928057554, y: 4.11764705882353, size: 1 },\r\n // { x: 285.539568345324, y: 2.7843137254902, size: 1 },\r\n // { x: 305.611510791367, y: 2.50980392156863, size: 1 },\r\n // { x: 306.258992805755, y: 2.43137254901961, size: 1 },\r\n // { x: 54.3884892086331, y: 2.74509803921569, size: 1 },\r\n // { x: 75.7553956834532, y: 3.17647058823529, size: 1 },\r\n // { x: 95.8273381294964, y: 3.17647058823529, size: 1 },\r\n // { x: 118.489208633094, y: 2.98039215686275, size: 1 },\r\n // { x: 119.136690647482, y: 2.66666666666667, size: 1 },\r\n // { x: 183.237410071942, y: 3.05882352941176, size: 1 },\r\n // { x: 226.618705035971, y: 2.86274509803922, size: 1 },\r\n // { x: 229.856115107914, y: 4.15686274509804, size: 1 },\r\n // { x: 232.446043165468, y: 4.35294117647059, size: 1 },\r\n // { x: 236.978417266187, y: 4.11764705882353, size: 1 },\r\n // { x: 291.36690647482, y: 2.90196078431373, size: 1 },\r\n // { x: 5.83783783783784, y: 3.96078431372549, size: 1 },\r\n // { x: 18.1621621621622, y: 3.01960784313725, size: 1 },\r\n // { x: 28.5405405405405, y: 4.03921568627451, size: 1 },\r\n // { x: 38.9189189189189, y: 3.01960784313725, size: 1 },\r\n // { x: 60.972972972973, y: 2.90196078431373, size: 1 },\r\n // { x: 104.432432432432, y: 3.2156862745098, size: 1 },\r\n // { x: 105.081081081081, y: 3.25490196078431, size: 1 },\r\n // { x: 107.027027027027, y: 3.33333333333333, size: 1 },\r\n // { x: 125.837837837838, y: 2.98039215686275, size: 1 },\r\n // { x: 141.405405405405, y: 3.37254901960784, size: 1 },\r\n // { x: 147.243243243243, y: 2.90196078431373, size: 1 },\r\n // { x: 147.891891891892, y: 2.90196078431373, size: 1 },\r\n // { x: 168.648648648649, y: 2.43137254901961, size: 1 },\r\n // { x: 169.297297297297, y: 2.15686274509804, size: 1 },\r\n // { x: 177.081081081081, y: 3.92156862745098, size: 1 },\r\n // { x: 190.054054054054, y: 3.13725490196078, size: 1 },\r\n // { x: 190.702702702703, y: 2.58823529411765, size: 1 },\r\n // { x: 212.756756756757, y: 3.2156862745098, size: 1 },\r\n // { x: 233.513513513514, y: 2.3921568627451, size: 1 },\r\n // { x: 234.162162162162, y: 2.43137254901961, size: 1 },\r\n // { x: 237.405405405405, y: 3.92156862745098, size: 1 },\r\n // { x: 253.621621621622, y: 3.2156862745098, size: 1 },\r\n // { x: 254.27027027027, y: 3.01960784313725, size: 1 },\r\n // { x: 254.918918918919, y: 2.98039215686275, size: 1 },\r\n // { x: 255.567567567568, y: 2.03921568627451, size: 1 },\r\n // { x: 276.972972972973, y: 2.58823529411765, size: 1 },\r\n // { x: 277.621621621622, y: 2, size: 1 },\r\n // { x: 290.594594594595, y: 4.07843137254902, size: 1 },\r\n // { x: 297.72972972973, y: 3.17647058823529, size: 1 },\r\n // { x: 318.486486486487, y: 3.17647058823529, size: 1 },\r\n // { x: 334.054054054054, y: 4.03921568627451, size: 1 },\r\n // { x: 44.0287769784173, y: 4.19607843137255, size: 1 },\r\n // { x: 306.258992805755, y: 2.47058823529412, size: 1 },\r\n // { x: 327.625899280576, y: 2.90196078431373, size: 1 },\r\n // { x: 348.992805755396, y: 3.25490196078431, size: 1 },\r\n // { x: 55.6834532374101, y: 2.82352941176471, size: 1 },\r\n // { x: 96.4748201438849, y: 2.7843137254902, size: 1 },\r\n // { x: 161.223021582734, y: 2.98039215686275, size: 1 },\r\n // { x: 38.9189189189189, y: 3.09803921568627, size: 1 },\r\n // { x: 60.3243243243243, y: 3.25490196078431, size: 1 },\r\n // { x: 60.972972972973, y: 3.05882352941176, size: 1 },\r\n // { x: 101.837837837838, y: 3.33333333333333, size: 1 },\r\n // { x: 103.783783783784, y: 2.70588235294118, size: 1 },\r\n // { x: 104.432432432432, y: 2.74509803921569, size: 1 },\r\n // { x: 125.189189189189, y: 3.09803921568627, size: 1 },\r\n // { x: 126.486486486486, y: 3.09803921568627, size: 1 },\r\n // { x: 127.135135135135, y: 2.94117647058824, size: 1 },\r\n // { x: 147.243243243243, y: 2.86274509803922, size: 1 },\r\n // { x: 168.648648648649, y: 3.09803921568627, size: 1 },\r\n // { x: 212.108108108108, y: 4, size: 1 },\r\n // { x: 233.513513513514, y: 3.37254901960784, size: 1 },\r\n // { x: 234.162162162162, y: 3.05882352941176, size: 1 },\r\n // { x: 255.567567567568, y: 3.09803921568627, size: 1 },\r\n // { x: 310.054054054054, y: 3.17647058823529, size: 1 },\r\n // { x: 86.1151079136691, y: 3.96078431372549, size: 1 },\r\n // { x: 89.3525179856115, y: 2.66666666666667, size: 1 },\r\n // { x: 90, y: 2.70588235294118, size: 1 },\r\n // { x: 102.94964028777, y: 3.92156862745098, size: 1 },\r\n // { x: 132.73381294964, y: 2.50980392156863, size: 1 },\r\n // { x: 133.381294964029, y: 2.66666666666667, size: 1 },\r\n // { x: 281.007194244604, y: 4.11764705882353, size: 1 },\r\n // { x: 305.611510791367, y: 2.90196078431373, size: 1 },\r\n // { x: 326.978417266187, y: 2.90196078431373, size: 1 },\r\n // { x: 10.3783783783784, y: 2.82352941176471, size: 1 },\r\n // { x: 30.4864864864865, y: 3.13725490196078, size: 1 },\r\n // { x: 31.1351351351351, y: 3.01960784313725, size: 1 },\r\n // { x: 31.7837837837838, y: 0.666666666666667, size: 1 },\r\n // { x: 32.4324324324324, y: 0.470588235294118, size: 1 },\r\n // { x: 33.0810810810811, y: 0.941176470588235, size: 1 },\r\n // { x: 33.7297297297297, y: 1.05882352941176, size: 1 },\r\n // { x: 40.8648648648649, y: 2.98039215686275, size: 1 },\r\n // { x: 41.5135135135135, y: 2.94117647058824, size: 1 },\r\n // { x: 47.3513513513514, y: 2.70588235294118, size: 1 },\r\n // { x: 48, y: 2.98039215686275, size: 1 },\r\n // { x: 50.5945945945946, y: 3.25490196078431, size: 1 },\r\n // { x: 51.2432432432432, y: 3.2156862745098, size: 1 },\r\n // { x: 51.8918918918919, y: 3.2156862745098, size: 1 },\r\n // { x: 52.5405405405405, y: 3.33333333333333, size: 1 },\r\n // { x: 53.1891891891892, y: 2.07843137254902, size: 1 },\r\n // { x: 53.8378378378378, y: 1.88235294117647, size: 1 },\r\n // { x: 75.2432432432432, y: 2.82352941176471, size: 1 },\r\n // { x: 96, y: 3.17647058823529, size: 1 },\r\n // { x: 96.6486486486486, y: 2.86274509803922, size: 1 },\r\n // { x: 97.2972972972973, y: 2.90196078431373, size: 1 },\r\n // { x: 118.702702702703, y: 2.62745098039216, size: 1 },\r\n // { x: 140.756756756757, y: 3.25490196078431, size: 1 },\r\n // { x: 161.513513513514, y: 2.98039215686275, size: 1 },\r\n // { x: 162.162162162162, y: 2.70588235294118, size: 1 },\r\n // { x: 181.621621621622, y: 3.13725490196078, size: 1 },\r\n // { x: 182.27027027027, y: 3.2156862745098, size: 1 },\r\n // { x: 182.918918918919, y: 2.66666666666667, size: 1 },\r\n // { x: 183.567567567568, y: 2.58823529411765, size: 1 },\r\n // { x: 193.945945945946, y: 3.2156862745098, size: 1 },\r\n // { x: 197.837837837838, y: 3.25490196078431, size: 1 },\r\n // { x: 203.027027027027, y: 3.09803921568627, size: 1 },\r\n // { x: 203.675675675676, y: 3.05882352941176, size: 1 },\r\n // { x: 204.324324324324, y: 2.94117647058824, size: 1 },\r\n // { x: 204.972972972973, y: 2.31372549019608, size: 1 },\r\n // { x: 205.621621621622, y: 3.01960784313725, size: 1 },\r\n // { x: 227.027027027027, y: 2.74509803921569, size: 1 },\r\n // { x: 228.324324324324, y: 4.19607843137255, size: 1 },\r\n // { x: 230.27027027027, y: 4, size: 1 },\r\n // { x: 230.918918918919, y: 4.23529411764706, size: 1 },\r\n // { x: 238.702702702703, y: 3.96078431372549, size: 1 },\r\n // { x: 247.783783783784, y: 2.43137254901961, size: 1 },\r\n // { x: 248.432432432432, y: 2.66666666666667, size: 1 },\r\n // { x: 251.675675675676, y: 4.19607843137255, size: 1 },\r\n // { x: 254.27027027027, y: 4.31372549019608, size: 1 },\r\n // { x: 256.216216216216, y: 4.07843137254902, size: 1 },\r\n // { x: 256.864864864865, y: 4.03921568627451, size: 1 },\r\n // { x: 258.162162162162, y: 4, size: 1 },\r\n // { x: 259.459459459459, y: 4.07843137254902, size: 1 },\r\n // { x: 260.756756756757, y: 3.96078431372549, size: 1 },\r\n // { x: 261.405405405405, y: 3.96078431372549, size: 1 },\r\n // { x: 263.351351351351, y: 3.96078431372549, size: 1 },\r\n // { x: 265.945945945946, y: 3.96078431372549, size: 1 },\r\n // { x: 266.594594594595, y: 4, size: 1 },\r\n // { x: 267.243243243243, y: 4.07843137254902, size: 1 },\r\n // { x: 269.837837837838, y: 2.74509803921569, size: 1 },\r\n // { x: 289.945945945946, y: 3.09803921568627, size: 1 },\r\n // { x: 291.243243243243, y: 2.35294117647059, size: 1 },\r\n // { x: 291.891891891892, y: 2.58823529411765, size: 1 },\r\n // { x: 297.72972972973, y: 3.96078431372549, size: 1 },\r\n // { x: 298.378378378378, y: 4.19607843137255, size: 1 },\r\n // { x: 302.918918918919, y: 4.19607843137255, size: 1 },\r\n // { x: 304.864864864865, y: 4.23529411764706, size: 1 },\r\n // { x: 312.648648648649, y: 3.05882352941176, size: 1 },\r\n // { x: 315.891891891892, y: 4.03921568627451, size: 1 },\r\n // { x: 326.918918918919, y: 4.07843137254902, size: 1 },\r\n // { x: 60.863309352518, y: 2.66666666666667, size: 1 },\r\n // { x: 62.158273381295, y: 2.86274509803922, size: 1 },\r\n // { x: 82.2302158273381, y: 2.86274509803922, size: 1 },\r\n // { x: 147.625899280576, y: 3.01960784313725, size: 1 },\r\n // { x: 216.906474820144, y: 4.03921568627451, size: 1 },\r\n // { x: 225.971223021583, y: 4.03921568627451, size: 1 },\r\n // { x: 233.741007194245, y: 2.90196078431373, size: 1 },\r\n // { x: 238.920863309353, y: 3.92156862745098, size: 1 },\r\n // { x: 239.568345323741, y: 4.11764705882353, size: 1 },\r\n // { x: 249.280575539568, y: 4.07843137254902, size: 1 },\r\n // { x: 271.942446043165, y: 4.15686274509804, size: 1 },\r\n // { x: 273.237410071942, y: 4.07843137254902, size: 1 },\r\n // { x: 284.892086330935, y: 4.03921568627451, size: 1 },\r\n // { x: 286.834532374101, y: 4.07843137254902, size: 1 },\r\n // { x: 289.424460431655, y: 3.92156862745098, size: 1 },\r\n // { x: 301.726618705036, y: 4.11764705882353, size: 1 },\r\n // { x: 307.553956834532, y: 4, size: 1 },\r\n // { x: 328.273381294964, y: 4, size: 1 },\r\n // { x: 338.63309352518, y: 4.11764705882353, size: 1 },\r\n // { x: 350.935251798561, y: 4.03921568627451, size: 1 },\r\n // { x: 154.10071942446, y: 2.94117647058824, size: 1 },\r\n // { x: 305.611510791367, y: 2.7843137254902, size: 1 },\r\n // { x: 53.0935251798561, y: 2.94117647058824, size: 1 },\r\n // { x: 54.3884892086331, y: 2.86274509803922, size: 1 },\r\n // { x: 123.669064748201, y: 4.07843137254902, size: 1 },\r\n // { x: 206.546762589928, y: 3.96078431372549, size: 1 },\r\n // { x: 233.093525179856, y: 4, size: 1 },\r\n // { x: 234.388489208633, y: 4.03921568627451, size: 1 },\r\n // { x: 243.453237410072, y: 4.19607843137255, size: 1 },\r\n // { x: 244.748201438849, y: 4.23529411764706, size: 1 },\r\n // { x: 319.208633093525, y: 4.07843137254902, size: 1 },\r\n // { x: 14.2702702702703, y: 4.03921568627451, size: 1 },\r\n // { x: 17.5135135135135, y: 2.98039215686275, size: 1 },\r\n // { x: 21.4054054054054, y: 3.96078431372549, size: 1 },\r\n // { x: 28.5405405405405, y: 3.96078431372549, size: 1 },\r\n // { x: 29.1891891891892, y: 4.19607843137255, size: 1 },\r\n // { x: 58.3783783783784, y: 3.33333333333333, size: 1 },\r\n // { x: 64.2162162162162, y: 3.96078431372549, size: 1 },\r\n // { x: 64.8648648648649, y: 4, size: 1 },\r\n // { x: 71.3513513513514, y: 4, size: 1 },\r\n // { x: 162.162162162162, y: 4.03921568627451, size: 1 },\r\n // { x: 168, y: 3.13725490196078, size: 1 },\r\n // { x: 197.837837837838, y: 4.07843137254902, size: 1 },\r\n // { x: 232.864864864865, y: 2.82352941176471, size: 1 },\r\n // { x: 233.513513513514, y: 2.70588235294118, size: 1 },\r\n // { x: 254.918918918919, y: 3.13725490196078, size: 1 },\r\n // { x: 275.027027027027, y: 3.92156862745098, size: 1 },\r\n // { x: 280.216216216216, y: 4.03921568627451, size: 1 },\r\n // { x: 319.783783783784, y: 2.82352941176471, size: 1 },\r\n // { x: 340.540540540541, y: 3.33333333333333, size: 1 },\r\n // { x: 341.189189189189, y: 3.09803921568627, size: 1 },\r\n // { x: 341.837837837838, y: 3.05882352941176, size: 1 },\r\n // { x: 42.7338129496403, y: 3.17647058823529, size: 1 },\r\n // { x: 45.9712230215827, y: 2.27450980392157, size: 1 },\r\n // { x: 46.6187050359712, y: 2, size: 1 },\r\n // { x: 100.359712230216, y: 4.11764705882353, size: 1 },\r\n // { x: 154.10071942446, y: 2.7843137254902, size: 1 },\r\n // { x: 175.467625899281, y: 2.74509803921569, size: 1 },\r\n // { x: 176.115107913669, y: 2.70588235294118, size: 1 },\r\n // { x: 178.705035971223, y: 3.05882352941176, size: 1 },\r\n // { x: 190.359712230216, y: 3.17647058823529, size: 1 },\r\n // { x: 196.834532374101, y: 2.82352941176471, size: 1 },\r\n // { x: 218.848920863309, y: 2.50980392156863, size: 1 },\r\n // { x: 308.848920863309, y: 3.09803921568627, size: 1 },\r\n // { x: 312.73381294964, y: 3.09803921568627, size: 1 },\r\n // { x: 313.381294964029, y: 3.09803921568627, size: 1 },\r\n // { x: 326.978417266187, y: 3.09803921568627, size: 1 },\r\n // { x: 348.345323741007, y: 2.70588235294118, size: 1 },\r\n // { x: 95.8273381294964, y: 2.7843137254902, size: 1 },\r\n // { x: 96.4748201438849, y: 2.74509803921569, size: 1 },\r\n // { x: 117.841726618705, y: 3.05882352941176, size: 1 },\r\n // { x: 209.784172661871, y: 3.05882352941176, size: 1 },\r\n // { x: 249.280575539568, y: 3.09803921568627, size: 1 },\r\n // { x: 291.36690647482, y: 3.13725490196078, size: 1 },\r\n // { x: 339.928057553957, y: 3.17647058823529, size: 1 },\r\n // { x: 341.870503597122, y: 3.17647058823529, size: 1 },\r\n // { x: 2.58992805755396, y: 4.15686274509804, size: 1 },\r\n // { x: 59.568345323741, y: 2.74509803921569, size: 1 },\r\n // { x: 60.2158273381295, y: 2.90196078431373, size: 1 },\r\n // { x: 81.5827338129496, y: 2.54901960784314, size: 1 },\r\n // { x: 82.2302158273381, y: 2.62745098039216, size: 1 },\r\n // { x: 83.5251798561151, y: 2.7843137254902, size: 1 },\r\n // { x: 159.280575539568, y: 3.09803921568627, size: 1 },\r\n // { x: 170.935251798561, y: 4.15686274509804, size: 1 },\r\n // { x: 178.057553956835, y: 4.11764705882353, size: 1 },\r\n // { x: 180, y: 4.11764705882353, size: 1 },\r\n // { x: 213.021582733813, y: 2.74509803921569, size: 1 },\r\n // { x: 232.446043165468, y: 2.82352941176471, size: 1 },\r\n // { x: 341.870503597122, y: 2.82352941176471, size: 1 },\r\n // { x: 342.517985611511, y: 3.05882352941176, size: 1 },\r\n // { x: 1.94594594594595, y: 3.05882352941176, size: 1 },\r\n // { x: 2.59459459459459, y: 3.09803921568627, size: 1 },\r\n // { x: 24, y: 3.29411764705882, size: 1 },\r\n // { x: 25.2972972972973, y: 3.96078431372549, size: 1 },\r\n // { x: 36.3243243243243, y: 3.96078431372549, size: 1 },\r\n // { x: 59.6756756756757, y: 3.92156862745098, size: 1 },\r\n // { x: 96, y: 4.03921568627451, size: 1 },\r\n // { x: 100.540540540541, y: 3.92156862745098, size: 1 },\r\n // { x: 132.324324324324, y: 2.94117647058824, size: 1 },\r\n // { x: 133.621621621622, y: 3.09803921568627, size: 1 },\r\n // { x: 134.918918918919, y: 3.05882352941176, size: 1 },\r\n // { x: 137.513513513514, y: 3.05882352941176, size: 1 },\r\n // { x: 138.810810810811, y: 3.2156862745098, size: 1 },\r\n // { x: 142.054054054054, y: 3.33333333333333, size: 1 },\r\n // { x: 142.702702702703, y: 3.25490196078431, size: 1 },\r\n // { x: 150.486486486486, y: 3.13725490196078, size: 1 },\r\n // { x: 153.081081081081, y: 3.2156862745098, size: 1 },\r\n // { x: 153.72972972973, y: 2.58823529411765, size: 1 },\r\n // { x: 154.378378378378, y: 3.01960784313725, size: 1 },\r\n // { x: 155.675675675676, y: 3.09803921568627, size: 1 },\r\n // { x: 160.216216216216, y: 3.01960784313725, size: 1 },\r\n // { x: 175.135135135135, y: 3.05882352941176, size: 1 },\r\n // { x: 199.783783783784, y: 3.25490196078431, size: 1 },\r\n // { x: 204.972972972973, y: 3.2156862745098, size: 1 },\r\n // { x: 238.054054054054, y: 3.17647058823529, size: 1 },\r\n // { x: 240, y: 2.98039215686275, size: 1 },\r\n // { x: 260.108108108108, y: 3.17647058823529, size: 1 },\r\n // { x: 261.405405405405, y: 2.50980392156863, size: 1 },\r\n // { x: 262.054054054054, y: 2.58823529411765, size: 1 },\r\n // { x: 262.702702702703, y: 2.47058823529412, size: 1 },\r\n // { x: 263.351351351351, y: 2.35294117647059, size: 1 },\r\n // { x: 284.756756756757, y: 3.88235294117647, size: 1 },\r\n // { x: 286.702702702703, y: 4.07843137254902, size: 1 },\r\n // { x: 288.648648648649, y: 4.19607843137255, size: 1 },\r\n // { x: 290.594594594595, y: 4.11764705882353, size: 1 },\r\n // { x: 295.783783783784, y: 4.07843137254902, size: 1 },\r\n // { x: 300.324324324324, y: 4.03921568627451, size: 1 },\r\n // { x: 302.27027027027, y: 4.11764705882353, size: 1 },\r\n // { x: 316.540540540541, y: 3.92156862745098, size: 1 },\r\n // { x: 322.378378378378, y: 4, size: 1 },\r\n // { x: 356.108108108108, y: 4, size: 1 },\r\n // { x: 31.0791366906475, y: 2.86274509803922, size: 1 },\r\n // { x: 31.726618705036, y: 3.05882352941176, size: 1 },\r\n // { x: 181.942446043165, y: 3.09803921568627, size: 1 },\r\n // { x: 188.41726618705, y: 4.15686274509804, size: 1 },\r\n // { x: 189.064748201439, y: 4.07843137254902, size: 1 },\r\n // { x: 225.971223021583, y: 3.09803921568627, size: 1 },\r\n // { x: 247.338129496403, y: 1.72549019607843, size: 1 },\r\n // { x: 247.985611510791, y: 1.52941176470588, size: 1 },\r\n // { x: 248.63309352518, y: 1.56862745098039, size: 1 },\r\n // { x: 249.280575539568, y: 2.7843137254902, size: 1 },\r\n // { x: 256.402877697842, y: 2.98039215686275, size: 1 },\r\n // { x: 290.071942446043, y: 3.05882352941176, size: 1 },\r\n // { x: 312.086330935252, y: 2.82352941176471, size: 1 },\r\n // { x: 354.820143884892, y: 3.01960784313725, size: 1 },\r\n // { x: 355.467625899281, y: 2.86274509803922, size: 1 },\r\n // { x: 2.59459459459459, y: 3.17647058823529, size: 1 },\r\n // { x: 12.972972972973, y: 3.25490196078431, size: 1 },\r\n // { x: 13.6216216216216, y: 3.29411764705882, size: 1 },\r\n // { x: 16.2162162162162, y: 2.74509803921569, size: 1 },\r\n // { x: 16.8648648648649, y: 2.15686274509804, size: 1 },\r\n // { x: 18.8108108108108, y: 4.03921568627451, size: 1 },\r\n // { x: 24.6486486486486, y: 4.11764705882353, size: 1 },\r\n // { x: 27.2432432432432, y: 4.23529411764706, size: 1 },\r\n // { x: 29.1891891891892, y: 4.11764705882353, size: 1 },\r\n // { x: 29.8378378378378, y: 4.03921568627451, size: 1 },\r\n // { x: 33.0810810810811, y: 4.03921568627451, size: 1 },\r\n // { x: 33.7297297297297, y: 4, size: 1 },\r\n // { x: 35.027027027027, y: 4, size: 1 },\r\n // { x: 35.6756756756757, y: 4.03921568627451, size: 1 },\r\n // { x: 36.3243243243243, y: 3.17647058823529, size: 1 },\r\n // { x: 37.6216216216216, y: 2.94117647058824, size: 1 },\r\n // { x: 38.2702702702703, y: 1.96078431372549, size: 1 },\r\n // { x: 38.9189189189189, y: 3.17647058823529, size: 1 },\r\n // { x: 86.2702702702703, y: 4.03921568627451, size: 1 },\r\n // { x: 102.486486486486, y: 3.01960784313725, size: 1 },\r\n // { x: 103.135135135135, y: 2.74509803921569, size: 1 },\r\n // { x: 105.081081081081, y: 4, size: 1 },\r\n // { x: 110.27027027027, y: 4.07843137254902, size: 1 },\r\n // { x: 116.108108108108, y: 4, size: 1 },\r\n // { x: 121.945945945946, y: 4.03921568627451, size: 1 },\r\n // { x: 124.540540540541, y: 2.3921568627451, size: 1 },\r\n // { x: 125.189189189189, y: 2.50980392156863, size: 1 },\r\n // { x: 254.27027027027, y: 2.7843137254902, size: 1 },\r\n // { x: 255.567567567568, y: 3.05882352941176, size: 1 },\r\n // { x: 256.216216216216, y: 2.98039215686275, size: 1 },\r\n // { x: 260.108108108108, y: 3.96078431372549, size: 1 },\r\n // { x: 264.648648648649, y: 3.96078431372549, size: 1 },\r\n // { x: 269.189189189189, y: 4, size: 1 },\r\n // { x: 269.837837837838, y: 4.03921568627451, size: 1 },\r\n // { x: 271.135135135135, y: 3.88235294117647, size: 1 },\r\n // { x: 272.432432432432, y: 4.07843137254902, size: 1 },\r\n // { x: 274.378378378378, y: 3.17647058823529, size: 1 },\r\n // { x: 275.675675675676, y: 2.62745098039216, size: 1 },\r\n // { x: 276.324324324324, y: 2.90196078431373, size: 1 },\r\n // { x: 276.972972972973, y: 3.13725490196078, size: 1 },\r\n // { x: 277.621621621622, y: 3.01960784313725, size: 1 },\r\n // { x: 299.027027027027, y: 3.88235294117647, size: 1 },\r\n // { x: 301.621621621622, y: 4.07843137254902, size: 1 },\r\n // { x: 319.135135135135, y: 3.01960784313725, size: 1 },\r\n // { x: 340.540540540541, y: 3.01960784313725, size: 1 },\r\n // { x: 341.189189189189, y: 2.98039215686275, size: 1 },\r\n // { x: 116.546762589928, y: 4, size: 1 },\r\n // { x: 132.73381294964, y: 3.01960784313725, size: 1 },\r\n // { x: 133.381294964029, y: 2.90196078431373, size: 1 },\r\n // { x: 159.928057553957, y: 4.07843137254902, size: 1 },\r\n // { x: 198.129496402878, y: 2.82352941176471, size: 1 },\r\n // { x: 198.776978417266, y: 3.01960784313725, size: 1 },\r\n // { x: 218.201438848921, y: 2.90196078431373, size: 1 },\r\n // { x: 220.143884892086, y: 2.7843137254902, size: 1 },\r\n // { x: 240.215827338129, y: 3.01960784313725, size: 1 },\r\n // { x: 241.510791366906, y: 4.07843137254902, size: 1 },\r\n // { x: 247.338129496403, y: 4.15686274509804, size: 1 },\r\n // { x: 249.928057553957, y: 4.23529411764706, size: 1 },\r\n // { x: 250.575539568345, y: 4.23529411764706, size: 1 },\r\n // { x: 252.517985611511, y: 4.19607843137255, size: 1 },\r\n // { x: 253.165467625899, y: 3.96078431372549, size: 1 },\r\n // { x: 255.107913669065, y: 4.07843137254902, size: 1 },\r\n // { x: 280.359712230216, y: 4.07843137254902, size: 1 },\r\n // { x: 342.517985611511, y: 4.03921568627451, size: 1 },\r\n // { x: 66.0431654676259, y: 4.03921568627451, size: 1 },\r\n // { x: 129.496402877698, y: 4.07843137254902, size: 1 },\r\n // { x: 140.503597122302, y: 2.98039215686275, size: 1 },\r\n // { x: 207.194244604317, y: 4, size: 1 },\r\n // { x: 215.611510791367, y: 4.07843137254902, size: 1 },\r\n // { x: 226.618705035971, y: 4.03921568627451, size: 1 },\r\n // { x: 238.920863309353, y: 4.19607843137255, size: 1 },\r\n // { x: 288.776978417266, y: 3.09803921568627, size: 1 },\r\n // { x: 290.719424460432, y: 2.50980392156863, size: 1 },\r\n // { x: 291.36690647482, y: 2.58823529411765, size: 1 },\r\n // { x: 292.014388489209, y: 2.7843137254902, size: 1 },\r\n // { x: 16.2162162162162, y: 2.82352941176471, size: 1 },\r\n // { x: 16.8648648648649, y: 2.86274509803922, size: 1 },\r\n // { x: 38.2702702702703, y: 2.43137254901961, size: 1 },\r\n // { x: 42.1621621621622, y: 3.96078431372549, size: 1 },\r\n // { x: 49.9459459459459, y: 3.92156862745098, size: 1 },\r\n // { x: 53.1891891891892, y: 3.96078431372549, size: 1 },\r\n // { x: 53.8378378378378, y: 4.23529411764706, size: 1 },\r\n // { x: 57.0810810810811, y: 4, size: 1 },\r\n // { x: 59.6756756756757, y: 3.09803921568627, size: 1 },\r\n // { x: 81.0810810810811, y: 3.29411764705882, size: 1 },\r\n // { x: 83.6756756756757, y: 3.33333333333333, size: 1 },\r\n // { x: 124.540540540541, y: 3.09803921568627, size: 1 },\r\n // { x: 189.405405405405, y: 3.05882352941176, size: 1 },\r\n // { x: 195.243243243243, y: 3.13725490196078, size: 1 },\r\n // { x: 201.72972972973, y: 3.09803921568627, size: 1 },\r\n // { x: 210.810810810811, y: 2.62745098039216, size: 1 },\r\n // { x: 211.459459459459, y: 2.82352941176471, size: 1 },\r\n // { x: 212.108108108108, y: 2.62745098039216, size: 1 },\r\n // { x: 232.216216216216, y: 2.27450980392157, size: 1 },\r\n // { x: 232.864864864865, y: 2, size: 1 },\r\n // { x: 236.108108108108, y: 4.03921568627451, size: 1 },\r\n // { x: 242.594594594595, y: 4.03921568627451, size: 1 },\r\n // { x: 247.783783783784, y: 4.31372549019608, size: 1 },\r\n // { x: 250.378378378378, y: 4, size: 1 },\r\n // { x: 271.135135135135, y: 3.33333333333333, size: 1 },\r\n // { x: 275.675675675676, y: 3.2156862745098, size: 1 },\r\n // { x: 297.081081081081, y: 2.62745098039216, size: 1 },\r\n // { x: 318.486486486487, y: 3.05882352941176, size: 1 },\r\n // { x: 323.675675675676, y: 4.19607843137255, size: 1 },\r\n // { x: 332.108108108108, y: 4.03921568627451, size: 1 },\r\n // { x: 336, y: 3.96078431372549, size: 1 },\r\n // { x: 337.945945945946, y: 3.88235294117647, size: 1 },\r\n // { x: 2.58992805755396, y: 3.05882352941176, size: 1 },\r\n // { x: 23.9568345323741, y: 2.7843137254902, size: 1 },\r\n // { x: 34.9640287769784, y: 4.15686274509804, size: 1 },\r\n // { x: 55.0359712230216, y: 4, size: 1 },\r\n // { x: 56.9784172661871, y: 4.15686274509804, size: 1 },\r\n // { x: 62.158273381295, y: 3.96078431372549, size: 1 },\r\n // { x: 69.9280575539568, y: 4.15686274509804, size: 1 },\r\n // { x: 117.841726618705, y: 4.19607843137255, size: 1 },\r\n // { x: 119.136690647482, y: 4.19607843137255, size: 1 },\r\n // { x: 124.31654676259, y: 4.11764705882353, size: 1 },\r\n // { x: 126.906474820144, y: 4.15686274509804, size: 1 },\r\n // { x: 175.467625899281, y: 2.50980392156863, size: 1 },\r\n // { x: 196.187050359712, y: 2.70588235294118, size: 1 },\r\n // { x: 196.834532374101, y: 2.43137254901961, size: 1 },\r\n // { x: 218.201438848921, y: 3.01960784313725, size: 1 },\r\n // { x: 239.568345323741, y: 3.09803921568627, size: 1 },\r\n // { x: 260.935251798561, y: 2.62745098039216, size: 1 },\r\n // { x: 261.58273381295, y: 2.07843137254902, size: 1 },\r\n // { x: 298.489208633094, y: 4.07843137254902, size: 1 },\r\n // { x: 299.784172661871, y: 4.15686274509804, size: 1 },\r\n // { x: 304.31654676259, y: 2.23529411764706, size: 1 },\r\n // { x: 304.964028776978, y: 2.50980392156863, size: 1 },\r\n // { x: 326.330935251799, y: 2.94117647058824, size: 1 },\r\n // { x: 341.870503597122, y: 4.23529411764706, size: 1 },\r\n // { x: 347.05035971223, y: 3.17647058823529, size: 1 },\r\n // { x: 347.697841726619, y: 3.05882352941176, size: 1 },\r\n // { x: 9.71223021582734, y: 2.62745098039216, size: 1 },\r\n // { x: 30.431654676259, y: 2.58823529411765, size: 1 },\r\n // { x: 31.0791366906475, y: 2.47058823529412, size: 1 },\r\n // { x: 52.4460431654676, y: 2.70588235294118, size: 1 },\r\n // { x: 73.1654676258993, y: 3.05882352941176, size: 1 },\r\n // { x: 73.8129496402878, y: 1.88235294117647, size: 1 },\r\n // { x: 74.4604316546763, y: 1.80392156862745, size: 1 },\r\n // { x: 203.309352517986, y: 2.94117647058824, size: 1 },\r\n // { x: 246.690647482014, y: 2.82352941176471, size: 1 },\r\n // { x: 284.244604316547, y: 3.96078431372549, size: 1 },\r\n // { x: 289.424460431655, y: 2.90196078431373, size: 1 },\r\n // { x: 332.805755395683, y: 2.66666666666667, size: 1 },\r\n // { x: 333.453237410072, y: 2.62745098039216, size: 1 },\r\n // { x: 354.820143884892, y: 3.25490196078431, size: 1 },\r\n // { x: 0.648648648648649, y: 3.2156862745098, size: 1 },\r\n // { x: 1.94594594594595, y: 3.13725490196078, size: 1 },\r\n // { x: 13.6216216216216, y: 3.2156862745098, size: 1 },\r\n // { x: 16.2162162162162, y: 3.17647058823529, size: 1 },\r\n // { x: 37.6216216216216, y: 2.7843137254902, size: 1 },\r\n // { x: 59.6756756756757, y: 3.25490196078431, size: 1 },\r\n // { x: 110.27027027027, y: 4, size: 1 },\r\n // { x: 124.540540540541, y: 3.96078431372549, size: 1 },\r\n // { x: 143.351351351351, y: 4.07843137254902, size: 1 },\r\n // { x: 144.648648648649, y: 3.25490196078431, size: 1 },\r\n // { x: 145.945945945946, y: 3.2156862745098, size: 1 },\r\n // { x: 146.594594594595, y: 3.13725490196078, size: 1 },\r\n // { x: 147.891891891892, y: 2.74509803921569, size: 1 },\r\n // { x: 167.351351351351, y: 2.86274509803922, size: 1 },\r\n // { x: 168.648648648649, y: 2.98039215686275, size: 1 },\r\n // { x: 210.810810810811, y: 3.09803921568627, size: 1 },\r\n // { x: 212.108108108108, y: 2.82352941176471, size: 1 },\r\n // { x: 212.756756756757, y: 3.01960784313725, size: 1 },\r\n // { x: 254.27027027027, y: 2.98039215686275, size: 1 },\r\n // { x: 269.837837837838, y: 3.92156862745098, size: 1 },\r\n // { x: 274.378378378378, y: 3.2156862745098, size: 1 },\r\n // { x: 275.675675675676, y: 3.09803921568627, size: 1 },\r\n // { x: 276.972972972973, y: 2.90196078431373, size: 1 },\r\n // { x: 277.621621621622, y: 3.13725490196078, size: 1 },\r\n // { x: 286.054054054054, y: 3.29411764705882, size: 1 },\r\n // { x: 319.135135135135, y: 2.90196078431373, size: 1 },\r\n // { x: 319.783783783784, y: 3.17647058823529, size: 1 },\r\n // { x: 339.891891891892, y: 3.13725490196078, size: 1 },\r\n // { x: 340.540540540541, y: 2.66666666666667, size: 1 },\r\n // { x: 111.36690647482, y: 2.66666666666667, size: 1 },\r\n // { x: 112.014388489209, y: 2.7843137254902, size: 1 },\r\n // { x: 131.438848920863, y: 2.82352941176471, size: 1 },\r\n // { x: 132.086330935252, y: 3.05882352941176, size: 1 },\r\n // { x: 156.043165467626, y: 4.15686274509804, size: 1 },\r\n // { x: 196.187050359712, y: 3.13725490196078, size: 1 },\r\n // { x: 260.935251798561, y: 2.90196078431373, size: 1 },\r\n // { x: 278.41726618705, y: 4.07843137254902, size: 1 },\r\n // { x: 304.31654676259, y: 2.94117647058824, size: 1 },\r\n // { x: 29.136690647482, y: 4.07843137254902, size: 1 },\r\n // { x: 33.0215827338129, y: 4.03921568627451, size: 1 },\r\n // { x: 117.194244604317, y: 2.74509803921569, size: 1 },\r\n // { x: 117.841726618705, y: 2.58823529411765, size: 1 },\r\n // { x: 118.489208633094, y: 2.27450980392157, size: 1 },\r\n // { x: 119.136690647482, y: 2.58823529411765, size: 1 },\r\n // { x: 120.431654676259, y: 3.13725490196078, size: 1 },\r\n // { x: 203.309352517986, y: 3.01960784313725, size: 1 },\r\n // { x: 355.467625899281, y: 2.90196078431373, size: 1 },\r\n // { x: 24.6486486486486, y: 4.03921568627451, size: 1 },\r\n // { x: 57.7297297297297, y: 3.29411764705882, size: 1 },\r\n // { x: 59.027027027027, y: 3.13725490196078, size: 1 },\r\n // { x: 91.4594594594595, y: 3.37254901960784, size: 1 },\r\n // { x: 101.189189189189, y: 3.13725490196078, size: 1 },\r\n // { x: 101.837837837838, y: 2.94117647058824, size: 1 },\r\n // { x: 102.486486486486, y: 1.37254901960784, size: 1 },\r\n // { x: 103.135135135135, y: 1.13725490196078, size: 1 },\r\n // { x: 103.783783783784, y: 0.941176470588235, size: 1 },\r\n // { x: 104.432432432432, y: 1.13725490196078, size: 1 },\r\n // { x: 106.378378378378, y: 3.33333333333333, size: 1 },\r\n // { x: 107.027027027027, y: 2.7843137254902, size: 1 },\r\n // { x: 111.567567567568, y: 2.86274509803922, size: 1 },\r\n // { x: 118.054054054054, y: 2.82352941176471, size: 1 },\r\n // { x: 128.432432432432, y: 3.96078431372549, size: 1 },\r\n // { x: 154.378378378378, y: 3.2156862745098, size: 1 },\r\n // { x: 158.918918918919, y: 3.25490196078431, size: 1 },\r\n // { x: 159.567567567568, y: 3.17647058823529, size: 1 },\r\n // { x: 167.351351351351, y: 2.90196078431373, size: 1 },\r\n // { x: 188.756756756757, y: 2.3921568627451, size: 1 },\r\n // { x: 189.405405405405, y: 2.58823529411765, size: 1 },\r\n // { x: 199.783783783784, y: 4.11764705882353, size: 1 },\r\n // { x: 210.810810810811, y: 2.35294117647059, size: 1 },\r\n // { x: 232.216216216216, y: 2.3921568627451, size: 1 },\r\n // { x: 232.864864864865, y: 3.09803921568627, size: 1 },\r\n // { x: 251.675675675676, y: 3.29411764705882, size: 1 },\r\n // { x: 252.324324324324, y: 3.33333333333333, size: 1 },\r\n // { x: 253.621621621622, y: 2.86274509803922, size: 1 },\r\n // { x: 269.837837837838, y: 4.15686274509804, size: 1 },\r\n // { x: 300.324324324324, y: 3.09803921568627, size: 1 },\r\n // { x: 302.918918918919, y: 3.25490196078431, size: 1 },\r\n // { x: 318.486486486487, y: 2.54901960784314, size: 1 },\r\n // { x: 319.135135135135, y: 2.27450980392157, size: 1 },\r\n // { x: 322.378378378378, y: 2.98039215686275, size: 1 },\r\n // { x: 326.918918918919, y: 3.09803921568627, size: 1 },\r\n // { x: 327.567567567568, y: 3.29411764705882, size: 1 },\r\n // { x: 331.459459459459, y: 3.25490196078431, size: 1 },\r\n // { x: 332.756756756757, y: 3.17647058823529, size: 1 },\r\n // { x: 337.297297297297, y: 3.05882352941176, size: 1 },\r\n // { x: 339.243243243243, y: 3.05882352941176, size: 1 },\r\n // { x: 339.891891891892, y: 2.54901960784314, size: 1 },\r\n // { x: 340.540540540541, y: 2.58823529411765, size: 1 },\r\n // { x: 356.756756756757, y: 3.92156862745098, size: 1 },\r\n // { x: 153.453237410072, y: 2.66666666666667, size: 1 },\r\n // { x: 154.10071942446, y: 2.66666666666667, size: 1 },\r\n // { x: 155.395683453237, y: 2.98039215686275, size: 1 },\r\n // { x: 157.985611510791, y: 3.25490196078431, size: 1 },\r\n // { x: 163.812949640288, y: 3.01960784313725, size: 1 },\r\n // { x: 170.935251798561, y: 3.09803921568627, size: 1 },\r\n // { x: 172.230215827338, y: 3.01960784313725, size: 1 },\r\n // { x: 174.820143884892, y: 2.86274509803922, size: 1 },\r\n // { x: 230.503597122302, y: 3.05882352941176, size: 1 },\r\n // { x: 285.539568345324, y: 3.13725490196078, size: 1 },\r\n // { x: 290.071942446043, y: 3.09803921568627, size: 1 },\r\n // { x: 307.553956834532, y: 3.09803921568627, size: 1 },\r\n // { x: 311.438848920863, y: 3.17647058823529, size: 1 },\r\n // { x: 352.877697841727, y: 3.17647058823529, size: 1 },\r\n // { x: 354.172661870504, y: 3.09803921568627, size: 1 },\r\n // { x: 359.352517985611, y: 3.09803921568627, size: 1 },\r\n // { x: 5.17985611510791, y: 3.17647058823529, size: 1 },\r\n // { x: 53.7410071942446, y: 2.98039215686275, size: 1 },\r\n // { x: 94.5323741007194, y: 3.09803921568627, size: 1 },\r\n // { x: 95.1798561151079, y: 2.54901960784314, size: 1 },\r\n // { x: 95.8273381294964, y: 2.62745098039216, size: 1 },\r\n // { x: 141.151079136691, y: 3.09803921568627, size: 1 },\r\n // { x: 141.798561151079, y: 3.13725490196078, size: 1 },\r\n // { x: 148.920863309353, y: 2.94117647058824, size: 1 },\r\n // { x: 156.043165467626, y: 3.05882352941176, size: 1 },\r\n // { x: 192.94964028777, y: 3.17647058823529, size: 1 },\r\n // { x: 195.539568345324, y: 3.13725490196078, size: 1 },\r\n // { x: 246.690647482014, y: 3.01960784313725, size: 1 },\r\n // { x: 292.661870503597, y: 2.94117647058824, size: 1 },\r\n // { x: 306.906474820144, y: 2.98039215686275, size: 1 },\r\n // { x: 317.913669064748, y: 3.01960784313725, size: 1 },\r\n // { x: 328.920863309353, y: 3.05882352941176, size: 1 },\r\n // { x: 352.877697841727, y: 2.98039215686275, size: 1 },\r\n // { x: 353.525179856115, y: 2.98039215686275, size: 1 },\r\n // { x: 356.115107913669, y: 3.01960784313725, size: 1 },\r\n // { x: 18.8108108108108, y: 3.33333333333333, size: 1 },\r\n // { x: 19.4594594594595, y: 3.13725490196078, size: 1 },\r\n // { x: 21.4054054054054, y: 3.13725490196078, size: 1 },\r\n // { x: 22.7027027027027, y: 3.05882352941176, size: 1 },\r\n // { x: 24, y: 3.09803921568627, size: 1 },\r\n // { x: 25.2972972972973, y: 3.2156862745098, size: 1 },\r\n // { x: 27.8918918918919, y: 3.05882352941176, size: 1 },\r\n // { x: 29.8378378378378, y: 3.05882352941176, size: 1 },\r\n // { x: 33.7297297297297, y: 3.17647058823529, size: 1 },\r\n // { x: 34.3783783783784, y: 3.05882352941176, size: 1 },\r\n // { x: 37.6216216216216, y: 3.2156862745098, size: 1 },\r\n // { x: 53.8378378378378, y: 3.25490196078431, size: 1 },\r\n // { x: 59.027027027027, y: 2.90196078431373, size: 1 },\r\n // { x: 60.3243243243243, y: 3.2156862745098, size: 1 },\r\n // { x: 60.972972972973, y: 3.29411764705882, size: 1 },\r\n // { x: 67.4594594594595, y: 3.13725490196078, size: 1 },\r\n // { x: 69.4054054054054, y: 3.2156862745098, size: 1 },\r\n // { x: 70.054054054054, y: 3.25490196078431, size: 1 },\r\n // { x: 86.9189189189189, y: 3.13725490196078, size: 1 },\r\n // { x: 87.5675675675676, y: 3.13725490196078, size: 1 },\r\n // { x: 91.4594594594595, y: 3.17647058823529, size: 1 },\r\n // { x: 92.1081081081081, y: 3.13725490196078, size: 1 },\r\n // { x: 93.4054054054054, y: 3.33333333333333, size: 1 },\r\n // { x: 96.6486486486486, y: 3.2156862745098, size: 1 },\r\n // { x: 98.5945945945946, y: 3.01960784313725, size: 1 },\r\n // { x: 104.432432432432, y: 3.01960784313725, size: 1 },\r\n // { x: 107.675675675676, y: 3.33333333333333, size: 1 },\r\n // { x: 108.972972972973, y: 2.98039215686275, size: 1 },\r\n // { x: 113.513513513514, y: 3.09803921568627, size: 1 },\r\n // { x: 114.162162162162, y: 3.17647058823529, size: 1 },\r\n // { x: 120.648648648649, y: 3.01960784313725, size: 1 },\r\n // { x: 143.351351351351, y: 3.33333333333333, size: 1 },\r\n // { x: 166.702702702703, y: 3.01960784313725, size: 1 },\r\n // { x: 188.108108108108, y: 3.13725490196078, size: 1 },\r\n // { x: 210.162162162162, y: 2.98039215686275, size: 1 },\r\n // { x: 210.810810810811, y: 2.98039215686275, size: 1 },\r\n // { x: 232.216216216216, y: 2.86274509803922, size: 1 },\r\n // { x: 253.621621621622, y: 3.05882352941176, size: 1 },\r\n // { x: 254.918918918919, y: 3.17647058823529, size: 1 },\r\n // { x: 255.567567567568, y: 3.13725490196078, size: 1 },\r\n // { x: 258.810810810811, y: 3.29411764705882, size: 1 },\r\n // { x: 262.054054054054, y: 3.25490196078431, size: 1 },\r\n // { x: 264.648648648649, y: 3.09803921568627, size: 1 },\r\n // { x: 271.783783783784, y: 3.05882352941176, size: 1 },\r\n // { x: 272.432432432432, y: 3.13725490196078, size: 1 },\r\n // { x: 275.027027027027, y: 3.09803921568627, size: 1 },\r\n // { x: 275.675675675676, y: 3.05882352941176, size: 1 },\r\n // { x: 296.432432432432, y: 3.01960784313725, size: 1 },\r\n // { x: 347.027027027027, y: 3.2156862745098, size: 1 },\r\n // { x: 1.29496402877698, y: 2.7843137254902, size: 1 },\r\n // { x: 1.94244604316547, y: 2.43137254901961, size: 1 },\r\n // { x: 45.9712230215827, y: 2.98039215686275, size: 1 },\r\n // { x: 61.5107913669065, y: 3.17647058823529, size: 1 },\r\n // { x: 69.2805755395683, y: 3.09803921568627, size: 1 },\r\n // { x: 75.1079136690647, y: 3.17647058823529, size: 1 },\r\n // { x: 79.6402877697842, y: 3.05882352941176, size: 1 },\r\n // { x: 88.0575539568345, y: 2.70588235294118, size: 1 },\r\n // { x: 88.705035971223, y: 2.7843137254902, size: 1 },\r\n // { x: 100.359712230216, y: 3.01960784313725, size: 1 },\r\n // { x: 109.424460431655, y: 3.13725490196078, size: 1 },\r\n // { x: 150.215827338129, y: 3.05882352941176, size: 1 },\r\n // { x: 152.805755395683, y: 2.94117647058824, size: 1 },\r\n // { x: 155.395683453237, y: 3.13725490196078, size: 1 },\r\n // { x: 167.05035971223, y: 3.17647058823529, size: 1 },\r\n // { x: 174.172661870504, y: 3.13725490196078, size: 1 },\r\n // { x: 228.561151079137, y: 3.2156862745098, size: 1 },\r\n // { x: 229.856115107914, y: 3.25490196078431, size: 1 },\r\n // { x: 236.330935251799, y: 3.05882352941176, size: 1 },\r\n // { x: 253.165467625899, y: 3.09803921568627, size: 1 },\r\n // { x: 277.122302158273, y: 3.25490196078431, size: 1 },\r\n // { x: 304.31654676259, y: 2.7843137254902, size: 1 },\r\n // { x: 325.68345323741, y: 2.35294117647059, size: 1 },\r\n // { x: 30.431654676259, y: 2.23529411764706, size: 1 },\r\n // { x: 51.7985611510791, y: 2.27450980392157, size: 1 },\r\n // { x: 73.1654676258993, y: 2.54901960784314, size: 1 },\r\n // { x: 114.604316546763, y: 2.98039215686275, size: 1 },\r\n // { x: 115.89928057554, y: 3.05882352941176, size: 1 },\r\n // { x: 138.561151079137, y: 2.94117647058824, size: 1 },\r\n // { x: 179.352517985612, y: 3.13725490196078, size: 1 },\r\n // { x: 242.805755395683, y: 4.11764705882353, size: 1 },\r\n // { x: 287.482014388489, y: 3.09803921568627, size: 1 },\r\n // { x: 338.63309352518, y: 3.17647058823529, size: 1 },\r\n // { x: 43.4594594594595, y: 3.17647058823529, size: 1 },\r\n // { x: 44.1081081081081, y: 3.13725490196078, size: 1 },\r\n // { x: 50.5945945945946, y: 3.2156862745098, size: 1 },\r\n // { x: 55.7837837837838, y: 3.09803921568627, size: 1 },\r\n // { x: 58.3783783783784, y: 2.66666666666667, size: 1 },\r\n // { x: 59.027027027027, y: 2.94117647058824, size: 1 },\r\n // { x: 60.972972972973, y: 3.09803921568627, size: 1 },\r\n // { x: 80.4324324324324, y: 2.70588235294118, size: 1 },\r\n // { x: 81.0810810810811, y: 2.62745098039216, size: 1 },\r\n // { x: 81.7297297297297, y: 2.50980392156863, size: 1 },\r\n // { x: 82.3783783783784, y: 2.54901960784314, size: 1 },\r\n // { x: 102.486486486486, y: 2.82352941176471, size: 1 },\r\n // { x: 103.135135135135, y: 3.05882352941176, size: 1 },\r\n // { x: 103.783783783784, y: 2.86274509803922, size: 1 },\r\n // { x: 104.432432432432, y: 3.25490196078431, size: 1 },\r\n // { x: 108.972972972973, y: 3.33333333333333, size: 1 },\r\n // { x: 121.945945945946, y: 3.17647058823529, size: 1 },\r\n // { x: 124.540540540541, y: 3.25490196078431, size: 1 },\r\n // { x: 166.702702702703, y: 3.17647058823529, size: 1 },\r\n // { x: 171.243243243243, y: 3.92156862745098, size: 1 },\r\n // { x: 175.783783783784, y: 4, size: 1 },\r\n // { x: 252.972972972973, y: 3.09803921568627, size: 1 },\r\n // { x: 341.189189189189, y: 3.17647058823529, size: 1 },\r\n // { x: 341.837837837838, y: 3.09803921568627, size: 1 },\r\n // { x: 1.29496402877698, y: 2.86274509803922, size: 1 },\r\n // { x: 1.94244604316547, y: 2.82352941176471, size: 1 },\r\n // { x: 37.5539568345324, y: 3.25490196078431, size: 1 },\r\n // { x: 58.9208633093525, y: 3.01960784313725, size: 1 },\r\n // { x: 98.4172661870504, y: 3.09803921568627, size: 1 },\r\n // { x: 99.7122302158273, y: 3.09803921568627, size: 1 },\r\n // { x: 101.654676258993, y: 3.17647058823529, size: 1 },\r\n // { x: 170.935251798561, y: 3.05882352941176, size: 1 },\r\n // { x: 217.553956834532, y: 2.54901960784314, size: 1 },\r\n // { x: 218.201438848921, y: 2.50980392156863, size: 1 },\r\n // { x: 218.848920863309, y: 2.58823529411765, size: 1 },\r\n // { x: 238.920863309353, y: 3.09803921568627, size: 1 },\r\n // { x: 240.215827338129, y: 2.82352941176471, size: 1 },\r\n // { x: 281.654676258993, y: 3.05882352941176, size: 1 },\r\n // { x: 282.94964028777, y: 2.7843137254902, size: 1 },\r\n // { x: 284.244604316547, y: 2.86274509803922, size: 1 },\r\n // { x: 303.669064748201, y: 2.74509803921569, size: 1 },\r\n // { x: 29.136690647482, y: 2.98039215686275, size: 1 },\r\n // { x: 51.7985611510791, y: 2.94117647058824, size: 1 },\r\n // { x: 62.158273381295, y: 4.11764705882353, size: 1 },\r\n // { x: 115.89928057554, y: 2.82352941176471, size: 1 },\r\n // { x: 116.546762589928, y: 2.66666666666667, size: 1 },\r\n // { x: 137.26618705036, y: 3.25490196078431, size: 1 },\r\n // { x: 179.352517985612, y: 3.17647058823529, size: 1 },\r\n // { x: 181.294964028777, y: 2.31372549019608, size: 1 },\r\n // { x: 202.661870503597, y: 2.98039215686275, size: 1 },\r\n // { x: 288.776978417266, y: 2.94117647058824, size: 1 },\r\n // { x: 289.424460431655, y: 3.01960784313725, size: 1 },\r\n // { x: 310.143884892086, y: 2.94117647058824, size: 1 },\r\n // { x: 310.791366906475, y: 2.86274509803922, size: 1 },\r\n // { x: 0.648648648648649, y: 3.25490196078431, size: 1 },\r\n // { x: 4.54054054054054, y: 3.29411764705882, size: 1 },\r\n // { x: 7.13513513513514, y: 3.17647058823529, size: 1 },\r\n // { x: 11.027027027027, y: 3.25490196078431, size: 1 },\r\n // { x: 14.9189189189189, y: 3.05882352941176, size: 1 },\r\n // { x: 58.3783783783784, y: 3.17647058823529, size: 1 },\r\n // { x: 79.7837837837838, y: 2.98039215686275, size: 1 },\r\n // { x: 80.4324324324324, y: 2.23529411764706, size: 1 },\r\n // { x: 81.0810810810811, y: 2.94117647058824, size: 1 },\r\n // { x: 81.7297297297297, y: 2.98039215686275, size: 1 },\r\n // { x: 83.6756756756757, y: 2.98039215686275, size: 1 },\r\n // { x: 86.2702702702703, y: 3.01960784313725, size: 1 },\r\n // { x: 87.5675675675676, y: 3.17647058823529, size: 1 },\r\n // { x: 88.2162162162162, y: 3.01960784313725, size: 1 },\r\n // { x: 91.4594594594595, y: 3.25490196078431, size: 1 },\r\n // { x: 93.4054054054054, y: 2.94117647058824, size: 1 },\r\n // { x: 96.6486486486486, y: 3.25490196078431, size: 1 },\r\n // { x: 97.2972972972973, y: 3.17647058823529, size: 1 },\r\n // { x: 101.189189189189, y: 3.17647058823529, size: 1 },\r\n // { x: 104.432432432432, y: 3.92156862745098, size: 1 },\r\n // { x: 121.945945945946, y: 3.29411764705882, size: 1 },\r\n // { x: 122.594594594595, y: 3.13725490196078, size: 1 },\r\n // { x: 123.243243243243, y: 2.98039215686275, size: 1 },\r\n // { x: 123.891891891892, y: 2.82352941176471, size: 1 },\r\n // { x: 144.648648648649, y: 2.86274509803922, size: 1 },\r\n // { x: 145.297297297297, y: 3.01960784313725, size: 1 },\r\n // { x: 151.783783783784, y: 3.2156862745098, size: 1 },\r\n // { x: 154.378378378378, y: 3.13725490196078, size: 1 },\r\n // { x: 156.972972972973, y: 3.09803921568627, size: 1 },\r\n // { x: 159.567567567568, y: 3.25490196078431, size: 1 },\r\n // { x: 164.108108108108, y: 3.01960784313725, size: 1 },\r\n // { x: 165.405405405405, y: 3.13725490196078, size: 1 },\r\n // { x: 166.702702702703, y: 2.74509803921569, size: 1 },\r\n // { x: 167.351351351351, y: 2.98039215686275, size: 1 },\r\n // { x: 172.540540540541, y: 3.13725490196078, size: 1 },\r\n // { x: 178.378378378378, y: 3.13725490196078, size: 1 },\r\n // { x: 183.567567567568, y: 3.01960784313725, size: 1 },\r\n // { x: 184.216216216216, y: 3.09803921568627, size: 1 },\r\n // { x: 184.864864864865, y: 3.13725490196078, size: 1 },\r\n // { x: 185.513513513514, y: 3.09803921568627, size: 1 },\r\n // { x: 187.459459459459, y: 2.98039215686275, size: 1 },\r\n // { x: 188.108108108108, y: 2.7843137254902, size: 1 },\r\n // { x: 188.756756756757, y: 2.90196078431373, size: 1 },\r\n // { x: 201.081081081081, y: 3.17647058823529, size: 1 },\r\n // { x: 231.567567567568, y: 2.82352941176471, size: 1 },\r\n // { x: 260.108108108108, y: 3.41176470588235, size: 1 },\r\n // { x: 274.378378378378, y: 2.70588235294118, size: 1 },\r\n // { x: 275.027027027027, y: 2.98039215686275, size: 1 },\r\n // { x: 295.783783783784, y: 3.25490196078431, size: 1 },\r\n // { x: 296.432432432432, y: 3.2156862745098, size: 1 },\r\n // { x: 297.081081081081, y: 3.17647058823529, size: 1 },\r\n // { x: 297.72972972973, y: 3.2156862745098, size: 1 },\r\n // { x: 314.594594594595, y: 2.98039215686275, size: 1 },\r\n // { x: 317.189189189189, y: 2.90196078431373, size: 1 },\r\n // { x: 317.837837837838, y: 1.13725490196078, size: 1 },\r\n // { x: 318.486486486487, y: 1.41176470588235, size: 1 },\r\n // { x: 319.135135135135, y: 1.37254901960784, size: 1 },\r\n // { x: 319.783783783784, y: 1.41176470588235, size: 1 },\r\n // { x: 320.432432432432, y: 3.33333333333333, size: 1 },\r\n // { x: 322.378378378378, y: 3.17647058823529, size: 1 },\r\n // { x: 323.027027027027, y: 3.09803921568627, size: 1 },\r\n // { x: 326.918918918919, y: 2.86274509803922, size: 1 },\r\n // { x: 327.567567567568, y: 2.82352941176471, size: 1 },\r\n // { x: 333.405405405405, y: 2.70588235294118, size: 1 },\r\n // { x: 337.945945945946, y: 3.13725490196078, size: 1 },\r\n // { x: 339.891891891892, y: 2.66666666666667, size: 1 },\r\n // { x: 350.918918918919, y: 3.37254901960784, size: 1 },\r\n // { x: 354.162162162162, y: 3.01960784313725, size: 1 },\r\n // { x: 358.702702702703, y: 3.25490196078431, size: 1 },\r\n // { x: 0.647482014388489, y: 2.90196078431373, size: 1 },\r\n // { x: 1.29496402877698, y: 2.74509803921569, size: 1 },\r\n // { x: 23.3093525179856, y: 3.01960784313725, size: 1 },\r\n // { x: 44.0287769784173, y: 2.74509803921569, size: 1 },\r\n // { x: 66.0431654676259, y: 2.50980392156863, size: 1 },\r\n // { x: 87.410071942446, y: 1.84313725490196, size: 1 },\r\n // { x: 88.0575539568345, y: 1.96078431372549, size: 1 },\r\n // { x: 88.705035971223, y: 3.09803921568627, size: 1 },\r\n // { x: 90.6474820143885, y: 2.94117647058824, size: 1 },\r\n // { x: 95.8273381294964, y: 2.98039215686275, size: 1 },\r\n // { x: 101.007194244604, y: 3.09803921568627, size: 1 },\r\n // { x: 152.158273381295, y: 2.98039215686275, size: 1 },\r\n // { x: 152.805755395683, y: 2.82352941176471, size: 1 },\r\n // { x: 173.525179856115, y: 2.19607843137255, size: 1 },\r\n // { x: 174.172661870504, y: 2.19607843137255, size: 1 },\r\n // { x: 186.474820143885, y: 4.03921568627451, size: 1 },\r\n // { x: 249.280575539568, y: 3.05882352941176, size: 1 },\r\n // { x: 324.388489208633, y: 3.01960784313725, size: 1 },\r\n // { x: 7.76978417266187, y: 2.58823529411765, size: 1 },\r\n // { x: 8.41726618705036, y: 2.43137254901961, size: 1 },\r\n // { x: 25.8992805755396, y: 4, size: 1 },\r\n // { x: 44.0287769784173, y: 4.03921568627451, size: 1 },\r\n // { x: 51.1510791366906, y: 2.31372549019608, size: 1 },\r\n // { x: 51.7985611510791, y: 2.35294117647059, size: 1 },\r\n // { x: 73.1654676258993, y: 2.82352941176471, size: 1 },\r\n // { x: 115.251798561151, y: 2.82352941176471, size: 1 },\r\n // { x: 116.546762589928, y: 2.58823529411765, size: 1 },\r\n // { x: 158.63309352518, y: 3.05882352941176, size: 1 },\r\n // { x: 180.647482014388, y: 2.86274509803922, size: 1 },\r\n // { x: 184.532374100719, y: 3.05882352941176, size: 1 },\r\n // { x: 191.654676258993, y: 3.05882352941176, size: 1 },\r\n // { x: 202.014388489209, y: 2.70588235294118, size: 1 },\r\n // { x: 202.661870503597, y: 2.74509803921569, size: 1 },\r\n // { x: 287.482014388489, y: 3.29411764705882, size: 1 },\r\n // { x: 310.791366906475, y: 3.01960784313725, size: 1 },\r\n // { x: 327.625899280576, y: 4.07843137254902, size: 1 },\r\n // { x: 35.027027027027, y: 3.17647058823529, size: 1 },\r\n // { x: 36.3243243243243, y: 2.90196078431373, size: 1 },\r\n // { x: 36.972972972973, y: 2.3921568627451, size: 1 },\r\n // { x: 57.0810810810811, y: 3.25490196078431, size: 1 },\r\n // { x: 58.3783783783784, y: 3.01960784313725, size: 1 },\r\n // { x: 111.567567567568, y: 4.03921568627451, size: 1 },\r\n // { x: 121.945945945946, y: 3.2156862745098, size: 1 },\r\n // { x: 123.243243243243, y: 2.90196078431373, size: 1 },\r\n // { x: 126.486486486486, y: 3.37254901960784, size: 1 },\r\n // { x: 144.648648648649, y: 2.98039215686275, size: 1 },\r\n // { x: 166.054054054054, y: 3.05882352941176, size: 1 },\r\n // { x: 186.162162162162, y: 2.98039215686275, size: 1 },\r\n // { x: 188.108108108108, y: 2.86274509803922, size: 1 },\r\n // { x: 212.108108108108, y: 3.25490196078431, size: 1 },\r\n // { x: 214.054054054054, y: 3.2156862745098, size: 1 },\r\n // { x: 231.567567567568, y: 3.2156862745098, size: 1 },\r\n // { x: 251.675675675676, y: 2.90196078431373, size: 1 },\r\n // { x: 252.972972972973, y: 2.15686274509804, size: 1 },\r\n // { x: 274.378378378378, y: 2.54901960784314, size: 1 },\r\n // { x: 275.027027027027, y: 2.94117647058824, size: 1 },\r\n // { x: 295.783783783784, y: 2.47058823529412, size: 1 },\r\n // { x: 296.432432432432, y: 2.50980392156863, size: 1 },\r\n // { x: 317.189189189189, y: 2.94117647058824, size: 1 },\r\n // { x: 317.837837837838, y: 2.74509803921569, size: 1 },\r\n // { x: 334.054054054054, y: 3.88235294117647, size: 1 },\r\n // { x: 339.243243243243, y: 2.74509803921569, size: 1 },\r\n // { x: 339.891891891892, y: 2.82352941176471, size: 1 },\r\n // { x: 0.647482014388489, y: 2.66666666666667, size: 1 },\r\n // { x: 18.1294964028777, y: 2.94117647058824, size: 1 },\r\n // { x: 22.6618705035971, y: 2.66666666666667, size: 1 },\r\n // { x: 33.6690647482014, y: 3.17647058823529, size: 1 },\r\n // { x: 44.0287769784173, y: 2.31372549019608, size: 1 },\r\n // { x: 44.6762589928058, y: 2.47058823529412, size: 1 },\r\n // { x: 66.0431654676259, y: 2.70588235294118, size: 1 },\r\n // { x: 67.3381294964029, y: 2.94117647058824, size: 1 },\r\n // { x: 78.9928057553957, y: 3.09803921568627, size: 1 },\r\n // { x: 119.136690647482, y: 3.05882352941176, size: 1 },\r\n // { x: 130.143884892086, y: 2.7843137254902, size: 1 },\r\n // { x: 130.791366906475, y: 2.47058823529412, size: 1 },\r\n // { x: 134.028776978417, y: 2.86274509803922, size: 1 },\r\n // { x: 139.208633093525, y: 3.01960784313725, size: 1 },\r\n // { x: 142.446043165468, y: 3.09803921568627, size: 1 },\r\n // { x: 143.741007194245, y: 2.94117647058824, size: 1 },\r\n // { x: 144.388489208633, y: 3.09803921568627, size: 1 },\r\n // { x: 148.920863309353, y: 3.05882352941176, size: 1 },\r\n // { x: 158.63309352518, y: 3.17647058823529, size: 1 },\r\n // { x: 166.402877697842, y: 3.01960784313725, size: 1 },\r\n // { x: 173.525179856115, y: 2.11764705882353, size: 1 },\r\n // { x: 174.172661870504, y: 2.3921568627451, size: 1 },\r\n // { x: 194.892086330935, y: 2.90196078431373, size: 1 },\r\n // { x: 195.539568345324, y: 2.70588235294118, size: 1 },\r\n // { x: 216.258992805755, y: 2.98039215686275, size: 1 },\r\n // { x: 216.906474820144, y: 2.35294117647059, size: 1 },\r\n // { x: 217.553956834532, y: 2.82352941176471, size: 1 },\r\n // { x: 237.625899280576, y: 2.98039215686275, size: 1 },\r\n // { x: 238.273381294964, y: 2.66666666666667, size: 1 },\r\n // { x: 238.920863309353, y: 2.70588235294118, size: 1 },\r\n // { x: 259.640287769784, y: 2.70588235294118, size: 1 },\r\n // { x: 260.287769784173, y: 2.47058823529412, size: 1 },\r\n // { x: 282.302158273381, y: 3.13725490196078, size: 1 },\r\n // { x: 303.669064748201, y: 2.70588235294118, size: 1 },\r\n // { x: 344.460431654676, y: 3.01960784313725, size: 1 },\r\n // { x: 346.402877697842, y: 2, size: 1 },\r\n // { x: 7.76978417266187, y: 2.3921568627451, size: 1 },\r\n // { x: 8.41726618705036, y: 2.11764705882353, size: 1 },\r\n // { x: 92.589928057554, y: 3.05882352941176, size: 1 },\r\n // { x: 94.5323741007194, y: 2.94117647058824, size: 1 },\r\n // { x: 115.251798561151, y: 2.86274509803922, size: 1 },\r\n // { x: 115.89928057554, y: 2.19607843137255, size: 1 },\r\n // { x: 116.546762589928, y: 2.62745098039216, size: 1 },\r\n // { x: 121.726618705036, y: 3.01960784313725, size: 1 },\r\n // { x: 124.31654676259, y: 3.01960784313725, size: 1 },\r\n // { x: 178.705035971223, y: 3.09803921568627, size: 1 },\r\n // { x: 180.647482014388, y: 2.98039215686275, size: 1 },\r\n // { x: 245.395683453237, y: 2.15686274509804, size: 1 },\r\n // { x: 246.043165467626, y: 2.7843137254902, size: 1 },\r\n // { x: 247.985611510791, y: 3.01960784313725, size: 1 },\r\n // { x: 248.63309352518, y: 3.2156862745098, size: 1 },\r\n // { x: 251.223021582734, y: 3.09803921568627, size: 1 },\r\n // { x: 266.762589928058, y: 2.3921568627451, size: 1 },\r\n // { x: 267.410071942446, y: 2.43137254901961, size: 1 },\r\n // { x: 288.129496402878, y: 2.27450980392157, size: 1 },\r\n // { x: 288.776978417266, y: 1.84313725490196, size: 1 },\r\n // { x: 293.309352517986, y: 3.25490196078431, size: 1 },\r\n // { x: 331.510791366906, y: 2.47058823529412, size: 1 },\r\n // { x: 332.158273381295, y: 2.74509803921569, size: 1 },\r\n // { x: 351.58273381295, y: 3.01960784313725, size: 1 },\r\n // { x: 352.877697841727, y: 2.90196078431373, size: 1 },\r\n // { x: 353.525179856115, y: 2.70588235294118, size: 1 },\r\n // { x: 354.172661870504, y: 2.98039215686275, size: 1 },\r\n // { x: 5.18918918918919, y: 3.25490196078431, size: 1 },\r\n // { x: 5.83783783783784, y: 3.2156862745098, size: 1 },\r\n // { x: 7.78378378378378, y: 3.2156862745098, size: 1 },\r\n // { x: 34.3783783783784, y: 3.09803921568627, size: 1 },\r\n // { x: 35.027027027027, y: 2.86274509803922, size: 1 },\r\n // { x: 35.6756756756757, y: 2.94117647058824, size: 1 },\r\n // { x: 36.972972972973, y: 2.43137254901961, size: 1 },\r\n // { x: 64.2162162162162, y: 3.2156862745098, size: 1 },\r\n // { x: 77.8378378378378, y: 3.05882352941176, size: 1 },\r\n // { x: 79.1351351351351, y: 2.86274509803922, size: 1 },\r\n // { x: 79.7837837837838, y: 2.54901960784314, size: 1 },\r\n // { x: 94.7027027027027, y: 3.25490196078431, size: 1 },\r\n // { x: 100.540540540541, y: 2.98039215686275, size: 1 },\r\n // { x: 101.189189189189, y: 2.27450980392157, size: 1 },\r\n // { x: 101.837837837838, y: 2.70588235294118, size: 1 },\r\n // { x: 102.486486486486, y: 3.09803921568627, size: 1 },\r\n // { x: 106.378378378378, y: 3.29411764705882, size: 1 },\r\n // { x: 107.675675675676, y: 2.86274509803922, size: 1 },\r\n // { x: 108.972972972973, y: 3.13725490196078, size: 1 },\r\n // { x: 112.216216216216, y: 3.2156862745098, size: 1 },\r\n // { x: 114.162162162162, y: 3.13725490196078, size: 1 },\r\n // { x: 114.810810810811, y: 3.2156862745098, size: 1 },\r\n // { x: 115.459459459459, y: 3.09803921568627, size: 1 },\r\n // { x: 121.945945945946, y: 2.86274509803922, size: 1 },\r\n // { x: 122.594594594595, y: 2.62745098039216, size: 1 },\r\n // { x: 123.243243243243, y: 2.11764705882353, size: 1 },\r\n // { x: 142.702702702703, y: 2.94117647058824, size: 1 },\r\n // { x: 143.351351351351, y: 3.13725490196078, size: 1 },\r\n // { x: 144, y: 2.7843137254902, size: 1 },\r\n // { x: 144.648648648649, y: 1.68627450980392, size: 1 },\r\n // { x: 190.054054054054, y: 3.09803921568627, size: 1 },\r\n // { x: 198.486486486486, y: 3.01960784313725, size: 1 },\r\n // { x: 199.135135135135, y: 3.09803921568627, size: 1 },\r\n // { x: 206.27027027027, y: 3.33333333333333, size: 1 },\r\n // { x: 207.567567567568, y: 3.33333333333333, size: 1 },\r\n // { x: 214.054054054054, y: 3.33333333333333, size: 1 },\r\n // { x: 217.297297297297, y: 3.09803921568627, size: 1 },\r\n // { x: 220.540540540541, y: 3.05882352941176, size: 1 },\r\n // { x: 221.189189189189, y: 3.09803921568627, size: 1 },\r\n // { x: 222.486486486486, y: 3.05882352941176, size: 1 },\r\n // { x: 223.135135135135, y: 2.98039215686275, size: 1 },\r\n // { x: 226.378378378378, y: 2.90196078431373, size: 1 },\r\n // { x: 227.675675675676, y: 3.13725490196078, size: 1 },\r\n // { x: 230.918918918919, y: 2.94117647058824, size: 1 },\r\n // { x: 238.054054054054, y: 3.33333333333333, size: 1 },\r\n // { x: 271.135135135135, y: 4, size: 1 },\r\n // { x: 272.432432432432, y: 3.09803921568627, size: 1 },\r\n // { x: 273.081081081081, y: 3.17647058823529, size: 1 },\r\n // { x: 274.378378378378, y: 2.43137254901961, size: 1 },\r\n // { x: 275.675675675676, y: 2.82352941176471, size: 1 },\r\n // { x: 277.621621621622, y: 3.09803921568627, size: 1 },\r\n // { x: 278.27027027027, y: 3.13725490196078, size: 1 },\r\n // { x: 278.918918918919, y: 3.2156862745098, size: 1 },\r\n // { x: 279.567567567568, y: 2.94117647058824, size: 1 },\r\n // { x: 281.513513513513, y: 2.94117647058824, size: 1 },\r\n // { x: 282.162162162162, y: 2.90196078431373, size: 1 },\r\n // { x: 282.810810810811, y: 3.33333333333333, size: 1 },\r\n // { x: 284.108108108108, y: 3.17647058823529, size: 1 },\r\n // { x: 284.756756756757, y: 2.98039215686275, size: 1 },\r\n // { x: 285.405405405405, y: 3.05882352941176, size: 1 },\r\n // { x: 286.054054054054, y: 2.98039215686275, size: 1 },\r\n // { x: 287.351351351351, y: 3.17647058823529, size: 1 },\r\n // { x: 288.648648648649, y: 2.86274509803922, size: 1 },\r\n // { x: 291.243243243243, y: 3.2156862745098, size: 1 },\r\n // { x: 291.891891891892, y: 3.01960784313725, size: 1 },\r\n // { x: 292.540540540541, y: 3.09803921568627, size: 1 },\r\n // { x: 293.189189189189, y: 2.82352941176471, size: 1 },\r\n // { x: 295.783783783784, y: 2.62745098039216, size: 1 },\r\n // { x: 296.432432432432, y: 2.35294117647059, size: 1 },\r\n // { x: 297.081081081081, y: 2.94117647058824, size: 1 },\r\n // { x: 298.378378378378, y: 2.98039215686275, size: 1 },\r\n // { x: 299.027027027027, y: 3.05882352941176, size: 1 },\r\n // { x: 302.918918918919, y: 2.98039215686275, size: 1 },\r\n // { x: 304.216216216216, y: 2.98039215686275, size: 1 },\r\n // { x: 306.810810810811, y: 2.94117647058824, size: 1 },\r\n // { x: 307.459459459459, y: 3.25490196078431, size: 1 },\r\n // { x: 310.054054054054, y: 3.09803921568627, size: 1 },\r\n // { x: 315.243243243243, y: 3.09803921568627, size: 1 },\r\n // { x: 315.891891891892, y: 3.09803921568627, size: 1 },\r\n // { x: 316.540540540541, y: 3.13725490196078, size: 1 },\r\n // { x: 317.837837837838, y: 2.94117647058824, size: 1 },\r\n // { x: 337.945945945946, y: 2.86274509803922, size: 1 },\r\n // { x: 338.594594594595, y: 2.82352941176471, size: 1 },\r\n // { x: 339.243243243243, y: 2.31372549019608, size: 1 },\r\n // { x: 339.891891891892, y: 2.94117647058824, size: 1 },\r\n // { x: 1.29496402877698, y: 2.70588235294118, size: 1 },\r\n // { x: 21.3669064748201, y: 3.09803921568627, size: 1 },\r\n // { x: 22.0143884892086, y: 2.7843137254902, size: 1 },\r\n // { x: 22.6618705035971, y: 2.62745098039216, size: 1 },\r\n // { x: 44.6762589928058, y: 2.90196078431373, size: 1 },\r\n // { x: 50.5035971223022, y: 3.05882352941176, size: 1 },\r\n // { x: 52.4460431654676, y: 3.01960784313725, size: 1 },\r\n // { x: 56.3309352517986, y: 3.09803921568627, size: 1 },\r\n // { x: 57.6258992805755, y: 3.17647058823529, size: 1 },\r\n // { x: 86.7625899280576, y: 2.58823529411765, size: 1 },\r\n // { x: 87.410071942446, y: 2.58823529411765, size: 1 },\r\n // { x: 130.791366906475, y: 2.90196078431373, size: 1 },\r\n // { x: 195.539568345324, y: 2.90196078431373, size: 1 },\r\n // { x: 281.654676258993, y: 2.74509803921569, size: 1 },\r\n // { x: 283.597122302158, y: 3.09803921568627, size: 1 },\r\n // { x: 303.021582733813, y: 2.43137254901961, size: 1 },\r\n // { x: 346.402877697842, y: 2.94117647058824, size: 1 },\r\n // { x: 7.76978417266187, y: 2.43137254901961, size: 1 },\r\n // { x: 29.7841726618705, y: 2.74509803921569, size: 1 },\r\n // { x: 40.1438848920863, y: 3.13725490196078, size: 1 },\r\n // { x: 42.0863309352518, y: 3.05882352941176, size: 1 },\r\n // { x: 42.7338129496403, y: 3.09803921568627, size: 1 },\r\n // { x: 48.5611510791367, y: 2.98039215686275, size: 1 },\r\n // { x: 49.2086330935252, y: 2.90196078431373, size: 1 },\r\n // { x: 50.5035971223022, y: 2.50980392156863, size: 1 },\r\n // { x: 51.1510791366906, y: 2.19607843137255, size: 1 },\r\n // { x: 72.5179856115108, y: 2.90196078431373, size: 1 },\r\n // { x: 86.1151079136691, y: 2.86274509803922, size: 1 },\r\n // { x: 89.3525179856115, y: 3.01960784313725, size: 1 },\r\n // { x: 115.251798561151, y: 2.15686274509804, size: 1 },\r\n // { x: 126.258992805755, y: 3.13725490196078, size: 1 },\r\n // { x: 179.352517985612, y: 2.98039215686275, size: 1 },\r\n // { x: 180, y: 2.58823529411765, size: 1 },\r\n // { x: 180.647482014388, y: 2.27450980392157, size: 1 },\r\n // { x: 244.748201438849, y: 2.86274509803922, size: 1 },\r\n // { x: 245.395683453237, y: 2.86274509803922, size: 1 },\r\n // { x: 287.482014388489, y: 2.94117647058824, size: 1 },\r\n // { x: 288.129496402878, y: 2.66666666666667, size: 1 },\r\n // { x: 288.776978417266, y: 2.3921568627451, size: 1 },\r\n // { x: 294.604316546763, y: 3.01960784313725, size: 1 },\r\n // { x: 330.863309352518, y: 2.7843137254902, size: 1 },\r\n // { x: 332.158273381295, y: 2.66666666666667, size: 1 },\r\n // { x: 337.338129496403, y: 2.98039215686275, size: 1 },\r\n // { x: 339.280575539568, y: 3.09803921568627, size: 1 },\r\n // { x: 352.877697841727, y: 2.43137254901961, size: 1 },\r\n // { x: 353.525179856115, y: 2.35294117647059, size: 1 },\r\n // { x: 14.2702702702703, y: 2.98039215686275, size: 1 },\r\n // { x: 23.3513513513514, y: 4.07843137254902, size: 1 },\r\n // { x: 35.6756756756757, y: 3.17647058823529, size: 1 },\r\n // { x: 36.3243243243243, y: 2.98039215686275, size: 1 },\r\n // { x: 43.4594594594595, y: 3.05882352941176, size: 1 },\r\n // { x: 44.7567567567568, y: 3.05882352941176, size: 1 },\r\n // { x: 46.7027027027027, y: 3.2156862745098, size: 1 },\r\n // { x: 47.3513513513514, y: 3.09803921568627, size: 1 },\r\n // { x: 48.6486486486486, y: 3.13725490196078, size: 1 },\r\n // { x: 59.027027027027, y: 3.05882352941176, size: 1 },\r\n // { x: 59.6756756756757, y: 2.98039215686275, size: 1 },\r\n // { x: 60.3243243243243, y: 3.05882352941176, size: 1 },\r\n // { x: 60.972972972973, y: 2.94117647058824, size: 1 },\r\n // { x: 65.5135135135135, y: 2.94117647058824, size: 1 },\r\n // { x: 68.7567567567568, y: 3.13725490196078, size: 1 },\r\n // { x: 70.7027027027027, y: 2.94117647058824, size: 1 },\r\n // { x: 72.6486486486486, y: 3.01960784313725, size: 1 },\r\n // { x: 73.2972972972973, y: 2.98039215686275, size: 1 },\r\n // { x: 75.8918918918919, y: 2.98039215686275, size: 1 },\r\n // { x: 76.5405405405405, y: 2.94117647058824, size: 1 },\r\n // { x: 77.1891891891892, y: 3.25490196078431, size: 1 },\r\n // { x: 79.7837837837838, y: 2.74509803921569, size: 1 },\r\n // { x: 90.1621621621622, y: 3.33333333333333, size: 1 },\r\n // { x: 99.2432432432432, y: 3.29411764705882, size: 1 },\r\n // { x: 100.540540540541, y: 3.13725490196078, size: 1 },\r\n // { x: 101.189189189189, y: 2.50980392156863, size: 1 },\r\n // { x: 104.432432432432, y: 3.17647058823529, size: 1 },\r\n // { x: 105.081081081081, y: 3.13725490196078, size: 1 },\r\n // { x: 108.972972972973, y: 3.2156862745098, size: 1 },\r\n // { x: 109.621621621622, y: 3.25490196078431, size: 1 },\r\n // { x: 112.864864864865, y: 3.01960784313725, size: 1 },\r\n // { x: 125.189189189189, y: 2.98039215686275, size: 1 },\r\n // { x: 129.081081081081, y: 3.13725490196078, size: 1 },\r\n // { x: 129.72972972973, y: 3.13725490196078, size: 1 },\r\n // { x: 136.216216216216, y: 3.17647058823529, size: 1 },\r\n // { x: 138.162162162162, y: 3.17647058823529, size: 1 },\r\n // { x: 140.108108108108, y: 3.13725490196078, size: 1 },\r\n // { x: 142.054054054054, y: 3.01960784313725, size: 1 },\r\n // { x: 145.297297297297, y: 3.25490196078431, size: 1 },\r\n // { x: 151.135135135135, y: 3.25490196078431, size: 1 },\r\n // { x: 155.675675675676, y: 3.2156862745098, size: 1 },\r\n // { x: 156.324324324324, y: 3.25490196078431, size: 1 },\r\n // { x: 186.162162162162, y: 3.09803921568627, size: 1 },\r\n // { x: 186.810810810811, y: 2.7843137254902, size: 1 },\r\n // { x: 187.459459459459, y: 2.54901960784314, size: 1 },\r\n // { x: 188.108108108108, y: 2.54901960784314, size: 1 },\r\n // { x: 190.054054054054, y: 3.2156862745098, size: 1 },\r\n // { x: 198.486486486486, y: 3.25490196078431, size: 1 },\r\n // { x: 229.621621621622, y: 2.98039215686275, size: 1 },\r\n // { x: 230.918918918919, y: 2.35294117647059, size: 1 },\r\n // { x: 231.567567567568, y: 3.01960784313725, size: 1 },\r\n // { x: 232.216216216216, y: 2.98039215686275, size: 1 },\r\n // { x: 236.108108108108, y: 3.29411764705882, size: 1 },\r\n // { x: 237.405405405405, y: 3.05882352941176, size: 1 },\r\n // { x: 238.054054054054, y: 3.05882352941176, size: 1 },\r\n // { x: 239.351351351351, y: 3.05882352941176, size: 1 },\r\n // { x: 244.540540540541, y: 3.01960784313725, size: 1 },\r\n // { x: 252.324324324324, y: 2.86274509803922, size: 1 },\r\n // { x: 252.972972972973, y: 2.70588235294118, size: 1 },\r\n // { x: 273.72972972973, y: 2.82352941176471, size: 1 },\r\n // { x: 294.486486486487, y: 2.90196078431373, size: 1 },\r\n // { x: 317.189189189189, y: 2.74509803921569, size: 1 },\r\n // { x: 317.837837837838, y: 2.50980392156863, size: 1 },\r\n // { x: 319.135135135135, y: 2.98039215686275, size: 1 },\r\n // { x: 319.783783783784, y: 3.05882352941176, size: 1 },\r\n // { x: 324.324324324324, y: 3.01960784313725, size: 1 },\r\n // { x: 325.621621621622, y: 2.94117647058824, size: 1 },\r\n // { x: 327.567567567568, y: 3.13725490196078, size: 1 },\r\n // { x: 328.864864864865, y: 3.13725490196078, size: 1 },\r\n // { x: 329.513513513513, y: 3.09803921568627, size: 1 },\r\n // { x: 330.162162162162, y: 3.05882352941176, size: 1 },\r\n // { x: 331.459459459459, y: 3.17647058823529, size: 1 },\r\n // { x: 334.702702702703, y: 3.01960784313725, size: 1 },\r\n // { x: 336, y: 3.05882352941176, size: 1 },\r\n // { x: 359.351351351351, y: 3.33333333333333, size: 1 },\r\n // { x: 1.29496402877698, y: 3.17647058823529, size: 1 },\r\n // { x: 25.8992805755396, y: 3.13725490196078, size: 1 },\r\n // { x: 39.4964028776978, y: 2.98039215686275, size: 1 },\r\n // { x: 43.3812949640288, y: 2.50980392156863, size: 1 },\r\n // { x: 44.0287769784173, y: 2.3921568627451, size: 1 },\r\n // { x: 86.7625899280576, y: 2.23529411764706, size: 1 },\r\n // { x: 87.410071942446, y: 2.27450980392157, size: 1 },\r\n // { x: 108.129496402878, y: 3.05882352941176, size: 1 },\r\n // { x: 129.496402877698, y: 2.7843137254902, size: 1 },\r\n // { x: 130.143884892086, y: 2.31372549019608, size: 1 },\r\n // { x: 151.510791366906, y: 2.31372549019608, size: 1 },\r\n // { x: 152.158273381295, y: 2.3921568627451, size: 1 },\r\n // { x: 172.230215827338, y: 2.98039215686275, size: 1 },\r\n // { x: 172.877697841727, y: 1.68627450980392, size: 1 },\r\n // { x: 173.525179856115, y: 1.29411764705882, size: 1 },\r\n // { x: 174.172661870504, y: 1.01960784313725, size: 1 },\r\n // { x: 174.820143884892, y: 1.76470588235294, size: 1 },\r\n // { x: 178.057553956835, y: 2.62745098039216, size: 1 },\r\n // { x: 182.589928057554, y: 2.74509803921569, size: 1 },\r\n // { x: 188.41726618705, y: 2.74509803921569, size: 1 },\r\n // { x: 190.359712230216, y: 3.13725490196078, size: 1 },\r\n // { x: 191.007194244604, y: 3.17647058823529, size: 1 },\r\n // { x: 194.892086330935, y: 2.11764705882353, size: 1 },\r\n // { x: 213.021582733813, y: 3.13725490196078, size: 1 },\r\n // { x: 213.669064748201, y: 3.01960784313725, size: 1 },\r\n // { x: 248.63309352518, y: 3.09803921568627, size: 1 },\r\n // { x: 258.992805755396, y: 2.94117647058824, size: 1 },\r\n // { x: 259.640287769784, y: 2.47058823529412, size: 1 },\r\n // { x: 279.712230215827, y: 2.82352941176471, size: 1 },\r\n // { x: 281.007194244604, y: 2.54901960784314, size: 1 },\r\n // { x: 281.654676258993, y: 2.50980392156863, size: 1 },\r\n // { x: 313.381294964029, y: 2.86274509803922, size: 1 },\r\n // { x: 319.856115107914, y: 3.09803921568627, size: 1 },\r\n // { x: 320.503597122302, y: 3.05882352941176, size: 1 },\r\n // { x: 5.83783783783784, y: 3.17647058823529, size: 1 },\r\n // { x: 11.027027027027, y: 3.13725490196078, size: 1 },\r\n // { x: 13.6216216216216, y: 3.17647058823529, size: 1 },\r\n // { x: 20.1081081081081, y: 3.33333333333333, size: 1 },\r\n // { x: 26.5945945945946, y: 3.17647058823529, size: 1 },\r\n // { x: 28.5405405405405, y: 3.2156862745098, size: 1 },\r\n // { x: 32.4324324324324, y: 3.2156862745098, size: 1 },\r\n // { x: 48, y: 3.13725490196078, size: 1 },\r\n // { x: 48.6486486486486, y: 3.01960784313725, size: 1 },\r\n // { x: 50.5945945945946, y: 2.19607843137255, size: 1 },\r\n // { x: 51.2432432432432, y: 2.31372549019608, size: 1 },\r\n // { x: 73.945945945946, y: 3.13725490196078, size: 1 },\r\n // { x: 76.5405405405405, y: 3.09803921568627, size: 1 },\r\n // { x: 86.2702702702703, y: 3.33333333333333, size: 1 },\r\n // { x: 87.5675675675676, y: 3.29411764705882, size: 1 },\r\n // { x: 88.8648648648649, y: 3.01960784313725, size: 1 },\r\n // { x: 92.1081081081081, y: 3.17647058823529, size: 1 },\r\n // { x: 107.675675675676, y: 3.2156862745098, size: 1 },\r\n // { x: 110.918918918919, y: 3.2156862745098, size: 1 },\r\n // { x: 111.567567567568, y: 3.09803921568627, size: 1 },\r\n // { x: 140.108108108108, y: 3.05882352941176, size: 1 },\r\n // { x: 140.756756756757, y: 3.13725490196078, size: 1 },\r\n // { x: 149.189189189189, y: 3.13725490196078, size: 1 },\r\n // { x: 156.324324324324, y: 3.17647058823529, size: 1 },\r\n // { x: 162.162162162162, y: 2.94117647058824, size: 1 },\r\n // { x: 162.810810810811, y: 3.29411764705882, size: 1 },\r\n // { x: 164.756756756757, y: 3.25490196078431, size: 1 },\r\n // { x: 175.783783783784, y: 3.2156862745098, size: 1 },\r\n // { x: 180.972972972973, y: 3.33333333333333, size: 1 },\r\n // { x: 193.297297297297, y: 3.2156862745098, size: 1 },\r\n // { x: 202.378378378378, y: 3.05882352941176, size: 1 },\r\n // { x: 203.027027027027, y: 3.17647058823529, size: 1 },\r\n // { x: 204.324324324324, y: 3.09803921568627, size: 1 },\r\n // { x: 208.864864864865, y: 3.17647058823529, size: 1 },\r\n // { x: 216.648648648649, y: 3.17647058823529, size: 1 },\r\n // { x: 219.891891891892, y: 3.2156862745098, size: 1 },\r\n // { x: 222.486486486486, y: 3.09803921568627, size: 1 },\r\n // { x: 224.432432432432, y: 2.74509803921569, size: 1 },\r\n // { x: 236.756756756757, y: 3.09803921568627, size: 1 },\r\n // { x: 243.243243243243, y: 3.2156862745098, size: 1 },\r\n // { x: 245.837837837838, y: 3.13725490196078, size: 1 },\r\n // { x: 247.135135135135, y: 3.2156862745098, size: 1 },\r\n // { x: 251.027027027027, y: 3.17647058823529, size: 1 },\r\n // { x: 259.459459459459, y: 3.33333333333333, size: 1 },\r\n // { x: 262.702702702703, y: 3.29411764705882, size: 1 },\r\n // { x: 266.594594594595, y: 2.47058823529412, size: 1 },\r\n // { x: 267.243243243243, y: 2.90196078431373, size: 1 },\r\n // { x: 288.648648648649, y: 2.11764705882353, size: 1 },\r\n // { x: 289.297297297297, y: 2.94117647058824, size: 1 },\r\n // { x: 301.621621621622, y: 3.17647058823529, size: 1 },\r\n // { x: 303.567567567568, y: 3.25490196078431, size: 1 },\r\n // { x: 306.162162162162, y: 3.09803921568627, size: 1 },\r\n // { x: 308.108108108108, y: 3.25490196078431, size: 1 },\r\n // { x: 309.405405405405, y: 3.2156862745098, size: 1 },\r\n // { x: 310.054054054054, y: 2.58823529411765, size: 1 },\r\n // { x: 310.702702702703, y: 2.70588235294118, size: 1 },\r\n // { x: 321.72972972973, y: 3.25490196078431, size: 1 },\r\n // { x: 326.918918918919, y: 3.25490196078431, size: 1 },\r\n // { x: 330.162162162162, y: 2.94117647058824, size: 1 },\r\n // { x: 331.459459459459, y: 2.54901960784314, size: 1 },\r\n // { x: 332.108108108108, y: 1.96078431372549, size: 1 },\r\n // { x: 338.594594594595, y: 3.05882352941176, size: 1 },\r\n // { x: 343.135135135135, y: 3.17647058823529, size: 1 },\r\n // { x: 344.432432432432, y: 3.13725490196078, size: 1 },\r\n // { x: 345.081081081081, y: 3.13725490196078, size: 1 },\r\n // { x: 345.72972972973, y: 3.17647058823529, size: 1 },\r\n // { x: 348.972972972973, y: 3.09803921568627, size: 1 },\r\n // { x: 350.27027027027, y: 3.13725490196078, size: 1 },\r\n // { x: 358.054054054054, y: 3.25490196078431, size: 1 },\r\n // { x: 36.9064748201439, y: 2.58823529411765, size: 1 },\r\n // { x: 70.5755395683453, y: 3.13725490196078, size: 1 },\r\n // { x: 71.2230215827338, y: 3.05882352941176, size: 1 },\r\n // { x: 72.5179856115108, y: 3.05882352941176, size: 1 },\r\n // { x: 180.647482014388, y: 4, size: 1 },\r\n // { x: 209.136690647482, y: 2.82352941176471, size: 1 },\r\n // { x: 209.784172661871, y: 2.98039215686275, size: 1 },\r\n // { x: 273.884892086331, y: 2.15686274509804, size: 1 },\r\n // { x: 274.532374100719, y: 2.35294117647059, size: 1 },\r\n // { x: 295.251798561151, y: 2.98039215686275, size: 1 },\r\n // { x: 317.26618705036, y: 2.54901960784314, size: 1 },\r\n // { x: 339.280575539568, y: 3.05882352941176, size: 1 },\r\n // { x: 22.0143884892086, y: 2.74509803921569, size: 1 },\r\n // { x: 86.7625899280576, y: 2.98039215686275, size: 1 },\r\n // { x: 107.482014388489, y: 2.74509803921569, size: 1 },\r\n // { x: 108.129496402878, y: 2, size: 1 },\r\n // { x: 108.776978417266, y: 1.92156862745098, size: 1 },\r\n // { x: 129.496402877698, y: 2.66666666666667, size: 1 },\r\n // { x: 130.143884892086, y: 2.90196078431373, size: 1 },\r\n // { x: 151.510791366906, y: 2.43137254901961, size: 1 },\r\n // { x: 152.158273381295, y: 2.82352941176471, size: 1 },\r\n // { x: 172.877697841727, y: 2.66666666666667, size: 1 },\r\n // { x: 173.525179856115, y: 2.62745098039216, size: 1 },\r\n // { x: 238.273381294964, y: 2.94117647058824, size: 1 },\r\n // { x: 239.568345323741, y: 3.17647058823529, size: 1 },\r\n // { x: 252.517985611511, y: 3.01960784313725, size: 1 },\r\n // { x: 255.755395683453, y: 2.94117647058824, size: 1 },\r\n // { x: 258.992805755396, y: 2.50980392156863, size: 1 },\r\n // { x: 259.640287769784, y: 2.11764705882353, size: 1 },\r\n // { x: 272.589928057554, y: 2.94117647058824, size: 1 },\r\n // { x: 273.884892086331, y: 2.98039215686275, size: 1 },\r\n // { x: 275.827338129496, y: 3.13725490196078, size: 1 },\r\n // { x: 277.122302158273, y: 3.13725490196078, size: 1 },\r\n // { x: 281.007194244604, y: 2.98039215686275, size: 1 },\r\n // { x: 346.402877697842, y: 2.98039215686275, size: 1 },\r\n // { x: 7.12230215827338, y: 1.49019607843137, size: 1 },\r\n // { x: 7.76978417266187, y: 1.45098039215686, size: 1 },\r\n // { x: 28.4892086330935, y: 2.47058823529412, size: 1 },\r\n // { x: 29.136690647482, y: 2.74509803921569, size: 1 },\r\n // { x: 71.8705035971223, y: 2.82352941176471, size: 1 },\r\n // { x: 74.4604316546763, y: 3.09803921568627, size: 1 },\r\n // { x: 77.6978417266187, y: 3.01960784313725, size: 1 },\r\n // { x: 79.6402877697842, y: 3.25490196078431, size: 1 },\r\n // { x: 91.9424460431655, y: 3.17647058823529, size: 1 },\r\n // { x: 93.2374100719424, y: 2.70588235294118, size: 1 },\r\n // { x: 93.8848920863309, y: 2.90196078431373, size: 1 },\r\n // { x: 115.251798561151, y: 2.3921568627451, size: 1 },\r\n // { x: 115.89928057554, y: 3.09803921568627, size: 1 },\r\n // { x: 137.26618705036, y: 2.74509803921569, size: 1 },\r\n // { x: 150.215827338129, y: 3.25490196078431, size: 1 },\r\n // { x: 153.453237410072, y: 3.01960784313725, size: 1 },\r\n // { x: 157.985611510791, y: 2.86274509803922, size: 1 },\r\n // { x: 158.63309352518, y: 2.90196078431373, size: 1 },\r\n // { x: 159.280575539568, y: 2.82352941176471, size: 1 },\r\n // { x: 161.223021582734, y: 3.01960784313725, size: 1 },\r\n // { x: 161.870503597122, y: 3.09803921568627, size: 1 },\r\n // { x: 165.755395683453, y: 2.98039215686275, size: 1 },\r\n // { x: 168.992805755396, y: 3.05882352941176, size: 1 },\r\n // { x: 172.877697841727, y: 3.09803921568627, size: 1 },\r\n // { x: 176.115107913669, y: 2.98039215686275, size: 1 },\r\n // { x: 177.410071942446, y: 2.90196078431373, size: 1 },\r\n // { x: 178.705035971223, y: 2.98039215686275, size: 1 },\r\n // { x: 222.73381294964, y: 2.98039215686275, size: 1 },\r\n // { x: 223.381294964029, y: 2.7843137254902, size: 1 },\r\n // { x: 244.748201438849, y: 2.70588235294118, size: 1 },\r\n // { x: 288.129496402878, y: 2.58823529411765, size: 1 },\r\n // { x: 330.863309352518, y: 2.98039215686275, size: 1 },\r\n // { x: 352.230215827338, y: 2.94117647058824, size: 1 },\r\n // { x: 36.3243243243243, y: 3.05882352941176, size: 1 },\r\n // { x: 39.5675675675676, y: 3.13725490196078, size: 1 },\r\n // { x: 41.5135135135135, y: 3.17647058823529, size: 1 },\r\n // { x: 42.8108108108108, y: 3.17647058823529, size: 1 },\r\n // { x: 54.4864864864865, y: 3.13725490196078, size: 1 },\r\n // { x: 55.1351351351351, y: 2.94117647058824, size: 1 },\r\n // { x: 55.7837837837838, y: 3.17647058823529, size: 1 },\r\n // { x: 57.0810810810811, y: 2.11764705882353, size: 1 },\r\n // { x: 57.7297297297297, y: 1.88235294117647, size: 1 },\r\n // { x: 63.5675675675676, y: 3.05882352941176, size: 1 },\r\n // { x: 64.2162162162162, y: 3.05882352941176, size: 1 },\r\n // { x: 64.8648648648649, y: 2.98039215686275, size: 1 },\r\n // { x: 68.1081081081081, y: 3.05882352941176, size: 1 },\r\n // { x: 70.054054054054, y: 3.2156862745098, size: 1 },\r\n // { x: 70.7027027027027, y: 3.05882352941176, size: 1 },\r\n // { x: 72, y: 2.90196078431373, size: 1 },\r\n // { x: 73.945945945946, y: 3.09803921568627, size: 1 },\r\n // { x: 74.5945945945946, y: 3.01960784313725, size: 1 },\r\n // { x: 75.2432432432432, y: 3.17647058823529, size: 1 },\r\n // { x: 76.5405405405405, y: 2.98039215686275, size: 1 },\r\n // { x: 77.1891891891892, y: 2.90196078431373, size: 1 },\r\n // { x: 77.8378378378378, y: 2.98039215686275, size: 1 },\r\n // { x: 79.1351351351351, y: 1.84313725490196, size: 1 },\r\n // { x: 79.7837837837838, y: 2.7843137254902, size: 1 },\r\n // { x: 84.972972972973, y: 3.33333333333333, size: 1 },\r\n // { x: 86.9189189189189, y: 3.49019607843137, size: 1 },\r\n // { x: 100.540540540541, y: 2.86274509803922, size: 1 },\r\n // { x: 101.189189189189, y: 2.62745098039216, size: 1 },\r\n // { x: 117.405405405405, y: 3.33333333333333, size: 1 },\r\n // { x: 120.648648648649, y: 3.09803921568627, size: 1 },\r\n // { x: 121.945945945946, y: 3.05882352941176, size: 1 },\r\n // { x: 122.594594594595, y: 2.54901960784314, size: 1 },\r\n // { x: 165.405405405405, y: 2.90196078431373, size: 1 },\r\n // { x: 166.054054054054, y: 2.98039215686275, size: 1 },\r\n // { x: 186.810810810811, y: 2.58823529411765, size: 1 },\r\n // { x: 187.459459459459, y: 2.70588235294118, size: 1 },\r\n // { x: 208.864864864865, y: 3.05882352941176, size: 1 },\r\n // { x: 210.162162162162, y: 3.05882352941176, size: 1 },\r\n // { x: 222.486486486486, y: 3.25490196078431, size: 1 },\r\n // { x: 223.783783783784, y: 3.2156862745098, size: 1 },\r\n // { x: 225.72972972973, y: 3.09803921568627, size: 1 },\r\n // { x: 227.027027027027, y: 3.17647058823529, size: 1 },\r\n // { x: 228.972972972973, y: 3.2156862745098, size: 1 },\r\n // { x: 230.27027027027, y: 2.27450980392157, size: 1 },\r\n // { x: 230.918918918919, y: 2.3921568627451, size: 1 },\r\n // { x: 231.567567567568, y: 3.05882352941176, size: 1 },\r\n // { x: 233.513513513514, y: 2.94117647058824, size: 1 },\r\n // { x: 234.162162162162, y: 3.13725490196078, size: 1 },\r\n // { x: 236.108108108108, y: 2.98039215686275, size: 1 },\r\n // { x: 236.756756756757, y: 3.17647058823529, size: 1 },\r\n // { x: 238.702702702703, y: 2.98039215686275, size: 1 },\r\n // { x: 243.891891891892, y: 3.09803921568627, size: 1 },\r\n // { x: 247.135135135135, y: 3.09803921568627, size: 1 },\r\n // { x: 249.72972972973, y: 3.05882352941176, size: 1 },\r\n // { x: 250.378378378378, y: 3.09803921568627, size: 1 },\r\n // { x: 252.324324324324, y: 1.68627450980392, size: 1 },\r\n // { x: 273.081081081081, y: 2.74509803921569, size: 1 },\r\n // { x: 273.72972972973, y: 2.58823529411765, size: 1 },\r\n // { x: 274.378378378378, y: 2.7843137254902, size: 1 },\r\n // { x: 280.216216216216, y: 3.13725490196078, size: 1 },\r\n // { x: 282.162162162162, y: 3.09803921568627, size: 1 },\r\n // { x: 284.108108108108, y: 3.05882352941176, size: 1 },\r\n // { x: 286.702702702703, y: 2.94117647058824, size: 1 },\r\n // { x: 288, y: 3.25490196078431, size: 1 },\r\n // { x: 293.189189189189, y: 3.09803921568627, size: 1 },\r\n // { x: 297.081081081081, y: 3.01960784313725, size: 1 },\r\n // { x: 300.972972972973, y: 3.13725490196078, size: 1 },\r\n // { x: 302.27027027027, y: 3.05882352941176, size: 1 },\r\n // { x: 304.216216216216, y: 3.33333333333333, size: 1 },\r\n // { x: 306.162162162162, y: 3.05882352941176, size: 1 },\r\n // { x: 306.810810810811, y: 3.2156862745098, size: 1 },\r\n // { x: 308.756756756757, y: 3.13725490196078, size: 1 },\r\n // { x: 309.405405405405, y: 3.13725490196078, size: 1 },\r\n // { x: 310.054054054054, y: 3.2156862745098, size: 1 },\r\n // { x: 324.324324324324, y: 3.41176470588235, size: 1 },\r\n // { x: 336.648648648649, y: 3.09803921568627, size: 1 },\r\n // { x: 337.297297297297, y: 3.01960784313725, size: 1 },\r\n // { x: 337.945945945946, y: 2.94117647058824, size: 1 },\r\n // { x: 338.594594594595, y: 2.35294117647059, size: 1 },\r\n // { x: 22.6618705035971, y: 3.13725490196078, size: 1 },\r\n // { x: 86.1151079136691, y: 2.3921568627451, size: 1 },\r\n // { x: 86.7625899280576, y: 2.35294117647059, size: 1 },\r\n // { x: 129.496402877698, y: 2.70588235294118, size: 1 },\r\n // { x: 130.143884892086, y: 2.50980392156863, size: 1 },\r\n // { x: 151.510791366906, y: 3.01960784313725, size: 1 },\r\n // { x: 172.877697841727, y: 2.43137254901961, size: 1 },\r\n // { x: 194.892086330935, y: 2.58823529411765, size: 1 },\r\n // { x: 302.374100719424, y: 3.13725490196078, size: 1 },\r\n // { x: 28.4892086330935, y: 2.90196078431373, size: 1 },\r\n // { x: 179.352517985612, y: 2.7843137254902, size: 1 },\r\n // { x: 180, y: 2.50980392156863, size: 1 },\r\n // { x: 328.920863309353, y: 3.01960784313725, size: 1 },\r\n // { x: 330.863309352518, y: 2.35294117647059, size: 1 },\r\n // { x: 332.158273381295, y: 3.01960784313725, size: 1 },\r\n // { x: 25.2972972972973, y: 3.09803921568627, size: 1 },\r\n // { x: 25.9459459459459, y: 3.09803921568627, size: 1 },\r\n // { x: 27.8918918918919, y: 3.17647058823529, size: 1 },\r\n // { x: 33.0810810810811, y: 3.17647058823529, size: 1 },\r\n // { x: 35.6756756756757, y: 2.58823529411765, size: 1 },\r\n // { x: 36.972972972973, y: 3.92156862745098, size: 1 },\r\n // { x: 82.3783783783784, y: 3.05882352941176, size: 1 },\r\n // { x: 84.972972972973, y: 3.25490196078431, size: 1 },\r\n // { x: 100.540540540541, y: 2.90196078431373, size: 1 },\r\n // { x: 101.189189189189, y: 3.01960784313725, size: 1 },\r\n // { x: 186.810810810811, y: 3.09803921568627, size: 1 },\r\n // { x: 195.243243243243, y: 3.92156862745098, size: 1 },\r\n // { x: 230.27027027027, y: 2.66666666666667, size: 1 },\r\n // { x: 251.675675675676, y: 2.54901960784314, size: 1 },\r\n // { x: 252.324324324324, y: 2.58823529411765, size: 1 },\r\n // { x: 259.459459459459, y: 3.2156862745098, size: 1 },\r\n // { x: 262.054054054054, y: 3.33333333333333, size: 1 },\r\n // { x: 265.945945945946, y: 3.09803921568627, size: 1 },\r\n // { x: 293.189189189189, y: 3.33333333333333, size: 1 },\r\n // { x: 307.459459459459, y: 3.2156862745098, size: 1 },\r\n // { x: 326.918918918919, y: 3.96078431372549, size: 1 },\r\n // { x: 330.810810810811, y: 3.96078431372549, size: 1 },\r\n // { x: 337.945945945946, y: 3.01960784313725, size: 1 },\r\n // { x: 338.594594594595, y: 2.19607843137255, size: 1 },\r\n // { x: 347.675675675676, y: 4.07843137254902, size: 1 },\r\n // { x: 359.351351351351, y: 3.09803921568627, size: 1 },\r\n // { x: 0, y: 2.54901960784314, size: 1 },\r\n // { x: 86.1151079136691, y: 2.31372549019608, size: 1 },\r\n // { x: 86.7625899280576, y: 2.47058823529412, size: 1 },\r\n // { x: 150.863309352518, y: 2.62745098039216, size: 1 },\r\n // { x: 194.244604316547, y: 2.70588235294118, size: 1 },\r\n // { x: 209.784172661871, y: 4, size: 1 },\r\n // { x: 258.992805755396, y: 2.7843137254902, size: 1 },\r\n // { x: 301.726618705036, y: 2.70588235294118, size: 1 },\r\n // { x: 302.374100719424, y: 2.35294117647059, size: 1 },\r\n // { x: 323.741007194245, y: 2.62745098039216, size: 1 },\r\n // { x: 27.1942446043165, y: 2.98039215686275, size: 1 },\r\n // { x: 28.4892086330935, y: 1.84313725490196, size: 1 },\r\n // { x: 29.136690647482, y: 1.80392156862745, size: 1 },\r\n // { x: 29.7841726618705, y: 1.49019607843137, size: 1 },\r\n // { x: 30.431654676259, y: 1.45098039215686, size: 1 },\r\n // { x: 33.0215827338129, y: 2.7843137254902, size: 1 },\r\n // { x: 38.2014388489209, y: 2.98039215686275, size: 1 },\r\n // { x: 49.8561151079137, y: 1.68627450980392, size: 1 },\r\n // { x: 50.5035971223022, y: 1.45098039215686, size: 1 },\r\n // { x: 71.8705035971223, y: 2.47058823529412, size: 1 },\r\n // { x: 93.2374100719424, y: 2.03921568627451, size: 1 },\r\n // { x: 100.359712230216, y: 3.05882352941176, size: 1 },\r\n // { x: 103.597122302158, y: 2.86274509803922, size: 1 },\r\n // { x: 104.892086330935, y: 2.94117647058824, size: 1 },\r\n // { x: 108.129496402878, y: 3.09803921568627, size: 1 },\r\n // { x: 115.251798561151, y: 2.98039215686275, size: 1 },\r\n // { x: 117.194244604317, y: 2.94117647058824, size: 1 },\r\n // { x: 118.489208633094, y: 3.01960784313725, size: 1 },\r\n // { x: 120.431654676259, y: 2.98039215686275, size: 1 },\r\n // { x: 122.374100719424, y: 2.82352941176471, size: 1 },\r\n // { x: 128.201438848921, y: 3.09803921568627, size: 1 },\r\n // { x: 146.978417266187, y: 2.82352941176471, size: 1 },\r\n // { x: 148.273381294964, y: 3.01960784313725, size: 1 },\r\n // { x: 150.215827338129, y: 2.94117647058824, size: 1 },\r\n // { x: 154.10071942446, y: 2.98039215686275, size: 1 },\r\n // { x: 157.985611510791, y: 3.09803921568627, size: 1 },\r\n // { x: 165.107913669065, y: 3.01960784313725, size: 1 },\r\n // { x: 165.755395683453, y: 3.01960784313725, size: 1 },\r\n // { x: 175.467625899281, y: 3.01960784313725, size: 1 },\r\n // { x: 176.115107913669, y: 3.09803921568627, size: 1 },\r\n // { x: 200.719424460432, y: 2.98039215686275, size: 1 },\r\n // { x: 208.489208633094, y: 3.05882352941176, size: 1 },\r\n // { x: 209.136690647482, y: 2.94117647058824, size: 1 },\r\n // { x: 211.079136690647, y: 3.2156862745098, size: 1 },\r\n // { x: 218.848920863309, y: 2.98039215686275, size: 1 },\r\n // { x: 220.143884892086, y: 2.90196078431373, size: 1 },\r\n // { x: 243.453237410072, y: 2.98039215686275, size: 1 },\r\n // { x: 244.748201438849, y: 2.15686274509804, size: 1 },\r\n // { x: 245.395683453237, y: 2.94117647058824, size: 1 },\r\n // { x: 255.107913669065, y: 2.98039215686275, size: 1 },\r\n // { x: 265.467625899281, y: 2.66666666666667, size: 1 },\r\n // { x: 290.719424460432, y: 2.94117647058824, size: 1 },\r\n // { x: 293.956834532374, y: 3.05882352941176, size: 1 },\r\n // { x: 294.604316546763, y: 2.98039215686275, size: 1 },\r\n // { x: 299.784172661871, y: 2.94117647058824, size: 1 },\r\n // { x: 304.31654676259, y: 3.09803921568627, size: 1 },\r\n // { x: 14.2702702702703, y: 2.70588235294118, size: 1 },\r\n // { x: 55.1351351351351, y: 2.90196078431373, size: 1 },\r\n // { x: 55.7837837837838, y: 3.2156862745098, size: 1 },\r\n // { x: 57.0810810810811, y: 3.13725490196078, size: 1 },\r\n // { x: 98.5945945945946, y: 3.17647058823529, size: 1 },\r\n // { x: 99.8918918918919, y: 3.13725490196078, size: 1 },\r\n // { x: 104.432432432432, y: 4, size: 1 },\r\n // { x: 121.297297297297, y: 3.05882352941176, size: 1 },\r\n // { x: 121.945945945946, y: 3.01960784313725, size: 1 },\r\n // { x: 122.594594594595, y: 2.70588235294118, size: 1 },\r\n // { x: 123.243243243243, y: 3.2156862745098, size: 1 },\r\n // { x: 125.189189189189, y: 3.13725490196078, size: 1 },\r\n // { x: 128.432432432432, y: 3.17647058823529, size: 1 },\r\n // { x: 130.378378378378, y: 3.2156862745098, size: 1 },\r\n // { x: 133.621621621622, y: 3.13725490196078, size: 1 },\r\n // { x: 138.810810810811, y: 3.09803921568627, size: 1 },\r\n // { x: 140.756756756757, y: 3.17647058823529, size: 1 },\r\n // { x: 143.351351351351, y: 2.62745098039216, size: 1 },\r\n // { x: 144, y: 2.47058823529412, size: 1 },\r\n // { x: 187.459459459459, y: 3.05882352941176, size: 1 },\r\n // { x: 214.702702702703, y: 3.25490196078431, size: 1 },\r\n // { x: 226.378378378378, y: 3.2156862745098, size: 1 },\r\n // { x: 251.027027027027, y: 3.2156862745098, size: 1 },\r\n // { x: 263.351351351351, y: 3.33333333333333, size: 1 },\r\n // { x: 264.648648648649, y: 3.29411764705882, size: 1 },\r\n // { x: 97.7697841726619, y: 3.05882352941176, size: 1 },\r\n // { x: 103.597122302158, y: 3.09803921568627, size: 1 },\r\n // { x: 118.489208633094, y: 3.96078431372549, size: 1 },\r\n // { x: 145.68345323741, y: 3.2156862745098, size: 1 },\r\n // { x: 239.568345323741, y: 3.05882352941176, size: 1 },\r\n // { x: 242.805755395683, y: 2.94117647058824, size: 1 },\r\n // { x: 255.755395683453, y: 3.09803921568627, size: 1 },\r\n // { x: 279.064748201439, y: 3.09803921568627, size: 1 },\r\n // { x: 315.971223021583, y: 3.05882352941176, size: 1 },\r\n // { x: 51.1510791366906, y: 2.47058823529412, size: 1 },\r\n // { x: 128.201438848921, y: 4.03921568627451, size: 1 },\r\n // { x: 156.690647482014, y: 3.05882352941176, size: 1 },\r\n // { x: 157.338129496403, y: 2.07843137254902, size: 1 },\r\n // { x: 157.985611510791, y: 1.88235294117647, size: 1 },\r\n // { x: 158.63309352518, y: 1.84313725490196, size: 1 },\r\n // { x: 159.280575539568, y: 1.80392156862745, size: 1 },\r\n // { x: 200.719424460432, y: 2.90196078431373, size: 1 },\r\n // { x: 204.604316546763, y: 3.09803921568627, size: 1 },\r\n // { x: 244.10071942446, y: 2.74509803921569, size: 1 },\r\n // { x: 329.568345323741, y: 3.01960784313725, size: 1 },\r\n // { x: 8.43243243243243, y: 3.37254901960784, size: 1 },\r\n // { x: 13.6216216216216, y: 2.7843137254902, size: 1 },\r\n // { x: 57.0810810810811, y: 3.2156862745098, size: 1 },\r\n // { x: 77.1891891891892, y: 3.09803921568627, size: 1 },\r\n // { x: 77.8378378378378, y: 3.13725490196078, size: 1 },\r\n // { x: 78.4864864864865, y: 2.62745098039216, size: 1 },\r\n // { x: 79.1351351351351, y: 3.01960784313725, size: 1 },\r\n // { x: 99.8918918918919, y: 2.58823529411765, size: 1 },\r\n // { x: 100.540540540541, y: 2.54901960784314, size: 1 },\r\n // { x: 105.72972972973, y: 3.2156862745098, size: 1 },\r\n // { x: 108.324324324324, y: 3.17647058823529, size: 1 },\r\n // { x: 121.297297297297, y: 2.98039215686275, size: 1 },\r\n // { x: 121.945945945946, y: 3.09803921568627, size: 1 },\r\n // { x: 143.351351351351, y: 2.74509803921569, size: 1 },\r\n // { x: 164.756756756757, y: 2.54901960784314, size: 1 },\r\n // { x: 165.405405405405, y: 2.23529411764706, size: 1 },\r\n // { x: 185.513513513514, y: 3.25490196078431, size: 1 },\r\n // { x: 186.162162162162, y: 2.7843137254902, size: 1 },\r\n // { x: 192, y: 3.25490196078431, size: 1 },\r\n // { x: 229.621621621622, y: 3.01960784313725, size: 1 },\r\n // { x: 230.27027027027, y: 2.98039215686275, size: 1 },\r\n // { x: 235.459459459459, y: 3.29411764705882, size: 1 },\r\n // { x: 251.675675675676, y: 2.82352941176471, size: 1 },\r\n // { x: 271.135135135135, y: 2.98039215686275, size: 1 },\r\n // { x: 272.432432432432, y: 2.74509803921569, size: 1 },\r\n // { x: 273.081081081081, y: 1.96078431372549, size: 1 },\r\n // { x: 275.675675675676, y: 3.13725490196078, size: 1 },\r\n // { x: 276.324324324324, y: 3.05882352941176, size: 1 },\r\n // { x: 278.27027027027, y: 3.2156862745098, size: 1 },\r\n // { x: 279.567567567568, y: 3.05882352941176, size: 1 },\r\n // { x: 286.054054054054, y: 3.2156862745098, size: 1 },\r\n // { x: 287.351351351351, y: 2.90196078431373, size: 1 },\r\n // { x: 290.594594594595, y: 3.09803921568627, size: 1 },\r\n // { x: 291.243243243243, y: 3.17647058823529, size: 1 },\r\n // { x: 291.891891891892, y: 3.09803921568627, size: 1 },\r\n // { x: 293.189189189189, y: 3.29411764705882, size: 1 },\r\n // { x: 295.135135135135, y: 3.01960784313725, size: 1 },\r\n // { x: 302.918918918919, y: 3.13725490196078, size: 1 },\r\n // { x: 305.513513513513, y: 3.09803921568627, size: 1 },\r\n // { x: 311.351351351351, y: 3.33333333333333, size: 1 },\r\n // { x: 313.945945945946, y: 3.29411764705882, size: 1 },\r\n // { x: 316.540540540541, y: 2.58823529411765, size: 1 },\r\n // { x: 318.486486486487, y: 3.13725490196078, size: 1 },\r\n // { x: 319.135135135135, y: 3.09803921568627, size: 1 },\r\n // { x: 321.72972972973, y: 3.13725490196078, size: 1 },\r\n // { x: 328.864864864865, y: 2.98039215686275, size: 1 },\r\n // { x: 329.513513513513, y: 3.25490196078431, size: 1 },\r\n // { x: 337.297297297297, y: 2.82352941176471, size: 1 },\r\n // { x: 337.945945945946, y: 2.3921568627451, size: 1 },\r\n // { x: 19.4244604316547, y: 2.90196078431373, size: 1 },\r\n // { x: 20.7194244604317, y: 2.23529411764706, size: 1 },\r\n // { x: 21.3669064748201, y: 1.72549019607843, size: 1 },\r\n // { x: 42.0863309352518, y: 2.62745098039216, size: 1 },\r\n // { x: 42.7338129496403, y: 1.41176470588235, size: 1 },\r\n // { x: 48.5611510791367, y: 3.05882352941176, size: 1 },\r\n // { x: 50.5035971223022, y: 2.94117647058824, size: 1 },\r\n // { x: 55.6834532374101, y: 2.94117647058824, size: 1 },\r\n // { x: 56.9784172661871, y: 3.09803921568627, size: 1 },\r\n // { x: 59.568345323741, y: 2.7843137254902, size: 1 },\r\n // { x: 60.2158273381295, y: 3.05882352941176, size: 1 },\r\n // { x: 61.5107913669065, y: 2.90196078431373, size: 1 },\r\n // { x: 62.158273381295, y: 3.01960784313725, size: 1 },\r\n // { x: 64.1007194244604, y: 2.62745098039216, size: 1 },\r\n // { x: 64.7482014388489, y: 2.54901960784314, size: 1 },\r\n // { x: 69.2805755395683, y: 3.05882352941176, size: 1 },\r\n // { x: 69.9280575539568, y: 2.94117647058824, size: 1 },\r\n // { x: 75.7553956834532, y: 3.01960784313725, size: 1 },\r\n // { x: 76.4028776978417, y: 2.7843137254902, size: 1 },\r\n // { x: 77.0503597122302, y: 3.01960784313725, size: 1 },\r\n // { x: 77.6978417266187, y: 2.98039215686275, size: 1 },\r\n // { x: 127.553956834532, y: 2.94117647058824, size: 1 },\r\n // { x: 146.978417266187, y: 3.17647058823529, size: 1 },\r\n // { x: 170.935251798561, y: 3.01960784313725, size: 1 },\r\n // { x: 171.58273381295, y: 3.05882352941176, size: 1 },\r\n // { x: 193.597122302158, y: 2.54901960784314, size: 1 },\r\n // { x: 214.964028776978, y: 2.27450980392157, size: 1 },\r\n // { x: 215.611510791367, y: 1.92156862745098, size: 1 },\r\n // { x: 244.748201438849, y: 3.09803921568627, size: 1 },\r\n // { x: 247.338129496403, y: 3.2156862745098, size: 1 },\r\n // { x: 248.63309352518, y: 2.90196078431373, size: 1 },\r\n // { x: 301.726618705036, y: 2.98039215686275, size: 1 },\r\n // { x: 323.093525179856, y: 2.7843137254902, size: 1 },\r\n // { x: 345.755395683453, y: 3.05882352941176, size: 1 },\r\n // { x: 350.935251798561, y: 3.09803921568627, size: 1 },\r\n // { x: 2.59459459459459, y: 2.94117647058824, size: 1 },\r\n // { x: 3.24324324324324, y: 3.01960784313725, size: 1 },\r\n // { x: 3.89189189189189, y: 3.2156862745098, size: 1 },\r\n // { x: 6.48648648648649, y: 2.86274509803922, size: 1 },\r\n // { x: 7.13513513513514, y: 3.09803921568627, size: 1 },\r\n // { x: 28.5405405405405, y: 2.98039215686275, size: 1 },\r\n // { x: 29.1891891891892, y: 3.05882352941176, size: 1 },\r\n // { x: 29.8378378378378, y: 2.90196078431373, size: 1 },\r\n // { x: 31.7837837837838, y: 2.94117647058824, size: 1 },\r\n // { x: 33.7297297297297, y: 2.98039215686275, size: 1 },\r\n // { x: 34.3783783783784, y: 3.01960784313725, size: 1 },\r\n // { x: 38.9189189189189, y: 2.98039215686275, size: 1 },\r\n // { x: 39.5675675675676, y: 2.90196078431373, size: 1 },\r\n // { x: 40.2162162162162, y: 3.09803921568627, size: 1 },\r\n // { x: 41.5135135135135, y: 2.86274509803922, size: 1 },\r\n // { x: 44.7567567567568, y: 3.01960784313725, size: 1 },\r\n // { x: 45.4054054054054, y: 2.90196078431373, size: 1 },\r\n // { x: 46.0540540540541, y: 3.05882352941176, size: 1 },\r\n // { x: 46.7027027027027, y: 2.98039215686275, size: 1 },\r\n // { x: 49.9459459459459, y: 2.31372549019608, size: 1 },\r\n // { x: 71.3513513513514, y: 2.90196078431373, size: 1 },\r\n // { x: 92.7567567567568, y: 3.09803921568627, size: 1 },\r\n // { x: 94.054054054054, y: 2.94117647058824, size: 1 },\r\n // { x: 94.7027027027027, y: 3.13725490196078, size: 1 },\r\n // { x: 95.3513513513514, y: 2.90196078431373, size: 1 },\r\n // { x: 96.6486486486486, y: 2.98039215686275, size: 1 },\r\n // { x: 97.2972972972973, y: 3.25490196078431, size: 1 },\r\n // { x: 98.5945945945946, y: 3.09803921568627, size: 1 },\r\n // { x: 99.2432432432432, y: 3.01960784313725, size: 1 },\r\n // { x: 104.432432432432, y: 2.86274509803922, size: 1 },\r\n // { x: 105.081081081081, y: 3.05882352941176, size: 1 },\r\n // { x: 105.72972972973, y: 3.05882352941176, size: 1 },\r\n // { x: 106.378378378378, y: 3.09803921568627, size: 1 },\r\n // { x: 108.324324324324, y: 3.25490196078431, size: 1 },\r\n // { x: 108.972972972973, y: 3.17647058823529, size: 1 },\r\n // { x: 109.621621621622, y: 3.13725490196078, size: 1 },\r\n // { x: 110.27027027027, y: 3.05882352941176, size: 1 },\r\n // { x: 111.567567567568, y: 2.94117647058824, size: 1 },\r\n // { x: 156.972972972973, y: 3.05882352941176, size: 1 },\r\n // { x: 157.621621621622, y: 2.70588235294118, size: 1 },\r\n // { x: 178.378378378378, y: 3.17647058823529, size: 1 },\r\n // { x: 179.675675675676, y: 2.94117647058824, size: 1 },\r\n // { x: 199.135135135135, y: 3.05882352941176, size: 1 },\r\n // { x: 265.945945945946, y: 3.05882352941176, size: 1 },\r\n // { x: 267.891891891892, y: 2.74509803921569, size: 1 },\r\n // { x: 281.513513513513, y: 3.41176470588235, size: 1 },\r\n // { x: 288, y: 2.70588235294118, size: 1 },\r\n // { x: 306.810810810811, y: 3.13725490196078, size: 1 },\r\n // { x: 310.054054054054, y: 3.01960784313725, size: 1 },\r\n // { x: 311.351351351351, y: 2.90196078431373, size: 1 },\r\n // { x: 316.540540540541, y: 2.94117647058824, size: 1 },\r\n // { x: 318.486486486487, y: 3.09803921568627, size: 1 },\r\n // { x: 320.432432432432, y: 2.94117647058824, size: 1 },\r\n // { x: 321.081081081081, y: 3.05882352941176, size: 1 },\r\n // { x: 321.72972972973, y: 3.01960784313725, size: 1 },\r\n // { x: 322.378378378378, y: 2.86274509803922, size: 1 },\r\n // { x: 323.027027027027, y: 3.17647058823529, size: 1 },\r\n // { x: 324.324324324324, y: 3.29411764705882, size: 1 },\r\n // { x: 325.621621621622, y: 3.05882352941176, size: 1 },\r\n // { x: 327.567567567568, y: 3.05882352941176, size: 1 },\r\n // { x: 328.216216216216, y: 2.94117647058824, size: 1 },\r\n // { x: 330.162162162162, y: 2.98039215686275, size: 1 },\r\n // { x: 14.2446043165468, y: 2.58823529411765, size: 1 },\r\n // { x: 139.208633093525, y: 2.98039215686275, size: 1 },\r\n // { x: 141.151079136691, y: 3.13725490196078, size: 1 },\r\n // { x: 163.165467625899, y: 2.94117647058824, size: 1 },\r\n // { x: 165.107913669065, y: 2.15686274509804, size: 1 },\r\n // { x: 186.474820143885, y: 3.05882352941176, size: 1 },\r\n // { x: 187.122302158273, y: 2.74509803921569, size: 1 },\r\n // { x: 189.712230215827, y: 3.17647058823529, size: 1 },\r\n // { x: 208.489208633094, y: 2.74509803921569, size: 1 },\r\n // { x: 209.784172661871, y: 3.01960784313725, size: 1 },\r\n // { x: 227.26618705036, y: 3.05882352941176, size: 1 },\r\n // { x: 229.856115107914, y: 2.66666666666667, size: 1 },\r\n // { x: 272.589928057554, y: 2.7843137254902, size: 1 },\r\n // { x: 315.971223021583, y: 2.86274509803922, size: 1 },\r\n // { x: 316.618705035971, y: 2.90196078431373, size: 1 },\r\n // { x: 358.705035971223, y: 2.90196078431373, size: 1 },\r\n // { x: 359.352517985611, y: 2.86274509803922, size: 1 },\r\n // { x: 20.7194244604317, y: 2.98039215686275, size: 1 },\r\n // { x: 21.3669064748201, y: 2.74509803921569, size: 1 },\r\n // { x: 33.0215827338129, y: 3.05882352941176, size: 1 },\r\n // { x: 85.4676258992806, y: 2.50980392156863, size: 1 },\r\n // { x: 86.1151079136691, y: 2.47058823529412, size: 1 },\r\n // { x: 86.7625899280576, y: 3.01960784313725, size: 1 },\r\n // { x: 102.302158273381, y: 2.94117647058824, size: 1 },\r\n // { x: 102.94964028777, y: 2.94117647058824, size: 1 },\r\n // { x: 104.892086330935, y: 3.05882352941176, size: 1 },\r\n // { x: 106.834532374101, y: 2.74509803921569, size: 1 },\r\n // { x: 107.482014388489, y: 2.90196078431373, size: 1 },\r\n // { x: 171.58273381295, y: 2.86274509803922, size: 1 },\r\n // { x: 172.230215827338, y: 2.94117647058824, size: 1 },\r\n // { x: 182.589928057554, y: 3.01960784313725, size: 1 },\r\n // { x: 214.964028776978, y: 1.76470588235294, size: 1 },\r\n // { x: 215.611510791367, y: 1.84313725490196, size: 1 },\r\n // { x: 344.460431654676, y: 3.09803921568627, size: 1 },\r\n // { x: 135.971223021583, y: 2.3921568627451, size: 1 },\r\n // { x: 157.338129496403, y: 2.66666666666667, size: 1 },\r\n // { x: 221.438848920863, y: 2.94117647058824, size: 1 },\r\n // { x: 222.086330935252, y: 2.62745098039216, size: 1 },\r\n // { x: 243.453237410072, y: 0.901960784313726, size: 1 },\r\n // { x: 244.10071942446, y: 1.01960784313725, size: 1 },\r\n // { x: 244.748201438849, y: 0.980392156862745, size: 1 },\r\n // { x: 245.395683453237, y: 1.01960784313725, size: 1 },\r\n // { x: 253.165467625899, y: 2.94117647058824, size: 1 },\r\n // { x: 259.640287769784, y: 3.09803921568627, size: 1 },\r\n // { x: 264.820143884892, y: 2.35294117647059, size: 1 },\r\n // { x: 265.467625899281, y: 1.72549019607843, size: 1 },\r\n // { x: 285.539568345324, y: 3.05882352941176, size: 1 },\r\n // { x: 286.834532374101, y: 2.35294117647059, size: 1 },\r\n // { x: 328.273381294964, y: 3.13725490196078, size: 1 },\r\n // { x: 1.94594594594595, y: 3.92156862745098, size: 1 },\r\n // { x: 12.972972972973, y: 2.58823529411765, size: 1 },\r\n // { x: 34.3783783783784, y: 2.90196078431373, size: 1 },\r\n // { x: 35.027027027027, y: 2.98039215686275, size: 1 },\r\n // { x: 50.5945945945946, y: 4.19607843137255, size: 1 },\r\n // { x: 55.7837837837838, y: 2.98039215686275, size: 1 },\r\n // { x: 56.4324324324324, y: 2.58823529411765, size: 1 },\r\n // { x: 77.1891891891892, y: 2.94117647058824, size: 1 },\r\n // { x: 77.8378378378378, y: 2.07843137254902, size: 1 },\r\n // { x: 78.4864864864865, y: 1.92156862745098, size: 1 },\r\n // { x: 99.2432432432432, y: 2.58823529411765, size: 1 },\r\n // { x: 120, y: 3.01960784313725, size: 1 },\r\n // { x: 141.405405405405, y: 3.2156862745098, size: 1 },\r\n // { x: 142.054054054054, y: 3.05882352941176, size: 1 },\r\n // { x: 142.702702702703, y: 1.92156862745098, size: 1 },\r\n // { x: 143.351351351351, y: 1.72549019607843, size: 1 },\r\n // { x: 228.972972972973, y: 3.05882352941176, size: 1 },\r\n // { x: 272.432432432432, y: 2.54901960784314, size: 1 },\r\n // { x: 273.081081081081, y: 2.27450980392157, size: 1 },\r\n // { x: 293.837837837838, y: 2.43137254901961, size: 1 },\r\n // { x: 294.486486486487, y: 2.35294117647059, size: 1 },\r\n // { x: 301.621621621622, y: 4.11764705882353, size: 1 },\r\n // { x: 303.567567567568, y: 4, size: 1 },\r\n // { x: 304.864864864865, y: 4.03921568627451, size: 1 },\r\n // { x: 305.513513513513, y: 4.19607843137255, size: 1 },\r\n // { x: 310.054054054054, y: 4.07843137254902, size: 1 },\r\n // { x: 312.648648648649, y: 4.31372549019608, size: 1 },\r\n // { x: 334.054054054054, y: 4.11764705882353, size: 1 },\r\n // { x: 337.297297297297, y: 2.62745098039216, size: 1 },\r\n // { x: 337.945945945946, y: 2.50980392156863, size: 1 },\r\n // { x: 358.702702702703, y: 2.50980392156863, size: 1 },\r\n // { x: 359.351351351351, y: 1.64705882352941, size: 1 },\r\n // { x: 20.7194244604317, y: 2.35294117647059, size: 1 },\r\n // { x: 106.834532374101, y: 2.94117647058824, size: 1 },\r\n // { x: 128.201438848921, y: 2.70588235294118, size: 1 },\r\n // { x: 128.848920863309, y: 2.3921568627451, size: 1 },\r\n // { x: 214.964028776978, y: 2.3921568627451, size: 1 },\r\n // { x: 331.510791366906, y: 3.13725490196078, size: 1 },\r\n // { x: 336.043165467626, y: 3.17647058823529, size: 1 },\r\n // { x: 342.517985611511, y: 3.13725490196078, size: 1 },\r\n // { x: 344.460431654676, y: 2.47058823529412, size: 1 },\r\n // { x: 5.18918918918919, y: 3.09803921568627, size: 1 },\r\n // { x: 25.9459459459459, y: 3.13725490196078, size: 1 },\r\n // { x: 27.8918918918919, y: 2.58823529411765, size: 1 },\r\n // { x: 70.7027027027027, y: 2.50980392156863, size: 1 },\r\n // { x: 71.3513513513514, y: 2.70588235294118, size: 1 },\r\n // { x: 113.513513513514, y: 2.74509803921569, size: 1 },\r\n // { x: 114.162162162162, y: 2.27450980392157, size: 1 },\r\n // { x: 156.972972972973, y: 2.94117647058824, size: 1 },\r\n // { x: 178.378378378378, y: 3.29411764705882, size: 1 },\r\n // { x: 179.027027027027, y: 2.50980392156863, size: 1 },\r\n // { x: 179.675675675676, y: 3.09803921568627, size: 1 },\r\n // { x: 197.837837837838, y: 3.13725490196078, size: 1 },\r\n // { x: 198.486486486486, y: 3.33333333333333, size: 1 },\r\n // { x: 199.783783783784, y: 2.94117647058824, size: 1 },\r\n // { x: 200.432432432432, y: 2.94117647058824, size: 1 },\r\n // { x: 201.081081081081, y: 3.05882352941176, size: 1 },\r\n // { x: 286.702702702703, y: 2.66666666666667, size: 1 },\r\n // { x: 287.351351351351, y: 2.31372549019608, size: 1 },\r\n // { x: 334.054054054054, y: 4, size: 1 },\r\n // { x: 52.4460431654676, y: 4.15686274509804, size: 1 },\r\n // { x: 56.3309352517986, y: 2.47058823529412, size: 1 },\r\n // { x: 56.9784172661871, y: 2.43137254901961, size: 1 },\r\n // { x: 57.6258992805755, y: 2.43137254901961, size: 1 },\r\n // { x: 100.359712230216, y: 2.7843137254902, size: 1 },\r\n // { x: 143.093525179856, y: 2.35294117647059, size: 1 },\r\n // { x: 185.827338129496, y: 2.86274509803922, size: 1 },\r\n // { x: 186.474820143885, y: 2.90196078431373, size: 1 },\r\n // { x: 251.870503597122, y: 2.86274509803922, size: 1 },\r\n // { x: 252.517985611511, y: 2.3921568627451, size: 1 },\r\n // { x: 315.971223021583, y: 2.70588235294118, size: 1 },\r\n // { x: 359.352517985611, y: 3.13725490196078, size: 1 },\r\n // { x: 37.5539568345324, y: 3.13725490196078, size: 1 },\r\n // { x: 85.4676258992806, y: 2.94117647058824, size: 1 },\r\n // { x: 86.7625899280576, y: 4.07843137254902, size: 1 },\r\n // { x: 149.568345323741, y: 2.7843137254902, size: 1 },\r\n // { x: 150.215827338129, y: 2.43137254901961, size: 1 },\r\n // { x: 236.330935251799, y: 2.82352941176471, size: 1 },\r\n // { x: 257.697841726619, y: 2.47058823529412, size: 1 },\r\n // { x: 258.345323741007, y: 2.43137254901961, size: 1 },\r\n // { x: 301.079136690647, y: 2.31372549019608, size: 1 },\r\n // { x: 323.093525179856, y: 2.74509803921569, size: 1 },\r\n // { x: 337.985611510791, y: 4.11764705882353, size: 1 },\r\n // { x: 5.18918918918919, y: 3.33333333333333, size: 1 },\r\n // { x: 5.83783783783784, y: 2.98039215686275, size: 1 },\r\n // { x: 26.5945945945946, y: 2.86274509803922, size: 1 },\r\n // { x: 27.2432432432432, y: 1.96078431372549, size: 1 },\r\n // { x: 27.8918918918919, y: 2.19607843137255, size: 1 },\r\n // { x: 35.6756756756757, y: 4.07843137254902, size: 1 },\r\n // { x: 48.6486486486486, y: 2.58823529411765, size: 1 },\r\n // { x: 49.2972972972973, y: 2.50980392156863, size: 1 },\r\n // { x: 70.7027027027027, y: 2.03921568627451, size: 1 },\r\n // { x: 71.3513513513514, y: 2.98039215686275, size: 1 },\r\n // { x: 88.8648648648649, y: 3.2156862745098, size: 1 },\r\n // { x: 90.8108108108108, y: 3.17647058823529, size: 1 },\r\n // { x: 135.567567567568, y: 2.7843137254902, size: 1 },\r\n // { x: 136.216216216216, y: 3.01960784313725, size: 1 },\r\n // { x: 140.756756756757, y: 3.33333333333333, size: 1 },\r\n // { x: 200.432432432432, y: 2.98039215686275, size: 1 },\r\n // { x: 201.081081081081, y: 3.25490196078431, size: 1 },\r\n // { x: 205.621621621622, y: 3.2156862745098, size: 1 },\r\n // { x: 211.459459459459, y: 3.05882352941176, size: 1 },\r\n // { x: 214.054054054054, y: 3.13725490196078, size: 1 },\r\n // { x: 214.702702702703, y: 3.05882352941176, size: 1 },\r\n // { x: 220.540540540541, y: 3.25490196078431, size: 1 },\r\n // { x: 222.486486486486, y: 3.37254901960784, size: 1 },\r\n // { x: 228.972972972973, y: 3.13725490196078, size: 1 },\r\n // { x: 238.702702702703, y: 3.2156862745098, size: 1 },\r\n // { x: 241.297297297297, y: 3.17647058823529, size: 1 },\r\n // { x: 243.243243243243, y: 2.82352941176471, size: 1 },\r\n // { x: 244.540540540541, y: 3.13725490196078, size: 1 },\r\n // { x: 245.837837837838, y: 3.01960784313725, size: 1 },\r\n // { x: 246.486486486486, y: 3.29411764705882, size: 1 },\r\n // { x: 254.918918918919, y: 3.09803921568627, size: 1 },\r\n // { x: 256.216216216216, y: 3.2156862745098, size: 1 },\r\n // { x: 260.756756756757, y: 3.2156862745098, size: 1 },\r\n // { x: 262.054054054054, y: 3.29411764705882, size: 1 },\r\n // { x: 265.297297297297, y: 2.90196078431373, size: 1 },\r\n // { x: 286.054054054054, y: 3.25490196078431, size: 1 },\r\n // { x: 287.351351351351, y: 2.50980392156863, size: 1 },\r\n // { x: 306.810810810811, y: 3.33333333333333, size: 1 },\r\n // { x: 308.108108108108, y: 3.09803921568627, size: 1 },\r\n // { x: 328.216216216216, y: 3.25490196078431, size: 1 },\r\n // { x: 329.513513513513, y: 3.05882352941176, size: 1 },\r\n // { x: 330.162162162162, y: 2.74509803921569, size: 1 },\r\n // { x: 342.486486486487, y: 3.09803921568627, size: 1 },\r\n // { x: 346.378378378378, y: 3.33333333333333, size: 1 },\r\n // { x: 34.9640287769784, y: 2.90196078431373, size: 1 },\r\n // { x: 99.7122302158273, y: 2.66666666666667, size: 1 },\r\n // { x: 164.460431654676, y: 2.70588235294118, size: 1 },\r\n // { x: 209.136690647482, y: 3.09803921568627, size: 1 },\r\n // { x: 229.208633093525, y: 2.35294117647059, size: 1 },\r\n // { x: 271.942446043165, y: 2.11764705882353, size: 1 },\r\n // { x: 272.589928057554, y: 2.35294117647059, size: 1 },\r\n // { x: 315.323741007194, y: 2.7843137254902, size: 1 },\r\n // { x: 315.971223021583, y: 2.66666666666667, size: 1 },\r\n // { x: 358.705035971223, y: 2.62745098039216, size: 1 },\r\n // { x: 85.4676258992806, y: 2.82352941176471, size: 1 },\r\n // { x: 128.201438848921, y: 2.74509803921569, size: 1 },\r\n // { x: 192.302158273381, y: 3.17647058823529, size: 1 },\r\n // { x: 214.31654676259, y: 2.54901960784314, size: 1 },\r\n // { x: 241.510791366906, y: 4.03921568627451, size: 1 },\r\n // { x: 253.165467625899, y: 4.07843137254902, size: 1 },\r\n // { x: 254.460431654676, y: 4.19607843137255, size: 1 },\r\n // { x: 5.83783783783784, y: 3.09803921568627, size: 1 },\r\n // { x: 70.054054054054, y: 2.90196078431373, size: 1 },\r\n // { x: 77.1891891891892, y: 3.88235294117647, size: 1 },\r\n // { x: 156.972972972973, y: 3.13725490196078, size: 1 },\r\n // { x: 164.756756756757, y: 3.84313725490196, size: 1 },\r\n // { x: 178.378378378378, y: 2.94117647058824, size: 1 },\r\n // { x: 179.675675675676, y: 2.66666666666667, size: 1 },\r\n // { x: 180.324324324324, y: 2.74509803921569, size: 1 },\r\n // { x: 200.432432432432, y: 3.09803921568627, size: 1 },\r\n // { x: 227.675675675676, y: 4, size: 1 },\r\n // { x: 243.891891891892, y: 2.7843137254902, size: 1 },\r\n // { x: 308.756756756757, y: 3.09803921568627, size: 1 },\r\n // { x: 77.6978417266187, y: 2.62745098039216, size: 1 },\r\n // { x: 78.3453237410072, y: 2.98039215686275, size: 1 },\r\n // { x: 99.0647482014388, y: 2.3921568627451, size: 1 },\r\n // { x: 99.7122302158273, y: 1.68627450980392, size: 1 },\r\n // { x: 100.359712230216, y: 1.76470588235294, size: 1 },\r\n // { x: 101.007194244604, y: 1.72549019607843, size: 1 },\r\n // { x: 114.604316546763, y: 2.90196078431373, size: 1 },\r\n // { x: 143.093525179856, y: 2.86274509803922, size: 1 },\r\n // { x: 185.179856115108, y: 2.98039215686275, size: 1 },\r\n // { x: 185.827338129496, y: 2.15686274509804, size: 1 },\r\n // { x: 207.841726618705, y: 2.70588235294118, size: 1 },\r\n // { x: 228.561151079137, y: 2.50980392156863, size: 1 },\r\n // { x: 229.208633093525, y: 2.54901960784314, size: 1 },\r\n // { x: 231.798561151079, y: 3.13725490196078, size: 1 },\r\n // { x: 272.589928057554, y: 2.70588235294118, size: 1 },\r\n // { x: 292.014388489209, y: 3.05882352941176, size: 1 },\r\n // { x: 293.956834532374, y: 1.64705882352941, size: 1 },\r\n // { x: 315.323741007194, y: 2.58823529411765, size: 1 },\r\n // { x: 336.690647482014, y: 2.31372549019608, size: 1 },\r\n // { x: 337.338129496403, y: 2.82352941176471, size: 1 },\r\n // { x: 149.568345323741, y: 2.90196078431373, size: 1 },\r\n // { x: 170.935251798561, y: 2.94117647058824, size: 1 },\r\n // { x: 343.812949640288, y: 2.74509803921569, size: 1 },\r\n // { x: 26.5945945945946, y: 3.09803921568627, size: 1 },\r\n // { x: 71.3513513513514, y: 3.25490196078431, size: 1 },\r\n // { x: 72, y: 3.13725490196078, size: 1 },\r\n // { x: 107.675675675676, y: 4, size: 1 },\r\n // { x: 138.162162162162, y: 3.09803921568627, size: 1 },\r\n // { x: 156.324324324324, y: 2.86274509803922, size: 1 },\r\n // { x: 156.972972972973, y: 2.7843137254902, size: 1 },\r\n // { x: 158.27027027027, y: 3.33333333333333, size: 1 },\r\n // { x: 172.540540540541, y: 4, size: 1 },\r\n // { x: 202.378378378378, y: 3.17647058823529, size: 1 },\r\n // { x: 206.27027027027, y: 3.29411764705882, size: 1 },\r\n // { x: 208.216216216216, y: 3.29411764705882, size: 1 },\r\n // { x: 213.405405405405, y: 3.25490196078431, size: 1 },\r\n // { x: 217.297297297297, y: 3.29411764705882, size: 1 },\r\n // { x: 223.135135135135, y: 3.13725490196078, size: 1 },\r\n // { x: 223.783783783784, y: 3.13725490196078, size: 1 },\r\n // { x: 239.351351351351, y: 3.09803921568627, size: 1 },\r\n // { x: 240.648648648649, y: 3.09803921568627, size: 1 },\r\n // { x: 243.891891891892, y: 2.90196078431373, size: 1 },\r\n // { x: 245.189189189189, y: 3.13725490196078, size: 1 },\r\n // { x: 246.486486486486, y: 3.01960784313725, size: 1 },\r\n // { x: 247.783783783784, y: 3.09803921568627, size: 1 },\r\n // { x: 249.081081081081, y: 3.13725490196078, size: 1 },\r\n // { x: 250.378378378378, y: 3.01960784313725, size: 1 },\r\n // { x: 251.675675675676, y: 2.98039215686275, size: 1 },\r\n // { x: 253.621621621622, y: 2.98039215686275, size: 1 },\r\n // { x: 256.864864864865, y: 2.94117647058824, size: 1 },\r\n // { x: 257.513513513513, y: 3.01960784313725, size: 1 },\r\n // { x: 260.756756756757, y: 2.90196078431373, size: 1 },\r\n // { x: 261.405405405405, y: 3.13725490196078, size: 1 },\r\n // { x: 262.702702702703, y: 3.13725490196078, size: 1 },\r\n // { x: 264.648648648649, y: 3.17647058823529, size: 1 },\r\n // { x: 272.432432432432, y: 3.05882352941176, size: 1 },\r\n // { x: 322.378378378378, y: 3.29411764705882, size: 1 },\r\n // { x: 34.9640287769784, y: 3.17647058823529, size: 1 },\r\n // { x: 48.5611510791367, y: 3.09803921568627, size: 1 },\r\n // { x: 99.7122302158273, y: 2.94117647058824, size: 1 },\r\n // { x: 196.834532374101, y: 3.09803921568627, size: 1 },\r\n // { x: 274.532374100719, y: 3.09803921568627, size: 1 },\r\n // { x: 284.892086330935, y: 3.05882352941176, size: 1 },\r\n // { x: 16.8345323741007, y: 3.09803921568627, size: 1 },\r\n // { x: 64.7482014388489, y: 3.01960784313725, size: 1 },\r\n // { x: 84.1726618705036, y: 2.7843137254902, size: 1 },\r\n // { x: 106.187050359712, y: 2.7843137254902, size: 1 },\r\n // { x: 214.31654676259, y: 3.09803921568627, size: 1 },\r\n // { x: 259.640287769784, y: 3.13725490196078, size: 1 },\r\n // { x: 7.13513513513514, y: 3.05882352941176, size: 1 },\r\n // { x: 7.78378378378378, y: 3.13725490196078, size: 1 },\r\n // { x: 8.43243243243243, y: 3.05882352941176, size: 1 },\r\n // { x: 11.027027027027, y: 3.05882352941176, size: 1 },\r\n // { x: 13.6216216216216, y: 2.94117647058824, size: 1 },\r\n // { x: 15.5675675675676, y: 3.05882352941176, size: 1 },\r\n // { x: 16.8648648648649, y: 2.90196078431373, size: 1 },\r\n // { x: 22.7027027027027, y: 2.94117647058824, size: 1 },\r\n // { x: 26.5945945945946, y: 2.23529411764706, size: 1 },\r\n // { x: 27.2432432432432, y: 2.15686274509804, size: 1 },\r\n // { x: 28.5405405405405, y: 3.09803921568627, size: 1 },\r\n // { x: 29.1891891891892, y: 3.01960784313725, size: 1 },\r\n // { x: 33.0810810810811, y: 3.09803921568627, size: 1 },\r\n // { x: 33.7297297297297, y: 3.13725490196078, size: 1 },\r\n // { x: 38.2702702702703, y: 2.98039215686275, size: 1 },\r\n // { x: 40.8648648648649, y: 3.05882352941176, size: 1 },\r\n // { x: 42.8108108108108, y: 3.13725490196078, size: 1 },\r\n // { x: 44.1081081081081, y: 3.17647058823529, size: 1 },\r\n // { x: 44.7567567567568, y: 2.82352941176471, size: 1 },\r\n // { x: 46.0540540540541, y: 2.94117647058824, size: 1 },\r\n // { x: 46.7027027027027, y: 3.13725490196078, size: 1 },\r\n // { x: 48, y: 2.27450980392157, size: 1 },\r\n // { x: 48.6486486486486, y: 1.80392156862745, size: 1 },\r\n // { x: 68.1081081081081, y: 3.2156862745098, size: 1 },\r\n // { x: 70.054054054054, y: 2.50980392156863, size: 1 },\r\n // { x: 71.3513513513514, y: 3.29411764705882, size: 1 },\r\n // { x: 91.4594594594595, y: 3.01960784313725, size: 1 },\r\n // { x: 94.054054054054, y: 3.17647058823529, size: 1 },\r\n // { x: 95.3513513513514, y: 3.13725490196078, size: 1 },\r\n // { x: 99.2432432432432, y: 3.09803921568627, size: 1 },\r\n // { x: 99.8918918918919, y: 2.94117647058824, size: 1 },\r\n // { x: 103.783783783784, y: 3.09803921568627, size: 1 },\r\n // { x: 108.324324324324, y: 2.94117647058824, size: 1 },\r\n // { x: 134.918918918919, y: 3.13725490196078, size: 1 },\r\n // { x: 138.162162162162, y: 4, size: 1 },\r\n // { x: 156.324324324324, y: 1.49019607843137, size: 1 },\r\n // { x: 156.972972972973, y: 1.25490196078431, size: 1 },\r\n // { x: 158.27027027027, y: 3.17647058823529, size: 1 },\r\n // { x: 159.567567567568, y: 3.05882352941176, size: 1 },\r\n // { x: 160.216216216216, y: 2.98039215686275, size: 1 },\r\n // { x: 164.108108108108, y: 3.09803921568627, size: 1 },\r\n // { x: 169.945945945946, y: 2.82352941176471, size: 1 },\r\n // { x: 173.837837837838, y: 3.05882352941176, size: 1 },\r\n // { x: 175.783783783784, y: 2.94117647058824, size: 1 },\r\n // { x: 176.432432432432, y: 3.05882352941176, size: 1 },\r\n // { x: 177.72972972973, y: 1.92156862745098, size: 1 },\r\n // { x: 178.378378378378, y: 1.84313725490196, size: 1 },\r\n // { x: 193.945945945946, y: 4.11764705882353, size: 1 },\r\n // { x: 202.378378378378, y: 3.01960784313725, size: 1 },\r\n // { x: 210.810810810811, y: 3.13725490196078, size: 1 },\r\n // { x: 211.459459459459, y: 3.17647058823529, size: 1 },\r\n // { x: 216, y: 3.2156862745098, size: 1 },\r\n // { x: 217.945945945946, y: 3.05882352941176, size: 1 },\r\n // { x: 263.351351351351, y: 2.98039215686275, size: 1 },\r\n // { x: 264.648648648649, y: 2.43137254901961, size: 1 },\r\n // { x: 265.297297297297, y: 3.17647058823529, size: 1 },\r\n // { x: 265.945945945946, y: 3.33333333333333, size: 1 },\r\n // { x: 351.567567567568, y: 3.2156862745098, size: 1 },\r\n // { x: 354.810810810811, y: 3.37254901960784, size: 1 },\r\n // { x: 35.6115107913669, y: 4.11764705882353, size: 1 },\r\n // { x: 77.0503597122302, y: 2.98039215686275, size: 1 },\r\n // { x: 101.007194244604, y: 2.98039215686275, size: 1 },\r\n // { x: 105.539568345324, y: 3.01960784313725, size: 1 },\r\n // { x: 111.36690647482, y: 2.98039215686275, size: 1 },\r\n // { x: 117.841726618705, y: 2.98039215686275, size: 1 },\r\n // { x: 120.431654676259, y: 3.09803921568627, size: 1 },\r\n // { x: 123.021582733813, y: 3.09803921568627, size: 1 },\r\n // { x: 137.26618705036, y: 3.05882352941176, size: 1 },\r\n // { x: 142.446043165468, y: 2.50980392156863, size: 1 },\r\n // { x: 158.63309352518, y: 4.15686274509804, size: 1 },\r\n // { x: 182.589928057554, y: 3.13725490196078, size: 1 },\r\n // { x: 185.827338129496, y: 2.90196078431373, size: 1 },\r\n // { x: 229.856115107914, y: 2.90196078431373, size: 1 },\r\n // { x: 271.294964028777, y: 3.2156862745098, size: 1 },\r\n // { x: 295.89928057554, y: 3.05882352941176, size: 1 },\r\n // { x: 296.546762589928, y: 2.86274509803922, size: 1 },\r\n // { x: 299.136690647482, y: 2.86274509803922, size: 1 },\r\n // { x: 299.784172661871, y: 2.98039215686275, size: 1 },\r\n // { x: 304.31654676259, y: 3.01960784313725, size: 1 },\r\n // { x: 310.143884892086, y: 2.82352941176471, size: 1 },\r\n // { x: 0.648648648648649, y: 3.13725490196078, size: 1 },\r\n // { x: 3.24324324324324, y: 3.17647058823529, size: 1 },\r\n // { x: 4.54054054054054, y: 3.17647058823529, size: 1 },\r\n // { x: 6.48648648648649, y: 3.2156862745098, size: 1 },\r\n // { x: 9.08108108108108, y: 3.01960784313725, size: 1 },\r\n // { x: 12.972972972973, y: 3.13725490196078, size: 1 },\r\n // { x: 19.4594594594595, y: 2.86274509803922, size: 1 },\r\n // { x: 20.1081081081081, y: 2.66666666666667, size: 1 },\r\n // { x: 20.7567567567568, y: 2.82352941176471, size: 1 },\r\n // { x: 21.4054054054054, y: 3.05882352941176, size: 1 },\r\n // { x: 40.8648648648649, y: 2.94117647058824, size: 1 },\r\n // { x: 41.5135135135135, y: 2.98039215686275, size: 1 },\r\n // { x: 43.4594594594595, y: 2.98039215686275, size: 1 },\r\n // { x: 44.7567567567568, y: 3.17647058823529, size: 1 },\r\n // { x: 52.5405405405405, y: 3.05882352941176, size: 1 },\r\n // { x: 53.8378378378378, y: 3.05882352941176, size: 1 },\r\n // { x: 55.1351351351351, y: 3.09803921568627, size: 1 },\r\n // { x: 58.3783783783784, y: 2.98039215686275, size: 1 },\r\n // { x: 61.6216216216216, y: 3.17647058823529, size: 1 },\r\n // { x: 80.4324324324324, y: 4, size: 1 },\r\n // { x: 105.081081081081, y: 3.2156862745098, size: 1 },\r\n // { x: 105.72972972973, y: 2.74509803921569, size: 1 },\r\n // { x: 106.378378378378, y: 2.62745098039216, size: 1 },\r\n // { x: 107.027027027027, y: 2.90196078431373, size: 1 },\r\n // { x: 113.513513513514, y: 3.17647058823529, size: 1 },\r\n // { x: 118.054054054054, y: 3.13725490196078, size: 1 },\r\n // { x: 118.702702702703, y: 3.05882352941176, size: 1 },\r\n // { x: 120.648648648649, y: 3.17647058823529, size: 1 },\r\n // { x: 125.837837837838, y: 3.2156862745098, size: 1 },\r\n // { x: 127.783783783784, y: 2.35294117647059, size: 1 },\r\n // { x: 128.432432432432, y: 2.58823529411765, size: 1 },\r\n // { x: 129.081081081081, y: 2.90196078431373, size: 1 },\r\n // { x: 129.72972972973, y: 2.74509803921569, size: 1 },\r\n // { x: 153.081081081081, y: 3.01960784313725, size: 1 },\r\n // { x: 155.027027027027, y: 2.94117647058824, size: 1 },\r\n // { x: 155.675675675676, y: 2.98039215686275, size: 1 },\r\n // { x: 156.324324324324, y: 3.09803921568627, size: 1 },\r\n // { x: 160.864864864865, y: 3.05882352941176, size: 1 },\r\n // { x: 162.162162162162, y: 2.98039215686275, size: 1 },\r\n // { x: 163.459459459459, y: 3.05882352941176, size: 1 },\r\n // { x: 166.054054054054, y: 2.86274509803922, size: 1 },\r\n // { x: 168, y: 2.94117647058824, size: 1 },\r\n // { x: 196.540540540541, y: 3.37254901960784, size: 1 },\r\n // { x: 214.054054054054, y: 3.09803921568627, size: 1 },\r\n // { x: 278.918918918919, y: 3.05882352941176, size: 1 },\r\n // { x: 279.567567567568, y: 2.98039215686275, size: 1 },\r\n // { x: 300.972972972973, y: 3.09803921568627, size: 1 },\r\n // { x: 322.378378378378, y: 2.3921568627451, size: 1 },\r\n // { x: 323.027027027027, y: 2.58823529411765, size: 1 },\r\n // { x: 323.675675675676, y: 2.54901960784314, size: 1 },\r\n // { x: 324.324324324324, y: 2.35294117647059, size: 1 },\r\n // { x: 343.783783783784, y: 2.86274509803922, size: 1 },\r\n // { x: 345.72972972973, y: 3.92156862745098, size: 1 },\r\n // { x: 93.8848920863309, y: 2.98039215686275, size: 1 },\r\n // { x: 102.94964028777, y: 2.98039215686275, size: 1 },\r\n // { x: 113.309352517986, y: 2.82352941176471, size: 1 },\r\n // { x: 113.956834532374, y: 2.7843137254902, size: 1 },\r\n // { x: 221.438848920863, y: 2.70588235294118, size: 1 },\r\n // { x: 243.453237410072, y: 2.90196078431373, size: 1 },\r\n // { x: 308.201438848921, y: 2.90196078431373, size: 1 },\r\n // { x: 12.3021582733813, y: 2.94117647058824, size: 1 },\r\n // { x: 141.798561151079, y: 2.98039215686275, size: 1 },\r\n // { x: 163.165467625899, y: 2.3921568627451, size: 1 },\r\n // { x: 163.812949640288, y: 2.43137254901961, size: 1 },\r\n // { x: 271.294964028777, y: 3.01960784313725, size: 1 },\r\n // { x: 312.73381294964, y: 3.05882352941176, size: 1 },\r\n // { x: 314.028776978417, y: 2.7843137254902, size: 1 },\r\n // { x: 314.676258992806, y: 0.862745098039216, size: 1 },\r\n // { x: 315.323741007194, y: 0.901960784313726, size: 1 },\r\n // { x: 315.971223021583, y: 0.862745098039216, size: 1 },\r\n // { x: 316.618705035971, y: 0.627450980392157, size: 1 },\r\n // { x: 324.388489208633, y: 2.94117647058824, size: 1 },\r\n // { x: 330.215827338129, y: 2.82352941176471, size: 1 },\r\n // { x: 332.805755395683, y: 3.01960784313725, size: 1 },\r\n // { x: 336.043165467626, y: 1.92156862745098, size: 1 },\r\n // { x: 336.690647482014, y: 1.72549019607843, size: 1 },\r\n // { x: 341.870503597122, y: 3.09803921568627, size: 1 },\r\n // { x: 348.992805755396, y: 2.94117647058824, size: 1 },\r\n // { x: 357.410071942446, y: 2.90196078431373, size: 1 },\r\n // { x: 358.057553956835, y: 2.43137254901961, size: 1 },\r\n // { x: 16.2162162162162, y: 3.25490196078431, size: 1 },\r\n // { x: 19.4594594594595, y: 2.62745098039216, size: 1 },\r\n // { x: 40.8648648648649, y: 2.15686274509804, size: 1 },\r\n // { x: 41.5135135135135, y: 2.23529411764706, size: 1 },\r\n // { x: 62.2702702702703, y: 2.74509803921569, size: 1 },\r\n // { x: 62.9189189189189, y: 2.35294117647059, size: 1 },\r\n // { x: 64.8648648648649, y: 3.2156862745098, size: 1 },\r\n // { x: 65.5135135135135, y: 2.86274509803922, size: 1 },\r\n // { x: 81.7297297297297, y: 3.2156862745098, size: 1 },\r\n // { x: 83.6756756756757, y: 3.2156862745098, size: 1 },\r\n // { x: 84.3243243243243, y: 2, size: 1 },\r\n // { x: 84.972972972973, y: 2.82352941176471, size: 1 },\r\n // { x: 127.135135135135, y: 3.01960784313725, size: 1 },\r\n // { x: 127.783783783784, y: 2.74509803921569, size: 1 },\r\n // { x: 133.621621621622, y: 3.25490196078431, size: 1 },\r\n // { x: 134.27027027027, y: 3.2156862745098, size: 1 },\r\n // { x: 134.918918918919, y: 3.17647058823529, size: 1 },\r\n // { x: 147.243243243243, y: 3.17647058823529, size: 1 },\r\n // { x: 155.027027027027, y: 2.98039215686275, size: 1 },\r\n // { x: 157.621621621622, y: 3.2156862745098, size: 1 },\r\n // { x: 159.567567567568, y: 3.09803921568627, size: 1 },\r\n // { x: 166.054054054054, y: 3.13725490196078, size: 1 },\r\n // { x: 166.702702702703, y: 3.05882352941176, size: 1 },\r\n // { x: 167.351351351351, y: 3.25490196078431, size: 1 },\r\n // { x: 170.594594594595, y: 1.68627450980392, size: 1 },\r\n // { x: 171.243243243243, y: 1.84313725490196, size: 1 },\r\n // { x: 192, y: 2.50980392156863, size: 1 },\r\n // { x: 192.648648648649, y: 2.62745098039216, size: 1 },\r\n // { x: 222.486486486486, y: 3.2156862745098, size: 1 },\r\n // { x: 230.918918918919, y: 3.13725490196078, size: 1 },\r\n // { x: 231.567567567568, y: 3.13725490196078, size: 1 },\r\n // { x: 232.864864864865, y: 2.98039215686275, size: 1 },\r\n // { x: 260.108108108108, y: 3.37254901960784, size: 1 },\r\n // { x: 322.378378378378, y: 3.25490196078431, size: 1 },\r\n // { x: 343.783783783784, y: 2.94117647058824, size: 1 },\r\n // { x: 119.136690647482, y: 3.09803921568627, size: 1 },\r\n // { x: 205.89928057554, y: 3.01960784313725, size: 1 },\r\n // { x: 206.546762589928, y: 2.98039215686275, size: 1 },\r\n // { x: 210.431654676259, y: 2.98039215686275, size: 1 },\r\n // { x: 214.964028776978, y: 3.05882352941176, size: 1 },\r\n // { x: 216.258992805755, y: 3.05882352941176, size: 1 },\r\n // { x: 218.201438848921, y: 3.09803921568627, size: 1 },\r\n // { x: 330.863309352518, y: 2.90196078431373, size: 1 },\r\n // { x: 352.230215827338, y: 2.7843137254902, size: 1 },\r\n // { x: 34.9640287769784, y: 3.09803921568627, size: 1 },\r\n // { x: 55.0359712230216, y: 2.82352941176471, size: 1 },\r\n // { x: 56.3309352517986, y: 2.86274509803922, size: 1 },\r\n // { x: 77.0503597122302, y: 2.94117647058824, size: 1 },\r\n // { x: 121.079136690647, y: 2.86274509803922, size: 1 },\r\n // { x: 121.726618705036, y: 2.94117647058824, size: 1 },\r\n // { x: 143.093525179856, y: 2.82352941176471, size: 1 },\r\n // { x: 184.532374100719, y: 2.82352941176471, size: 1 },\r\n // { x: 185.179856115108, y: 2.94117647058824, size: 1 },\r\n // { x: 186.474820143885, y: 3.01960784313725, size: 1 },\r\n // { x: 187.122302158273, y: 3.09803921568627, size: 1 },\r\n // { x: 228.561151079137, y: 2.82352941176471, size: 1 },\r\n // { x: 229.208633093525, y: 2.70588235294118, size: 1 },\r\n // { x: 229.856115107914, y: 2.50980392156863, size: 1 },\r\n // { x: 249.928057553957, y: 2.50980392156863, size: 1 },\r\n // { x: 250.575539568345, y: 2.50980392156863, size: 1 },\r\n // { x: 251.223021582734, y: 2.66666666666667, size: 1 },\r\n // { x: 263.525179856115, y: 3.25490196078431, size: 1 },\r\n // { x: 357.410071942446, y: 2.70588235294118, size: 1 },\r\n // { x: 0, y: 2.50980392156863, size: 1 },\r\n // { x: 0.648648648648649, y: 2.90196078431373, size: 1 },\r\n // { x: 1.2972972972973, y: 2.94117647058824, size: 1 },\r\n // { x: 3.89189189189189, y: 2.90196078431373, size: 1 },\r\n // { x: 4.54054054054054, y: 2.94117647058824, size: 1 },\r\n // { x: 8.43243243243243, y: 2.86274509803922, size: 1 },\r\n // { x: 9.08108108108108, y: 2.94117647058824, size: 1 },\r\n // { x: 9.72972972972973, y: 2.86274509803922, size: 1 },\r\n // { x: 10.3783783783784, y: 2.86274509803922, size: 1 },\r\n // { x: 11.6756756756757, y: 3.05882352941176, size: 1 },\r\n // { x: 16.2162162162162, y: 2.94117647058824, size: 1 },\r\n // { x: 20.1081081081081, y: 2.74509803921569, size: 1 },\r\n // { x: 20.7567567567568, y: 3.01960784313725, size: 1 },\r\n // { x: 40.8648648648649, y: 2.74509803921569, size: 1 },\r\n // { x: 41.5135135135135, y: 2.43137254901961, size: 1 },\r\n // { x: 42.8108108108108, y: 2.54901960784314, size: 1 },\r\n // { x: 62.9189189189189, y: 3.05882352941176, size: 1 },\r\n // { x: 105.081081081081, y: 3.33333333333333, size: 1 },\r\n // { x: 171.243243243243, y: 2.86274509803922, size: 1 },\r\n // { x: 172.540540540541, y: 2.82352941176471, size: 1 },\r\n // { x: 194.594594594595, y: 3.09803921568627, size: 1 },\r\n // { x: 195.891891891892, y: 3.09803921568627, size: 1 },\r\n // { x: 196.540540540541, y: 3.17647058823529, size: 1 },\r\n // { x: 202.378378378378, y: 3.09803921568627, size: 1 },\r\n // { x: 204.324324324324, y: 3.01960784313725, size: 1 },\r\n // { x: 206.27027027027, y: 2.86274509803922, size: 1 },\r\n // { x: 209.513513513514, y: 3.01960784313725, size: 1 },\r\n // { x: 256.864864864865, y: 2.66666666666667, size: 1 },\r\n // { x: 280.216216216216, y: 3.37254901960784, size: 1 },\r\n // { x: 290.594594594595, y: 3.29411764705882, size: 1 },\r\n // { x: 322.378378378378, y: 2.90196078431373, size: 1 },\r\n // { x: 342.486486486487, y: 3.2156862745098, size: 1 },\r\n // { x: 343.135135135135, y: 2.94117647058824, size: 1 },\r\n // { x: 134.676258992806, y: 2.94117647058824, size: 1 },\r\n // { x: 224.676258992806, y: 3.01960784313725, size: 1 },\r\n // { x: 228.561151079137, y: 2.94117647058824, size: 1 },\r\n // { x: 231.798561151079, y: 2.82352941176471, size: 1 },\r\n // { x: 233.741007194245, y: 2.98039215686275, size: 1 },\r\n // { x: 235.035971223022, y: 2.86274509803922, size: 1 },\r\n // { x: 236.330935251799, y: 3.13725490196078, size: 1 },\r\n // { x: 238.920863309353, y: 2.82352941176471, size: 1 },\r\n // { x: 239.568345323741, y: 2.98039215686275, size: 1 },\r\n // { x: 240.863309352518, y: 3.09803921568627, size: 1 },\r\n // { x: 242.158273381295, y: 1.76470588235294, size: 1 },\r\n // { x: 242.805755395683, y: 1.41176470588235, size: 1 },\r\n // { x: 264.172661870504, y: 2.15686274509804, size: 1 },\r\n // { x: 286.187050359712, y: 2.90196078431373, size: 1 },\r\n // { x: 328.273381294964, y: 2.66666666666667, size: 1 },\r\n // { x: 328.920863309353, y: 1.6078431372549, size: 1 },\r\n // { x: 330.215827338129, y: 3.09803921568627, size: 1 },\r\n // { x: 332.158273381295, y: 3.09803921568627, size: 1 },\r\n // { x: 334.748201438849, y: 2.86274509803922, size: 1 },\r\n // { x: 339.928057553957, y: 2.94117647058824, size: 1 },\r\n // { x: 340.575539568345, y: 2.98039215686275, size: 1 },\r\n // { x: 341.223021582734, y: 2.94117647058824, size: 1 },\r\n // { x: 347.05035971223, y: 2.90196078431373, size: 1 },\r\n // { x: 347.697841726619, y: 3.13725490196078, size: 1 },\r\n // { x: 350.935251798561, y: 2.74509803921569, size: 1 },\r\n // { x: 49.8561151079137, y: 4.07843137254902, size: 1 },\r\n // { x: 62.158273381295, y: 3.09803921568627, size: 1 },\r\n // { x: 65.3956834532374, y: 3.13725490196078, size: 1 },\r\n // { x: 69.2805755395683, y: 2.94117647058824, size: 1 },\r\n // { x: 98.4172661870504, y: 1.88235294117647, size: 1 },\r\n // { x: 99.0647482014388, y: 2.7843137254902, size: 1 },\r\n // { x: 104.244604316547, y: 2.74509803921569, size: 1 },\r\n // { x: 108.776978417266, y: 2.94117647058824, size: 1 },\r\n // { x: 110.071942446043, y: 3.05882352941176, size: 1 },\r\n // { x: 110.719424460432, y: 3.01960784313725, size: 1 },\r\n // { x: 115.89928057554, y: 2.86274509803922, size: 1 },\r\n // { x: 120.431654676259, y: 2.54901960784314, size: 1 },\r\n // { x: 161.870503597122, y: 3.05882352941176, size: 1 },\r\n // { x: 163.812949640288, y: 2.70588235294118, size: 1 },\r\n // { x: 165.107913669065, y: 3.13725490196078, size: 1 },\r\n // { x: 174.820143884892, y: 2.94117647058824, size: 1 },\r\n // { x: 175.467625899281, y: 2.7843137254902, size: 1 },\r\n // { x: 180.647482014388, y: 2.82352941176471, size: 1 },\r\n // { x: 181.942446043165, y: 2.98039215686275, size: 1 },\r\n // { x: 249.928057553957, y: 2.70588235294118, size: 1 },\r\n // { x: 250.575539568345, y: 2.70588235294118, size: 1 },\r\n // { x: 251.870503597122, y: 2.94117647058824, size: 1 },\r\n // { x: 256.402877697842, y: 2.90196078431373, size: 1 },\r\n // { x: 257.05035971223, y: 2.94117647058824, size: 1 },\r\n // { x: 260.935251798561, y: 2.86274509803922, size: 1 },\r\n // { x: 267.410071942446, y: 2.98039215686275, size: 1 },\r\n // { x: 272.589928057554, y: 2.82352941176471, size: 1 },\r\n // { x: 292.661870503597, y: 2.23529411764706, size: 1 },\r\n // { x: 295.89928057554, y: 2.98039215686275, size: 1 },\r\n // { x: 298.489208633094, y: 3.09803921568627, size: 1 },\r\n // { x: 299.784172661871, y: 2.82352941176471, size: 1 },\r\n // { x: 304.964028776978, y: 3.01960784313725, size: 1 },\r\n // { x: 338.63309352518, y: 2.98039215686275, size: 1 },\r\n // { x: 339.280575539568, y: 2.82352941176471, size: 1 },\r\n // { x: 346.402877697842, y: 3.05882352941176, size: 1 },\r\n // { x: 347.697841726619, y: 2.94117647058824, size: 1 },\r\n // { x: 353.525179856115, y: 2.94117647058824, size: 1 },\r\n // { x: 354.172661870504, y: 2.82352941176471, size: 1 },\r\n // { x: 18.8108108108108, y: 2.82352941176471, size: 1 },\r\n // { x: 19.4594594594595, y: 2.74509803921569, size: 1 },\r\n // { x: 40.8648648648649, y: 3.01960784313725, size: 1 },\r\n // { x: 127.135135135135, y: 2.66666666666667, size: 1 },\r\n // { x: 127.783783783784, y: 2.58823529411765, size: 1 },\r\n // { x: 128.432432432432, y: 2.47058823529412, size: 1 },\r\n // { x: 129.081081081081, y: 2.54901960784314, size: 1 },\r\n // { x: 148.540540540541, y: 3.01960784313725, size: 1 },\r\n // { x: 162.810810810811, y: 4, size: 1 },\r\n // { x: 170.594594594595, y: 3.13725490196078, size: 1 },\r\n // { x: 256.864864864865, y: 2.58823529411765, size: 1 },\r\n // { x: 257.513513513513, y: 2.90196078431373, size: 1 },\r\n // { x: 258.810810810811, y: 2.70588235294118, size: 1 },\r\n // { x: 269.837837837838, y: 3.33333333333333, size: 1 },\r\n // { x: 278.27027027027, y: 3.01960784313725, size: 1 },\r\n // { x: 280.864864864865, y: 3.13725490196078, size: 1 },\r\n // { x: 282.162162162162, y: 3.25490196078431, size: 1 },\r\n // { x: 282.810810810811, y: 3.09803921568627, size: 1 },\r\n // { x: 283.459459459459, y: 3.25490196078431, size: 1 },\r\n // { x: 285.405405405405, y: 2.86274509803922, size: 1 },\r\n // { x: 289.945945945946, y: 2.90196078431373, size: 1 },\r\n // { x: 291.891891891892, y: 2.7843137254902, size: 1 },\r\n // { x: 292.540540540541, y: 2.98039215686275, size: 1 },\r\n // { x: 321.72972972973, y: 2.90196078431373, size: 1 },\r\n // { x: 323.027027027027, y: 2.70588235294118, size: 1 },\r\n // { x: 341.189189189189, y: 3.29411764705882, size: 1 },\r\n // { x: 344.432432432432, y: 4, size: 1 },\r\n // { x: 98.4172661870504, y: 3.05882352941176, size: 1 },\r\n // { x: 99.0647482014388, y: 3.09803921568627, size: 1 },\r\n // { x: 102.94964028777, y: 2.86274509803922, size: 1 },\r\n // { x: 108.129496402878, y: 2.82352941176471, size: 1 },\r\n // { x: 328.273381294964, y: 2.74509803921569, size: 1 },\r\n // { x: 330.215827338129, y: 2.94117647058824, size: 1 },\r\n // { x: 351.58273381295, y: 2.90196078431373, size: 1 },\r\n // { x: 33.0215827338129, y: 2.98039215686275, size: 1 },\r\n // { x: 34.9640287769784, y: 2.86274509803922, size: 1 },\r\n // { x: 76.4028776978417, y: 2.47058823529412, size: 1 },\r\n // { x: 77.0503597122302, y: 2.66666666666667, size: 1 },\r\n // { x: 98.4172661870504, y: 2.90196078431373, size: 1 },\r\n // { x: 99.0647482014388, y: 2.98039215686275, size: 1 },\r\n // { x: 162.517985611511, y: 2.7843137254902, size: 1 },\r\n // { x: 205.89928057554, y: 3.17647058823529, size: 1 },\r\n // { x: 229.208633093525, y: 2.90196078431373, size: 1 },\r\n // { x: 292.014388489209, y: 3.09803921568627, size: 1 },\r\n // { x: 7.13513513513514, y: 4.03921568627451, size: 1 },\r\n // { x: 40.2162162162162, y: 2.74509803921569, size: 1 },\r\n // { x: 61.6216216216216, y: 3.2156862745098, size: 1 },\r\n // { x: 127.783783783784, y: 3.13725490196078, size: 1 },\r\n // { x: 169.297297297297, y: 2.94117647058824, size: 1 },\r\n // { x: 169.945945945946, y: 1.01960784313725, size: 1 },\r\n // { x: 170.594594594595, y: 1.13725490196078, size: 1 },\r\n // { x: 171.243243243243, y: 1.29411764705882, size: 1 },\r\n // { x: 171.891891891892, y: 1.2156862745098, size: 1 },\r\n // { x: 179.027027027027, y: 2.82352941176471, size: 1 },\r\n // { x: 179.675675675676, y: 2.82352941176471, size: 1 },\r\n // { x: 191.351351351351, y: 2.86274509803922, size: 1 },\r\n // { x: 192, y: 2.62745098039216, size: 1 },\r\n // { x: 213.405405405405, y: 2.03921568627451, size: 1 },\r\n // { x: 219.243243243243, y: 4.11764705882353, size: 1 },\r\n // { x: 234.810810810811, y: 2.43137254901961, size: 1 },\r\n // { x: 235.459459459459, y: 2.31372549019608, size: 1 },\r\n // { x: 236.756756756757, y: 3.29411764705882, size: 1 },\r\n // { x: 255.567567567568, y: 3.17647058823529, size: 1 },\r\n // { x: 256.216216216216, y: 2.62745098039216, size: 1 },\r\n // { x: 256.864864864865, y: 2.03921568627451, size: 1 },\r\n // { x: 278.27027027027, y: 2.7843137254902, size: 1 },\r\n // { x: 305.513513513513, y: 3.25490196078431, size: 1 },\r\n // { x: 346.378378378378, y: 3.17647058823529, size: 1 },\r\n // { x: 178.057553956835, y: 2.94117647058824, size: 1 },\r\n // { x: 284.892086330935, y: 2.94117647058824, size: 1 },\r\n // { x: 50.5035971223022, y: 4, size: 1 },\r\n // { x: 55.0359712230216, y: 2.86274509803922, size: 1 },\r\n // { x: 152.805755395683, y: 3.09803921568627, size: 1 },\r\n // { x: 162.517985611511, y: 1.92156862745098, size: 1 },\r\n // { x: 163.165467625899, y: 2, size: 1 },\r\n // { x: 163.812949640288, y: 2.15686274509804, size: 1 },\r\n // { x: 164.460431654676, y: 2.15686274509804, size: 1 },\r\n // { x: 183.884892086331, y: 2.90196078431373, size: 1 },\r\n // { x: 184.532374100719, y: 2.58823529411765, size: 1 },\r\n // { x: 185.179856115108, y: 2.58823529411765, size: 1 },\r\n // { x: 185.827338129496, y: 2.70588235294118, size: 1 },\r\n // { x: 316.618705035971, y: 3.01960784313725, size: 1 },\r\n // { x: 320.503597122302, y: 2.98039215686275, size: 1 },\r\n // { x: 321.798561151079, y: 2.94117647058824, size: 1 },\r\n // { x: 332.805755395683, y: 3.05882352941176, size: 1 },\r\n // { x: 18.1621621621622, y: 3.09803921568627, size: 1 },\r\n // { x: 18.8108108108108, y: 3.17647058823529, size: 1 },\r\n // { x: 40.2162162162162, y: 2.62745098039216, size: 1 },\r\n // { x: 41.5135135135135, y: 2.66666666666667, size: 1 },\r\n // { x: 42.1621621621622, y: 2.70588235294118, size: 1 },\r\n // { x: 46.0540540540541, y: 3.33333333333333, size: 1 },\r\n // { x: 62.2702702702703, y: 3.2156862745098, size: 1 },\r\n // { x: 62.9189189189189, y: 2.90196078431373, size: 1 },\r\n // { x: 63.5675675675676, y: 2.94117647058824, size: 1 },\r\n // { x: 83.6756756756757, y: 3.25490196078431, size: 1 },\r\n // { x: 184.216216216216, y: 3.29411764705882, size: 1 },\r\n // { x: 255.567567567568, y: 3.2156862745098, size: 1 },\r\n // { x: 299.675675675676, y: 3.05882352941176, size: 1 },\r\n // { x: 300.972972972973, y: 2.98039215686275, size: 1 }\r\n // ];\r\n \r\n // const data3 = [\r\n // { x: 0, y: 3.64705882352941, size: 1 },\r\n // { x: 0.647482014388489, y: 3.72549019607843, size: 1 },\r\n // { x: 1.29496402877698, y: 3.80392156862745, size: 1 },\r\n // { x: 1.94244604316547, y: 3.92156862745098, size: 1 },\r\n // { x: 2.58992805755396, y: 3.64705882352941, size: 1 },\r\n // { x: 3.23741007194245, y: 3.84313725490196, size: 1 },\r\n // { x: 3.88489208633094, y: 3.84313725490196, size: 1 },\r\n // { x: 4.53237410071942, y: 3.76470588235294, size: 1 },\r\n // { x: 5.17985611510791, y: 3.76470588235294, size: 1 },\r\n // { x: 5.8273381294964, y: 3.72549019607843, size: 1 },\r\n // { x: 6.47482014388489, y: 3.80392156862745, size: 1 },\r\n // { x: 7.12230215827338, y: 3.80392156862745, size: 1 },\r\n // { x: 7.76978417266187, y: 3.68627450980392, size: 1 },\r\n // { x: 8.41726618705036, y: 3.68627450980392, size: 1 },\r\n // { x: 9.06474820143885, y: 3.84313725490196, size: 1 },\r\n // { x: 9.71223021582734, y: 3.72549019607843, size: 1 },\r\n // { x: 10.3597122302158, y: 3.6078431372549, size: 1 },\r\n // { x: 11.0071942446043, y: 3.29411764705882, size: 1 },\r\n // { x: 11.6546762589928, y: 3.37254901960784, size: 1 },\r\n // { x: 12.3021582733813, y: 3.33333333333333, size: 1 },\r\n // { x: 12.9496402877698, y: 3.01960784313725, size: 1 },\r\n // { x: 13.5971223021583, y: 3.09803921568627, size: 1 },\r\n // { x: 14.2446043165468, y: 3.64705882352941, size: 1 },\r\n // ]","import React, { useEffect, useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Grid from '@material-ui/core/Grid';\r\n\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../../atoms/Dialog/ConfirmDialog';\r\nimport MessageDialog, { MessageDialogResponse } from '../../../atoms/Dialog/MessageDialog';\r\n\r\nimport { useModal } from '../../../../function/useModal';\r\nimport { ErrorCode } from '../../../../ErrorCode';\r\n\r\nimport PartialDischargeGrid from './PartialDischargeGrid';\r\nimport {\r\n GetPartialDischargeStatusData,\r\n V_PARTIAL_DISCHARGE_STATUS_ITEM,\r\n GetManCollectionStat,\r\n CheckManualTime,\r\n PutPartialDischargeStatusData,\r\n ChangeMancollectionStat\r\n} from './../PartialDischarge';\r\nimport { TableBaseStyle } from './../PartialDischargeStyle';\r\n\r\ntype PartialDischargeProps = {};\r\n\r\n\r\nconst PartialDischargePage: React.FC = (props: PartialDischargeProps) => {\r\n const tableStyle = TableBaseStyle();\r\n const { t } = useTranslation();\r\n const [itemList, setItemList] = useState([]);\r\n\r\n const [okCancelDialogOpen, setOkCancelDialogOpen] = React.useState(false);\r\n const [showMessage, setShowMessage] = React.useState('');\r\n const [selectDevIndex, setSelectDevIndex] = React.useState(0);\r\n const [flgCfmDlg, actCfmDlg] = useModal();\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n\r\n const cfmdlg = flgCfmDlg ? (\r\n \r\n ) : null;\r\n\r\n const msgdlg = flgMsgDlg ? : null;\r\n /**\r\n * 初期表示\r\n */\r\n useEffect(() => {\r\n console.debug(['useEffect init', props]);\r\n updateData();\r\n\r\n const interval = setInterval(() => {\r\n updateData();\r\n }, 10000);\r\n\r\n\r\n\r\n\r\n return () => {\r\n clearInterval(interval);\r\n };\r\n\r\n\r\n }, []);\r\n\r\n /**\r\n * 画面更新\r\n */\r\n const updateData = () => {\r\n let partialDischargeStatusItems: V_PARTIAL_DISCHARGE_STATUS_ITEM[] = [];\r\n\r\n //データの取得\r\n GetPartialDischargeStatusData()\r\n .then((res) => {\r\n console.debug(['--PartialDischargeStatusModel--', res]);\r\n\r\n if (res.ResponceData.ErrorCode !== ErrorCode.ERR_CODE_DATA_NONCATCH) {\r\n partialDischargeStatusItems = res.PartialDischargeStatusItems;\r\n partialDischargeStatusItems.forEach((row) => {\r\n row.manualButtonStat = GetManCollectionStat(partialDischargeStatusItems, row);\r\n console.debug([`row.manualButtonStat, ${row.manualButtonStat}`, row, row.manualButtonStat]);\r\n })\r\n }\r\n else {\r\n setDlgmsg(t('PartialDischargeCollectionPage.DEV_INDEXがnullまたは該当するPLC_NOが存在しません', 'DEV_INDEXがnullまたは該当するPLC_NOが存在しません'));\r\n actMsgDlg.open();\r\n }\r\n setItemList(partialDischargeStatusItems);\r\n }).catch(e => {\r\n setDlgmsg(t('PartialDischargeCollectionPage.データ取得中にエラーが発生しました', 'データ取得中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n console.debug([\"e\", e]);\r\n //setButtonEnable(false);\r\n }).finally(() => {\r\n //setButtonEnable(true);\r\n console.debug([\"update end\"]);\r\n });\r\n }\r\n\r\n /**\r\n * 行設定変更通知\r\n * @param target \r\n */\r\n const changePartialDischargeType = (target: V_PARTIAL_DISCHARGE_STATUS_ITEM) => {\r\n console.debug(['changePartialDischargeType - start', itemList, target]);\r\n setItemList(\r\n itemList.map((r) => (r.SET_NO === target.SET_NO) ? target : r)\r\n )\r\n GetManCollectionStat(itemList, target);\r\n PutPartialDischargeStatusData(target);\r\n\r\n setItemList(\r\n ChangeMancollectionStat(itemList, target)\r\n );\r\n\r\n console.debug(['changePartialDischargeType - end', itemList, target]);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n {cfmdlg}\r\n {msgdlg}\r\n \r\n\r\n )\r\n\r\n}\r\nexport default PartialDischargePage;","import React, { useEffect, useState, PureComponent } from 'react';\r\nimport { ScatterChart, Scatter, CartesianGrid, Tooltip, ResponsiveContainer, ZAxis, LineChart } from 'recharts';\r\nimport { XYPlot, XAxis, YAxis, HorizontalGridLines, VerticalGridLines, MarkSeries, LineSeries } from 'react-vis';\r\nimport { PartialDischargeGraphXYDataModel } from './../PartialDischarge';\r\n\r\n\r\ntype PartialDischargeGraphLeftChartProps = {\r\n phaseCharacteristicsGraphList: PartialDischargeGraphXYDataModel[] | undefined;\r\n};\r\n\r\ntype XYSizeItem = {\r\n x: number;\r\n y: number;\r\n size: number;\r\n}\r\n\r\nconst PartialDischargeGraphLeftChart: React.FC = (props) => {\r\n console.debug([\"PartialDischargeGraphLeftChart-start\"]);\r\n\r\n /**\r\n * グラフ表示の値を入手\r\n * @returns \r\n */\r\n const GetXYItems = (): XYSizeItem[] => {\r\n let dataList: XYSizeItem[] = [];\r\n let tempList = props.phaseCharacteristicsGraphList;\r\n\r\n if (tempList !== undefined) {\r\n tempList.map((row, index) => {\r\n let xValue = row.XValue !== undefined ? row.XValue : 0;\r\n let yValue = row.YValue !== undefined ? row.YValue : 0;\r\n let sizeValue = row.Size !== undefined ? row.Size : 1;\r\n dataList.push({\r\n x: xValue,\r\n y: yValue,\r\n size: sizeValue\r\n })\r\n });\r\n console.debug([\"PartialDischargeGraphLeftChart --dataList--\",\r\n props.phaseCharacteristicsGraphList, dataList, tempList]);\r\n }\r\n\r\n return dataList;\r\n }\r\n\r\n return (\r\n <>\r\n {props.phaseCharacteristicsGraphList !== undefined ?\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n : null}\r\n \r\n );\r\n}\r\nexport default PartialDischargeGraphLeftChart;\r\n\r\n","import React, { useEffect, useState, PureComponent } from 'react';\r\nimport { ScatterChart, Scatter, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, ZAxis, LineChart } from 'recharts';\r\nimport { scaleLog } from 'd3-scale';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { PartialDischargeGraphXYDataModel } from './../PartialDischarge';\r\n\r\ntype PartialDischargeGraphRightChartProps = {\r\n cumulativeFrequencyGraphList: PartialDischargeGraphXYDataModel[] | undefined;\r\n};\r\n\r\ntype XYItem = {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nconst scale = scaleLog().base(10);\r\nconst scaleX = scaleLog().base(Math.E);\r\n\r\nconst PartialDischargeGraphRightChart: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n console.debug([\"PartialDischargeGraphRightChart-start\"]);\r\n\r\n /**\r\n * グラフ表示の値を入手\r\n * @returns \r\n */\r\n const GetXYItems = (): XYItem[] => {\r\n let dataList: XYItem[] = [];\r\n let tempList = props.cumulativeFrequencyGraphList;\r\n\r\n if (tempList !== undefined) {\r\n tempList.map((row, index) => {\r\n let xValue = row.XValue !== undefined ? row.XValue : 0;\r\n let yValue = row.YValue !== undefined ? row.YValue : 0;\r\n if (xValue >= 1) {\r\n dataList.push({\r\n x: xValue,\r\n y: yValue\r\n })\r\n }\r\n\r\n })\r\n console.debug([\"PartialDischargeGraphRightChart --dataList--\",\r\n props.cumulativeFrequencyGraphList, dataList, tempList]);\r\n }\r\n\r\n return dataList;\r\n }\r\n\r\n return (\r\n <>\r\n {props.cumulativeFrequencyGraphList !== undefined ?\r\n \r\n \r\n \r\n props.toFixed(2)}\r\n tick={{ dy: 10 }}\r\n scale={scaleX}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n : null\r\n }\r\n \r\n )\r\n}\r\nexport default PartialDischargeGraphRightChart;","import React, { useEffect, useState, useMemo } from 'react';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport LoadingButton from '@mui/lab/LoadingButton';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport Paper from '@material-ui/core/Paper';\r\n\r\nimport dayjs from 'dayjs';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport ItemComboBox, { ComboBoxItemType } from '../../../atoms/ComboBox/ItemComboBox';\r\nimport ItemComboBoxStr, { ComboBoxItemTypeS } from '../../../atoms/ComboBox/ItemComboBoxStr';\r\nimport MessageDialog, { MessageDialogResponse } from '../../../atoms/Dialog/MessageDialog';\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../../atoms/Dialog/ConfirmDialog';\r\nimport DateInput from '../../../atoms/Calendar/DateInput';\r\nimport { ErrorCode } from '../../../../ErrorCode';\r\n\r\nimport { TableBaseStyle } from './../PartialDischargeStyle';\r\nimport {\r\n SelectDataType\r\n , GetPartialDischargeGraphDevListData\r\n , GetLatesTime\r\n , GetDataTimeList\r\n , GetPartialDischargeGraphItemData\r\n , PartialDischargeGraphXYDataModel\r\n , upDateSelectTimeList\r\n} from './../PartialDischarge';\r\nimport PartialDischargeGraphLeftChart from './PartialDischargeGraphLeftChart';\r\nimport PartialDischargeGraphRightChart from './PartialDischargeGraphRightChart';\r\nimport { useModal } from '../../../../function/useModal';\r\n\r\ntype PartialDischargeGraphPageProps = {\r\n};\r\n\r\n\r\nconst PartialDischargeGraphPage: React.FC = (props) => {\r\n const tableStyle = TableBaseStyle();\r\n const { t } = useTranslation();\r\n\r\n const [nameDevSetComboBoxItemList, setNameDevSetComboBoxItemList] = useState([]);//デバイスコンボボックス\r\n const [selectTimeComboBoxList, setSelectTimeComboBoxList] = useState([]); //時間コンボボックス\r\n const [selectViewTimeComboBoxList, setSelectViewTimeComboBoxList] = useState([]); //表示時間コンボボックス\r\n const [phaseCharacteristicsGraphList, setPhaseCharacteristicsGraphList] = useState();//位相特性グラフアイテム\r\n const [cumulativeFrequencyGraphList, setCumulativeFrequencyGraphList] = useState();//累積頻度グラフアイテム\r\n const [measureValue, setMeasureValue] = useState();//右側グラフのpd強度\r\n const [loading, setLoading] = React.useState(false);\r\n const [selectData, setSelectData] = useState({\r\n devIndex: 1,\r\n selectDate: dayjs(new Date()).format('YYYY-MM-DD'),\r\n selectTime: '',\r\n viwTime: 1\r\n });\r\n //const [buttonEnable, setButtonEnable] = useState(true);//表示ボタン\r\n const [graphsEnable, setGraphsEnable] = useState(false);//グラフアイテムの表示・非表示\r\n\r\n const [flgCfmDlg, actCfmDlg] = useModal();\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n\r\n const msgdlg = flgMsgDlg ? : null;\r\n\r\n /**\r\n * 初期処理\r\n */\r\n useEffect(() => {\r\n updateData();\r\n\r\n }, []);\r\n\r\n /**\r\n * 画面表示項目更新\r\n * @param target \r\n */\r\n const onChangeSelectData = (target: SelectDataType) => {\r\n setSelectData({ ...target });\r\n };\r\n\r\n /**\r\n * 画面初期表示処理\r\n */\r\n const updateData = () => {\r\n let nameDevSetList: ComboBoxItemType[] = [];\r\n let selectDateList: ComboBoxItemTypeS[] = [];\r\n let errorMessage: string = \"\";\r\n setLoading(true);\r\n setGraphsEnable(false);\r\n\r\n //表示時間コンボボックスデータ作成\r\n let viwTimeList: ComboBoxItemType[] = [];\r\n viwTimeList.push({ index: 10, name: t('PartialDischargeGraphPage.0_10秒', '0~10秒') });\r\n viwTimeList.push({ index: 5, name: t('PartialDischargeGraphPage.0_5秒', '0~5秒') });\r\n viwTimeList.push({ index: 1, name: t('PartialDischargeGraphPage.0_1秒', '0~1秒') });\r\n\r\n\r\n //機器情報取得\r\n GetPartialDischargeGraphDevListData()\r\n .then((res) => {\r\n console.debug(['--PartialDischargeCollectionModel--', res]);\r\n if (res.ResponceData.ErrorCode === ErrorCode.ERR_CODE_NONE) {\r\n //機器番号取得確認\r\n if (res.NameDevSetLists.length === 0) {\r\n errorMessage = t('PartialDischargeGraphPage.機器番号のデータがありませんでした', '機器番号のデータがありませんでした');\r\n throw new Error;\r\n }\r\n else {\r\n nameDevSetList = (\r\n res.NameDevSetLists.map((ci) => {\r\n return { index: ci.Key, name: ci.Disp };\r\n })\r\n );\r\n }\r\n }\r\n //最新ファイルの時間取得\r\n return GetLatesTime(nameDevSetList[0].index);\r\n }).then((res) => {\r\n console.debug(['useEffect -- GetLatesTime ret', res]);\r\n if (res.ResponceData.ResponseCode === ErrorCode.ERR_CODE_SYSTEM_ERROR) {\r\n errorMessage = t('PartialDischargeGraphPage.対象の最新時刻の取得に失敗しました', '対象の最新時刻の取得に失敗しました');\r\n throw new Error;\r\n }\r\n\r\n //時間コンボボックス更新\r\n if (res.DateTimeList.length === 0) {\r\n throw 'DateTimeListLengthError';;\r\n\r\n }\r\n res.DateTimeList.forEach((r) => {\r\n selectDateList.push(upDateSelectTimeList(r));\r\n })\r\n selectData.devIndex = nameDevSetList[0].index;\r\n if (selectDateList.length !== 0) {\r\n selectData.selectDate = dayjs(new Date(res.DateTimeList[0])).format('YYYY-MM-DD');\r\n selectData.selectTime = selectDateList[0].key;\r\n }\r\n else {\r\n selectData.selectDate = dayjs(new Date()).format('YYYY-MM-DD');\r\n selectData.selectTime = \"\";\r\n }\r\n\r\n selectData.viwTime = 1;\r\n setSelectData(selectData);\r\n setNameDevSetComboBoxItemList(nameDevSetList);\r\n setSelectTimeComboBoxList(selectDateList);\r\n setSelectViewTimeComboBoxList([...viwTimeList]);\r\n\r\n //各グラフのアイテム取得\r\n return GetPartialDischargeGraphItemData(\r\n selectData.devIndex\r\n , selectData.selectDate + \" \" + selectData.selectTime\r\n , selectData.viwTime\r\n );\r\n }).then((res) => {\r\n console.debug(['useEffect -- GetPartialDischargeGraphItemData', res]);\r\n if (res === null) {\r\n errorMessage = t('PartialDischargeGraphPage.グラフの取得に失敗しました', 'グラフの取得に失敗しました');\r\n throw new Error;\r\n }\r\n console.debug(['setSelectData -selectData', selectData]);\r\n\r\n setPhaseCharacteristicsGraphList(res.PhaseCharacteristicsGraphList);\r\n setCumulativeFrequencyGraphList(res.CumulativeFrequencyGraphList);\r\n setMeasureValue(res.MeasureValue);\r\n setGraphsEnable(true);\r\n }).catch((e) => {\r\n if (e === 'DateTimeListLengthError') {\r\n setSelectViewTimeComboBoxList([...viwTimeList]);\r\n setNameDevSetComboBoxItemList(nameDevSetList);\r\n console.debug([\"計測日の取得に失敗しました\", e, selectData])\r\n }\r\n else {\r\n setDlgmsg(errorMessage === \"\" ? t('PartialDischargeGraphPage.データ取得中にエラーが発生しました', 'データ取得中にエラーが発生しました') : errorMessage);\r\n actMsgDlg.open();\r\n console.debug([\"e\", e]);\r\n //setButtonEnable(true);\r\n setGraphsEnable(false);\r\n }\r\n\r\n }).finally(() => {\r\n //setButtonEnable(true);\r\n setLoading(false);\r\n\r\n console.debug([\"update end\"]);\r\n });\r\n };\r\n\r\n /**\r\n * 機器選択変更Event\r\n * @param value\r\n */\r\n const onDevIndexSelectDataChange = (e: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n const selectDevIndex = Number(e.target.value);\r\n let selectDateList: ComboBoxItemTypeS[] = [];\r\n //計測時間再取得処理\r\n GetLatesTime(selectDevIndex).then((res) => {\r\n res.DateTimeList.forEach((r) => {\r\n selectDateList.push(upDateSelectTimeList(r));\r\n });\r\n console.debug([\"onDevIndexSelectDataChange -selectDateList-\", selectDateList]);\r\n\r\n if (selectDateList.length !== 0) {\r\n selectData.selectDate = dayjs(new Date(res.DateTimeList[0])).format('YYYY-MM-DD');\r\n selectData.selectTime = selectDateList[0].key;\r\n //setButtonEnable(false);\r\n }\r\n else {\r\n selectData.selectDate = dayjs(new Date()).format('YYYY-MM-DD');\r\n selectData.selectTime = \"\";\r\n //setButtonEnable(true);\r\n }\r\n selectData.devIndex = selectDevIndex;\r\n console.debug([\"onDevIndexSelectDataChange -selectDevIndex-\", selectDevIndex, selectData]);\r\n\r\n setSelectTimeComboBoxList(selectDateList);\r\n onChangeSelectData(selectData);\r\n });\r\n };\r\n /**\r\n * 計測日(年月日)変更\r\n * @param value\r\n */\r\n const changeCalendarValueAction = (value: string) => {\r\n let selectDateList: ComboBoxItemTypeS[] = [];\r\n\r\n //計測時間再取得処理\r\n GetDataTimeList(selectData.devIndex, value).then((res) => {\r\n res.DateTimeList.forEach((r) => {\r\n selectDateList.push(upDateSelectTimeList(r));\r\n })\r\n console.debug([\"changeCalendarValueAction -upDateSelectTimeList\", selectDateList]);\r\n\r\n if (selectDateList.length !== 0) {\r\n selectData.selectTime = selectDateList[0].key;\r\n //setButtonEnable(false);\r\n }\r\n else {\r\n selectData.selectTime = \"\";\r\n //setButtonEnable(true);\r\n }\r\n selectData.selectDate = value;\r\n console.debug([\"changeCalendarValueAction -selectData\", selectData]);\r\n\r\n setSelectTimeComboBoxList(selectDateList);\r\n onChangeSelectData(selectData);\r\n });\r\n };\r\n /**\r\n * 計測日(時間)変更\r\n * @param value\r\n */\r\n const changeTimeValueAction = (e: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n const selectTimeIndex = String(e.target.value);\r\n setSelectData((prev) => ({ ...prev, selectTime: selectTimeIndex }));\r\n //setButtonEnable(false);\r\n };\r\n /**\r\n * 表示時間変更\r\n * @param e \r\n */\r\n const changeViewTimeSelectAction = (e: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n const viwTimeNo = Number(e.target.value);\r\n\r\n selectData.viwTime = viwTimeNo;\r\n console.debug([\"viwTimeNo\", viwTimeNo, selectData]);\r\n onChangeSelectData(selectData);\r\n // if (selectData.selectTime !== \"\") {\r\n // setButtonEnable(false);\r\n // }\r\n\r\n };\r\n\r\n /**\r\n * 表示ボタンクリック\r\n */\r\n const handleDispButtonClick = () => {\r\n setLoading(true);\r\n graphDataChange(selectData);\r\n //setButtonEnable(true);\r\n };\r\n /**\r\n * グラフの表示変更\r\n * @param value \r\n */\r\n const graphDataChange = (value: SelectDataType) => {\r\n //グラフ再読み込み\r\n GetPartialDischargeGraphItemData(\r\n selectData.devIndex\r\n , selectData.selectDate + \" \" + selectData.selectTime\r\n , selectData.viwTime\r\n ).then((res) => {\r\n console.debug([\"handleSelectDataChange\", res]);\r\n setPhaseCharacteristicsGraphList(res.PhaseCharacteristicsGraphList);\r\n setCumulativeFrequencyGraphList(res.CumulativeFrequencyGraphList);\r\n setMeasureValue(res.MeasureValue);\r\n setLoading(false);\r\n setGraphsEnable(true);\r\n }).catch(e => {\r\n setDlgmsg(t('PartialDischargeGraphPage.データ取得中にエラーが発生しました', 'データ取得中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n console.debug([\"e\", e]);\r\n //setButtonEnable(false);\r\n }).finally(() => {\r\n setLoading(false);\r\n\r\n console.debug([\"update end\"]);\r\n });\r\n\r\n };\r\n /**\r\n * 位相特性グラフの呼び出し\r\n */\r\n const leftChartControlMemo = useMemo(() => {\r\n return (\r\n \r\n \r\n \r\n );\r\n }, [phaseCharacteristicsGraphList]);\r\n /**\r\n * 累積頻度グラフの呼び出し\r\n */\r\n const rightChartControlMemo = useMemo(() => {\r\n return (\r\n \r\n );\r\n }, [cumulativeFrequencyGraphList])\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {/**機器番号・名称 */}\r\n
\r\n \r\n {/** 計測日 年月日 */}\r\n
\r\n \r\n \r\n \r\n {/** 計測日 時間*/}\r\n
\r\n \r\n {/** 表示時間*/}\r\n
\r\n \r\n {/** 表示*/}\r\n
\r\n }\r\n style={{ width: '100px' }}\r\n loading={loading}\r\n loadingPosition=\"start\"\r\n variant=\"contained\"\r\n color=\"primary\"\r\n //disabled={buttonEnable}\r\n onClick={handleDispButtonClick}\r\n >\r\n {t('PartialDischargeGraphPage.表示', '表示')}\r\n \r\n
\r\n
\r\n {/** 位相特性グラフ */}\r\n \r\n \r\n {graphsEnable === true ?\r\n \r\n \r\n \r\n {t('PartialDischargeGraphPage.PD強度', 'PD強度[V]')}\r\n \r\n \r\n {t('PartialDischargeGraphPage.位相特性', '位相特性')}\r\n \r\n \r\n \r\n {leftChartControlMemo}\r\n \r\n \r\n \r\n {t('PartialDischargeGraphPage.位相', '位相[°]')}\r\n \r\n \r\n
\r\n : null\r\n }\r\n
\r\n
\r\n {/** 累積頻度グラフ */}\r\n \r\n \r\n {graphsEnable === true ?\r\n \r\n \r\n \r\n {t('PartialDischargeGraphPage.発生頻度', '発生頻度[個]')}\r\n \r\n \r\n {t('PartialDischargeGraphPage.累積頻度', '累積頻度')}\r\n \r\n \r\n 60pps {measureValue}[v]\r\n \r\n \r\n \r\n {rightChartControlMemo}\r\n \r\n \r\n \r\n {t('PartialDischargeGraphPage.PD強度', 'PD強度[V]')}\r\n \r\n \r\n
\r\n : null\r\n }\r\n\r\n
\r\n
\r\n
\r\n {msgdlg}\r\n \r\n )\r\n}\r\nexport default PartialDischargeGraphPage;","import React, { FC, useEffect, useState, Dispatch, SetStateAction, useContext } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { Grid } from '@material-ui/core';\r\nimport SelectSettings, { MenuContents } from '../../organisms/SelectSettings';\r\n\r\nimport PartialDischargePage from './PartialDischargeGrid/PartialDischargePage';\r\nimport PartialDischargeGraphPage from './PartialDischargeGraph/PartialDischargeGraphPage';\r\n\r\nimport { useTranslation } from 'react-i18next';\r\nimport { AppContext } from '../../../App';\r\n\r\ntype PartialDischargeSettingProps = {}\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 350px)',\r\n },\r\n })\r\n);\r\n\r\nconst PartialDischargeSettingPage: React.FC = (props: PartialDischargeSettingProps) => {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n console.log('== PartialDischargeSettingPage ==');\r\n const { login } = useContext(AppContext);\r\n\r\n const menuList: MenuContents[] = [];\r\n\r\n menuList.push({\r\n name: t('PartialDischargeSettingPage.部分放電_状態一覧表示', '部分放電 状態一覧表示'),\r\n component: PartialDischargePage,\r\n tag: 'PartialDischarge',\r\n });\r\n menuList.push({\r\n name: t('PartialDischargeSettingPage.部分放電グラフ', '部分放電グラフ'),\r\n component: PartialDischargeGraphPage,\r\n tag: 'PartialDischargeGraph',\r\n });\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\nexport default PartialDischargeSettingPage;","import { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\n\r\nexport const TableBaseStyle = makeStyles(\r\n createStyles({\r\n //テーブルヘッダセル\r\n headerCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n },\r\n bodyCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n padding: '4px',\r\n height: '30px',\r\n },\r\n bodyCellCenter: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n padding: '4px',\r\n height: '30px',\r\n },\r\n //テキスト\r\n textField: {\r\n flexGrow: 1,\r\n height: '100%',\r\n width: '98%',\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n textAlign: \"center\",\r\n },\r\n })\r\n);\r\n\r\nexport const StorageCapacitySettingStyle = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 386px)',\r\n },\r\n paperRoot: {\r\n maxWidth: '700px',\r\n minWidth: '400px',\r\n padding: '5px',\r\n },\r\n })\r\n);\r\n\r\nexport const FooterBaseStyle = makeStyles(\r\n createStyles({\r\n buttonStyle: {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n },\r\n })\r\n);\r\n","import React from 'react';\r\nimport Button from '@material-ui/core/Button';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport { FooterBaseStyle } from './StorageCapacitySettingStyle';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ntype StorageCapacitySettingFooterProps = {\r\n onClickSaveButton: () => void;\r\n onClickCancelButton: () => void;\r\n buttonEnable: boolean;\r\n};\r\n\r\nconst StorageCapacitySettingFooter: React.FC = (props) => {\r\n const footerStyle = FooterBaseStyle();\r\n const { t, i18n } = useTranslation();\r\n\r\n return (\r\n \r\n \r\n {\r\n props.onClickSaveButton();\r\n }}\r\n >\r\n {t('StorageCapacitySettingFooter.保存', '保存')}\r\n \r\n \r\n \r\n props.onClickCancelButton()}\r\n >\r\n {t('StorageCapacitySettingFooter.中止', '中止')}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default StorageCapacitySettingFooter;\r\n","import { ErrorCode, ResponceDataType } from \"../../../../ErrorCode\";\r\n\r\n/**\r\n *ストレージ容量設定\r\n */\r\nexport type FILE_STORAGE_PERIOD = {\r\n SAV_INDEX: number;\r\n FREE_SPACE: number;\r\n FILE_RET_PERIOD: number;\r\n\r\n /// 編集フラグ\r\n isEdit: boolean;\r\n}\r\n/**\r\n * デフォルトデータ作成\r\n * @returns\r\n */\r\nexport const CreateFILE_STORAGE_PERIOD = () : FILE_STORAGE_PERIOD => {\r\n let ret: FILE_STORAGE_PERIOD = {\r\n SAV_INDEX: 0,\r\n FREE_SPACE: 1,\r\n FILE_RET_PERIOD: 1,\r\n isEdit : false,\r\n };\r\n return ret;\r\n}\r\n\r\n/**\r\n * ストレージ設定取得\r\n * @returns\r\n */\r\nexport const GetStorageCapacitySetting = (): Promise => {\r\n console.debug([\"api/StorageCapacitySetting/ get go\"]);\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/StorageCapacitySetting/\", {\r\n method: 'GET',\r\n headers: { pageName: 'StorageCapacitySettingPage' },\r\n })\r\n .then((res) => {\r\n if (!res.ok) {\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n reject(message);\r\n }\r\n else {\r\n return res.json();\r\n }\r\n })\r\n .then((result: FILE_STORAGE_PERIOD) => {\r\n if (result != null) {\r\n //編集フラグ初期化\r\n result.isEdit = false;\r\n console.debug([\"api/StorageCapacitySetting/ get ok \", result]);\r\n resolve(result);\r\n }\r\n else {\r\n reject('Invalidate response');\r\n }\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n reject(error);\r\n })\r\n })\r\n};\r\n\r\n\r\n\r\n/**\r\n * ストレージ設定更新\r\n * @returns\r\n */\r\nexport const PutStorageCapacitySetting = (settings : FILE_STORAGE_PERIOD): Promise => {\r\n console.debug([\"api/StorageCapacitySetting/ put go\",\"params\",settings]);\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/StorageCapacitySetting/\", {\r\n method: \"put\",\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n pageName: 'StorageCapacitySettingPage'\r\n },\r\n body: JSON.stringify(settings)\r\n }).then((res) => {\r\n if (!res.ok) {\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n reject(message);\r\n }\r\n return res.json();\r\n }).then((result: ResponceDataType) => {\r\n console.debug([\"api/StorageCapacitySetting/ put ok\", \"result\", result]);\r\n resolve(result);\r\n },\r\n (error) => {\r\n console.debug([\"api/StorageCapacitySetting/ put errro\",\"params\",settings]);\r\n console.error(error);\r\n reject(error);\r\n })\r\n });\r\n}\r\n\r\n\r\n/**\r\n * 編集チェック\r\n */\r\nexport const CheckStorageCapacitySetting = (targetModel: FILE_STORAGE_PERIOD): boolean => {\r\n return targetModel.isEdit;\r\n};\r\n","import React, { useEffect, useState } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { TableBaseStyle, StorageCapacitySettingStyle } from './StorageCapacitySettingStyle';\r\nimport { FILE_STORAGE_PERIOD } from './StorageCapacitySetting';\r\nimport NumericEntry_inputEx from './../../../atoms/Input/NumericEntry_inputEx';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ntype StorageCapacitySettingEditBodyProps = {\r\n storageSetting: FILE_STORAGE_PERIOD;\r\n onChangeData: (targetRow: FILE_STORAGE_PERIOD) => void;\r\n};\r\n\r\nconst StorageCapacitySettingEditBody: React.FC = (props) => {\r\n const tableStyle = TableBaseStyle();\r\n const pageStyle = StorageCapacitySettingStyle();\r\n\r\n const [storageSetting, setStorageSetting] = useState(props.storageSetting); //データ初期値\r\n const { t, i18n } = useTranslation();\r\n\r\n /**\r\n * データ変更通知\r\n */\r\n useEffect(() => {\r\n //データ初期値にセットされている内容を再描画時に変えたい場合、useEffectが必要\r\n console.debug(['StorageCapacitySettingEditBody - useEffect props.storageSetting', props.storageSetting]);\r\n setStorageSetting({ ...props.storageSetting });\r\n }, [props.storageSetting]);\r\n /**\r\n * 上位にデータ変更通知\r\n * @param editRow 編集対象データ\r\n * @param isEdit 編集フラグ\r\n * @returns\r\n */\r\n const onChangeData = (editRow: FILE_STORAGE_PERIOD, editFlg: boolean) => {\r\n if (editFlg) {\r\n //console.debug(['onChangeData - editRow,baseData', editRow, props.storageSetting]);\r\n props.onChangeData(editRow);\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {t('StorageCapacitySettingEditBody.ストレージ容量', 'ストレージ容量(GB)')}\r\n \r\n \r\n {\r\n if (props.storageSetting.FREE_SPACE !== val) {\r\n storageSetting.FREE_SPACE = val;\r\n onChangeData(storageSetting, true);\r\n console.debug(['NumericEntry_inputEx - onChange - FREE_SPACE', val, storageSetting]);\r\n }\r\n }}\r\n />\r\n \r\n \r\n {t('StorageCapacitySettingEditBody.ファイル保存期間', 'ファイル保存期間(日)')}\r\n \r\n \r\n {\r\n if (props.storageSetting.FILE_RET_PERIOD !== val) {\r\n storageSetting.FILE_RET_PERIOD = val;\r\n onChangeData(storageSetting, true);\r\n console.debug(['NumericEntry_inputEx - onChange - FILE_RET_PERIOD', val, storageSetting]);\r\n }\r\n }}\r\n />\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default StorageCapacitySettingEditBody;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Grid from '@material-ui/core/Grid';\r\n\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../../atoms/Dialog/ConfirmDialog';\r\nimport MessageDialog, { MessageDialogResponse } from '../../../atoms/Dialog/MessageDialog';\r\nimport { SettingsState } from '../../../organisms/SelectSettings';\r\n\r\nimport { useModal } from '../../../../function/useModal';\r\n\r\nimport StorageCapacityFooter from './StorageCapacitySettingFooter';\r\nimport {\r\n FILE_STORAGE_PERIOD,\r\n GetStorageCapacitySetting,\r\n CreateFILE_STORAGE_PERIOD,\r\n PutStorageCapacitySetting,\r\n CheckStorageCapacitySetting,\r\n} from './StorageCapacitySetting';\r\nimport StorageCapacityEditBody from './StorageCapacitySettingEditBody';\r\n\r\ntype StorageCapacitySettingPageProps = { editData: SettingsState };\r\n\r\n/**\r\n *ストレージ容量設定\r\n * @returns\r\n */\r\nconst StorageCapacitySettingPage: React.FC = (props) => {\r\n const [storageSetting, setStorageSetting] = useState(CreateFILE_STORAGE_PERIOD());\r\n\r\n const [flgCfmDlg, actCfmDlg] = useModal();\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n const [buttonEnable, setButtonEnable] = useState(true);\r\n const { t, i18n } = useTranslation();\r\n const cfmdlg = flgCfmDlg ? (\r\n \r\n ) : null;\r\n\r\n const msgdlg = flgMsgDlg ? : null;\r\n\r\n useEffect(() => {\r\n console.debug(['useEffect props.editData.CancelCondition', props]);\r\n props.editData.SaveFunction = saveAction2;\r\n props.editData.IsUpdate = false;\r\n }, [props.editData.CancelCondition]);\r\n /**\r\n * 初期表示 useEffect\r\n */\r\n useEffect(() => {\r\n console.debug(['useEffect init', props]);\r\n upDatePage();\r\n }, []);\r\n\r\n /**\r\n * 画面更新\r\n */\r\n const upDatePage = () => {\r\n setButtonEnable(false);\r\n GetStorageCapacitySetting()\r\n .then((r: FILE_STORAGE_PERIOD) => {\r\n console.debug([' upDatePage - OK ', r]);\r\n setStorageSetting(r);\r\n })\r\n .catch((e) => {\r\n setDlgmsg(\r\n t('StorageCapacitySettingPage.データ取得中にエラーが発生しました', 'データ取得中にエラーが発生しました')\r\n );\r\n actMsgDlg.open();\r\n console.error(['upDatePage - ERROR', e]);\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n };\r\n\r\n /**\r\n *保存ボタン\r\n * @param index\r\n */\r\n const saveAction = () => {\r\n console.debug(['saveAction', storageSetting]);\r\n if (CheckStorageCapacitySetting(storageSetting)) {\r\n setDlgmsg(\r\n t(\r\n 'StorageCapacitySettingPage.編集内容を保存します。\\nよろしいですか?',\r\n '編集内容を保存します。\\nよろしいですか?'\r\n )\r\n );\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n setButtonEnable(false);\r\n PutStorageCapacitySetting(storageSetting)\r\n .then((r) => {\r\n setDlgmsg(t('StorageCapacitySettingPage.保存が正常に終了しました', '保存が正常に終了しました'));\r\n actMsgDlg.open();\r\n upDatePage(); //再描画\r\n props.editData.IsUpdate = false;\r\n console.debug('saveAction ok');\r\n })\r\n .catch((r) => {\r\n setDlgmsg(t('StorageCapacitySettingPage.保存中にエラーが発生しました', '保存中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n console.error(['saveAction error', r]);\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n })\r\n .cancel(() => {\r\n console.debug('saveAction cancel');\r\n });\r\n } else {\r\n console.debug(['saveAction no edit', storageSetting]);\r\n }\r\n };\r\n\r\n /**\r\n * タブ切替時に動作\r\n * @param param\r\n * @returns\r\n */\r\n const saveAction2 = (param: object): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const sp = param as FILE_STORAGE_PERIOD;\r\n console.debug(['★saveAction2', param]);\r\n setButtonEnable(false);\r\n PutStorageCapacitySetting(sp)\r\n .then((r) => {\r\n props.editData.IsUpdate = false;\r\n console.debug('saveAction ok');\r\n resolve('done');\r\n })\r\n .catch((r) => {\r\n setDlgmsg(t('StorageCapacitySettingPage.保存中にエラーが発生しました', '保存中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n console.error(['saveAction error', r]);\r\n reject('data error');\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n });\r\n };\r\n\r\n /**\r\n *キャンセルボタン押下\r\n */\r\n const cancelAction = () => {\r\n console.debug(['cancelAction', storageSetting]);\r\n if (CheckStorageCapacitySetting(storageSetting)) {\r\n setDlgmsg(\r\n t(\r\n 'StorageCapacitySettingPage.保存していないデータを破棄します。\\nよろしいですか?',\r\n '保存していないデータを破棄します。\\nよろしいですか?'\r\n )\r\n );\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n upDatePage(); //再描画\r\n props.editData.IsUpdate = false;\r\n console.debug('cancelAction ok');\r\n })\r\n .cancel(() => {\r\n console.debug('cancelAction cancel');\r\n });\r\n } else {\r\n console.debug(['cancelAction - no edit', storageSetting]);\r\n }\r\n };\r\n\r\n /**\r\n *ストレージ設定変更通知\r\n * @returns\r\n */\r\n const changeActionStorageSetting = (target: FILE_STORAGE_PERIOD) => {\r\n console.debug(['changeActionStorageSetting - start', storageSetting, target]);\r\n target.isEdit = true;\r\n storageSetting.FILE_RET_PERIOD = target.FILE_RET_PERIOD;\r\n storageSetting.SAV_INDEX = target.SAV_INDEX;\r\n storageSetting.FREE_SPACE = target.FREE_SPACE;\r\n storageSetting.isEdit = target.isEdit;\r\n props.editData.Target = storageSetting;\r\n props.editData.IsUpdate = true;\r\n console.debug(['changeActionStorageSetting - end', storageSetting, target]);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {cfmdlg}\r\n {msgdlg}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default StorageCapacitySettingPage;\r\n","import i18next from 'i18next';\r\n\r\n// ユーザー認証\r\nexport type AuthenticateType = {\r\n USER_ID: string;\r\n PASSWORD: string;\r\n};\r\n\r\n// ユーザー情報レスポンス\r\nexport type USER_INFO = {\r\n USER_ID: string;\r\n USER_NAME: string;\r\n DEF: boolean;\r\n SET_AUTH: boolean;\r\n SYSTEM_AUTH: boolean;\r\n REP_AUTH: boolean;\r\n IS_IOT: boolean;\r\n SystemSettingModel: SystemSettingModelType;\r\n ResponceData: ResponceDataType;\r\n}\r\n\r\n// ユーザー情報更新\r\nexport type USER_MNG = {\r\n ENT_NO: number;\r\n USER_ID: string;\r\n PASSWORD: string;\r\n USER_NAME: string;\r\n DEF: number;\r\n SET_AUTH: number;\r\n REP_AUTH: number;\r\n SYSTEM_AUTH: number;\r\n PASSWORD_EXPIRATION: string;\r\n USER_LOCK: number;\r\n PASSWORD_INPUTERROR_COUNT: number;\r\n MAIL_ADDRESS: string;\r\n TWO_PASSWORD_EXPIRATION: string;\r\n TWO_PASSWORD: string;\r\n isEdit: boolean;\r\n hasPassword: boolean;\r\n};\r\n\r\n// レスポンス情報\r\nexport type ResponceDataType = {\r\n ResponseCode: number;\r\n ErrorCode: number;\r\n ResponseMessage: string;\r\n ErrorMessage: string;\r\n};\r\n\r\n// パスワード更新情報\r\nexport type UpdatePasswordType = {\r\n USER_ID: string;\r\n PASSWORD: string;\r\n OLD_PASSWORD: string;\r\n};\r\n\r\n/**\r\n * システム設定情報\r\n */\r\nexport type SystemSettingModelType = {\r\n //3次元グラフボタン有効無効\r\n ThreeDButtonEnabled: number;\r\n //レポートボタン有効無効\r\n ReportButtonEnabled: number;\r\n //オフライン判定ボタン有効無効\r\n OffLineJudgeButtonEnabled: number;\r\n //コナンエアー画面有効無効\r\n ConanairEnabled: number;\r\n //Emcb画面有効無効\r\n EmcbEnabled: number;\r\n //部分放電画面有効無効\r\n PartialDischargeEnabled: number;\r\n //\"ワンタイムパスワード処理有効無効\r\n OnetimePasswordEnable: number;\r\n}\r\n\r\n/**\r\n * 送信アクションレスポンス\r\n */\r\nexport type SendPasswordInfo = {\r\n USER_ID: string;\r\n ResponceData: ResponceDataType;\r\n OnetimePasswordValidityTime: number;\r\n AdminUserId: boolean;\r\n}\r\n\r\nexport type EntryAdressModel = {\r\n USER_ID: string;\r\n MAIL_ADRESS: string;\r\n};\r\n/**\r\n * メールアドレス登録レスポンス\r\n */\r\nexport type EntryMailAdressInfo = {\r\n USER_ID: string;\r\n MAIL_ADRESS: string;\r\n ResponceData: ResponceDataType;\r\n}\r\n\r\nexport const GetUserInfos = (): Promise => {\r\n //console.debug([\"GetUserInfos()\"]);\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/UserManage/Infos\")\r\n .then((res) => res.json())\r\n .then((result: USER_MNG[]) => {\r\n if (GetUserInfosValidate(result)) resolve(result);\r\n\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log(error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n};\r\nconst GetUserInfosValidate = (data: USER_MNG[]): boolean => {\r\n if (data === undefined) {\r\n return false;\r\n }\r\n return true;\r\n};\r\n\r\n/**\r\n * ユーザー認証処理\r\n * @param user \r\n * @param password \r\n * @returns \r\n */\r\nexport const AuthenticateUser = (user: string, password: string): Promise => {\r\n const param: AuthenticateType = { USER_ID: user, PASSWORD: password };\r\n\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/UserManage/Authenticate\", {\r\n method: 'post',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(param),\r\n })\r\n .then((res) => res.json())\r\n .then((result: USER_INFO) => resolve(result))\r\n .catch(reason => reject(reason));\r\n });\r\n}\r\n\r\nexport const UpdateUserInfos = (targetRows: USER_MNG[]): Promise => {\r\n console.debug([\"UpdateUserInfos-START\", /* targetRows */]);\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/UserManage/UpdateRows\", {\r\n method: 'post',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(targetRows),\r\n })\r\n .then((res) => res.json())\r\n .then((result: ResponceDataType) => resolve(result))\r\n .catch(reason => reject(reason));\r\n\r\n });\r\n}\r\n\r\nexport const UpdatePassword = (user: string, password: string, oldPassword: string): Promise => {\r\n const param: UpdatePasswordType = { USER_ID: user, PASSWORD: password, OLD_PASSWORD: oldPassword };\r\n\r\n\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/UserManage/UpdatePassword\", {\r\n method: 'post',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(param),\r\n })\r\n .then((res) => res.json())\r\n .then((result: ResponceDataType) => resolve(result))\r\n .catch(reason => reject(reason));\r\n });\r\n}\r\n\r\n\r\n/**\r\n * パスワードが有効かを確認、英語、数字が少なくとも1個混在していること\r\n * @param password チェック対象のパスワード\r\n */\r\nexport const CheckPasswordFormat = (password: string, translation: any): string => {\r\n const regex = /^((?=.*[A-Z])|(?=.*[a-z]))(?=.*[0-9])/;\r\n\r\n if (password.length < 8) {\r\n return i18next.t('LoginUserSettingPage.パスワードは8文字以上入力してください', 'パスワードは8文字以上入力してください');\r\n }\r\n if (password.length > 40) {\r\n return i18next.t('LoginUserSettingPage.パスワードは12文字以内で入力してください', 'パスワードは40文字以内で入力してください');\r\n }\r\n if (!regex.test(password)) {\r\n return i18next.t('LoginUserSettingPage.パスワードには次の文字種を含めてください_英字_数字', 'パスワードには次の文字種を含めてください 英字 数字');\r\n }\r\n return \"\";\r\n}\r\n\r\n/**\r\n * 2段階認証処理が有効か確認する処理\r\n * @returns \r\n */\r\nexport const GetLoginMode = (): Promise => {\r\n console.debug([\"GetLoginMode()\"]);\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/UserManage/GetLoginMode\")\r\n .then((res) => res.json())\r\n .then((result: boolean) => {\r\n resolve(result);\r\n\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log([\"GetLoginMode\", error]);\r\n reject(error);\r\n }\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * ログアウト処理\r\n * @returns \r\n */\r\nexport const GetLogoutMode = (): Promise => {\r\n console.debug([\"GetLogoutMode()\"]);\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/UserManage/GetLogoutMode\")\r\n .then((res) => res.json())\r\n .then((result: boolean) => {\r\n resolve(result);\r\n\r\n reject('Invalidate response');\r\n },\r\n (error) => {\r\n console.log([\"GetLogoutMode\", error]);\r\n reject(error);\r\n }\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * 2段階認証パスワード送信処理\r\n * @param user \r\n * @param password \r\n * @returns \r\n */\r\nexport const SendMailAction = (user: string, password: string): Promise => {\r\n const param: AuthenticateType = { USER_ID: user, PASSWORD: password };\r\n\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/UserManage/SendPassword\", {\r\n method: 'post',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(param),\r\n })\r\n .then((res) => res.json())\r\n .then((result: SendPasswordInfo) => resolve(result))\r\n .catch(reason => reject(reason));\r\n });\r\n\r\n}\r\n\r\n/**\r\n * 2段階認証 ログイン処理\r\n * @param user \r\n * @param password \r\n * @returns \r\n */\r\nexport const OnetimeAuthenticate = (user: string, password: string): Promise => {\r\n const param: AuthenticateType = { USER_ID: user, PASSWORD: password };\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/UserManage/OnetimeAuthenticate\", {\r\n method: 'post',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(param),\r\n })\r\n .then((res) => res.json())\r\n .then((result: USER_INFO) => resolve(result))\r\n .catch(reason => reject(reason));\r\n });\r\n\r\n}\r\n\r\n/**\r\n * メールアドレス登録処理\r\n * @param user \r\n * @param adress \r\n * @returns \r\n */\r\nexport const EntryMailAction = (user: string, adress: string): Promise => {\r\n const param: EntryAdressModel = { USER_ID: user, MAIL_ADRESS: adress };\r\n\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/UserManage/EntryMailAdress\", {\r\n method: 'post',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(param),\r\n })\r\n .then((res) => res.json())\r\n .then((result: EntryMailAdressInfo) => resolve(result))\r\n .catch(reason => reject(reason));\r\n });\r\n}","import { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nexport const TableBaseStyle = makeStyles(\r\n createStyles({\r\n //テーブルヘッダセル\r\n headerCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n },\r\n bodyCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n minWidth: '100px',\r\n padding: 1,\r\n height: '30px',\r\n\r\n },\r\n //テキスト\r\n textField: {\r\n flexGrow: 1,\r\n height: '100%',\r\n width: '100%',\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n },\r\n })\r\n);\r\n\r\nexport const LoginUserSettingStyle = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 316px)',\r\n },\r\n paper: {\r\n background: '#FFFFEE',\r\n },\r\n buttonStyle: {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n },\r\n })\r\n);\r\n","import React, { useEffect, useState } from 'react';\r\nimport TextField from '@mui/material/TextField';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Box from '@mui/material/Box';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ntype LoginUserSettingPassWordChangeBodyProps = {\r\n updatePassword: (key: string, value: string) => void;\r\n hasCurrentPass: boolean;\r\n}\r\n\r\nconst LoginUserSettingPassWordChangeBody: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const onChangeText = (key: string) => (event: React.ChangeEvent) => {\r\n props.updatePassword(key, event.target.value);\r\n };\r\n\r\n // パスワードが無いとき(=初期状態)は現在のパスワードを入力できなくする\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default LoginUserSettingPassWordChangeBody;\r\n","import React, { useEffect, useState, useContext } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Paper from '@mui/material/Paper';\r\n\r\nimport { ErrorCode } from '../../../../ErrorCode';\r\n\r\nimport OKCancelDialog from '../../../atoms/Dialog/OKCancelDialog';\r\nimport SimpleDialog from '../../../atoms/Dialog/SimpleDialog';\r\n\r\nimport { passwordCheckType } from './LoginUserSetting';\r\nimport { TableBaseStyle, LoginUserSettingStyle } from './LoginUserSettingStyle';\r\n\r\nimport LoginUserSettingPassWordChangeBody from './LoginUserSettingPassWordChangeBody';\r\nimport { USER_MNG, GetUserInfos, UpdatePassword, CheckPasswordFormat } from '../../../../function/UserManageModel';\r\nimport { AppContext } from '../../../../App';\r\n\r\ntype LoginUserSettingGridProps = {\r\n tableContainerStyle: string;\r\n updateCells: (cells: USER_MNG[]) => void;\r\n cellRefresh: string;\r\n removeIndexes: number[];\r\n};\r\n\r\nconst LoginUserSettingGrid: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const tableBase = TableBaseStyle();\r\n\r\n const [dialogOpen, setDialogOpen] = React.useState(false);\r\n const [messageDialogOpen, setMessageDialogOpen] = React.useState(false);\r\n const [showMessage, setShowMessage] = React.useState('');\r\n\r\n const [passCheck, setPassCheck] = React.useState({\r\n indexNo: 0,\r\n nowPassword: '',\r\n newPassword: '',\r\n confirmationPassword: '',\r\n hasPassword: false,\r\n });\r\n\r\n const [cells, setCells] = useState([]);\r\n\r\n const { login } = useContext(AppContext);\r\n //ワンタイムパスワード有効フラグ\r\n const addressUseenable = login.GetSystemSettingModel.OnetimePasswordEnable === 1 ? true : false;\r\n /**\r\n * 表示更新\r\n */\r\n useEffect(() => {\r\n GetUserInfos().then((result: USER_MNG[]) => {\r\n //console.debug(['GetUserInfos result', result]);\r\n result.forEach((um) => {\r\n um.hasPassword = um.USER_ID !== '' && um.PASSWORD !== '';\r\n um.PASSWORD = '';\r\n });\r\n setCells([...result]);\r\n props.updateCells([...result]);\r\n });\r\n }, [props.cellRefresh]);\r\n\r\n useEffect(() => {\r\n props.removeIndexes.forEach((rmv) => {\r\n cells[rmv].USER_ID = '';\r\n cells[rmv].PASSWORD = '';\r\n cells[rmv].SET_AUTH = 0;\r\n cells[rmv].DEF = 0;\r\n cells[rmv].MAIL_ADDRESS = '';\r\n });\r\n setCells([...cells]);\r\n props.updateCells([...cells]);\r\n }, [props.removeIndexes]);\r\n\r\n /**\r\n * ダイアログで変更した値を管理\r\n * @param key\r\n * @param value\r\n */\r\n const updatecheckPassword = (key: string, value: string): void => {\r\n var _passwordCheck = { ...passCheck };\r\n _passwordCheck = { ..._passwordCheck, [key]: value };\r\n setPassCheck(_passwordCheck);\r\n };\r\n\r\n /**\r\n * グリッド上で値を変更した内容を管理\r\n * @param index\r\n * @param key\r\n * @returns\r\n */\r\n const onChangeCell = (index: number, key: string) => (event: React.ChangeEvent) => {\r\n //console.debug(['onChangeCell()', index, key]);\r\n const _cells = [...cells];\r\n _cells[index] = { ..._cells[index], [key]: event.target.value };\r\n _cells[index].isEdit = true;\r\n setCells(_cells);\r\n props.updateCells(_cells);\r\n };\r\n\r\n /**\r\n * グリッド上のチェック変更の管理\r\n */\r\n const onChangeSwitchCell = (index: number, key: string) => (event: React.ChangeEvent) => {\r\n const _cells = [...cells];\r\n\r\n //console.debug(['onChangeSwitchCell()', index, key, \" event.target.checke:\", event.target.checked, _cells]);\r\n //デフォルトチェックボックス設定時はユーザID未選択、重複チェックは除外\r\n if ('DEF' == key) {\r\n if (!_cells[index].USER_ID) {\r\n console.debug(['none user', _cells[index].USER_ID]);\r\n return;\r\n }\r\n\r\n const defIdx = _cells.findIndex((element) => element.DEF != 0);\r\n console.debug(['defIdx', defIdx]);\r\n if (defIdx >= 0) {\r\n _cells[defIdx] = { ..._cells[defIdx], [key]: 0 };\r\n _cells[defIdx].isEdit = true;\r\n }\r\n }\r\n\r\n _cells[index] = { ..._cells[index], [key]: event.target.checked === true ? 1 : 0 };\r\n _cells[index].isEdit = true;\r\n setCells(_cells);\r\n props.updateCells(_cells);\r\n };\r\n\r\n /**\r\n * パスワード変更ダイアログ\r\n */\r\n const handlePasswordCheckDialogShow = (indexNo: number) => {\r\n setPassCheck({\r\n indexNo: indexNo,\r\n nowPassword: cells[indexNo].PASSWORD,\r\n newPassword: '',\r\n confirmationPassword: '',\r\n hasPassword: cells[indexNo].hasPassword,\r\n });\r\n setDialogOpen(true);\r\n };\r\n\r\n /**\r\n *パスワード変更処理\r\n */\r\n const handlePasswordCheckOkButton = () => {\r\n let errorMsg = CheckPasswordFormat(passCheck.newPassword, t);\r\n if (errorMsg !== '') {\r\n setShowMessage(errorMsg);\r\n setMessageDialogOpen(true);\r\n return;\r\n }\r\n if (passCheck.newPassword !== passCheck.confirmationPassword) {\r\n setShowMessage(\r\n t('LoginUserSettingPage.新しいパスワードと確認用が一致しません', '新しいパスワードと確認用が一致しません')\r\n );\r\n setMessageDialogOpen(true);\r\n return;\r\n }\r\n\r\n if (passCheck.hasPassword) {\r\n // 現在のパスワードがあるときのみ\r\n UpdatePassword(cells[passCheck.indexNo].USER_ID, passCheck.nowPassword, passCheck.newPassword).then((r) => {\r\n //パスワード変更を反映\r\n if (r.ErrorCode == 0) {\r\n setShowMessage(t('LoginUserSettingPage.パスワードが変更されました', 'パスワードが変更されました'));\r\n setMessageDialogOpen(true);\r\n setDialogOpen(false);\r\n } else if (r.ErrorCode == ErrorCode.ERR_CODE_USER_NO_USER) {\r\n setShowMessage(t('LoginUserSettingPage.選択したユーザID情報が不正です', '選択したユーザID情報が不正です'));\r\n setMessageDialogOpen(true);\r\n } else if (r.ErrorCode == ErrorCode.ERR_CODE_USER_PASSWORD_NOMATCH) {\r\n setShowMessage(t('LoginUserSettingPage.現在のパスワードが違います', '現在のパスワードが違います'));\r\n setMessageDialogOpen(true);\r\n } else if (r.ErrorCode == ErrorCode.ERR_CODE_USER_PASSWORD_OLD) {\r\n setShowMessage(\r\n t(\r\n 'LoginUserSettingPage.過去に使用したパスワードは使用できません',\r\n '過去に使用したパスワードは使用できません'\r\n )\r\n );\r\n setMessageDialogOpen(true);\r\n } else if (r.ErrorCode == ErrorCode.ERR_CODE_SYSTEM_ERROR) {\r\n setShowMessage(t('LoginUserSettingPage.システムエラーが発生しました', 'システムエラーが発生しました'));\r\n setMessageDialogOpen(true);\r\n }\r\n });\r\n } else {\r\n const _cells = [...cells];\r\n _cells[passCheck.indexNo].PASSWORD = passCheck.newPassword;\r\n _cells[passCheck.indexNo].isEdit = true;\r\n setCells(_cells);\r\n props.updateCells(_cells);\r\n setDialogOpen(false);\r\n }\r\n };\r\n const getPasswordDisp = (row: USER_MNG): string => {\r\n var ret = '';\r\n\r\n if (row.hasPassword || row.PASSWORD != '') {\r\n ret = '●●●●';\r\n }\r\n return ret;\r\n };\r\n console.debug(['- 画面描画開始 -', cells]);\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {t('LoginUserSettingPage.No', 'No')}\r\n \r\n \r\n {t('LoginUserSettingPage.ユーザーID', 'ユーザーID')}\r\n \r\n \r\n {t('LoginUserSettingPage.パスワード', 'パスワード')}\r\n \r\n {addressUseenable == true ?\r\n \r\n {t('LoginUserSettingPage.メールアドレス', 'メールアドレス')}\r\n \r\n : null\r\n }\r\n \r\n {t('LoginUserSettingPage.設定変更', '設定変更')}\r\n \r\n \r\n {t('LoginUserSettingPage.システム変更', 'システム変更')}\r\n \r\n \r\n {t('LoginUserSettingPage.ユーザロック', 'ユーザロック')}\r\n \r\n \r\n \r\n \r\n {cells.map((row, index) => {\r\n return (\r\n \r\n {/**No */}\r\n \r\n {row.ENT_NO}\r\n \r\n {/**ユーザーID */}\r\n \r\n \r\n \r\n {/**パスワード */}\r\n handlePasswordCheckDialogShow(index)}>\r\n \r\n \r\n {/**メールアドレス */}\r\n {addressUseenable == true ?\r\n \r\n \r\n \r\n : null\r\n }\r\n {/**設定変更 */}\r\n \r\n \r\n \r\n {/**システム変更 */}\r\n \r\n \r\n \r\n {/**ユーザロック */}\r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n
\r\n
\r\n handlePasswordCheckOkButton()}\r\n onCancel={() => setDialogOpen(false)}\r\n title={t('LoginUserSettingGrid.パスワード変更', 'パスワード変更')}\r\n okText={t('LoginUserSettingGrid.OK', 'OK')}\r\n cancelText={t('LoginUserSettingGrid.キャンセル', 'キャンセル')}\r\n maxWidth={'sm'}\r\n >\r\n \r\n \r\n setMessageDialogOpen(false)}\r\n title={t('LoginUserSettingGrid.パスワード変更', 'パスワード変更')}\r\n okText={t('LoginUserSettingGrid.OK', 'OK')}\r\n maxWidth={'sm'}\r\n >\r\n {showMessage}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default LoginUserSettingGrid;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Button from '@material-ui/core/Button';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport CheckIcon from '@material-ui/icons//Check';\r\nimport Box from '@mui/material/Box';\r\nimport { TableBaseStyle, LoginUserSettingStyle } from './LoginUserSettingStyle';\r\n\r\ntype LoginUserSettingFooterPage = { onOK: () => void; onCancel: () => void };\r\n\r\nconst LoginUserSettingFooter: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const pageStyle = LoginUserSettingStyle();\r\n\r\n return (\r\n \r\n \r\n {\r\n props.onOK();\r\n }}\r\n >\r\n {t('LoginUserSettingFooter.OK', 'OK')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default LoginUserSettingFooter;\r\n","import React, { useEffect, useState } from 'react';\r\nimport dayjs from 'dayjs';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport { ErrorCode } from '../../../../ErrorCode';\r\nimport { USER_MNG, UpdateUserInfos } from '../../../../function/UserManageModel';\r\nimport OKCancelDialog from '../../../atoms/Dialog/OKCancelDialog';\r\n\r\nimport { SettingsState } from '../../../organisms/SelectSettings';\r\n\r\nimport LoginUserSettingGrid from './LoginUserSettingGrid';\r\nimport LoginUserSettingFooter from './LoginUserSettingFooter';\r\nimport { TableBaseStyle, LoginUserSettingStyle } from './LoginUserSettingStyle';\r\nimport { isMailChack } from './LoginUserSetting';\r\nimport SimpleDialog from '../../../atoms/Dialog/SimpleDialog';\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../../atoms/Dialog/ConfirmDialog';\r\nimport { useModal } from '../../../../function/useModal';\r\n\r\ntype LoginUserSettingPage = { editData: SettingsState };\r\n\r\nconst LoginUserSettingPage: React.FC = (props: LoginUserSettingPage) => {\r\n const { t } = useTranslation();\r\n const pageStyle = LoginUserSettingStyle();\r\n\r\n const [messageDialogOpen, setMessageDialogOpen] = React.useState(false);\r\n const [okCancelDialogOpen, setOkCancelDialogOpen] = React.useState(false);\r\n const [showMessage, setShowMessage] = React.useState('');\r\n\r\n const [cellRefresh, setCellRefresh] = useState('');\r\n const [cells, setCells] = useState([]);\r\n const [flgCfmDlg, actCfmDlg] = useModal();\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n const [removeIdx, setRemoveIdx] = useState([]);\r\n const cfmdlg = flgCfmDlg ? (\r\n \r\n ) : null;\r\n\r\n useEffect(() => {\r\n props.editData.SaveFunction = saveProc;\r\n props.editData.IsUpdate = false;\r\n }, [props.editData.CancelCondition]);\r\n\r\n const updateCells = (newCells: USER_MNG[]): void => {\r\n setCells([...newCells]);\r\n\r\n props.editData.Target = newCells;\r\n props.editData.IsUpdate = newCells.some((um) => um.isEdit);\r\n };\r\n\r\n /**\r\n * 入力チェック\r\n * @param cells \r\n * @returns \r\n */\r\n const isDuplicate = (cells: USER_MNG[]): boolean => {\r\n var ret = false;\r\n //現在のパスワードがないユーザを検索\r\n var newUsers = cells.filter((r) => r.USER_ID !== '' && r.hasPassword === false);\r\n //現在のパスワードがあるユーザを検索\r\n var existUsers = cells.filter((r) => r.hasPassword === true);\r\n\r\n console.debug(['cells', cells]);\r\n console.debug(['newUsers', newUsers]);\r\n\r\n const rmvidx: number[] = [];\r\n for (var i = 0; i < newUsers.length; i++) {\r\n //同じユーザIDがないかを検索\r\n var index = existUsers.findIndex((r) => r.USER_ID == newUsers[i].USER_ID);\r\n if (index != -1) {\r\n //同じユーザIDがある場合、クリア\r\n ret = true;\r\n var clearIndex = cells.findIndex((r) => r.ENT_NO == newUsers[i].ENT_NO);\r\n rmvidx.push(clearIndex);\r\n }\r\n }\r\n setRemoveIdx(rmvidx);\r\n\r\n return ret;\r\n };\r\n\r\n // const isInputCheck = (cells: USER_MNG[]): boolean => {\r\n // var ret = false;\r\n // //ユーザーIDが空じゃないを検索\r\n // var userIDCheck = cells.filter((r) => r.USER_ID.trim() !== '');\r\n // //パスワードが空じゃないを検索\r\n // var passWordCheck = cells.filter((r) => r.hasPassword === true || r.PASSWORD !== '');\r\n\r\n // for (var i = 0; i < userIDCheck.length; i++) {\r\n // //パスワードがあるかを検索\r\n // if (userIDCheck[i].PASSWORD === '' || userIDCheck[i].hasPassword == false) {\r\n // ret = true;\r\n // }\r\n // }\r\n\r\n // for (var i = 0; i < passWordCheck.length; i++) {\r\n // //ユーザIDがあるかをチェック\r\n // if (passWordCheck[i].PASSWORD === '' || passWordCheck[i].hasPassword == false) {\r\n // ret = true;\r\n // }\r\n // }\r\n\r\n // return ret;\r\n // };\r\n\r\n const handleOkButton = () => {\r\n if (isDuplicate(cells)) {\r\n setShowMessage(t('LoginUserSettingPage.ユーザIDが重複しています', 'ユーザIDが重複しています'));\r\n setMessageDialogOpen(true);\r\n setCells([...cells]);\r\n return;\r\n }\r\n\r\n // if (isMailChack(cells)) {\r\n // setShowMessage(t('LoginUserSettingPage.ユーザID登録箇所で、メールアドレスが空白の箇所があります', 'ユーザID登録箇所で、メールアドレスが空白の箇所があります'));\r\n // setMessageDialogOpen(true);\r\n // return;\r\n // }\r\n\r\n var targets = cells.filter((r) => r.isEdit);\r\n if (targets.length == 0) {\r\n setCellRefresh(dayjs().format());\r\n } else {\r\n setShowMessage(t('LoginUserSettingPage.設定を保存しますか?', '設定を保存しますか?'));\r\n setOkCancelDialogOpen(true);\r\n }\r\n return;\r\n };\r\n const handleCalcelButton = () => {\r\n if (props.editData.IsUpdate) {\r\n setDlgmsg(\r\n t(\r\n 'DeviceRegist.保存していないデータを破棄します。\\nよろしいですか?',\r\n '保存していないデータを破棄します。\\nよろしいですか?'\r\n )\r\n );\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n props.editData.UpdateCancel();\r\n setCellRefresh(dayjs().format());\r\n })\r\n .cancel(() => { });\r\n }\r\n };\r\n /**\r\n *エラーコードメッセージ出力\r\n * @param errorCode \r\n */\r\n const updateErrorInfos = (errorCode: number) => {\r\n if (errorCode == ErrorCode.ERR_CODE_USER_USER_ID_DUPLICATE) {\r\n setShowMessage(t('LoginUserSettingPage.ユーザIDが重複しています', 'ユーザIDが重複しています'));\r\n setMessageDialogOpen(true);\r\n setOkCancelDialogOpen(false);\r\n } else if (errorCode == ErrorCode.ERR_CODE_USER_MAILADRESS) {\r\n setShowMessage(t('LoginUserSettingPage. メールアドレスのフォーマットが正しくありません ', ' メールアドレスのフォーマットが正しくありません '));\r\n setMessageDialogOpen(true);\r\n setOkCancelDialogOpen(false);\r\n } else if (errorCode == ErrorCode.ERR_CODE_SYSTEM_ERROR) {\r\n setShowMessage(t('LoginUserSettingPage.システムエラーが発生しました', 'システムエラーが発生しました'));\r\n setMessageDialogOpen(true);\r\n setOkCancelDialogOpen(false);\r\n setMessageDialogOpen(true);\r\n }\r\n }\r\n\r\n const handleSaveOkButton = () => {\r\n var targets = cells.filter((r) => r.isEdit);\r\n\r\n UpdateUserInfos(targets).then((r) => {\r\n //パスワード変更を反映\r\n if (r.ErrorCode == 0) {\r\n setShowMessage(t('LoginUserSettingPage.設定を保存しました', '設定を保存しました'));\r\n setMessageDialogOpen(true);\r\n setOkCancelDialogOpen(false);\r\n setCellRefresh(dayjs().format());\r\n props.editData.IsUpdate = false;\r\n } else {\r\n updateErrorInfos(r.ErrorCode);\r\n }\r\n });\r\n };\r\n const saveProc = (target: object): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const cells = target as USER_MNG[];\r\n if (cells) {\r\n var targets = cells.filter((r) => r.isEdit);\r\n UpdateUserInfos(targets)\r\n .then((r) => {\r\n if (r.ErrorCode == 0) {\r\n resolve('done');\r\n } else {\r\n reject(r.ErrorCode);\r\n updateErrorInfos(r.ErrorCode);\r\n }\r\n })\r\n .catch((reason) => reject(reason));\r\n } else {\r\n reject('data error');\r\n }\r\n });\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n handleOkButton()} onCancel={() => handleCalcelButton()} />\r\n \r\n handleSaveOkButton()}\r\n onCancel={() => setOkCancelDialogOpen(false)}\r\n title={t('LoginUserSettingPage.ユーザー管理設定', 'ユーザー管理設定')}\r\n okText={t('LoginUserSettingPage.OK', 'OK')}\r\n cancelText={t('LoginUserSettingPage.キャンセル', 'キャンセル')}\r\n maxWidth={'sm'}\r\n >\r\n {showMessage}\r\n \r\n setMessageDialogOpen(false)}\r\n title={t('LoginUserSettingPage.ユーザー管理設定', 'ユーザー管理設定')}\r\n okText={t('LoginUserSettingPage.OK', 'OK')}\r\n maxWidth={'sm'}\r\n >\r\n {showMessage}\r\n \r\n {cfmdlg}\r\n \r\n );\r\n};\r\n\r\nexport default LoginUserSettingPage;\r\n","import { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\n\r\nexport const TableBaseStyle = makeStyles(\r\n createStyles({\r\n //テーブルヘッダセル\r\n headerCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n },\r\n bodyCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n padding: '4px',\r\n height: '30px',\r\n },\r\n bodyCellCenter: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n padding: '4px',\r\n height: '30px',\r\n },\r\n bodyRow: {\r\n '&.Mui-selected, &.Mui-selected:hover': {\r\n //背景色\r\n backgroundColor: 'yellow',\r\n '& > .MuiTableCell-root': {\r\n //文字色\r\n color: 'brack',\r\n },\r\n },\r\n\r\n\r\n },\r\n //テキスト\r\n textField: {\r\n flexGrow: 1,\r\n height: '100%',\r\n width: '100%',\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n textAlign: \"center\",\r\n },\r\n })\r\n);\r\n\r\nexport const pmlSettingPageStyle = makeStyles(\r\n createStyles({\r\n tableContainer: {\r\n maxHeight: 'calc(100vh - 316px)',\r\n },\r\n paper: {\r\n background: '#FFFFEE',\r\n },\r\n })\r\n);\r\n","import React, { useEffect, useState } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { TableBaseStyle } from './PLMSettingStyle';\r\nimport { PLM_CSV_SET } from './PLMSetting';\r\nimport Button from '@material-ui/core/Button';\r\nimport Switch from '@mui/material/Switch';\r\nimport Box from '@mui/material/Box';\r\nimport { useTranslation } from 'react-i18next';\r\nimport UneditableSwitchStringInput from '../../../atoms/Input/UneditableSwitchStringInput';\r\n\r\ntype PLMSettingGridRowProps = {\r\n plmSetting: PLM_CSV_SET;\r\n rowIndexNo: number;\r\n onClickDeleteButton: (indexNo: number) => void;\r\n onChangeData: (targetRow: PLM_CSV_SET) => void;\r\n};\r\n\r\nconst PLMSettingGridRow: React.FC = (props) => {\r\n const tableStyle = TableBaseStyle();\r\n const [plmSetting, setPLMSetting] = useState(props.plmSetting); //データ初期値\r\n const [isEdit, setIsEdit] = useState(false); //変更フラグ データを編集したらtrue\r\n const { t, i18n } = useTranslation();\r\n\r\n /**\r\n * データ変更通知\r\n */\r\n useEffect(() => {\r\n //データ初期値にセットされている内容を再描画時に変えたい場合、useEffectが必要\r\n //console.debug(['PLMSettingGridRow - useEffect props.plmSetting', props.plmSetting]);\r\n setPLMSetting({ ...props.plmSetting });\r\n setIsEdit(false);\r\n }, [props.plmSetting]);\r\n\r\n /**\r\n * 値を変更した内容を管理\r\n * @param key\r\n * @returns\r\n */\r\n const onChangeCell = (key: string) => (event: React.ChangeEvent) => {\r\n console.debug(['onChangeCell - key isEdit', key, isEdit]);\r\n setIsEdit(true);\r\n setPLMSetting({ ...plmSetting, [key]: event.target.value });\r\n };\r\n\r\n /**\r\n * IP設定データ変更通知\r\n * @param editRow\r\n * @param event\r\n */\r\n const onChangeIPonBlurCell = (editRow: PLM_CSV_SET) => (event: React.ChangeEvent) => {\r\n const ip = event.target.value;\r\n // ipアドレスチェック\r\n if (ip.match(/^\\d{1,3}(\\.\\d{1,3}){3}$/)) {\r\n //カリー化された関数\r\n onChangeData(editRow, isEdit)(event);\r\n } else {\r\n //フォーマとチェックがNGの場合元に戻す\r\n setPLMSetting({ ...editRow, PLM_IPADR: props.plmSetting.PLM_IPADR });\r\n\r\n //親データにも通知\r\n editRow.PLM_IPADR = props.plmSetting.PLM_IPADR;\r\n onChangeData(editRow, isEdit)(event);\r\n }\r\n //console.debug(['onChangePassWordCell - pass isEdit', userID, isEdit]);\r\n };\r\n\r\n /**\r\n * 時間設定データ変更通知\r\n * @param editRow\r\n * @param event\r\n */\r\n const onChangeHHMMonBlurCell = (editRow: PLM_CSV_SET) => (event: React.ChangeEvent) => {\r\n const ip = event.target.value;\r\n // ipアドレスチェック\r\n if (ip.match(/^([01][0-9]|2[0-3]):[0-5][0-9]$/)) {\r\n //カリー化された関数\r\n onChangeData(editRow, isEdit)(event);\r\n } else {\r\n //フォーマとチェックがNGの場合元に戻す\r\n setPLMSetting({ ...editRow, PLM_HHMM: props.plmSetting.PLM_HHMM });\r\n\r\n //親データにも通知\r\n editRow.PLM_HHMM = props.plmSetting.PLM_HHMM;\r\n onChangeData(editRow, isEdit)(event);\r\n }\r\n //console.debug(['onChangePassWordCell - pass isEdit', userID, isEdit]);\r\n };\r\n\r\n /**\r\n *データ変更通知\r\n * @param editRow\r\n * @param event\r\n */\r\n\r\n /**\r\n * 要求設定データ変更通知\r\n * @param editRow\r\n * @param event\r\n */\r\n const onClickPLM_REQ_FLGButton = (editRow: PLM_CSV_SET) => (event: React.ChangeEvent) => {\r\n console.debug(['onClickPLM_STATButton- editRow,baseData', editRow, props.plmSetting]);\r\n if (plmSetting.PLM_REQ_FLG === null) {\r\n plmSetting.PLM_REQ_FLG = 1;\r\n } else if (plmSetting.PLM_REQ_FLG === 0) {\r\n plmSetting.PLM_REQ_FLG = 1;\r\n } else {\r\n plmSetting.PLM_REQ_FLG = 0;\r\n }\r\n\r\n //これだとisEditがtureになるのが間に合わない為\r\n //onChangeData(plmSetting, true)(event) true直接呼ぶ\r\n setIsEdit(true);\r\n\r\n setPLMSetting({ ...plmSetting });\r\n onChangeData(plmSetting, true)(event);\r\n };\r\n\r\n /**\r\n * 上位にデータ変更通知\r\n * @param editRow 編集対象データ\r\n * @param isEdit 編集フラグ\r\n * @returns\r\n */\r\n const onChangeData = (editRow: PLM_CSV_SET, editFlg: boolean) => (event: React.ChangeEvent) => {\r\n if (editFlg) {\r\n //console.debug(['onChangeData - editRow,baseData', editRow, props.plmSetting]);\r\n console.debug(['onChangeData - editRow,baseData', editRow, props.plmSetting, editRow.isEditPlmState]);\r\n props.onChangeData(editRow);\r\n }\r\n };\r\n\r\n /**\r\n * ステータス表示文字を返す\r\n */\r\n const getStatusString = (editRow: PLM_CSV_SET): string => {\r\n switch (editRow.PLM_STAT) {\r\n case 0:\r\n return t('PLMSettingGridRow.正常', '正常');\r\n case 1:\r\n return t('PLMSettingGridRow.異常', '異常');\r\n default:\r\n return t('PLMSettingGridRow.不明', '不明');\r\n }\r\n };\r\n\r\n return (\r\n \r\n {/* No */}\r\n \r\n
{props.rowIndexNo}
\r\n
\r\n {/* 名称 */}\r\n \r\n \r\n \r\n {/* CSV保存パス */}\r\n \r\n \r\n \r\n {/* ユーザーID */}\r\n \r\n \r\n \r\n {/* パスワード */}\r\n \r\n \r\n \r\n {/* IPアドレス */}\r\n \r\n \r\n \r\n {/* 送信時間 */}\r\n \r\n {plmSetting.isEditPlmState === true ? (\r\n \r\n ) : (\r\n
{plmSetting.PLM_HHMM}
\r\n )}\r\n
\r\n \r\n {plmSetting.isEditPlmState === true ? (\r\n \r\n ) : (\r\n
{t('PLMSettingGridRow.要求中', '要求中')}
\r\n )}\r\n
\r\n {/* ステータス */}\r\n \r\n
{getStatusString(plmSetting)}
\r\n
\r\n\r\n \r\n {plmSetting.isEditPlmState === true ? (\r\n \r\n ) : (\r\n
{t('PLMSettingGridRow.削除不可', '削除不可')}
\r\n )}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default PLMSettingGridRow;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { TableBaseStyle, pmlSettingPageStyle } from './PLMSettingStyle';\r\nimport { PLM_CSV_SET } from './PLMSetting';\r\nimport Button from '@material-ui/core/Button';\r\nimport PLMSettingGridRow from './PLMSettingGridRow';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ntype PLMSettingGridProps = {\r\n plmSettingList: PLM_CSV_SET[];\r\n onClickDeleteButton: (indexNo: number) => void;\r\n onChangeData: (targetRow: PLM_CSV_SET) => void;\r\n};\r\n\r\nconst PLMSettingGrid: React.FC = (props) => {\r\n const tableStyle = TableBaseStyle();\r\n const plmStyle = pmlSettingPageStyle();\r\n const { t, i18n } = useTranslation();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {'No'}\r\n {t('PLMSettingGrid.PLM名称', 'PLM名称')}\r\n \r\n {t('PLMSettingGrid.保存先フォルダ', '保存先フォルダ')}\r\n \r\n {t('PLMSettingGrid.ユーザID', 'ユーザID')}\r\n {t('PLMSettingGrid.パスワード', 'パスワード')}\r\n {t('PLMSettingGrid.IPアドレス', 'IPアドレス')}\r\n {t('PLMSettingGrid.送信時間', '送信時間')}\r\n {t('PLMSettingGrid.手動送信', '手動送信')}\r\n {t('PLMSettingGrid.ステータス', 'ステータス')}\r\n {t('PLMSettingGrid.削除', '削除')}\r\n \r\n \r\n \r\n {props.plmSettingList.map((row, index) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default PLMSettingGrid;\r\n","import React from 'react';\r\nimport Button from '@material-ui/core/Button';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst buttonStyle = {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n};\r\n\r\ntype PLMSettingFooterProps = {\r\n onClickSaveButton: () => void;\r\n onClickCancelButton: () => void;\r\n onClickNewButton: () => void;\r\n onClickRefreshButton: () => void;\r\n buttonEnable: boolean;\r\n};\r\n\r\nconst PLMSettingFooter: React.FC = (props) => {\r\n const { t, i18n } = useTranslation();\r\n return (\r\n \r\n \r\n {\r\n props.onClickSaveButton();\r\n }}\r\n >\r\n {t('PLMSettingFooter.保存', '保存')}\r\n \r\n \r\n \r\n props.onClickCancelButton()}\r\n >\r\n {t('PLMSettingFooter.中止', '中止')}\r\n \r\n \r\n \r\n props.onClickNewButton()}\r\n >\r\n {t('PLMSettingFooter.新規', '新規')}\r\n \r\n \r\n \r\n props.onClickRefreshButton()}\r\n >\r\n {t('PLMSettingFooter.更新', '更新')}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default PLMSettingFooter;\r\n","import { ErrorCode, ResponceDataType } from \"../../../../ErrorCode\";\r\nimport i18next from 'i18next';\r\n/**\r\n * PLMSetting\r\n */\r\nexport type PLM_CSV_SET = {\r\n ///PLM連携INDEX\r\n PLM_INDEX: number;\r\n ///APLM名称\r\n PLM_NAME: string;\r\n /// 保存先フォルダ\r\n PLM_CSV_PATH: string;\r\n /// ユーザID\r\n PLM_USERID: string;\r\n /// パスワード\r\n PLM_PASSWD: string;\r\n /// IPアドレス\r\n PLM_IPADR: string;\r\n /// 送信時刻\r\n PLM_HHMM: string;\r\n /// 要求フラグ\r\n PLM_REQ_FLG: number;\r\n /// ステータス\r\n PLM_STAT: number;\r\n /// リトライ回数\r\n PLM_RETRY: number;\r\n\r\n /// 連番\r\n indexNo: number;\r\n /// 編集フラグ\r\n isEdit: boolean;\r\n\r\n /// 要求フラグ編集可能フラグ\r\n isEditPlmState: boolean;\r\n\r\n};\r\n\r\n/**\r\n *\r\n * @returns\r\n */\r\nexport const CreatePLMSetting = (): PLM_CSV_SET => {\r\n\r\n let ret: PLM_CSV_SET = {\r\n PLM_INDEX: 0,\r\n PLM_NAME: \"\",\r\n PLM_CSV_PATH: \"\",\r\n PLM_USERID: \"\",\r\n PLM_PASSWD: \"\",\r\n PLM_IPADR: \"0.0.0.0\",\r\n PLM_HHMM: \"00:00\",\r\n PLM_REQ_FLG: 0,\r\n PLM_STAT: 0,\r\n PLM_RETRY: 0,\r\n indexNo: 0,\r\n isEdit: true,\r\n isEditPlmState: true,\r\n };\r\n return ret;\r\n}\r\n\r\n//EMC設定データ取得\r\nexport const GetPLMSettings = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/PLMSetting/\")\r\n .then((res) => {\r\n if (!res.ok) {\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n reject(message);\r\n }\r\n else {\r\n return res.json();\r\n }\r\n })\r\n .then((result: PLM_CSV_SET[]) => {\r\n if (result != null) {\r\n if (result.length !== 0) {\r\n result.map((row, index) => {\r\n //連番付与\r\n row.indexNo = index + 1;\r\n //ステータス編集可能フラグ\r\n if (row.PLM_REQ_FLG !== null && row.PLM_REQ_FLG !== 0) {\r\n row.isEditPlmState = false;\r\n }\r\n else {\r\n //データ取得時にOFFの場合\r\n row.isEditPlmState = true;\r\n }\r\n });\r\n }\r\n resolve(result);\r\n }\r\n else {\r\n reject('Invalidate response');\r\n }\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n reject(error);\r\n })\r\n })\r\n};\r\n\r\nexport const PutPLMSettings = (targetList: PLM_CSV_SET[], deleteList: number[]): Promise => {\r\n return new Promise((resolve, reject) => {\r\n fetch(\"api/PLMSetting\", {\r\n method: 'put',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({ PLMSettingList: targetList, DeltePLMSettingPlmIndexList: deleteList }),\r\n })\r\n .then((res) => {\r\n if (!res.ok) {\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n reject(message);\r\n }\r\n else {\r\n return res.json();\r\n }\r\n })\r\n .then((result: ResponceDataType) => {\r\n if (result.ErrorCode === ErrorCode.ERR_CODE_NONE) {\r\n resolve(result);\r\n }\r\n else {\r\n reject(result);\r\n }\r\n })\r\n .catch(error => {\r\n console.error(error);\r\n reject(error)\r\n });\r\n });\r\n}\r\n\r\n\r\n/**\r\n * 入力チェック\r\n */\r\nexport const CheckPLMSettingInputData = (targetList: PLM_CSV_SET[], translation: any): string[] => {\r\n let list = targetList.filter((r) => r.isEdit);\r\n let errorMsgs: string[] = [];\r\n\r\n targetList.forEach((r, index) => {\r\n if (r.isEdit) {\r\n //string なので!だけでnullまたは空白チェック可能\r\n if (!r.PLM_NAME) {\r\n errorMsgs.push(`No:${index + 1} ` + i18next.t('PLMSetting.名称必須', '名称必須です'));\r\n }\r\n if (!r.PLM_USERID) {\r\n errorMsgs.push(`No:${index + 1} ` + i18next.t('PLMSetting.ユーザID必須', 'ユーザID称必須です'));\r\n }\r\n if (!r.PLM_PASSWD) {\r\n errorMsgs.push(`No:${index + 1} ` + i18next.t('PLMSetting.パスワード必須', 'パスワード必須です'));\r\n }\r\n if (r.PLM_IPADR === \"0.0.0.0\") {\r\n errorMsgs.push(`No:${index + 1} ` + i18next.t('PLMSetting.IPアドレス必須', 'IPアドレス必須です'));\r\n }\r\n if (!r.PLM_CSV_PATH) {\r\n errorMsgs.push(`No:${index + 1} ` + i18next.t('PLMSetting.保存場所必須', '保存場所必須です'));\r\n return false;\r\n }\r\n }\r\n });\r\n\r\n return errorMsgs;\r\n}\r\n","import React, { useEffect, useState } from 'react';\r\nimport { SettingsState } from '../../../organisms/SelectSettings';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport PLMSettingGrid from './PLMSettingGrid';\r\nimport PLMSettingFooter from './PLMSettingFooter';\r\nimport ConfirmDialog, { ConfirmDialogResponse } from '../../../atoms/Dialog/ConfirmDialog';\r\nimport MessageDialog, { MessageDialogResponse } from '../../../atoms/Dialog/MessageDialog';\r\nimport { useModal } from '../../../../function/useModal';\r\nimport { ResponceDataType, ErrorCode } from '../../../../ErrorCode';\r\nimport { PLM_CSV_SET, GetPLMSettings, CreatePLMSetting, CheckPLMSettingInputData, PutPLMSettings } from './PLMSetting';\r\nimport { pmlSettingPageStyle } from './PLMSettingStyle';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ntype PLMSettingPageProps = { editData: SettingsState };\r\ntype SaveParameter = {\r\n plmSettingList: PLM_CSV_SET[];\r\n plmDeleteIndexList: number[];\r\n};\r\n\r\n/**\r\n *PLM連携画面\r\n * @returns\r\n */\r\nconst PLMSettingPage: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n\r\n const [earlyPlmListCount, setEarlyPlmListCount] = useState(0); //初期データ数からデータ件数全行削除された場合での編集有り無し判定で使用\r\n const [plmSettingList, setPLMSettingList] = useState([]);\r\n const [plmDeleteIndexList, setPLMDeleteIndexList] = useState([]);\r\n const [flgCfmDlg, actCfmDlg] = useModal();\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n const [buttonEnable, setButtonEnable] = useState(true);\r\n\r\n const cfmdlg = flgCfmDlg ? (\r\n \r\n ) : null;\r\n\r\n const msgdlg = flgMsgDlg ? : null;\r\n\r\n useEffect(() => {\r\n props.editData.SaveFunction = saveAction2;\r\n props.editData.IsUpdate = false;\r\n }, [props.editData.CancelCondition]);\r\n\r\n /**\r\n * 初期表示 useEffect\r\n */\r\n useEffect(() => {\r\n upDatePage();\r\n }, []);\r\n\r\n /**\r\n * 画面更新\r\n */\r\n const upDatePage = () => {\r\n setButtonEnable(false);\r\n let plmList: PLM_CSV_SET[] = [];\r\n GetPLMSettings()\r\n .then((r: PLM_CSV_SET[]) => {\r\n console.debug(['PLMSettingPage - upDatePage - GetPLMSettings', r]);\r\n plmList = r;\r\n setEarlyPlmListCount(r.length);\r\n setPLMSettingList(r);\r\n setPLMDeleteIndexList([]);\r\n props.editData.IsUpdate = false;\r\n })\r\n .catch((e) => {\r\n setDlgmsg(t('PLMSettingPage.データ取得中にエラーが発生しました', 'データ取得中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n console.error(['upDatePage - Error', e, plmList]);\r\n setEarlyPlmListCount(0);\r\n setPLMSettingList([]);\r\n setPLMDeleteIndexList([]);\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n };\r\n\r\n /**\r\n *新規ボタン押下\r\n * @returns\r\n */\r\n const newAction = () => {\r\n if (plmSettingList.length === 5) {\r\n setDlgmsg(t('PLMSettingPage.設定はサーバ5台までです', '設定はサーバ5台までです。'));\r\n actMsgDlg.open();\r\n return;\r\n }\r\n let newRow = CreatePLMSetting();\r\n let maxIndex = 1;\r\n if (plmSettingList.length != 0) {\r\n maxIndex = Math.max(...plmSettingList.map((p) => p.indexNo));\r\n maxIndex = maxIndex + 1;\r\n }\r\n newRow.indexNo = maxIndex;\r\n plmSettingList.push(newRow);\r\n setPLMSettingList([...plmSettingList]);\r\n setParameterTabChange({\r\n plmSettingList: plmSettingList,\r\n plmDeleteIndexList: plmDeleteIndexList,\r\n });\r\n };\r\n\r\n /**\r\n * 更新ボタン押下\r\n */\r\n const refreshAction = () => {\r\n console.debug(['refreshAction', plmSettingList]);\r\n if (plmSettingList.filter((r) => r.isEdit).length !== 0 || plmSettingList.length !== earlyPlmListCount) {\r\n setDlgmsg(\r\n t(\r\n 'PLMSettingPage.保存していないデータを破棄します。\\nよろしいですか?',\r\n '保存していないデータを破棄します。\\nよろしいですか?'\r\n )\r\n );\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n upDatePage(); //再描画\r\n console.debug(t('PLMSettingPage.実行', '実行'));\r\n props.editData.IsUpdate = false;\r\n })\r\n .cancel(() => {\r\n console.debug(t('PLMSettingPage.キャンセル', 'キャンセル'));\r\n });\r\n } else {\r\n upDatePage(); //再描画\r\n console.debug(t('PLMSettingPage.実行', '実行'));\r\n props.editData.IsUpdate = false;\r\n }\r\n };\r\n\r\n /**\r\n *保存ボタン\r\n * @param index\r\n */\r\n const saveAction = () => {\r\n const messages = CheckPLMSettingInputData(plmSettingList, t);\r\n if (messages.length != 0) {\r\n setDlgmsg(messages.join('\\n'));\r\n actMsgDlg.open();\r\n return;\r\n }\r\n\r\n if (plmSettingList.filter((r) => r.isEdit).length !== 0 || plmSettingList.length !== earlyPlmListCount) {\r\n setDlgmsg(t('PLMSettingPage.編集内容を保存します。\\nよろしいですか?', '編集内容を保存します。\\nよろしいですか?'));\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n setButtonEnable(false);\r\n PutPLMSettings(\r\n plmSettingList.filter((r) => r.isEdit),\r\n plmDeleteIndexList\r\n )\r\n .then((r) => {\r\n setDlgmsg(t('PLMSettingPage.保存が正常に終了しました', '保存が正常に終了しました'));\r\n actMsgDlg.open();\r\n upDatePage(); //再描画\r\n console.debug('saveAction ok');\r\n props.editData.IsUpdate = false;\r\n })\r\n .catch((r) => {\r\n setDlgmsg(t('PLMSettingPage.保存中にエラーが発生しました', '保存中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n console.error(['saveAction error', r]);\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n })\r\n .cancel(() => {\r\n console.debug(t('PLMSettingPage.キャンセル', 'キャンセル'));\r\n });\r\n } else {\r\n }\r\n };\r\n\r\n /**\r\n * タブ切替時に動作\r\n * @param param\r\n * @returns\r\n */\r\n const saveAction2 = (param: object): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const sp = param as SaveParameter;\r\n const messages = CheckPLMSettingInputData(sp.plmSettingList, t);\r\n if (messages.length != 0) {\r\n setDlgmsg(messages.join('\\n'));\r\n actMsgDlg.open();\r\n reject('data error');\r\n return;\r\n }\r\n PutPLMSettings(\r\n sp.plmSettingList.filter((r) => r.isEdit),\r\n sp.plmDeleteIndexList\r\n )\r\n .then((r) => {\r\n console.debug('saveAction ok');\r\n props.editData.IsUpdate = false;\r\n resolve('done');\r\n })\r\n .catch((r) => {\r\n setDlgmsg(t('PLMSettingPage.保存中にエラーが発生しました', '保存中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n console.error(['saveAction error', r]);\r\n reject('data error');\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n });\r\n };\r\n\r\n /**\r\n *削除ボタン押下\r\n * @param index\r\n */\r\n const deleteAction = (index: number) => {\r\n console.debug(['deleteAction - start', plmSettingList, index]);\r\n setDlgmsg(t('PLMSettingPage.削除してもよろしいですか', '削除してもよろしいですか'));\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n //削除対象抜き出し\r\n const delRow = plmSettingList.filter((row) => row.indexNo === index);\r\n //削除対象を抜いたリスト\r\n let newList = plmSettingList.filter((row) => row.indexNo !== index);\r\n //連番振りなおし\r\n newList.forEach((r, index) => (r.indexNo = index + 1));\r\n\r\n if (delRow.length !== 0) {\r\n //削除リスト追加\r\n if (delRow[0].PLM_INDEX !== null && delRow[0].PLM_INDEX !== 0) {\r\n plmDeleteIndexList.push(delRow[0].PLM_INDEX);\r\n setPLMDeleteIndexList([...plmDeleteIndexList]);\r\n }\r\n }\r\n setPLMSettingList([...newList]);\r\n setParameterTabChange({\r\n plmSettingList: newList,\r\n plmDeleteIndexList: plmDeleteIndexList,\r\n });\r\n console.debug(['deleteAction - end newList , index , deleteList ', newList, index, plmDeleteIndexList]);\r\n })\r\n .cancel(() => {\r\n console.debug(t('PLMSettingPage.キャンセル', 'キャンセル'));\r\n });\r\n };\r\n\r\n /**\r\n *キャンセルボタン押下\r\n */\r\n const cancelAction = () => {\r\n console.debug(['cancelAction', plmSettingList]);\r\n if (plmSettingList.filter((r) => r.isEdit).length !== 0 || plmSettingList.length !== earlyPlmListCount) {\r\n setDlgmsg(\r\n t(\r\n 'PLMSettingPage.保存していないデータを破棄します。\\nよろしいですか?',\r\n '保存していないデータを破棄します。\\nよろしいですか?'\r\n )\r\n );\r\n actCfmDlg\r\n .open()\r\n .apply((_) => {\r\n upDatePage(); //再描画\r\n console.debug(t('PLMSettingPage.実行', '実行'));\r\n props.editData.IsUpdate = false;\r\n })\r\n .cancel(() => {\r\n console.debug(t('PLMSettingPage.キャンセル', 'キャンセル'));\r\n });\r\n } else {\r\n }\r\n };\r\n\r\n /**\r\n *データ変更通知\r\n * @returns\r\n */\r\n const changeAction = (target: PLM_CSV_SET) => {\r\n console.debug(['changeAction - start', plmSettingList, target]);\r\n target.isEdit = true;\r\n var index = plmSettingList.findIndex((r) => r.indexNo === target.indexNo);\r\n plmSettingList[index] = target;\r\n //setPLMSettingList([...plmSettingList]);\r\n setParameterTabChange({\r\n plmSettingList: plmSettingList,\r\n plmDeleteIndexList: plmDeleteIndexList,\r\n });\r\n console.debug(['changeAction - end', plmSettingList, target]);\r\n };\r\n\r\n /**\r\n * タブ切替時の処理パラーメータをセット\r\n */\r\n const setParameterTabChange = (tmp: SaveParameter) => {\r\n props.editData.Target = tmp;\r\n props.editData.IsUpdate = true;\r\n console.debug(['setParameterTabChange - ', tmp]);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {cfmdlg}\r\n {msgdlg}\r\n \r\n );\r\n};\r\n\r\nexport default PLMSettingPage;\r\n","import React, { FC, useEffect, useState, Dispatch, SetStateAction, useContext } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { LogD } from '../../../function/LogLapper';\r\nimport { Grid } from '@material-ui/core';\r\nimport SelectSettings, { MenuContents } from '../../organisms/SelectSettings';\r\nimport StorageCapacitySettingPage from './StorageCapacitySetting/StorageCapacitySettingPage';\r\nimport LoginUserSettingPage from './LoginUserSetting/LoginUserSettingPage';\r\nimport PLMSettingPage from './PLMSetting/PLMSettingPage';\r\n\r\nimport { useTranslation } from 'react-i18next';\r\nimport { AppContext } from '../../../App';\r\n\r\ntype CustomConfigPageProps = {};\r\n\r\nconst CustomConfigPage: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const { login } = useContext(AppContext);\r\n\r\n const menuList: MenuContents[] = [\r\n {\r\n name: t('CustomConfigPageProps.ユーザ管理画面', 'ユーザ管理画面'),\r\n component: LoginUserSettingPage,\r\n tag: 'Login',\r\n },\r\n { name: t('CustomConfigPageProps.PLM連携設定', 'PLM連携設定'), component: PLMSettingPage, tag: 'PLM' },\r\n {\r\n name: t('CustomConfigPageProps.ストレージ容量設定', 'ストレージ容量設定'),\r\n component: StorageCapacitySettingPage,\r\n tag: 'StorageCapacitySetting',\r\n },\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CustomConfigPage;\r\n","export default __webpack_public_path__ + \"static/media/loginBack.9d5044cd.png\";","export default __webpack_public_path__ + \"static/media/loginBackE.ead88989.png\";","\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport bgImage from '../../../image/loginBack.png';\r\nimport bgImageE from '../../../image/loginBackE.png';\r\n\r\nexport const TableBaseStyle = makeStyles(\r\n createStyles({\r\n loginContainer: {\r\n background: '#f0f0f0',\r\n backgroundImage: `url(${bgImage})`,\r\n backgroundRepeat: 'no-repeat',\r\n backgroundPosition: 'center',\r\n backgroundSize: 'contain',\r\n height: 'calc(100vh - 12px)',\r\n },\r\n loginContainerE: {\r\n background: '#f0f0f0',\r\n backgroundImage: `url(${bgImageE})`,\r\n backgroundRepeat: 'no-repeat',\r\n backgroundPosition: 'center',\r\n backgroundSize: 'contain',\r\n height: 'calc(100vh - 12px)',\r\n },\r\n systemTitle: {\r\n fontSize: '36pt',\r\n textAlign: 'center',\r\n },\r\n entryContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n height: '280px',\r\n alignItems: 'center',\r\n justifyContent: 'flexStart',\r\n },\r\n entryRow: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n margin: '4px',\r\n },\r\n entryLabel: {\r\n width: '100px',\r\n },\r\n entry: {\r\n background: 'white',\r\n verticalAlign: 'center',\r\n },\r\n loginButton: {\r\n margin: '16px',\r\n width: '200px',\r\n background: 'white',\r\n },\r\n twoPasswordButton: {\r\n margin: '16px',\r\n width: '140px',\r\n background: 'white',\r\n },\r\n twoPasswordLabel: {\r\n width: '220px',\r\n textAlign: 'left',\r\n },\r\n messageLabel: {\r\n width: '320px',\r\n textAlign: 'left',\r\n }\r\n })\r\n);","import React, { useContext, useEffect, useState } from 'react';\r\nimport { Button, TextField, Grid } from '@material-ui/core';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { TableBaseStyle } from './LoginStyle';\r\n\r\ntype LoginModeProps = {\r\n user: string;\r\n password: string;\r\n changeUserName: (userName: string) => void;\r\n changePassword: (userName: string) => void;\r\n startLoginAction: () => void;\r\n};\r\n\r\n\r\nconst LoginMode: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = TableBaseStyle();\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
{t('LoginMode.ユーザー名', 'ユーザー名')}
\r\n props.changeUserName(e.target.value)}\r\n inputProps={{\r\n maxLength: 12,\r\n }}\r\n />\r\n
\r\n
\r\n
{t('LoginMode.パスワード', 'パスワード')}
\r\n props.changePassword(e.target.value)}\r\n onKeyPress={(e) => {\r\n if (e.key == 'Enter') {\r\n e.preventDefault();\r\n props.startLoginAction();\r\n }\r\n }}\r\n inputProps={{\r\n maxLength: 40,\r\n }}\r\n />\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n );\r\n};\r\n\r\nexport default LoginMode;","import React, { useContext, useEffect, useState } from 'react';\r\nimport { Button, TextField, Grid } from '@material-ui/core';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { TableBaseStyle } from './LoginStyle';\r\n\r\ntype SendLoginModeProps = {\r\n user: string;\r\n password: string;\r\n changeUserName: (userName: string) => void;\r\n changePassword: (userName: string) => void;\r\n startSendMailAction: () => void;\r\n};\r\n\r\n\r\nconst SendLoginMode: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = TableBaseStyle();\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
{t('SendLoginMode.ユーザー名', 'ユーザー名')}
\r\n props.changeUserName(e.target.value)}\r\n inputProps={{\r\n maxLength: 12,\r\n }}\r\n />\r\n
\r\n
\r\n
{t('SendLoginMode.パスワード', 'パスワード')}
\r\n props.changePassword(e.target.value)}\r\n onKeyPress={(e) => {\r\n if (e.key == 'Enter') {\r\n e.preventDefault();\r\n props.startSendMailAction();\r\n }\r\n }}\r\n inputProps={{\r\n maxLength: 40,\r\n }}\r\n />\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n );\r\n};\r\nexport default SendLoginMode;","import React, { useContext, useEffect, useState } from 'react';\r\nimport { Button, TextField, Grid } from '@material-ui/core';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { TableBaseStyle } from './LoginStyle';\r\nimport { AppContext } from '../../../App';\r\n\r\ntype LoginTwoPasswordProps = {\r\n oneteimePassword: string;\r\n onetimePasswordValidityTime: number;\r\n changeoneteimePassword: (userName: string) => void;\r\n ontimeLoginAction: () => void;\r\n backAction: () => void;\r\n};\r\n\r\n\r\nconst LoginTwoPasswordMode: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = TableBaseStyle();\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
{t('LoginTwoPasswordMode.2段階認証のパスワードをメールアドレスに', '2段階認証のパスワードをメールアドレスに')}
\r\n
{t(`LoginTwoPasswordMode.送信しました(有効期間)`, `送信しました(有効期間:`) + `${props.onetimePasswordValidityTime}` + t('LoginTwoPasswordMode.分間', '分間)')}
\r\n
\r\n\r\n\r\n
\r\n\r\n
{t('LoginTwoPasswordMode.2段階パスワード', '2段階パスワード')}
\r\n
\r\n props.changeoneteimePassword(e.target.value)}\r\n onKeyPress={(e) => {\r\n if (e.key == 'Enter') {\r\n e.preventDefault();\r\n props.ontimeLoginAction();\r\n }\r\n }}\r\n inputProps={{\r\n maxLength: 40,\r\n }}\r\n />\r\n
\r\n
\r\n <>\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n );\r\n};\r\nexport default LoginTwoPasswordMode;","import React, { useContext, useEffect, useState } from 'react';\r\nimport { Button, TextField, Grid } from '@material-ui/core';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { TableBaseStyle } from './LoginStyle';\r\nimport { AppContext } from '../../../App';\r\n\r\ntype LoginMailAdressProps = {\r\n mailAdress: string;\r\n EntryMailAdress: (userName: string) => void;\r\n entrymailAdressAction: () => void;\r\n};\r\n\r\n\r\nconst LoginMailAdress: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const classes = TableBaseStyle();\r\n\r\n return (\r\n
\r\n
{t('LoginMailAdress.メールアドレスが設定されていません', 'メールアドレスが設定されていません')}
\r\n
{t(`LoginMailAdress.入力したメールアドレスへワンタイムパスワードを送信します`, `入力したメールアドレスへワンタイムパスワードを送信します`)}
\r\n\r\n
\r\n
\r\n props.EntryMailAdress(e.target.value)}\r\n onKeyPress={(e) => {\r\n if (e.key == 'Enter') {\r\n e.preventDefault();\r\n props.entrymailAdressAction();\r\n }\r\n }}\r\n inputProps={{\r\n maxLength: 160,\t//入力文字数を160より大きくした場合、暗号化したら255文字より大きくなりエラーになる\r\n }}\r\n />\r\n
\r\n
\r\n <>\r\n \r\n \r\n
\r\n
\r\n\r\n );\r\n};\r\nexport default LoginMailAdress;","import React, { useContext, useEffect, useState } from 'react';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { Button, TextField, Grid } from '@material-ui/core';\r\nimport LanguageChangeCard from '../../molecules/Card/LanguageChangeCardEx';\r\nimport { AppContext } from '../../../App';\r\nimport { useTranslation } from 'react-i18next';\r\nimport OKCancelDialog from '../../atoms/Dialog/OKCancelDialog';\r\nimport MessageDialog, { MessageDialogResponse } from '../../atoms/Dialog/MessageDialog';\r\nimport bgImage from '../../../image/loginBack.png';\r\nimport bgImageE from '../../../image/loginBackE.png';\r\nimport { ErrorCode } from '../../../ErrorCode';\r\n\r\nimport LoginUserSettingPassWordChangeBody from '../CustomConfig/LoginUserSetting/LoginUserSettingPassWordChangeBody';\r\nimport { passwordCheckType } from '../CustomConfig/LoginUserSetting/LoginUserSetting';\r\n\r\nimport { TableBaseStyle } from './LoginStyle';\r\nimport LoginMode from './LoginMode';\r\nimport SendLoginMode from './SendLoginMode';\r\nimport LoginTwoPasswordMode from './LoginTwoPasswordMode';\r\nimport { useModal } from '../../../function/useModal';\r\nimport { USER_MNG, GetUserInfos, UpdatePassword, CheckPasswordFormat } from '../../../function/UserManageModel';\r\nimport LoginMailAdress from './LoginMailAdress';\r\n\r\ntype LoginPageProps = {\r\n userid: string;\r\n};\r\n\r\nconst LoginPage: React.FC = (props) => {\r\n const classes = TableBaseStyle();\r\n const { login, state } = useContext(AppContext);\r\n const [user, setUser] = useState(props.userid);\r\n const [password, setPassword] = useState('');\r\n const [oneteimePassword, setOneteimePassword] = useState('');\r\n const [mailAdress, setMailAdress] = useState('');\r\n const { t } = useTranslation();\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n const [dlgtitle, setDlgtitle] = useState('');\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n const [containerStyle, setContainerStyle] = useState(classes.loginContainer);\r\n const [dialogOpen, setDialogOpen] = React.useState(false);\r\n const [loginMode, setLoginMode] = useState(false);\r\n const [onetimePassMode, setOnetimePassMode] = useState(false);\r\n const [entryMailAdressMode, setEntryMailAdressMode] = useState(false);\r\n const [onetimePasswordValidityTime, setOnetimePasswordValidityTime] = useState(0);\r\n\r\n const cfmdlg = flgMsgDlg ? : null;\r\n\r\n const [passCheck, setPassCheck] = React.useState({\r\n indexNo: 0,\r\n nowPassword: '',\r\n newPassword: '',\r\n confirmationPassword: '',\r\n hasPassword: true,\r\n });\r\n\r\n /**\r\n * ログイン画面のパターン確認\r\n * true:2段階認証モード\r\n */\r\n useEffect(() => {\r\n login.loginMode().then((result) => {\r\n console.log('loginMode ', result);\r\n\r\n setLoginMode(result);\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n switch (state.lang) {\r\n case 'en':\r\n setContainerStyle(classes.loginContainerE);\r\n break;\r\n case 'ja':\r\n default:\r\n setContainerStyle(classes.loginContainer);\r\n break;\r\n }\r\n }, [state.lang]);\r\n\r\n /**\r\n * ログイン処理\r\n * @returns\r\n */\r\n const loginAction = () => {\r\n if (user === '') {\r\n setDlgtitle(t('Login.ログインエラー', 'ログインエラー'));\r\n setDlgmsg(t('Login.ユーザIDを入力してください', 'ユーザIDを入力してください'));\r\n actMsgDlg.open();\r\n return;\r\n }\r\n if (password === '') {\r\n setDlgtitle(t('Login.ログインエラー', 'ログインエラー'));\r\n setDlgmsg(t('Login.パスワードを入力してください', 'パスワードを入力してください'));\r\n actMsgDlg.open();\r\n return;\r\n }\r\n\r\n let errorMsg = CheckPasswordFormat(password, t);\r\n if (user !== 'root' && errorMsg !== '') {\r\n setDlgtitle(t('Login.ログインエラー', 'ログインエラー'));\r\n setDlgmsg(errorMsg);\r\n actMsgDlg.open();\r\n return;\r\n }\r\n\r\n console.debug('User:', user);\r\n login.login(user, password).then((result) => {\r\n console.log('Login ', result);\r\n if (result.ResponceData.ErrorCode !== 0) {\r\n if (result.ResponceData.ErrorCode === ErrorCode.ERR_CODE_USER_PASSWORD_NOMATCH) {\r\n setDlgtitle(t('Login.ログインエラー', 'ログインエラー'));\r\n setDlgmsg(t('Login.エラー', 'ユーザーまたはパスワードが違います'));\r\n actMsgDlg.open().apply((resp) => {\r\n setUser('');\r\n setPassword('');\r\n });\r\n } else if (result.ResponceData.ErrorCode === ErrorCode.ERR_CODE_USER_NO_USER) {\r\n setDlgtitle(t('Login.ログインエラー', 'ログインエラー'));\r\n setDlgmsg(t('Login.ユーザーIDが存在しません', 'ユーザーIDが存在しません'));\r\n actMsgDlg.open().apply((resp) => {\r\n setUser('');\r\n setPassword('');\r\n });\r\n } else if (result.ResponceData.ErrorCode === ErrorCode.ERR_CODE_USER_LOCK) {\r\n setDlgtitle(t('Login.ログインエラー', 'ログインエラー'));\r\n setDlgmsg(\r\n t(\r\n 'Login.ログイン制限がかかっているため_ログインできません',\r\n 'ログイン制限がかかっているため、ログインできません'\r\n )\r\n );\r\n actMsgDlg.open().apply((resp) => {\r\n setUser('');\r\n setPassword('');\r\n });\r\n } else if (result.ResponceData.ErrorCode === ErrorCode.ERR_CODE_USER_PASSWORD_EXPIRATION) {\r\n setDlgtitle(t('Login.ログインエラー', 'ログインエラー'));\r\n setDlgmsg(\r\n t('Login.パスワード有効期限切れ', 'パスワードの有効期限が切れています、パスワードの変更をしてください')\r\n );\r\n actMsgDlg.open().apply((resp) => {\r\n setDialogOpen(true);\r\n });\r\n } else {\r\n setDlgtitle(t('Login.ログインエラー', 'ログインエラー'));\r\n setDlgmsg(t('Login.システムエラーが発生しました', 'システムエラーが発生しました'));\r\n actMsgDlg.open().apply((resp) => {\r\n setUser('');\r\n setPassword('');\r\n });\r\n }\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * ワンタイムパスワード送信処理\r\n */\r\n const SendMailAction = () => {\r\n if (user === '') {\r\n setDlgtitle(t('Login.2段階認証パスワード送信エラー', '2段階認証パスワード送信エラー'));\r\n setDlgmsg(t('Login.ユーザIDを入力してください', 'ユーザIDを入力してください'));\r\n actMsgDlg.open();\r\n setOnetimePassMode(false);\r\n return;\r\n }\r\n if (password === '') {\r\n setDlgtitle(t('Login.2段階認証パスワード送信エラー', '2段階認証パスワード送信エラー'));\r\n setDlgmsg(t('Login.パスワードを入力してください', 'パスワードを入力してください'));\r\n actMsgDlg.open();\r\n setOnetimePassMode(false);\r\n return;\r\n }\r\n let errorMsg = CheckPasswordFormat(password, t);\r\n if (user !== 'root' && errorMsg !== '') {\r\n setDlgtitle(t('Login.2段階認証パスワード送信エラー', '2段階認証パスワード送信エラー'));\r\n setDlgmsg(errorMsg);\r\n actMsgDlg.open();\r\n setOnetimePassMode(false);\r\n return;\r\n }\r\n console.debug('SendMailAction User:', user);\r\n\r\n //2段階認証パスワード送信処理\r\n login.sendPassword(user, password).then((result) => {\r\n console.log('SendMailAction result', result);\r\n if (result.ResponceData.ErrorCode === ErrorCode.ERR_CODE_NONE) {\r\n console.log('パスワード送信完了');\r\n //特殊ユーザー権限処理\r\n if (result.AdminUserId == true) {\r\n loginAction();\r\n } else {\r\n setOnetimePasswordValidityTime(result.OnetimePasswordValidityTime);\r\n setOnetimePassMode(true);\r\n //メールアドレス登録モードを閉じる\r\n setEntryMailAdressMode(false);\r\n }\r\n } else if (result.ResponceData.ErrorCode === ErrorCode.ERR_CODE_USER_PASSWORD_NOMATCH) {\r\n setDlgtitle(t('Login.2段階認証パスワード送信エラー', '2段階認証パスワード送信エラー'));\r\n setDlgmsg(t('Login.パスワードが違います', 'パスワードが違います'));\r\n actMsgDlg.open().apply((resp) => {\r\n setPassword('');\r\n setOnetimePassMode(false);\r\n });\r\n } else if (result.ResponceData.ErrorCode === ErrorCode.ERR_CODE_USER_NO_USER) {\r\n setDlgtitle(t('Login.2段階認証パスワード送信エラー', '2段階認証パスワード送信エラー'));\r\n setDlgmsg(t('Login.ユーザーIDが存在しません', 'ユーザーIDが存在しません'));\r\n actMsgDlg.open().apply((resp) => {\r\n setUser('');\r\n setPassword('');\r\n setOnetimePassMode(false);\r\n });\r\n } else if (result.ResponceData.ErrorCode === ErrorCode.ERR_CODE_USER_PASSWORD_EXPIRATION) {\r\n setDlgtitle(t('Login.2段階認証パスワード送信エラー', '2段階認証パスワード送信エラー'));\r\n setDlgmsg(\r\n t('Login.パスワード有効期限切れ', 'パスワードの有効期限が切れています、パスワードの変更をしてください')\r\n );\r\n actMsgDlg.open().apply((resp) => {\r\n setDialogOpen(true);\r\n setOnetimePassMode(false);\r\n });\r\n } else if (result.ResponceData.ErrorCode === ErrorCode.ERR_CODE_USER_LOCK) {\r\n setDlgtitle(t('Login.2段階認証パスワード送信エラー', '2段階認証パスワード送信エラー'));\r\n setDlgmsg(\r\n t(\r\n 'Login.ログイン制限がかかっているため_ログインできません',\r\n 'ログイン制限がかかっているため、ログインできません'\r\n )\r\n );\r\n actMsgDlg.open().apply((resp) => {\r\n setUser('');\r\n setPassword('');\r\n setOnetimePassMode(false);\r\n });\r\n } else if (result.ResponceData.ErrorCode === ErrorCode.ERR_CODE_USER_NOMAILADRESS) {\r\n //メールアドレス登録画面に移動\r\n setEntryMailAdressMode(true);\r\n } else {\r\n setDlgtitle(t('Login.2段階認証パスワード送信エラー', '2段階認証パスワード送信エラー'));\r\n setDlgmsg(t('Login.システムエラーが発生しました', 'システムエラーが発生しました'));\r\n actMsgDlg.open().apply((resp) => {\r\n setUser('');\r\n setPassword('');\r\n setOnetimePassMode(false);\r\n });\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * 2段階認証 ログイン処理\r\n * @returns\r\n */\r\n const ontimeLoginAction = () => {\r\n if (password === '') {\r\n setDlgtitle(t('Login.ログインエラー', 'ログインエラー'));\r\n setDlgmsg(t('Login.パスワードを入力してください', 'パスワードを入力してください'));\r\n actMsgDlg.open();\r\n return;\r\n }\r\n\r\n login.onetimeLogin(user, oneteimePassword).then((result) => {\r\n console.log('Login ', result);\r\n if (result.ResponceData.ErrorCode !== 0) {\r\n if (result.ResponceData.ErrorCode === ErrorCode.ERR_CODE_USER_PASSWORD_NOMATCH) {\r\n setDlgtitle(t('Login.ログインエラー', 'ログインエラー'));\r\n setDlgmsg(t('Login.パスワードが違います', 'パスワードが違います'));\r\n actMsgDlg.open().apply((resp) => {\r\n setOneteimePassword('');\r\n });\r\n } else if (result.ResponceData.ErrorCode === ErrorCode.ERR_CODE_USER_LOCK) {\r\n setDlgtitle(t('Login.ログインエラー', 'ログインエラー'));\r\n setDlgmsg(\r\n t(\r\n 'Login.ログイン制限がかかっているため_ログインできません',\r\n 'ログイン制限がかかっているため、ログインできません'\r\n )\r\n );\r\n actMsgDlg.open().apply((resp) => {\r\n setOneteimePassword('');\r\n });\r\n } else if (result.ResponceData.ErrorCode === ErrorCode.ERR_CODE_USER_PASSWORD_EXPIRATION) {\r\n setDlgtitle(t('Login.ログインエラー', 'ログインエラー'));\r\n setDlgmsg(\r\n t(\r\n 'Login.ワンタイムパスワードの有効期限が切れています再度パスワードを発行してください',\r\n 'ワンタイムパスワードの有効期限が切れています、再度パスワードを発行してください'\r\n )\r\n );\r\n actMsgDlg.open().apply((resp) => {\r\n backAction();\r\n });\r\n } else {\r\n setDlgtitle(t('Login.ログインエラー', 'ログインエラー'));\r\n setDlgmsg(t('Login.システムエラーが発生しました', 'システムエラーが発生しました'));\r\n actMsgDlg.open().apply((resp) => {\r\n setUser('');\r\n setPassword('');\r\n });\r\n }\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * 2段階認証戻るボタン処理\r\n */\r\n const backAction = () => {\r\n //初期化処理\r\n //setUser('');\r\n setPassword('');\r\n setOneteimePassword('');\r\n\r\n setOnetimePassMode(false);\r\n console.debug('backAction onetimePassMode', onetimePassMode);\r\n };\r\n\r\n /**\r\n * メールアドレス登録処理\r\n * @returns\r\n */\r\n const entryMailAdressAction = () => {\r\n if (mailAdress === '') {\r\n setDlgtitle(t('Login.メールアドレス登録エラー', 'メールアドレス登録エラー'));\r\n setDlgmsg(t('Login.メールアドレスを記入してください', 'メールアドレスを記入してください'));\r\n actMsgDlg.open();\r\n return;\r\n }\r\n\r\n login.entryAdress(user, mailAdress).then((result) => {\r\n console.log('Entry', result);\r\n //エラー処理確認\r\n if (result.ResponceData.ErrorCode !== 0) {\r\n if (result.ResponceData.ErrorCode === ErrorCode.ERR_CODE_USER_NO_USER) {\r\n setDlgtitle(t('Login.メールアドレス登録エラー', 'Login.メールアドレス登録エラー'));\r\n setDlgmsg(t('Login.ユーザーが存在しません', 'ユーザーが存在しません'));\r\n actMsgDlg.open().apply((resp) => {\r\n //1番最初の画面に戻る\r\n setEntryMailAdressMode(false);\r\n backAction();\r\n });\r\n } else if (result.ResponceData.ErrorCode === ErrorCode.ERR_CODE_USER_MAILADRESS) {\r\n setDlgtitle(t('Login.メールアドレス登録エラー', 'Login.メールアドレス登録エラー'));\r\n setDlgmsg(t('Login.メールアドレスの形式が違います', 'メールアドレスの形式が違います'));\r\n actMsgDlg.open().apply((resp) => {\r\n setMailAdress('');\r\n });\r\n } else {\r\n setDlgtitle(t('Login.メールアドレス登録エラー', 'メールアドレス登録エラー'));\r\n setDlgmsg(t('Login.システムエラーが発生しました', 'システムエラーが発生しました'));\r\n actMsgDlg.open().apply((resp) => {\r\n setMailAdress('');\r\n });\r\n }\r\n }\r\n setMailAdress(result.MAIL_ADRESS);\r\n //メール送信処理\r\n SendMailAction();\r\n });\r\n };\r\n\r\n /**\r\n *パスワード変更処理\r\n */\r\n const handlePasswordCheckOkButton = () => {\r\n setDlgtitle(t('Login.パスワード変更エラ', 'パスワード変更エラー'));\r\n let errorMsg = CheckPasswordFormat(passCheck.newPassword, t);\r\n if (errorMsg !== '') {\r\n setDlgmsg(errorMsg);\r\n actMsgDlg.open();\r\n return;\r\n }\r\n\r\n if (passCheck.newPassword !== passCheck.confirmationPassword) {\r\n setDlgmsg(\r\n t('LoginUserSettingPage.新しいパスワードと確認用が一致しません', '新しいパスワードと確認用が一致しません')\r\n );\r\n actMsgDlg.open();\r\n return;\r\n }\r\n\r\n // 現在のパスワードがあるときのみ\r\n UpdatePassword(user, passCheck.nowPassword, passCheck.newPassword).then((r) => {\r\n //パスワード変更を反映\r\n if (r.ErrorCode == 0) {\r\n setDlgtitle(t('Login.パスワード変更', 'パスワード変更'));\r\n setDlgmsg(t('LoginUserSettingPage.パスワードが変更されました', 'パスワードが変更されました'));\r\n actMsgDlg.open().apply((resp) => {\r\n setPassword('');\r\n setDialogOpen(false);\r\n });\r\n } else if (r.ErrorCode == ErrorCode.ERR_CODE_USER_NO_USER) {\r\n setDlgmsg(t('LoginUserSettingPage.選択したユーザID情報が不正です', '選択したユーザID情報が不正です'));\r\n actMsgDlg.open();\r\n } else if (r.ErrorCode == ErrorCode.ERR_CODE_USER_PASSWORD_NOMATCH) {\r\n setDlgmsg(t('LoginUserSettingPage.現在のパスワードが違います', '現在のパスワードが違います'));\r\n actMsgDlg.open();\r\n } else if (r.ErrorCode == ErrorCode.ERR_CODE_USER_PASSWORD_OLD) {\r\n setDlgmsg(\r\n t('LoginUserSettingPage.過去に使用したパスワードは使用できません', '過去に使用したパスワードは使用できません')\r\n );\r\n actMsgDlg.open();\r\n } else if (r.ErrorCode == ErrorCode.ERR_CODE_SYSTEM_ERROR) {\r\n setDlgmsg(t('LoginUserSettingPage.システムエラーが発生しました', 'システムエラーが発生しました'));\r\n actMsgDlg.open();\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * ダイアログで変更した値を管理\r\n * @param key\r\n * @param value\r\n */\r\n const updatecheckPassword = (key: string, value: string): void => {\r\n var _passwordCheck = { ...passCheck };\r\n _passwordCheck = { ..._passwordCheck, [key]: value };\r\n setPassCheck(_passwordCheck);\r\n };\r\n /**\r\n * ユーザー名変更\r\n * @param userName\r\n */\r\n const changeUserName = (userName: string): void => {\r\n setUser(userName);\r\n };\r\n /**\r\n * パスワード変更\r\n * @param userPssword\r\n */\r\n const changePassWord = (userPssword: string): void => {\r\n setPassword(userPssword);\r\n };\r\n\r\n /**\r\n * 2段階認証パスワード変更\r\n * @param twoPassword\r\n */\r\n const changeOnetimePassword = (twoPassword: string): void => {\r\n setOneteimePassword(twoPassword);\r\n };\r\n /**\r\n * メールアドレス登録\r\n * @param entrymailAdress\r\n */\r\n const entryMailAdressName = (entrymailAdress: string): void => {\r\n setMailAdress(entrymailAdress);\r\n };\r\n\r\n return (\r\n <>\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {/**2段階認証ログイン画面に切替 true:2段階認証ログイン画面,false:2段階認証送信処理画面or通常ログイン処理画面*/}\r\n {onetimePassMode === false ? (\r\n <>\r\n {entryMailAdressMode === false ? (\r\n <>\r\n
\r\n {/**ログインモードの切替処理 true:2段階認証送信処理,false:通常ログイン処理 */}\r\n {loginMode === false ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n ) : (\r\n <>\r\n
\r\n \r\n \r\n )}\r\n \r\n ) : (\r\n <>\r\n
\r\n \r\n \r\n )}\r\n\r\n {cfmdlg}\r\n handlePasswordCheckOkButton()}\r\n onCancel={() => setDialogOpen(false)}\r\n title={t('LoginUserSettingGrid.パスワード変更', 'パスワード変更')}\r\n okText={t('LoginUserSettingGrid.OK', 'OK')}\r\n cancelText={t('LoginUserSettingGrid.キャンセル', 'キャンセル')}\r\n maxWidth={'sm'}\r\n >\r\n \r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nexport default LoginPage;\r\n","import { Dispatch, SetStateAction } from 'react';\r\nimport {\r\n AuthenticateUser,\r\n USER_INFO,\r\n SystemSettingModelType,\r\n GetLoginMode,\r\n SendPasswordInfo,\r\n SendMailAction,\r\n OnetimeAuthenticate, EntryMailAdressInfo,\r\n EntryMailAction,\r\n GetLogoutMode\r\n} from './function/UserManageModel';\r\n\r\n/**\r\n * セッション保存情報\r\n */\r\ntype SaveSession = {\r\n id: string;\r\n userName: string;\r\n setAuth: boolean;\r\n systemAuth: boolean;\r\n repAuth: boolean;\r\n isIoT: boolean;\r\n systemSettingModel: SystemSettingModelType;\r\n}\r\n\r\n\r\nconst SessionKey: string = \"Rolling\";\r\n\r\nexport class LoginState {\r\n private _UserName: string = \"\";\r\n private _ID: string = \"\";\r\n private _IsLogin: boolean = false;\r\n private _SET_AUTH: boolean = false;\r\n private _REP_AUTH: boolean = false;\r\n private _SYSTEM_AUTH: boolean = false;\r\n private _IsIoT: boolean = false;\r\n private _SystemSettingModel: SystemSettingModelType = {\r\n ThreeDButtonEnabled: 0,\r\n ReportButtonEnabled: 0,\r\n OffLineJudgeButtonEnabled: 0,\r\n ConanairEnabled: 0,\r\n EmcbEnabled: 0,\r\n PartialDischargeEnabled: 0,\r\n OnetimePasswordEnable: 0,\r\n };\r\n private _dispatch: Dispatch>;\r\n\r\n private static _instance: LoginState;\r\n\r\n /**\r\n * ユーザー名\r\n */\r\n get UserName(): string {\r\n return this._UserName;\r\n }\r\n\r\n /**\r\n * ユーザーID\r\n */\r\n get ID(): string {\r\n return this._ID;\r\n }\r\n\r\n /**\r\n * ログイン状態\r\n */\r\n get IsLogin(): boolean {\r\n return this._IsLogin;\r\n }\r\n\r\n get SET_AUTH(): boolean {\r\n return this._SET_AUTH;\r\n }\r\n\r\n get REP_AUTH(): boolean {\r\n return this._REP_AUTH;\r\n }\r\n\r\n get IsIoT(): boolean {\r\n return this._IsIoT;\r\n }\r\n get SYSTEM_AUTH(): boolean {\r\n return this._SYSTEM_AUTH;\r\n }\r\n\r\n /**\r\n * システム設定\r\n */\r\n get GetSystemSettingModel(): SystemSettingModelType {\r\n return this._SystemSettingModel;\r\n }\r\n\r\n public static getInstance(dispatch: Dispatch>): LoginState {\r\n if (!this._instance) {\r\n this._instance = new LoginState(dispatch);\r\n }\r\n\r\n return this._instance;\r\n }\r\n\r\n private constructor(dispatch: Dispatch>) {\r\n console.log('LoginState ctor');\r\n this._dispatch = dispatch;\r\n\r\n let sessionStr = sessionStorage.getItem(SessionKey);\r\n //console.debug('LoginState ctor -- sessionStr:', sessionStr);\r\n if (sessionStr) {\r\n // セッションに保存されているときは復元しログイン情報とする\r\n let session: SaveSession = JSON.parse(sessionStr);\r\n this._ID = session.id;\r\n this._UserName = session.userName;\r\n this._SET_AUTH = session.setAuth;\r\n this._SYSTEM_AUTH = session.systemAuth;\r\n this._REP_AUTH = session.repAuth;\r\n this._IsIoT = session.isIoT;\r\n this._SystemSettingModel = session.systemSettingModel;\r\n this._IsLogin = true;\r\n this._dispatch(this._IsLogin);\r\n }\r\n }\r\n\r\n /**\r\n * ログイン処理\r\n * @param id ユーザーID\r\n * @param pw パスワード\r\n * @returns ログイン成功時true\r\n */\r\n login(id: string, pw: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n AuthenticateUser(id, pw)\r\n .then((result: USER_INFO) => {\r\n console.log('userResp', result);\r\n this._IsLogin = result.USER_ID?.toUpperCase() === id.toUpperCase();\r\n console.debug(`this._IsLogin : ${this._IsLogin}, result.USER_ID : ${result.USER_ID}, id : ${id}`);\r\n\r\n this._ID = result.USER_ID;\r\n this._UserName = result.USER_NAME;\r\n this._SET_AUTH = result.SET_AUTH;\r\n this._SYSTEM_AUTH = result.SYSTEM_AUTH;\r\n this._REP_AUTH = result.REP_AUTH;\r\n this._IsIoT = result.IS_IOT;\r\n this._SystemSettingModel = result.SystemSettingModel;\r\n\r\n this._dispatch(this._IsLogin);\r\n console.log('username [', this.UserName, ']');\r\n\r\n let saveSession: SaveSession = {\r\n id: this._ID,\r\n userName: this._UserName,\r\n setAuth: this._SET_AUTH,\r\n repAuth: this._REP_AUTH,\r\n systemAuth: this._SYSTEM_AUTH,\r\n isIoT: this._IsIoT,\r\n systemSettingModel: this._SystemSettingModel,\r\n }\r\n sessionStorage.setItem(SessionKey, JSON.stringify(saveSession));\r\n\r\n resolve(result);\r\n })\r\n .catch(reason => reject(reason));\r\n });\r\n }\r\n\r\n /**\r\n * ログアウト処理\r\n */\r\n logout() {\r\n return new Promise((resolve, reject) => {\r\n GetLogoutMode()\r\n .then((result: boolean) => {\r\n console.log('GetLogoutMode', result);\r\n\r\n resolve(result);\r\n this._IsLogin = false;\r\n this._dispatch(false);\r\n\r\n sessionStorage.removeItem(SessionKey);\r\n })\r\n .catch(reason => reject(reason));\r\n });\r\n\r\n }\r\n\r\n /**\r\n * 2段階認証処理が有効か確認する処理\r\n * @returns \r\n */\r\n loginMode() {\r\n return new Promise((resolve, reject) => {\r\n GetLoginMode()\r\n .then((result: boolean) => {\r\n console.log('GetLoginMode', result);\r\n\r\n\r\n resolve(result);\r\n })\r\n .catch(reason => reject(reason));\r\n });\r\n }\r\n\r\n /**\r\n * 2段階認証パスワード送信処理\r\n * @param id \r\n * @param pw \r\n * @returns \r\n */\r\n sendPassword(id: string, pw: string) {\r\n return new Promise((resolve, reject) => {\r\n SendMailAction(id, pw)\r\n .then((result: SendPasswordInfo) => {\r\n console.log('sendPassword', result);\r\n\r\n this._ID = result.USER_ID;\r\n\r\n resolve(result);\r\n })\r\n .catch(reason => reject(reason));\r\n });\r\n }\r\n\r\n /**\r\n * 2段階認証 ログイン処理\r\n * @param id \r\n * @param pw \r\n * @returns \r\n */\r\n onetimeLogin(id: string, pw: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n OnetimeAuthenticate(id, pw)\r\n .then((result: USER_INFO) => {\r\n console.log('userResp', result);\r\n this._IsLogin = result.USER_ID?.toUpperCase() === id.toUpperCase();\r\n console.debug(`this._IsLogin : ${this._IsLogin}, result.USER_ID : ${result.USER_ID}, id : ${id}`);\r\n\r\n this._ID = result.USER_ID;\r\n this._UserName = result.USER_NAME;\r\n this._SET_AUTH = result.SET_AUTH;\r\n this._SYSTEM_AUTH = result.SYSTEM_AUTH;\r\n this._REP_AUTH = result.REP_AUTH;\r\n this._IsIoT = result.IS_IOT;\r\n this._SystemSettingModel = result.SystemSettingModel;\r\n\r\n this._dispatch(this._IsLogin);\r\n console.log('username [', this.UserName, ']');\r\n\r\n let saveSession: SaveSession = {\r\n id: this._ID,\r\n userName: this._UserName,\r\n setAuth: this._SET_AUTH,\r\n repAuth: this._REP_AUTH,\r\n systemAuth: this._SYSTEM_AUTH,\r\n isIoT: this._IsIoT,\r\n systemSettingModel: this._SystemSettingModel,\r\n }\r\n sessionStorage.setItem(SessionKey, JSON.stringify(saveSession));\r\n\r\n resolve(result);\r\n })\r\n .catch(reason => reject(reason));\r\n });\r\n }\r\n\r\n /**\r\n * メールアドレス登録処理\r\n * @param user \r\n * @param adress \r\n * @returns \r\n */\r\n entryAdress(user: string, adress: string) {\r\n return new Promise((resolve, reject) => {\r\n EntryMailAction(user, adress)\r\n .then((result: EntryMailAdressInfo) => {\r\n console.log(['entryAdress --result', result]);\r\n\r\n resolve(result);\r\n }).catch(reason => reject(reason));\r\n });\r\n }\r\n\r\n}\r\n","import { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\n\r\nexport const TableBaseStyle = makeStyles(\r\n createStyles({\r\n //テーブルヘッダセル\r\n headerCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n backgroundColor: 'grey',\r\n textAlign: 'center',\r\n color: 'white',\r\n },\r\n bodyCell: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'left',\r\n minWidth: '100px',\r\n padding: '4px',\r\n height: '30px',\r\n },\r\n bodyCellCenter: {\r\n borderWidth: '1px',\r\n borderColor: '#dcdcdc',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n padding: '4px',\r\n height: '30px',\r\n },\r\n //テキスト\r\n textField: {\r\n flexGrow: 1,\r\n height: '100%',\r\n width: '100%',\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n textAlign: \"center\",\r\n },\r\n checkBoxLabel: {\r\n display: 'block',\r\n paddingTop: '5px',\r\n },\r\n })\r\n);\r\n\r\nexport const ReportJudgeStyle = makeStyles(\r\n createStyles({\r\n paperRoot: {\r\n maxWidth: '600px',\r\n minWidth: '400px',\r\n padding: '5px',\r\n },\r\n })\r\n);\r\n\r\nexport const FooterBaseStyle = makeStyles(\r\n createStyles({\r\n buttonStyle: {\r\n maxWidth: '180px',\r\n maxHeight: '35px',\r\n minWidth: '180px',\r\n minHeight: '35px',\r\n },\r\n })\r\n);\r\n","import React from 'react';\r\nimport Button from '@material-ui/core/Button';\r\nimport Grid, { GridSpacing } from '@material-ui/core/Grid';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { FooterBaseStyle}from \"./ReportStyle\";\r\n\r\ntype ReportPageFooterProps = {\r\n onClickSelectButton: () => void;\r\n buttonEnable: boolean;\r\n};\r\n\r\nconst ReportPageFooter: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const footerBaseStyle = FooterBaseStyle();\r\n return (\r\n \r\n \r\n {\r\n props.onClickSelectButton();\r\n }}\r\n >\r\n {t('ReportPageFooter.実行','実行')}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ReportPageFooter;\r\n","import { NAME_DEV_SET, GetNameDevSetListByEst1 } from '../../../function/NameDevSetModel';\r\nimport ItemComboBoxStr, { ComboBoxItemTypeS } from '../../atoms/ComboBox/ItemComboBoxStr';\r\n\r\nexport type SelectDataType = {\r\n devIndex: string; //選択機器番号\r\n selectDate: string; //選択日時\r\n isVibrationTrend: boolean; // 振動トレンド\r\n isBearing: boolean; //軸受\r\n isRotateBar: boolean; //回転子バー損傷\r\n isElecTrend: boolean; //電流トレンド\r\n isTemperature: boolean; //温度\r\n};\r\n\r\n\r\n/**\r\n * レポートファイル取得API実行\r\n * @returns\r\n */\r\nexport const GetReportFile = (selectData : SelectDataType): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const query_params = new URLSearchParams({\r\n devIndex: selectData.devIndex,\r\n selectDate: selectData.selectDate,\r\n isVibrationTrend: String(selectData.isVibrationTrend),\r\n isBearing: String(selectData.isBearing),\r\n isRotateBar: String(selectData.isRotateBar),\r\n isElecTrend: String(selectData.isElecTrend),\r\n isTemperature: String(selectData.isTemperature)\r\n });\r\n let fileName = \"tmp.xlsx\";\r\n\r\n fetch(\"api/Report?\" + query_params)\r\n .then(res => {\r\n if (!res.ok) {\r\n let message = `データが見つかりませんでした status:${res.status}`;\r\n console.error(message);\r\n reject(message);\r\n }\r\n else {\r\n var disposition = String(res.headers.get('content-disposition'));\r\n fileName = getFileNameFromContentDisposition(disposition);\r\n console.debug(res);\r\n return res.blob();\r\n }\r\n })\r\n .then(result => {\r\n console.debug(result);\r\n\r\n if (result?.type === \"application/octet-stream\") {\r\n\r\n const downloadTag = document.createElement('a');\r\n downloadTag.href = URL.createObjectURL(result);\r\n downloadTag.download = fileName;\r\n console.log(result);\r\n downloadTag.click();\r\n console.debug(\"OK\");\r\n resolve(true);\r\n }\r\n else {\r\n console.debug(\"NG\");\r\n reject(false);\r\n }\r\n \r\n })\r\n .catch(function (error) {\r\n console.log('Request failed', error)\r\n reject(false);\r\n });\r\n });\r\n};\r\n\r\nconst GetReportFileValidete = (target : SelectDataType) : boolean => {\r\n return true;\r\n}\r\n\r\n/**\r\n * ファイル名を返す\r\n * @param disposition\r\n * @returns\r\n */\r\nconst getFileNameFromContentDisposition = (disposition : string) => {\r\n const filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/; // 正規表現でfilenameを抜き出す\r\n const matches = filenameRegex.exec(disposition);\r\n if (matches != null && matches[1]) {\r\n const fileName = matches[1].replace(/['\"]/g, '');\r\n return decodeURI(fileName) // 日本語対応\r\n } else {\r\n return \"temp.xlsx\";\r\n }\r\n};\r\n\r\n/**\r\n * 画面で使用するコンボボックスアイテムリストを作成\r\n * @param nameDevSets NameDevSetリスト\r\n * @returns コンボボックスリスト\r\n */\r\nexport const CreateCombBoxItems = (nameDevSets: NAME_DEV_SET[]): ComboBoxItemTypeS[] => {\r\n let comboItems: ComboBoxItemTypeS[] = [];\r\n nameDevSets.forEach((r) => {\r\n let item: ComboBoxItemTypeS = {\r\n key: r.DEV_INDEX.toString(),\r\n name: `${r.DEV_NO} ${r.DEV_NAME}`,\r\n };\r\n comboItems.push(item);\r\n });\r\n return comboItems;\r\n};\r\n","import React, { useEffect, useState } from 'react';\r\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@material-ui/core';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport ItemComboBoxStr, { ComboBoxItemTypeS } from '../../atoms/ComboBox/ItemComboBoxStr';\r\nimport MessageDialog, { MessageDialogResponse } from '../../atoms/Dialog/MessageDialog';\r\nimport { useModal } from '../../../function/useModal';\r\nimport dayjs from 'dayjs';\r\nimport ItemCalender from '../../atoms/Calendar/ItemCalender';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport ReportPageFooter from './ReportPageFooter';\r\nimport { GetReportFile, SelectDataType, CreateCombBoxItems } from './Report';\r\nimport { NAME_DEV_SET, GetNameDevSetListByEst1 } from '../../../function/NameDevSetModel';\r\nimport { TableBaseStyle, ReportJudgeStyle } from \"./ReportStyle\";\r\nimport DateInput from '../../atoms/Calendar/DateInput';\r\n\r\ntype ReportPageProps = {};\r\n\r\nconst ReportPage: React.FC = () => {\r\n const { t } = useTranslation();\r\n const tableBaseStyle = TableBaseStyle();\r\n const reportJudgeStyle = ReportJudgeStyle();\r\n\r\n const [selectData, setSelectData] = useState({\r\n devIndex: '0',\r\n selectDate: dayjs(new Date()).format('YYYY-MM-DD'),\r\n isVibrationTrend: false,\r\n isBearing: false,\r\n isRotateBar: false,\r\n isElecTrend: false,\r\n isTemperature: false,\r\n });\r\n const [selectComboBoxList, setSelectComboBoxList] = useState([]);\r\n const [buttonEnable, setButtonEnable] = useState(true);\r\n\r\n const [flgMsgDlg, actMsgDlg] = useModal();\r\n const [dlgmsg, setDlgmsg] = useState('');\r\n\r\n const msgdlg = flgMsgDlg ? : null;\r\n\r\n useEffect(() => {\r\n let isError: boolean = false;\r\n setButtonEnable(false);\r\n let cmdItems: ComboBoxItemTypeS[] = [];\r\n GetNameDevSetListByEst1()\r\n .then((r: NAME_DEV_SET[]) => {\r\n cmdItems = CreateCombBoxItems(r);\r\n setSelectComboBoxList(cmdItems);\r\n if (cmdItems.length !== 0) {\r\n setSelectData((prev) => ({ ...prev, devIndex: cmdItems[0].key }));\r\n } else {\r\n setDlgmsg(t('ReportPage.機器情報がありません', '機器情報がありません'));\r\n actMsgDlg.open();\r\n isError = true;\r\n }\r\n })\r\n .catch((e) => {\r\n setDlgmsg(t('ReportPage.データ取得中にエラーが発生しました', 'データ取得中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n console.error(['ReportPage - useEffect - Error', e]);\r\n isError = true;\r\n })\r\n .finally(() => {\r\n if (!isError) setButtonEnable(true);\r\n });\r\n }, []);\r\n\r\n /**\r\n * 機器選択変更Event\r\n * @param value\r\n */\r\n const onDevIndexSelectDataChange = (e: React.ChangeEvent<{ name?: string; value: unknown }>) => {\r\n const selectDevIndex = String(e.target.value);\r\n setSelectData((prev) => ({ ...prev, devIndex: selectDevIndex }));\r\n };\r\n /**\r\n * カレンダー値変更\r\n * @param value\r\n */\r\n const changeCalendarValueAction = (value: string) => {\r\n setSelectData((prev) => ({ ...prev, selectDate: value }));\r\n };\r\n\r\n /**\r\n * チェックボックス切替\r\n * @param event\r\n */\r\n const onInputChackBoxChenge = (e: React.ChangeEvent, index: number) => {\r\n switch (index) {\r\n case 1:\r\n setSelectData((prev) => ({ ...prev, isVibrationTrend: !prev.isVibrationTrend }));\r\n break;\r\n case 2:\r\n setSelectData((prev) => ({ ...prev, isBearing: !prev.isBearing }));\r\n break;\r\n case 3:\r\n setSelectData((prev) => ({ ...prev, isRotateBar: !prev.isRotateBar }));\r\n break;\r\n case 4:\r\n setSelectData((prev) => ({ ...prev, isElecTrend: !prev.isElecTrend }));\r\n break;\r\n case 5:\r\n setSelectData((prev) => ({ ...prev, isTemperature: !prev.isTemperature }));\r\n break;\r\n }\r\n };\r\n\r\n /**\r\n * 選択ボタンアクション\r\n */\r\n const selectAction = () => {\r\n setButtonEnable(false);\r\n var res = GetReportFile(selectData)\r\n .then((res) => {\r\n if (res) {\r\n console.debug(['selectAction - ok', selectData]);\r\n } else {\r\n setDlgmsg(t('ReportPage.ファイル出力中にエラーが発生しました', 'ファイル出力中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n console.debug(['selectAction - ng', selectData]);\r\n }\r\n })\r\n .catch((r) => {\r\n setDlgmsg(t('ReportPage.ファイル出力中にエラーが発生しました', 'ファイル出力中にエラーが発生しました'));\r\n actMsgDlg.open();\r\n console.debug(['selectAction - error', selectData]);\r\n })\r\n .finally(() => {\r\n setButtonEnable(true);\r\n });\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {t('ReportPage.機器', '機器')}\r\n \r\n \r\n \r\n \r\n \r\n {t('ReportPage.計測日', '計測日')}\r\n \r\n \r\n {/* */}\r\n \r\n \r\n \r\n {t('ReportPage.出力項目', '出力項目')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n {msgdlg}\r\n \r\n );\r\n};\r\n\r\nexport default ReportPage;\r\n","import React, { useEffect, createContext, useReducer, useState } from 'react';\r\n\r\nimport { useTranslation, initReactI18next } from 'react-i18next';\r\nimport './i18n';\r\n\r\nimport { appReducer, StateType, ActionType } from './Reducer';\r\n\r\nimport Paper from '@material-ui/core/Paper';\r\n\r\nimport AppHeader from './components/organisms/AppHeader';\r\nimport AppFooter from './components/organisms/AppFooter';\r\nimport MenuTab from './components/organisms/MenuTab';\r\nimport HomePage from './components/Pages/Home/HomePage';\r\nimport TrendGraphPage from './components/Pages/TrendGraph/TrendGraphPage';\r\nimport TrendGraphGroupSelectPage from './components/Pages/TrendGraph/TrendGraphGroupSelectPage';\r\nimport RealTimeTrendGraphPage from './components/Pages/RealTimeTrendGraph/RealTimeTrendGraphPage';\r\nimport RealTimeTrendGraphGroupSelectPage from './components/Pages/RealTimeTrendGraph/RealTimeTrendGraphGroupSelectPage';\r\nimport PhaseCurrentPage from './components/Pages/PhaseCurrent/PhaseCurrentPage';\r\nimport PhaseCurrentGroupSelectPage from './components/Pages/PhaseCurrent/PhaseCurrentGroupSelectPage';\r\nimport RawWaveformComparisonPage from './components/Pages/RawWaveformComparison/RawWaveformComparisonPage';\r\nimport RawWaveformComparisonGroupSelectPage from './components/Pages/RawWaveformComparison/RawWaveformComparisonGroupSelectPage';\r\nimport RawWaveformComparisonConanairGroupSelectPage from './components/Pages/RawWaveformComparisonConanair/RawWaveformComparisonConanairGroupSelectPage';\r\nimport RawWaveformComparisonConanairPage from './components/Pages/RawWaveformComparisonConanair/RawWaveformComparisonConanairPage';\r\nimport XYDiagramPage from './components/Pages/XYDiagram/XYDiagramPage';\r\nimport XYDiagramGroupSelectPage from './components/Pages/XYDiagram/XYDiagramGroupSelectPage';\r\nimport AlarmSummaryPage from './components/Pages/AlarmSummary/AlarmSummaryPage';\r\nimport AlarmHistoryPage from './components/Pages/AlarmHistory/AlarmHistoryPage';\r\nimport FFTComparisonPage from './components/Pages/FFTComparison/FFTComparisonPage';\r\nimport FFTComparisonGroupSelectPage from './components/Pages/FFTComparison/FFTComparisonGroupSelectPage';\r\nimport FFTComparisonConanairPage from './components/Pages/FFTComparisonConanair/FFTComparisonConanairPage';\r\nimport FFTComparisonConanairGroupSelectPage from './components/Pages/FFTComparisonConanair/FFTComparisonConanairGroupSelectPage';\r\nimport MeasureLogPage from './components/Pages/MeasureLog/MeasureLogPage';\r\nimport GroupSettingsPage from './components/Pages/GroupSettings/GroupSettingsPage';\r\nimport FeatureParameterPage from './components/Pages/FeatureParameter/FeatureParameterPage';\r\nimport MeasureSettingsPage from './components/Pages/MeasureSetting/MeasureSettingsPage';\r\nimport IoTDevListPage from './components/Pages/IoTDevList/IoTDevListPage';\r\nimport EMCTrendPage from './components/Pages/EMCTrend/EMCTrendPage';\r\nimport OffLineJudgePage from './components/Pages/OffLineJudge/OffLineJudgePage';\r\nimport PartialDischargeSettingPage from './components/Pages/PartialDischarge/PartialDischargeSettingPage';\r\nimport CustomConfigPage from './components/Pages/CustomConfig/CustomConfigPage';\r\nimport { BrowserRouter as Router, Route, Switch, Redirect } from 'react-router-dom';\r\nimport LoginPage from './components/Pages/Login/LoginPage';\r\nimport { LoginState } from './LoginState';\r\nimport { CSVDownload } from './components/molecules/CSVExport/CSVDownload';\r\nimport ReportPage from './components/Pages/Report/ReportPage';\r\nimport { useLocation } from 'react-router-dom';\r\n\r\n/**\r\n * 簡易的なLangの型\r\n */\r\ntype LangInfo = {\r\n lang: string;\r\n};\r\n\r\ntype ContextType = {\r\n state: StateType;\r\n dispatch: React.Dispatch;\r\n login: LoginState;\r\n};\r\n\r\n// コンテキストを作成する\r\nexport const AppContext = createContext({} as ContextType);\r\n\r\n/**\r\n * デフォルトのLangを取得\r\n * ローカルストレージから取得できた場合はその値をパース\r\n * 取得できない場合はjaの情報を返す\r\n * @returns\r\n */\r\nfunction getDefaultLangInfo(): LangInfo {\r\n const defaultLangInfo = window.localStorage.getItem('langInfo');\r\n if (defaultLangInfo) {\r\n console.debug(['getDefaultLangInfo localStorage ok', defaultLangInfo]);\r\n return JSON.parse(defaultLangInfo) as LangInfo;\r\n } else {\r\n console.debug(['getDefaultLangInfo localStorage ng']);\r\n return { lang: 'ja' };\r\n }\r\n}\r\n\r\n/**\r\n * Lang情報をローカルストレージに追加\r\n * @param lang\r\n */\r\nfunction setLangInfoToLocalStorage(lang: string): void {\r\n const langInfoStringfy = JSON.stringify({ lang: lang });\r\n console.debug(['getDefaultLangInfo localStorage set ', langInfoStringfy]);\r\n window.localStorage.setItem('langInfo', langInfoStringfy);\r\n}\r\n\r\nconst App: React.FC = () => {\r\n const search = useLocation().search;\r\n const query = new URLSearchParams(search);\r\n console.debug(['paramsetting userid=', query.get('userid')]);\r\n const useridParam = query.get('userid') ?? '';\r\n\r\n const { i18n } = useTranslation();\r\n const [state, dispatch] = useReducer(appReducer, getDefaultLangInfo());\r\n const [loginFlg, setLoginFlg] = useState(false);\r\n const login = LoginState.getInstance(setLoginFlg);\r\n\r\n useEffect(() => {\r\n console.debug(['useEffect', i18n, state.lang]);\r\n i18n.changeLanguage(state.lang);\r\n setLangInfoToLocalStorage(state.lang);\r\n }, [i18n, state.lang]);\r\n\r\n const loginStateFace = loginFlg ? (\r\n \r\n \r\n \r\n \r\n \r\n {login.IsIoT ? null : }\r\n {login.IsIoT ? : null}\r\n {login.IsIoT ? null : }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n } exact />\r\n \r\n \r\n );\r\n\r\n return {loginStateFace};\r\n};\r\n\r\nexport default App;\r\n","// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport default function register () {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Lets check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl);\r\n } else {\r\n // Is not local host. Just register service worker\r\n registerValidSW(swUrl);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW (swUrl) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the old content will have been purged and\r\n // the fresh content will have been added to the cache.\r\n // It's the perfect time to display a \"New content is\r\n // available; please refresh.\" message in your web app.\r\n console.log('New content is available; please refresh.');\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker (swUrl) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n if (\r\n response.status === 404 ||\r\n response.headers.get('content-type').indexOf('javascript') === -1\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister () {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import { rest } from 'msw';\r\nimport mockPLCColmNg from './resolvers/mockPLCColmNg';\r\n\r\nconst handlers = [\r\n rest.get('api/PLCColmNg', (req, res, ctx) => {\r\n // Check if the user is authenticated in this session\r\n console.debug('api/PLCColmNg======');\r\n const isAuthenticated = sessionStorage.getItem('is-authenticated');\r\n if (!isAuthenticated) {\r\n // If not authenticated, respond with a 403 error\r\n console.debug('api/PLCColmNg======');\r\n return res(\r\n ctx.status(403),\r\n ctx.json({\r\n errorMessage: 'Not authorized',\r\n })\r\n );\r\n }\r\n // If authenticated, return a mocked user details\r\n return res(\r\n ctx.status(200),\r\n ctx.json({\r\n username: 'admin',\r\n })\r\n );\r\n }),\r\n];\r\n\r\nexport default handlers;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport App from './App';\r\nimport registerServiceWorker from './registerServiceWorker';\r\n\r\nimport worker from './mocks/browser';\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\n\r\n\r\n// if (process.env.NODE_ENV === 'development') {\r\n// console.debug(\"worker - Start\")\r\n// void worker.start();\r\n// }\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n rootElement);\r\n\r\nregisterServiceWorker();\r\n","import { setupWorker } from 'msw';\r\nimport handlers from './handlers';\r\n\r\nconst worker = setupWorker(...handlers);\r\n\r\nexport default worker;\r\n"],"sourceRoot":""}