ketcher-react 3.12.0-dev.1 → 3.12.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/cjs/index.css +1 -1
  2. package/dist/cjs/index.css.map +1 -1
  3. package/dist/cjs/index.js +1212 -515
  4. package/dist/cjs/index.js.map +1 -1
  5. package/dist/cjs/{index.modern-b232add2.js → index.modern-4b58287a.js} +3 -3
  6. package/dist/cjs/index.modern-4b58287a.js.map +1 -0
  7. package/dist/cjs/script/editor/Editor.d.ts +18 -1
  8. package/dist/cjs/script/editor/tool/sgroup.d.ts +17 -0
  9. package/dist/cjs/script/editor/utils/customOnChangeHandler.test.d.ts +16 -0
  10. package/dist/cjs/script/ui/data/schema/sdata-schema.d.ts +1 -1
  11. package/dist/cjs/script/ui/state/functionalGroups/index.d.ts +1 -1
  12. package/dist/cjs/script/ui/state/notifications/index.d.ts +17 -0
  13. package/dist/cjs/script/ui/state/saltsAndSolvents/index.d.ts +1 -1
  14. package/dist/cjs/script/ui/views/components/ContextMenu/hooks/useMarkAs.d.ts +9 -0
  15. package/dist/cjs/script/ui/views/components/MonomerCreationWizard/MonomerCreationWizard.constants.d.ts +2 -0
  16. package/dist/cjs/script/ui/views/components/MonomerCreationWizard/MonomerCreationWizard.types.d.ts +6 -1
  17. package/dist/index.css +1 -1
  18. package/dist/index.css.map +1 -1
  19. package/dist/index.js +1214 -517
  20. package/dist/index.js.map +1 -1
  21. package/dist/{index.modern-06d576e1.js → index.modern-521d26f9.js} +3 -3
  22. package/dist/index.modern-521d26f9.js.map +1 -0
  23. package/dist/script/editor/Editor.d.ts +18 -1
  24. package/dist/script/editor/tool/sgroup.d.ts +17 -0
  25. package/dist/script/editor/utils/customOnChangeHandler.test.d.ts +16 -0
  26. package/dist/script/ui/data/schema/sdata-schema.d.ts +1 -1
  27. package/dist/script/ui/state/functionalGroups/index.d.ts +1 -1
  28. package/dist/script/ui/state/notifications/index.d.ts +17 -0
  29. package/dist/script/ui/state/saltsAndSolvents/index.d.ts +1 -1
  30. package/dist/script/ui/views/components/ContextMenu/hooks/useMarkAs.d.ts +9 -0
  31. package/dist/script/ui/views/components/MonomerCreationWizard/MonomerCreationWizard.constants.d.ts +2 -0
  32. package/dist/script/ui/views/components/MonomerCreationWizard/MonomerCreationWizard.types.d.ts +6 -1
  33. package/package.json +1 -1
  34. package/dist/cjs/index.modern-b232add2.js.map +0 -1
  35. package/dist/index.modern-06d576e1.js.map +0 -1
package/dist/cjs/index.js CHANGED
@@ -737,8 +737,8 @@ function exec(action) {
737
737
  return enabled;
738
738
  }
739
739
 
740
- function ownKeys$1F(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
741
- function _objectSpread$1F(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1F(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1F(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
740
+ function ownKeys$1G(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
741
+ function _objectSpread$1G(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1G(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1G(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
742
742
  var MeasurementUnits;
743
743
  (function (MeasurementUnits) {
744
744
  MeasurementUnits["Px"] = "px";
@@ -1080,7 +1080,7 @@ var optionsSchema = {
1080
1080
  title: 'Settings',
1081
1081
  type: 'object',
1082
1082
  required: [],
1083
- properties: _objectSpread$1F(_objectSpread$1F(_objectSpread$1F(_objectSpread$1F(_objectSpread$1F({}, editor), render), server), debug), miew)
1083
+ properties: _objectSpread$1G(_objectSpread$1G(_objectSpread$1G(_objectSpread$1G(_objectSpread$1G({}, editor), render), server), debug), miew)
1084
1084
  };
1085
1085
  function getDefaultOptions() {
1086
1086
  if (!optionsSchema.properties) return {};
@@ -1263,8 +1263,8 @@ function prefetchRender(tmpls, baseUrl, cacheEl) {
1263
1263
  });
1264
1264
  }
1265
1265
 
1266
- function ownKeys$1E(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1267
- function _objectSpread$1E(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1E(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1E(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1266
+ function ownKeys$1F(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1267
+ function _objectSpread$1F(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1F(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1F(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1268
1268
  var initOptionsState = {
1269
1269
  app: {
1270
1270
  server: false,
@@ -1294,7 +1294,7 @@ var initOptionsState = {
1294
1294
  getServerSettings: function getServerSettings() {
1295
1295
  var seriliazedServerOptions = getSerilizedServerOptions(this.settings);
1296
1296
  var defaultServerOptions = fp.pick(SERVER_OPTIONS, this.settings);
1297
- return _objectSpread$1E(_objectSpread$1E({}, defaultServerOptions), seriliazedServerOptions);
1297
+ return _objectSpread$1F(_objectSpread$1F({}, defaultServerOptions), seriliazedServerOptions);
1298
1298
  }
1299
1299
  };
1300
1300
  function getSerilizedServerOptions(options) {
@@ -1327,7 +1327,7 @@ function getSerilizedServerOptions(options) {
1327
1327
  'render-stereo-style': renderStereoStyle
1328
1328
  };
1329
1329
  if (options.imageResolution === '600') {
1330
- newOptions = _objectSpread$1E(_objectSpread$1E({}, newOptions), {}, {
1330
+ newOptions = _objectSpread$1F(_objectSpread$1F({}, newOptions), {}, {
1331
1331
  'render-output-sheet-width': 11,
1332
1332
  'render-output-sheet-height': 8.5
1333
1333
  });
@@ -1405,29 +1405,29 @@ function optionsReducer() {
1405
1405
  var action = arguments.length > 1 ? arguments[1] : undefined;
1406
1406
  var type = action.type,
1407
1407
  data = action.data;
1408
- if (type === 'APP_OPTIONS') return _objectSpread$1E(_objectSpread$1E({}, state), {}, {
1409
- app: _objectSpread$1E(_objectSpread$1E({}, state.app), data)
1408
+ if (type === 'APP_OPTIONS') return _objectSpread$1F(_objectSpread$1F({}, state), {}, {
1409
+ app: _objectSpread$1F(_objectSpread$1F({}, state.app), data)
1410
1410
  });
1411
1411
  if (type === 'SAVE_SETTINGS') {
1412
- return _objectSpread$1E(_objectSpread$1E({}, state), {}, {
1413
- settings: _objectSpread$1E(_objectSpread$1E({}, state.settings), data)
1412
+ return _objectSpread$1F(_objectSpread$1F({}, state), {}, {
1413
+ settings: _objectSpread$1F(_objectSpread$1F({}, state.settings), data)
1414
1414
  });
1415
1415
  }
1416
- if (type === 'SAVE_CHECK_OPTS') return _objectSpread$1E(_objectSpread$1E({}, state), {}, {
1416
+ if (type === 'SAVE_CHECK_OPTS') return _objectSpread$1F(_objectSpread$1F({}, state), {}, {
1417
1417
  check: data
1418
1418
  });
1419
- if (type === 'CHANGE_ANALYSE') return _objectSpread$1E(_objectSpread$1E({}, state), {}, {
1420
- analyse: _objectSpread$1E(_objectSpread$1E(_objectSpread$1E({}, state.analyse), data), {}, {
1419
+ if (type === 'CHANGE_ANALYSE') return _objectSpread$1F(_objectSpread$1F({}, state), {}, {
1420
+ analyse: _objectSpread$1F(_objectSpread$1F(_objectSpread$1F({}, state.analyse), data), {}, {
1421
1421
  loading: false
1422
1422
  })
1423
1423
  });
1424
- if (type === 'ANALYSE_LOADING') return _objectSpread$1E(_objectSpread$1E({}, state), {}, {
1425
- analyse: _objectSpread$1E(_objectSpread$1E({}, state.analyse), {}, {
1424
+ if (type === 'ANALYSE_LOADING') return _objectSpread$1F(_objectSpread$1F({}, state), {}, {
1425
+ analyse: _objectSpread$1F(_objectSpread$1F({}, state.analyse), {}, {
1426
1426
  loading: true
1427
1427
  })
1428
1428
  });
1429
- if (recognizeActions.includes(type)) return _objectSpread$1E(_objectSpread$1E({}, state), {}, {
1430
- recognize: _objectSpread$1E(_objectSpread$1E({}, state.recognize), data)
1429
+ if (recognizeActions.includes(type)) return _objectSpread$1F(_objectSpread$1F({}, state), {}, {
1430
+ recognize: _objectSpread$1F(_objectSpread$1F({}, state.recognize), data)
1431
1431
  });
1432
1432
  return state;
1433
1433
  }
@@ -1720,8 +1720,8 @@ function firstKeyOf(obj) {
1720
1720
  }
1721
1721
  function getSdataDefault() {
1722
1722
  var schema = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : sdataSchema;
1723
- var context = arguments.length > 1 ? arguments[1] : undefined;
1724
- var fieldName = arguments.length > 2 ? arguments[2] : undefined;
1723
+ var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
1724
+ var fieldName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
1725
1725
  if (schema.key === 'Custom') {
1726
1726
  var _schema$properties$co;
1727
1727
  return (_schema$properties$co = schema.properties[context]) === null || _schema$properties$co === void 0 ? void 0 : _schema$properties$co["default"];
@@ -1731,8 +1731,8 @@ function getSdataDefault() {
1731
1731
  return schema[context][fieldName] ? schema[context][fieldName].properties.fieldValue["default"] : '';
1732
1732
  }
1733
1733
 
1734
- function ownKeys$1D(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1735
- function _objectSpread$1D(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1D(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1D(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1734
+ function ownKeys$1E(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1735
+ function _objectSpread$1E(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1E(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1E(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1736
1736
  var initSdata = function initSdata(schema) {
1737
1737
  var isCustomShema = schema.key === 'Custom';
1738
1738
  var context = isCustomShema ? getSdataDefault(sdataCustomSchema, 'context') : getSdataDefault(sdataSchema);
@@ -1770,7 +1770,7 @@ var onContextChange = function onContextChange(state, payload) {
1770
1770
  var fValue = fieldValue;
1771
1771
  if (fValue === state.result.fieldValue) fValue = getSdataDefault(sdataCustomSchema, 'fieldValue');
1772
1772
  return {
1773
- result: _objectSpread$1D(_objectSpread$1D({}, payload), {}, {
1773
+ result: _objectSpread$1E(_objectSpread$1E({}, payload), {}, {
1774
1774
  context: context,
1775
1775
  fieldName: fieldName,
1776
1776
  fieldValue: fValue
@@ -1784,7 +1784,7 @@ var onFieldNameChange = function onFieldNameChange(state, payload) {
1784
1784
  if (sdataSchema[context][fieldName]) fieldValue = getSdataDefault(sdataSchema, context, fieldName);
1785
1785
  if (fieldValue === state.result.fieldValue && sdataSchema[context][state.result.fieldName]) fieldValue = '';
1786
1786
  return {
1787
- result: _objectSpread$1D(_objectSpread$1D({}, payload), {}, {
1787
+ result: _objectSpread$1E(_objectSpread$1E({}, payload), {}, {
1788
1788
  fieldName: fieldName,
1789
1789
  fieldValue: fieldValue
1790
1790
  })
@@ -1792,29 +1792,29 @@ var onFieldNameChange = function onFieldNameChange(state, payload) {
1792
1792
  };
1793
1793
  function sdataReducer(state, action) {
1794
1794
  if (action.data.result.init) {
1795
- return correctErrors(_objectSpread$1D(_objectSpread$1D({}, state), {}, {
1796
- result: _objectSpread$1D(_objectSpread$1D({}, state.result), action.data.result)
1795
+ return correctErrors(_objectSpread$1E(_objectSpread$1E({}, state), {}, {
1796
+ result: _objectSpread$1E(_objectSpread$1E({}, state.result), action.data.result)
1797
1797
  }), action.data);
1798
1798
  }
1799
1799
  var actionContext = action.data.result.context;
1800
1800
  var actionFieldName = action.data.result.fieldName;
1801
1801
  var newstate = null;
1802
1802
  if (actionContext !== state.result.context) newstate = onContextChange(state, action.data.result);else if (actionFieldName !== state.result.fieldName) newstate = onFieldNameChange(state, action.data.result);
1803
- newstate = newstate || _objectSpread$1D(_objectSpread$1D({}, state), {}, {
1804
- result: _objectSpread$1D(_objectSpread$1D({}, state.result), action.data.result)
1803
+ newstate = newstate || _objectSpread$1E(_objectSpread$1E({}, state), {}, {
1804
+ result: _objectSpread$1E(_objectSpread$1E({}, state.result), action.data.result)
1805
1805
  });
1806
1806
  return correctErrors(newstate, action.data);
1807
1807
  }
1808
1808
  function nucleotideComponentReducer(state, action) {
1809
- return _objectSpread$1D(_objectSpread$1D({}, state), {}, {
1810
- result: _objectSpread$1D(_objectSpread$1D(_objectSpread$1D({}, state.result), action.data.result), {}, {
1809
+ return _objectSpread$1E(_objectSpread$1E({}, state), {}, {
1810
+ result: _objectSpread$1E(_objectSpread$1E(_objectSpread$1E({}, state.result), action.data.result), {}, {
1811
1811
  type: 'nucleotideComponent'
1812
1812
  })
1813
1813
  });
1814
1814
  }
1815
1815
 
1816
- function ownKeys$1C(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1817
- function _objectSpread$1C(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1C(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1C(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1816
+ function ownKeys$1D(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1817
+ function _objectSpread$1D(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1D(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1D(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1818
1818
  var formsState = {
1819
1819
  atomProps: {
1820
1820
  errors: {},
@@ -1944,14 +1944,14 @@ function formReducer(state, action) {
1944
1944
  var newType = (_action$data = action.data) === null || _action$data === void 0 || (_action$data = _action$data.result) === null || _action$data === void 0 ? void 0 : _action$data.type;
1945
1945
  if (newType === 'DAT') return sdataReducer(state, action);
1946
1946
  if (newType === 'SUP' && (state === null || state === void 0 || (_state$result = state.result) === null || _state$result === void 0 ? void 0 : _state$result.type) !== 'nucleotideComponent' && Object.values(ketcherCore.SUPERATOM_CLASS).includes((_action$data2 = action.data) === null || _action$data2 === void 0 || (_action$data2 = _action$data2.result) === null || _action$data2 === void 0 ? void 0 : _action$data2["class"])) return nucleotideComponentReducer(state, action);
1947
- return _objectSpread$1C(_objectSpread$1C({}, state), action.data);
1947
+ return _objectSpread$1D(_objectSpread$1D({}, state), action.data);
1948
1948
  }
1949
1949
 
1950
1950
  var INDIGO_VERIFICATION = 'INDIGO_VERIFICATION';
1951
1951
  var ANALYZING_FILE = 'ANALYZING_FILE';
1952
1952
 
1953
- function ownKeys$1B(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1954
- function _objectSpread$1B(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1B(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1B(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1953
+ function ownKeys$1C(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1954
+ function _objectSpread$1C(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1C(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1C(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1955
1955
  function indigoVerification(data) {
1956
1956
  return {
1957
1957
  type: INDIGO_VERIFICATION,
@@ -1976,13 +1976,13 @@ function requestReducer () {
1976
1976
  switch (type) {
1977
1977
  case INDIGO_VERIFICATION:
1978
1978
  {
1979
- return _objectSpread$1B(_objectSpread$1B({}, state), {}, {
1979
+ return _objectSpread$1C(_objectSpread$1C({}, state), {}, {
1980
1980
  indigoVerification: data
1981
1981
  });
1982
1982
  }
1983
1983
  case ANALYZING_FILE:
1984
1984
  {
1985
- return _objectSpread$1B(_objectSpread$1B({}, state), {}, {
1985
+ return _objectSpread$1C(_objectSpread$1C({}, state), {}, {
1986
1986
  isAnalyzingFile: data
1987
1987
  });
1988
1988
  }
@@ -2001,8 +2001,8 @@ var supportedSGroupTypes = {
2001
2001
  queryComponent: 'queryComponent'
2002
2002
  };
2003
2003
 
2004
- function ownKeys$1A(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2005
- function _objectSpread$1A(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1A(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1A(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2004
+ function ownKeys$1B(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2005
+ function _objectSpread$1B(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1B(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1B(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2006
2006
  var atom = {
2007
2007
  title: 'Atom',
2008
2008
  type: 'object',
@@ -2234,7 +2234,7 @@ var sgroup = {
2234
2234
  title: 'SGroup',
2235
2235
  type: 'object',
2236
2236
  required: ['type'],
2237
- oneOf: [_objectSpread$1A({}, sdataCustomSchema), {
2237
+ oneOf: [_objectSpread$1B({}, sdataCustomSchema), {
2238
2238
  key: 'MUL',
2239
2239
  title: 'Multiple group',
2240
2240
  type: 'object',
@@ -2383,12 +2383,12 @@ function matchCharge(charge) {
2383
2383
 
2384
2384
  var _excluded$D = ["aromaticity", "ringMembership", "ringSize", "connectivity", "chirality", "customQuery"],
2385
2385
  _excluded2$7 = ["type", "radiobuttons"];
2386
- function ownKeys$1z(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2387
- function _objectSpread$1z(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1z(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1z(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2386
+ function ownKeys$1A(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2387
+ function _objectSpread$1A(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1A(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1A(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2388
2388
  var DefaultStereoGroupNumber = 1;
2389
2389
  function fromElement(selem) {
2390
2390
  if (selem.label === 'R#') {
2391
- return _objectSpread$1z({
2391
+ return _objectSpread$1A({
2392
2392
  type: 'rlabel',
2393
2393
  values: fromRlabel(selem.rglabel)
2394
2394
  }, selem);
@@ -2497,7 +2497,7 @@ function toAtom(atom) {
2497
2497
  customQuery = _atom$customQuery === void 0 ? '' : _atom$customQuery,
2498
2498
  restAtom = _objectWithoutProperties__default["default"](atom, _excluded$D);
2499
2499
  if (customQuery && customQuery !== '') {
2500
- return _objectSpread$1z(_objectSpread$1z({}, restAtom), {}, {
2500
+ return _objectSpread$1A(_objectSpread$1A({}, restAtom), {}, {
2501
2501
  label: 'A',
2502
2502
  atomList: null,
2503
2503
  pseudo: null,
@@ -2526,7 +2526,7 @@ function toAtom(atom) {
2526
2526
  }
2527
2527
  var pch = matchCharge(restAtom.charge);
2528
2528
  var charge = pch ? parseInt(pch[1] + pch[3] + pch[2]) : restAtom.charge;
2529
- var conv = _objectSpread$1z(_objectSpread$1z({}, restAtom), {}, {
2529
+ var conv = _objectSpread$1A(_objectSpread$1A({}, restAtom), {}, {
2530
2530
  isotope: restAtom.isotope ? Number(restAtom.isotope) : null,
2531
2531
  charge: restAtom.charge && charge !== 0 ? Number(charge) : null,
2532
2532
  alias: restAtom.alias || null,
@@ -2644,7 +2644,7 @@ function fromBond(sbond) {
2644
2644
  }
2645
2645
  function toBond(bond) {
2646
2646
  var isCustomQuery = bond.customQuery !== '';
2647
- return _objectSpread$1z({
2647
+ return _objectSpread$1A({
2648
2648
  topology: bond.topology,
2649
2649
  reactingCenterStatus: bond.center,
2650
2650
  customQuery: !isCustomQuery ? null : bond.customQuery
@@ -2709,7 +2709,7 @@ var bondCaptionMap = {
2709
2709
  }
2710
2710
  };
2711
2711
  function toBondType(caption) {
2712
- return _objectSpread$1z({}, bondCaptionMap[caption]);
2712
+ return _objectSpread$1A({}, bondCaptionMap[caption]);
2713
2713
  }
2714
2714
  function fromBondType(type, stereo) {
2715
2715
  for (var caption in bondCaptionMap) {
@@ -2733,7 +2733,7 @@ function fromSgroup(ssgroup) {
2733
2733
  fieldName: fieldName || getSdataDefault(sdataCustomSchema, 'fieldName'),
2734
2734
  fieldValue: fieldValue || getSdataDefault(sdataCustomSchema, 'fieldValue')
2735
2735
  } : {};
2736
- return _objectSpread$1z(_objectSpread$1z({
2736
+ return _objectSpread$1A(_objectSpread$1A({
2737
2737
  type: type
2738
2738
  }, ssgroup.attrs), sDataInitValue);
2739
2739
  }
@@ -2741,7 +2741,7 @@ function toSgroup(sgroup) {
2741
2741
  var type = sgroup.type,
2742
2742
  radiobuttons = sgroup.radiobuttons,
2743
2743
  props = _objectWithoutProperties__default["default"](sgroup, _excluded2$7);
2744
- var attrs = _objectSpread$1z({}, props);
2744
+ var attrs = _objectSpread$1A({}, props);
2745
2745
  var absolute = 'absolute';
2746
2746
  var attached = 'attached';
2747
2747
  switch (radiobuttons) {
@@ -5978,8 +5978,8 @@ var errors = {
5978
5978
  codes: codes_1
5979
5979
  };
5980
5980
 
5981
- function ownKeys$1y(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
5982
- function _objectSpread$1y(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1y(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1y(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5981
+ function ownKeys$1z(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
5982
+ function _objectSpread$1z(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1z(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1z(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5983
5983
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
5984
5984
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
5985
5985
  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
@@ -6407,7 +6407,7 @@ var AssertionError = /*#__PURE__*/function (_Error, _inspect$custom) {
6407
6407
  // the minimum depth. Otherwise those values would be too verbose compared
6408
6408
  // to the actual error message which contains a combined view of these two
6409
6409
  // input values.
6410
- return inspect(this, _objectSpread$1y(_objectSpread$1y({}, ctx), {}, {
6410
+ return inspect(this, _objectSpread$1z(_objectSpread$1z({}, ctx), {}, {
6411
6411
  customInspect: false,
6412
6412
  depth: 0
6413
6413
  }));
@@ -7931,8 +7931,8 @@ assert.strict.strict = assert.strict;
7931
7931
 
7932
7932
  var _excluded$C = ["rescale", "fragment"],
7933
7933
  _excluded2$6 = ["isPaste", "method"];
7934
- function ownKeys$1x(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
7935
- function _objectSpread$1x(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1x(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1x(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
7934
+ function ownKeys$1y(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
7935
+ function _objectSpread$1y(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1y(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1y(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
7936
7936
  function onAction(action) {
7937
7937
  if (action !== null && action !== void 0 && action.dialog) {
7938
7938
  return {
@@ -7988,7 +7988,7 @@ function load(struct, options) {
7988
7988
  errorHandler = editor.errorHandler;
7989
7989
  options = options || {};
7990
7990
  _options2 = options, isPaste = _options2.isPaste, method = _options2.method, otherOptions = _objectWithoutProperties__default["default"](_options2, _excluded2$6);
7991
- otherOptions = _objectSpread$1x(_objectSpread$1x({}, serverSettings), otherOptions);
7991
+ otherOptions = _objectSpread$1y(_objectSpread$1y({}, serverSettings), otherOptions);
7992
7992
  dispatch(setAnalyzingFile(true));
7993
7993
  _context.prev = 9;
7994
7994
  _context.next = 12;
@@ -8132,8 +8132,8 @@ function openInfoModalWithCustomMessage(message) {
8132
8132
  };
8133
8133
  }
8134
8134
 
8135
- function ownKeys$1w(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
8136
- function _objectSpread$1w(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1w(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1w(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
8135
+ function ownKeys$1x(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
8136
+ function _objectSpread$1x(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1x(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1x(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
8137
8137
  function checkServer() {
8138
8138
  return function (dispatch, getState) {
8139
8139
  var _getState = getState(),
@@ -8276,12 +8276,12 @@ function serverCall(editor, server, method, options, struct) {
8276
8276
  resetStereoFlagsPosition(currentStruct);
8277
8277
  }
8278
8278
  var ketSerializer = new ketcherCore.KetSerializer();
8279
- var serializedStruct = ketSerializer.serialize(currentStruct, undefined, _objectSpread$1w(_objectSpread$1w({}, selection), {}, {
8279
+ var serializedStruct = ketSerializer.serialize(currentStruct, undefined, _objectSpread$1x(_objectSpread$1x({}, selection), {}, {
8280
8280
  atoms: selectedAtoms,
8281
8281
  bonds: selectedBonds
8282
8282
  }));
8283
8283
  return server.then(function () {
8284
- return server[method](_objectSpread$1w(_objectSpread$1w(_objectSpread$1w({
8284
+ return server[method](_objectSpread$1x(_objectSpread$1x(_objectSpread$1x({
8285
8285
  struct: serializedStruct
8286
8286
  }, method !== 'calculate' && method !== 'check' ? {
8287
8287
  output_format: ketcherCore.ChemicalMimeType.KET
@@ -8535,7 +8535,7 @@ var zoom = {
8535
8535
 
8536
8536
  var openHelpLink = function openHelpLink() {
8537
8537
  var _window$open;
8538
- return (_window$open = window.open("https://github.com/epam/ketcher/blob/".concat("v3.12.0-dev.1\n", "/documentation/help.md#ketcher-overview"))) === null || _window$open === void 0 ? void 0 : _window$open.focus();
8538
+ return (_window$open = window.open("https://github.com/epam/ketcher/blob/".concat("v3.12.0-rc.1\n", "/documentation/help.md#ketcher-overview"))) === null || _window$open === void 0 ? void 0 : _window$open.focus();
8539
8539
  };
8540
8540
  var help = {
8541
8541
  help: {
@@ -8678,8 +8678,8 @@ var fullscreen = {
8678
8678
  }
8679
8679
  };
8680
8680
 
8681
- function ownKeys$1v(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
8682
- function _objectSpread$1v(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1v(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1v(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
8681
+ function ownKeys$1w(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
8682
+ function _objectSpread$1w(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1w(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1w(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
8683
8683
  var disableIfViewOnly = function disableIfViewOnly(editor) {
8684
8684
  return !!editor.render.options.viewOnlyMode;
8685
8685
  };
@@ -8688,13 +8688,13 @@ var updateConfigItem = function updateConfigItem(item) {
8688
8688
  return item;
8689
8689
  } else if (typeof item.disabled === 'function') {
8690
8690
  var originalDisabled = item.disabled;
8691
- return _objectSpread$1v(_objectSpread$1v({}, item), {}, {
8691
+ return _objectSpread$1w(_objectSpread$1w({}, item), {}, {
8692
8692
  disabled: function disabled() {
8693
8693
  return disableIfViewOnly(arguments.length <= 0 ? undefined : arguments[0]) || originalDisabled.apply(void 0, arguments);
8694
8694
  }
8695
8695
  });
8696
8696
  } else {
8697
- return _objectSpread$1v(_objectSpread$1v({}, item), {}, {
8697
+ return _objectSpread$1w(_objectSpread$1w({}, item), {}, {
8698
8698
  disabled: disableIfViewOnly
8699
8699
  });
8700
8700
  }
@@ -9031,11 +9031,11 @@ var config = {
9031
9031
  }
9032
9032
  }
9033
9033
  };
9034
- var configWithNonViewOnlyActionsDisabled = Object.entries(_objectSpread$1v(_objectSpread$1v(_objectSpread$1v(_objectSpread$1v(_objectSpread$1v(_objectSpread$1v(_objectSpread$1v(_objectSpread$1v(_objectSpread$1v(_objectSpread$1v({}, config), config$1), debugObj), tools), atoms), zoom), templates), functionalGroupsLib), fullscreen), help)).reduce(function (acc, _ref2) {
9034
+ var configWithNonViewOnlyActionsDisabled = Object.entries(_objectSpread$1w(_objectSpread$1w(_objectSpread$1w(_objectSpread$1w(_objectSpread$1w(_objectSpread$1w(_objectSpread$1w(_objectSpread$1w(_objectSpread$1w(_objectSpread$1w({}, config), config$1), debugObj), tools), atoms), zoom), templates), functionalGroupsLib), fullscreen), help)).reduce(function (acc, _ref2) {
9035
9035
  var _ref3 = _slicedToArray__default["default"](_ref2, 2),
9036
9036
  key = _ref3[0],
9037
9037
  item = _ref3[1];
9038
- return _objectSpread$1v(_objectSpread$1v({}, acc), {}, _defineProperty__default["default"]({}, key, updateConfigItem(item)));
9038
+ return _objectSpread$1w(_objectSpread$1w({}, acc), {}, _defineProperty__default["default"]({}, key, updateConfigItem(item)));
9039
9039
  }, {});
9040
9040
  function hasSelection(editor) {
9041
9041
  var selection = editor.selection();
@@ -13316,12 +13316,12 @@ var IconButtonBase = function IconButtonBase(_ref) {
13316
13316
  };
13317
13317
 
13318
13318
  var _excluded$B = ["iconName"];
13319
- function ownKeys$1u(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13320
- function _objectSpread$1u(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1u(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1u(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13319
+ function ownKeys$1v(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13320
+ function _objectSpread$1v(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1v(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1v(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13321
13321
  var IconButton = function IconButton(_ref) {
13322
13322
  var iconName = _ref.iconName,
13323
13323
  props = _objectWithoutProperties__default["default"](_ref, _excluded$B);
13324
- return jsxRuntime.jsx(IconButtonBase, _objectSpread$1u(_objectSpread$1u({}, props), {}, {
13324
+ return jsxRuntime.jsx(IconButtonBase, _objectSpread$1v(_objectSpread$1v({}, props), {}, {
13325
13325
  children: jsxRuntime.jsx(StyledIcon$1, {
13326
13326
  name: iconName
13327
13327
  })
@@ -13329,12 +13329,12 @@ var IconButton = function IconButton(_ref) {
13329
13329
  };
13330
13330
 
13331
13331
  var _excluded$A = ["link"];
13332
- function ownKeys$1t(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13333
- function _objectSpread$1t(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1t(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1t(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13332
+ function ownKeys$1u(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13333
+ function _objectSpread$1u(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1u(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1u(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13334
13334
  var IconButtonCustomIcon = function IconButtonCustomIcon(_ref) {
13335
13335
  var link = _ref.link,
13336
13336
  props = _objectWithoutProperties__default["default"](_ref, _excluded$A);
13337
- return jsxRuntime.jsx(IconButtonBase, _objectSpread$1t(_objectSpread$1t({}, props), {}, {
13337
+ return jsxRuntime.jsx(IconButtonBase, _objectSpread$1u(_objectSpread$1u({}, props), {}, {
13338
13338
  children: jsxRuntime.jsx(StyledCustomIcon, {
13339
13339
  src: link,
13340
13340
  alt: props.title
@@ -13365,12 +13365,12 @@ var StyledButton = styled__default["default"].button({
13365
13365
  });
13366
13366
 
13367
13367
  var _excluded$z = ["children"];
13368
- function ownKeys$1s(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13369
- function _objectSpread$1s(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1s(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1s(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13368
+ function ownKeys$1t(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13369
+ function _objectSpread$1t(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1t(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1t(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13370
13370
  var Button = function Button(_ref) {
13371
13371
  var children = _ref.children,
13372
13372
  props = _objectWithoutProperties__default["default"](_ref, _excluded$z);
13373
- return jsxRuntime.jsx(StyledButton, _objectSpread$1s(_objectSpread$1s({}, props), {}, {
13373
+ return jsxRuntime.jsx(StyledButton, _objectSpread$1t(_objectSpread$1t({}, props), {}, {
13374
13374
  children: children
13375
13375
  }));
13376
13376
  };
@@ -13438,10 +13438,10 @@ var StyledInput$1 = styled__default["default"].input({
13438
13438
  }
13439
13439
  });
13440
13440
 
13441
- function ownKeys$1r(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13442
- function _objectSpread$1r(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1r(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1r(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13441
+ function ownKeys$1s(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13442
+ function _objectSpread$1s(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1s(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1s(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13443
13443
  var Input$2 = function Input(props) {
13444
- return jsxRuntime.jsx(StyledInput$1, _objectSpread$1r({}, props));
13444
+ return jsxRuntime.jsx(StyledInput$1, _objectSpread$1s({}, props));
13445
13445
  };
13446
13446
 
13447
13447
  var Container$1 = styled__default["default"].div({
@@ -13537,8 +13537,8 @@ var InfoModal$1 = function InfoModal(_ref) {
13537
13537
  var styles$r = {"button-common-styles":"Dialog-module_button-common-styles__Xehyp","scrollbar":"Dialog-module_scrollbar__L8hUr","dialog":"Dialog-module_dialog__hiRBI","hide":"Dialog-module_hide__bbkvB","header":"Dialog-module_header__8QGek","btnContainer":"Dialog-module_btnContainer__ulrFM","buttonTop":"Dialog-module_buttonTop__91ha8","closeButton":"Dialog-module_closeButton__XyaAE","footer":"Dialog-module_footer__PliV0","ok":"Dialog-module_ok__BUQ6q","cancel":"Dialog-module_cancel__8d83c","withDivider":"Dialog-module_withDivider__YBKiQ","body":"Dialog-module_body__EWh4H","withMargin":"Dialog-module_withMargin__-zVS4"};
13538
13538
 
13539
13539
  var _excluded$y = ["children", "title", "params", "result", "valid", "buttons", "headerContent", "footerContent", "className", "buttonsNameMap", "needMargin", "withDivider", "focusable", "primaryButtons"];
13540
- function ownKeys$1q(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13541
- function _objectSpread$1q(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1q(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1q(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13540
+ function ownKeys$1r(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13541
+ function _objectSpread$1r(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1r(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1r(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13542
13542
  var Dialog = function Dialog(props) {
13543
13543
  var children = props.children,
13544
13544
  title = props.title,
@@ -13601,7 +13601,7 @@ var Dialog = function Dialog(props) {
13601
13601
  }
13602
13602
  };
13603
13603
  return (
13604
- jsxRuntime.jsxs("div", _objectSpread$1q(_objectSpread$1q({
13604
+ jsxRuntime.jsxs("div", _objectSpread$1r(_objectSpread$1r({
13605
13605
  ref: dialogRef,
13606
13606
  role: "dialog",
13607
13607
  "data-testid": 'info-modal-window',
@@ -14174,8 +14174,8 @@ function usePortalStyle(_ref) {
14174
14174
  return [portalStyle];
14175
14175
  }
14176
14176
 
14177
- function ownKeys$1p(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14178
- function _objectSpread$1p(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1p(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1p(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14177
+ function ownKeys$1q(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14178
+ function _objectSpread$1q(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1q(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1q(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14179
14179
  var ToolbarMultiToolItem = function ToolbarMultiToolItem(props) {
14180
14180
  var id = props.id,
14181
14181
  options = props.options,
@@ -14250,7 +14250,7 @@ var ToolbarMultiToolItem = function ToolbarMultiToolItem(props) {
14250
14250
  ref: ref,
14251
14251
  className: classes$N.root,
14252
14252
  "data-testid": "".concat(id, "-drop-down-button"),
14253
- children: [jsxRuntime.jsx(ActionButton, _objectSpread$1p(_objectSpread$1p({}, actionButtonProps), {}, {
14253
+ children: [jsxRuntime.jsx(ActionButton, _objectSpread$1q(_objectSpread$1q({}, actionButtonProps), {}, {
14254
14254
  className: className,
14255
14255
  name: iconName,
14256
14256
  action: configWithNonViewOnlyActionsDisabled[currentId],
@@ -14359,8 +14359,8 @@ var TemplatesList = function TemplatesList(props) {
14359
14359
  var classes$M = {"button-common-styles":"BottomToolbar-module_button-common-styles__PbtE9","scrollbar":"BottomToolbar-module_scrollbar__i1f8P","group":"BottomToolbar-module_group__b-pGt","root":"BottomToolbar-module_root__kjkSm"};
14360
14360
 
14361
14361
  var _excluded$x = ["className"];
14362
- function ownKeys$1o(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14363
- function _objectSpread$1o(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1o(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1o(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14362
+ function ownKeys$1p(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14363
+ function _objectSpread$1p(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1p(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1p(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14364
14364
  var Group$2 = function Group(_ref) {
14365
14365
  var children = _ref.children,
14366
14366
  className = _ref.className;
@@ -14376,22 +14376,22 @@ var BottomToolbar = function BottomToolbar(props) {
14376
14376
  "data-testid": "bottom-toolbar",
14377
14377
  className: clsx__default["default"](classes$M.root, className),
14378
14378
  children: jsxRuntime.jsxs(Group$2, {
14379
- children: [jsxRuntime.jsx(TemplatesList, _objectSpread$1o({}, rest)), jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$1o({
14379
+ children: [jsxRuntime.jsx(TemplatesList, _objectSpread$1p({}, rest)), jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$1p({
14380
14380
  id: "template-lib"
14381
14381
  }, rest))]
14382
14382
  })
14383
14383
  });
14384
14384
  };
14385
14385
 
14386
- function ownKeys$1n(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14387
- function _objectSpread$1n(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1n(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1n(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14386
+ function ownKeys$1o(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14387
+ function _objectSpread$1o(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1o(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1o(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14388
14388
  function openDialog(dispatch, dialogName, props) {
14389
14389
  return new Promise(function (resolve, reject) {
14390
14390
  dispatch({
14391
14391
  type: 'MODAL_OPEN',
14392
14392
  data: {
14393
14393
  name: dialogName,
14394
- prop: _objectSpread$1n(_objectSpread$1n({}, props), {}, {
14394
+ prop: _objectSpread$1o(_objectSpread$1o({}, props), {}, {
14395
14395
  onResult: resolve,
14396
14396
  onCancel: reject
14397
14397
  })
@@ -14410,14 +14410,14 @@ function modalReducer() {
14410
14410
  return null;
14411
14411
  }
14412
14412
  var formState = formReducer(state.form, action);
14413
- return _objectSpread$1n(_objectSpread$1n({}, state), {}, {
14413
+ return _objectSpread$1o(_objectSpread$1o({}, state), {}, {
14414
14414
  form: formState
14415
14415
  });
14416
14416
  }
14417
14417
  switch (type) {
14418
14418
  case 'MODAL_CLOSE':
14419
14419
  if (state !== null && state !== void 0 && state.parentModal) {
14420
- state.parentModal.prop = _objectSpread$1n(_objectSpread$1n(_objectSpread$1n({}, state.parentModal.prop), state.parentModal.form.result), {}, {
14420
+ state.parentModal.prop = _objectSpread$1o(_objectSpread$1o(_objectSpread$1o({}, state.parentModal.prop), state.parentModal.form.result), {}, {
14421
14421
  isRestoredModal: true
14422
14422
  });
14423
14423
  return state.parentModal;
@@ -14435,8 +14435,8 @@ function modalReducer() {
14435
14435
  }
14436
14436
  }
14437
14437
 
14438
- function ownKeys$1m(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14439
- function _objectSpread$1m(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1m(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1m(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14438
+ function ownKeys$1n(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14439
+ function _objectSpread$1n(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1n(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1n(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14440
14440
  function selectTmpl(tmpl) {
14441
14441
  return {
14442
14442
  type: 'TMPL_SELECT',
@@ -14504,7 +14504,7 @@ function editTmpl(tmpl) {
14504
14504
  tmpl: tmpl
14505
14505
  }).then(function (formData) {
14506
14506
  tmpl.struct.name = formData ? formData.name.trim() : tmpl.struct.name;
14507
- tmpl.props = formData ? _objectSpread$1m(_objectSpread$1m({}, tmpl.props || {}), formData.attach || {}) : tmpl.props;
14507
+ tmpl.props = formData ? _objectSpread$1n(_objectSpread$1n({}, tmpl.props || {}), formData.attach || {}) : tmpl.props;
14508
14508
  if (tmpl.props.group === 'User Templates') updateLocalStore(getState().templates.lib);
14509
14509
  }, function () {
14510
14510
  return null;
@@ -14544,7 +14544,7 @@ function saveUserTmpl(struct) {
14544
14544
  var name = _ref.name,
14545
14545
  attach = _ref.attach;
14546
14546
  tmpl.struct.name = name.trim();
14547
- tmpl.props = _objectSpread$1m(_objectSpread$1m({}, attach), {}, {
14547
+ tmpl.props = _objectSpread$1n(_objectSpread$1n({}, attach), {}, {
14548
14548
  group: 'User Templates'
14549
14549
  });
14550
14550
  var lib = getState().templates.lib.concat(tmpl);
@@ -14562,7 +14562,7 @@ function updateLocalStore(lib) {
14562
14562
  }).map(function (item) {
14563
14563
  return {
14564
14564
  struct: ketSerializer.serialize(item.struct),
14565
- props: _objectSpread$1m({}, fp.omit(['group'], item.props) || {})
14565
+ props: _objectSpread$1n({}, fp.omit(['group'], item.props) || {})
14566
14566
  };
14567
14567
  });
14568
14568
  storage.setItem('ketcher-tmpls', userLib);
@@ -14581,19 +14581,19 @@ var attachActions = ['INIT_ATTACH', 'SET_ATTACH_POINTS', 'SET_TMPL_NAME'];
14581
14581
  function templatesReducer() {
14582
14582
  var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initTmplsState;
14583
14583
  var action = arguments.length > 1 ? arguments[1] : undefined;
14584
- if (tmplActions.includes(action.type)) return _objectSpread$1m(_objectSpread$1m({}, state), action.data || {});
14584
+ if (tmplActions.includes(action.type)) return _objectSpread$1n(_objectSpread$1n({}, state), action.data || {});
14585
14585
  if (attachActions.includes(action.type)) {
14586
- var attach = _objectSpread$1m(_objectSpread$1m({}, state.attach), action.data || {});
14587
- return _objectSpread$1m(_objectSpread$1m({}, state), {}, {
14586
+ var attach = _objectSpread$1n(_objectSpread$1n({}, state.attach), action.data || {});
14587
+ return _objectSpread$1n(_objectSpread$1n({}, state), {}, {
14588
14588
  attach: attach
14589
14589
  });
14590
14590
  }
14591
14591
  if (action.type === 'TMPL_DELETE') {
14592
- var currentState = _objectSpread$1m({}, state);
14592
+ var currentState = _objectSpread$1n({}, state);
14593
14593
  var lib = currentState.lib.filter(function (value) {
14594
14594
  return value !== action.data.tmpl;
14595
14595
  });
14596
- return _objectSpread$1m(_objectSpread$1m({}, currentState), {}, {
14596
+ return _objectSpread$1n(_objectSpread$1n({}, currentState), {}, {
14597
14597
  lib: lib
14598
14598
  });
14599
14599
  }
@@ -14655,8 +14655,8 @@ function abbreviationLookupReducer() {
14655
14655
  }
14656
14656
  }
14657
14657
 
14658
- function ownKeys$1l(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14659
- function _objectSpread$1l(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1l(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1l(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14658
+ function ownKeys$1m(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14659
+ function _objectSpread$1m(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1m(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1m(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14660
14660
  var initialState$3 = {
14661
14661
  cursorPosition: {
14662
14662
  x: 0,
@@ -14679,7 +14679,7 @@ function commonReducer() {
14679
14679
  var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState$3;
14680
14680
  var action = arguments.length > 1 ? arguments[1] : undefined;
14681
14681
  if (action.type === COMMON_ACTIONS.COMMON_UPDATE_CURSOR_POSITION) {
14682
- return _objectSpread$1l(_objectSpread$1l({}, state), {}, {
14682
+ return _objectSpread$1m(_objectSpread$1m({}, state), {}, {
14683
14683
  cursorPosition: {
14684
14684
  x: action.data.x,
14685
14685
  y: action.data.y
@@ -14690,8 +14690,8 @@ function commonReducer() {
14690
14690
  }
14691
14691
 
14692
14692
  var _excluded$w = ["type", "action"];
14693
- function ownKeys$1k(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14694
- function _objectSpread$1k(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1k(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1k(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14693
+ function ownKeys$1l(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14694
+ function _objectSpread$1l(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1l(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1l(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14695
14695
  function execute(activeTool, _ref) {
14696
14696
  var action = _ref.action,
14697
14697
  editor = _ref.editor,
@@ -14751,7 +14751,7 @@ function actionStateReducer () {
14751
14751
  case 'ACTION':
14752
14752
  {
14753
14753
  var _activeTool;
14754
- activeTool = execute(state === null || state === void 0 ? void 0 : state.activeTool, _objectSpread$1k(_objectSpread$1k({}, params), {}, {
14754
+ activeTool = execute(state === null || state === void 0 ? void 0 : state.activeTool, _objectSpread$1l(_objectSpread$1l({}, params), {}, {
14755
14755
  action: action
14756
14756
  }));
14757
14757
  if (((_activeTool = activeTool) === null || _activeTool === void 0 ? void 0 : _activeTool.tool) === 'select') {
@@ -15047,8 +15047,8 @@ function setFunctionalGroupsTooltip(_ref) {
15047
15047
  showTooltip(editor, infoPanelData);
15048
15048
  }
15049
15049
 
15050
- function ownKeys$1j(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
15051
- function _objectSpread$1j(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1j(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1j(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15050
+ function ownKeys$1k(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
15051
+ function _objectSpread$1k(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1k(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1k(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15052
15052
  var initialState$2 = {
15053
15053
  lib: [],
15054
15054
  functionalGroupInfo: null,
@@ -15056,14 +15056,14 @@ var initialState$2 = {
15056
15056
  };
15057
15057
  var functionalGroupsReducer = function functionalGroupsReducer() {
15058
15058
  var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState$2;
15059
- var _ref = arguments.length > 1 ? arguments[1] : undefined,
15060
- type = _ref.type,
15061
- payload = _ref.payload;
15059
+ var action = arguments.length > 1 ? arguments[1] : undefined;
15060
+ var type = action.type,
15061
+ payload = action.payload;
15062
15062
  switch (type) {
15063
15063
  case 'FG_INIT':
15064
- return _objectSpread$1j(_objectSpread$1j({}, state), payload);
15064
+ return _objectSpread$1k(_objectSpread$1k({}, state), payload);
15065
15065
  case 'FG_HIGHLIGHT':
15066
- return _objectSpread$1j(_objectSpread$1j({}, state), {}, {
15066
+ return _objectSpread$1k(_objectSpread$1k({}, state), {}, {
15067
15067
  functionalGroupInfo: payload
15068
15068
  });
15069
15069
  default:
@@ -15090,7 +15090,7 @@ function notDebouncedHighlightFG(dispatch, group) {
15090
15090
  var highlightFG = memoizedDebounce(notDebouncedHighlightFG, TOOLTIP_DELAY / 3, [0]);
15091
15091
  function initFGTemplates() {
15092
15092
  return function () {
15093
- var _ref2 = _asyncToGenerator__default["default"]( _regeneratorRuntime__default["default"].mark(function _callee(dispatch) {
15093
+ var _ref = _asyncToGenerator__default["default"]( _regeneratorRuntime__default["default"].mark(function _callee(dispatch) {
15094
15094
  var provider, sdfSerializer, templates, functionalGroups;
15095
15095
  return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
15096
15096
  while (1) switch (_context.prev = _context.next) {
@@ -15098,8 +15098,8 @@ function initFGTemplates() {
15098
15098
  provider = ketcherCore.FunctionalGroupsProvider.getInstance();
15099
15099
  sdfSerializer = new ketcherCore.SdfSerializer();
15100
15100
  templates = sdfSerializer.deserialize(templatesRawData$1);
15101
- functionalGroups = templates.reduce(function (acc, _ref3) {
15102
- var struct = _ref3.struct;
15101
+ functionalGroups = templates.reduce(function (acc, _ref2) {
15102
+ var struct = _ref2.struct;
15103
15103
  return [].concat(_toConsumableArray__default["default"](acc), [struct]);
15104
15104
  }, []);
15105
15105
  provider.setFunctionalGroupsList(functionalGroups);
@@ -15114,26 +15114,26 @@ function initFGTemplates() {
15114
15114
  }, _callee);
15115
15115
  }));
15116
15116
  return function (_x) {
15117
- return _ref2.apply(this, arguments);
15117
+ return _ref.apply(this, arguments);
15118
15118
  };
15119
15119
  }();
15120
15120
  }
15121
15121
 
15122
15122
  var templatesRawData = "acetic acid\n -INDIGO-11302219142D\n\n 4 3 0 0 0 0 0 0 0 0999 V2000\n 0.5143 0.5143 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.7848 -0.2357 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.8133 -0.2357 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 0.5143 2.0143 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 2 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 4 1 2 3 4\nM SMT 1 acetic acid\nM END\n> <name>\nacetic acid\n\n> <abbreviation>\nacetic acid\n\n> <group>\nSalts and Solvents\n\n$$$$\nacetic anhydride\n -INDIGO-11302219142D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n 0.5143 0.5143 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.7848 -0.2357 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.8133 -0.2357 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 0.5143 2.0143 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3.1123 0.5143 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.1124 2.0143 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.4114 -0.2357 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 2 0 0 0 0\n 3 5 1 0 0 0 0\n 5 6 2 0 0 0 0\n 5 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 acetic anhydride\nM END\n> <name>\nacetic anhydride\n\n> <abbreviation>\nacetic anhydride\n\n> <group>\nSalts and Solvents\n\n$$$$\nformic acid\n -INDIGO-11302219142D\n\n 4 3 0 0 0 0 0 0 0 0999 V2000\n 0.5143 0.5143 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.7848 -0.2357 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0\n 1.8133 -0.2357 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 0.5143 2.0143 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 2 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 4 1 2 3 4\nM SMT 1 formic acid\nM END\n> <name>\nformic acid\n\n> <abbreviation>\nformic acid\n\n> <group>\nSalts and Solvents\n\n$$$$\nmethane sulphonic acid\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 0.5143 0.5143 0.0000 S 0 0 0 0 0 0 0 0 0 0 0 0\n 0.5143 2.0143 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 0.5143 -0.9857 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 2.0143 0.5143 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -0.9857 0.5143 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 2 0 0 0 0\n 1 3 2 0 0 0 0\n 1 4 1 0 0 0 0\n 1 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 methane sulphonic acid\nM END\n> <name>\nmethane sulphonic acid\n\n> <abbreviation>\nmethane sulphonic acid\n\n> <group>\nSalts and Solvents\n\n$$$$\npropionic acid\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 0.5143 0.5143 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.7848 -0.2357 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.8133 -0.2357 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 0.5143 2.0143 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -2.0838 0.5143 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 2 0 0 0 0\n 2 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 propionic acid\nM END\n> <name>\npropionic acid\n\n> <abbreviation>\npropionic acid\n\n> <group>\nSalts and Solvents\n\n$$$$\n1,2-propanediol\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n -3.3587 -3.5057 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.0597 -2.7557 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.0596 -1.2558 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -0.7606 -3.5057 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.5384 -2.7557 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 2 4 1 0 0 0 0\n 4 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 1,2-propanediol\nM END\n> <name>\n1,2-propanediol\n\n> <abbreviation>\n1,2-propanediol\n\n> <group>\nSalts and Solvents\n\n$$$$\n1,3-propanediol\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 15.0779 -8.5508 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 16.3769 -9.3007 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 17.6759 -8.5507 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 18.9750 -9.3007 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 20.2740 -8.5507 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 1,3-propanediol\nM END\n> <name>\n1,3-propanediol\n\n> <abbreviation>\n1,3-propanediol\n\n> <group>\nSalts and Solvents\n\n$$$$\n1,4-butanediol\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n -0.3480 1.2991 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 0.9509 2.0491 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.2500 1.2991 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5491 2.0491 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8481 1.2991 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1472 2.0491 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 1,4-butanediol\nM END\n> <name>\n1,4-butanediol\n\n> <abbreviation>\n1,4-butanediol\n\n> <group>\nSalts and Solvents\n\n$$$$\n1-butanol\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 0.1714 0.3286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.4705 1.0786 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.1276 1.0786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.4266 0.3286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.7257 1.0786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 1-butanol\nM END\n> <name>\n1-butanol\n\n> <abbreviation>\n1-butanol\n\n> <group>\nSalts and Solvents\n\n$$$$\n1-propanol\n -INDIGO-11302219142D\n\n 4 3 0 0 0 0 0 0 0 0999 V2000\n 0.1714 1.2286 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.1276 0.4786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.4266 1.2286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.7257 0.4786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 4 1 2 3 4\nM SMT 1 1-propanol\nM END\n> <name>\n1-propanol\n\n> <abbreviation>\n1-propanol\n\n> <group>\nSalts and Solvents\n\n$$$$\n2-butanol\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 0.1714 1.2286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.4705 0.4786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.1276 0.4786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.4266 1.2286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.1714 2.7286 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 1 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 2-butanol\nM END\n> <name>\n2-butanol\n\n> <abbreviation>\n2-butanol\n\n> <group>\nSalts and Solvents\n\n$$$$\n2-ethylhexanol\n -INDIGO-11302219142D\n\n 9 8 0 0 0 0 0 0 0 0999 V2000\n 10.7337 0.4167 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 8.1355 0.4167 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.8365 -0.3333 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5375 0.4167 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.1355 1.9167 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.4345 -0.3333 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2384 -0.3333 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.4345 2.6667 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.9394 0.4167 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 6 1 0 0 0 0\n 2 3 1 0 0 0 0\n 2 5 1 0 0 0 0\n 2 6 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 7 1 0 0 0 0\n 5 8 1 0 0 0 0\n 7 9 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 1 9\nM SMT 1 2-ethylhexanol\nM END\n> <name>\n2-ethylhexanol\n\n> <abbreviation>\n2-ethylhexanol\n\n> <group>\nSalts and Solvents\n\n$$$$\nisopropanol\n -INDIGO-11302219142D\n\n 4 3 0 0 0 0 0 0 0 0999 V2000\n 0.1714 1.2286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.4705 0.4786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.1276 0.4786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.1714 2.7286 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 4 1 2 3 4\nM SMT 1 2-propanol\nM END\n> <name>\nisopropanol\n\n> <abbreviation>\n2-propanol\n\n> <group>\nSalts and Solvents\n\n$$$$\n2-methoxyethanol\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 0.1714 0.3286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.4705 1.0786 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.1276 1.0786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.4266 0.3286 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -3.7257 1.0786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 2-methoxyethanol\nM END\n> <name>\n2-methoxyethanol\n\n> <abbreviation>\n2-methoxyethanol\n\n> <group>\nSalts and Solvents\n\n$$$$\n2-pentanol\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n -5.1971 -3.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.8980 -2.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.5991 -3.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.3000 -2.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.0009 -3.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.3000 -1.2500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 4 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 2-pentanol\nM END\n> <name>\n2-pentanol\n\n> <abbreviation>\n2-pentanol\n\n> <group>\nSalts and Solvents\n\n$$$$\nbenzyl alcohol\n -INDIGO-11302219142D\n\n 8 8 0 0 0 0 0 0 0 0999 V2000\n 6.1000 0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 -2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 -2.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 -2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 1.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 2.5000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 2 0 0 0 0\n 2 4 2 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 2 0 0 0 0\n 6 3 1 0 0 0 0\n 1 7 1 0 0 0 0\n 7 8 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SMT 1 benzyl alcohol\nM END\n> <name>\nbenzyl alcohol\n\n> <abbreviation>\nbenzyl alcohol\n\n> <group>\nSalts and Solvents\n\n$$$$\ncyclohexanol\n -INDIGO-11302219142D\n\n 7 7 0 0 0 0 0 0 0 0999 V2000\n 4.2990 2.0175 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2990 0.5175 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 -0.2325 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5981 -0.2325 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 -1.7325 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5981 -1.7325 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2990 -2.4825 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 2 4 1 0 0 0 0\n 3 5 1 0 0 0 0\n 4 6 1 0 0 0 0\n 5 7 1 0 0 0 0\n 6 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 cyclohexanol\nM END\n> <name>\ncyclohexanol\n\n> <abbreviation>\ncyclohexanol\n\n> <group>\nSalts and Solvents\n\n$$$$\nethanol\n -INDIGO-11302219142D\n\n 3 2 0 0 0 0 0 0 0 0999 V2000\n 0.1714 1.2286 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.1276 0.4786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.4266 1.2286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 3 1 2 3\nM SMT 1 ethyl alcohol\nM END\n> <name>\nethanol\n\n> <abbreviation>\nethyl alcohol\n\n> <group>\nSalts and Solvents\n\n$$$$\nethylene glycol\n -INDIGO-11302219142D\n\n 4 3 0 0 0 0 0 0 0 0999 V2000\n 0.1714 1.2286 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.1276 0.4786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.4266 1.2286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.7256 0.4786 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 4 1 2 3 4\nM SMT 1 ethane-1,2-diol\nM END\n> <name>\nethylene glycol\n\n> <abbreviation>\nethane-1,2-diol\n\n> <group>\nSalts and Solvents\n\n$$$$\nglycerol\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n 0.9915 2.6580 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 2.2906 1.9080 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5896 2.6580 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5897 4.1580 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8887 1.9080 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1878 2.6580 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 3 5 1 0 0 0 0\n 5 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 glycerol\nM END\n> <name>\nglycerol\n\n> <abbreviation>\nglycerol\n\n> <group>\nSalts and Solvents\n\n$$$$\nisoamyl alcohol\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n 0.1714 0.3286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.4705 1.0786 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.1276 1.0786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.4266 0.3286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.7257 1.0786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.4266 -1.1714 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 4 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 isoamyl alcohol\nM END\n> <name>\nisoamyl alcohol\n\n> <abbreviation>\nisoamyl alcohol\n\n> <group>\nSalts and Solvents\n\n$$$$\nisobutanol\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 0.1714 1.2286 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.1276 0.4786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.4266 1.2286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.7257 0.4786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.4266 2.7286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 3 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 isobutanol\nM END\n> <name>\nisobutanol\n\n> <abbreviation>\nisobutanol\n\n> <group>\nSalts and Solvents\n\n$$$$\nmethanol\n -INDIGO-11302219142D\n\n 2 1 0 0 0 0 0 0 0 0999 V2000\n 0.0709 0.8536 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5710 0.8536 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 2 1 2\nM SMT 1 methyl alcohol\nM END\n> <name>\nmethanol\n\n> <abbreviation>\nmethyl alcohol\n\n> <group>\nSalts and Solvents\n\n$$$$\nt-butanol\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 0.0709 0.8536 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5710 0.8536 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.4291 0.8536 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0709 2.3536 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0709 -0.6464 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 1 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 t-butanol\nM END\n> <name>\nt-butanol\n\n> <abbreviation>\nt-butanol\n\n> <group>\nSalts and Solvents\n\n$$$$\nwater\n -INDIGO-11302219142D\n\n 1 0 0 0 0 0 0 0 0 0999 V2000\n 0.7500 2.9500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 1 1\nM SMT 1 water\nM END\n> <name>\nwater\n\n> <abbreviation>\nwater\n\n> <group>\nSalts and Solvents\n\n$$$$\ncarbon dioxide\n -INDIGO-11302219142D\n\n 3 2 0 0 0 0 0 0 0 0999 V2000\n -1.2000 0.8500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.7000 0.8500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 0.3000 0.8500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 2 0 0 0 0\n 1 3 2 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 3 1 2 3\nM SMT 1 carbon dioxide\nM END\n> <name>\ncarbon dioxide\n\n> <abbreviation>\ncarbon dioxide\n\n> <group>\nSalts and Solvents\n\n$$$$\nbenzene\n -INDIGO-11302219142D\n\n 6 6 0 0 0 0 0 0 0 0999 V2000\n 6.1000 0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 -2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 -2.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 -2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 2 0 0 0 0\n 2 4 2 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 2 0 0 0 0\n 6 3 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 benzene\nM END\n> <name>\nbenzene\n\n> <abbreviation>\nbenzene\n\n> <group>\nSalts and Solvents\n\n$$$$\ncumene\n -INDIGO-11302219142D\n\n 9 9 0 0 0 0 0 0 0 0999 V2000\n 4.2989 1.8750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2989 0.3750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5981 2.6250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 2.6250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5981 -0.3750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 -0.3750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5981 -1.8750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 -1.8750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2989 -2.6250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 2 5 2 0 0 0 0\n 2 6 1 0 0 0 0\n 5 7 1 0 0 0 0\n 6 8 2 0 0 0 0\n 7 9 2 0 0 0 0\n 8 9 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 1 9\nM SMT 1 cumene\nM END\n> <name>\ncumene\n\n> <abbreviation>\ncumene\n\n> <group>\nSalts and Solvents\n\n$$$$\nmesitylene\n -INDIGO-11302219142D\n\n 9 9 0 0 0 0 0 0 0 0999 V2000\n 1.2991 3.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.2991 2.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5980 1.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5980 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.8971 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.2991 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.2991 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 1.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 2 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 4 6 2 0 0 0 0\n 6 7 1 0 0 0 0\n 7 8 1 0 0 0 0\n 7 9 2 0 0 0 0\n 2 9 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 1 9\nM SMT 1 mesitylene\nM END\n> <name>\nmesitylene\n\n> <abbreviation>\nmesitylene\n\n> <group>\nSalts and Solvents\n\n$$$$\ntoluene\n -INDIGO-11302219142D\n\n 7 7 0 0 0 0 0 0 0 0999 V2000\n 6.1000 0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 -2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 -2.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 -2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 1.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 2 0 0 0 0\n 2 4 2 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 2 0 0 0 0\n 6 3 1 0 0 0 0\n 1 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 toluene\nM END\n> <name>\ntoluene\n\n> <abbreviation>\ntoluene\n\n> <group>\nSalts and Solvents\n\n$$$$\nn,n-dimethylaniline\n -INDIGO-11302219142D\n\n 9 9 0 0 0 0 0 0 0 0999 V2000\n 4.2989 1.8750 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2989 0.3750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5981 -0.3750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 -0.3750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5981 2.6250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 2.6250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5981 -1.8750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 -1.8750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2989 -2.6250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 5 1 0 0 0 0\n 1 6 1 0 0 0 0\n 2 3 2 0 0 0 0\n 2 4 1 0 0 0 0\n 3 7 1 0 0 0 0\n 4 8 2 0 0 0 0\n 7 9 2 0 0 0 0\n 8 9 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 1 9\nM SMT 1 N,N-dimethylaniline\nM END\n> <name>\nn,n-dimethylaniline\n\n> <abbreviation>\nN,N-dimethylaniline\n\n> <group>\nSalts and Solvents\n\n$$$$\npyridine\n -INDIGO-11302219142D\n\n 6 6 0 0 0 0 0 0 0 0999 V2000\n 6.1000 0.2500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 -2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 -2.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 -2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 2 0 0 0 0\n 2 4 2 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 2 0 0 0 0\n 6 3 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 pyridine\nM END\n> <name>\npyridine\n\n> <abbreviation>\npyridine\n\n> <group>\nSalts and Solvents\n\n$$$$\ntriethylamine\n -INDIGO-11302219142D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n 1.5000 0.0000 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5000 1.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.2010 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.7990 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.7990 2.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.0980 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.0980 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 2 5 1 0 0 0 0\n 4 6 1 0 0 0 0\n 3 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 triethylamine\nM END\n> <name>\ntriethylamine\n\n> <abbreviation>\ntriethylamine\n\n> <group>\nSalts and Solvents\n\n$$$$\nacetonitrile\n -INDIGO-11302219142D\n\n 3 2 0 0 0 0 0 0 0 0999 V2000\n 1.5000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 0.0000 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 3 0 0 0 0\n 1 3 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 3 1 2 3\nM SMT 1 acetonitrile\nM END\n> <name>\nacetonitrile\n\n> <abbreviation>\nacetonitrile\n\n> <group>\nSalts and Solvents\n\n$$$$\ndimethyl acetamide\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n 2.7990 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.7990 1.5000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.0980 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5000 -0.7500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5000 -2.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.2009 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 2 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 4 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 dimethyl acetamide\nM END\n> <name>\ndimethyl acetamide\n\n> <abbreviation>\ndimethyl acetamide\n\n> <group>\nSalts and Solvents\n\n$$$$\ndimethyl formamide\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n 2.7990 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.7990 1.5000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.0980 -0.7500 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5000 -0.7500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5000 -2.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.2009 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 2 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 4 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 DMF\nM END\n> <name>\ndimethyl formamide\n\n> <abbreviation>\nDMF\n\n> <group>\nSalts and Solvents\n\n$$$$\ndimethyl sulfoxide\n -INDIGO-11302219142D\n\n 4 3 0 0 0 0 0 0 0 0999 V2000\n 1.5000 0.0000 0.0000 S 0 0 0 0 0 0 0 0 0 0 0 0\n 0.2010 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.7990 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5000 1.5000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 2 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 4 1 2 3 4\nM SMT 1 DMSO\nM END\n> <name>\ndimethyl sulfoxide\n\n> <abbreviation>\nDMSO\n\n> <group>\nSalts and Solvents\n\n$$$$\ndimethylpropylene urea\n -INDIGO-11302219142D\n\n 9 9 0 0 0 0 0 0 0 0999 V2000\n 3.4378 2.0544 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.1388 1.3044 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 2.1387 -0.1955 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.8397 -0.9455 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.4593 -0.1956 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.4593 1.3044 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n -1.7584 2.0545 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.8397 2.0544 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.8397 3.5545 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 6 7 1 0 0 0 0\n 6 8 1 0 0 0 0\n 2 8 1 0 0 0 0\n 8 9 2 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 1 9\nM SMT 1 dimethylpropylene urea\nM END\n> <name>\ndimethylpropylene urea\n\n> <abbreviation>\ndimethylpropylene urea\n\n> <group>\nSalts and Solvents\n\n$$$$\nformamide\n -INDIGO-11302219142D\n\n 4 3 0 0 0 0 0 0 0 0999 V2000\n 0.2485 -6.0342 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5476 -5.2841 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5476 -3.7842 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 2.8467 -6.0341 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 2 0 0 0 0\n 2 4 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 4 1 2 3 4\nM SMT 1 formamide\nM END\n> <name>\nformamide\n\n> <abbreviation>\nformamide\n\n> <group>\nSalts and Solvents\n\n$$$$\nn-methyl-2-pyrrolidone\n -INDIGO-11302219142D\n\n 7 7 0 0 0 0 0 0 0 0999 V2000\n 0.7500 2.3100 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n -0.4600 1.4300 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.9600 1.4300 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.7500 3.8100 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.3860 1.8953 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3 2 1 0 0 0 0\n 2 1 1 0 0 0 0\n 1 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 3 1 0 0 0 0\n 1 6 1 0 0 0 0\n 4 7 2 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 N-methyl-2-pyrrolidone\nM END\n> <name>\nn-methyl-2-pyrrolidone\n\n> <abbreviation>\nN-methyl-2-pyrrolidone\n\n> <group>\nSalts and Solvents\n\n$$$$\nn-methylformamide\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 0.1009 0.5500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 1.4000 1.3000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.4000 2.8000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 2.6990 0.5500 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0\n -1.1981 1.3000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 2 0 0 0 0\n 2 4 1 0 0 0 0\n 1 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 N-methylformamide\nM END\n> <name>\nn-methylformamide\n\n> <abbreviation>\nN-methylformamide\n\n> <group>\nSalts and Solvents\n\n$$$$\npropane nitrile\n -INDIGO-11302219142D\n\n 4 3 0 0 0 0 0 0 0 0999 V2000\n 6.8971 0.7500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2990 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5981 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 4 3 0 0 0 0\n 2 3 1 0 0 0 0\n 2 4 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 4 1 2 3 4\nM SMT 1 propane nitrile\nM END\n> <name>\npropane nitrile\n\n> <abbreviation>\npropane nitrile\n\n> <group>\nSalts and Solvents\n\n$$$$\nsulfolane\n -INDIGO-11302219142D\n\n 7 7 0 0 0 0 0 0 0 0999 V2000\n 0.7500 2.3100 0.0000 S 0 0 0 0 0 0 0 0 0 0 0 0\n -0.4600 1.4300 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.9600 1.4300 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5000 3.6090 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -0.0673 3.5678 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3 2 1 0 0 0 0\n 2 1 1 0 0 0 0\n 1 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 3 1 0 0 0 0\n 1 6 2 0 0 0 0\n 1 7 2 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 sulfolane\nM END\n> <name>\nsulfolane\n\n> <abbreviation>\nsulfolane\n\n> <group>\nSalts and Solvents\n\n$$$$\namyl acetate\n -INDIGO-11302219142D\n\n 9 8 0 0 0 0 0 0 0 0999 V2000\n 5.8307 0.3714 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.1297 -0.3786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.5316 -0.3786 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 5.8307 1.8714 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3.2326 0.3714 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.9335 -0.3785 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.6345 0.3715 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.6646 -0.3785 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.9636 0.3715 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 2 0 0 0 0\n 3 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 6 7 1 0 0 0 0\n 7 8 1 0 0 0 0\n 8 9 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 1 9\nM SMT 1 amyl acetate\nM END\n> <name>\namyl acetate\n\n> <abbreviation>\namyl acetate\n\n> <group>\nSalts and Solvents\n\n$$$$\nbutyl acetate\n -INDIGO-11302219142D\n\n 8 7 0 0 0 0 0 0 0 0999 V2000\n 7.5466 0.0000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 8.8456 2.2500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.9486 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.6495 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.2476 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.3505 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.8456 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 10.1446 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 5 1 0 0 0 0\n 1 7 1 0 0 0 0\n 2 7 2 0 0 0 0\n 3 4 1 0 0 0 0\n 3 5 1 0 0 0 0\n 4 6 1 0 0 0 0\n 7 8 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SMT 1 butyl acetate\nM END\n> <name>\nbutyl acetate\n\n> <abbreviation>\nbutyl acetate\n\n> <group>\nSalts and Solvents\n\n$$$$\ndimethyl carbonate\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n 0.5429 -0.3429 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.5429 1.1571 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -0.7562 -1.0929 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1.8419 -1.0929 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -2.0552 -0.3429 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.1409 -0.3429 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 2 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 3 5 1 0 0 0 0\n 4 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 dimethyl carbonate\nM END\n> <name>\ndimethyl carbonate\n\n> <abbreviation>\ndimethyl carbonate\n\n> <group>\nSalts and Solvents\n\n$$$$\nethyl acetate\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n 2.7079 -0.3429 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.7079 1.1571 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.0070 -1.0929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.4089 -1.0929 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 0.1099 -0.3429 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.1891 -1.0929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 2 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 ethyl acetate\nM END\n> <name>\nethyl acetate\n\n> <abbreviation>\nethyl acetate\n\n> <group>\nSalts and Solvents\n\n$$$$\nethyl formate\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n 5.8087 -2.6404 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.8087 -1.1506 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.5094 -3.4018 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3.2098 -2.6486 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.9103 -3.4018 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.1078 -3.3904 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0\n 2 1 2 0 0 0 0\n 3 1 1 0 0 0 0\n 4 3 1 0 0 0 0\n 5 4 1 0 0 0 0\n 1 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 ethyl formate\nM END\n> <name>\nethyl formate\n\n> <abbreviation>\nethyl formate\n\n> <group>\nSalts and Solvents\n\n$$$$\nethyl lactate\n -INDIGO-11302219142D\n\n 8 7 0 0 0 0 0 0 0 0999 V2000\n -0.3480 1.2991 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.9509 2.0491 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.2500 1.2991 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5491 2.0491 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5491 3.5491 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8480 1.2991 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1471 2.0491 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8480 -0.2009 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 2 0 0 0 0\n 4 6 1 0 0 0 0\n 6 7 1 0 0 0 0\n 6 8 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SMT 1 ethyl lactate\nM END\n> <name>\nethyl lactate\n\n> <abbreviation>\nethyl lactate\n\n> <group>\nSalts and Solvents\n\n$$$$\nethyl propionate\n -INDIGO-11302219142D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n -0.3480 1.2991 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.9509 2.0491 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.2500 1.2991 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5491 2.0491 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5491 3.5491 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8480 1.2991 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1471 2.0491 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 2 0 0 0 0\n 4 6 1 0 0 0 0\n 6 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 ethyl propionate\nM END\n> <name>\nethyl propionate\n\n> <abbreviation>\nethyl propionate\n\n> <group>\nSalts and Solvents\n\n$$$$\nethylene carbonate\n -INDIGO-11302219142D\n\n 6 6 0 0 0 0 0 0 0 0999 V2000\n 1.0323 3.5259 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0323 2.0259 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.2458 1.1443 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1.7823 -0.2824 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.2824 -0.2824 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.1813 1.1443 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 2 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 2 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 ethylene carbonate\nM END\n> <name>\nethylene carbonate\n\n> <abbreviation>\nethylene carbonate\n\n> <group>\nSalts and Solvents\n\n$$$$\nisobutyl acetate\n -INDIGO-11302219142D\n\n 8 7 0 0 0 0 0 0 0 0999 V2000\n 4.4399 -0.3429 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.4399 1.1571 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 5.7390 -1.0929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.1409 -1.0929 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1.8419 -0.3429 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.5429 -1.0929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.5429 -2.5929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.7561 -0.3429 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 2 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 6 7 1 0 0 0 0\n 6 8 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SMT 1 isobutyl acetate\nM END\n> <name>\nisobutyl acetate\n\n> <abbreviation>\nisobutyl acetate\n\n> <group>\nSalts and Solvents\n\n$$$$\nisopropyl acetate\n -INDIGO-11302219142D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n 3.1409 -0.3429 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.1409 1.1571 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.4400 -1.0929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.8419 -1.0929 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 0.5429 -0.3429 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.7561 -1.0929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.5429 1.1571 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 2 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 5 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 isopropyl acetate\nM END\n> <name>\nisopropyl acetate\n\n> <abbreviation>\nisopropyl acetate\n\n> <group>\nSalts and Solvents\n\n$$$$\nmethyl acetate\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 0.5429 -0.3429 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.5429 1.1571 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -0.7562 -1.0929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.8419 -1.0929 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3.1409 -0.3429 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 2 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 4 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 methyl acetate\nM END\n> <name>\nmethyl acetate\n\n> <abbreviation>\nmethyl acetate\n\n> <group>\nSalts and Solvents\n\n$$$$\nmethyl formate\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 1.5821 -0.3429 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5821 1.1571 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 2.8812 -1.0929 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0\n 0.2831 -1.0929 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.0159 -0.3429 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 2 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 4 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 methyl formate\nM END\n> <name>\nmethyl formate\n\n> <abbreviation>\nmethyl formate\n\n> <group>\nSalts and Solvents\n\n$$$$\nmethyl lactate\n -INDIGO-11302219142D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n 7.6971 -2.1071 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.3980 -2.8571 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 5.0991 -2.1071 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.0991 -0.6071 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3.8000 -2.8571 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5009 -2.1071 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.8000 -4.3571 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 2 0 0 0 0\n 3 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 5 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 methyl lactate\nM END\n> <name>\nmethyl lactate\n\n> <abbreviation>\nmethyl lactate\n\n> <group>\nSalts and Solvents\n\n$$$$\nn-octylacetate\n -INDIGO-11302219142D\n\n 12 11 0 0 0 0 0 0 0 0999 V2000\n 7.7009 4.9462 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.0000 5.6962 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 10.2991 4.9462 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 11.5980 5.6962 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 12.8971 4.9462 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 14.1962 5.6962 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 15.4953 4.9462 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 16.7942 5.6962 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 18.0933 4.9462 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 19.3924 5.6962 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 20.6913 4.9462 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 19.3924 7.1962 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 6 7 1 0 0 0 0\n 7 8 1 0 0 0 0\n 8 9 1 0 0 0 0\n 9 10 1 0 0 0 0\n 10 11 1 0 0 0 0\n 10 12 2 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 4 9 10 11 12\nM SMT 1 n-octylacetate\nM END\n> <name>\nn-octylacetate\n\n> <abbreviation>\nn-octylacetate\n\n> <group>\nSalts and Solvents\n\n$$$$\npropyl acetate\n -INDIGO-11302219142D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n 6.3403 -0.1607 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 7.6395 2.0893 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3.7423 -0.1607 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.0413 0.5893 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.4433 0.5893 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.6395 0.5893 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.9385 -0.1607 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 4 1 0 0 0 0\n 1 6 1 0 0 0 0\n 2 6 2 0 0 0 0\n 3 4 1 0 0 0 0\n 3 5 1 0 0 0 0\n 6 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 propyl acetate\nM END\n> <name>\npropyl acetate\n\n> <abbreviation>\npropyl acetate\n\n> <group>\nSalts and Solvents\n\n$$$$\npropylene carbonate\n -INDIGO-11302219142D\n\n 7 7 0 0 0 0 0 0 0 0999 V2000\n 0.5661 -1.8745 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.5661 -0.3746 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.6474 0.5071 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.1839 1.9338 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1.3160 1.9338 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.1978 3.1472 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1.7797 0.5071 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 2 0 0 0 0\n 5 7 1 0 0 0 0\n 2 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 propylene carbonate\nM END\n> <name>\npropylene carbonate\n\n> <abbreviation>\npropylene carbonate\n\n> <group>\nSalts and Solvents\n\n$$$$\nt-butyl acetate\n -INDIGO-11302219142D\n\n 8 7 0 0 0 0 0 0 0 0999 V2000\n 6.0125 -7.4927 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.7134 -6.7427 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.7134 -5.2428 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3.4144 -7.4928 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 2.1153 -6.7428 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.8163 -5.9928 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.3653 -8.0418 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.8653 -5.4437 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 2 0 0 0 0\n 2 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 5 7 1 0 0 0 0\n 5 8 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SMT 1 t-butyl acetate\nM END\n> <name>\nt-butyl acetate\n\n> <abbreviation>\nt-butyl acetate\n\n> <group>\nSalts and Solvents\n\n$$$$\n1,2-dimethoxyethane\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n -0.0857 0.1714 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.2133 -0.5786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5124 0.1714 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.3848 -0.5786 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3.8114 -0.5786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.6838 0.1714 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 3 5 1 0 0 0 0\n 4 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 1,2-dimethoxyethane\nM END\n> <name>\n1,2-dimethoxyethane\n\n> <abbreviation>\n1,2-dimethoxyethane\n\n> <group>\nSalts and Solvents\n\n$$$$\n1,4-dioxane\n -INDIGO-11302219142D\n\n 6 6 0 0 0 0 0 0 0 0999 V2000\n 3.9490 -2.3000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 2.6500 -3.0500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.6500 -4.5500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.9490 -5.3000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 5.2481 -4.5500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.2481 -3.0500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2 3 1 0 0 0 0\n 2 1 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 6 1 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 1,4-dioxane\nM END\n> <name>\n1,4-dioxane\n\n> <abbreviation>\n1,4-dioxane\n\n> <group>\nSalts and Solvents\n\n$$$$\n2-methyl tetrahydrofuran\n -INDIGO-11302219142D\n\n 6 6 0 0 0 0 0 0 0 0999 V2000\n 0.7500 2.3100 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -0.4600 1.4300 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.9600 1.4300 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.3860 1.8953 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3 2 1 0 0 0 0\n 2 1 1 0 0 0 0\n 1 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 3 1 0 0 0 0\n 4 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 2-methyl tetrahydrofuran\nM END\n> <name>\n2-methyl tetrahydrofuran\n\n> <abbreviation>\n2-methyl tetrahydrofuran\n\n> <group>\nSalts and Solvents\n\n$$$$\nanisole\n -INDIGO-11302219142D\n\n 8 8 0 0 0 0 0 0 0 0999 V2000\n 6.1000 0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 -2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 -2.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 -2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 1.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 2.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 2 0 0 0 0\n 2 4 2 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 2 0 0 0 0\n 6 3 1 0 0 0 0\n 1 7 1 0 0 0 0\n 7 8 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SMT 1 anisole\nM END\n> <name>\nanisole\n\n> <abbreviation>\nanisole\n\n> <group>\nSalts and Solvents\n\n$$$$\nbutyl carbitol\n -INDIGO-11302219142D\n\n 11 10 0 0 0 0 0 0 0 0999 V2000\n -0.2227 -3.0342 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0742 -3.7829 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.3750 -3.0387 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.6719 -3.7875 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.9782 -3.0336 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 6.2751 -3.7823 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.5758 -3.0382 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.8728 -3.7870 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 10.1792 -3.0330 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 11.4761 -3.7817 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 12.7768 -3.0376 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 6 7 1 0 0 0 0\n 7 8 1 0 0 0 0\n 8 9 1 0 0 0 0\n 9 10 1 0 0 0 0\n 10 11 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 3 9 10 11\nM SMT 1 butyl carbitol\nM END\n> <name>\nbutyl carbitol\n\n> <abbreviation>\nbutyl carbitol\n\n> <group>\nSalts and Solvents\n\n$$$$\ncyclopentyl methyl ether\n -INDIGO-11302219142D\n\n 7 7 0 0 0 0 0 0 0 0999 V2000\n 6.1000 1.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 1.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 1.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5053 1.7481 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.3855 0.7467 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.4886 -0.4632 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.9950 -0.6239 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 5 4 1 0 0 0 0\n 4 2 1 0 0 0 0\n 2 6 1 0 0 0 0\n 6 7 1 0 0 0 0\n 7 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 cyclopentyl methyl ether\nM END\n> <name>\ncyclopentyl methyl ether\n\n> <abbreviation>\ncyclopentyl methyl ether\n\n> <group>\nSalts and Solvents\n\n$$$$\ndibutyl ether\n -INDIGO-11302219142D\n\n 9 8 0 0 0 0 0 0 0 0999 V2000\n 5.4509 4.6471 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.7500 3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.0491 4.6471 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.3480 3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 10.6470 4.6471 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 11.9461 3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 13.2452 4.6471 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 14.5441 3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 15.8432 4.6471 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 6 7 1 0 0 0 0\n 7 8 1 0 0 0 0\n 8 9 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 1 9\nM SMT 1 dibutyl ether\nM END\n> <name>\ndibutyl ether\n\n> <abbreviation>\ndibutyl ether\n\n> <group>\nSalts and Solvents\n\n$$$$\ndiethyl ether\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 6.1000 1.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 2.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 2.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5019 1.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.6980 1.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 2 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 ether\nM END\n> <name>\ndiethyl ether\n\n> <abbreviation>\nether\n\n> <group>\nSalts and Solvents\n\n$$$$\ndiethylene glycol\n -INDIGO-11302219142D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n 7.7875 -1.4835 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.4896 -2.2328 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.1892 -1.4790 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3.8854 -2.2317 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5884 -1.4840 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.2906 -2.2333 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 9.0845 -2.2313 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 7 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 diethylene glycol\nM END\n> <name>\ndiethylene glycol\n\n> <abbreviation>\ndiethylene glycol\n\n> <group>\nSalts and Solvents\n\n$$$$\ndiglyme\n -INDIGO-11302219142D\n\n 9 8 0 0 0 0 0 0 0 0999 V2000\n -0.0857 0.1714 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.2133 -0.5786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5124 0.1714 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.3848 -0.5786 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3.8114 -0.5786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.6838 0.1714 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.9828 -0.5786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -5.2818 0.1714 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -6.5809 -0.5786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 3 5 1 0 0 0 0\n 4 6 1 0 0 0 0\n 6 7 1 0 0 0 0\n 7 8 1 0 0 0 0\n 8 9 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 1 9\nM SMT 1 diglyme\nM END\n> <name>\ndiethylene glycol dimethyl ether\n\n> <abbreviation>\ndiglyme\n\n> <group>\nSalts and Solvents\n\n$$$$\ndiisopropyl ether\n -INDIGO-11302219142D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n 5.5971 2.8500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2980 3.6000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2980 5.1000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.9991 2.8500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1.7000 3.6000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.4009 2.8500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.7000 5.1000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 2 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 5 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 diisopropyl ether\nM END\n> <name>\ndiisopropyl ether\n\n> <abbreviation>\ndiisopropyl ether\n\n> <group>\nSalts and Solvents\n\n$$$$\ndimethyl ether\n -INDIGO-11302219142D\n\n 3 2 0 0 0 0 0 0 0 0999 V2000\n 4.2989 -0.3750 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5980 0.3750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.9999 0.3750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 3 1 2 3\nM SMT 1 dimethyl ether\nM END\n> <name>\ndimethyl ether\n\n> <abbreviation>\ndimethyl ether\n\n> <group>\nSalts and Solvents\n\n$$$$\ndiphenyl ether\n -INDIGO-11302219142D\n\n 13 14 0 0 0 0 0 0 0 0999 V2000\n 7.1190 1.0305 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 5.8200 0.2805 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.8200 -1.2196 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.5210 -1.9696 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.2219 -1.2195 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.2219 0.2805 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.5209 1.0305 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.4181 0.2804 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.7171 1.0304 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 11.0161 0.2805 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 11.0161 -1.2194 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.7170 -1.9694 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.4180 -1.2195 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 2 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 2 0 0 0 0\n 5 6 1 0 0 0 0\n 6 7 2 0 0 0 0\n 2 7 1 0 0 0 0\n 1 8 1 0 0 0 0\n 8 9 2 0 0 0 0\n 9 10 1 0 0 0 0\n 10 11 2 0 0 0 0\n 11 12 1 0 0 0 0\n 12 13 2 0 0 0 0\n 8 13 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 5 9 10 11 12 13\nM SMT 1 diphenyl ether\nM END\n> <name>\ndiphenyl ether\n\n> <abbreviation>\ndiphenyl ether\n\n> <group>\nSalts and Solvents\n\n$$$$\nethoxybenzene\n -INDIGO-11302219142D\n\n 9 9 0 0 0 0 0 0 0 0999 V2000\n 0.0000 6.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 4.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.2991 3.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1.2991 2.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5980 1.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5980 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.2991 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 1.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 2 0 0 0 0\n 5 6 1 0 0 0 0\n 6 7 2 0 0 0 0\n 7 8 1 0 0 0 0\n 8 9 2 0 0 0 0\n 4 9 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 1 9\nM SMT 1 ethoxybenzene\nM END\n> <name>\nethoxybenzene\n\n> <abbreviation>\nethoxybenzene\n\n> <group>\nSalts and Solvents\n\n$$$$\nmethyl t-butyl ether\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n 6.1000 1.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 1.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 1.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5019 0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.0510 2.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5510 -0.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 2 4 1 0 0 0 0\n 2 5 1 0 0 0 0\n 2 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 methyl t-butyl ether\nM END\n> <name>\nmethyl t-butyl ether\n\n> <abbreviation>\nmethyl t-butyl ether\n\n> <group>\nSalts and Solvents\n\n$$$$\nt-amyl methyl ether\n -INDIGO-11302219142D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n 6.8972 0.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5982 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2990 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8482 1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.3482 -1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.1962 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 7 1 0 0 0 0\n 2 3 1 0 0 0 0\n 2 4 1 0 0 0 0\n 2 5 1 0 0 0 0\n 3 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 t-amyl methyl ether\nM END\n> <name>\nt-amyl methyl ether\n\n> <abbreviation>\nt-amyl methyl ether\n\n> <group>\nSalts and Solvents\n\n$$$$\nt-butylethyl ether\n -INDIGO-11302219142D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n 2.3688 -7.1130 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0698 -7.8630 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.2293 -7.1129 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.5283 -7.8629 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.8274 -8.6129 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.2783 -6.5639 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.7783 -9.1620 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 4 6 1 0 0 0 0\n 4 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 t-butylethyl ether\nM END\n> <name>\nt-butylethyl ether\n\n> <abbreviation>\nt-butylethyl ether\n\n> <group>\nSalts and Solvents\n\n$$$$\ntetrahydrofuran\n -INDIGO-11302219142D\n\n 5 5 0 0 0 0 0 0 0 0999 V2000\n 0.7500 2.3100 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -0.4600 1.4300 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.9600 1.4300 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3 2 1 0 0 0 0\n 2 1 1 0 0 0 0\n 1 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 3 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 THF\nM END\n> <name>\ntetrahydrofuran\n\n> <abbreviation>\nTHF\n\n> <group>\nSalts and Solvents\n\n$$$$\ntriethylene glycol\n -INDIGO-11302219142D\n\n 10 9 0 0 0 0 0 0 0 0999 V2000\n 4.1520 3.8971 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 5.4509 4.6471 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.7500 3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.0491 4.6471 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 9.3480 3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 10.6471 4.6471 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 11.9462 3.8971 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 13.2453 4.6471 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 14.5442 3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 15.8433 4.6471 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 6 7 1 0 0 0 0\n 7 8 1 0 0 0 0\n 8 9 1 0 0 0 0\n 9 10 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 2 9 10\nM SMT 1 triethylene glycol\nM END\n> <name>\ntriethylene glycol\n\n> <abbreviation>\ntriethylene glycol\n\n> <group>\nSalts and Solvents\n\n$$$$\n1,2,4-trichlorobenzene\n -INDIGO-11302219142D\n\n 9 9 0 0 0 0 0 0 0 0999 V2000\n 2.2506 -3.8983 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.9991 -2.5989 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.2506 -1.2994 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.7485 -1.2994 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 -2.5989 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.7485 -3.8983 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 -5.1978 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 0.0000 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 2.9991 0.0000 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 6 2 0 0 0 0\n 2 3 2 0 0 0 0\n 3 4 1 0 0 0 0\n 3 9 1 0 0 0 0\n 4 5 2 0 0 0 0\n 4 8 1 0 0 0 0\n 5 6 1 0 0 0 0\n 6 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 1 9\nM SMT 1 1,2,4-trichlorobenzene\nM END\n> <name>\n1,2,4-trichlorobenzene\n\n> <abbreviation>\n1,2,4-trichlorobenzene\n\n> <group>\nSalts and Solvents\n\n$$$$\n1,2-dichlorobenzene\n -INDIGO-11302219142D\n\n 8 8 0 0 0 0 0 0 0 0999 V2000\n 0.9558 -0.8403 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.4581 -0.8408 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.2048 0.4582 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.4555 1.7560 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.9571 1.7589 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.2065 0.4576 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.2078 3.0567 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 3.2060 3.0573 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 6 2 0 0 0 0\n 2 3 2 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 2 0 0 0 0\n 4 8 1 0 0 0 0\n 5 6 1 0 0 0 0\n 5 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SMT 1 1,2-dichlorobenzene\nM END\n> <name>\n1,2-dichlorobenzene\n\n> <abbreviation>\n1,2-dichlorobenzene\n\n> <group>\nSalts and Solvents\n\n$$$$\n1,2-dichloroethane\n -INDIGO-11302219142D\n\n 4 3 0 0 0 0 0 0 0 0999 V2000\n -0.2571 0.8286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0419 1.5786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.3409 0.8286 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n -1.5562 1.5786 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 1 4 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 4 1 2 3 4\nM SMT 1 DCE\nM END\n> <name>\n1,2-dichloroethane\n\n> <abbreviation>\nDCE\n\n> <group>\nSalts and Solvents\n\n$$$$\n2,2,2-trifluoroethanol\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n 2.3661 -2.2500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0670 -1.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0670 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0670 1.5000 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n -0.4330 0.0000 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5670 0.0000 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 3 5 1 0 0 0 0\n 3 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 2,2,2-trifluoroethanol\nM END\n> <name>\n2,2,2-trifluoroethanol\n\n> <abbreviation>\n2,2,2-trifluoroethanol\n\n> <group>\nSalts and Solvents\n\n$$$$\n2,3,4-trifluorotoluene\n -INDIGO-11302219142D\n\n 10 10 0 0 0 0 0 0 0 0999 V2000\n 4.0898 1.7173 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 7.0899 1.7173 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 8.5899 -0.8808 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 4.0898 -0.8807 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8398 0.4183 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8399 -2.1798 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.3399 0.4182 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5898 -0.8807 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.3399 -2.1798 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.0899 -0.8808 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 5 1 0 0 0 0\n 2 7 1 0 0 0 0\n 3 10 1 0 0 0 0\n 4 5 2 0 0 0 0\n 4 6 1 0 0 0 0\n 4 8 1 0 0 0 0\n 5 7 1 0 0 0 0\n 6 9 2 0 0 0 0\n 7 10 2 0 0 0 0\n 9 10 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 2 9 10\nM SMT 1 2,3,4-trifluorotoluene\nM END\n> <name>\n2,3,4-trifluorotoluene\n\n> <abbreviation>\n2,3,4-trifluorotoluene\n\n> <group>\nSalts and Solvents\n\n$$$$\ncarbon tetrachloride\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 6.1000 0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 1.7500 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 -1.2500 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 7.6000 0.2500 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 4.6000 0.2500 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 1 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 carbon tetrachloride\nM END\n> <name>\ncarbon tetrachloride\n\n> <abbreviation>\ncarbon tetrachloride\n\n> <group>\nSalts and Solvents\n\n$$$$\nchloroacetic acid\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 9.0626 -7.0246 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.0626 -5.5268 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 10.3632 -7.7759 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 6.4658 -7.0246 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 7.7666 -7.7759 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2 1 2 0 0 0 0\n 3 1 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 1 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 chloroacetic acid\nM END\n> <name>\nchloroacetic acid\n\n> <abbreviation>\nchloroacetic acid\n\n> <group>\nSalts and Solvents\n\n$$$$\nchlorobenzene\n -INDIGO-11302219142D\n\n 7 7 0 0 0 0 0 0 0 0999 V2000\n 6.1000 0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 -2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 -2.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 -2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 1.7500 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 2 0 0 0 0\n 2 4 2 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 2 0 0 0 0\n 6 3 1 0 0 0 0\n 1 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 chlorobenzene\nM END\n> <name>\nchlorobenzene\n\n> <abbreviation>\nchlorobenzene\n\n> <group>\nSalts and Solvents\n\n$$$$\nchloroform\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 6.1000 0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 1.7500 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 -1.2500 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 7.6000 0.2500 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0\n 4.6000 0.2500 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 1 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 chloroform\nM END\n> <name>\nchloroform\n\n> <abbreviation>\nchloroform\n\n> <group>\nSalts and Solvents\n\n$$$$\ndichloromethane\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 6.1000 0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 -0.5000 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 -0.5000 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 6.8500 1.5490 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0\n 5.3500 1.5490 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 1 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 DCM\nM END\n> <name>\ndichloromethane\n\n> <abbreviation>\nDCM\n\n> <group>\nSalts and Solvents\n\n$$$$\nfluorobenzene\n -INDIGO-11302219142D\n\n 7 7 0 0 0 0 0 0 0 0999 V2000\n 1.2991 3.7500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 1.2991 2.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5980 1.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5980 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.2991 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 1.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 2 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 2 0 0 0 0\n 5 6 1 0 0 0 0\n 6 7 2 0 0 0 0\n 2 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 fluorobenzene\nM END\n> <name>\nfluorobenzene\n\n> <abbreviation>\nfluorobenzene\n\n> <group>\nSalts and Solvents\n\n$$$$\nperfluorocyclic ether\n -INDIGO-11302219142D\n\n 25 25 0 0 0 0 0 0 0 0999 V2000\n -1.9038 -6.0746 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n -1.9038 -4.5746 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.4038 -4.5746 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n -1.9038 -3.0746 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n -0.4038 -4.5746 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.4038 -6.0746 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n -0.4038 -3.0746 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0962 -4.5746 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0962 -6.0746 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0962 -3.0746 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5962 -4.5746 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5962 -6.0746 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5962 -3.0746 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 4.0962 -4.5746 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.9395 -6.0662 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 3.9395 -3.0827 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 5.3099 -2.4726 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.5598 -1.1736 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 6.5233 -1.5909 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 6.3135 -3.5873 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3173 -2.4726 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 7.5271 -4.4689 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5635 -4.8864 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.7677 -5.7808 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 5.4224 -6.3797 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 2 4 1 0 0 0 0\n 2 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 5 7 1 0 0 0 0\n 5 8 1 0 0 0 0\n 8 9 1 0 0 0 0\n 8 10 1 0 0 0 0\n 8 11 1 0 0 0 0\n 11 12 1 0 0 0 0\n 11 13 1 0 0 0 0\n 11 14 1 0 0 0 0\n 14 15 1 0 0 0 0\n 14 16 1 0 0 0 0\n 16 17 1 0 0 0 0\n 17 18 1 0 0 0 0\n 17 19 1 0 0 0 0\n 17 20 1 0 0 0 0\n 20 21 1 0 0 0 0\n 20 22 1 0 0 0 0\n 20 23 1 0 0 0 0\n 14 23 1 0 0 0 0\n 23 24 1 0 0 0 0\n 23 25 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 8 9 10 11 12 13 14 15 16\nM SAL 1 8 17 18 19 20 21 22 23 24\nM SAL 1 1 25\nM SMT 1 perfluorocyclic ether\nM END\n> <name>\nperfluorocyclic ether\n\n> <abbreviation>\nperfluorocyclic ether\n\n> <group>\nSalts and Solvents\n\n$$$$\nperfluorocyclohexane\n -INDIGO-11302219142D\n\n 18 18 0 0 0 0 0 0 0 0999 V2000\n 7.8482 2.0490 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 8.5982 0.7500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 6.5491 2.7990 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 5.0490 2.7990 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 8.5982 -0.7500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 7.8482 -2.0490 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 0.7500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 3.7500 2.0490 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 5.0490 -2.7990 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 6.5491 -2.7990 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 3.7500 -2.0490 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 -0.7500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 7.0982 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.7991 1.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.0982 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.5000 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.7991 -1.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.5000 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 13 1 0 0 0 0\n 2 13 1 0 0 0 0\n 3 14 1 0 0 0 0\n 4 14 1 0 0 0 0\n 5 15 1 0 0 0 0\n 6 15 1 0 0 0 0\n 7 16 1 0 0 0 0\n 8 16 1 0 0 0 0\n 9 17 1 0 0 0 0\n 10 17 1 0 0 0 0\n 11 18 1 0 0 0 0\n 12 18 1 0 0 0 0\n 13 14 1 0 0 0 0\n 13 15 1 0 0 0 0\n 14 16 1 0 0 0 0\n 15 17 1 0 0 0 0\n 16 18 1 0 0 0 0\n 17 18 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 8 9 10 11 12 13 14 15 16\nM SAL 1 2 17 18\nM SMT 1 perfluorocyclohexane\nM END\n> <name>\nperfluorocyclohexane\n\n> <abbreviation>\nperfluorocyclohexane\n\n> <group>\nSalts and Solvents\n\n$$$$\nperfluorohexane\n -INDIGO-11302219142D\n\n 20 19 0 0 0 0 0 0 0 0999 V2000\n 6.1472 0.9240 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 7.6472 -1.6740 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 8.9463 -0.9240 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 7.4462 1.6740 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 6.3482 -2.4240 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8482 0.1740 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 8.7453 2.4240 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 10.2453 -0.1740 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 5.0491 -3.1740 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5490 -0.5760 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 -2.6250 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 10.0444 3.1740 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 11.5444 0.5760 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 12.0935 2.6250 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 6.8972 -0.3750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.1963 0.3750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5982 -1.1250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.4953 1.1250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2991 -1.8750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 10.7944 1.8750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 15 1 0 0 0 0\n 2 15 1 0 0 0 0\n 3 16 1 0 0 0 0\n 4 16 1 0 0 0 0\n 5 17 1 0 0 0 0\n 6 17 1 0 0 0 0\n 7 18 1 0 0 0 0\n 8 18 1 0 0 0 0\n 9 19 1 0 0 0 0\n 10 19 1 0 0 0 0\n 11 19 1 0 0 0 0\n 12 20 1 0 0 0 0\n 13 20 1 0 0 0 0\n 14 20 1 0 0 0 0\n 15 16 1 0 0 0 0\n 15 17 1 0 0 0 0\n 16 18 1 0 0 0 0\n 17 19 1 0 0 0 0\n 18 20 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 8 9 10 11 12 13 14 15 16\nM SAL 1 4 17 18 19 20\nM SMT 1 perfluorohexane\nM END\n> <name>\nperfluorohexane\n\n> <abbreviation>\nperfluorohexane\n\n> <group>\nSalts and Solvents\n\n$$$$\nperfluorotoluene\n -INDIGO-11302219142D\n\n 15 15 0 0 0 0 0 0 0 0999 V2000\n 3.0000 0.7500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 8.1962 0.7500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5982 3.7500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 7.0982 2.2500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 4.0982 2.2500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 8.1962 -2.2500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 -2.2500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5982 -3.7500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5982 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2990 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.8972 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5982 2.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.8972 -1.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2990 -1.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5982 -2.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 10 1 0 0 0 0\n 2 11 1 0 0 0 0\n 3 12 1 0 0 0 0\n 4 12 1 0 0 0 0\n 5 12 1 0 0 0 0\n 6 13 1 0 0 0 0\n 7 14 1 0 0 0 0\n 8 15 1 0 0 0 0\n 9 10 2 0 0 0 0\n 9 11 1 0 0 0 0\n 9 12 1 0 0 0 0\n 10 14 1 0 0 0 0\n 11 13 2 0 0 0 0\n 13 15 1 0 0 0 0\n 14 15 2 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 7 9 10 11 12 13 14 15\nM SMT 1 perfluorotoluene\nM END\n> <name>\nperfluorotoluene\n\n> <abbreviation>\nperfluorotoluene\n\n> <group>\nSalts and Solvents\n\n$$$$\ntrichloroacetic acid\n -INDIGO-11302219142D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n 4.3154 -3.6247 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.6336 -2.8642 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.6336 -1.3688 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0543 -2.8010 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 3.1051 -4.3218 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 4.3090 -5.1835 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 6.9579 -3.6120 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 2 1 1 0 0 0 0\n 3 2 2 0 0 0 0\n 4 1 1 0 0 0 0\n 5 1 1 0 0 0 0\n 6 1 1 0 0 0 0\n 7 2 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 trichloroacetic acid\nM END\n> <name>\ntrichloroacetic acid\n\n> <abbreviation>\ntrichloroacetic acid\n\n> <group>\nSalts and Solvents\n\n$$$$\ntrichloroacetonitrile\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n 4.5000 0.0000 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 1.5000 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 -1.5000 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 0.0000 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 2 4 1 0 0 0 0\n 2 5 1 0 0 0 0\n 5 6 3 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 trichloroacetonitrile\nM END\n> <name>\ntrichloroacetonitrile\n\n> <abbreviation>\ntrichloroacetonitrile\n\n> <group>\nSalts and Solvents\n\n$$$$\ntrifluoroacetic acid\n -INDIGO-11302219142D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n 1.0500 -4.9991 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 0.3000 -3.7000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0500 -2.4009 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.2000 -3.7000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.7000 -3.7000 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n -1.2000 -2.2000 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n -1.2000 -5.2000 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 2 0 0 0 0\n 2 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 4 6 1 0 0 0 0\n 4 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 trifluoroacetic acid\nM END\n> <name>\ntrifluoroacetic acid\n\n> <abbreviation>\ntrifluoroacetic acid\n\n> <group>\nSalts and Solvents\n\n$$$$\ntrifluoromethylbenzene\n -INDIGO-11302219142D\n\n 10 10 0 0 0 0 0 0 0 0999 V2000\n 6.1000 0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 -2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 -2.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 -2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 1.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 3.2500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 4.6000 1.7500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 7.6000 1.7500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 2 0 0 0 0\n 2 4 2 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 2 0 0 0 0\n 6 3 1 0 0 0 0\n 1 7 1 0 0 0 0\n 7 8 1 0 0 0 0\n 7 9 1 0 0 0 0\n 7 10 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 2 9 10\nM SMT 1 trifluoromethylbenzene\nM END\n> <name>\ntrifluoromethylbenzene\n\n> <abbreviation>\ntrifluoromethylbenzene\n\n> <group>\nSalts and Solvents\n\n$$$$\n2-methylpentane\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n 0.5471 -1.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.7520 -0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.0509 -1.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.3500 -0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -4.6491 -1.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.3500 1.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 4 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 2-methylpentane\nM END\n> <name>\n2-methylpentane\n\n> <abbreviation>\n2-methylpentane\n\n> <group>\nSalts and Solvents\n\n$$$$\ncis-decalin\n -INDIGO-11302219142D\n\n 12 13 0 0 1 0 0 0 0 0999 V2000\n 2.6130 -0.7481 0.0000 C 0 0 2 0 0 0 0 0 0 0 0 0\n 2.6130 -2.2234 0.0000 C 0 0 1 0 0 0 0 0 0 0 0 0\n 1.3195 -3.0026 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.3195 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.8754 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.8754 -2.9714 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 -0.7481 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.1948 -0.7481 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.1948 -2.2234 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 -2.2234 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5583 0.8018 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0\n 2.6130 -3.6988 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 4 1 0 0 0 0\n 1 5 1 0 0 0 0\n 2 3 1 0 0 0 0\n 2 6 1 0 0 0 0\n 3 10 1 0 0 0 0\n 4 7 1 0 0 0 0\n 5 8 1 0 0 0 0\n 6 9 1 0 0 0 0\n 7 10 1 0 0 0 0\n 8 9 1 0 0 0 0\n 1 11 1 1 0 0 0\n 2 12 1 1 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 4 9 10 11 12\nM SMT 1 cis-decalin\nM END\n> <name>\ncis-decalin\n\n> <abbreviation>\ncis-decalin\n\n> <group>\nSalts and Solvents\n\n$$$$\ncyclohexane\n -INDIGO-11302219142D\n\n 6 6 0 0 0 0 0 0 0 0999 V2000\n 3.9490 -2.3000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.6500 -3.0500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.6500 -4.5500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.9490 -5.3000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.2481 -4.5500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.2481 -3.0500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2 3 1 0 0 0 0\n 2 1 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 6 1 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 cyclohexane\nM END\n> <name>\ncyclohexane\n\n> <abbreviation>\ncyclohexane\n\n> <group>\nSalts and Solvents\n\n$$$$\nisooctane\n -INDIGO-11302219142D\n\n 8 7 0 0 0 0 0 0 0 0999 V2000\n 4.6062 -2.5071 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.9052 -1.7571 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.2043 -2.5071 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.5033 -1.7571 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.8023 -2.5071 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.1552 -0.4581 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.6552 -0.4580 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.5033 -0.2571 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 2 6 1 0 0 0 0\n 2 7 1 0 0 0 0\n 4 8 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SMT 1 isooctane\nM END\n> <name>\nisooctane\n\n> <abbreviation>\nisooctane\n\n> <group>\nSalts and Solvents\n\n$$$$\nmethylcyclohexane\n -INDIGO-11302219142D\n\n 7 7 0 0 0 0 0 0 0 0999 V2000\n 3.9490 -2.3000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.6500 -3.0500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.6500 -4.5500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.9490 -5.3000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.2481 -4.5500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.2481 -3.0500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.9490 -0.8000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2 3 1 0 0 0 0\n 2 1 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 6 1 1 0 0 0 0\n 1 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 methylcyclohexane\nM END\n> <name>\nmethylcyclohexane\n\n> <abbreviation>\nmethylcyclohexane\n\n> <group>\nSalts and Solvents\n\n$$$$\nmethylcyclopentane\n -INDIGO-11302219142D\n\n 6 6 0 0 0 0 0 0 0 0999 V2000\n 4.2136 0.4041 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.4271 -0.4776 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0001 -0.4776 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.9636 -1.9041 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.4636 -1.9041 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2136 1.9041 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 6 1 0 0 0 0\n 2 4 1 0 0 0 0\n 3 5 1 0 0 0 0\n 4 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 methylcyclopentane\nM END\n> <name>\nmethylcyclopentane\n\n> <abbreviation>\nmethylcyclopentane\n\n> <group>\nSalts and Solvents\n\n$$$$\nheptane\n -INDIGO-11302219142D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n 4.6062 -2.5071 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.9052 -1.7571 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.2043 -2.5071 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.5033 -1.7571 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.8023 -2.5071 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 11.1014 -1.7571 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 12.4004 -2.5071 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 6 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 n-heptane\nM END\n> <name>\nheptane\n\n> <abbreviation>\nn-heptane\n\n> <group>\nSalts and Solvents\n\n$$$$\nhexane\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n 4.6062 -2.5071 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.9052 -1.7571 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.2043 -2.5071 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.5033 -1.7571 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.8023 -2.5071 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 11.1014 -1.7571 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 n-hexane\nM END\n> <name>\nhexane\n\n> <abbreviation>\nn-hexane\n\n> <group>\nSalts and Solvents\n\n$$$$\npentane\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 2.5624 -4.3230 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.1578 -4.3230 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.8600 -3.5708 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.4556 -3.5708 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.2647 -3.5708 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2 3 1 0 0 0 0\n 3 1 1 0 0 0 0\n 4 2 1 0 0 0 0\n 5 1 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 pentane\nM END\n> <name>\npentane\n\n> <abbreviation>\npentane\n\n> <group>\nSalts and Solvents\n\n$$$$\n2-pentanone\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n -1.5971 -4.2000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.2980 -3.4500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0009 -4.2000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.3000 -3.4500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5991 -4.2000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.3000 -1.9500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 4 6 2 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 2-pentanone\nM END\n> <name>\n2-pentanone\n\n> <abbreviation>\n2-pentanone\n\n> <group>\nSalts and Solvents\n\n$$$$\n3-pentanone\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n 2.6558 5.4039 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.9548 4.6539 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.2538 5.4039 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.2539 6.9040 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 6.5530 4.6539 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.8520 5.4039 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 2 0 0 0 0\n 3 5 1 0 0 0 0\n 5 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 3-pentanone\nM END\n> <name>\n3-pentanone\n\n> <abbreviation>\n3-pentanone\n\n> <group>\nSalts and Solvents\n\n$$$$\nacetone\n -INDIGO-11302219142D\n\n 4 3 0 0 0 0 0 0 0 0999 V2000\n 0.0571 0.3714 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.2419 -0.3786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.3562 -0.3786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0571 1.8714 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 2 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 4 1 2 3 4\nM SMT 1 propanone\nM END\n> <name>\nacetone\n\n> <abbreviation>\npropanone\n\n> <group>\nSalts and Solvents\n\n$$$$\ncyclohexanone\n -INDIGO-11302219142D\n\n 7 7 0 0 0 0 0 0 0 0999 V2000\n 0.0571 0.3714 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.2419 -0.3786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.3562 -0.3786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0571 1.8714 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.2419 -1.8786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0571 -2.6286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.3562 -1.8786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 2 0 0 0 0\n 2 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 6 7 1 0 0 0 0\n 7 3 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 cyclohexanone\nM END\n> <name>\ncyclohexanone\n\n> <abbreviation>\ncyclohexanone\n\n> <group>\nSalts and Solvents\n\n$$$$\ncyclopentanone\n -INDIGO-11302219142D\n\n 6 6 0 0 0 0 0 0 0 0999 V2000\n 1.0323 3.5259 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0323 2.0259 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.2458 1.1443 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.7823 -0.2824 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.2824 -0.2824 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.1813 1.1443 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 2 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 2 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 cyclopentanone\nM END\n> <name>\ncyclopentanone\n\n> <abbreviation>\ncyclopentanone\n\n> <group>\nSalts and Solvents\n\n$$$$\nmethyl ethyl ketone\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 0.0571 0.3714 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.2419 -0.3786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.3562 -0.3786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0571 1.8714 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -2.5409 0.3714 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 2 0 0 0 0\n 2 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 MEK\nM END\n> <name>\nmethyl ethyl ketone\n\n> <abbreviation>\nMEK\n\n> <group>\nSalts and Solvents\n\n$$$$\nmethyl isobutyl ketone\n -INDIGO-11302219142D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n 0.0571 0.3714 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.2419 -0.3786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.3562 -0.3786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0571 1.8714 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -2.5409 0.3714 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.8399 -0.3786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.5409 1.8714 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 2 0 0 0 0\n 2 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 5 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 methyl isobutyl ketone\nM END\n> <name>\nmethyl isobutyl ketone\n\n> <abbreviation>\nmethyl isobutyl ketone\n\n> <group>\nSalts and Solvents\n\n$$$$\ncarbon disulfide\n -INDIGO-11302219142D\n\n 3 2 0 0 0 0 0 0 0 0999 V2000\n 5.7990 0.0000 0.0000 S 0 0 0 0 0 0 0 0 0 0 0 0\n 2.7989 0.0000 0.0000 S 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2989 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 3 2 0 0 0 0\n 2 3 2 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 3 1 2 3\nM SMT 1 carbon disulfide\nM END\n> <name>\ncarbon disulfide\n\n> <abbreviation>\ncarbon disulfide\n\n> <group>\nSalts and Solvents\n\n$$$$\nnitromethane\n -INDIGO-11302219142D\n\n 4 3 0 0 0 0 0 0 0 0999 V2000\n 1.5009 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.8000 1.5000 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 4.0991 0.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 2.8000 3.0000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 2 4 2 0 0 0 0\nM CHG 2 2 1 3 -1\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 4 1 2 3 4\nM SMT 1 nitromethane\nM END\n> <name>\nnitromethane\n\n> <abbreviation>\nnitromethane\n\n> <group>\nSalts and Solvents\n\n$$$$\no-xylene\n -INDIGO-11302219142D\n\n 8 8 0 0 0 0 0 0 0 0999 V2000\n -2.1500 4.4750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.4490 3.7250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.4490 2.2250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.1500 1.4750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8510 2.2250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8510 3.7250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.1500 5.9750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.4481 4.4750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 2 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 2 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 2 0 0 0 0\n 6 1 1 0 0 0 0\n 1 7 1 0 0 0 0\n 6 8 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SMT 1 o-xylene\nM END\n> <name>\no-xylene\n\n> <abbreviation>\no-xylene\n\n> <group>\nSalts and Solvents\n\n$$$$\nm-xylene\n -INDIGO-11302219142D\n\n 8 8 0 0 0 0 0 0 0 0999 V2000\n -2.1500 4.4750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.4490 3.7250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.4490 2.2250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.1500 1.4750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8510 2.2250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8510 3.7250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.1500 5.9750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.4480 1.4750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 2 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 2 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 2 0 0 0 0\n 6 1 1 0 0 0 0\n 1 7 1 0 0 0 0\n 5 8 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SMT 1 m-xylene\nM END\n> <name>\nm-xylene\n\n> <abbreviation>\nm-xylene\n\n> <group>\nSalts and Solvents\n\n$$$$\np-xylene\n -INDIGO-11302219142D\n\n 8 8 0 0 0 0 0 0 0 0999 V2000\n -2.1500 4.4750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.4490 3.7250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.4490 2.2250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.1500 1.4750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8510 2.2250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8510 3.7250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.1500 5.9750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.1500 -0.0250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 2 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 2 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 2 0 0 0 0\n 6 1 1 0 0 0 0\n 1 7 1 0 0 0 0\n 4 8 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SMT 1 p-xylene\nM END\n> <name>\np-xylene\n\n> <abbreviation>\np-xylene\n\n> <group>\nSalts and Solvents\n\n$$$$\nDIPEA\n -INDIGO-11302219142D\n\n 9 8 0 0 0 0 0 0 0 0999 V2000\n -1.5490 7.3145 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n -1.5490 8.8145 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.8481 6.5645 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.2500 6.5645 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -4.1471 7.3145 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.8481 5.0645 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0490 7.3145 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.2500 5.0645 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.8481 9.5645 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 3 5 1 0 0 0 0\n 3 6 1 0 0 0 0\n 4 7 1 0 0 0 0\n 4 8 1 0 0 0 0\n 2 9 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 1 9\nM SMT 1 DIPEA\nM END\n> <name>\nn,n-diisopropylethylamine\n\n> <abbreviation>\nDIPEA\n\n> <group>\nSalts and Solvents\n\n$$$$\n1,5-diazabicyclo[5.4.0]undec-7-ene\n -INDIGO-11302219142D\n\n 11 12 0 0 0 0 0 0 0 0999 V2000\n 1.6852 -0.3846 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.3514 1.0778 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 1.7286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.3515 1.0777 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n -1.6852 -0.3847 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n -3.1695 -0.6090 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.7175 -2.0053 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.7822 -3.1781 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.2990 -2.9545 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.7500 -1.5574 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.7500 -1.5574 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 6 7 1 0 0 0 0\n 7 8 1 0 0 0 0\n 8 9 1 0 0 0 0\n 9 10 2 0 0 0 0\n 10 5 1 0 0 0 0\n 10 11 1 0 0 0 0\n 11 1 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 3 9 10 11\nM SMT 1 DBU\nM END\n> <name>\n1,5-diazabicyclo[5.4.0]undec-7-ene\n\n> <abbreviation>\nDBU\n\n> <group>\nSalts and Solvents\n\n$$$$\nhexamethylphosphoramide\n -INDIGO-11302219142D\n\n 11 10 0 0 0 0 0 0 0 0999 V2000\n 2.3174 -0.9012 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.6235 -1.9903 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8900 -0.9145 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5935 -3.2519 0.0000 P 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5935 -4.7619 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 5.0831 -3.2205 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 6.0654 -4.1562 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1687 -1.9999 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.1521 -3.2278 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 1.3934 -4.5570 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0626 -2.3997 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 2 4 1 0 0 0 0\n 4 5 2 0 0 0 0\n 4 6 1 0 0 0 0\n 6 7 1 0 0 0 0\n 6 8 1 0 0 0 0\n 4 9 1 0 0 0 0\n 9 10 1 0 0 0 0\n 9 11 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 3 9 10 11\nM SMT 1 HMPA\nM END\n> <name>\nhexamethylphosphoramide\n\n> <abbreviation>\nHMPA\n\n> <group>\nSalts and Solvents\n\n$$$$\nhexamethylphosphorous triamide\n -INDIGO-11302219142D\n\n 10 9 0 0 0 0 0 0 0 0999 V2000\n 0.0007 0.0004 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.3000 0.7500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 1.3000 2.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.6000 0.0000 0.0000 P 0 0 0 0 0 0 0 0 0 0 0 0\n 3.9000 0.7500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 5.1992 0.0004 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.9000 2.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.6031 -1.5008 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 3.9032 -2.2490 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.3053 -2.2531 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 2 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 5 7 1 0 0 0 0\n 4 8 1 0 0 0 0\n 8 9 1 0 0 0 0\n 8 10 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 2 9 10\nM SMT 1 HMPT\nM END\n> <name>\nhexamethylphosphorous triamide\n\n> <abbreviation>\nHMPT\n\n> <group>\nSalts and Solvents\n\n$$$$\nheavy water\n -INDIGO-11302219142D\n\n 3 2 0 0 0 0 0 0 0 0999 V2000\n 0.0007 0.0004 0.0000 D 0 0 0 0 0 0 0 0 0 0 0 0\n 1.3000 0.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5993 0.0004 0.0000 D 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 3 1 2 3\nM SMT 1 D2O\nM END\n> <name>\nheavy water\n\n> <abbreviation>\nD2O\n\n> <group>\nSalts and Solvents\n\n$$$$\nTRIS\n -INDIGO-03312512502D\n\n 8 7 0 0 0 0 0 0 0 0999 V2000\n 16.0940 -10.7437 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 16.9600 -10.2437 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 17.8260 -10.7437 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 16.9600 -9.2437 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 16.9600 -11.2437 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 15.2280 -10.2437 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 18.6921 -10.2437 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 17.8260 -8.7437 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 2 4 1 0 0 0 0\n 2 5 1 0 0 0 0\n 1 6 1 0 0 0 0\n 3 7 1 0 0 0 0\n 4 8 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SMT 1 TRIS\nM SDI 1 4 0.0000 0.0000 0.0000 0.0000\nM SDI 1 4 0.0000 0.0000 0.0000 0.0000\nM END\n> <name>\nTRIS\n\n> <abbreviation>\nTRIS\n\n> <group>\nSalts and Solvents\n\n$$$$\nTRIS HCl\n Ketcher 3312513372D 1 1.00000 0.00000 0\n\n 9 7 0 0 0 0 0 0 0 0999 V2000\n 15.7719 -6.6396 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 16.6379 -6.1396 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 17.5040 -6.6396 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 16.6379 -5.1396 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 16.6379 -7.1396 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 14.9059 -6.1396 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 18.3700 -6.1396 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 17.5040 -4.6396 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 16.6716 -7.9479 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 2 3 1 0 0 0\n 2 4 1 0 0 0\n 2 5 1 0 0 0\n 1 6 1 0 0 0\n 3 7 1 0 0 0\n 4 8 1 0 0 0\nM CHG 2 5 1 9 -1\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 9 1 2 3 4 5 6 7 8 9\nM SMT 1 TRIS HCl\nM END\n\n> <name>\nTRIS HCl\n\n> <abbreviation>\nTRIS HCl\n\n> <group>\nSalts and Solvents\n\n$$$$\nSodium-chloride\n Ketcher 3312513392D 1 1.00000 0.00000 0\n\n 2 0 0 0 0 0 0 0 0 0999 V2000\n 16.4963 -6.3500 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 15.6713 -6.3500 0.0000 Na 0 0 0 0 0 0 0 0 0 0 0 0\nM CHG 2 1 -1 2 1\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 2 1 2\nM SMT 1 NaCl\nM END\n\n> <name>\nSodium-chloride\n\n> <abbreviation>\nNaCl\n\n> <group>\nSalts and Solvents\n\n$$$$\nSodium-acetate\n Ketcher 3312513462D 1 1.00000 0.00000 0\n\n 5 3 0 0 0 0 0 0 0 0999 V2000\n 15.0102 -10.7437 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 15.8763 -10.2437 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 16.7423 -10.7437 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 15.8763 -9.2437 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 17.5182 -10.7687 0.0000 Na 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 2 3 1 0 0 0\n 2 4 2 0 0 0\nM CHG 2 3 -1 5 1\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 CH3COONa\nM END\n\n> <name>\nSodium-acetate\n\n> <abbreviation>\nCH3COONa\n\n> <group>\nSalts and Solvents\n\n$$$$\nPotassium-chloride\n Ketcher 3312513542D 1 1.00000 0.00000 0\n\n 2 0 0 0 0 0 0 0 0 0999 V2000\n 16.2390 -13.2275 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 15.4140 -13.2275 0.0000 K 0 0 0 0 0 0 0 0 0 0 0 0\nM CHG 2 1 -1 2 1\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 2 1 2\nM SMT 1 KCl\nM END\n\n> <name>\nPotassium-chloride\n\n> <abbreviation>\nKCl\n\n> <group>\nSalts and Solvents\n\n$$$$\nMonopotassium phosphate\n Ketcher 3312513582D 1 1.00000 0.00000 0\n\n 6 4 0 0 0 0 0 0 0 0999 V2000\n 15.0432 -14.6312 0.0000 P 0 0 0 0 0 0 0 0 0 0 0 0\n 15.9093 -15.1312 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 15.0432 -13.6312 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 14.1772 -15.1312 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 15.0432 -15.6312 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 16.6098 -15.1562 0.0000 K 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 1 3 2 0 0 0\n 1 4 1 0 0 0\n 1 5 1 0 0 0\nM CHG 2 2 -1 6 1\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 KH2PO4\nM END\n\n> <name>\nMonopotassium phosphate\n\n> <abbreviation>\nKH2PO4\n\n> <group>\nSalts and Solvents\n\n$$$$\nLithium-chloride\n Ketcher 3312514 52D 1 1.00000 0.00000 0\n\n 2 0 0 0 0 0 0 0 0 0999 V2000\n 16.4828 -15.7375 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 15.6578 -15.7375 0.0000 Li 0 0 0 0 0 0 0 0 0 0 0 0\nM CHG 2 1 -1 2 1\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 2 1 2\nM SMT 1 LiCl\nM END\n\n> <name>\nLithium-chloride\n\n> <abbreviation>\nLiCl\n\n> <group>\nSalts and Solvents\n\n$$$$\nGuanidine HCl\n Ketcher 3312514 62D 1 1.00000 0.00000 0\n\n 5 3 0 0 0 0 0 0 0 0999 V2000\n 14.8573 -16.3937 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 15.7233 -15.8937 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 16.5893 -16.3937 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 15.7233 -14.8937 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 17.8653 -16.3937 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 2 3 1 0 0 0\n 2 4 2 0 0 0\nM CHG 2 3 1 5 -1\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 GuHCl\nM END\n\n> <name>\nGuanidine HCl\n\n> <abbreviation>\nGuHCl\n\n> <group>\nSalts and Solvents\n\n$$$$\nDisodium phosphate\n Ketcher 3312514 72D 1 1.00000 0.00000 0\n\n 7 4 0 0 0 0 0 0 0 0999 V2000\n 15.7195 -15.6812 0.0000 P 0 0 0 0 0 0 0 0 0 0 0 0\n 16.5856 -16.1812 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 15.7195 -14.6812 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 14.8535 -16.1812 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 15.7195 -16.6812 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 17.2860 -16.2062 0.0000 Na 0 0 0 0 0 0 0 0 0 0 0 0\n 14.1860 -16.1812 0.0000 Na 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 1 3 2 0 0 0\n 1 4 1 0 0 0\n 1 5 1 0 0 0\nM CHG 4 2 -1 4 -1 6 1 7 1\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 Na2HPO4\nM END\n\n> <name>\nDisodium phosphate\n\n> <abbreviation>\nNa2HPO4\n\n> <group>\nSalts and Solvents\n\n$$$$\nDisodium EDTA\n Ketcher 3312514 92D 1 1.00000 0.00000 0\n\n 22 19 0 0 0 0 0 0 0 0999 V2000\n 11.8472 -15.9313 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 12.7132 -15.4313 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 13.5792 -15.9313 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 12.7132 -14.4313 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 14.4453 -15.4313 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 15.3113 -15.9313 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 14.4453 -14.4313 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 15.3113 -13.9313 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 15.3113 -12.9313 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 16.1773 -14.4313 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 16.1773 -15.4313 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 17.0433 -15.9313 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 17.9094 -15.4313 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 17.0433 -16.9313 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 16.1773 -17.4313 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 16.1773 -18.4313 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 15.3113 -16.9313 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 18.7754 -15.9313 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 19.6414 -15.4313 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 18.7754 -16.9313 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 14.5052 -16.9313 0.0000 Na 0 0 0 0 0 0 0 0 0 0 0 0\n 20.4552 -15.4313 0.0000 Na 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 2 3 1 0 0 0\n 2 4 2 0 0 0\n 3 5 1 0 0 0\n 5 6 1 0 0 0\n 5 7 1 0 0 0\n 7 8 1 0 0 0\n 8 9 2 0 0 0\n 8 10 1 0 0 0\n 6 11 1 0 0 0\n 11 12 1 0 0 0\n 12 13 1 0 0 0\n 12 14 1 0 0 0\n 14 15 1 0 0 0\n 15 16 2 0 0 0\n 15 17 1 0 0 0\n 13 18 1 0 0 0\n 18 19 1 0 0 0\n 18 20 2 0 0 0\nM CHG 4 17 -1 19 -1 21 1 22 1\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15\nM SAL 1 7 16 17 18 19 20 21 22\nM SMT 1 Disodium EDTA\nM END\n\n> <name>\nDisodium EDTA\n\n> <abbreviation>\nDisodium EDTA\n\n> <group>\nSalts and Solvents\n\n$$$$\nAmmonium-sulfate\n Ketcher 3312514102D 1 1.00000 0.00000 0\n\n 7 4 0 0 0 0 0 0 0 0999 V2000\n 15.8979 -15.6813 0.0000 S 0 0 0 0 0 0 0 0 0 0 0 0\n 16.7639 -16.1813 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 15.8979 -14.6813 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 15.0319 -16.1813 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 15.8979 -16.6813 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 13.7644 -16.2063 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 17.4894 -16.2063 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 1 3 2 0 0 0\n 1 4 1 0 0 0\n 1 5 2 0 0 0\nM CHG 4 2 -1 4 -1 6 1 7 1\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 (NH4)2SO4\nM END\n\n> <name>\nAmmonium-sulfate\n\n> <abbreviation>\n(NH4)2SO4\n\n> <group>\nSalts and Solvents\n\n$$$$";
15123
15123
 
15124
- function ownKeys$1i(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
15125
- function _objectSpread$1i(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1i(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1i(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15124
+ function ownKeys$1j(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
15125
+ function _objectSpread$1j(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1j(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1j(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15126
15126
  var initialState$1 = {
15127
15127
  lib: [],
15128
15128
  mode: MODES.FG
15129
15129
  };
15130
15130
  var saltsAndSolventsReducer = function saltsAndSolventsReducer() {
15131
15131
  var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState$1;
15132
- var _ref = arguments.length > 1 ? arguments[1] : undefined,
15133
- type = _ref.type,
15134
- payload = _ref.payload;
15132
+ var action = arguments.length > 1 ? arguments[1] : undefined;
15133
+ var type = action.type,
15134
+ payload = action.payload;
15135
15135
  if (type === 'SALTS_AND_SOLVENTS_INIT') {
15136
- return _objectSpread$1i(_objectSpread$1i({}, state), payload);
15136
+ return _objectSpread$1j(_objectSpread$1j({}, state), payload);
15137
15137
  }
15138
15138
  return state;
15139
15139
  };
@@ -15147,7 +15147,7 @@ var initSaltsAndSolvents = function initSaltsAndSolvents(lib) {
15147
15147
  };
15148
15148
  function initSaltsAndSolventsTemplates() {
15149
15149
  return function () {
15150
- var _ref2 = _asyncToGenerator__default["default"]( _regeneratorRuntime__default["default"].mark(function _callee(dispatch) {
15150
+ var _ref = _asyncToGenerator__default["default"]( _regeneratorRuntime__default["default"].mark(function _callee(dispatch) {
15151
15151
  var saltsAndSolventsProvider, functionalGroupsProvider, sdfSerializer, templates, saltsAndSolvents;
15152
15152
  return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
15153
15153
  while (1) switch (_context.prev = _context.next) {
@@ -15156,9 +15156,9 @@ function initSaltsAndSolventsTemplates() {
15156
15156
  functionalGroupsProvider = ketcherCore.FunctionalGroupsProvider.getInstance();
15157
15157
  sdfSerializer = new ketcherCore.SdfSerializer();
15158
15158
  templates = sdfSerializer.deserialize(templatesRawData);
15159
- saltsAndSolvents = templates.reduce(function (acc, _ref3) {
15160
- var struct = _ref3.struct,
15161
- props = _ref3.props;
15159
+ saltsAndSolvents = templates.reduce(function (acc, _ref2) {
15160
+ var struct = _ref2.struct,
15161
+ props = _ref2.props;
15162
15162
  struct.abbreviation = String(props.abbreviation);
15163
15163
  acc.push(struct);
15164
15164
  return acc;
@@ -15176,13 +15176,13 @@ function initSaltsAndSolventsTemplates() {
15176
15176
  }, _callee);
15177
15177
  }));
15178
15178
  return function (_x) {
15179
- return _ref2.apply(this, arguments);
15179
+ return _ref.apply(this, arguments);
15180
15180
  };
15181
15181
  }();
15182
15182
  }
15183
15183
 
15184
- function ownKeys$1h(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
15185
- function _objectSpread$1h(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1h(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1h(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15184
+ function ownKeys$1i(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
15185
+ function _objectSpread$1i(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1i(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1i(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15186
15186
  var initial = {
15187
15187
  freqAtoms: [],
15188
15188
  currentAtom: 0,
@@ -15203,7 +15203,7 @@ function updateVisibleTools(visibleTool, activeTool) {
15203
15203
  var matchesBondGroup = regExp.exec(key);
15204
15204
  if (!matchesBondGroup || menuHeight > 700) res[key] = visibleTool[key];
15205
15205
  return res;
15206
- }, _objectSpread$1h({}, activeTool));
15206
+ }, _objectSpread$1i({}, activeTool));
15207
15207
  }
15208
15208
  function initResize() {
15209
15209
  return function (dispatch, getState) {
@@ -15227,41 +15227,41 @@ function toolbarReducer () {
15227
15227
  case 'ACTION':
15228
15228
  {
15229
15229
  var visibleTool = toolInMenu(action.action);
15230
- return visibleTool ? _objectSpread$1h(_objectSpread$1h({}, state), {}, {
15230
+ return visibleTool ? _objectSpread$1i(_objectSpread$1i({}, state), {}, {
15231
15231
  opened: null,
15232
- visibleTools: _objectSpread$1h(_objectSpread$1h({}, state.visibleTools), visibleTool)
15233
- }) : _objectSpread$1h(_objectSpread$1h({}, state), {}, {
15232
+ visibleTools: _objectSpread$1i(_objectSpread$1i({}, state.visibleTools), visibleTool)
15233
+ }) : _objectSpread$1i(_objectSpread$1i({}, state), {}, {
15234
15234
  opened: null
15235
15235
  });
15236
15236
  }
15237
15237
  case 'ADD_ATOMS':
15238
15238
  {
15239
15239
  var newState = addFreqAtom(data, state.freqAtoms, state.currentAtom);
15240
- return _objectSpread$1h(_objectSpread$1h({}, state), newState);
15240
+ return _objectSpread$1i(_objectSpread$1i({}, state), newState);
15241
15241
  }
15242
15242
  case 'CLEAR_VISIBLE':
15243
15243
  {
15244
15244
  var activeTool = toolInMenu(action.data);
15245
15245
  var correctTools = updateVisibleTools(state.visibleTools, activeTool);
15246
- return _objectSpread$1h(_objectSpread$1h({}, state), {}, {
15246
+ return _objectSpread$1i(_objectSpread$1i({}, state), {}, {
15247
15247
  opened: null,
15248
- visibleTools: _objectSpread$1h({}, correctTools)
15248
+ visibleTools: _objectSpread$1i({}, correctTools)
15249
15249
  });
15250
15250
  }
15251
15251
  case 'OPENED':
15252
15252
  {
15253
- return data.isSelected && state.opened ? _objectSpread$1h(_objectSpread$1h({}, state), {}, {
15253
+ return data.isSelected && state.opened ? _objectSpread$1i(_objectSpread$1i({}, state), {}, {
15254
15254
  opened: null
15255
- }) : _objectSpread$1h(_objectSpread$1h({}, state), {}, {
15255
+ }) : _objectSpread$1i(_objectSpread$1i({}, state), {}, {
15256
15256
  opened: data.menuName
15257
15257
  });
15258
15258
  }
15259
15259
  case 'UPDATE':
15260
- return _objectSpread$1h(_objectSpread$1h({}, state), {}, {
15260
+ return _objectSpread$1i(_objectSpread$1i({}, state), {}, {
15261
15261
  opened: null
15262
15262
  });
15263
15263
  case 'MODAL_OPEN':
15264
- return _objectSpread$1h(_objectSpread$1h({}, state), {}, {
15264
+ return _objectSpread$1i(_objectSpread$1i({}, state), {}, {
15265
15265
  opened: null
15266
15266
  });
15267
15267
  default:
@@ -15304,8 +15304,8 @@ function hiddenAncestor(el, base) {
15304
15304
  return findEl;
15305
15305
  }
15306
15306
 
15307
- function ownKeys$1g(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
15308
- function _objectSpread$1g(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1g(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1g(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15307
+ function ownKeys$1h(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
15308
+ function _objectSpread$1h(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1h(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1h(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15309
15309
  var initialState = {
15310
15310
  visible: false,
15311
15311
  rotateHandlePosition: {
@@ -15322,15 +15322,45 @@ var updateFloatingTools = function updateFloatingTools(payload) {
15322
15322
  };
15323
15323
  var floatingToolsReducer = function floatingToolsReducer() {
15324
15324
  var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
15325
- var _ref = arguments.length > 1 ? arguments[1] : undefined,
15326
- type = _ref.type,
15327
- payload = _ref.payload;
15325
+ var action = arguments.length > 1 ? arguments[1] : undefined;
15326
+ var type = action.type,
15327
+ payload = action.payload;
15328
15328
  if (type === 'UPDATE_FLOATING_TOOLS') {
15329
- return _objectSpread$1g(_objectSpread$1g({}, state), payload);
15329
+ return _objectSpread$1h(_objectSpread$1h({}, state), payload);
15330
15330
  }
15331
15331
  return state;
15332
15332
  };
15333
15333
 
15334
+ function ownKeys$1g(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
15335
+ function _objectSpread$1g(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1g(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1g(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15336
+ var initNotificationsState = {
15337
+ snackbarNotificationText: ''
15338
+ };
15339
+ function showSnackbarNotification(text) {
15340
+ return {
15341
+ type: 'SHOW_SNACKBAR_NOTIFICATION',
15342
+ data: text
15343
+ };
15344
+ }
15345
+ function selectSnackbarNotificationText(state) {
15346
+ return state.notifications.snackbarNotificationText;
15347
+ }
15348
+ function notificationsReducer() {
15349
+ var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initNotificationsState;
15350
+ var action = arguments.length > 1 ? arguments[1] : undefined;
15351
+ if (action.type === 'SHOW_SNACKBAR_NOTIFICATION') {
15352
+ return _objectSpread$1g(_objectSpread$1g({}, state), {}, {
15353
+ snackbarNotificationText: action.data
15354
+ });
15355
+ }
15356
+ if (action.type === 'HIDE_SNACKBAR_NOTIFICATION') {
15357
+ return _objectSpread$1g(_objectSpread$1g({}, state), {}, {
15358
+ snackbarNotificationText: ''
15359
+ });
15360
+ }
15361
+ return state;
15362
+ }
15363
+
15334
15364
  var _excluded$v = ["type"],
15335
15365
  _excluded2$5 = ["buttons", "customButtons"];
15336
15366
  function ownKeys$1f(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
@@ -15355,7 +15385,8 @@ var shared = redux.combineReducers({
15355
15385
  functionalGroups: functionalGroupsReducer,
15356
15386
  saltsAndSolvents: saltsAndSolventsReducer,
15357
15387
  requestsStatuses: requestReducer,
15358
- floatingTools: floatingToolsReducer
15388
+ floatingTools: floatingToolsReducer,
15389
+ notifications: notificationsReducer
15359
15390
  });
15360
15391
  function getRootReducer(setEditor) {
15361
15392
  return function root(state, action) {
@@ -15398,7 +15429,8 @@ function createStore (options, server, setEditor) {
15398
15429
  customButtons: customButtons
15399
15430
  }),
15400
15431
  server: server || Promise.reject(new Error('Standalone mode!')),
15401
- templates: initTmplsState
15432
+ templates: initTmplsState,
15433
+ notifications: initNotificationsState
15402
15434
  };
15403
15435
  var middleware = [reduxThunk.thunk];
15404
15436
  var rootReducer = getRootReducer(setEditor);
@@ -18187,194 +18219,334 @@ var SGroupTool = function () {
18187
18219
  }
18188
18220
  }
18189
18221
  }, {
18190
- key: "mouseup",
18191
- value: function mouseup(event) {
18192
- var _selection, _selection2;
18193
- var struct = this.editor.render.ctab;
18222
+ key: "isContractedFunctionalGroupClicked",
18223
+ value: function isContractedFunctionalGroupClicked(ci, functionalGroups) {
18224
+ return (ci === null || ci === void 0 ? void 0 : ci.map) === 'functionalGroups' && functionalGroups.size && ketcherCore.FunctionalGroup.isContractedFunctionalGroup(ci.id, functionalGroups);
18225
+ }
18226
+ }, {
18227
+ key: "processSelectedAtoms",
18228
+ value: function processSelectedAtoms(selected, functionalGroups, struct, molecule, newSelected) {
18229
+ var atomsResult = [];
18230
+ var extraAtoms = false;
18231
+ if (!selected || !functionalGroups.size || !selected.atoms) {
18232
+ return {
18233
+ atomsResult: atomsResult,
18234
+ extraAtoms: extraAtoms
18235
+ };
18236
+ }
18194
18237
  var sgroups = struct.sgroups;
18195
- var molecule = struct.molecule;
18196
- var functionalGroups = molecule.functionalGroups;
18197
- var ci = this.editor.findItem(event, searchMaps);
18198
- var selected = this.editor.selection();
18199
- var newSelected = {
18200
- atoms: [],
18201
- bonds: []
18238
+ var _iterator6 = _createForOfIteratorHelper$f(selected.atoms),
18239
+ _step6;
18240
+ try {
18241
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
18242
+ var _struct$atoms$get3;
18243
+ var atom = _step6.value;
18244
+ var atomId = ketcherCore.FunctionalGroup.atomsInFunctionalGroup(functionalGroups, atom);
18245
+ if (atomId == null) {
18246
+ extraAtoms = true;
18247
+ continue;
18248
+ }
18249
+ var atomFromStruct = (_struct$atoms$get3 = struct.atoms.get(atomId)) === null || _struct$atoms$get3 === void 0 ? void 0 : _struct$atoms$get3.a;
18250
+ if (!atomFromStruct) {
18251
+ continue;
18252
+ }
18253
+ var actualSgroupId = this.getActualSgroupId(atomFromStruct);
18254
+ if (this.isAtomInContractedGroup(atomFromStruct, sgroups, functionalGroups)) {
18255
+ this.addContractedGroupToSelection(atom, actualSgroupId, molecule, struct, newSelected);
18256
+ }
18257
+ atomsResult.push(atomId);
18258
+ }
18259
+ } catch (err) {
18260
+ _iterator6.e(err);
18261
+ } finally {
18262
+ _iterator6.f();
18263
+ }
18264
+ return {
18265
+ atomsResult: atomsResult,
18266
+ extraAtoms: extraAtoms
18202
18267
  };
18268
+ }
18269
+ }, {
18270
+ key: "getActualSgroupId",
18271
+ value: function getActualSgroupId(atomFromStruct) {
18203
18272
  var actualSgroupId;
18204
- var atomsResult = [];
18205
- var extraAtoms;
18273
+ var _iterator7 = _createForOfIteratorHelper$f(atomFromStruct.sgs.values()),
18274
+ _step7;
18275
+ try {
18276
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
18277
+ var sgId = _step7.value;
18278
+ actualSgroupId = sgId;
18279
+ }
18280
+ } catch (err) {
18281
+ _iterator7.e(err);
18282
+ } finally {
18283
+ _iterator7.f();
18284
+ }
18285
+ return actualSgroupId;
18286
+ }
18287
+ }, {
18288
+ key: "isAtomInContractedGroup",
18289
+ value: function isAtomInContractedGroup(atomFromStruct, sgroups, functionalGroups) {
18290
+ return ketcherCore.FunctionalGroup.isAtomInContractedFunctionalGroup(atomFromStruct, sgroups, functionalGroups) || ketcherCore.SGroup.isAtomInContractedSGroup(atomFromStruct, sgroups);
18291
+ }
18292
+ }, {
18293
+ key: "addContractedGroupToSelection",
18294
+ value: function addContractedGroupToSelection(atom, actualSgroupId, molecule, struct, newSelected) {
18295
+ var _struct$sgroups$get, _struct$sgroups$get2;
18296
+ if (actualSgroupId === undefined) {
18297
+ return;
18298
+ }
18299
+ var sgroupAtoms = ketcherCore.SGroup.getAtoms(molecule, (_struct$sgroups$get = struct.sgroups.get(actualSgroupId)) === null || _struct$sgroups$get === void 0 ? void 0 : _struct$sgroups$get.item);
18300
+ var sgroupBonds = ketcherCore.SGroup.getBonds(molecule, (_struct$sgroups$get2 = struct.sgroups.get(actualSgroupId)) === null || _struct$sgroups$get2 === void 0 ? void 0 : _struct$sgroups$get2.item);
18301
+ if (atom === sgroupAtoms[0]) {
18302
+ var _newSelected$atoms2, _newSelected$bonds2;
18303
+ (_newSelected$atoms2 = newSelected.atoms).push.apply(_newSelected$atoms2, _toConsumableArray__default["default"](sgroupAtoms));
18304
+ (_newSelected$bonds2 = newSelected.bonds).push.apply(_newSelected$bonds2, _toConsumableArray__default["default"](sgroupBonds));
18305
+ }
18306
+ }
18307
+ }, {
18308
+ key: "processSelectedBonds",
18309
+ value: function processSelectedBonds(selected, functionalGroups, molecule, struct) {
18206
18310
  var bondsResult = [];
18207
- var extraBonds;
18208
- var result = [];
18209
- if ((ci === null || ci === void 0 ? void 0 : ci.map) === 'functionalGroups' && functionalGroups.size && ketcherCore.FunctionalGroup.isContractedFunctionalGroup(ci.id, functionalGroups)) return;
18210
- if (selected && functionalGroups.size && selected.atoms) {
18211
- var _iterator6 = _createForOfIteratorHelper$f(selected.atoms),
18212
- _step6;
18213
- try {
18214
- for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
18215
- var _struct$atoms$get3;
18216
- var atom = _step6.value;
18217
- var atomId = ketcherCore.FunctionalGroup.atomsInFunctionalGroup(functionalGroups, atom);
18218
- if (atomId == null) {
18219
- extraAtoms = true;
18220
- }
18221
- var atomFromStruct = atomId !== null && ((_struct$atoms$get3 = struct.atoms.get(atomId)) === null || _struct$atoms$get3 === void 0 ? void 0 : _struct$atoms$get3.a);
18222
- if (atomFromStruct) {
18223
- var _iterator7 = _createForOfIteratorHelper$f(atomFromStruct.sgs.values()),
18224
- _step7;
18225
- try {
18226
- for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
18227
- var sgId = _step7.value;
18228
- actualSgroupId = sgId;
18229
- }
18230
- } catch (err) {
18231
- _iterator7.e(err);
18232
- } finally {
18233
- _iterator7.f();
18234
- }
18235
- }
18236
- if (atomFromStruct && (ketcherCore.FunctionalGroup.isAtomInContractedFunctionalGroup(atomFromStruct, sgroups, functionalGroups) || ketcherCore.SGroup.isAtomInContractedSGroup(atomFromStruct, sgroups))) {
18237
- var _struct$sgroups$get, _struct$sgroups$get2, _newSelected$atoms2, _newSelected$bonds2;
18238
- var sgroupAtoms = actualSgroupId !== undefined && ketcherCore.SGroup.getAtoms(molecule, (_struct$sgroups$get = struct.sgroups.get(actualSgroupId)) === null || _struct$sgroups$get === void 0 ? void 0 : _struct$sgroups$get.item);
18239
- var sgroupBonds = actualSgroupId !== undefined && ketcherCore.SGroup.getBonds(molecule, (_struct$sgroups$get2 = struct.sgroups.get(actualSgroupId)) === null || _struct$sgroups$get2 === void 0 ? void 0 : _struct$sgroups$get2.item);
18240
- atom === sgroupAtoms[0] && (_newSelected$atoms2 = newSelected.atoms).push.apply(_newSelected$atoms2, _toConsumableArray__default["default"](sgroupAtoms)) && (_newSelected$bonds2 = newSelected.bonds).push.apply(_newSelected$bonds2, _toConsumableArray__default["default"](sgroupBonds));
18241
- }
18242
- if (atomFromStruct) {
18243
- atomsResult.push(atomId);
18244
- }
18311
+ var extraBonds = false;
18312
+ if (!selected || !functionalGroups.size || !selected.bonds) {
18313
+ return {
18314
+ bondsResult: bondsResult,
18315
+ extraBonds: extraBonds
18316
+ };
18317
+ }
18318
+ var _iterator8 = _createForOfIteratorHelper$f(selected.bonds),
18319
+ _step8;
18320
+ try {
18321
+ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
18322
+ var _struct$bonds$get2;
18323
+ var bond = _step8.value;
18324
+ var bondId = ketcherCore.FunctionalGroup.bondsInFunctionalGroup(molecule, functionalGroups, bond);
18325
+ if (bondId === null) {
18326
+ extraBonds = true;
18327
+ continue;
18328
+ }
18329
+ var bondFromStruct = (_struct$bonds$get2 = struct.bonds.get(bondId)) === null || _struct$bonds$get2 === void 0 ? void 0 : _struct$bonds$get2.b;
18330
+ if (bondFromStruct) {
18331
+ bondsResult.push(bondId);
18245
18332
  }
18246
- } catch (err) {
18247
- _iterator6.e(err);
18248
- } finally {
18249
- _iterator6.f();
18250
18333
  }
18334
+ } catch (err) {
18335
+ _iterator8.e(err);
18336
+ } finally {
18337
+ _iterator8.f();
18251
18338
  }
18252
- if (selected && functionalGroups.size && selected.bonds) {
18253
- var _iterator8 = _createForOfIteratorHelper$f(selected.bonds),
18254
- _step8;
18255
- try {
18256
- for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
18257
- var _struct$bonds$get2;
18258
- var bond = _step8.value;
18259
- var bondId = ketcherCore.FunctionalGroup.bondsInFunctionalGroup(molecule, functionalGroups, bond);
18260
- if (bondId === null) {
18261
- extraBonds = true;
18262
- }
18263
- var bondFromStruct = bondId !== null && ((_struct$bonds$get2 = struct.bonds.get(bondId)) === null || _struct$bonds$get2 === void 0 ? void 0 : _struct$bonds$get2.b);
18264
- if (bondFromStruct) {
18265
- bondsResult.push(bondId);
18266
- }
18267
- }
18268
- } catch (err) {
18269
- _iterator8.e(err);
18270
- } finally {
18271
- _iterator8.f();
18339
+ return {
18340
+ bondsResult: bondsResult,
18341
+ extraBonds: extraBonds
18342
+ };
18343
+ }
18344
+ }, {
18345
+ key: "expandFunctionalGroupSelection",
18346
+ value: function expandFunctionalGroupSelection(atomsResult, bondsResult, functionalGroups, molecule, struct, newSelected) {
18347
+ this.expandAtomsToFunctionalGroups(atomsResult, functionalGroups, molecule, struct, newSelected);
18348
+ this.expandBondsToFunctionalGroups(bondsResult, functionalGroups, molecule, struct, newSelected);
18349
+ }
18350
+ }, {
18351
+ key: "expandAtomsToFunctionalGroups",
18352
+ value: function expandAtomsToFunctionalGroups(atomsResult, functionalGroups, molecule, struct, newSelected) {
18353
+ if (!atomsResult.length) {
18354
+ return;
18355
+ }
18356
+ atomsResult.forEach(function (id) {
18357
+ var _struct$sgroups$get3, _newSelected$atoms3;
18358
+ var fgId = ketcherCore.FunctionalGroup.findFunctionalGroupByAtom(functionalGroups, id);
18359
+ if (fgId === null) {
18360
+ return;
18361
+ }
18362
+ var sgroupAtoms = ketcherCore.SGroup.getAtoms(molecule, (_struct$sgroups$get3 = struct.sgroups.get(fgId)) === null || _struct$sgroups$get3 === void 0 ? void 0 : _struct$sgroups$get3.item);
18363
+ (_newSelected$atoms3 = newSelected.atoms).push.apply(_newSelected$atoms3, _toConsumableArray__default["default"](sgroupAtoms));
18364
+ });
18365
+ }
18366
+ }, {
18367
+ key: "expandBondsToFunctionalGroups",
18368
+ value: function expandBondsToFunctionalGroups(bondsResult, functionalGroups, molecule, struct, newSelected) {
18369
+ if (!bondsResult.length) {
18370
+ return;
18371
+ }
18372
+ bondsResult.forEach(function (id) {
18373
+ var _struct$sgroups$get4, _newSelected$bonds3;
18374
+ var fgId = ketcherCore.FunctionalGroup.findFunctionalGroupByBond(molecule, functionalGroups, id);
18375
+ if (fgId === null) {
18376
+ return;
18272
18377
  }
18378
+ var sgroupBonds = ketcherCore.SGroup.getBonds(molecule, (_struct$sgroups$get4 = struct.sgroups.get(fgId)) === null || _struct$sgroups$get4 === void 0 ? void 0 : _struct$sgroups$get4.item);
18379
+ (_newSelected$bonds3 = newSelected.bonds).push.apply(_newSelected$bonds3, _toConsumableArray__default["default"](sgroupBonds));
18380
+ });
18381
+ }
18382
+ }, {
18383
+ key: "collectFunctionalGroupIds",
18384
+ value: function collectFunctionalGroupIds(atomsResult, bondsResult, extraAtoms, extraBonds, functionalGroups, molecule) {
18385
+ if (extraAtoms || extraBonds) {
18386
+ return [];
18273
18387
  }
18274
- if (atomsResult.length) {
18275
- atomsResult.forEach(function (id) {
18276
- var _struct$sgroups$get3, _newSelected$atoms3;
18388
+ var result = [];
18389
+ this.collectFunctionalGroupIdsFromAtoms(atomsResult, functionalGroups, result);
18390
+ this.collectFunctionalGroupIdsFromBonds(bondsResult, functionalGroups, molecule, result);
18391
+ return result;
18392
+ }
18393
+ }, {
18394
+ key: "collectFunctionalGroupIdsFromAtoms",
18395
+ value: function collectFunctionalGroupIdsFromAtoms(atomsResult, functionalGroups, result) {
18396
+ if (!atomsResult || !atomsResult.length) {
18397
+ return;
18398
+ }
18399
+ var _iterator9 = _createForOfIteratorHelper$f(atomsResult),
18400
+ _step9;
18401
+ try {
18402
+ for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
18403
+ var id = _step9.value;
18277
18404
  var fgId = ketcherCore.FunctionalGroup.findFunctionalGroupByAtom(functionalGroups, id);
18278
- if (fgId === null) {
18279
- return;
18405
+ if (fgId !== null && !result.includes(fgId)) {
18406
+ result.push(fgId);
18280
18407
  }
18281
- var sgroupAtoms = ketcherCore.SGroup.getAtoms(molecule, (_struct$sgroups$get3 = struct.sgroups.get(fgId)) === null || _struct$sgroups$get3 === void 0 ? void 0 : _struct$sgroups$get3.item);
18282
- (_newSelected$atoms3 = newSelected.atoms).push.apply(_newSelected$atoms3, _toConsumableArray__default["default"](sgroupAtoms));
18283
- });
18408
+ }
18409
+ } catch (err) {
18410
+ _iterator9.e(err);
18411
+ } finally {
18412
+ _iterator9.f();
18413
+ }
18414
+ }
18415
+ }, {
18416
+ key: "collectFunctionalGroupIdsFromBonds",
18417
+ value: function collectFunctionalGroupIdsFromBonds(bondsResult, functionalGroups, molecule, result) {
18418
+ if (!bondsResult || !bondsResult.length) {
18419
+ return;
18284
18420
  }
18285
- if (bondsResult.length) {
18286
- bondsResult.forEach(function (id) {
18287
- var _struct$sgroups$get4, _newSelected$bonds3;
18421
+ var _iterator10 = _createForOfIteratorHelper$f(bondsResult),
18422
+ _step10;
18423
+ try {
18424
+ for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
18425
+ var id = _step10.value;
18288
18426
  var fgId = ketcherCore.FunctionalGroup.findFunctionalGroupByBond(molecule, functionalGroups, id);
18289
- if (fgId === null) {
18290
- return;
18427
+ if (fgId !== null && !result.includes(fgId)) {
18428
+ result.push(fgId);
18291
18429
  }
18292
- var sgroupBonds = ketcherCore.SGroup.getBonds(molecule, (_struct$sgroups$get4 = struct.sgroups.get(fgId)) === null || _struct$sgroups$get4 === void 0 ? void 0 : _struct$sgroups$get4.item);
18293
- (_newSelected$bonds3 = newSelected.bonds).push.apply(_newSelected$bonds3, _toConsumableArray__default["default"](sgroupBonds));
18294
- });
18430
+ }
18431
+ } catch (err) {
18432
+ _iterator10.e(err);
18433
+ } finally {
18434
+ _iterator10.f();
18295
18435
  }
18296
- if (extraAtoms || extraBonds) {
18297
- atomsResult = null;
18298
- bondsResult = null;
18436
+ }
18437
+ }, {
18438
+ key: "shouldRemoveSingleFunctionalGroup",
18439
+ value: function shouldRemoveSingleFunctionalGroup(functionalGroupIds) {
18440
+ return functionalGroupIds.length === 1;
18441
+ }
18442
+ }, {
18443
+ key: "determineSelection",
18444
+ value: function determineSelection(event, ci, newSelected, molecule) {
18445
+ if (this.lassoHelper.running(event)) {
18446
+ return this.handleLassoSelection(event, newSelected, molecule);
18299
18447
  }
18300
- if (atomsResult && atomsResult.length > 0) {
18301
- var _iterator9 = _createForOfIteratorHelper$f(atomsResult),
18302
- _step9;
18303
- try {
18304
- for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
18305
- var _id3 = _step9.value;
18306
- var fgId = ketcherCore.FunctionalGroup.findFunctionalGroupByAtom(functionalGroups, _id3);
18307
- if (fgId !== null && !result.includes(fgId)) {
18308
- result.push(fgId);
18309
- }
18448
+ return this.handleClickSelection(event, ci);
18449
+ }
18450
+ }, {
18451
+ key: "handleLassoSelection",
18452
+ value: function handleLassoSelection(event, newSelected, molecule) {
18453
+ var lassoSelection = this.lassoHelper.end(event);
18454
+ var selection = newSelected.atoms.length > 0 ? selMerge(lassoSelection, newSelected, false) : lassoSelection;
18455
+ var filteredAtomsAndBonds = filterNotPartOfSuperatomWithoutLabel({
18456
+ atoms: selection.atoms,
18457
+ bonds: selection.bonds
18458
+ }, molecule);
18459
+ selection = _objectSpread$15(_objectSpread$15({}, selection), {}, {
18460
+ atoms: filteredAtomsAndBonds.atoms,
18461
+ bonds: filteredAtomsAndBonds.bonds
18462
+ });
18463
+ this.editor.selection(selection);
18464
+ return {
18465
+ id: null,
18466
+ selection: selection
18467
+ };
18468
+ }
18469
+ }, {
18470
+ key: "handleClickSelection",
18471
+ value: function handleClickSelection(event, ci) {
18472
+ if (!ci) {
18473
+ return {
18474
+ id: null,
18475
+ selection: null
18476
+ };
18477
+ }
18478
+ this.editor.hover(this.editor.findItem(event, searchMaps), null, event);
18479
+ if (ci.map === 'atoms') {
18480
+ return {
18481
+ id: null,
18482
+ selection: {
18483
+ atoms: [ci.id]
18310
18484
  }
18311
- } catch (err) {
18312
- _iterator9.e(err);
18313
- } finally {
18314
- _iterator9.f();
18315
- }
18485
+ };
18316
18486
  }
18317
- if (bondsResult && bondsResult.length > 0) {
18318
- var _iterator10 = _createForOfIteratorHelper$f(bondsResult),
18319
- _step10;
18320
- try {
18321
- for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
18322
- var _id4 = _step10.value;
18323
- var _fgId2 = ketcherCore.FunctionalGroup.findFunctionalGroupByBond(molecule, functionalGroups, _id4);
18324
- if (_fgId2 !== null && !result.includes(_fgId2)) {
18325
- result.push(_fgId2);
18326
- }
18487
+ if (ci.map === 'bonds') {
18488
+ var bond = this.editor.render.ctab.bonds.get(ci.id);
18489
+ return {
18490
+ id: null,
18491
+ selection: {
18492
+ atoms: [bond === null || bond === void 0 ? void 0 : bond.b.begin, bond === null || bond === void 0 ? void 0 : bond.b.end],
18493
+ bonds: [ci.id]
18327
18494
  }
18328
- } catch (err) {
18329
- _iterator10.e(err);
18330
- } finally {
18331
- _iterator10.f();
18332
- }
18495
+ };
18496
+ }
18497
+ if (ci.map === 'sgroups' || ci.map === 'sgroupData') {
18498
+ return {
18499
+ id: ci.id,
18500
+ selection: null
18501
+ };
18502
+ }
18503
+ return {
18504
+ id: null,
18505
+ selection: null
18506
+ };
18507
+ }
18508
+ }, {
18509
+ key: "shouldOpenDialog",
18510
+ value: function shouldOpenDialog(id, selection) {
18511
+ var _selection$atoms, _selection$bonds;
18512
+ var isAtomsOrBondsSelected = (selection === null || selection === void 0 || (_selection$atoms = selection.atoms) === null || _selection$atoms === void 0 ? void 0 : _selection$atoms.length) || (selection === null || selection === void 0 || (_selection$bonds = selection.bonds) === null || _selection$bonds === void 0 ? void 0 : _selection$bonds.length);
18513
+ return id !== null || isAtomsOrBondsSelected;
18514
+ }
18515
+ }, {
18516
+ key: "mouseup",
18517
+ value: function mouseup(event) {
18518
+ var struct = this.editor.render.ctab;
18519
+ var molecule = struct.molecule;
18520
+ var functionalGroups = molecule.functionalGroups;
18521
+ var ci = this.editor.findItem(event, searchMaps);
18522
+ var selected = this.editor.selection();
18523
+ if (this.isContractedFunctionalGroupClicked(ci, functionalGroups)) {
18524
+ return;
18333
18525
  }
18334
- if (result.length === 1) {
18526
+ var newSelected = {
18527
+ atoms: [],
18528
+ bonds: []
18529
+ };
18530
+ var _this$processSelected = this.processSelectedAtoms(selected, functionalGroups, struct, molecule, newSelected),
18531
+ atomsResult = _this$processSelected.atomsResult,
18532
+ extraAtoms = _this$processSelected.extraAtoms;
18533
+ var _this$processSelected2 = this.processSelectedBonds(selected, functionalGroups, molecule, struct),
18534
+ bondsResult = _this$processSelected2.bondsResult,
18535
+ extraBonds = _this$processSelected2.extraBonds;
18536
+ this.expandFunctionalGroupSelection(atomsResult, bondsResult, functionalGroups, molecule, struct, newSelected);
18537
+ var functionalGroupIds = this.collectFunctionalGroupIds(atomsResult, bondsResult, extraAtoms, extraBonds, functionalGroups, molecule);
18538
+ if (this.shouldRemoveSingleFunctionalGroup(functionalGroupIds)) {
18335
18539
  this.editor.selection(null);
18336
18540
  this.lassoHelper.cancel();
18337
18541
  this.editor.event.removeFG.dispatch({
18338
- fgIds: result
18542
+ fgIds: functionalGroupIds
18339
18543
  });
18340
18544
  return;
18341
18545
  }
18342
- var id = null;
18343
- var selection = null;
18344
- if (this.lassoHelper.running(event)) {
18345
- selection = newSelected.atoms.length > 0 ? selMerge(this.lassoHelper.end(event), newSelected, false) : this.lassoHelper.end(event);
18346
- var filteredAtomsAndBonds = filterNotPartOfSuperatomWithoutLabel({
18347
- atoms: selection.atoms,
18348
- bonds: selection.bonds
18349
- }, molecule);
18350
- selection = _objectSpread$15(_objectSpread$15({}, selection), {}, {
18351
- atoms: filteredAtomsAndBonds.atoms,
18352
- bonds: filteredAtomsAndBonds.bonds
18353
- });
18354
- this.editor.selection(selection);
18355
- } else {
18356
- if (!ci) {
18357
- return;
18358
- }
18359
- this.editor.hover(this.editor.findItem(event, searchMaps), null, event);
18360
- if (ci.map === 'atoms') {
18361
- selection = {
18362
- atoms: [ci.id]
18363
- };
18364
- } else if (ci.map === 'bonds') {
18365
- var _bond = this.editor.render.ctab.bonds.get(ci.id);
18366
- selection = {
18367
- atoms: [_bond === null || _bond === void 0 ? void 0 : _bond.b.begin, _bond === null || _bond === void 0 ? void 0 : _bond.b.end],
18368
- bonds: [ci.id]
18369
- };
18370
- } else if (ci.map === 'sgroups' || ci.map === 'sgroupData') {
18371
- id = ci.id;
18372
- } else {
18373
- return;
18374
- }
18375
- }
18376
- var isAtomsOrBondsSelected = ((_selection = selection) === null || _selection === void 0 || (_selection = _selection.atoms) === null || _selection === void 0 ? void 0 : _selection.length) || ((_selection2 = selection) === null || _selection2 === void 0 || (_selection2 = _selection2.bonds) === null || _selection2 === void 0 ? void 0 : _selection2.length);
18377
- if (id !== null || isAtomsOrBondsSelected) {
18546
+ var _this$determineSelect = this.determineSelection(event, ci, newSelected, molecule),
18547
+ id = _this$determineSelect.id,
18548
+ selection = _this$determineSelect.selection;
18549
+ if (this.shouldOpenDialog(id, selection)) {
18378
18550
  this.editor.selection(selection);
18379
18551
  SGroupTool.sgroupDialog(this.editor, id);
18380
18552
  }
@@ -18711,7 +18883,10 @@ function customOnChangeHandler(action, handler) {
18711
18883
  return handler();
18712
18884
  }
18713
18885
  function handleMicroChanges(action, handler) {
18714
- action.operations.reverse().forEach(function (operation) {
18886
+ if (!(action !== null && action !== void 0 && action.operations) || !Array.isArray(action.operations)) {
18887
+ return handler(data);
18888
+ }
18889
+ _toConsumableArray__default["default"](action.operations).reverse().forEach(function (operation) {
18715
18890
  var op = operation._inverted;
18716
18891
  switch (op.type) {
18717
18892
  case ketcherCore.OperationType.ATOM_ADD:
@@ -21524,9 +21699,11 @@ function findCloseMerge(restruct, selected, options) {
21524
21699
  });
21525
21700
  selected.bonds.forEach(function (bid) {
21526
21701
  var bond = struct.bonds.get(bid);
21527
- pos.bonds.set(bid, ketcherCore.Vec2.lc2(
21528
- struct.atoms.get(bond.begin).pp, 0.5,
21529
- struct.atoms.get(bond.end).pp, 0.5));
21702
+ if (bond) {
21703
+ pos.bonds.set(bid, ketcherCore.Vec2.lc2(
21704
+ struct.atoms.get(bond.begin).pp, 0.5,
21705
+ struct.atoms.get(bond.end).pp, 0.5));
21706
+ }
21530
21707
  });
21531
21708
  var result = {
21532
21709
  atoms: new Map(),
@@ -25840,6 +26017,20 @@ var Editor$3 = function () {
25840
26017
  });
25841
26018
  this.render.update(true);
25842
26019
  }
26020
+ }, {
26021
+ key: "setRnaComponentAtoms",
26022
+ value: function setRnaComponentAtoms(componentKey, atomIds, bondIds) {
26023
+ var currentState = this.render.monomerCreationState;
26024
+ if (!currentState) return;
26025
+ var rnaComponentAtoms = currentState.rnaComponentAtoms || new Map();
26026
+ rnaComponentAtoms.set(componentKey, {
26027
+ atoms: atomIds,
26028
+ bonds: bondIds
26029
+ });
26030
+ this.render.monomerCreationState = _objectSpread$V(_objectSpread$V({}, currentState), {}, {
26031
+ rnaComponentAtoms: rnaComponentAtoms
26032
+ });
26033
+ }
25843
26034
  }, {
25844
26035
  key: "isMonomerCreationWizardActive",
25845
26036
  get: function get() {
@@ -26521,18 +26712,244 @@ var Editor$3 = function () {
26521
26712
  });
26522
26713
  return potentialLeavingAtoms;
26523
26714
  }
26715
+ }, {
26716
+ key: "getRnaComponentForAtom",
26717
+ value: function getRnaComponentForAtom(atomId) {
26718
+ var _this$monomerCreation;
26719
+ var rnaComponentAtoms = (_this$monomerCreation = this.monomerCreationState) === null || _this$monomerCreation === void 0 ? void 0 : _this$monomerCreation.rnaComponentAtoms;
26720
+ if (!rnaComponentAtoms) {
26721
+ return null;
26722
+ }
26723
+ var _iterator2 = _createForOfIteratorHelper$2(rnaComponentAtoms.entries()),
26724
+ _step2;
26725
+ try {
26726
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
26727
+ var _step2$value = _slicedToArray__default["default"](_step2.value, 2),
26728
+ componentKey = _step2$value[0],
26729
+ componentData = _step2$value[1];
26730
+ if (componentData.atoms.includes(atomId)) {
26731
+ return componentKey;
26732
+ }
26733
+ }
26734
+ } catch (err) {
26735
+ _iterator2.e(err);
26736
+ } finally {
26737
+ _iterator2.f();
26738
+ }
26739
+ return null;
26740
+ }
26741
+ }, {
26742
+ key: "canAssignRnaComponent",
26743
+ value: function canAssignRnaComponent(bond) {
26744
+ var _this$monomerCreation2,
26745
+ _this6 = this;
26746
+ if (!((_this$monomerCreation2 = this.monomerCreationState) !== null && _this$monomerCreation2 !== void 0 && _this$monomerCreation2.rnaComponentAtoms)) {
26747
+ return false;
26748
+ }
26749
+ var beginAtomRnaComponent = this.getRnaComponentForAtom(bond.begin);
26750
+ var endAtomRnaComponent = this.getRnaComponentForAtom(bond.end);
26751
+ if (!beginAtomRnaComponent && !endAtomRnaComponent || beginAtomRnaComponent && endAtomRnaComponent && beginAtomRnaComponent !== endAtomRnaComponent) {
26752
+ return false;
26753
+ }
26754
+ var rnaComponentToAssign = beginAtomRnaComponent || endAtomRnaComponent;
26755
+ var struct = this.struct();
26756
+ var atomIdToStartFrom = beginAtomRnaComponent ? bond.begin : bond.end;
26757
+ var visitedAtomIds = new Set();
26758
+ var atomsToCheck = [atomIdToStartFrom];
26759
+ var hasConnectionToAnotherComponent = false;
26760
+ var hasConnectionToOriginalStructure = false;
26761
+ visitedAtomIds.add(atomIdToStartFrom);
26762
+ var _loop = function _loop() {
26763
+ var currentAtomId = atomsToCheck.pop();
26764
+ var currentAtom = _.isNumber(currentAtomId) ? struct.atoms.get(currentAtomId) : undefined;
26765
+ if (!currentAtom) {
26766
+ return 1;
26767
+ }
26768
+ currentAtom === null || currentAtom === void 0 || currentAtom.neighbors.forEach(function (neighbor) {
26769
+ var halfBond = struct.halfBonds.get(neighbor);
26770
+ if (hasConnectionToAnotherComponent || hasConnectionToOriginalStructure) {
26771
+ return;
26772
+ }
26773
+ if (!halfBond) {
26774
+ ketcherCore.KetcherLogger.warn('Half-bond not found in structure');
26775
+ return;
26776
+ }
26777
+ var neighborAtomId = halfBond.begin === currentAtomId ? halfBond.end : halfBond.begin;
26778
+ if (visitedAtomIds.has(neighborAtomId)) {
26779
+ return;
26780
+ }
26781
+ visitedAtomIds.add(neighborAtomId);
26782
+ var neighborAtomRnaComponent = _this6.getRnaComponentForAtom(neighborAtomId);
26783
+ if (neighborAtomRnaComponent === rnaComponentToAssign) {
26784
+ return;
26785
+ }
26786
+ if (neighborAtomRnaComponent && neighborAtomRnaComponent !== rnaComponentToAssign) {
26787
+ hasConnectionToAnotherComponent = true;
26788
+ return;
26789
+ }
26790
+ var originalAtomId = _this6.selectedToOriginalAtomsIdMap.get(neighborAtomId);
26791
+ if (_.isNumber(originalAtomId) && _this6.originalStruct.atoms.has(originalAtomId)) {
26792
+ hasConnectionToOriginalStructure = true;
26793
+ return;
26794
+ }
26795
+ atomsToCheck.push(neighborAtomId);
26796
+ visitedAtomIds.add(neighborAtomId);
26797
+ });
26798
+ };
26799
+ while (atomsToCheck.length > 0) {
26800
+ if (_loop()) continue;
26801
+ }
26802
+ if (hasConnectionToAnotherComponent || hasConnectionToOriginalStructure) {
26803
+ return false;
26804
+ }
26805
+ return true;
26806
+ }
26807
+ }, {
26808
+ key: "autoAssignAtomToRnaComponent",
26809
+ value: function autoAssignAtomToRnaComponent(bondId) {
26810
+ var _this$monomerCreation3;
26811
+ var rnaComponentAtoms = (_this$monomerCreation3 = this.monomerCreationState) === null || _this$monomerCreation3 === void 0 ? void 0 : _this$monomerCreation3.rnaComponentAtoms;
26812
+ if (!rnaComponentAtoms) {
26813
+ return;
26814
+ }
26815
+ var struct = this.struct();
26816
+ var bond = struct.bonds.get(bondId);
26817
+ if (!bond) {
26818
+ ketcherCore.KetcherLogger.warn('Bond not found in structure');
26819
+ return;
26820
+ }
26821
+ var beginAtomComponent = this.getRnaComponentForAtom(bond.begin);
26822
+ var endAtomComponent = this.getRnaComponentForAtom(bond.end);
26823
+ var componentToMark = beginAtomComponent || endAtomComponent;
26824
+ if (!componentToMark) {
26825
+ return;
26826
+ }
26827
+ var atomsIdsToMark = [];
26828
+ var bondIdsToMark = [];
26829
+ var bondIdsToCheck = [bondId];
26830
+ var visitedBonds = new Set();
26831
+ while (bondIdsToCheck.length > 0) {
26832
+ var currentBondId = bondIdsToCheck.pop();
26833
+ var currentBond = _.isNumber(currentBondId) ? struct.bonds.get(currentBondId) : undefined;
26834
+ if (!_.isNumber(currentBondId) || !currentBond || visitedBonds.has(currentBondId)) {
26835
+ continue;
26836
+ }
26837
+ bondIdsToMark.push(currentBondId);
26838
+ visitedBonds.add(currentBondId);
26839
+ var beginAtom = struct.atoms.get(currentBond.begin);
26840
+ var endAtom = struct.atoms.get(currentBond.end);
26841
+ var beginAtomRnaComponent = this.getRnaComponentForAtom(currentBond.begin);
26842
+ var endAtomRnaComponent = this.getRnaComponentForAtom(currentBond.end);
26843
+ var atomsToContinue = [];
26844
+ if (beginAtom && beginAtomRnaComponent !== componentToMark) {
26845
+ atomsIdsToMark.push(currentBond.begin);
26846
+ atomsToContinue.push(beginAtom);
26847
+ }
26848
+ if (endAtom && endAtomRnaComponent !== componentToMark) {
26849
+ atomsIdsToMark.push(currentBond.end);
26850
+ atomsToContinue.push(endAtom);
26851
+ }
26852
+ atomsToContinue.forEach(function (atom) {
26853
+ atom.neighbors.forEach(function (halfBondId) {
26854
+ var halfBond = struct.halfBonds.get(halfBondId);
26855
+ if (!halfBond) {
26856
+ ketcherCore.KetcherLogger.warn('Half-bond not found in structure');
26857
+ return;
26858
+ }
26859
+ var nextBondId = halfBond.bid;
26860
+ var nextBond = struct.bonds.get(nextBondId);
26861
+ if (!nextBond || bondIdsToCheck.includes(nextBondId)) {
26862
+ ketcherCore.KetcherLogger.warn('Bond not found in structure');
26863
+ return;
26864
+ }
26865
+ bondIdsToCheck.push(nextBondId);
26866
+ });
26867
+ });
26868
+ }
26869
+ this.addAtomsAndBondsToRnaComponent(componentToMark, atomsIdsToMark, bondIdsToMark);
26870
+ }
26871
+ }, {
26872
+ key: "updateRnaComponentStructureState",
26873
+ value: function updateRnaComponentStructureState(componentKey, updatedAtoms, updatedBonds) {
26874
+ var _this$monomerCreation4;
26875
+ (_this$monomerCreation4 = this.monomerCreationState) === null || _this$monomerCreation4 === void 0 || (_this$monomerCreation4 = _this$monomerCreation4.rnaComponentAtoms) === null || _this$monomerCreation4 === void 0 || _this$monomerCreation4.set(componentKey, {
26876
+ atoms: updatedAtoms,
26877
+ bonds: updatedBonds
26878
+ });
26879
+ var eventData = {
26880
+ componentKey: componentKey,
26881
+ atomIds: updatedAtoms,
26882
+ bondIds: updatedBonds
26883
+ };
26884
+ window.dispatchEvent(new CustomEvent(ketcherCore.MonomerCreationComponentStructureUpdateEvent, {
26885
+ detail: eventData
26886
+ }));
26887
+ }
26888
+ }, {
26889
+ key: "addAtomsAndBondsToRnaComponent",
26890
+ value: function addAtomsAndBondsToRnaComponent(componentKey, atomIds, bondIds) {
26891
+ var _this$monomerCreation5;
26892
+ if (!((_this$monomerCreation5 = this.monomerCreationState) !== null && _this$monomerCreation5 !== void 0 && _this$monomerCreation5.rnaComponentAtoms)) {
26893
+ return;
26894
+ }
26895
+ var componentData = this.monomerCreationState.rnaComponentAtoms.get(componentKey);
26896
+ if (!componentData) {
26897
+ return;
26898
+ }
26899
+ var updatedAtoms = _toConsumableArray__default["default"](componentData.atoms);
26900
+ var updatedBonds = _toConsumableArray__default["default"](componentData.bonds);
26901
+ atomIds.forEach(function (atomId) {
26902
+ if (!updatedAtoms.includes(atomId)) {
26903
+ updatedAtoms.push(atomId);
26904
+ }
26905
+ });
26906
+ bondIds.forEach(function (bondId) {
26907
+ if (!updatedBonds.includes(bondId)) {
26908
+ updatedBonds.push(bondId);
26909
+ }
26910
+ });
26911
+ this.updateRnaComponentStructureState(componentKey, updatedAtoms, updatedBonds);
26912
+ }
26913
+ }, {
26914
+ key: "removeAtomsAndBondsFromRnaComponents",
26915
+ value: function removeAtomsAndBondsFromRnaComponents(atomIds, bondIds) {
26916
+ var _this$monomerCreation6;
26917
+ if (!((_this$monomerCreation6 = this.monomerCreationState) !== null && _this$monomerCreation6 !== void 0 && _this$monomerCreation6.rnaComponentAtoms)) {
26918
+ return;
26919
+ }
26920
+ var _iterator3 = _createForOfIteratorHelper$2(this.monomerCreationState.rnaComponentAtoms.entries()),
26921
+ _step3;
26922
+ try {
26923
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
26924
+ var _step3$value = _slicedToArray__default["default"](_step3.value, 2),
26925
+ componentKey = _step3$value[0],
26926
+ componentData = _step3$value[1];
26927
+ var updatedAtoms = componentData.atoms.filter(function (atomId) {
26928
+ return !atomIds.includes(atomId);
26929
+ });
26930
+ var updatedBonds = componentData.bonds.filter(function (bondId) {
26931
+ return !bondIds.includes(bondId);
26932
+ });
26933
+ this.updateRnaComponentStructureState(componentKey, updatedAtoms, updatedBonds);
26934
+ }
26935
+ } catch (err) {
26936
+ _iterator3.e(err);
26937
+ } finally {
26938
+ _iterator3.f();
26939
+ }
26940
+ }
26524
26941
  }, {
26525
26942
  key: "subscribeToChangeEventInMonomerCreationWizard",
26526
26943
  value: function subscribeToChangeEventInMonomerCreationWizard() {
26527
- var _this6 = this;
26944
+ var _this7 = this;
26528
26945
  if (this.changeEventSubscriber) {
26529
26946
  return;
26530
26947
  }
26531
26948
  var handleChangeEvent = function handleChangeEvent(data) {
26532
- if (!_this6.isMonomerCreationWizardActive || data.length === 0) {
26949
+ if (!_this7.isMonomerCreationWizardActive || data.length === 0) {
26533
26950
  return;
26534
26951
  }
26535
- _this6.collectChangesForMonomerCreationStateInvalidation(data);
26952
+ _this7.collectChangesForMonomerCreationStateInvalidation(data);
26536
26953
  };
26537
26954
  this.changeEventSubscriber = this.subscribe('change', handleChangeEvent);
26538
26955
  }
@@ -26553,9 +26970,11 @@ var Editor$3 = function () {
26553
26970
  var changesMap = new Map();
26554
26971
  data.forEach(function (entry) {
26555
26972
  switch (entry.operation) {
26973
+ case ketcherCore.OperationType.ATOM_ADD:
26556
26974
  case ketcherCore.OperationType.ATOM_DELETE:
26557
26975
  case ketcherCore.OperationType.ATOM_ATTR:
26558
26976
  case ketcherCore.OperationType.BOND_ADD:
26977
+ case ketcherCore.OperationType.BOND_DELETE:
26559
26978
  case ketcherCore.OperationType.BOND_ATTR:
26560
26979
  {
26561
26980
  if (entry.id !== undefined) {
@@ -26575,21 +26994,21 @@ var Editor$3 = function () {
26575
26994
  }, {
26576
26995
  key: "invalidateMonomerCreationWizardState",
26577
26996
  value: function invalidateMonomerCreationWizardState(changesMap) {
26578
- var _this7 = this;
26997
+ var _this8 = this;
26579
26998
  if (!this.monomerCreationState) {
26580
26999
  return;
26581
27000
  }
26582
- var _iterator2 = _createForOfIteratorHelper$2(changesMap.entries()),
26583
- _step2;
27001
+ var _iterator4 = _createForOfIteratorHelper$2(changesMap.entries()),
27002
+ _step4;
26584
27003
  try {
26585
- var _loop = function _loop() {
26586
- var _step2$value = _slicedToArray__default["default"](_step2.value, 2),
26587
- operation = _step2$value[0],
26588
- ids = _step2$value[1];
27004
+ var _loop2 = function _loop2() {
27005
+ var _step4$value = _slicedToArray__default["default"](_step4.value, 2),
27006
+ operation = _step4$value[0],
27007
+ ids = _step4$value[1];
26589
27008
  switch (operation) {
26590
27009
  case ketcherCore.OperationType.ATOM_DELETE:
26591
27010
  {
26592
- var attachmentPointsToInvalidate = Array.from(_this7.monomerCreationState.assignedAttachmentPoints.entries()).filter(function (_ref11) {
27011
+ var attachmentPointsToInvalidate = Array.from(_this8.monomerCreationState.assignedAttachmentPoints.entries()).filter(function (_ref11) {
26593
27012
  var _ref12 = _slicedToArray__default["default"](_ref11, 2),
26594
27013
  atomPair = _ref12[1];
26595
27014
  return ids.has(atomPair[0]) || ids.has(atomPair[1]);
@@ -26605,67 +27024,68 @@ var Editor$3 = function () {
26605
27024
  attachmentAtomId = _atomPair5[0],
26606
27025
  leavingAtomId = _atomPair5[1];
26607
27026
  if (ids.has(attachmentAtomId)) {
26608
- var _this7$monomerCreatio;
26609
- (_this7$monomerCreatio = _this7.monomerCreationState) === null || _this7$monomerCreatio === void 0 || _this7$monomerCreatio.assignedAttachmentPoints["delete"](attachmentPointName);
27027
+ var _this8$monomerCreatio;
27028
+ (_this8$monomerCreatio = _this8.monomerCreationState) === null || _this8$monomerCreatio === void 0 || _this8$monomerCreatio.assignedAttachmentPoints["delete"](attachmentPointName);
26610
27029
  } else if (ids.has(leavingAtomId)) {
26611
- var potentialLeavingAtoms = _this7.findPotentialLeavingAtoms(attachmentAtomId);
27030
+ var potentialLeavingAtoms = _this8.findPotentialLeavingAtoms(attachmentAtomId);
26612
27031
  if (potentialLeavingAtoms.length === 0) {
26613
- var _this7$monomerCreatio2;
26614
- (_this7$monomerCreatio2 = _this7.monomerCreationState) === null || _this7$monomerCreatio2 === void 0 || _this7$monomerCreatio2.assignedAttachmentPoints["delete"](attachmentPointName);
27032
+ var _this8$monomerCreatio2;
27033
+ (_this8$monomerCreatio2 = _this8.monomerCreationState) === null || _this8$monomerCreatio2 === void 0 || _this8$monomerCreatio2.assignedAttachmentPoints["delete"](attachmentPointName);
26615
27034
  } else {
26616
- var _this7$monomerCreatio3;
26617
- var newLeavingAtomId = _this7.struct().atoms.keyOf(potentialLeavingAtoms[0]);
27035
+ var _this8$monomerCreatio3;
27036
+ var newLeavingAtomId = _this8.struct().atoms.keyOf(potentialLeavingAtoms[0]);
26618
27037
  assert_1(newLeavingAtomId !== null);
26619
- (_this7$monomerCreatio3 = _this7.monomerCreationState) === null || _this7$monomerCreatio3 === void 0 || _this7$monomerCreatio3.assignedAttachmentPoints.set(attachmentPointName, [attachmentAtomId, newLeavingAtomId]);
27038
+ (_this8$monomerCreatio3 = _this8.monomerCreationState) === null || _this8$monomerCreatio3 === void 0 || _this8$monomerCreatio3.assignedAttachmentPoints.set(attachmentPointName, [attachmentAtomId, newLeavingAtomId]);
26620
27039
  }
26621
27040
  }
26622
27041
  });
26623
- var potentialAttachmentPointsToInvalidate = Array.from(_this7.monomerCreationState.potentialAttachmentPoints.entries());
27042
+ var potentialAttachmentPointsToInvalidate = Array.from(_this8.monomerCreationState.potentialAttachmentPoints.entries());
26624
27043
  potentialAttachmentPointsToInvalidate.forEach(function (_ref15) {
26625
27044
  var _ref16 = _slicedToArray__default["default"](_ref15, 2),
26626
27045
  attachmentAtomId = _ref16[0],
26627
27046
  leavingAtomIds = _ref16[1];
26628
27047
  if (ids.has(attachmentAtomId)) {
26629
- var _this7$monomerCreatio4;
26630
- (_this7$monomerCreatio4 = _this7.monomerCreationState) === null || _this7$monomerCreatio4 === void 0 || _this7$monomerCreatio4.potentialAttachmentPoints["delete"](attachmentAtomId);
27048
+ var _this8$monomerCreatio4;
27049
+ (_this8$monomerCreatio4 = _this8.monomerCreationState) === null || _this8$monomerCreatio4 === void 0 || _this8$monomerCreatio4.potentialAttachmentPoints["delete"](attachmentAtomId);
26631
27050
  } else {
26632
27051
  var updatedLeavingAtomIds = new Set(Array.from(leavingAtomIds).filter(function (id) {
26633
27052
  return !ids.has(id);
26634
27053
  }));
26635
27054
  if (updatedLeavingAtomIds.size === 0) {
26636
- var _this7$monomerCreatio5;
26637
- (_this7$monomerCreatio5 = _this7.monomerCreationState) === null || _this7$monomerCreatio5 === void 0 || _this7$monomerCreatio5.potentialAttachmentPoints["delete"](attachmentAtomId);
27055
+ var _this8$monomerCreatio5;
27056
+ (_this8$monomerCreatio5 = _this8.monomerCreationState) === null || _this8$monomerCreatio5 === void 0 || _this8$monomerCreatio5.potentialAttachmentPoints["delete"](attachmentAtomId);
26638
27057
  } else {
26639
- var _this7$monomerCreatio6;
26640
- (_this7$monomerCreatio6 = _this7.monomerCreationState) === null || _this7$monomerCreatio6 === void 0 || _this7$monomerCreatio6.potentialAttachmentPoints.set(attachmentAtomId, updatedLeavingAtomIds);
27058
+ var _this8$monomerCreatio6;
27059
+ (_this8$monomerCreatio6 = _this8.monomerCreationState) === null || _this8$monomerCreatio6 === void 0 || _this8$monomerCreatio6.potentialAttachmentPoints.set(attachmentAtomId, updatedLeavingAtomIds);
26641
27060
  }
26642
27061
  }
26643
27062
  });
27063
+ _this8.removeAtomsAndBondsFromRnaComponents([], _toConsumableArray__default["default"](ids.values()));
26644
27064
  }
26645
27065
  break;
26646
27066
  case ketcherCore.OperationType.BOND_ATTR:
26647
27067
  {
26648
- var _iterator3 = _createForOfIteratorHelper$2(ids.values()),
26649
- _step3;
27068
+ var _iterator5 = _createForOfIteratorHelper$2(ids.values()),
27069
+ _step5;
26650
27070
  try {
26651
- var _loop2 = function _loop2() {
26652
- var id = _step3.value;
26653
- var bond = _this7.struct().bonds.get(id);
27071
+ var _loop3 = function _loop3() {
27072
+ var id = _step5.value;
27073
+ var bond = _this8.struct().bonds.get(id);
26654
27074
  assert_1(bond);
26655
- var attachmentPointWithBond = Array.from(_this7.monomerCreationState.assignedAttachmentPoints.entries()).find(function (_ref17) {
27075
+ var attachmentPointWithBond = Array.from(_this8.monomerCreationState.assignedAttachmentPoints.entries()).find(function (_ref17) {
26656
27076
  var _ref18 = _slicedToArray__default["default"](_ref17, 2),
26657
27077
  atomPair = _ref18[1];
26658
27078
  return bond.begin === atomPair[0] && bond.end === atomPair[1] || bond.begin === atomPair[1] && bond.end === atomPair[0];
26659
27079
  });
26660
27080
  if (attachmentPointWithBond) {
26661
27081
  if (!Editor.isBondSuitableForAttachmentPoint(bond)) {
26662
- _this7.monomerCreationState.problematicAttachmentPoints.add(attachmentPointWithBond[0]);
27082
+ _this8.monomerCreationState.problematicAttachmentPoints.add(attachmentPointWithBond[0]);
26663
27083
  } else {
26664
- _this7.monomerCreationState.problematicAttachmentPoints["delete"](attachmentPointWithBond[0]);
27084
+ _this8.monomerCreationState.problematicAttachmentPoints["delete"](attachmentPointWithBond[0]);
26665
27085
  }
26666
27086
  }
26667
27087
  if (!Editor.isBondSuitableForAttachmentPoint(bond)) {
26668
- _this7.monomerCreationState.potentialAttachmentPoints.forEach(function (leavingAtomIds, attachmentAtomId) {
27088
+ _this8.monomerCreationState.potentialAttachmentPoints.forEach(function (leavingAtomIds, attachmentAtomId) {
26669
27089
  var updatedLeavingAtomIds = new Set(leavingAtomIds);
26670
27090
  var bondFromAttachmentAtom = bond.begin === attachmentAtomId && leavingAtomIds.has(bond.end);
26671
27091
  var bondToAttachmentAtom = bond.end === attachmentAtomId && leavingAtomIds.has(bond.begin);
@@ -26673,35 +27093,35 @@ var Editor$3 = function () {
26673
27093
  updatedLeavingAtomIds["delete"](bondFromAttachmentAtom ? bond.end : bond.begin);
26674
27094
  }
26675
27095
  if (updatedLeavingAtomIds.size === 0) {
26676
- var _this7$monomerCreatio7;
26677
- (_this7$monomerCreatio7 = _this7.monomerCreationState) === null || _this7$monomerCreatio7 === void 0 || _this7$monomerCreatio7.potentialAttachmentPoints["delete"](attachmentAtomId);
27096
+ var _this8$monomerCreatio7;
27097
+ (_this8$monomerCreatio7 = _this8.monomerCreationState) === null || _this8$monomerCreatio7 === void 0 || _this8$monomerCreatio7.potentialAttachmentPoints["delete"](attachmentAtomId);
26678
27098
  } else {
26679
- var _this7$monomerCreatio8;
26680
- (_this7$monomerCreatio8 = _this7.monomerCreationState) === null || _this7$monomerCreatio8 === void 0 || _this7$monomerCreatio8.potentialAttachmentPoints.set(attachmentAtomId, updatedLeavingAtomIds);
27099
+ var _this8$monomerCreatio8;
27100
+ (_this8$monomerCreatio8 = _this8.monomerCreationState) === null || _this8$monomerCreatio8 === void 0 || _this8$monomerCreatio8.potentialAttachmentPoints.set(attachmentAtomId, updatedLeavingAtomIds);
26681
27101
  }
26682
27102
  });
26683
27103
  }
26684
27104
  };
26685
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
26686
- _loop2();
27105
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
27106
+ _loop3();
26687
27107
  }
26688
27108
  } catch (err) {
26689
- _iterator3.e(err);
27109
+ _iterator5.e(err);
26690
27110
  } finally {
26691
- _iterator3.f();
27111
+ _iterator5.f();
26692
27112
  }
26693
27113
  break;
26694
27114
  }
26695
27115
  case ketcherCore.OperationType.BOND_ADD:
26696
27116
  {
26697
- var _iterator4 = _createForOfIteratorHelper$2(ids.values()),
26698
- _step4;
27117
+ var _iterator6 = _createForOfIteratorHelper$2(ids.values()),
27118
+ _step6;
26699
27119
  try {
26700
- var _loop3 = function _loop3() {
26701
- var id = _step4.value;
26702
- var bond = _this7.struct().bonds.get(id);
27120
+ var _loop4 = function _loop4() {
27121
+ var id = _step6.value;
27122
+ var bond = _this8.struct().bonds.get(id);
26703
27123
  assert_1(bond);
26704
- var attachmentPointWithBondToLeavingAtom = Array.from(_this7.monomerCreationState.assignedAttachmentPoints.entries()).find(function (_ref19) {
27124
+ var attachmentPointWithBondToLeavingAtom = Array.from(_this8.monomerCreationState.assignedAttachmentPoints.entries()).find(function (_ref19) {
26705
27125
  var _ref20 = _slicedToArray__default["default"](_ref19, 2),
26706
27126
  _ref20$ = _slicedToArray__default["default"](_ref20[1], 2),
26707
27127
  attachmentAtomId = _ref20$[0],
@@ -26711,55 +27131,72 @@ var Editor$3 = function () {
26711
27131
  if (attachmentPointWithBondToLeavingAtom) {
26712
27132
  var _attachmentPointWithB = _slicedToArray__default["default"](attachmentPointWithBondToLeavingAtom, 1),
26713
27133
  attachmentPointName = _attachmentPointWithB[0];
26714
- _this7.monomerCreationState.assignedAttachmentPoints["delete"](attachmentPointName);
27134
+ _this8.monomerCreationState.assignedAttachmentPoints["delete"](attachmentPointName);
26715
27135
  }
26716
27136
  if (Editor.isBondSuitableForAttachmentPoint(bond)) {
26717
- if (_this7.monomerCreationState.potentialAttachmentPoints.has(bond.begin)) {
26718
- var leavingAtomIds = _this7.monomerCreationState.potentialAttachmentPoints.get(bond.begin);
27137
+ if (_this8.monomerCreationState.potentialAttachmentPoints.has(bond.begin)) {
27138
+ var leavingAtomIds = _this8.monomerCreationState.potentialAttachmentPoints.get(bond.begin);
26719
27139
  assert_1(leavingAtomIds);
26720
- var endAtom = _this7.struct().atoms.get(bond.end);
27140
+ var endAtom = _this8.struct().atoms.get(bond.end);
26721
27141
  if (endAtom && endAtom.neighbors.length === 1) {
26722
27142
  var updatedLeavingAtomIds = new Set(leavingAtomIds);
26723
27143
  updatedLeavingAtomIds.add(bond.end);
26724
- _this7.monomerCreationState.potentialAttachmentPoints.set(bond.begin, updatedLeavingAtomIds);
27144
+ _this8.monomerCreationState.potentialAttachmentPoints.set(bond.begin, updatedLeavingAtomIds);
26725
27145
  }
26726
27146
  }
26727
- if (_this7.monomerCreationState.potentialAttachmentPoints.has(bond.end)) {
26728
- var _leavingAtomIds = _this7.monomerCreationState.potentialAttachmentPoints.get(bond.end);
27147
+ if (_this8.monomerCreationState.potentialAttachmentPoints.has(bond.end)) {
27148
+ var _leavingAtomIds = _this8.monomerCreationState.potentialAttachmentPoints.get(bond.end);
26729
27149
  assert_1(_leavingAtomIds);
26730
- var beginAtom = _this7.struct().atoms.get(bond.begin);
27150
+ var beginAtom = _this8.struct().atoms.get(bond.begin);
26731
27151
  if (beginAtom && beginAtom.neighbors.length === 1) {
26732
27152
  var _updatedLeavingAtomIds = new Set(_leavingAtomIds);
26733
27153
  _updatedLeavingAtomIds.add(bond.begin);
26734
- _this7.monomerCreationState.potentialAttachmentPoints.set(bond.end, _updatedLeavingAtomIds);
27154
+ _this8.monomerCreationState.potentialAttachmentPoints.set(bond.end, _updatedLeavingAtomIds);
26735
27155
  }
26736
27156
  }
26737
27157
  }
27158
+ if (_this8.canAssignRnaComponent(bond)) {
27159
+ _this8.autoAssignAtomToRnaComponent(id);
27160
+ }
26738
27161
  };
26739
- for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
26740
- _loop3();
27162
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
27163
+ _loop4();
26741
27164
  }
26742
27165
  } catch (err) {
26743
- _iterator4.e(err);
27166
+ _iterator6.e(err);
26744
27167
  } finally {
26745
- _iterator4.f();
27168
+ _iterator6.f();
26746
27169
  }
26747
27170
  break;
26748
27171
  }
27172
+ case ketcherCore.OperationType.BOND_DELETE:
27173
+ {
27174
+ _this8.removeAtomsAndBondsFromRnaComponents([], _toConsumableArray__default["default"](ids.values()));
27175
+ break;
27176
+ }
26749
27177
  default:
26750
27178
  break;
26751
27179
  }
26752
27180
  };
26753
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
26754
- if (_loop()) continue;
27181
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
27182
+ if (_loop2()) continue;
26755
27183
  }
26756
27184
  } catch (err) {
26757
- _iterator2.e(err);
27185
+ _iterator4.e(err);
26758
27186
  } finally {
26759
- _iterator2.f();
27187
+ _iterator4.f();
26760
27188
  }
26761
27189
  this.monomerCreationState = _objectSpread$V({}, this.monomerCreationState || {});
26762
27190
  }
27191
+ }, {
27192
+ key: "setRnaMonomerCreationMode",
27193
+ value: function setRnaMonomerCreationMode(isActive) {
27194
+ if (!this.monomerCreationState) {
27195
+ ketcherCore.KetcherLogger.warn('Monomer creation state is not initialized');
27196
+ return;
27197
+ }
27198
+ this.monomerCreationState.isRnaPresetMode = isActive;
27199
+ }
26763
27200
  }, {
26764
27201
  key: "selection",
26765
27202
  value: function selection(ci) {
@@ -26961,7 +27398,20 @@ var Editor$3 = function () {
26961
27398
  }, {
26962
27399
  key: "unsubscribe",
26963
27400
  value: function unsubscribe(eventName, subscriber) {
26964
- this.event[eventName].remove(subscriber.handler);
27401
+ switch (eventName) {
27402
+ case 'change':
27403
+ {
27404
+ ketcherCore.ketcherProvider.getKetcher(this.ketcherId).changeEvent.remove(subscriber.handler);
27405
+ break;
27406
+ }
27407
+ case 'libraryUpdate':
27408
+ {
27409
+ ketcherCore.ketcherProvider.getKetcher(this.ketcherId).libraryUpdateEvent.remove(subscriber.handler);
27410
+ break;
27411
+ }
27412
+ default:
27413
+ this.event[eventName].remove(subscriber.handler);
27414
+ }
26965
27415
  }
26966
27416
  }, {
26967
27417
  key: "findItem",
@@ -27097,17 +27547,17 @@ var Editor$3 = function () {
27097
27547
  return false;
27098
27548
  }
27099
27549
  var adjacencyList = new Map();
27100
- var _iterator5 = _createForOfIteratorHelper$2(atomIds),
27101
- _step5;
27550
+ var _iterator7 = _createForOfIteratorHelper$2(atomIds),
27551
+ _step7;
27102
27552
  try {
27103
- for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
27104
- var atomId = _step5.value;
27553
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
27554
+ var atomId = _step7.value;
27105
27555
  adjacencyList.set(atomId, []);
27106
27556
  }
27107
27557
  } catch (err) {
27108
- _iterator5.e(err);
27558
+ _iterator7.e(err);
27109
27559
  } finally {
27110
- _iterator5.f();
27560
+ _iterator7.f();
27111
27561
  }
27112
27562
  bondIds.forEach(function (bondId) {
27113
27563
  var bond = struct.bonds.get(bondId);
@@ -27129,19 +27579,19 @@ var Editor$3 = function () {
27129
27579
  if (nextAtomId !== undefined && !visited.has(nextAtomId)) {
27130
27580
  var _adjacencyList$get3;
27131
27581
  visited.add(nextAtomId);
27132
- var _iterator6 = _createForOfIteratorHelper$2((_adjacencyList$get3 = adjacencyList.get(nextAtomId)) !== null && _adjacencyList$get3 !== void 0 ? _adjacencyList$get3 : []),
27133
- _step6;
27582
+ var _iterator8 = _createForOfIteratorHelper$2((_adjacencyList$get3 = adjacencyList.get(nextAtomId)) !== null && _adjacencyList$get3 !== void 0 ? _adjacencyList$get3 : []),
27583
+ _step8;
27134
27584
  try {
27135
- for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
27136
- var neighbor = _step6.value;
27585
+ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
27586
+ var neighbor = _step8.value;
27137
27587
  if (!visited.has(neighbor)) {
27138
27588
  queue.push(neighbor);
27139
27589
  }
27140
27590
  }
27141
27591
  } catch (err) {
27142
- _iterator6.e(err);
27592
+ _iterator8.e(err);
27143
27593
  } finally {
27144
- _iterator6.f();
27594
+ _iterator8.f();
27145
27595
  }
27146
27596
  }
27147
27597
  }
@@ -27307,7 +27757,7 @@ function setHover(ci, visible, render) {
27307
27757
 
27308
27758
  var classes$F = {"button-common-styles":"StructEditor-module_button-common-styles__3P7PO","scrollbar":"StructEditor-module_scrollbar__SUs-o","spinnerOverlay":"StructEditor-module_spinnerOverlay__5H1IM","canvas":"StructEditor-module_canvas__LLnzh","measureLog":"StructEditor-module_measureLog__B2wuy","visible":"StructEditor-module_visible__3eFNB","intermediateCanvas":"StructEditor-module_intermediateCanvas__fR3ws","enableCursor":"StructEditor-module_enableCursor__Qla0A"};
27309
27759
 
27310
- var styles$p = {"button-common-styles":"ContextMenu-module_button-common-styles__pshYr","scrollbar":"ContextMenu-module_scrollbar__fCla5","contextMenu":"ContextMenu-module_contextMenu__oqyL-","icon":"ContextMenu-module_icon__KhXEk","contextMenuText":"ContextMenu-module_contextMenuText__j0O2-","sameGroup":"ContextMenu-module_sameGroup__0DPIX","devider":"ContextMenu-module_devider__-K9Bc"};
27760
+ var styles$p = {"button-common-styles":"ContextMenu-module_button-common-styles__pshYr","scrollbar":"ContextMenu-module_scrollbar__fCla5","contextMenu":"ContextMenu-module_contextMenu__oqyL-","icon":"ContextMenu-module_icon__KhXEk","markAsComponentIcon":"ContextMenu-module_markAsComponentIcon__oBjcI","contextMenuText":"ContextMenu-module_contextMenuText__j0O2-","sameGroup":"ContextMenu-module_sameGroup__0DPIX","devider":"ContextMenu-module_devider__-K9Bc"};
27311
27761
 
27312
27762
  var CONTEXT_MENU_ID;
27313
27763
  (function (CONTEXT_MENU_ID) {
@@ -27477,6 +27927,116 @@ var useDelete$1 = function useDelete() {
27477
27927
  return handler;
27478
27928
  };
27479
27929
 
27930
+ var MonomerTypeSelectConfig = [{
27931
+ value: ketcherCore.KetMonomerClass.AminoAcid,
27932
+ label: 'Amino acid',
27933
+ iconName: 'peptide'
27934
+ }, {
27935
+ value: ketcherCore.KetMonomerClass.Sugar,
27936
+ label: 'Sugar',
27937
+ iconName: 'sugar'
27938
+ }, {
27939
+ value: ketcherCore.KetMonomerClass.Base,
27940
+ label: 'Base',
27941
+ iconName: 'base'
27942
+ }, {
27943
+ value: ketcherCore.KetMonomerClass.Phosphate,
27944
+ label: 'Phosphate',
27945
+ iconName: 'phosphate'
27946
+ }, {
27947
+ value: ketcherCore.KetMonomerClass.RNA,
27948
+ label: 'Nucleotide (monomer)',
27949
+ iconName: 'nucleotide'
27950
+ }, {
27951
+ value: 'rnaPreset',
27952
+ label: 'Nucleotide (preset)',
27953
+ iconName: 'preset'
27954
+ }, {
27955
+ value: ketcherCore.KetMonomerClass.CHEM,
27956
+ label: 'CHEM',
27957
+ iconName: 'chem'
27958
+ }];
27959
+ var MAX_MODIFICATION_TYPES = 5;
27960
+ var NotificationMessages = {
27961
+ defaultAttachmentPoints: 'Attachment points are set by default with hydrogens as leaving groups.',
27962
+ emptyMandatoryFields: 'Mandatory fields must be filled.',
27963
+ invalidSymbol: 'The monomer code must consist only of uppercase and lowercase letters, numbers, hyphens (-), underscores (_), and asterisks (*).',
27964
+ symbolExists: 'The code must be unique amongst peptide, RNA, or CHEM monomers.',
27965
+ editingIsNotAllowed: 'Editing of the structure is not allowed.',
27966
+ noAttachmentPoints: 'The monomer must have at least one attachment point.',
27967
+ incorrectAttachmentPointsOrder: 'Attachment point numbers must be in order, but R1 and R2 may be skipped.',
27968
+ creationSuccessful: 'The monomer was successfully added to the library.',
27969
+ creationRNASuccessful: 'The preset was successfully added to the library.',
27970
+ incontinuousStructure: 'All monomers must have a continuous structure.',
27971
+ notUniqueModificationTypes: 'Only one amino acid within a natural analogue can have the same modification type.',
27972
+ modificationTypeExists: 'Only one amino acid within a natural analogue can have the same modification type.',
27973
+ notMinimalViableStructure: 'Minimal monomer structure is two atoms connected via a single bond.',
27974
+ impureStructure: 'Monomer structure cannot contain S-groups, R-groups, special atoms, or any other query properties.',
27975
+ invalidHELMAlias: 'The HELM alias must consist only of uppercase and lowercase letters, numbers, hyphens (-), underscores (_), and asterisks (*).',
27976
+ notUniqueHELMAlias: 'The HELM alias must be unique amongst peptide or RNA monomers.',
27977
+ invalidRnaPresetStructure: 'Structure of rna preset component contains issues. Please adjust the structure.',
27978
+ notUniquePresetCode: 'The preset code must be unique amongst other presets.',
27979
+ invalidPresetCode: 'The preset code must consist only of uppercase and lowercase letters, numbers, hyphens (-), underscores (_), and asterisks (*).'
27980
+ };
27981
+ var NotificationTypes = {
27982
+ defaultAttachmentPoints: 'info',
27983
+ emptyMandatoryFields: 'error',
27984
+ invalidSymbol: 'error',
27985
+ symbolExists: 'error',
27986
+ editingIsNotAllowed: 'error',
27987
+ noAttachmentPoints: 'error',
27988
+ incorrectAttachmentPointsOrder: 'error',
27989
+ creationSuccessful: 'info',
27990
+ creationRNASuccessful: 'info',
27991
+ incontinuousStructure: 'error',
27992
+ notUniqueModificationTypes: 'error',
27993
+ modificationTypeExists: 'error',
27994
+ notMinimalViableStructure: 'error',
27995
+ impureStructure: 'error',
27996
+ invalidHELMAlias: 'error',
27997
+ notUniqueHELMAlias: 'error',
27998
+ invalidRnaPresetStructure: 'error',
27999
+ notUniquePresetCode: 'error',
28000
+ invalidPresetCode: 'error'
28001
+ };
28002
+ var MonomerCreationExternalNotificationAction = 'MonomerCreationExternalNotification';
28003
+ var MonomerCreationMarkAsComponentAction = 'MonomerCreationMarkAsComponent';
28004
+
28005
+ var useMarkAs = function useMarkAs() {
28006
+ var _useAppContext = useAppContext(),
28007
+ ketcherId = _useAppContext.ketcherId;
28008
+ var handler = React.useCallback(function (componentType) {
28009
+ return function (_params) {
28010
+ window.dispatchEvent(new CustomEvent(MonomerCreationMarkAsComponentAction, {
28011
+ detail: componentType
28012
+ }));
28013
+ };
28014
+ }, []);
28015
+ var isVisible = React.useCallback(function () {
28016
+ var editor = ketcherCore.ketcherProvider.getKetcher(ketcherId).editor;
28017
+ if (!editor.isMonomerCreationWizardActive) {
28018
+ return false;
28019
+ }
28020
+ var monomerCreationState = editor.monomerCreationState;
28021
+ return monomerCreationState === null || monomerCreationState === void 0 ? void 0 : monomerCreationState.isRnaPresetMode;
28022
+ }, [ketcherId]);
28023
+ var isDisabled = React.useCallback(function () {
28024
+ var editor = ketcherCore.ketcherProvider.getKetcher(ketcherId).editor;
28025
+ var selection = editor.selection();
28026
+ var struct = editor.struct();
28027
+ if (!(selection !== null && selection !== void 0 && selection.atoms) || selection.atoms.length === 0) {
28028
+ return true;
28029
+ }
28030
+ var isContinuous = Editor$3.isStructureContinuous(struct, selection);
28031
+ return !isContinuous;
28032
+ }, [ketcherId]);
28033
+ return {
28034
+ handler: handler,
28035
+ isVisible: isVisible,
28036
+ isDisabled: isDisabled
28037
+ };
28038
+ };
28039
+
27480
28040
  var classes$E = {"button-common-styles":"ToggleButtonGroup-module_button-common-styles__wU4We","scrollbar":"ToggleButtonGroup-module_scrollbar__lvyIF","button":"ToggleButtonGroup-module_button__5nfNK","selected":"ToggleButtonGroup-module_selected__SAbod"};
27481
28041
 
27482
28042
  var BUTTON_HEIGHT = 28;
@@ -27840,6 +28400,10 @@ var AtomMenuItems = function AtomMenuItems(props) {
27840
28400
  handleStereo = _useAtomStereo2[0],
27841
28401
  stereoDisabled = _useAtomStereo2[1];
27842
28402
  var handleDelete = useDelete$1();
28403
+ var _useMarkAs = useMarkAs(),
28404
+ handleMarkAs = _useMarkAs.handler,
28405
+ markAsIsVisible = _useMarkAs.isVisible,
28406
+ markAsIsDisabled = _useMarkAs.isDisabled;
27843
28407
  var _useAppContext = useAppContext(),
27844
28408
  ketcherId = _useAppContext.ketcherId;
27845
28409
  var ketcher = ketcherCore.ketcherProvider.getKetcher(ketcherId);
@@ -27909,8 +28473,43 @@ var AtomMenuItems = function AtomMenuItems(props) {
27909
28473
  }
27910
28474
  var editMenuItemTitle = (_props$propsFromTrigg7 = props.propsFromTrigger) !== null && _props$propsFromTrigg7 !== void 0 && _props$propsFromTrigg7.extraItemsSelected ? 'Edit selected atoms...' : 'Edit...';
27911
28475
  var disabledForMonomerCreation = editor.isMonomerCreationWizardActive;
28476
+ var showMarkAsMenu = markAsIsVisible();
28477
+ var markAsDisabled = markAsIsDisabled();
27912
28478
  return jsxRuntime.jsxs(jsxRuntime.Fragment, {
27913
- children: [makeAttachmentPointMenuItems && jsxRuntime.jsxs(jsxRuntime.Fragment, {
28479
+ children: [showMarkAsMenu && jsxRuntime.jsxs(reactContexify.Submenu, _objectSpread$T(_objectSpread$T({}, props), {}, {
28480
+ "data-testid": "Mark as a...-option",
28481
+ label: "Mark as a...",
28482
+ disabled: markAsDisabled,
28483
+ className: styles$p.subMenu,
28484
+ children: [jsxRuntime.jsxs(reactContexify.Item, _objectSpread$T(_objectSpread$T({}, props), {}, {
28485
+ "data-testid": "Mark as Base-option",
28486
+ onClick: handleMarkAs('base'),
28487
+ children: [jsxRuntime.jsx(Icon, {
28488
+ name: "base",
28489
+ className: clsx__default["default"](styles$p.icon, styles$p.markAsComponentIcon)
28490
+ }), jsxRuntime.jsx("span", {
28491
+ children: "Base"
28492
+ })]
28493
+ })), jsxRuntime.jsxs(reactContexify.Item, _objectSpread$T(_objectSpread$T({}, props), {}, {
28494
+ "data-testid": "Mark as Sugar-option",
28495
+ onClick: handleMarkAs('sugar'),
28496
+ children: [jsxRuntime.jsx(Icon, {
28497
+ name: "sugar",
28498
+ className: clsx__default["default"](styles$p.icon, styles$p.markAsComponentIcon)
28499
+ }), jsxRuntime.jsx("span", {
28500
+ children: "Sugar"
28501
+ })]
28502
+ })), jsxRuntime.jsxs(reactContexify.Item, _objectSpread$T(_objectSpread$T({}, props), {}, {
28503
+ "data-testid": "Mark as Phosphate-option",
28504
+ onClick: handleMarkAs('phosphate'),
28505
+ children: [jsxRuntime.jsx(Icon, {
28506
+ name: "phosphate",
28507
+ className: clsx__default["default"](styles$p.icon, styles$p.markAsComponentIcon)
28508
+ }), jsxRuntime.jsx("span", {
28509
+ children: "Phosphate"
28510
+ })]
28511
+ }))]
28512
+ })), makeAttachmentPointMenuItems && jsxRuntime.jsxs(jsxRuntime.Fragment, {
27914
28513
  children: [makeAttachmentPointMenuItems, jsxRuntime.jsx(reactContexify.Separator, {})]
27915
28514
  }), jsxRuntime.jsxs(reactContexify.Item, _objectSpread$T(_objectSpread$T({}, props), {}, {
27916
28515
  "data-testid": editMenuItemTitle.concat('-option'),
@@ -28466,6 +29065,10 @@ var SelectionMenuItems = function SelectionMenuItems(props) {
28466
29065
  _useCreateMonomer2 = _slicedToArray__default["default"](_useCreateMonomer, 2),
28467
29066
  handleCreateMonomer = _useCreateMonomer2[0],
28468
29067
  createMonomerDisabled = _useCreateMonomer2[1];
29068
+ var _useMarkAs = useMarkAs(),
29069
+ handleMarkAs = _useMarkAs.handler,
29070
+ markAsIsVisible = _useMarkAs.isVisible,
29071
+ markAsIsDisabled = _useMarkAs.isDisabled;
28469
29072
  var highlightBondWithColor = function highlightBondWithColor(color) {
28470
29073
  var _props$propsFromTrigg, _props$propsFromTrigg2, _props$propsFromTrigg3;
28471
29074
  var bondIds = ((_props$propsFromTrigg = props.propsFromTrigger) === null || _props$propsFromTrigg === void 0 ? void 0 : _props$propsFromTrigg.bondIds) || [];
@@ -28479,8 +29082,43 @@ var SelectionMenuItems = function SelectionMenuItems(props) {
28479
29082
  });
28480
29083
  };
28481
29084
  var options = reactRedux.useSelector(optionsSelector);
29085
+ var showMarkAsMenu = markAsIsVisible();
29086
+ var markAsDisabled = markAsIsDisabled();
28482
29087
  return jsxRuntime.jsxs(jsxRuntime.Fragment, {
28483
- children: [jsxRuntime.jsx(reactContexify.Item, _objectSpread$P(_objectSpread$P({}, props), {}, {
29088
+ children: [showMarkAsMenu && jsxRuntime.jsxs(reactContexify.Submenu, _objectSpread$P(_objectSpread$P({}, props), {}, {
29089
+ "data-testid": "Mark as a...-option",
29090
+ label: "Mark as a...",
29091
+ disabled: markAsDisabled,
29092
+ className: styles$p.subMenu,
29093
+ children: [jsxRuntime.jsxs(reactContexify.Item, _objectSpread$P(_objectSpread$P({}, props), {}, {
29094
+ "data-testid": "Mark as Base-option",
29095
+ onClick: handleMarkAs('base'),
29096
+ children: [jsxRuntime.jsx(Icon, {
29097
+ name: "base",
29098
+ className: clsx__default["default"](styles$p.icon, styles$p.markAsComponentIcon)
29099
+ }), jsxRuntime.jsx("span", {
29100
+ children: "Base"
29101
+ })]
29102
+ })), jsxRuntime.jsxs(reactContexify.Item, _objectSpread$P(_objectSpread$P({}, props), {}, {
29103
+ "data-testid": "Mark as Sugar-option",
29104
+ onClick: handleMarkAs('sugar'),
29105
+ children: [jsxRuntime.jsx(Icon, {
29106
+ name: "sugar",
29107
+ className: clsx__default["default"](styles$p.icon, styles$p.markAsComponentIcon)
29108
+ }), jsxRuntime.jsx("span", {
29109
+ children: "Sugar"
29110
+ })]
29111
+ })), jsxRuntime.jsxs(reactContexify.Item, _objectSpread$P(_objectSpread$P({}, props), {}, {
29112
+ "data-testid": "Mark as Phosphate-option",
29113
+ onClick: handleMarkAs('phosphate'),
29114
+ children: [jsxRuntime.jsx(Icon, {
29115
+ name: "phosphate",
29116
+ className: clsx__default["default"](styles$p.icon, styles$p.markAsComponentIcon)
29117
+ }), jsxRuntime.jsx("span", {
29118
+ children: "Phosphate"
29119
+ })]
29120
+ }))]
29121
+ })), jsxRuntime.jsx(reactContexify.Item, _objectSpread$P(_objectSpread$P({}, props), {}, {
28484
29122
  "data-testid": "Edit selected bonds...-option",
28485
29123
  disabled: bondEditDisabled,
28486
29124
  onClick: handleBondEdit,
@@ -30165,78 +30803,6 @@ var AttachmentPointEditPopup = function AttachmentPointEditPopup(_ref) {
30165
30803
  });
30166
30804
  };
30167
30805
 
30168
- var MonomerTypeSelectConfig = [{
30169
- value: ketcherCore.KetMonomerClass.AminoAcid,
30170
- label: 'Amino acid',
30171
- iconName: 'peptide'
30172
- }, {
30173
- value: ketcherCore.KetMonomerClass.Sugar,
30174
- label: 'Sugar',
30175
- iconName: 'sugar'
30176
- }, {
30177
- value: ketcherCore.KetMonomerClass.Base,
30178
- label: 'Base',
30179
- iconName: 'base'
30180
- }, {
30181
- value: ketcherCore.KetMonomerClass.Phosphate,
30182
- label: 'Phosphate',
30183
- iconName: 'phosphate'
30184
- }, {
30185
- value: ketcherCore.KetMonomerClass.RNA,
30186
- label: 'Nucleotide (monomer)',
30187
- iconName: 'nucleotide'
30188
- }, {
30189
- value: ketcherCore.KetMonomerClass.CHEM,
30190
- label: 'CHEM',
30191
- iconName: 'chem'
30192
- }, {
30193
- value: 'rnaPreset',
30194
- label: 'Nucleotide (preset)',
30195
- iconName: 'preset'
30196
- }];
30197
- var MAX_MODIFICATION_TYPES = 5;
30198
- var NotificationMessages = {
30199
- defaultAttachmentPoints: 'Attachment points are set by default with hydrogens as leaving groups.',
30200
- emptyMandatoryFields: 'Mandatory fields must be filled.',
30201
- invalidSymbol: 'The monomer code must consist only of uppercase and lowercase letters, numbers, hyphens (-), underscores (_), and asterisks (*).',
30202
- symbolExists: 'The code must be unique amongst peptide, RNA, or CHEM monomers.',
30203
- editingIsNotAllowed: 'Editing of the structure is not allowed.',
30204
- noAttachmentPoints: 'The monomer must have at least one attachment point.',
30205
- incorrectAttachmentPointsOrder: 'Attachment point numbers must be in order, but R1 and R2 may be skipped.',
30206
- creationSuccessful: 'The monomer was successfully added to the library.',
30207
- incontinuousStructure: 'All monomers must have a continuous structure.',
30208
- notUniqueModificationTypes: 'Only one amino acid within a natural analogue can have the same modification type.',
30209
- modificationTypeExists: 'Only one amino acid within a natural analogue can have the same modification type.',
30210
- notMinimalViableStructure: 'Minimal monomer structure is two atoms connected via a single bond.',
30211
- impureStructure: 'Monomer structure cannot contain S-groups, R-groups, special atoms, or any other query properties.',
30212
- invalidHELMAlias: 'The HELM alias must consist only of uppercase and lowercase letters, numbers, hyphens (-), underscores (_), and asterisks (*).',
30213
- notUniqueHELMAlias: 'The HELM alias must be unique amongst peptide or RNA monomers.',
30214
- invalidRnaPresetStructure: 'Structure of rna preset component contains issues. Please adjust the structure.',
30215
- notUniquePresetCode: 'The preset code must be unique amongst other presets.',
30216
- invalidPresetCode: 'The preset code must consist only of uppercase and lowercase letters, numbers, hyphens (-), underscores (_), and asterisks (*).'
30217
- };
30218
- var NotificationTypes = {
30219
- defaultAttachmentPoints: 'info',
30220
- emptyMandatoryFields: 'error',
30221
- invalidSymbol: 'error',
30222
- symbolExists: 'error',
30223
- editingIsNotAllowed: 'error',
30224
- noAttachmentPoints: 'error',
30225
- incorrectAttachmentPointsOrder: 'error',
30226
- creationSuccessful: 'info',
30227
- incontinuousStructure: 'error',
30228
- notUniqueModificationTypes: 'error',
30229
- modificationTypeExists: 'error',
30230
- notMinimalViableStructure: 'error',
30231
- impureStructure: 'error',
30232
- invalidHELMAlias: 'error',
30233
- notUniqueHELMAlias: 'error',
30234
- invalidRnaPresetStructure: 'error',
30235
- notUniquePresetCode: 'error',
30236
- invalidPresetCode: 'error'
30237
- };
30238
- var MonomerCreationExternalNotificationAction = 'MonomerCreationExternalNotification';
30239
-
30240
30806
  var MONOMER_VALIDATION_RULES = [{
30241
30807
  monomerType: ketcherCore.KetMonomerClass.AminoAcid,
30242
30808
  requirements: [{
@@ -30845,13 +31411,17 @@ var RnaPresetTabs = function RnaPresetTabs(props) {
30845
31411
  editor: editor
30846
31412
  });
30847
31413
  };
30848
- var handleClickCreateComponent = function handleClickCreateComponent(rnaComponentKey) {
31414
+ var handleClickCreateComponent = React.useCallback(function (rnaComponentKey) {
31415
+ var selection = editor.selection();
31416
+ var atomIds = (selection === null || selection === void 0 ? void 0 : selection.atoms) || [];
31417
+ var bondIds = (selection === null || selection === void 0 ? void 0 : selection.bonds) || [];
30849
31418
  wizardStateDispatch({
30850
31419
  type: 'SetRnaPresetComponentStructure',
30851
31420
  rnaComponentKey: rnaComponentKey,
30852
31421
  editor: editor
30853
31422
  });
30854
- };
31423
+ editor.setRnaComponentAtoms(rnaComponentKey, atomIds, bondIds);
31424
+ }, [editor, wizardStateDispatch]);
30855
31425
  var currentTabStructure = currentTabState === null || currentTabState === void 0 ? void 0 : currentTabState.structure;
30856
31426
  React.useEffect(function () {
30857
31427
  if (!currentTabStructure) {
@@ -30860,6 +31430,24 @@ var RnaPresetTabs = function RnaPresetTabs(props) {
30860
31430
  applyHighlights(selectedTab, isHighlightEnabled);
30861
31431
  editor.selection(null);
30862
31432
  }, [applyHighlights, currentTabStructure, editor, isHighlightEnabled, selectedTab]);
31433
+ React.useEffect(function () {
31434
+ return function () {
31435
+ editor === null || editor === void 0 || editor.highlights.clear();
31436
+ };
31437
+ }, [editor === null || editor === void 0 ? void 0 : editor.highlights]);
31438
+ React.useEffect(function () {
31439
+ var handleMarkAsComponent = function handleMarkAsComponent(event) {
31440
+ var componentType = event.detail;
31441
+ var tabIndex = RNA_COMPONENT_KEYS.indexOf(componentType) + 1;
31442
+ handleClickCreateComponent(componentType);
31443
+ setSelectedTab(tabIndex);
31444
+ applyHighlights(selectedTab, isHighlightEnabled);
31445
+ };
31446
+ window.addEventListener(MonomerCreationMarkAsComponentAction, handleMarkAsComponent);
31447
+ return function () {
31448
+ window.removeEventListener(MonomerCreationMarkAsComponentAction, handleMarkAsComponent);
31449
+ };
31450
+ }, [wizardState, handleClickCreateComponent, applyHighlights, selectedTab, isHighlightEnabled]);
30863
31451
  var hasErrorInTab = function hasErrorInTab(wizardState) {
30864
31452
  return Object.values(wizardState.errors).some(function (errorValue) {
30865
31453
  return Boolean(errorValue);
@@ -31001,6 +31589,18 @@ var initialRnaPresetWizardState = {
31001
31589
  }
31002
31590
  }
31003
31591
  };
31592
+ var getComponentSuffix = function getComponentSuffix(componentType) {
31593
+ switch (componentType) {
31594
+ case ketcherCore.KetMonomerClass.Base:
31595
+ return 'B';
31596
+ case ketcherCore.KetMonomerClass.Sugar:
31597
+ return 'S';
31598
+ case ketcherCore.KetMonomerClass.Phosphate:
31599
+ return 'P';
31600
+ default:
31601
+ return '';
31602
+ }
31603
+ };
31004
31604
  var wizardReducer = function wizardReducer(state, action) {
31005
31605
  switch (action.type) {
31006
31606
  case 'SetFieldValue':
@@ -31102,6 +31702,14 @@ var rnaPresetWizardReducer = function rnaPresetWizardReducer(state, action) {
31102
31702
  if (!action.rnaComponentKey) {
31103
31703
  return state;
31104
31704
  }
31705
+ if (action.type === 'UpdateRnaPresetComponentStructure') {
31706
+ return _objectSpread$G(_objectSpread$G({}, state), {}, _defineProperty__default["default"]({}, action.rnaComponentKey, _objectSpread$G(_objectSpread$G({}, state[action.rnaComponentKey]), {}, {
31707
+ structure: {
31708
+ atoms: action.atomIds,
31709
+ bonds: action.bondIds
31710
+ }
31711
+ })));
31712
+ }
31105
31713
  var rnaComponentKey = action.rnaComponentKey,
31106
31714
  restAction = _objectWithoutProperties__default["default"](action, _excluded$o);
31107
31715
  if (action.type === 'SetNotifications') {
@@ -31144,7 +31752,7 @@ var rnaPresetWizardReducer = function rnaPresetWizardReducer(state, action) {
31144
31752
  _updatedState = _objectSpread$G(_objectSpread$G({}, _updatedState), {}, {
31145
31753
  base: _objectSpread$G(_objectSpread$G({}, _updatedState.base), {}, {
31146
31754
  values: _objectSpread$G(_objectSpread$G({}, _updatedState.base.values), {}, {
31147
- symbol: newPresetCode
31755
+ symbol: newPresetCode ? newPresetCode + getComponentSuffix(ketcherCore.KetMonomerClass.Base) : ''
31148
31756
  })
31149
31757
  })
31150
31758
  });
@@ -31153,7 +31761,7 @@ var rnaPresetWizardReducer = function rnaPresetWizardReducer(state, action) {
31153
31761
  _updatedState = _objectSpread$G(_objectSpread$G({}, _updatedState), {}, {
31154
31762
  sugar: _objectSpread$G(_objectSpread$G({}, _updatedState.sugar), {}, {
31155
31763
  values: _objectSpread$G(_objectSpread$G({}, _updatedState.sugar.values), {}, {
31156
- symbol: newPresetCode
31764
+ symbol: newPresetCode ? newPresetCode + getComponentSuffix(ketcherCore.KetMonomerClass.Sugar) : ''
31157
31765
  })
31158
31766
  })
31159
31767
  });
@@ -31162,7 +31770,7 @@ var rnaPresetWizardReducer = function rnaPresetWizardReducer(state, action) {
31162
31770
  _updatedState = _objectSpread$G(_objectSpread$G({}, _updatedState), {}, {
31163
31771
  phosphate: _objectSpread$G(_objectSpread$G({}, _updatedState.phosphate), {}, {
31164
31772
  values: _objectSpread$G(_objectSpread$G({}, _updatedState.phosphate.values), {}, {
31165
- symbol: newPresetCode
31773
+ symbol: newPresetCode ? newPresetCode + getComponentSuffix(ketcherCore.KetMonomerClass.Phosphate) : ''
31166
31774
  })
31167
31775
  })
31168
31776
  });
@@ -31184,18 +31792,6 @@ var hasAllMandatoryPropertiesFilled = function hasAllMandatoryPropertiesFilled(v
31184
31792
  }
31185
31793
  return true;
31186
31794
  };
31187
- var getComponentSuffix = function getComponentSuffix(componentType) {
31188
- switch (componentType) {
31189
- case ketcherCore.KetMonomerClass.Base:
31190
- return 'B';
31191
- case ketcherCore.KetMonomerClass.Sugar:
31192
- return 'S';
31193
- case ketcherCore.KetMonomerClass.Phosphate:
31194
- return 'P';
31195
- default:
31196
- return '';
31197
- }
31198
- };
31199
31795
  var getLeavingAtomForAttachmentPoint = function getLeavingAtomForAttachmentPoint(componentType, attachmentPointName) {
31200
31796
  switch (componentType) {
31201
31797
  case ketcherCore.KetMonomerClass.Base:
@@ -31432,6 +32028,14 @@ var MonomerCreationWizard = function MonomerCreationWizard() {
31432
32028
  _useState6 = _slicedToArray__default["default"](_useState5, 2),
31433
32029
  leavingGroupDialogMessage = _useState6[0],
31434
32030
  setLeavingGroupDialogMessage = _useState6[1];
32031
+ var _useState7 = React.useState(null),
32032
+ _useState8 = _slicedToArray__default["default"](_useState7, 2),
32033
+ pendingType = _useState8[0],
32034
+ setPendingType = _useState8[1];
32035
+ var _useState9 = React.useState(false),
32036
+ _useState10 = _slicedToArray__default["default"](_useState9, 2),
32037
+ showTypeChangeDialog = _useState10[0],
32038
+ setShowTypeChangeDialog = _useState10[1];
31435
32039
  var isRnaPresetType = type === 'rnaPreset';
31436
32040
  var notifications = isRnaPresetType ? new Map([].concat(_toConsumableArray__default["default"](rnaPresetWizardState.preset.notifications || []), _toConsumableArray__default["default"](rnaPresetWizardState.sugar.notifications || []), _toConsumableArray__default["default"](rnaPresetWizardState.base.notifications || []), _toConsumableArray__default["default"](rnaPresetWizardState.phosphate.notifications || []))) : monomerWizardNotifications;
31437
32041
  React.useEffect(function () {
@@ -31464,37 +32068,71 @@ var MonomerCreationWizard = function MonomerCreationWizard() {
31464
32068
  window.removeEventListener(ketcherCore.MonomerCreationAttachmentPointClickEvent, attachmentPointClickHandler);
31465
32069
  };
31466
32070
  }, []);
31467
- var handleFieldChange = function handleFieldChange(fieldId, value) {
31468
- if (['type', 'naturalAnalogue'].includes(fieldId)) {
31469
- setModificationTypes([]);
31470
- }
31471
- if (fieldId === 'type') {
31472
- if ((type === 'rnaPreset' || value === 'rnaPreset') && type !== value) {
31473
- wizardStateDispatch({
31474
- type: 'ResetWizard'
31475
- });
31476
- rnaPresetWizardStateDispatch({
31477
- type: 'ResetWizard'
31478
- });
31479
- } else {
31480
- wizardStateDispatch({
31481
- type: 'SetFieldValue',
31482
- fieldId: 'aliasHELM',
31483
- value: ''
31484
- });
32071
+ React.useEffect(function () {
32072
+ var isValidRnaComponentKey = function isValidRnaComponentKey(key) {
32073
+ return key === 'base' || key === 'sugar' || key === 'phosphate';
32074
+ };
32075
+ var componentStructureUpdateHandler = function componentStructureUpdateHandler(event) {
32076
+ var updateData = event.detail;
32077
+ var componentKey = updateData.componentKey,
32078
+ atomIds = updateData.atomIds,
32079
+ bondIds = updateData.bondIds;
32080
+ if (!isValidRnaComponentKey(componentKey)) {
32081
+ return;
31485
32082
  }
32083
+ rnaPresetWizardStateDispatch({
32084
+ type: 'UpdateRnaPresetComponentStructure',
32085
+ rnaComponentKey: componentKey,
32086
+ atomIds: atomIds,
32087
+ bondIds: bondIds
32088
+ });
32089
+ };
32090
+ window.addEventListener(ketcherCore.MonomerCreationComponentStructureUpdateEvent, componentStructureUpdateHandler);
32091
+ return function () {
32092
+ window.removeEventListener(ketcherCore.MonomerCreationComponentStructureUpdateEvent, componentStructureUpdateHandler);
32093
+ };
32094
+ }, []);
32095
+ var applyTypeChange = function applyTypeChange(newType) {
32096
+ setModificationTypes([]);
32097
+ if ((type === 'rnaPreset' || newType === 'rnaPreset') && type !== newType) {
32098
+ wizardStateDispatch({
32099
+ type: 'ResetWizard'
32100
+ });
32101
+ rnaPresetWizardStateDispatch({
32102
+ type: 'ResetWizard'
32103
+ });
32104
+ } else {
31486
32105
  wizardStateDispatch({
31487
32106
  type: 'SetFieldValue',
31488
- fieldId: 'type',
31489
- value: value
32107
+ fieldId: 'aliasHELM',
32108
+ value: ''
31490
32109
  });
32110
+ }
32111
+ wizardStateDispatch({
32112
+ type: 'SetFieldValue',
32113
+ fieldId: 'type',
32114
+ value: newType
32115
+ });
32116
+ };
32117
+ var handleFieldChange = function handleFieldChange(fieldId, value) {
32118
+ if (fieldId === 'type') {
32119
+ if (type === 'rnaPreset' && value !== 'rnaPreset') {
32120
+ setPendingType(value);
32121
+ setShowTypeChangeDialog(true);
32122
+ return;
32123
+ }
32124
+ applyTypeChange(value);
31491
32125
  } else {
32126
+ if (fieldId === 'naturalAnalogue') {
32127
+ setModificationTypes([]);
32128
+ }
31492
32129
  wizardStateDispatch({
31493
32130
  type: 'SetFieldValue',
31494
32131
  fieldId: fieldId,
31495
32132
  value: value
31496
32133
  });
31497
32134
  }
32135
+ editor.setRnaMonomerCreationMode(value === 'rnaPreset');
31498
32136
  };
31499
32137
  React.useEffect(function () {
31500
32138
  var _editor$setMonomerCre;
@@ -31874,7 +32512,7 @@ var MonomerCreationWizard = function MonomerCreationWizard() {
31874
32512
  }
31875
32513
  monomerAssignedAttachmentPoints.set(attachmentPointKey, [mappedAttachmentAtomId, mappedLeavingGroupAtomId]);
31876
32514
  });
31877
- var shouldBeHidden = isRnaPresetType && !hasAllMandatoryPropertiesFilled(monomerToSave.values);
32515
+ var shouldBeHidden = isRnaPresetType;
31878
32516
  var valuesToSave = monomerToSave.values;
31879
32517
  if (shouldBeHidden) {
31880
32518
  valuesToSave = autoAssignPropertiesForHiddenMonomer(monomerToSave.values, rnaPresetWizardState.preset.name);
@@ -31898,6 +32536,7 @@ var MonomerCreationWizard = function MonomerCreationWizard() {
31898
32536
  editor.finishNewMonomersCreation(monomersData, rnaPresetWizardState.preset.name);
31899
32537
  dispatch(onAction(selectRectangleAction));
31900
32538
  resetWizard();
32539
+ dispatch(showSnackbarNotification(isRnaPresetType ? NotificationMessages.creationRNASuccessful : NotificationMessages.creationSuccessful));
31901
32540
  }
31902
32541
  };
31903
32542
  var ketcherEditorRootElement = document.querySelector(KETCHER_ROOT_NODE_CSS_SELECTOR);
@@ -31986,7 +32625,40 @@ var MonomerCreationWizard = function MonomerCreationWizard() {
31986
32625
  children: "Submit"
31987
32626
  })]
31988
32627
  })]
31989
- }), leavingGroupDialogMessage && ketcherEditorRootElement && ReactDOM.createPortal(jsxRuntime.jsx("div", {
32628
+ }), showTypeChangeDialog && ketcherEditorRootElement && ReactDOM.createPortal(jsxRuntime.jsx("div", {
32629
+ className: styles$o.dialogOverlay,
32630
+ children: jsxRuntime.jsx(Dialog, {
32631
+ className: styles$o.smallDialog,
32632
+ title: "Confirm type change",
32633
+ withDivider: true,
32634
+ valid: function valid() {
32635
+ return true;
32636
+ },
32637
+ params: {
32638
+ onOk: function onOk() {
32639
+ if (pendingType !== null) {
32640
+ applyTypeChange(pendingType);
32641
+ }
32642
+ setPendingType(null);
32643
+ setShowTypeChangeDialog(false);
32644
+ },
32645
+ onCancel: function onCancel() {
32646
+ setPendingType(null);
32647
+ setShowTypeChangeDialog(false);
32648
+ }
32649
+ },
32650
+ buttons: ['OK', 'Cancel'],
32651
+ buttonsNameMap: {
32652
+ OK: 'Yes',
32653
+ Cancel: 'Cancel'
32654
+ },
32655
+ primaryButtons: ['Cancel'],
32656
+ children: jsxRuntime.jsx("div", {
32657
+ className: styles$o.DialogMessage,
32658
+ children: "Changing the type will result in a loss of inputted data. Do you wish to proceed?"
32659
+ })
32660
+ })
32661
+ }), ketcherEditorRootElement), leavingGroupDialogMessage && ketcherEditorRootElement && ReactDOM.createPortal(jsxRuntime.jsx("div", {
31990
32662
  className: styles$o.dialogOverlay,
31991
32663
  children: jsxRuntime.jsx(Dialog, {
31992
32664
  className: styles$o.smallDialog,
@@ -39764,7 +40436,7 @@ var Editor$1 = reactRedux.connect(function (state) {
39764
40436
  };
39765
40437
  }, mapDispatchToProps$1)(StructEditor);
39766
40438
 
39767
- var classes$1 = {"app":"App-module_app__8cgyF","canvas":"App-module_canvas__taJxn","top":"App-module_top__SBeSV","left":"App-module_left__2iz-i","right":"App-module_right__U7A5Q","bottom":"App-module_bottom__tQA2B"};
40439
+ var classes$1 = {"app":"App-module_app__8cgyF","canvas":"App-module_canvas__taJxn","top":"App-module_top__SBeSV","left":"App-module_left__2iz-i","right":"App-module_right__U7A5Q","bottom":"App-module_bottom__tQA2B","toastNotification":"App-module_toastNotification__o-bVV","toastNotificationText":"App-module_toastNotificationText__RXYHk","toastNotificationCloseIcon":"App-module_toastNotificationCloseIcon__REXMP"};
39768
40440
 
39769
40441
  var classes = {"lookupContainer":"AbbreviationLookup-module_lookupContainer__-JRMj","inputContainer":"AbbreviationLookup-module_inputContainer__6tJpn","input":"AbbreviationLookup-module_input__vCxY9","searchIcon":"AbbreviationLookup-module_searchIcon__DiK0c","optionItemContent":"AbbreviationLookup-module_optionItemContent__L1JlW","optionItem":"AbbreviationLookup-module_optionItem__dAhO-","noOptions":"AbbreviationLookup-module_noOptions__yKxml","listBox":"AbbreviationLookup-module_listBox__Y50AT"};
39770
40442
 
@@ -40064,10 +40736,16 @@ var muiTheme = material.createTheme({
40064
40736
  var App = function App(props) {
40065
40737
  var dispatch = useAppDispatch();
40066
40738
  var checkServer = props.checkServer;
40739
+ var snackbarNotificationText = reactRedux.useSelector(selectSnackbarNotificationText);
40067
40740
  useSubscriptionOnEvents();
40068
40741
  var _useAppContext = useAppContext(),
40069
40742
  ketcherId = _useAppContext.ketcherId,
40070
40743
  prevKetcherId = _useAppContext.prevKetcherId;
40744
+ var handleCloseSnackbarNotification = React.useCallback(function () {
40745
+ dispatch({
40746
+ type: 'HIDE_SNACKBAR_NOTIFICATION'
40747
+ });
40748
+ }, [dispatch]);
40071
40749
  React.useEffect(function () {
40072
40750
  checkServer();
40073
40751
  dispatch(initFGTemplates());
@@ -40100,7 +40778,26 @@ var App = function App(props) {
40100
40778
  }),
40101
40779
  jsxRuntime.jsx(AppClipArea, {}), jsxRuntime.jsx(ModalContainer, {
40102
40780
  ketcherId: ketcherId
40103
- }), jsxRuntime.jsx(AbbreviationLookupContainer, {})]
40781
+ }), jsxRuntime.jsx(AbbreviationLookupContainer, {}), jsxRuntime.jsx(material.Snackbar, {
40782
+ anchorOrigin: {
40783
+ vertical: 'bottom',
40784
+ horizontal: 'center'
40785
+ },
40786
+ open: Boolean(snackbarNotificationText),
40787
+ onClose: handleCloseSnackbarNotification,
40788
+ autoHideDuration: 6000,
40789
+ children: jsxRuntime.jsxs("div", {
40790
+ className: classes$1.toastNotification,
40791
+ children: [jsxRuntime.jsx("div", {
40792
+ className: classes$1.toastNotificationText,
40793
+ children: snackbarNotificationText
40794
+ }), jsxRuntime.jsx(IconButton, {
40795
+ iconName: "close",
40796
+ className: classes$1.toastNotificationCloseIcon,
40797
+ onClick: handleCloseSnackbarNotification
40798
+ })]
40799
+ })
40800
+ })]
40104
40801
  })
40105
40802
  });
40106
40803
  };
@@ -40279,8 +40976,8 @@ var KetcherBuilder = function () {
40279
40976
  cleanup = initApp(prevKetcherId, ketcherId, element, appRoot, staticResourcesUrl, {
40280
40977
  buttons: buttons || {},
40281
40978
  errorHandler: errorHandler || null,
40282
- version: "3.12.0-dev.1" ,
40283
- buildDate: "2025-12-18T12:54:05" ,
40979
+ version: "3.12.0-rc.1" ,
40980
+ buildDate: "2026-01-08T17:45:33" ,
40284
40981
  buildNumber: '',
40285
40982
  customButtons: customButtons || []
40286
40983
  }, structService, resolve, togglerComponent);
@@ -40581,7 +41278,7 @@ var ModeControl = function ModeControl(_ref3) {
40581
41278
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
40582
41279
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
40583
41280
  var MacromoleculesEditorComponent = React.lazy(function () {
40584
- return Promise.resolve().then(function () { return require('./index.modern-b232add2.js'); });
41281
+ return Promise.resolve().then(function () { return require('./index.modern-4b58287a.js'); });
40585
41282
  });
40586
41283
  var Editor = function Editor(props) {
40587
41284
  var _useState = React.useState(false),