diff --git a/.gitignore b/.gitignore
index 29a1ff2210..b3b4fdbb7a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -58,14 +58,14 @@
/public/images/*
!/public/images/wild_card/
-/uploads/attachments/*
-/uploads/thumbnails
+/uploads/*
!/public/attachments/.keep
+
/public/docx/*
!/public/docx/.keep
-/public/assets/*.js
+/public/assets/*
/coverage/
diff --git a/.rubocop.yml b/.rubocop.yml
index d07f98f099..991149d200 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -1,3 +1,7 @@
+AllCops:
+ DisplayCopNames: true
+ TargetRubyVersion: 2.3
+
Style/BlockDelimiters:
EnforcedStyle: semantic
FunctionalMethods:
@@ -15,6 +19,8 @@ Metrics/ModuleLength:
Metrics/BlockLength:
Exclude:
- "**/*_spec.rb"
-
Metrics/LineLength:
Max: 100
+
+Metrics/MethodLength:
+ Max: 20
diff --git a/Gemfile b/Gemfile
index 2da25e10c6..9bc3b6ca8b 100644
--- a/Gemfile
+++ b/Gemfile
@@ -106,6 +106,7 @@ gem 'rubocop', require: false
gem 'yaml_db'
gem 'ruby-ole'
+gem 'ruby-geometry', require: 'geometry'
# CI
gem 'coveralls', require: false
@@ -114,8 +115,8 @@ gem 'coveralls', require: false
# to compile from github/openbabel/openbabel master
# gem 'openbabel', '2.4.1.2', git: 'https://github.com/ComPlat/openbabel-gem'
# to compile from github/openbabel/openbabel branch openbabel-2-4-x
-gem 'openbabel', '2.4.0.1', git: 'https://github.com/ComPlat/openbabel-gem',
- branch: 'openbabel-2-4-x'
+gem 'openbabel', '2.4.1.2', git: 'https://github.com/ComPlat/openbabel-gem',
+ branch: 'cdx-extraction'
gem 'barby'
gem 'prawn'
diff --git a/Gemfile.lock b/Gemfile.lock
index 683d0f70b4..cc64ab8755 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -15,10 +15,10 @@ GIT
GIT
remote: https://github.com/ComPlat/openbabel-gem
- revision: 837eec9e660b6dbc9d2517889de39a6e93bb4b98
- branch: openbabel-2-4-x
+ revision: b651909dc84ea33ab79a8e95dc50486ba272a3d4
+ branch: cdx-extraction
specs:
- openbabel (2.4.0.1)
+ openbabel (2.4.1.2)
GIT
remote: https://github.com/ComPlat/sablon
@@ -333,6 +333,7 @@ GEM
skinny (~> 0.2.3)
sqlite3 (~> 1.3)
thin (~> 1.5.0)
+ memoist (0.16.0)
memory_profiler (0.9.7)
meta_request (0.4.3)
callsite (~> 0.0, >= 0.0.11)
@@ -469,6 +470,9 @@ GEM
rainbow (>= 1.99.1, < 3.0)
ruby-progressbar (~> 1.7)
unicode-display_width (~> 1.0, >= 1.0.1)
+ ruby-geometry (0.0.6)
+ activesupport
+ memoist
ruby-mailchecker (3.0.27)
ruby-ole (1.2.12)
ruby-progressbar (1.8.1)
@@ -632,7 +636,7 @@ DEPENDENCIES
net-sftp
net-ssh
nokogiri
- openbabel (= 2.4.0.1)!
+ openbabel (= 2.4.1.2)!
paranoia (~> 2.0)
pg (~> 0.20.0)
pg_search
@@ -648,6 +652,7 @@ DEPENDENCIES
rspec-rails
rtf
rubocop
+ ruby-geometry
ruby-mailchecker
ruby-ole
rubyXL (= 3.3.26)
diff --git a/app/api/api.rb b/app/api/api.rb
index 848a2607fc..4cbe29f817 100644
--- a/app/api/api.rb
+++ b/app/api/api.rb
@@ -190,7 +190,7 @@ def to_molecule_array(hash_groups)
mount Chemotion::DevicesAnalysisAPI
mount Chemotion::GeneralAPI
mount Chemotion::V1PublicAPI
- mount Chemotion::DocxAPI
mount Chemotion::GateAPI
mount Chemotion::ElementAPI
+ mount Chemotion::ChemReadAPI
end
diff --git a/app/api/chemotion/chem_read_api.rb b/app/api/chemotion/chem_read_api.rb
new file mode 100644
index 0000000000..0d3c2958a2
--- /dev/null
+++ b/app/api/chemotion/chem_read_api.rb
@@ -0,0 +1,69 @@
+# frozen_string_literal: true
+
+# Belong to Chemotion module
+module Chemotion
+ require 'open3'
+ require 'ole/storage'
+
+ # API for ChemRead manipulation
+ class ChemReadAPI < Grape::API
+ helpers ChemReadHelpers
+
+ resource :chemread do
+ resource :embedded do
+ desc 'Upload import files'
+ params do
+ requires :get_mol, type: Boolean, default: false, desc: ''
+ end
+
+ post 'upload' do
+ smi_arr = []
+
+ get_mol = params[:get_mol]
+ params.delete('get_mol')
+
+ params.each do |uid, file|
+ temp_file = file.tempfile
+ temp_path = temp_file.to_path
+ extn = File.extname temp_path
+ tmp_dir = Dir.mktmpdir([uid, File.basename(temp_path, extn)])
+
+ info = read_uploaded_file(temp_file, tmp_dir, get_mol)
+ smi_obj = { uid: uid, name: file.filename, info: info }
+
+ temp_file.close
+ temp_file.unlink
+ FileUtils.remove_dir tmp_dir, true
+ smi_arr.push(smi_obj)
+ end
+
+ smi_arr
+ end
+ end
+
+ resource :svg do
+ desc 'Convert svg from smi'
+ params do
+ requires :smiArr, type: Array, desc: 'Files and uids'
+ end
+
+ post 'smi' do
+ smi_arr = params[:smiArr]
+ res = []
+ smi_arr.each do |smi|
+ res.push(
+ uid: smi[:uid],
+ smiIdx: smi[:smiIdx],
+ svg: SVG::ReactionComposer.cr_reaction_svg_from_rsmi(
+ smi[:newSmi],
+ ChemReadHelpers::SOLVENTS_SMI,
+ ChemReadHelpers::REAGENTS_SMI
+ )
+ )
+ end
+ res
+ end
+ end
+ end
+ end
+end
diff --git a/app/api/chemotion/docx_api.rb b/app/api/chemotion/docx_api.rb
deleted file mode 100644
index 7140bd4b00..0000000000
--- a/app/api/chemotion/docx_api.rb
+++ /dev/null
@@ -1,75 +0,0 @@
-# Belong to Chemotion module
-module Chemotion
- require 'open3'
-
- # API for Docx manipulation
- class DocxAPI < Grape::API
- resource :docx do
- resource :embedded do
- desc 'Upload cdx'
- post 'upload' do
- rsmi_arr = []
-
- params.each do |uid, file|
- rsmi_obj = { uid: uid, name: file.filename, rsmi: [] }
- tmp = file.tempfile
- extn = File.extname tmp.to_path
- filename = File.basename tmp.to_path, extn
- tmp_dir = Dir.mktmpdir([uid, filename])
-
- if extn == '.docx'
- cmd = "unzip #{tmp.to_path} -d #{tmp_dir}"
- Open3.popen3(cmd) do |_, _, _, wait_thr| wait_thr.value end
-
- cmd = "for file in #{tmp_dir}/word/embeddings/*.bin; "
- cmd += 'do DIR="${file%.*}"; mkdir $DIR; 7z x -o$DIR/ $file; '
- cmd += 'mv $DIR/CONTENTS $DIR.cdx; done'
- Open3.popen3(cmd) do |_, _, _, wait_thr| wait_thr.value end
- file_dir = "#{tmp_dir}/word/embeddings/*.cdx"
- else
- file_dir = tmp.to_path
- end
-
- Dir[file_dir].each do |cdx_path|
- cmd = Gem.loaded_specs['openbabel'].full_gem_path
- cmd += "/openbabel/bin/obabel -icdx #{cdx_path} -orsmi"
- Open3.popen3(cmd) do |_, stdout, _, wait_thr|
- rsmi = (stdout.gets || '').delete("\n").strip
- res = {}
- unless rsmi.empty?
- res[:svg] = SVG::ReactionComposer.reaction_svg_from_rsmi rsmi
- res[:smi] = rsmi
- rsmi_obj[:rsmi].push(res)
- end
- wait_thr.value
- end
- end
-
- tmp.close
- tmp.unlink
- FileUtils.remove_dir tmp_dir, true
- rsmi_arr.push(rsmi_obj)
- end
-
- rsmi_arr
- end
- end
-
- resource :svg do
- desc 'Convert svg from smi'
- post 'smi' do
- smi_arr = params[:smiArr]
- res = []
- smi_arr.each do |smi|
- res.push(
- uid: smi[:uid],
- rsmiIdx: smi[:rsmiIdx],
- svg: SVG::ReactionComposer.reaction_svg_from_rsmi(smi[:newSmi])
- )
- end
- res
- end
- end
- end
- end
-end
diff --git a/app/api/helpers/chem_read_helpers.rb b/app/api/helpers/chem_read_helpers.rb
new file mode 100644
index 0000000000..4f8628d06f
--- /dev/null
+++ b/app/api/helpers/chem_read_helpers.rb
@@ -0,0 +1,219 @@
+# frozen_string_literal: true
+
+# Helpers function for CDX parser
+module ChemReadHelpers
+ extend Grape::API::Helpers
+ include ChemReadTextHelpers
+
+ reagents_paths = Dir.glob('lib/cdx/below_arrow/*.yaml')
+ .reject { |f| f.end_with?('solvents.yaml') }
+ .map { |f| Rails.root + f }
+ REAGENTS_SMI = reagents_paths.reduce([]) { |acc, val|
+ acc.concat(YAML.safe_load(File.open(val)).values)
+ }
+
+ solvents_path = Rails.root + 'lib/cdx/below_arrow/solvents.yaml'
+ SOLVENTS_SMI = YAML.safe_load(File.open(solvents_path)).values
+
+ def read_docx(path, dir, get_mol)
+ Open3.popen3("unzip #{path} -d #{dir}") do |_, _, _, wait_thr|
+ wait_thr.value
+ end
+
+ cmd = "for file in #{dir}/word/embeddings/*.bin; "
+ cmd += 'do DIR="${file%.*}"; mkdir $DIR; 7z x -o$DIR/ $file; '
+ cmd += 'mv $DIR/CONTENTS $DIR.cdx; done'
+ Open3.popen3(cmd) do |_, _, _, wait_thr| wait_thr.value end
+
+ # sort by order of cdx within docx
+ cdx_files = Dir["#{dir}/word/embeddings/*.cdx"]&.sort { |x, y|
+ File.basename(x)[/\d+/].to_i <=> File.basename(y)[/\d+/].to_i
+ }
+
+ infos = []
+ cdx_files.each do |cdx|
+ info = read_cdx(cdx, get_mol)
+ next if info.nil?
+ infos = infos.concat(info)
+ end
+
+ infos
+ end
+
+ def read_doc(path, get_mol)
+ ole = Ole::Storage.open(path).root['ObjectPool']
+ cdx_arr = ole.children.map { |x| x['CONTENTS'] && x['CONTENTS'].read }.compact
+
+ infos = []
+ cdx_arr.each do |cdx|
+ info = read_cdx(cdx, get_mol, false)
+ next if info.nil?
+ infos = infos.concat(info)
+ end
+
+ infos
+ end
+
+ def read_cdx(cdx, get_mol, is_path = true)
+ parser = Cdx::Parser::CDXParser.new
+ parser.read(cdx, is_path)
+
+ info_from_parser(parser, get_mol)
+ end
+
+ def read_xml(path, get_mol)
+ parser = Cdx::Parser::ExmlParser.new
+ parser.read(path)
+
+ info_from_parser(parser, get_mol)
+ end
+
+ def read_cdxml(path, get_mol)
+ parser = Cdx::Parser::CdxmlParser.new
+ parser.read(path)
+
+ info_from_parser(parser, get_mol)
+ end
+
+ def info_from_parser(parser, get_mol)
+ objs = get_mol ? parser.molmap.values : parser.reaction
+ return [] if objs.empty?
+
+ infos = []
+ objs.each do |obj|
+ info = extract_info(obj, get_mol)
+ infos.push(info)
+ end
+
+ infos
+ end
+
+ def read_uploaded_file(file, dir, get_mol)
+ filepath = file.to_path
+ extn = File.extname(filepath)
+
+ begin
+ return case extn
+ when '.docx' then read_docx(filepath, dir, get_mol)
+ when '.doc' then read_doc(file, get_mol)
+ when '.cdx' then read_cdx(file, get_mol)
+ when '.xml' then read_xml(file, get_mol)
+ when '.cdxml' then read_cdxml(file, get_mol)
+ else raise 'Uploaded file type is not supported'
+ end
+ rescue StandardError => e
+ Rails.logger.error("Error while parsing: #{e}")
+ end
+ end
+
+ def refine_text(obj)
+ t = obj[:text]
+ return if t.nil? || t.empty?
+
+ extract_text_info(obj)
+
+ expand_abb(obj)
+ end
+
+ def extract_info(obj, get_mol)
+ info = get_mol ? mol_info(obj) : reaction_info(obj)
+ return nil if info.nil? || info[:smi].nil? || info[:smi].empty?
+
+ svg = if get_mol
+ Chemotion::OpenBabelService.smi_to_trans_svg(info[:smi])
+ else
+ SVG::ReactionComposer.cr_reaction_svg_from_rsmi(
+ info[:smi],
+ SOLVENTS_SMI,
+ REAGENTS_SMI
+ )
+ end
+
+ info.merge(svg: svg)
+ end
+
+ def extract_molecules(react, group)
+ return { smis: [], desc: {} } unless react[group.to_sym]
+
+ smi_array = []
+ desc = {}
+ react[group.to_sym].each_with_index do |m, idx|
+ smi_array << m[:smi] if m[:smi]
+ if m[:text]
+ # Scan the text, try to extract/parse it as a molecule if there are
+ # any abbreviations in the list
+ smis = refine_text(m)
+ smi_array.concat(smis) unless smis.nil? || smis.empty?
+ end
+
+ desc[idx] = {
+ text: m[:text],
+ time: m[:time],
+ yield: m[:yield],
+ detail: m[:detail],
+ temperature: m[:temperature]
+ }
+ end
+
+ { smis: smi_array, desc: desc }
+ end
+
+ def reaction_info(reaction)
+ smi_array = []
+ desc = { detail: reaction[:detail] }
+
+ %w[reactants reagents products].each do |group|
+ info = extract_molecules(reaction, group)
+ desc[group.to_sym] = info[:desc]
+ smi_array << info[:smis].compact.reject(&:empty?).join('.')
+ end
+
+ rinfo = desc[:reagents]
+ desc[:reagents] = {}
+ rinfo.values.compact.each do |val|
+ %w[text time yield temperature].each do |field|
+ field_s = field.to_sym
+ next if val[field_s].nil?
+ desc[:reagents][field_s] = '' if desc[:reagents][field_s].nil?
+ desc[:reagents][field_s] += ' ' + val[field_s]
+ desc[:reagents][field_s].strip!
+ end
+ end
+
+ %w[reactants products].each do |group|
+ desc[group.to_sym].values.compact.each do |val|
+ %w[time yield temperature].each do |field|
+ field_s = field.to_sym
+ next if val[field_s].nil?
+ desc[:reagents][field_s] = '' if desc[:reagents][field_s].nil?
+ desc[:reagents][field_s] += ' ' + val[field_s]
+ desc[:reagents][field_s].strip!
+ val[field_s] = nil
+ end
+ end
+ end
+ rinfo = desc[:reagents]
+ desc[:reagents] = { '0': rinfo }
+
+ { smi: smi_array.join('>'), desc: desc }
+ end
+
+ def mol_info(obj)
+ return if obj[:mol].nil?
+
+ smi = obj[:smi].nil? ? '' : obj[:smi]
+ res = { smi: smi, desc: {} }
+
+ extract_text_info(obj) unless obj[:text].nil?
+
+ res[:desc] = {
+ detail: obj[:detail],
+ text: obj[:text],
+ time: obj[:time],
+ yield: obj[:yield],
+ temperature: obj[:temperature]
+ }
+
+ res
+ end
+end
diff --git a/app/api/helpers/chem_read_text_helpers.rb b/app/api/helpers/chem_read_text_helpers.rb
new file mode 100644
index 0000000000..5bac3ed2f6
--- /dev/null
+++ b/app/api/helpers/chem_read_text_helpers.rb
@@ -0,0 +1,140 @@
+# frozen_string_literal: true
+
+# Helpers function for manipulate extracted text from CDX
+module ChemReadTextHelpers
+ extend Grape::API::Helpers
+
+ yml_path = Rails.root + 'lib/cdx/parser/abbreviations.yaml'
+ ABB = YAML.safe_load(File.open(yml_path))
+
+ # @ad = OpenBabel::AliasData.new
+
+ # Expand any aliases after molecule constructed
+ # def expand_mol(mol, atom, cid, alias_text)
+ # return if alias_text.empty?
+ # @ad.set_alias(alias_text)
+ # # Make chemically meaningful, if possible.
+ # is_expanded = @ad.expand(mol, atom.get_idx)
+ # return if is_expanded
+ # @textmap[cid] = {
+ # text: alias_text,
+ # x: atom.get_vector.get_x,
+ # y: atom.get_vector.get_y
+ # }
+ # end
+
+ def ending_regex
+ '(\s|,|\n|\r|\)|\]|\.|\z|$)'
+ end
+
+ def beginning_regex
+ '(\s|,|\n|\r|\(|\[|\.|\A|^)'
+ end
+
+ def unicode(uni_str)
+ uni_str.encode(Encoding::UTF_8)
+ end
+
+ def degree_regex
+ degree = unicode("\u00B0")
+ dcelcius = unicode("\u2103")
+ dfarenheit = unicode("\u2109")
+
+ "((#{degree} *(C|F))|(#{dcelcius}|#{dfarenheit}))"
+ end
+
+ def range_regex
+ hyphen1 = unicode("\u002D")
+ hyphen2 = unicode("\u2010")
+ minus = unicode("\u2212")
+ ndash = unicode("\u2013")
+ mdash = unicode("\u2014")
+
+ "(#{hyphen1}|#{hyphen2}|#{minus}|#{ndash}|#{mdash}|~)"
+ end
+
+ def range_number_regex(unit_regex, can_negative)
+ sign = can_negative ? '-?\\s*' : ''
+ real_number = '(\d+|\d+\.\d+)'
+
+ "#{sign}(#{real_number}\\s*#{unit_regex}?\\s*#{range_regex})?#{real_number}\\s*#{unit_regex}"
+ end
+
+ def expand_abb(obj)
+ smis = []
+
+ ABB.each_key do |k|
+ regex = Regexp.new("#{Regexp.escape(k)}#{ending_regex}", true)
+ next unless obj[:text] =~ regex
+ smis.push(ABB[k])
+ end
+
+ smis.uniq
+ end
+
+ def time_regex
+ day = '(days?|d)'
+ hour = '(hours?|h)'
+ minute = '(minutes?|mins?|m)'
+ second = '(seconds?|secs?|s)'
+
+ time_unit = "(#{day}|#{hour}|#{minute}|#{second})"
+ time_regex_str = range_number_regex(time_unit, false)
+
+ /#{beginning_regex}+#{time_regex_str}#{ending_regex}+/i
+ end
+
+ def extract_time_info(obj)
+ matches = []
+
+ obj[:text].scan(time_regex) do
+ m = Regexp.last_match[0]
+ matches << m.gsub(/#{ending_regex}/, ' ').strip
+ end
+
+ ovn_regex = Regexp.union(%w[overnight ovn o/n]).source
+ m = obj[:text].match(/#{beginning_regex}+#{ovn_regex}?#{ending_regex}+/i)
+ matches << '12h ~ 20h' unless m.nil? || m[0].empty?
+
+ return if matches.size.zero?
+
+ obj[:time] = matches.join(' ').gsub(/[()]/, '')
+ end
+
+ def extract_text_info(obj)
+ unless obj[:text].encoding == Encoding::UTF_8
+ t = obj[:text].force_encoding(Encoding::CP1252).encode(Encoding::UTF_8)
+ obj[:text] = t
+ end
+
+ yield_regex_str = range_number_regex('%', false)
+ yield_regex = /#{beginning_regex}+#{yield_regex_str}#{ending_regex}+/
+ text_regex(obj, yield_regex, 'yield')
+
+ extract_temperature(obj)
+ extract_time_info(obj)
+ end
+
+ def extract_temperature(obj)
+ temperature_regex_str = range_number_regex(degree_regex, true)
+ temperature_regex = /#{beginning_regex}+#{temperature_regex_str}#{ending_regex}+/
+
+ text_regex(obj, temperature_regex, 'temperature')
+
+ m = obj[:text].match(/#{beginning_regex}+r\.?t\.?#{ending_regex}+/i)
+ return if m.nil? || m[0].empty?
+
+ degree = unicode("\u00B0")
+ obj[:temperature] = (obj[:temperature] || '') + "20#{degree}C ~ 25#{degree}C"
+ end
+
+ def text_regex(obj, regex, field)
+ m = obj[:text].match(regex)
+ return if m.nil?
+ matched = m[0]
+ return if matched.empty?
+
+ obj[field.to_sym] = matched.gsub(/#{ending_regex}/, ' ').strip
+ obj[field.to_sym] = matched.gsub(/#{beginning_regex}/, ' ').strip
+ end
+end
diff --git a/app/assets/javascripts/components.js b/app/assets/javascripts/components.js
index eb0cc6ed2c..7d07f910f1 100644
--- a/app/assets/javascripts/components.js
+++ b/app/assets/javascripts/components.js
@@ -2,8 +2,8 @@
var React = require('react');
var Home = require('./libHome/Home');
-var Docx = require('./components/docx/DocxContainer');
var CnC = require('./libCnC/CnC');
+var ChemRead = require('./components/chemread/ChemReadContainer');
var App = require('./components/App');
//= require_self
diff --git a/app/assets/javascripts/components/chemread/ChemRead.js b/app/assets/javascripts/components/chemread/ChemRead.js
new file mode 100644
index 0000000000..45b8910303
--- /dev/null
+++ b/app/assets/javascripts/components/chemread/ChemRead.js
@@ -0,0 +1,189 @@
+import React from 'react';
+import {
+ PanelGroup, Panel, ListGroup, ListGroupItem, Grid, Col, Radio
+} from 'react-bootstrap';
+import Dropzone from 'react-dropzone';
+
+import SmilesEditing from './SmilesEditing';
+import RsmiItemContainer from './RsmiItemContainer';
+import DeleteBtn from './DeleteBtn';
+
+class ClickableBtn extends React.Component {
+ constructor() {
+ super();
+ this.onClick = this.onClick.bind(this);
+ }
+
+ onClick(e) {
+ const { obj, onClick } = this.props;
+ e.preventDefault();
+ onClick(obj);
+ }
+
+ render() {
+ return (
+
+ );
+ }
+}
+
+ClickableBtn.propTypes = {
+ onClick: React.PropTypes.func.isRequired,
+ text: React.PropTypes.string.isRequired,
+ style: React.PropTypes.object,
+ obj: React.PropTypes.object.isRequired
+};
+
+ClickableBtn.defaultProps = {
+ style: {}
+};
+
+function ChemRead({
+ files, selected, getMol, addFile, removeFile, changeType,
+ selectSmi, removeSmi, editSmiles, exportSmi
+}) {
+ let listItems = ;
+ let fileContents = ;
+ let disabled = true;
+ let selectedEditSmiles = '';
+
+ if (selected.length > 0) disabled = false;
+ if (selected.length === 1) {
+ const s = selected[0];
+ const file = files.filter(x => x.uid === s.uid);
+ if (file && file[0] && file[0].info && file[0].info[s.smiIdx]) {
+ selectedEditSmiles = file[0].info[s.smiIdx].editedSmi || '';
+ }
+ }
+
+ if (files.length > 0) {
+ listItems = files.map(x => (
+
+
+
+ ));
+
+ fileContents = (
+
+ {files.map((x, index) => (
+
+
+ {x.info.map((i, idx) => (
+
+ ))}
+
+
+ ))}
+
+ );
+ }
+
+ return (
+
+
+
+
+ Export
+
+
+
+
+
+
+
+ SMILES Editing
+
+
+
+
+
+
+
+
+
+ Molecules
+
+
+ Reactions
+
+
+
+
addFile(file)}
+ >
+ Drop Files, or Click to add File.
+
+
+ {listItems}
+
+
+
+
+ {fileContents}
+
+
+
+ );
+}
+
+ChemRead.propTypes = {
+ files: React.PropTypes.arrayOf(React.PropTypes.object).isRequired,
+ selected: React.PropTypes.arrayOf(React.PropTypes.object).isRequired,
+ addFile: React.PropTypes.func.isRequired,
+ removeFile: React.PropTypes.func.isRequired,
+ selectSmi: React.PropTypes.func.isRequired,
+ removeSmi: React.PropTypes.func.isRequired,
+ changeType: React.PropTypes.func.isRequired,
+ editSmiles: React.PropTypes.func.isRequired,
+ exportSmi: React.PropTypes.func.isRequired,
+ getMol: React.PropTypes.bool.isRequired
+};
+
+export default ChemRead;
diff --git a/app/assets/javascripts/components/chemread/ChemReadContainer.js b/app/assets/javascripts/components/chemread/ChemReadContainer.js
new file mode 100644
index 0000000000..3c6b41b88a
--- /dev/null
+++ b/app/assets/javascripts/components/chemread/ChemReadContainer.js
@@ -0,0 +1,335 @@
+import React from 'react';
+import ReactDOM from 'react-dom';
+import uuid from 'uuid';
+import _ from 'lodash';
+import 'whatwg-fetch';
+import XLSX from 'xlsx';
+
+import { solvents } from '../staticDropdownOptions/reagents/solvents';
+
+import ChemRead from './ChemRead';
+import NotificationActions from '../actions/NotificationActions';
+
+function fetchInfo(files, getMol) {
+ const data = new FormData();
+ data.append('get_mol', getMol);
+ files.forEach(file => data.append(file.uid, file.file));
+
+ return fetch('/api/v1/chemread/embedded/upload', {
+ credentials: 'same-origin',
+ method: 'post',
+ body: data
+ }).then((response) => {
+ if (response.ok === false) {
+ let msg = 'Files uploading failed: ';
+ if (response.status === 413) {
+ msg += 'File size limit exceeded. Max size is 50MB';
+ } else {
+ msg += response.statusText;
+ }
+
+ NotificationActions.add({
+ message: msg,
+ level: 'error'
+ });
+ }
+ return response.json();
+ });
+}
+
+function fetchSvgFromSmis(smiArr) {
+ return fetch('/api/v1/chemread/svg/smi', {
+ credentials: 'same-origin',
+ method: 'post',
+ headers: {
+ Accept: 'application/json',
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify({ smiArr })
+ }).then((response) => {
+ if (response.ok === false) {
+ let msg = 'Files uploading failed: ';
+ if (response.status === 413) {
+ msg += 'File size limit exceeded. Max size is 50MB';
+ } else {
+ msg += response.statusText;
+ }
+
+ NotificationActions.add({
+ message: msg,
+ level: 'error'
+ });
+ }
+ return response.json();
+ });
+}
+
+function generateTextFromInfo(name, info) {
+ if (!info) return '';
+
+ const descArr = [];
+
+ Object.keys(info).forEach((key) => {
+ const desc = info[key];
+ if (!desc) return;
+ descArr.push(`${name} ${key}:`);
+
+ Object.keys(desc).forEach((x) => {
+ const dProp = desc[x];
+ if (!dProp) return;
+
+ if (x === 'detail') {
+ Object.keys(dProp).forEach((propKey) => {
+ if (propKey === 'ID' || propKey === 'parentID' || !dProp[propKey]) return;
+ descArr.push(` - ${propKey}: ${dProp[propKey]}`);
+ });
+ } else {
+ if (!desc[x]) return;
+ descArr.push(` - ${x}: ${desc[x]}`);
+ }
+ });
+ });
+
+ return descArr.join('\n');
+}
+
+function generateExportRow(info) {
+ const row = [];
+ const smiArr = info.smi.split('>');
+ let solventsAdded = '';
+
+ if (info.editedSmi && info.editedSmi !== '') {
+ const editedSmiArr = info.editedSmi.split(',');
+ solventsAdded = editedSmiArr.filter(x => (
+ Object.values(solvents).indexOf(x) > -1
+ )).join(',');
+
+ const allSolvents = smiArr[1].split('.').concat(editedSmiArr);
+ smiArr[1] = allSolvents.filter(x => x).join('.');
+ }
+
+ const temperature = [];
+ const time = [];
+ const reactionDesc = [];
+ const reactionYield = [];
+
+ let reactantDescs = '';
+ let productDescs = '';
+
+ if (info.desc) {
+ if (info.desc.reagents) {
+ Object.keys(info.desc.reagents).forEach((key) => {
+ const desc = info.desc.reagents[key];
+ temperature.push(desc.temperature);
+ time.push(desc.time);
+ reactionYield.push(desc.yield);
+ reactionDesc.push(`- Description: ${desc.text}`);
+ });
+ }
+
+ if (info.desc.detail) {
+ Object.keys(info.desc.detail).forEach((k) => {
+ const details = info.desc.detail[k];
+
+ details.forEach((detail, idx) => {
+ const detailKey = details.length === 1 ? k : `${k} ${idx + 1}`;
+ const dconstructor = detail.constructor;
+
+ if (dconstructor === Object) {
+ Object.keys(detail).forEach((dkey) => {
+ if (!detail[dkey]) return;
+ reactionDesc.push(`- ${dkey}: ${detail[dkey]}`);
+ });
+ } else if (dconstructor === String) {
+ if (!detail) return;
+ reactionDesc.push(`- ${detailKey}: ${detail}`);
+ }
+ });
+ });
+ }
+
+ reactantDescs = generateTextFromInfo('Reactant', info.desc.reactants);
+ productDescs = generateTextFromInfo('Product', info.desc.products);
+ }
+
+ row.push(smiArr.join('>'));
+ row.push(solventsAdded);
+
+ row.push(temperature.filter(x => x).join(';'));
+ row.push(reactionYield.filter(x => x).join(';'));
+ row.push(time.filter(x => x).join(';'));
+ row.push(reactionDesc.filter(x => x).join('\n'));
+
+ row.push(reactantDescs);
+ row.push(productDescs);
+
+ return row;
+}
+
+class ChemReadContainer extends React.Component {
+ constructor() {
+ super();
+ this.state = {
+ files: [],
+ getMol: false,
+ selected: []
+ };
+
+ this.addFile = this.addFile.bind(this);
+ this.removeFile = this.removeFile.bind(this);
+ this.selectSmi = this.selectSmi.bind(this);
+ this.removeSmi = this.removeSmi.bind(this);
+ this.exportSmi = this.exportSmi.bind(this);
+ this.editSmiles = this.editSmiles.bind(this);
+ this.changeType = this.changeType.bind(this);
+ }
+
+ addFile(files) {
+ const fileArr = [];
+ files.forEach((file) => {
+ const fileObj = {};
+ fileObj.uid = uuid.v1();
+ fileObj.name = file.name;
+ fileObj.file = file;
+ fileArr.push(fileObj);
+ });
+
+ let rsmis = [];
+ fetchInfo(fileArr, this.state.getMol).then((res) => {
+ rsmis = [].concat(res.embedded);
+ this.setState({ files: this.state.files.concat(rsmis) });
+ });
+ }
+
+ removeFile(file) {
+ let files = _.cloneDeep(this.state.files);
+ let selected = _.cloneDeep(this.state.selected);
+ files = files.filter(x => x.uid !== file.uid);
+ selected = selected.filter(x => x.uid !== file.uid);
+
+ this.setState({ files, selected });
+ }
+
+ selectSmi(uid, smiIdx) {
+ const selected = [...this.state.selected];
+ const s = selected.findIndex(x => x.uid === uid && x.smiIdx === smiIdx);
+ if (s >= 0) {
+ selected.splice(s, 1);
+ } else {
+ selected.push({ uid, smiIdx });
+ }
+
+ this.setState({ selected });
+ }
+
+ removeSmi(obj) {
+ const { uid, idx } = obj;
+ const files = [...this.state.files];
+ const fileIdx = files.findIndex(x => x.uid === uid);
+ files[fileIdx].info.splice(idx, 1);
+ this.setState({ files });
+ }
+
+ exportSmi(obj) {
+ const exportAll = obj.all;
+ const files = [...this.state.files];
+
+ const headerRow = [
+ 'ReactionSmiles', 'Solvents',
+ 'Temperature', 'Yield', 'Time', 'Description',
+ 'StartingMaterialsDescription', 'ProductsDescription'
+ ];
+ let rows = [headerRow];
+
+ if (exportAll) {
+ files.forEach((val) => {
+ const smis = val.info.map(x => generateExportRow(x));
+ rows = rows.concat(smis);
+ }, []);
+ } else {
+ const selected = [...this.state.selected];
+ selected.forEach((x) => {
+ const fileIdx = files.findIndex(f => f.uid === x.uid);
+ const smis = generateExportRow(files[fileIdx].info[x.smiIdx]);
+ rows.push(smis);
+ });
+ }
+
+ const wb = {};
+ const ws = XLSX.utils.aoa_to_sheet(rows);
+ const wsName = 'ChemRead';
+
+ wb.SheetNames = [];
+ wb.Sheets = {};
+ wb.SheetNames.push(wsName);
+ wb.Sheets[wsName] = ws;
+
+ XLSX.writeFile(wb, 'chemread.xlsx', { bookSST: true });
+ }
+
+ changeType() {
+ this.setState({ getMol: !this.state.getMol });
+ }
+
+ editSmiles(solventSmi) {
+ const files = _.cloneDeep(this.state.files);
+ const { selected } = this.state;
+ const addedSmi = [];
+
+ selected.forEach((s) => {
+ const file = files.filter(x => x.uid === s.uid);
+ const info = file[0].info[s.smiIdx];
+ const solventSmiArr = solventSmi.split(',').filter(x => x);
+
+ let newEditedSmi = solventSmiArr;
+ if (selected.length > 1) {
+ newEditedSmi = (info.editedSmi || '').split(',').concat(solventSmiArr);
+ }
+ newEditedSmi = [...new Set(newEditedSmi)];
+ info.editedSmi = newEditedSmi.filter(x => x).join(',');
+
+ const smiArr = info.smi.split('>');
+ let newSolvents = smiArr[1].split('.').concat(newEditedSmi);
+ newSolvents = [...new Set(newSolvents)];
+ smiArr[1] = newSolvents.filter(x => x).join('.');
+ const newSmi = smiArr.join('>');
+ addedSmi.push({ uid: s.uid, smiIdx: s.smiIdx, newSmi });
+ });
+
+ fetchSvgFromSmis(addedSmi).then((r) => {
+ r.svg.forEach((svgInfo) => {
+ const file = files.filter(x => x.uid === svgInfo.uid)[0];
+ if (!file) return;
+ file.info[svgInfo.smiIdx].svg = svgInfo.svg;
+ });
+
+ this.setState({ files });
+ });
+ }
+
+ render() {
+ const { files, selected, getMol } = this.state;
+
+ return (
+
+
+
+ );
+ }
+}
+
+document.addEventListener('DOMContentLoaded', () => {
+ const chemReadDOM = document.getElementById('ChemRead');
+ if (chemReadDOM) ReactDOM.render(, chemReadDOM);
+});
diff --git a/app/assets/javascripts/components/chemread/ChemReadObjectHelper.js b/app/assets/javascripts/components/chemread/ChemReadObjectHelper.js
new file mode 100644
index 0000000000..1cb6ae4092
--- /dev/null
+++ b/app/assets/javascripts/components/chemread/ChemReadObjectHelper.js
@@ -0,0 +1,59 @@
+const ChemReadObjectHelper = {
+ renderSvg(svg) {
+ let newSvg = svg.replace(//, '');
+ const viewBox = svg.match(/viewBox="(.*)"/)[1];
+ newSvg = newSvg.replace(//, '');
+ newSvg = newSvg.replace(/<\/svg><\/svg>/, '');
+ const svgDOM = new DOMParser().parseFromString(newSvg, 'image/svg+xml');
+ const editedSvg = svgDOM.documentElement;
+ editedSvg.removeAttribute('width');
+ editedSvg.removeAttribute('height');
+ editedSvg.setAttribute('viewBox', viewBox);
+ editedSvg.setAttribute('width', '100%');
+ return editedSvg.outerHTML;
+ },
+ extractDetails(desc) {
+ if (Object.keys(desc).includes('time')) {
+ return { description: desc.detail };
+ }
+
+ const details = {};
+ Object.keys(desc).forEach((k) => {
+ if (!desc[k]) return;
+
+ if (k === 'detail') {
+ const detailOutline = desc[k];
+
+ Object.keys(detailOutline).forEach((dk) => {
+ const detailList = detailOutline[dk];
+
+ detailList.forEach((detail, idx) => {
+ const detailKey = detailList.length === 1 ? dk : `${dk} ${idx + 1}`;
+ const dconstructor = detail.constructor;
+
+ if (dconstructor === Object) {
+ details[detailKey] = detail;
+ } else if (dconstructor === String) {
+ const trimmedDetail = detail.trim();
+ if (trimmedDetail) {
+ const dobj = {};
+ dobj[detailKey] = trimmedDetail;
+ details[dk] = Object.assign(details[dk] || {}, dobj);
+ }
+ }
+ });
+ });
+ } else {
+ Object.keys(desc[k]).forEach((d) => {
+ const dk = k.endsWith('s') ? k.slice(0, -1) : k;
+ const dkey = `${dk} ${parseInt(d, 10) + 1}`;
+ details[dkey] = desc[k][d].detail;
+ });
+ }
+ });
+
+ return details;
+ }
+};
+
+module.exports = ChemReadObjectHelper;
diff --git a/app/assets/javascripts/components/chemread/DeleteBtn.js b/app/assets/javascripts/components/chemread/DeleteBtn.js
new file mode 100644
index 0000000000..20b54724c0
--- /dev/null
+++ b/app/assets/javascripts/components/chemread/DeleteBtn.js
@@ -0,0 +1,29 @@
+import React from 'react';
+
+export default class DeleteBtn extends React.Component {
+ constructor() {
+ super();
+ this.onClick = this.onClick.bind(this);
+ }
+
+ onClick() {
+ const { obj, onClick } = this.props;
+ onClick(obj);
+ }
+
+ render() {
+ return (
+
+ );
+ }
+}
+
+DeleteBtn.propTypes = {
+ onClick: React.PropTypes.func.isRequired,
+ obj: React.PropTypes.object.isRequired
+};
diff --git a/app/assets/javascripts/components/chemread/ListProps.js b/app/assets/javascripts/components/chemread/ListProps.js
new file mode 100644
index 0000000000..fe5f1fe3d8
--- /dev/null
+++ b/app/assets/javascripts/components/chemread/ListProps.js
@@ -0,0 +1,35 @@
+import React from 'react';
+import { Label } from 'react-bootstrap';
+
+function ListProps({ label, listProps }) {
+ if (!listProps) return ;
+ if (Object.values(listProps).filter(x => x).length === 0) return ();
+
+ const list = Object.keys(listProps).filter(x => (
+ x !== 'ID' && x !== 'parentID' && listProps[x] && typeof listProps[x] !== 'object'
+ ));
+ if (list.length === 0) return ;
+
+ const propsList = list.map(k => (
+
+ {`${k}: `}
+ {listProps[k]}
+
+ ));
+
+ return (
+
+ );
+}
+
+ListProps.propTypes = {
+ label: React.PropTypes.string.isRequired,
+ listProps: React.PropTypes.object.isRequired
+};
+
+export default ListProps;
diff --git a/app/assets/javascripts/components/chemread/RsmiItem.js b/app/assets/javascripts/components/chemread/RsmiItem.js
new file mode 100644
index 0000000000..960b495ffd
--- /dev/null
+++ b/app/assets/javascripts/components/chemread/RsmiItem.js
@@ -0,0 +1,81 @@
+import React from 'react';
+import { ListGroupItem } from 'react-bootstrap';
+import SvgFileZoomPan from 'react-svg-file-zoom-pan';
+
+import DeleteBtn from './DeleteBtn';
+import ListProps from './ListProps';
+import XmlDetails from './XmlDetails';
+
+function RsmiItem({
+ desc, details, idx, removeSmi, svg, smi, selectSmi, selected, uid
+}) {
+ const className = selected ? 'list-group-item-info' : '';
+
+ const descList = [];
+ if (Object.keys(desc).includes('time')) {
+ const el = ;
+ descList.push(el);
+ } else {
+ Object.keys(desc).forEach((group) => {
+ if (group === 'detail') return;
+
+ Object.keys(desc[group]).forEach((d) => {
+ const dgroup = group.endsWith('s') ? group.slice(0, -1) : group;
+ let label = dgroup;
+ if (group !== 'reagents') {
+ label = `${dgroup} ${parseInt(d, 10) + 1}`;
+ }
+
+ const list = (
+
+ );
+ descList.push(list);
+ });
+ });
+ }
+
+ return (
+
+
+
+
+ );
+}
+
+RsmiItem.propTypes = {
+ desc: React.PropTypes.object.isRequired,
+ details: React.PropTypes.object.isRequired,
+ selectSmi: React.PropTypes.func.isRequired,
+ removeSmi: React.PropTypes.func.isRequired,
+ uid: React.PropTypes.string.isRequired,
+ svg: React.PropTypes.string.isRequired,
+ smi: React.PropTypes.string.isRequired,
+ idx: React.PropTypes.number.isRequired,
+ selected: React.PropTypes.bool.isRequired
+};
+
+export default RsmiItem;
diff --git a/app/assets/javascripts/components/chemread/RsmiItemContainer.js b/app/assets/javascripts/components/chemread/RsmiItemContainer.js
new file mode 100644
index 0000000000..1fbf314763
--- /dev/null
+++ b/app/assets/javascripts/components/chemread/RsmiItemContainer.js
@@ -0,0 +1,61 @@
+import React from 'react';
+
+import RsmiItem from './RsmiItem';
+import { renderSvg, extractDetails } from './ChemReadObjectHelper';
+
+export default class RsmiItemContainer extends React.Component {
+ constructor() {
+ super();
+
+ this.selectSmi = this.selectSmi.bind(this);
+ }
+
+ selectSmi() {
+ const { uid, idx } = this.props;
+ this.props.selectSmi(uid, idx);
+ }
+
+ render() {
+ const {
+ uid, idx, selected, content, removeSmi
+ } = this.props;
+ const {
+ svg, smi, desc, editedSmi
+ } = content;
+
+ const isSelected = selected.filter(x => (
+ x.uid === uid && x.smiIdx === idx
+ )).length > 0;
+
+ let displayedSmi = smi;
+ if (editedSmi && editedSmi !== '') {
+ const smiArr = smi.split('>');
+ const allSolvents = smiArr[1].split('.').concat(editedSmi.split(','));
+ smiArr[1] = allSolvents.filter(x => x).join('.');
+ displayedSmi = smiArr.join('>');
+ }
+
+ return (
+
+ );
+ }
+}
+
+RsmiItemContainer.propTypes = {
+ selectSmi: React.PropTypes.func.isRequired,
+ removeSmi: React.PropTypes.func.isRequired,
+ uid: React.PropTypes.string.isRequired,
+ content: React.PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types
+ idx: React.PropTypes.number.isRequired,
+ selected: React.PropTypes.arrayOf(React.PropTypes.shape).isRequired
+};
diff --git a/app/assets/javascripts/components/chemread/SelectWrapper.js b/app/assets/javascripts/components/chemread/SelectWrapper.js
new file mode 100644
index 0000000000..7b7cdf5541
--- /dev/null
+++ b/app/assets/javascripts/components/chemread/SelectWrapper.js
@@ -0,0 +1,66 @@
+import React from 'react';
+import VirtualizedSelect from 'react-virtualized-select';
+
+class SelectWrapper extends React.Component {
+ constructor(props) {
+ super(props);
+ this.state = { value: props.value || '' };
+
+ this.onSelect = this.onSelect.bind(this);
+ }
+
+ componentWillReceiveProps(nextProps) {
+ const { value } = nextProps;
+ this.setState({ value });
+ }
+
+ onSelect(selected) {
+ const { onSelect, title } = this.props;
+ onSelect({ value: selected, type: title });
+ }
+
+ render() {
+ const { obj, title, disabled } = this.props;
+ const { value } = this.state;
+ const options = [];
+ const editedSmi = [];
+
+ Object.keys(obj).forEach((k) => {
+ const opt = { label: k, value: obj[k] };
+ options.push(opt);
+
+ const valueArr = value.split(',');
+ if (valueArr.indexOf(obj[k]) > -1) {
+ editedSmi.push(obj[k]);
+ }
+ });
+
+ return (
+
+ );
+ }
+}
+
+SelectWrapper.propTypes = {
+ obj: React.PropTypes.object.isRequired,
+ title: React.PropTypes.string,
+ value: React.PropTypes.string,
+ disabled: React.PropTypes.bool,
+ onSelect: React.PropTypes.func.isRequired
+};
+
+SelectWrapper.defaultProps = {
+ title: '',
+ disabled: true
+};
+
+export default SelectWrapper;
diff --git a/app/assets/javascripts/components/chemread/SmilesEditing.js b/app/assets/javascripts/components/chemread/SmilesEditing.js
new file mode 100644
index 0000000000..c1c62ea859
--- /dev/null
+++ b/app/assets/javascripts/components/chemread/SmilesEditing.js
@@ -0,0 +1,129 @@
+import React from 'react';
+import { FormGroup, ControlLabel } from 'react-bootstrap';
+
+import { catalyst } from '../staticDropdownOptions/reagents/catalyst';
+import { chiralAuxiliaries } from '../staticDropdownOptions/reagents/chiral_auxiliaries';
+import { couplingReagents } from '../staticDropdownOptions/reagents/coupling_reagents';
+import { fluorination } from '../staticDropdownOptions/reagents/fluorination';
+import { halogenationBrClI } from '../staticDropdownOptions/reagents/halogenation_BrClI';
+import { ionicLiquids } from '../staticDropdownOptions/reagents/ionic_liquids';
+import { lewisAcids } from '../staticDropdownOptions/reagents/lewis_acids';
+import { ligands } from '../staticDropdownOptions/reagents/ligands';
+import { metallorganics } from '../staticDropdownOptions/reagents/metallorganics';
+import { orgBases } from '../staticDropdownOptions/reagents/org_bases';
+import { organoboron } from '../staticDropdownOptions/reagents/organoboron';
+import { organocatalysts } from '../staticDropdownOptions/reagents/organocatalysts';
+import { oxidation } from '../staticDropdownOptions/reagents/oxidation';
+import { phaseTransferReagents } from '../staticDropdownOptions/reagents/phase_transfer_reagents';
+import { reducingReagents } from '../staticDropdownOptions/reagents/reducing_reagents';
+import { solvents } from '../staticDropdownOptions/reagents/solvents';
+
+import SelectWrapper from './SelectWrapper';
+
+function partitionSolventsReagents(value) {
+ const selectedSolvents = [];
+ const selectedReagents = [];
+
+ value.split(',').forEach((x) => {
+ if (Object.values(solvents).indexOf(x) > -1) {
+ selectedSolvents.push(x);
+ } else {
+ selectedReagents.push(x);
+ }
+ });
+
+ return {
+ solvents: selectedSolvents,
+ reagents: selectedReagents
+ };
+}
+
+class SmilesEditing extends React.Component {
+ constructor(props) {
+ super(props);
+
+ this.reagentsOpts = Object.assign(
+ {}, ionicLiquids, catalyst, ligands,
+ chiralAuxiliaries, couplingReagents, halogenationBrClI, fluorination,
+ orgBases, lewisAcids, organocatalysts, organoboron, metallorganics,
+ oxidation, reducingReagents, phaseTransferReagents
+ );
+
+ const partition = partitionSolventsReagents(props.value);
+ this.state = {
+ selectedReagents: partition.reagents,
+ selectedSolvents: partition.solvents
+ };
+
+ this.onSelect = this.onSelect.bind(this);
+ }
+
+ componentWillReceiveProps(nextProps) {
+ const { value } = nextProps;
+
+ const partition = partitionSolventsReagents(value);
+ this.setState({
+ selectedReagents: partition.reagents,
+ selectedSolvents: partition.solvents
+ });
+ }
+
+ onSelect(selected) {
+ const { editFunc } = this.props;
+ const { selectedReagents, selectedSolvents } = this.state;
+
+ let selectedArr = selected.value.split(',');
+ if (selected.type === 'Solvents') {
+ selectedArr = selectedArr.concat(selectedReagents);
+ } else {
+ selectedArr = selectedArr.concat(selectedSolvents);
+ }
+
+ selectedArr = [...new Set(selectedArr.filter(x => x))];
+ editFunc(selectedArr.join(','));
+ }
+
+ render() {
+ const { disabled } = this.props;
+ const { selectedReagents, selectedSolvents } = this.state;
+
+ return (
+
+
+ Solvents
+
+
+
+ Reagents
+
+
+
+ );
+ }
+}
+
+SmilesEditing.propTypes = {
+ editFunc: React.PropTypes.func.isRequired,
+ value: React.PropTypes.string,
+ disabled: React.PropTypes.bool
+};
+
+SmilesEditing.defaultProps = {
+ value: '',
+ disabled: true
+};
+
+export default SmilesEditing;
diff --git a/app/assets/javascripts/components/chemread/XmlDetails.js b/app/assets/javascripts/components/chemread/XmlDetails.js
new file mode 100644
index 0000000000..513934c602
--- /dev/null
+++ b/app/assets/javascripts/components/chemread/XmlDetails.js
@@ -0,0 +1,74 @@
+import React from 'react';
+
+import ListProps from './ListProps';
+
+export default class XmlDetails extends React.Component {
+ constructor() {
+ super();
+ this.state = {
+ expand: false
+ };
+
+ this.onClick = this.onClick.bind(this);
+ }
+
+ onClick() {
+ const { expand } = this.state;
+ this.setState({ expand: !expand });
+ }
+
+ render() {
+ const { details } = this.props;
+ if (!details) return ();
+ if (Object.values(details).filter(x => x).length === 0) return ();
+
+ const { expand } = this.state;
+ const iconClass = expand ? 'fa-angle-down' : 'fa-angle-right';
+ const iconText = expand ? 'Hide' : 'More';
+ const expandBtn = (
+
+ );
+
+ const detailsList = Object.keys(details).filter(x => x && details[x]).reduce((acc, k) => {
+ const val = details[k];
+ if (val instanceof Array) {
+ const els = val.map((v, idx) => {
+ const label = `${k} ${idx + 1}`;
+ return (
+
+ );
+ });
+ return acc.concat(els);
+ }
+
+ const el = (
+
+ );
+
+ acc.push(el);
+ return acc;
+ }, []);
+
+ return (
+
+
+ {expandBtn}
+
+
+ {expand ? detailsList : }
+
+
+ );
+ }
+}
+
+XmlDetails.propTypes = {
+ details: React.PropTypes.object.isRequired
+};
diff --git a/app/assets/javascripts/components/docx/Docx.js b/app/assets/javascripts/components/docx/Docx.js
deleted file mode 100644
index c724080bf7..0000000000
--- a/app/assets/javascripts/components/docx/Docx.js
+++ /dev/null
@@ -1,139 +0,0 @@
-import React from 'react';
-import {
- PanelGroup, ListGroup, ListGroupItem, Grid, Row, Col, Panel
-} from 'react-bootstrap';
-import Dropzone from 'react-dropzone';
-
-import Navigation from '../Navigation';
-import SmilesEditing from './SmilesEditing';
-import RsmiItem from './RsmiItem';
-
-class CloseBtn extends React.Component {
- constructor() {
- super();
- this.onClick = this.onClick.bind(this);
- }
-
- onClick() {
- const { obj, onClick } = this.props;
- onClick(obj);
- }
-
- render() {
- return (
-
- );
- }
-}
-
-function Docx({
- files, selected, addFile, removeFile, selectSmi, editSmiles
-}) {
- let listItems = ;
- let fileContents = ;
- let disabled = true;
- if (selected.length > 0) disabled = false;
-
- if (files.length > 0) {
- listItems = files.map(x => (
-
-
-
- ));
-
- fileContents = (
-
- {files.map((x, index) => (
-
-
- {x.rsmi.map((i, idx) => (
-
- ))}
-
-
- ))}
-
- );
- }
-
- return (
-
-
-
-
-
-
- addFile(file)}
- >
- Drop Files, or Click to add File.
-
-
- {listItems}
-
-
-
-
-
- SMILES Editing
-
-
-
-
-
-
-
-
-
-
- {fileContents}
-
-
-
-
- );
-}
-
-Docx.propTypes = {
- files: React.PropTypes.arrayOf(React.PropTypes.object).isRequired,
- selected: React.PropTypes.arrayOf(React.PropTypes.object).isRequired,
- addFile: React.PropTypes.func.isRequired,
- removeFile: React.PropTypes.func.isRequired,
- selectSmi: React.PropTypes.func.isRequired,
- editSmiles: React.PropTypes.func.isRequired
-};
-
-CloseBtn.propTypes = {
- onClick: React.PropTypes.func.isRequired,
- obj: React.PropTypes.object.isRequired
-};
-
-
-export default Docx;
diff --git a/app/assets/javascripts/components/docx/DocxContainer.js b/app/assets/javascripts/components/docx/DocxContainer.js
deleted file mode 100644
index e1e6c25dad..0000000000
--- a/app/assets/javascripts/components/docx/DocxContainer.js
+++ /dev/null
@@ -1,161 +0,0 @@
-import React from 'react';
-import ReactDOM from 'react-dom';
-import uuid from 'uuid';
-import _ from 'lodash';
-import 'whatwg-fetch';
-
-import Docx from './Docx';
-import NotificationActions from '../actions/NotificationActions';
-
-function fetchRsmiAndSvg(files) {
- const data = new FormData();
- files.forEach(file => data.append(file.uid, file.file));
-
- return fetch('/api/v1/docx/embedded/upload', {
- credentials: 'same-origin',
- method: 'post',
- body: data
- }).then((response) => {
- if (response.ok === false) {
- let msg = 'Files uploading failed: ';
- if (response.status === 413) {
- msg += 'File size limit exceeded. Max size is 50MB';
- } else {
- msg += response.statusText;
- }
-
- NotificationActions.add({
- message: msg,
- level: 'error'
- });
- }
- return response.json();
- });
-}
-
-function fetchSvgFromSmis(smiArr) {
- return fetch('/api/v1/docx/svg/smi', {
- credentials: 'same-origin',
- method: 'post',
- headers: {
- Accept: 'application/json',
- 'Content-Type': 'application/json'
- },
- body: JSON.stringify({ smiArr })
- }).then((response) => {
- if (response.ok === false) {
- let msg = 'Files uploading failed: ';
- if (response.status === 413) {
- msg += 'File size limit exceeded. Max size is 50MB';
- } else {
- msg += response.statusText;
- }
-
- NotificationActions.add({
- message: msg,
- level: 'error'
- });
- }
- return response.json();
- });
-}
-
-class DocxContainer extends React.Component {
- constructor() {
- super();
- this.state = {
- files: [],
- selected: []
- };
-
- this.addFile = this.addFile.bind(this);
- this.removeFile = this.removeFile.bind(this);
- this.selectSmi = this.selectSmi.bind(this);
- this.editSmiles = this.editSmiles.bind(this);
- }
-
- addFile(files) {
- const fileArr = [];
- files.forEach((file) => {
- const fileObj = {};
- fileObj.uid = uuid.v1();
- fileObj.name = file.name;
- fileObj.file = file;
- fileArr.push(fileObj);
- });
-
- let rsmis = [];
- fetchRsmiAndSvg(fileArr).then((res) => {
- rsmis = [].concat(res.embedded);
- this.setState({ files: this.state.files.concat(rsmis) });
- });
- }
-
- removeFile(file) {
- let files = [...this.state.files];
- files = files.filter(x => x.uid !== file.uid);
- this.setState({ files });
- }
-
- selectSmi(uid, rsmiIdx) {
- const selected = [...this.state.selected];
- const s = selected.findIndex(x => x.uid === uid && x.rsmiIdx === rsmiIdx);
- if (s >= 0) {
- selected.splice(s, 1);
- } else {
- selected.push({ uid, rsmiIdx });
- }
-
- this.setState({ selected });
- }
-
- editSmiles(solventSmi) {
- const files = _.cloneDeep(this.state.files);
- const { selected } = this.state;
- const addedSmi = [];
-
- selected.forEach((s) => {
- const file = files.filter(x => x.uid === s.uid);
- if (!file) return;
- const smiArr = file[0].rsmi[s.rsmiIdx].smi.split('>');
- /* const curSolventSmi = smiArr[1] === '' ? '' : `${smiArr[1]}.`;
- * smiArr[1] = curSolventSmi.concat(`${solventSmi}`); */
- smiArr[1] = solventSmi;
- const newSmi = smiArr.join('>');
- file[0].rsmi[s.rsmiIdx].smi = newSmi;
- addedSmi.push({ uid: s.uid, rsmiIdx: s.rsmiIdx, newSmi });
- });
-
- fetchSvgFromSmis(addedSmi).then((r) => {
- r.svg.forEach((svgInfo) => {
- const file = files.filter(x => x.uid === svgInfo.uid)[0];
- if (!file) return;
- file.rsmi[svgInfo.rsmiIdx].svg = svgInfo.svg;
- });
-
- this.setState({ files });
- });
- }
-
- render() {
- const { files, selected } = this.state;
-
- return (
-
-
-
- );
- }
-}
-
-document.addEventListener('DOMContentLoaded', () => {
- const docxDOM = document.getElementById('Docx');
- if (docxDOM) ReactDOM.render(, docxDOM);
-});
diff --git a/app/assets/javascripts/components/docx/RsmiItem.js b/app/assets/javascripts/components/docx/RsmiItem.js
deleted file mode 100644
index 349074f979..0000000000
--- a/app/assets/javascripts/components/docx/RsmiItem.js
+++ /dev/null
@@ -1,62 +0,0 @@
-import React from 'react';
-import { ListGroupItem } from 'react-bootstrap';
-import SvgFileZoomPan from 'react-svg-file-zoom-pan';
-
-function renderSvg(svg) {
- let newSvg = svg.replace(//, '');
- const viewBox = svg.match(/viewBox="(.*)"/)[1];
- newSvg = newSvg.replace(//, '');
- newSvg = newSvg.replace(/<\/svg><\/svg>/, '');
- const svgDOM = new DOMParser().parseFromString(newSvg, 'image/svg+xml');
- const editedSvg = svgDOM.documentElement;
- editedSvg.removeAttribute('width');
- editedSvg.removeAttribute('height');
- editedSvg.setAttribute('viewBox', viewBox);
- editedSvg.setAttribute('width', '100%');
- return editedSvg.outerHTML;
-}
-
-export default class RsmiItem extends React.Component {
- constructor() {
- super();
-
- this.selectSmi = this.selectSmi.bind(this);
- }
-
- selectSmi() {
- const { uid, idx } = this.props;
- this.props.selectSmi(uid, idx);
- }
-
- render() {
- const {
- uid, idx, selected, svg, smi
- } = this.props;
- const sel = selected.filter(x => x.uid === uid && x.rsmiIdx === idx);
- const className = sel.length > 0 ? 'list-group-item-info' : '';
-
- return (
-
-
-
- {smi}
-
-
- );
- }
-}
-
-RsmiItem.propTypes = {
- selectSmi: React.PropTypes.func.isRequired,
- uid: React.PropTypes.string.isRequired,
- smi: React.PropTypes.string.isRequired,
- svg: React.PropTypes.string.isRequired,
- idx: React.PropTypes.number.isRequired,
- selected: React.PropTypes.arrayOf(React.PropTypes.object).isRequired,
- children: React.PropTypes.node
-};
diff --git a/app/assets/javascripts/components/docx/SmilesEditing.js b/app/assets/javascripts/components/docx/SmilesEditing.js
deleted file mode 100644
index f844dd5a76..0000000000
--- a/app/assets/javascripts/components/docx/SmilesEditing.js
+++ /dev/null
@@ -1,244 +0,0 @@
-import React from 'react';
-import { FormGroup, ControlLabel } from 'react-bootstrap';
-import Select from 'react-select';
-
-import { catalyst } from '../staticDropdownOptions/reagents/catalyst';
-import { chiralAuxiliaries } from '../staticDropdownOptions/reagents/chiral_auxiliaries';
-import { couplingReagents } from '../staticDropdownOptions/reagents/coupling_reagents';
-import { fluorination } from '../staticDropdownOptions/reagents/fluorination';
-import { halogenationBrClI } from '../staticDropdownOptions/reagents/halogenation_BrClI';
-import { ionicLiquids } from '../staticDropdownOptions/reagents/ionic_liquids';
-import { lewisAcids } from '../staticDropdownOptions/reagents/lewis_acids';
-import { ligands } from '../staticDropdownOptions/reagents/ligands';
-import { metallorganics } from '../staticDropdownOptions/reagents/metallorganics';
-import { orgBases } from '../staticDropdownOptions/reagents/org_bases';
-import { organoboron } from '../staticDropdownOptions/reagents/organoboron';
-import { organocatalysts } from '../staticDropdownOptions/reagents/organocatalysts';
-import { oxidation } from '../staticDropdownOptions/reagents/oxidation';
-import { phaseTransferReagents } from '../staticDropdownOptions/reagents/phase_transfer_reagents';
-import { reducingReagents } from '../staticDropdownOptions/reagents/reducing_reagents';
-
-const solvents = {
- THF: 'C1CCCO1',
- DMF: 'CN(C)C=O',
- DMSO: 'CS(C)=O',
- Chloroform: 'ClC(Cl)Cl',
- 'methylene chloride': 'ClCCl',
- acetone: 'CC(C)=O',
- '1,4-dioxane': 'C1COCCO1',
- 'ethyl acetate': 'CC(OCC)=O',
- 'n-hexane': 'CCCCCC',
- cyclohexane: 'C1CCCCC1',
- 'diethyl ether': 'CCOCC',
- methanol: 'CO',
- ethanol: 'OCC',
- water: '[H]O[H]'
-};
-
-class SelectWrapper extends React.Component {
- constructor() {
- super();
- this.state = { value: '' };
-
- this.onSelect = this.onSelect.bind(this);
- }
-
- onSelect(selected) {
- const { onSelect } = this.props;
- this.setState(
- { value: selected },
- onSelect(selected)
- );
- }
-
- render() {
- const { obj, title, disabled } = this.props;
- const options = Object.keys(obj).map(k => ({ label: k, value: obj[k] }));
-
- return (
-
- );
- }
-}
-
-function SmilesEditing({ editFunc, disabled }) {
- return (
-
-
- Solvents:
-
-
-
- Catalysts:
-
-
-
- Chiral Auxiliaries:
-
-
-
- Coupling Reagents:
-
-
-
- Fluorination:
-
-
-
- Halogenation, Br, Cl, I:
-
-
-
- Ionic Liquids
-
-
-
- (Lewis) Acids
-
-
-
- Ligands:
-
-
-
- Metallorganics:
-
-
-
- Org Bases:
-
-
-
- Organoboron:
-
-
-
- Organocatalysts:
-
-
-
- Oxidation:
-
-
-
- Phase Transfer Reagents:
-
-
-
- Reducing Reagents:
-
-
-
- );
-}
-
-SmilesEditing.propTypes = {
- editFunc: React.PropTypes.func.isRequired,
- disabled: React.PropTypes.bool
-};
-
-SmilesEditing.defaultProps = {
- disabled: true
-};
-
-SelectWrapper.propTypes = {
- obj: React.PropTypes.object.isRequired,
- title: React.PropTypes.string,
- disabled: React.PropTypes.bool,
- onSelect: React.PropTypes.func.isRequired
-};
-
-SelectWrapper.defaultProps = {
- title: '',
- disabled: true
-};
-
-export default SmilesEditing;
diff --git a/app/assets/javascripts/components/staticDropdownOptions/reagents/ionic_liquids.js b/app/assets/javascripts/components/staticDropdownOptions/reagents/ionic_liquids.js
index 1a508de7cf..ff6478750d 100644
--- a/app/assets/javascripts/components/staticDropdownOptions/reagents/ionic_liquids.js
+++ b/app/assets/javascripts/components/staticDropdownOptions/reagents/ionic_liquids.js
@@ -144,4 +144,4 @@ export const ionicLiquids = {
"Trihexyl(tetradecyl)phosphonium Dicyanamide": "CCCCCC[P+](CCCCCC)(CCCCCC)CCCCCCCCCCCCCC.N#C[N-]C#N",
"Trimethylpropylammonium Bis(trifluoromethanesulfonyl)imide": "CCC[N+](C)(C)C.O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O",
"Trimethylsulfonium Iodide": "C[S+](C)C.[I-]",
-}
\ No newline at end of file
+}
diff --git a/app/assets/javascripts/components/staticDropdownOptions/reagents/solvents.js b/app/assets/javascripts/components/staticDropdownOptions/reagents/solvents.js
new file mode 100644
index 0000000000..52b6a235d6
--- /dev/null
+++ b/app/assets/javascripts/components/staticDropdownOptions/reagents/solvents.js
@@ -0,0 +1,17 @@
+export const solvents = {
+ THF: 'C1CCCO1',
+ DMF: 'CN(C)C=O',
+ DMSO: 'CS(C)=O',
+ Chloroform: 'ClC(Cl)Cl',
+ 'methylene chloride': 'ClCCl',
+ acetone: 'CC(C)=O',
+ '1,4-dioxane': 'C1COCCO1',
+ 'ethyl acetate': 'CC(OCC)=O',
+ 'n-hexane': 'CCCCCC',
+ cyclohexane: 'C1CCCCC1',
+ 'diethyl ether': 'CCOCC',
+ methanol: 'CO',
+ ethanol: 'OCC',
+ water: '[H]O[H]'
+};
+
diff --git a/app/assets/stylesheets/chemread.scss b/app/assets/stylesheets/chemread.scss
new file mode 100644
index 0000000000..52af2eee79
--- /dev/null
+++ b/app/assets/stylesheets/chemread.scss
@@ -0,0 +1,227 @@
+.chemread-grid {
+ margin-top: 10px;
+ padding-left: 0px !important;
+ padding-right: 0px !important;
+
+ .chemread-round-border {
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ }
+
+ .chemread-export {
+ margin-right: 18px;
+
+ .chemread-export-menu button {
+ margin-bottom: 8px;
+ margin-top: 8px;
+ width: 130px;
+ }
+ }
+
+ .chemread-header {
+ background-color: #f5f5f5;
+ border: 1px solid #ddd;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ display: block;
+ margin-bottom: -1px;
+ padding: 10px 15px;
+ position: relative;
+ text-align: center;
+
+ .chemread-type {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: center;
+
+ .radio {
+ margin-right: 10px;
+ }
+ .radio + .radio {
+ margin-top: 10px;
+ }
+ }
+ }
+
+ .chemread-dropzone {
+ line-height: 20px;
+ text-align: center;
+ width: 100%;
+ }
+
+ .chemread-categories {
+ padding: 0 !important;
+ }
+
+ .chemread-file-item {
+ .chemread-file-name {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+
+ .remove-btn {
+ background-color: white;
+ float: right;
+ &:hover {
+ background-color: #f5f5f5;
+ }
+ }
+ }
+
+ .chemread-smiles-menu {
+ display: flex;
+ flex-wrap: wrap;
+ padding: 5px;
+
+ .form-group {
+ margin: 5px;
+ width: 100%;
+ }
+ }
+
+ .chemread-files {
+ padding-right: 10px !important;
+ }
+
+ .chemread-files-menu {
+ max-height: calc(100vh - 375px);
+ overflow-x: hidden;
+ overflow-y: scroll;
+ width: 16vw;
+ }
+
+ .chemread-files-contents {
+ max-height: calc(100vh - 25px);
+ overflow-x: hidden;
+ overflow-y: scroll;
+ padding-right: 0 !important;
+ }
+
+ .rsmi-svg {
+ align-items: center;
+ display: flex;
+ justify-content: center;
+ }
+
+ .chemread-files-list {
+ }
+
+ .smi-text {
+ font-size: 18px;
+ font-weight: bold;
+ word-break: break-all;
+ }
+
+ .rsmi-item {
+ border-radius: 4px;
+ display: flow-root;
+ margin-bottom: 5px;
+
+ .label {
+ margin-bottom: 5px;
+ }
+
+ .remove-btn {
+ float: right;
+ }
+
+ .svg-file-container {
+ float: right;
+ width: 600px;
+ }
+
+ .svg-file-container > svg {
+ min-height: 0;
+ }
+
+ .item-header {
+ margin-bottom: 5px;
+ }
+
+ .chemread-description {
+ display: flex;
+ flex-wrap: wrap;
+ width: 100%;
+
+ div {
+ margin-right: 15px;
+ margin-left: 15px;
+ /* max-width: 33%; */
+ }
+ }
+
+ .expand-btn {
+ align-items: center;
+ display: flex;
+ height: 25px;
+ justify-content: center;
+ margin-bottom: 5px;
+ width: 110px;
+
+ &:hover {
+ background-color: #f5f5f5;
+ }
+ }
+
+ .xml-details-container {
+ margin: 10px;
+ }
+
+ .xml-details {
+ display: flex;
+ flex-wrap: wrap;
+ margin-top: 5px;
+ font-size: 12px;
+
+ div {
+ margin: 10px;
+ max-width: 33%;
+ }
+ }
+ }
+
+ ::-webkit-scrollbar {
+ background: transparent;
+ overflow: visible;
+ width: 17px;
+ }
+
+ ::-webkit-scrollbar-thumb {
+ background-color: rgba(0, 0, 0, 0.2);
+ border: solid #fff;
+ }
+
+ ::-webkit-scrollbar-thumb:hover {
+ background: rgba(0, 0, 0, 0.8);
+ }
+
+ ::-webkit-scrollbar-thumb:horizontal {
+ border-width: 4px 6px;
+ min-width: 40px;
+ }
+
+ ::-webkit-scrollbar-thumb:vertical {
+ border-width: 6px 4px;
+ min-height: 40px;
+ }
+
+ ::-webkit-scrollbar-track-piece {
+ background-color: #fff;
+ }
+
+ ::-webkit-scrollbar-corner {
+ background: transparent;
+ }
+
+ ::-webkit-scrollbar-thumb {
+ background-color: #ADADAD;
+ -webkit-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.10),inset 0 -1px 0 rgba(0,0,0,0.07);
+ }
+
+ ::-webkit-scrollbar-thumb:hover {
+ background-color: #999;
+ }
+}
diff --git a/app/assets/stylesheets/docx.scss b/app/assets/stylesheets/docx.scss
deleted file mode 100644
index ef83e3158a..0000000000
--- a/app/assets/stylesheets/docx.scss
+++ /dev/null
@@ -1,147 +0,0 @@
-.docx-grid {
- .docx-smiles-editing > div:first-child {
- padding-right: 5px !important;
- }
-
- .docx-smiles-editing > div:last-child {
- padding-left: 0px !important;
- }
-
- .docx-smiles-editing {
- .docx-header {
- position: relative;
- display: block;
- padding: 10px 15px;
- margin-bottom: -1px;
- border: 1px solid #ddd;
- background-color: #f5f5f5;
- border-top-right-radius: 4px;
- border-top-left-radius: 4px;
- text-align: center;
- }
-
- .docx-dropzone {
- width: 100%;
- line-height: 20px;
- text-align: center;
- }
-
- .docx-categories {
- padding: 0 !important;
- }
-
- .docx-files-menu {
- overflow-x: hidden;
- overflow-y: scroll;
- max-height: 266px;
- }
-
- .docx-file-item {
- .docx-file-name {
- overflow: hidden;
- white-space: nowrap;
- text-overflow: ellipsis;
- }
-
- .remove-btn {
- background-color: white;
- float: right;
- &:hover {
- background-color: #f5f5f5;
- }
- }
- }
-
- .docx-smiles-menu {
- display: flex;
- flex-wrap: wrap;
- padding: 5px;
-
- .form-group {
- margin: 5px;
- width: 180px;
- }
- }
- }
-
- .docx-content-row > div {
- padding-right: 0 !important;
- }
-
- .docx-content-row {
- .docx-files-contents {
- overflow-x: hidden;
- overflow-y: scroll;
- max-height: calc(100vh - 325px);
- }
-
- .rsmi-svg {
- display: flex;
- align-items: center;
- justify-content: center;
- }
-
- .docx-files-list {
- }
-
- .smi-text {
- word-wrap: break-word;
- font-size: 18px;
- }
-
- .rsmi-item {
- display: flow-root;
-
- .svg-file-container {
- float: right;
- width: 500px;
- }
-
- .svg-file-container > svg {
- min-height: 0;
- }
- }
- }
-
- ::-webkit-scrollbar {
- background: transparent;
- overflow: visible;
- width: 17px;
- }
-
- ::-webkit-scrollbar-thumb {
- background-color: rgba(0, 0, 0, 0.2);
- border: solid #fff;
- }
-
- ::-webkit-scrollbar-thumb:hover {
- background: rgba(0, 0, 0, 0.8);
- }
-
- ::-webkit-scrollbar-thumb:horizontal {
- border-width: 4px 6px;
- min-width: 40px;
- }
-
- ::-webkit-scrollbar-thumb:vertical {
- border-width: 6px 4px;
- min-height: 40px;
- }
-
- ::-webkit-scrollbar-track-piece {
- background-color: #fff;
- }
-
- ::-webkit-scrollbar-corner {
- background: transparent;
- }
-
- ::-webkit-scrollbar-thumb {
- background-color: #ADADAD;
- -webkit-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.10),inset 0 -1px 0 rgba(0,0,0,0.07);
- }
-
- ::-webkit-scrollbar-thumb:hover {
- background-color: #999;
- }
-}
diff --git a/app/views/pages/chemread.haml b/app/views/pages/chemread.haml
new file mode 100644
index 0000000000..b32aa9ff4f
--- /dev/null
+++ b/app/views/pages/chemread.haml
@@ -0,0 +1 @@
+#ChemRead
diff --git a/app/views/pages/docx.haml b/app/views/pages/docx.haml
deleted file mode 100644
index 19cf1f0521..0000000000
--- a/app/views/pages/docx.haml
+++ /dev/null
@@ -1 +0,0 @@
-#Docx
diff --git a/config/routes.rb b/config/routes.rb
index 8cbb568be0..ad66ce39ff 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -13,7 +13,8 @@
patch 'pages/update_affiliations', to: 'pages#update_affiliations'
# Standalone page for docx processing
- get 'docx', to: 'pages#docx'
+ # get 'docx', to: 'pages#docx'
+ get 'docx', to: 'pages#chemread'
get 'command_n_control', to: 'pages#cnc'
end
diff --git a/lib/cdx/below_arrow/catalyst.yaml b/lib/cdx/below_arrow/catalyst.yaml
new file mode 100644
index 0000000000..9548fb447c
--- /dev/null
+++ b/lib/cdx/below_arrow/catalyst.yaml
@@ -0,0 +1,428 @@
+"Aluminum(III) Bromide": "[Al+3].[Br-].[Br-].[Br-]"
+"Aluminum(III) Chloride": "[Al+3].[Cl-].[Cl-].[Cl-]"
+"Triphenylarsine": "[As](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"Copper(I) Cyanide": "[C-]#N.[Cu+]"
+"Bromodicarbonyl[bis[2-(diisopropylphosphino)ethyl]amine]manganese(I)": "[C]=O.[C]=O.CC(P(CCNCCP(C(C)C)C(C)C)C(C)C)C.[Mn]Br"
+"Carbonyl(dihydrido)tris(triphenylphosphine)ruthenium(II)": "[C]=O.[H][Ru][H].P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6.P(C7=CC=CC=C7)(C8=CC=CC=C8)C9=CC=CC=C9"
+"Carbonylhydridotris(triphenylphosphine)iridium(I)": "[C]=O.[Ir][H].P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6.P(C7=CC=CC=C7)(C8=CC=CC=C8)C9=CC=CC=C9"
+"Carbonylchlorobis(triphenylphosphine)iridium(I)": "[C]=O.[Ir]Cl.P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6"
+"Tetraphenylarsonium Chloride Hydrochloride Hydrate": "[H]O[H].[H]Cl.C1([As+](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1.[Cl-]"
+"Iridium(III) Chloride Hydrate": "[H]O[H].[Ir+3].[Cl-].[Cl-].[Cl-]"
+"Chloro(1,5-cyclooctadiene)iridium(I)": "[Ir]Cl.C1=C\\CC/C=C\\CC/1"
+"Chlorobis(cyclooctene)iridium(I)": "[Ir]Cl.C1=C\\CCCCCC/1.C2=C\\CCCCCC/2"
+"(1,5-Cyclooctadiene)(methoxy)iridium(I)": "[Ir]OC.C1=C\\CC/C=C\\CC/1"
+"Lead(II) Iodide": "[Pb+2].[I-].[I-]"
+"Palladium Carbon ": "[Pd]"
+"Allylpalladium(II) Chloride": "[Pd+]CC=C.[Cl-]"
+"Palladium(II) Chloride": "[Pd+2].[Cl-].[Cl-]"
+"Palladium Hydroxide": "[Pd+2].[OH-].[OH-]"
+"Platinum(IV) Oxide": "[Pt+4].[O-2].[O-2]"
+"Chloro(1,5-cyclooctadiene)rhodium(I)": "[Rh]Cl.C1=C\\CC/C=C\\CC/1"
+"Chlorobis(cyclooctene)rhodium(I)": "[Rh]Cl.C1=C\\CCCCCC/1.C2=C\\CCCCCC/2"
+"(Pentamethylcyclopentadienyl)rhodium(III) Dichloride": "[Rh+2]C1=C(C)C(C)=C(C)C1(C)C.[Cl-].[Cl-]"
+"Cyclopentadienylbis(triphenylphosphine)ruthenium(II) Chloride": "[Ru+]C1=CC=CC1.P(C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4.P(C5=CC=CC=C5)(C6=CC=CC=C6)C7=CC=CC=C7.[Cl-]"
+"Benzeneruthenium(II) Chloride": "[Ru+2].C1=CC=CC=C1.[Cl-].[Cl-]"
+"Ruthenium(III) Chloride": "[Ru+3].[Cl-].[Cl-].[Cl-]"
+"Triphenylantimony": "[Sb](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"Triphenylphosphine Selenide": "[Se]=P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"Tin(IV) Chloride": "[Sn+4].[Cl-].[Cl-].[Cl-].[Cl-]"
+"Tellurium(IV) Oxide": "[Te+4].[O-2].[O-2]"
+"Cyclopentadienyl Thallium": "[Tl]C1=CC=CC1"
+"Zinc Bromide": "[Zn+2].[Br-].[Br-]"
+"Zinc Chloride": "[Zn+2].[Cl-].[Cl-]"
+"Lithium (E)-4-oxopent-2-en-2-olate": "C/C([O-])=C\\C(C)=O.[Li+]"
+"Methyltriphenylarsonium Iodide": "C[As+](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.[I-]"
+"2-Chloro-1,3-dimethylimidazolinium Tetrafluoroborate": "C[N+]1=C(Cl)N(C)CC1.F[B-](F)(F)F"
+"1,1'-(2,6-Pyridinediyl)bis(3-methylimidazolium) Dibromide": "C[N+]1=CN(C2=NC(N3C=C[N+](C)=C3)=CC=C2)C=C1.[Br-].[Br-]"
+"Di-tert-butylmethylphosphonium Tetraphenylborate": "C[PH+](C(C)(C)C)C(C)(C)C.C1([B-](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1"
+"Chloro(1,5-hexadiene)rhodium(I)": "C=CCCC=C.[Rh]Cl"
+"Tetraphenylgermane": "C1([Ge](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1"
+"Tetraphenyl Lead": "C1([Pb](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1"
+"(R)-(+)-2,2'-bis(diphenylphosphino)-1,1'-binaphthyl": "C1(C2=C3C=CC=CC3=CC=C2P(C4=CC=CC=C4)C5=CC=CC=C5)=C6C=CC=CC6=CC=C1P(C7=CC=CC=C7)C8=CC=CC=C8"
+"[(S)-2,2'-Bis(diphenylphosphino)-1,1'-binaphthyl]ruthenium(II) Dichloride": "C1(C2=C3C=CC=CC3=CC=C2P(C4=CC=CC=C4)C5=CC=CC=C5)=C6C=CC=CC6=CC=C1P(C7=CC=CC=C7)C8=CC=CC=C8.[Ru+2].[Cl-].[Cl-]"
+"Norbornadiene Rhodium(I) Chloride": "C12C=CC(C2)C=C1.[Rh+].[Cl-]"
+"(S)-5,5-Diphenyl-2-methyl-3,4-propano-1,3,2-oxazaborolidine": "CB1OC(C2=CC=CC=C2)(C3=CC=CC=C3)[C@@]4([H])N1CCC4"
+"(R)-5,5-Diphenyl-2-methyl-3,4-propano-1,3,2-oxazaborolidine": "CB1OC(C2=CC=CC=C2)(C3=CC=CC=C3)[C@]4([H])N1CCC4"
+"Bis(acetonitrile)palladium(II) Dichloride": "CC#N.CC#N.[Pd+2].[Cl-].[Cl-]"
+"Tetrakis(acetonitrile)copper(I) Tetrafluoroborate": "CC#N.CC#N.CC#N.CC#N.F[B-](F)(F)F.[Cu+]"
+"Tetrakis(acetonitrile)copper(I) Hexafluorophosphate": "CC#N.CC#N.CC#N.CC#N.F[P-](F)(F)(F)(F)F.[Cu+]"
+"Tetrakis(acetonitrile)palladium(II) Bis(trifluoromethanesulfonate)": "CC#N.CC#N.CC#N.CC#N.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Pd+2]"
+"1,3-Di-tert-butylimidazolium Tetrafluoroborate": "CC([N+]1=CN(C(C)(C)C)C=C1)(C)C.F[B-](F)(F)F"
+"1,3-Diisopropylimidazolium Tetrafluoroborate": "CC([N+]1=CN(C(C)C)C=C1)C.F[B-](F)(F)F"
+"1,3-Diisopropylimidazolinium Tetrafluoroborate": "CC([N+]1=CN(C(C)C)CC1)C.F[B-](F)(F)F"
+"Copper(I) Acetate": "CC([O-])=O.[Cu+]"
+"Iron(II) Acetate": "CC([O-])=O.CC([O-])=O.[Fe+2]"
+"Copper(II) Acetate Monohydrate": "CC([O-])=O.CC([O-])=O.[H]O[H].[Cu+2]"
+"Rhodium(II) Acetate": "CC([O-])=O.CC([O-])=O.[Rh+2]"
+"Lead Tetraacetate ": "CC([O-])=O.CC([O-])=O.CC([O-])=O.CC([O-])=O.[Pb+4]"
+"Bis(triphenylphosphine)palladium(II) Diacetate": "CC([O-])=O.CC([O-])=O.P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6.[Pd+2]"
+"2-Chloro-1,3-bis(2,6-diisopropylphenyl)-1H-imidazolium Chloride": "CC(C1=C([N+]2=C(Cl)N(C3=C(C(C)C)C=CC=C3C(C)C)C=C2)C(C(C)C)=CC=C1)C.[Cl-]"
+"1,3-Bis(2,6-diisopropylphenyl)imidazolium Chloride": "CC(C1=C([N+]2=CN(C3=C(C(C)C)C=CC=C3C(C)C)C=C2)C(C(C)C)=CC=C1)C.[Cl-]"
+"1,3-Bis(2,6-diisopropylphenyl)imidazolinium Chloride": "CC(C1=C([N+]2=CN(C3=C(C(C)C)C=CC=C3C(C)C)CC2)C(C(C)C)=CC=C1)C.[Cl-]"
+"Chloro[1,3-bis(2,6-diisopropylphenyl)imidazol-2-ylidene]copper(I)": "CC(C1=C(N(C=CN2C3=C(C(C)C)C=CC=C3C(C)C)C2=[Cu-2]Cl)C(C(C)C)=CC=C1)C"
+"1,3-Bis(2,6-diisopropylphenyl)imidazol-2-ylidene": "CC(C1=C(N2[C]N(C3=C(C(C)C)C=CC=C3C(C)C)C=C2)C(C(C)C)=CC=C1)C"
+"1,3-Bis(2,6-diisopropylphenyl)imidazolidin-2-ylidene": "CC(C1=C(N2[C]N(C3=C(C(C)C)C=CC=C3C(C)C)CC2)C(C(C)C)=CC=C1)C"
+"3,3'-Methylenebis[1-(2,6-diisopropylphenyl)-3-imidazolium Bromide]": "CC(C1=C(N2C=C[N+](C[N+]3=CN(C4=C(C(C)C)C=CC=C4C(C)C)C=C3)=C2)C(C(C)C)=CC=C1)C.[Br-].[Br-]"
+"1,3-Di-tert-butylimidazol-2-ylidene": "CC(N1[C]N(C(C)(C)C)C=C1)(C)C"
+"3,3'-Methylenebis(1-tert-butyl-3-imidazolium Bromide)": "CC(N1C=C[N+](C[N+]2=CN(C(C)(C)C)C=C2)=C1)(C)C.[Br-].[Br-]"
+"Chloro[[1,3-bis(2,6-diisopropylphenyl)imidazol-2-ylidene](acetanilide)palladium(II)]": "CC(NC1=CC=CC=C1)=O.CC(C2=C(N(C=CN3C4=C(C(C)C)C=CC=C4C(C)C)C3=[Pd-]Cl)C(C(C)C)=CC=C2)C"
+"Triphenylantimony Diacetate": "CC(O)=O.CC(O)=O.[Sb](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"Bis(tri-tert-butylphosphine)palladium(0)": "CC(P(C(C)(C)C)C(C)(C)C)(C)C.CC(P(C(C)(C)C)C(C)(C)C)(C)C.[Pd]"
+"Dichloro[9,9-dimethyl-4,5-bis(diphenylphosphino)xanthene]palladium(II)": "CC1(C)C2=C(OC3=C1C=CC=C3P(C4=CC=CC=C4)C5=CC=CC=C5)C(P(C6=CC=CC=C6)C7=CC=CC=C7)=CC=C2.Cl[Pd]Cl"
+"1,3-Bis(2,4,6-trimethylphenyl)imidazolinium Chloride": "CC1=C([N+]2=CN(C3=C(C)C=C(C)C=C3C)CC2)C(C)=CC(C)=C1.[Cl-]"
+"Chloro(pentamethylcyclopentadienyl)ruthenium(II)": "CC1=C([Ru]Cl)C(C)(C)C(C)=C1C"
+"(Hexamethylbenzene)ruthenium(II) Dichloride": "CC1=C(C)C(C)=C(C)C(C)=C1C.[Ru+2].[Cl-].[Cl-]"
+"1,3-Dimesitylimidazolium Chloride": "CC1=CC(C)=CC(C)=C1[N+]2=CN(C3=C(C)C=C(C)C=C3C)C=C2.[Cl-]"
+"1,3-Dimesitylimidazol-2-ylidene": "CC1=CC(C)=CC(C)=C1N2[C]N(C3=C(C)C=C(C)C=C3C)C=C2"
+"Dichloro(p-cymene)ruthenium(II)": "CC1=CC=C(C(C)C)C=C1.Cl[Ru]Cl"
+"Nickel(II)Â p-Toluenesulfonate Hexahydrate": "CC1=CC=C(S(=O)([O-])=O)C=C1.CC2=CC=C(S(=O)([O-])=O)C=C2.[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[Ni+2]"
+"Bis(tri-o-tolylphosphine)palladium(II) Dichloride": "CC1=CC=CC=C1P(C2=CC=CC=C2C)C3=CC=CC=C3C.CC4=CC=CC=C4P(C5=CC=CC=C5C)C6=CC=CC=C6C.[Pd+2].[Cl-].[Cl-]"
+"1-Methyl-3-propylimidazolium Tetrafluoroborate": "CCC[N+]1=CN(C)C=C1.F[B-](F)(F)F"
+"Tetrabutylgermane": "CCCC[Ge](CCCC)(CCCC)CCCC"
+"Tin(II) 2-Ethylhexanoate": "CCCCC(CC)C([O-])=O.CCCCC(CC)C([O-])=O.[Sn+2]"
+"1-Methyl-3-pentylimidazolium Tetrafluoroborate": "CCCCC[N+]1=CN(C)C=C1.F[B-](F)(F)F"
+"Rhodium(II) Octanoate": "CCCCCCCC([O-])=O.CCCCCCCC([O-])=O.[Rh+2]"
+"Dilithium Tetrachlorocopper(II)": "Cl[Cu-](Cl)(Cl)Cl.Cl[Cu-](Cl)(Cl)Cl.[Li+].[Li+]"
+"Dichloro(1,10-phenanthroline)copper(II)": "Cl[Cu]Cl.C12=CC=C3C=CC=NC3=C1N=CC=C2"
+"Chlorobis(ethylene)iridium(I)": "Cl[Ir-4]12(CC2)CC1"
+"Sodium Tetrachloropalladate(II)": "Cl[Pd-2](Cl)(Cl)Cl.[Na+].[Na+]"
+"Chlorobis(ethylene)rhodium(I)": "Cl[Rh-4]12(CC2)CC1"
+"Triphenylantimony Dichloride": "Cl[Sb](C1=CC=CC=C1)(C2=CC=CC=C2)(Cl)C3=CC=CC=C3"
+"Boron Trichloride": "ClB(Cl)Cl"
+"[Di-tert-butyl(chloro)phosphine]palladium(II) Dichloride": "ClP(C(C)(C)C)C(C)(C)C.[Pd+2].[Cl-].[Cl-]"
+"Chloro[[1,3-bis(2,6-diisopropylphenyl)imidazol-2-ylidene](N,N-dimethylbenzylamine)palladium(II)]": "CN(C)CC1=CC=CC=C1.CC(C2=C(N(C=CN3C4=C(C(C)C)C=CC=C4C(C)C)C3=[Pd-]Cl)C(C(C)C)=CC=C2)C"
+"Dichloro(N,N,N',N'-tetramethylethylenediamine)zinc(II)": "CN(C)CCN(C)C.Cl[Zn]Cl"
+"Bromo[(2,6-pyridinediyl)bis(3-methyl-1-imidazolyl-2-ylidene)]nickel Bromide": "CN(C=CN12)C1=[Ni-3](Br)=C3N(C)C=CN3C4=CC=CC2=N4.[Br-]"
+"Bis[di-tert-butyl(4-dimethylaminophenyl)phosphine]palladium(0)": "CN(C1=CC=C(P(C(C)(C)C)C(C)(C)C)C=C1)C.CN(C2=CC=C(P(C(C)(C)C)C(C)(C)C)C=C2)C.[Pd]"
+"4-(Dimethylamino)phenyldiphenylphosphine": "CN(C1=CC=C(P(C2=CC=CC=C2)C3=CC=CC=C3)C=C1)C"
+"1,4-Dimethyl-1,2,4-triazolium Iodide": "CN1C=N[N+](C)=C1.[I-]"
+"Chloro[[1,3-bis(2,6-diisopropylphenyl)imidazol-2-ylidene](N,N-dimethyl-3,5-dimethoxybenzylamine)palladium(II)]": "COC1=CC(OC)=CC(CN(C)C)=C1.CC(C2=C(N(C=CN3C4=C(C(C)C)C=CC=C4C(C)C)C3=[Pd-]Cl)C(C(C)C)=CC=C2)C"
+"Dimethylphenylphosphine Borane": "CP(C)C1=CC=CC=C1.B"
+"Potassium Hexafluoroarsenate": "F[As-](F)(F)(F)(F)F.[K+]"
+"1,3-Di(1-adamantyl)imidazolium Tetrafluoroborate": "F[B-](F)(F)F.[N+]1(C23CC4CC(C3)CC(C4)C2)=CN(C56CC7CC(C6)CC(C7)C5)C=C1"
+"1,3-Di(1-adamantyl)imidazolinium Tetrafluoroborate": "F[B-](F)(F)F.[N+]1(C23CC4CC(C3)CC(C4)C2)=CN(C56CC7CC(C6)CC(C7)C5)CC1"
+"1,3-Dicyclohexylimidazolium Tetrafluoroborate": "F[B-](F)(F)F.[N+]1(C2CCCCC2)=CN(C3CCCCC3)C=C1"
+"Sodium Tetrafluoroborate": "F[B-](F)(F)F.[Na+]"
+"Bis(1,5-cyclooctadiene)rhodium(I) Tetrafluoroborate": "F[B-](F)(F)F.[Rh+].C1=C\\CC/C=C\\CC/1.C2=C\\CC/C=C\\CC/2"
+"Copper(II) Tetrafluoroborate": "F[B-](F)(F)F.F[B-](F)(F)F.[Cu+2]"
+"(1,5-Cyclooctadiene)(pyridine)(tricyclohexylphosphine)iridium(I) Hexafluorophosphate": "F[P-](F)(F)(F)(F)F.P(C1CCCCC1)(C2CCCCC2)C3CCCCC3.[Ir+].C4=C\\CC/C=C\\CC/4.C5=NC=CC=C5"
+"Boron Trifluoride - Propanol Reagent": "FB(F)F.CCCO"
+"Boron Trifluoride - Methanol Reagent": "FB(F)F.CO"
+"6,7-Dihydro-2-pentafluorophenyl-5H-pyrrolo[2,1-c][1,2,4]triazolium Tetrafluoroborate": "FC1=C(F)C(F)=C(F)C(F)=C1[N+]2=CN3C(CCC3)=N2.F[B-](F)(F)F"
+"Bis(benzonitrile)palladium(II) Dichloride": "N#CC1=CC=CC=C1.N#CC2=CC=CC=C2.[Pd+2].[Cl-].[Cl-]"
+"Chloro[(tri-tert-butylphosphine)-2-(2-aminobiphenyl)]palladium(II)": "NC1([Pd+2])=CC=CC=C1C2=CC=CC=C2.CC(P(C(C)(C)C)(Cl)C(C)(C)C)(C)C"
+"Aluminum Glycinate": "NCC([O-])=O.NCC([O-])=O.NCC([O-])=O.[Al+3]"
+"Bis(1,3-propanediamine) Copper(II) Dichloride": "NCCCN.NCCCN.[Cu+2].[Cl-].[Cl-]"
+"Calcium L-Threonate": "O[C@H]([C@H](CO)O)C([O-])=O.O[C@H]([C@H](CO)O)C([O-])=O.[Ca+2]"
+"Cacodylic Acid": "O=[As](C)(C)O"
+"4-(4-Dimethylaminophenylazo)phenylarsonic Acid Hydrochloride": "O=[As](C1=CC=C(/N=N/C2=CC=C(N(C)C)C=C2)C=C1)(O)O.[H]Cl"
+"4-Hydroxy-3-nitrophenylarsonic Acid": "O=[As](C1=CC=C(O)C([N+]([O-])=O)=C1)(O)O"
+"4-Hydroxyphenylarsonic Acid": "O=[As](C1=CC=C(O)C=C1)(O)O"
+"Phenylarsonic Acid": "O=[As](C1=CC=CC=C1)(O)O"
+"2-Nitrophenylarsonic Acid": "O=[As](C1=CC=CC=C1[N+]([O-])=O)(O)O"
+"Phenylarsine Oxide": "O=[As]C1=CC=CC=C1"
+"Triphenylantimony Oxide": "O=[Sb](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"Bis(4-methoxyphenyl) Selenoxide": "O=[Se](C1=CC=C(OC)C=C1)C2=CC=C(OC)C=C2"
+"Sodium Tellurite Pentahydrate": "O=[Te]([O-])[O-].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[Na+].[Na+]"
+"Telluric Acid": "O=[Te](O)(O)=O"
+"Bis(dibenzylideneacetone)palladium(0)": "O=C(/C=C/C1=CC=CC=C1)/C=C/C2=CC=CC=C2.O=C(/C=C/C3=CC=CC=C3)/C=C/C4=CC=CC=C4.[Pd]"
+"Tris(dibenzylideneacetone)dipalladium(0)": "O=C(/C=C/C1=CC=CC=C1)/C=C/C2=CC=CC=C2.O=C(/C=C/C3=CC=CC=C3)/C=C/C4=CC=CC=C4.O=C(/C=C/C5=CC=CC=C5)/C=C/C6=CC=CC=C6.[Pd].[Pd]"
+"Thallium(III) Trifluoroacetate": "O=C([O-])C(F)(F)F.O=C([O-])C(F)(F)F.O=C([O-])C(F)(F)F.[Tl+3]"
+"Copper(I) 2-Thiophenecarboxylate": "O=C(C1=CC=CS1)[O-].[Cu+]"
+"Copper(I) Trifluoromethanesulfonate": "O=S(C(F)(F)F)([O-])=O.[Cu+]"
+"Copper(II) Trifluoromethanesulfonate": "O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Cu+2]"
+"Tin(II) Trifluoromethanesulfonate": "O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Sn+2]"
+"Zinc(II) Trifluoromethanesulfonate": "O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Zn+2]"
+"Nickel(II) Benzenesulfonate Hexahydrate": "O=S(C1=CC=CC=C1)([O-])=O.O=S(C2=CC=CC=C2)([O-])=O.[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[Ni+2]"
+"1,2-Bis(phenylsulfinyl)ethane Palladium(II) Diacetate": "O=S(CCS(C1=CC=CC=C1)=O)C2=CC=CC=C2.CC([O-])=O.CC([O-])=O.[Pd+2]"
+"Bismuth Tripotassium Dicitrate": "OC(C([O-])=O)(CC([O-])=O)CC([O-])=O.OC(C([O-])=O)(CC([O-])=O)CC([O-])=O.[Bi+5].[K+].[K+].[K+]"
+"Trimagnesium Dicitrate Nonahydrate": "OC(C([O-])=O)(CC([O-])=O)CC([O-])=O.OC(C([O-])=O)(CC([O-])=O)CC([O-])=O.[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[Mg+2].[Mg+2].[Mg+2]"
+"(Triphenylphosphine)gold(I) Chloride": "P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.[Au+].[Cl-]"
+"Bis(triphenylphosphine)palladium(II) Dichloride": "P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6.[Pd+2].[Cl-].[Cl-]"
+"Tris(triphenylphosphine)rhodium(I) Chloride": "P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6.P(C7=CC=CC=C7)(C8=CC=CC=C8)C9=CC=CC=C9.[Rh+].[Cl-]"
+"Tetrakis(triphenylphosphine)palladium(0)": "P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6.P(C7=CC=CC=C7)(C8=CC=CC=C8)C9=CC=CC=C9.P(C%10=CC=CC=C%10)(C%11=CC=CC=C%11)C%12=CC=CC=C%12.[Pd]"
+"Bis(tricyclohexylphosphine)palladium(II) Dichloride": "P(C1CCCCC1)(C2CCCCC2)C3CCCCC3.P(C4CCCCC4)(C5CCCCC5)C6CCCCC6.[Pd+2].[Cl-].[Cl-]"
+"[1,2-Bis(diphenylphosphino)ethane]palladium(II) Dichloride": "P(CCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4.[Pd+2].[Cl-].[Cl-]"
+"Bis[1,2-bis(diphenylphosphino)ethane]palladium(0)": "P(CCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4.P(CCP(C5=CC=CC=C5)C6=CC=CC=C6)(C7=CC=CC=C7)C8=CC=CC=C8.[Pd]"
+"1-(2-Mesitylene)-1,3-butanedione": "CC(CC(C1=C(C)C=C(C)C=C1C)=O)=O"
+"1-(4-Bromophenyl)-1,3-butanedione": "CC(CC(C1=CC=C(Br)C=C1)=O)=O"
+"1-(4-Chlorophenyl)-4,4,4-trifluoro-1,3-butanedione": "O=C(C1=CC=C(Cl)C=C1)CC(C(F)(F)F)=O"
+"1-(4-Fluorophenyl)-1,3-butanedione": "CC(CC(C1=CC=C(F)C=C1)=O)=O"
+"1-(4-tert-Butylphenyl)-3-(4-methoxyphenyl)-1,3-propanedione": "O=C(C1=CC=C(C(C)(C)C)C=C1)CC(C2=CC=C(OC)C=C2)=O"
+"1,1,5,5-Tetrafluoro-2,4-pentanedione": "O=C(CC(C(F)F)=O)C(F)F"
+"1,3-Bis(4-methoxyphenyl)-1,3-propanedione": "O=C(C1=CC=C(OC)C=C1)CC(C2=CC=C(OC)C=C2)=O"
+"1,3-Di(2-pyridyl)-1,3-propanedione": "O=C(C1=NC=CC=C1)CC(C2=NC=CC=C2)=O"
+"1,3-Diphenyl-1,3-propanedione": "O=C(C1=CC=CC=C1)CC(C2=CC=CC=C2)=O"
+"1-Phenyl-1,3-butanedione": "CC(CC(C1=CC=CC=C1)=O)=O"
+"2,2-Dimethyl-6,6,7,7,8,8,8-heptafluoro-3,5-octanedione": "CC(C)(C)C(CC(C(F)(F)C(F)(F)C(F)(F)F)=O)=O"
+"2,6-Dimethyl-3,5-heptanedione": "CC(C)C(CC(C(C)C)=O)=O"
+"2-Acetylcyclohexanone": "O=C1C(C(C)=O)CCCC1"
+"2-Acetylcyclopentanone": "O=C1C(C(C)=O)CCC1"
+"2-Furoyltrifluoroacetone": "O=C(CC(C1=CC=CO1)=O)C(F)(F)F"
+"3,4-Diacetyl-2,5-hexanedione": "CC(C(C(C)=O)C(C(C)=O)C(C)=O)=O"
+"3,5-Heptanedione": "CCC(CC(CC)=O)=O"
+"3-Chloroacetylacetone": "CC(C(Cl)C(C)=O)=O"
+"3-Ethyl-2,4-pentanedione": "CC(C(CC)C(C)=O)=O"
+"3-Methyl-2,4-pentanedione": "CC(C(C)C(C)=O)=O"
+"3-Phenyl-2,4-pentanedione": "CC(C(C1=CC=CC=C1)C(C)=O)=O"
+"4,4,4-Trifluoro-1-(2-naphthyl)-1,3-butanedione": "O=C(C1=CC=C2C=CC=CC2=C1)CC(C(F)(F)F)=O"
+"4,4,4-Trifluoro-1-(2-thienyl)-1,3-butanedione": "O=C(C1=CC=CS1)CC(C(F)(F)F)=O"
+"4,4,4-Trifluoro-1-(4-methoxyphenyl)-1,3-butanedione": "O=C(C1=CC=C(OC)C=C1)CC(C(F)(F)F)=O"
+"4,4,4-Trifluoro-1-(p-tolyl)-1,3-butanedione": "O=C(C1=CC=C(C)C=C1)CC(C(F)(F)F)=O"
+"4,4,4-Trifluoro-1-phenyl-1,3-butanedione": "O=C(C1=CC=CC=C1)CC(C(F)(F)F)=O"
+"6-Methyl-2,4-heptanedione": "CC(CC(CC(C)C)=O)=O"
+"9H,9H-Triacontafluoro-8,10-heptadecanedione": "O=C(CC(C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)F)=O)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)F"
+"Acetylacetone": "CC(CC(C)=O)=O"
+"Dehydroacetic Acid": "CC(C(C(C=C(O1)C)=O)C1=O)=O"
+"Dipivaloylmethane": "CC(C)(C)C(CC(C(C)(C)C)=O)=O"
+"Hexafluoroacetylacetone": "O=C(C(F)(F)C(CF)=O)C(F)(F)F"
+"Trifluoroacetylacetone": "O=C(CC(C)=O)C(F)(F)F"
+"1,2,3,4,5-Pentamethylcyclopentadiene": "CC1C(C)=C(C)C(C)=C1C"
+"1,2,3,4,5-Pentaphenyl-1,3-cyclopentadiene": "C1(C2=CC=CC=C2)=C(C3=CC=CC=C3)C(C4=CC=CC=C4)=C(C5=CC=CC=C5)C1C6=CC=CC=C6"
+"1,2,3,4-Tetraphenyl-1,3-cyclopentadiene": "C1(C2=CC=CC=C2)=C(C3=CC=CC=C3)C(C4=CC=CC=C4)=C(C5=CC=CC=C5)C1"
+"1,2-Bis(3-indenyl)ethane": "C1(CCC2=CCC3=C2C=CC=C3)=CCC4=C1C=CC=C4"
+"1,3,5,7-Cyclooctatetraene": "C1=C\\C=C/C=C\\C=C/1"
+"1,3,5-Cycloheptatriene": "C1=CC=CC=CC1"
+"1,3,5-Trimethylbenzene": "CC1=CC(C)=CC(C)=C1"
+"1,4-Cyclohexadiene ": "C1=CCC=CC1"
+"1,5-Cyclooctadiene [stabilized with Octadecyl 3-(3',5'-Di-tert-butyl-4'-hydroxyphenyl)propionate]": "C1=C\\CC/C=C\\CC/1"
+"1,5-Hexadiene": "C=CCCC=C"
+"1H-Cyclopenta[l]phenanthrene": "C12=CC=CC=C1C(CC=C3)=C3C4=C2C=CC=C4"
+"2,5-Norbornadiene": "C12C=CC(C2)C=C1"
+"2-Methylbenzo[e]indene": "N/A"
+"2-Methylcyclopenta[l]phenanthrene": "CC1=CC2=C3CC=CC=C3C4=C(C2=C1)C=CC=C4"
+"2-Norbornene": "C12C=CC(C2)CC1"
+"Acenaphthylene": "C12=CC=CC3=C1C(C=C2)=CC=C3"
+"Cyclooctene": "C1=C\\CCCCCC/1"
+"Dibenzo[a,e]cyclooctene": "C12=CC=CC=C1/C=C\\C3=CC=CC=C3/C=C\\2"
+"Dicyclopentadiene": "C12C=CCC1C3C=CC2C3"
+"Hexamethylbenzene": "CC1=C(C)C(C)=C(C)C(C)=C1C"
+"Indan": "C12=C(CCC2)C=CC=C1"
+"Indene": "C12=C(CC=C2)C=CC=C1"
+"p-Cymene": "CC1=CC=C(C(C)C)C=C1"
+"Tetraphenylcyclopentadienone": "O=C1C(C2=CC=CC=C2)=C(C3=CC=CC=C3)C(C4=CC=CC=C4)=C1C5=CC=CC=C5"
+"trans,trans-1,5-Bis(4-fluorophenyl)-1,4-pentadien-3-one": "O=C(/C=C/C1=CC=C(F)C=C1)/C=C/C2=CC=C(F)C=C2"
+"trans,trans-1,5-Bis(4-methoxyphenyl)-1,4-pentadien-3-one": "O=C(/C=C/C1=CC=C(OC)C=C1)/C=C/C2=CC=C(OC)C=C2"
+"trans,trans-1,5-Bis[4-(trifluoromethyl)phenyl]-1,4-pentadien-3-one": "O=C(/C=C/C1=CC=C(C(F)(F)F)C=C1)/C=C/C2=CC=C(C(F)(F)F)C=C2"
+"trans,trans-1,5-Diphenyl-1,4-pentadien-3-one": "O=C(/C=C/C1=CC=CC=C1)/C=C/C2=CC=CC=C2"
+"Silver": "[Ag]"
+"Gold": "[Au]"
+"Tricarbonyl(cyclooctatetraene)iron": "[C]=O.[C]=O.[C]=O.[Fe].C1=C\\C=C/C=C\\C=C/1"
+"Cerium": "[Ce]"
+"Cobalt": "[Co]"
+"Chromium": "[Cr]"
+"Copper": "[Cu]"
+"(R,R'')-2,2''-Bis(diphenylphosphino)-1,1''-biferrocene": "[Del][Fe][Del].[Del][Fe][Del].P(C1=CC=CC=C1)(c2cccc2c3cccc3P(C4=CC=CC=C4)C5=CC=CC=C5)C6=CC=CC=C6.c7cccc7.c8cccc8"
+"1,1'-Bis(diphenylphosphino)ferrocene": "[Del][Fe][Del].c1(P(C2=CC=CC=C2)C3=CC=CC=C3)cccc1.c4(P(C5=CC=CC=C5)C6=CC=CC=C6)cccc4"
+"[1,1'-Bis(diphenylphosphino)ferrocene]cobalt(II) Dichloride": "[Del][Fe][Del].C1(P(c2cccc2)C3=CC=CC=C3)=CC=CC=C1.C4(P(c5cccc5)C6=CC=CC=C6)=CC=CC=C4.[Co+2].[Cl-].[Cl-]"
+"[1,1'-Bis(diphenylphosphino)ferrocene]nickel(II) Dichloride": "[Del][Fe][Del].P(C1=CC=CC=C1)(c2cccc2)C3=CC=CC=C3.P(C4=CC=CC=C4)(c5cccc5)C6=CC=CC=C6.[Ni+2].[Cl-].[Cl-]"
+"Europium": "[Eu]"
+"Iron": "[Fe]"
+"Tris(2,2'-bipyridyl)ruthenium(II) Chloride Hexahydrate": "[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].C1(C2=NC=CC=C2)=NC=CC=C1.C3(C4=NC=CC=C4)=NC=CC=C3.C5(C6=NC=CC=C6)=NC=CC=C5.[Ru+2].[Cl-].[Cl-]"
+"Manganese(II) Chloride Tetrahydrate": "[H]O[H].[H]O[H].[H]O[H].[H]O[H].[Mn+2].[Cl-].[Cl-]"
+"Hafnium": "[Hf]"
+"Iridium": "[Ir]"
+"Lanthanum": "[La]"
+"Manganese": "[Mn]"
+"Molybdenum": "[Mo]"
+"Neodymium": "[Nd]"
+"Nickel": "[Ni]"
+"Bis(1,5-cyclooctadiene)nickel(0)": "[Ni].C1=C\\CC/C=C\\CC/1.C2=C\\CC/C=C\\CC/2"
+"(1R,2R)-N,N'-Bis[3-oxo-2-(2,4,6-trimethylbenzoyl)butylidene]-1,2-diphenylethylenediaminato Cobalt(II)": "[O-]/C(C)=C(C(C1=C(C)C=C(C)C=C1C)=O)\\C=N\\[C@@H]([C@@H](C2=CC=CC=C2)/N=C/C(C(C3=C(C)C=C(C)C=C3C)=O)=C(C)\\[O-])C4=CC=CC=C4.[Co+2]"
+"(1S,2S)-N,N'-Bis[3-oxo-2-(2,4,6-trimethylbenzoyl)butylidene]-1,2-diphenylethylenediaminato Cobalt(II)": "[O-]/C(C)=C(C(C1=C(C)C=C(C)C=C1C)=O)\\C=N\\[C@H]([C@H](C2=CC=CC=C2)/N=C/C(C(C3=C(C)C=C(C)C=C3C)=O)=C(C)\\[O-])C4=CC=CC=C4.[Co+2]"
+"Tris(2,4-pentanedionato)iron(III)": "[O-]/C(C)=C\\C(C)=O.[O-]/C(C)=C\\C(C)=O.[O-]/C(C)=C\\C(C)=O.[Fe+3]"
+"Tetrakis(2,4-pentanedionato)titanium(IV) (ca. 63% in Isopropyl Alcohol)": "[O-]/C(C)=C\\C(C)=O.[O-]/C(C)=C\\C(C)=O.[O-]CCC.[O-]CCC.[Ti+4]"
+"Tris(dibenzoylmethanato) Iron": "[O-]/C(C1=CC=CC=C1)=C\\C(C2=CC=CC=C2)=O.[O-]/C(C3=CC=CC=C3)=C\\C(C4=CC=CC=C4)=O.[O-]/C(C5=CC=CC=C5)=C\\C(C6=CC=CC=C6)=O.[Fe+3]"
+"Salcomine [=N,N'-Bis(salicylidene)ethylenediiminocobalt(II)]": "[O-]C(C=CC=C1)=C1/C=N/CC/N=C/C2=CC=CC=C2[O-].[Co+2]"
+"Chloronitrosyl[N,N'-bis(3,5-di-tert-butylsalicylidene)-1,1,2,2-tetramethylethylenediaminato]ruthenium(IV)": "[O-]C1=C(/C=N/C(C)(C)C(C)(C)/N=C/C2=C([O-])C(C(C)(C)C)=CC(C(C)(C)C)=C2)C=C(C(C)(C)C)C=C1C(C)(C)C.[N-]=O.[Ru+4].[Cl-]"
+"Tetrabutyl Orthotitanate Tetramer": "[O-]CCCC.[O-]CCCC.[O-]CCCC.[O-]CCCC.[O-]CCCC.[O-]CCCC.[O-]CCCC.[O-]CCCC.[O-]CCCC.[O-]CCCC.[Ti+4].[Ti+4].[O-2].[O-2].[Ti+4].[O-2].[Ti+4]"
+"4-[2-[2-(4-Iodophenoxy)ethoxy]carbonyl]benzoyloxy-2,2,6,6-tetramethylpiperidin-1-oxyl": "[O]N1C(C)(C)CC(OC(C2=CC=CC=C2C(OCCOC3=CC=C(I)C=C3)=O)=O)CC1(C)C"
+"Osmium": "[Os]"
+"Osmium Tetroxide (4% in Water)": "[Os+8].[O-2].[O-2].[O-2].[O-2]"
+"Platinum": "[Pt]"
+"Rhenium": "[Re]"
+"Rhodium": "[Rh]"
+"Ruthenium": "[Ru]"
+"Scandium": "[Sc]"
+"Samarium": "[Sm]"
+"Terbium": "[Tb]"
+"Titanium": "[Ti]"
+"(Pentamethylcyclopentadienyl)titanium(IV) Trichloride": "[Ti+3]C1=C(C)C(C)=C(C)C1(C)C.[Cl-].[Cl-].[Cl-]"
+"Cyclopentadienyltitanium(IV) Trichloride": "[Ti+3]C1=CC=CC1.[Cl-].[Cl-].[Cl-]"
+"(Indenyl)titanium(IV) Trichloride": "[Ti+3]C1C=CC2=C1C=CC=C2.[Cl-].[Cl-].[Cl-]"
+"Titanium(IV) Chloride": "[Ti+4].[Cl-].[Cl-].[Cl-].[Cl-]"
+"Thulium": "[Tm]"
+"Vanadium": "[V]"
+"Tungsten": "[W]"
+"Yttrium": "[Y]"
+"Ytterbium": "[Yb]"
+"Zirconium": "[Zr]"
+"(2-Bromophenyl)diphenylphosphine": "BrC1=CC=CC=C1P(C2=CC=CC=C2)C3=CC=CC=C3"
+"4,6-Bis(diphenylphosphino)phenoxazine": "C(C=CC=C1N2)(P(C3=CC=CC=C3)C4=CC=CC=C4)=C1OC5=C2C=CC=C5P(C6=CC=CC=C6)C7=CC=CC=C7"
+"Bis(trifluoro-2,4-pentanedionato)cobalt(II) Hydrate": "C/C([O-])=C/C(C(F)(F)F)=O.C/C([O-])=C/C(C(F)(F)F)=O.[Co+2]"
+"Bis(2,4-pentanedionato)cobalt(II)": "C/C([O-])=C/C(C)=O.C/C([O-])=C/C(C)=O.[Co+2].O"
+"Bis(2,4-pentanedionato)cobalt(II) Dihydrate": "C/C([O-])=C/C(C)=O.C/C([O-])=C/C(C)=O.[Co+2].O.O"
+"(R)-N,N-Dimethyl-1-[(S)-1',2-bis(diphenylphosphino)ferrocenyl]ethylamine": "C[C@@H](N(C)C)c1c(P(C2=CC=CC=C2)C3=CC=CC=C3)ccc1.[Del][Fe][Del].c4(P(C5=CC=CC=C5)C6=CC=CC=C6)cccc4"
+"(2S,3S)-(-)-Bis(diphenylphosphino)butane": "C[C@H](P(C1=CC=CC=C1)C2=CC=CC=C2)[C@@H](P(C3=CC=CC=C3)C4=CC=CC=C4)C"
+"1-Methyl-1-[4-(diphenylphosphino)benzyl]pyrrolidinium Bromide": "C[N+]1(CC2=CC=C(P(C3=CC=CC=C3)C4=CC=CC=C4)C=C2)CCCC1.[Br-]"
+"9-Mesityl-2,7,10-trimethylacridinium Perchlorate": "C[N+]1=C2C=CC(C)=CC2=C(C3=C(C)C=C(C)C=C3C)C4=C1C=CC(C)=C4.O=Cl(=O)([O-])=O"
+"9-Mesityl-10-methylacridinium Perchlorate": "C[N+]1=C2C=CC=CC2=C(C3=C(C)C=C(C)C=C3C)C4=C1C=CC=C4.O=Cl(=O)([O-])=O"
+"9-(2,6-Dimethylphenyl)-10-methylacridinium Perchlorate": "C[N+]1=C2C=CC=CC2=C(C3=C(C)C=CC=C3C)C4=C1C=CC=C4.O=Cl(=O)([O-])=O"
+"9-(2,5-Dimethylphenyl)-10-methylacridinium Perchlorate": "C[N+]1=C2C=CC=CC2=C(C3=CC(C)=CC=C3C)C4=C1C=CC=C4.O=Cl(=O)([O-])=O"
+"10-Methyl-9-phenylacridinium Perchlorate": "C[N+]1=C2C=CC=CC2=C(C3=CC=CC=C3)C4=C1C=CC=C4.O=Cl(=O)([O-])=O"
+"9-(2-Biphenylyl)-10-methylacridinium Perchlorate": "C[N+]1=C2C=CC=CC2=C(C3=CC=CC=C3C4=CC=CC=C4)C5=C1C=CC=C5.O=Cl(=O)([O-])=O"
+"10-Methylacridinium Perchlorate": "C[N+]1=C2C=CC=CC2=CC3=C1C=CC=C3.O=Cl(=O)([O-])=O"
+"(R,R)-(-)-2,3-Bis(tert-butylmethylphosphino)quinoxaline": "C[P@@](C1=NC2=CC=CC=C2N=C1[P@@](C(C)(C)C)C)C(C)(C)C"
+"(S,S)-1,2-Bis[(tert-butyl)methylphosphino]ethane Bis(borane)": "C[P@@](CC[P@@](C(C)(C)C)C)C(C)(C)C.B.B"
+"(S,S)-(+)-2,3-Bis(tert-butylmethylphosphino)quinoxaline": "C[P@](C1=NC2=CC=CC=C2N=C1[P@](C(C)(C)C)C)C(C)(C)C"
+"Lithium Diphenylphosphide (ca. 0.5mol/L in Tetrahydrofuran)": "C1([P-]C2=CC=CC=C2)=CC=CC=C1.[Li+]"
+"(2R,3R)-(-)-2,3-Bis(diphenylphosphino)bicyclo[2.2.1]hept-5-ene": "C1(C2)[C@@H](P(C3=CC=CC=C3)C4=CC=CC=C4)[C@H](P(C5=CC=CC=C5)C6=CC=CC=C6)C2C=C1"
+"(2S,3S)-(+)-2,3-Bis(diphenylphosphino)bicyclo[2.2.1]hept-5-ene": "C1(C2)[C@H](P(C3=CC=CC=C3)C4=CC=CC=C4)[C@@H](P(C5=CC=CC=C5)C6=CC=CC=C6)C2C=C1"
+"2-(Diphenylphosphino)biphenyl": "C1(C2=CC=CC=C2)=CC=CC=C1P(C3=CC=CC=C3)C4=CC=CC=C4"
+"2-(Dicyclohexylphosphino)biphenyl": "C1(C2=CC=CC=C2)=CC=CC=C1P(C3CCCCC3)C4CCCCC4"
+"2,2'-Bis(diphenylphosphino)biphenyl": "C1(C2=CC=CC=C2P(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1P(C5=CC=CC=C5)C6=CC=CC=C6"
+"Bis[2-(diphenylphosphino)phenyl] Ether": "C1(OC2=CC=CC=C2P(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1P(C5=CC=CC=C5)C6=CC=CC=C6"
+"1,8-Bis(diphenylphosphino)naphthalene": "C1(P(C2=CC=CC=C2)C3=CC=CC=C3)=C4C(P(C5=CC=CC=C5)C6=CC=CC=C6)=CC=CC4=CC=C1"
+"1,2-Bis(diphenylphosphino)benzene": "C1(P(C2=CC=CC=C2)C3=CC=CC=C3)=CC=CC=C1P(C4=CC=CC=C4)C5=CC=CC=C5"
+"Perylene": "C12=CC=CC(C3=CC=CC4=C3C5=CC=C4)=C1C5=CC=C2"
+"Di-1-adamantylphosphine": "C12CC3(PC45CC6CC(C5)CC(C6)C4)CC(C2)CC(C3)C1"
+"Bis(2,4-pentanedionato)vanadium(IV) Oxide": "CC(/C=C([O-])/C)=O.[O-]/C(C)=C\\C(C)=O.[V+4].[O-2]"
+"Bis(2,4-pentanedionato)molybdenum(VI) Dioxide": "CC(/C=C([O-])/C)=O.C/C([O-])=C/C(C)=O.[Mo+6].[O-2].[O-2]"
+"Bis(2,4-pentanedionato)manganese(II) Dihydrate": "CC(/C=C([O-])/C)=O.CC(/C=C([O-])/C)=O.[Mn+2].O.O"
+"Tris(2,4-pentanedionato)cobalt(III)": "CC(/C=C(C)\\[O-])=O.[O-]/C(C)=C\\C(C)=O.[O-]/C(C)=C\\C(C)=O.[Co+3]"
+"Tris(2,4-pentanedionato)manganese(III)": "CC(/C=C(C)\\[O-])=O.[O-]/C(C)=C\\C(C)=O.[O-]/C(C)=C\\C(C)=O.[Mn+3]"
+"Palladium(II) Acetate": "CC([O-])=O.CC([O-])=O.[Pd+2]"
+"(1S,2S)-N,N'-Bis[(R)-2-hydroxy-2'-phenyl-1,1'-binaphthyl-3-ylmethylene]-1,2-diphenylethylenediaminato Manganese(III) Acetate": "CC([O-])=O.OC1=C(C([Mn+]2)=N[C@@H](C3=CC=CC=C3)[C@H](C4=CC=CC=C4)N=C2C5=C(O)C(C6=C7C=CC=CC7=CC=C6C8=CC=CC=C8)=C9C=CC=CC9=C5)C=C%10C=CC=CC%10=C1C%11=C%12C=CC=CC%12=CC=C%11C%13=CC=CC=C%13"
+"Tri-tert-butylphosphonium Tetrafluoroborate": "CC([PH+](C(C)(C)C)C(C)(C)C)(C)C.F[B-](F)(F)F"
+"1,2,3,4,5-Pentaphenyl-1'-(di-tert-butylphosphino)ferrocene": "CC(C)(C)P(C(C)(C)C)c1cccc1.[Del][Fe][Del].c2(C3=CC=CC=C3)c(C4=CC=CC=C4)c(C5=CC=CC=C5)c(C6=CC=CC=C6)c2C7=CC=CC=C7"
+"1,1'-Bis(di-tert-butylphosphino)ferrocene": "CC(C)(C)P(c1cccc1)C(C)(C)C.CC(C)(C)P(c2cccc2)C(C)(C)C.[Del][Fe][Del]"
+"(S)-1-(Diphenylphosphino)-2-[(S)-4-isopropyloxazolin-2-yl]ferrocene": "CC(C)[C@@H]1N=C(c2c(P(C3=CC=CC=C3)C4=CC=CC=C4)ccc2)OC1.[Del][Fe][Del].c5cccc5"
+"Tetraisobutyl Orthotitanate": "CC(C)CO[Ti](OCC(C)C)(OCC(C)C)OCC(C)C"
+"1,1'-Bis(diisopropylphosphino)ferrocene": "CC(C)P(c1cccc1)C(C)C.CC(C)P(c2cccc2)C(C)C.[Del][Fe][Del]"
+"2-Di-tert-butylphosphino-2',4',6'-triisopropylbiphenyl": "CC(C1=C(C2=CC=CC=C2P(C(C)(C)C)C(C)(C)C)C(C(C)C)=CC(C(C)C)=C1)C"
+"2-Dicyclohexylphosphino-2',4',6'-triisopropylbiphenyl": "CC(C1=C(C2=CC=CC=C2P(C3CCCCC3)C4CCCCC4)C(C(C)C)=CC(C(C)C)=C1)C"
+"[1,3-Bis(2,6-diisopropylphenyl)imidazol-2-ylidene]triphenylphosphine Nickel(II) Dichloride": "CC(C1=C(N(C=CN2C3=C(C(C)C)C=CC=C3C(C)C)C2=P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6)C(C(C)C)=CC=C1)C.[Ni+2].[Cl-].[Cl-]"
+"1,3-Bis(2,6-diisopropylphenyl)-1,3,2-diazaphospholidine 2-Oxide": "CC(C1=C(N2P(N(C3=C(C(C)C)C=CC=C3C(C)C)CC2)=O)C(C(C)C)=CC=C1)C"
+"Dicyclohexyl(2,4,6-triisopropylphenyl)phosphine": "CC(C1=C(P(C2CCCCC2)C3CCCCC3)C(C(C)C)=CC(C(C)C)=C1)C"
+"Tris(2,4-di-tert-butylphenyl) Phosphite": "CC(C1=CC=C(OP(OC2=CC=C(C(C)(C)C)C=C2C(C)(C)C)OC3=CC=C(C(C)(C)C)C=C3C(C)(C)C)C(C(C)(C)C)=C1)(C)C"
+"3-Methyl-1-phenyl-2-phospholene 1-Oxide": "CC(CC1)=CP1(C2=CC=CC=C2)=O"
+"Tetraisopropyl Orthotitanate": "CC(O[Ti](OC(C)C)(OC(C)C)OC(C)C)C"
+"2-Dicyclohexylphosphino-2',6'-diisopropoxybiphenyl": "CC(OC1=C(C2=CC=CC=C2P(C3CCCCC3)C4CCCCC4)C(OC(C)C)=CC=C1)C"
+"Di-tert-butylphenylphosphine": "CC(P(C(C)(C)C)C1=CC=CC=C1)(C)C"
+"(4-Dimethylaminophenyl)di-tert-butylphosphine": "CC(P(C1=CC=C(N(C)C)C=C1)C(C)(C)C)(C)C"
+"Isopropyldiphenylphosphine": "CC(P(C1=CC=CC=C1)C2=CC=CC=C2)C"
+"2-(Di-tert-butylphosphino)biphenyl": "CC(P(C1=CC=CC=C1C2=CC=CC=C2)C(C)(C)C)(C)C"
+"1-[2-(Di-tert-butylphosphino)phenyl]-3,5-diphenyl-1H-pyrazole": "CC(P(C1=CC=CC=C1N2N=C(C3=CC=CC=C3)C=C2C4=CC=CC=C4)C(C)(C)C)(C)C"
+"Chlorodiisopropylphosphine": "CC(P(Cl)C(C)C)C"
+"1,3-Bis[(di-tert-butylphosphino)oxy]benzene": "CC(P(OC1=CC(OP(C(C)(C)C)C(C)(C)C)=CC=C1)C(C)(C)C)(C)C"
+"4,4,5,5-Tetramethyl-1,3,2-dioxaphospholane 2-Oxide": "CC1(C)C(C)(C)OP(O1)=O"
+"4,5-Bis(diphenylphosphino)-9,9-dimethylxanthene": "CC1(C)C2=C(OC3=C1C=CC=C3P(C4=CC=CC=C4)C5=CC=CC=C5)C(P(C6=CC=CC=C6)C7=CC=CC=C7)=CC=C2"
+"4-Acetamido-2,2,6,6-tetramethylpiperidine 1-Oxyl": "CC1(C)CC(NC(C)=O)CC(C)(C)N1[O]"
+"4-Hydroxy-2,2,6,6-tetramethylpiperidine 1-Oxyl Benzoate": "CC1(C)CC(OC(C2=CC=CC=C2)=O)CC(C)(C)N1[O]"
+"4-Methoxy-2,2,6,6-tetramethylpiperidine 1-Oxyl ": "CC1(C)CC(OC)CC(C)(C)N1[O]"
+"2,2,6,6-Tetramethylpiperidine 1-Oxyl Free Radical": "CC1(C)CCCC(C)(C)N1[O]"
+"(2S,3S)-(+)-1,4-Bis(diphenylphosphino)-2,3-O-isopropylidene-2,3-butanediol": "CC1(O[C@@H]([C@H](O1)CP(C2=CC=CC=C2)C3=CC=CC=C3)CP(C4=CC=CC=C4)C5=CC=CC=C5)C"
+"(2R,3R)-(-)-1,4-Bis(diphenylphosphino)-2,3-O-isopropylidene-2,3-butanediol": "CC1(O[C@H]([C@@H](O1)CP(C2=CC=CC=C2)C3=CC=CC=C3)CP(C4=CC=CC=C4)C5=CC=CC=C5)C"
+"(1R,2R)-N,N'-Bis(2-acetyl-3-oxo-2-butenylidene)-1,2-dimesitylethylenediaminato Cobalt(II)": "CC1=C(C(C)=CC(C)=C1)[C@@H](/N=C/C=C(C(C)=O)\\C[O-])[C@@H](C2=C(C)C=C(C)C=C2C)/N=C/C=C(C(C)=O)\\C[O-].[Co+2]"
+"(1S,2S)-N,N'-Bis(2-acetyl-3-oxo-2-butenylidene)-1,2-dimesitylethylenediaminato Cobalt(II)": "CC1=C(C(C)=CC(C)=C1)[C@H](/N=C/C=C(C(C)=O)\\C[O-])[C@H](C2=C(C)C=C(C)C=C2C)/N=C/C=C(C(C)=O)\\C[O-].[Co+2]"
+"Tri(m-tolyl)phosphine": "CC1=CC(P(C2=CC=CC(C)=C2)C3=CC=CC(C)=C3)=CC=C1"
+"Tri(p-tolyl)phosphine": "CC1=CC=C(P(C2=CC=C(C)C=C2)C3=CC=C(C)C=C3)C=C1"
+"Chlorobis[dicyclohexyl(phenyl)phosphino](o-tolyl)nickel(II)": "CC1=CC=CC=C1[Ni-2](P(C2CCCCC2)(C3CCCCC3)C4=CC=CC=C4)(Cl)P(C5CCCCC5)(C6CCCCC6)C7=CC=CC=C7"
+"Tri(o-tolyl)phosphine": "CC1=CC=CC=C1P(C2=CC=CC=C2C)C3=CC=CC=C3C"
+"Tetrapropylammonium Perruthenate": "CCC[N+](CCC)(CCC)CCC.O=[Ru](=O)([O-])=O"
+"Tetrabutylammonium Perrhenate": "CCCC[N+](CCCC)(CCCC)CCCC.O=[Re](=O)([O-])=O"
+"Tri-n-octylphosphine Oxide": "CCCCCCCCP(CCCCCCCC)(CCCCCCCC)=O"
+"Tri-n-octylphosphine": "CCCCCCCCP(CCCCCCCC)CCCCCCCC"
+"Trihexylphosphine": "CCCCCCP(CCCCCC)CCCCCC"
+"Tetrabutyl Orthotitanate": "CCCCO[Ti](OCCCC)(OCCCC)OCCCC"
+"Tributylphosphine Oxide": "CCCCP(CCCC)(CCCC)=O"
+"Diphenylpropylphosphine": "CCCP(C1=CC=CC=C1)C2=CC=CC=C2"
+"Dichloro(diethylamino)phosphine": "CCN(P(Cl)Cl)CC"
+"Tris(diethylamino)phosphine": "CCN(P(N(CC)CC)N(CC)CC)CC"
+"Ethoxydiphenylphosphine": "CCOP(C1=CC=CC=C1)C2=CC=CC=C2"
+"Ethyldiphenylphosphine": "CCP(C1=CC=CC=C1)C2=CC=CC=C2"
+"Diethylphenylphosphine": "CCP(CC)C1=CC=CC=C1"
+"Dichlorotitanium Diisopropoxide": "Cl[Ti+2]Cl.CC([O-])C.CC([O-])C"
+"Bis[tris(2,4-pentanedionato)titanium(IV)] Hexachlorotitanate(IV)": "Cl[Ti-2](Cl)(Cl)(Cl)(Cl)Cl.C/C([O-])=C\\C(C)=O.C/C([O-])=C\\C(C)=O.C/C([O-])=C\\C(C)=O.C/C([O-])=C\\C(C)=O.C/C([O-])=C\\C(C)=O.C/C([O-])=C\\C(C)=O.[Ti+4].[Ti+4]"
+"Di-tert-butylchlorophosphine": "ClP(C(C)(C)C)C(C)(C)C"
+"Chlorodiphenylphosphine": "ClP(C1=CC=CC=C1)C2=CC=CC=C2"
+"Chlorodicyclohexylphosphine": "ClP(C1CCCCC1)C2CCCCC2"
+"Dichlorophenylphosphine": "ClP(Cl)C1=CC=CC=C1"
+"1,1'-Bis(dichlorophosphino)ferrocene": "ClP(Cl)c1cccc1.ClP(Cl)c2cccc2.[Del][Fe][Del]"
+"2-Chloro-1,3,2-dioxaphospholane": "ClP1OCCO1"
+"Tetrakis(dimethylamino)titanium(IV)": "CN([Ti](N(C)C)(N(C)C)N(C)C)C"
+"(S)-N,N-Dimethyl-1-[(R)-2-(diphenylphosphino)ferrocenyl]ethylamine": "CN(C)[C@@H](CP(C1=CC=CC=C1)C2=CC=CC=C2)c3cccc3.[Del][Fe][Del].c4cccc4"
+"(R)-N,N-Dimethyl-1-[(S)-2-(diphenylphosphino)ferrocenyl]ethylamine": "CN(C)[C@H](c1cccc1)CP(C2=CC=CC=C2)C3=CC=CC=C3.[Del][Fe][Del].c4cccc4"
+"2-(Dicyclohexylphosphino)-2'-(dimethylamino)biphenyl": "CN(C1=CC=CC=C1C2=CC=CC=C2P(C3CCCCC3)C4CCCCC4)C"
+"2-Dicyclohexylphosphino-2',6'-dimethoxybiphenyl": "COC1=C(C2=CC=CC=C2P(C3CCCCC3)C4CCCCC4)C(OC)=CC=C1"
+"Tris(2,6-dimethoxyphenyl)phosphine": "COC1=C(P(C2=C(OC)C=CC=C2OC)C3=C(OC)C=CC=C3OC)C(OC)=CC=C1"
+"Tris(4-methoxyphenyl)phosphine": "COC1=CC=C(P(C2=CC=C(OC)C=C2)C3=CC=C(OC)C=C3)C=C1"
+"(R)-(+)-2-Diphenylphosphino-2'-methoxy-1,1'-binaphthyl": "COC1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3P(C5=CC=CC=C5)C6=CC=CC=C6"
+"(S,S)-1,2-Bis[(2-methoxyphenyl)phenylphosphino]ethane": "COC1=CC=CC=C1[P@@](CC[P@](C2=CC=CC=C2OC)C3=CC=CC=C3)C4=CC=CC=C4"
+"(R,R)-1,2-Bis[(2-methoxyphenyl)phenylphosphino]ethane": "COC1=CC=CC=C1[P@](CC[P@@](C2=CC=CC=C2OC)C3=CC=CC=C3)C4=CC=CC=C4"
+"Tris(2-methoxyphenyl)phosphine": "COC1=CC=CC=C1P(C2=CC=CC=C2OC)C3=CC=CC=C3OC"
+"Methoxymethyl(diphenyl)phosphine Oxide": "COCP(C1=CC=CC=C1)(C2=CC=CC=C2)=O"
+"Methoxydiphenylphosphine": "COP(C1=CC=CC=C1)C2=CC=CC=C2"
+"Trimethylphosphine": "CP(C)C"
+"Methyl(diphenyl)phosphine Oxide": "CP(C1=CC=CC=C1)(C2=CC=CC=C2)=O"
+"Methyldiphenylphosphine": "CP(C1=CC=CC=C1)C2=CC=CC=C2"
+"1,2-Bis(dimethylphosphino)ethane": "CP(CCP(C)C)C"
+"Tricyclohexylphosphonium Tetrafluoroborate": "F[B-](F)(F)F.[PH+](C1CCCCC1)(C2CCCCC2)C3CCCCC3"
+"Tris[3,5-bis(trifluoromethyl)phenyl]phosphine": "FC(C1=CC(C(F)(F)F)=CC(P(C2=CC(C(F)(F)F)=CC(C(F)(F)F)=C2)C3=CC(C(F)(F)F)=CC(C(F)(F)F)=C3)=C1)(F)F"
+"Manganese(II) Bis(trifluoromethanesulfonyl)imide": "FC(F)(S(=O)([N-]S(=O)(C(F)(F)F)=O)=O)F.FC(F)(S(=O)([N-]S(=O)(C(F)(F)F)=O)=O)F.[Mn+2]"
+"Tris(pentafluorophenyl)phosphine": "FC1=C(F)C(F)=C(F)C(F)=C1P(C2=C(F)C(F)=C(F)C(F)=C2F)C3=C(F)C(F)=C(F)C(F)=C3F"
+"Bis(pentafluorophenyl)phenylphosphine": "FC1=C(F)C(F)=C(F)C(F)=C1P(C2=C(F)C(F)=C(F)C(F)=C2F)C3=CC=CC=C3"
+"(Pentafluorophenyl)diphenylphosphine": "FC1=C(F)C(F)=C(F)C(F)=C1P(C2=CC=CC=C2)C3=CC=CC=C3"
+"1,2-Bis[bis(pentafluorophenyl)phosphino]ethane": "FC1=C(F)C(F)=C(F)C(F)=C1P(CCP(C2=C(F)C(F)=C(F)C(F)=C2F)C3=C(F)C(F)=C(F)C(F)=C3F)C4=C(F)C(F)=C(F)C(F)=C4F"
+"Tris(4-fluorophenyl)phosphine": "FC1=CC=C(P(C2=CC=C(F)C=C2)C3=CC=C(F)C=C3)C=C1"
+"2-(Diphenylphosphino)benzonitrile": "N#CC1=CC=CC=C1P(C2=CC=CC=C2)C3=CC=CC=C3"
+"(3-Phenyl-1H-inden-1-ylidene)bis(tricyclohexylphosphine)ruthenium(II) Dichloride ": "[Ru+2]=C1C=C(C2=CC=CC=C2)C3=C1C=CC=C3.P(C4CCCCC4)(C5CCCCC5)C6CCCCC6.P(C7CCCCC7)(C8CCCCC8)C9CCCCC9.[Cl-].[Cl-]"
+"Bis(2,4-pentanedionato)bis(2-propanolato)titanium(IV)": "CC(/C=C(C)\\[O-])=O.CC(/C=C(C)\\[O-])=O.[O-]C(C)C.[O-]C(C)C.[Ti+4]"
+"Cyclopentadienyliron Dicarbonyl Dimer": "[C]=O.[C]=O.[Fe]C1=CC=CC1"
+"Dicobalt Octacarbonyl (stabilized with 1-5% Hexane)": "[CH-]=O.[CH-]=O.[C-]#[O+].[C-]#[O+].[C-]#[O+].[C-]#[O+].[C-]#[O+].[C-]#[O+].[Co].[Co+2]"
+"Dimethyltitanocene": "C[Ti]C.c1cccc1.c2cccc2"
+"Tricyclohexylphosphine": "P(C1CCCCC1)(C2CCCCC2)C3CCCCC3"
+"Tris(2-phenylpyridinato)iridium(III)": "C1(C2=CC=CC=C2)=NC=CC=C1.C3(C4=CC=CC=C4)=NC=CC=C3.C5(C6=CC=CC=C6)=NC=CC=C5.[Ir]"
+"3-(Diphenylphosphino)-1-propylamine": "NCCCP(C1=CC=CC=C1)C2=CC=CC=C2"
+"4-Acetamido-2,2,6,6-tetramethyl-1-oxopiperidinium Tetrafluoroborate": "O=[N+]1C(C)(C)CC(NC(C)=O)CC1(C)C.F[B-](F)(F)F"
+"Potassium Perrhenate": "O=[Re](=O)([O-])=O.[K+]"
+"Bis(2,4-pentanedionato)nickel(II) Hydrate": "O=C(/C=C([O-])/C)C.O=C(/C=C([O-])/C)C.[Ni+2].O"
+"Bis(hexafluoroacetylacetonato)nickel(II) Hydrate": "O=C(/C=C(C(F)(F)F)\\[O-])C(F)(F)F.[O-]/C(C(F)(F)F)=C\\C(C(F)(F)F)=O.[Ni+2]"
+"Palladium(II) Trifluoroacetate": "O=C([O-])C(F)(F)F.O=C([O-])C(F)(F)F.[Pd+2]"
+"Tris(2-carboxyethyl)phosphine Hydrochloride": "O=C(CCP(CCC(O)=O)CCC(O)=O)O.[H]Cl"
+"4-(Diphenylphosphino)benzoic Acid": "O=C(O)C1=CC=C(P(C2=CC=CC=C2)C3=CC=CC=C3)C=C1"
+"2-(Diphenylphosphino)benzoic Acid": "O=C(O)C1=CC=CC=C1P(C2=CC=CC=C2)C3=CC=CC=C3"
+"Tetrabromofluorescein": "O=C1OC2(C3=C(OC4=C2C=CC(O)=C4)C=C(O)C=C3)C5=C1C(Br)=C(Br)C(Br)=C5Br"
+"2-Chloro-4H-1,3,2-benzodioxaphosphorin-4-one": "O=C1OP(Cl)OC2=CC=CC=C12"
+"2-(Diphenylphosphino)benzaldehyde": "O=CC1=CC=CC=C1P(C2=CC=CC=C2)C3=CC=CC=C3"
+"Triphenylphosphine Oxide": "O=P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"Diphenylphosphinic Chloride": "O=P(C1=CC=CC=C1)(C2=CC=CC=C2)Cl"
+"Phenylphosphonic Dichloride": "O=P(C1=CC=CC=C1)(Cl)Cl"
+"Diphenylphosphine Oxide": "O=P(C1=CC=CC=C1)C2=CC=CC=C2"
+"4-Chlorophenyl Phosphorodichloridate": "O=P(Cl)(Cl)OC1=CC=C(Cl)C=C1"
+"Diphosphoryl Chloride": "O=P(OP(O)(O)=O)(Cl)O"
+"(±)-1,1'-Binaphthyl-2,2'-diyl Hydrogenphosphate": "O=P1(OC2=CC=C3C=CC=CC3=C2C4=C5C=CC=CC5=CC=C4O1)O"
+"Nickel(II) Trifluoromethanesulfonate": "O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Ni+2]"
+"Sodium Diphenylphosphinobenzene-3-sulfonate": "O=S(C1=CC(P(C2=CC=CC=C2)C3=CC=CC=C3)=CC=C1)([O-])=O.[Na+]"
+"2-Hydroxy-2-azaadamantane": "ON1C2CC3CC(C2)CC1C3"
+"Thiophosphoryl Chloride": "OP(O)(Cl)=S"
+"trans-1,2-Bis(diphenylphosphino)ethylene": "P(/C=C/P(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4"
+"Triphenylphosphine": "P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"Bis(triphenylphosphine)nickel(II) Dichloride": "P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6.[Ni+2].[Cl-].[Cl-]"
+"Tris(triphenylphosphine)ruthenium(II) Dichloride": "P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6.P(C7=CC=CC=C7)(C8=CC=CC=C8)C9=CC=CC=C9.[Ru+2].[Cl-].[Cl-]"
+"Diphenyl-2-pyridylphosphine": "P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=NC=CC=C3"
+"Cyclohexyldiphenylphosphine": "P(C1=CC=CC=C1)(C2CCCCC2)C3=CC=CC=C3"
+"Tri(2-furyl)phosphine": "P(C1=CC=CO1)(C2=CC=CO2)C3=CC=CO3"
+"Tri(2-thienyl)phosphine": "P(C1=CC=CS1)(C2=CC=CS2)C3=CC=CS3"
+"Dicyclohexylphenylphosphine": "P(C1CCCCC1)(C2CCCCC2)C3=CC=CC=C3"
+"Bis(tricyclohexylphosphine)nickel(II) Dichloride": "P(C1CCCCC1)(C2CCCCC2)C3CCCCC3.P(C4CCCCC4)(C5CCCCC5)C6CCCCC6.[Ni+2].[Cl-].[Cl-]"
+"1,6-Bis(diphenylphosphino)hexane": "P(CCCCCCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4"
+"1,5-Bis(diphenylphosphino)pentane": "P(CCCCCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4"
+"1,4-Bis(diphenylphosphino)butane": "P(CCCCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4"
+"1,3-Bis(diphenylphosphino)propane": "P(CCCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4"
+"[1,3-Bis(diphenylphosphino)propane]nickel(II) Dichloride": "P(CCCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4.[Ni+2].[Cl-].[Cl-]"
+"1,2-Bis(diphenylphosphino)ethane": "P(CCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4"
+"[1,2-Bis(diphenylphosphino)ethane]nickel(II) Dichloride": "P(CCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4.[Ni+2].[Cl-].[Cl-]"
+"Bis(diphenylphosphino)methane": "P(CP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4"
+"Triphenyl Phosphite": "P(OC1=CC=CC=C1)(OC2=CC=CC=C2)OC3=CC=CC=C3"
+"Tebbe reagent": "C[Al-]1(C[Ti+2][Cl+]1)C.[cH-]1cccc1.[cH-]1cccc1"
diff --git a/lib/cdx/below_arrow/chiral_auxiliaries.yaml b/lib/cdx/below_arrow/chiral_auxiliaries.yaml
new file mode 100644
index 0000000000..65f6f5c8bf
--- /dev/null
+++ b/lib/cdx/below_arrow/chiral_auxiliaries.yaml
@@ -0,0 +1,171 @@
+"(-)-10,2-Camphorsultam": "CC1(C)C2(C3)CCC1CC2NS3(=O)=O"
+"(-)-2,2'-Methylenebis[(3aS,8aR)-3a,8a-dihydro-8H-indeno[1,2-d]oxazole]": "[H][C@@]12N=C(CC3=N[C@]4([H])[C@](CC5=C4C=CC=C5)([H])O3)O[C@]1([H])CC6=C2C=CC=C6"
+"(-)-4,5-Bis[hydroxy(diphenyl)methyl]-2,2-dimethyl-1,3-dioxolane": "CC1(C)OC(C(C2=CC=CC=C2)(O)C3=CC=CC=C3)C(C(C4=CC=CC=C4)(O)C5=CC=CC=C5)O1"
+"(-)-B-Chlorodiisopinocampheylborane": "CC1(C)C2CC(B(Cl)C3CC4CC(C3C)C4(C)C)C(C)C1C2"
+"(-)-Isopinocampheylborane TMEDA Complex": "B[C@H]1[C@H](C)C2C(C(C1)C2)(C)C.B[C@H]3[C@H](C)C4C(C(C3)C4)(C)C.CN(C)CCN(C)C"
+"(-)-Sparteine": "[H][C@]12CCCCN1C[C@H]3[C@]4([H])CCCCN4C[C@@H]2C3"
+"(+)-10,2-Camphorsultam": "CC1(C)C2(C3)CCC1CC2NS3(=O)=O"
+"(+)-2,2'-Methylenebis[(3aR,8aS)-3a,8a-dihydro-8H-indeno[1,2-d]oxazole]": "[H][C@]12N=C(CC3=N[C@@]4([H])[C@@](CC5=C4C=CC=C5)([H])O3)O[C@@]1([H])CC6=C2C=CC=C6"
+"(+)-4,5-Bis[hydroxy(diphenyl)methyl]-2,2-dimethyl-1,3-dioxolane": "CC1(C)OC(C(C2=CC=CC=C2)(O)C3=CC=CC=C3)C(C(C4=CC=CC=C4)(O)C5=CC=CC=C5)O1"
+"(+)-B-Chlorodiisopinocampheylborane": "CN(C)CCN(C)C.CC1(C)C2CC(BC3CC4CC(C3C)C4(C)C)C(C)C1C2"
+"(+)-Sparteine": "[H][C@]12CCCCN1C[C@H]3[C@]4([H])CCCCN4C[C@@H]2C3"
+"(11bS)-2,6-Bis[bis[3,5-bis(trifluoromethyl)phenyl]hydroxymethyl]-3,5-dihydrospiro[4H-dinaphth[2,1-c:1',2'-e]azepine-4,4'-morpholinium] Bromide": "OC(C1=C2C(C3=C4C=CC=CC4=CC(C(C5=CC(C(F)(F)F)=CC(C(F)(F)F)=C5)(C6=CC(C(F)(F)F)=CC(C(F)(F)F)=C6)O)=C3C(Br)[N]7(CCOCC7)C2)=C8C=CC=CC8=C1)(C9=CC(C(F)(F)F)=CC(C(F)(F)F)=C9)C%10=CC(C(F)(F)F)=CC(C(F)(F)F)=C%10"
+"(11R,12R)-9,10-Dihydro-9,10-ethanoanthracene-11,12-diamine": "N[C@H]1[C@H](N)C2C3=C(C=CC=C3)C1C4=CC=CC=C24"
+"(11S,12S)-9,10-Dihydro-9,10-ethanoanthracene-11,12-diamine": "N[C@@H]1[C@@H](N)C2C3=C(C=CC=C3)C1C4=CC=CC=C24"
+"(1R,2R)-1,2-Bis(2-hydroxyphenyl)ethylenediamine": "N[C@H](C1=CC=CC=C1O)[C@@H](C2=CC=CC=C2O)N"
+"(1R,2R)-N,N'-Bis(2-acetyl-3-oxo-2-butenylidene)-1,2-dimesitylethylenediaminato Cobalt(II)": "CC1=C(C(C)=CC(C)=C1)[C@@H](/N=C/C=C(C(C)=O)\\C[O-])[C@@H](C2=C(C)C=C(C)C=C2C)/N=C/C=C(C(C)=O)\\C[O-].[Co+2]"
+"(1R,2R)-N,N'-Bis[3-oxo-2-(2,4,6-trimethylbenzoyl)butylidene]-1,2-diphenylethylenediaminato Cobalt(II)": "[O-]/C(C)=C(C(C1=C(C)C=C(C)C=C1C)=O)\\C=N\\[C@@H]([C@@H](C2=CC=CC=C2)/N=C/C(C(C3=C(C)C=C(C)C=C3C)=O)=C(C)\\[O-])C4=CC=CC=C4.[Co+2]"
+"(1R,2R)-N,N'-Dihydroxy-N,N'-bis(diphenylacetyl)cyclohexane-1,2-diamine": "O=C(N(O)[C@H]1[C@H](N(O)C(C(C2=CC=CC=C2)C3=CC=CC=C3)=O)CCCC1)C(C4=CC=CC=C4)C5=CC=CC=C5"
+"(1R,2S)-2-[N-Benzyl-N-(mesitylenesulfonyl)amino]-1-phenyl-1-propanol": "C[C@H](N(CC1=CC=CC=C1)S(=O)(C(C(C)=CC(C)=C2)=C2C)=O)[C@@H](C3=CC=CC=C3)O"
+"(1R,2S)-2-[N-Benzyl-N-(mesitylenesulfonyl)amino]-1-phenylpropyl Propionate [Reagent for anti-selective asymmetric aldol reaction]": "CCC(O[C@H](C1=CC=CC=C1)[C@@H](N(CC2=CC=CC=C2)S(=O)(C(C(C)=CC(C)=C3)=C3C)=O)C)=O"
+"(1R,3S,5R,7R,8aS)-7-Ethylhexahydro-1-(6-hydroxy-4-quinolinyl)-3,7-methano-1H-pyrrolo[2,1-c][1,4]oxazine": "OC1=CC=C2N=CC=C([C@H]3O[C@](C4)([H])C[N@@]5[C@@]3([H])C[C@@]4(CC)C5)C2=C1"
+"(1R,4R,5R)-4,7,7-Trimethyl-6-thiabicyclo[3.2.1]octane": "CC1(C)S[C@@]2([H])[C@H](C)CC[C@]1([H])C2"
+"(1S)-3-(1,10-Phenanthrolin-2-yl)-2'-phenyl-[1,1'-binaphthalen]-2-ol": "OC1=C(C2=NC3=C4N=CC=CC4=CC=C3C=C2)C=C5C=CC=CC5=C1C6=C7C=CC=CC7=CC=C6C8=CC=CC=C8"
+"(1S,2R)-2-[N-Benzyl-N-(mesitylenesulfonyl)amino]-1-phenyl-1-propanol": "C[C@@H](N(CC1=CC=CC=C1)S(=O)(C(C(C)=CC(C)=C2)=C2C)=O)[C@H](C3=CC=CC=C3)O"
+"(1S,2R)-2-[N-Benzyl-N-(mesitylenesulfonyl)amino]-1-phenylpropyl Propionate": "CCC(O[C@@H](C1=CC=CC=C1)[C@H](N(CC2=CC=CC=C2)S(=O)(C(C(C)=CC(C)=C3)=C3C)=O)C)=O"
+"(1S,2S)-N,N'-Bis(2-acetyl-3-oxo-2-butenylidene)-1,2-dimesitylethylenediaminato Cobalt(II)": "CC1=C(C(C)=CC(C)=C1)[C@H](/N=C/C=C(C(C)=O)\\C[O-])[C@H](C2=C(C)C=C(C)C=C2C)/N=C/C=C(C(C)=O)\\C[O-].[Co+2]"
+"(1S,2S)-N,N'-Bis[(R)-2-hydroxy-2'-phenyl-1,1'-binaphthyl-3-ylmethylene]-1,2-diphenylethylenediaminato Manganese(III) Acetate": "CC([O-])=O.OC1=C(C([Mn+]2)=N[C@@H](C3=CC=CC=C3)[C@H](C4=CC=CC=C4)N=C2C5=C(O)C(C6=C7C=CC=CC7=CC=C6C8=CC=CC=C8)=C9C=CC=CC9=C5)C=C%10C=CC=CC%10=C1C%11=C%12C=CC=CC%12=CC=C%11C%13=CC=CC=C%13"
+"(1S,2S)-N,N'-Bis[3-oxo-2-(2,4,6-trimethylbenzoyl)butylidene]-1,2-diphenylethylenediaminato Cobalt(II)": "[O-]/C(C)=C(C(C1=C(C)C=C(C)C=C1C)=O)\\C=N\\[C@H]([C@H](C2=CC=CC=C2)/N=C/C(C(C3=C(C)C=C(C)C=C3C)=O)=C(C)\\[O-])C4=CC=CC=C4.[Co+2]"
+"(1S,2S)-N,N'-Dihydroxy-N,N'-bis(diphenylacetyl)cyclohexane-1,2-diamine": "O=C(N(O)[C@@H]1[C@@H](N(O)C(C(C2=CC=CC=C2)C3=CC=CC=C3)=O)CCCC1)C(C4=CC=CC=C4)C5=CC=CC=C5"
+"(1S,4S,5S)-4,7,7-Trimethyl-6-thiabicyclo[3.2.1]octane": "CC1(C)S[C@]2([H])[C@@H](C)CC[C@@]1([H])C2"
+"(2R,3R)-(-)-1,4-Bis(diphenylphosphino)-2,3-O-isopropylidene-2,3-butanediol": "CC1(O[C@H]([C@@H](O1)CP(C2=CC=CC=C2)C3=CC=CC=C3)CP(C4=CC=CC=C4)C5=CC=CC=C5)C"
+"(2R,3R)-(-)-2,3-Bis(diphenylphosphino)bicyclo[2.2.1]hept-5-ene": "C1(C2)[C@@H](P(C3=CC=CC=C3)C4=CC=CC=C4)[C@H](P(C5=CC=CC=C5)C6=CC=CC=C6)C2C=C1"
+"(2R,8aS)-(+)-(Camphorylsulfonyl)oxaziridine": "O=S(N1OC1)(CC23C(CC(C(C)3C)CC2)=O)=O"
+"(2S)-N-[(1S)-1-(Hydroxydiphenylmethyl)-3-methylbutyl]-2-pyrrolidinecarboxamide": "O=C([C@H]1NCCC1)N[C@H](C(C2=CC=CC=C2)(O)C3=CC=CC=C3)CC(C)C"
+"(2S,3S)-(-)-Bis(diphenylphosphino)butane": "C[C@H](P(C1=CC=CC=C1)C2=CC=CC=C2)[C@@H](P(C3=CC=CC=C3)C4=CC=CC=C4)C"
+"(2S,3S)-(+)-1,4-Bis(diphenylphosphino)-2,3-O-isopropylidene-2,3-butanediol": "CC1(O[C@@H]([C@H](O1)CP(C2=CC=CC=C2)C3=CC=CC=C3)CP(C4=CC=CC=C4)C5=CC=CC=C5)C"
+"(2S,5S)-(-)-2-tert-Butyl-3-methyl-5-benzyl-4-imidazolidinone": "O=C1N(C)[C@@H](C(C)(C)C)N[C@H]1CC2=CC=CC=C2"
+"(2S,8aR)-(-)-(Camphorylsulfonyl)oxaziridine": "O=S(N1OC1)(CC23C(CC(C(C)3C)CC2)=O)=O"
+"(4R)-(+)-4-Isopropyl-5,5-diphenyl-2-oxazolidinone": "O=C1OC(C2=CC=CC=C2)(C3=CC=CC=C3)[C@@H](C(C)C)N1"
+"(4R,5R)-1,3-Dimethyl-4,5-diphenyl-2-[(S)-1-benzyl-2-hydroxyethylimino]imidazolidine": "OC[C@H](CC1=CC=CC=C1)N=C2N(C)[C@H](C3=CC=CC=C3)[C@@H](C4=CC=CC=C4)N2C"
+"(4S)-(-)-4-Isopropyl-5,5-diphenyl-2-oxazolidinone": "O=C1OC(C2=CC=CC=C2)(C3=CC=CC=C3)[C@H](C(C)C)N1"
+"(4S,5S)-1,3-Dimethyl-4,5-diphenyl-2-[(R)-1-benzyl-2-hydroxyethylimino]imidazolidine": "OC[C@@H](CC1=CC=CC=C1)N=C2N(C)[C@@H](C3=CC=CC=C3)[C@H](C4=CC=CC=C4)N2C"
+"(R)-(-)-(3,5-Dioxa-4-phosphacyclohepta[2,1-a;3,4-a']dinaphthalen-4-yl)dimethylamine": "CN(P1OC2=CC=C3C=CC=CC3=C2C4=C5C=CC=CC5=CC=C4O1)C"
+"(R)-(-)-1-(2-Pyrrolidinylmethyl)pyrrolidine": "N1(C[C@@H]2NCCC2)CCCC1"
+"(R)-(-)-1,1'-Binaphthyl-2,2'-diyl Bis(trifluoromethanesulfonate)": "O=S(C(F)(F)F)(OC1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3OS(C(F)(F)F)(=O)=O)=O"
+"(R)-(-)-1,1'-Binaphthyl-2,2'-diyl Hydrogen Phosphate": "O=P1(OC2=CC=C3C=CC=CC3=C2C4=C5C=CC=CC5=CC=C4O1)O"
+"(R)-(-)-2-[Hydroxy(diphenyl)methyl]-1-methylpyrrolidine": "CN1[C@@H](C(C2=CC=CC=C2)(O)C3=CC=CC=C3)CCC1"
+"(R)-(-)-4-Benzyl-3-propionyl-2-oxazolidinone": "O=C1OC[C@@H](CC2=CC=CC=C2)N1C(CC)=O"
+"(R)-(-)-4-Isopropyl-3-propionyl-2-oxazolidinone": "O=C1OC[C@@H](C(C)C)N1C(CC)=O"
+"(R)-(-)-4-Phenyl-2-oxazolidinone": "O=C1OC[C@@H](C2=CC=CC=C2)N1"
+"(R)-(-)-6,6'-Dibromo-1,1'-bi-2-naphthol": "OC1=CC=C2C=C(Br)C=CC2=C1C3=C4C=CC(Br)=CC4=CC=C3O"
+"(R)-(-)-p-Toluenesulfinamide": "CC1=CC=C([S@](N)=O)C=C1"
+"(R)-(+)-1,1'-Bi-2-naphthol": "OC1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3O"
+"(R)-(+)-1,1'-Binaphthyl-2,2'-diamine": "NC1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3N"
+"(R)-(+)-2-Amino-2'-hydroxy-1,1'-binaphthyl": "OC1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3N"
+"(R)-(+)-2-Diphenylphosphino-2'-methoxy-1,1'-binaphthyl": "COC1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3P(C5=CC=CC=C5)C6=CC=CC=C6"
+"(R)-(+)-3,3'-Dibromo-5,5',6,6',7,7',8,8'-octahydro-1,1'-bi-2-naphthol": "OC1=C(Br)C=C2CCCCC2=C1C3=C4CCCCC4=CC(Br)=C3O"
+"(R)-(+)-5,5',6,6',7,7',8,8'-Octahydro-1,1'-bi-2-naphthol": "OC1=CC=C2CCCCC2=C1C3=C4CCCCC4=CC=C3O"
+"(R)-(+)-BINAP": "P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=C(C(C=CC=C4)=C4C=C3)C(C(C=CC=C5)=C5C=C6)=C6P(C7=CC=CC=C7)C8=CC=CC=C8"
+"(R)-(+)-Indoline-2-carboxylic Acid": "O=C([C@@H]1NC2=C(C=CC=C2)C1)O"
+"(R)-(+)-N,N-Dimethyl-1-ferrocenylethylamine": "C[C@H]([C]1[CH][CH][CH][CH]1)N(C)C.[Fe].[CH]2[CH][CH][CH][CH]2"
+"(R)-(+)-tert-Butylsulfinamide": "CC(C)([S@](N)=O)C"
+"(R)-(+)-α,α-Diphenyl-2-pyrrolidinemethanol": "OC(C1=CC=CC=C1)(C2=CC=CC=C2)[C@@H]3NCCC3"
+"(R)-(+)-α,α-Diphenyl-2-pyrrolidinemethanol Trimethylsilyl Ether": "C[Si](OC(C1=CC=CC=C1)(C2=CC=CC=C2)[C@@H]3NCCC3)(C)C"
+"(R)-2-(Methoxymethyl)pyrrolidine": "COC[C@@H]1NCCC1"
+"(R)-2,2'-Dimethoxy-1,1'-binaphthyl": "COC1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3OC"
+"(R)-3,3'-Bis[[[(1R,2R)-2-(isoindolin-2-yl)-1,2-diphenylethyl]imino]methyl]-1,1'-bi-2-naphthol": "OC1=C(/C=N/[C@H](C2=CC=CC=C2)[C@H](N3CC4=C(C=CC=C4)C3)C5=CC=CC=C5)C=C6C=CC=CC6=C1C7=C8C=CC=CC8=CC(/C=N/[C@H](C9=CC=CC=C9)[C@H](N%10CC%11=C(C=CC=C%11)C%10)C%12=CC=CC=C%12)=C7O"
+"(R)-3,3'-Dibromo-1,1'-bi-2-naphthol": "OC1=C(Br)C=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC(Br)=C3O"
+"(R)-3,3'-Dibromo-2,2'-dimethoxy-1,1'-binaphthyl": "COC1=C(Br)C=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC(Br)=C3OC"
+"(R)-4-Benzyl-2-oxazolidinone": "O=C1OC[C@@H](CC2=CC=CC=C2)N1"
+"(R)-4-Isopropyl-2-oxazolidinone": "O=C1OC[C@@H](C(C)C)N1"
+"(R)-4-Phenylthiazolidine-2-thione": "S=C1SC[C@@H](C2=CC=CC=C2)N1"
+"(R)-5,5-Diphenyl-2-methyl-3,4-propano-1,3,2-oxazaborolidine": "CB1OC(C2=CC=CC=C2)(C3=CC=CC=C3)[C@]4([H])N1CCC4"
+"(R)-N-(2-Benzoylphenyl)-1-benzylpyrrolidine-2-carboxamide": "O=C([C@@H]1N(CC2=CC=CC=C2)CCC1)NC3=CC=CC=C3C(C4=CC=CC=C4)=O"
+"(R)-N,N-Dimethyl-1-[(S)-1',2-bis(diphenylphosphino)ferrocenyl]ethylamine": "C[C@@H](N(C)C)c1c(P(C2=CC=CC=C2)C3=CC=CC=C3)ccc1.[Del][Fe][Del].c4(P(C5=CC=CC=C5)C6=CC=CC=C6)cccc4"
+"(R)-N,N-Dimethyl-1-[(S)-2-(diphenylphosphino)ferrocenyl]ethylamine": "CN(C)[C@H](c1cccc1)CP(C2=CC=CC=C2)C3=CC=CC=C3.[Del][Fe][Del].c4cccc4"
+"(R,R)-(-)-2,3-Bis(tert-butylmethylphosphino)quinoxaline": "C[P@@](C1=NC2=CC=CC=C2N=C1[P@@](C(C)(C)C)C)C(C)(C)C"
+"(R,R)-(-)-N,N'-Bis(3,5-di-tert-butylsalicylidene)-1,2-cyclohexanediamine": "OC1=C(C(C)(C)C)C=C(C(C)(C)C)C=C1/C=N/[C@H]2[C@H](/N=C/C3=CC(C(C)(C)C)=CC(C(C)(C)C)=C3O)CCCC2"
+"(R,R)-(-)-N,N'-Bis(3,5-di-tert-butylsalicylidene)-1,2-cyclohexanediaminomanganese(III) Chloride": "OC1=C(C(C)(C)C)C=C(C(C)(C)C)C=C1/C=[N]([Mn+]/[N]2=C\\C3=CC(C(C)(C)C)=CC(C(C)(C)C)=C3O)\\[C@@]4([H])[C@@]2([H])CCCC4.[Cl-]"
+"(R,R)-1,2-Bis[(2-methoxyphenyl)phenylphosphino]ethane": "COC1=CC=CC=C1[P@](CC[P@@](C2=CC=CC=C2OC)C3=CC=CC=C3)C4=CC=CC=C4"
+"(R,R'')-2,2''-Bis(diphenylphosphino)-1,1''-biferrocene": "[Del][Fe][Del].[Del][Fe][Del].P(C1=CC=CC=C1)(c2cccc2c3cccc3P(C4=CC=CC=C4)C5=CC=CC=C5)C6=CC=CC=C6.c7cccc7.c8cccc8"
+"(R,R)-2,2'-Isopropylidenebis(4-phenyl-2-oxazoline)": "CC(C1=N[C@H](C2=CC=CC=C2)CO1)(C3=N[C@H](C4=CC=CC=C4)CO3)C"
+"(R,R)-2,6-Bis(4-isopropyl-2-oxazolin-2-yl)pyridine": "CC([C@H]1N=C(C2=CC=CC(C3=N[C@H](C(C)C)CO3)=N2)OC1)C"
+"(R,R)-2,6-Bis(4-phenyl-2-oxazolin-2-yl)pyridine": "C1(C2=N[C@H](C3=CC=CC=C3)CO2)=NC(C4=N[C@H](C5=CC=CC=C5)CO4)=CC=C1"
+"(R,R)-2-Iodo-1,3-bis[1-(mesitylcarbamoyl)ethoxy]benzene": "C[C@H](C(NC1=C(C)C=C(C)C=C1C)=O)OC2=C(I)C(O[C@@H](C(NC3=C(C)C=C(C)C=C3C)=O)C)=CC=C2"
+"(R,R)-N-(2-Amino-1,2-diphenylethyl)-p-toluenesulfonamide": "CC1=CC=C(S(=O)(N[C@H](C2=CC=CC=C2)[C@H](N)C3=CC=CC=C3)=O)C=C1"
+"(R,R,R)-(3,5-Dioxa-4-phosphacyclohepta[2,1-a:3,4-a']dinaphthalen-4-yl)bis(1-phenylethyl)amine": "C[C@@H](N(P1OC2=CC=C3C=CC=CC3=C2C4=C5C=CC=CC5=CC=C4O1)[C@@H](C6=CC=CC=C6)C)C7=CC=CC=C7"
+"(S)-(-)-1,1'-Bi-2-naphthol": "OC1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3O"
+"(S)-(-)-1,1'-Binaphthyl-2,2'-diamine": "NC1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3N"
+"(S)-(-)-2-(Diphenylmethyl)pyrrolidine": "[C@H]1(C(C2=CC=CC=C2)C3=CC=CC=C3)NCCC1"
+"(S)-(-)-2-Amino-2'-hydroxy-1,1'-binaphthyl": "OC1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3N"
+"(S)-(-)-3-(tert-Butoxycarbonyl)-4-formyl-2,2-dimethyl-1,3-oxazolidine": "CC1(C)OC[C@@H](C=O)N1C(OC(C)(C)C)=O"
+"(S)-(-)-3,3'-Dibromo-5,5',6,6',7,7',8,8'-octahydro-1,1'-bi-2-naphthol": "OC1=C(Br)C=C2CCCCC2=C1C3=C4CCCCC4=CC(Br)=C3O"
+"(S)-(-)-3-tert-Butoxycarbonyl-4-methoxycarbonyl-2,2-dimethyl-1,3-oxazolidine": "CC1(C)OC[C@@H](C(OC)=O)N1C(OC(C)(C)C)=O"
+"(S)-(-)-5,5',6,6',7,7',8,8'-Octahydro-1,1'-bi-2-naphthol": "OC1=CC=C2CCCCC2=C1C3=C4CCCCC4=CC=C3O"
+"(S)-(-)-BINAP": "P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=C(C(C=CC=C4)=C4C=C3)C(C(C=CC=C5)=C5C=C6)=C6P(C7=CC=CC=C7)C8=CC=CC=C8"
+"(S)-(-)-Indoline-2-carboxylic Acid": "O=C([C@H]1NC2=C(C=CC=C2)C1)O"
+"(S)-(-)-N,N-Dimethyl-1-ferrocenylethylamine": "CN(C)[C@H](c1cccc1)C.[Del][Fe][Del].c2cccc2"
+"(S)-(-)-tert-Butylsulfinamide": "CC(C)([S@@](N)=O)C"
+"(S)-(-)-α,α-Diphenyl-2-pyrrolidinemethanol": "OC(C1=CC=CC=C1)(C2=CC=CC=C2)[C@@H]3CCCN3"
+"(S)-(-)-α,α-Diphenyl-2-pyrrolidinemethanol Trimethylsilyl Ether": "C[Si](OC(C1=CC=CC=C1)(C2=CC=CC=C2)[C@H]3NCCC3)(C)C"
+"(S)-(+)-(3,5-Dioxa-4-phosphacyclohepta[2,1-a;3,4-a']dinaphthalen-4-yl)dimethylamine": "CN(P1OC2=CC=C3C=CC=CC3=C2C4=C5C=CC=CC5=CC=C4O1)C"
+"(S)-(+)-1-(2-Pyrrolidinylmethyl)pyrrolidine": "N1(C[C@H]2NCCC2)CCCC1"
+"(S)-(+)-1,1'-Binaphthyl-2,2'-diyl Bis(trifluoromethanesulfonate)": "O=S(C(F)(F)F)(OC1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3OS(C(F)(F)F)(=O)=O)=O"
+"(S)-(+)-1,1'-Binaphthyl-2,2'-diyl Hydrogen Phosphate": "O=P1(OC2=CC=C3C=CC=CC3=C2C4=C5C=CC=CC5=CC=C4O1)O"
+"(S)-(+)-2-(Anilinomethyl)pyrrolidine": "[C@H]1(CNC2=CC=CC=C2)NCCC1"
+"(S)-(+)-2-[Hydroxy(diphenyl)methyl]-1-methylpyrrolidine": "CN1[C@H](C(C2=CC=CC=C2)(O)C3=CC=CC=C3)CCC1"
+"(S)-(+)-4-Benzyl-3-propionyl-2-oxazolidinone": "O=C1OC[C@H](CC2=CC=CC=C2)N1C(CC)=O"
+"(S)-(+)-4-Isopropyl-3-propionyl-2-oxazolidinone": "O=C1OC[C@H](C(C)C)N1C(CC)=O"
+"(S)-(+)-4-Phenyl-2-oxazolidinone": "O=C1OC[C@H](C2=CC=CC=C2)N1"
+"(S)-(+)-6,6'-Dibromo-1,1'-bi-2-naphthol": "OC1=CC=C2C=C(Br)C=CC2=C1C3=C4C=CC(Br)=CC4=CC=C3O"
+"(S)-(+)-p-Toluenesulfinamide": "CC1=CC=C([S@@](N)=O)C=C1"
+"(S)-(4-Isopropyloxazolin-2-yl)ferrocene": "CC(C)[C@H]1COC(c2cccc2)=N1.[Del][Fe][Del].c3cccc3"
+"(S)-1-(Diphenylphosphino)-2-[(S)-4-isopropyloxazolin-2-yl]ferrocene": "CC(C)[C@@H]1N=C(c2c(P(C3=CC=CC=C3)C4=CC=CC=C4)ccc2)OC1.[Del][Fe][Del].c5cccc5"
+"(S)-2-(Methoxymethyl)pyrrolidine": "COC[C@H]1NCCC1"
+"(S)-2,2'-Dimethoxy-1,1'-binaphthyl": "COC1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3OC"
+"(S)-2,4-Diphenyl-4,5-dihydrooxazole": "C1(C2=CC=CC=C2)=N[C@@H](C3=CC=CC=C3)CO1"
+"(S)-3,3'-Dibromo-1,1'-bi-2-naphthol": "OC1=C(Br)C=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC(Br)=C3O"
+"(S)-3,3'-Dibromo-2,2'-dimethoxy-1,1'-binaphthyl": "COC1=C(Br)C=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC(Br)=C3OC"
+"(S)-4-(4-Aminobenzyl)-2-oxazolidinone": "O=C1OC[C@H](CC2=CC=C(N)C=C2)N1"
+"(S)-4-Benzyl-2-oxazolidinone": "O=C1OC[C@H](CC2=CC=CC=C2)N1"
+"(S)-4-Isopropyl-2-oxazolidinone": "O=C1OC[C@H](C(C)C)N1"
+"(S)-4-Isopropyl-3-(1-naphthylmethyl)-2,5,5-triphenyl-1,3,2-oxazaborolidine": "CC([C@@H]1N(CC2=C3C=CC=CC3=CC=C2)B(C4=CC=CC=C4)OC1(C5=CC=CC=C5)C6=CC=CC=C6)C"
+"(S)-4-Isopropylthiazolidine-2-thione": "S=C1SC[C@H](C(C)C)N1"
+"(S)-4-Phenylthiazolidine-2-thione": "S=C1SC[C@H](C2=CC=CC=C2)N1"
+"(S)-4-tert-Butyl-2-(2-pyridyl)oxazoline": "CC([C@@H]1N=C(C2=NC=CC=C2)OC1)(C)C"
+"(S)-5-(Pyrrolidin-2-yl)-1H-tetrazole": "C1([C@H]2NCCC2)=NN=NN1"
+"(S)-5,5-Diphenyl-2-methyl-3,4-propano-1,3,2-oxazaborolidine": "CB1OC(C2=CC=CC=C2)(C3=CC=CC=C3)[C@@]4([H])N1CCC4"
+"(S)-N,N-Dimethyl-1-[(R)-1',2-bis(diphenylphosphino)ferrocenyl]ethylamine": "C[C@@H](N(C)C)c1c(P(C2=CC=CC=C2)C3=CC=CC=C3)ccc1.[Del][Fe][Del].c4(P(C5=CC=CC=C5)C6=CC=CC=C6)cccc4"
+"(S,S)-(-)-2,2'-Isopropylidenebis(4-tert-butyl-2-oxazoline)": "CC(C1=N[C@@H](C(C)(C)C)CO1)(C2=N[C@@H](C(C)(C)C)CO2)C"
+"(S,S)-(+)-2,3-Bis(tert-butylmethylphosphino)quinoxaline": "C[P@](C1=NC2=CC=CC=C2N=C1[P@](C(C)(C)C)C)C(C)(C)C"
+"(S,S)-1,2-Bis[(2-methoxyphenyl)phenylphosphino]ethane": "COC1=CC=CC=C1[P@@](CC[P@](C2=CC=CC=C2OC)C3=CC=CC=C3)C4=CC=CC=C4"
+"(S,S)-1,2-Bis[(tert-butyl)methylphosphino]ethane Bis(borane)": "C[P@@](CC[P@@](C(C)(C)C)C)C(C)(C)C.B.B"
+"(S,S)-2,2'-Isopropylidenebis(4-phenyl-2-oxazoline)": "CC(C1=N[C@@H](C2=CC=CC=C2)CO1)(C3=N[C@@H](C4=CC=CC=C4)CO3)C"
+"(S,S)-2,6-Bis(4-isopropyl-2-oxazolin-2-yl)pyridine": "CC([C@@H]1N=C(C2=CC=CC(C3=N[C@@H](C(C)C)CO3)=N2)OC1)C"
+"(S,S)-2,6-Bis(4-phenyl-2-oxazolin-2-yl)pyridine": "C1(C2=N[C@@H](C3=CC=CC=C3)CO2)=NC(C4=N[C@@H](C5=CC=CC=C5)CO4)=CC=C1"
+"(S,S)-N-(2-Amino-1,2-diphenylethyl)-p-toluenesulfonamide": "CC1=CC=C(S(=O)(N[C@@H](C2=CC=CC=C2)[C@@H](N)C3=CC=CC=C3)=O)C=C1"
+"(S,S,S)-(3,5-Dioxa-4-phosphacyclohepta[2,1-a:3,4-a']dinaphthalen-4-yl)bis(1-phenylethyl)amine": "C[C@H](N(P1OC2=CC=C3C=CC=CC3=C2C4=C5C=CC=CC5=CC=C4O1)[C@H](C6=CC=CC=C6)C)C7=CC=CC=C7"
+"[(R)-2,2'-Bis(diphenylphosphino)-1,1'-binaphthyl]ruthenium(II) Dichloride": "C1(C2=C3C=CC=CC3=CC=C2P(C4=CC=CC=C4)C5=CC=CC=C5)=C6C=CC=CC6=CC=C1P(C7=CC=CC=C7)C8=CC=CC=C8.[Ru+2].[Cl-].[Cl-]"
+"[(S)-2,2'-Bis(diphenylphosphino)-1,1'-binaphthyl]ruthenium(II) Dichloride": "C1(C2=C3C=CC=CC3=CC=C2P(C4=CC=CC=C4)C5=CC=CC=C5)=C6C=CC=CC6=CC=C1P(C7=CC=CC=C7)C8=CC=CC=C8.[Ru+2].[Cl-].[Cl-]"
+"2,4-Dibromo-6-[(E)-[[(1R,2R)-2-(isoindolin-2-yl)-1,2-diphenylethyl]imino]methyl]phenol": "OC1=C(/C=N/[C@H](C2=CC=CC=C2)[C@H](N3CC4=C(C=CC=C4)C3)C5=CC=CC=C5)C=C(Br)C=C1Br"
+"Acetic Acid (1R,2S)-2-[N-Benzyl-N-(mesitylenesulfonyl)amino]-1-phenylpropyl Ester": "CC(O[C@H](C1=CC=CC=C1)[C@@H](N(CC2=CC=CC=C2)S(=O)(C(C(C)=CC(C)=C3)=C3C)=O)C)=O"
+"Acetic Acid (1S,2R)-2-[N-Benzyl-N-(mesitylenesulfonyl)amino]-1-phenylpropyl Ester": "CC(O[C@@H](C1=CC=CC=C1)[C@H](N(CC2=CC=CC=C2)S(=O)(C(C(C)=CC(C)=C3)=C3C)=O)C)=O"
+"Bis(acetato)aqua[(S,S)-4,6-bis(4-isopropyl-2-oxazolin-2-yl)-m-xylene]rhodium": "CC1=CC(C)=C(C2=N[C@H](CO2)C(C)C)C=C1C3=N[C@@H](C(C)C)CO3.CC([O-])=O.[O-]C(C)=O.[Rh+2].O"
+"Bromo[[1,3-bis[(4S,5S)-1-benzoyl-4,5-diphenyl-2-imidazolin-2-yl]benzene]palladium(II)]": "O=C(N1[C@@H](C2=CC=CC=C2)[C@H](C3=CC=CC=C3)N=C1C4=CC(C5=N[C@@H](C6=CC=CC=C6)[C@H](C7=CC=CC=C7)N5C(C8=CC=CC=C8)=O)=CC=C4)C9=CC=CC=C9.[Pd+]Br"
+"Cinchonidine": "O[C@@H]([C@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=CC=C34"
+"Cinchonine": "O[C@H]([C@@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=CC=C34"
+"Dibenzyl L-Tartrate": "O[C@H]([C@H](C(OCC1=CC=CC=C1)=O)O)C(OCC2=CC=CC=C2)=O"
+"Diethyl D-(-)-Tartrate": "O[C@@H]([C@@H](C(OCC)=O)O)C(OCC)=O"
+"Diethyl L-(+)-Tartrate": "O[C@H]([C@H](C(OCC)=O)O)C(OCC)=O"
+"Diisopropyl D-(-)-Tartrate": "O[C@@H]([C@@H](C(OC(C)C)=O)O)C(OC(C)C)=O"
+"Diisopropyl L-(+)-Tartrate": "O[C@H]([C@H](C(OC(C)C)=O)O)C(OC(C)C)=O"
+"Dimethyl D-(-)-Tartrate": "O[C@@H]([C@@H](C(OC)=O)O)C(OC)=O"
+"Dimethyl L-(+)-Tartrate": "O[C@H]([C@H](C(OC)=O)O)C(OC)=O"
+"Di-tert-butyl L-(+)-Tartrate": "O[C@H]([C@H](C(OC(C)(C)C)=O)O)C(OC(C)(C)C)=O"
+"D-Proline": "O=C(O)[C@@H]1NCCC1"
+"Ethyl (11bR)-4-Amino-2,6-bis(3,5-di-tert-butylphenyl)-4,5-dihydro-3H-cyclohepta[1,2-a:7,6-a']dinaphthalene-4-carboxylate": "O=C(C1(N)CC2=C(C3=CC(C(C)(C)C)=CC(C(C)(C)C)=C3)C=C4C=CC=CC4=C2C5=C6C=CC=CC6=CC(C7=CC(C(C)(C)C)=CC(C(C)(C)C)=C7)=C5C1)OCC"
+"Hydroquinidine Hydrochloride": "O[C@H]([C@@H]1C[C@H]2[C@H](C[N@@]1CC2)CC)C3=CC=NC4=CC=C(OC)C=C34.[H]Cl"
+"L-Prolinanilide": "O=C(NC1=CC=CC=C1)[C@H]2NCCC2"
+"L-Proline": "O=C(O)[C@H]1NCCC1"
+"L-Thioproline": "O=C(O)[C@H]1NCCC1=S"
+"N-[(11bS)-4,5-Dihydro-3H-dinaphtho[2,1-c:1',2'-e]azepin-2-yl]trifluoromethanesulfonamide": "O=S(C(F)(F)F)(NC1=C2CNCC3=CC=C4C=CC=CC4=C3C2=C5C=CC=CC5=C1)=O"
+"N-Benzylcinchonidinium Chloride": "O[C@@H]([C@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=[N+](CC4=CC=CC=C4)C5=CC=CC=C35.[Cl-]"
+"N-Benzylcinchoninium Chloride": "O[C@H]([C@@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=[N+](CC4=CC=CC=C4)C5=CC=CC=C35.[Cl-]"
+"N-Benzylquinidinium Chloride": "O[C@H]([C@@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=[N+](CC4=CC=CC=C4)C5=CC=C(OC)C=C35.[Cl-]"
+"N-Benzylquininium Chloride": "O[C@@H]([C@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=[N+](CC4=CC=CC=C4)C5=CC=C(OC)C=C35.[Cl-]"
+"O-TBDPS-D-Thr-N-Boc-L-tert-Leu-Diphenylphosphine": "O=C(OC(C)(C)C)N[C@@H](C(C)(C)C)C(N[C@H]([C@@H](O[Si](C1=CC=CC=C1)(C(C)(C)C)C2=CC=CC=C2)C)CP(C3=CC=CC=C3)C4=CC=CC=C4)=O"
+"Quinidine": "O[C@H]([C@@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=C(OC)C=C34"
+"Quinine": "O[C@@H]([C@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=C(OC)C=C34"
+"Quinine Hydrochloride Dihydrate": "O[C@@H]([C@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=C(OC)C=C34.[H]Cl.[H]O[H].[H]O[H]"
+"β-Isocupreidine": "[H][C@@](C1([H])[H])(C([H])([H])C2([H])[H])[C@@]3(C([H])([H])C([H])([H])[H])O[C@](C4=C(C([H])=C5O[H])C(C([H])=C5[H])=NC([H])=C4[H])([H])[C@]1([H])[N@@]2C3([H])[H]"
diff --git a/lib/cdx/below_arrow/coupling_reagents.yaml b/lib/cdx/below_arrow/coupling_reagents.yaml
new file mode 100644
index 0000000000..5396dfbfa8
--- /dev/null
+++ b/lib/cdx/below_arrow/coupling_reagents.yaml
@@ -0,0 +1,102 @@
+"(6-Chloro-1H-benzotriazol-1-yloxy)tripyrrolidinophosphonium Hexafluorophosphate": "ClC1=CC=C2N=NN(O[P+](N3CCCC3)(N4CCCC4)N5CCCC5)C2=C1.F[P-](F)(F)(F)(F)F"
+"(7-Azabenzotriazol-1-yloxy)tris(dimethylamino)phosphonium Hexafluorophosphate": "CN([P+](N(C)C)(ON1N=NC2=CC=CN=C21)N(C)C)C.F[P-](F)(F)(F)(F)F"
+"1-(2,4,6-Triisopropylbenzenesulfonyl)-1,2,4-triazole": "O=S(N1N=CN=C1)(C2=C(C(C)C)C=C(C(C)C)C=C2C(C)C)=O"
+"1-(2,4,6-Triisopropylbenzenesulfonyl)imidazole": "O=S(N1C=CN=C1)(C2=C(C(C)C)C=C(C(C)C)C=C2C(C)C)=O"
+"1-(2-Mesitylenesulfonyl)imidazole": "O=S(N1C=CN=C1)(C(C(C)=CC(C)=C2)=C2C)=O"
+"1-(3-Dimethylaminopropyl)-3-ethylcarbodiimide": "CCN=C=NCCCN(C)C"
+"1-(3-Dimethylaminopropyl)-3-ethylcarbodiimide Hydrochloride": "CCN=C=NCCCN(C)C.[H]Cl"
+"1-(Chloro-1-pyrrolidinylmethylene)pyrrolidinium Hexafluorophosphate": "ClC(N1CCCC1)=[N+]2CCCC2.F[P-](F)(F)(F)(F)F"
+"1-(Chloro-1-pyrrolidinylmethylene)pyrrolidinium Tetrafluoroborate": "ClC(N1CCCC1)=[N+]2CCCC2.F[B-](F)(F)F"
+"1-(Cyanomethyl)piperidinium Tetrafluoroborate": "N#CC[NH+]1CCCCC1.F[B-](F)(F)F"
+"1-(p-Toluenesulfonyl)imidazole": "O=S(N1C=CN=C1)(C2=CC=C(C)C=C2)=O"
+"1-(Trifluoromethanesulfonyl)-1H-benzotriazole": "O=S(N1N=NC2=CC=CC=C21)(C(F)(F)F)=O"
+"1-(Trifluoromethanesulfonyl)imidazole": "O=S(N1C=CN=C1)(C(F)(F)F)=O"
+"1,1'-Carbonyldi(1,2,4-triazole)": "O=C(N1N=CN=C1)N2N=CN=C2"
+"1,1'-Carbonyldiimidazole": "O=C(N1C=CN=C1)N2C=CN=C2"
+"1,1'-Oxalyldiimidazole": "O=C(N1C=CN=C1)C(N2C=CN=C2)=O"
+"1,2,4-Triazole": "N1N=CN=C1"
+"1-Cyclohexyl-3-(2-morpholinoethyl)carbodiimide Metho-p-toluenesulfonate": "C[N+]1(CCN=C=NC2CCCCC2)CCOCC1.O=S(C3=CC=C(C)C=C3)([O-])=O"
+"1-Ethoxycarbonyl-2-ethoxy-1,2-dihydroquinoline": "CCOC1N(C(OCC)=O)C2=C(C=CC=C2)C=C1"
+"1H-Benzotriazol-1-yloxytripyrrolidinophosphonium Hexafluorophosphate": "F[P-](F)(F)(F)(F)F.N1([P+](N2CCCC2)(ON3N=NC4=CC=CC=C43)N5CCCC5)CCCC1"
+"1H-Benzotriazol-1-yloxytris(dimethylamino)phosphonium Hexafluorophosphate": "CN([P+](N(C)C)(ON1N=NC2=CC=CC=C21)N(C)C)C.F[P-](F)(F)(F)(F)F"
+"1-Hydroxy-6-(trifluoromethyl)benzotriazole": "FC(C1=CC=C2N=NN(O)C2=C1)(F)F"
+"2-(5-Norbornene-2,3-dicarboximido)-1,1,3,3-tetramethyluronium Tetrafluoroborate": "CN(C)C(N(C)C)=[O+]N(C1=O)C(C2C1C3C=CC2C3)=O.F[B-](F)(F)F"
+"2,2'-Carbonylbis(3,5-dioxo-4-methyl-1,2,4-oxadiazolidine)": "O=C(N(C(N1C)=O)OC1=O)N(C(N2C)=O)OC2=O"
+"2,2'-Dipyridyl Disulfide": "C1(SSC2=NC=CC=C2)=NC=CC=C1"
+"2,4,5-Trichlorophenol": "OC1=CC(Cl)=C(Cl)C=C1Cl"
+"2,4,6-Trichlorobenzoyl Chloride": "O=C(Cl)C1=C(Cl)C=C(Cl)C=C1Cl"
+"2,4,6-Triisopropylbenzenesulfonyl Chloride": "O=S(C1=C(C(C)C)C=C(C(C)C)C=C1C(C)C)(Cl)=O"
+"2,4-Mesitylenedisulfonyl Dichloride": "CC1=C(S(=O)(Cl)=O)C(C)=CC(C)=C1S(=O)(Cl)=O"
+"2-[N,N-Bis(trifluoromethanesulfonyl)amino]-5-chloropyridine": "ClC1=CN=C(N(S(=O)(C(F)(F)F)=O)S(=O)(C(F)(F)F)=O)C=C1"
+"2-Bromo-1-ethylpyridinium Tetrafluoroborate": "CC[N+]1=CC=CC=C1Br.F[B-](F)(F)F"
+"2-Chloro-1,3-dimethylimidazolinium Chloride": "C[N+]1=C(Cl)N(C)CC1.[Cl-]"
+"2-Chloro-1,3-dimethylimidazolinium Hexafluorophosphate": "C[N+]1=C(Cl)N(C)CC1.F[P-](F)(F)(F)(F)F"
+"2-Chloro-1,3-dimethylimidazolinium Tetrafluoroborate": "C[N+]1=C(Cl)N(C)CC1.F[B-](F)(F)F"
+"2-Chloro-1-methylpyridinium Iodide": "C[N+]1=CC=CC=C1Cl.[I-]"
+"2-Chloro-1-methylpyridinium p-Toluenesulfonate": "C[N+]1=CC=CC=C1Cl.CC2=CC=C(S(=O)([O-])=O)C=C2"
+"2-Fluoro-1-methylpyridinium p-Toluenesulfonate": "C[N+]1=CC=CC=C1F.CC2=CC=C(S(=O)([O-])=O)C=C2"
+"2-Hydroxypyridine N-Oxide": "OC1=CC=CC=[N+]1[O-]"
+"2-Methyl-6-nitrobenzoic Anhydride": "O=C(OC(C1=C([N+]([O-])=O)C=CC=C1C)=O)C2=C([N+]([O-])=O)C=CC=C2C"
+"3-(Diethoxyphosphoryloxy)-1,2,3-benzotriazin-4(3H)-one": "O=C1N(OP(OCC)(OCC)=O)N=NC2=CC=CC=C12"
+"3,4-Dihydro-2H-pyrido[1,2-a]pyrimidin-2-one": "O=C1N=C(C=CC=C2)N2CC1"
+"3,4-Dihydro-3-hydroxy-4-oxo-1,2,3-benzotriazine": "O=C1N(O)N=NC2=CC=CC=C12"
+"3-Nitro-1,2,4-triazole": "O=[N+](C1=NNC=N1)[O-]"
+"3-Pyridinecarboxylic Anhydride": "O=C(OC(C1=CC=CN=C1)=O)C2=CC=CN=C2"
+"4-(4,6-Dimethoxy-1,3,5-triazin-2-yl)-4-methylmorpholinium Chloride": "C[N+]1(C2=NC(OC)=NC(OC)=N2)CCOCC1.[Cl-]"
+"4,6-Diphenylthieno[3,4-d]-1,3-dioxol-2-one 5,5-Dioxide": "O=C(OC1=C2C3=CC=CC=C3)OC1=C(C4=CC=CC=C4)S2(=O)=O"
+"4-Dimethylaminopyridine": "CN(C1=CC=NC=C1)C"
+"4-Nitrophenol": "OC1=CC=C([N+]([O-])=O)C=C1"
+"4-Nitrophenyl Trifluoromethanesulfonate": "O=S(C(F)(F)F)(OC1=CC=C([N+]([O-])=O)C=C1)=O"
+"4-Pyrrolidinopyridine": "C1(N2CCCC2)=CC=NC=C1"
+"4-Trifluoromethylbenzoic Anhydride": "O=C(OC(C1=CC=C(C(F)(F)F)C=C1)=O)C2=CC=C(C(F)(F)F)C=C2"
+"9-Methyl-3,4-dihydro-2H-pyrido[1,2-a]pyrimidin-2-one": "O=C1N=C(C(C)=CC=C2)N2CC1"
+"Bis(4-nitrophenyl) Carbonate": "O=C(OC1=CC=C([N+]([O-])=O)C=C1)OC2=CC=C([N+]([O-])=O)C=C2"
+"Bis(pentafluorophenyl) Carbonate": "O=C(OC1=C(F)C(F)=C(F)C(F)=C1F)OC2=C(F)C(F)=C(F)C(F)=C2F"
+"Bromotripyrrolidinophosphonium Hexafluorophosphate": "Br[P+](N1CCCC1)(N2CCCC2)N3CCCC3.F[P-](F)(F)(F)(F)F"
+"Bromotris(dimethylamino)phosphonium Hexafluorophosphate": "CN([P+](N(C)C)(Br)N(C)C)C.F[P-](F)(F)(F)(F)F"
+"Chloro-N,N,N',N'-tetramethylformamidinium Hexafluorophosphate": "C[N+](C)=C(Cl)N(C)C.F[P-](F)(F)(F)(F)F"
+"Chlorotripyrrolidinophosphonium Hexafluorophosphate": "Cl[P+](N1CCCC1)(N2CCCC2)N3CCCC3.F[P-](F)(F)(F)(F)F"
+"Cyanomethylenetributylphosphorane": "CCCCP(CCCC)(CCCC)=CC#N"
+"Di(N-succinimidyl) Carbonate": "O=C(ON1C(CCC1=O)=O)ON2C(CCC2=O)=O"
+"Di-2-pyridyl Carbonate": "O=C(OC1=NC=CC=C1)OC2=NC=CC=C2"
+"Diethyl Cyanophosphonate": "N#CP(OCC)(OCC)=O"
+"Dimesitylammonium Pentafluorobenzenesulfonate": "CC1=CC(C)=CC(C)=C1[NH2+]C2=C(C)C=C(C)C=C2C.O=S(C3=C(F)C(F)=C(F)C(F)=C3F)([O-])=O"
+"Dimethylthiophosphinoyl Chloride": "ClP(C)(C)=S"
+"Diphenylphosphinic Chloride": "O=P(C1=CC=CC=C1)(C2=CC=CC=C2)Cl"
+"Diphenylphosphoryl Azide": "O=P(C1=CC=CC=C1)(N=[N+]=[N-])C2=CC=CC=C2"
+"Ethyl 1-Hydroxy-1H-1,2,3-triazole-4-carboxylate": "O=C(C1=CN(O)N=N1)OCC"
+"Ethyl Cyano(hydroxyimino)acetate": "O=C(OCC)/C(C#N)=N/O"
+"Fluoro-N,N,N',N'-tetramethylformamidinium Hexafluorophosphate": "C[N+](C)=C(F)N(C)C.F[P-](F)(F)(F)(F)F"
+"Iodosodilactone": "O=C1OI2C3=C1C=CC=C3C(O2)=O"
+"N-(2-Pyridyl)bis(trifluoromethanesulfonimide)": "O=S(N(C1=NC=CC=C1)S(=O)(C(F)(F)F)=O)(C(F)(F)F)=O"
+"N,N,N',N'-Tetramethyl-O-(N-succinimidyl)uronium Hexafluorophosphate": "O=C(N1[O+]=C(N(C)C)N(C)C)CCC1=O.F[P-](F)(F)(F)(F)F"
+"N,N,N',N'-Tetramethyl-O-(N-succinimidyl)uronium Tetrafluoroborate": "O=C(N1[O+]=C(N(C)C)N(C)C)CCC1=O.F[B-](F)(F)F"
+"N,N,N',N'-Tetramethyl-S-(1-oxido-2-pyridyl)thiouronium Hexafluorophosphate": "[O-][N+]1=CC=CC=C1[S+]=C(N(C)C)N(C)C.F[P-](F)(F)(F)(F)F"
+"N,N,N',N'-Tetramethyl-S-(1-oxido-2-pyridyl)thiouronium Tetrafluoroborate": "[O-][N+]1=CC=CC=C1[S+]=C(N(C)C)N(C)C.F[B-](F)(F)F"
+"N,N'-Dicyclohexylcarbodiimide": "C1(N=C=NC2CCCCC2)CCCCC1"
+"N,N'-Diisopropylcarbodiimide": "CC(N=C=NC(C)C)C"
+"N,N'-Di-tert-butylcarbodiimide": "CC(N=C=NC(C)(C)C)(C)C"
+"N-Hydroxy-5-norbornene-2,3-dicarboximide": "O=C(C1C2C3C=CC1C3)N(O)C2=O"
+"N-Hydroxyphthalimide": "O=C(N1O)C2=CC=CC=C2C1=O"
+"N-Hydroxysuccinimide": "O=C(N1O)CCC1=O"
+"N-Hydroxysulfosuccinimide Sodium Salt": "O=C(N1O)C(S(=O)([O-])=O)CC1=O.[Na+]"
+"N-Phenylbis(trifluoromethanesulfonimide)": "O=S(N(C1=CC=CC=C1)S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O"
+"N-tert-Butyl-5-methylisoxazolium Perchlorate": "CC1=CC=[N+](C(C)(C)C)O1.O=Cl(=O)([O-])=O"
+"O-(3,4-Dihydro-4-oxo-1,2,3-benzotriazin-3-yl)-N,N,N',N'-tetramethyluronium Tetrafluoroborate": "CN(C)C(N(C)C)=[O+]N1N=NC2=CC=CC=C2C1=O.F[B-](F)(F)F"
+"O-(6-Chlorobenzotriazol-1-yl)-N,N,N',N'-tetramethyluronium Hexafluorophosphate": "CN(C)C(N(C)C)=[O+]N1N=NC2=CC=C(Cl)C=C21.F[P-](F)(F)(F)(F)F"
+"O-(6-Chlorobenzotriazol-1-yl)-N,N,N',N'-tetramethyluronium Tetrafluoroborate": "CN(C)C(N(C)C)=[O+]N1N=NC2=CC=C(Cl)C=C21.F[B-](F)(F)F"
+"O-(7-Azabenzotriazol-1-yl)-N,N,N',N'-tetramethyluronium Hexafluorophosphate": "CN(C)C(N(C)C)=[O+]N1N=NC2=CC=CN=C21.F[P-](F)(F)(F)(F)F"
+"O-(7-Azabenzotriazol-1-yl)-N,N,N',N'-tetramethyluronium Tetrafluoroborate": "CN(C)C(N(C)C)=[O+]N1N=NC2=CC=CN=C21.F[B-](F)(F)F"
+"O-(Benzotriazol-1-yl)-N,N,N',N'-bis(pentamethylene)uronium Hexafluorophosphate": "F[P-](F)(F)(F)(F)F.N1(OC(N2CCCCC2)=[N+]3CCCCC3)N=NC4=C1C=CC=C4"
+"O-(Benzotriazol-1-yl)-N,N,N',N'-tetramethyluronium Hexafluorophosphate": "CN(C)C(N(C)C)=[O+]N1N=NC2=CC=CC=C21.F[P-](F)(F)(F)(F)F"
+"O-(Benzotriazol-1-yl)-N,N,N',N'-tetramethyluronium Tetrafluoroborate": "CN(C)C(N(C)C)=[O+]N1N=NC2=CC=CC=C21.F[B-](F)(F)F"
+"O,O'-Di-2-pyridyl Thiocarbonate": "S=C(OC1=NC=CC=C1)OC2=NC=CC=C2"
+"O-[(Ethoxycarbonyl)cyanomethylenamino]-N,N,N',N'-tetramethyluronium Hexafluorophosphate": "CN(C)C(N(C)C)=[O+]/N=C(C(OCC)=O)\\C#N.F[P-](F)(F)(F)(F)F"
+"O-[(Ethoxycarbonyl)cyanomethylenamino]-N,N,N',N'-tetramethyluronium Tetrafluoroborate": "CN(C)C(N(C)C)=[O+]/N=C(C(OCC)=O)\\C#N.F[B-](F)(F)F"
+"O-[2-Oxo-1(2H)-pyridyl]-N,N,N',N'-tetramethyluronium Tetrafluoroborate": "CN(C)C(N(C)C)=[O+]N1C=CC=CC1=O.F[B-](F)(F)F"
+"Pentafluorophenol": "OC1=C(F)C(F)=C(F)C(F)=C1F"
+"Pentafluorophenyl 4-Nitrobenzenesulfonate": "O=S(C1=CC=C([N+]([O-])=O)C=C1)(OC2=C(F)C(F)=C(F)C(F)=C2F)=O"
+"Trifluoromethanesulfonanilide": "O=S(C(F)(F)F)(NC1=CC=CC=C1)=O"
+"Trifluoromethanesulfonic Anhydride": "O=S(C(F)(F)F)(OS(C(F)(F)F)(=O)=O)=O"
+"Trifluoromethanesulfonyl Chloride": "O=S(C(F)(F)F)(Cl)=O"
+"Triphosgene": "ClC(Cl)(OC(OC(Cl)(Cl)Cl)=O)Cl"
diff --git a/lib/cdx/below_arrow/fluorination.yaml b/lib/cdx/below_arrow/fluorination.yaml
new file mode 100644
index 0000000000..f41776cf00
--- /dev/null
+++ b/lib/cdx/below_arrow/fluorination.yaml
@@ -0,0 +1,92 @@
+"(1,10-Phenanthroline)(trifluoromethyl)(triphenylphosphine)copper(I)": "[Cu]C(F)(F)F.P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.C45=CC=C6C=CC=NC6=C4N=CC=C5"
+"(Bromodifluoromethyl)trimethylsilane": "C[Si](C)(C(F)(Br)F)C"
+"(Diethylamino)sulfur Trifluoride": "CCN(S(F)(F)F)CC"
+"(Difluoromethyl)trimethylsilane": "C[Si](C)(C(F)F)C"
+"(E)-Trimethyl(3,3,3-trifluoro-1-propenyl)silane": "FC(F)(F)/C=C/[Si](C)(C)C"
+"(Perfluorohexyl)phenyliodonium Trifluoromethanesulfonate": "FC([I+]C1=CC=CC=C1)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)F.O=S(C(F)(F)F)([O-])=O"
+"(Perfluoro-n-octyl)phenyliodonium Trifluoromethanesulfonate": "FC([I+]C1=CC=CC=C1)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)F.O=S(C(F)(F)F)([O-])=O"
+"(Perfluoropropyl)phenyliodonium Trifluoromethanesulfonate": "FC([I+]C1=CC=CC=C1)(F)C(F)(F)C(F)(F)F.O=S(C(F)(F)F)([O-])=O"
+"(Trifluoroacetyl)benzotriazole": "O=C(C1=C2N=NNC2=CC=C1)C(F)(F)F"
+"(Trifluoromethyl)trimethylsilane": "C[Si](C)(C(F)(F)F)C"
+"(Trifluoromethyl)tris(triphenylphosphine)copper(I)": "[Cu]C(F)(F)F.P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6.P(C7=CC=CC=C7)(C8=CC=CC=C8)C9=CC=CC=C9"
+"1-(Heptafluorobutyryl)imidazole": "O=C(N1C=CN=C1)C(F)(F)C(F)(F)C(F)(F)F"
+"1-(Trifluoroacetyl)-4-(dimethylamino)pyridinium Trifluoroacetate": "CN(C1=CC=[N+](C(C(F)(F)F)=O)C=C1)C.O=C([O-])C(F)(F)F"
+"1-(Trifluoroacetyl)imidazole": "O=C(N1C=CN=C1)C(F)(F)F"
+"1-(Trifluoroacetyl)piperidine": "O=C(N1CCCCC1)C(F)(F)F"
+"1,1,1,3,3,3-Hexafluoroisopropyl Trifluoromethanesulfonate": "O=S(C(F)(F)F)(OC(C(F)(F)F)C(F)(F)F)=O"
+"1,1'-Difluoro-2,2'-bipyridinium Bis(tetrafluoroborate)": "F[N+]1=CC=CC=C1C2=CC=CC=[N+]2F.F[B-](F)(F)F.F[B-](F)(F)F"
+"1-Fluoro-2,4,6-trimethylpyridinium Tetrafluoroborate": "CC1=[N+](F)C(C)=CC(C)=C1.F[B-](F)(F)F"
+"1-Fluoro-2,4,6-trimethylpyridinium Trifluoromethanesulfonate": "CC1=[N+](F)C(C)=CC(C)=C1.O=S(C(F)(F)F)([O-])=O"
+"1-Fluoro-2,6-dichloropyridinium Tetrafluoroborate": "ClC1=[N+](F)C(Cl)=CC=C1.F[B-](F)(F)F"
+"1-Fluoro-3,3-dimethyl-1,2-benziodoxole": "CC1(C)OI(F)C2=CC=CC=C12"
+"1-Fluoropyridinium Tetrafluoroborate": "F[N+]1=CC=CC=C1.F[B-](F)(F)F"
+"1-Fluoropyridinium Trifluoromethanesulfonate": "F[N+]1=CC=CC=C1.O=S(C(F)(F)F)([O-])=O"
+"1-Trifluoromethyl-1,2-benziodoxol-3(1H)-one": "O=C1OI(C(F)(F)F)C2=CC=CC=C12"
+"1-Trifluoromethyl-3,3-dimethyl-1,2-benziodoxole": "CC1(C)OI(C(F)(F)F)C2=CC=CC=C12"
+"2,2,2-Trifluoro-1,1-ethanediol": "OC(O)C(F)(F)F"
+"2,2,2-Trifluoroethyl Methanesulfonate": "CS(=O)(OCC(F)(F)F)=O"
+"2,2,2-Trifluoroethyl Trifluoromethanesulfonate": "O=S(C(F)(F)F)(OCC(F)(F)F)=O"
+"2,2,2-Trifluoroethyl p-Toluenesulfonate": "CC1=CC=C(S(=O)(OCC(F)(F)F)=O)C=C1"
+"2,2,2-Trifluoro-N,N-dimethylacetamide": "O=C(N(C)C)C(F)(F)F"
+"2,2,3,3,3-Pentafluoropropyl p-Toluenesulfonate": "CC1=CC=C(S(=O)(OCC(F)(F)C(F)(F)F)=O)C=C1"
+"2,2-Difluoro-2-(fluorosulfonyl)acetic Acid": "O=C(O)C(F)(F)S(=O)(F)=O"
+"2,2-Difluoroethyl Trifluoromethanesulfonate": "O=S(C(F)(F)F)(OCC(F)F)=O"
+"2,2-Difluoroethylamine": "NCC(F)F"
+"2,8-Difluoro-5-(trifluoromethyl)-5H-dibenzo[b,d]thiophen-5-ium Trifluoromethanesulfonate": "FC([S+]1C2=CC=C(F)C=C2C3=CC(F)=CC=C31)(F)F.O=S(C(F)(F)F)([O-])=O"
+"2-Chloro-1,3-bis(2,6-diisopropylphenyl)-1H-imidazolium Chloride": "CC(C1=C([N+]2=C(Cl)N(C3=C(C(C)C)C=CC=C3C(C)C)C=C2)C(C(C)C)=CC=C1)C.[Cl-]"
+"2-Fluoro-1-methylpyridinium p-Toluenesulfonate": "C[N+]1=CC=CC=C1F.CC2=CC=C(S(=O)([O-])=O)C=C2"
+"4-[2,2,2-Trifluoro-1-[(trimethylsilyl)oxy]ethyl]morpholine": "C[Si](OC(N1CCOCC1)C(F)(F)F)(C)C"
+"4-tert-Butyl-2,6-dimethylphenylsulfur Trifluoride": "CC1=C(S(F)(F)F)C(C)=CC(C(C)(C)C)=C1"
+"AlkylFluor": "FC(N(C=C1)C2=C(C(C)C)C=CC=C2C(C)C)=[N+]1C(C(C(C)C)=CC=C3)=C3C(C)C.F[B-](F)(F)F"
+"Benzoyl(phenyliodonio)(trifluoromethanesulfonyl)methanide": "O=S([C-](C(C1=CC=CC=C1)=O)[I+]C2=CC=CC=C2)(C(F)(F)F)=O"
+"Bistrifluoroacetamide": "O=C(C(F)(F)F)NC(C(F)(F)F)=O"
+"Copper(I) Trifluoromethanethiolate": "[S-]C(F)(F)F.[Cu+]"
+"Diethyl (Bromodifluoromethyl)phosphonate": "FC(Br)(P(OCC)(OCC)=O)F"
+"Difluoroacetic Anhydride": "O=C(OC(C(F)F)=O)C(F)F"
+"Difluoromethyl 2-Pyridyl Sulfone": "O=S(C1=NC=CC=C1)(C(F)F)=O"
+"Difluoromethyl Phenyl Sulfide": "FC(SC1=CC=CC=C1)F"
+"Difluoromethyl Phenyl Sulfone": "O=S(C1=CC=CC=C1)(C(F)F)=O"
+"Heptafluorobutyric Anhydride": "O=C(OC(C(F)(F)C(F)(F)C(F)(F)F)=O)C(F)(F)C(F)(F)C(F)(F)F"
+"Heptafluorobutyryl Chloride": "O=C(Cl)C(F)(F)C(F)(F)C(F)(F)F"
+"Methyl Chlorodifluoroacetate": "O=C(OC)C(F)(Cl)F"
+"Methyl Difluoro(fluorosulfonyl)acetate": "O=C(OC)C(F)(F)S(=O)(F)=O"
+"Morpholinosulfur Trifluoride": "FS(F)(F)N1CCOCC1"
+"N-(Trifluoromethylthio)phthalimide": "O=C(N1SC(F)(F)F)C2=CC=CC=C2C1=O"
+"N-Fluorobenzenesulfonimide": "FN(S(=O)(C1=CC=CC=C1)=O)S(=O)(C2=CC=CC=C2)=O"
+"N-Fluoro-N'-(chloromethyl)triethylenediamine Bis(tetrafluoroborate)": "F[N+]1(CC2)CC[N+]2(CCl)CC1.F[B-](F)(F)F.F[B-](F)(F)F"
+"N-Methylbis(trifluoroacetamide)": "O=C(C(F)(F)F)N(C)C(C(F)(F)F)=O"
+"N-Methyl-N-(trifluoromethylthio)aniline": "FC(F)(F)SN(C)C1=CC=CC=C1"
+"Pentafluorobenzoyl Chloride": "O=C(Cl)C1=C(F)C(F)=C(F)C(F)=C1F"
+"Pentafluorophenyl Trifluoroacetate": "O=C(OC1=C(F)C(F)=C(F)C(F)=C1F)C(F)(F)F"
+"Pentafluoropropionic Anhydride": "O=C(OC(C(F)(F)C(F)(F)F)=O)C(F)(F)C(F)(F)F"
+"Phenyl Trifluoromethyl Sulfone": "O=S(C(F)(F)F)(C1=CC=CC=C1)=O"
+"Phenyl Trifluoromethyl Sulfoxide": "O=S(C1=CC=CC=C1)C(F)(F)F"
+"Potassium Trifluoroacetate": "O=C([O-])C(F)(F)F.[K+]"
+"Potassium Trimethoxy(trifluoromethyl)borate": "FC([B-](OC)(OC)OC)(F)F.[K+]"
+"Pyridine-2-sulfonyl Fluoride": "O=S(C1=NC=CC=C1)(F)=O"
+"Pyrimidine-2-sulfonyl Fluoride": "O=S(C1=NC=CC=N1)(F)=O"
+"S-Ethyl Trifluorothioacetate": "O=C(SCC)C(F)(F)F"
+"Silver(I) Trifluoromethanethiolate": "[S-]C(F)(F)F.[Ag+]"
+"Sodium Bromodifluoroacetate": "O=C([O-])C(F)(Br)F.[Na+]"
+"Sodium Chlorodifluoroacetate": "O=C([O-])C(F)(Cl)F.[Na+]"
+"Sodium Trifluoroacetate": "O=C([O-])C(F)(F)F.[Na+]"
+"Sodium Trifluoromethanesulfinate": "O=S(C(F)(F)F)[O-].[Na+]"
+"Tetrabutylammonium Bifluoride": "CCCC[N+](CCCC)(CCCC)CCCC.[H]F.[F-]"
+"Tetrabutylammonium Difluorotriphenylstannate": "CCCC[N+](CCCC)(CCCC)CCCC.F[Sn-](C1=CC=CC=C1)(C2=CC=CC=C2)(F)C3=CC=CC=C3"
+"Tetrabutylammonium Dihydrogen Trifluoride": "CCCC[N+](CCCC)(CCCC)CCCC.[H+].[H+].[F-].[F-].[F-]"
+"Tetrabutylammonium Fluoride": "CCCC[N+](CCCC)(CCCC)CCCC.[F-]"
+"Tetrabutylammonium Fluoride Hydrate": "CCCC[N+](CCCC)(CCCC)CCCC.[H]O[H].[F-]"
+"Tetraethylammonium Fluoride Tetrahydrofluoride": "CC[N+](CC)(CC)CC.[H]F.[H]F.[H]F.[H]F.[F-]"
+"Tetraethylammonium Fluoride Trihydrofluoride": "CC[N+](CC)(CC)CC.[H]F.[H]F.[H]F.[F-]"
+"Tetramethylammonium Fluoride Tetrahydrate": "C[N+](C)(C)C.[H]O[H].[H]O[H].[H]O[H].[H]O[H].[F-]"
+"Triethyl 2-Fluoro-2-phosphonoacetate": "O=C(OCC)C(F)P(OCC)(OCC)=O"
+"Triethyl(trifluoromethyl)silane": "FC([Si](CC)(CC)CC)(F)F"
+"Triethylamine Trihydrofluoride": "CCN(CC)CC.[H]F.[H]F.[H]F"
+"Trifluoroacetic Anhydride": "O=C(OC(C(F)(F)F)=O)C(F)(F)F"
+"Trifluoroacetyl Triflate": "O=S(OC(C(F)(F)F)=O)(C(F)(F)F)=O"
+"Trimethyl(pentafluoroethyl)silane": "FC([Si](C)(C)C)(F)C(F)(F)F"
+"Trimethylsilyl Difluoro(fluorosulfonyl)acetate": "O=C(O[Si](C)(C)C)C(F)(F)S(=O)(F)=O"
+"Zinc(II) Bis(trifluoromethanesulfinate) Dihydrate": "O=S(C(F)(F)F)[O-].O=S(C(F)(F)F)[O-].[H]O[H].[H]O[H].[Zn+2]"
+"IF5-Pyridine-HF": "[H]F.FI(F)(F)(F)F.C1=CN=CC=C1"
+"Ishikawa's Reagent": "FC(N(CC)CC)(C(C(F)(F)F)F)F"
+"PhenoFluorâ„¢ Mix": "[Cs]F.Cl[C+](N(C=C1)C2=C(C(C)C)C=CC=C2C(C)C)=[N]1C(C(C(C)C)=CC=C3)=C3C(C)C.[Cl-]"
diff --git a/lib/cdx/below_arrow/halogenation_BrClI.yaml b/lib/cdx/below_arrow/halogenation_BrClI.yaml
new file mode 100644
index 0000000000..34888b362b
--- /dev/null
+++ b/lib/cdx/below_arrow/halogenation_BrClI.yaml
@@ -0,0 +1,51 @@
+"1,2-Dibromo-1,1,2,2-tetrachloroethane": "ClC(Cl)(Br)C(Cl)(Br)Cl"
+"1,3-Dibromo-5,5-dimethylhydantoin": "O=C(N1Br)N(Br)C(C)(C)C1=O"
+"1,3-Diiodo-5,5-dimethylhydantoin": "O=C(N1I)N(I)C(C)(C)C1=O"
+"1,8-Diazabicyclo[5.4.0]-7-undecene Hydrogen Tribromide": "N12CCCCCC1=NCCC2.[H+].[Br-].[Br-].[Br-]"
+"1-Butyl-3-methylimidazolium Tribromide": "C[N+]1=CN(CCCC)C=C1.[Br-].[Br-].[Br-]"
+"1-Chloro-2-iodoethane": "ICCCl"
+"2,4,4,6-Tetrabromo-2,5-cyclohexadienone": "BrC1=CC(Br)(Br)C=C(Br)C1=O"
+"2-Bromo-2-cyano-N,N-dimethylacetamide": "O=C(N(C)C)C(Br)C#N"
+"4-Dimethylaminopyridinium Bromide Perbromide": "CN(C)C1=CC=[NH+]C=C1.Br[Br-]Br"
+"5,5-Dibromomeldrum's Acid (=5,5-Dibromo-2,2-dimethyl-4,6-dioxy-1,3-dioxane)": "O=C(OC(C)(C)O1)C(Br)(Br)C1=O"
+"Benzyltrimethylammonium Dichloroiodate": "C[N+](C)(CC1=CC=CC=C1)C.Cl[I-]Cl"
+"Benzyltrimethylammonium Tetrachloroiodate": "C[N+](C)(CC1=CC=CC=C1)C.Cl[I-](Cl)(Cl)Cl"
+"Benzyltrimethylammonium Tribromide": "C[N+](C)(CC1=CC=CC=C1)C.[Br-].[Br-].[Br-]"
+"Bis(2,4,6-trimethylpyridine)bromonium Hexafluorophosphate": "CC1=CC(C)=C([BrH+])C(C)=N1.CC2=CC(C)=CC(C)=N2.F[P-](F)(F)(F)(F)F"
+"Bis(2,4,6-trimethylpyridine)iodonium Hexafluorophosphate": "CC1=CC(C)=C([IH+])C(C)=N1.CC2=CC(C)=CC(C)=N2.F[P-](F)(F)(F)(F)F"
+"Bis(pyridine)iodonium Tetrafluoroborate": "[IH+]C1=NC=CC=C1.F[B-](F)(F)F.C2=NC=CC=C2"
+"Bromine - 1,4-Dioxane Complex": "BrBr.O1CCOCC1"
+"Bromodimethylsulfonium Bromide": "C[S+](Br)C.[Br-]"
+"Bromotrichloromethane": "ClC(Cl)(Br)Cl"
+"Carbon Tetrabromide": "BrC(Br)(Br)Br"
+"Carbon Tetraiodide": "IC(I)(I)I"
+"Chloramine B Hydrate": "O=S([N-]Cl)(C1=CC=CC=C1)=O.O.[Na+]"
+"Chloramine T Trihydrate": "CC1=CC=C(S(=O)([N-]Cl)=O)C=C1.[H]O[H].[H]O[H].[H]O[H].[Na+]"
+"Cyanuric Chloride": "ClC1=NC(Cl)=NC(Cl)=N1"
+"Dibromoisocyanuric Acid": "O=C(N(Br)C(N1)=O)N(Br)C1=O"
+"Dichloramine B": "O=S(N(Cl)Cl)(C1=CC=CC=C1)=O"
+"Dichloramine T": "O=S(N(Cl)Cl)(C(C=C1)=CC=C1C)=O"
+"Hydriodic Acid": "[H]I"
+"Iodine": "II"
+"Monosodium Bromoisocyanurate Hydrate": "BrC([N-]C(N1)=O)=NC1=O.[Na+]"
+"N,N-Dimethyl-N-(methylsulfanylmethylene)ammonium Iodide": "CSC=[N+](C)C.[I-]"
+"N-Bromoacetamide": "CC(NBr)=O"
+"N-Bromophthalimide": "O=C(N1Br)C2=CC=CC=C2C1=O"
+"N-Bromosaccharin": "O=C1N(Br)S(=O)(C2=C1C=CC=C2)=O"
+"N-Bromosuccinimide": "O=C(N1Br)CCC1=O"
+"N-Chlorophthalimide": "O=C(N1Cl)C2=CC=CC=C2C1=O"
+"N-Chlorosaccharin": "O=C1N(Cl)S(=O)(C2=C1C=CC=C2)=O"
+"N-Chlorosuccinimide": "O=C(N1Cl)CCC1=O"
+"N-Iodosaccharin": "O=C1N(I)S(=O)(C2=C1C=CC=C2)=O"
+"N-Iodosuccinimide": "O=C(N1I)CCC1=O"
+"o-Chloramine T": "CC1=CC=CC=C1S([N-]Cl)(=O)=O.[Na+]"
+"Oxalyl Chloride": "O=C(Cl)C(Cl)=O"
+"Pyridine Iodine Monochloride": "IC1=NC=CC=C1Cl"
+"Pyridinium Bromide Perbromide": "BrBr.C1=[NH+]C=CC=C1.[Br-]"
+"Sodium Dichloroisocyanurate": "ClN(C([N-]C1=O)=O)C(N1Cl)=O.[Na+]"
+"Tetrabutylammonium Tribromide": "CCCC[N+](CCCC)(CCCC)CCCC.[Br-].[Br-].[Br-]"
+"Tetramethylammonium Dichloroiodate": "C[N+](C)(C)C.Cl[I-]Cl"
+"Thionyl Chloride": "O=S(Cl)Cl"
+"Trichloroisocyanuric Acid": "O=C(N(Cl)C(N1Cl)=O)N(Cl)C1=O"
+"Trichloromethanesulfonyl Chloride": "O=S(C(Cl)(Cl)Cl)(Cl)=O"
+"Trimethylphenylammonium Tribromide": "C[N+](C)(C)C1=CC=CC=C1.[Br-].[Br-].[Br-]"
diff --git a/lib/cdx/below_arrow/ionic_liquids.yaml b/lib/cdx/below_arrow/ionic_liquids.yaml
new file mode 100644
index 0000000000..876c2f9dc7
--- /dev/null
+++ b/lib/cdx/below_arrow/ionic_liquids.yaml
@@ -0,0 +1,145 @@
+"1-(2-Hydroxyethyl)-3-methylimidazolium Chloride": "C[N+]1=CN(CCO)C=C1.[Cl-]"
+"1-(2-Hydroxyethyl)-3-methylimidazolium Tetrafluoroborate": "C[N+]1=CN(CCO)C=C1.F[B-](F)(F)F"
+"1,2-Dimethyl-3-propylimidazolium Iodide": "CCC[N+]1=C(C)N(C)C=C1.[I-]"
+"1,3-Dimethylimidazolium Chloride": "C[N+]1=CN(C)C=C1.[Cl-]"
+"1,3-Dimethylimidazolium Dimethyl Phosphate": "C[N+]1=CN(C)C=C1.O=P(OC)([O-])OC"
+"1,3-Dimethylimidazolium Iodide": "C[N+]1=CN(C)C=C1.[I-]"
+"1,3-Dimethylimidazolium Methyl Sulfate": "C[N+]1=CN(C)C=C1.O=S(OC)([O-])=O"
+"1-Allyl-3-methylimidazolium Chloride": "C[N+]1=CN(CC=C)C=C1.[Cl-]"
+"1-Butyl-1-methylpiperidinium Bis(trifluoromethanesulfonyl)imide": "C[N+]1(CCCC)CCCCC1.O=S([N-]S(=O)(C(F)(F)F)=O)(C(F)(F)F)=O"
+"1-Butyl-1-methylpiperidinium Bromide": "C[N+]1(CCCC)CCCCC1.[Br-]"
+"1-Butyl-1-methylpyrrolidinium Bis(trifluoromethanesulfonyl)imide": "C[N+]1(CCCC)CCCC1.O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O"
+"1-Butyl-1-methylpyrrolidinium Bromide": "C[N+]1(CCCC)CCCC1.[Br-]"
+"1-Butyl-1-methylpyrrolidinium Chloride": "C[N+]1(CCCC)CCCC1.[Cl-]"
+"1-Butyl-1-methylpyrrolidinium Dicyanamide": "C[N+]1(CCCC)CCCC1.N#C[N-]C#N"
+"1-Butyl-1-methylpyrrolidinium Trifluoromethanesulfonate": "C[N+]1(CCCC)CCCC1.O=S(C(F)(F)F)([O-])=O"
+"1-Butyl-2,3-dimethylimidazolium Bis(trifluoromethanesulfonyl)imide": "O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O.CC1=[N+](C)C=CN1CCCC"
+"1-Butyl-2,3-dimethylimidazolium Chloride": "C[N+]1=C(C)N(CCCC)C=C1.[Cl-]"
+"1-Butyl-2,3-dimethylimidazolium Hexafluorophosphate": "C[N+]1=C(C)N(CCCC)C=C1.F[P-](F)(F)(F)(F)F"
+"1-Butyl-2,3-dimethylimidazolium Tetrafluoroborate": "C[N+]1=C(C)N(CCCC)C=C1.F[B-](F)(F)F"
+"1-Butyl-2,3-dimethylimidazolium Trifluoromethanesulfonate": "C[N+]1=C(C)N(CCCC)C=C1.O=S(C(F)(F)F)([O-])=O"
+"1-Butyl-3-methylimidazolium Bis(trifluoromethanesulfonyl)imide": "C[N+]1=CN(CCCC)C=C1.O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O"
+"1-Butyl-3-methylimidazolium Bromide": "C[N+]1=CN(CCCC)C=C1.[Br-]"
+"1-Butyl-3-methylimidazolium Chloride": "C[N+]1=CN(CCCC)C=C1.[Cl-]"
+"1-Butyl-3-methylimidazolium Dicyanamide": "C[N+]1=CN(CCCC)C=C1.N#C[N-]C#N"
+"1-Butyl-3-methylimidazolium Hexafluorophosphate": "C[N+]1=CN(CCCC)C=C1.F[P-](F)(F)(F)(F)F"
+"1-Butyl-3-methylimidazolium Iodide": "C[N+]1=CN(CCCC)C=C1.[I-]"
+"1-Butyl-3-methylimidazolium Methanesulfonate": "C[N+]1=CN(CCCC)C=C1.CS(=O)([O-])=O"
+"1-Butyl-3-methylimidazolium Methyl Sulfate": "C[N+]1=CN(CCCC)C=C1.O=S(OC)([O-])=O"
+"1-Butyl-3-methylimidazolium Tetrachloroferrate": "C[N+]1=CN(CCCC)C=C1.Cl[Fe-](Cl)(Cl)Cl"
+"1-Butyl-3-methylimidazolium Tetrafluoroborate": "C[N+]1=CN(CCCC)C=C1.F[B-](F)(F)F"
+"1-Butyl-3-methylimidazolium Thiocyanate": "C[N+]1=CN(CCCC)C=C1.[S-]C#N"
+"1-Butyl-3-methylimidazolium Tribromide": "C[N+]1=CN(CCCC)C=C1.[Br-].[Br-].[Br-]"
+"1-Butyl-3-methylimidazolium Tricyanomethanide": "C[N+]1=CN(CCCC)C=C1.N#C[C-](C#N)C#N"
+"1-Butyl-3-methylimidazolium Trifluoro(trifluoromethyl)borate": "C[N+]1=CN(CCCC)C=C1.FC([B-](F)(F)F)(F)F"
+"1-Butyl-3-methylimidazolium Trifluoroacetate": "C[N+]1=CN(CCCC)C=C1.O=C([O-])C(F)(F)F"
+"1-Butyl-3-methylimidazolium Trifluoromethanesulfonate": "C[N+]1=CN(CCCC)C=C1.O=S(C(F)(F)F)([O-])=O"
+"1-Butyl-3-methylpyridinium Bromide": "CC1=C[N+](CCCC)=CC=C1.[Br-]"
+"1-Butyl-3-methylpyridinium Chloride": "CC1=C[N+](CCCC)=CC=C1.[Cl-]"
+"1-Butyl-4-methylpyridinium Bromide": "CC1=CC=[N+](CCCC)C=C1.[Br-]"
+"1-Butyl-4-methylpyridinium Chloride": "CC1=CC=[N+](CCCC)C=C1.[Cl-]"
+"1-Butyl-4-methylpyridinium Hexafluorophosphate": "CC1=CC=[N+](CCCC)C=C1.F[P-](F)(F)(F)(F)F"
+"1-Butylpyridinium Bis(trifluoromethanesulfonyl)imide": "O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O.CCCC[N+]1=CC=CC=C1"
+"1-Butylpyridinium Bromide": "CCCC[N+]1=CC=CC=C1.[Br-]"
+"1-Butylpyridinium Chloride": "CCCC[N+]1=CC=CC=C1.[Cl-]"
+"1-Butylpyridinium Hexafluorophosphate": "CCCC[N+]1=CC=CC=C1.F[P-](F)(F)(F)(F)F"
+"1-Butylpyridinium Tetrafluoroborate": "CCCC[N+]1=CC=CC=C1.F[B-](F)(F)F"
+"1-Decyl-3-methylimidazolium Bis(trifluoromethanesulfonyl)imide": "C[N+]1=CN(CCCCCCCCCC)C=C1.O=S(C(F)(F)F)([N-]S(C(F)(F)F)(=O)=O)=O"
+"1-Decyl-3-methylimidazolium Bromide": "C[N+]1=CN(CCCCCCCCCC)C=C1.[Br-]"
+"1-Decyl-3-methylimidazolium Chloride": "C[N+]1=CN(CCCCCCCCCC)C=C1.[Cl-]"
+"1-Ethyl-1-methylpyrrolidinium Bromide": "C[N+]1(CC)CCCC1.[Br-]"
+"1-Ethyl-1-methylpyrrolidinium Tetrafluoroborate": "C[N+]1(CC)CCCC1.F[B-](F)(F)F"
+"1-Ethyl-2,3-dimethylimidazolium Bis(trifluoromethanesulfonyl)imide": "O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O.CC1=[N+](C)C=CN1CC"
+"1-Ethyl-2-methylpyridinium Bromide": "CC1=CC=CC=[N+]1CC.[Br-]"
+"1-Ethyl-3-(hydroxymethyl)pyridinium Ethyl Sulfate": "OCC1=C[N+](CC)=CC=C1.O=S(OCC)([O-])=O"
+"1-Ethyl-3-methylimidazolium Acetate": "C[N+]1=CN(CC)C=C1.CC([O-])=O"
+"1-Ethyl-3-methylimidazolium Bis(trifluoromethanesulfonyl)imide": "C[N+]1=CN(CC)C=C1.O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O"
+"1-Ethyl-3-methylimidazolium Bromide": "C[N+]1=CN(CC)C=C1.[Br-]"
+"1-Ethyl-3-methylimidazolium Chloride": "C[N+]1=CN(CC)C=C1.[Cl-]"
+"1-Ethyl-3-methylimidazolium Dicyanamide": "CCN1C=[N+](C)C=C1.N#C[N-]C#N"
+"1-Ethyl-3-methylimidazolium Diethyl Phosphate": "C[N+]1=CN(CC)C=C1.O=P(OCC)([O-])OCC"
+"1-Ethyl-3-methylimidazolium Ethyl Sulfate": "C[N+]1=CN(CC)C=C1.O=S(OCC)([O-])=O"
+"1-Ethyl-3-methylimidazolium Hexafluorophosphate": "C[N+]1=CN(CC)C=C1.F[P-](F)(F)(F)(F)F"
+"1-Ethyl-3-methylimidazolium Hydrogen Sulfate": "C[N+]1=CN(CC)C=C1.O=S(O)([O-])=O"
+"1-Ethyl-3-methylimidazolium Iodide": "C[N+]1=CN(CC)C=C1.[I-]"
+"1-Ethyl-3-methylimidazolium Methanesulfonate": "C[N+]1=CN(CC)C=C1.CS(=O)([O-])=O"
+"1-Ethyl-3-methylimidazolium Methyl Sulfate": "C[N+]1=CN(CC)C=C1.O=S(OC)([O-])=O"
+"1-Ethyl-3-methylimidazolium Nitrate": "C[N+]1=CN(CC)C=C1.[O-][N+]([O-])=O"
+"1-Ethyl-3-methylimidazolium Tetrachloroferrate": "C[N+]1=CN(CC)C=C1.Cl[Fe-](Cl)(Cl)Cl"
+"1-Ethyl-3-methylimidazolium Tetrafluoroborate": "C[N+]1=CN(CC)C=C1.F[B-](F)(F)F"
+"1-Ethyl-3-methylimidazolium Thiocyanate": "C[N+]1=CN(CC)C=C1.[S-]C#N"
+"1-Ethyl-3-methylimidazolium Tricyanomethanide": "C[N+]1=CN(CC)C=C1.N#C[C-](C#N)C#N"
+"1-Ethyl-3-methylimidazolium Trifluoro(trifluoromethyl)borate": "C[N+]1=CN(CC)C=C1.FC([B-](F)(F)F)(F)F"
+"1-Ethyl-3-methylimidazolium Trifluoroacetate": "C[N+]1=CN(CC)C=C1.O=C([O-])C(F)(F)F"
+"1-Ethyl-3-methylimidazolium Trifluoromethanesulfonate": "C[N+]1=CN(CC)C=C1.O=S(C(F)(F)F)([O-])=O"
+"1-Ethyl-3-methylimidazolium p-Toluenesulfonate": "C[N+]1=CN(CC)C=C1.CC2=CC=C(S(=O)([O-])=O)C=C2"
+"1-Ethyl-3-methylpyridinium Bis(trifluoromethanesulfonyl)imide": "CC1=CC=C[N+](CC)=C1.O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O"
+"1-Ethyl-3-methylpyridinium Ethyl Sulfate": "CC1=C[N+](CC)=CC=C1.O=S(OCC)([O-])=O"
+"1-Ethyl-4-methylpyridinium Bromide": "CC1=CC=[N+](CC)C=C1.[Br-]"
+"1-Ethylpyridinium Bromide": "CC[N+]1=CC=CC=C1.[Br-]"
+"1-Ethylpyridinium Chloride": "CC[N+]1=CC=CC=C1.[Cl-]"
+"1-Hexyl-2,3-dimethylimidazolium Iodide": "C[N+]1=C(C)N(CCCCCC)C=C1.[I-]"
+"1-Hexyl-3-methylimidazolium Bis(trifluoromethanesulfonyl)imide": "C[N+]1=CN(CCCCCC)C=C1.O=S([N-]S(=O)(C(F)(F)F)=O)(C(F)(F)F)=O"
+"1-Hexyl-3-methylimidazolium Bromide": "C[N+]1=CN(CCCCCC)C=C1.[Br-]"
+"1-Hexyl-3-methylimidazolium Chloride": "C[N+]1=CN(CCCCCC)C=C1.[Cl-]"
+"1-Hexyl-3-methylimidazolium Hexafluorophosphate": "C[N+]1=CN(CCCCCC)C=C1.F[P-](F)(F)(F)(F)F"
+"1-Hexyl-3-methylimidazolium Iodide": "C[N+]1=CN(CCCCCC)C=C1.[I-]"
+"1-Hexyl-3-methylimidazolium Tetrafluoroborate": "C[N+]1=CN(CCCCCC)C=C1.F[B-](F)(F)F"
+"1-Hexyl-3-methylimidazolium Trifluoromethanesulfonate": "C[N+]1=CN(CCCCCC)C=C1.O=S(C(F)(F)F)([O-])=O"
+"1-Hexylpyridinium Hexafluorophosphate": "CCCCCC[N+]1=CC=CC=C1.F[P-](F)(F)(F)(F)F"
+"1-Methyl-1-propylpiperidinium Bis(fluorosulfonyl)imide": "O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O.C[N+]1(CCC)CCCCC1"
+"1-Methyl-1-propylpiperidinium Bromide": "CCC[N+]1(C)CCCCC1.[Br-]"
+"1-Methyl-1-propylpyrrolidinium Bis(trifluoromethanesulfonyl)imide": "O=S(NS(C(F)(F)F)(=O)=O)(C(F)(F)F)=O.C[N+]1(CCC)CCCC1"
+"1-Methyl-3-n-octylimidazolium Bromide": "CCCCCCCC[N+]1=CN(C)C=C1.[Br-]"
+"1-Methyl-3-n-octylimidazolium Chloride": "CCCCCCCC[N+]1=CN(C)C=C1.[Cl-]"
+"1-Methyl-3-n-octylimidazolium Hexafluorophosphate": "CCCCCCCC[N+]1=CN(C)C=C1.F[P-](F)(F)(F)(F)F"
+"1-Methyl-3-n-octylimidazolium Tetrafluoroborate": "CCCCCCCC[N+]1=CN(C)C=C1.F[B-](F)(F)F"
+"1-Methyl-3-n-octylimidazolium Trifluoromethanesulfonate": "CCCCCCCC[N+]1=CN(C)C=C1.O=S(C(F)(F)F)([O-])=O"
+"1-Methyl-3-pentylimidazolium Bromide": "CCCCC[N+]1=CN(C)C=C1.[Br-]"
+"1-Methyl-3-pentylimidazolium Tetrafluoroborate": "CCCCC[N+]1=CN(C)C=C1.F[B-](F)(F)F"
+"1-Methyl-3-propylimidazolium Bromide": "CCC[N+]1=CN(C)C=C1.[Br-]"
+"1-Methyl-3-propylimidazolium Chloride": "CCC[N+]1=CN(C)C=C1.[Cl-]"
+"1-Methyl-3-propylimidazolium Iodide": "CCC[N+]1=CN(C)C=C1.[I-]"
+"1-Methyl-3-propylimidazolium Tetrafluoroborate": "CCC[N+]1=CN(C)C=C1.F[B-](F)(F)F"
+"1-Propylpyridinium Chloride": "CCC[N+]1=CC=CC=C1.[Cl-]"
+"2,3-Dimethyl-1-propylimidazolium Bis(trifluoromethanesulfonyl)imide": "CN1C(C)=[N+](CCC)C=C1.O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O"
+"4-Ethyl-4-methylmorpholinium Bromide": "C[N+]1(CC)CCOCC1.[Br-]"
+"Amyltriethylammonium Bis(trifluoromethanesulfonyl)imide": "CCC[N+](CCC)(CCC)CCC.FC(F)(F)S([N-]S(C(F)(F)F)(=O)=O)(=O)=O"
+"Cyclohexyltrimethylammonium Bis(trifluoromethanesulfonyl)imide": "C[N+](C)(C)C1CCCCC1.O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O"
+"Diethyl(2-methoxyethyl)methylammonium Bis(fluorosulfonyl)imide": "FC(F)(F)S(=O)([N-]S(=O)(C(F)(F)F)=O)=O.C[N+](CC)(CC)CCOC"
+"Methyltri-n-octylammonium Bis(trifluoromethanesulfonyl)imide": "O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O.C[N+](CCCCCCCC)(CCCCCCCC)CCCCCCCC"
+"Tetraamylammonium Bromide": "CCCCC[N+](CCCCC)(CCCCC)CCCCC.[Br-]"
+"Tetraamylammonium Chloride": "CCCCC[N+](CCCCC)(CCCCC)CCCCC.[Cl-]"
+"Tetraamylammonium Iodide": "CCCCC[N+](CCCCC)(CCCCC)CCCCC.[I-]"
+"Tetrabutylammonium Acetate": "CCCC[N+](CCCC)(CCCC)CCCC.CC([O-])=O"
+"Tetrabutylammonium Bromide": "CCCC[N+](CCCC)(CCCC)CCCC.[Br-]"
+"Tetrabutylammonium Chloride": "CCCC[N+](CCCC)(CCCC)CCCC.[Cl-]"
+"Tetrabutylammonium Hexafluorophosphate": "CCCC[N+](CCCC)(CCCC)CCCC.F[P-](F)(F)(F)(F)F"
+"Tetrabutylammonium Iodide": "CCCC[N+](CCCC)(CCCC)CCCC.[I-]"
+"Tetrabutylammonium Tetrafluoroborate": "CCCC[N+](CCCC)(CCCC)CCCC.F[B-](F)(F)F"
+"Tetrabutylammonium Trifluoromethanesulfonate": "CCCC[N+](CCCC)(CCCC)CCCC.O=S(C(F)(F)F)([O-])=O"
+"Tetrabutylphosphonium Bromide": "CCCC[P+](CCCC)(CCCC)CCCC.[Br-]"
+"Tetrabutylphosphonium Hexafluorophosphate": "CCCC[P+](CCCC)(CCCC)CCCC.F[P-](F)(F)(F)(F)F"
+"Tetrabutylphosphonium Tetrafluoroborate": "CCCC[P+](CCCC)(CCCC)CCCC.F[B-](F)(F)F"
+"Tetraheptylammonium Bromide": "CCCCCCC[N+](CCCCCCC)(CCCCCCC)CCCCCCC.[Br-]"
+"Tetraheptylammonium Iodide": "CCCCCCC[N+](CCCCCCC)(CCCCCCC)CCCCCCC.[I-]"
+"Tetrahexylammonium Bromide": "CCCCCC[N+](CCCCCC)(CCCCCC)CCCCCC.[Br-]"
+"Tetrahexylammonium Iodide": "CCCCCC[N+](CCCCCC)(CCCCCC)CCCCCC.[I-]"
+"Tetra-n-octylammonium Bromide": "CCCCCCCC[N+](CCCCCCCC)(CCCCCCCC)CCCCCCCC.[Br-]"
+"Tetra-n-octylammonium Iodide": "CCCCCCCC[N+](CCCCCCCC)(CCCCCCCC)CCCCCCCC.[I-]"
+"Tetra-n-octylphosphonium Bromide": "CCCCCCCC[P+](CCCCCCCC)(CCCCCCCC)CCCCCCCC.[Br-]"
+"Tetrapropylammonium Chloride": "CCC[N+](CCC)(CCC)CCC.[Cl-]"
+"Tributyl(2-methoxyethyl)phosphonium Bis(trifluoromethanesulfonyl)imide": "CCCC[P+](CCCC)(CCCC)CCOC.FC(F)(S([N-]S(C(F)(F)F)(=O)=O)(=O)=O)F"
+"Tributyl(ethyl)phosphonium Diethyl Phosphate": "CC[P+](CCCC)(CCCC)CCCC.O=P(OCC)([O-])OCC"
+"Tributyl(methyl)ammonium Dicyanamide": "[H]C(C([H])([H])C([H])([H])C([H])([H])[H])([H])[N+](C([H])([H])C([H])([H])C([H])([H])C([H])([H])[H])(C([H])([H])[H])C([H])([H])C([H])([H])C([H])([H])C([H])([H])[H].[N-]=C=NC#N"
+"Tributylhexadecylphosphonium Bromide": "CCCCCCCCCCCCCCCC[P+](CCCC)(CCCC)CCCC.[Br-]"
+"Tributylmethylammonium Bis(trifluoromethanesulfonyl)imide": "FC(F)(S([N-]S(C(F)(F)F)(=O)=O)(=O)=O)F.C[N+](CCCC)(CCCC)CCCC"
+"Tributylmethylphosphonium Bis(trifluoromethanesulfonyl)imide": "C[P+](CCCC)(CCCC)CCCC.FC(F)(S([N-]S(C(F)(F)F)(=O)=O)(=O)=O)F"
+"Tributylmethylphosphonium Iodide": "C[P+](CCCC)(CCCC)CCCC.[I-]"
+"Tributyl-n-octylphosphonium Bromide": "CCCCCCCC[P+](CCCC)(CCCC)CCCC.[Br-]"
+"Tributylsulfonium Iodide": "CCCC[S+](CCCC)CCCC.[I-]"
+"Triethylsulfonium Bis(trifluoromethanesulfonyl)imide": "O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O.CC[S+](CC)CC"
+"Trihexyl(tetradecyl)phosphonium Chloride": "CCCCCCCCCCCCCC[P+](CCCCCC)(CCCCCC)CCCCCC.[Cl-]"
+"Trihexyl(tetradecyl)phosphonium Dicyanamide": "CCCCCC[P+](CCCCCC)(CCCCCC)CCCCCCCCCCCCCC.N#C[N-]C#N"
+"Trimethylpropylammonium Bis(trifluoromethanesulfonyl)imide": "CCC[N+](C)(C)C.O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O"
+"Trimethylsulfonium Iodide": "C[S+](C)C.[I-]"
diff --git a/lib/cdx/below_arrow/lewis_acids.yaml b/lib/cdx/below_arrow/lewis_acids.yaml
new file mode 100644
index 0000000000..e39a37aab8
--- /dev/null
+++ b/lib/cdx/below_arrow/lewis_acids.yaml
@@ -0,0 +1,70 @@
+"(±)-10-Camphorsulfonic Acid": "O=C(CC(C(C)1C)CC2)C21CS(=O)(O)=O"
+"1,2-Benzenedisulfonic Imide": "O=S(C1=CC=CC=C1S2(=O)=O)(N2)=O"
+"2-Hydroxybenzoic Acid": "O=C(O)C1=CC=CC=C1O"
+"5-Sulfosalicylic Acid Dihydrate": "OC1=CC=C(S(=O)(O)=O)C=C1C(O)=O.[H]O[H].[H]O[H]"
+"Acetic Acid": "CC(O)=O"
+"Aluminum Bromide Anhydrous": "[Al+3].[Br-].[Br-].[Br-]"
+"Aluminum Isopropoxide": "CC([O-])C.CC([O-])C.CC([O-])C.[Al+3]"
+"Aluminum(III) Chloride": "[Al+3].[Cl-].[Cl-].[Cl-]"
+"Aminomethanesulfonic Acid": "O=S(CN)(O)=O"
+"Benzenesulfonic Acid Anhydrous": "O=S(C1=CC=CC=C1)(O)=O"
+"Benzenesulfonic Acid Monohydrate": "O=S(C1=CC=CC=C1)(O)=O.[H]O[H]"
+"Benzoic Acid": "O=C(O)C1=CC=CC=C1"
+"Bis(trifluoromethanesulfonyl)imide": "O=S(C(F)(F)F)(NS(=O)(C(F)(F)F)=O)=O"
+"Boron Trifluoride": "FB(F)F"
+"Bromoacetic Acid": "O=C(O)CBr"
+"Cerium(III) Trifluoromethanesulfonate": "O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Ce+3]"
+"Chloroacetic Acid": "O=C(O)CCl"
+"Chlorodifluoroacetic Acid": "O=C(O)C(F)(Cl)F"
+"Citric Acid": "OC(C(O)=O)(CC(O)=O)CC(O)=O"
+"Copper(II) Trifluoromethanesulfonate": "O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Cu+2]"
+"Croconic Acid": "OC1=C(C(C(C1=O)=O)=O)O"
+"Dichloroacetic Acid": "O=C(O)C(Cl)Cl"
+"Dicyclohexyl(trifluoromethanesulfonyloxy)borane": "O=S(OB(C1CCCCC1)C2CCCCC2)(C(F)(F)F)=O"
+"Difluoroacetic Acid": "O=C(O)C(F)F"
+"DL-Lactic Acid": "OC(C)C(O)=O"
+"DL-Malic Acid": "OC(CC(O)=O)C(O)=O"
+"DL-α-Lipoic Acid": "O=C(CCCCC1SSCC1)O"
+"Ethylenediaminetetraacetic Acid": "O=C(CN(CCN(CC(O)=O)CC(O)=O)CC(O)=O)O"
+"Folic Acid Hydrate": "O=C(O)C(NC(C1=CC=C(NCC2=NC3=C(N=C2)N=C(N)NC3=O)C=C1)=O)CCC(O)=O.[H]O[H]"
+"Fumaric Acid": "O=C(O)/C=C/C(O)=O"
+"Gallic Acid Hydrate": "OC1=CC(C(O)=O)=CC(O)=C1O.[H]O[H]"
+"Glycolic Acid": "OCC(O)=O"
+"Hafnium(IV) Trifluoromethanesulfonate": "O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Hf+4]"
+"Hydriodic Acid": "[H]I"
+"Hydrochloric Acid": "[H]Cl"
+"Hydrogen Bromide": "[H]Br"
+"Hydrogen Chloride": "[H]Cl"
+"Hydroxylamine-O-sulfonic Acid": "NOS(O)(=O)=O"
+"L-(+)-Tartaric Acid": "O[C@H]([C@H](C(O)=O)O)C(O)=O"
+"Lanthanum(III) Trifluoromethanesulfonate": "O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[La+3]"
+"L-Ascorbic Acid": "OC([C@H](O1)[C@H](CO)O)=C(O)C1=O"
+"L-Lactic Acid": "OC(C)C(O)=O"
+"Maleic Acid": "O=C(O)/C=C\\C(O)=O"
+"Malonic Acid": "O=C(O)CC(O)=O"
+"Methanesulfonic Acid": "CS(=O)(O)=O"
+"Neodymium(III) Trifluoromethanesulfonate": "O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Nd+3]"
+"Nitrilotriacetic Acid": "O=C(O)CN(CC(O)=O)CC(O)=O"
+"Palmitic Acid": "CCCCCCCCCCCCCCCC(O)=O"
+"Phthalic Acid": "O=C(O)C1=CC=CC=C1C(O)=O"
+"Propionic Acid": "CCC(O)=O"
+"p-Toluenesulfonic Acid Monohydrate": "CC1=CC=C(S(=O)(O)=O)C=C1.[H]O[H]"
+"Pyridinium p-Toluenesulfonate": "CC1=CC=C(S(=O)([O-])=O)C=C1.C2=CC=CC=[NH+]2"
+"Scandium(III) Trifluoromethanesulfonate": "O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Sc+3]"
+"Silver Trifluoromethanesulfonate": "O=S(C(F)(F)F)([O-])=O.[Ag+]"
+"Sorbic Acid": "C/C=C/C=C/C(O)=O"
+"Succinic Acid": "O=C(O)CCC(O)=O"
+"Sulfanilic Acid": "O=S(O)(C1=CC=C(N)C=C1)=O"
+"Tetraisopropyl Orthotitanate": "CC(O[Ti](OC(C)C)(OC(C)C)OC(C)C)C"
+"Thioacetic Acid": "CC(O)=S"
+"Thioglycolic Acid": "SCC(O)=O"
+"Thulium(III) Trifluoromethanesulfonate": "O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Tm+3]"
+"Tin(IV) Chloride": "[Sn+4].[Cl-].[Cl-].[Cl-].[Cl-]"
+"Titanium(IV) Chloride": "[Ti+4].[Cl-].[Cl-].[Cl-].[Cl-]"
+"Tribromoacetic Acid": "O=C(O)C(Br)(Br)Br"
+"Trichloroacetic Acid": "O=C(O)C(Cl)(Cl)Cl"
+"Trifluoroacetic Acid": "O=C(O)C(F)(F)F"
+"Trifluoromethanesulfonic Acid": "O=S(C(F)(F)F)(O)=O"
+"Ytterbium(III) Trifluoromethanesulfonate Hydrate": "O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[H]O[H].[Yb+3]"
+"Yttrium(III) Trifluoromethanesulfonate": "O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Y+3]"
+"Zinc(II) Trifluoromethanesulfonate": "O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Zn+2]"
diff --git a/lib/cdx/below_arrow/ligands.yaml b/lib/cdx/below_arrow/ligands.yaml
new file mode 100644
index 0000000000..0f3e90707b
--- /dev/null
+++ b/lib/cdx/below_arrow/ligands.yaml
@@ -0,0 +1,378 @@
+"(-)-2,2'-Methylenebis[(3aS,8aR)-3a,8a-dihydro-8H-indeno[1,2-d]oxazole]": "[H][C@@]12N=C(CC3=N[C@]4([H])[C@](CC5=C4C=CC=C5)([H])O3)O[C@]1([H])CC6=C2C=CC=C6"
+"(-)-Sparteine": "[H][C@]12CCCCN1C[C@H]3[C@]4([H])CCCCN4C[C@@H]2C3"
+"(+)-2,2'-Methylenebis[(3aR,8aS)-3a,8a-dihydro-8H-indeno[1,2-d]oxazole]": "[H][C@]12N=C(CC3=N[C@@]4([H])[C@@](CC5=C4C=CC=C5)([H])O3)O[C@@]1([H])CC6=C2C=CC=C6"
+"(+)-Sparteine": "[H][C@]12CCCCN1C[C@H]3[C@]4([H])CCCCN4C[C@@H]2C3"
+"(1R,2R)-(-)-1,2-Cyclohexanediamine": "N[C@H]1[C@H](N)CCCC1"
+"(1R,2R)-(-)-N,N'-Dimethylcyclohexane-1,2-diamine": "CN[C@H]1[C@H](NC)CCCC1"
+"(1R,2R)-(+)-1,2-Diphenylethylenediamine": "N[C@H](C1=CC=CC=C1)[C@@H](C2=CC=CC=C2)N"
+"(1R,2R)-1,2-Bis(2,4,6-trimethylphenyl)ethylenediamine": "N[C@H](C1=C(C)C=C(C)C=C1C)[C@@H](C2=C(C)C=C(C)C=C2C)N"
+"(1R,2R)-1,2-Bis(2-hydroxyphenyl)ethylenediamine": "N[C@H](C1=CC=CC=C1O)[C@@H](C2=CC=CC=C2O)N"
+"(1R,2R,4R,5R)-2,5-Bis(3,5-di-tert-butyl-2-hydroxybenzylideneamino)bicyclo[2.2.1]heptane": "OC1=C(C(C)(C)C)C=C(C(C)(C)C)C=C1/C=N/[C@H]2[C@@]3([H])C[C@@H](/N=C/C4=CC(C(C)(C)C)=CC(C(C)(C)C)=C4O)[C@@](C3)([H])C2"
+"(1S)-3-(1,10-Phenanthrolin-2-yl)-2'-phenyl-[1,1'-binaphthalen]-2-ol": "OC1=C(C2=NC3=C4N=CC=CC4=CC=C3C=C2)C=C5C=CC=CC5=C1C6=C7C=CC=CC7=CC=C6C8=CC=CC=C8"
+"(1S,2S)-(-)-1,2-Diphenylethylenediamine": "N[C@@H](C1=CC=CC=C1)[C@H](C2=CC=CC=C2)N"
+"(1S,2S)-(+)-1,2-Cyclohexanediamine": "N[C@@H]1[C@@H](N)CCCC1"
+"(1S,2S)-(+)-N,N'-Dimethylcyclohexane-1,2-diamine": "CN[C@@H]1[C@@H](NC)CCCC1"
+"(1S,2S)-1,2-Bis(2,4,6-trimethylphenyl)ethylenediamine": "N[C@@H](C1=C(C)C=C(C)C=C1C)[C@H](C2=C(C)C=C(C)C=C2C)N"
+"(1S,2S)-1,2-Bis(2-hydroxyphenyl)ethylenediamine": "N[C@@H](C1=CC=CC=C1O)[C@H](C2=CC=CC=C2O)N"
+"(1S,2S)-N,N'-Dihydroxy-N,N'-bis(diphenylacetyl)cyclohexane-1,2-diamine": "O=C(N(O)[C@@H]1[C@@H](N(O)C(C(C2=CC=CC=C2)C3=CC=CC=C3)=O)CCCC1)C(C4=CC=CC=C4)C5=CC=CC=C5"
+"(1S,2S,4S,5S)-2,5-Bis(3,5-di-tert-butyl-2-hydroxybenzylideneamino)bicyclo[2.2.1]heptane": "OC1=C(C(C)(C)C)C=C(C(C)(C)C)C=C1/C=N/[C@@H]2[C@]3([H])C[C@H](/N=C/C4=CC(C(C)(C)C)=CC(C(C)(C)C)=C4O)[C@](C3)([H])C2"
+"(4S,4'S)-2,2'-(Pentane-3,3'-diyl)bis(4-benzyl-4,5-dihydrooxazole)": "CCC(C1=N[C@H](CO1)CC2=CC=CC=C2)(C3=N[C@H](CO3)CC4=CC=CC=C4)CC"
+"(R)-3,3'-Bis[[[(1R,2R)-2-(isoindolin-2-yl)-1,2-diphenylethyl]imino]methyl]-1,1'-bi-2-naphthol": "OC1=C(/C=N/[C@H](C2=CC=CC=C2)[C@H](N3CC4=C(C=CC=C4)C3)C5=CC=CC=C5)C=C6C=CC=CC6=C1C7=C8C=CC=CC8=CC(/C=N/[C@H](C9=CC=CC=C9)[C@H](N%10CC%11=C(C=CC=C%11)C%10)C%12=CC=CC=C%12)=C7O"
+"(R,R)-(-)-2,3-Dimethoxy-1,4-bis(dimethylamino)butane": "CN(C[C@@H](OC)[C@H](OC)CN(C)C)C"
+"(R,R)-(-)-N,N'-Bis(3,5-di-tert-butylsalicylidene)-1,2-cyclohexanediamine": "OC1=C(C(C)(C)C)C=C(C(C)(C)C)C=C1/C=N/[C@H]2[C@H](/N=C/C3=CC(C(C)(C)C)=CC(C(C)(C)C)=C3O)CCCC2"
+"(R,R)-(+)-2,2'-Isopropylidenebis(4-tert-butyl-2-oxazoline)": "CC(C1=N[C@H](C(C)(C)C)CO1)(C2=N[C@H](C(C)(C)C)CO2)C"
+"(R,R)-2,2'-Isopropylidenebis(4-phenyl-2-oxazoline)": "CC(C1=N[C@H](C2=CC=CC=C2)CO1)(C3=N[C@H](C4=CC=CC=C4)CO3)C"
+"(R,R)-2,6-Bis(4-isopropyl-2-oxazolin-2-yl)pyridine": "CC([C@H]1N=C(C2=CC=CC(C3=N[C@H](C(C)C)CO3)=N2)OC1)C"
+"(R,R)-2,6-Bis(4-phenyl-2-oxazolin-2-yl)pyridine": "C1(C2=N[C@H](C3=CC=CC=C3)CO2)=NC(C4=N[C@H](C5=CC=CC=C5)CO4)=CC=C1"
+"(R,R)-N-(2-Amino-1,2-diphenylethyl)-p-toluenesulfonamide": "CC1=CC=C(S(=O)(N[C@H](C2=CC=CC=C2)[C@H](N)C3=CC=CC=C3)=O)C=C1"
+"(S)-1-(Diphenylphosphino)-2-[(S)-4-isopropyloxazolin-2-yl]ferrocene": "CC(C)[C@@H]1N=C(c2c(P(C3=CC=CC=C3)C4=CC=CC=C4)ccc2)OC1.[Del][Fe][Del].c5cccc5"
+"(S)-2,4-Diphenyl-4,5-dihydrooxazole": "C1(C2=CC=CC=C2)=N[C@@H](C3=CC=CC=C3)CO1"
+"(S)-4-tert-Butyl-2-(2-pyridyl)oxazoline": "CC([C@@H]1N=C(C2=NC=CC=C2)OC1)(C)C"
+"(S,S)-(-)-2,2'-Isopropylidenebis(4-tert-butyl-2-oxazoline)": "CC(C1=N[C@@H](C(C)(C)C)CO1)(C2=N[C@@H](C(C)(C)C)CO2)C"
+"(S,S)-(+)-2,3-Dimethoxy-1,4-bis(dimethylamino)butane": "CN(C[C@H](OC)[C@@H](OC)CN(C)C)C"
+"(S,S'')-2,2''-Bis[(S)-4-isopropyloxazolin-2-yl]-1,1''-biferrocene": "CC(C)[C@H]1OC(c2c(c3cccc3C4=N[C@@H](C(C)C)CO4)ccc2)=NC1.[Del][Fe][Del].[Del][Fe][Del].c5cccc5.c6cccc6"
+"(S,S)-2,2'-Isopropylidenebis(4-phenyl-2-oxazoline)": "CC(C1=N[C@@H](C2=CC=CC=C2)CO1)(C3=N[C@@H](C4=CC=CC=C4)CO3)C"
+"(S,S)-2,6-Bis(4-isopropyl-2-oxazolin-2-yl)pyridine": "CC([C@@H]1N=C(C2=CC=CC(C3=N[C@@H](C(C)C)CO3)=N2)OC1)C"
+"(S,S)-2,6-Bis(4-phenyl-2-oxazolin-2-yl)pyridine": "C1(C2=N[C@@H](C3=CC=CC=C3)CO2)=NC(C4=N[C@@H](C5=CC=CC=C5)CO4)=CC=C1"
+"(S,S)-4,6-Bis(4-isopropyl-2-oxazolin-2-yl)-m-xylene": "CC1=C(C2=N[C@@H](C(C)C)CO2)C=C(C3=N[C@@H](C(C)C)CO3)C(C)=C1"
+"(S,S)-N-(2-Amino-1,2-diphenylethyl)-p-toluenesulfonamide": "CC1=CC=C(S(=O)(N[C@@H](C2=CC=CC=C2)[C@@H](N)C3=CC=CC=C3)=O)C=C1"
+"1,1'-(2,6-Pyridinediyl)bis(3-methylimidazolium) Dibromide": "C[N+]1=CN(C2=NC(N3C=C[N+](C)=C3)=CC=C2)C=C1.[Br-].[Br-]"
+"1,1,4,7,10,10-Hexamethyltriethylenetetramine": "CN(CCN(C)C)CCN(C)CCN(C)C"
+"1,10-Phenanthroline Monohydrate": "[H]O[H].C12=CC=C3C=CC=NC3=C1N=CC=C2"
+"1,10-Phenanthroline-5,6-dione": "O=C1C2=C(N=CC=C2)C3=C(C=CC=N3)C1=O"
+"1,2-Bis(4'-methyl-2,2'-bipyridin-4-yl)ethane": "CC1=CC(C2=NC=CC(CCC3=CC(C4=NC=CC(C)=C4)=NC=C3)=C2)=NC=C1"
+"1,2-Phenylenediamine": "NC1=CC=CC=C1N"
+"1,4,7,10,13,16-Hexaazacyclooctadecane": "N1CCNCCNCCNCCNCCNCC1"
+"1,4,7,10,13,16-Hexaazacyclooctadecane Hexahydrochloride": "[H]Cl.[H]Cl.[H]Cl.[H]Cl.[H]Cl.[H]Cl.N1CCNCCNCCNCCNCCNCC1"
+"1,4,7,10-Tetraazacyclododecane": "N1CCNCCNCCNCC1"
+"1,4,7,10-Tetraazacyclododecane Tetrahydrochloride": "[H]Cl.[H]Cl.[H]Cl.[H]Cl.N1CCNCCNCCNCC1"
+"1,4,7,10-Tetraazacyclododecane-1,4,7,10-tetraacetic Acid": "O=C(O)CN1CCN(CC(O)=O)CCN(CC(O)=O)CCN(CC(O)=O)CC1"
+"1,4,7,10-Tetrabenzyl-1,4,7,10-tetraazacyclododecane": "N1(CC2=CC=CC=C2)CCN(CC3=CC=CC=C3)CCN(CC4=CC=CC=C4)CCN(CC5=CC=CC=C5)CC1"
+"1,4,7-Triazacyclononane": "N1CCNCCNCC1"
+"1,4,7-Trimethyl-1,4,7-triazacyclononane (stabilized with NaHCO3)": "CN1CCN(C)CCN(C)CC1"
+"1,4,8,11-Tetramethyl-1,4,8,11-tetraazacyclotetradecane": "CN1CCN(C)CCCN(C)CCN(C)CCC1"
+"1,4-Di[[2,2':6',2''-terpyridin]-4'-yl]benzene": "C1(C2=CC(C3=NC=CC=C3)=NC(C4=NC=CC=C4)=C2)=CC=C(C5=CC(C6=NC=CC=C6)=NC(C7=NC=CC=C7)=C5)C=C1"
+"1,4-Diazabicyclo[2.2.2]octane": "N1(CC2)CCN2CC1"
+"1,5,9-Triazacyclododecane": "N1CCCNCCCNCCC1"
+"2-(1H-1,2,4-Triazol-3-yl)pyridine": "C1(C2=NNC=N2)=NC=CC=C1"
+"2-(2-Hydroxyphenyl)benzothiazole": "OC1=CC=CC=C1C2=NC3=CC=CC=C3S2"
+"2-(2-Hydroxyphenyl)benzoxazole": "OC1=CC=CC=C1C2=NC3=CC=CC=C3O2"
+"2-(2-Pyridyl)benzoxazole": "C1(C2=NC=CC=C2)=NC3=CC=CC=C3O1"
+"2-(2-Pyridyl)indole": "C(N1)(C2=NC=CC=C2)=CC3=C1C=CC=C3"
+"2-(4-Thiazolyl)benzimidazole": "C1(C2=CSC=N2)=NC3=CC=CC=C3N1"
+"2,2'-(Methylimino)bis(N,N-di-n-octylacetamide)": "CN(CC(N(CCCCCCCC)CCCCCCCC)=O)CC(N(CCCCCCCC)CCCCCCCC)=O"
+"2,2':6',2''-Terpyridine": "C1(C2=NC(C3=NC=CC=C3)=CC=C2)=NC=CC=C1"
+"2,2':6',2''-Terpyridine-4'-carboxylic Acid": "O=C(C1=CC(C2=NC=CC=C2)=NC(C3=NC=CC=C3)=C1)O"
+"2,2'-Bi(1,8-naphthyridine)": "C1(C2=NC3=NC=CC=C3C=C2)=NC4=NC=CC=C4C=C1"
+"2,2'-Bi-4-lepidine": "CC1=CC(C2=NC3=CC=CC=C3C(C)=C2)=NC4=C1C=CC=C4"
+"2,2'-Bicinchoninic Acid Dipotassium Salt Hydrate [for Determination of Cu]": "O=C([O-])C1=CC(C2=NC3=CC=CC=C3C(C([O-])=O)=C2)=NC4=CC=CC=C14.[H]O[H].[K+].[K+]"
+"2,2'-Biimidazole": "C1(C2=NC=CN2)=NC=CN1"
+"2,2'-Bipyrazine": "C1(C2=NC=CN=C2)=NC=CN=C1"
+"2,2'-Bipyridine-3,3'-dicarboxylic Acid": "O=C(C1=CC=CN=C1C2=NC=CC=C2C(O)=O)O"
+"2,2'-Bipyridine-3,3'-diol": "OC1=CC=CN=C1C2=NC=CC=C2O"
+"2,2'-Bipyridine-4,4'-dicarboxylic Acid": "O=C(C1=CC(C2=NC=CC(C(O)=O)=C2)=NC=C1)O"
+"2,2'-Bipyridine-5,5'-dicarboxylic Acid": "O=C(C1=CN=C(C2=NC=C(C(O)=O)C=C2)C=C1)O"
+"2,2'-Bipyridine-6,6'-dicarboxylic Acid": "O=C(C1=CC=CC(C2=NC(C(O)=O)=CC=C2)=N1)O"
+"2,2'-Bipyridine-6,6'-diol": "OC1=CC=CC(C2=NC(O)=CC=C2)=N1"
+"2,2'-Bipyridine-6-carbonitrile": "N#CC1=CC=CC(C2=NC=CC=C2)=N1"
+"2,2'-Bipyridyl": "C1(C2=NC=CC=C2)=NC=CC=C1"
+"2,2'-Bipyridyl 1,1'-Dioxide": "[O-][N+]1=CC=CC=C1C2=CC=CC=[N+]2[O-]"
+"2,2'-Bipyrimidyl": "C1(C2=NC=CC=N2)=NC=CC=N1"
+"2,2'-Biquinoline": "C1(C2=NC3=CC=CC=C3C=C2)=NC4=CC=CC=C4C=C1"
+"2,2'-Diamino-4,4'-bithiazole": "NC1=NC(C2=CSC(N)=N2)=CS1"
+"2,2'-Methylenebisbenzothiazole": "C1(CC2=NC3=CC=CC=C3S2)=NC4=CC=CC=C4S1"
+"2,3,7,8,12,13,17,18-Octaethylporphyrin": "CCC1=C(CC)C2=NC1=CC3=C(CC)C(CC)=C(N3)C=C4C(CC)=C(CC)C(C=C5C(CC)=C(CC)C(N5)=C2)=N4"
+"2,3,7,8,12,13,17,18-Octafluoro-5,10,15,20-tetrakis(pentafluorophenyl)porphyrin": "FC1=C(F)C(F)=C(F)C(F)=C1C2=C3C(F)=C(F)C(C(C4=C(F)C(F)=C(F)C(F)=C4F)=C(N5)C(F)=C(F)C5=C(C6=C(F)C(F)=C(F)C(F)=C6F)C7=NC(C(F)=C7F)=C(C8=C(F)C(F)=C(F)C(F)=C8F)C9=C(F)C(F)=C2N9)=N3"
+"2,3-Lutidine": "CC1=NC=CC=C1C"
+"2,4,6-Tri(2-pyridyl)-1,3,5-triazine": "C1(C2=NC=CC=C2)=NC(C3=NC=CC=C3)=NC(C4=NC=CC=C4)=N1"
+"2,4,6-Tri(4-pyridyl)-1,3,5-triazine (purified by sublimation)": "C1(C2=CC=NC=C2)=NC(C3=CC=NC=C3)=NC(C4=CC=NC=C4)=N1"
+"2,4-Dibromo-6-[(E)-[[(1R,2R)-2-(isoindolin-2-yl)-1,2-diphenylethyl]imino]methyl]phenol": "OC1=C(/C=N/[C@H](C2=CC=CC=C2)[C@H](N3CC4=C(C=CC=C4)C3)C5=CC=CC=C5)C=C(Br)C=C1Br"
+"2,4-Dibromo-6-[[[[(4S,5S)-4,5-dihydro-4,5-diphenyl-1-tosyl-1H-imidazol-2-yl]methyl][(S)-1-phenylethyl]amino]methyl]phenol": "OC1=C(CN(CC2=N[C@@H](C3=CC=CC=C3)[C@H](C4=CC=CC=C4)N2S(=O)(C5=CC=C(C)C=C5)=O)[C@H](C6=CC=CC=C6)C)C=C(Br)C=C1Br"
+"2,4-Lutidine": "CC1=NC=CC(C)=C1"
+"2,5-Diphenylpyridine": "C1(C2=CC=CC=C2)=NC=C(C3=CC=CC=C3)C=C1"
+"2,5-Lutidine": "CC1=NC=C(C)C=C1"
+"2,6-Bis(2-benzimidazolyl)pyridine": "C1(C2=NC3=CC=CC=C3N2)=NC(C4=NC5=CC=CC=C5N4)=CC=C1"
+"2,6-Bis(2-pyridyl)-4(1H)-pyridone": "O=C1C=C(C2=NC=CC=C2)NC(C3=NC=CC=C3)=C1"
+"2,6-Bis[(2R,4S,5S)-1-benzyl-4,5-diphenylimidazolidin-2-yl]pyridine": "C1([C@@H]2N[C@@H](C3=CC=CC=C3)[C@H](C4=CC=CC=C4)N2CC5=CC=CC=C5)=NC([C@@H]6N[C@@H](C7=CC=CC=C7)[C@H](C8=CC=CC=C8)N6CC9=CC=CC=C9)=CC=C1"
+"2,6-Bis[(2S,4S)-4-methyl-5,5-diphenyloxazolidin-2-yl]pyridine": "C[C@@H]1N[C@H](C2=CC=CC([C@@H]3OC(C4=CC=CC=C4)(C5=CC=CC=C5)[C@H](C)N3)=N2)OC1(C6=CC=CC=C6)C7=CC=CC=C7"
+"2,6-Bis[(2S,5S)-4,4-diphenyl-1-aza-3-oxabicyclo[3.3.0]octan-2-yl]pyridine": "[H][C@]12C(C3=CC=CC=C3)(C4=CC=CC=C4)O[C@@H](C5=CC=CC([C@H]6N7CCC[C@@]7([H])C(C8=CC=CC=C8)(C9=CC=CC=C9)O6)=N5)N1CCC2"
+"2,6-Di(1-pyrazolyl)pyridine": "C1(N2N=CC=C2)=NC(N3N=CC=C3)=CC=C1"
+"2,6-Di(2H-1,2,3-triazol-4-yl)pyridine": "C1(C2=NNN=C2)=NC(C3=NNN=C3)=CC=C1"
+"2,6-Lutidine": "CC1=NC(C)=CC=C1"
+"2,9-Dibutyl-1,10-phenanthroline": "CCCCC1=NC2=C3N=C(CCCC)C=CC3=CC=C2C=C1"
+"2,9-Dichloro-1,10-phenanthroline": "ClC1=NC2=C3N=C(Cl)C=CC3=CC=C2C=C1"
+"2,9-Diphenyl-1,10-phenanthroline": "C1(C2=CC=CC=C2)=NC3=C4N=C(C5=CC=CC=C5)C=CC4=CC=C3C=C1"
+"2-Bromo-1,10-phenanthroline": "BrC1=NC2=C3N=CC=CC3=CC=C2C=C1"
+"2-Chloro-1,10-phenanthroline": "ClC1=NC2=C3N=CC=CC3=CC=C2C=C1"
+"2-Hydroxybenzaldehyde Phenylhydrazone": "OC1=CC=CC=C1/C=N/NC2=CC=CC=C2"
+"2-Methyl-1,10-phenanthroline": "CC1=NC2=C3N=CC=CC3=CC=C2C=C1"
+"2-Salicylideneaminophenol": "OC1=CC=CC=C1/N=C/C2=CC=CC=C2O"
+"3,3'-Iminobis(N,N-dimethylpropylamine)": "CN(C)CCCNCCCN(C)C"
+"3,4,7,8-Tetramethyl-1,10-phenanthroline": "CC1=C(C)C2=CC=C3C(C)=C(C)C=NC3=C2N=C1"
+"3,4-Lutidine": "CC1=C(C)C=CN=C1"
+"3,5,6,8-Tetrabromo-1,10-phenanthroline": "BrC1=CC2=C(Br)C(Br)=C3C=C(Br)C=NC3=C2N=C1"
+"3,5-Di(2-pyridyl)pyrazole": "C1(C2=NC=CC=C2)=NNC(C3=NC=CC=C3)=C1"
+"3,5-Lutidine": "CC1=CC(C)=CN=C1"
+"3,6-Di(2-pyridyl)-1,2,4,5-tetrazine": "C1(C2=NC=CC=C2)=NN=C(C3=NC=CC=C3)N=N1"
+"3,8-Dibromo-1,10-phenanthroline": "BrC1=CC2=CC=C3C=C(Br)C=NC3=C2N=C1"
+"3-Bromo-1,10-phenanthroline": "BrC1=CC2=CC=C3C=CC=NC3=C2N=C1"
+"4-([2,2':6',2''-Terpyridin]-4'-yl)benzoic Acid": "O=C(O)C1=CC=C(C2=CC(C3=NC=CC=C3)=NC(C4=NC=CC=C4)=C2)C=C1"
+"4'-(4-Bromophenyl)-2,2':6',2''-terpyridine": "BrC1=CC=C(C2=CC(C3=NC=CC=C3)=NC(C4=NC=CC=C4)=C2)C=C1"
+"4'-(4-Pyridyl)-2,2':6',2''-terpyridine": "C1(C2=NC(C3=NC=CC=C3)=CC(C4=CC=NC=C4)=C2)=NC=CC=C1"
+"4-(Bromomethyl)-4'-methyl-2,2'-bipyridyl": "CC1=CC(C2=NC=CC(CBr)=C2)=NC=C1"
+"4-(Chloromethyl)-4'-methyl-2,2'-bipyridyl": "CC1=CC(C2=NC=CC(CCl)=C2)=NC=C1"
+"4,4'-Bis(5-hexyl-2-thienyl)-2,2'-bipyridyl": "CCCCCCC1=CC=C(C2=CC(C3=NC=CC(C4=CC=C(CCCCCC)S4)=C3)=NC=C2)S1"
+"4,4'-Bis(chloromethyl)-2,2'-bipyridyl": "ClCC1=CC(C2=NC=CC(CCl)=C2)=NC=C1"
+"4,4'-Bis(hydroxymethyl)-2,2'-bipyridine": "OCC1=CC(C2=NC=CC(CO)=C2)=NC=C1"
+"4,4'-Diamino-2,2'-bipyridyl": "NC1=CC(C2=NC=CC(N)=C2)=NC=C1"
+"4,4'-Dibromo-2,2'-bipyridyl": "BrC1=CC(C2=NC=CC(Br)=C2)=NC=C1"
+"4,4'-Dimethoxy-2,2'-bipyridyl": "COC1=CC(C2=NC=CC(OC)=C2)=NC=C1"
+"4,4'-Dimethyl-2,2'-bipyridyl": "CC1=CC(C2=NC=CC(C)=C2)=NC=C1"
+"4,4'-Dimethyl-2,2'-bipyridyl 1-Oxide": "CC1=CC(C2=CC(C)=CC=[N+]2[O-])=NC=C1"
+"4,4'-Dinonyl-2,2'-bipyridyl": "CCCCCCCCCC1=CC(C2=NC=CC(CCCCCCCCC)=C2)=NC=C1"
+"4,4'-Di-tert-butyl-2,2'-bipyridyl": "CC(C1=CC(C2=NC=CC(C(C)(C)C)=C2)=NC=C1)(C)C"
+"4,5-Diazafluoren-9-one": "O=C1C2=CC=CN=C2C3=C1C=CC=N3"
+"4,5-Diazafluorene-9-one O-(p-Toluenesulfonyl)oxime": "O=S(ON=C1C2=CC=CN=C2C3=C1C=CC=N3)(C4=CC=C(C)C=C4)=O"
+"4,7-Dibromo-1,10-phenanthroline Hydrate": "BrC1=CC=NC2=C3N=CC=C(Br)C3=CC=C12.[H]O[H]"
+"4,7-Dichloro-1,10-phenanthroline Hydrate": "ClC1=CC=NC2=C3N=CC=C(Cl)C3=CC=C12.[H]O[H]"
+"4,7-Dihydroxy-1,10-phenanthroline": "OC1=CC=NC2=C3N=CC=C(O)C3=CC=C12"
+"4,7-Dimethyl-1,10-phenanthroline": "CC1=CC=NC2=C3N=CC=C(C)C3=CC=C12"
+"4'-Bromo-2,2':6',2''-terpyridine": "BrC1=CC(C2=NC=CC=C2)=NC(C3=NC=CC=C3)=C1"
+"4'-Chloro-2,2':6',2''-terpyridine": "ClC1=CC(C2=NC=CC=C2)=NC(C3=NC=CC=C3)=C1"
+"4-Fluoro-N-salicylideneaniline": "OC1=CC=CC=C1/C=N/C2=CC=C(F)C=C2"
+"4-Hydroxymethyl-4'-methyl-2,2'-bipyridyl": "CC1=CC(C2=NC=CC(CO)=C2)=NC=C1"
+"5,10,15,20-Tetra(4-pyridyl)porphyrin": "C1(C2=CC=NC=C2)=C3C=CC(C(C4=CC=NC=C4)=C5C=CC(N5)=C(C6=CC=NC=C6)C(C=C7)=NC7=C(C8=CC=NC=C8)C9=CC=C1N9)=N3"
+"5,10,15,20-Tetrakis(2,4,6-trimethylphenyl)porphyrin": "CC1=C(C2=C3C=CC(C(C4=C(C)C=C(C)C=C4C)=C(N5)C=CC5=C(C6=C(C)C=C(C)C=C6C)C7=NC(C=C7)=C(C8=C(C)C=C(C)C=C8C)C9=CC=C2N9)=N3)C(C)=CC(C)=C1"
+"5,10,15,20-Tetrakis(2,6-dichlorophenyl)porphyrin": "ClC1=C(C2=C3C=CC(C(C4=C(Cl)C=CC=C4Cl)=C(N5)C=CC5=C(C6=C(Cl)C=CC=C6Cl)C7=NC(C=C7)=C(C8=C(Cl)C=CC=C8Cl)C9=CC=C2N9)=N3)C(Cl)=CC=C1"
+"5,10,15,20-Tetrakis(3,5-dihydroxyphenyl)porphyrin": "OC1=CC(O)=CC(C2=C3C=CC(C(C4=CC(O)=CC(O)=C4)=C(N5)C=CC5=C(C6=CC(O)=CC(O)=C6)C7=NC(C=C7)=C(C8=CC(O)=CC(O)=C8)C9=CC=C2N9)=N3)=C1"
+"5,10,15,20-Tetrakis(3,5-dimethoxyphenyl)porphyrin": "COC1=CC(OC)=CC(C2=C3C=CC(C(C4=CC(OC)=CC(OC)=C4)=C(N5)C=CC5=C(C6=CC(OC)=CC(OC)=C6)C7=NC(C=C7)=C(C8=CC(OC)=CC(OC)=C8)C9=CC=C2N9)=N3)=C1"
+"5,10,15,20-Tetrakis(4-carboxymethyloxyphenyl)porphyrin": "O=C(COC1=CC=C(C2=C3C=CC(C(C4=CC=C(OCC(O)=O)C=C4)=C(N5)C=CC5=C(C6=CC=C(OCC(O)=O)C=C6)C7=NC(C=C7)=C(C8=CC=C(OCC(O)=O)C=C8)C9=CC=C2N9)=N3)C=C1)O"
+"5,10,15,20-Tetrakis(4-hydroxyphenyl)porphyrin": "OC1=CC=C(C2=C3C=CC(C(C4=CC=C(O)C=C4)=C(N5)C=CC5=C(C6=CC=C(O)C=C6)C7=NC(C=C7)=C(C8=CC=C(O)C=C8)C9=CC=C2N9)=N3)C=C1"
+"5,10,15,20-Tetrakis(4-methoxyphenyl)porphyrin": "COC1=CC=C(C2=C3C=CC(C(C4=CC=C(OC)C=C4)=C(N5)C=CC5=C(C6=CC=C(OC)C=C6)C7=NC(C=C7)=C(C8=CC=C(OC)C=C8)C9=CC=C2N9)=N3)C=C1"
+"5,10,15,20-Tetrakis(pentafluorophenyl)porphyrin": "FC1=C(F)C(F)=C(F)C(F)=C1C2=C3C=CC(C(C4=C(F)C(F)=C(F)C(F)=C4F)=C(N5)C=CC5=C(C6=C(F)C(F)=C(F)C(F)=C6F)C7=NC(C=C7)=C(C8=C(F)C(F)=C(F)C(F)=C8F)C9=CC=C2N9)=N3"
+"5,10,15,20-Tetrakis(p-tolyl)porphyrin": "CC1=CC=C(C2=C3C=CC(C(C4=CC=C(C)C=C4)=C(N5)C=CC5=C(C6=CC=C(C)C=C6)C7=NC(C=C7)=C(C8=CC=C(C)C=C8)C9=CC=C2N9)=N3)C=C1"
+"5,5'-Bis(trifluoromethyl)-2,2'-bipyridyl": "FC(C1=CN=C(C2=NC=C(C(F)(F)F)C=C2)C=C1)(F)F"
+"5,5'-Dibromo-2,2'-bipyridyl": "BrC1=CN=C(C2=NC=C(Br)C=C2)C=C1"
+"5,5'-Dimethyl-2,2'-bipyridyl": "CC1=CN=C(C2=NC=C(C)C=C2)C=C1"
+"5,6-Dimethyl-1,10-phenanthroline": "CC1=C2C=CC=NC2=C3N=CC=CC3=C1C"
+"5-Bromo-1,10-phenanthroline": "BrC1=C2C=CC=NC2=C3N=CC=CC3=C1"
+"5-Chloro-1,10-phenanthroline": "ClC1=C2C=CC=NC2=C3N=CC=CC3=C1"
+"5-Methyl-1,10-phenanthroline Hydrate [for Colorimetric Determination of Iron]": "CC1=C2C=CC=NC2=C3N=CC=CC3=C1.[H]O[H]"
+"5-Nitro-1,10-phenanthroline": "O=[N+](C1=C2C=CC=NC2=C3N=CC=CC3=C1)[O-]"
+"6,6'-Bis(chloromethyl)-2,2'-bipyridyl": "ClCC1=CC=CC(C2=NC(CCl)=CC=C2)=N1"
+"6,6'-Diamino-2,2'-bipyridyl": "NC1=CC=CC(C2=NC(N)=CC=C2)=N1"
+"6,6'-Dibromo-2,2'-bipyridyl": "BrC1=CC=CC(C2=NC(Br)=CC=C2)=N1"
+"6,6'-Dicyano-2,2'-bipyridyl": "N#CC1=CC=CC(C2=NC(C#N)=CC=C2)=N1"
+"6,6'-Dimethyl-2,2'-bipyridyl": "CC1=CC=CC(C2=NC(C)=CC=C2)=N1"
+"6-Bromo-2,2'-bipyridyl": "BrC1=CC=CC(C2=NC=CC=C2)=N1"
+"6-Bromo-4,4'-dimethyl-2,2'-bipyridyl": "CC1=CC(C2=NC(Br)=CC(C)=C2)=NC=C1"
+"Bathophenanthroline": "C1(C2=CC=CC=C2)=CC=NC3=C4N=CC=C(C5=CC=CC=C5)C4=CC=C13"
+"Bathophenanthroline (purified by sublimation)": "C1(C2=CC=CC=C2)=CC=NC3=C4N=CC=C(C5=CC=CC=C5)C4=CC=C13"
+"Bathophenanthrolinedisulfonic Acid Disodium Salt Hydrate [for Determination of Ferrous Ion]": "O=S(C1=NC2=C3N=CC=C(C4=CC=CC=C4)C3=CC=C2C(C5=CC=CC=C5)=C1S(=O)([O-])=O)([O-])=O.[H]O[H].[Na+].[Na+]"
+"Bicinchoninic Acid Disodium Salt Hydrate": "O=C([O-])C1=C(C2=C(C([O-])=O)C3=CC=CC=C3N=C2)C=NC4=CC=CC=C14.[H]O[H].[Na+].[Na+]"
+"Diethyl 2,2':6',2''-Terpyridine-4'-phosphonate": "O=P(C1=CC(C2=NC=CC=C2)=NC(C3=NC=CC=C3)=C1)(OCC)OCC"
+"Diethylenetriamine": "NCCNCCN"
+"Dimethyl 2,2'-Bipyridine-4,4'-dicarboxylate": "O=C(C1=CC(C2=NC=CC(C(OC)=O)=C2)=NC=C1)OC"
+"Dimethyl 2,2'-Bipyridine-6,6'-dicarboxylate": "O=C(C1=CC=CC(C2=NC(C(OC)=O)=CC=C2)=N1)OC"
+"Dipyrido[3,2-a:2',3'-c]phenazine": "C12=CC=CN=C1C3=NC=CC=C3C4=NC5=CC=CC=C5N=C42"
+"Hexamethylenetetramine": "N12CN3CN(C2)CN(C3)C1"
+"Imidazole": "C1=NC=CN1"
+"meso-Tetraphenylchlorin": "C1(C2=CC=CC=C2)=C(N3)CCC3=C(C4=CC=CC=C4)C5=NC(C=C5)=C(C6=CC=CC=C6)C(N7)=CC=C7C(C8=CC=CC=C8)=C9CCC1=N9"
+"Methyl 2,2':6',2''-Terpyridine-4'-carboxylate": "O=C(C1=CC(C2=NC=CC=C2)=NC(C3=NC=CC=C3)=C1)OC"
+"N,N,N',N'-Tetraethylethylenediamine": "CCN(CC)CCN(CC)CC"
+"N,N,N',N'-Tetrakis(2-pyridylmethyl)ethylenediamine": "N(CC1=NC=CC=C1)(CC2=NC=CC=C2)CCN(CC3=NC=CC=C3)CC4=NC=CC=C4"
+"N,N,N',N'-Tetramethyl-1,3-diaminopropane": "CN(C)CCCN(C)C"
+"N,N,N',N'-Tetramethyl-1,4-diaminobutane": "CN(C)CCCCN(C)C"
+"N,N,N',N'-Tetramethyl-1,6-diaminohexane": "CN(C)CCCCCCN(C)C"
+"N,N,N',N'-Tetramethylethylenediamine": "CN(C)CCN(C)C"
+"N,N',N''-Trimethyldiethylenetriamine": "CN(CCNC)CCNC"
+"N,N'-Bis(2-aminobenzal)ethylenediamine": "NC1=CC=CC=C1/C=N/CC/N=C/C2=CC=CC=C2N"
+"N,N'-Bis(2-pyridylmethyl)-1,2-ethylenediamine Tetrahydrochloride Dihydrate": "[H]Cl.[H]Cl.[H]Cl.[H]Cl.[H]O[H].[H]O[H].C1(CNCCNCC2=NC=CC=C2)=NC=CC=C1"
+"N,N'-Bis(3,5-di-tert-butylsalicylidene)-1,1,2,2-tetramethylethylenediamine": "CC(/N=C/C1=CC(C(C)(C)C)=CC(C(C)(C)C)=C1O)(C)C(C)(C)/N=C/C2=CC(C(C)(C)C)=CC(C(C)(C)C)=C2O"
+"N,N'-Bis(5-hydroxysalicylidene)ethylenediamine": "OC1=CC=C(O)C=C1/C=N/CC/N=C/C2=CC(O)=CC=C2O"
+"N,N'-Bis(salicylidene)-1,2-phenylenediamine": "OC1=CC=CC=C1/C=N/C2=CC=CC=C2/N=C/C3=CC=CC=C3O"
+"N,N'-Bis(salicylidene)-1,2-propanediamine": "CC(/N=C/C1=CC=CC=C1O)C/N=C/C2=CC=CC=C2O"
+"N,N'-Bis(salicylidene)-1,3-propanediamine": "OC1=CC=CC=C1/C=N/CCC/N=C/C2=CC=CC=C2O"
+"N,N'-Bis(salicylidene)ethylenediamine": "OC1=CC=CC=C1/C=N/CC/N=C/C2=CC=CC=C2O"
+"N,N'-Dicyclohexyl-1,2-ethanediamine Hydrate": "[H]O[H].C1(NCCNC2CCCCC2)CCCCC1"
+"N,N'-Dimethylethylenediamine": "CNCCNC"
+"N,N'-Diphenylethylenediamine": "C1(NCCNC2=CC=CC=C2)=CC=CC=C1"
+"N,N'-Di-tert-butylethylenediamine": "CC(NCCNC(C)(C)C)(C)C"
+"N-Salicylideneaniline": "OC1=CC=CC=C1/C=N/C2=CC=CC=C2"
+"Phthalocyanine": "C1(C2=N3)=C(C=CC=C1)C(N2)=NC4=NC(C5=C4C=CC=C5)=NC(N6)=C7C=CC=CC7=C6N=C8C9=C(C=CC=C9)C3=N8"
+"Phthalocyanine (purified by sublimation)": "C1(C2=N3)=C(C=CC=C1)C(N2)=NC4=NC(C5=C4C=CC=C5)=NC(N6)=C7C=CC=CC7=C6N=C8C9=C(C=CC=C9)C3=N8"
+"Quinuclidine": "N12CCC(CC2)CC1"
+"Tetraethyl 1,4,8,11-Tetraazacyclotetradecane-1,4,8,11-tetraacetate": "O=C(OCC)CN1CCN(CC(OCC)=O)CCCN(CC(OCC)=O)CCN(CC(OCC)=O)CCC1"
+"Tetraphenylporphyrin (Chlorin free)": "C1(C2=CC=CC=C2)=C3C=CC(C(C4=CC=CC=C4)=C5C=CC(N5)=C(C6=CC=CC=C6)C(C=C7)=NC7=C(C8=CC=CC=C8)C9=CC=C1N9)=N3"
+"trans-2,6-Diisopropyl-N-(2-pyridylmethylene)aniline": "CC(C1=C(C(C(C)C)=CC=C1)/N=C/C2=NC=CC=C2)C"
+"Triethylenetetramine": "NCCNCCNCCN"
+"Trimethyl 2,2':6',2''-Terpyridine-4,4',4''-tricarboxylate": "O=C(C1=CC(C2=NC(C3=NC=CC(C(OC)=O)=C3)=CC(C(OC)=O)=C2)=NC=C1)OC"
+"Tris(1-pyrazolyl)methane": "C(N1N=CC=C1)(N2N=CC=C2)N3N=CC=C3"
+"Tris(2-aminoethyl)amine": "NCCN(CCN)CCN"
+"Tris(2-benzimidazolylmethyl)amine": "N(CC1=NC2=CC=CC=C2N1)(CC3=NC4=CC=CC=C4N3)CC5=NC6=CC=CC=C6N5"
+"Tris(2-pyridylmethyl)amine": "N(CC1=NC=CC=C1)(CC2=NC=CC=C2)CC3=NC=CC=C3"
+"Tris(3,5-dimethyl-1-pyrazolyl)methane": "CC1=CC(C)=NN1C(N2N=C(C)C=C2C)N3N=C(C)C=C3C"
+"Tris(3-hydroxypropyltriazolylmethyl)amine": "OCCCC(N(C(CCCO)C1=CNN=N1)C(CCCO)C2=CNN=N2)C3=CNN=N3"
+"Tris[(1-benzyl-1H-1,2,3-triazol-4-yl)methyl]amine": "N(CC1=CN(CC2=CC=CC=C2)N=N1)(CC3=CN(CC4=CC=CC=C4)N=N3)CC5=CN(CC6=CC=CC=C6)N=N5"
+"Tris[2-(dimethylamino)ethyl]amine": "CN(CCN(CCN(C)C)CCN(C)C)C"
+"Tri-tert-butyl 1,4,7,10-Tetraazacyclododecane-1,4,7,10-tetraacetate": "O=C(OC(C)(C)C)CN1CCN(CC(OC(C)(C)C)=O)CCN(CC(OC(C)(C)C)=O)CCN(CC([O-])=O)CC1"
+"Tri-tert-butyl 1,4,7,10-Tetraazacyclododecane-1,4,7-triacetate": "O=C(OC(C)(C)C)CN1CCN(CC(OC(C)(C)C)=O)CCN(CC(OC(C)(C)C)=O)CCNCC1"
+"Ethylene diamine": "NCCN"
+"1,1'-Bi-2-naphthol": "OC1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3O"
+"6,8-Bis(benzylthio)octanoic Acid": "O=C(O)CCCCC(SCC1=CC=CC=C1)CCSCC2=CC=CC=C2"
+"(2-Bromophenyl)diphenylphosphine": "BrC1=CC=CC=C1P(C2=CC=CC=C2)C3=CC=CC=C3"
+"(2R,3R)-(-)-1,4-Bis(diphenylphosphino)-2,3-O-isopropylidene-2,3-butanediol": "CC1(O[C@H]([C@@H](O1)CP(C2=CC=CC=C2)C3=CC=CC=C3)CP(C4=CC=CC=C4)C5=CC=CC=C5)C"
+"(2R,3R)-(-)-2,3-Bis(diphenylphosphino)bicyclo[2.2.1]hept-5-ene": "C1(C2)[C@@H](P(C3=CC=CC=C3)C4=CC=CC=C4)[C@H](P(C5=CC=CC=C5)C6=CC=CC=C6)C2C=C1"
+"(2S,3S)-(-)-Bis(diphenylphosphino)butane": "C[C@H](P(C1=CC=CC=C1)C2=CC=CC=C2)[C@@H](P(C3=CC=CC=C3)C4=CC=CC=C4)C"
+"(2S,3S)-(+)-1,4-Bis(diphenylphosphino)-2,3-O-isopropylidene-2,3-butanediol": "CC1(O[C@@H]([C@H](O1)CP(C2=CC=CC=C2)C3=CC=CC=C3)CP(C4=CC=CC=C4)C5=CC=CC=C5)C"
+"(2S,3S)-(+)-2,3-Bis(diphenylphosphino)bicyclo[2.2.1]hept-5-ene": "C1(C2)[C@H](P(C3=CC=CC=C3)C4=CC=CC=C4)[C@@H](P(C5=CC=CC=C5)C6=CC=CC=C6)C2C=C1"
+"(4-Dimethylaminophenyl)di-tert-butylphosphine": "CC(P(C1=CC=C(N(C)C)C=C1)C(C)(C)C)(C)C"
+"(Pentafluorophenyl)diphenylphosphine": "FC1=C(F)C(F)=C(F)C(F)=C1P(C2=CC=CC=C2)C3=CC=CC=C3"
+"(R)-(+)-2-Diphenylphosphino-2'-methoxy-1,1'-binaphthyl": "COC1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3P(C5=CC=CC=C5)C6=CC=CC=C6"
+"(R)-N,N-Dimethyl-1-[(S)-1',2-bis(diphenylphosphino)ferrocenyl]ethylamine": "C[C@@H](N(C)C)c1c(P(C2=CC=CC=C2)C3=CC=CC=C3)ccc1.[Del][Fe][Del].c4(P(C5=CC=CC=C5)C6=CC=CC=C6)cccc4"
+"(R)-N,N-Dimethyl-1-[(S)-2-(diphenylphosphino)ferrocenyl]ethylamine": "CN(C)[C@H](c1cccc1)CP(C2=CC=CC=C2)C3=CC=CC=C3.[Del][Fe][Del].c4cccc4"
+"(R,R)-(-)-2,3-Bis(tert-butylmethylphosphino)quinoxaline": "C[P@@](C1=NC2=CC=CC=C2N=C1[P@@](C(C)(C)C)C)C(C)(C)C"
+"(R,R)-1,2-Bis[(2-methoxyphenyl)phenylphosphino]ethane": "COC1=CC=CC=C1[P@](CC[P@@](C2=CC=CC=C2OC)C3=CC=CC=C3)C4=CC=CC=C4"
+"(R,R'')-2,2''-Bis(diphenylphosphino)-1,1''-biferrocene": "[Del][Fe][Del].[Del][Fe][Del].P(C1=CC=CC=C1)(c2cccc2c3cccc3P(C4=CC=CC=C4)C5=CC=CC=C5)C6=CC=CC=C6.c7cccc7.c8cccc8"
+"(S)-N,N-Dimethyl-1-[(R)-1',2-bis(diphenylphosphino)ferrocenyl]ethylamine": "C[C@@H](N(C)C)c1c(P(C2=CC=CC=C2)C3=CC=CC=C3)ccc1.[Del][Fe][Del].c4(P(C5=CC=CC=C5)C6=CC=CC=C6)cccc4"
+"(S)-N,N-Dimethyl-1-[(R)-2-(diphenylphosphino)ferrocenyl]ethylamine": "CN(C)[C@@H](CP(C1=CC=CC=C1)C2=CC=CC=C2)c3cccc3.[Del][Fe][Del].c4cccc4"
+"(S,S)-(+)-2,3-Bis(tert-butylmethylphosphino)quinoxaline": "C[P@](C1=NC2=CC=CC=C2N=C1[P@](C(C)(C)C)C)C(C)(C)C"
+"(S,S)-1,2-Bis[(2-methoxyphenyl)phenylphosphino]ethane": "COC1=CC=CC=C1[P@@](CC[P@](C2=CC=CC=C2OC)C3=CC=CC=C3)C4=CC=CC=C4"
+"(S,S)-1,2-Bis[(tert-butyl)methylphosphino]ethane Bis(borane)": "C[P@@](CC[P@@](C(C)(C)C)C)C(C)(C)C.B.B"
+"1,1'-Bis(diisopropylphosphino)ferrocene": "CC(C)P(c1cccc1)C(C)C.CC(C)P(c2cccc2)C(C)C.[Del][Fe][Del]"
+"1,1'-Bis(diphenylphosphino)ferrocene": "[Del][Fe][Del].c1(P(C2=CC=CC=C2)C3=CC=CC=C3)cccc1.c4(P(C5=CC=CC=C5)C6=CC=CC=C6)cccc4"
+"1,1'-Bis(di-tert-butylphosphino)ferrocene": "CC(C)(C)P(c1cccc1)C(C)(C)C.CC(C)(C)P(c2cccc2)C(C)(C)C.[Del][Fe][Del]"
+"1,2,3,4,5-Pentaphenyl-1'-(di-tert-butylphosphino)ferrocene": "CC(C)(C)P(C(C)(C)C)c1cccc1.[Del][Fe][Del].c2(C3=CC=CC=C3)c(C4=CC=CC=C4)c(C5=CC=CC=C5)c(C6=CC=CC=C6)c2C7=CC=CC=C7"
+"1,2-Bis(dimethylphosphino)ethane": "CP(CCP(C)C)C"
+"1,2-Bis(diphenylphosphino)benzene": "C1(P(C2=CC=CC=C2)C3=CC=CC=C3)=CC=CC=C1P(C4=CC=CC=C4)C5=CC=CC=C5"
+"1,2-Bis(diphenylphosphino)ethane": "P(CCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4"
+"1,2-Bis[bis(pentafluorophenyl)phosphino]ethane": "FC1=C(F)C(F)=C(F)C(F)=C1P(CCP(C2=C(F)C(F)=C(F)C(F)=C2F)C3=C(F)C(F)=C(F)C(F)=C3F)C4=C(F)C(F)=C(F)C(F)=C4F"
+"1,3-Bis(2,6-diisopropylphenyl)-1,3,2-diazaphospholidine 2-Oxide": "CC(C1=C(N2P(N(C3=C(C(C)C)C=CC=C3C(C)C)CC2)=O)C(C(C)C)=CC=C1)C"
+"1,3-Bis(diphenylphosphino)propane": "P(CCCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4"
+"1,3-Bis[(di-tert-butylphosphino)oxy]benzene": "CC(P(OC1=CC(OP(C(C)(C)C)C(C)(C)C)=CC=C1)C(C)(C)C)(C)C"
+"1,4-Bis(diphenylphosphino)butane": "P(CCCCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4"
+"1,5-Bis(diphenylphosphino)pentane": "P(CCCCCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4"
+"1,6-Bis(diphenylphosphino)hexane": "P(CCCCCCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4"
+"1,8-Bis(diphenylphosphino)naphthalene": "C1(P(C2=CC=CC=C2)C3=CC=CC=C3)=C4C(P(C5=CC=CC=C5)C6=CC=CC=C6)=CC=CC4=CC=C1"
+"1-[2-(Di-tert-butylphosphino)phenyl]-3,5-diphenyl-1H-pyrazole": "CC(P(C1=CC=CC=C1N2N=C(C3=CC=CC=C3)C=C2C4=CC=CC=C4)C(C)(C)C)(C)C"
+"1-Methyl-1-[4-(diphenylphosphino)benzyl]pyrrolidinium Bromide": "C[N+]1(CC2=CC=C(P(C3=CC=CC=C3)C4=CC=CC=C4)C=C2)CCCC1.[Br-]"
+"2-(Dicyclohexylphosphino)-2'-(dimethylamino)biphenyl": "CN(C1=CC=CC=C1C2=CC=CC=C2P(C3CCCCC3)C4CCCCC4)C"
+"2-(Dicyclohexylphosphino)biphenyl": "C1(C2=CC=CC=C2)=CC=CC=C1P(C3CCCCC3)C4CCCCC4"
+"2-(Diphenylphosphino)benzaldehyde": "O=CC1=CC=CC=C1P(C2=CC=CC=C2)C3=CC=CC=C3"
+"2-(Diphenylphosphino)benzoic Acid": "O=C(O)C1=CC=CC=C1P(C2=CC=CC=C2)C3=CC=CC=C3"
+"2-(Diphenylphosphino)benzonitrile": "N#CC1=CC=CC=C1P(C2=CC=CC=C2)C3=CC=CC=C3"
+"2-(Diphenylphosphino)biphenyl": "C1(C2=CC=CC=C2)=CC=CC=C1P(C3=CC=CC=C3)C4=CC=CC=C4"
+"2-(Di-tert-butylphosphino)biphenyl": "CC(P(C1=CC=CC=C1C2=CC=CC=C2)C(C)(C)C)(C)C"
+"2,2'-Bis(diphenylphosphino)biphenyl": "C1(C2=CC=CC=C2P(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1P(C5=CC=CC=C5)C6=CC=CC=C6"
+"2-Dicyclohexylphosphino-2',4',6'-triisopropylbiphenyl": "CC(C1=C(C2=CC=CC=C2P(C3CCCCC3)C4CCCCC4)C(C(C)C)=CC(C(C)C)=C1)C"
+"2-Dicyclohexylphosphino-2',6'-diisopropoxybiphenyl": "CC(OC1=C(C2=CC=CC=C2P(C3CCCCC3)C4CCCCC4)C(OC(C)C)=CC=C1)C"
+"2-Dicyclohexylphosphino-2',6'-dimethoxybiphenyl": "COC1=C(C2=CC=CC=C2P(C3CCCCC3)C4CCCCC4)C(OC)=CC=C1"
+"2-Di-tert-butylphosphino-2',4',6'-triisopropylbiphenyl": "CC(C1=C(C2=CC=CC=C2P(C(C)(C)C)C(C)(C)C)C(C(C)C)=CC(C(C)C)=C1)C"
+"3-(Diphenylphosphino)-1-propylamine": "NCCCP(C1=CC=CC=C1)C2=CC=CC=C2"
+"4-(Dimethylamino)phenyldiphenylphosphine": "CN(C1=CC=C(P(C2=CC=CC=C2)C3=CC=CC=C3)C=C1)C"
+"4-(Diphenylphosphino)benzoic Acid": "O=C(O)C1=CC=C(P(C2=CC=CC=C2)C3=CC=CC=C3)C=C1"
+"4,4,5,5-Tetramethyl-1,3,2-dioxaphospholane 2-Oxide": "CC1(C)C(C)(C)OP(O1)=O"
+"4,5-Bis(diphenylphosphino)-9,9-dimethylxanthene": "CC1(C)C2=C(OC3=C1C=CC=C3P(C4=CC=CC=C4)C5=CC=CC=C5)C(P(C6=CC=CC=C6)C7=CC=CC=C7)=CC=C2"
+"4,6-Bis(diphenylphosphino)phenoxazine": "C(C=CC=C1N2)(P(C3=CC=CC=C3)C4=CC=CC=C4)=C1OC5=C2C=CC=C5P(C6=CC=CC=C6)C7=CC=CC=C7"
+"Bis(diphenylphosphino)methane": "P(CP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4"
+"Bis(pentafluorophenyl)phenylphosphine": "FC1=C(F)C(F)=C(F)C(F)=C1P(C2=C(F)C(F)=C(F)C(F)=C2F)C3=CC=CC=C3"
+"Bis[2-(diphenylphosphino)phenyl] Ether": "C1(OC2=CC=CC=C2P(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1P(C5=CC=CC=C5)C6=CC=CC=C6"
+"Cyclohexyldiphenylphosphine": "P(C1=CC=CC=C1)(C2CCCCC2)C3=CC=CC=C3"
+"Di-1-adamantylphosphine": "C12CC3(PC45CC6CC(C5)CC(C6)C4)CC(C2)CC(C3)C1"
+"Dicyclohexyl(2,4,6-triisopropylphenyl)phosphine": "CC(C1=C(P(C2CCCCC2)C3CCCCC3)C(C(C)C)=CC(C(C)C)=C1)C"
+"Dicyclohexylphenylphosphine": "P(C1CCCCC1)(C2CCCCC2)C3=CC=CC=C3"
+"Diethylphenylphosphine": "CCP(CC)C1=CC=CC=C1"
+"Diphenyl-2-pyridylphosphine": "P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=NC=CC=C3"
+"Diphenylpropylphosphine": "CCCP(C1=CC=CC=C1)C2=CC=CC=C2"
+"Di-tert-butylphenylphosphine": "CC(P(C(C)(C)C)C1=CC=CC=C1)(C)C"
+"Ethyldiphenylphosphine": "CCP(C1=CC=CC=C1)C2=CC=CC=C2"
+"Isopropyldiphenylphosphine": "CC(P(C1=CC=CC=C1)C2=CC=CC=C2)C"
+"Methoxymethyl(diphenyl)phosphine Oxide": "COCP(C1=CC=CC=C1)(C2=CC=CC=C2)=O"
+"Methyl(diphenyl)phosphine Oxide": "CP(C1=CC=CC=C1)(C2=CC=CC=C2)=O"
+"Methyldiphenylphosphine": "CP(C1=CC=CC=C1)C2=CC=CC=C2"
+"Sodium Diphenylphosphinobenzene-3-sulfonate": "O=S(C1=CC(P(C2=CC=CC=C2)C3=CC=CC=C3)=CC=C1)([O-])=O.[Na+]"
+"trans-1,2-Bis(diphenylphosphino)ethylene": "P(/C=C/P(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4"
+"Tri(2-furyl)phosphine": "P(C1=CC=CO1)(C2=CC=CO2)C3=CC=CO3"
+"Tri(2-thienyl)phosphine": "P(C1=CC=CS1)(C2=CC=CS2)C3=CC=CS3"
+"Tri(m-tolyl)phosphine": "CC1=CC(P(C2=CC=CC(C)=C2)C3=CC=CC(C)=C3)=CC=C1"
+"Tri(o-tolyl)phosphine": "CC1=CC=CC=C1P(C2=CC=CC=C2C)C3=CC=CC=C3C"
+"Tri(p-tolyl)phosphine": "CC1=CC=C(P(C2=CC=C(C)C=C2)C3=CC=C(C)C=C3)C=C1"
+"Tributylphosphine Oxide": "CCCCP(CCCC)(CCCC)=O"
+"Tricyclohexylphosphine": "P(C1CCCCC1)(C2CCCCC2)C3CCCCC3"
+"Tricyclohexylphosphonium Tetrafluoroborate": "F[B-](F)(F)F.[PH+](C1CCCCC1)(C2CCCCC2)C3CCCCC3"
+"Trihexylphosphine": "CCCCCCP(CCCCCC)CCCCCC"
+"Trimethylphosphine": "CP(C)C"
+"Tri-n-octylphosphine": "CCCCCCCCP(CCCCCCCC)CCCCCCCC"
+"Tri-n-octylphosphine Oxide": "CCCCCCCCP(CCCCCCCC)(CCCCCCCC)=O"
+"Triphenyl Phosphite": "P(OC1=CC=CC=C1)(OC2=CC=CC=C2)OC3=CC=CC=C3"
+"Triphenylphosphine": "P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"Triphenylphosphine Oxide": "O=P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"Tris(2,4-di-tert-butylphenyl) Phosphite": "CC(C1=CC=C(OP(OC2=CC=C(C(C)(C)C)C=C2C(C)(C)C)OC3=CC=C(C(C)(C)C)C=C3C(C)(C)C)C(C(C)(C)C)=C1)(C)C"
+"Tris(2,6-dimethoxyphenyl)phosphine": "COC1=C(P(C2=C(OC)C=CC=C2OC)C3=C(OC)C=CC=C3OC)C(OC)=CC=C1"
+"Tris(2-carboxyethyl)phosphine Hydrochloride": "O=C(CCP(CCC(O)=O)CCC(O)=O)O.[H]Cl"
+"Tris(2-methoxyphenyl)phosphine": "COC1=CC=CC=C1P(C2=CC=CC=C2OC)C3=CC=CC=C3OC"
+"Tris(4-fluorophenyl)phosphine": "FC1=CC=C(P(C2=CC=C(F)C=C2)C3=CC=C(F)C=C3)C=C1"
+"Tris(4-methoxyphenyl)phosphine": "COC1=CC=C(P(C2=CC=C(OC)C=C2)C3=CC=C(OC)C=C3)C=C1"
+"Tris(pentafluorophenyl)phosphine": "FC1=C(F)C(F)=C(F)C(F)=C1P(C2=C(F)C(F)=C(F)C(F)=C2F)C3=C(F)C(F)=C(F)C(F)=C3F"
+"Tris[3,5-bis(trifluoromethyl)phenyl]phosphine": "FC(C1=CC(C(F)(F)F)=CC(P(C2=CC(C(F)(F)F)=CC(C(F)(F)F)=C2)C3=CC(C(F)(F)F)=CC(C(F)(F)F)=C3)=C1)(F)F"
+"1-(2-Mesitylene)-1,3-butanedione": "CC(CC(C1=C(C)C=C(C)C=C1C)=O)=O"
+"1-(4-Bromophenyl)-1,3-butanedione": "CC(CC(C1=CC=C(Br)C=C1)=O)=O"
+"1-(4-Chlorophenyl)-4,4,4-trifluoro-1,3-butanedione": "O=C(C1=CC=C(Cl)C=C1)CC(C(F)(F)F)=O"
+"1-(4-Fluorophenyl)-1,3-butanedione": "CC(CC(C1=CC=C(F)C=C1)=O)=O"
+"1-(4-tert-Butylphenyl)-3-(4-methoxyphenyl)-1,3-propanedione": "O=C(C1=CC=C(C(C)(C)C)C=C1)CC(C2=CC=C(OC)C=C2)=O"
+"1,1,5,5-Tetrafluoro-2,4-pentanedione": "O=C(CC(C(F)F)=O)C(F)F"
+"1,3-Bis(4-methoxyphenyl)-1,3-propanedione": "O=C(C1=CC=C(OC)C=C1)CC(C2=CC=C(OC)C=C2)=O"
+"1,3-Di(2-pyridyl)-1,3-propanedione": "O=C(C1=NC=CC=C1)CC(C2=NC=CC=C2)=O"
+"1,3-Diphenyl-1,3-propanedione": "O=C(C1=CC=CC=C1)CC(C2=CC=CC=C2)=O"
+"1-Phenyl-1,3-butanedione": "CC(CC(C1=CC=CC=C1)=O)=O"
+"2,2-Dimethyl-6,6,7,7,8,8,8-heptafluoro-3,5-octanedione": "CC(C)(C)C(CC(C(F)(F)C(F)(F)C(F)(F)F)=O)=O"
+"2,6-Dimethyl-3,5-heptanedione": "CC(C)C(CC(C(C)C)=O)=O"
+"2-Acetylcyclohexanone": "O=C1C(C(C)=O)CCCC1"
+"2-Acetylcyclopentanone": "O=C1C(C(C)=O)CCC1"
+"2-Furoyltrifluoroacetone": "O=C(CC(C1=CC=CO1)=O)C(F)(F)F"
+"3,4-Diacetyl-2,5-hexanedione": "CC(C(C(C)=O)C(C(C)=O)C(C)=O)=O"
+"3,5-Heptanedione": "CCC(CC(CC)=O)=O"
+"3-Chloroacetylacetone": "CC(C(Cl)C(C)=O)=O"
+"3-Ethyl-2,4-pentanedione": "CC(C(CC)C(C)=O)=O"
+"3-Methyl-2,4-pentanedione": "CC(C(C)C(C)=O)=O"
+"3-Phenyl-2,4-pentanedione": "CC(C(C1=CC=CC=C1)C(C)=O)=O"
+"4,4,4-Trifluoro-1-(2-naphthyl)-1,3-butanedione": "O=C(C1=CC=C2C=CC=CC2=C1)CC(C(F)(F)F)=O"
+"4,4,4-Trifluoro-1-(2-thienyl)-1,3-butanedione": "O=C(C1=CC=CS1)CC(C(F)(F)F)=O"
+"4,4,4-Trifluoro-1-(4-methoxyphenyl)-1,3-butanedione": "O=C(C1=CC=C(OC)C=C1)CC(C(F)(F)F)=O"
+"4,4,4-Trifluoro-1-(p-tolyl)-1,3-butanedione": "O=C(C1=CC=C(C)C=C1)CC(C(F)(F)F)=O"
+"4,4,4-Trifluoro-1-phenyl-1,3-butanedione": "O=C(C1=CC=CC=C1)CC(C(F)(F)F)=O"
+"6-Methyl-2,4-heptanedione": "CC(CC(CC(C)C)=O)=O"
+"9H,9H-Triacontafluoro-8,10-heptadecanedione": "O=C(CC(C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)F)=O)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)F"
+"Acetylacetone": "CC(CC(C)=O)=O"
+"Dehydroacetic Acid": "CC(C(C(C=C(O1)C)=O)C1=O)=O"
+"Dipivaloylmethane": "CC(C)(C)C(CC(C(C)(C)C)=O)=O"
+"Hexafluoroacetylacetone": "O=C(C(F)(F)C(CF)=O)C(F)(F)F"
+"Trifluoroacetylacetone": "O=C(CC(C)=O)C(F)(F)F"
+"1,2,3,4,5-Pentamethylcyclopentadiene": "CC1C(C)=C(C)C(C)=C1C"
+"1,2,3,4,5-Pentaphenyl-1,3-cyclopentadiene": "C1(C2=CC=CC=C2)=C(C3=CC=CC=C3)C(C4=CC=CC=C4)=C(C5=CC=CC=C5)C1C6=CC=CC=C6"
+"1,2,3,4-Tetraphenyl-1,3-cyclopentadiene": "C1(C2=CC=CC=C2)=C(C3=CC=CC=C3)C(C4=CC=CC=C4)=C(C5=CC=CC=C5)C1"
+"1,2-Bis(3-indenyl)ethane": "C1(CCC2=CCC3=C2C=CC=C3)=CCC4=C1C=CC=C4"
+"1,3,5,7-Cyclooctatetraene (stabilized with HQ)": "C1=C\\C=C/C=C\\C=C/1"
+"1,3,5-Cycloheptatriene": "C1=CC=CC=CC1"
+"1,3,5-Trimethylbenzene": "CC1=CC(C)=CC(C)=C1"
+"1,4-Cyclohexadiene (stabilized with BHT)": "C1=CCC=CC1"
+"1,5-Cyclooctadiene [stabilized with Octadecyl 3-(3',5'-Di-tert-butyl-4'-hydroxyphenyl)propionate]": "C1=C\\CC/C=C\\CC/1"
+"1,5-Hexadiene": "C=CCCC=C"
+"1H-Cyclopenta[l]phenanthrene": "C12=CC=CC=C1C(CC=C3)=C3C4=C2C=CC=C4"
+"2,5-Norbornadiene (stabilized with BHT)": "C12C=CC(C2)C=C1"
+"2-Methylbenzo[e]indene (mixture of 1H- and 3H-form)": "N/A"
+"2-Methylcyclopenta[l]phenanthrene": "CC1=CC2=C3CC=CC=C3C4=C(C2=C1)C=CC=C4"
+"2-Norbornene": "C12C=CC(C2)CC1"
+"Acenaphthylene": "C12=CC=CC3=C1C(C=C2)=CC=C3"
+"Cyclooctene": "C1=C\\CCCCCC/1"
+"Dibenzo[a,e]cyclooctene": "C12=CC=CC=C1/C=C\\C3=CC=CC=C3/C=C\\2"
+"Dicyclopentadiene (stabilized with BHT) [precursor to Cyclopentadiene]": "C12C=CCC1C3C=CC2C3"
+"Hexamethylbenzene": "CC1=C(C)C(C)=C(C)C(C)=C1C"
+"Indan": "C12=C(CCC2)C=CC=C1"
+"Indene": "C12=C(CC=C2)C=CC=C1"
+"p-Cymene": "CC1=CC=C(C(C)C)C=C1"
+"Tetraphenylcyclopentadienone": "O=C1C(C2=CC=CC=C2)=C(C3=CC=CC=C3)C(C4=CC=CC=C4)=C1C5=CC=CC=C5"
+"trans,trans-1,5-Bis(4-fluorophenyl)-1,4-pentadien-3-one": "O=C(/C=C/C1=CC=C(F)C=C1)/C=C/C2=CC=C(F)C=C2"
+"trans,trans-1,5-Bis(4-methoxyphenyl)-1,4-pentadien-3-one": "O=C(/C=C/C1=CC=C(OC)C=C1)/C=C/C2=CC=C(OC)C=C2"
+"trans,trans-1,5-Bis[4-(trifluoromethyl)phenyl]-1,4-pentadien-3-one": "O=C(/C=C/C1=CC=C(C(F)(F)F)C=C1)/C=C/C2=CC=C(C(F)(F)F)C=C2"
+"trans,trans-1,5-Diphenyl-1,4-pentadien-3-one": "O=C(/C=C/C1=CC=CC=C1)/C=C/C2=CC=CC=C2"
diff --git a/lib/cdx/below_arrow/metallorganics.yaml b/lib/cdx/below_arrow/metallorganics.yaml
new file mode 100644
index 0000000000..d0e8a3c2ac
--- /dev/null
+++ b/lib/cdx/below_arrow/metallorganics.yaml
@@ -0,0 +1,351 @@
+"(1-Bromovinyl)trimethylsilane": "C[Si](C)(C(Br)=C)C"
+"(1E)-1-tert-Butoxy-1-(trimethylsilyloxy)propene": "C/C=C(OC(C)(C)C)/O[Si](C)(C)C"
+"(1R,3R)-5-(Bromomethylene)-1,3-bis(tert-butyldimethylsilyloxy)cyclohexane": "C[Si](O[C@H](C1)C[C@H](O[Si](C)(C(C)(C)C)C)CC1=CBr)(C(C)(C)C)C"
+"(2,5-Dimethylphenyl)magnesium Bromide": "Br[Mg]C1=CC(C)=CC=C1C"
+"(2-Bromo-4,5-dimethoxyphenoxy)trimethylsilane": "C[Si](C)(OC1=CC(OC)=C(OC)C=C1Br)C"
+"(2-Bromoallyl)trimethylsilane": "C[Si](C)(CC(Br)=C)C"
+"(2-Bromophenylethynyl)trimethylsilane": "C[Si](C)(C#CC1=CC=CC=C1Br)C"
+"(3,5-Dibromophenyl)triphenylsilane": "BrC1=CC(Br)=CC([Si](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=C1"
+"(3-Bromopropoxy)(tert-butyl)dimethylsilane": "C[Si](C(C)(C)C)(OCCCBr)C"
+"(3-Bromopropyl)trimethoxysilane": "CO[Si](OC)(CCCBr)OC"
+"(3-Chloropropyl)tris(trimethylsilyloxy)silane": "C[Si](O[Si](O[Si](C)(C)C)(CCCCl)O[Si](C)(C)C)(C)C"
+"(3-Mercaptopropyl)triethoxysilane": "CCO[Si](OCC)(CCCS)OCC"
+"(3-Mercaptopropyl)trimethoxysilane": "CO[Si](OC)(CCCS)OC"
+"(Bromomethyl)trimethylsilane": "C[Si](C)(CBr)C"
+"(Chloromethyl)isopropoxydimethylsilane": "C[Si](OC(C)C)(CCl)C"
+"(Chloromethyl)trimethylsilane": "C[Si](C)(CCl)C"
+"(E)-Trimethyl(3,3,3-trifluoro-1-propenyl)silane": "FC(F)(F)/C=C/[Si](C)(C)C"
+"(Iodomethyl)trimethylsilane": "C[Si](C)(CI)C"
+"(m-Terphenyl-5'-yl)trimethylsilane": "C[Si](C)(C1=CC(C2=CC=CC=C2)=CC(C3=CC=CC=C3)=C1)C"
+"(Phenylthio)trimethylsilane": "C[Si](C)(SC1=CC=CC=C1)C"
+"(Phenylthiomethyl)trimethylsilane": "C[Si](C)(CSC1=CC=CC=C1)C"
+"(tert-Butyldimethylsilyl)acetylene": "C#C[Si](C)(C(C)(C)C)C"
+"(tert-Butyldimethylsilyloxy)malononitrile": "N#CC(O[Si](C)(C(C)(C)C)C)C#N"
+"(Trifluoromethyl)trimethylsilane": "C[Si](C)(C(F)(F)F)C"
+"[(4-Bromobenzyl)oxy](tert-butyl)dimethylsilane": "C[Si](C(C)(C)C)(OCC1=CC=C(Br)C=C1)C"
+"[(4-Methoxyphenyl)ethynyl]trimethylsilane": "C[Si](C)(C#CC1=CC=C(OC)C=C1)C"
+"[3-(6-Aminohexylamino)propyl]trimethoxysilane": "CO[Si](OC)(CCCNCCCCCCN)OC"
+"[3-(Diethylamino)propyl]trimethoxysilane": "CO[Si](OC)(CCCN(CC)CC)OC"
+"[3-(N,N-Dimethylamino)propyl]trimethoxysilane": "CO[Si](OC)(CCCN(C)C)OC"
+"[3-(Trimethoxysilyl)propyl]succinic Anhydride": "O=C(O1)C(CCC[Si](OC)(OC)OC)CC1=O"
+"1-(Triisopropylsilyl)-1-propyne": "CC#C[Si](C(C)C)(C(C)C)C(C)C"
+"1-(Trimethoxysilyl)naphthalene": "CO[Si](C1=C2C=CC=CC2=CC=C1)(OC)OC"
+"1-(Trimethylsilyl)-1-pentyne": "CCCC#C[Si](C)(C)C"
+"1-(Trimethylsilyl)-1-propyne": "CC#C[Si](C)(C)C"
+"1,1,1,3,3-Pentamethyldisiloxane": "C[SiH](C)O[Si](C)(C)C"
+"1,1,1,3,5,5,5-Heptamethyl-3-[(trimethylsilyl)oxy]trisiloxane": "C[Si](O[Si](O[Si](C)(C)C)(C)O[Si](C)(C)C)(C)C"
+"1,1,1,3,5,5,5-Heptamethyltrisiloxane": "C[Si](C)(C)O[SiH](C)O[Si](C)(C)C"
+"1,1,1,3,5,7,7,7-Octamethyltetrasiloxane": "C[Si](C)(C)O[SiH](C)O[SiH](C)O[Si](C)(C)C"
+"1,1,1,5,5,5-Hexamethyl-3-[(trimethylsilyl)oxy]-3-vinyltrisiloxane": "C=C[Si](O[Si](C)(C)C)(O[Si](C)(C)C)O[Si](C)(C)C"
+"1,1,1,5,5,5-Hexamethyl-3-phenyl-3-(trimethylsilyloxy)trisiloxane": "C[Si](O[Si](O[Si](C)(C)C)(C1=CC=CC=C1)O[Si](C)(C)C)(C)C"
+"1,1,2,2-Tetrachloro-1,2-dimethyldisilane": "C[Si](Cl)(Cl)[Si](Cl)(Cl)C"
+"1,1,2,2-Tetraphenyldisilane": "[SiH](C1=CC=CC=C1)(C2=CC=CC=C2)[SiH](C3=CC=CC=C3)C4=CC=CC=C4"
+"1,1,2,3,4,5-Hexaphenylsilole": "C1(C2=CC=CC=C2)=C(C3=CC=CC=C3)C(C4=CC=CC=C4)=C(C5=CC=CC=C5)[Si]1(C6=CC=CC=C6)C7=CC=CC=C7"
+"1,1,3,3,5,5,7,7,9,9,11,11,13,13-Tetradecamethylheptasiloxane": "C[SiH](C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[SiH](C)C"
+"1,1,3,3,5,5,7,7,9,9,11,11-Dodecamethylhexasiloxane": "C[SiH](C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[SiH](C)C"
+"1,1,3,3,5,5-Hexaethoxy-1,3,5-trisilacyclohexane": "CCO[Si]1(OCC)C[Si](OCC)(OCC)C[Si](OCC)(OCC)C1"
+"1,1,3,3,5,5-Hexamethyltrisiloxane": "C[SiH](C)O[Si](C)(C)O[SiH](C)C"
+"1,1,3,3-Tetramethyl-1,3-diphenyldisiloxane": "C[Si](C1=CC=CC=C1)(C)O[Si](C)(C)C2=CC=CC=C2"
+"1,1,3,3-Tetramethyldisiloxane": "C[SiH](C)O[SiH](C)C"
+"1,1-Dimethyl-1,3-dihydrobenzo[c][1,2]oxasilole": "C[Si]1(C)OCC2=CC=CC=C12"
+"1,2-Bis(trichlorosilyl)ethane": "Cl[Si](CC[Si](Cl)(Cl)Cl)(Cl)Cl"
+"1,2-Bis(triethoxysilyl)ethane": "CCO[Si](CC[Si](OCC)(OCC)OCC)(OCC)OCC"
+"1,2-Bis(trimethylsilyl)benzene": "C[Si](C1=CC=CC=C1[Si](C)(C)C)(C)C"
+"1,2-Dichlorotetramethyldisilane": "Cl[Si](C)(C)[Si](C)(C)Cl"
+"1,3,5-Tris(3,3,3-trifluoropropyl)-1,3,5-trimethylcyclotrisiloxane": "C[Si]1(CCC(F)(F)F)O[Si](C)(CCC(F)(F)F)O[Si](C)(CCC(F)(F)F)O1"
+"1,3-Bis(4-hydroxybutyl)tetramethyldisiloxane": "OCCCC[Si](C)(C)O[Si](C)(C)CCCCO"
+"1,3-Bis(chloromethyl)tetramethyldisiloxane": "ClC[Si](C)(C)O[Si](C)(C)CCl"
+"1,3-Bis[(trimethylsilyl)ethynyl]benzene": "C[Si](C#CC1=CC(C#C[Si](C)(C)C)=CC=C1)(C)C"
+"1,3-Dimethoxy-1,1,3,3-tetraphenyldisiloxane": "CO[Si](C1=CC=CC=C1)(C2=CC=CC=C2)O[Si](C3=CC=CC=C3)(OC)C4=CC=CC=C4"
+"1,3-Divinyltetramethyldisiloxane": "C=C[Si](C)(C)O[Si](C)(C)C=C"
+"1,4-Bis(dimethylsilyl)benzene": "C[SiH](C1=CC=C([SiH](C)C)C=C1)C"
+"1,4-Bis(trimethylsilyl)-1,3-butadiyne": "C[Si](C#CC#C[Si](C)(C)C)(C)C"
+"1,5-Dichloro-1,1,3,3,5,5-hexamethyltrisiloxane": "C[Si](C)(Cl)O[Si](C)(C)O[Si](C)(Cl)C"
+"1,5-Dimethyl-2,4-bis[2-(trimethylsilyl)ethynyl]benzene": "C[Si](C#CC1=C(C)C=C(C)C(C#C[Si](C)(C)C)=C1)(C)C"
+"1,7-Dichloro-1,1,3,3,5,5,7,7-octamethyltetrasiloxane": "C[Si](C)(Cl)O[Si](C)(C)O[Si](C)(C)O[Si](C)(Cl)C"
+"1-[3-(Trimethoxysilyl)propyl]urea": "O=C(N)NCCC[Si](OC)(OC)OC"
+"1-Bromo-3-(trimethylsilyl)benzene": "C[Si](C1=CC(Br)=CC=C1)(C)C"
+"1-Bromo-4-(trimethylsilyl)benzene": "C[Si](C1=CC=C(Br)C=C1)(C)C"
+"1-Methoxy-3-(trimethylsilyloxy)-1,3-butadiene": "C=C(O[Si](C)(C)C)/C=C/OC"
+"1-Phenyl-2-(trimethylsilyl)acetylene": "C[Si](C#CC1=CC=CC=C1)(C)C"
+"2-(3,4-Epoxycyclohexyl)ethyltrimethoxysilane": "CO[Si](OC)(CCC1CC(O2)C2CC1)OC"
+"2-(Dimethylvinylsilyl)pyridine": "C=C[Si](C1=NC=CC=C1)(C)C"
+"2-(Trimethylsilylethynyl)thiophene": "C[Si](C#CC1=CC=CS1)(C)C"
+"2,4,6,8-Tetramethyl-2,4,6,8-tetravinylcyclotetrasiloxane": "C=CO1(C)[SiH2]O(C=C)(C)[SiH2]O(C=C)(C)[SiH2]O(C=C)(C)[SiH2]1"
+"2,4,6,8-Tetramethylcyclotetrasiloxane": "CO1[SiH2]O(C)[SiH2]O(C)[SiH2]O(C)[SiH2]1"
+"2,5-Bis(4-bromophenyl)-1,1-dimethyl-3,4-diphenylsilole": "C[Si]1(C)C(C2=CC=C(Br)C=C2)=C(C3=CC=CC=C3)C(C4=CC=CC=C4)=C1C5=CC=C(Br)C=C5"
+"2,5-Bis[(trimethylsilyl)ethynyl]thiophene": "C[Si](C#CC1=CC=C(C#C[Si](C)(C)C)S1)(C)C"
+"2,5-Dibromo-1,1,3,4-tetraphenylsilole": "BrC1=C(C2=CC=CC=C2)C(C3=CC=CC=C3)=C(Br)[Si]1(C4=CC=CC=C4)C5=CC=CC=C5"
+"2,5-Dibromo-1,1-dimethyl-3,4-diphenylsilole": "C[Si]1(C)C(Br)=C(C2=CC=CC=C2)C(C3=CC=CC=C3)=C1Br"
+"2-Cyanoethyltriethoxysilane": "CCO[Si](OCC)(CCC#N)OCC"
+"2-Trimethylsilyloxy-1,3-butadiene": "C=C(O[Si](C)(C)C)C=C"
+"2-Trimethylsilylthiophene": "C[Si](C1=CC=CS1)(C)C"
+"3-(2-Aminoethylamino)propyltrimethoxysilane": "CO[Si](OC)(CCCNCCN)OC"
+"3-(Dimethylsilyloxy)-1,1,5,5-tetramethyl-3-phenyltrisiloxane": "C[SiH](C)O[Si](C1=CC=CC=C1)(O[SiH](C)C)O[SiH](C)C"
+"3-(Triallylsilyl)propyl Acrylate": "C=CC(OCCC[Si](CC=C)(CC=C)CC=C)=O"
+"3-(Triallylsilyl)propyl Methacrylate": "CC(C(OCCC[Si](CC=C)(CC=C)CC=C)=O)=C"
+"3-(Triethoxysilyl)propyl Isocyanate": "CCO[Si](CCCN=C=O)(OCC)OCC"
+"3-(Trimethoxysilyl)propyl Acrylate": "C=CC(OCCC[Si](OC)(OC)OC)=O"
+"3-(Trimethoxysilyl)propyl Methacrylate": "CC(C(OCCC[Si](OC)(OC)OC)=O)=C"
+"3-(Trimethylsilylethynyl)thiophene": "C[Si](C#CC1=CSC=C1)(C)C"
+"3-[(Dimethylsilyl)oxy]-1,1,3,5,5-pentamethyltrisiloxane": "C[SiH](C)O[Si](C)(O[SiH](C)C)O[SiH](C)C"
+"3-[[Dimethyl(vinyl)silyl]oxy]-1,1,5,5-tetramethyl-3-phenyl-1,5-divinyltrisiloxane": "C=C[Si](C)(C)O[Si](C1=CC=CC=C1)(O[Si](C)(C)C=C)O[Si](C)(C)C=C"
+"3-[[tert-Butyl(dimethyl)silyl]oxy]-1-propanol": "OCCCO[Si](C)(C(C)(C)C)C"
+"3-Aminopropyltriethoxysilane": "CCO[Si](OCC)(CCCN)OCC"
+"3-Aminopropyltrimethoxysilane": "CO[Si](OC)(CCCN)OC"
+"3-Bromo-1-(trimethylsilyl)-1-propyne": "C[Si](C#CCBr)(C)C"
+"3-Chloropropyltriethoxysilane": "CCO[Si](OCC)(CCCCl)OCC"
+"3-Glycidyloxypropyltrimethoxysilane": "CO[Si](OC)(CCCOCC1CO1)OC"
+"3-Mercaptopropyl(dimethoxy)methylsilane": "C[Si](OC)(CCCS)OC"
+"3-Trimethoxysilylpropyl Chloride": "CO[Si](CCCCl)(OC)OC"
+"3-Trimethylsilyl-2-propyn-1-ol": "OCC#C[Si](C)(C)C"
+"4-(Trimethylsilyl)-3-butyn-2-one": "CC(C#C[Si](C)(C)C)=O"
+"4-(Trimethylsilyl)diphenylacetylene": "C[Si](C1=CC=C(C#CC2=CC=CC=C2)C=C1)(C)C"
+"4'-[(tert-Butyldimethylsilyloxy)methyl]-2,2,2-trifluoroacetophenone": "O=C(C1=CC=C(CO[Si](C)(C(C)(C)C)C)C=C1)C(F)(F)F"
+"4-Bromotetraphenylsilane": "BrC1=CC=C([Si](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)C=C1"
+"4-Fluorophenylmagnesium Bromide": "Br[Mg]C1=CC=C(F)C=C1"
+"4-Trimethylsilyl-3-butyn-2-ol": "CC(O)C#C[Si](C)(C)C"
+"5-(Trimethylsilyl)-1,2,3,4,5-pentamethyl-1,3-cyclopentadiene": "CC1([Si](C)(C)C)C(C)=C(C)C(C)=C1C"
+"5,5''-Bis(trimethylstannyl)-2,2':5',2''-terthiophene": "C[Sn](C1=CC=C(C2=CC=C(C3=CC=C([Sn](C)(C)C)S3)S2)S1)(C)C"
+"Allyl(chloromethyl)dimethylsilane": "C[Si](CCl)(CC=C)C"
+"Allyl(tert-butyl)dimethylsilane": "C[Si](C(C)(C)C)(CC=C)C"
+"Allylchlorodimethylsilane": "C[Si](Cl)(CC=C)C"
+"Allylmagnesium Bromide": "Br[Mg]CC=C"
+"Allylmagnesium Chloride": "Cl[Mg]CC=C"
+"Allyloxytrimethylsilane": "C[Si](C)(OCC=C)C"
+"Allyltriethoxysilane": "CCO[Si](OCC)(CC=C)OCC"
+"Allyltriethylsilane": "CC[Si](CC)(CC=C)CC"
+"Allyltriisopropylsilane": "CC([Si](C(C)C)(CC=C)C(C)C)C"
+"Allyltrimethoxysilane": "CO[Si](OC)(CC=C)OC"
+"Allyltrimethylsilane": "C[Si](C)(CC=C)C"
+"Allyltriphenyltin": "C=CC[Sn](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"Allyltris(trimethylsilyloxy)silane": "C[Si](O[Si](O[Si](C)(C)C)(CC=C)O[Si](C)(C)C)(C)C"
+"Benzylmagnesium Bromide": "Br[Mg]CC1=CC=CC=C1"
+"Benzylmagnesium Chloride": "Cl[Mg]CC1=CC=CC=C1"
+"Benzyltrimethylsilane": "C[Si](C)(CC1=CC=CC=C1)C"
+"Bis(chloromethyl)dimethylsilane": "C[Si](CCl)(CCl)C"
+"Bis(pentafluorophenyl)dimethylsilane": "C[Si](C1=C(F)C(F)=C(F)C(F)=C1F)(C2=C(F)C(F)=C(F)C(F)=C2F)C"
+"Bis(trichlorosilyl)acetylene": "Cl[Si](C#C[Si](Cl)(Cl)Cl)(Cl)Cl"
+"Bis(trimethylsilyl) Sulfide": "C[Si](S[Si](C)(C)C)(C)C"
+"Bis(trimethylsilyl)acetylene": "C[Si](C#C[Si](C)(C)C)(C)C"
+"Bis(trimethylsilyl)bromomethane": "BrC([Si](C)(C)C)[Si](C)(C)C"
+"Bis(trimethylsilyl)methane": "C[Si](C[Si](C)(C)C)(C)C"
+"Bis(trimethylsilyl)methylamine": "CN([Si](C)(C)C)[Si](C)(C)C"
+"Bis[2-(trimethylsilyloxy)ethyl] Ether": "C[Si](OCCOCCO[Si](C)(C)C)(C)C"
+"Bis[2-carboxyethylgermanium(IV)] Sesquioxide": "O=[Ge](CCC(O)=O)O[Ge](CCC(O)=O)=O"
+"Bis[3-(trimethoxysilyl)propyl]amine": "CO[Si](CCCNCCC[Si](OC)(OC)OC)(OC)OC"
+"Butylmagnesium Bromide": "Br[Mg]CCCC"
+"Butylmagnesium Chloride": "Cl[Mg]CCCC"
+"Butyltin Trichloride": "CCCC[Sn](Cl)(Cl)Cl"
+"Chloro(3-chloropropyl)dimethylsilane": "C[Si](CCCCl)(Cl)C"
+"Chloro(hexyl)dimethylsilane": "C[Si](CCCCCC)(Cl)C"
+"Chloro(methyl)(phenyl)(vinyl)silane": "C=C[Si](C)(Cl)C1=CC=CC=C1"
+"Chlorodimethylvinylsilane": "C=C[Si](C)(Cl)C"
+"Chloromethyldimethylphenylsilane": "C[Si](C)(CCl)C1=CC=CC=C1"
+"Chloropentamethyldisilane": "C[Si](C)(C)[Si](C)(Cl)C"
+"Chlorotriethoxysilane": "CCO[Si](OCC)(Cl)OCC"
+"Cyclohexyl(dimethoxy)methylsilane": "C[Si](OC)(C1CCCCC1)OC"
+"Cyclohexylmagnesium Bromide": "Br[Mg]C1CCCCC1"
+"Cyclopentylmagnesium Bromide": "Br[Mg]C1CCCC1"
+"Cyclopropylmagnesium Bromide": "Br[Mg]C1CC1"
+"Decamethylcyclopentasiloxane": "C[Si]1(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O1"
+"Decamethyltetrasiloxane": "C[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)C"
+"Decyltriethoxysilane": "CCO[Si](OCC)(CCCCCCCCCC)OCC"
+"Decyltrimethoxysilane": "CO[Si](OC)(CCCCCCCCCC)OC"
+"Diacetoxydimethylsilane": "C[Si](OC(C)=O)(OC(C)=O)C"
+"Diallyldimethylsilane": "C[Si](CC=C)(CC=C)C"
+"Dibutyltin Bis(trifluoromethanesulfonate)": "CCCC[Sn+2]CCCC.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O"
+"Dibutyltin Diacetate": "CCCC[Sn+2]CCCC.CC([O-])=O.CC([O-])=O"
+"Dibutyltin Dichloride": "CCCC[Sn](Cl)(Cl)CCCC"
+"Dibutyltin Dilaurate": "CCCC[Sn+2]CCCC.CCCCCCCCCCCC([O-])=O.CCCCCCCCCCCC([O-])=O"
+"Dibutyltin Oxide": "CCCC[Sn](CCCC)=O"
+"Dichloro(methyl)(3,3,3-trifluoropropyl)silane": "FC(F)(F)CC[Si](Cl)(Cl)C"
+"Dichloro(methyl)-n-octylsilane": "CCCCCCCC[Si](Cl)(Cl)C"
+"Dichlorocyclohexylmethylsilane": "C[Si](Cl)(Cl)C1CCCCC1"
+"Dichlorodecylmethylsilane": "C[Si](Cl)(Cl)CCCCCCCCCC"
+"Dichlorododecylmethylsilane": "C[Si](Cl)(Cl)CCCCCCCCCCCC"
+"Dichlorohexylmethylsilane": "C[Si](Cl)(Cl)CCCCCC"
+"Dichloromethylvinylsilane": "C=C[Si](Cl)(Cl)C"
+"Dicyclopentyl(dimethoxy)silane": "CO[Si](C1CCCC1)(C2CCCC2)OC"
+"Diethoxy(methyl)phenylsilane": "C[Si](OCC)(OCC)C1=CC=CC=C1"
+"Diethoxydimethylsilane": "C[Si](OCC)(OCC)C"
+"Diethoxydiphenylsilane": "CCO[Si](C1=CC=CC=C1)(OCC)C2=CC=CC=C2"
+"Diethoxymethylsilane": "C[SiH](OCC)OCC"
+"Diethoxymethylvinylsilane": "C=C[Si](OCC)(OCC)C"
+"Diethyl(isopropyl)silanol": "O[Si](CC)(CC)C(C)C"
+"Diisobutyldimethoxysilane": "CO[Si](CC(C)C)(CC(C)C)OC"
+"Dimethoxy(methyl)(3,3,3-trifluoropropyl)silane": "FC(F)(F)CC[Si](OC)(OC)C"
+"Dimethoxy(methyl)silane": "C[SiH](OC)OC"
+"Dimethoxydimethylsilane": "C[Si](OC)(OC)C"
+"Dimethoxydiphenylsilane": "CO[Si](C1=CC=CC=C1)(OC)C2=CC=CC=C2"
+"Dimethoxydi-p-tolylsilane": "CC1=CC=C([Si](OC)(OC)C2=CC=C(C)C=C2)C=C1"
+"Dimethoxymethylvinylsilane": "C=C[Si](OC)(OC)C"
+"Dimethylbis(phenylethynyl)silane": "C[Si](C#CC1=CC=CC=C1)(C)C#CC2=CC=CC=C2"
+"Dimethyldiphenylsilane": "C[Si](C1=CC=CC=C1)(C)C2=CC=CC=C2"
+"Dimethyldivinylsilane": "C=C[Si](C)(C)C=C"
+"Dimethylphenylsilane": "C[SiH](C)C1=CC=CC=C1"
+"Dimethyltin Dichloride": "C[Sn](Cl)(Cl)C"
+"Dimethyltin Oxide": "C[Sn](C)=O"
+"Di-n-octyltin Oxide": "CCCCCCCC[Sn](CCCCCCCC)=O"
+"Diphenylbis(phenylethynyl)silane": "C1(C#C[Si](C2=CC=CC=C2)(C3=CC=CC=C3)C#CC4=CC=CC=C4)=CC=CC=C1"
+"Diphenyldichlorogermane": "Cl[Ge](C1=CC=CC=C1)(C2=CC=CC=C2)Cl"
+"Diphenylsilane": "C1([SiH2]C2=CC=CC=C2)=CC=CC=C1"
+"Diphenylsilanediol": "O[Si](C1=CC=CC=C1)(C2=CC=CC=C2)O"
+"Di-sec-butylmagnesium - Lithium Chloride": "CCC([Mg]C(C)CC)C.[Li+].[Cl-]"
+"Di-tert-Butylsilane": "CC([SiH2]C(C)(C)C)(C)C"
+"Dodecamethylcyclohexasiloxane": "C[Si]1(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O1"
+"Dodecamethylpentasiloxane": "C[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)C"
+"Dodecyltriethoxysilane": "CCO[Si](OCC)(CCCCCCCCCCCC)OCC"
+"Dodecyltrimethoxysilane": "CO[Si](OC)(CCCCCCCCCCCC)OC"
+"Ethoxytriethylsilane": "CC[Si](CC)(OCC)CC"
+"Ethylenedithiobis(trimethylsilane)": "C[Si](C)(C)SCCS[Si](C)(C)C"
+"Ethylmagnesium Bromide": "Br[Mg]CC"
+"Ethylmagnesium Chloride": "Cl[Mg]CC"
+"Heptylmagnesium Bromide": "Br[Mg]CCCCCCC"
+"Hexachlorodisilane": "Cl[Si](Cl)(Cl)[Si](Cl)(Cl)Cl"
+"Hexadecamethylcyclooctasiloxane": "C[Si]1(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O1"
+"Hexadecyltrimethoxysilane": "CO[Si](OC)(CCCCCCCCCCCCCCCC)OC"
+"Hexamethylcyclotrisiloxane": "C[Si]1(C)O[Si](C)(C)O[Si](C)(C)O1"
+"Hexamethyldisilane": "C[Si](C)(C)[Si](C)(C)C"
+"Hexamethyldisiloxane": "C[Si](C)(C)O[Si](C)(C)C"
+"Hexamethylditin": "C[Sn](C)(C)[Sn](C)(C)C"
+"Hexaphenylcyclotrisiloxane": "C1([Si]2(C3=CC=CC=C3)O[Si](C4=CC=CC=C4)(C5=CC=CC=C5)O[Si](C6=CC=CC=C6)(C7=CC=CC=C7)O2)=CC=CC=C1"
+"Hexaphenyldisilane": "C1([Si](C2=CC=CC=C2)(C3=CC=CC=C3)[Si](C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6)=CC=CC=C1"
+"Hexaphenyldisiloxane": "C1([Si](C2=CC=CC=C2)(C3=CC=CC=C3)O[Si](C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6)=CC=CC=C1"
+"Hexylmagnesium Bromide": "Br[Mg]CCCCCC"
+"Hexyltriethoxysilane": "CCO[Si](OCC)(CCCCCC)OCC"
+"Hexyltrimethoxysilane": "CO[Si](OC)(CCCCCC)OC"
+"Isobutylmagnesium Bromide": "Br[Mg]CC(C)C"
+"Isopropenyloxytris(trimethylsilyl)silane": "C[Si]([Si]([Si](C)(C)C)(OC(C)=C)[Si](C)(C)C)(C)C"
+"Isopropylmagnesium Bromide": "Br[Mg]C(C)C"
+"Isopropylmagnesium Chloride - Lithium Chloride": "Cl[Mg]C(C)C.[Li+].[Cl-]"
+"Isopropylmagnesium Chloride": "Cl[Mg]C(C)C"
+"Lithium Acetylide Ethylenediamine Complex": "NCCN.[C-]#[C-].[Li+].[Li+]"
+"Methallyltrimethylsilane": "C[Si](C)(CC(C)=C)C"
+"Methoxydimethyl(phenyl)silane": "C[Si](C)(OC)C1=CC=CC=C1"
+"Methoxymethyltrimethylsilane": "C[Si](C)(COC)C"
+"Methoxytrimethylsilane": "C[Si](C)(OC)C"
+"Methyl 3-(Trimethylsilyloxy)crotonate (cis- and trans- mixture)": "C/C(O[Si](C)(C)C)=C/C(OC)=O"
+"Methyldiphenylsilane": "C[SiH](C1=CC=CC=C1)C2=CC=CC=C2"
+"Methylmagnesium Bromide": "Br[Mg]C"
+"Methylmagnesium Iodide": "I[Mg]C"
+"Monobutyltin Oxide": "CCCC[SnH]=O"
+"m-Tolylmagnesium Bromide ": "Br[Mg]C1=CC=CC(C)=C1"
+"N-[2-(Trimethylsilyl)ethoxycarbonyloxy]succinimide": "O=C(N1OC(OCC[Si](C)(C)C)=O)CCC1=O"
+"n-Octyl p-Toluenesulfonate": "CC1=CC=C(S(=O)(OCCCCCCCC)=O)C=C1"
+"n-Octylmagnesium Bromide": "Br[Mg]CCCCCCCC"
+"N-Trimethylsilylimidazole": "C[Si](N1C=NC=C1)(C)C"
+"Octadecamethylcyclononasiloxane": "C[Si]1(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O1"
+"Octadecyltriethoxysilane": "CCO[Si](OCC)(CCCCCCCCCCCCCCCCCC)OCC"
+"Octadecyltrimethoxysilane": "CO[Si](OC)(CCCCCCCCCCCCCCCCCC)OC"
+"Octakis(dimethylsilyloxy)octasilsesquioxane": "C[SiH](C)O[Si]1(O[Si]2(O[SiH](C)C)O[Si](O3)(O[SiH](C)C)O[Si](O4)(O[SiH](C)C)O[Si]5(O[SiH](C)C)O2)O[Si]3(O[SiH](C)C)O[Si]4(O[SiH](C)C)O[Si](O5)(O[SiH](C)C)O1"
+"Octamethylcyclotetrasiloxane": "C[Si]1(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O1"
+"Octamethyltrisiloxane": "C[Si](C)(C)O[Si](C)(C)O[Si](C)(C)C"
+"Octaphenylcyclotetrasiloxane": "C1([Si]2(C3=CC=CC=C3)O[Si](C4=CC=CC=C4)(C5=CC=CC=C5)O[Si](C6=CC=CC=C6)(C7=CC=CC=C7)O[Si](C8=CC=CC=C8)(C9=CC=CC=C9)O2)=CC=CC=C1"
+"Octaphenyloctasilsesquioxane": "C1([Si]2(O3)O[Si](O[Si](O4)(C5=CC=CC=C5)O[Si](O6)(C7=CC=CC=C7)O8)(C9=CC=CC=C9)O[Si]8(C%10=CC=CC=C%10)O[Si]3(C%11=CC=CC=C%11)O[Si]6(C%12=CC=CC=C%12)O[Si]4(C%13=CC=CC=C%13)O2)=CC=CC=C1"
+"o-Tolylmagnesium Bromide": "Br[Mg]C1=CC=CC=C1C"
+"Pentadecylmagnesium Bromide": "Br[Mg]CCCCCCCCCCCCCCC"
+"Pentylmagnesium Bromide": "Br[Mg]CCCCC"
+"Pentyltriethoxysilane": "CCO[Si](OCC)(CCCCC)OCC"
+"Phenylgermanium Trichloride": "Cl[Ge](Cl)(Cl)C1=CC=CC=C1"
+"Phenylmagnesium Bromide ": "Br[Mg]C1=CC=CC=C1"
+"Phenylmagnesium Chloride": "Cl[Mg]C1=CC=CC=C1"
+"Phenylmagnesium Iodide ": "I[Mg]C1=CC=CC=C1"
+"Phenylsilane": "[SiH3]C1=CC=CC=C1"
+"Phenyltin Trichloride": "Cl[Sn](Cl)(Cl)C1=CC=CC=C1"
+"Propylmagnesium Bromide": "Br[Mg]CCC"
+"p-Tolylmagnesium Bromide ": "Br[Mg]C1=CC=C(C)C=C1"
+"sec-Butylmagnesium Bromide ": "Br[Mg]C(C)CC"
+"sec-Butylmagnesium Chloride - Lithium Chloride": "Cl[Mg]C(C)CC.[Li+].[Cl-]"
+"tert-Butyldimethylsilane": "C[SiH](C(C)(C)C)C"
+"tert-Butyldimethylsilanol": "O[Si](C)(C(C)(C)C)C"
+"tert-Butyldiphenylsilane": "CC([SiH](C1=CC=CC=C1)C2=CC=CC=C2)(C)C"
+"tert-Butylmagnesium Chloride": "Cl[Mg]C(C)(C)C"
+"tert-Butylmethoxyphenylsilyl Bromide": "CO[Si](C(C)(C)C)(Br)C1=CC=CC=C1"
+"Tetraallyltin": "C=CC[Sn](CC=C)(CC=C)CC=C"
+"Tetrabutyl Orthosilicate": "CCCCO[Si](OCCCC)(OCCCC)OCCCC"
+"Tetrabutyltin": "CCCC[Sn](CCCC)(CCCC)CCCC"
+"Tetradecamethylcycloheptasiloxane": "C[Si]1(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O1"
+"Tetraethyl Orthosilicate": "CCO[Si](OCC)(OCC)OCC"
+"Tetraethylgermane": "CC[Ge](CC)(CC)CC"
+"Tetraethylsilane": "CC[Si](CC)(CC)CC"
+"Tetraisopropyl Orthosilicate": "CC(O[Si](OC(C)C)(OC(C)C)OC(C)C)C"
+"Tetrakis(dimethylsilyl)silane": "C[SiH]([Si]([SiH](C)C)([SiH](C)C)[SiH](C)C)C"
+"Tetrakis(dimethylsilyloxy)silane": "C[SiH](O[Si](O[SiH](C)C)(O[SiH](C)C)O[SiH](C)C)C"
+"Tetrakis(trimethylsilyl)silane": "C[Si]([Si]([Si](C)(C)C)([Si](C)(C)C)[Si](C)(C)C)(C)C"
+"Tetrakis[dimethyl(vinyl)silyl] Orthosilicate": "C=C[Si](O[Si](O[Si](C)(C)C=C)(O[Si](C)(C)C=C)O[Si](C)(C)C=C)(C)C"
+"Tetramethylgermane": "C[Ge](C)(C)C"
+"Tetramethylsilane": "C[Si](C)(C)C"
+"Tetraphenylgermane": "C1([Ge](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1"
+"Tetraphenylsilane": "C1([Si](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1"
+"Tetraphenyltin": "C1([Sn](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1"
+"Tetrapropyl Orthosilicate": "CCCO[Si](OCCC)(OCCC)OCCC"
+"TMS-Imidazole (=N-Trimethylsilylimidazole)": "C[Si](N1C=NC=C1)(C)C"
+"Tri(cyclohexa-2,5-dien-1-yl)silane": "[SiH](C1C=CCC=C1)(C2C=CCC=C2)C3C=CCC=C3"
+"Triacetoxyethylsilane": "CC[Si](OC(C)=O)(OC(C)=O)OC(C)=O"
+"Triallyl(methyl)silane": "C[Si](CC=C)(CC=C)CC=C"
+"Triallyl(phenyl)silane": "C=CC[Si](CC=C)(CC=C)C1=CC=CC=C1"
+"Tribenzylsilane": "[SiH](CC1=CC=CC=C1)(CC2=CC=CC=C2)CC3=CC=CC=C3"
+"Tributylchlorosilane": "Cl[Si](CCCC)(CCCC)CCCC"
+"Tributylsilane": "CCCC[SiH](CCCC)CCCC"
+"Trichloro(3,3,3-trifluoropropyl)silane": "FC(F)(F)CC[Si](Cl)(Cl)Cl"
+"Trichloro-2-cyanoethylsilane": "N#CCC[Si](Cl)(Cl)Cl"
+"Trichlorocyclopentylsilane": "Cl[Si](Cl)(Cl)C1CCCC1"
+"Triethoxy(3-glycidyloxypropyl)silane": "CCO[Si](OCC)(OCC)CCCOCC1CO1"
+"Triethoxy(pentafluorophenyl)silane": "FC1=C(F)C(F)=C(F)C(F)=C1[Si](OCC)(OCC)OCC"
+"Triethoxy(propyl)silane": "CCC[Si](OCC)(OCC)OCC"
+"Triethoxy[2-(7-oxabicyclo[4.1.0]heptan-3-yl)ethyl]silane": "CCO[Si](OCC)(OCC)CCC1CC2OC2CC1"
+"Triethoxy-1H,1H,2H,2H-tridecafluoro-n-octylsilane": "F[SiH2]C(F)(F)CC(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(OCC)(OCC)OCC"
+"Triethoxyethylsilane": "CC[Si](OCC)(OCC)OCC"
+"Triethoxyfluorosilane": "F[Si](OCC)(OCC)OCC"
+"Triethoxymethylsilane": "C[Si](OCC)(OCC)OCC"
+"Triethoxy-n-octylsilane": "CCCCCCCC[Si](OCC)(OCC)OCC"
+"Triethoxyphenylsilane": "CCO[Si](OCC)(OCC)C1=CC=CC=C1"
+"Triethoxyvinylsilane": "C=C[Si](OCC)(OCC)OCC"
+"Triethylchlorogermane": "Cl[Ge](CC)(CC)CC"
+"Triethylsilanol": "O[Si](CC)(CC)CC"
+"Triethylsilylacetylene": "C#C[Si](CC)(CC)CC"
+"Triethylvinylsilane": "C=C[Si](CC)(CC)CC"
+"Trihexylsilane": "CCCCCC[SiH](CCCCCC)CCCCCC"
+"Triisopropyl[(trimethylsilyl)ethynyl]silane": "C[Si](C#C[Si](C(C)C)(C(C)C)C(C)C)(C)C"
+"Triisopropylsilane": "CC([SiH](C(C)C)C(C)C)C"
+"Triisopropylsilylacetylene": "C#C[Si](C(C)C)(C(C)C)C(C)C"
+"Trimethoxy(1H,1H,2H,2H-tridecafluoro-n-octyl)silane": "FC(C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)F)(F)CC[Si](OC)(OC)OC"
+"Trimethoxy(2-phenylethyl)silane": "CO[Si](OC)(OC)CCC1=CC=CC=C1"
+"Trimethoxy(3,3,3-trifluoropropyl)silane": "FC(F)(F)CC[Si](OC)(OC)OC"
+"Trimethoxy(4-methoxyphenyl)silane": "COC1=CC=C([Si](OC)(OC)OC)C=C1"
+"Trimethoxy(methyl)silane": "C[Si](OC)(OC)OC"
+"Trimethoxy(phenylethyl)silane": "CO[Si](OC)(OC)CCC1=CC=CC=C1"
+"Trimethoxy(propyl)silane": "CCC[Si](OC)(OC)OC"
+"Trimethoxy[3-(methylamino)propyl]silane": "CNCCC[Si](OC)(OC)OC"
+"Trimethoxy[3-(phenylamino)propyl]silane": "CO[Si](OC)(OC)CCCNC1=CC=CC=C1"
+"Trimethoxy-n-octylsilane": "CCCCCCCC[Si](OC)(OC)OC"
+"Trimethoxyphenylsilane": "CO[Si](OC)(OC)C1=CC=CC=C1"
+"Trimethyl(2-pyridyl)tin": "C[Sn](C)(C)C1=NC=CC=C1"
+"Trimethyl(4-pyridyl)tin": "C[Sn](C)(C)C1=CC=NC=C1"
+"Trimethyl(heptafluoropropyl)silane": "FC([Si](C)(C)C)(F)C(F)(F)C(F)(F)F"
+"Trimethyl(nonafluorobutyl)silane": "FC([Si](C)(C)C)(F)C(F)(F)C(F)(F)C(F)(F)F"
+"Trimethyl(pentafluoroethyl)silane": "FC([Si](C)(C)C)(F)C(F)(F)F"
+"Trimethyl(pentafluorophenyl)silane": "FC1=C(F)C(F)=C(F)C(F)=C1[Si](C)(C)C"
+"Trimethyl(tridecafluorohexyl)silane": "FC([Si](C)(C)C)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)F"
+"Trimethyl[3-(trimethoxysilyl)propyl]ammonium Chloride": "CO[Si](CCC[N+](C)(C)C)(OC)OC.[Cl-]"
+"Trimethylchlorogermane": "Cl[Ge](C)(C)C"
+"Trimethylethoxysilane": "CCO[Si](C)(C)C"
+"Trimethylphenylsilane": "C[Si](C)(C)C1=CC=CC=C1"
+"Trimethylsilyl Acetate": "CC(O[Si](C)(C)C)=O"
+"Trimethylsilyl Propionate": "CCC(O[Si](C)(C)C)=O"
+"Trimethylsilyl Trifluoroacetate": "O=C(O[Si](C)(C)C)C(F)(F)F"
+"Trimethylsilylacetylene": "C#C[Si](C)(C)C"
+"Trimethylsilylcyclopentadiene": "C[Si](C1=CC=CC1)(C)C"
+"Trimethylsilylketene Ethyl Trimethylsilyl Acetal": "C[Si](/C=C(OCC)/O[Si](C)(C)C)(C)C"
+"Trimethylsilylmethylmagnesium Chloride": "Cl[Mg]C[Si](C)(C)C"
+"Trimethyltin Chloride": "C[Sn](C)(Cl)C"
+"Triphenylchlorogermane": "Cl[Ge](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"Triphenylsilane": "[SiH](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"Triphenylsilanol": "O[Si](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"Triphenylvinylsilane": "C=C[Si](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"Tris(trimethylsilyloxy)silane": "C[Si](O[SiH](O[Si](C)(C)C)O[Si](C)(C)C)(C)C"
+"Vinylmagnesium Bromide": "Br[Mg]C=C"
+"Vinyltrimethoxysilane": "CO[Si](OC)(C=C)OC"
+"Vinyltrimethylsilane": "C[Si](C)(C=C)C"
+"Vinyltris(2-methoxyethoxy)silane": "COCCO[Si](OCCOC)(C=C)OCCOC"
diff --git a/lib/cdx/below_arrow/org_bases.yaml b/lib/cdx/below_arrow/org_bases.yaml
new file mode 100644
index 0000000000..b21690c00d
--- /dev/null
+++ b/lib/cdx/below_arrow/org_bases.yaml
@@ -0,0 +1,49 @@
+"1,1,3,3-Tetramethylguanidine": "N=C(N(C)C)N(C)C"
+"1,4-Diazabicyclo[2.2.2]octane": "N1(CC2)CCN2CC1"
+"1,5,7-Triazabicyclo[4.4.0]dec-5-ene": "N12CCCN=C1NCCC2"
+"1,5-Diazabicyclo[4.3.0]-5-nonene": "N12CCCN=C1CCC2"
+"1,8-Bis(dimethylamino)naphthalene": "CN(C1=CC=CC2=CC=CC(N(C)C)=C12)C"
+"1,8-Diazabicyclo[5.4.0]-7-undecene": "N12CCCCCC1=NCCC2"
+"2,2,6,6-Tetramethylpiperidine": "CC1(C)CCCC(C)(C)N1"
+"2,6-Lutidine": "CC1=NC(C)=CC=C1"
+"4-Dimethylaminopyridine": "CN(C1=CC=NC=C1)C"
+"7-Methyl-1,5,7-triazabicyclo[4.4.0]dec-5-ene": "CN1C2=NCCCN2CCC1"
+"9-Azajulolidine": "N1(CCC2)CCCC3=CN=CC2=C31"
+"Benzyltrimethylammonium Hydroxide": "C[N+](C)(CC1=CC=CC=C1)C.[OH-]"
+"Butylmagnesium Chloride ": "Cl[Mg]CCCC"
+"Choline ": "OCC[N+](C)(C)C"
+"Dimethylamine": "CNC"
+"Ethylamine ": "NCC"
+"Ethylamine Hydrochloride": "NCC.[H]Cl"
+"Ethylmagnesium Bromide": "Br[Mg]CC"
+"Ethylmagnesium Chloride": "Cl[Mg]CC"
+"Hexadecyltrimethylammonium Hydroxide ": "C[N+](C)(CCCCCCCCCCCCCCCC)C.[OH-]"
+"Hexylmagnesium Bromide": "Br[Mg]CCCCCC"
+"Isobutylmagnesium Bromide": "Br[Mg]CC(C)C"
+"Isopropylmagnesium Chloride": "Cl[Mg]C(C)C"
+"Lithium Bis(trimethylsilyl)amide": "C[Si]([N-][Si](C)(C)C)(C)C.[Li+]"
+"Lithium Diisopropylamide ": "CC([N-]C(C)C)C.[Li+]"
+"Lithium tert-Butoxide ": "CC(C)([O-])C.[Li+]"
+"Methylamine": "NC"
+"Methylmagnesium Bromide": "Br[Mg]C"
+"Methylmagnesium Iodide": "I[Mg]C"
+"N,N-Diisopropylethylamine": "CCN(C(C)C)C(C)C"
+"Pentylmagnesium Bromide": "Br[Mg]CCCCC"
+"Potassium Bis(trimethylsilyl)amide": "C[Si]([N-][Si](C)(C)C)(C)C.[K+]"
+"Potassium tert-Butoxide": "CC(C)([O-])C.[K+]"
+"Potassium tert-Pentoxide": "CCC(C)([O-])C.[K+]"
+"Sodium Bis(trimethylsilyl)amide": "C[Si]([N-][Si](C)(C)C)(C)C.[Na+]"
+"Sodium Ethoxide": "CC[O-].[Na+]"
+"Sodium Methoxide": "C[O-].[Na+]"
+"Sodium tert-Butoxide": "CC(C)([O-])C.[Na+]"
+"Sodium tert-Pentoxide": "CCC(C)([O-])C.[Na+]"
+"tert-Butylmagnesium Chloride": "Cl[Mg]C(C)(C)C"
+"Tetrabutylphosphonium Hydroxide": "CCCC[P+](CCCC)(CCCC)CCCC.[OH-]"
+"Tetraethylammonium Hydroxide": "CC[N+](CC)(CC)CC.[OH-]"
+"Tetrahexylammonium Hydroxide": "CCCCCC[N+](CCCCCC)(CCCCCC)CCCCCC.[OH-]"
+"Tetramethylammonium Hydroxide": "C[N+](C)(C)C.[OH-]"
+"Tetrapropylammonium Hydroxide": "CCC[N+](CCC)(CCC)CCC.[OH-]"
+"Tributylamine": "CCCCN(CCCC)CCCC"
+"Triethylamine": "CCN(CC)CC"
+"Trimethylphenylammonium Hydroxide": "C[N+](C)(C)C1=CC=CC=C1.[OH-]"
+"Tris(hydroxymethyl)aminomethane": "NC(CO)(CO)CO"
diff --git a/lib/cdx/below_arrow/organoboron.yaml b/lib/cdx/below_arrow/organoboron.yaml
new file mode 100644
index 0000000000..230634515c
--- /dev/null
+++ b/lib/cdx/below_arrow/organoboron.yaml
@@ -0,0 +1,39 @@
+"1-Cyclopentenylboronic Acid": "OB(C1=CCCC1)O"
+"2-(2-Bromophenyl)-2,3-dihydro-1H-naphtho[1,8-de][1,3,2]diazaborine": "BrC(C=CC=C1)=C1B(N2)NC3=CC=CC4=C3C2=CC=C4"
+"2-(3-Bromophenyl)-2,3-dihydro-1H-naphtho[1,8-de][1,3,2]diazaborine": "BrC1=CC=CC(B(N2)NC3=CC=CC4=C3C2=CC=C4)=C1"
+"2-(4-Bromophenyl)-2,3-dihydro-1H-naphtho[1,8-de][1,3,2]diazaborine": "BrC1=CC=C(C=C1)B(N2)NC3=CC=CC4=CC=CC2=C43"
+"2-Phenylethylboronic Acid": "OB(CCC1=CC=CC=C1)O"
+"Butylboronic Acid": "CCCCB(O)O"
+"Cyclohexylboronic Acid": "OB(C1CCCCC1)O"
+"Cyclopentylboronic Acid": "OB(C1CCCC1)O"
+"Ethylboronic Acid": "CCB(O)O"
+"Hexylboronic Acid": "CCCCCCB(O)O"
+"Isobutylboronic Acid ": "CC(C)CB(O)O"
+"Isopropylboronic Acid": "CC(B(O)O)C"
+"Methylboronic Acid": "CB(O)O"
+"n-Octylboronic Acid": "CCCCCCCCB(O)O"
+"Pentylboronic Acid": "CCCCCB(O)O"
+"Potassium (2-Formylphenyl)trifluoroborate": "F[B-](F)(C1=CC=CC=C1C=O)F.[K+]"
+"Potassium (2-Methoxyphenyl)trifluoroborate": "F[B-](F)(C1=CC=CC=C1OC)F.[K+]"
+"Potassium (3-Cyanophenyl)trifluoroborate": "F[B-](F)(C1=CC=CC(C#N)=C1)F.[K+]"
+"Potassium (3-Methoxyphenyl)trifluoroborate": "F[B-](F)(C1=CC=CC(OC)=C1)F.[K+]"
+"Potassium (3-Nitrophenyl)trifluoroborate": "F[B-](F)(C1=CC=CC([N+]([O-])=O)=C1)F.[K+]"
+"Potassium (4-Cyanophenyl)trifluoroborate": "F[B-](F)(C1=CC=C(C#N)C=C1)F.[K+]"
+"Potassium (4-Methoxyphenyl)trifluoroborate": "F[B-](F)(C1=CC=C(OC)C=C1)F.[K+]"
+"Potassium (Acetoxymethyl)trifluoroborate": "F[B-](F)(COC(C)=O)F.[K+]"
+"Potassium (Bromomethyl)trifluoroborate": "F[B-](F)(CBr)F.[K+]"
+"Potassium (Iodomethyl)trifluoroborate": "F[B-](F)(CI)F.[K+]"
+"Potassium (Methoxymethyl)trifluoroborate": "F[B-](F)(COC)F.[K+]"
+"Potassium [[(tert-Butoxycarbonyl)amino]methyl]trifluoroborate": "F[B-](F)(CNC(OC(C)(C)C)=O)F.[K+]"
+"Potassium 2-Thienyltrifluoroborate": "F[B-](F)(C1=CC=CS1)F.[K+]"
+"Potassium 3-Pyridyltrifluoroborate": "F[B-](F)(C1=CC=CN=C1)F.[K+]"
+"Potassium 4-Pyridyltrifluoroborate": "F[B-](F)(C1=CC=NC=C1)F.[K+]"
+"Potassium Allyltrifluoroborate": "F[B-](F)(CC=C)F.[K+]"
+"Potassium Cyclopropyltrifluoroborate": "F[B-](F)(C1CC1)F.[K+]"
+"Potassium Phenyltrifluoroborate": "F[B-](F)(C1=CC=CC=C1)F.[K+]"
+"Potassium Trifluoro(trifluoromethyl)borate": "FC([B-](F)(F)F)(F)F.[K+]"
+"Potassium Vinyltrifluoroborate": "F[B-](F)(C=C)F.[K+]"
+"Potassium o-Tolyltrifluoroborate": "F[B-](F)(C1=CC=CC=C1C)F.[K+]"
+"Potassium p-Tolyltrifluoroborate": "F[B-](F)(C1=CC=C(C)C=C1)F.[K+]"
+"Propylboronic Acid": "CCCB(O)O"
+"Sodium (Trihydroxy)phenylborate": "O[B-](O)(O)C1=CC=CC=C1.[Na+]"
diff --git a/lib/cdx/below_arrow/organocatalysts.yaml b/lib/cdx/below_arrow/organocatalysts.yaml
new file mode 100644
index 0000000000..8dd6f9f9fc
--- /dev/null
+++ b/lib/cdx/below_arrow/organocatalysts.yaml
@@ -0,0 +1,126 @@
+"(-)-(5aS,10bR)-5a,10b-Dihydro-2-(2,4,6-trimethylphenyl)-4H,6H-indeno[2,1-b][1,2,4]triazolo[4,3-d][1,4]oxazinium Chloride Monohydrate": "CC1=C(N2N=C3[N+]([C@@]4([H])[C@@](CC5=C4C=CC=C5)([H])OC3)=C2)C(C)=CC(C)=C1.[H]O[H].[Cl-]"
+"(-)-10-Camphorsulfonic Acid": "O=C(CC(C(C)1C)CC2)C21CS(=O)(O)=O"
+"(-)-4,5-Bis[hydroxy(diphenyl)methyl]-2,2-dimethyl-1,3-dioxolane": "CC1(C)OC(C(C2=CC=CC=C2)(O)C3=CC=CC=C3)C(C(C4=CC=CC=C4)(O)C5=CC=CC=C5)O1"
+"(-)-Benzotetramisole": "C12=N[C@@H](C3=CC=CC=C3)CN1C4=CC=CC=C4S2"
+"(+)-(5aR,10bS)-5a,10b-Dihydro-2-(2,4,6-trimethylphenyl)-4H,6H-indeno[2,1-b][1,2,4]triazolo[4,3-d][1,4]oxazinium Chloride Monohydrate": "CC1=C(N2N=C3[N+]([C@]4([H])[C@](CC5=C4C=CC=C5)([H])OC3)=C2)C(C)=CC(C)=C1.[H]O[H].[Cl-]"
+"(+)-10-Camphorsulfonic Acid": "O=C(CC(C(C)1C)CC2)C21CS(=O)(O)=O"
+"(+)-4,5-Bis[hydroxy(diphenyl)methyl]-2,2-dimethyl-1,3-dioxolane": "CC1(C)OC(C(C2=CC=CC=C2)(O)C3=CC=CC=C3)C(C(C4=CC=CC=C4)(O)C5=CC=CC=C5)O1"
+"(+)-4,5-Bis[hydroxy(diphenyl)methyl]-2-methyl-2-phenyl-1,3-dioxolane": "CC1(C2=CC=CC=C2)OC(C(C3=CC=CC=C3)(O)C4=CC=CC=C4)C(C(C5=CC=CC=C5)(O)C6=CC=CC=C6)O1"
+"(11bS)-2,6-Bis[bis[3,5-bis(trifluoromethyl)phenyl]hydroxymethyl]-3,5-dihydrospiro[4H-dinaphth[2,1-c:1',2'-e]azepine-4,4'-morpholinium] Bromide": "OC(C1=C2C(C3=C4C=CC=CC4=CC(C(C5=CC(C(F)(F)F)=CC(C(F)(F)F)=C5)(C6=CC(C(F)(F)F)=CC(C(F)(F)F)=C6)O)=C3C(Br)[N]7(CCOCC7)C2)=C8C=CC=CC8=C1)(C9=CC(C(F)(F)F)=CC(C(F)(F)F)=C9)C%10=CC(C(F)(F)F)=CC(C(F)(F)F)=C%10"
+"(1R,3S,5R,7R,8aS)-7-Ethylhexahydro-1-(6-hydroxy-4-quinolinyl)-3,7-methano-1H-pyrrolo[2,1-c][1,4]oxazine": "OC1=CC=C2N=CC=C([C@H]3O[C@](C4)([H])C[N@@]5[C@@]3([H])C[C@@]4(CC)C5)C2=C1"
+"(2R,5R)-2,5-Diphenylpyrrolidine": "[C@@H]1(C2=CC=CC=C2)N[C@@H](C3=CC=CC=C3)CC1"
+"(2S)-N-[(1S)-1-(Hydroxydiphenylmethyl)-3-methylbutyl]-2-pyrrolidinecarboxamide": "O=C([C@H]1NCCC1)N[C@H](C(C2=CC=CC=C2)(O)C3=CC=CC=C3)CC(C)C"
+"(2S,3aS,7aS)-Octahydro-1H-indole-2-carboxylic Acid": "O=C([C@H]1N[C@@]2([H])CCCC[C@@]2([H])C1)O"
+"(2S,3R)-3,4-Dihydro-3-isopropyl-2-phenyl-2H-pyrimido[2,1-b]benzothiazole": "CC([C@H]1[C@@H](C2=CC=CC=C2)N=C3SC4=CC=CC=C4N3C1)C"
+"(2S,5S)-(-)-2-tert-Butyl-3-methyl-5-benzyl-4-imidazolidinone": "O=C1N(C)[C@@H](C(C)(C)C)N[C@H]1CC2=CC=CC=C2"
+"(2S,5S)-2,5-Diphenylpyrrolidine": "[C@H]1(C2=CC=CC=C2)N[C@H](C3=CC=CC=C3)CC1"
+"(4R,5R)-1,3-Dimethyl-4,5-diphenyl-2-[(S)-1-benzyl-2-hydroxyethylimino]imidazolidine": "OC[C@H](CC1=CC=CC=C1)N=C2N(C)[C@H](C3=CC=CC=C3)[C@@H](C4=CC=CC=C4)N2C"
+"(4S,5S)-1,3-Dimethyl-4,5-diphenyl-2-[(R)-1-benzyl-2-hydroxyethylimino]imidazolidine": "OC[C@@H](CC1=CC=CC=C1)N=C2N(C)[C@@H](C3=CC=CC=C3)[C@H](C4=CC=CC=C4)N2C"
+"(R)-(-)-1-(2-Pyrrolidinylmethyl)pyrrolidine": "N1(C[C@@H]2NCCC2)CCCC1"
+"(R)-(-)-1,1'-Binaphthyl-2,2'-diyl Hydrogen Phosphate": "O=P1(OC2=CC=C3C=CC=CC3=C2C4=C5C=CC=CC5=CC=C4O1)O"
+"(R)-(-)-2-[Hydroxy(diphenyl)methyl]-1-methylpyrrolidine": "CN1[C@@H](C(C2=CC=CC=C2)(O)C3=CC=CC=C3)CCC1"
+"(R)-(-)-6,6'-Dibromo-1,1'-bi-2-naphthol": "OC1=CC=C2C=C(Br)C=CC2=C1C3=C4C=CC(Br)=CC4=CC=C3O"
+"(R)-(+)-1,1'-Bi-2-naphthol": "OC1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3O"
+"(R)-(+)-3,3'-Dibromo-5,5',6,6',7,7',8,8'-octahydro-1,1'-bi-2-naphthol": "OC1=C(Br)C=C2CCCCC2=C1C3=C4CCCCC4=CC(Br)=C3O"
+"(R)-(+)-5,5',6,6',7,7',8,8'-Octahydro-1,1'-bi-2-naphthol": "OC1=CC=C2CCCCC2=C1C3=C4CCCCC4=CC=C3O"
+"(R)-(+)-Indoline-2-carboxylic Acid": "O=C([C@@H]1NC2=C(C=CC=C2)C1)O"
+"(R)-(+)-α,α-Diphenyl-2-pyrrolidinemethanol Trimethylsilyl Ether": "C[Si](OC(C1=CC=CC=C1)(C2=CC=CC=C2)[C@@H]3NCCC3)(C)C"
+"(R)-2-(Methoxymethyl)pyrrolidine": "COC[C@@H]1NCCC1"
+"(R)-3,3'-Dibromo-1,1'-bi-2-naphthol": "OC1=C(Br)C=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC(Br)=C3O"
+"(R)-Benzyl-2-[4-(trifluoromethyl)phenyl]-6,7-dihydro-5H-pyrrolo[2,1-c][1,2,4]triazolium Tetrafluoroborate": "FC(C1=CC=C([N+]2=C(CC3=CC=CC=C3)N4C(CCC4)=N2)C=C1)(F)F.F[B-](F)(F)F"
+"(R,R)-2-Iodo-1,3-bis[1-(mesitylcarbamoyl)ethoxy]benzene": "C[C@H](C(NC1=C(C)C=C(C)C=C1C)=O)OC2=C(I)C(O[C@@H](C(NC3=C(C)C=C(C)C=C3C)=O)C)=CC=C2"
+"(S)-(-)-1,1'-Bi-2-naphthol": "OC1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3O"
+"(S)-(-)-1-Methyl-2-(1-piperidinomethyl)pyrrolidine": "CN1[C@H](CN2CCCCC2)CCC1"
+"(S)-(-)-2-(Diphenylmethyl)pyrrolidine": "[C@H]1(C(C2=CC=CC=C2)C3=CC=CC=C3)NCCC1"
+"(S)-(-)-2-Aminomethyl-1-ethylpyrrolidine": "CCN1[C@H](CN)CCC1"
+"(S)-(-)-3,3'-Dibromo-5,5',6,6',7,7',8,8'-octahydro-1,1'-bi-2-naphthol": "OC1=C(Br)C=C2CCCCC2=C1C3=C4CCCCC4=CC(Br)=C3O"
+"(S)-(-)-5,5',6,6',7,7',8,8'-Octahydro-1,1'-bi-2-naphthol": "OC1=CC=C2CCCCC2=C1C3=C4CCCCC4=CC=C3O"
+"(S)-(-)-Indoline-2-carboxylic Acid": "O=C([C@H]1NC2=C(C=CC=C2)C1)O"
+"(S)-(-)-α,α-Diphenyl-2-pyrrolidinemethanol": "OC(C1=CC=CC=C1)(C2=CC=CC=C2)[C@@H]3CCCN3"
+"(S)-(-)-α,α-Diphenyl-2-pyrrolidinemethanol Trimethylsilyl Ether": "C[Si](OC(C1=CC=CC=C1)(C2=CC=CC=C2)[C@H]3NCCC3)(C)C"
+"(S)-(+)-1-(2-Pyrrolidinylmethyl)pyrrolidine": "N1(C[C@H]2NCCC2)CCCC1"
+"(S)-(+)-1,1'-Binaphthyl-2,2'-diyl Hydrogen Phosphate": "O=P1(OC2=CC=C3C=CC=CC3=C2C4=C5C=CC=CC5=CC=C4O1)O"
+"(S)-(+)-2-(Anilinomethyl)pyrrolidine": "[C@H]1(CNC2=CC=CC=C2)NCCC1"
+"(S)-(+)-2-[Hydroxy(diphenyl)methyl]-1-methylpyrrolidine": "CN1[C@H](C(C2=CC=CC=C2)(O)C3=CC=CC=C3)CCC1"
+"(S)-(+)-6,6'-Dibromo-1,1'-bi-2-naphthol": "OC1=CC=C2C=C(Br)C=CC2=C1C3=C4C=CC(Br)=CC4=CC=C3O"
+"(S)-[4-(Pyridin-4-yl)-4,5-dihydro-3H-dinaphtho[2,1-c:1',2'-e]azepine-2,6-diyl]bis[bis[4-(tert-butyl)phenyl]methanol]": "OC(C1=C2CN(C3=CC=NC=C3)CC4=C(C(C5=CC=C(C(C)(C)C)C=C5)(C6=CC=C(C(C)(C)C)C=C6)O)C=C7C=CC=CC7=C4C2=C8C=CC=CC8=C1)(C9=CC=C(C(C)(C)C)C=C9)C%10=CC=C(C(C)(C)C)C=C%10"
+"(S)-2-(Aminomethyl)pyrrolidine": "NC[C@H]1NCCC1"
+"(S)-2-(Methoxymethyl)pyrrolidine": "COC[C@H]1NCCC1"
+"(S)-2-[(1-Methyl-2-pyrrolidinyl)methyl]isoindoline Dihydrochloride": "CN1[C@H](CN2CC3=C(C=CC=C3)C2)CCC1.[H]Cl.[H]Cl"
+"(S)-3,3'-Dibromo-1,1'-bi-2-naphthol": "OC1=C(Br)C=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC(Br)=C3O"
+"(S)-3-[1-(4-Methoxybenzenesulfonyl)-(4S,5S)-4,5-diphenyl-4,5-dihydro-1H-imidazol-2-yl]-1,1'-binaphthalene-2,2'-diyl Hydrogen Phosphate": "O=P1(OC2=C(C3=N[C@@H](C4=CC=CC=C4)[C@H](C5=CC=CC=C5)N3S(=O)(C6=CC=C(OC)C=C6)=O)C=C7C=CC=CC7=C2C8=C9C=CC=CC9=CC=C8O1)O"
+"(S)-5-(Pyrrolidin-2-yl)-1H-tetrazole": "C1([C@H]2NCCC2)=NN=NN1"
+"(S)-Benzyl-2-[4-(trifluoromethyl)phenyl]-6,7-dihydro-5H-pyrrolo[2,1-c][1,2,4]triazolium Tetrafluoroborate": "FC(C1=CC=C([N+]2=C(CC3=CC=CC=C3)N4C(CCC4)=N2)C=C1)(F)F.F[B-](F)(F)F"
+"1,2,3,4-Tetrahydroquinoline": "C12=C(NCCC2)C=CC=C1"
+"1,4-Dimethyl-1,2,4-triazolium Iodide": "CN1C=N[N+](C)=C1.[I-]"
+"1-[Bis(trifluoromethanesulfonyl)methyl]-2,3,4,5,6-pentafluorobenzene": "FC1=C(C(S(=O)(C(F)(F)F)=O)S(=O)(C(F)(F)F)=O)C(F)=C(F)C(F)=C1F"
+"2,2,6,6-Tetramethylpiperidine 1-Oxyl Free Radical": "CC1(C)CCCC(C)(C)N1[O]"
+"2,4,6-Trimethylpyridinium p-Toluenesulfonate": "CC1=[NH+]C(C)=CC(C)=C1.CC2=CC=C(S(=O)([O-])=O)C=C2"
+"2,4,6-Tris(3,4,5-trifluorophenyl)boroxin": "FC1=C(F)C(F)=CC(B2OB(C3=CC(F)=C(F)C(F)=C3)OB(C4=CC(F)=C(F)C(F)=C4)O2)=C1"
+"2,6-Bis[(2,2,6,6-tetramethyl-1-piperidinyl)methyl]phenylboronic Acid (contains varying amounts of Anhydride)": "OB(C1=C(CN2C(C)(C)CCCC2(C)C)C=CC=C1CN3C(C)(C)CCCC3(C)C)O"
+"2-[(2,2,6,6-Tetramethyl-1-piperidyl)methyl]phenylboronic Acid (contains varying amounts of Anhydride)": "OB(C1=CC=CC=C1CN2C(C)(C)CCCC2(C)C)O"
+"2-Hydroxy-2-azaadamantane": "ON1C2CC3CC(C2)CC1C3"
+"3,5-Bis(trifluoromethyl)phenylboronic Acid (contains varying amounts of Anhydride)": "OB(C1=CC(C(F)(F)F)=CC(C(F)(F)F)=C1)O"
+"4-[2-[2-(4-Iodophenoxy)ethoxy]carbonyl]benzoyloxy-2,2,6,6-tetramethylpiperidin-1-oxyl": "[O]N1C(C)(C)CC(OC(C2=CC=CC=C2C(OCCOC3=CC=C(I)C=C3)=O)=O)CC1(C)C"
+"4-Acetamido-2,2,6,6-tetramethyl-1-oxopiperidinium Tetrafluoroborate": "O=[N+]1C(C)(C)CC(NC(C)=O)CC1(C)C.F[B-](F)(F)F"
+"4-Acetamido-2,2,6,6-tetramethylpiperidine 1-Oxyl Free Radical [Catalyst for Oxidation]": "CC1(C)CC(NC(C)=O)CC(C)(C)N1[O]"
+"4-Hydroxy-2,2,6,6-tetramethylpiperidine 1-Oxyl Benzoate Free Radical [Catalyst for Oxidation]": "CC1(C)CC(OC(C2=CC=CC=C2)=O)CC(C)(C)N1[O]"
+"4-Methoxy-2,2,6,6-tetramethylpiperidine 1-Oxyl Free Radical [Catalyst for Oxidation]": "CC1(C)CC(OC)CC(C)(C)N1[O]"
+"6,10-Dibenzyl-N,N'-dimethyl-N,N,N',N'-tetrakis(4-methylbenzyl)-1,4-dioxaspiro[4.5]decane-(2R,3R)-diylbis(methylammonium) Bis(tetrafluoroborate)": "C[N+](CC1=CC=C(C)C=C1)(CC2=CC=C(C)C=C2)(C)[C@@H]3OC4(C(CC5=CC=CC=C5)CCCC4(CC6=CC=CC=C6)[N+](CC7=CC=C(C)C=C7)(CC8=CC=C(C)C=C8)(C)C)OC3.F[B-](F)(F)F.F[B-](F)(F)F"
+"6,10-Dibenzyl-N,N'-dimethyl-N,N,N',N'-tetrakis(4-methylbenzyl)-1,4-dioxaspiro[4.5]decane-(2S,3S)-diylbis(methylammonium) Tetrafluoroborate": "C[N+](CC1=CC=C(C)C=C1)(CC2=CC=C(C)C=C2)(C)[C@H]3OC4(C(CC5=CC=CC=C5)CCCC4(CC6=CC=CC=C6)[N+](CC7=CC=C(C)C=C7)(CC8=CC=C(C)C=C8)(C)C)OC3.F[B-](F)(F)F.F[B-](F)(F)F"
+"6,7-Dihydro-2-(2,4,6-trimethylphenyl)-5H-pyrrolo[2,1-c]-1,2,4-triazolium Perchlorate": "CC1=C([N+]2=CN3C(CCC3)=N2)C(C)=CC(C)=C1.O=Cl(=O)([O-])=O"
+"Cinchonidine": "O[C@@H]([C@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=CC=C34"
+"Cinchonidine Dihydrochloride": "O[C@@H]([C@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=CC=C34.[H]Cl.[H]Cl"
+"Cinchonidine Sulfate Dihydrate": "O[C@@H]([C@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=CC=C34.O=S(O)(O)=O.[H]O[H].[H]O[H]"
+"Cinchonine": "O[C@H]([C@@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=CC=C34"
+"Cinchonine Hydrochloride Hydrate": "O[C@H]([C@@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=CC=C34.[H]Cl.[H]O[H]"
+"D-(-)-Leucinol": "N[C@H](CC(C)C)CO"
+"D-(+)-Threonine": "N[C@H]([C@@H](O)C)C(O)=O"
+"(R)-5,5-Diphenyl-2-methyl-3,4-propano-1,3,2-oxazaborolidine": "CB1OC(C2=CC=CC=C2)(C3=CC=CC=C3)[C@]4([H])N1CCC4"
+"(S)-5,5-Diphenyl-2-methyl-3,4-propano-1,3,2-oxazaborolidine": "CB1OC(C2=CC=CC=C2)(C3=CC=CC=C3)[C@@]4([H])N1CCC4"
+"D-Alanine": "N[C@H](C)C(O)=O"
+"Dimesitylammonium Pentafluorobenzenesulfonate": "CC1=CC(C)=CC(C)=C1[NH2+]C2=C(C)C=C(C)C=C2C.O=S(C3=C(F)C(F)=C(F)C(F)=C3F)([O-])=O"
+"Diphenylammonium Trifluoromethanesulfonate": "O=S(C(F)(F)F)([O-])=O.C1([NH2+]C2=CC=CC=C2)=CC=CC=C1"
+"Dipotassium (R)-1,1'-Binaphthyl-2,2'-disulfonate": "O=S(C1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3S(=O)([O-])=O)([O-])=O.[K+].[K+]"
+"D-Methionine": "N[C@H](CCSC)C(O)=O"
+"D-Phenylalanine": "N[C@H](CC1=CC=CC=C1)C(O)=O"
+"D-Pipecolic Acid": "O=C(O)C1CCCCN1"
+"D-Proline": "O=C(O)[C@@H]1NCCC1"
+"D-Tryptophan": "N[C@H](CC1=CNC2=C1C=CC=C2)C(O)=O"
+"Ethyl (11bR)-4-Amino-2,6-bis(3,5-di-tert-butylphenyl)-4,5-dihydro-3H-cyclohepta[1,2-a:7,6-a']dinaphthalene-4-carboxylate": "O=C(C1(N)CC2=C(C3=CC(C(C)(C)C)=CC(C(C)(C)C)=C3)C=C4C=CC=CC4=C2C5=C6C=CC=CC6=CC(C7=CC(C(C)(C)C)=CC(C(C)(C)C)=C7)=C5C1)OCC"
+"Hydroquinidine Hydrochloride": "O[C@H]([C@@H]1C[C@H]2[C@H](C[N@@]1CC2)CC)C3=CC=NC4=CC=C(OC)C=C34.[H]Cl"
+"I0801 (S)-4-Isopropyl-3-(1-naphthylmethyl)-2,5,5-triphenyl-1,3,2-oxazaborolidine (ca. 6% in Toluene, ca. 0.1mol/L)": "CC([C@@H]1N(CC2=C3C=CC=CC3=CC=C2)B(C4=CC=CC=C4)OC1(C5=CC=CC=C5)C6=CC=CC=C6)C"
+"Indoline": "C12=C(NCC2)C=CC=C1"
+"L-(-)-Threonine": "N[C@@H]([C@H](O)C)C(O)=O"
+"L-(+)-Leucinol": "N[C@@H](CC(C)C)CO"
+"L-Alanine": "N[C@@H](C)C(O)=O"
+"L-Azetidine-2-carboxylic Acid [Antagonist of L-Proline]": "O=C(C1NCC1)O"
+"L-Methionine": "N[C@@H](CCSC)C(O)=O"
+"L-Phenylalanine": "N[C@@H](CC1=CC=CC=C1)C(O)=O"
+"L-Pipecolic Acid": "O=C(O)C1CCCCN1"
+"L-Prolinamide": "O=C(N)[C@H]1NCCC1"
+"L-Proline": "O=C(O)[C@H]1NCCC1"
+"L-Thioproline": "O=C(O)[C@H]1NCCC1=S"
+"L-Tryptophan": "N[C@@H](CC1=CNC2=C1C=CC=C2)C(O)=O"
+"N-(2-Thiophenesulfonyl)-L-prolinamide": "O=C(NS(=O)(C1=CC=CS1)=O)[C@H]2NCCC2"
+"N-(9-Deoxy-epi-cinchonidin-9-yl)picolinamide": "O=C(N[C@H]([C@H]1N2CCC(C1)C(C=C)C2)C3=CC=NC4=CC=CC=C34)C5=NC=CC=C5"
+"N-(9-Deoxy-epi-cinchonin-9-yl)picolinamide": "O=C(N[C@@H](C1N2CCC(C1)C(C=C)C2)C3=CC=NC4=CC=CC=C34)C5=NC=CC=C5"
+"N-[(11bS)-4,5-Dihydro-3H-dinaphtho[2,1-c:1',2'-e]azepin-2-yl]trifluoromethanesulfonamide": "O=S(C(F)(F)F)(NC1=C2CNCC3=CC=C4C=CC=CC4=C3C2=C5C=CC=CC5=C1)=O"
+"N-[(9S)-8α-Cinchonan-9-yl]quinoline-8-sulfonamide": "O=S(C1=C2N=CC=CC2=CC=C1)(N[C@H]([C@@H]3C[C@H]4[C@H](C[N@@]3CC4)C=C)C5=CC=NC6=CC=CC=C56)=O"
+"N-Benzylcinchonidinium Chloride [Chiral Phase-Transfer Catalyst]": "O[C@@H]([C@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=[N+](CC4=CC=CC=C4)C5=CC=CC=C35.[Cl-]"
+"N-Benzylcinchoninium Chloride [Chiral Phase-Transfer Catalyst]": "O[C@H]([C@@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=[N+](CC4=CC=CC=C4)C5=CC=CC=C35.[Cl-]"
+"N-Benzylquinidinium Chloride [Chiral Phase-Transfer Catalyst]": "O[C@H]([C@@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=[N+](CC4=CC=CC=C4)C5=CC=C(OC)C=C35.[Cl-]"
+"N-Benzylquininium Chloride [Chiral Phase-Transfer Catalyst]": "O[C@@H]([C@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=[N+](CC4=CC=CC=C4)C5=CC=C(OC)C=C35.[Cl-]"
+"O-TBDPS-D-Thr-N-Boc-L-tert-Leu-Diphenylphosphine": "O=C(OC(C)(C)C)N[C@@H](C(C)(C)C)C(N[C@H]([C@@H](O[Si](C1=CC=CC=C1)(C(C)(C)C)C2=CC=CC=C2)C)CP(C3=CC=CC=C3)C4=CC=CC=C4)=O"
+"O-tert-Butyl-L-threonine": "N[C@@H]([C@H](OC(C)(C)C)C)C(O)=O"
+"Pentafluoroanilinium Trifluoromethanesulfonate": "F[N+](F)(F)C1=CC=CC(F)=C1F.O=S(C(F)(F)F)([O-])=O"
+"Pyridinium 3-Nitrobenzenesulfonate": "O=S(C1=CC=CC([N+]([O-])=O)=C1)([O-])=O.C2=CC=CC=[NH+]2"
+"Quincoridine": "OC[C@H]1C[C@@H]2CC[N@]1C[C@@H]2C=C"
+"Quincorine": "OC[C@@H]1C[C@@H]2CC[N@]1C[C@@H]2C=C"
+"Quinidine": "O[C@H]([C@@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=C(OC)C=C34"
+"Quinidine Sulfate Dihydrate": "O[C@H]([C@@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=C(OC)C=C34.O=S(O)(O)=O.[H]O[H].[H]O[H]"
+"Quinine": "O[C@@H]([C@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=C(OC)C=C34"
+"Quinine Hydrochloride Dihydrate": "O[C@@H]([C@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=C(OC)C=C34.[H]Cl.[H]O[H].[H]O[H]"
+"trans-4-(tert-Butyldiphenylsilyloxy)-L-proline": "O=C(O)[C@H]1NC[C@H](O[Si](C2=CC=CC=C2)(C(C)(C)C)C3=CC=CC=C3)C1"
+"trans-4-Fluoro-L-proline": "O=C(O)[C@H]1NC[C@H](F)C1"
+"α-Methyl-L-proline": "O=C(O)[C@@]1(C)NCCC1"
diff --git a/lib/cdx/below_arrow/oxidation.yaml b/lib/cdx/below_arrow/oxidation.yaml
new file mode 100644
index 0000000000..8604ca3ceb
--- /dev/null
+++ b/lib/cdx/below_arrow/oxidation.yaml
@@ -0,0 +1,41 @@
+"[Bis(trifluoroacetoxy)iodo]pentafluorobenzene": "FC1=C(I(OC(C(F)(F)F)=O)OC(C(F)(F)F)=O)C(F)=C(F)C(F)=C1F"
+"[Hydroxy(tosyloxy)iodo]benzene": "O=S(OI(C1=CC=CC=C1)O)(C2=CC=C(C)C=C2)=O"
+"1-Acetoxy-5-bromo-1,2-benziodoxol-3(1H)-one": "O=C1OI(OC(C)=O)C2=CC=C(Br)C=C12"
+"2,2,6,6-Tetramethylpiperidine 1-Oxyl Free Radical": "CC1(C)CCCC(C)(C)N1[O]"
+"2-Hydroxy-2-azaadamantane": "ON1C2CC3CC(C2)CC1C3"
+"2-Iodosobenzoic Acid": "O=C(O)C1=CC=CC=C1I=O"
+"2-Iodoxybenzoic Acid": "O=C(O)C1=CC=CC=C1I(=O)=O"
+"4-[2-[2-(4-Iodophenoxy)ethoxy]carbonyl]benzoyloxy-2,2,6,6-tetramethylpiperidin-1-oxyl": "[O]N1C(C)(C)CC(OC(C2=CC=CC=C2C(OCCOC3=CC=C(I)C=C3)=O)=O)CC1(C)C"
+"4-Acetamido-2,2,6,6-tetramethyl-1-oxopiperidinium Tetrafluoroborate": "O=[N+]1C(C)(C)CC(NC(C)=O)CC1(C)C.F[B-](F)(F)F"
+"4-Methylmorpholine N-Oxide": "C[N+]1([O-])CCOCC1"
+"Ammonium Cerium(IV) Nitrate": "[O-][N+]([O-])=O.[O-][N+]([O-])=O.[O-][N+]([O-])=O.[O-][N+]([O-])=O.[O-][N+]([O-])=O.[NH4+].[Ce+4]"
+"Bis(pyridine)iodonium Tetrafluoroborate": "[IH+]C1=NC=CC=C1.F[B-](F)(F)F.C2=NC=CC=C2"
+"Bis(tetrabutylammonium) Dichromate": "CCCC[N+](CCCC)(CCCC)CCCC.CCCC[N+](CCCC)(CCCC)CCCC.O=[Cr]([O-])(O[Cr](=O)([O-])=O)=O"
+"Chloramine T Trihydrate": "CC1=CC=C(S(=O)([N-]Cl)=O)C=C1.[H]O[H].[H]O[H].[H]O[H].[Na+]"
+"Chloranil": "O=C(C(Cl)=C1Cl)C(Cl)=C(Cl)C1=O"
+"Cumene Hydroperoxide": "CC(C1=CC=C(OO)C=C1)C"
+"Dess-Martin Periodinane": "CC(OI1(OC(C)=O)(OC(C)=O)c2ccccc2C(O1)=O)=O"
+"Dichloramine T": "CC1=CC=C(S(=O)([N-]Cl)=O)C=C1.[Na+]"
+"Di-tert-butyl Peroxide": "CC(OOC(C)(C)C)(C)C"
+"Iodobenzene Diacetate": "IC1=CC=CC=C1.CC(O)=O.CC(O)=O"
+"Iodomesitylene Diacetate": "CC1=C(I)C(C)=CC(C)=C1.CC(O)=O.CC(O)=O"
+"N-tert-Butylbenzenesulfenamide": "CC(NSC1=CC=CC=C1)(C)C"
+"N-tert-Butylbenzenesulfinimidoyl Chloride ": "CC(/N=S(Cl)/C1=CC=CC=C1)(C)C"
+"Oxalyl Chloride": "O=C(Cl)C(Cl)=O"
+"Phosphomolybdic Acid Ethanol Solution": "O=[Mo](OP(O)(O)=O)(O)=O.CCO"
+"Phosphomolybdic Acid Hydrate": "O=[Mo](OP(O)(O)=O)(O)=O.[H]O[H]"
+"Pyridine - Sulfur Trioxide Complex": "O=S(=O)=O.C1=CC=NC=C1"
+"Pyridinium Chlorochromate": "[O-][Cr](=O)(Cl)=O.C1=CC=CC=[NH+]1"
+"Pyridinium Dichromate": "O=[Cr]([O-])(O[Cr](=O)([O-])=O)=O.C1=CC=CC=[NH+]1.C2=CC=CC=[NH+]2"
+"Pyridinium Fluorochromate": "[O-][Cr](=O)(F)=O.C1=CC=CC=[NH+]1"
+"Quinolinium Dichromate": "O=[Cr]([O-])(O[Cr](=O)([O-])=O)=O.C12=CC=C[NH+]=C1C=CC=C2.C34=CC=C[NH+]=C3C=CC=C4"
+"Silver(II) Pyridine-2-carboxylate": "O=C(C1=NC=CC=C1)[O-].O=C(C2=NC=CC=C2)[O-].[Ag+2]"
+"Sodium Dichloroisocyanurate": "ClN1C([N-]C(N(C1=O)Cl)=O)=O.[Na+]"
+"Sodium Hypochlorite Pentahydrate": "Cl[O-].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[Na+]"
+"Sulfur Trioxide - Triethylamine Complex": "O=S(=O)=O.CCN(CC)CC"
+"tert-Butyl Hydroperoxide ": "CC(C)(OO)C"
+"Tetracyanoethylene": "N#CC(C#N)=C(C#N)C#N"
+"Tetrapropylammonium Perruthenate": "CCC[N+](CCC)(CCC)CCC.O=[Ru](=O)([O-])=O"
+"Trimethylamine N-Oxide Anhydrous": "C[N+](C)([O-])C"
+"Trimethylamine N-Oxide Dihydrate": "C[N+](C)([O-])C.[H]O[H].[H]O[H]"
+"Trisodium Paraperiodate": "O=I([O-])([O-])(O)(O)[O-].[Na+].[Na+].[Na+]"
diff --git a/lib/cdx/below_arrow/phase_transfer_reagents.yaml b/lib/cdx/below_arrow/phase_transfer_reagents.yaml
new file mode 100644
index 0000000000..fc6d87922e
--- /dev/null
+++ b/lib/cdx/below_arrow/phase_transfer_reagents.yaml
@@ -0,0 +1,113 @@
+"(Ferrocenylmethyl)dodecyldimethylammonium Bromide": "C[N+](CCCCCCCCCCCC)(C)Cc1cccc1.[Del][Fe][Del].[Br-].c2cccc2"
+"(Ferrocenylmethyl)trimethylammonium Bromide": "C[N+](C)(C)Cc1cccc1.[Del][Fe][Del].[Br-].c2cccc2"
+"4-Dimethylamino-1-neopentylpyridinium Chloride": "CC(C)(C)C[N+]1=CC=C(N(C)C)C=C1.[Cl-]"
+"Benzylcetyldimethylammonium Chloride Hydrate": "C[N+](CCCCCCCCCCCCCCCC)(CC1=CC=CC=C1)C.[H]O[H].[Cl-]"
+"Benzyldimethyltetradecylammonium Chloride Hydrate": "CCCCCCCCCCCCCC[N+](C)(CC1=CC=CC=C1)C.[H]O[H].[Cl-]"
+"Benzyldodecyldimethylammonium Bromide": "C[N+](CCCCCCCCCCCC)(CC1=CC=CC=C1)C.[Br-]"
+"Benzyldodecyldimethylammonium Chloride Dihydrate": "C[N+](CCCCCCCCCCCC)(CC1=CC=CC=C1)C.[H]O[H].[H]O[H].[Cl-]"
+"Benzyltributylammonium Bromide": "CCCC[N+](CCCC)(CC1=CC=CC=C1)CCCC.[Br-]"
+"Benzyltributylammonium Chloride": "CCCC[N+](CCCC)(CC1=CC=CC=C1)CCCC.[Cl-]"
+"Benzyltriethylammonium Bromide": "CC[N+](CC)(CC1=CC=CC=C1)CC.[Br-]"
+"Benzyltriethylammonium Chloride": "CC[N+](CC)(CC1=CC=CC=C1)CC.[Cl-]"
+"Benzyltriethylammonium Iodide": "CC[N+](CC)(CC1=CC=CC=C1)CC.[I-]"
+"Benzyltrimethylammonium Bromide": "C[N+](C)(CC1=CC=CC=C1)C.[Br-]"
+"Benzyltrimethylammonium Chloride": "C[N+](C)(CC1=CC=CC=C1)C.[Cl-]"
+"Benzyltrimethylammonium Dichloroiodate": "C[N+](C)(CC1=CC=CC=C1)C.Cl[I-]Cl"
+"Bis(2-hydroxyethyl)dimethylammonium Chloride": "C[N+](CCO)(CCO)C.[Cl-]"
+"Bromocholine Bromide": "BrCC[N+](C)(C)C.[Br-]"
+"Carbamylcholine Chloride": "C[N+](C)(C)CCOC(N)=O.[Cl-]"
+"Chlorocholine Chloride": "ClCC[N+](C)(C)C.[Cl-]"
+"Choline Chloride": "OCC[N+](C)(C)C.[Cl-]"
+"Decyltrimethylammonium Bromide": "C[N+](C)(CCCCCCCCCC)C.[Br-]"
+"Decyltrimethylammonium Chloride": "C[N+](C)(CCCCCCCCCC)C.[Cl-]"
+"Diallyldimethylammonium Chloride": "C[N+](CC=C)(CC=C)C.[Cl-]"
+"Didecyldimethylammonium Bromide": "C[N+](CCCCCCCCCC)(CCCCCCCCCC)C.[Br-]"
+"Didodecyldimethylammonium Chloride": "C[N+](CCCCCCCCCCCC)(CCCCCCCCCCCC)C.[Cl-]"
+"Dilauryldimethylammonium Bromide": "C[N+](CCCCCCCCCCCC)(CCCCCCCCCCCC)C.[Br-]"
+"Dimethyldimyristylammonium Bromide": "CCCCCCCCCCCCCC[N+](C)(C)CCCCCCCCCCCCCC.[Br-]"
+"Dimethyldioctadecylammonium Bromide": "CCCCCCCCCCCCCCCCCC[N+](C)(C)CCCCCCCCCCCCCCCCCC.[Br-]"
+"Dimethyldioctadecylammonium Iodide": "CCCCCCCCCCCCCCCCCC[N+](C)(C)CCCCCCCCCCCCCCCCCC.[I-]"
+"Dimethyldioctylammonium Bromide": "CCCCCCCC[N+](C)(C)CCCCCCCC.[Br-]"
+"Dimethyldipalmitylammonium Bromide": "CCCCCCCCCCCCCCCC[N+](C)(C)CCCCCCCCCCCCCCCC.[Br-]"
+"Dodecyltrimethylammonium Bromide": "C[N+](C)(CCCCCCCCCCCC)C.[Br-]"
+"Dodecyltrimethylammonium Chloride": "C[N+](C)(CCCCCCCCCCCC)C.[Cl-]"
+"Ethyltrimethylammonium Iodide": "C[N+](C)(CC)C.[I-]"
+"Hexadecyltrimethylammonium Bromide": "C[N+](C)(CCCCCCCCCCCCCCCC)C.[Br-]"
+"Hexadecyltrimethylammonium Chloride": "C[N+](C)(CCCCCCCCCCCCCCCC)C.[Cl-]"
+"Hexyltrimethylammonium Bromide": "C[N+](C)(CCCCCC)C.[Br-]"
+"Methyltri-n-octylammonium Chloride": "CCCCCCCC[N+](CCCCCCCC)(C)CCCCCCCC.[Cl-]"
+"Methyltri-n-octylammonium Hydrogen Sulfate": "CCCCCCCC[N+](CCCCCCCC)(C)CCCCCCCC.O=S(O)([O-])=O"
+"n-Octyltrimethylammonium Bromide": "C[N+](C)(CCCCCCCC)C.[Br-]"
+"n-Octyltrimethylammonium Chloride": "C[N+](C)(CCCCCCCC)C.[Cl-]"
+"Tetra(decyl)ammonium Bromide": "CCCCCCCCCC[N+](CCCCCCCCCC)(CCCCCCCCCC)CCCCCCCCCC.[Br-]"
+"Tetraamylammonium Bromide": "CCCCC[N+](CCCCC)(CCCCC)CCCCC.[Br-]"
+"Tetraamylammonium Chloride": "CCCCC[N+](CCCCC)(CCCCC)CCCCC.[Cl-]"
+"Tetrabutylammonium Acetate": "CCCC[N+](CCCC)(CCCC)CCCC.CC([O-])=O"
+"Tetrabutylammonium Bifluoride": "CCCC[N+](CCCC)(CCCC)CCCC.[H]F.[F-]"
+"Tetrabutylammonium Bromide": "CCCC[N+](CCCC)(CCCC)CCCC.[Br-]"
+"Tetrabutylammonium Chloride": "CCCC[N+](CCCC)(CCCC)CCCC.[Cl-]"
+"Tetrabutylammonium Hexafluorophosphate": "CCCC[N+](CCCC)(CCCC)CCCC.F[P-](F)(F)(F)(F)F"
+"Tetrabutylammonium Hydrogen Sulfate": "CCCC[N+](CCCC)(CCCC)CCCC.O=S(O)([O-])=O"
+"Tetrabutylammonium Iodide": "CCCC[N+](CCCC)(CCCC)CCCC.[I-]"
+"Tetrabutylammonium Perchlorate": "CCCC[N+](CCCC)(CCCC)CCCC.O=Cl(=O)([O-])=O"
+"Tetrabutylammonium Tetrafluoroborate": "CCCC[N+](CCCC)(CCCC)CCCC.F[B-](F)(F)F"
+"Tetrabutylammonium Tetraphenylborate": "CCCC[N+](CCCC)(CCCC)CCCC.C1([B-](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1"
+"Tetrabutylammonium Thiocyanate": "CCCC[N+](CCCC)(CCCC)CCCC.[S-]C#N"
+"Tetrabutylammonium Tribromide": "CCCC[N+](CCCC)(CCCC)CCCC.[Br-].[Br-].[Br-]"
+"Tetrabutylammonium Trifluoromethanesulfonate": "CCCC[N+](CCCC)(CCCC)CCCC.O=S(C(F)(F)F)([O-])=O"
+"Tetrabutylammonium Triiodide": "CCCC[N+](CCCC)(CCCC)CCCC.[I-].[I-].[I-]"
+"Tetrabutylphosphonium Bromide": "CCCC[P+](CCCC)(CCCC)CCCC.[Br-]"
+"Tetrabutylphosphonium Chloride": "CCCC[P+](CCCC)(CCCC)CCCC.[Cl-]"
+"Tetrabutylphosphonium Hexafluorophosphate": "CCCC[P+](CCCC)(CCCC)CCCC.F[P-](F)(F)(F)(F)F"
+"Tetrabutylphosphonium Tetrafluoroborate": "CCCC[P+](CCCC)(CCCC)CCCC.F[B-](F)(F)F"
+"Tetradecyltrimethylammonium Bromide": "C[N+](C)(CCCCCCCCCCCCCC)C.[Br-]"
+"Tetraethylammonium Bromide": "CC[N+](CC)(CC)CC.[Br-]"
+"Tetraethylammonium Chloride": "CC[N+](CC)(CC)CC.[Cl-]"
+"Tetraethylammonium Iodide": "CC[N+](CC)(CC)CC.[I-]"
+"Tetraethylammonium Nitrate": "CC[N+](CC)(CC)CC.[O-][N+]([O-])=O"
+"Tetraethylammonium Tetrafluoroborate": "CC[N+](CC)(CC)CC.F[B-](F)(F)F"
+"Tetraethylammonium Trifluoromethanesulfonate": "CC[N+](CC)(CC)CC.O=S(C(F)(F)F)([O-])=O"
+"Tetraethylammonium p-Toluenesulfonate": "CC[N+](CC)(CC)CC.CC1=CC=C(S(=O)([O-])=O)C=C1"
+"Tetraethylphosphonium Bromide": "CC[P+](CC)(CC)CC.[Br-]"
+"Tetraethylphosphonium Hexafluorophosphate": "CC[P+](CC)(CC)CC.F[P-](F)(F)(F)(F)F"
+"Tetraethylphosphonium Tetrafluoroborate": "CC[P+](CC)(CC)CC.F[B-](F)(F)F"
+"Tetraheptylammonium Bromide": "CCCCCCC[N+](CCCCCCC)(CCCCCCC)CCCCCCC.[Br-]"
+"Tetraheptylammonium Iodide": "CCCCCCC[N+](CCCCCCC)(CCCCCCC)CCCCCCC.[I-]"
+"Tetrahexylammonium Bromide": "CCCCCC[N+](CCCCCC)(CCCCCC)CCCCCC.[Br-]"
+"Tetrahexylammonium Hydrogen Sulfate": "CCCCCC[N+](CCCCCC)(CCCCCC)CCCCCC.O=S(O)([O-])=O"
+"Tetrahexylammonium Iodide": "CCCCCC[N+](CCCCCC)(CCCCCC)CCCCCC.[I-]"
+"Tetrakis(hydroxymethyl)phosphonium Chloride": "OC[P+](CO)(CO)CO.[Cl-]"
+"Tetrakis(hydroxymethyl)phosphonium Sulfate ": "OC[P+](CO)(CO)CO.OC[P+](CO)(CO)CO.O=S([O-])([O-])=O"
+"Tetramethylammonium Acetate": "C[N+](C)(C)C.CC([O-])=O"
+"Tetramethylammonium Acetate ": "C[N+](C)(C)C.CC([O-])=O"
+"Tetramethylammonium Bromide": "C[N+](C)(C)C.[Br-]"
+"Tetramethylammonium Chloride": "C[N+](C)(C)C.[Cl-]"
+"Tetramethylammonium Hexafluorophosphate": "C[N+](C)(C)C.F[P-](F)(F)(F)(F)F"
+"Tetramethylammonium Iodide": "C[N+](C)(C)C.[I-]"
+"Tetramethylammonium Sulfate": "C[N+](C)(C)C.C[N+](C)(C)C.O=S([O-])([O-])=O"
+"Tetramethylammonium Tetrafluoroborate": "C[N+](C)(C)C.F[B-](F)(F)F"
+"Tetra-n-octylammonium Bromide": "CCCCCCCC[N+](CCCCCCCC)(CCCCCCCC)CCCCCCCC.[Br-]"
+"Tetra-n-octylammonium Iodide": "CCCCCCCC[N+](CCCCCCCC)(CCCCCCCC)CCCCCCCC.[I-]"
+"Tetra-n-octylphosphonium Bromide": "CCCCCCCC[P+](CCCCCCCC)(CCCCCCCC)CCCCCCCC.[Br-]"
+"Tetraphenylphosphonium Bromide": "C1([P+](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1.[Br-]"
+"Tetraphenylphosphonium Chloride": "C1([P+](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1.[Cl-]"
+"Tetrapropylammonium Bromide": "CCC[N+](CCC)(CCC)CCC.[Br-]"
+"Tetrapropylammonium Chloride": "CCC[N+](CCC)(CCC)CCC.[Cl-]"
+"Tetrapropylammonium Iodide": "CCC[N+](CCC)(CCC)CCC.[I-]"
+"trans-2-Butene-1,4-bis(triphenylphosphonium Chloride)": "C1([P+](C/C=C/C[P+](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6)=CC=CC=C1.[Cl-].[Cl-]"
+"Tributyl(cyanomethyl)phosphonium Chloride": "N#CC[P+](CCCC)(CCCC)CCCC.[Cl-]"
+"Tributyldodecylphosphonium Bromide": "CCCCCCCCCCCC[P+](CCCC)(CCCC)CCCC.[Br-]"
+"Tributylhexadecylphosphonium Bromide": "CCCCCCCCCCCCCCCC[P+](CCCC)(CCCC)CCCC.[Br-]"
+"Tributylmethylammonium Chloride": "C[N+](CCCC)(CCCC)CCCC.[Cl-]"
+"Tributyl-n-octylphosphonium Bromide": "CCCCCCCC[P+](CCCC)(CCCC)CCCC.[Br-]"
+"Triethylmethylammonium Chloride": "C[N+](CC)(CC)CC.[Cl-]"
+"Triethylphenylammonium Chloride": "CC[N+](CC)(CC)C1=CC=CC=C1.[Cl-]"
+"Trimethyl[2-[(trimethylsilyl)methyl]benzyl]ammonium Iodide": "C[Si](CC1=CC=CC=C1C[N+](C)(C)C)(C)C.[I-]"
+"Trimethylnonylammonium Bromide": "CCCCCCCCC[N+](C)(C)C.[Br-]"
+"Trimethylphenylammonium Bromide": "C[N+](C)(C)C1=CC=CC=C1.[Br-]"
+"Trimethylphenylammonium Chloride": "C[N+](C)(C)C1=CC=CC=C1.[Cl-]"
+"Trimethylphenylammonium Tribromide": "C[N+](C)(C)C1=CC=CC=C1.[Br-].[Br-].[Br-]"
+"Trimethylpropylammonium Bromide": "CCC[N+](C)(C)C.[Br-]"
+"Trimethylstearylammonium Bromide": "CCCCCCCCCCCCCCCCCC[N+](C)(C)C.[Br-]"
+"Trimethyltetradecylammonium Chloride": "CCCCCCCCCCCCCC[N+](C)(C)C.[Cl-]"
+"Trioctylmethylammonium Chloride": "C[N+](CCCCCCCC)(CCCCCCCC)CCCCCCCC.[Cl-]"
diff --git a/lib/cdx/below_arrow/reducing_reagents.yaml b/lib/cdx/below_arrow/reducing_reagents.yaml
new file mode 100644
index 0000000000..33857a2cd2
--- /dev/null
+++ b/lib/cdx/below_arrow/reducing_reagents.yaml
@@ -0,0 +1,46 @@
+"1,2-Bis(tert-butylthio)ethane Borane": "CC(SCCSC(C)(C)C)(C)C.B"
+"Benzyltriethylammonium Borohydride": "CC[N+](CC)(CC1=CC=CC=C1)CC.[BH4-]"
+"Borane - 2-Methylpyridine Complex": "CC1=NC=CC=C1.B"
+"Borane - 5-Ethyl-2-methylpyridine Complex": "CC1=NC=C(CC)C=C1.B"
+"Borane - Ammonia Complex": "B.N"
+"Borane - Diisopropylamine Complex": "CC(C)NC(C)C.B"
+"Borane - Morpholine Complex": "O1CCNCC1.B"
+"Borane - Pyridine Complex": "C1=CN=CC=C1.B"
+"Borane - Tetrahydrofuran Complex": "B.C1COCC1"
+"Borane -Â tert-Butylamine Complex": "NC(C)(C)C.B"
+"Dicyclohexylamine Borane": "C1(NC2CCCCC2)CCCCC1.B"
+"Diethyl 1,4-Dihydro-2,6-dimethyl-3,5-pyridinedicarboxylate": "O=C(C1=C(C)NC(C)=C(C(OCC)=O)C1)OCC"
+"Dimethyl Sulfide Borane": "CSC.B"
+"Dimethylamine Borane": "CNC.B"
+"Di-tert-butyl 1,4-Dihydro-2,6-dimethyl-3,5-pyridinedicarboxylate": "O=C(C1=C(C)NC(C)=C(C(OC(C)(C)C)=O)C1)OC(C)(C)C"
+"DL-Dithiothreitol": "SC[C@H]([C@@H](CO)O)S"
+"Ethyl Chloroglyoxylate": "O=C(Cl)C(OCC)=O"
+"Lithium Aluminum Hydride": "[Li+].[Al+3].[H-].[H-].[H-].[H-]"
+"Lithium Borohydride ": "[Li+].[BH4-]"
+"Lithium Triethylborohydride": "CC[BH-](CC)CC.[Li+]"
+"Lithium Tri-tert-butoxyaluminum Hydride": "CC(O[Al](OC(C)(C)C)OC(C)(C)C)(C)C.[Li+].[H-]"
+"Methyl Chloroglyoxylate": "O=C(Cl)C(OC)=O"
+"N,N-Diethylaniline Borane": "CCN(CC)C1=CC=CC=C1.B"
+"N'-Isopropylidene-2-nitrobenzenesulfonohydrazide": "O=S(C1=CC=CC=C1[N+]([O-])=O)(NN=C(C)C)=O"
+"Potassium Bis(1-pyrazolyl)borohydride": "N1([BH2-]N2N=CC=C2)N=CC=C1.[K+]"
+"Potassium Borohydride": "[K+].[BH4-]"
+"Potassium Tris(1-pyrazolyl)borohydride": "[BH-](N1N=CC=C1)(N2N=CC=C2)N3N=CC=C3.[K+]"
+"Samarium(II) Iodide": "[Sm+2].[I-].[I-]"
+"Sodium Bis(2-methoxyethoxy)aluminum Dihydride": "COCCO[Al+]OCCOC.[Na+].[H-].[H-]"
+"Sodium Borohydride": "[Na+].[BH4-]"
+"Sodium Cyanoborohydride [Reducing Agent]": "[BH3-]C#N.[Na+]"
+"Sodium Hydride": "[Na+].[H-]"
+"Sodium Triacetoxyborohydride": "O=C(O[BH-](OC(C)=O)OC(C)=O)C.[Na+]"
+"Sodium Tris(1,1,1,3,3,3-hexafluoroisopropoxy)borohydride": "FC(F)(C(C(F)(F)F)O[BH-](OC(C(F)(F)F)C(F)(F)F)OC(C(F)(F)F)C(F)(F)F)F.[Na+]"
+"Tetrabutylammonium Borohydride": "CCCC[N+](CCCC)(CCCC)CCCC.[BH4-]"
+"Tetraethylammonium Borohydride": "CC[N+](CC)(CC)CC.[BH4-]"
+"Tetramethylammonium Borohydride": "C[N+](C)(C)C.[BH4-]"
+"Tetramethylammonium Triacetoxyborohydride": "C[N+](C)(C)C.O=C(O[BH-](OC(C)=O)OC(C)=O)C"
+"Triethylamine Borane": "CCN(CC)CC.B"
+"Triethylsilane": "CC[SiH](CC)CC"
+"Triisopropylsilane": "CC([SiH](C(C)C)C(C)C)C"
+"Trimethylamine Borane": "CN(C)C.B"
+"Triphenylphosphine Borane": "P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.B"
+"Triphenylsilane": "[SiH](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"Tris(2-carboxyethyl)phosphine Hydrochloride": "O=C(CCP(CCC(O)=O)CCC(O)=O)O.[H]Cl"
+"Zirconocene Chloride Hydride": "[Del][Zr+2][Del].c1cccc1.c2cccc2.[Cl-].[H-]"
diff --git a/lib/cdx/below_arrow/solvents.yaml b/lib/cdx/below_arrow/solvents.yaml
new file mode 100644
index 0000000000..959658c1c9
--- /dev/null
+++ b/lib/cdx/below_arrow/solvents.yaml
@@ -0,0 +1,14 @@
+THF: 'C1CCCO1'
+DMF: 'CN(C)C=O'
+DMSO: 'CS(C)=O'
+Chloroform: 'ClC(Cl)Cl'
+'methylene chloride': 'ClCCl'
+acetone: 'CC(C)=O'
+'1,4-dioxane': 'C1COCCO1'
+'ethyl acetate': 'CC(OCC)=O'
+'n-hexane': 'CCCCCC'
+cyclohexane: 'C1CCCCC1'
+'diethyl ether': 'CCOCC'
+methanol: 'CO'
+ethanol: 'OCC'
+water: '[H]O[H]'
diff --git a/lib/cdx/parser/abbreviations.yaml b/lib/cdx/parser/abbreviations.yaml
new file mode 100644
index 0000000000..c097f73dbf
--- /dev/null
+++ b/lib/cdx/parser/abbreviations.yaml
@@ -0,0 +1,3143 @@
+# List of Abbreviations and SMILES
+'ACN': 'CC#N'
+'AcOH': 'CC(O)=O'
+'t-BuOH': 'CC(C)(O)C'
+'DCC': 'C1CCC(CC1)N=C=NC2CCCCC2'
+'DIC': 'CC(C)N=C=NC(C)C'
+'DCM': 'ClCCl'
+'DMA': 'CC(N(C)C)=O'
+'DMF': 'O=CN(C)C'
+'DMPU': 'O=C(N1)NC(C)(C)C1C'
+'DMSO': 'O=S(C)C'
+'EDC': 'CCN=C=NCCCN(C)C'
+'EDCI': 'CCN=C=NCCCN(C)C'
+'EDAC': 'CCN=C=NCCCN(C)C'
+'EtOH': 'CCO'
+'HATU': 'CN(C)C(=[N+](C)C)ON1C2=C(C=CC=N2)N=N1.F[P-](F)(F)(F)(F)F'
+'HMPT': 'O=P(N(C)C)(N(C)C)N(C)C'
+'MeOH': 'CO'
+'MTBE': 'CC(OC)(C)C'
+'TFA': 'O=C(O)C(F)(F)F'
+'THF': 'O1CCCC1'
+'TBME': 'COC(C)(C)C'
+'MTBE': 'COC(C)(C)C'
+'9-BBN': 'C1(B2)CCCC2CCC1'
+'acac': 'CC(CC(C)=O)=O'
+'AIBN': 'CC(C/N=N/CC(C)C#N)C#N'
+'BTI': 'IC1=CC=CC(OC(C(F)(F)F)=O)=C1OC(C(F)(F)F)=O'
+'BuLi': '[Li]CCCC'
+'nBuLi': '[Li]CCCC'
+'n-BuLi': '[Li]CCCC'
+'BOP': 'CN([P+](N(C)C)(OC1=C(NN=N2)C2=CC=C1)N(C)C)C.F[P-](F)(F)(F)(F)F'
+'CDI': 'O=C(N1C=CN=C1)N2C=CN=C2'
+'COD': 'C1=C\CC/C=C\CC/1'
+'coe': 'C1=C\CCCCCC/1'
+'COT': 'C1=C\C=C/C=C\C=C/1'
+'Cp': 'C1=CC=CC1'
+'CSA': 'O=C(CC(C(C)1C)CC2)C21CS(=O)(O)=O'
+'DABCO': 'N1(CC2)CCN2CC1'
+'DADO': 'CC(/C(C)=N/O)=N\O'
+'DIBAL': 'CC(C)C[Al+]CC(C)C.[H-]'
+'DIBAL-H': 'CC(C)C[Al+]CC(C)C.[H-]'
+'DBU': 'N12CCCCCC1=NCCC2'
+'DBN': 'N12CCCN=C1CCC2'
+'DBPO': 'O=C(OOC(C1=CC=CC=C1)=O)C2=CC=CC=C2'
+'BPO': 'O=C(OOC(C1=CC=CC=C1)=O)C2=CC=CC=C2'
+'DCC': 'C1(N=C=NC2CCCCC2)CCCCC1'
+'DIC': 'CC(N=C=NC(C)C)C'
+'DEAD': 'O=C(/N=N/C(OCC)=O)OCC'
+'DIAD': 'O=C(/N=N/C(OC(C)C)=O)OC(C)C'
+'DMAP': 'CN(C1=CC=NC=C1)C'
+'DNPH': 'NNC1=CC=C([N+]([O-])=O)C=C1[N+]([O-])=O'
+'EDCI': 'CN(CCCN=C=NCC)C'
+'EDC': 'CN(CCCN=C=NCC)C'
+'EDAC': 'CN(CCCN=C=NCC)C'
+'HATU': 'CN(C)C(N(C)C)=[O+]N1N=NC2=CC=CN=C21.F[P-](F)(F)(F)(F)F'
+'HexLi': '[Li]CCCCCC'
+'HMDS': 'C[Si](C)(C)N(C)[SiH](C)C'
+'HOBt': 'OC1=C2N=NNC2=CC=C1'
+'LiAlH4': '[Al+3].[Li].[H-].[H-].[H-]'
+'LAH': '[Al+3].[Li].[H-].[H-].[H-]'
+'LDA': 'CC([N-]C(C)C)C.[Li+]'
+'mCPBA': 'O=C(OO)C1=CC=CC(Cl)=C1'
+'MCPBA': 'O=C(OO)C1=CC=CC(Cl)=C1'
+'MeCN': 'CC#N'
+'MeLi': '[Li]C'
+'NBS': 'O=C(N1Br)CCC1=O'
+'NCS': 'O=C(N1Cl)CCC1=O'
+'NHS': 'O=C(N1O)CCC1=O'
+'PCC': '[O-][Cr](=O)(Cl)=O.C1=CC=CC=[NH+]1'
+'PIFA': 'IC1=CC=CC(OC(C(F)(F)F)=O)=C1OC(C(F)(F)F)=O'
+'PyBOP': 'F[P-](F)(F)(F)(F)F.N1([P+](N2CCCC2)(ON3N=NC4=CC=CC=C43)N5CCCC5)CCCC1'
+'s-BuLi': '[Li]C(C)CC'
+'secBuLi': '[Li]C(C)CC'
+'sec-BuLi': '[Li]C(C)CC'
+'TADDOL': 'OC(C12CC(C)CCC1C2(C)C)(C34CC(C)CCC3C4(C)C)C5OCOC5C(C67CC(C)CCC6C7(C)C)(C89CC(C)CCC8C9(C)C)O'
+'TBTU': 'CN(C)C(N(C)C)=[O+]N1N=NC2=CC=CC=C21.F[B-](F)(F)F'
+'TEMPO': '[O]N1C(C)(C)CCCC1(C)C'
+'tert-BuLi': '[Li]C(C)(C)C'
+'t-BuLi': '[Li]C(C)(C)C'
+'tBuLi': '[Li]C(C)(C)C'
+'TosMIC': '[C-]#[N+]CS(=O)(C1=CC=C(C)C=C1)=O'
+'TMSN3': 'C[Si](C)(C)N=[N+]=[N-]'
+'TEMPO': 'CC1(CCCC(N1[O])(C)C)C'
+'TMEDA': 'CN(C)CCN(C)C'
+'R-BINAP': 'C1=CC=C(C=C1)P(C2=CC=CC=C2)C3=C(C4=CC=CC=C4C=C3)C5=C(C=CC6=CC=CC=C65)P(C7=CC=CC=C7)C8=CC=CC=C8'
+'(R)-BINAP': 'C1=CC=C(C=C1)P(C2=CC=CC=C2)C3=C(C4=CC=CC=C4C=C3)C5=C(C=CC6=CC=CC=C65)P(C7=CC=CC=C7)C8=CC=CC=C8'
+'DBU': 'C1CCC2=NCCCN2CC1'
+'MCPBA': 'C1=CC(=CC(=C1)Cl)C(=O)OO'
+'NMO': 'C[N+]1(CCOCC1)[O-]'
+'mCPBA': 'C1=CC(=CC(=C1)Cl)C(=O)OO'
+'m-CPBA': 'C1=CC(=CC(=C1)Cl)C(=O)OO'
+
+'DABSO': 'C1C[N+]2(CC[N+]1(CC2)S(=O)[O-])S(=O)[O-]'
+'DABCO-bis': 'C1C[N+]2(CC[N+]1(CC2)S(=O)[O-])S(=O)[O-]'
+'DTBP': 'CC(C)(C)OOC(C)(C)C'
+
+'Acetic acid': 'CC(O)=O'
+'Acetone': 'CC(C)=O'
+'Acetonitrile': 'CC#N'
+'Benzene': 'C1=CC=CC=C1'
+'n-Butanol': 'CCCCO'
+'Carbon tetrachloride (CCl4)': 'ClC(Cl)(Cl)Cl'
+'Chloroform': 'ClC(Cl)Cl'
+'Cyclohexane': 'C1CCCCC1'
+'Diethyl ether': 'CCOCC'
+'Dimethyl sulfoxide (DMSO)': 'CS(C)=O'
+'Dimethylformamide (DMF)': 'CN(C)C=O'
+'14-Dioxane': 'C1COCCO1'
+'Ethanol': 'OCC'
+'Ethyl acetate': 'CC(OCC)=O'
+'Isopropanol': 'CC(O)C'
+'Methanol': 'CO'
+'Methylene chloride (DCM)': 'ClCCl'
+'Methyl tert-butyl ether (MTBE)': 'O(C(C)(C)C)C'
+'n-Hexane': 'CCCCCC'
+'N-Methyl-2-pyrrolidone (NMP)': 'O=C1CCCN1C'
+'Pentane': 'CCCCC'
+'Pyridine': 'C1=CC=NC=C1'
+'Tetrahydrofuran (THF)': 'C1CCCO1'
+'Toluene': 'CC1=CC=CC=C1'
+'Water': '[H]O[H]'
+'CDCl3': '[2H]C(Cl)(Cl)Cl'
+'MeOD-d4': '[2H]OC([2H])([2H])[2H]'
+'C6D6': '[2H]c1c([2H])c([2H])c([2H])c([2H])c1[2H]'
+'D2O': '[2H]O[2H]'
+'Cyclopentane': 'C1CCCC1'
+'Nitromethane': 'C[N+]([O-])=O'
+'Formic acid': 'O=CO'
+'n-octanol': 'CCCCCCCCO'
+'n-propanol': 'CCCO '
+'Dimethylacetamide': 'CC(N(C)C)=O'
+'12-xylene': 'CC1=CC=CC=C1C'
+'13-xylene': 'CC1=CC=CC(C)=C1'
+'14-xylene': 'CC1=CC=C(C)C=C1'
+'Sulfolane': 'O=S1(CCCC1)=O'
+'2-methoxy ethanol': 'OCCOC'
+'Carbon tribromide': 'BrC(Br)([H])Br'
+'Cyclopentylmethylether': 'COC1CCCC1'
+
+"(-)-10,2-Camphorsultam": "CC1(C)C2(C3)CCC1CC2NS3(=O)=O"
+"(-)-10-Camphorsulfonic Acid": "O=C(CC(C(C)1C)CC2)C21CS(=O)(O)=O"
+"(-)-2,2'-Methylenebis[(3aS,8aR)-3a,8a-dihydro-8H-indeno[1,2-d]oxazole]": "[H][C@@]12N=C(CC3=N[C@]4([H])[C@](CC5=C4C=CC=C5)([H])O3)O[C@]1([H])CC6=C2C=CC=C6"
+"(-)-4,5-Bis[hydroxy(diphenyl)methyl]-2,2-dimethyl-1,3-dioxolane": "CC1(C)OC(C(C2=CC=CC=C2)(O)C3=CC=CC=C3)C(C(C4=CC=CC=C4)(O)C5=CC=CC=C5)O1"
+"(-)-B-Chlorodiisopinocampheylborane": "CC1(C)C2CC(B(Cl)C3CC4CC(C3C)C4(C)C)C(C)C1C2"
+"(-)-Benzotetramisole": "C12=N[C@@H](C3=CC=CC=C3)CN1C4=CC=CC=C4S2"
+"(-)-Isopinocampheylborane TMEDA Complex": "B[C@H]1[C@H](C)C2C(C(C1)C2)(C)C.B[C@H]3[C@H](C)C4C(C(C3)C4)(C)C.CN(C)CCN(C)C"
+"(-)-Sparteine": "[H][C@]12CCCCN1C[C@H]3[C@]4([H])CCCCN4C[C@@H]2C3"
+"(+)-(5aR,10bS)-5a,10b-Dihydro-2-(2,4,6-trimethylphenyl)-4H,6H-indeno[2,1-b][1,2,4]triazolo[4,3-d][1,4]oxazinium Chloride Monohydrate": "CC1=C(N2N=C3[N+]([C@]4([H])[C@](CC5=C4C=CC=C5)([H])OC3)=C2)C(C)=CC(C)=C1.[H]O[H].[Cl-]"
+"(+)-10,2-Camphorsultam": "CC1(C)C2(C3)CCC1CC2NS3(=O)=O"
+"(+)-10-Camphorsulfonic Acid": "O=C(CC(C(C)1C)CC2)C21CS(=O)(O)=O"
+"(+)-2,2'-Methylenebis[(3aR,8aS)-3a,8a-dihydro-8H-indeno[1,2-d]oxazole]": "[H][C@]12N=C(CC3=N[C@@]4([H])[C@@](CC5=C4C=CC=C5)([H])O3)O[C@@]1([H])CC6=C2C=CC=C6"
+"(+)-4,5-Bis[hydroxy(diphenyl)methyl]-2,2-dimethyl-1,3-dioxolane": "CC1(C)OC(C(C2=CC=CC=C2)(O)C3=CC=CC=C3)C(C(C4=CC=CC=C4)(O)C5=CC=CC=C5)O1"
+"(+)-4,5-Bis[hydroxy(diphenyl)methyl]-2-methyl-2-phenyl-1,3-dioxolane": "CC1(C2=CC=CC=C2)OC(C(C3=CC=CC=C3)(O)C4=CC=CC=C4)C(C(C5=CC=CC=C5)(O)C6=CC=CC=C6)O1"
+"(+)-B-Chlorodiisopinocampheylborane": "CN(C)CCN(C)C.CC1(C)C2CC(BC3CC4CC(C3C)C4(C)C)C(C)C1C2"
+"(+)-Sparteine": "[H][C@]12CCCCN1C[C@H]3[C@]4([H])CCCCN4C[C@@H]2C3"
+"(±)-1,1'-Binaphthyl-2,2'-diyl Hydrogenphosphate": "O=P1(OC2=CC=C3C=CC=CC3=C2C4=C5C=CC=CC5=CC=C4O1)O"
+"(±)-10-Camphorsulfonic Acid": "O=C(CC(C(C)1C)CC2)C21CS(=O)(O)=O"
+"(1,10-Phenanthroline)(trifluoromethyl)(triphenylphosphine)copper(I)": "[Cu]C(F)(F)F.P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.C45=CC=C6C=CC=NC6=C4N=CC=C5"
+"(1,5-Cyclooctadiene)(methoxy)iridium(I)": "[Ir]OC.C1=C\\CC/C=C\\CC/1"
+"(1,5-Cyclooctadiene)(pyridine)(tricyclohexylphosphine)iridium(I) Hexafluorophosphate": "F[P-](F)(F)(F)(F)F.P(C1CCCCC1)(C2CCCCC2)C3CCCCC3.[Ir+].C4=C\\CC/C=C\\CC/4.C5=NC=CC=C5"
+"(11bS)-2,6-Bis[bis[3,5-bis(trifluoromethyl)phenyl]hydroxymethyl]-3,5-dihydrospiro[4H-dinaphth[2,1-c:1',2'-e]azepine-4,4'-morpholinium] Bromide": "OC(C1=C2C(C3=C4C=CC=CC4=CC(C(C5=CC(C(F)(F)F)=CC(C(F)(F)F)=C5)(C6=CC(C(F)(F)F)=CC(C(F)(F)F)=C6)O)=C3C(Br)[N]7(CCOCC7)C2)=C8C=CC=CC8=C1)(C9=CC(C(F)(F)F)=CC(C(F)(F)F)=C9)C%10=CC(C(F)(F)F)=CC(C(F)(F)F)=C%10"
+"(11R,12R)-9,10-Dihydro-9,10-ethanoanthracene-11,12-diamine": "N[C@H]1[C@H](N)C2C3=C(C=CC=C3)C1C4=CC=CC=C24"
+"(11S,12S)-9,10-Dihydro-9,10-ethanoanthracene-11,12-diamine": "N[C@@H]1[C@@H](N)C2C3=C(C=CC=C3)C1C4=CC=CC=C24"
+"(1-Bromovinyl)trimethylsilane": "C[Si](C)(C(Br)=C)C"
+"(1E)-1-tert-Butoxy-1-(trimethylsilyloxy)propene": "C/C=C(OC(C)(C)C)/O[Si](C)(C)C"
+"(1R,2R)-(-)-1,2-Cyclohexanediamine": "N[C@H]1[C@H](N)CCCC1"
+"(1R,2R)-(-)-N,N'-Dimethylcyclohexane-1,2-diamine": "CN[C@H]1[C@H](NC)CCCC1"
+"(1R,2R)-(+)-1,2-Diphenylethylenediamine": "N[C@H](C1=CC=CC=C1)[C@@H](C2=CC=CC=C2)N"
+"(1R,2R)-1,2-Bis(2,4,6-trimethylphenyl)ethylenediamine": "N[C@H](C1=C(C)C=C(C)C=C1C)[C@@H](C2=C(C)C=C(C)C=C2C)N"
+"(1R,2R)-1,2-Bis(2-hydroxyphenyl)ethylenediamine": "N[C@H](C1=CC=CC=C1O)[C@@H](C2=CC=CC=C2O)N"
+"(1R,2R)-N,N'-Bis(2-acetyl-3-oxo-2-butenylidene)-1,2-dimesitylethylenediaminato Cobalt(II)": "CC1=C(C(C)=CC(C)=C1)[C@@H](/N=C/C=C(C(C)=O)\\C[O-])[C@@H](C2=C(C)C=C(C)C=C2C)/N=C/C=C(C(C)=O)\\C[O-].[Co+2]"
+"(1R,2R)-N,N'-Bis[3-oxo-2-(2,4,6-trimethylbenzoyl)butylidene]-1,2-diphenylethylenediaminato Cobalt(II)": "[O-]/C(C)=C(C(C1=C(C)C=C(C)C=C1C)=O)\\C=N\\[C@@H]([C@@H](C2=CC=CC=C2)/N=C/C(C(C3=C(C)C=C(C)C=C3C)=O)=C(C)\\[O-])C4=CC=CC=C4.[Co+2]"
+"(1R,2R)-N,N'-Dihydroxy-N,N'-bis(diphenylacetyl)cyclohexane-1,2-diamine": "O=C(N(O)[C@H]1[C@H](N(O)C(C(C2=CC=CC=C2)C3=CC=CC=C3)=O)CCCC1)C(C4=CC=CC=C4)C5=CC=CC=C5"
+"(1R,2R,4R,5R)-2,5-Bis(3,5-di-tert-butyl-2-hydroxybenzylideneamino)bicyclo[2.2.1]heptane": "OC1=C(C(C)(C)C)C=C(C(C)(C)C)C=C1/C=N/[C@H]2[C@@]3([H])C[C@@H](/N=C/C4=CC(C(C)(C)C)=CC(C(C)(C)C)=C4O)[C@@](C3)([H])C2"
+"(1R,2S)-2-[N-Benzyl-N-(mesitylenesulfonyl)amino]-1-phenyl-1-propanol": "C[C@H](N(CC1=CC=CC=C1)S(=O)(C(C(C)=CC(C)=C2)=C2C)=O)[C@@H](C3=CC=CC=C3)O"
+"(1R,2S)-2-[N-Benzyl-N-(mesitylenesulfonyl)amino]-1-phenylpropyl Propionate": "CCC(O[C@H](C1=CC=CC=C1)[C@@H](N(CC2=CC=CC=C2)S(=O)(C(C(C)=CC(C)=C3)=C3C)=O)C)=O"
+"(1R,3R)-5-(Bromomethylene)-1,3-bis(tert-butyldimethylsilyloxy)cyclohexane": "C[Si](O[C@H](C1)C[C@H](O[Si](C)(C(C)(C)C)C)CC1=CBr)(C(C)(C)C)C"
+"(1R,3S,5R,7R,8aS)-7-Ethylhexahydro-1-(6-hydroxy-4-quinolinyl)-3,7-methano-1H-pyrrolo[2,1-c][1,4]oxazine": "OC1=CC=C2N=CC=C([C@H]3O[C@](C4)([H])C[N@@]5[C@@]3([H])C[C@@]4(CC)C5)C2=C1"
+"(1R,4R,5R)-4,7,7-Trimethyl-6-thiabicyclo[3.2.1]octane": "CC1(C)S[C@@]2([H])[C@H](C)CC[C@]1([H])C2"
+"(1S)-3-(1,10-Phenanthrolin-2-yl)-2'-phenyl-[1,1'-binaphthalen]-2-ol": "OC1=C(C2=NC3=C4N=CC=CC4=CC=C3C=C2)C=C5C=CC=CC5=C1C6=C7C=CC=CC7=CC=C6C8=CC=CC=C8"
+"(1S,2R)-2-[N-Benzyl-N-(mesitylenesulfonyl)amino]-1-phenyl-1-propanol": "C[C@@H](N(CC1=CC=CC=C1)S(=O)(C(C(C)=CC(C)=C2)=C2C)=O)[C@H](C3=CC=CC=C3)O"
+"(1S,2R)-2-[N-Benzyl-N-(mesitylenesulfonyl)amino]-1-phenylpropyl Propionate": "CCC(O[C@@H](C1=CC=CC=C1)[C@H](N(CC2=CC=CC=C2)S(=O)(C(C(C)=CC(C)=C3)=C3C)=O)C)=O"
+"(1S,2S)-(-)-1,2-Diphenylethylenediamine": "N[C@@H](C1=CC=CC=C1)[C@H](C2=CC=CC=C2)N"
+"(1S,2S)-(+)-1,2-Cyclohexanediamine": "N[C@@H]1[C@@H](N)CCCC1"
+"(1S,2S)-(+)-N,N'-Dimethylcyclohexane-1,2-diamine": "CN[C@@H]1[C@@H](NC)CCCC1"
+"(1S,2S)-1,2-Bis(2,4,6-trimethylphenyl)ethylenediamine": "N[C@@H](C1=C(C)C=C(C)C=C1C)[C@H](C2=C(C)C=C(C)C=C2C)N"
+"(1S,2S)-1,2-Bis(2-hydroxyphenyl)ethylenediamine": "N[C@@H](C1=CC=CC=C1O)[C@H](C2=CC=CC=C2O)N"
+"(1S,2S)-N,N'-Bis(2-acetyl-3-oxo-2-butenylidene)-1,2-dimesitylethylenediaminato Cobalt(II)": "CC1=C(C(C)=CC(C)=C1)[C@H](/N=C/C=C(C(C)=O)\\C[O-])[C@H](C2=C(C)C=C(C)C=C2C)/N=C/C=C(C(C)=O)\\C[O-].[Co+2]"
+"(1S,2S)-N,N'-Bis[(R)-2-hydroxy-2'-phenyl-1,1'-binaphthyl-3-ylmethylene]-1,2-diphenylethylenediaminato Manganese(III) Acetate": "CC([O-])=O.OC1=C(C([Mn+]2)=N[C@@H](C3=CC=CC=C3)[C@H](C4=CC=CC=C4)N=C2C5=C(O)C(C6=C7C=CC=CC7=CC=C6C8=CC=CC=C8)=C9C=CC=CC9=C5)C=C%10C=CC=CC%10=C1C%11=C%12C=CC=CC%12=CC=C%11C%13=CC=CC=C%13"
+"(1S,2S)-N,N'-Bis[3-oxo-2-(2,4,6-trimethylbenzoyl)butylidene]-1,2-diphenylethylenediaminato Cobalt(II)": "[O-]/C(C)=C(C(C1=C(C)C=C(C)C=C1C)=O)\\C=N\\[C@H]([C@H](C2=CC=CC=C2)/N=C/C(C(C3=C(C)C=C(C)C=C3C)=O)=C(C)\\[O-])C4=CC=CC=C4.[Co+2]"
+"(1S,2S)-N,N'-Dihydroxy-N,N'-bis(diphenylacetyl)cyclohexane-1,2-diamine": "O=C(N(O)[C@@H]1[C@@H](N(O)C(C(C2=CC=CC=C2)C3=CC=CC=C3)=O)CCCC1)C(C4=CC=CC=C4)C5=CC=CC=C5"
+"(1S,2S,4S,5S)-2,5-Bis(3,5-di-tert-butyl-2-hydroxybenzylideneamino)bicyclo[2.2.1]heptane": "OC1=C(C(C)(C)C)C=C(C(C)(C)C)C=C1/C=N/[C@@H]2[C@]3([H])C[C@H](/N=C/C4=CC(C(C)(C)C)=CC(C(C)(C)C)=C4O)[C@](C3)([H])C2"
+"(1S,4S,5S)-4,7,7-Trimethyl-6-thiabicyclo[3.2.1]octane": "CC1(C)S[C@]2([H])[C@@H](C)CC[C@@]1([H])C2"
+"(2,5-Dimethylphenyl)magnesium Bromide": "Br[Mg]C1=CC(C)=CC=C1C"
+"(2-Bromo-4,5-dimethoxyphenoxy)trimethylsilane": "C[Si](C)(OC1=CC(OC)=C(OC)C=C1Br)C"
+"(2-Bromoallyl)trimethylsilane": "C[Si](C)(CC(Br)=C)C"
+"(2-Bromophenyl)(2,4,6-trimethylphenyl)iodonium triflate": "CC1=C([I+]C2=CC=CC=C2Br)C(C)=CC(C)=C1.O=S([O-])(C(F)(F)F)=O"
+"(2-Bromophenyl)diphenylphosphine": "BrC1=CC=CC=C1P(C2=CC=CC=C2)C3=CC=CC=C3"
+"(2-Bromophenylethynyl)trimethylsilane": "C[Si](C)(C#CC1=CC=CC=C1Br)C"
+"(2R,3R)-(-)-1,4-Bis(diphenylphosphino)-2,3-O-isopropylidene-2,3-butanediol": "CC1(O[C@H]([C@@H](O1)CP(C2=CC=CC=C2)C3=CC=CC=C3)CP(C4=CC=CC=C4)C5=CC=CC=C5)C"
+"(2R,3R)-(-)-2,3-Bis(diphenylphosphino)bicyclo[2.2.1]hept-5-ene": "C1(C2)[C@@H](P(C3=CC=CC=C3)C4=CC=CC=C4)[C@H](P(C5=CC=CC=C5)C6=CC=CC=C6)C2C=C1"
+"(2R,5R)-2,5-Diphenylpyrrolidine": "[C@@H]1(C2=CC=CC=C2)N[C@@H](C3=CC=CC=C3)CC1"
+"(2R,8aS)-(+)-(Camphorylsulfonyl)oxaziridine": "O=S(N1OC1)(CC23C(CC(C(C)3C)CC2)=O)=O"
+"(2S)-N-[(1S)-1-(Hydroxydiphenylmethyl)-3-methylbutyl]-2-pyrrolidinecarboxamide": "O=C([C@H]1NCCC1)N[C@H](C(C2=CC=CC=C2)(O)C3=CC=CC=C3)CC(C)C"
+"(2S,3aS,7aS)-Octahydro-1H-indole-2-carboxylic Acid": "O=C([C@H]1N[C@@]2([H])CCCC[C@@]2([H])C1)O"
+"(2S,3R)-3,4-Dihydro-3-isopropyl-2-phenyl-2H-pyrimido[2,1-b]benzothiazole": "CC([C@H]1[C@@H](C2=CC=CC=C2)N=C3SC4=CC=CC=C4N3C1)C"
+"(2S,3S)-(-)-Bis(diphenylphosphino)butane": "C[C@H](P(C1=CC=CC=C1)C2=CC=CC=C2)[C@@H](P(C3=CC=CC=C3)C4=CC=CC=C4)C"
+"(2S,3S)-(+)-1,4-Bis(diphenylphosphino)-2,3-O-isopropylidene-2,3-butanediol": "CC1(O[C@@H]([C@H](O1)CP(C2=CC=CC=C2)C3=CC=CC=C3)CP(C4=CC=CC=C4)C5=CC=CC=C5)C"
+"(2S,3S)-(+)-2,3-Bis(diphenylphosphino)bicyclo[2.2.1]hept-5-ene": "C1(C2)[C@H](P(C3=CC=CC=C3)C4=CC=CC=C4)[C@@H](P(C5=CC=CC=C5)C6=CC=CC=C6)C2C=C1"
+"(2S,5S)-(-)-2-tert-Butyl-3-methyl-5-benzyl-4-imidazolidinone": "O=C1N(C)[C@@H](C(C)(C)C)N[C@H]1CC2=CC=CC=C2"
+"(2S,5S)-2,5-Diphenylpyrrolidine": "[C@H]1(C2=CC=CC=C2)N[C@H](C3=CC=CC=C3)CC1"
+"(2S,8aR)-(-)-(Camphorylsulfonyl)oxaziridine": "O=S(N1OC1)(CC23C(CC(C(C)3C)CC2)=O)=O"
+"(3,5-Dibromophenyl)triphenylsilane": "BrC1=CC(Br)=CC([Si](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=C1"
+"(3-Bromopropoxy)(tert-butyl)dimethylsilane": "C[Si](C(C)(C)C)(OCCCBr)C"
+"(3-Bromopropyl)trimethoxysilane": "CO[Si](OC)(CCCBr)OC"
+"(3-Chloropropyl)tris(trimethylsilyloxy)silane": "C[Si](O[Si](O[Si](C)(C)C)(CCCCl)O[Si](C)(C)C)(C)C"
+"(3-Mercaptopropyl)triethoxysilane": "CCO[Si](OCC)(CCCS)OCC"
+"(3-Mercaptopropyl)trimethoxysilane": "CO[Si](OC)(CCCS)OC"
+"(3-Phenyl-1H-inden-1-ylidene)bis(tricyclohexylphosphine)ruthenium(II) Dichloride ": "[Ru+2]=C1C=C(C2=CC=CC=C2)C3=C1C=CC=C3.P(C4CCCCC4)(C5CCCCC5)C6CCCCC6.P(C7CCCCC7)(C8CCCCC8)C9CCCCC9.[Cl-].[Cl-]"
+"(4-(Isopropoxycarbonyl)phenyl)boronic acid": "B(C1=CC=C(C=C1)C(=O)OC(C)C)(O)O"
+"(4-Dimethylaminophenyl)di-tert-butylphosphine": "CC(P(C1=CC=C(N(C)C)C=C1)C(C)(C)C)(C)C"
+"(4-Nitrophenyl)(2,4,6-trimethylphenyl)iodonium triflate": "CC1=C([I+]C2=CC=C([N+]([O-])=O)C=C2)C(C)=CC(C)=C1.O=S([O-])(C(F)(F)F)=O"
+"(4-Nitrophenyl)phenyliodonium triflate": "O=[N+](C1=CC=C([I+]C2=CC=CC=C2)C=C1)[O-].O=S([O-])(C(F)(F)F)=O"
+"(4R)-(+)-4-Isopropyl-5,5-diphenyl-2-oxazolidinone": "O=C1OC(C2=CC=CC=C2)(C3=CC=CC=C3)[C@@H](C(C)C)N1"
+"(4R,5R)-1,3-Dimethyl-4,5-diphenyl-2-[(S)-1-benzyl-2-hydroxyethylimino]imidazolidine": "OC[C@H](CC1=CC=CC=C1)N=C2N(C)[C@H](C3=CC=CC=C3)[C@@H](C4=CC=CC=C4)N2C"
+"(4S)-(-)-4-Isopropyl-5,5-diphenyl-2-oxazolidinone": "O=C1OC(C2=CC=CC=C2)(C3=CC=CC=C3)[C@H](C(C)C)N1"
+"(4S,4'S)-2,2'-(Pentane-3,3'-diyl)bis(4-benzyl-4,5-dihydrooxazole)": "CCC(C1=N[C@H](CO1)CC2=CC=CC=C2)(C3=N[C@H](CO3)CC4=CC=CC=C4)CC"
+"(4S,5S)-1,3-Dimethyl-4,5-diphenyl-2-[(R)-1-benzyl-2-hydroxyethylimino]imidazolidine": "OC[C@@H](CC1=CC=CC=C1)N=C2N(C)[C@@H](C3=CC=CC=C3)[C@H](C4=CC=CC=C4)N2C"
+"(6-Chloro-1H-benzotriazol-1-yloxy)tripyrrolidinophosphonium Hexafluorophosphate": "ClC1=CC=C2N=NN(O[P+](N3CCCC3)(N4CCCC4)N5CCCC5)C2=C1.F[P-](F)(F)(F)(F)F"
+"(7-Azabenzotriazol-1-yloxy)tris(dimethylamino)phosphonium Hexafluorophosphate": "CN([P+](N(C)C)(ON1N=NC2=CC=CN=C21)N(C)C)C.F[P-](F)(F)(F)(F)F"
+"(Bromodifluoromethyl)trimethylsilane": "C[Si](C)(C(F)(Br)F)C"
+"(Bromomethyl)trimethylsilane": "C[Si](C)(CBr)C"
+"(Chloromethyl)isopropoxydimethylsilane": "C[Si](OC(C)C)(CCl)C"
+"(Chloromethyl)trimethylsilane": "C[Si](C)(CCl)C"
+"(Diacetoxyiodo)benzene": "O=C(OI(C1=CC=CC=C1)OC(C)=O)C"
+"(Diethylamino)sulfur Trifluoride": "CCN(S(F)(F)F)CC"
+"(Difluoromethyl)trimethylsilane": "C[Si](C)(C(F)F)C"
+"(E)-Trimethyl(3,3,3-trifluoro-1-propenyl)silane": "FC(F)(F)/C=C/[Si](C)(C)C"
+"(Ferrocenylmethyl)dodecyldimethylammonium Bromide": "C[N+](CCCCCCCCCCCC)(C)Cc1cccc1.[Del][Fe][Del].[Br-].c2cccc2"
+"(Ferrocenylmethyl)trimethylammonium Bromide": "C[N+](C)(C)Cc1cccc1.[Del][Fe][Del].[Br-].c2cccc2"
+"(Hexamethylbenzene)ruthenium(II) Dichloride": "CC1=C(C)C(C)=C(C)C(C)=C1C.[Ru+2].[Cl-].[Cl-]"
+"(Indenyl)titanium(IV) Trichloride": "[Ti+3]C1C=CC2=C1C=CC=C2.[Cl-].[Cl-].[Cl-]"
+"(Iodomethyl)trimethylsilane": "C[Si](C)(CI)C"
+"(m-Terphenyl-5'-yl)trimethylsilane": "C[Si](C)(C1=CC(C2=CC=CC=C2)=CC(C3=CC=CC=C3)=C1)C"
+"(Pentafluorophenyl)diphenylphosphine": "FC1=C(F)C(F)=C(F)C(F)=C1P(C2=CC=CC=C2)C3=CC=CC=C3"
+"(Pentamethylcyclopentadienyl)rhodium(III) Dichloride": "[Rh+2]C1=C(C)C(C)=C(C)C1(C)C.[Cl-].[Cl-]"
+"(Pentamethylcyclopentadienyl)titanium(IV) Trichloride": "[Ti+3]C1=C(C)C(C)=C(C)C1(C)C.[Cl-].[Cl-].[Cl-]"
+"(Perfluorohexyl)phenyliodonium Trifluoromethanesulfonate": "FC([I+]C1=CC=CC=C1)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)F.O=S(C(F)(F)F)([O-])=O"
+"(Perfluoro-n-octyl)phenyliodonium Trifluoromethanesulfonate": "FC([I+]C1=CC=CC=C1)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)F.O=S(C(F)(F)F)([O-])=O"
+"(Perfluoropropyl)phenyliodonium Trifluoromethanesulfonate": "FC([I+]C1=CC=CC=C1)(F)C(F)(F)C(F)(F)F.O=S(C(F)(F)F)([O-])=O"
+"(Phenylthio)trimethylsilane": "C[Si](C)(SC1=CC=CC=C1)C"
+"(Phenylthiomethyl)trimethylsilane": "C[Si](C)(CSC1=CC=CC=C1)C"
+"(Piperidinium-1-ylmethyl)trifluoroborate": "F[B-2](F)(C[NH+]1CCCCC1)F"
+"(R)-(-)-1-(2-Pyrrolidinylmethyl)pyrrolidine": "N1(C[C@@H]2NCCC2)CCCC1"
+"(R)-(-)-2-[Hydroxy(diphenyl)methyl]-1-methylpyrrolidine": "CN1[C@@H](C(C2=CC=CC=C2)(O)C3=CC=CC=C3)CCC1"
+"(R)-(-)-4-Benzyl-3-propionyl-2-oxazolidinone": "O=C1OC[C@@H](CC2=CC=CC=C2)N1C(CC)=O"
+"(R)-(-)-4-Isopropyl-3-propionyl-2-oxazolidinone": "O=C1OC[C@@H](C(C)C)N1C(CC)=O"
+"(R)-(-)-4-Phenyl-2-oxazolidinone": "O=C1OC[C@@H](C2=CC=CC=C2)N1"
+"(R)-(-)-p-Toluenesulfinamide": "CC1=CC=C([S@](N)=O)C=C1"
+"(R)-(+)-2,2'-bis(diphenylphosphino)-1,1'-binaphthyl": "C1(C2=C3C=CC=CC3=CC=C2P(C4=CC=CC=C4)C5=CC=CC=C5)=C6C=CC=CC6=CC=C1P(C7=CC=CC=C7)C8=CC=CC=C8"
+"(R)-(+)-2-Diphenylphosphino-2'-methoxy-1,1'-binaphthyl": "COC1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3P(C5=CC=CC=C5)C6=CC=CC=C6"
+"(R)-(+)-Indoline-2-carboxylic Acid": "O=C([C@@H]1NC2=C(C=CC=C2)C1)O"
+"(R)-(+)-N,N-Dimethyl-1-ferrocenylethylamine": "C[C@H]([C]1[CH][CH][CH][CH]1)N(C)C.[Fe].[CH]2[CH][CH][CH][CH]2"
+"(R)-(+)-tert-Butylsulfinamide": "CC(C)([S@](N)=O)C"
+"(R)-(+)-α,α-Diphenyl-2-pyrrolidinemethanol": "OC(C1=CC=CC=C1)(C2=CC=CC=C2)[C@@H]3NCCC3"
+"(R)-(+)-α,α-Diphenyl-2-pyrrolidinemethanol Trimethylsilyl Ether": "C[Si](OC(C1=CC=CC=C1)(C2=CC=CC=C2)[C@@H]3NCCC3)(C)C"
+"(R)-2-(Methoxymethyl)pyrrolidine": "COC[C@@H]1NCCC1"
+"(R)-3,3'-Bis[[[(1R,2R)-2-(isoindolin-2-yl)-1,2-diphenylethyl]imino]methyl]-1,1'-bi-2-naphthol": "OC1=C(/C=N/[C@H](C2=CC=CC=C2)[C@H](N3CC4=C(C=CC=C4)C3)C5=CC=CC=C5)C=C6C=CC=CC6=C1C7=C8C=CC=CC8=CC(/C=N/[C@H](C9=CC=CC=C9)[C@H](N%10CC%11=C(C=CC=C%11)C%10)C%12=CC=CC=C%12)=C7O"
+"(R)-4-Benzyl-2-oxazolidinone": "O=C1OC[C@@H](CC2=CC=CC=C2)N1"
+"(R)-4-Isopropyl-2-oxazolidinone": "O=C1OC[C@@H](C(C)C)N1"
+"(R)-4-Phenylthiazolidine-2-thione": "S=C1SC[C@@H](C2=CC=CC=C2)N1"
+"(R)-5,5-Diphenyl-2-methyl-3,4-propano-1,3,2-oxazaborolidine": "CB1OC(C2=CC=CC=C2)(C3=CC=CC=C3)[C@]4([H])N1CCC4"
+"(R)-N-(2-Benzoylphenyl)-1-benzylpyrrolidine-2-carboxamide": "O=C([C@@H]1N(CC2=CC=CC=C2)CCC1)NC3=CC=CC=C3C(C4=CC=CC=C4)=O"
+"(R)-N,N-Dimethyl-1-[(S)-2-(diphenylphosphino)ferrocenyl]ethylamine": "CN(C)[C@H](c1cccc1)CP(C2=CC=CC=C2)C3=CC=CC=C3.[Del][Fe][Del].c4cccc4"
+"(R,R)-(-)-2,3-Bis(tert-butylmethylphosphino)quinoxaline": "C[P@@](C1=NC2=CC=CC=C2N=C1[P@@](C(C)(C)C)C)C(C)(C)C"
+"(R,R)-(-)-2,3-Dimethoxy-1,4-bis(dimethylamino)butane": "CN(C[C@@H](OC)[C@H](OC)CN(C)C)C"
+"(R,R)-(-)-N,N'-Bis(3,5-di-tert-butylsalicylidene)-1,2-cyclohexanediamine": "OC1=C(C(C)(C)C)C=C(C(C)(C)C)C=C1/C=N/[C@H]2[C@H](/N=C/C3=CC(C(C)(C)C)=CC(C(C)(C)C)=C3O)CCCC2"
+"(R,R)-(-)-N,N'-Bis(3,5-di-tert-butylsalicylidene)-1,2-cyclohexanediaminomanganese(III) Chloride": "OC1=C(C(C)(C)C)C=C(C(C)(C)C)C=C1/C=[N]([Mn+]/[N]2=C\\C3=CC(C(C)(C)C)=CC(C(C)(C)C)=C3O)\\[C@@]4([H])[C@@]2([H])CCCC4.[Cl-]"
+"(R,R)-(+)-2,2'-Isopropylidenebis(4-tert-butyl-2-oxazoline)": "CC(C1=N[C@H](C(C)(C)C)CO1)(C2=N[C@H](C(C)(C)C)CO2)C"
+"(R,R)-1,2-Bis[(2-methoxyphenyl)phenylphosphino]ethane": "COC1=CC=CC=C1[P@](CC[P@@](C2=CC=CC=C2OC)C3=CC=CC=C3)C4=CC=CC=C4"
+"(R,R'')-2,2''-Bis(diphenylphosphino)-1,1''-biferrocene": "[Del][Fe][Del].[Del][Fe][Del].P(C1=CC=CC=C1)(c2cccc2c3cccc3P(C4=CC=CC=C4)C5=CC=CC=C5)C6=CC=CC=C6.c7cccc7.c8cccc8"
+"(R,R)-2,2'-Isopropylidenebis(4-phenyl-2-oxazoline)": "CC(C1=N[C@H](C2=CC=CC=C2)CO1)(C3=N[C@H](C4=CC=CC=C4)CO3)C"
+"(R,R)-2,6-Bis(4-isopropyl-2-oxazolin-2-yl)pyridine": "CC([C@H]1N=C(C2=CC=CC(C3=N[C@H](C(C)C)CO3)=N2)OC1)C"
+"(R,R)-2,6-Bis(4-phenyl-2-oxazolin-2-yl)pyridine": "C1(C2=N[C@H](C3=CC=CC=C3)CO2)=NC(C4=N[C@H](C5=CC=CC=C5)CO4)=CC=C1"
+"(R,R)-2-Iodo-1,3-bis[1-(mesitylcarbamoyl)ethoxy]benzene": "C[C@H](C(NC1=C(C)C=C(C)C=C1C)=O)OC2=C(I)C(O[C@@H](C(NC3=C(C)C=C(C)C=C3C)=O)C)=CC=C2"
+"(R,R)-N-(2-Amino-1,2-diphenylethyl)-p-toluenesulfonamide": "CC1=CC=C(S(=O)(N[C@H](C2=CC=CC=C2)[C@H](N)C3=CC=CC=C3)=O)C=C1"
+"(R,R,R)-(3,5-Dioxa-4-phosphacyclohepta[2,1-a:3,4-a']dinaphthalen-4-yl)bis(1-phenylethyl)amine": "C[C@@H](N(P1OC2=CC=C3C=CC=CC3=C2C4=C5C=CC=CC5=CC=C4O1)[C@@H](C6=CC=CC=C6)C)C7=CC=CC=C7"
+"(S)-(-)-1,1'-Binaphthyl-2,2'-diamine": "NC1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3N"
+"(S)-(-)-1-Methyl-2-(1-piperidinomethyl)pyrrolidine": "CN1[C@H](CN2CCCCC2)CCC1"
+"(S)-(-)-2-(Diphenylmethyl)pyrrolidine": "[C@H]1(C(C2=CC=CC=C2)C3=CC=CC=C3)NCCC1"
+"(S)-(-)-2-Amino-2'-hydroxy-1,1'-binaphthyl": "OC1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3N"
+"(S)-(-)-2-Aminomethyl-1-ethylpyrrolidine": "CCN1[C@H](CN)CCC1"
+"(S)-(-)-3-(tert-Butoxycarbonyl)-4-formyl-2,2-dimethyl-1,3-oxazolidine": "CC1(C)OC[C@@H](C=O)N1C(OC(C)(C)C)=O"
+"(S)-(-)-3,3'-Dibromo-5,5',6,6',7,7',8,8'-octahydro-1,1'-bi-2-naphthol": "OC1=C(Br)C=C2CCCCC2=C1C3=C4CCCCC4=CC(Br)=C3O"
+"(S)-(-)-3-tert-Butoxycarbonyl-4-methoxycarbonyl-2,2-dimethyl-1,3-oxazolidine": "CC1(C)OC[C@@H](C(OC)=O)N1C(OC(C)(C)C)=O"
+"(S)-(-)-5,5',6,6',7,7',8,8'-Octahydro-1,1'-bi-2-naphthol": "OC1=CC=C2CCCCC2=C1C3=C4CCCCC4=CC=C3O"
+"(S)-(-)-BINAP": "P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=C(C(C=CC=C4)=C4C=C3)C(C(C=CC=C5)=C5C=C6)=C6P(C7=CC=CC=C7)C8=CC=CC=C8"
+"(S)-(-)-Indoline-2-carboxylic Acid": "O=C([C@H]1NC2=C(C=CC=C2)C1)O"
+"(S)-(-)-N,N-Dimethyl-1-ferrocenylethylamine": "CN(C)[C@H](c1cccc1)C.[Del][Fe][Del].c2cccc2"
+"(S)-(-)-tert-Butylsulfinamide": "CC(C)([S@@](N)=O)C"
+"(S)-(-)-α,α-Diphenyl-2-pyrrolidinemethanol": "OC(C1=CC=CC=C1)(C2=CC=CC=C2)[C@@H]3CCCN3"
+"(S)-(-)-α,α-Diphenyl-2-pyrrolidinemethanol Trimethylsilyl Ether": "C[Si](OC(C1=CC=CC=C1)(C2=CC=CC=C2)[C@H]3NCCC3)(C)C"
+"(S)-(+)-(3,5-Dioxa-4-phosphacyclohepta[2,1-a;3,4-a']dinaphthalen-4-yl)dimethylamine": "CN(P1OC2=CC=C3C=CC=CC3=C2C4=C5C=CC=CC5=CC=C4O1)C"
+"(S)-(+)-1-(2-Pyrrolidinylmethyl)pyrrolidine": "N1(C[C@H]2NCCC2)CCCC1"
+"(S)-(+)-1,1'-Binaphthyl-2,2'-diyl Bis(trifluoromethanesulfonate)": "O=S(C(F)(F)F)(OC1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3OS(C(F)(F)F)(=O)=O)=O"
+"(S)-(+)-1,1'-Binaphthyl-2,2'-diyl Hydrogen Phosphate": "O=P1(OC2=CC=C3C=CC=CC3=C2C4=C5C=CC=CC5=CC=C4O1)O"
+"(S)-(+)-2-(Anilinomethyl)pyrrolidine": "[C@H]1(CNC2=CC=CC=C2)NCCC1"
+"(S)-(+)-2-[Hydroxy(diphenyl)methyl]-1-methylpyrrolidine": "CN1[C@H](C(C2=CC=CC=C2)(O)C3=CC=CC=C3)CCC1"
+"(S)-(+)-4-Benzyl-3-propionyl-2-oxazolidinone": "O=C1OC[C@H](CC2=CC=CC=C2)N1C(CC)=O"
+"(S)-(+)-4-Isopropyl-3-propionyl-2-oxazolidinone": "O=C1OC[C@H](C(C)C)N1C(CC)=O"
+"(S)-(+)-4-Phenyl-2-oxazolidinone": "O=C1OC[C@H](C2=CC=CC=C2)N1"
+"(S)-(+)-6,6'-Dibromo-1,1'-bi-2-naphthol": "OC1=CC=C2C=C(Br)C=CC2=C1C3=C4C=CC(Br)=CC4=CC=C3O"
+"(S)-(+)-p-Toluenesulfinamide": "CC1=CC=C([S@@](N)=O)C=C1"
+"(S)-(4-Isopropyloxazolin-2-yl)ferrocene": "CC(C)[C@H]1COC(c2cccc2)=N1.[Del][Fe][Del].c3cccc3"
+"(S)-[4-(Pyridin-4-yl)-4,5-dihydro-3H-dinaphtho[2,1-c:1',2'-e]azepine-2,6-diyl]bis[bis[4-(tert-butyl)phenyl]methanol]": "OC(C1=C2CN(C3=CC=NC=C3)CC4=C(C(C5=CC=C(C(C)(C)C)C=C5)(C6=CC=C(C(C)(C)C)C=C6)O)C=C7C=CC=CC7=C4C2=C8C=CC=CC8=C1)(C9=CC=C(C(C)(C)C)C=C9)C%10=CC=C(C(C)(C)C)C=C%10"
+"(S)-1-(Diphenylphosphino)-2-[(S)-4-isopropyloxazolin-2-yl]ferrocene": "CC(C)[C@@H]1N=C(c2c(P(C3=CC=CC=C3)C4=CC=CC=C4)ccc2)OC1.[Del][Fe][Del].c5cccc5"
+"(S)-2-(Aminomethyl)pyrrolidine": "NC[C@H]1NCCC1"
+"(S)-2-(Methoxymethyl)pyrrolidine": "COC[C@H]1NCCC1"
+"(S)-2,2'-Dimethoxy-1,1'-binaphthyl": "COC1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3OC"
+"(S)-2,4-Diphenyl-4,5-dihydrooxazole": "C1(C2=CC=CC=C2)=N[C@@H](C3=CC=CC=C3)CO1"
+"(S)-2-[(1-Methyl-2-pyrrolidinyl)methyl]isoindoline Dihydrochloride": "CN1[C@H](CN2CC3=C(C=CC=C3)C2)CCC1.[H]Cl.[H]Cl"
+"(S)-3,3'-Dibromo-1,1'-bi-2-naphthol": "OC1=C(Br)C=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC(Br)=C3O"
+"(S)-3,3'-Dibromo-2,2'-dimethoxy-1,1'-binaphthyl": "COC1=C(Br)C=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC(Br)=C3OC"
+"(S)-3-[1-(4-Methoxybenzenesulfonyl)-(4S,5S)-4,5-diphenyl-4,5-dihydro-1H-imidazol-2-yl]-1,1'-binaphthalene-2,2'-diyl Hydrogen Phosphate": "O=P1(OC2=C(C3=N[C@@H](C4=CC=CC=C4)[C@H](C5=CC=CC=C5)N3S(=O)(C6=CC=C(OC)C=C6)=O)C=C7C=CC=CC7=C2C8=C9C=CC=CC9=CC=C8O1)O"
+"(S)-4-(4-Aminobenzyl)-2-oxazolidinone": "O=C1OC[C@H](CC2=CC=C(N)C=C2)N1"
+"(S)-4-Benzyl-2-oxazolidinone": "O=C1OC[C@H](CC2=CC=CC=C2)N1"
+"(S)-4-Isopropyl-2-oxazolidinone": "O=C1OC[C@H](C(C)C)N1"
+"(S)-4-Isopropyl-3-(1-naphthylmethyl)-2,5,5-triphenyl-1,3,2-oxazaborolidine": "CC([C@@H]1N(CC2=C3C=CC=CC3=CC=C2)B(C4=CC=CC=C4)OC1(C5=CC=CC=C5)C6=CC=CC=C6)C"
+"(S)-4-Isopropylthiazolidine-2-thione": "S=C1SC[C@H](C(C)C)N1"
+"(S)-4-Phenylthiazolidine-2-thione": "S=C1SC[C@H](C2=CC=CC=C2)N1"
+"(S)-4-tert-Butyl-2-(2-pyridyl)oxazoline": "CC([C@@H]1N=C(C2=NC=CC=C2)OC1)(C)C"
+"(S)-5-(Pyrrolidin-2-yl)-1H-tetrazole": "C1([C@H]2NCCC2)=NN=NN1"
+"(S)-5,5-Diphenyl-2-methyl-3,4-propano-1,3,2-oxazaborolidine": "CB1OC(C2=CC=CC=C2)(C3=CC=CC=C3)[C@@]4([H])N1CCC4"
+"(S)-Benzyl-2-[4-(trifluoromethyl)phenyl]-6,7-dihydro-5H-pyrrolo[2,1-c][1,2,4]triazolium Tetrafluoroborate": "FC(C1=CC=C([N+]2=C(CC3=CC=CC=C3)N4C(CCC4)=N2)C=C1)(F)F.F[B-](F)(F)F"
+"(S)-N,N-Dimethyl-1-[(R)-1',2-bis(diphenylphosphino)ferrocenyl]ethylamine": "C[C@@H](N(C)C)c1c(P(C2=CC=CC=C2)C3=CC=CC=C3)ccc1.[Del][Fe][Del].c4(P(C5=CC=CC=C5)C6=CC=CC=C6)cccc4"
+"(S)-N,N-Dimethyl-1-[(R)-2-(diphenylphosphino)ferrocenyl]ethylamine": "CN(C)[C@@H](CP(C1=CC=CC=C1)C2=CC=CC=C2)c3cccc3.[Del][Fe][Del].c4cccc4"
+"(S,S)-(-)-2,2'-Isopropylidenebis(4-tert-butyl-2-oxazoline)": "CC(C1=N[C@@H](C(C)(C)C)CO1)(C2=N[C@@H](C(C)(C)C)CO2)C"
+"(S,S)-(+)-2,3-Bis(tert-butylmethylphosphino)quinoxaline": "C[P@](C1=NC2=CC=CC=C2N=C1[P@](C(C)(C)C)C)C(C)(C)C"
+"(S,S)-(+)-2,3-Dimethoxy-1,4-bis(dimethylamino)butane": "CN(C[C@H](OC)[C@@H](OC)CN(C)C)C"
+"(S,S)-1,2-Bis[(2-methoxyphenyl)phenylphosphino]ethane": "COC1=CC=CC=C1[P@@](CC[P@](C2=CC=CC=C2OC)C3=CC=CC=C3)C4=CC=CC=C4"
+"(S,S)-1,2-Bis[(tert-butyl)methylphosphino]ethane Bis(borane)": "C[P@@](CC[P@@](C(C)(C)C)C)C(C)(C)C.B.B"
+"(S,S'')-2,2''-Bis[(S)-4-isopropyloxazolin-2-yl]-1,1''-biferrocene": "CC(C)[C@H]1OC(c2c(c3cccc3C4=N[C@@H](C(C)C)CO4)ccc2)=NC1.[Del][Fe][Del].[Del][Fe][Del].c5cccc5.c6cccc6"
+"(S,S)-2,2'-Isopropylidenebis(4-phenyl-2-oxazoline)": "CC(C1=N[C@@H](C2=CC=CC=C2)CO1)(C3=N[C@@H](C4=CC=CC=C4)CO3)C"
+"(S,S)-2,6-Bis(4-isopropyl-2-oxazolin-2-yl)pyridine": "CC([C@@H]1N=C(C2=CC=CC(C3=N[C@@H](C(C)C)CO3)=N2)OC1)C"
+"(S,S)-2,6-Bis(4-phenyl-2-oxazolin-2-yl)pyridine": "C1(C2=N[C@@H](C3=CC=CC=C3)CO2)=NC(C4=N[C@@H](C5=CC=CC=C5)CO4)=CC=C1"
+"(S,S)-4,6-Bis(4-isopropyl-2-oxazolin-2-yl)-m-xylene": "CC1=C(C2=N[C@@H](C(C)C)CO2)C=C(C3=N[C@@H](C(C)C)CO3)C(C)=C1"
+"(S,S)-N-(2-Amino-1,2-diphenylethyl)-p-toluenesulfonamide": "CC1=CC=C(S(=O)(N[C@@H](C2=CC=CC=C2)[C@@H](N)C3=CC=CC=C3)=O)C=C1"
+"(S,S,S)-(3,5-Dioxa-4-phosphacyclohepta[2,1-a:3,4-a']dinaphthalen-4-yl)bis(1-phenylethyl)amine": "C[C@H](N(P1OC2=CC=C3C=CC=CC3=C2C4=C5C=CC=CC5=CC=C4O1)[C@H](C6=CC=CC=C6)C)C7=CC=CC=C7"
+"(tert-Butyldimethylsilyl)acetylene": "C#C[Si](C)(C(C)(C)C)C"
+"(tert-Butyldimethylsilyloxy)malononitrile": "N#CC(O[Si](C)(C(C)(C)C)C)C#N"
+"(Trifluoroacetyl)benzotriazole": "O=C(C1=C2N=NNC2=CC=C1)C(F)(F)F"
+"(Trifluoromethyl)trimethylsilane": "C[Si](C)(C(F)(F)F)C"
+"(Trifluoromethyl)tris(triphenylphosphine)copper(I)": "[Cu]C(F)(F)F.P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6.P(C7=CC=CC=C7)(C8=CC=CC=C8)C9=CC=CC=C9"
+"(Triphenylphosphine)gold(I) Chloride": "P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.[Au+].[Cl-]"
+"[(4-Bromobenzyl)oxy](tert-butyl)dimethylsilane": "C[Si](C(C)(C)C)(OCC1=CC=C(Br)C=C1)C"
+"[(4-Methoxyphenyl)ethynyl]trimethylsilane": "C[Si](C)(C#CC1=CC=C(OC)C=C1)C"
+"[(R)-2,2'-Bis(diphenylphosphino)-1,1'-binaphthyl]ruthenium(II) Dichloride": "C1(C2=C3C=CC=CC3=CC=C2P(C4=CC=CC=C4)C5=CC=CC=C5)=C6C=CC=CC6=CC=C1P(C7=CC=CC=C7)C8=CC=CC=C8.[Ru+2].[Cl-].[Cl-]"
+"[(S)-2,2'-Bis(diphenylphosphino)-1,1'-binaphthyl]ruthenium(II) Dichloride": "C1(C2=C3C=CC=CC3=CC=C2P(C4=CC=CC=C4)C5=CC=CC=C5)=C6C=CC=CC6=CC=C1P(C7=CC=CC=C7)C8=CC=CC=C8.[Ru+2].[Cl-].[Cl-]"
+"[1,1′-Bis(diphenylphosphino)ferrocene]dichloropalladium(II)": "C1=CC=C(C=C1)P(C2=CC=CC=C2)[C]3[CH][CH][CH][CH]3.C1=CC=C(C=C1)P(C2=CC=CC=C2)[C]3[CH][CH][CH][CH]3.Cl[Pd]Cl.[Fe]"
+"[1,1'-Bis(diphenylphosphino)ferrocene]cobalt(II) Dichloride": "[Del][Fe][Del].C1(P(c2cccc2)C3=CC=CC=C3)=CC=CC=C1.C4(P(c5cccc5)C6=CC=CC=C6)=CC=CC=C4.[Co+2].[Cl-].[Cl-]"
+"[1,1'-Bis(diphenylphosphino)ferrocene]nickel(II) Dichloride": "[Del][Fe][Del].P(C1=CC=CC=C1)(c2cccc2)C3=CC=CC=C3.P(C4=CC=CC=C4)(c5cccc5)C6=CC=CC=C6.[Ni+2].[Cl-].[Cl-]"
+"[1,2-Bis(diphenylphosphino)ethane]nickel(II) Dichloride": "P(CCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4.[Ni+2].[Cl-].[Cl-]"
+"[1,2-Bis(diphenylphosphino)ethane]palladium(II) Dichloride": "P(CCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4.[Pd+2].[Cl-].[Cl-]"
+"[1,3-Bis(2,6-diisopropylphenyl)imidazol-2-ylidene]triphenylphosphine Nickel(II) Dichloride": "CC(C1=C(N(C=CN2C3=C(C(C)C)C=CC=C3C(C)C)C2=P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6)C(C(C)C)=CC=C1)C.[Ni+2].[Cl-].[Cl-]"
+"[1,3-Bis(diphenylphosphino)propane]nickel(II) Dichloride": "P(CCCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4.[Ni+2].[Cl-].[Cl-]"
+"[3-(6-Aminohexylamino)propyl]trimethoxysilane": "CO[Si](OC)(CCCNCCCCCCN)OC"
+"[3-(Diethylamino)propyl]trimethoxysilane": "CO[Si](OC)(CCCN(CC)CC)OC"
+"[3-(N,N-Dimethylamino)propyl]trimethoxysilane": "CO[Si](OC)(CCCN(C)C)OC"
+"[3-(Trimethoxysilyl)propyl]succinic Anhydride": "O=C(O1)C(CCC[Si](OC)(OC)OC)CC1=O"
+"[Bis(trifluoroacetoxy)iodo]benzene": "O=C(OI(C1=CC=CC=C1)OC(C(F)(F)F)=O)C(F)(F)F"
+"[Bis(trifluoroacetoxy)iodo]pentafluorobenzene": "FC1=C(I(OC(C(F)(F)F)=O)OC(C(F)(F)F)=O)C(F)=C(F)C(F)=C1F"
+"[Di-tert-butyl(chloro)phosphine]palladium(II) Dichloride": "ClP(C(C)(C)C)C(C)(C)C.[Pd+2].[Cl-].[Cl-]"
+"[Hydroxy(tosyloxy)iodo]benzene": "O=S(OI(C1=CC=CC=C1)O)(C2=CC=C(C)C=C2)=O"
+"1-(2,4,6-Triisopropylbenzenesulfonyl)-1,2,4-triazole": "O=S(N1N=CN=C1)(C2=C(C(C)C)C=C(C(C)C)C=C2C(C)C)=O"
+"1-(2,4,6-Triisopropylbenzenesulfonyl)imidazole": "O=S(N1C=CN=C1)(C2=C(C(C)C)C=C(C(C)C)C=C2C(C)C)=O"
+"1-(2-Hydroxyethyl)-3-methylimidazolium Chloride": "C[N+]1=CN(CCO)C=C1.[Cl-]"
+"1-(2-Hydroxyethyl)-3-methylimidazolium Tetrafluoroborate": "C[N+]1=CN(CCO)C=C1.F[B-](F)(F)F"
+"1-(2-Mesitylene)-1,3-butanedione": "CC(CC(C1=C(C)C=C(C)C=C1C)=O)=O"
+"1-(2-Mesitylenesulfonyl)imidazole": "O=S(N1C=CN=C1)(C(C(C)=CC(C)=C2)=C2C)=O"
+"1-(3-Dimethylaminopropyl)-3-ethylcarbodiimide": "CCN=C=NCCCN(C)C"
+"1-(3-Dimethylaminopropyl)-3-ethylcarbodiimide Hydrochloride": "CCN=C=NCCCN(C)C.[H]Cl"
+"1-(4-Bromophenyl)-1,3-butanedione": "CC(CC(C1=CC=C(Br)C=C1)=O)=O"
+"1-(4-Chlorophenyl)-4,4,4-trifluoro-1,3-butanedione": "O=C(C1=CC=C(Cl)C=C1)CC(C(F)(F)F)=O"
+"1-(4-Fluorophenyl)-1,3-butanedione": "CC(CC(C1=CC=C(F)C=C1)=O)=O"
+"1-(4-tert-Butylphenyl)-3-(4-methoxyphenyl)-1,3-propanedione": "O=C(C1=CC=C(C(C)(C)C)C=C1)CC(C2=CC=C(OC)C=C2)=O"
+"1-(Chloro-1-pyrrolidinylmethylene)pyrrolidinium Hexafluorophosphate": "ClC(N1CCCC1)=[N+]2CCCC2.F[P-](F)(F)(F)(F)F"
+"1-(Chloro-1-pyrrolidinylmethylene)pyrrolidinium Tetrafluoroborate": "ClC(N1CCCC1)=[N+]2CCCC2.F[B-](F)(F)F"
+"1-(Cyanomethyl)piperidinium Tetrafluoroborate": "N#CC[NH+]1CCCCC1.F[B-](F)(F)F"
+"1-(Heptafluorobutyryl)imidazole": "O=C(N1C=CN=C1)C(F)(F)C(F)(F)C(F)(F)F"
+"1-(p-Toluenesulfonyl)imidazole": "O=S(N1C=CN=C1)(C2=CC=C(C)C=C2)=O"
+"1-(Trifluoroacetyl)-4-(dimethylamino)pyridinium Trifluoroacetate": "CN(C1=CC=[N+](C(C(F)(F)F)=O)C=C1)C.O=C([O-])C(F)(F)F"
+"1-(Trifluoroacetyl)imidazole": "O=C(N1C=CN=C1)C(F)(F)F"
+"1-(Trifluoroacetyl)piperidine": "O=C(N1CCCCC1)C(F)(F)F"
+"1-(Trifluoromethanesulfonyl)-1H-benzotriazole": "O=S(N1N=NC2=CC=CC=C21)(C(F)(F)F)=O"
+"1-(Trifluoromethanesulfonyl)imidazole": "O=S(N1C=CN=C1)(C(F)(F)F)=O"
+"1-(Triisopropylsilyl)-1-propyne": "CC#C[Si](C(C)C)(C(C)C)C(C)C"
+"1-(Trimethoxysilyl)naphthalene": "CO[Si](C1=C2C=CC=CC2=CC=C1)(OC)OC"
+"1-(Trimethylsilyl)-1-pentyne": "CCCC#C[Si](C)(C)C"
+"1-(Trimethylsilyl)-1-propyne": "CC#C[Si](C)(C)C"
+"1,1'-(2,6-Pyridinediyl)bis(3-methylimidazolium) Dibromide": "C[N+]1=CN(C2=NC(N3C=C[N+](C)=C3)=CC=C2)C=C1.[Br-].[Br-]"
+"1,1,1,3,3,3-Hexafluoroisopropyl Trifluoromethanesulfonate": "O=S(C(F)(F)F)(OC(C(F)(F)F)C(F)(F)F)=O"
+"1,1,1,3,3-Pentamethyldisiloxane": "C[SiH](C)O[Si](C)(C)C"
+"1,1,1,3,5,5,5-Heptamethyl-3-[(trimethylsilyl)oxy]trisiloxane": "C[Si](O[Si](O[Si](C)(C)C)(C)O[Si](C)(C)C)(C)C"
+"1,1,1,3,5,5,5-Heptamethyltrisiloxane": "C[Si](C)(C)O[SiH](C)O[Si](C)(C)C"
+"1,1,1,3,5,7,7,7-Octamethyltetrasiloxane": "C[Si](C)(C)O[SiH](C)O[SiH](C)O[Si](C)(C)C"
+"1,1,1,5,5,5-Hexamethyl-3-[(trimethylsilyl)oxy]-3-vinyltrisiloxane": "C=C[Si](O[Si](C)(C)C)(O[Si](C)(C)C)O[Si](C)(C)C"
+"1,1,1,5,5,5-Hexamethyl-3-phenyl-3-(trimethylsilyloxy)trisiloxane": "C[Si](O[Si](O[Si](C)(C)C)(C1=CC=CC=C1)O[Si](C)(C)C)(C)C"
+"1,1,2,2-Tetrachloro-1,2-dimethyldisilane": "C[Si](Cl)(Cl)[Si](Cl)(Cl)C"
+"1,1,2,2-Tetraphenyldisilane": "[SiH](C1=CC=CC=C1)(C2=CC=CC=C2)[SiH](C3=CC=CC=C3)C4=CC=CC=C4"
+"1,1,2,3,4,5-Hexaphenylsilole": "C1(C2=CC=CC=C2)=C(C3=CC=CC=C3)C(C4=CC=CC=C4)=C(C5=CC=CC=C5)[Si]1(C6=CC=CC=C6)C7=CC=CC=C7"
+"1,1,3,3,5,5,7,7,9,9,11,11,13,13-Tetradecamethylheptasiloxane": "C[SiH](C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[SiH](C)C"
+"1,1,3,3,5,5,7,7,9,9,11,11-Dodecamethylhexasiloxane": "C[SiH](C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[SiH](C)C"
+"1,1,3,3,5,5-Hexaethoxy-1,3,5-trisilacyclohexane": "CCO[Si]1(OCC)C[Si](OCC)(OCC)C[Si](OCC)(OCC)C1"
+"1,1,3,3,5,5-Hexamethyltrisiloxane": "C[SiH](C)O[Si](C)(C)O[SiH](C)C"
+"1,1,3,3-Tetramethyl-1,3-diphenyldisiloxane": "C[Si](C1=CC=CC=C1)(C)O[Si](C)(C)C2=CC=CC=C2"
+"1,1,3,3-Tetramethyldisiloxane": "C[SiH](C)O[SiH](C)C"
+"1,1,3,3-Tetramethylguanidine": "N=C(N(C)C)N(C)C"
+"1,1,4,7,10,10-Hexamethyltriethylenetetramine": "CN(CCN(C)C)CCN(C)CCN(C)C"
+"1,1,5,5-Tetrafluoro-2,4-pentanedione": "O=C(CC(C(F)F)=O)C(F)F"
+"1,10-Phenanthroline Monohydrate": "[H]O[H].C12=CC=C3C=CC=NC3=C1N=CC=C2"
+"1,10-Phenanthroline-5,6-dione": "O=C1C2=C(N=CC=C2)C3=C(C=CC=N3)C1=O"
+"1,1'-Bi-2-naphthol": "OC1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3O"
+"1,1'-Bis(dichlorophosphino)ferrocene": "ClP(Cl)c1cccc1.ClP(Cl)c2cccc2.[Del][Fe][Del]"
+"1,1'-Bis(diisopropylphosphino)ferrocene": "CC(C)P(c1cccc1)C(C)C.CC(C)P(c2cccc2)C(C)C.[Del][Fe][Del]"
+"1,1'-Bis(diphenylphosphino)ferrocene": "[Del][Fe][Del].c1(P(C2=CC=CC=C2)C3=CC=CC=C3)cccc1.c4(P(C5=CC=CC=C5)C6=CC=CC=C6)cccc4"
+"1,1'-Bis(di-tert-butylphosphino)ferrocene": "CC(C)(C)P(c1cccc1)C(C)(C)C.CC(C)(C)P(c2cccc2)C(C)(C)C.[Del][Fe][Del]"
+"1,1'-Carbonyldi(1,2,4-triazole)": "O=C(N1N=CN=C1)N2N=CN=C2"
+"1,1'-Carbonyldiimidazole": "O=C(N1C=CN=C1)N2C=CN=C2"
+"1,1'-Difluoro-2,2'-bipyridinium Bis(tetrafluoroborate)": "F[N+]1=CC=CC=C1C2=CC=CC=[N+]2F.F[B-](F)(F)F.F[B-](F)(F)F"
+"1,1-Dimethyl-1,3-dihydrobenzo[c][1,2]oxasilole": "C[Si]1(C)OCC2=CC=CC=C12"
+"1,1-Dimethylpropylmagnesium chloride": "Cl[Mg]C(C)(C)CC"
+"1,1'-Oxalyldiimidazole": "O=C(N1C=CN=C1)C(N2C=CN=C2)=O"
+"1,2,3,4,5-Pentamethylcyclopentadiene": "CC1C(C)=C(C)C(C)=C1C"
+"1,2,3,4,5-Pentaphenyl-1'-(di-tert-butylphosphino)ferrocene": "CC(C)(C)P(C(C)(C)C)c1cccc1.[Del][Fe][Del].c2(C3=CC=CC=C3)c(C4=CC=CC=C4)c(C5=CC=CC=C5)c(C6=CC=CC=C6)c2C7=CC=CC=C7"
+"1,2,3,4,5-Pentaphenyl-1,3-cyclopentadiene": "C1(C2=CC=CC=C2)=C(C3=CC=CC=C3)C(C4=CC=CC=C4)=C(C5=CC=CC=C5)C1C6=CC=CC=C6"
+"1,2,3,4-Tetrahydroquinoline": "C12=C(NCCC2)C=CC=C1"
+"1,2,3,4-Tetraphenyl-1,3-cyclopentadiene": "C1(C2=CC=CC=C2)=C(C3=CC=CC=C3)C(C4=CC=CC=C4)=C(C5=CC=CC=C5)C1"
+"1,2,4-Triazole": "N1N=CN=C1"
+"1,2-Benzenedisulfonic Imide": "O=S(C1=CC=CC=C1S2(=O)=O)(N2)=O"
+"1,2-Bis(3-indenyl)ethane": "C1(CCC2=CCC3=C2C=CC=C3)=CCC4=C1C=CC=C4"
+"1,2-Bis(4'-methyl-2,2'-bipyridin-4-yl)ethane": "CC1=CC(C2=NC=CC(CCC3=CC(C4=NC=CC(C)=C4)=NC=C3)=C2)=NC=C1"
+"1,2-Bis(dimethylphosphino)ethane": "CP(CCP(C)C)C"
+"1,2-Bis(diphenylphosphino)benzene": "C1(P(C2=CC=CC=C2)C3=CC=CC=C3)=CC=CC=C1P(C4=CC=CC=C4)C5=CC=CC=C5"
+"1,2-Bis(diphenylphosphino)ethane": "P(CCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4"
+"1,2-Bis(phenylsulfinyl)ethane Palladium(II) Diacetate": "O=S(CCS(C1=CC=CC=C1)=O)C2=CC=CC=C2.CC([O-])=O.CC([O-])=O.[Pd+2]"
+"1,2-Bis(tert-butylthio)ethane Borane": "CC(SCCSC(C)(C)C)(C)C.B"
+"1,2-Bis(trichlorosilyl)ethane": "Cl[Si](CC[Si](Cl)(Cl)Cl)(Cl)Cl"
+"1,2-Bis(triethoxysilyl)ethane": "CCO[Si](CC[Si](OCC)(OCC)OCC)(OCC)OCC"
+"1,2-Bis(trimethylsilyl)benzene": "C[Si](C1=CC=CC=C1[Si](C)(C)C)(C)C"
+"1,2-Bis[bis(pentafluorophenyl)phosphino]ethane": "FC1=C(F)C(F)=C(F)C(F)=C1P(CCP(C2=C(F)C(F)=C(F)C(F)=C2F)C3=C(F)C(F)=C(F)C(F)=C3F)C4=C(F)C(F)=C(F)C(F)=C4F"
+"1,2-Dibromo-1,1,2,2-tetrachloroethane": "ClC(Cl)(Br)C(Cl)(Br)Cl"
+"1,2-Dibromo-1,1,2,2-tetrafluoroethane": "FC(F)(Br)C(F)(Br)F"
+"1,2-Dichlorotetramethyldisilane": "Cl[Si](C)(C)[Si](C)(C)Cl"
+"1,2-Dimethyl-3-propylimidazolium Iodide": "CCC[N+]1=C(C)N(C)C=C1.[I-]"
+"1,2-Phenylenediamine": "NC1=CC=CC=C1N"
+"1,2-xylene": "CC1=CC=CC=C1C"
+"1,3,5,7-Cyclooctatetraene": "C1=C\\C=C/C=C\\C=C/1"
+"1,3,5-Cycloheptatriene": "C1=CC=CC=CC1"
+"1,3,5-Trimethylbenzene": "CC1=CC(C)=CC(C)=C1"
+"1,3,5-Tris(3,3,3-trifluoropropyl)-1,3,5-trimethylcyclotrisiloxane": "C[Si]1(CCC(F)(F)F)O[Si](C)(CCC(F)(F)F)O[Si](C)(CCC(F)(F)F)O1"
+"1,3-Bis(2,4,6-trimethylphenyl)imidazolinium Chloride": "CC1=C([N+]2=CN(C3=C(C)C=C(C)C=C3C)CC2)C(C)=CC(C)=C1.[Cl-]"
+"1,3-Bis(2,6-diisopropylphenyl)-1,3,2-diazaphospholidine 2-Oxide": "CC(C1=C(N2P(N(C3=C(C(C)C)C=CC=C3C(C)C)CC2)=O)C(C(C)C)=CC=C1)C"
+"1,3-Bis(2,6-diisopropylphenyl)imidazol-2-ylidene": "CC(C1=C(N2[C]N(C3=C(C(C)C)C=CC=C3C(C)C)C=C2)C(C(C)C)=CC=C1)C"
+"1,3-Bis(2,6-diisopropylphenyl)imidazolidin-2-ylidene": "CC(C1=C(N2[C]N(C3=C(C(C)C)C=CC=C3C(C)C)CC2)C(C(C)C)=CC=C1)C"
+"1,3-Bis(2,6-diisopropylphenyl)imidazolinium Chloride": "CC(C1=C([N+]2=CN(C3=C(C(C)C)C=CC=C3C(C)C)CC2)C(C(C)C)=CC=C1)C.[Cl-]"
+"1,3-Bis(2,6-diisopropylphenyl)imidazolium Chloride": "CC(C1=C([N+]2=CN(C3=C(C(C)C)C=CC=C3C(C)C)C=C2)C(C(C)C)=CC=C1)C.[Cl-]"
+"1,3-Bis(4-hydroxybutyl)tetramethyldisiloxane": "OCCCC[Si](C)(C)O[Si](C)(C)CCCCO"
+"1,3-Bis(4-methoxyphenyl)-1,3-propanedione": "O=C(C1=CC=C(OC)C=C1)CC(C2=CC=C(OC)C=C2)=O"
+"1,3-Bis(chloromethyl)tetramethyldisiloxane": "ClC[Si](C)(C)O[Si](C)(C)CCl"
+"1,3-Bis(diphenylphosphino)propane": "P(CCCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4"
+"1,3-Bis[(di-tert-butylphosphino)oxy]benzene": "CC(P(OC1=CC(OP(C(C)(C)C)C(C)(C)C)=CC=C1)C(C)(C)C)(C)C"
+"1,3-Bis[(trimethylsilyl)ethynyl]benzene": "C[Si](C#CC1=CC(C#C[Si](C)(C)C)=CC=C1)(C)C"
+"1,3-Di(1-adamantyl)imidazolinium Tetrafluoroborate": "F[B-](F)(F)F.[N+]1(C23CC4CC(C3)CC(C4)C2)=CN(C56CC7CC(C6)CC(C7)C5)CC1"
+"1,3-Di(1-adamantyl)imidazolium Tetrafluoroborate": "F[B-](F)(F)F.[N+]1(C23CC4CC(C3)CC(C4)C2)=CN(C56CC7CC(C6)CC(C7)C5)C=C1"
+"1,3-Di(2-pyridyl)-1,3-propanedione": "O=C(C1=NC=CC=C1)CC(C2=NC=CC=C2)=O"
+"1,3-Dibromo-5,5-dimethylhydantoin": "O=C(N1Br)N(Br)C(C)(C)C1=O"
+"1,3-Dicyclohexylimidazolium Tetrafluoroborate": "F[B-](F)(F)F.[N+]1(C2CCCCC2)=CN(C3CCCCC3)C=C1"
+"1,3-Diiodo-5,5-dimethylhydantoin": "O=C(N1I)N(I)C(C)(C)C1=O"
+"1,3-Diisopropylimidazolinium Tetrafluoroborate": "CC([N+]1=CN(C(C)C)CC1)C.F[B-](F)(F)F"
+"1,3-Diisopropylimidazolium Tetrafluoroborate": "CC([N+]1=CN(C(C)C)C=C1)C.F[B-](F)(F)F"
+"1,3-Dimesitylimidazol-2-ylidene": "CC1=CC(C)=CC(C)=C1N2[C]N(C3=C(C)C=C(C)C=C3C)C=C2"
+"1,3-Dimesitylimidazolium Chloride": "CC1=CC(C)=CC(C)=C1[N+]2=CN(C3=C(C)C=C(C)C=C3C)C=C2.[Cl-]"
+"1,3-Dimethoxy-1,1,3,3-tetraphenyldisiloxane": "CO[Si](C1=CC=CC=C1)(C2=CC=CC=C2)O[Si](C3=CC=CC=C3)(OC)C4=CC=CC=C4"
+"1,3-Dimethylimidazolium Chloride": "C[N+]1=CN(C)C=C1.[Cl-]"
+"1,3-Dimethylimidazolium Dimethyl Phosphate": "C[N+]1=CN(C)C=C1.O=P(OC)([O-])OC"
+"1,3-Dimethylimidazolium Iodide": "C[N+]1=CN(C)C=C1.[I-]"
+"1,3-Dimethylimidazolium Methyl Sulfate": "C[N+]1=CN(C)C=C1.O=S(OC)([O-])=O"
+"1,3-Diphenyl-1,3-propanedione": "O=C(C1=CC=CC=C1)CC(C2=CC=CC=C2)=O"
+"1,3-Di-tert-butylimidazol-2-ylidene": "CC(N1[C]N(C(C)(C)C)C=C1)(C)C"
+"1,3-Di-tert-butylimidazolium Tetrafluoroborate": "CC([N+]1=CN(C(C)(C)C)C=C1)(C)C.F[B-](F)(F)F"
+"1,3-Divinyltetramethyldisiloxane": "C=C[Si](C)(C)O[Si](C)(C)C=C"
+"1,3-xylene": "CC1=CC=CC(C)=C1"
+"1,4,7,10,13,16-Hexaazacyclooctadecane": "N1CCNCCNCCNCCNCCNCC1"
+"1,4,7,10,13,16-Hexaazacyclooctadecane Hexahydrochloride": "[H]Cl.[H]Cl.[H]Cl.[H]Cl.[H]Cl.[H]Cl.N1CCNCCNCCNCCNCCNCC1"
+"1,4,7,10-Tetraazacyclododecane": "N1CCNCCNCCNCC1"
+"1,4,7,10-Tetraazacyclododecane Tetrahydrochloride": "[H]Cl.[H]Cl.[H]Cl.[H]Cl.N1CCNCCNCCNCC1"
+"1,4,7,10-Tetraazacyclododecane-1,4,7,10-tetraacetic Acid": "O=C(O)CN1CCN(CC(O)=O)CCN(CC(O)=O)CCN(CC(O)=O)CC1"
+"1,4,7,10-Tetrabenzyl-1,4,7,10-tetraazacyclododecane": "N1(CC2=CC=CC=C2)CCN(CC3=CC=CC=C3)CCN(CC4=CC=CC=C4)CCN(CC5=CC=CC=C5)CC1"
+"1,4,7-Triazacyclononane": "N1CCNCCNCC1"
+"1,4,7-Trimethyl-1,4,7-triazacyclononane (stabilized with NaHCO3)": "CN1CCN(C)CCN(C)CC1"
+"1,4,8,11-Tetramethyl-1,4,8,11-tetraazacyclotetradecane": "CN1CCN(C)CCCN(C)CCN(C)CCC1"
+"1,4-Bis(dimethylsilyl)benzene": "C[SiH](C1=CC=C([SiH](C)C)C=C1)C"
+"1,4-Bis(diphenylphosphino)butane": "P(CCCCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4"
+"1,4-Bis(trimethylsilyl)-1,3-butadiyne": "C[Si](C#CC#C[Si](C)(C)C)(C)C"
+"1,4-Cyclohexadiene ": "C1=CCC=CC1"
+"1,4-Cyclohexadiene (stabilized with BHT)": "C1=CCC=CC1"
+"1,4-Di[[2,2':6',2''-terpyridin]-4'-yl]benzene": "C1(C2=CC(C3=NC=CC=C3)=NC(C4=NC=CC=C4)=C2)=CC=C(C5=CC(C6=NC=CC=C6)=NC(C7=NC=CC=C7)=C5)C=C1"
+"1,4-Diazabicyclo[2.2.2]octane": "N1(CC2)CCN2CC1"
+"1,4-Dimethyl-1,2,4-triazolium Iodide": "CN1C=N[N+](C)=C1.[I-]"
+"1,4-dioxane": "C1COCCO1"
+"1,4-xylene": "CC1=CC=C(C)C=C1"
+"1,5,7-Triazabicyclo[4.4.0]dec-5-ene": "N12CCCN=C1NCCC2"
+"1,5,9-Triazacyclododecane": "N1CCCNCCCNCCC1"
+"1,5-Bis(diphenylphosphino)pentane": "P(CCCCCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4"
+"1,5-Cyclooctadiene": "C1=C\\CC/C=C\\CC/1"
+"1,5-Cyclooctadiene [stabilized with Octadecyl 3-(3',5'-Di-tert-butyl-4'-hydroxyphenyl)propionate]": "C1=C\\CC/C=C\\CC/1"
+"1,5-Diazabicyclo[4.3.0]-5-nonene": "N12CCCN=C1CCC2"
+"1,5-Diazabicyclo[4.3.0]non-5-ene": "N12CCCN=C1CCC2"
+"1,5-Dichloro-1,1,3,3,5,5-hexamethyltrisiloxane": "C[Si](C)(Cl)O[Si](C)(C)O[Si](C)(Cl)C"
+"1,5-Dimethyl-2,4-bis[2-(trimethylsilyl)ethynyl]benzene": "C[Si](C#CC1=C(C)C=C(C)C(C#C[Si](C)(C)C)=C1)(C)C"
+"1,5-Hexadiene": "C=CCCC=C"
+"1,6-Bis(diphenylphosphino)hexane": "P(CCCCCCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4"
+"1,7-Dichloro-1,1,3,3,5,5,7,7-octamethyltetrasiloxane": "C[Si](C)(Cl)O[Si](C)(C)O[Si](C)(C)O[Si](C)(Cl)C"
+"1,8-Bis(dimethylamino)naphthalene": "CN(C1=CC=CC2=CC=CC(N(C)C)=C12)C"
+"1,8-Bis(diphenylphosphino)naphthalene": "C1(P(C2=CC=CC=C2)C3=CC=CC=C3)=C4C(P(C5=CC=CC=C5)C6=CC=CC=C6)=CC=CC4=CC=C1"
+"1,8-Diazabicyclo[5.4.0]-7-undecene": "N12CCCCCC1=NCCC2"
+"1,8-Diazabicyclo[5.4.0]-7-undecene Hydrogen Tribromide": "N12CCCCCC1=NCCC2.[H+].[Br-].[Br-].[Br-]"
+"1,8-Diazabicyclo[5.4.0]undec-7-ene": "N12CCCCCC1=NCCC2"
+"1-[2-(Di-tert-butylphosphino)phenyl]-3,5-diphenyl-1H-pyrazole": "CC(P(C1=CC=CC=C1N2N=C(C3=CC=CC=C3)C=C2C4=CC=CC=C4)C(C)(C)C)(C)C"
+"1-[3-(Trimethoxysilyl)propyl]urea": "O=C(N)NCCC[Si](OC)(OC)OC"
+"1-[Bis(trifluoromethanesulfonyl)methyl]-2,3,4,5,6-pentafluorobenzene": "FC1=C(C(S(=O)(C(F)(F)F)=O)S(=O)(C(F)(F)F)=O)C(F)=C(F)C(F)=C1F"
+"10-Methyl-9-phenylacridinium Perchlorate": "C[N+]1=C2C=CC=CC2=C(C3=CC=CC=C3)C4=C1C=CC=C4.O=Cl(=O)([O-])=O"
+"10-Methylacridinium Perchlorate": "C[N+]1=C2C=CC=CC2=CC3=C1C=CC=C3.O=Cl(=O)([O-])=O"
+"1-Acetoxy-5-bromo-1,2-benziodoxol-3(1H)-one": "O=C1OI(OC(C)=O)C2=CC=C(Br)C=C12"
+"1-Allyl-3-methylimidazolium Chloride": "C[N+]1=CN(CC=C)C=C1.[Cl-]"
+"1-Bromo-3-(trimethylsilyl)benzene": "C[Si](C1=CC(Br)=CC=C1)(C)C"
+"1-Bromo-4-(trimethylsilyl)benzene": "C[Si](C1=CC=C(Br)C=C1)(C)C"
+"1-Butyl-1-methylpiperidinium Bis(trifluoromethanesulfonyl)imide": "C[N+]1(CCCC)CCCCC1.O=S([N-]S(=O)(C(F)(F)F)=O)(C(F)(F)F)=O"
+"1-Butyl-1-methylpiperidinium Bromide": "C[N+]1(CCCC)CCCCC1.[Br-]"
+"1-Butyl-1-methylpyrrolidinium Bis(trifluoromethanesulfonyl)imide": "C[N+]1(CCCC)CCCC1.O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O"
+"1-Butyl-1-methylpyrrolidinium Bromide": "C[N+]1(CCCC)CCCC1.[Br-]"
+"1-Butyl-1-methylpyrrolidinium Chloride": "C[N+]1(CCCC)CCCC1.[Cl-]"
+"1-Butyl-1-methylpyrrolidinium Dicyanamide": "C[N+]1(CCCC)CCCC1.N#C[N-]C#N"
+"1-Butyl-1-methylpyrrolidinium Trifluoromethanesulfonate": "C[N+]1(CCCC)CCCC1.O=S(C(F)(F)F)([O-])=O"
+"1-Butyl-2,3-dimethylimidazolium Bis(trifluoromethanesulfonyl)imide": "O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O.CC1=[N+](C)C=CN1CCCC"
+"1-Butyl-2,3-dimethylimidazolium Chloride": "C[N+]1=C(C)N(CCCC)C=C1.[Cl-]"
+"1-Butyl-2,3-dimethylimidazolium Hexafluorophosphate": "C[N+]1=C(C)N(CCCC)C=C1.F[P-](F)(F)(F)(F)F"
+"1-Butyl-2,3-dimethylimidazolium Tetrafluoroborate": "C[N+]1=C(C)N(CCCC)C=C1.F[B-](F)(F)F"
+"1-Butyl-2,3-dimethylimidazolium Trifluoromethanesulfonate": "C[N+]1=C(C)N(CCCC)C=C1.O=S(C(F)(F)F)([O-])=O"
+"1-Butyl-3-methylimidazolium Bis(trifluoromethanesulfonyl)imide": "C[N+]1=CN(CCCC)C=C1.O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O"
+"1-Butyl-3-methylimidazolium Bromide": "C[N+]1=CN(CCCC)C=C1.[Br-]"
+"1-Butyl-3-methylimidazolium Chloride": "C[N+]1=CN(CCCC)C=C1.[Cl-]"
+"1-Butyl-3-methylimidazolium Dicyanamide": "C[N+]1=CN(CCCC)C=C1.N#C[N-]C#N"
+"1-Butyl-3-methylimidazolium Hexafluorophosphate": "C[N+]1=CN(CCCC)C=C1.F[P-](F)(F)(F)(F)F"
+"1-Butyl-3-methylimidazolium Iodide": "C[N+]1=CN(CCCC)C=C1.[I-]"
+"1-Butyl-3-methylimidazolium Methanesulfonate": "C[N+]1=CN(CCCC)C=C1.CS(=O)([O-])=O"
+"1-Butyl-3-methylimidazolium Methyl Sulfate": "C[N+]1=CN(CCCC)C=C1.O=S(OC)([O-])=O"
+"1-Butyl-3-methylimidazolium Tetrachloroferrate": "C[N+]1=CN(CCCC)C=C1.Cl[Fe-](Cl)(Cl)Cl"
+"1-Butyl-3-methylimidazolium Tetrafluoroborate": "C[N+]1=CN(CCCC)C=C1.F[B-](F)(F)F"
+"1-Butyl-3-methylimidazolium Thiocyanate": "C[N+]1=CN(CCCC)C=C1.[S-]C#N"
+"1-Butyl-3-methylimidazolium Tribromide": "C[N+]1=CN(CCCC)C=C1.[Br-].[Br-].[Br-]"
+"1-Butyl-3-methylimidazolium Tricyanomethanide": "C[N+]1=CN(CCCC)C=C1.N#C[C-](C#N)C#N"
+"1-Butyl-3-methylimidazolium Trifluoro(trifluoromethyl)borate": "C[N+]1=CN(CCCC)C=C1.FC([B-](F)(F)F)(F)F"
+"1-Butyl-3-methylimidazolium Trifluoroacetate": "C[N+]1=CN(CCCC)C=C1.O=C([O-])C(F)(F)F"
+"1-Butyl-3-methylimidazolium Trifluoromethanesulfonate": "C[N+]1=CN(CCCC)C=C1.O=S(C(F)(F)F)([O-])=O"
+"1-Butyl-3-methylpyridinium Bromide": "CC1=C[N+](CCCC)=CC=C1.[Br-]"
+"1-Butyl-3-methylpyridinium Chloride": "CC1=C[N+](CCCC)=CC=C1.[Cl-]"
+"1-Butyl-4-methylpyridinium Bromide": "CC1=CC=[N+](CCCC)C=C1.[Br-]"
+"1-Butyl-4-methylpyridinium Chloride": "CC1=CC=[N+](CCCC)C=C1.[Cl-]"
+"1-Butyl-4-methylpyridinium Hexafluorophosphate": "CC1=CC=[N+](CCCC)C=C1.F[P-](F)(F)(F)(F)F"
+"1-Butylpyridinium Bis(trifluoromethanesulfonyl)imide": "O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O.CCCC[N+]1=CC=CC=C1"
+"1-Butylpyridinium Bromide": "CCCC[N+]1=CC=CC=C1.[Br-]"
+"1-Butylpyridinium Chloride": "CCCC[N+]1=CC=CC=C1.[Cl-]"
+"1-Butylpyridinium Hexafluorophosphate": "CCCC[N+]1=CC=CC=C1.F[P-](F)(F)(F)(F)F"
+"1-Butylpyridinium Tetrafluoroborate": "CCCC[N+]1=CC=CC=C1.F[B-](F)(F)F"
+"1-Chloro-2-iodoethane": "ICCCl"
+"1-Cyclohexyl-3-(2-morpholinoethyl)carbodiimide Metho-p-toluenesulfonate": "C[N+]1(CCN=C=NC2CCCCC2)CCOCC1.O=S(C3=CC=C(C)C=C3)([O-])=O"
+"1-Cyclopentenylboronic Acid": "OB(C1=CCCC1)O"
+"1-Decyl-3-methylimidazolium Bis(trifluoromethanesulfonyl)imide": "C[N+]1=CN(CCCCCCCCCC)C=C1.O=S(C(F)(F)F)([N-]S(C(F)(F)F)(=O)=O)=O"
+"1-Decyl-3-methylimidazolium Bromide": "C[N+]1=CN(CCCCCCCCCC)C=C1.[Br-]"
+"1-Decyl-3-methylimidazolium Chloride": "C[N+]1=CN(CCCCCCCCCC)C=C1.[Cl-]"
+"1-Ethoxycarbonyl-2-ethoxy-1,2-dihydroquinoline": "CCOC1N(C(OCC)=O)C2=C(C=CC=C2)C=C1"
+"1-Ethyl-1-methylpyrrolidinium Bromide": "C[N+]1(CC)CCCC1.[Br-]"
+"1-Ethyl-1-methylpyrrolidinium Tetrafluoroborate": "C[N+]1(CC)CCCC1.F[B-](F)(F)F"
+"1-Ethyl-2,3-dimethylimidazolium Bis(trifluoromethanesulfonyl)imide": "O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O.CC1=[N+](C)C=CN1CC"
+"1-Ethyl-2-methylpyridinium Bromide": "CC1=CC=CC=[N+]1CC.[Br-]"
+"1-Ethyl-3-(hydroxymethyl)pyridinium Ethyl Sulfate": "OCC1=C[N+](CC)=CC=C1.O=S(OCC)([O-])=O"
+"1-Ethyl-3-methylimidazolium Acetate": "C[N+]1=CN(CC)C=C1.CC([O-])=O"
+"1-Ethyl-3-methylimidazolium Bis(trifluoromethanesulfonyl)imide": "C[N+]1=CN(CC)C=C1.O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O"
+"1-Ethyl-3-methylimidazolium Bromide": "C[N+]1=CN(CC)C=C1.[Br-]"
+"1-Ethyl-3-methylimidazolium Chloride": "C[N+]1=CN(CC)C=C1.[Cl-]"
+"1-Ethyl-3-methylimidazolium Dicyanamide": "CCN1C=[N+](C)C=C1.N#C[N-]C#N"
+"1-Ethyl-3-methylimidazolium Diethyl Phosphate": "C[N+]1=CN(CC)C=C1.O=P(OCC)([O-])OCC"
+"1-Ethyl-3-methylimidazolium Ethyl Sulfate": "C[N+]1=CN(CC)C=C1.O=S(OCC)([O-])=O"
+"1-Ethyl-3-methylimidazolium Hexafluorophosphate": "C[N+]1=CN(CC)C=C1.F[P-](F)(F)(F)(F)F"
+"1-Ethyl-3-methylimidazolium Hydrogen Sulfate": "C[N+]1=CN(CC)C=C1.O=S(O)([O-])=O"
+"1-Ethyl-3-methylimidazolium Iodide": "C[N+]1=CN(CC)C=C1.[I-]"
+"1-Ethyl-3-methylimidazolium Methanesulfonate": "C[N+]1=CN(CC)C=C1.CS(=O)([O-])=O"
+"1-Ethyl-3-methylimidazolium Methyl Sulfate": "C[N+]1=CN(CC)C=C1.O=S(OC)([O-])=O"
+"1-Ethyl-3-methylimidazolium Nitrate": "C[N+]1=CN(CC)C=C1.[O-][N+]([O-])=O"
+"1-Ethyl-3-methylimidazolium Tetrachloroferrate": "C[N+]1=CN(CC)C=C1.Cl[Fe-](Cl)(Cl)Cl"
+"1-Ethyl-3-methylimidazolium Tetrafluoroborate": "C[N+]1=CN(CC)C=C1.F[B-](F)(F)F"
+"1-Ethyl-3-methylimidazolium Thiocyanate": "C[N+]1=CN(CC)C=C1.[S-]C#N"
+"1-Ethyl-3-methylimidazolium Tricyanomethanide": "C[N+]1=CN(CC)C=C1.N#C[C-](C#N)C#N"
+"1-Ethyl-3-methylimidazolium Trifluoro(trifluoromethyl)borate": "C[N+]1=CN(CC)C=C1.FC([B-](F)(F)F)(F)F"
+"1-Ethyl-3-methylimidazolium Trifluoroacetate": "C[N+]1=CN(CC)C=C1.O=C([O-])C(F)(F)F"
+"1-Ethyl-3-methylimidazolium Trifluoromethanesulfonate": "C[N+]1=CN(CC)C=C1.O=S(C(F)(F)F)([O-])=O"
+"1-Ethyl-3-methylimidazolium p-Toluenesulfonate": "C[N+]1=CN(CC)C=C1.CC2=CC=C(S(=O)([O-])=O)C=C2"
+"1-Ethyl-3-methylpyridinium Bis(trifluoromethanesulfonyl)imide": "CC1=CC=C[N+](CC)=C1.O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O"
+"1-Ethyl-3-methylpyridinium Ethyl Sulfate": "CC1=C[N+](CC)=CC=C1.O=S(OCC)([O-])=O"
+"1-Ethyl-4-methylpyridinium Bromide": "CC1=CC=[N+](CC)C=C1.[Br-]"
+"1-Ethylpyridinium Bromide": "CC[N+]1=CC=CC=C1.[Br-]"
+"1-Ethylpyridinium Chloride": "CC[N+]1=CC=CC=C1.[Cl-]"
+"1-Fluoro-2,4,6-trimethylpyridinium Tetrafluoroborate": "CC1=[N+](F)C(C)=CC(C)=C1.F[B-](F)(F)F"
+"1-Fluoro-2,4,6-trimethylpyridinium Trifluoromethanesulfonate": "CC1=[N+](F)C(C)=CC(C)=C1.O=S(C(F)(F)F)([O-])=O"
+"1-Fluoro-2,6-dichloropyridinium Tetrafluoroborate": "ClC1=[N+](F)C(Cl)=CC=C1.F[B-](F)(F)F"
+"1-Fluoro-3,3-dimethyl-1,2-benziodoxole": "CC1(C)OI(F)C2=CC=CC=C12"
+"1-Fluoropyridinium Tetrafluoroborate": "F[N+]1=CC=CC=C1.F[B-](F)(F)F"
+"1-Fluoropyridinium Trifluoromethanesulfonate": "F[N+]1=CC=CC=C1.O=S(C(F)(F)F)([O-])=O"
+"1H-Benzotriazol-1-yloxytripyrrolidinophosphonium Hexafluorophosphate": "F[P-](F)(F)(F)(F)F.N1([P+](N2CCCC2)(ON3N=NC4=CC=CC=C43)N5CCCC5)CCCC1"
+"1H-Benzotriazol-1-yloxytris(dimethylamino)phosphonium Hexafluorophosphate": "CN([P+](N(C)C)(ON1N=NC2=CC=CC=C21)N(C)C)C.F[P-](F)(F)(F)(F)F"
+"1H-Cyclopenta[l]phenanthrene": "C12=CC=CC=C1C(CC=C3)=C3C4=C2C=CC=C4"
+"1-Hexyl-2,3-dimethylimidazolium Iodide": "C[N+]1=C(C)N(CCCCCC)C=C1.[I-]"
+"1-Hexyl-3-methylimidazolium Bis(trifluoromethanesulfonyl)imide": "C[N+]1=CN(CCCCCC)C=C1.O=S([N-]S(=O)(C(F)(F)F)=O)(C(F)(F)F)=O"
+"1-Hexyl-3-methylimidazolium Bromide": "C[N+]1=CN(CCCCCC)C=C1.[Br-]"
+"1-Hexyl-3-methylimidazolium Chloride": "C[N+]1=CN(CCCCCC)C=C1.[Cl-]"
+"1-Hexyl-3-methylimidazolium Hexafluorophosphate": "C[N+]1=CN(CCCCCC)C=C1.F[P-](F)(F)(F)(F)F"
+"1-Hexyl-3-methylimidazolium Iodide": "C[N+]1=CN(CCCCCC)C=C1.[I-]"
+"1-Hexyl-3-methylimidazolium Tetrafluoroborate": "C[N+]1=CN(CCCCCC)C=C1.F[B-](F)(F)F"
+"1-Hexyl-3-methylimidazolium Trifluoromethanesulfonate": "C[N+]1=CN(CCCCCC)C=C1.O=S(C(F)(F)F)([O-])=O"
+"1-Hexylpyridinium Hexafluorophosphate": "CCCCCC[N+]1=CC=CC=C1.F[P-](F)(F)(F)(F)F"
+"1-Hydroxy-6-(trifluoromethyl)benzotriazole": "FC(C1=CC=C2N=NN(O)C2=C1)(F)F"
+"1-Methoxy-3-(trimethylsilyloxy)-1,3-butadiene": "C=C(O[Si](C)(C)C)/C=C/OC"
+"1-Methyl-1-[4-(diphenylphosphino)benzyl]pyrrolidinium Bromide": "C[N+]1(CC2=CC=C(P(C3=CC=CC=C3)C4=CC=CC=C4)C=C2)CCCC1.[Br-]"
+"1-Methyl-1-propylpiperidinium Bis(fluorosulfonyl)imide": "O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O.C[N+]1(CCC)CCCCC1"
+"1-Methyl-1-propylpiperidinium Bromide": "CCC[N+]1(C)CCCCC1.[Br-]"
+"1-Methyl-1-propylpyrrolidinium Bis(trifluoromethanesulfonyl)imide": "O=S(NS(C(F)(F)F)(=O)=O)(C(F)(F)F)=O.C[N+]1(CCC)CCCC1"
+"1-Methyl-2-pyrrolidinone": "O=C1CCCN1C"
+"1-Methyl-3-n-octylimidazolium Bromide": "CCCCCCCC[N+]1=CN(C)C=C1.[Br-]"
+"1-Methyl-3-n-octylimidazolium Chloride": "CCCCCCCC[N+]1=CN(C)C=C1.[Cl-]"
+"1-Methyl-3-n-octylimidazolium Hexafluorophosphate": "CCCCCCCC[N+]1=CN(C)C=C1.F[P-](F)(F)(F)(F)F"
+"1-Methyl-3-n-octylimidazolium Tetrafluoroborate": "CCCCCCCC[N+]1=CN(C)C=C1.F[B-](F)(F)F"
+"1-Methyl-3-n-octylimidazolium Trifluoromethanesulfonate": "CCCCCCCC[N+]1=CN(C)C=C1.O=S(C(F)(F)F)([O-])=O"
+"1-Methyl-3-pentylimidazolium Bromide": "CCCCC[N+]1=CN(C)C=C1.[Br-]"
+"1-Methyl-3-pentylimidazolium Tetrafluoroborate": "CCCCC[N+]1=CN(C)C=C1.F[B-](F)(F)F"
+"1-Methyl-3-propylimidazolium Bromide": "CCC[N+]1=CN(C)C=C1.[Br-]"
+"1-Methyl-3-propylimidazolium Chloride": "CCC[N+]1=CN(C)C=C1.[Cl-]"
+"1-Methyl-3-propylimidazolium Iodide": "CCC[N+]1=CN(C)C=C1.[I-]"
+"1-Methyl-3-propylimidazolium Tetrafluoroborate": "CCC[N+]1=CN(C)C=C1.F[B-](F)(F)F"
+"1-Phenyl-1,3-butanedione": "CC(CC(C1=CC=CC=C1)=O)=O"
+"1-Phenyl-2-(trimethylsilyl)acetylene": "C[Si](C#CC1=CC=CC=C1)(C)C"
+"1-Propylpyridinium Chloride": "CCC[N+]1=CC=CC=C1.[Cl-]"
+"1-Trifluoromethyl-1,2-benziodoxol-3(1H)-one": "O=C1OI(C(F)(F)F)C2=CC=CC=C12"
+"1-Trifluoromethyl-3,3-dimethyl-1,2-benziodoxole": "CC1(C)OI(C(F)(F)F)C2=CC=CC=C12"
+"2-(1H-1,2,4-Triazol-3-yl)pyridine": "C1(C2=NNC=N2)=NC=CC=C1"
+"2-(2-Bromophenyl)-2,3-dihydro-1H-naphtho[1,8-de][1,3,2]diazaborine": "BrC(C=CC=C1)=C1B(N2)NC3=CC=CC4=C3C2=CC=C4"
+"2-(2-Chloro-6-fluorophenyl)ethylamine hydrochloride": "NCCC1=C(F)C=CC=C1Cl.[H]Cl"
+"2-(2-Hydroxyphenyl)benzothiazole": "OC1=CC=CC=C1C2=NC3=CC=CC=C3S2"
+"2-(2-Hydroxyphenyl)benzoxazole": "OC1=CC=CC=C1C2=NC3=CC=CC=C3O2"
+"2-(2-Pyridyl)benzoxazole": "C1(C2=NC=CC=C2)=NC3=CC=CC=C3O1"
+"2-(2-Pyridyl)indole": "C(N1)(C2=NC=CC=C2)=CC3=C1C=CC=C3"
+"2-(3,4-Epoxycyclohexyl)ethyltrimethoxysilane": "CO[Si](OC)(CCC1CC(O2)C2CC1)OC"
+"2-(3-Bromophenyl)-2,3-dihydro-1H-naphtho[1,8-de][1,3,2]diazaborine": "BrC1=CC=CC(B(N2)NC3=CC=CC4=C3C2=CC=C4)=C1"
+"2-(4-Bromophenyl)-2,3-dihydro-1H-naphtho[1,8-de][1,3,2]diazaborine": "BrC1=CC=C(C=C1)B(N2)NC3=CC=CC4=CC=CC2=C43"
+"2-(4-Thiazolyl)benzimidazole": "C1(C2=CSC=N2)=NC3=CC=CC=C3N1"
+"2-(5-Norbornene-2,3-dicarboximido)-1,1,3,3-tetramethyluronium Tetrafluoroborate": "CN(C)C(N(C)C)=[O+]N(C1=O)C(C2C1C3C=CC2C3)=O.F[B-](F)(F)F"
+"2-(Dicyclohexylphosphino)-2'-(dimethylamino)biphenyl": "CN(C1=CC=CC=C1C2=CC=CC=C2P(C3CCCCC3)C4CCCCC4)C"
+"2-(Dicyclohexylphosphino)biphenyl": "C1(C2=CC=CC=C2)=CC=CC=C1P(C3CCCCC3)C4CCCCC4"
+"2-(Dimethylvinylsilyl)pyridine": "C=C[Si](C1=NC=CC=C1)(C)C"
+"2-(Diphenylphosphino)benzaldehyde": "O=CC1=CC=CC=C1P(C2=CC=CC=C2)C3=CC=CC=C3"
+"2-(Diphenylphosphino)benzoic Acid": "O=C(O)C1=CC=CC=C1P(C2=CC=CC=C2)C3=CC=CC=C3"
+"2-(Diphenylphosphino)benzonitrile": "N#CC1=CC=CC=C1P(C2=CC=CC=C2)C3=CC=CC=C3"
+"2-(Diphenylphosphino)biphenyl": "C1(C2=CC=CC=C2)=CC=CC=C1P(C3=CC=CC=C3)C4=CC=CC=C4"
+"2-(Di-tert-butylphosphino)biphenyl": "CC(P(C1=CC=CC=C1C2=CC=CC=C2)C(C)(C)C)(C)C"
+"2-(Trimethylsilylethynyl)thiophene": "C[Si](C#CC1=CC=CS1)(C)C"
+"2,2'-(Methylimino)bis(N,N-di-n-octylacetamide)": "CN(CC(N(CCCCCCCC)CCCCCCCC)=O)CC(N(CCCCCCCC)CCCCCCCC)=O"
+"2,2,2-Trifluoro-1,1-ethanediol": "OC(O)C(F)(F)F"
+"2,2,2-Trifluoroethyl Methanesulfonate": "CS(=O)(OCC(F)(F)F)=O"
+"2,2,2-Trifluoroethyl Trifluoromethanesulfonate": "O=S(C(F)(F)F)(OCC(F)(F)F)=O"
+"2,2,2-Trifluoroethyl p-Toluenesulfonate": "CC1=CC=C(S(=O)(OCC(F)(F)F)=O)C=C1"
+"2,2,2-Trifluoro-N,N-dimethylacetamide": "O=C(N(C)C)C(F)(F)F"
+"2,2,3,3,3-Pentafluoropropyl p-Toluenesulfonate": "CC1=CC=C(S(=O)(OCC(F)(F)C(F)(F)F)=O)C=C1"
+"2,2,6,6-Tetramethylpiperidine": "CC1(C)CCCC(C)(C)N1"
+"2,2,6,6-Tetramethylpiperidine 1-Oxyl": "CC1(C)CCCC(C)(C)N1[O]"
+"2,2,6,6-Tetramethylpiperidine 1-Oxyl Free Radical": "CC1(C)CCCC(C)(C)N1[O]"
+"2,2':6',2''-Terpyridine": "C1(C2=NC(C3=NC=CC=C3)=CC=C2)=NC=CC=C1"
+"2,2':6',2''-Terpyridine-4'-carboxylic Acid": "O=C(C1=CC(C2=NC=CC=C2)=NC(C3=NC=CC=C3)=C1)O"
+"2,2′-Bipyridinium chlorochromate": "[O-][Cr](=O)(Cl)=O.[O-][Cr](=O)(Cl)=O.C1(C2=CC=CC=[NH+]2)=CC=CC=[NH+]1"
+"2,2'-Bi(1,8-naphthyridine)": "C1(C2=NC3=NC=CC=C3C=C2)=NC4=NC=CC=C4C=C1"
+"2,2'-Bi-4-lepidine": "CC1=CC(C2=NC3=CC=CC=C3C(C)=C2)=NC4=C1C=CC=C4"
+"2,2'-Bicinchoninic Acid Dipotassium Salt Hydrate": "O=C([O-])C1=CC(C2=NC3=CC=CC=C3C(C([O-])=O)=C2)=NC4=CC=CC=C14.[H]O[H].[K+].[K+]"
+"2,2'-Biimidazole": "C1(C2=NC=CN2)=NC=CN1"
+"2,2'-Bipyrazine": "C1(C2=NC=CN=C2)=NC=CN=C1"
+"2,2'-Bipyridine-3,3'-dicarboxylic Acid": "O=C(C1=CC=CN=C1C2=NC=CC=C2C(O)=O)O"
+"2,2'-Bipyridine-3,3'-diol": "OC1=CC=CN=C1C2=NC=CC=C2O"
+"2,2'-Bipyridine-4,4'-dicarboxylic Acid": "O=C(C1=CC(C2=NC=CC(C(O)=O)=C2)=NC=C1)O"
+"2,2'-Bipyridine-5,5'-dicarboxylic Acid": "O=C(C1=CN=C(C2=NC=C(C(O)=O)C=C2)C=C1)O"
+"2,2'-Bipyridine-6,6'-dicarboxylic Acid": "O=C(C1=CC=CC(C2=NC(C(O)=O)=CC=C2)=N1)O"
+"2,2'-Bipyridine-6,6'-diol": "OC1=CC=CC(C2=NC(O)=CC=C2)=N1"
+"2,2'-Bipyridine-6-carbonitrile": "N#CC1=CC=CC(C2=NC=CC=C2)=N1"
+"2,2'-Bipyridyl": "C1(C2=NC=CC=C2)=NC=CC=C1"
+"2,2'-Bipyridyl 1,1'-Dioxide": "[O-][N+]1=CC=CC=C1C2=CC=CC=[N+]2[O-]"
+"2,2'-Bipyrimidyl": "C1(C2=NC=CC=N2)=NC=CC=N1"
+"2,2'-Biquinoline": "C1(C2=NC3=CC=CC=C3C=C2)=NC4=CC=CC=C4C=C1"
+"2,2'-Bis(diphenylphosphino)biphenyl": "C1(C2=CC=CC=C2P(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1P(C5=CC=CC=C5)C6=CC=CC=C6"
+"2,2'-Carbonylbis(3,5-dioxo-4-methyl-1,2,4-oxadiazolidine)": "O=C(N(C(N1C)=O)OC1=O)N(C(N2C)=O)OC2=O"
+"2,2'-Diamino-4,4'-bithiazole": "NC1=NC(C2=CSC(N)=N2)=CS1"
+"2,2-Difluoro-2-(fluorosulfonyl)acetic Acid": "O=C(O)C(F)(F)S(=O)(F)=O"
+"2,2-Difluoroethyl Trifluoromethanesulfonate": "O=S(C(F)(F)F)(OCC(F)F)=O"
+"2,2-Difluoroethylamine": "NCC(F)F"
+"2,2-Dimethyl-6,6,7,7,8,8,8-heptafluoro-3,5-octanedione": "CC(C)(C)C(CC(C(F)(F)C(F)(F)C(F)(F)F)=O)=O"
+"2,2-Dimethylpropylmagnesium chloride": "Cl[Mg]CC(C)(C)C"
+"2,2'-Dipyridyl Disulfide": "C1(SSC2=NC=CC=C2)=NC=CC=C1"
+"2,2'-Methylenebisbenzothiazole": "C1(CC2=NC3=CC=CC=C3S2)=NC4=CC=CC=C4S1"
+"2,3,7,8,12,13,17,18-Octaethylporphyrin": "CCC1=C(CC)C2=NC1=CC3=C(CC)C(CC)=C(N3)C=C4C(CC)=C(CC)C(C=C5C(CC)=C(CC)C(N5)=C2)=N4"
+"2,3,7,8,12,13,17,18-Octafluoro-5,10,15,20-tetrakis(pentafluorophenyl)porphyrin": "FC1=C(F)C(F)=C(F)C(F)=C1C2=C3C(F)=C(F)C(C(C4=C(F)C(F)=C(F)C(F)=C4F)=C(N5)C(F)=C(F)C5=C(C6=C(F)C(F)=C(F)C(F)=C6F)C7=NC(C(F)=C7F)=C(C8=C(F)C(F)=C(F)C(F)=C8F)C9=C(F)C(F)=C2N9)=N3"
+"2,3-Dimethyl-1-propylimidazolium Bis(trifluoromethanesulfonyl)imide": "CN1C(C)=[N+](CCC)C=C1.O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O"
+"2,3-Lutidine": "CC1=NC=CC=C1C"
+"2,4,4,6-Tetrabromo-2,5-cyclohexadienone": "BrC1=CC(Br)(Br)C=C(Br)C1=O"
+"2,4,5-Trichlorophenol": "OC1=CC(Cl)=C(Cl)C=C1Cl"
+"2,4,6,8-Tetramethyl-2,4,6,8-tetravinylcyclotetrasiloxane": "C=CO1(C)[SiH2]O(C=C)(C)[SiH2]O(C=C)(C)[SiH2]O(C=C)(C)[SiH2]1"
+"2,4,6,8-Tetramethylcyclotetrasiloxane": "CO1[SiH2]O(C)[SiH2]O(C)[SiH2]O(C)[SiH2]1"
+"2,4,6-Tri(2-pyridyl)-1,3,5-triazine": "C1(C2=NC=CC=C2)=NC(C3=NC=CC=C3)=NC(C4=NC=CC=C4)=N1"
+"2,4,6-Tri(4-pyridyl)-1,3,5-triazine": "C1(C2=CC=NC=C2)=NC(C3=CC=NC=C3)=NC(C4=CC=NC=C4)=N1"
+"2,4,6-Trichlorobenzoyl Chloride": "O=C(Cl)C1=C(Cl)C=C(Cl)C=C1Cl"
+"2,4,6-Triisopropylbenzenesulfonyl Chloride": "O=S(C1=C(C(C)C)C=C(C(C)C)C=C1C(C)C)(Cl)=O"
+"2,4,6-Trimethylpyridinium p-Toluenesulfonate": "CC1=[NH+]C(C)=CC(C)=C1.CC2=CC=C(S(=O)([O-])=O)C=C2"
+"2,4,6-Tris(3,4,5-trifluorophenyl)boroxin": "FC1=C(F)C(F)=CC(B2OB(C3=CC(F)=C(F)C(F)=C3)OB(C4=CC(F)=C(F)C(F)=C4)O2)=C1"
+"2,4-Dibromo-6-[(E)-[[(1R,2R)-2-(isoindolin-2-yl)-1,2-diphenylethyl]imino]methyl]phenol": "OC1=C(/C=N/[C@H](C2=CC=CC=C2)[C@H](N3CC4=C(C=CC=C4)C3)C5=CC=CC=C5)C=C(Br)C=C1Br"
+"2,4-Dibromo-6-[[[[(4S,5S)-4,5-dihydro-4,5-diphenyl-1-tosyl-1H-imidazol-2-yl]methyl][(S)-1-phenylethyl]amino]methyl]phenol": "OC1=C(CN(CC2=N[C@@H](C3=CC=CC=C3)[C@H](C4=CC=CC=C4)N2S(=O)(C5=CC=C(C)C=C5)=O)[C@H](C6=CC=CC=C6)C)C=C(Br)C=C1Br"
+"2,4-Lutidine": "CC1=NC=CC(C)=C1"
+"2,4-Mesitylenedisulfonyl Dichloride": "CC1=C(S(=O)(Cl)=O)C(C)=CC(C)=C1S(=O)(Cl)=O"
+"2,5-Bis(4-bromophenyl)-1,1-dimethyl-3,4-diphenylsilole": "C[Si]1(C)C(C2=CC=C(Br)C=C2)=C(C3=CC=CC=C3)C(C4=CC=CC=C4)=C1C5=CC=C(Br)C=C5"
+"2,5-Bis[(trimethylsilyl)ethynyl]thiophene": "C[Si](C#CC1=CC=C(C#C[Si](C)(C)C)S1)(C)C"
+"2,5-Dibromo-1,1,3,4-tetraphenylsilole": "BrC1=C(C2=CC=CC=C2)C(C3=CC=CC=C3)=C(Br)[Si]1(C4=CC=CC=C4)C5=CC=CC=C5"
+"2,5-Dibromo-1,1-dimethyl-3,4-diphenylsilole": "C[Si]1(C)C(Br)=C(C2=CC=CC=C2)C(C3=CC=CC=C3)=C1Br"
+"2,5-Diphenylpyridine": "C1(C2=CC=CC=C2)=NC=C(C3=CC=CC=C3)C=C1"
+"2,5-Lutidine": "CC1=NC=C(C)C=C1"
+"2,5-Norbornadiene": "C12C=CC(C2)C=C1"
+"2,6-Bis(2-benzimidazolyl)pyridine": "C1(C2=NC3=CC=CC=C3N2)=NC(C4=NC5=CC=CC=C5N4)=CC=C1"
+"2,6-Bis(2-pyridyl)-4(1H)-pyridone": "O=C1C=C(C2=NC=CC=C2)NC(C3=NC=CC=C3)=C1"
+"2,6-Bis[(2,2,6,6-tetramethyl-1-piperidinyl)methyl]phenylboronic Acid": "OB(C1=C(CN2C(C)(C)CCCC2(C)C)C=CC=C1CN3C(C)(C)CCCC3(C)C)O"
+"2,6-Bis[(2R,4S,5S)-1-benzyl-4,5-diphenylimidazolidin-2-yl]pyridine": "C1([C@@H]2N[C@@H](C3=CC=CC=C3)[C@H](C4=CC=CC=C4)N2CC5=CC=CC=C5)=NC([C@@H]6N[C@@H](C7=CC=CC=C7)[C@H](C8=CC=CC=C8)N6CC9=CC=CC=C9)=CC=C1"
+"2,6-Bis[(2S,4S)-4-methyl-5,5-diphenyloxazolidin-2-yl]pyridine": "C[C@@H]1N[C@H](C2=CC=CC([C@@H]3OC(C4=CC=CC=C4)(C5=CC=CC=C5)[C@H](C)N3)=N2)OC1(C6=CC=CC=C6)C7=CC=CC=C7"
+"2,6-Bis[(2S,5S)-4,4-diphenyl-1-aza-3-oxabicyclo[3.3.0]octan-2-yl]pyridine": "[H][C@]12C(C3=CC=CC=C3)(C4=CC=CC=C4)O[C@@H](C5=CC=CC([C@H]6N7CCC[C@@]7([H])C(C8=CC=CC=C8)(C9=CC=CC=C9)O6)=N5)N1CCC2"
+"2,6-Di(1-pyrazolyl)pyridine": "C1(N2N=CC=C2)=NC(N3N=CC=C3)=CC=C1"
+"2,6-Di(2H-1,2,3-triazol-4-yl)pyridine": "C1(C2=NNN=C2)=NC(C3=NNN=C3)=CC=C1"
+"2,6-Dimethyl-3,5-heptanedione": "CC(C)C(CC(C(C)C)=O)=O"
+"2,6-Lutidine": "CC1=NC(C)=CC=C1"
+"2,8,9-Triisobutyl-2,5,8,9-tetraaza-1-phosphabicyclo[3.3.3]undecane ": "CC(C)CN1CCN2CCN(CC(C)C)P1N(CC(C)C)CC2"
+"2,8,9-Triisopropyl-2,5,8,9-tetraaza-1-phosphabicyclo[3,3,3]undecane": "CC(N1CCN2CCN(C(C)C)P1N(C(C)C)CC2)C"
+"2,8-Difluoro-5-(trifluoromethyl)-5H-dibenzo[b,d]thiophen-5-ium Trifluoromethanesulfonate": "FC([S+]1C2=CC=C(F)C=C2C3=CC(F)=CC=C31)(F)F.O=S(C(F)(F)F)([O-])=O"
+"2,9-Dibutyl-1,10-phenanthroline": "CCCCC1=NC2=C3N=C(CCCC)C=CC3=CC=C2C=C1"
+"2,9-Dichloro-1,10-phenanthroline": "ClC1=NC2=C3N=C(Cl)C=CC3=CC=C2C=C1"
+"2,9-Diphenyl-1,10-phenanthroline": "C1(C2=CC=CC=C2)=NC3=C4N=C(C5=CC=CC=C5)C=CC4=CC=C3C=C1"
+"2-[(2,2,6,6-Tetramethyl-1-piperidyl)methyl]phenylboronic Acid": "OB(C1=CC=CC=C1CN2C(C)(C)CCCC2(C)C)O"
+"2-[N,N-Bis(trifluoromethanesulfonyl)amino]-5-chloropyridine": "ClC1=CN=C(N(S(=O)(C(F)(F)F)=O)S(=O)(C(F)(F)F)=O)C=C1"
+"2-Acetylcyclohexanone": "O=C1C(C(C)=O)CCCC1"
+"2-Acetylcyclopentanone": "O=C1C(C(C)=O)CCC1"
+"2-Bromo-1,10-phenanthroline": "BrC1=NC2=C3N=CC=CC3=CC=C2C=C1"
+"2-Bromo-1-ethylpyridinium Tetrafluoroborate": "CC[N+]1=CC=CC=C1Br.F[B-](F)(F)F"
+"2-Bromo-2-cyano-N,N-dimethylacetamide": "O=C(N(C)C)C(Br)C#N"
+"2-Chloro-1,10-phenanthroline": "ClC1=NC2=C3N=CC=CC3=CC=C2C=C1"
+"2-Chloro-1,3,2-dioxaphospholane": "ClP1OCCO1"
+"2-Chloro-1,3-bis(2,6-diisopropylphenyl)-1H-imidazolium Chloride": "CC(C1=C([N+]2=C(Cl)N(C3=C(C(C)C)C=CC=C3C(C)C)C=C2)C(C(C)C)=CC=C1)C.[Cl-]"
+"2-Chloro-1,3-dimethylimidazolinium Chloride": "C[N+]1=C(Cl)N(C)CC1.[Cl-]"
+"2-Chloro-1,3-dimethylimidazolinium Hexafluorophosphate": "C[N+]1=C(Cl)N(C)CC1.F[P-](F)(F)(F)(F)F"
+"2-Chloro-1,3-dimethylimidazolinium Tetrafluoroborate": "C[N+]1=C(Cl)N(C)CC1.F[B-](F)(F)F"
+"2-Chloro-1-methylpyridinium Iodide": "C[N+]1=CC=CC=C1Cl.[I-]"
+"2-Chloro-1-methylpyridinium p-Toluenesulfonate": "C[N+]1=CC=CC=C1Cl.CC2=CC=C(S(=O)([O-])=O)C=C2"
+"2-Chloro-4H-1,3,2-benzodioxaphosphorin-4-one": "O=C1OP(Cl)OC2=CC=CC=C12"
+"2-Cyanoethyltriethoxysilane": "CCO[Si](OCC)(CCC#N)OCC"
+"2-Dicyclohexylphosphino-2',4',6'-triisopropylbiphenyl": "CC(C1=C(C2=CC=CC=C2P(C3CCCCC3)C4CCCCC4)C(C(C)C)=CC(C(C)C)=C1)C"
+"2-Dicyclohexylphosphino-2',6'-diisopropoxybiphenyl": "CC(OC1=C(C2=CC=CC=C2P(C3CCCCC3)C4CCCCC4)C(OC(C)C)=CC=C1)C"
+"2-Dicyclohexylphosphino-2',6'-dimethoxybiphenyl": "COC1=C(C2=CC=CC=C2P(C3CCCCC3)C4CCCCC4)C(OC)=CC=C1"
+"2-Di-tert-butylphosphino-2',4',6'-triisopropylbiphenyl": "CC(C1=C(C2=CC=CC=C2P(C(C)(C)C)C(C)(C)C)C(C(C)C)=CC(C(C)C)=C1)C"
+"2-Fluoro-1-methylpyridinium p-Toluenesulfonate": "C[N+]1=CC=CC=C1F.CC2=CC=C(S(=O)([O-])=O)C=C2"
+"2-Furoyltrifluoroacetone": "O=C(CC(C1=CC=CO1)=O)C(F)(F)F"
+"2-Hydroxy-2-azaadamantane": "ON1C2CC3CC(C2)CC1C3"
+"2-Hydroxybenzaldehyde Phenylhydrazone": "OC1=CC=CC=C1/C=N/NC2=CC=CC=C2"
+"2-Hydroxybenzoic Acid": "O=C(O)C1=CC=CC=C1O"
+"2-Hydroxypyridine N-Oxide": "OC1=CC=CC=[N+]1[O-]"
+"2-Iodosobenzoic Acid": "O=C(O)C1=CC=CC=C1I=O"
+"2-Iodoxybenzoic acid": "O=C(O)C1=CC=CC=C1I(=O)=O"
+"2-methoxy ethanol": "OCCOC"
+"2-Methyl-1,10-phenanthroline": "CC1=NC2=C3N=CC=CC3=CC=C2C=C1"
+"2-Methyl-6-nitrobenzoic Anhydride": "O=C(OC(C1=C([N+]([O-])=O)C=CC=C1C)=O)C2=C([N+]([O-])=O)C=CC=C2C"
+"2-Methylbenzo[e]indene": "N/A"
+"2-Methylcyclopenta[l]phenanthrene": "CC1=CC2=C3CC=CC=C3C4=C(C2=C1)C=CC=C4"
+"2-Nitrophenylarsonic Acid": "O=[As](C1=CC=CC=C1[N+]([O-])=O)(O)O"
+"2-Norbornene": "C12C=CC(C2)CC1"
+"2-Phenylethylboronic Acid": "OB(CCC1=CC=CC=C1)O"
+"2-Salicylideneaminophenol": "OC1=CC=CC=C1/N=C/C2=CC=CC=C2O"
+"2-tert-Butyl-1,1,3,3-tetramethylguanidine": "CN(C)C(N(C)C)=NC(C)(C)C"
+"2-Trimethylsilyloxy-1,3-butadiene": "C=C(O[Si](C)(C)C)C=C"
+"2-Trimethylsilylthiophene": "C[Si](C1=CC=CS1)(C)C"
+"3-(2-Aminoethylamino)propyltrimethoxysilane": "CO[Si](OC)(CCCNCCN)OC"
+"3-(Diethoxyphosphoryloxy)-1,2,3-benzotriazin-4(3H)-one": "O=C1N(OP(OCC)(OCC)=O)N=NC2=CC=CC=C12"
+"3-(Dimethylsilyloxy)-1,1,5,5-tetramethyl-3-phenyltrisiloxane": "C[SiH](C)O[Si](C1=CC=CC=C1)(O[SiH](C)C)O[SiH](C)C"
+"3-(Diphenylphosphino)-1-propylamine": "NCCCP(C1=CC=CC=C1)C2=CC=CC=C2"
+"3-(Triallylsilyl)propyl Acrylate": "C=CC(OCCC[Si](CC=C)(CC=C)CC=C)=O"
+"3-(Triallylsilyl)propyl Methacrylate": "CC(C(OCCC[Si](CC=C)(CC=C)CC=C)=O)=C"
+"3-(Triethoxysilyl)propyl Isocyanate": "CCO[Si](CCCN=C=O)(OCC)OCC"
+"3-(Trimethoxysilyl)propyl Acrylate": "C=CC(OCCC[Si](OC)(OC)OC)=O"
+"3-(Trimethoxysilyl)propyl Methacrylate": "CC(C(OCCC[Si](OC)(OC)OC)=O)=C"
+"3-(Trimethylsilylethynyl)thiophene": "C[Si](C#CC1=CSC=C1)(C)C"
+"3,3'-Iminobis(N,N-dimethylpropylamine)": "CN(C)CCCNCCCN(C)C"
+"3,3'-Methylenebis(1-tert-butyl-3-imidazolium Bromide)": "CC(N1C=C[N+](C[N+]2=CN(C(C)(C)C)C=C2)=C1)(C)C.[Br-].[Br-]"
+"3,3'-Methylenebis[1-(2,6-diisopropylphenyl)-3-imidazolium Bromide]": "CC(C1=C(N2C=C[N+](C[N+]3=CN(C4=C(C(C)C)C=CC=C4C(C)C)C=C3)=C2)C(C(C)C)=CC=C1)C.[Br-].[Br-]"
+"3,4,7,8-Tetramethyl-1,10-phenanthroline": "CC1=C(C)C2=CC=C3C(C)=C(C)C=NC3=C2N=C1"
+"3,4-Diacetyl-2,5-hexanedione": "CC(C(C(C)=O)C(C(C)=O)C(C)=O)=O"
+"3,4-Dihydro-2H-pyrido[1,2-a]pyrimidin-2-one": "O=C1N=C(C=CC=C2)N2CC1"
+"3,4-Dihydro-3-hydroxy-4-oxo-1,2,3-benzotriazine": "O=C1N(O)N=NC2=CC=CC=C12"
+"3,4-Lutidine": "CC1=C(C)C=CN=C1"
+"3,5,6,8-Tetrabromo-1,10-phenanthroline": "BrC1=CC2=C(Br)C(Br)=C3C=C(Br)C=NC3=C2N=C1"
+"3,5-Bis(trifluoromethyl)phenylboronic Acid": "OB(C1=CC(C(F)(F)F)=CC(C(F)(F)F)=C1)O"
+"3,5-Di(2-pyridyl)pyrazole": "C1(C2=NC=CC=C2)=NNC(C3=NC=CC=C3)=C1"
+"3,5-Heptanedione": "CCC(CC(CC)=O)=O"
+"3,5-Lutidine": "CC1=CC(C)=CN=C1"
+"3,6-Di(2-pyridyl)-1,2,4,5-tetrazine": "C1(C2=NC=CC=C2)=NN=C(C3=NC=CC=C3)N=N1"
+"3,8-Dibromo-1,10-phenanthroline": "BrC1=CC2=CC=C3C=C(Br)C=NC3=C2N=C1"
+"3-[(Dimethylsilyl)oxy]-1,1,3,5,5-pentamethyltrisiloxane": "C[SiH](C)O[Si](C)(O[SiH](C)C)O[SiH](C)C"
+"3-[[Dimethyl(vinyl)silyl]oxy]-1,1,5,5-tetramethyl-3-phenyl-1,5-divinyltrisiloxane": "C=C[Si](C)(C)O[Si](C1=CC=CC=C1)(O[Si](C)(C)C=C)O[Si](C)(C)C=C"
+"3-[[tert-Butyl(dimethyl)silyl]oxy]-1-propanol": "OCCCO[Si](C)(C(C)(C)C)C"
+"3-Aminopropyltriethoxysilane": "CCO[Si](OCC)(CCCN)OCC"
+"3-Aminopropyltrimethoxysilane": "CO[Si](OC)(CCCN)OC"
+"3-Bromo-1-(trimethylsilyl)-1-propyne": "C[Si](C#CCBr)(C)C"
+"3-Bromo-1,10-phenanthroline": "BrC1=CC2=CC=C3C=CC=NC3=C2N=C1"
+"3-Chloroacetylacetone": "CC(C(Cl)C(C)=O)=O"
+"3-Chloroperoxybenzoic acid ": "C1=CC(=CC(=C1)Cl)C(=O)OO"
+"3-Chloropropyltriethoxysilane": "CCO[Si](OCC)(CCCCl)OCC"
+"3-Ethyl-2,4-pentanedione": "CC(C(CC)C(C)=O)=O"
+"3-Glycidyloxypropyltrimethoxysilane": "CO[Si](OC)(CCCOCC1CO1)OC"
+"3-Mercaptopropyl(dimethoxy)methylsilane": "C[Si](OC)(CCCS)OC"
+"3-Methyl-1-phenyl-2-phospholene 1-Oxide": "CC(CC1)=CP1(C2=CC=CC=C2)=O"
+"3-Methyl-2,4-pentanedione": "CC(C(C)C(C)=O)=O"
+"3-Nitro-1,2,4-triazole": "O=[N+](C1=NNC=N1)[O-]"
+"3-Phenyl-2,4-pentanedione": "CC(C(C1=CC=CC=C1)C(C)=O)=O"
+"3-Pyridinecarboxylic Anhydride": "O=C(OC(C1=CC=CN=C1)=O)C2=CC=CN=C2"
+"3-Quinolineboronic acid": "OB(C1=CC2=CC=CC=C2N=C1)O"
+"3-Tolylboronic acid": "CC1=CC=CC(B(O)O)=C1"
+"3-Trimethoxysilylpropyl Chloride": "CO[Si](CCCCl)(OC)OC"
+"3-Trimethylsilyl-2-propyn-1-ol": "OCC#C[Si](C)(C)C"
+"4-([2,2':6',2''-Terpyridin]-4'-yl)benzoic Acid": "O=C(O)C1=CC=C(C2=CC(C3=NC=CC=C3)=NC(C4=NC=CC=C4)=C2)C=C1"
+"4-(4,6-Dimethoxy-1,3,5-triazin-2-yl)-4-methylmorpholinium Chloride": "C[N+]1(C2=NC(OC)=NC(OC)=N2)CCOCC1.[Cl-]"
+"4'-(4-Bromophenyl)-2,2':6',2''-terpyridine": "BrC1=CC=C(C2=CC(C3=NC=CC=C3)=NC(C4=NC=CC=C4)=C2)C=C1"
+"4-(4-Dimethylaminophenylazo)phenylarsonic Acid Hydrochloride": "O=[As](C1=CC=C(/N=N/C2=CC=C(N(C)C)C=C2)C=C1)(O)O.[H]Cl"
+"4'-(4-Pyridyl)-2,2':6',2''-terpyridine": "C1(C2=NC(C3=NC=CC=C3)=CC(C4=CC=NC=C4)=C2)=NC=CC=C1"
+"4-(Bromomethyl)-4'-methyl-2,2'-bipyridyl": "CC1=CC(C2=NC=CC(CBr)=C2)=NC=C1"
+"4-(Chloromethyl)-4'-methyl-2,2'-bipyridyl": "CC1=CC(C2=NC=CC(CCl)=C2)=NC=C1"
+"4-(Dimethylamino)phenyldiphenylphosphine": "CN(C1=CC=C(P(C2=CC=CC=C2)C3=CC=CC=C3)C=C1)C"
+"4-(Dimethylamino)pyridine": "CN(C1=CC=NC=C1)C"
+"4-(Diphenylphosphino)benzoic Acid": "O=C(O)C1=CC=C(P(C2=CC=CC=C2)C3=CC=CC=C3)C=C1"
+"4-(N,N-Dimethylamino)phenylboronic acid": "CN(C)C1=CC=C(B(O)O)C=C1"
+"4-(Trimethylsilyl)-3-butyn-2-one": "CC(C#C[Si](C)(C)C)=O"
+"4-(Trimethylsilyl)diphenylacetylene": "C[Si](C1=CC=C(C#CC2=CC=CC=C2)C=C1)(C)C"
+"4,4,4-Trifluoro-1-(2-naphthyl)-1,3-butanedione": "O=C(C1=CC=C2C=CC=CC2=C1)CC(C(F)(F)F)=O"
+"4,4,4-Trifluoro-1-(2-thienyl)-1,3-butanedione": "O=C(C1=CC=CS1)CC(C(F)(F)F)=O"
+"4,4,4-Trifluoro-1-(4-methoxyphenyl)-1,3-butanedione": "O=C(C1=CC=C(OC)C=C1)CC(C(F)(F)F)=O"
+"4,4,4-Trifluoro-1-(p-tolyl)-1,3-butanedione": "O=C(C1=CC=C(C)C=C1)CC(C(F)(F)F)=O"
+"4,4,4-Trifluoro-1-phenyl-1,3-butanedione": "O=C(C1=CC=CC=C1)CC(C(F)(F)F)=O"
+"4,4,5,5-Tetramethyl-1,3,2-dioxaphospholane 2-Oxide": "CC1(C)C(C)(C)OP(O1)=O"
+"4,4'-Bis(5-hexyl-2-thienyl)-2,2'-bipyridyl": "CCCCCCC1=CC=C(C2=CC(C3=NC=CC(C4=CC=C(CCCCCC)S4)=C3)=NC=C2)S1"
+"4,4'-Bis(chloromethyl)-2,2'-bipyridyl": "ClCC1=CC(C2=NC=CC(CCl)=C2)=NC=C1"
+"4,4'-Bis(hydroxymethyl)-2,2'-bipyridine": "OCC1=CC(C2=NC=CC(CO)=C2)=NC=C1"
+"4,4'-Diamino-2,2'-bipyridyl": "NC1=CC(C2=NC=CC(N)=C2)=NC=C1"
+"4,4'-Dibromo-2,2'-bipyridyl": "BrC1=CC(C2=NC=CC(Br)=C2)=NC=C1"
+"4,4'-Dimethoxy-2,2'-bipyridyl": "COC1=CC(C2=NC=CC(OC)=C2)=NC=C1"
+"4,4'-Dimethyl-2,2'-bipyridyl": "CC1=CC(C2=NC=CC(C)=C2)=NC=C1"
+"4,4'-Dimethyl-2,2'-bipyridyl 1-Oxide": "CC1=CC(C2=CC(C)=CC=[N+]2[O-])=NC=C1"
+"4,4'-Dinonyl-2,2'-bipyridyl": "CCCCCCCCCC1=CC(C2=NC=CC(CCCCCCCCC)=C2)=NC=C1"
+"4,4'-Di-tert-butyl-2,2'-bipyridyl": "CC(C1=CC(C2=NC=CC(C(C)(C)C)=C2)=NC=C1)(C)C"
+"4,5-Bis(diphenylphosphino)-9,9-dimethylxanthene": "CC1(C)C2=C(OC3=C1C=CC=C3P(C4=CC=CC=C4)C5=CC=CC=C5)C(P(C6=CC=CC=C6)C7=CC=CC=C7)=CC=C2"
+"4,5-Diazafluoren-9-one": "O=C1C2=CC=CN=C2C3=C1C=CC=N3"
+"4,5-Diazafluorene-9-one O-(p-Toluenesulfonyl)oxime": "O=S(ON=C1C2=CC=CN=C2C3=C1C=CC=N3)(C4=CC=C(C)C=C4)=O"
+"4,6-Bis(diphenylphosphino)phenoxazine": "C(C=CC=C1N2)(P(C3=CC=CC=C3)C4=CC=CC=C4)=C1OC5=C2C=CC=C5P(C6=CC=CC=C6)C7=CC=CC=C7"
+"4,6-Diphenylthieno[3,4-d]-1,3-dioxol-2-one 5,5-Dioxide": "O=C(OC1=C2C3=CC=CC=C3)OC1=C(C4=CC=CC=C4)S2(=O)=O"
+"4,7-Dibromo-1,10-phenanthroline Hydrate": "BrC1=CC=NC2=C3N=CC=C(Br)C3=CC=C12.[H]O[H]"
+"4,7-Dichloro-1,10-phenanthroline Hydrate": "ClC1=CC=NC2=C3N=CC=C(Cl)C3=CC=C12.[H]O[H]"
+"4,7-Dihydroxy-1,10-phenanthroline": "OC1=CC=NC2=C3N=CC=C(O)C3=CC=C12"
+"4,7-Dimethyl-1,10-phenanthroline": "CC1=CC=NC2=C3N=CC=C(C)C3=CC=C12"
+"4'-[(tert-Butyldimethylsilyloxy)methyl]-2,2,2-trifluoroacetophenone": "O=C(C1=CC=C(CO[Si](C)(C(C)(C)C)C)C=C1)C(F)(F)F"
+"4-[2,2,2-Trifluoro-1-[(trimethylsilyl)oxy]ethyl]morpholine": "C[Si](OC(N1CCOCC1)C(F)(F)F)(C)C"
+"4-[2-[2-(4-Iodophenoxy)ethoxy]carbonyl]benzoyloxy-2,2,6,6-tetramethylpiperidin-1-oxyl": "[O]N1C(C)(C)CC(OC(C2=CC=CC=C2C(OCCOC3=CC=C(I)C=C3)=O)=O)CC1(C)C"
+"4-Acetamido-2,2,6,6-tetramethyl-1-oxopiperidinium Tetrafluoroborate": "O=[N+]1C(C)(C)CC(NC(C)=O)CC1(C)C.F[B-](F)(F)F"
+"4-Acetamido-2,2,6,6-tetramethylpiperidine 1-Oxyl": "CC1(C)CC(NC(C)=O)CC(C)(C)N1[O]"
+"4-Acetamido-2,2,6,6-tetramethylpiperidine 1-Oxyl ": "CC1(C)CC(NC(C)=O)CC(C)(C)N1[O]"
+"4'-Bromo-2,2':6',2''-terpyridine": "BrC1=CC(C2=NC=CC=C2)=NC(C3=NC=CC=C3)=C1"
+"4-Bromotetraphenylsilane": "BrC1=CC=C([Si](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)C=C1"
+"4'-Chloro-2,2':6',2''-terpyridine": "ClC1=CC(C2=NC=CC=C2)=NC(C3=NC=CC=C3)=C1"
+"4-Chlorophenyl Phosphorodichloridate": "O=P(Cl)(Cl)OC1=CC=C(Cl)C=C1"
+"4-Dimethylamino-1-neopentylpyridinium Chloride": "CC(C)(C)C[N+]1=CC=C(N(C)C)C=C1.[Cl-]"
+"4-Dimethylaminopyridine": "CN(C1=CC=NC=C1)C"
+"4-Dimethylaminopyridinium Bromide Perbromide": "CN(C)C1=CC=[NH+]C=C1.Br[Br-]Br"
+"4-Ethyl-4-methylmorpholinium Bromide": "C[N+]1(CC)CCOCC1.[Br-]"
+"4-Fluoro-N-salicylideneaniline": "OC1=CC=CC=C1/C=N/C2=CC=C(F)C=C2"
+"4-Fluorophenylmagnesium Bromide": "Br[Mg]C1=CC=C(F)C=C1"
+"4-Hydroxy-2,2,6,6-tetramethylpiperidine 1-Oxyl Benzoate": "CC1(C)CC(OC(C2=CC=CC=C2)=O)CC(C)(C)N1[O]"
+"4-Hydroxy-3-nitrophenylarsonic Acid": "O=[As](C1=CC=C(O)C([N+]([O-])=O)=C1)(O)O"
+"4-Hydroxymethyl-4'-methyl-2,2'-bipyridyl": "CC1=CC(C2=NC=CC(CO)=C2)=NC=C1"
+"4-Hydroxyphenylarsonic Acid": "O=[As](C1=CC=C(O)C=C1)(O)O"
+"4-Methoxy-2,2,6,6-tetramethylpiperidine 1-Oxyl": "CC1(C)CC(OC)CC(C)(C)N1[O]"
+"4-Methoxy-2,2,6,6-tetramethylpiperidine 1-Oxyl ": "CC1(C)CC(OC)CC(C)(C)N1[O]"
+"4-Methoxycarbonylphenylboronic acid": "B(C1=CC=C(C=C1)C(=O)OC)(O)O"
+"4-Methylmorpholine N-Oxide": "C[N+]1([O-])CCOCC1"
+"4-Nitrophenol": "OC1=CC=C([N+]([O-])=O)C=C1"
+"4-Nitrophenyl Trifluoromethanesulfonate": "O=S(C(F)(F)F)(OC1=CC=C([N+]([O-])=O)C=C1)=O"
+"4-Pyrrolidinopyridine": "C1(N2CCCC2)=CC=NC=C1"
+"4-tert-Butyl-2,6-dimethylphenylsulfur Trifluoride": "CC1=C(S(F)(F)F)C(C)=CC(C(C)(C)C)=C1"
+"4-Trifluoromethylbenzoic Anhydride": "O=C(OC(C1=CC=C(C(F)(F)F)C=C1)=O)C2=CC=C(C(F)(F)F)C=C2"
+"4-Trimethylsilyl-3-butyn-2-ol": "CC(O)C#C[Si](C)(C)C"
+"5-(Trimethylsilyl)-1,2,3,4,5-pentamethyl-1,3-cyclopentadiene": "CC1([Si](C)(C)C)C(C)=C(C)C(C)=C1C"
+"5,10,15,20-Tetra(4-pyridyl)porphyrin": "C1(C2=CC=NC=C2)=C3C=CC(C(C4=CC=NC=C4)=C5C=CC(N5)=C(C6=CC=NC=C6)C(C=C7)=NC7=C(C8=CC=NC=C8)C9=CC=C1N9)=N3"
+"5,10,15,20-Tetrakis(2,4,6-trimethylphenyl)porphyrin": "CC1=C(C2=C3C=CC(C(C4=C(C)C=C(C)C=C4C)=C(N5)C=CC5=C(C6=C(C)C=C(C)C=C6C)C7=NC(C=C7)=C(C8=C(C)C=C(C)C=C8C)C9=CC=C2N9)=N3)C(C)=CC(C)=C1"
+"5,10,15,20-Tetrakis(2,6-dichlorophenyl)porphyrin": "ClC1=C(C2=C3C=CC(C(C4=C(Cl)C=CC=C4Cl)=C(N5)C=CC5=C(C6=C(Cl)C=CC=C6Cl)C7=NC(C=C7)=C(C8=C(Cl)C=CC=C8Cl)C9=CC=C2N9)=N3)C(Cl)=CC=C1"
+"5,10,15,20-Tetrakis(3,5-dihydroxyphenyl)porphyrin": "OC1=CC(O)=CC(C2=C3C=CC(C(C4=CC(O)=CC(O)=C4)=C(N5)C=CC5=C(C6=CC(O)=CC(O)=C6)C7=NC(C=C7)=C(C8=CC(O)=CC(O)=C8)C9=CC=C2N9)=N3)=C1"
+"5,10,15,20-Tetrakis(3,5-dimethoxyphenyl)porphyrin": "COC1=CC(OC)=CC(C2=C3C=CC(C(C4=CC(OC)=CC(OC)=C4)=C(N5)C=CC5=C(C6=CC(OC)=CC(OC)=C6)C7=NC(C=C7)=C(C8=CC(OC)=CC(OC)=C8)C9=CC=C2N9)=N3)=C1"
+"5,10,15,20-Tetrakis(4-carboxymethyloxyphenyl)porphyrin": "O=C(COC1=CC=C(C2=C3C=CC(C(C4=CC=C(OCC(O)=O)C=C4)=C(N5)C=CC5=C(C6=CC=C(OCC(O)=O)C=C6)C7=NC(C=C7)=C(C8=CC=C(OCC(O)=O)C=C8)C9=CC=C2N9)=N3)C=C1)O"
+"5,10,15,20-Tetrakis(4-hydroxyphenyl)porphyrin": "OC1=CC=C(C2=C3C=CC(C(C4=CC=C(O)C=C4)=C(N5)C=CC5=C(C6=CC=C(O)C=C6)C7=NC(C=C7)=C(C8=CC=C(O)C=C8)C9=CC=C2N9)=N3)C=C1"
+"5,10,15,20-Tetrakis(4-methoxyphenyl)porphyrin": "COC1=CC=C(C2=C3C=CC(C(C4=CC=C(OC)C=C4)=C(N5)C=CC5=C(C6=CC=C(OC)C=C6)C7=NC(C=C7)=C(C8=CC=C(OC)C=C8)C9=CC=C2N9)=N3)C=C1"
+"5,10,15,20-Tetrakis(pentafluorophenyl)porphyrin": "FC1=C(F)C(F)=C(F)C(F)=C1C2=C3C=CC(C(C4=C(F)C(F)=C(F)C(F)=C4F)=C(N5)C=CC5=C(C6=C(F)C(F)=C(F)C(F)=C6F)C7=NC(C=C7)=C(C8=C(F)C(F)=C(F)C(F)=C8F)C9=CC=C2N9)=N3"
+"5,10,15,20-Tetrakis(p-tolyl)porphyrin": "CC1=CC=C(C2=C3C=CC(C(C4=CC=C(C)C=C4)=C(N5)C=CC5=C(C6=CC=C(C)C=C6)C7=NC(C=C7)=C(C8=CC=C(C)C=C8)C9=CC=C2N9)=N3)C=C1"
+"5,5'-Bis(trifluoromethyl)-2,2'-bipyridyl": "FC(C1=CN=C(C2=NC=C(C(F)(F)F)C=C2)C=C1)(F)F"
+"5,5''-Bis(trimethylstannyl)-2,2':5',2''-terthiophene": "C[Sn](C1=CC=C(C2=CC=C(C3=CC=C([Sn](C)(C)C)S3)S2)S1)(C)C"
+"5,5'-Dibromo-2,2'-bipyridyl": "BrC1=CN=C(C2=NC=C(Br)C=C2)C=C1"
+"5,5-Dibromomeldrum's Acid": "O=C(OC(C)(C)O1)C(Br)(Br)C1=O"
+"5,5'-Dimethyl-2,2'-bipyridyl": "CC1=CN=C(C2=NC=C(C)C=C2)C=C1"
+"5,6-Dimethyl-1,10-phenanthroline": "CC1=C2C=CC=NC2=C3N=CC=CC3=C1C"
+"5-Bromo-1,10-phenanthroline": "BrC1=C2C=CC=NC2=C3N=CC=CC3=C1"
+"5-Chloro-1,10-phenanthroline": "ClC1=C2C=CC=NC2=C3N=CC=CC3=C1"
+"5-Methyl-1,10-phenanthroline Hydrate": "CC1=C2C=CC=NC2=C3N=CC=CC3=C1.[H]O[H]"
+"5-Nitro-1,10-phenanthroline": "O=[N+](C1=C2C=CC=NC2=C3N=CC=CC3=C1)[O-]"
+"5-Sulfosalicylic Acid Dihydrate": "OC1=CC=C(S(=O)(O)=O)C=C1C(O)=O.[H]O[H].[H]O[H]"
+"6,10-Dibenzyl-N,N'-dimethyl-N,N,N',N'-tetrakis(4-methylbenzyl)-1,4-dioxaspiro[4.5]decane-(2R,3R)-diylbis(methylammonium) Bis(tetrafluoroborate)": "C[N+](CC1=CC=C(C)C=C1)(CC2=CC=C(C)C=C2)(C)[C@@H]3OC4(C(CC5=CC=CC=C5)CCCC4(CC6=CC=CC=C6)[N+](CC7=CC=C(C)C=C7)(CC8=CC=C(C)C=C8)(C)C)OC3.F[B-](F)(F)F.F[B-](F)(F)F"
+"6,10-Dibenzyl-N,N'-dimethyl-N,N,N',N'-tetrakis(4-methylbenzyl)-1,4-dioxaspiro[4.5]decane-(2S,3S)-diylbis(methylammonium) Tetrafluoroborate": "C[N+](CC1=CC=C(C)C=C1)(CC2=CC=C(C)C=C2)(C)[C@H]3OC4(C(CC5=CC=CC=C5)CCCC4(CC6=CC=CC=C6)[N+](CC7=CC=C(C)C=C7)(CC8=CC=C(C)C=C8)(C)C)OC3.F[B-](F)(F)F.F[B-](F)(F)F"
+"6,6'-Bis(chloromethyl)-2,2'-bipyridyl": "ClCC1=CC=CC(C2=NC(CCl)=CC=C2)=N1"
+"6,6'-Diamino-2,2'-bipyridyl": "NC1=CC=CC(C2=NC(N)=CC=C2)=N1"
+"6,6'-Dibromo-2,2'-bipyridyl": "BrC1=CC=CC(C2=NC(Br)=CC=C2)=N1"
+"6,6'-Dicyano-2,2'-bipyridyl": "N#CC1=CC=CC(C2=NC(C#N)=CC=C2)=N1"
+"6,6'-Dimethyl-2,2'-bipyridyl": "CC1=CC=CC(C2=NC(C)=CC=C2)=N1"
+"6,7-Dihydro-2-(2,4,6-trimethylphenyl)-5H-pyrrolo[2,1-c]-1,2,4-triazolium Perchlorate": "CC1=C([N+]2=CN3C(CCC3)=N2)C(C)=CC(C)=C1.O=Cl(=O)([O-])=O"
+"6,7-Dihydro-2-pentafluorophenyl-5H-pyrrolo[2,1-c][1,2,4]triazolium Tetrafluoroborate": "FC1=C(F)C(F)=C(F)C(F)=C1[N+]2=CN3C(CCC3)=N2.F[B-](F)(F)F"
+"6,8-Bis(benzylthio)octanoic Acid": "O=C(O)CCCCC(SCC1=CC=CC=C1)CCSCC2=CC=CC=C2"
+"6-Bromo-2,2'-bipyridyl": "BrC1=CC=CC(C2=NC=CC=C2)=N1"
+"6-Bromo-4,4'-dimethyl-2,2'-bipyridyl": "CC1=CC(C2=NC(Br)=CC(C)=C2)=NC=C1"
+"6-Methyl-2,4-heptanedione": "CC(CC(CC(C)C)=O)=O"
+"7-Methyl-1,5,7-triazabicyclo[4.4.0]dec-5-ene": "CN1C2=NCCCN2CCC1"
+"8-Ethylquinoline N-oxide": "CCC1=CC=CC2=CC=C[N+]([O-])=C12"
+"8-Quinolineboronic acid": "OB(C1=C(N=CC=C2)C2=CC=C1)O"
+"9-(2,5-Dimethylphenyl)-10-methylacridinium Perchlorate": "C[N+]1=C2C=CC=CC2=C(C3=CC(C)=CC=C3C)C4=C1C=CC=C4.O=Cl(=O)([O-])=O"
+"9-(2,6-Dimethylphenyl)-10-methylacridinium Perchlorate": "C[N+]1=C2C=CC=CC2=C(C3=C(C)C=CC=C3C)C4=C1C=CC=C4.O=Cl(=O)([O-])=O"
+"9-(2-Biphenylyl)-10-methylacridinium Perchlorate": "C[N+]1=C2C=CC=CC2=C(C3=CC=CC=C3C4=CC=CC=C4)C5=C1C=CC=C5.O=Cl(=O)([O-])=O"
+"9-Azajulolidine": "N1(CCC2)CCCC3=CN=CC2=C31"
+"9H,9H-Triacontafluoro-8,10-heptadecanedione": "O=C(CC(C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)F)=O)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)F"
+"9-Mesityl-10-methylacridinium Perchlorate": "C[N+]1=C2C=CC=CC2=C(C3=C(C)C=C(C)C=C3C)C4=C1C=CC=C4.O=Cl(=O)([O-])=O"
+"9-Mesityl-2,7,10-trimethylacridinium Perchlorate": "C[N+]1=C2C=CC(C)=CC2=C(C3=C(C)C=C(C)C=C3C)C4=C1C=CC(C)=C4.O=Cl(=O)([O-])=O"
+"9-Methyl-3,4-dihydro-2H-pyrido[1,2-a]pyrimidin-2-one": "O=C1N=C(C(C)=CC=C2)N2CC1"
+"Acenaphthylene": "C12=CC=CC3=C1C(C=C2)=CC=C3"
+"acetic acid": "CC(O)=O"
+"Acetic Acid (1R,2S)-2-[N-Benzyl-N-(mesitylenesulfonyl)amino]-1-phenylpropyl Ester": "CC(O[C@H](C1=CC=CC=C1)[C@@H](N(CC2=CC=CC=C2)S(=O)(C(C(C)=CC(C)=C3)=C3C)=O)C)=O"
+"Acetic Acid (1S,2R)-2-[N-Benzyl-N-(mesitylenesulfonyl)amino]-1-phenylpropyl Ester": "CC(O[C@@H](C1=CC=CC=C1)[C@H](N(CC2=CC=CC=C2)S(=O)(C(C(C)=CC(C)=C3)=C3C)=O)C)=O"
+"acetone": "CC(C)=O"
+"acetonitrile": "CC#N"
+"Acetylacetone": "CC(CC(C)=O)=O"
+"AlkylFluor": "FC(N(C=C1)C2=C(C(C)C)C=CC=C2C(C)C)=[N+]1C(C(C(C)C)=CC=C3)=C3C(C)C.F[B-](F)(F)F"
+"Allyl(chloromethyl)dimethylsilane": "C[Si](CCl)(CC=C)C"
+"Allyl(tert-butyl)dimethylsilane": "C[Si](C(C)(C)C)(CC=C)C"
+"Allylchlorodimethylsilane": "C[Si](Cl)(CC=C)C"
+"Allylmagnesium Bromide": "Br[Mg]CC=C"
+"Allylmagnesium Chloride": "Cl[Mg]CC=C"
+"Allyloxytrimethylsilane": "C[Si](C)(OCC=C)C"
+"Allylpalladium(II) Chloride": "[Pd+]CC=C.[Cl-]"
+"Allyltriethoxysilane": "CCO[Si](OCC)(CC=C)OCC"
+"Allyltriethylsilane": "CC[Si](CC)(CC=C)CC"
+"Allyltriisopropylsilane": "CC([Si](C(C)C)(CC=C)C(C)C)C"
+"Allyltrimethoxysilane": "CO[Si](OC)(CC=C)OC"
+"Allyltrimethylsilane": "C[Si](C)(CC=C)C"
+"Allyltriphenyltin": "C=CC[Sn](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"Allyltris(trimethylsilyloxy)silane": "C[Si](O[Si](O[Si](C)(C)C)(CC=C)O[Si](C)(C)C)(C)C"
+"aluminium bromide": "[Al+3].[Br-].[Br-].[Br-]"
+"Aluminium chloride": "Cl[Al](Cl)Cl"
+"Aluminium hydroxide": "[OH-].[Al+3].[OH-].[OH-]"
+"aluminium iodide": "[Al+3].[I-].[I-].[I-]"
+"Aluminum Bromide Anhydrous": "[Al+3].[Br-].[Br-].[Br-]"
+"Aluminum Glycinate": "NCC([O-])=O.NCC([O-])=O.NCC([O-])=O.[Al+3]"
+"Aluminum Isopropoxide": "CC([O-])C.CC([O-])C.CC([O-])C.[Al+3]"
+"Aluminum(III) Bromide": "[Al+3].[Br-].[Br-].[Br-]"
+"Aluminum(III) Chloride": "[Al+3].[Cl-].[Cl-].[Cl-]"
+"Aminomethanesulfonic Acid": "O=S(CN)(O)=O"
+"Ammonia": "N"
+"ammonium actetate": "CC([O-])=O.[NH4+]"
+"ammonium bromide": "[NH4+].[Br-]"
+"ammonium carbamate": "NC([O-])=O.[NH4+]"
+"Ammonium Cerium(IV) Nitrate": "[O-][N+]([O-])=O.[O-][N+]([O-])=O.[O-][N+]([O-])=O.[O-][N+]([O-])=O.[O-][N+]([O-])=O.[NH4+].[Ce+4]"
+"ammonium chloride": "[NH4+].[Cl-]"
+"Ammonium dichromate": "O=[Cr]([O-])(O[Cr](=O)([O-])=O)=O.[NH4+].[NH4+]"
+"ammonium fluoride": "[NH4+].[F-]"
+"ammonium formate": "O=C[O-].[NH4+]"
+"ammonium hydrogensulfate": "[O-]S(=O)(O)=O.[NH4+]"
+"Ammonium hydroxide": "[NH4+].[OH-]"
+"Ammonium phosphomolybdate hydrate": "O=[Mo](OP(O)(O)=O)([O-])=O.[H]O[H].[NH4+]"
+"Ammonium sulfate": "O=S([O-])([O-])=O.[NH4+].[NH4+]"
+"ammonium tetrafluoroborate": "F[B-](F)(F)F.[NH4+]"
+"ammoniumthiosulfate": "O=S([O-])([O-])=S.[NH4+].[NH4+]"
+"Amyltriethylammonium Bis(trifluoromethanesulfonyl)imide": "CCC[N+](CCC)(CCC)CCC.FC(F)(F)S([N-]S(C(F)(F)F)(=O)=O)(=O)=O"
+"B(CH3)3": "CB(C)C"
+"B(OH)3": "OB(O)O"
+"Barium hydroxide": "[Ba+2].[OH-].[OH-]"
+"Barium hydroxide octahydrate": "[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[Ba+2].[OH-].[OH-]"
+"Barium tert-butoxide": "CC(C)([O-])C.CC(C)([O-])C.[Ba+2]"
+"Bathophenanthroline": "C1(C2=CC=CC=C2)=CC=NC3=C4N=CC=C(C5=CC=CC=C5)C4=CC=C13"
+"Bathophenanthrolinedisulfonic Acid Disodium Salt Hydrate": "O=S(C1=NC2=C3N=CC=C(C4=CC=CC=C4)C3=CC=C2C(C5=CC=CC=C5)=C1S(=O)([O-])=O)([O-])=O.[H]O[H].[Na+].[Na+]"
+"benzene": "C1=CC=CC=C1"
+"Benzeneruthenium(II) Chloride": "[Ru+2].C1=CC=CC=C1.[Cl-].[Cl-]"
+"Benzenesulfonic Acid Anhydrous": "O=S(C1=CC=CC=C1)(O)=O"
+"Benzenesulfonic Acid Monohydrate": "O=S(C1=CC=CC=C1)(O)=O.[H]O[H]"
+"Benzoic Acid": "O=C(O)C1=CC=CC=C1"
+"Benzoyl peroxide": "O=C(OOC(C1=CC=CC=C1)=O)C2=CC=CC=C2"
+"Benzoyl(phenyliodonio)(trifluoromethanesulfonyl)methanide": "O=S([C-](C(C1=CC=CC=C1)=O)[I+]C2=CC=CC=C2)(C(F)(F)F)=O"
+"Benzylcetyldimethylammonium Chloride Hydrate": "C[N+](CCCCCCCCCCCCCCCC)(CC1=CC=CC=C1)C.[H]O[H].[Cl-]"
+"Benzyldimethyltetradecylammonium Chloride Hydrate": "CCCCCCCCCCCCCC[N+](C)(CC1=CC=CC=C1)C.[H]O[H].[Cl-]"
+"Benzyldodecyldimethylammonium Bromide": "C[N+](CCCCCCCCCCCC)(CC1=CC=CC=C1)C.[Br-]"
+"Benzyldodecyldimethylammonium Chloride Dihydrate": "C[N+](CCCCCCCCCCCC)(CC1=CC=CC=C1)C.[H]O[H].[H]O[H].[Cl-]"
+"Benzylmagnesium Bromide": "Br[Mg]CC1=CC=CC=C1"
+"Benzylmagnesium Chloride": "Cl[Mg]CC1=CC=CC=C1"
+"Benzyltributylammonium Bromide": "CCCC[N+](CCCC)(CC1=CC=CC=C1)CCCC.[Br-]"
+"Benzyltributylammonium Chloride": "CCCC[N+](CCCC)(CC1=CC=CC=C1)CCCC.[Cl-]"
+"Benzyltriethylammonium Borohydride": "CC[N+](CC)(CC1=CC=CC=C1)CC.[BH4-]"
+"Benzyltriethylammonium Bromide": "CC[N+](CC)(CC1=CC=CC=C1)CC.[Br-]"
+"Benzyltriethylammonium Chloride": "CC[N+](CC)(CC1=CC=CC=C1)CC.[Cl-]"
+"Benzyltriethylammonium Iodide": "CC[N+](CC)(CC1=CC=CC=C1)CC.[I-]"
+"Benzyltrimethylammonium Bromide": "C[N+](C)(CC1=CC=CC=C1)C.[Br-]"
+"Benzyltrimethylammonium Chloride": "C[N+](C)(CC1=CC=CC=C1)C.[Cl-]"
+"Benzyltrimethylammonium Dichloroiodate": "C[N+](C)(CC1=CC=CC=C1)C.Cl[I-]Cl"
+"Benzyltrimethylammonium Hydroxide": "C[N+](C)(CC1=CC=CC=C1)C.[OH-]"
+"Benzyltrimethylammonium Tetrachloroiodate": "C[N+](C)(CC1=CC=CC=C1)C.Cl[I-](Cl)(Cl)Cl"
+"Benzyltrimethylammonium Tribromide": "C[N+](C)(CC1=CC=CC=C1)C.[Br-].[Br-].[Br-]"
+"Benzyltrimethylsilane": "C[Si](C)(CC1=CC=CC=C1)C"
+"BERYLLIUM": "[Be]"
+"BERYLLIUM HYDROXIDE": "[Be+2].[OH-].[OH-]"
+"BF3": "FB(F)F"
+"Bicinchoninic Acid Disodium Salt Hydrate": "O=C([O-])C1=C(C2=C(C([O-])=O)C3=CC=CC=C3N=C2)C=NC4=CC=CC=C14.[H]O[H].[Na+].[Na+]"
+"Bis(1,3-propanediamine) Copper(II) Dichloride": "NCCCN.NCCCN.[Cu+2].[Cl-].[Cl-]"
+"Bis(1,5-cyclooctadiene)nickel(0)": "[Ni].C1=C\\CC/C=C\\CC/1.C2=C\\CC/C=C\\CC/2"
+"Bis(1,5-cyclooctadiene)rhodium(I) Tetrafluoroborate": "F[B-](F)(F)F.[Rh+].C1=C\\CC/C=C\\CC/1.C2=C\\CC/C=C\\CC/2"
+"Bis(2,4,6-trimethylpyridine)bromonium Hexafluorophosphate": "CC1=CC(C)=C([BrH+])C(C)=N1.CC2=CC(C)=CC(C)=N2.F[P-](F)(F)(F)(F)F"
+"Bis(2,4,6-trimethylpyridine)iodonium Hexafluorophosphate": "CC1=CC(C)=C([IH+])C(C)=N1.CC2=CC(C)=CC(C)=N2.F[P-](F)(F)(F)(F)F"
+"Bis(2,4-pentanedionato)bis(2-propanolato)titanium(IV)": "CC(/C=C(C)\\[O-])=O.CC(/C=C(C)\\[O-])=O.[O-]C(C)C.[O-]C(C)C.[Ti+4]"
+"Bis(2,4-pentanedionato)cobalt(II)": "C/C([O-])=C/C(C)=O.C/C([O-])=C/C(C)=O.[Co+2].O"
+"Bis(2,4-pentanedionato)cobalt(II) Dihydrate": "C/C([O-])=C/C(C)=O.C/C([O-])=C/C(C)=O.[Co+2].O.O"
+"Bis(2,4-pentanedionato)manganese(II) Dihydrate": "CC(/C=C([O-])/C)=O.CC(/C=C([O-])/C)=O.[Mn+2].O.O"
+"Bis(2,4-pentanedionato)molybdenum(VI) Dioxide": "CC(/C=C([O-])/C)=O.C/C([O-])=C/C(C)=O.[Mo+6].[O-2].[O-2]"
+"Bis(2,4-pentanedionato)nickel(II) Hydrate": "O=C(/C=C([O-])/C)C.O=C(/C=C([O-])/C)C.[Ni+2].O"
+"Bis(2,4-pentanedionato)vanadium(IV) Oxide": "CC(/C=C([O-])/C)=O.[O-]/C(C)=C\\C(C)=O.[V+4].[O-2]"
+"Bis(2-hydroxyethyl)dimethylammonium Chloride": "C[N+](CCO)(CCO)C.[Cl-]"
+"Bis(4-bromophenyl)iodonium triflate": "BrC1=CC=C([I+]C2=CC=C(Br)C=C2)C=C1.O=S([O-])(C(F)(F)F)=O"
+"Bis(4-fluorophenyl)iodonium triflate": "FC1=CC=C([I+]C2=CC=C(F)C=C2)C=C1.O=S([O-])(C(F)(F)F)=O"
+"Bis(4-methoxyphenyl) Selenoxide": "O=[Se](C1=CC=C(OC)C=C1)C2=CC=C(OC)C=C2"
+"Bis(4-methylphenyl)iodonium triflate": "CC1=CC=C([I+]C2=CC=C(C)C=C2)C=C1.O=S([O-])(C(F)(F)F)=O"
+"Bis(4-nitrophenyl) Carbonate": "O=C(OC1=CC=C([N+]([O-])=O)C=C1)OC2=CC=C([N+]([O-])=O)C=C2"
+"Bis(acetato)aqua[(S,S)-4,6-bis(4-isopropyl-2-oxazolin-2-yl)-m-xylene]rhodium": "CC1=CC(C)=C(C2=N[C@H](CO2)C(C)C)C=C1C3=N[C@@H](C(C)C)CO3.CC([O-])=O.[O-]C(C)=O.[Rh+2].O"
+"Bis(acetonitrile)palladium(II) Dichloride": "CC#N.CC#N.[Pd+2].[Cl-].[Cl-]"
+"Bis(benzonitrile)palladium(II) Dichloride": "N#CC1=CC=CC=C1.N#CC2=CC=CC=C2.[Pd+2].[Cl-].[Cl-]"
+"Bis(chloromethyl)dimethylsilane": "C[Si](CCl)(CCl)C"
+"Bis(dibenzylideneacetone)palladium(0)": "O=C(/C=C/C1=CC=CC=C1)/C=C/C2=CC=CC=C2.O=C(/C=C/C3=CC=CC=C3)/C=C/C4=CC=CC=C4.[Pd]"
+"Bis(diphenylphosphino)methane": "P(CP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4"
+"Bis(hexafluoroacetylacetonato)nickel(II) Hydrate": "O=C(/C=C(C(F)(F)F)\\[O-])C(F)(F)F.[O-]/C(C(F)(F)F)=C\\C(C(F)(F)F)=O.[Ni+2]"
+"Bis(pentafluorophenyl) Carbonate": "O=C(OC1=C(F)C(F)=C(F)C(F)=C1F)OC2=C(F)C(F)=C(F)C(F)=C2F"
+"Bis(pentafluorophenyl)dimethylsilane": "C[Si](C1=C(F)C(F)=C(F)C(F)=C1F)(C2=C(F)C(F)=C(F)C(F)=C2F)C"
+"Bis(pentafluorophenyl)phenylphosphine": "FC1=C(F)C(F)=C(F)C(F)=C1P(C2=C(F)C(F)=C(F)C(F)=C2F)C3=CC=CC=C3"
+"Bis(pinacolato)diboron": "B1(OC(C(O1)(C)C)(C)C)B2OC(C(O2)(C)C)(C)C"
+"Bis(pyridine)iodonium tetrafluoroborate": "[IH+]C1=NC=CC=C1.F[B-](F)(F)F.C2=NC=CC=C2"
+"Bis(tert-butylcarbonyloxy)iodobenzene": "IC1=CC=CC(OC(C(C)(C)C)=O)=C1OC(C(C)(C)C)=O"
+"Bis(tetrabutylammonium) Dichromate": "CCCC[N+](CCCC)(CCCC)CCCC.CCCC[N+](CCCC)(CCCC)CCCC.O=[Cr]([O-])(O[Cr](=O)([O-])=O)=O"
+"Bis(trichlorosilyl)acetylene": "Cl[Si](C#C[Si](Cl)(Cl)Cl)(Cl)Cl"
+"Bis(tricyclohexylphosphine)nickel(II) Dichloride": "P(C1CCCCC1)(C2CCCCC2)C3CCCCC3.P(C4CCCCC4)(C5CCCCC5)C6CCCCC6.[Ni+2].[Cl-].[Cl-]"
+"Bis(tricyclohexylphosphine)palladium(II) Dichloride": "P(C1CCCCC1)(C2CCCCC2)C3CCCCC3.P(C4CCCCC4)(C5CCCCC5)C6CCCCC6.[Pd+2].[Cl-].[Cl-]"
+"Bis(trifluoro-2,4-pentanedionato)cobalt(II) Hydrate": "C/C([O-])=C/C(C(F)(F)F)=O.C/C([O-])=C/C(C(F)(F)F)=O.[Co+2]"
+"Bis(trifluoromethanesulfonyl)imide": "O=S(C(F)(F)F)(NS(=O)(C(F)(F)F)=O)=O"
+"Bis(trimethylsilyl) Sulfide": "C[Si](S[Si](C)(C)C)(C)C"
+"Bis(trimethylsilyl)acetylene": "C[Si](C#C[Si](C)(C)C)(C)C"
+"Bis(trimethylsilyl)bromomethane": "BrC([Si](C)(C)C)[Si](C)(C)C"
+"Bis(trimethylsilyl)methane": "C[Si](C[Si](C)(C)C)(C)C"
+"Bis(trimethylsilyl)methylamine": "CN([Si](C)(C)C)[Si](C)(C)C"
+"Bis(tri-o-tolylphosphine)palladium(II) Dichloride": "CC1=CC=CC=C1P(C2=CC=CC=C2C)C3=CC=CC=C3C.CC4=CC=CC=C4P(C5=CC=CC=C5C)C6=CC=CC=C6C.[Pd+2].[Cl-].[Cl-]"
+"Bis(triphenylphosphine)nickel(II) Dichloride": "P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6.[Ni+2].[Cl-].[Cl-]"
+"Bis(triphenylphosphine)palladium(II) Diacetate": "CC([O-])=O.CC([O-])=O.P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6.[Pd+2]"
+"Bis(triphenylphosphine)palladium(II) Dichloride": "P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6.[Pd+2].[Cl-].[Cl-]"
+"Bis(triphenylsilyl) chromate": "O=[Cr](O[Si](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3)(O[Si](C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6)=O"
+"Bis(tri-tert-butylphosphine)palladium(0)": "CC(P(C(C)(C)C)C(C)(C)C)(C)C.CC(P(C(C)(C)C)C(C)(C)C)(C)C.[Pd]"
+"Bis[1,2-bis(diphenylphosphino)ethane]palladium(0)": "P(CCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4.P(CCP(C5=CC=CC=C5)C6=CC=CC=C6)(C7=CC=CC=C7)C8=CC=CC=C8.[Pd]"
+"Bis[2-(diphenylphosphino)phenyl] Ether": "C1(OC2=CC=CC=C2P(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1P(C5=CC=CC=C5)C6=CC=CC=C6"
+"Bis[2-(trimethylsilyloxy)ethyl] Ether": "C[Si](OCCOCCO[Si](C)(C)C)(C)C"
+"Bis[2-carboxyethylgermanium(IV)] Sesquioxide": "O=[Ge](CCC(O)=O)O[Ge](CCC(O)=O)=O"
+"Bis[3-(trimethoxysilyl)propyl]amine": "CO[Si](CCCNCCC[Si](OC)(OC)OC)(OC)OC"
+"Bis[di-tert-butyl(4-dimethylaminophenyl)phosphine]palladium(0)": "CN(C1=CC=C(P(C(C)(C)C)C(C)(C)C)C=C1)C.CN(C2=CC=C(P(C(C)(C)C)C(C)(C)C)C=C2)C.[Pd]"
+"Bis[tris(2,4-pentanedionato)titanium(IV)] Hexachlorotitanate(IV)": "Cl[Ti-2](Cl)(Cl)(Cl)(Cl)Cl.C/C([O-])=C\\C(C)=O.C/C([O-])=C\\C(C)=O.C/C([O-])=C\\C(C)=O.C/C([O-])=C\\C(C)=O.C/C([O-])=C\\C(C)=O.C/C([O-])=C\\C(C)=O.[Ti+4].[Ti+4]"
+"BISMUTH HYDROXIDE": "[Bi+3].[OH-].[OH-].[OH-]"
+"Bismuth Tripotassium Dicitrate": "OC(C([O-])=O)(CC([O-])=O)CC([O-])=O.OC(C([O-])=O)(CC([O-])=O)CC([O-])=O.[Bi+5].[K+].[K+].[K+]"
+"Bistrifluoroacetamide": "O=C(C(F)(F)F)NC(C(F)(F)F)=O"
+"Borane - 2-Methylpyridine Complex": "CC1=NC=CC=C1.B"
+"Borane - 5-Ethyl-2-methylpyridine Complex": "CC1=NC=C(CC)C=C1.B"
+"Borane - Ammonia Complex": "B.N"
+"Borane - Diisopropylamine Complex": "CC(C)NC(C)C.B"
+"Borane - Morpholine Complex": "O1CCNCC1.B"
+"Borane - Pyridine Complex": "C1=CN=CC=C1.B"
+"Borane - Tetrahydrofuran Complex": "B.C1COCC1"
+"Borane -Â tert-Butylamine Complex": "NC(C)(C)C.B"
+"Boron Trichloride": "ClB(Cl)Cl"
+"Boron Trifluoride": "FB(F)F"
+"Boron Trifluoride - Methanol Reagent": "FB(F)F.CO"
+"Boron Trifluoride - Propanol Reagent": "FB(F)F.CCCO"
+"Bromine": "BrBr"
+"Bromine - 1,4-Dioxane Complex": "BrBr.O1CCOCC1"
+"Bromo[(2,6-pyridinediyl)bis(3-methyl-1-imidazolyl-2-ylidene)]nickel Bromide": "CN(C=CN12)C1=[Ni-3](Br)=C3N(C)C=CN3C4=CC=CC2=N4.[Br-]"
+"Bromo[[1,3-bis[(4S,5S)-1-benzoyl-4,5-diphenyl-2-imidazolin-2-yl]benzene]palladium(II)]": "O=C(N1[C@@H](C2=CC=CC=C2)[C@H](C3=CC=CC=C3)N=C1C4=CC(C5=N[C@@H](C6=CC=CC=C6)[C@H](C7=CC=CC=C7)N5C(C8=CC=CC=C8)=O)=CC=C4)C9=CC=CC=C9.[Pd+]Br"
+"Bromoacetic Acid": "O=C(O)CBr"
+"Bromocholine Bromide": "BrCC[N+](C)(C)C.[Br-]"
+"Bromodicarbonyl[bis[2-(diisopropylphosphino)ethyl]amine]manganese(I)": "[C]=O.[C]=O.CC(P(CCNCCP(C(C)C)C(C)C)C(C)C)C.[Mn]Br"
+"Bromodimethylsulfonium Bromide": "C[S+](Br)C.[Br-]"
+"Bromotrichloromethane": "ClC(Cl)(Br)Cl"
+"Bromotrimethylsilane": "Br[Si](C)(C)C"
+"Bromotripyrrolidinophosphonium Hexafluorophosphate": "Br[P+](N1CCCC1)(N2CCCC2)N3CCCC3.F[P-](F)(F)(F)(F)F"
+"Bromotris(dimethylamino)phosphonium Hexafluorophosphate": "CN([P+](N(C)C)(Br)N(C)C)C.F[P-](F)(F)(F)(F)F"
+"Butylboronic Acid": "CCCCB(O)O"
+"Butyllithium": "CCCC[Li]"
+"Butylmagnesium Bromide": "Br[Mg]CCCC"
+"Butylmagnesium Chloride": "Cl[Mg]CCCC"
+"Butyltin Trichloride": "CCCC[Sn](Cl)(Cl)Cl"
+"Cacodylic Acid": "O=[As](C)(C)O"
+"CADMIUM HYDROXIDE": "[Cd+2].[OH-].[OH-]"
+"CALCIUM BROMIDE HYDRATE": "[H]O[H].[Ca+2].[Br-].[Br-]"
+"calcium carbonate": "[O-]C([O-])=O.[Ca+2]"
+"calcium chloride": "[Ca+2].[Cl-].[Cl-]"
+"calcium hydride": "[Ca+2].[H-].[H-]"
+"Calcium peroxide": "[O-][O-].[Ca+2]"
+"calcium sulfate": "O=S([O-])([O-])=O.[Ca+2]"
+"Calcium L-Threonate": "O[C@H]([C@H](CO)O)C([O-])=O.O[C@H]([C@H](CO)O)C([O-])=O.[Ca+2]"
+"Carbamylcholine Chloride": "C[N+](C)(C)CCOC(N)=O.[Cl-]"
+"Carbon Tetrabromide": "BrC(Br)(Br)Br"
+"carbon tetrachloride": "ClC(Cl)(Cl)Cl"
+"Carbon Tetraiodide": "IC(I)(I)I"
+"carbon tribromide": "BrC(Br)([H])Br"
+"Carbonyl(dihydrido)tris(triphenylphosphine)ruthenium(II)": "[C]=O.[H][Ru][H].P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6.P(C7=CC=CC=C7)(C8=CC=CC=C8)C9=CC=CC=C9"
+"Carbonylchlorobis(triphenylphosphine)iridium(I)": "[C]=O.[Ir]Cl.P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6"
+"Carbonylhydridotris(triphenylphosphine)iridium(I)": "[C]=O.[Ir][H].P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6.P(C7=CC=CC=C7)(C8=CC=CC=C8)C9=CC=CC=C9"
+"Cerium": "[Ce]"
+"Cerium tetrahydroxide": "[Ce+4].[OH-].[OH-].[OH-].[OH-]"
+"cerium trihydroxide": "[Ce+3].[OH-].[OH-].[OH-]"
+"Cerium(III) Acetate Hydrate": "CC([O-])=O.CC([O-])=O.CC([O-])=O.[H]O[H].[Ce+3]"
+"CERIUM(III) CHLORIDE HEPTAHYDRATE": "[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[Ce+3].[Cl-].[Cl-].[Cl-]"
+"Cerium(III) Trifluoromethanesulfonate": "O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Ce+3]"
+"Cesium Acetate": "CC([O-])=O.[Cs+]"
+"cesium bromide": "[Cs+].[Br-]"
+"Cesium Carbonate": "[O-]C([O-])=O.[Cs+].[Cs+]"
+"Cesium Fluoride": "[Cs+].[F-]"
+"Cesium hydroxide": "[Cs+].[OH-]"
+"Cesium Pivalate": "CC(C)(C)C([O-])=O.[Cs+]"
+"cesium sulfate": "O=S([O-])([O-])=O.[Cs+].[Cs+]"
+"Chloramine B Hydrate": "O=S([N-]Cl)(C1=CC=CC=C1)=O.O.[Na+]"
+"Chloramine T Trihydrate": "CC1=CC=C(S(=O)([N-]Cl)=O)C=C1.[H]O[H].[H]O[H].[H]O[H].[Na+]"
+"Chloranil": "O=C(C(Cl)=C1Cl)C(Cl)=C(Cl)C1=O"
+"Chloro(1,5-cyclooctadiene)iridium(I)": "[Ir]Cl.C1=C\\CC/C=C\\CC/1"
+"Chloro(1,5-cyclooctadiene)rhodium(I)": "[Rh]Cl.C1=C\\CC/C=C\\CC/1"
+"Chloro(1,5-hexadiene)rhodium(I)": "C=CCCC=C.[Rh]Cl"
+"Chloro(2-dicyclohexylphosphino-2′,4′,6′-triisopropyl-1,1′-biphenyl)[2-(2′-amino-1,1′-biphenyl)]palladium(II)": "Cl[Pd]1(C2=CC=CC=C2C3=CC=CC=C3N1)P(C4CCCCC4)(C5=CC=CC=C5C6=C(C(C)C)C=C(C(C)C)C=C6C(C)C)C7CCCCC7"
+"Chloro(3-chloropropyl)dimethylsilane": "C[Si](CCCCl)(Cl)C"
+"Chloro(hexyl)dimethylsilane": "C[Si](CCCCCC)(Cl)C"
+"Chloro(methyl)(phenyl)(vinyl)silane": "C=C[Si](C)(Cl)C1=CC=CC=C1"
+"Chloro(pentamethylcyclopentadienyl)ruthenium(II)": "CC1=C([Ru]Cl)C(C)(C)C(C)=C1C"
+"Chloro[(tri-tert-butylphosphine)-2-(2-aminobiphenyl)]palladium(II)": "NC1([Pd+2])=CC=CC=C1C2=CC=CC=C2.CC(P(C(C)(C)C)(Cl)C(C)(C)C)(C)C"
+"Chloro[[1,3-bis(2,6-diisopropylphenyl)imidazol-2-ylidene](acetanilide)palladium(II)]": "CC(NC1=CC=CC=C1)=O.CC(C2=C(N(C=CN3C4=C(C(C)C)C=CC=C4C(C)C)C3=[Pd-]Cl)C(C(C)C)=CC=C2)C"
+"Chloro[[1,3-bis(2,6-diisopropylphenyl)imidazol-2-ylidene](N,N-dimethyl-3,5-dimethoxybenzylamine)palladium(II)]": "COC1=CC(OC)=CC(CN(C)C)=C1.CC(C2=C(N(C=CN3C4=C(C(C)C)C=CC=C4C(C)C)C3=[Pd-]Cl)C(C(C)C)=CC=C2)C"
+"Chloro[[1,3-bis(2,6-diisopropylphenyl)imidazol-2-ylidene](N,N-dimethylbenzylamine)palladium(II)]": "CN(C)CC1=CC=CC=C1.CC(C2=C(N(C=CN3C4=C(C(C)C)C=CC=C4C(C)C)C3=[Pd-]Cl)C(C(C)C)=CC=C2)C"
+"Chloro[1,3-bis(2,6-diisopropylphenyl)imidazol-2-ylidene]copper(I)": "CC(C1=C(N(C=CN2C3=C(C(C)C)C=CC=C3C(C)C)C2=[Cu-2]Cl)C(C(C)C)=CC=C1)C"
+"Chloroacetic Acid": "O=C(O)CCl"
+"Chlorobis(cyclooctene)iridium(I)": "[Ir]Cl.C1=C\\CCCCCC/1.C2=C\\CCCCCC/2"
+"Chlorobis(cyclooctene)rhodium(I)": "[Rh]Cl.C1=C\\CCCCCC/1.C2=C\\CCCCCC/2"
+"Chlorobis(ethylene)iridium(I)": "Cl[Ir-4]12(CC2)CC1"
+"Chlorobis(ethylene)rhodium(I)": "Cl[Rh-4]12(CC2)CC1"
+"Chlorobis[dicyclohexyl(phenyl)phosphino](o-tolyl)nickel(II)": "CC1=CC=CC=C1[Ni-2](P(C2CCCCC2)(C3CCCCC3)C4=CC=CC=C4)(Cl)P(C5CCCCC5)(C6CCCCC6)C7=CC=CC=C7"
+"Chlorocholine Chloride": "ClCC[N+](C)(C)C.[Cl-]"
+"Chlorodicyclohexylphosphine": "ClP(C1CCCCC1)C2CCCCC2"
+"Chlorodifluoroacetic Acid": "O=C(O)C(F)(Cl)F"
+"Chlorodiisopropylphosphine": "CC(P(Cl)C(C)C)C"
+"Chlorodimethylvinylsilane": "C=C[Si](C)(Cl)C"
+"Chlorodiphenylphosphine": "ClP(C1=CC=CC=C1)C2=CC=CC=C2"
+"Chloroform": "ClC(Cl)Cl"
+"Chloromethyldimethylphenylsilane": "C[Si](C)(CCl)C1=CC=CC=C1"
+"Chloro-N,N,N',N'-tetramethylformamidinium Hexafluorophosphate": "C[N+](C)=C(Cl)N(C)C.F[P-](F)(F)(F)(F)F"
+"Chloronitrosyl[N,N'-bis(3,5-di-tert-butylsalicylidene)-1,1,2,2-tetramethylethylenediaminato]ruthenium(IV)": "[O-]C1=C(/C=N/C(C)(C)C(C)(C)/N=C/C2=C([O-])C(C(C)(C)C)=CC(C(C)(C)C)=C2)C=C(C(C)(C)C)C=C1C(C)(C)C.[N-]=O.[Ru+4].[Cl-]"
+"Chloropentamethyldisilane": "C[Si](C)(C)[Si](C)(Cl)C"
+"Chlorotriethoxysilane": "CCO[Si](OCC)(Cl)OCC"
+"Chlorotripyrrolidinophosphonium Hexafluorophosphate": "Cl[P+](N1CCCC1)(N2CCCC2)N3CCCC3.F[P-](F)(F)(F)(F)F"
+"Choline ": "OCC[N+](C)(C)C"
+"Choline Chloride": "OCC[N+](C)(C)C.[Cl-]"
+"Choline hydroxide": "OCC[N+](C)(C)C.[OH-]"
+"Chromium": "[Cr]"
+"CHROMIUM (III) HYDROXIDE N-HYDRATE": "[OH-].[Cr+3].[OH-].[OH-]"
+"Chromium(VI) oxide": "[Cr+6].[O-2].[O-2].[O-2]"
+"Cinchonidine": "O[C@@H]([C@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=CC=C34"
+"Cinchonidine Dihydrochloride": "O[C@@H]([C@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=CC=C34.[H]Cl.[H]Cl"
+"Cinchonidine Sulfate Dihydrate": "O[C@@H]([C@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=CC=C34.O=S(O)(O)=O.[H]O[H].[H]O[H]"
+"Cinchonine": "O[C@H]([C@@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=CC=C34"
+"Cinchonine Hydrochloride Hydrate": "O[C@H]([C@@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=CC=C34.[H]Cl.[H]O[H]"
+"Citric Acid": "OC(C(O)=O)(CC(O)=O)CC(O)=O"
+"Cobalt": "[Co]"
+"Cobalt hydroxide": "[Co+2].[OH-].[OH-]"
+"cobalt trihydroxide": "[Co+3].[OH-].[OH-].[OH-]"
+"Copper": "[Cu]"
+"copper (I) bromide": "[Cu+].[Br-]"
+"copper (I) chloride": "[Cu+].[Cl-]"
+"copper (II) bromide": "[Cu+2].[Br-].[Br-]"
+"copper (II) chloride": "[Cu+2].[Cl-].[Cl-]"
+"copper (II) iodide": "[Cu+2].[I-].[I-]"
+"copper fluoride": "[Cu+2].[F-].[F-]"
+"Copper sulfate": "O=S(=O)=[Cu](=O)=O"
+"Copper(I) 2-Thiophenecarboxylate": "O=C(C1=CC=CS1)[O-].[Cu+]"
+"Copper(I) Acetate": "CC([O-])=O.[Cu+]"
+"Copper(I) Cyanide": "[C-]#N.[Cu+]"
+"Copper(I) Trifluoromethanesulfonate": "O=S(C(F)(F)F)([O-])=O.[Cu+]"
+"Copper(I) Trifluoromethanethiolate": "[S-]C(F)(F)F.[Cu+]"
+"copper(I)bromide DMS-complex": "CSC.[Cu+].[Br-]"
+"Copper(I)iodide": "[Cu+].[I-]"
+"Copper(II) Acetate Monohydrate": "CC([O-])=O.CC([O-])=O.[H]O[H].[Cu+2]"
+"Copper(II) Tetrafluoroborate": "F[B-](F)(F)F.F[B-](F)(F)F.[Cu+2]"
+"Copper(II) Trifluoromethanesulfonate": "O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Cu+2]"
+"Croconic Acid": "OC1=C(C(C(C1=O)=O)=O)O"
+"Cumene Hydroperoxide": "CC(C1=CC=C(OO)C=C1)C"
+"Cupric hydroxide": "[Cu+2].[OH-].[OH-]"
+"Cyanomethylenetributylphosphorane": "CCCCP(CCCC)(CCCC)=CC#N"
+"Cyanuric Chloride": "ClC1=NC(Cl)=NC(Cl)=N1"
+"cyclohexane": "C1CCCCC1"
+"Cyclohexyl(dimethoxy)methylsilane": "C[Si](OC)(C1CCCCC1)OC"
+"Cyclohexylboronic Acid": "OB(C1CCCCC1)O"
+"Cyclohexyldiphenylphosphine": "P(C1=CC=CC=C1)(C2CCCCC2)C3=CC=CC=C3"
+"Cyclohexylmagnesium Bromide": "Br[Mg]C1CCCCC1"
+"Cyclohexyltrimethylammonium Bis(trifluoromethanesulfonyl)imide": "C[N+](C)(C)C1CCCCC1.O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O"
+"Cyclooctene": "C1=C\\CCCCCC/1"
+"Cyclopentadienyl Thallium": "[Tl]C1=CC=CC1"
+"Cyclopentadienylbis(triphenylphosphine)ruthenium(II) Chloride": "[Ru+]C1=CC=CC1.P(C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4.P(C5=CC=CC=C5)(C6=CC=CC=C6)C7=CC=CC=C7.[Cl-]"
+"Cyclopentadienyliron Dicarbonyl Dimer": "[C]=O.[C]=O.[Fe]C1=CC=CC1"
+"Cyclopentadienyltitanium(IV) Trichloride": "[Ti+3]C1=CC=CC1.[Cl-].[Cl-].[Cl-]"
+"cyclopentane": "C1CCCC1"
+"Cyclopentylboronic Acid": "OB(C1CCCC1)O"
+"Cyclopentylmagnesium Bromide": "Br[Mg]C1CCCC1"
+"Cyclopentylmethylether": "COC1CCCC1"
+"Cyclopropylmagnesium Bromide": "Br[Mg]C1CC1"
+"D-(-)-Leucinol": "N[C@H](CC(C)C)CO"
+"D-(+)-Threonine": "N[C@H]([C@@H](O)C)C(O)=O"
+"D-Alanine": "N[C@H](C)C(O)=O"
+"Decamethylcyclopentasiloxane": "C[Si]1(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O1"
+"Decamethyltetrasiloxane": "C[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)C"
+"Decyltriethoxysilane": "CCO[Si](OCC)(CCCCCCCCCC)OCC"
+"Decyltrimethoxysilane": "CO[Si](OC)(CCCCCCCCCC)OC"
+"Decyltrimethylammonium Bromide": "C[N+](C)(CCCCCCCCCC)C.[Br-]"
+"Decyltrimethylammonium Chloride": "C[N+](C)(CCCCCCCCCC)C.[Cl-]"
+"Dehydroacetic Acid": "CC(C(C(C=C(O1)C)=O)C1=O)=O"
+"Dess-Martin periodinane (DMP)": "O=C(O1)C2=CC=CC=C2I1(OC(C)=O)(OC(C)=O)OC(C)=O"
+"Di(N-succinimidyl) Carbonate": "O=C(ON1C(CCC1=O)=O)ON2C(CCC2=O)=O"
+"Di-1-adamantylphosphine": "C12CC3(PC45CC6CC(C5)CC(C6)C4)CC(C2)CC(C3)C1"
+"Di-2-pyridyl Carbonate": "O=C(OC1=NC=CC=C1)OC2=NC=CC=C2"
+"Diacetoxydimethylsilane": "C[Si](OC(C)=O)(OC(C)=O)C"
+"Diallyldimethylammonium Chloride": "C[N+](CC=C)(CC=C)C.[Cl-]"
+"Diallyldimethylsilane": "C[Si](CC=C)(CC=C)C"
+"Dibenzo[a,e]cyclooctene": "C12=CC=CC=C1/C=C\\C3=CC=CC=C3/C=C\\2"
+"Dibenzyl L-Tartrate": "O[C@H]([C@H](C(OCC1=CC=CC=C1)=O)O)C(OCC2=CC=CC=C2)=O"
+"Dibromoisocyanuric Acid": "O=C(N(Br)C(N1)=O)N(Br)C1=O"
+"Dibutyltin Bis(trifluoromethanesulfonate)": "CCCC[Sn+2]CCCC.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O"
+"Dibutyltin Diacetate": "CCCC[Sn+2]CCCC.CC([O-])=O.CC([O-])=O"
+"Dibutyltin Dichloride": "CCCC[Sn](Cl)(Cl)CCCC"
+"Dibutyltin Dilaurate": "CCCC[Sn+2]CCCC.CCCCCCCCCCCC([O-])=O.CCCCCCCCCCCC([O-])=O"
+"Dibutyltin Oxide": "CCCC[Sn](CCCC)=O"
+"Dichloramine B": "O=S(N(Cl)Cl)(C1=CC=CC=C1)=O"
+"Dichloramine T": "CC1=CC=C(S(=O)([N-]Cl)=O)C=C1.[Na+]"
+"Dichloro(1,10-phenanthroline)copper(II)": "Cl[Cu]Cl.C12=CC=C3C=CC=NC3=C1N=CC=C2"
+"Dichloro(diethylamino)phosphine": "CCN(P(Cl)Cl)CC"
+"Dichloro(methyl)(3,3,3-trifluoropropyl)silane": "FC(F)(F)CC[Si](Cl)(Cl)C"
+"Dichloro(methyl)-n-octylsilane": "CCCCCCCC[Si](Cl)(Cl)C"
+"Dichloro(N,N,N',N'-tetramethylethylenediamine)zinc(II)": "CN(C)CCN(C)C.Cl[Zn]Cl"
+"Dichloro(p-cymene)ruthenium(II)": "CC1=CC=C(C(C)C)C=C1.Cl[Ru]Cl"
+"Dichloro[9,9-dimethyl-4,5-bis(diphenylphosphino)xanthene]palladium(II)": "CC1(C)C2=C(OC3=C1C=CC=C3P(C4=CC=CC=C4)C5=CC=CC=C5)C(P(C6=CC=CC=C6)C7=CC=CC=C7)=CC=C2.Cl[Pd]Cl"
+"Dichloroacetic Acid": "O=C(O)C(Cl)Cl"
+"Dichlorocyclohexylmethylsilane": "C[Si](Cl)(Cl)C1CCCCC1"
+"Dichlorodecylmethylsilane": "C[Si](Cl)(Cl)CCCCCCCCCC"
+"Dichlorododecylmethylsilane": "C[Si](Cl)(Cl)CCCCCCCCCCCC"
+"Dichlorohexylmethylsilane": "C[Si](Cl)(Cl)CCCCCC"
+"dichloromethane": "ClCCl"
+"Dichloromethylvinylsilane": "C=C[Si](Cl)(Cl)C"
+"Dichlorophenylphosphine": "ClP(Cl)C1=CC=CC=C1"
+"Dichlorotitanium Diisopropoxide": "Cl[Ti+2]Cl.CC([O-])C.CC([O-])C"
+"Dicobalt Octacarbonyl": "[CH-]=O.[CH-]=O.[C-]#[O+].[C-]#[O+].[C-]#[O+].[C-]#[O+].[C-]#[O+].[C-]#[O+].[Co].[Co+2]"
+"Dicumyl peroxide": "CC(OOC(C)(C1=CC=CC=C1)C)(C2=CC=CC=C2)C"
+"Dicyclohexyl(2,4,6-triisopropylphenyl)phosphine": "CC(C1=C(P(C2CCCCC2)C3CCCCC3)C(C(C)C)=CC(C(C)C)=C1)C"
+"Dicyclohexyl(trifluoromethanesulfonyloxy)borane": "O=S(OB(C1CCCCC1)C2CCCCC2)(C(F)(F)F)=O"
+"Dicyclohexylamine Borane": "C1(NC2CCCCC2)CCCCC1.B"
+"Dicyclohexylphenylphosphine": "P(C1CCCCC1)(C2CCCCC2)C3=CC=CC=C3"
+"Dicyclopentadiene": "C12C=CCC1C3C=CC2C3"
+"Dicyclopentyl(dimethoxy)silane": "CO[Si](C1CCCC1)(C2CCCC2)OC"
+"Didecyldimethylammonium Bromide": "C[N+](CCCCCCCCCC)(CCCCCCCCCC)C.[Br-]"
+"Didodecyldimethylammonium Chloride": "C[N+](CCCCCCCCCCCC)(CCCCCCCCCCCC)C.[Cl-]"
+"Diethoxy(methyl)phenylsilane": "C[Si](OCC)(OCC)C1=CC=CC=C1"
+"Diethoxydimethylsilane": "C[Si](OCC)(OCC)C"
+"Diethoxydiphenylsilane": "CCO[Si](C1=CC=CC=C1)(OCC)C2=CC=CC=C2"
+"Diethoxymethylsilane": "C[SiH](OCC)OCC"
+"Diethoxymethylvinylsilane": "C=C[Si](OCC)(OCC)C"
+"Diethyl (Bromodifluoromethyl)phosphonate": "FC(Br)(P(OCC)(OCC)=O)F"
+"Diethyl 1,4-Dihydro-2,6-dimethyl-3,5-pyridinedicarboxylate": "O=C(C1=C(C)NC(C)=C(C(OCC)=O)C1)OCC"
+"Diethyl 2,2':6',2''-Terpyridine-4'-phosphonate": "O=P(C1=CC(C2=NC=CC=C2)=NC(C3=NC=CC=C3)=C1)(OCC)OCC"
+"Diethyl Cyanophosphonate": "N#CP(OCC)(OCC)=O"
+"diethyl ether": "CCOCC"
+"Diethyl D-(-)-Tartrate": "O[C@@H]([C@@H](C(OCC)=O)O)C(OCC)=O"
+"Diethyl L-(+)-Tartrate": "O[C@H]([C@H](C(OCC)=O)O)C(OCC)=O"
+"Diethyl(2-methoxyethyl)methylammonium Bis(fluorosulfonyl)imide": "FC(F)(F)S(=O)([N-]S(=O)(C(F)(F)F)=O)=O.C[N+](CC)(CC)CCOC"
+"Diethyl(isopropyl)silanol": "O[Si](CC)(CC)C(C)C"
+"Diethylamine": "CCNCC"
+"Diethyldimethylammonium hydroxide": "C[N+](CC)(CC)C.[OH-]"
+"Diethylenetriamine": "NCCNCCN"
+"Diethylphenylphosphine": "CCP(CC)C1=CC=CC=C1"
+"Difluoroacetic Acid": "O=C(O)C(F)F"
+"Difluoroacetic Anhydride": "O=C(OC(C(F)F)=O)C(F)F"
+"Difluoromethyl 2-Pyridyl Sulfone": "O=S(C1=NC=CC=C1)(C(F)F)=O"
+"Difluoromethyl Phenyl Sulfide": "FC(SC1=CC=CC=C1)F"
+"Difluoromethyl Phenyl Sulfone": "O=S(C1=CC=CC=C1)(C(F)F)=O"
+"Dihydrogen hexahydroxyplatinate": "O[Pt-2](O)(O)(O)(O)O.[H+].[H+]"
+"Diisobutyldimethoxysilane": "CO[Si](CC(C)C)(CC(C)C)OC"
+"Diisopropyl D-(-)-Tartrate": "O[C@@H]([C@@H](C(OC(C)C)=O)O)C(OC(C)C)=O"
+"Diisopropyl L-(+)-Tartrate": "O[C@H]([C@H](C(OC(C)C)=O)O)C(OC(C)C)=O"
+"Diisopropylamine": "CC(NC(C)C)C"
+"Dilauryldimethylammonium Bromide": "C[N+](CCCCCCCCCCCC)(CCCCCCCCCCCC)C.[Br-]"
+"Dilithium Tetrachlorocopper(II)": "Cl[Cu-](Cl)(Cl)Cl.Cl[Cu-](Cl)(Cl)Cl.[Li+].[Li+]"
+"Dimesitylammonium Pentafluorobenzenesulfonate": "CC1=CC(C)=CC(C)=C1[NH2+]C2=C(C)C=C(C)C=C2C.O=S(C3=C(F)C(F)=C(F)C(F)=C3F)([O-])=O"
+"Dimesitylfluoroborane": "CC1=CC(C)=CC(C)=C1B(F)C2=C(C)C=C(C)C=C2C"
+"Dimethoxy(methyl)(3,3,3-trifluoropropyl)silane": "FC(F)(F)CC[Si](OC)(OC)C"
+"Dimethoxy(methyl)silane": "C[SiH](OC)OC"
+"Dimethoxydimethylsilane": "C[Si](OC)(OC)C"
+"Dimethoxydiphenylsilane": "CO[Si](C1=CC=CC=C1)(OC)C2=CC=CC=C2"
+"Dimethoxydi-p-tolylsilane": "CC1=CC=C([Si](OC)(OC)C2=CC=C(C)C=C2)C=C1"
+"Dimethoxymethylvinylsilane": "C=C[Si](OC)(OC)C"
+"Dimethyl 2,2'-Bipyridine-4,4'-dicarboxylate": "O=C(C1=CC(C2=NC=CC(C(OC)=O)=C2)=NC=C1)OC"
+"Dimethyl 2,2'-Bipyridine-6,6'-dicarboxylate": "O=C(C1=CC=CC(C2=NC(C(OC)=O)=CC=C2)=N1)OC"
+"Dimethyl Sulfide Borane": "CSC.B"
+"Dimethyl D-(-)-Tartrate": "O[C@@H]([C@@H](C(OC)=O)O)C(OC)=O"
+"Dimethyl L-(+)-Tartrate": "O[C@H]([C@H](C(OC)=O)O)C(OC)=O"
+"Dimethylamine": "CNC"
+"Dimethylamine Borane": "CNC.B"
+"Dimethylbis(phenylethynyl)silane": "C[Si](C#CC1=CC=CC=C1)(C)C#CC2=CC=CC=C2"
+"Dimethyldimyristylammonium Bromide": "CCCCCCCCCCCCCC[N+](C)(C)CCCCCCCCCCCCCC.[Br-]"
+"Dimethyldioctadecylammonium Bromide": "CCCCCCCCCCCCCCCCCC[N+](C)(C)CCCCCCCCCCCCCCCCCC.[Br-]"
+"Dimethyldioctadecylammonium Iodide": "CCCCCCCCCCCCCCCCCC[N+](C)(C)CCCCCCCCCCCCCCCCCC.[I-]"
+"Dimethyldioctylammonium Bromide": "CCCCCCCC[N+](C)(C)CCCCCCCC.[Br-]"
+"Dimethyldipalmitylammonium Bromide": "CCCCCCCCCCCCCCCC[N+](C)(C)CCCCCCCCCCCCCCCC.[Br-]"
+"Dimethyldiphenylsilane": "C[Si](C1=CC=CC=C1)(C)C2=CC=CC=C2"
+"Dimethyldivinylsilane": "C=C[Si](C)(C)C=C"
+"Dimethylformamide": "CC(N(C)C)=O"
+"Dimethylphenylphosphine Borane": "CP(C)C1=CC=CC=C1.B"
+"Dimethylphenylsilane": "C[SiH](C)C1=CC=CC=C1"
+"Dimethylthiophosphinoyl Chloride": "ClP(C)(C)=S"
+"Dimethyltin Dichloride": "C[Sn](Cl)(Cl)C"
+"Dimethyltin Oxide": "C[Sn](C)=O"
+"Dimethyltitanocene": "C[Ti]C.c1cccc1.c2cccc2"
+"Di-n-octyltin Oxide": "CCCCCCCC[Sn](CCCCCCCC)=O"
+"Diphenyl-2-pyridylphosphine": "P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=NC=CC=C3"
+"Diphenylammonium Trifluoromethanesulfonate": "O=S(C(F)(F)F)([O-])=O.C1([NH2+]C2=CC=CC=C2)=CC=CC=C1"
+"Diphenylbis(phenylethynyl)silane": "C1(C#C[Si](C2=CC=CC=C2)(C3=CC=CC=C3)C#CC4=CC=CC=C4)=CC=CC=C1"
+"Diphenyldichlorogermane": "Cl[Ge](C1=CC=CC=C1)(C2=CC=CC=C2)Cl"
+"Diphenyliodonium chloride": "C1([I+]C2=CC=CC=C2)=CC=CC=C1.[Cl-]"
+"Diphenylphosphine Oxide": "O=P(C1=CC=CC=C1)C2=CC=CC=C2"
+"Diphenylphosphinic Chloride": "O=P(C1=CC=CC=C1)(C2=CC=CC=C2)Cl"
+"Diphenylphosphoryl Azide": "O=P(C1=CC=CC=C1)(N=[N+]=[N-])C2=CC=CC=C2"
+"Diphenylpropylphosphine": "CCCP(C1=CC=CC=C1)C2=CC=CC=C2"
+"Diphenylsilane": "C1([SiH2]C2=CC=CC=C2)=CC=CC=C1"
+"Diphenylsilanediol": "O[Si](C1=CC=CC=C1)(C2=CC=CC=C2)O"
+"Diphosphoryl Chloride": "O=P(OP(O)(O)=O)(Cl)O"
+"Dipivaloylmethane": "CC(C)(C)C(CC(C(C)(C)C)=O)=O"
+"Dipotassium (R)-1,1'-Binaphthyl-2,2'-disulfonate": "O=S(C1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3S(=O)([O-])=O)([O-])=O.[K+].[K+]"
+"Dipyrido[3,2-a:2',3'-c]phenazine": "C12=CC=CN=C1C3=NC=CC=C3C4=NC5=CC=CC=C5N=C42"
+"Di-sec-butylmagnesium - Lithium Chloride": "CCC([Mg]C(C)CC)C.[Li+].[Cl-]"
+"Di-tert-butyl 1,4-Dihydro-2,6-dimethyl-3,5-pyridinedicarboxylate": "O=C(C1=C(C)NC(C)=C(C(OC(C)(C)C)=O)C1)OC(C)(C)C"
+"Di-tert-butyl Peroxide": "CC(OOC(C)(C)C)(C)C"
+"Di-tert-butyl L-(+)-Tartrate": "O[C@H]([C@H](C(OC(C)(C)C)=O)O)C(OC(C)(C)C)=O"
+"Di-tert-butylchlorophosphine": "ClP(C(C)(C)C)C(C)(C)C"
+"Di-tert-butylmethylphosphonium Tetraphenylborate": "C[PH+](C(C)(C)C)C(C)(C)C.C1([B-](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1"
+"Di-tert-butylphenylphosphine": "CC(P(C(C)(C)C)C1=CC=CC=C1)(C)C"
+"Di-tert-Butylsilane": "CC([SiH2]C(C)(C)C)(C)C"
+"DL-Dithiothreitol": "SC[C@H]([C@@H](CO)O)S"
+"DL-Lactic Acid": "OC(C)C(O)=O"
+"DL-Malic Acid": "OC(CC(O)=O)C(O)=O"
+"DL-α-Lipoic Acid": "O=C(CCCCC1SSCC1)O"
+"D-Methionine": "N[C@H](CCSC)C(O)=O"
+"DMF": "CN(C)C=O"
+"DMSO": "CS(C)=O"
+"Dodecamethylcyclohexasiloxane": "C[Si]1(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O1"
+"Dodecamethylpentasiloxane": "C[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)C"
+"Dodecyltriethoxysilane": "CCO[Si](OCC)(CCCCCCCCCCCC)OCC"
+"Dodecyltrimethoxysilane": "CO[Si](OC)(CCCCCCCCCCCC)OC"
+"Dodecyltrimethylammonium Bromide": "C[N+](C)(CCCCCCCCCCCC)C.[Br-]"
+"Dodecyltrimethylammonium Chloride": "C[N+](C)(CCCCCCCCCCCC)C.[Cl-]"
+"D-Phenylalanine": "N[C@H](CC1=CC=CC=C1)C(O)=O"
+"D-Pipecolic Acid": "O=C(O)C1CCCCN1"
+"D-Proline": "O=C(O)[C@@H]1NCCC1"
+"D-Tryptophan": "N[C@H](CC1=CNC2=C1C=CC=C2)C(O)=O"
+"ethanol": "OCC"
+"Ethoxydiphenylphosphine": "CCOP(C1=CC=CC=C1)C2=CC=CC=C2"
+"Ethoxytriethylsilane": "CC[Si](CC)(OCC)CC"
+"Ethyl (11bR)-4-Amino-2,6-bis(3,5-di-tert-butylphenyl)-4,5-dihydro-3H-cyclohepta[1,2-a:7,6-a']dinaphthalene-4-carboxylate": "O=C(C1(N)CC2=C(C3=CC(C(C)(C)C)=CC(C(C)(C)C)=C3)C=C4C=CC=CC4=C2C5=C6C=CC=CC6=CC(C7=CC(C(C)(C)C)=CC(C(C)(C)C)=C7)=C5C1)OCC"
+"Ethyl 1-Hydroxy-1H-1,2,3-triazole-4-carboxylate": "O=C(C1=CN(O)N=N1)OCC"
+"ethyl acetate": "CC(OCC)=O"
+"Ethyl Chloroglyoxylate": "O=C(Cl)C(OCC)=O"
+"Ethyl chlorooxoacetate": "O=C(OCC)C(Cl)=O"
+"Ethyl Cyano(hydroxyimino)acetate": "O=C(OCC)/C(C#N)=N/O"
+"Ethylamine ": "NCC"
+"Ethylamine Hydrochloride": "NCC.[H]Cl"
+"Ethylboronic Acid": "CCB(O)O"
+"Ethyldiphenylphosphine": "CCP(C1=CC=CC=C1)C2=CC=CC=C2"
+"Ethylene diamine": "NCCN"
+"Ethylenediaminetetraacetic Acid": "O=C(CN(CCN(CC(O)=O)CC(O)=O)CC(O)=O)O"
+"Ethylenedithiobis(trimethylsilane)": "C[Si](C)(C)SCCS[Si](C)(C)C"
+"Ethyllithium": "[Li]CC"
+"Ethylmagnesium Bromide": "Br[Mg]CC"
+"Ethylmagnesium Chloride": "Cl[Mg]CC"
+"Ethyltrimethylammonium Iodide": "C[N+](C)(CC)C.[I-]"
+"Europium": "[Eu]"
+"Fluoro-N,N,N',N'-tetramethylformamidinium Hexafluorophosphate": "C[N+](C)=C(F)N(C)C.F[P-](F)(F)(F)(F)F"
+"Folic Acid Hydrate": "O=C(O)C(NC(C1=CC=C(NCC2=NC3=C(N=C2)N=C(N)NC3=O)C=C1)=O)CCC(O)=O.[H]O[H]"
+"Formic acid": "O=CO"
+"Fumaric Acid": "O=C(O)/C=C/C(O)=O"
+"Gallic Acid Hydrate": "OC1=CC(C(O)=O)=CC(O)=C1O.[H]O[H]"
+"Glycolic Acid": "OCC(O)=O"
+"Gold": "[Au]"
+"Gold hydroxide": "[Au+3].[OH-].[OH-].[OH-]"
+"Hafnium": "[Hf]"
+"Hafnium(IV) Trifluoromethanesulfonate": "O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Hf+4]"
+"Heptafluorobutyric Anhydride": "O=C(OC(C(F)(F)C(F)(F)C(F)(F)F)=O)C(F)(F)C(F)(F)C(F)(F)F"
+"Heptafluorobutyryl Chloride": "O=C(Cl)C(F)(F)C(F)(F)C(F)(F)F"
+"Heptylmagnesium Bromide": "Br[Mg]CCCCCCC"
+"Hexachlorodisilane": "Cl[Si](Cl)(Cl)[Si](Cl)(Cl)Cl"
+"Hexadecamethylcyclooctasiloxane": "C[Si]1(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O1"
+"Hexadecyltrimethoxysilane": "CO[Si](OC)(CCCCCCCCCCCCCCCC)OC"
+"Hexadecyltrimethylammonium Bromide": "C[N+](C)(CCCCCCCCCCCCCCCC)C.[Br-]"
+"Hexadecyltrimethylammonium Chloride": "C[N+](C)(CCCCCCCCCCCCCCCC)C.[Cl-]"
+"Hexadecyltrimethylammonium hydroxide": "C[N+](C)(CCCCCCCCCCCCCCCC)C.[OH-]"
+"Hexadecyltrimethylammonium Hydroxide ": "C[N+](C)(CCCCCCCCCCCCCCCC)C.[OH-]"
+"Hexafluoroacetylacetone": "O=C(C(F)(F)C(CF)=O)C(F)(F)F"
+"Hexamethonium hydroxide": "C[N+](CCCCCC[N+](C)(C)C)(C)C.[OH-].[OH-]"
+"Hexamethylbenzene": "CC1=C(C)C(C)=C(C)C(C)=C1C"
+"Hexamethylcyclotrisiloxane": "C[Si]1(C)O[Si](C)(C)O[Si](C)(C)O1"
+"Hexamethyldisilane": "C[Si](C)(C)[Si](C)(C)C"
+"Hexamethyldisiloxane": "C[Si](C)(C)O[Si](C)(C)C"
+"Hexamethylditin": "C[Sn](C)(C)[Sn](C)(C)C"
+"Hexamethylenetetramine": "N12CN3CN(C2)CN(C3)C1"
+"Hexaphenylcyclotrisiloxane": "C1([Si]2(C3=CC=CC=C3)O[Si](C4=CC=CC=C4)(C5=CC=CC=C5)O[Si](C6=CC=CC=C6)(C7=CC=CC=C7)O2)=CC=CC=C1"
+"Hexaphenyldisilane": "C1([Si](C2=CC=CC=C2)(C3=CC=CC=C3)[Si](C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6)=CC=CC=C1"
+"Hexaphenyldisiloxane": "C1([Si](C2=CC=CC=C2)(C3=CC=CC=C3)O[Si](C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6)=CC=CC=C1"
+"Hexylboronic Acid": "CCCCCCB(O)O"
+"Hexyllithium": "[Li]CCCCCC"
+"Hexylmagnesium Bromide": "Br[Mg]CCCCCC"
+"Hexyltriethoxysilane": "CCO[Si](OCC)(CCCCCC)OCC"
+"Hexyltrimethoxysilane": "CO[Si](OC)(CCCCCC)OC"
+"Hexyltrimethylammonium Bromide": "C[N+](C)(CCCCCC)C.[Br-]"
+"Hydriodic Acid": "[H]I"
+"Hydrochloric Acid": "[H]Cl"
+"Hydrogen Bromide": "[H]Br"
+"Hydrogen Chloride": "[H]Cl"
+"Hydrogen peroxide": "[H]OO[H]"
+"Hydroquinidine Hydrochloride": "O[C@H]([C@@H]1C[C@H]2[C@H](C[N@@]1CC2)CC)C3=CC=NC4=CC=C(OC)C=C34.[H]Cl"
+"Hydroxylamine-O-sulfonic Acid": "NOS(O)(=O)=O"
+"I0801 (S)-4-Isopropyl-3-(1-naphthylmethyl)-2,5,5-triphenyl-1,3,2-oxazaborolidine (ca. 6% in Toluene, ca. 0.1mol/L)": "CC([C@@H]1N(CC2=C3C=CC=CC3=CC=C2)B(C4=CC=CC=C4)OC1(C5=CC=CC=C5)C6=CC=CC=C6)C"
+"IF5-Pyridine-HF": "[H]F.FI(F)(F)(F)F.C1=CN=CC=C1"
+"Imidazole": "C1=NC=CN1"
+"Imidazolium dichromate": "O=[Cr]([O-])(O[Cr](=O)([O-])=O)=O.C1=[NH+]C=CN1.C2=[NH+]C=CN2"
+"Indan": "C12=C(CCC2)C=CC=C1"
+"Indene": "C12=C(CC=C2)C=CC=C1"
+"INDIUM HYDROXIDE": "[In+3].[OH-].[OH-].[OH-]"
+"Indoline": "C12=C(NCC2)C=CC=C1"
+"Iodine": "II"
+"Iodobenzene Diacetate": "IC1=CC=CC=C1.CC(O)=O.CC(O)=O"
+"Iodomesitylene Diacetate": "CC1=C(I)C(C)=CC(C)=C1.CC(O)=O.CC(O)=O"
+"Iodosodilactone": "O=C1OI2C3=C1C=CC=C3C(O2)=O"
+"Iridium": "[Ir]"
+"Iridium(III) Chloride Hydrate": "[H]O[H].[Ir+3].[Cl-].[Cl-].[Cl-]"
+"Iron": "[Fe]"
+"Iron hydroxide": "[Fe+3].[OH-].[OH-].[OH-]"
+"Iron(II) Acetate": "CC([O-])=O.CC([O-])=O.[Fe+2]"
+"Iron(III) Chloride": "[Fe+3].[Cl-].[Cl-].[Cl-]"
+"Ishikawa's Reagent": "FC(N(CC)CC)(C(C(F)(F)F)F)F"
+"Isobutylboronic Acid ": "CC(C)CB(O)O"
+"Isobutyllithium": "[Li]CC(C)C"
+"Isobutylmagnesium Bromide": "Br[Mg]CC(C)C"
+"isopropanpol": "CC(O)C"
+"Isopropenyloxytris(trimethylsilyl)silane": "C[Si]([Si]([Si](C)(C)C)(OC(C)=C)[Si](C)(C)C)(C)C"
+"isopropyl alcohol": "CC(O)C"
+"Isopropylboronic Acid": "CC(B(O)O)C"
+"Isopropyldiphenylphosphine": "CC(P(C1=CC=CC=C1)C2=CC=CC=C2)C"
+"Isopropyllithium": "[Li]C(C)C"
+"Isopropylmagnesium Bromide": "Br[Mg]C(C)C"
+"Isopropylmagnesium Chloride": "Cl[Mg]C(C)C"
+"Isopropylmagnesium Chloride - Lithium Chloride": "Cl[Mg]C(C)C.[Li+].[Cl-]"
+"Isopropylmagnesium chloride lithium chloride complex ": "[Mg+]C(C)C.[Li+].[Cl-].[Cl-]"
+"L-(-)-Threonine": "N[C@@H]([C@H](O)C)C(O)=O"
+"L-(+)-Leucinol": "N[C@@H](CC(C)C)CO"
+"L-(+)-Tartaric Acid": "O[C@H]([C@H](C(O)=O)O)C(O)=O"
+"L-Alanine": "N[C@@H](C)C(O)=O"
+"Lanthanum": "[La]"
+"LANTHANUM HYDROXIDE": "[La+3].[OH-].[OH-].[OH-]"
+"Lanthanum(III) Trifluoromethanesulfonate": "O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[La+3]"
+"L-Ascorbic Acid": "OC([C@H](O1)[C@H](CO)O)=C(O)C1=O"
+"L-Azetidine-2-carboxylic Acid": "O=C(C1NCC1)O"
+"LEAD HYDROXIDE": "[Pb+2].[OH-].[OH-]"
+"Lead Tetraacetate ": "CC([O-])=O.CC([O-])=O.CC([O-])=O.CC([O-])=O.[Pb+4]"
+"Lead(II) Iodide": "[Pb+2].[I-].[I-]"
+"Lithium (E)-4-oxopent-2-en-2-olate": "C/C([O-])=C\\C(C)=O.[Li+]"
+"Lithium 2,2,6,6-tetramethylpiperidide": "CC1(C)CCCC(C)(C)[N-]1.[Li+]"
+"Lithium Acetylide Ethylenediamine Complex": "NCCN.[C-]#[C-].[Li+].[Li+]"
+"Lithium Aluminum Hydride": "[Li+].[Al+3].[H-].[H-].[H-].[H-]"
+"Lithium amide": "[Li+].[NH2-]"
+"Lithium Bis(trimethylsilyl)amide": "C[Si]([N-][Si](C)(C)C)(C)C.[Li+]"
+"Lithium Borohydride ": "[Li+].[BH4-]"
+"lithium bromide": "[Li+].[Br-]"
+"lithium chloride": "[Li+].[Cl-]"
+"Lithium dicyclohexylamide": "C1([N-]C2CCCCC2)CCCCC1.[Li+]"
+"Lithium diethylamide": "CC[N-]CC.[Li+]"
+"Lithium Diisopropylamide ": "CC([N-]C(C)C)C.[Li+]"
+"Lithium dimethylamide": "C[N-]C.[Li+]"
+"Lithium Diphenylphosphide (ca. 0.5mol/L in Tetrahydrofuran)": "C1([P-]C2=CC=CC=C2)=CC=CC=C1.[Li+]"
+"Lithium ethoxide": "CC[O-].[Li+]"
+"Lithium hydroxide": "[Li+].[OH-]"
+"Lithium isopropoxide": "CC([O-])C.[Li+]"
+"Lithium methoxide": "C[O-].[Li+]"
+"Lithium peroxide": "[O-][O-].[Li+].[Li+]"
+"lithium tetrafluoroborate": "F[B-](F)(F)F.[Li+]"
+"Lithium Triethylborohydride": "CC[BH-](CC)CC.[Li+]"
+"Lithium triisobutyl(2,2,6,6 tetramethylpiperdino)aluminate": "CC1(C)CCCC(C)(C)N1[Al-](CC(C)C)(CC(C)C)CC(C)C.[Li+]"
+"Lithium trimethylsilanolate": "[O-][Si](C)(C)C.[Li+]"
+"Lithium Tri-tert-butoxyaluminum Hydride": "CC(O[Al](OC(C)(C)C)OC(C)(C)C)(C)C.[Li+].[H-]"
+"Lithium tert-butoxide": "CC(C)([O-])C.[Li+]"
+"Lithium tert-Butoxide ": "CC(C)([O-])C.[Li+]"
+"L-Lactic Acid": "OC(C)C(O)=O"
+"L-Methionine": "N[C@@H](CCSC)C(O)=O"
+"L-Phenylalanine": "N[C@@H](CC1=CC=CC=C1)C(O)=O"
+"L-Pipecolic Acid": "O=C(O)C1CCCCN1"
+"L-Prolinamide": "O=C(N)[C@H]1NCCC1"
+"L-Prolinanilide": "O=C(NC1=CC=CC=C1)[C@H]2NCCC2"
+"L-Proline": "O=C(O)[C@H]1NCCC1"
+"L-Thioproline": "O=C(O)[C@H]1NCCC1=S"
+"L-Tryptophan": "N[C@@H](CC1=CNC2=C1C=CC=C2)C(O)=O"
+"Magnesium bis(diisopropyl)amide": "CC([N-]C(C)C)C.CC([N-]C(C)C)C.[Mg+2]"
+"Magnesium bis(hexamethyldisilazide)": "C[Si](C)(C)[N-][Si](C)(C)C.C[Si](C)(C)[N-][Si](C)(C)C.[Mg+2]"
+"magnesium bromide": "[Mg+2].[Br-].[Br-]"
+"magnesium carbonate": "[O-]C([O-])=O.[Mg+2]"
+"magnesium chloride": "[Mg+2].[Cl-].[Cl-]"
+"Magnesium di-tert-butoxide": "CC(C)([O-])C.CC(C)([O-])C.[Mg+2]"
+"Magnesium ethoxide": "CC[O-].CC[O-].[Mg+2]"
+"MAGNESIUM HYDROXIDE": "[Mg+2].[OH-].[OH-]"
+"magnesium iodide": "[Mg+2].[I-].[I-]"
+"Magnesium methoxide": "C[O-].C[O-].[Mg+2]"
+"magnesium permanganate": "O=[Mn](=O)([O-])=O.O=[Mn](=O)([O-])=O.[Mg+2]"
+"Magnesium permanganate hydrate": "O=[Mn](=O)([O-])=O.O=[Mn](=O)([O-])=O.[H]O[H].[Mg+2]"
+"Magnesium peroxide": "[O-][O-].[Mg+2]"
+"magnesium sulfate": "O=S([O-])([O-])=O.[Mg+2]"
+"Maleic Acid": "O=C(O)/C=C\\C(O)=O"
+"Malonic Acid": "O=C(O)CC(O)=O"
+"Manganese": "[Mn]"
+"manganese molybdate": "O=[Mo]([O-])([O-])=O.[Mn+2]"
+"manganese perchlorate": "O=Cl(=O)([O-])=O.O=Cl(=O)([O-])=O.[Mn+2]"
+"manganese sulfate": "O=S([O-])([O-])=O.[Mn+2]"
+"Manganese(II) Bis(trifluoromethanesulfonyl)imide": "FC(F)(S(=O)([N-]S(=O)(C(F)(F)F)=O)=O)F.FC(F)(S(=O)([N-]S(=O)(C(F)(F)F)=O)=O)F.[Mn+2]"
+"Manganese(II) Chloride Tetrahydrate": "[H]O[H].[H]O[H].[H]O[H].[H]O[H].[Mn+2].[Cl-].[Cl-]"
+"meso-Tetraphenylchlorin": "C1(C2=CC=CC=C2)=C(N3)CCC3=C(C4=CC=CC=C4)C5=NC(C=C5)=C(C6=CC=CC=C6)C(N7)=CC=C7C(C8=CC=CC=C8)=C9CCC1=N9"
+"Methallyltrimethylsilane": "C[Si](C)(CC(C)=C)C"
+"Methanesulfonic Acid": "CS(=O)(O)=O"
+"methanol": "CO"
+"Methoxydimethyl(phenyl)silane": "C[Si](C)(OC)C1=CC=CC=C1"
+"Methoxydiphenylphosphine": "COP(C1=CC=CC=C1)C2=CC=CC=C2"
+"Methoxymethyl(diphenyl)phosphine Oxide": "COCP(C1=CC=CC=C1)(C2=CC=CC=C2)=O"
+"Methoxymethyltrimethylsilane": "C[Si](C)(COC)C"
+"Methoxytrimethylsilane": "C[Si](C)(OC)C"
+"Methyl 2,2':6',2''-Terpyridine-4'-carboxylate": "O=C(C1=CC(C2=NC=CC=C2)=NC(C3=NC=CC=C3)=C1)OC"
+"Methyl 3-(Trimethylsilyloxy)crotonate": "C/C(O[Si](C)(C)C)=C/C(OC)=O"
+"Methyl Chlorodifluoroacetate": "O=C(OC)C(F)(Cl)F"
+"Methyl Chloroglyoxylate": "O=C(Cl)C(OC)=O"
+"Methyl chlorooxoacetate": "O=C(OC)C(Cl)=O"
+"Methyl Difluoro(fluorosulfonyl)acetate": "O=C(OC)C(F)(F)S(=O)(F)=O"
+"Methyl(diphenyl)phosphine Oxide": "CP(C1=CC=CC=C1)(C2=CC=CC=C2)=O"
+"Methylamine": "NC"
+"Methylboronic Acid": "CB(O)O"
+"Methyl-d3-magnesium iodide": "[2H]C([Mg]I)([2H])[2H]"
+"Methyldiphenylphosphine": "CP(C1=CC=CC=C1)C2=CC=CC=C2"
+"Methyldiphenylsilane": "C[SiH](C1=CC=CC=C1)C2=CC=CC=C2"
+"methylene chloride": "ClCCl"
+"Methyllithium lithium bromide": "[Li]C.[Li+].[Br-]"
+"Methylmagnesium Bromide": "Br[Mg]C"
+"Methylmagnesium chloride": "Cl[Mg]C"
+"Methylmagnesium Iodide": "I[Mg]C"
+"Methyltri-n-octylammonium Bis(trifluoromethanesulfonyl)imide": "O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O.C[N+](CCCCCCCC)(CCCCCCCC)CCCCCCCC"
+"Methyltri-n-octylammonium Chloride": "CCCCCCCC[N+](CCCCCCCC)(C)CCCCCCCC.[Cl-]"
+"Methyltri-n-octylammonium Hydrogen Sulfate": "CCCCCCCC[N+](CCCCCCCC)(C)CCCCCCCC.O=S(O)([O-])=O"
+"Methyltriphenylarsonium Iodide": "C[As+](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.[I-]"
+"Molybdenum": "[Mo]"
+"Monobutyltin Oxide": "CCCC[SnH]=O"
+"Monosodium Bromoisocyanurate Hydrate": "BrC([N-]C(N1)=O)=NC1=O.[Na+]"
+"Morpholine": "C1CNCCO1"
+"Morpholinosulfur Trifluoride": "FS(F)(F)N1CCOCC1"
+"m-Tolylmagnesium Bromide ": "Br[Mg]C1=CC=CC(C)=C1"
+"N-(2-Pyridyl)bis(trifluoromethanesulfonimide)": "O=S(N(C1=NC=CC=C1)S(=O)(C(F)(F)F)=O)(C(F)(F)F)=O"
+"N-(2-Thiophenesulfonyl)-L-prolinamide": "O=C(NS(=O)(C1=CC=CS1)=O)[C@H]2NCCC2"
+"N-(9-Deoxy-epi-cinchonidin-9-yl)picolinamide": "O=C(N[C@H]([C@H]1N2CCC(C1)C(C=C)C2)C3=CC=NC4=CC=CC=C34)C5=NC=CC=C5"
+"N-(9-Deoxy-epi-cinchonin-9-yl)picolinamide": "O=C(N[C@@H](C1N2CCC(C1)C(C=C)C2)C3=CC=NC4=CC=CC=C34)C5=NC=CC=C5"
+"N-(Trifluoromethylthio)phthalimide": "O=C(N1SC(F)(F)F)C2=CC=CC=C2C1=O"
+"N,N,N',N'-Tetraethylethylenediamine": "CCN(CC)CCN(CC)CC"
+"N,N,N',N'-Tetrakis(2-pyridylmethyl)ethylenediamine": "N(CC1=NC=CC=C1)(CC2=NC=CC=C2)CCN(CC3=NC=CC=C3)CC4=NC=CC=C4"
+"N,N,N',N'-Tetramethyl-1,3-diaminopropane": "CN(C)CCCN(C)C"
+"N,N,N',N'-Tetramethyl-1,4-diaminobutane": "CN(C)CCCCN(C)C"
+"N,N,N',N'-Tetramethyl-1,6-diaminohexane": "CN(C)CCCCCCN(C)C"
+"N,N,N',N'-Tetramethylethylenediamine": "CN(C)CCN(C)C"
+"N,N,N',N'-Tetramethyl-O-(N-succinimidyl)uronium Hexafluorophosphate": "O=C(N1[O+]=C(N(C)C)N(C)C)CCC1=O.F[P-](F)(F)(F)(F)F"
+"N,N,N',N'-Tetramethyl-O-(N-succinimidyl)uronium Tetrafluoroborate": "O=C(N1[O+]=C(N(C)C)N(C)C)CCC1=O.F[B-](F)(F)F"
+"N,N,N',N'-Tetramethyl-S-(1-oxido-2-pyridyl)thiouronium Hexafluorophosphate": "[O-][N+]1=CC=CC=C1[S+]=C(N(C)C)N(C)C.F[P-](F)(F)(F)(F)F"
+"N,N,N',N'-Tetramethyl-S-(1-oxido-2-pyridyl)thiouronium Tetrafluoroborate": "[O-][N+]1=CC=CC=C1[S+]=C(N(C)C)N(C)C.F[B-](F)(F)F"
+"N,N',N''-Trimethyldiethylenetriamine": "CN(CCNC)CCNC"
+"N,N'-Bis(2-aminobenzal)ethylenediamine": "NC1=CC=CC=C1/C=N/CC/N=C/C2=CC=CC=C2N"
+"N,N'-Bis(2-pyridylmethyl)-1,2-ethylenediamine Tetrahydrochloride Dihydrate": "[H]Cl.[H]Cl.[H]Cl.[H]Cl.[H]O[H].[H]O[H].C1(CNCCNCC2=NC=CC=C2)=NC=CC=C1"
+"N,N'-Bis(3,5-di-tert-butylsalicylidene)-1,1,2,2-tetramethylethylenediamine": "CC(/N=C/C1=CC(C(C)(C)C)=CC(C(C)(C)C)=C1O)(C)C(C)(C)/N=C/C2=CC(C(C)(C)C)=CC(C(C)(C)C)=C2O"
+"N,N'-Bis(5-hydroxysalicylidene)ethylenediamine": "OC1=CC=C(O)C=C1/C=N/CC/N=C/C2=CC(O)=CC=C2O"
+"N,N'-Bis(salicylidene)-1,2-phenylenediamine": "OC1=CC=CC=C1/C=N/C2=CC=CC=C2/N=C/C3=CC=CC=C3O"
+"N,N'-Bis(salicylidene)-1,2-propanediamine": "CC(/N=C/C1=CC=CC=C1O)C/N=C/C2=CC=CC=C2O"
+"N,N'-Bis(salicylidene)-1,3-propanediamine": "OC1=CC=CC=C1/C=N/CCC/N=C/C2=CC=CC=C2O"
+"N,N'-Bis(salicylidene)ethylenediamine": "OC1=CC=CC=C1/C=N/CC/N=C/C2=CC=CC=C2O"
+"N,N-Dichloro-p-toluenesulfonamide": "CC1=CC=C(S(=O)(N(Cl)Cl)=O)C=C1"
+"N,N'-Dicyclohexyl-1,2-ethanediamine Hydrate": "[H]O[H].C1(NCCNC2CCCCC2)CCCCC1"
+"N,N'-Dicyclohexylcarbodiimide": "C1(N=C=NC2CCCCC2)CCCCC1"
+"N,N-Diethylaniline Borane": "CCN(CC)C1=CC=CC=C1.B"
+"N,N'-Diisopropylcarbodiimide": "CC(N=C=NC(C)C)C"
+"N,N-Diisopropylethylamine": "CCN(C(C)C)C(C)C"
+"N,N-Diisopropylmethylamine": "CN(C(C)C)C(C)C"
+"N,N'-Dimethylethylenediamine": "CNCCNC"
+"N,N-Dimethyl-N-(methylsulfanylmethylene)ammonium Iodide": "CSC=[N+](C)C.[I-]"
+"N,N'-Diphenylethylenediamine": "C1(NCCNC2=CC=CC=C2)=CC=CC=C1"
+"N,N'-Di-tert-butylcarbodiimide": "CC(N=C=NC(C)(C)C)(C)C"
+"N,N'-Di-tert-butylethylenediamine": "CC(NCCNC(C)(C)C)(C)C"
+"N-[(11bS)-4,5-Dihydro-3H-dinaphtho[2,1-c:1',2'-e]azepin-2-yl]trifluoromethanesulfonamide": "O=S(C(F)(F)F)(NC1=C2CNCC3=CC=C4C=CC=CC4=C3C2=C5C=CC=CC5=C1)=O"
+"N-[(9S)-8α-Cinchonan-9-yl]quinoline-8-sulfonamide": "O=S(C1=C2N=CC=CC2=CC=C1)(N[C@H]([C@@H]3C[C@H]4[C@H](C[N@@]3CC4)C=C)C5=CC=NC6=CC=CC=C56)=O"
+"N-[2-(Trimethylsilyl)ethoxycarbonyloxy]succinimide": "O=C(N1OC(OCC[Si](C)(C)C)=O)CCC1=O"
+"name": "Smiles"
+"N-Benzylcinchonidinium Chloride": "O[C@@H]([C@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=[N+](CC4=CC=CC=C4)C5=CC=CC=C35.[Cl-]"
+"N-Benzylcinchoninium Chloride": "O[C@H]([C@@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=[N+](CC4=CC=CC=C4)C5=CC=CC=C35.[Cl-]"
+"N-Benzylquinidinium Chloride": "O[C@H]([C@@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=[N+](CC4=CC=CC=C4)C5=CC=C(OC)C=C35.[Cl-]"
+"N-Benzylquininium Chloride": "O[C@@H]([C@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=[N+](CC4=CC=CC=C4)C5=CC=C(OC)C=C35.[Cl-]"
+"N-Bromoacetamide": "CC(NBr)=O"
+"N-Bromophthalimide": "O=C(N1Br)C2=CC=CC=C2C1=O"
+"N-Bromosaccharin": "O=C1N(Br)S(=O)(C2=C1C=CC=C2)=O"
+"N-Bromosuccinimide": "O=C(N1Br)CCC1=O"
+"n-Butanol": "CCCCO"
+"n-Butyllithium solution": "[Li]CCCC"
+"N-Chlorobenzenesulfonamide sodium salt": "O=S(C1=CC=CC=C1)([N-]Cl)=O.[Na+]"
+"N-Chlorophthalimide": "O=C(N1Cl)C2=CC=CC=C2C1=O"
+"N-Chlorosaccharin": "O=C1N(Cl)S(=O)(C2=C1C=CC=C2)=O"
+"N-Chlorosuccinimide": "O=C(N1Cl)CCC1=O"
+"Neodymium": "[Nd]"
+"NEODYMIUM HYDRATE": "[H]O[H].[Nd]"
+"Neodymium(III) Trifluoromethanesulfonate": "O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Nd+3]"
+"N-Ethyldiisopropylamine": "CC(N(CC)C(C)C)C"
+"N-Fluorobenzenesulfonimide": "FN(S(=O)(C1=CC=CC=C1)=O)S(=O)(C2=CC=CC=C2)=O"
+"N-Fluoro-N'-(chloromethyl)triethylenediamine Bis(tetrafluoroborate)": "F[N+]1(CC2)CC[N+]2(CCl)CC1.F[B-](F)(F)F.F[B-](F)(F)F"
+"n-hexane": "CCCCCC"
+"N-Hydroxy-5-norbornene-2,3-dicarboximide": "O=C(C1C2C3C=CC1C3)N(O)C2=O"
+"N-Hydroxyphthalimide": "O=C(N1O)C2=CC=CC=C2C1=O"
+"N-Hydroxysuccinimide": "O=C(N1O)CCC1=O"
+"N-Hydroxysulfosuccinimide Sodium": "O=C(N1O)C(S(=O)([O-])=O)CC1=O.[Na+]"
+"N-Hydroxytetrachlorophthalimide": "O=C(N1O)C2=C(Cl)C(Cl)=C(Cl)C(Cl)=C2C1=O"
+"Nickel": "[Ni]"
+"Nickel peroxide": "[O-][O-].[Ni+2]"
+"Nickel(II) Benzenesulfonate Hexahydrate": "O=S(C1=CC=CC=C1)([O-])=O.O=S(C2=CC=CC=C2)([O-])=O.[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[Ni+2]"
+"NICKEL(II) HYDROXIDE": "[Ni+2].[OH-].[OH-]"
+"Nickel(II) peroxide hydrate ": "[O-][O-].[H]O[H].[Ni+2]"
+"Nickel(II) Trifluoromethanesulfonate": "O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Ni+2]"
+"Nickel(II)Â p-Toluenesulfonate Hexahydrate": "CC1=CC=C(S(=O)([O-])=O)C=C1.CC2=CC=C(S(=O)([O-])=O)C=C2.[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[Ni+2]"
+"Niobium hydroxide oxide": "[Nb+5].[Nb+5].[Nb+5].[OH-].[O-2].[OH-].[O-2].[OH-].[O-2].[OH-].[O-2].[OH-].[O-2]"
+"N-Iodosaccharin": "O=C1N(I)S(=O)(C2=C1C=CC=C2)=O"
+"N-Iodosuccinimide": "O=C(N1I)CCC1=O"
+"N'-Isopropylidene-2-nitrobenzenesulfonohydrazide": "O=S(C1=CC=CC=C1[N+]([O-])=O)(NN=C(C)C)=O"
+"Nitric acid": "O[N+]([O-])=O"
+"Nitrilotriacetic Acid": "O=C(O)CN(CC(O)=O)CC(O)=O"
+"nitromethane": "C[N+]([O-])=O"
+"Nitrosyl tetrafluoroborate": "F[B-](F)(F)(N=O)F"
+"N-Methylbis(trifluoroacetamide)": "O=C(C(F)(F)F)N(C)C(C(F)(F)F)=O"
+"N-Methyl-N-(trifluoromethylthio)aniline": "FC(F)(F)SN(C)C1=CC=CC=C1"
+"n-octanol": "CCCCCCCCO"
+"n-Octyl p-Toluenesulfonate": "CC1=CC=C(S(=O)(OCCCCCCCC)=O)C=C1"
+"n-Octylboronic Acid": "CCCCCCCCB(O)O"
+"n-Octylmagnesium Bromide": "Br[Mg]CCCCCCCC"
+"n-Octyltrimethylammonium Bromide": "C[N+](C)(CCCCCCCC)C.[Br-]"
+"n-Octyltrimethylammonium Chloride": "C[N+](C)(CCCCCCCC)C.[Cl-]"
+"Norbornadiene Rhodium(I) Chloride": "C12C=CC(C2)C=C1.[Rh+].[Cl-]"
+"N-Phenylbis(trifluoromethanesulfonimide)": "O=S(N(S(=O)(C(F)(F)F)=O)C1=CC=CC=C1)(C(F)(F)F)=O"
+"n-propanol": "CCCO"
+"N-Salicylideneaniline": "OC1=CC=CC=C1/C=N/C2=CC=CC=C2"
+"N-tert-Butyl-5-methylisoxazolium Perchlorate": "CC1=CC=[N+](C(C)(C)C)O1.O=Cl(=O)([O-])=O"
+"N-tert-Butylbenzenesulfenamide": "CC(NSC1=CC=CC=C1)(C)C"
+"N-tert-Butylbenzenesulfinimidoyl Chloride ": "CC(/N=S(Cl)/C1=CC=CC=C1)(C)C"
+"N-Trimethylsilylimidazole": "C[Si](N1C=NC=C1)(C)C"
+"O-(3,4-Dihydro-4-oxo-1,2,3-benzotriazin-3-yl)-N,N,N',N'-tetramethyluronium Tetrafluoroborate": "CN(C)C(N(C)C)=[O+]N1N=NC2=CC=CC=C2C1=O.F[B-](F)(F)F"
+"O-(6-Chlorobenzotriazol-1-yl)-N,N,N',N'-tetramethyluronium Hexafluorophosphate": "CN(C)C(N(C)C)=[O+]N1N=NC2=CC=C(Cl)C=C21.F[P-](F)(F)(F)(F)F"
+"O-(6-Chlorobenzotriazol-1-yl)-N,N,N',N'-tetramethyluronium Tetrafluoroborate": "CN(C)C(N(C)C)=[O+]N1N=NC2=CC=C(Cl)C=C21.F[B-](F)(F)F"
+"O-(7-Azabenzotriazol-1-yl)-N,N,N',N'-tetramethyluronium Hexafluorophosphate": "CN(C)C(N(C)C)=[O+]N1N=NC2=CC=CN=C21.F[P-](F)(F)(F)(F)F"
+"O-(7-Azabenzotriazol-1-yl)-N,N,N',N'-tetramethyluronium Tetrafluoroborate": "CN(C)C(N(C)C)=[O+]N1N=NC2=CC=CN=C21.F[B-](F)(F)F"
+"O-(Benzotriazol-1-yl)-N,N,N',N'-bis(pentamethylene)uronium Hexafluorophosphate": "F[P-](F)(F)(F)(F)F.N1(OC(N2CCCCC2)=[N+]3CCCCC3)N=NC4=C1C=CC=C4"
+"O-(Benzotriazol-1-yl)-N,N,N',N'-tetramethyluronium Hexafluorophosphate": "CN(C)C(N(C)C)=[O+]N1N=NC2=CC=CC=C21.F[P-](F)(F)(F)(F)F"
+"O-(Benzotriazol-1-yl)-N,N,N',N'-tetramethyluronium Tetrafluoroborate": "CN(C)C(N(C)C)=[O+]N1N=NC2=CC=CC=C21.F[B-](F)(F)F"
+"O,O'-Di-2-pyridyl Thiocarbonate": "S=C(OC1=NC=CC=C1)OC2=NC=CC=C2"
+"O-[(Ethoxycarbonyl)cyanomethylenamino]-N,N,N',N'-tetramethyluronium Hexafluorophosphate": "CN(C)C(N(C)C)=[O+]/N=C(C(OCC)=O)\\C#N.F[P-](F)(F)(F)(F)F"
+"O-[(Ethoxycarbonyl)cyanomethylenamino]-N,N,N',N'-tetramethyluronium Tetrafluoroborate": "CN(C)C(N(C)C)=[O+]/N=C(C(OCC)=O)\\C#N.F[B-](F)(F)F"
+"O-[2-Oxo-1(2H)-pyridyl]-N,N,N',N'-tetramethyluronium Tetrafluoroborate": "CN(C)C(N(C)C)=[O+]N1C=CC=CC1=O.F[B-](F)(F)F"
+"o-Chloramine T": "CC1=CC=CC=C1S([N-]Cl)(=O)=O.[Na+]"
+"Octadecamethylcyclononasiloxane": "C[Si]1(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O1"
+"Octadecyltriethoxysilane": "CCO[Si](OCC)(CCCCCCCCCCCCCCCCCC)OCC"
+"Octadecyltrimethoxysilane": "CO[Si](OC)(CCCCCCCCCCCCCCCCCC)OC"
+"Octakis(dimethylsilyloxy)octasilsesquioxane": "C[SiH](C)O[Si]1(O[Si]2(O[SiH](C)C)O[Si](O3)(O[SiH](C)C)O[Si](O4)(O[SiH](C)C)O[Si]5(O[SiH](C)C)O2)O[Si]3(O[SiH](C)C)O[Si]4(O[SiH](C)C)O[Si](O5)(O[SiH](C)C)O1"
+"Octamethylcyclotetrasiloxane": "C[Si]1(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O1"
+"Octamethyltrisiloxane": "C[Si](C)(C)O[Si](C)(C)O[Si](C)(C)C"
+"Octaphenylcyclotetrasiloxane": "C1([Si]2(C3=CC=CC=C3)O[Si](C4=CC=CC=C4)(C5=CC=CC=C5)O[Si](C6=CC=CC=C6)(C7=CC=CC=C7)O[Si](C8=CC=CC=C8)(C9=CC=CC=C9)O2)=CC=CC=C1"
+"Octaphenyloctasilsesquioxane": "C1([Si]2(O3)O[Si](O[Si](O4)(C5=CC=CC=C5)O[Si](O6)(C7=CC=CC=C7)O8)(C9=CC=CC=C9)O[Si]8(C%10=CC=CC=C%10)O[Si]3(C%11=CC=CC=C%11)O[Si]6(C%12=CC=CC=C%12)O[Si]4(C%13=CC=CC=C%13)O2)=CC=CC=C1"
+"Osmium": "[Os]"
+"Osmium Tetroxide": "[Os+8].[O-2].[O-2].[O-2].[O-2]"
+"O-TBDPS-D-Thr-N-Boc-L-tert-Leu-Diphenylphosphine": "O=C(OC(C)(C)C)N[C@@H](C(C)(C)C)C(N[C@H]([C@@H](O[Si](C1=CC=CC=C1)(C(C)(C)C)C2=CC=CC=C2)C)CP(C3=CC=CC=C3)C4=CC=CC=C4)=O"
+"O-tert-Butyl-L-threonine": "N[C@@H]([C@H](OC(C)(C)C)C)C(O)=O"
+"o-Tolylmagnesium Bromide": "Br[Mg]C1=CC=CC=C1C"
+"Oxalyl bromide": "O=C(Br)C(Br)=O"
+"Oxalyl Chloride": "O=C(Cl)C(Cl)=O"
+"Oxone": "O=S(O[KH])([O])=O.O=S(O[KH])([O])=O.[2 KHSO5]"
+"Oxygen": "OO"
+"Ozone": "O=[O+][O-]"
+"Palladium Carbon ": "[Pd]"
+"Palladium hydroxide": "[Pd+2].[OH-].[OH-]"
+"Palladium(II) Acetate": "CC([O-])=O.CC([O-])=O.[Pd+2]"
+"Palladium(II) Chloride": "[Pd+2].[Cl-].[Cl-]"
+"Palladium(II) Trifluoroacetate": "O=C([O-])C(F)(F)F.O=C([O-])C(F)(F)F.[Pd+2]"
+"Palmitic Acid": "CCCCCCCCCCCCCCCC(O)=O"
+"p-Cymene": "CC1=CC=C(C(C)C)C=C1"
+"Pentadecylmagnesium Bromide": "Br[Mg]CCCCCCCCCCCCCCC"
+"Pentafluoroanilinium Trifluoromethanesulfonate": "F[N+](F)(F)C1=CC=CC(F)=C1F.O=S(C(F)(F)F)([O-])=O"
+"Pentafluorobenzoyl Chloride": "O=C(Cl)C1=C(F)C(F)=C(F)C(F)=C1F"
+"Pentafluorophenol": "OC1=C(F)C(F)=C(F)C(F)=C1F"
+"Pentafluorophenyl 4-Nitrobenzenesulfonate": "O=S(C1=CC=C([N+]([O-])=O)C=C1)(OC2=C(F)C(F)=C(F)C(F)=C2F)=O"
+"Pentafluorophenyl Trifluoroacetate": "O=C(OC1=C(F)C(F)=C(F)C(F)=C1F)C(F)(F)F"
+"Pentafluoropropionic Anhydride": "O=C(OC(C(F)(F)C(F)(F)F)=O)C(F)(F)C(F)(F)F"
+"pentane ": "CCCCC"
+"Pentylboronic Acid": "CCCCCB(O)O"
+"Pentylmagnesium Bromide": "Br[Mg]CCCCC"
+"Pentylmagnesium chloride": "Cl[Mg]CCCCC"
+"Pentyltriethoxysilane": "CCO[Si](OCC)(CCCCC)OCC"
+"Periodic acid": "O=I(=O)(O)=O"
+"Perylene": "C12=CC=CC(C3=CC=CC4=C3C5=CC=C4)=C1C5=CC=C2"
+"PhenoFluorâ„¢ Mix": "[Cs]F.Cl[C+](N(C=C1)C2=C(C(C)C)C=CC=C2C(C)C)=[N]1C(C(C(C)C)=CC=C3)=C3C(C)C.[Cl-]"
+"Phenol nitroprusside solution": "O=N[Fe-2](C#N)(C#N)(C#N)(C#N)C#N.OC1=CC=CC=C1"
+"Phenyl Trifluoromethyl Sulfone": "O=S(C(F)(F)F)(C1=CC=CC=C1)=O"
+"Phenyl Trifluoromethyl Sulfoxide": "O=S(C1=CC=CC=C1)C(F)(F)F"
+"Phenyl[3-(trifluoromethyl)phenyl]iodonium triflate": "FC(C1=CC([I+]C2=CC=CC=C2)=CC=C1)(F)F.O=S([O-])(C(F)(F)F)=O"
+"Phenylarsine Oxide": "O=[As]C1=CC=CC=C1"
+"Phenylarsonic Acid": "O=[As](C1=CC=CC=C1)(O)O"
+"Phenylgermanium Trichloride": "Cl[Ge](Cl)(Cl)C1=CC=CC=C1"
+"Phenylmagnesium Bromide ": "Br[Mg]C1=CC=CC=C1"
+"Phenylmagnesium Chloride": "Cl[Mg]C1=CC=CC=C1"
+"Phenylmagnesium Iodide ": "I[Mg]C1=CC=CC=C1"
+"Phenylphosphonic Dichloride": "O=P(C1=CC=CC=C1)(Cl)Cl"
+"Phenylsilane": "[SiH3]C1=CC=CC=C1"
+"Phenyltin Trichloride": "Cl[Sn](Cl)(Cl)C1=CC=CC=C1"
+"Phosphomolybdic acid": "O=[Mo](OP(O)(O)=O)(O)=O"
+"Phosphomolybdic Acid Ethanol Solution": "O=[Mo](OP(O)(O)=O)(O)=O.CCO"
+"Phosphomolybdic Acid Hydrate": "O=[Mo](OP(O)(O)=O)(O)=O.[H]O[H]"
+"Phosphorus(V) oxychloride": "ClP(Cl)(Cl)=O"
+"Phosphoryl chloride": "O=P(Cl)(Cl)Cl"
+"Phthalic Acid": "O=C(O)C1=CC=CC=C1C(O)=O"
+"Phthalocyanine": "C1(C2=N3)=C(C=CC=C1)C(N2)=NC4=NC(C5=C4C=CC=C5)=NC(N6)=C7C=CC=CC7=C6N=C8C9=C(C=CC=C9)C3=N8"
+"Piperidine ": "N1CCCCC1"
+"Platinum": "[Pt]"
+"Platinum(IV) Oxide": "[Pt+4].[O-2].[O-2]"
+"Potassium (2-Formylphenyl)trifluoroborate": "F[B-](F)(C1=CC=CC=C1C=O)F.[K+]"
+"Potassium (2-Methoxyphenyl)trifluoroborate": "F[B-](F)(C1=CC=CC=C1OC)F.[K+]"
+"Potassium (3-Cyanophenyl)trifluoroborate": "F[B-](F)(C1=CC=CC(C#N)=C1)F.[K+]"
+"Potassium (3-Methoxyphenyl)trifluoroborate": "F[B-](F)(C1=CC=CC(OC)=C1)F.[K+]"
+"Potassium (3-Nitrophenyl)trifluoroborate": "F[B-](F)(C1=CC=CC([N+]([O-])=O)=C1)F.[K+]"
+"Potassium (4-Cyanophenyl)trifluoroborate": "F[B-](F)(C1=CC=C(C#N)C=C1)F.[K+]"
+"Potassium (4-Methoxyphenyl)trifluoroborate": "F[B-](F)(C1=CC=C(OC)C=C1)F.[K+]"
+"Potassium (Acetoxymethyl)trifluoroborate": "F[B-](F)(COC(C)=O)F.[K+]"
+"Potassium (Bromomethyl)trifluoroborate": "F[B-](F)(CBr)F.[K+]"
+"Potassium (Iodomethyl)trifluoroborate": "F[B-](F)(CI)F.[K+]"
+"Potassium (Methoxymethyl)trifluoroborate": "F[B-](F)(COC)F.[K+]"
+"Potassium [[(tert-Butoxycarbonyl)amino]methyl]trifluoroborate": "F[B-](F)(CNC(OC(C)(C)C)=O)F.[K+]"
+"Potassium 2-iodo-5-methylbenzenesulfonate": "O=S(C1=CC(C)=CC=C1I)([O-])=O.[K+]"
+"Potassium 2-Thienyltrifluoroborate": "F[B-](F)(C1=CC=CS1)F.[K+]"
+"Potassium 3-Pyridyltrifluoroborate": "F[B-](F)(C1=CC=CN=C1)F.[K+]"
+"Potassium 4-Pyridyltrifluoroborate": "F[B-](F)(C1=CC=NC=C1)F.[K+]"
+"potassium acetate": "CC([O-])=O.[K+]"
+"Potassium Allyltrifluoroborate": "F[B-](F)(CC=C)F.[K+]"
+"Potassium Bis(1-pyrazolyl)borohydride": "N1([BH2-]N2N=CC=C2)N=CC=C1.[K+]"
+"Potassium Bis(trimethylsilyl)amide": "C[Si]([N-][Si](C)(C)C)(C)C.[K+]"
+"Potassium Borohydride": "[K+].[BH4-]"
+"Potassium butanolate": "CC([O-])(C)C.[K+]"
+"potassium carbonate": "[O-]C([O-])=O.[K+].[K+]"
+"potassium chloride": "[K+].[Cl-]"
+"Potassium cyanide": "[C-]#N.[K+]"
+"Potassium Cyclopropyltrifluoroborate": "F[B-](F)(C1CC1)F.[K+]"
+"Potassium dichromate": "O=[Cr]([O-])(O[Cr](=O)([O-])=O)=O.[K+].[K+]"
+"Potassium ethoxide": "CC[O-].[K+]"
+"potassium fluoride": "[K+].[F-]"
+"Potassium Hexafluoroarsenate": "F[As-](F)(F)(F)(F)F.[K+]"
+"Potassium hydroxide": "[K+].[OH-]"
+"Potassium hydroxide solution": "[K+].[OH-]"
+"potassium iodide": "[K+].[I-]"
+"Potassium methoxide": "C[O-].[K+]"
+"Potassium monopersulfate triple salt": "OS(=O)(=O)[O-].OS(=O)(=O)O[O-].OS(=O)(=O)O[O-].[O-]S(=O)(=O)[O-].[K+].[K+].[K+].[K+].[K+]"
+"Potassium nitrate": "[N+](=O)([O-])[O-].[K+]"
+"Potassium permanganate": "O=[Mn](=O)(=O)([K])=O"
+"Potassium Perrhenate": "O=[Re](=O)([O-])=O.[K+]"
+"Potassium perruthenate": "O=[Ru](=O)([O-])=O.[K+]"
+"potassium persulfate": "[O-]S(=O)(OOS(=O)([O-])=O)=O.[K+].[K+]"
+"Potassium Phenyltrifluoroborate": "F[B-](F)(C1=CC=CC=C1)F.[K+]"
+"Potassium Trifluoro(trifluoromethyl)borate": "FC([B-](F)(F)F)(F)F.[K+]"
+"Potassium Trifluoroacetate": "O=C([O-])C(F)(F)F.[K+]"
+"Potassium Trimethoxy(trifluoromethyl)borate": "FC([B-](OC)(OC)OC)(F)F.[K+]"
+"Potassium trimethylsilanolate": "[O-][Si](C)(C)C.[K+]"
+"Potassium Tris(1-pyrazolyl)borohydride": "[BH-](N1N=CC=C1)(N2N=CC=C2)N3N=CC=C3.[K+]"
+"Potassium Vinyltrifluoroborate": "F[B-](F)(C=C)F.[K+]"
+"Potassium o-Tolyltrifluoroborate": "F[B-](F)(C1=CC=CC=C1C)F.[K+]"
+"Potassium p-Tolyltrifluoroborate": "F[B-](F)(C1=CC=C(C)C=C1)F.[K+]"
+"Potassium tert-Butoxide": "CC(C)([O-])C.[K+]"
+"Potassium tert-Pentoxide": "CCC(C)([O-])C.[K+]"
+"Propionic Acid": "CCC(O)=O"
+"Propylboronic Acid": "CCCB(O)O"
+"Propylmagnesium Bromide": "Br[Mg]CCC"
+"Propylmagnesium chloride": "Cl[Mg]CCC"
+"p-Toluenesulfonic Acid Monohydrate": "CC1=CC=C(S(=O)(O)=O)C=C1.[H]O[H]"
+"p-Tolylmagnesium Bromide ": "Br[Mg]C1=CC=C(C)C=C1"
+"Pyridine": "C1=CN=CC=C1"
+"Pyridine - Sulfur Trioxide Complex": "O=S(=O)=O.C1=CC=NC=C1"
+"Pyridine Iodine Monochloride": "IC1=NC=CC=C1Cl"
+"Pyridine-2-sulfonyl Fluoride": "O=S(C1=NC=CC=C1)(F)=O"
+"Pyridinium 3-Nitrobenzenesulfonate": "O=S(C1=CC=CC([N+]([O-])=O)=C1)([O-])=O.C2=CC=CC=[NH+]2"
+"Pyridinium Bromide Perbromide": "BrBr.C1=[NH+]C=CC=C1.[Br-]"
+"Pyridinium chlorochromate": "[O-][Cr](=O)(Cl)=O.C1=CC=CC=[NH+]1"
+"Pyridinium dichromate": "O=[Cr]([O-])(O[Cr](=O)([O-])=O)=O.C1=CC=CC=[NH+]1.C2=CC=CC=[NH+]2"
+"Pyridinium Fluorochromate": "[O-][Cr](=O)(F)=O.C1=CC=CC=[NH+]1"
+"Pyridinium p-Toluenesulfonate": "CC1=CC=C(S(=O)([O-])=O)C=C1.C2=CC=CC=[NH+]2"
+"Pyrimidine-2-sulfonyl Fluoride": "O=S(C1=NC=CC=N1)(F)=O"
+"Quincoridine": "OC[C@H]1C[C@@H]2CC[N@]1C[C@@H]2C=C"
+"Quincorine": "OC[C@@H]1C[C@@H]2CC[N@]1C[C@@H]2C=C"
+"Quinidine": "O[C@H]([C@@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=C(OC)C=C34"
+"Quinidine Sulfate Dihydrate": "O[C@H]([C@@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=C(OC)C=C34.O=S(O)(O)=O.[H]O[H].[H]O[H]"
+"Quinine": "O[C@@H]([C@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=C(OC)C=C34"
+"Quinine Hydrochloride Dihydrate": "O[C@@H]([C@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=C(OC)C=C34.[H]Cl.[H]O[H].[H]O[H]"
+"Quinolinium Dichromate": "O=[Cr]([O-])(O[Cr](=O)([O-])=O)=O.C12=CC=C[NH+]=C1C=CC=C2.C34=CC=C[NH+]=C3C=CC=C4"
+"Quinuclidine": "N12CCC(CC2)CC1"
+"Rhenium": "[Re]"
+"Rhodium": "[Rh]"
+"rhodium trihydroxide": "[Rh+3].[OH-].[OH-].[OH-]"
+"Rhodium(II) Acetate": "CC([O-])=O.CC([O-])=O.[Rh+2]"
+"Rhodium(II) Octanoate": "CCCCCCCC([O-])=O.CCCCCCCC([O-])=O.[Rh+2]"
+"RHODIUM(III) OXIDE HYDRATE": "[H]O[H].[Rh+3].[Rh+3].[O-2].[O-2].[O-2]"
+"Rubidium hydroxide": "[Rb+].[OH-]"
+"Ruthenium": "[Ru]"
+"Ruthenium(III) Chloride": "[Ru+3].[Cl-].[Cl-].[Cl-]"
+"Salcomine [=N,N'-Bis(salicylidene)ethylenediiminocobalt(II)]": "[O-]C(C=CC=C1)=C1/C=N/CC/N=C/C2=CC=CC=C2[O-].[Co+2]"
+"Samarium": "[Sm]"
+"Samarium(II) Iodide": "[Sm+2].[I-].[I-]"
+"Scandium": "[Sc]"
+"Scandium(III) Trifluoromethanesulfonate": "O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Sc+3]"
+"sec-Butyllithium": "[Li]C(C)CC"
+"sec-Butylmagnesium Bromide ": "Br[Mg]C(C)CC"
+"sec-Butylmagnesium chloride": "Cl[Mg]C(C)CC"
+"sec-Butylmagnesium Chloride - Lithium Chloride": "Cl[Mg]C(C)CC.[Li+].[Cl-]"
+"Selenium dioxide": "O=[Se]=O"
+"S-Ethyl Trifluorothioacetate": "O=C(SCC)C(F)(F)F"
+"Silver": "[Ag]"
+"Silver Trifluoromethanesulfonate": "O=S(C(F)(F)F)([O-])=O.[Ag+]"
+"Silver(I) Trifluoromethanethiolate": "[S-]C(F)(F)F.[Ag+]"
+"Silver(II) picolinate": "O=C([O-])C1=NC=CC=C1.O=C([O-])C2=NC=CC=C2.[Ag+2]"
+"Silver(II) Pyridine-2-carboxylate": "O=C(C1=NC=CC=C1)[O-].O=C(C2=NC=CC=C2)[O-].[Ag+2]"
+"Sodium (Trihydroxy)phenylborate": "O[B-](O)(O)C1=CC=CC=C1.[Na+]"
+"Sodium amide": "[Na+].[NH2-]"
+"Sodium ascorbate": "[O-]C([C@H](O1)[C@H](CO)O)=C(O)C1=O.[Na+]"
+"sodium azide": "[N-]=[N+]=[N-].[Na+]"
+"Sodium Bis(2-methoxyethoxy)aluminum Dihydride": "COCCO[Al+]OCCOC.[Na+].[H-].[H-]"
+"Sodium Bis(trimethylsilyl)amide": "C[Si]([N-][Si](C)(C)C)(C)C.[Na+]"
+"Sodium Borohydride": "[Na+].[BH4-]"
+"sodium bromate": "O=Br([O-])=O.[Na+]"
+"sodium bromide": "[Na+].[Br-]"
+"Sodium Bromodifluoroacetate": "O=C([O-])C(F)(Br)F.[Na+]"
+"sodium carbonate": "[O-]C([O-])=O.[Na+].[Na+]"
+"Sodium carbonate decahydrate": "[O-]C([O-])=O.[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[Na+].[Na+]"
+"sodium chloride": "[Na+].[Cl-]"
+"Sodium Chlorodifluoroacetate": "O=C([O-])C(F)(Cl)F.[Na+]"
+"Sodium Cyanoborohydride": "[BH3-]C#N.[Na+]"
+"sodium cycanide": "[C-]#N.[Na+]"
+"sodium D,L lactate": "OC(C)C([O-])=O.[Na+]"
+"Sodium Dichloroisocyanurate": "ClN1C([N-]C(N(C1=O)Cl)=O)=O.[Na+]"
+"Sodium dichloroisocyanurate dihydrate": "O=C1N=C([O-])N(Cl)C(N1Cl)=O.O.O.[Na+]"
+"Sodium dichromate dihydrate": "O=[Cr]([O-])(O[Cr](=O)([O-])=O)=O.[H]O[H].[H]O[H].[Na+].[Na+]"
+"Sodium Diphenylphosphinobenzene-3-sulfonate": "O=S(C1=CC(P(C2=CC=CC=C2)C3=CC=CC=C3)=CC=C1)([O-])=O.[Na+]"
+"Sodium Ethoxide": "CC[O-].[Na+]"
+"sodium fluoride": "[Na+].[F-]"
+"Sodium hydride": "[NaH]"
+"sodium hydrogen difluoride": "[Na+].[H+].[F-].[F-]"
+"Sodium hydrogen periodate": "O=I(=O)([O-])=O.O=I(=O)([O-])=O.[Na+].[H+]"
+"Sodium Hydroxide": "[Na+].[OH-]"
+"Sodium Hypochlorite Pentahydrate": "Cl[O-].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[Na+]"
+"Sodium iodide": "[Na+].[I-]"
+"sodium L-tartrate": "O[C@H]([C@H](C([O-])=O)O)C([O-])=O.[Na+].[Na+]"
+"Sodium Methoxide": "C[O-].[Na+]"
+"Sodium nitrate": "[N+](=O)([O-])[O-].[Na+]"
+"Sodium percarbonate": "O=C(O[O-])[O-].[Na+].[Na+]"
+"sodium perchlorate": "O=Cl(=O)([O-])=O.[Na+]"
+"Sodium permanganate": "O=[Mn](=O)([O-])=O.[Na+]"
+"Sodium peroxide": "[O-][O-].[Na+].[Na+]"
+"sodium persulfate": "[O-]S(=O)(OOS(=O)([O-])=O)=O.[Na+].[Na+]"
+"Sodium phosphomolybdate hydrate": "O=[Mo](OP(O)(O)=O)([O-])=O.[H]O[H].[Na+]"
+"sodium sulfite": "O=S([O-])[O-].[Na+].[Na+]"
+"Sodium Tellurite Pentahydrate": "O=[Te]([O-])[O-].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[Na+].[Na+]"
+"sodium tetraborate": "O[B-]12OBO[B-](OBO2)(O)O1.[Na+].[Na+]"
+"Sodium Tetrachloropalladate(II)": "Cl[Pd-2](Cl)(Cl)Cl.[Na+].[Na+]"
+"Sodium Tetrafluoroborate": "F[B-](F)(F)F.[Na+]"
+"Sodium Triacetoxyborohydride": "O=C(O[BH-](OC(C)=O)OC(C)=O)C.[Na+]"
+"Sodium Trifluoroacetate": "O=C([O-])C(F)(F)F.[Na+]"
+"Sodium Trifluoromethanesulfinate": "O=S(C(F)(F)F)[O-].[Na+]"
+"Sodium trimethylsilanolate": "[O-][Si](C)(C)C.[Na+]"
+"Sodium Tris(1,1,1,3,3,3-hexafluoroisopropoxy)borohydride": "FC(F)(C(C(F)(F)F)O[BH-](OC(C(F)(F)F)C(F)(F)F)OC(C(F)(F)F)C(F)(F)F)F.[Na+]"
+"Sodium tert-Butoxide": "CC(C)([O-])C.[Na+]"
+"Sodium tert-Pentoxide": "CCC(C)([O-])C.[Na+]"
+"Sorbic Acid": "C/C=C/C=C/C(O)=O"
+"Strontium hydroxide": "[Sr+2].[OH-].[OH-]"
+"STRONTIUM HYDROXIDE OCTAHYDRATE": "[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[Sr+2].[OH-].[OH-]"
+"Strontium peroxide": "[O-][O-].[Sr+2]"
+"Succinic Acid": "O=C(O)CCC(O)=O"
+"Sulfanilic Acid": "O=S(O)(C1=CC=C(N)C=C1)=O"
+"sulfolane": "O=S1(CCCC1)=O"
+"Sulfur Trioxide": "O=S(=O)=O"
+"Sulfur Trioxide - Triethylamine Complex": "O=S(=O)=O.CCN(CC)CC"
+"Sulfuric acid": "O=S(O)(O)=O"
+"Sulfuryl chloride": "O=S(Cl)(Cl)=O"
+"Tebbe reagent": "C[Al-]1(C[Ti+2][Cl+]1)C.[cH-]1cccc1.[cH-]1cccc1"
+"Telluric Acid": "O=[Te](O)(O)=O"
+"Tellurium(IV) Oxide": "[Te+4].[O-2].[O-2]"
+"Terbium": "[Tb]"
+"tert-Butyl hydroperoxide": "CC(C)(OO)C"
+"tert-Butyl Hydroperoxide ": "CC(C)(OO)C"
+"tert-Butyldimethylsilane": "C[SiH](C(C)(C)C)C"
+"tert-Butyldimethylsilanol": "O[Si](C)(C(C)(C)C)C"
+"tert-Butyldiphenylsilane": "CC([SiH](C1=CC=CC=C1)C2=CC=CC=C2)(C)C"
+"tert-Butyllithium": "[Li]C(C)(C)C"
+"tert-Butylmagnesium Chloride": "Cl[Mg]C(C)(C)C"
+"tert-Butylmethoxyphenylsilyl Bromide": "CO[Si](C(C)(C)C)(Br)C1=CC=CC=C1"
+"Tetra(decyl)ammonium Bromide": "CCCCCCCCCC[N+](CCCCCCCCCC)(CCCCCCCCCC)CCCCCCCCCC.[Br-]"
+"Tetraallyltin": "C=CC[Sn](CC=C)(CC=C)CC=C"
+"Tetraamylammonium Bromide": "CCCCC[N+](CCCCC)(CCCCC)CCCCC.[Br-]"
+"Tetraamylammonium Chloride": "CCCCC[N+](CCCCC)(CCCCC)CCCCC.[Cl-]"
+"Tetraamylammonium Iodide": "CCCCC[N+](CCCCC)(CCCCC)CCCCC.[I-]"
+"Tetrabromofluorescein": "O=C1OC2(C3=C(OC4=C2C=CC(O)=C4)C=C(O)C=C3)C5=C1C(Br)=C(Br)C(Br)=C5Br"
+"Tetrabutyl Orthosilicate": "CCCCO[Si](OCCCC)(OCCCC)OCCCC"
+"Tetrabutyl Orthotitanate": "CCCCO[Ti](OCCCC)(OCCCC)OCCCC"
+"Tetrabutyl Orthotitanate Tetramer": "[O-]CCCC.[O-]CCCC.[O-]CCCC.[O-]CCCC.[O-]CCCC.[O-]CCCC.[O-]CCCC.[O-]CCCC.[O-]CCCC.[O-]CCCC.[Ti+4].[Ti+4].[O-2].[O-2].[Ti+4].[O-2].[Ti+4]"
+"Tetrabutylammonium (meta)periodate": "CCCC[N+](CCCC)(CCCC)CCCC.O=I(=O)([O-])=O"
+"Tetrabutylammonium Acetate": "CCCC[N+](CCCC)(CCCC)CCCC.CC([O-])=O"
+"Tetrabutylammonium Bifluoride": "CCCC[N+](CCCC)(CCCC)CCCC.[H]F.[F-]"
+"Tetrabutylammonium Borohydride": "CCCC[N+](CCCC)(CCCC)CCCC.[BH4-]"
+"Tetrabutylammonium Bromide": "CCCC[N+](CCCC)(CCCC)CCCC.[Br-]"
+"Tetrabutylammonium Chloride": "CCCC[N+](CCCC)(CCCC)CCCC.[Cl-]"
+"Tetrabutylammonium chlorochromate": "CCCC[N+](CCCC)(CCCC)CCCC.[O-][Cr](=O)(Cl)=O"
+"Tetrabutylammonium Difluorotriphenylstannate": "CCCC[N+](CCCC)(CCCC)CCCC.F[Sn-](C1=CC=CC=C1)(C2=CC=CC=C2)(F)C3=CC=CC=C3"
+"Tetrabutylammonium Dihydrogen Trifluoride": "CCCC[N+](CCCC)(CCCC)CCCC.[H+].[H+].[F-].[F-].[F-]"
+"Tetrabutylammonium ethoxide": "CCCC[N+](CCCC)(CCCC)CCCC.CC[O-]"
+"Tetrabutylammonium Fluoride": "CCCC[N+](CCCC)(CCCC)CCCC.[F-]"
+"Tetrabutylammonium Fluoride Hydrate": "CCCC[N+](CCCC)(CCCC)CCCC.[H]O[H].[F-]"
+"Tetrabutylammonium Hexafluorophosphate": "CCCC[N+](CCCC)(CCCC)CCCC.F[P-](F)(F)(F)(F)F"
+"Tetrabutylammonium Hydrogen Sulfate": "CCCC[N+](CCCC)(CCCC)CCCC.O=S(O)([O-])=O"
+"Tetrabutylammonium hydroxide": "CCCC[N+](CCCC)(CCCC)CCCC.[OH-]"
+"Tetrabutylammonium Iodide": "CCCC[N+](CCCC)(CCCC)CCCC.[I-]"
+"Tetrabutylammonium methoxide": "CCCC[N+](CCCC)(CCCC)CCCC.C[O-]"
+"Tetrabutylammonium Perchlorate": "CCCC[N+](CCCC)(CCCC)CCCC.O=Cl(=O)([O-])=O"
+"Tetrabutylammonium Perrhenate": "CCCC[N+](CCCC)(CCCC)CCCC.O=[Re](=O)([O-])=O"
+"Tetrabutylammonium Tetrafluoroborate": "CCCC[N+](CCCC)(CCCC)CCCC.F[B-](F)(F)F"
+"Tetrabutylammonium Tetraphenylborate": "CCCC[N+](CCCC)(CCCC)CCCC.C1([B-](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1"
+"Tetrabutylammonium Thiocyanate": "CCCC[N+](CCCC)(CCCC)CCCC.[S-]C#N"
+"Tetrabutylammonium Tribromide": "CCCC[N+](CCCC)(CCCC)CCCC.[Br-].[Br-].[Br-]"
+"Tetrabutylammonium Trifluoromethanesulfonate": "CCCC[N+](CCCC)(CCCC)CCCC.O=S(C(F)(F)F)([O-])=O"
+"Tetrabutylammonium Triiodide": "CCCC[N+](CCCC)(CCCC)CCCC.[I-].[I-].[I-]"
+"Tetrabutylgermane": "CCCC[Ge](CCCC)(CCCC)CCCC"
+"Tetrabutylphosphonium Bromide": "CCCC[P+](CCCC)(CCCC)CCCC.[Br-]"
+"Tetrabutylphosphonium Chloride": "CCCC[P+](CCCC)(CCCC)CCCC.[Cl-]"
+"Tetrabutylphosphonium Hexafluorophosphate": "CCCC[P+](CCCC)(CCCC)CCCC.F[P-](F)(F)(F)(F)F"
+"Tetrabutylphosphonium Hydroxide": "CCCC[P+](CCCC)(CCCC)CCCC.[OH-]"
+"Tetrabutylphosphonium malonate": "CCCC[P+](CCCC)(CCCC)CCCC.CCCC[P+](CCCC)(CCCC)CCCC.O=C([O-])CC([O-])=O"
+"Tetrabutylphosphonium Tetrafluoroborate": "CCCC[P+](CCCC)(CCCC)CCCC.F[B-](F)(F)F"
+"Tetrabutyltin": "CCCC[Sn](CCCC)(CCCC)CCCC"
+"Tetracyanoethylene": "N#CC(C#N)=C(C#N)C#N"
+"Tetracyanoethylene ": "N#CC(C#N)=C(C#N)C#N"
+"Tetradecamethylcycloheptasiloxane": "C[Si]1(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O1"
+"Tetradecyltrimethylammonium Bromide": "C[N+](C)(CCCCCCCCCCCCCC)C.[Br-]"
+"Tetraethyl 1,4,8,11-Tetraazacyclotetradecane-1,4,8,11-tetraacetate": "O=C(OCC)CN1CCN(CC(OCC)=O)CCCN(CC(OCC)=O)CCN(CC(OCC)=O)CCC1"
+"Tetraethyl Orthosilicate": "CCO[Si](OCC)(OCC)OCC"
+"Tetraethylammonium Borohydride": "CC[N+](CC)(CC)CC.[BH4-]"
+"Tetraethylammonium Bromide": "CC[N+](CC)(CC)CC.[Br-]"
+"Tetraethylammonium Chloride": "CC[N+](CC)(CC)CC.[Cl-]"
+"Tetraethylammonium Fluoride Tetrahydrofluoride": "CC[N+](CC)(CC)CC.[H]F.[H]F.[H]F.[H]F.[F-]"
+"Tetraethylammonium Fluoride Trihydrofluoride": "CC[N+](CC)(CC)CC.[H]F.[H]F.[H]F.[F-]"
+"Tetraethylammonium Hydroxide": "CC[N+](CC)(CC)CC.[OH-]"
+"Tetraethylammonium Iodide": "CC[N+](CC)(CC)CC.[I-]"
+"Tetraethylammonium Nitrate": "CC[N+](CC)(CC)CC.[O-][N+]([O-])=O"
+"Tetraethylammonium Tetrafluoroborate": "CC[N+](CC)(CC)CC.F[B-](F)(F)F"
+"Tetraethylammonium Trifluoromethanesulfonate": "CC[N+](CC)(CC)CC.O=S(C(F)(F)F)([O-])=O"
+"Tetraethylammonium p-Toluenesulfonate": "CC[N+](CC)(CC)CC.CC1=CC=C(S(=O)([O-])=O)C=C1"
+"Tetraethylgermane": "CC[Ge](CC)(CC)CC"
+"Tetraethylphosphonium Bromide": "CC[P+](CC)(CC)CC.[Br-]"
+"Tetraethylphosphonium Hexafluorophosphate": "CC[P+](CC)(CC)CC.F[P-](F)(F)(F)(F)F"
+"Tetraethylphosphonium Tetrafluoroborate": "CC[P+](CC)(CC)CC.F[B-](F)(F)F"
+"Tetraethylsilane": "CC[Si](CC)(CC)CC"
+"Tetrafluoroboronic acid diethylether complex": "F[B-](F)(F)F.CCOCC.[H+]"
+"Tetraheptylammonium Bromide": "CCCCCCC[N+](CCCCCCC)(CCCCCCC)CCCCCCC.[Br-]"
+"Tetraheptylammonium Iodide": "CCCCCCC[N+](CCCCCCC)(CCCCCCC)CCCCCCC.[I-]"
+"Tetrahexylammonium Bromide": "CCCCCC[N+](CCCCCC)(CCCCCC)CCCCCC.[Br-]"
+"Tetrahexylammonium Hydrogen Sulfate": "CCCCCC[N+](CCCCCC)(CCCCCC)CCCCCC.O=S(O)([O-])=O"
+"Tetrahexylammonium Hydroxide": "CCCCCC[N+](CCCCCC)(CCCCCC)CCCCCC.[OH-]"
+"Tetrahexylammonium Iodide": "CCCCCC[N+](CCCCCC)(CCCCCC)CCCCCC.[I-]"
+"Tetrahydroxydiboron": "OB(O)B(O)O"
+"tetrahydroxytitanium": "O[Ti](O)(O)O"
+"Tetraisobutyl Orthotitanate": "CC(C)CO[Ti](OCC(C)C)(OCC(C)C)OCC(C)C"
+"Tetraisopropyl Orthosilicate": "CC(O[Si](OC(C)C)(OC(C)C)OC(C)C)C"
+"Tetraisopropyl Orthotitanate": "CC(O[Ti](OC(C)C)(OC(C)C)OC(C)C)C"
+"Tetrakis(2,4-pentanedionato)titanium(IV)": "[O-]/C(C)=C\\C(C)=O.[O-]/C(C)=C\\C(C)=O.[O-]CCC.[O-]CCC.[Ti+4]"
+"Tetrakis(acetonitrile)copper(I) Hexafluorophosphate": "CC#N.CC#N.CC#N.CC#N.F[P-](F)(F)(F)(F)F.[Cu+]"
+"Tetrakis(acetonitrile)copper(I) Tetrafluoroborate": "CC#N.CC#N.CC#N.CC#N.F[B-](F)(F)F.[Cu+]"
+"Tetrakis(acetonitrile)palladium(II) Bis(trifluoromethanesulfonate)": "CC#N.CC#N.CC#N.CC#N.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Pd+2]"
+"Tetrakis(decyl)ammonium hydroxide": "CCCCCCCCCC[N+](CCCCCCCCCC)(CCCCCCCCCC)CCCCCCCCCC.[OH-]"
+"Tetrakis(dimethylamino)titanium(IV)": "CN([Ti](N(C)C)(N(C)C)N(C)C)C"
+"Tetrakis(dimethylsilyl)silane": "C[SiH]([Si]([SiH](C)C)([SiH](C)C)[SiH](C)C)C"
+"Tetrakis(dimethylsilyloxy)silane": "C[SiH](O[Si](O[SiH](C)C)(O[SiH](C)C)O[SiH](C)C)C"
+"Tetrakis(hydroxymethyl)phosphonium Chloride": "OC[P+](CO)(CO)CO.[Cl-]"
+"Tetrakis(hydroxymethyl)phosphonium Sulfate ": "OC[P+](CO)(CO)CO.OC[P+](CO)(CO)CO.O=S([O-])([O-])=O"
+"Tetrakis(trimethylsilyl)silane": "C[Si]([Si]([Si](C)(C)C)([Si](C)(C)C)[Si](C)(C)C)(C)C"
+"Tetrakis(triphenylphosphine)palladium(0)": "P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6.P(C7=CC=CC=C7)(C8=CC=CC=C8)C9=CC=CC=C9.P(C%10=CC=CC=C%10)(C%11=CC=CC=C%11)C%12=CC=CC=C%12.[Pd]"
+"Tetrakis[dimethyl(vinyl)silyl] Orthosilicate": "C=C[Si](O[Si](O[Si](C)(C)C=C)(O[Si](C)(C)C=C)O[Si](C)(C)C=C)(C)C"
+"Tetramethylammonium Acetate": "C[N+](C)(C)C.CC([O-])=O"
+"Tetramethylammonium Acetate ": "C[N+](C)(C)C.CC([O-])=O"
+"Tetramethylammonium Borohydride": "C[N+](C)(C)C.[BH4-]"
+"Tetramethylammonium Bromide": "C[N+](C)(C)C.[Br-]"
+"Tetramethylammonium Chloride": "C[N+](C)(C)C.[Cl-]"
+"Tetramethylammonium Dichloroiodate": "C[N+](C)(C)C.Cl[I-]Cl"
+"Tetramethylammonium Fluoride Tetrahydrate": "C[N+](C)(C)C.[H]O[H].[H]O[H].[H]O[H].[H]O[H].[F-]"
+"Tetramethylammonium Hexafluorophosphate": "C[N+](C)(C)C.F[P-](F)(F)(F)(F)F"
+"Tetramethylammonium Hydroxide": "C[N+](C)(C)C.[OH-]"
+"Tetramethylammonium Iodide": "C[N+](C)(C)C.[I-]"
+"Tetramethylammonium Sulfate": "C[N+](C)(C)C.C[N+](C)(C)C.O=S([O-])([O-])=O"
+"Tetramethylammonium Tetrafluoroborate": "C[N+](C)(C)C.F[B-](F)(F)F"
+"Tetramethylammonium Triacetoxyborohydride": "C[N+](C)(C)C.O=C(O[BH-](OC(C)=O)OC(C)=O)C"
+"Tetramethylgermane": "C[Ge](C)(C)C"
+"Tetramethylsilane": "C[Si](C)(C)C"
+"Tetra-n-octylammonium Bromide": "CCCCCCCC[N+](CCCCCCCC)(CCCCCCCC)CCCCCCCC.[Br-]"
+"Tetra-n-octylammonium Iodide": "CCCCCCCC[N+](CCCCCCCC)(CCCCCCCC)CCCCCCCC.[I-]"
+"Tetra-n-octylphosphonium Bromide": "CCCCCCCC[P+](CCCCCCCC)(CCCCCCCC)CCCCCCCC.[Br-]"
+"Tetraoctylammonium hydroxide": "CCCCCCCC[N+](CCCCCCCC)(CCCCCCCC)CCCCCCCC.[OH-]"
+"Tetrapentylammonium hydroxide": "CCCCC[N+](CCCCC)(CCCCC)CCCCC.[OH-]"
+"Tetraphenyl Lead": "C1([Pb](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1"
+"Tetraphenylarsonium Chloride Hydrochloride Hydrate": "[H]O[H].[H]Cl.C1([As+](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1.[Cl-]"
+"Tetraphenylcyclopentadienone": "O=C1C(C2=CC=CC=C2)=C(C3=CC=CC=C3)C(C4=CC=CC=C4)=C1C5=CC=CC=C5"
+"Tetraphenylgermane": "C1([Ge](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1"
+"Tetraphenylphosphonium Bromide": "C1([P+](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1.[Br-]"
+"Tetraphenylphosphonium Chloride": "C1([P+](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1.[Cl-]"
+"Tetraphenylporphyrin": "C1(C2=CC=CC=C2)=C3C=CC(C(C4=CC=CC=C4)=C5C=CC(N5)=C(C6=CC=CC=C6)C(C=C7)=NC7=C(C8=CC=CC=C8)C9=CC=C1N9)=N3"
+"Tetraphenylsilane": "C1([Si](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1"
+"Tetraphenyltin": "C1([Sn](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1"
+"Tetrapropyl Orthosilicate": "CCCO[Si](OCCC)(OCCC)OCCC"
+"Tetrapropylammonium Bromide": "CCC[N+](CCC)(CCC)CCC.[Br-]"
+"Tetrapropylammonium Chloride": "CCC[N+](CCC)(CCC)CCC.[Cl-]"
+"Tetrapropylammonium Hydroxide": "CCC[N+](CCC)(CCC)CCC.[OH-]"
+"Tetrapropylammonium Iodide": "CCC[N+](CCC)(CCC)CCC.[I-]"
+"Tetrapropylammonium Perruthenate": "CCC[N+](CCC)(CCC)CCC.O=[Ru](=O)([O-])=O"
+"Thallium(III) Trifluoroacetate": "O=C([O-])C(F)(F)F.O=C([O-])C(F)(F)F.O=C([O-])C(F)(F)F.[Tl+3]"
+"THF": "C1CCCO1"
+"Thioacetic Acid": "CC(O)=S"
+"Thioglycolic Acid": "SCC(O)=O"
+"Thionyl Chloride": "O=S(Cl)Cl"
+"Thiophosphoryl Chloride": "OP(O)(Cl)=S"
+"Thulium": "[Tm]"
+"Thulium(III) Trifluoromethanesulfonate": "O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Tm+3]"
+"tin hydroxide": "[Sn+4].[OH-].[OH-].[OH-].[OH-]"
+"Tin(II) 2-Ethylhexanoate": "CCCCC(CC)C([O-])=O.CCCCC(CC)C([O-])=O.[Sn+2]"
+"Tin(II) Trifluoromethanesulfonate": "O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Sn+2]"
+"Tin(IV) Chloride": "[Sn+4].[Cl-].[Cl-].[Cl-].[Cl-]"
+"Titanium": "[Ti]"
+"titanium hydroxide": "[Ti+4].[OH-].[OH-].[OH-].[OH-]"
+"Titanium(IV) Chloride": "[Ti+4].[Cl-].[Cl-].[Cl-].[Cl-]"
+"TMS-Imidazole (=N-Trimethylsilylimidazole)": "C[Si](N1C=NC=C1)(C)C"
+"Toluene": "CC1=CC=CC=C1"
+"trans,trans-1,5-Bis(4-fluorophenyl)-1,4-pentadien-3-one": "O=C(/C=C/C1=CC=C(F)C=C1)/C=C/C2=CC=C(F)C=C2"
+"trans,trans-1,5-Bis(4-methoxyphenyl)-1,4-pentadien-3-one": "O=C(/C=C/C1=CC=C(OC)C=C1)/C=C/C2=CC=C(OC)C=C2"
+"trans,trans-1,5-Bis[4-(trifluoromethyl)phenyl]-1,4-pentadien-3-one": "O=C(/C=C/C1=CC=C(C(F)(F)F)C=C1)/C=C/C2=CC=C(C(F)(F)F)C=C2"
+"trans,trans-1,5-Diphenyl-1,4-pentadien-3-one": "O=C(/C=C/C1=CC=CC=C1)/C=C/C2=CC=CC=C2"
+"trans-1,2-Bis(diphenylphosphino)ethylene": "P(/C=C/P(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4"
+"trans-2,6-Diisopropyl-N-(2-pyridylmethylene)aniline": "CC(C1=C(C(C(C)C)=CC=C1)/N=C/C2=NC=CC=C2)C"
+"trans-2-Butene-1,4-bis(triphenylphosphonium Chloride)": "C1([P+](C/C=C/C[P+](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6)=CC=CC=C1.[Cl-].[Cl-]"
+"trans-4-(tert-Butyldiphenylsilyloxy)-L-proline": "O=C(O)[C@H]1NC[C@H](O[Si](C2=CC=CC=C2)(C(C)(C)C)C3=CC=CC=C3)C1"
+"trans-4-Fluoro-L-proline": "O=C(O)[C@H]1NC[C@H](F)C1"
+"Tri(2-furyl)phosphine": "P(C1=CC=CO1)(C2=CC=CO2)C3=CC=CO3"
+"Tri(2-thienyl)phosphine": "P(C1=CC=CS1)(C2=CC=CS2)C3=CC=CS3"
+"Tri(cyclohexa-2,5-dien-1-yl)silane": "[SiH](C1C=CCC=C1)(C2C=CCC=C2)C3C=CCC=C3"
+"Tri(m-tolyl)phosphine": "CC1=CC(P(C2=CC=CC(C)=C2)C3=CC=CC(C)=C3)=CC=C1"
+"Tri(o-tolyl)phosphine": "CC1=CC=CC=C1P(C2=CC=CC=C2C)C3=CC=CC=C3C"
+"Tri(p-tolyl)phosphine": "CC1=CC=C(P(C2=CC=C(C)C=C2)C3=CC=C(C)C=C3)C=C1"
+"Triacetoxyborohydride": "O=C(O[BH-](OC(C)=O)OC(C)=O)C"
+"Triacetoxyethylsilane": "CC[Si](OC(C)=O)(OC(C)=O)OC(C)=O"
+"Triallyl(methyl)silane": "C[Si](CC=C)(CC=C)CC=C"
+"Triallyl(phenyl)silane": "C=CC[Si](CC=C)(CC=C)C1=CC=CC=C1"
+"Tribenzylsilane": "[SiH](CC1=CC=CC=C1)(CC2=CC=CC=C2)CC3=CC=CC=C3"
+"Tribromoacetic Acid": "O=C(O)C(Br)(Br)Br"
+"Tributyl borate": "B(OCCCC)(OCCCC)OCCCC"
+"Tributyl(2-methoxyethyl)phosphonium Bis(trifluoromethanesulfonyl)imide": "CCCC[P+](CCCC)(CCCC)CCOC.FC(F)(S([N-]S(C(F)(F)F)(=O)=O)(=O)=O)F"
+"Tributyl(cyanomethyl)phosphonium Chloride": "N#CC[P+](CCCC)(CCCC)CCCC.[Cl-]"
+"Tributyl(ethyl)phosphonium Diethyl Phosphate": "CC[P+](CCCC)(CCCC)CCCC.O=P(OCC)([O-])OCC"
+"Tributyl(methyl)ammonium Dicyanamide": "[H]C(C([H])([H])C([H])([H])C([H])([H])[H])([H])[N+](C([H])([H])C([H])([H])C([H])([H])C([H])([H])[H])(C([H])([H])[H])C([H])([H])C([H])([H])C([H])([H])C([H])([H])[H].[N-]=C=NC#N"
+"Tributylamine": "CCCCN(CCCC)CCCC"
+"Tributylchlorosilane": "Cl[Si](CCCC)(CCCC)CCCC"
+"Tributyldodecylphosphonium Bromide": "CCCCCCCCCCCC[P+](CCCC)(CCCC)CCCC.[Br-]"
+"Tributylhexadecylphosphonium Bromide": "CCCCCCCCCCCCCCCC[P+](CCCC)(CCCC)CCCC.[Br-]"
+"Tributylmethylammonium Bis(trifluoromethanesulfonyl)imide": "FC(F)(S([N-]S(C(F)(F)F)(=O)=O)(=O)=O)F.C[N+](CCCC)(CCCC)CCCC"
+"Tributylmethylammonium Chloride": "C[N+](CCCC)(CCCC)CCCC.[Cl-]"
+"Tributylmethylphosphonium Bis(trifluoromethanesulfonyl)imide": "C[P+](CCCC)(CCCC)CCCC.FC(F)(S([N-]S(C(F)(F)F)(=O)=O)(=O)=O)F"
+"Tributylmethylphosphonium Iodide": "C[P+](CCCC)(CCCC)CCCC.[I-]"
+"Tributyl-n-octylphosphonium Bromide": "CCCCCCCC[P+](CCCC)(CCCC)CCCC.[Br-]"
+"Tributylphosphine Oxide": "CCCCP(CCCC)(CCCC)=O"
+"Tributylsilane": "CCCC[SiH](CCCC)CCCC"
+"Tributylsulfonium Iodide": "CCCC[S+](CCCC)CCCC.[I-]"
+"Tricarbonyl(cyclooctatetraene)iron": "[C]=O.[C]=O.[C]=O.[Fe].C1=C\\C=C/C=C\\C=C/1"
+"Trichloro(3,3,3-trifluoropropyl)silane": "FC(F)(F)CC[Si](Cl)(Cl)Cl"
+"Trichloro-2-cyanoethylsilane": "N#CCC[Si](Cl)(Cl)Cl"
+"Trichloroacetic Acid": "O=C(O)C(Cl)(Cl)Cl"
+"Trichlorocyclopentylsilane": "Cl[Si](Cl)(Cl)C1CCCC1"
+"Trichloroisocyanuric Acid": "O=C(N(Cl)C(N1Cl)=O)N(Cl)C1=O"
+"Trichloromethanesulfonyl Chloride": "O=S(C(Cl)(Cl)Cl)(Cl)=O"
+"Tricyclohexylphosphine": "P(C1CCCCC1)(C2CCCCC2)C3CCCCC3"
+"Tricyclohexylphosphonium Tetrafluoroborate": "F[B-](F)(F)F.[PH+](C1CCCCC1)(C2CCCCC2)C3CCCCC3"
+"Triethoxy(3-glycidyloxypropyl)silane": "CCO[Si](OCC)(OCC)CCCOCC1CO1"
+"Triethoxy(pentafluorophenyl)silane": "FC1=C(F)C(F)=C(F)C(F)=C1[Si](OCC)(OCC)OCC"
+"Triethoxy(propyl)silane": "CCC[Si](OCC)(OCC)OCC"
+"Triethoxy[2-(7-oxabicyclo[4.1.0]heptan-3-yl)ethyl]silane": "CCO[Si](OCC)(OCC)CCC1CC2OC2CC1"
+"Triethoxy-1H,1H,2H,2H-tridecafluoro-n-octylsilane": "F[SiH2]C(F)(F)CC(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(OCC)(OCC)OCC"
+"Triethoxyethylsilane": "CC[Si](OCC)(OCC)OCC"
+"Triethoxyfluorosilane": "F[Si](OCC)(OCC)OCC"
+"Triethoxymethylsilane": "C[Si](OCC)(OCC)OCC"
+"Triethoxy-n-octylsilane": "CCCCCCCC[Si](OCC)(OCC)OCC"
+"Triethoxyphenylsilane": "CCO[Si](OCC)(OCC)C1=CC=CC=C1"
+"Triethoxyvinylsilane": "C=C[Si](OCC)(OCC)OCC"
+"Triethyl 2-Fluoro-2-phosphonoacetate": "O=C(OCC)C(F)P(OCC)(OCC)=O"
+"Triethyl(trifluoromethyl)silane": "FC([Si](CC)(CC)CC)(F)F"
+"Triethylamine": "CCN(CC)CC"
+"Triethylamine Borane": "CCN(CC)CC.B"
+"Triethylamine Trihydrofluoride": "CCN(CC)CC.[H]F.[H]F.[H]F"
+"Triethylchlorogermane": "Cl[Ge](CC)(CC)CC"
+"Triethylenetetramine": "NCCNCCNCCN"
+"Triethylmethylammonium Chloride": "C[N+](CC)(CC)CC.[Cl-]"
+"Triethylmethylammonium hydroxide": "C[N+](CC)(CC)CC.[OH-]"
+"Triethylphenylammonium Chloride": "CC[N+](CC)(CC)C1=CC=CC=C1.[Cl-]"
+"Triethylsilane": "CC[SiH](CC)CC"
+"Triethylsilanol": "O[Si](CC)(CC)CC"
+"Triethylsilylacetylene": "C#C[Si](CC)(CC)CC"
+"Triethylsulfonium Bis(trifluoromethanesulfonyl)imide": "O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O.CC[S+](CC)CC"
+"Triethylvinylsilane": "C=C[Si](CC)(CC)CC"
+"Trifluoroacetic Acid": "O=C(O)C(F)(F)F"
+"Trifluoroacetic Anhydride": "O=C(OC(C(F)(F)F)=O)C(F)(F)F"
+"Trifluoroacetyl Triflate": "O=S(OC(C(F)(F)F)=O)(C(F)(F)F)=O"
+"Trifluoroacetylacetone": "O=C(CC(C)=O)C(F)(F)F"
+"Trifluoroboronic acid diethyletherate": "FB(F)F.CCOCC"
+"Trifluoromethanesulfonanilide": "O=S(C(F)(F)F)(NC1=CC=CC=C1)=O"
+"Trifluoromethanesulfonic Acid": "O=S(C(F)(F)F)(O)=O"
+"Trifluoromethanesulfonic Anhydride": "O=S(C(F)(F)F)(OS(C(F)(F)F)(=O)=O)=O"
+"Trifluoromethanesulfonyl Chloride": "O=S(C(F)(F)F)(Cl)=O"
+"Trihexyl(tetradecyl)phosphonium Chloride": "CCCCCCCCCCCCCC[P+](CCCCCC)(CCCCCC)CCCCCC.[Cl-]"
+"Trihexyl(tetradecyl)phosphonium Dicyanamide": "CCCCCC[P+](CCCCCC)(CCCCCC)CCCCCCCCCCCCCC.N#C[N-]C#N"
+"Trihexylphosphine": "CCCCCCP(CCCCCC)CCCCCC"
+"Trihexylsilane": "CCCCCC[SiH](CCCCCC)CCCCCC"
+"Triisopropyl[(trimethylsilyl)ethynyl]silane": "C[Si](C#C[Si](C(C)C)(C(C)C)C(C)C)(C)C"
+"Triisopropylsilane": "CC([SiH](C(C)C)C(C)C)C"
+"Triisopropylsilylacetylene": "C#C[Si](C(C)C)(C(C)C)C(C)C"
+"Trimagnesium Dicitrate Nonahydrate": "OC(C([O-])=O)(CC([O-])=O)CC([O-])=O.OC(C([O-])=O)(CC([O-])=O)CC([O-])=O.[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[Mg+2].[Mg+2].[Mg+2]"
+"Trimethoxy(1H,1H,2H,2H-tridecafluoro-n-octyl)silane": "FC(C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)F)(F)CC[Si](OC)(OC)OC"
+"Trimethoxy(2-phenylethyl)silane": "CO[Si](OC)(OC)CCC1=CC=CC=C1"
+"Trimethoxy(3,3,3-trifluoropropyl)silane": "FC(F)(F)CC[Si](OC)(OC)OC"
+"Trimethoxy(4-methoxyphenyl)silane": "COC1=CC=C([Si](OC)(OC)OC)C=C1"
+"Trimethoxy(methyl)silane": "C[Si](OC)(OC)OC"
+"Trimethoxy(phenylethyl)silane": "CO[Si](OC)(OC)CCC1=CC=CC=C1"
+"Trimethoxy(propyl)silane": "CCC[Si](OC)(OC)OC"
+"Trimethoxy[3-(methylamino)propyl]silane": "CNCCC[Si](OC)(OC)OC"
+"Trimethoxy[3-(phenylamino)propyl]silane": "CO[Si](OC)(OC)CCCNC1=CC=CC=C1"
+"Trimethoxy-n-octylsilane": "CCCCCCCC[Si](OC)(OC)OC"
+"Trimethoxyphenylsilane": "CO[Si](OC)(OC)C1=CC=CC=C1"
+"Trimethyl 2,2':6',2''-Terpyridine-4,4',4''-tricarboxylate": "O=C(C1=CC(C2=NC(C3=NC=CC(C(OC)=O)=C3)=CC(C(OC)=O)=C2)=NC=C1)OC"
+"Trimethyl(2-pyridyl)tin": "C[Sn](C)(C)C1=NC=CC=C1"
+"Trimethyl(4-pyridyl)tin": "C[Sn](C)(C)C1=CC=NC=C1"
+"Trimethyl(heptafluoropropyl)silane": "FC([Si](C)(C)C)(F)C(F)(F)C(F)(F)F"
+"Trimethyl(nonafluorobutyl)silane": "FC([Si](C)(C)C)(F)C(F)(F)C(F)(F)C(F)(F)F"
+"Trimethyl(pentafluoroethyl)silane": "FC([Si](C)(C)C)(F)C(F)(F)F"
+"Trimethyl(pentafluorophenyl)silane": "FC1=C(F)C(F)=C(F)C(F)=C1[Si](C)(C)C"
+"Trimethyl(tridecafluorohexyl)silane": "FC([Si](C)(C)C)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)F"
+"Trimethyl[2-[(trimethylsilyl)methyl]benzyl]ammonium Iodide": "C[Si](CC1=CC=CC=C1C[N+](C)(C)C)(C)C.[I-]"
+"Trimethyl[3-(trimethoxysilyl)propyl]ammonium Chloride": "CO[Si](CCC[N+](C)(C)C)(OC)OC.[Cl-]"
+"Trimethylamine Borane": "CN(C)C.B"
+"Trimethylamine N-Oxide": "C[N+](C)([O-])C"
+"Trimethylamine N-Oxide Dihydrate": "C[N+](C)([O-])C.[H]O[H].[H]O[H]"
+"Trimethylchlorogermane": "Cl[Ge](C)(C)C"
+"Trimethylethoxysilane": "CCO[Si](C)(C)C"
+"Trimethylnonylammonium Bromide": "CCCCCCCCC[N+](C)(C)C.[Br-]"
+"Trimethylphenylammonium Bromide": "C[N+](C)(C)C1=CC=CC=C1.[Br-]"
+"Trimethylphenylammonium Chloride": "C[N+](C)(C)C1=CC=CC=C1.[Cl-]"
+"Trimethylphenylammonium Hydroxide": "C[N+](C)(C)C1=CC=CC=C1.[OH-]"
+"Trimethylphenylammonium Tribromide": "C[N+](C)(C)C1=CC=CC=C1.[Br-].[Br-].[Br-]"
+"Trimethylphenylsilane": "C[Si](C)(C)C1=CC=CC=C1"
+"Trimethylphosphine": "CP(C)C"
+"Trimethylpropylammonium Bis(trifluoromethanesulfonyl)imide": "CCC[N+](C)(C)C.O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O"
+"Trimethylpropylammonium Bromide": "CCC[N+](C)(C)C.[Br-]"
+"Trimethylsilyl Acetate": "CC(O[Si](C)(C)C)=O"
+"Trimethylsilyl Difluoro(fluorosulfonyl)acetate": "O=C(O[Si](C)(C)C)C(F)(F)S(=O)(F)=O"
+"Trimethylsilyl Propionate": "CCC(O[Si](C)(C)C)=O"
+"Trimethylsilyl Trifluoroacetate": "O=C(O[Si](C)(C)C)C(F)(F)F"
+"Trimethylsilylacetylene": "C#C[Si](C)(C)C"
+"Trimethylsilylcyclopentadiene": "C[Si](C1=CC=CC1)(C)C"
+"Trimethylsilylketene Ethyl Trimethylsilyl Acetal": "C[Si](/C=C(OCC)/O[Si](C)(C)C)(C)C"
+"Trimethylsilylmethylmagnesium Chloride": "Cl[Mg]C[Si](C)(C)C"
+"Trimethylstearylammonium Bromide": "CCCCCCCCCCCCCCCCCC[N+](C)(C)C.[Br-]"
+"Trimethylsulfonium Iodide": "C[S+](C)C.[I-]"
+"Trimethyltetradecylammonium Chloride": "CCCCCCCCCCCCCC[N+](C)(C)C.[Cl-]"
+"Trimethyltin Chloride": "C[Sn](C)(Cl)C"
+"Tri-n-octylphosphine": "CCCCCCCCP(CCCCCCCC)CCCCCCCC"
+"Tri-n-octylphosphine Oxide": "CCCCCCCCP(CCCCCCCC)(CCCCCCCC)=O"
+"Trioctylmethylammonium Chloride": "C[N+](CCCCCCCC)(CCCCCCCC)CCCCCCCC.[Cl-]"
+"Triphenyl Phosphite": "P(OC1=CC=CC=C1)(OC2=CC=CC=C2)OC3=CC=CC=C3"
+"Triphenylantimony": "[Sb](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"Triphenylantimony Diacetate": "CC(O)=O.CC(O)=O.[Sb](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"Triphenylantimony Dichloride": "Cl[Sb](C1=CC=CC=C1)(C2=CC=CC=C2)(Cl)C3=CC=CC=C3"
+"Triphenylantimony Oxide": "O=[Sb](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"Triphenylarsine": "[As](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"Triphenylchlorogermane": "Cl[Ge](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"Triphenylphosphine": "P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"Triphenylphosphine Borane": "P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.B"
+"Triphenylphosphine Oxide": "O=P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"Triphenylphosphine Selenide": "[Se]=P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"Triphenylsilane": "[SiH](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"Triphenylsilanol": "O[Si](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"Triphenylvinylsilane": "C=C[Si](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"Triphosgene": "ClC(Cl)(OC(OC(Cl)(Cl)Cl)=O)Cl"
+"Tris(1-pyrazolyl)methane": "C(N1N=CC=C1)(N2N=CC=C2)N3N=CC=C3"
+"Tris(2,2'-bipyridyl)ruthenium(II) Chloride Hexahydrate": "[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].C1(C2=NC=CC=C2)=NC=CC=C1.C3(C4=NC=CC=C4)=NC=CC=C3.C5(C6=NC=CC=C6)=NC=CC=C5.[Ru+2].[Cl-].[Cl-]"
+"Tris(2,4-di-tert-butylphenyl) Phosphite": "CC(C1=CC=C(OP(OC2=CC=C(C(C)(C)C)C=C2C(C)(C)C)OC3=CC=C(C(C)(C)C)C=C3C(C)(C)C)C(C(C)(C)C)=C1)(C)C"
+"Tris(2,4-pentanedionato)cobalt(III)": "CC(/C=C(C)\\[O-])=O.[O-]/C(C)=C\\C(C)=O.[O-]/C(C)=C\\C(C)=O.[Co+3]"
+"Tris(2,4-pentanedionato)iron(III)": "[O-]/C(C)=C\\C(C)=O.[O-]/C(C)=C\\C(C)=O.[O-]/C(C)=C\\C(C)=O.[Fe+3]"
+"Tris(2,4-pentanedionato)manganese(III)": "CC(/C=C(C)\\[O-])=O.[O-]/C(C)=C\\C(C)=O.[O-]/C(C)=C\\C(C)=O.[Mn+3]"
+"Tris(2,6-dimethoxyphenyl)phosphine": "COC1=C(P(C2=C(OC)C=CC=C2OC)C3=C(OC)C=CC=C3OC)C(OC)=CC=C1"
+"Tris(2-aminoethyl)amine": "NCCN(CCN)CCN"
+"Tris(2-benzimidazolylmethyl)amine": "N(CC1=NC2=CC=CC=C2N1)(CC3=NC4=CC=CC=C4N3)CC5=NC6=CC=CC=C6N5"
+"Tris(2-carboxyethyl)phosphine Hydrochloride": "O=C(CCP(CCC(O)=O)CCC(O)=O)O.[H]Cl"
+"Tris(2-methoxyphenyl)phosphine": "COC1=CC=CC=C1P(C2=CC=CC=C2OC)C3=CC=CC=C3OC"
+"Tris(2-phenylpyridinato)iridium(III)": "C1(C2=CC=CC=C2)=NC=CC=C1.C3(C4=CC=CC=C4)=NC=CC=C3.C5(C6=CC=CC=C6)=NC=CC=C5.[Ir]"
+"Tris(2-pyridylmethyl)amine": "N(CC1=NC=CC=C1)(CC2=NC=CC=C2)CC3=NC=CC=C3"
+"Tris(3,5-dimethyl-1-pyrazolyl)methane": "CC1=CC(C)=NN1C(N2N=C(C)C=C2C)N3N=C(C)C=C3C"
+"Tris(3-hydroxypropyltriazolylmethyl)amine": "OCCCC(N(C(CCCO)C1=CNN=N1)C(CCCO)C2=CNN=N2)C3=CNN=N3"
+"Tris(4-fluorophenyl)phosphine": "FC1=CC=C(P(C2=CC=C(F)C=C2)C3=CC=C(F)C=C3)C=C1"
+"Tris(4-methoxyphenyl)phosphine": "COC1=CC=C(P(C2=CC=C(OC)C=C2)C3=CC=C(OC)C=C3)C=C1"
+"Tris(dibenzoylmethanato) Iron": "[O-]/C(C1=CC=CC=C1)=C\\C(C2=CC=CC=C2)=O.[O-]/C(C3=CC=CC=C3)=C\\C(C4=CC=CC=C4)=O.[O-]/C(C5=CC=CC=C5)=C\\C(C6=CC=CC=C6)=O.[Fe+3]"
+"Tris(dibenzylideneacetone)dipalladium(0)": "O=C(/C=C/C1=CC=CC=C1)/C=C/C2=CC=CC=C2.O=C(/C=C/C3=CC=CC=C3)/C=C/C4=CC=CC=C4.O=C(/C=C/C5=CC=CC=C5)/C=C/C6=CC=CC=C6.[Pd].[Pd]"
+"Tris(diethylamino)phosphine": "CCN(P(N(CC)CC)N(CC)CC)CC"
+"Tris(hydroxymethyl)aminomethane": "NC(CO)(CO)CO"
+"Tris(pentafluorophenyl)phosphine": "FC1=C(F)C(F)=C(F)C(F)=C1P(C2=C(F)C(F)=C(F)C(F)=C2F)C3=C(F)C(F)=C(F)C(F)=C3F"
+"Tris(trimethylsilyloxy)silane": "C[Si](O[SiH](O[Si](C)(C)C)O[Si](C)(C)C)(C)C"
+"Tris(triphenylphosphine)rhodium(I) Chloride": "P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6.P(C7=CC=CC=C7)(C8=CC=CC=C8)C9=CC=CC=C9.[Rh+].[Cl-]"
+"Tris(triphenylphosphine)ruthenium(II) Dichloride": "P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6.P(C7=CC=CC=C7)(C8=CC=CC=C8)C9=CC=CC=C9.[Ru+2].[Cl-].[Cl-]"
+"Tris[(1-benzyl-1H-1,2,3-triazol-4-yl)methyl]amine": "N(CC1=CN(CC2=CC=CC=C2)N=N1)(CC3=CN(CC4=CC=CC=C4)N=N3)CC5=CN(CC6=CC=CC=C6)N=N5"
+"Tris[2-(dimethylamino)ethyl]amine": "CN(CCN(CCN(C)C)CCN(C)C)C"
+"Tris[3,5-bis(trifluoromethyl)phenyl]phosphine": "FC(C1=CC(C(F)(F)F)=CC(P(C2=CC(C(F)(F)F)=CC(C(F)(F)F)=C2)C3=CC(C(F)(F)F)=CC(C(F)(F)F)=C3)=C1)(F)F"
+"Trisodium Paraperiodate": "O=I([O-])([O-])(O)(O)[O-].[Na+].[Na+].[Na+]"
+"Tri-tert-butyl 1,4,7,10-Tetraazacyclododecane-1,4,7,10-tetraacetate": "O=C(OC(C)(C)C)CN1CCN(CC(OC(C)(C)C)=O)CCN(CC(OC(C)(C)C)=O)CCN(CC([O-])=O)CC1"
+"Tri-tert-butyl 1,4,7,10-Tetraazacyclododecane-1,4,7-triacetate": "O=C(OC(C)(C)C)CN1CCN(CC(OC(C)(C)C)=O)CCN(CC(OC(C)(C)C)=O)CCNCC1"
+"Tri-tert-butylphosphonium Tetrafluoroborate": "CC([PH+](C(C)(C)C)C(C)(C)C)(C)C.F[B-](F)(F)F"
+"Tungsten": "[W]"
+"Urea hydrogen peroxide": "NC(N)=O.OO"
+"Vanadium": "[V]"
+"Vinylmagnesium Bromide": "Br[Mg]C=C"
+"Vinyltrimethoxysilane": "CO[Si](OC)(C=C)OC"
+"Vinyltrimethylsilane": "C[Si](C)(C=C)C"
+"Vinyltris(2-methoxyethoxy)silane": "COCCO[Si](OCCOC)(C=C)OCCOC"
+"water": "[H]O[H]"
+"Ytterbium": "[Yb]"
+"Ytterbium(III) Trifluoromethanesulfonate Hydrate": "O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[H]O[H].[Yb+3]"
+"Yttrium": "[Y]"
+"Zinc Bromide": "[Zn+2].[Br-].[Br-]"
+"Zinc Chloride": "[Zn+2].[Cl-].[Cl-]"
+"Zinc peroxide": "[O-][O-].[Zn+2]"
+"Zinc(II) Bis(trifluoromethanesulfinate) Dihydrate": "O=S(C(F)(F)F)[O-].O=S(C(F)(F)F)[O-].[H]O[H].[H]O[H].[Zn+2]"
+"Zinc(II) Trifluoromethanesulfonate": "O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Zn+2]"
+"zink hydroxide": "[Zn+2].[OH-].[OH-]"
+"zink stannate": "O=[Sn]([O-])[O-].[Zn+2]"
+"Zirconium": "[Zr]"
+"Zirconium hydroxide": "[Zr+4].[OH-].[OH-].[OH-].[OH-]"
+"Zirconocene Chloride Hydride": "[Del][Zr+2][Del].c1cccc1.c2cccc2.[Cl-].[H-]"
+"α-Methyl-L-proline": "O=C(O)[C@@]1(C)NCCC1"
+"β-Isocupreidine": "[H][C@@](C1([H])[H])(C([H])([H])C2([H])[H])[C@@]3(C([H])([H])C([H])([H])[H])O[C@](C4=C(C([H])=C5O[H])C(C([H])=C5[H])=NC([H])=C4[H])([H])[C@]1([H])[N@@]2C3([H])[H]"
+
+"LTA": "CC([O-])=O.CC([O-])=O.CC([O-])=O.CC([O-])=O.[Pb+4]"
+"MA": "O=C(O1)C=CC1=O"
+"Mes": "CC1=[C]C(C)=C(C2=C(C)C=C(C)C=C2C)C(C)=C1"
+"MTPA": "O=C(O)C(C(F)(F)F)(OC)C1=CC=CC=C1"
+"MVK": "O=C(C)C=C"
+"NBA": "CC(NBr)=O"
+"Sia2BH": "O[C@@]1(O[C@H]([C@@H]([C@H](C1)O)NC(C)=O)[C@@H]([C@@H](CO)O)O)CBC[C@]2(O[C@H]([C@@H]([C@H](C2)O)NC(C)=O)[C@@H]([C@@H](CO)O)O)O"
+"Xantphos": "CC1(C)C2=C(OC3=C1C=CC=C3P(C4=CC=CC=C4)C5=CC=CC=C5)C(P(C6=CC=CC=C6)C7=CC=CC=C7)=CC=C2"
+"(-)-DIPT": "O[C@@H]([C@@H](C(OC(C)C)=O)O)C(OC(C)C)=O"
+"(-)-DMMA": "CC1CCC(C(C)C)C(N(C)C)C1"
+"(-)-ephos": "CN(P(C1=CC=CC=C1)C2=CC=CC=C2)C(C)C(C3=CC=CC=C3)OP(C4=CC=CC=C4)C5=CC=CC=C5"
+"(-)-MIB": "CC1(C)[C@@]2(C)CCC1[C@@H](N3CCOCC3)C2O"
+"(-)-norphos": "[C@H]1(P(C2=CC=CC=C2)C3=CC=CC=C3)[C@H](P(C4=CC=CC=C4)C5=CC=CC=C5)C6C=CC1C6"
+"(+)-DAIB": "CC1(C)[C@]2(C)CCC1[C@H](N(C)C)C2O"
+"(+)-DIPT": "O[C@H]([C@H](C(OC(C)C)=O)O)C(OC(C)C)=O"
+"(+)-MIB": "CC1(C)[C@]2(C)CCC1[C@H](N3CCOCC3)C2O"
+"(+)-NMDPP": "CC1CCC(C(C)C)C(P(C2=CC=CC=C2)C3=CC=CC=C3)C1"
+"(+)-Prophos": "C[C@@H](P(C1=CC=CC=C1)C2=CC=CC=C2)CP(C3=CC=CC=C3)C4=CC=CC=C4"
+"(Me2CHMeCH)2BH": "O[C@@]1(O[C@H]([C@@H]([C@H](C1)O)NC(C)=O)[C@@H]([C@@H](CO)O)O)CBC[C@]2(O[C@H]([C@@H]([C@H](C2)O)NC(C)=O)[C@@H]([C@@H](CO)O)O)O"
+"(R)-binap": "C1(C2=C3C=CC=CC3=CC=C2P(C4=CC=CC=C4)C5=CC=CC=C5)=C6C=CC=CC6=CC=C1P(C7=CC=CC=C7)C8=CC=CC=C8"
+"(R)-DMTC": "O=C([C@H]1NCSC1(C)C)O"
+"(R)-Glyphos": "CC1(C)OC[C@H](CP(C2=CC=CC=C2)C3=CC=CC=C3)O1"
+"(R,R)-DIOXOP": "[C@@H]1(CP(C2=CC=CC=C2)C3=CC=CC=C3)OC[C@H](CP(C4=CC=CC=C4)C5=CC=CC=C5)O1"
+"(S)-AB": "CC[C@H](N)CO"
+"[12]aneN4": "N1CCNCCNCCNCC1"
+"[12]aneS4": "S1CCSCCSCCSCC1"
+"[14]1,3-dieneN4": "N1=C/C=N/CCCNCCNCCC/1"
+"[14]aneN4": "N1CCNCCCNCCNCCC1"
+"[18]aneP4O2": "O1CCPCCPCCOCCPCCPCC1"
+"[9]aneN3": "N1CCNCCNCC1"
+"[9]aneS3": "S1CCSCCSCC1"
+"[bpy]": "CCCC[N+]1=CC=CN=C1"
+"[hmim]BF4": "C[N+]1=CN(CCCCCC)C=C1.F[B-](F)(F)F"
+"[hmim]Cl": "C[N+]1=CN(CCCCCC)C=C1.[Cl-]"
+"[hmim]PF6": "C[N+]1=CN(CCCCCC)C=C1.F[P-](F)(F)(F)(F)F"
+"[tmba]": "CCCC[N+](C)(C)C"
+"12-Crown-4": "C1COCCOCCOCCO1"
+"18-crown-6": "O1CCOCCOCCOCCOCCOCC1"
+"2,2\\'-bpy": "C1(C2=NC=CC=C2)=NC=CC=C1"
+"2,3,2-tet": "NCCNCCCNCCN"
+"2,3-NDA": "O=C(C1=C(C(O)=O)C=C2C=CC=CC2=C1)O"
+"2,4\\'-bpy": "C1(C2=CC=NC=C2)=NC=CC=C1"
+"2,6-NDA": "O=C(C1=CC=C2C=C(C(O)=O)C=CC2=C1)O"
+"2-Mepy": "CC1=NC=CC=C1"
+"3,3,3-tet": "NCCCNCCCNCCCN"
+"3-PCA": "O=C(OC(C1=CN=CC=C1)=O)C2=CN=CC=C2"
+"4,4\\'-bpy": "C1(C2=CC=NC=C2)=CC=NC=C1"
+"4-PPNO": "[O-][N+]1=CC=C(C2=CC=CC=C2)C=C1"
+"6-APA": "[H][C@@]1(SC2(C)C)[C@H](N)C(N1[C@H]2C(O)=O)=O"
+"8-HQ": "OC1=C2N=CC=CC2=CC=C1"
+"9-BBN": "C1(B2)CCCC2CCC1"
+"9-BBN-H": "C1(B2)CCCC2CCC1"
+"Abbreviation": "Smiles"
+"ABCNÂ ": "N#CC1(/N=N/C2(C#N)CCCCC2)CCCCC1"
+"ABT": "OCC(N)C(O)CO"
+"acac": "CC(CC(C)=O)=O"
+"Acac": "CC(=O)CC(=O)C"
+"ACC": "O=C(C1(N)CC1)O"
+"ACE-Cl": "O=C(Cl)OC(Cl)C"
+"ACN": "CC#N"
+"ACNÂ ": "N#CC1(/N=N/C2(C#N)CCCCC2)CCCCC1"
+"AcOH": "CC(O)=O"
+"AcV": "O=C([O-])CC=C"
+"ADA": "O=C(C#CC(O)=O)O"
+"ADD": "O=C(N1CCCCC1)/N=N/C(N2CCCCC2)=O"
+"ADDP": "O=C(/N=N/C(N1CCCCC1)=O)N2CCCCC2"
+"ade": "NC1=C2C(N=CN2)=NC=N1"
+"ado": "OC[C@@H]1[C@H]([C@H]([C@H](N2C=NC3=C(N=CN=C32)N)O1)O)O"
+"ADTS": "C[Si](C)(CC=C)C(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"AHF": "F"
+"AHMHA": "CC(C)CC(N)C(O)C(O)=O"
+"AHMOA": "CC(C)CC(N)CC(O)CC(O)=O"
+"AHP": "O=C(O)C(N)CCCC1=CC=C(O)C=C1"
+"aibn": "CC(C/N=N/CC(C)C#N)C#N"
+"AIBN": "CC(/N=N/C(C)(C)C#N)(C)C#N"
+"Ala": "N[C@@H](C)C(O)=O"
+"Amben": "O=C(O)C1=CC=C(CN)C=C1"
+"AMBN": "CCC(/N=N/C(CC)(C)C#N)(C)C#N"
+"AMP": "CC(C)(N)CO"
+"AMPS": "CC(C)(NC(C)=O)CS(=O)(O)=O"
+"Arg": "N[C@@H](CCCNC(N)=N)C(O)=O"
+"Asn": "N[C@@H](CC(N)=O)C(O)=O"
+"Asp": "N[C@@H](CC(N)=O)C(O)=O"
+"ATPB": "O=C(C)C[P+](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.[Br-]"
+"ATPH": "[O-]C1=C(C2=CC=CC=C2)C=CC=C1C3=CC=CC=C3.[O-]C4=C(C5=CC=CC=C5)C=CC=C4C6=CC=CC=C6.[O-]C7=C(C8=CC=CC=C8)C=CC=C7C9=CC=CC=C9.[Al+3]"
+"BAAS": "O=C(NC1=CC=C(C=C1)/C=C/C2=CC=C(NC(C)=O)C=C2)C"
+"BADA": "BrCC(OCC)OCC"
+"BAIB": "IC1=CC=CC(OC(C)=O)=C1OC(C)=O"
+"BARF": "FC(C1=CC(C(F)(F)F)=CC([B-](C2=CC(C(F)(F)F)=CC(C(F)(F)F)=C2)(C3=CC(C(F)(F)F)=CC(C(F)(F)F)=C3)C4=CC(C(F)(F)F)=CC(C(F)(F)F)=C4)=C1)(F)F"
+"BBC": "O=C(OC(C)(C)C)N(Br)Br"
+"BBEDA": "NC(/C(N)=C/C1=CC=CC=C1)=C\\C2=CC=CC=C2"
+"BCNU": "O=C(NCCCl)N(CCCl)N=O"
+"bda": "CC(/C=C/C1=CC=CC=C1)=O"
+"BDCB": "ClC1=C(Cl)C=C2N=C(Br)NC2=C1"
+"BDMAP": "CN(C1=CC=C2C=CC3=C(N(C)C)C=CC4=CC=C1C2=C34)C"
+"bdpp": "CC(P(C1=CC=CC=C1)C2=CC=CC=C2)CC(P(C3=CC=CC=C3)C4=CC=CC=C4)C"
+"benzo-15-crown": "C12=CC=CC=C1OCCOCCOCCOCCO2"
+"BFO": "[O-][N+]1=C2C=CC=CC2=NO1"
+"BHA": "OC1=CC=C(OC)C=C1C(C)(C)C.OC2=CC=C(OC)C(C(C)(C)C)=C2"
+"BHT": "CC(C1=CC(C)=CC(C(C)(C)C)=C1O)(C)C"
+"BIBC": "O=[Cr]([O-])(Br)=O.C12=CC=CC=C1NC=[NH+]2"
+"BIDC": "O=[Cr]([O-])(O[Cr](=O)([O-])=O)=O.C12=CC=CC=C1NC=[NH+]2.C34=CC=CC=C3NC=[NH+]4"
+"BINALH": "[Al+2]OCC.OC1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3O.[Li+].[H-].[H-].[H-]"
+"binap": "C1(C2=C3C=CC=CC3=CC=C2P(C4=CC=CC=C4)C5=CC=CC=C5)=C6C=CC=CC6=CC=C1P(C7=CC=CC=C7)C8=CC=CC=C8"
+"BINAP": "C1(C2=C3C=CC=CC3=CC=C2P(C4=CC=CC=C4)C5=CC=CC=C5)=C6C=CC=CC6=CC=C1P(C7=CC=CC=C7)C8=CC=CC=C8"
+"BMBO": "O=C(C1=COC(CBr)=N1)OC(C)(C)C"
+"BMS": "CSC.B"
+"bn": "CC(N)C(N)C"
+"BNAH": "O=C(N)C1=CN(CC2=CC=CC=C2)C=CC1"
+"BNBTS": "CC1=CC=C(S(=O)(N(Br)CCN(Br)S(C2=CC=C(C)C=C2)(=O)=O)=O)C=C1"
+"BNP": "O=P1([O-])OC2=CC=C3C=CC=CC3=C2C4=C5C=CC=CC5=CC=C4O1"
+"BOP": "CN([P+](N(C)C)(N(C)C)(C1=C(NN=N2)C2=CC=C1)=O)C.F[P-](F)(F)(F)(F)F"
+"BOP-Cl": "O=P(N(N1C(OCC1)=O)N2C(OCC2)=O)(N)Cl"
+"BOP-Cl ": "O=P(N1C(OCC1)=O)(N2C(OCC2)=O)Cl"
+"BOPDC": "O=P(N(N1C(OCC1)=O)N2C(OCC2)=O)(N)Cl"
+"BOPDCÂ ": "O=P(N1C(OCC1)=O)(N2C(OCC2)=O)Cl"
+"BPCC": "[O-][Cr](=O)(Cl)=O.[O-][Cr](=O)(Cl)=O.C1(C2=CC=CC=[NH+]2)=CC=CC=[NH+]1"
+"bpdo": "[O-][N+]1=CC=CC=C1C2=CC=CC=[N+]2[O-]"
+"BPO": "O=C(OOC(C1=CC=CC=C1)=O)C2=CC=CC=C2"
+"bpy": "C1(C2=NC=CC=C2)=NC=CC=C1"
+"BQC": "O=C(C1=CC(C2=NC3=CC=CC=C3C(C([O-])=O)=C2)=NC4=CC=CC=C14)[O-].[K+].[K+]"
+"BSA": "CC(N[Si](C)(C)C)=O[Si](C)(C)C"
+"BSB": "O=C(N[Si](C)(C)C)C1=CC=CC=C1[Si](C)(C)C"
+"BSM": "O=S(N1CCOCC1)C2=CC=CC=C2"
+"BSMBO": "O=C(C1=COC(CS(=O)(C2=CC=CC=C2)=O)=N1)OC(C)(C)C"
+"BSTFA": "FC(F)(F)C(N[Si](C)(C)C)=O[Si](C)(C)C"
+"BTA": "C[N+](C)(CC1=CC=CC=C1)C.[F-]"
+"BTC": "O=C(OC(Cl)(Cl)Cl)OC(Cl)(Cl)Cl"
+"BTEAB": "CC[N+](CC)(CC1=CC=CC=C1)CC.[Br-]"
+"BTEACÂ ": "CC[N+](CC)(CC1=CC=CC=C1)CC.[Cl-]"
+"BTF": "FC(C1=CC=CC=C1)(F)F"
+"BTI": "IC1=CC=CC(OC(C(F)(F)F)=O)=C1OC(C(F)(F)F)=O"
+"BTIÂ ": "IC1=CC=CC(OC(C(F)(F)F)=O)=C1OC(C(F)(F)F)=O"
+"BTIBÂ ": "IC1=CC=CC(OC(C(F)(F)F)=O)=C1OC(C(F)(F)F)=O"
+"BTSC": "O=[Cr](O[Si](C)(C)C)(O[Si](C)(C)C)=O"
+"BTSP": "C[Si](OO[Si](C)(C)C)(C)C"
+"BuLi": "[Li]CCCC"
+"Bum": "[CH2]OC(C)(C)C"
+"Bz": "O=[C]C1=CC=CC=C1"
+"bztz": "C12=CC=CC=C1SC=N2"
+"CA": "N#CC1=C2C=CC=CC2=CC3=CC=CC=C13"
+"CAN": "[O-][N+]([O-])=O.[O-][N+]([O-])=O.[O-][N+]([O-])=O.[O-][N+]([O-])=O.[O-][N+]([O-])=O.[Ce+4].[NH4+]"
+"CDI": "O=C(N1C=CN=C1)N2C=CN=C2"
+"CDMT": "COC1=NC(Cl)=NC(OC)=N1"
+"CDNCB": "O=C(O)C1=CC([N+]([O-])=O)=CC([N+]([O-])=O)=C1Cl"
+"cdt": "C1=C\\CC/C=C\\CC/C=C\\CC/1"
+"CDT": "O=C(N1N=CN=C1)N2N=CN=C2"
+"Chiraphos": "C[C@H](P(C1=CC=CC=C1)C2=CC=CC=C2)[C@@H](P(C3=CC=CC=C3)C4=CC=CC=C4)C"
+"chxn": "NC1C(N)CCCC1"
+"CITIPT": "CC(O[Ti](OC(C)C)(Cl)OC(C)C)C"
+"CMBP": "CCCCP(CCCC)(CCCC)=CC#N"
+"CMF": "O=CC1=CC=C(CCl)O1"
+"CMMP": "CP(C)(C)=CC#N"
+"CMPI": "C[N+]1=CC=CC=C1Cl.[I-]"
+"CN": "N#CC1=C2C=CC=CC2=CC=C1"
+"CO2": "O=C=O"
+"COD": "C1=C\\CC/C=C\\CC/1"
+"cod": "C1=C\\CC/C=C\\CC/1"
+"coe": "C1=C\\CCCCCC/1"
+"coe": "C1=C\\CCCCCC/1"
+"COT": "C1=C\\C=C/C=C\\C=C/1"
+"cot": "C1=C\\C=C/C=C\\C=C/1"
+"Cp": "C1=CC=CC1"
+"Cp*": "CC1=[C]C(C)(C)C(C)=C1C"
+"CPMA": "C[N+](C)=C(Cl)SC1=CC=CC=C1.[Cl-]"
+"cptn": "NC1C(N)CCC1"
+"crypt-211": "N1(CCOCC2)CCOCCOCCN2CCOCC1"
+"crypt-222": "N1(CCOCCOCC2)CCOCCOCCN2CCOCCOCC1"
+"Cs2CO3": "[O-]C([O-])=O.[Cs+].[Cs+]"
+"CSA": "O=C(CC(C(C)1C)CC2)C21CS(=O)(O)=O"
+"CSI": "ClS(=O)(N=C=O)=O"
+"CTAB": "C[N+](C)(CCCCCCCCCCCCCCCC)C.[Br-]"
+"CTAC": "C[N+](C)(CCCCCCCCCCCCCCCC)C.[Cl-]"
+"CTMABC": "C[N+](C)(CCCCCCCCCCCCCCCC)C.O=[Cr]([O-])(Br)=O"
+"CTMS": "C[Si](C)(Cl)C"
+"CTPB": "CCCC[P+](CCCC)(CCCCCCCCCCCCCCCC)CCCC.[Br-]"
+"cyclam": "N1CCNCCCNCCNCCC1"
+"cyclen": "N1CCNCCNCCNCC1"
+"Cys": "N[C@@H](CS)C(O)=O"
+"cyt": "O=C1NC=CC(N)=N1"
+"dabco": "N1(CC2)CCN2CC1"
+"DABCO": "N1(CC2)CCN2CC1"
+"dach": "NC1C(N)CCCC1"
+"DADO": "CC(/C(C)=N/O)=N\\O"
+"DAIB": "IC1=CC=CC(OC(C)=O)=C1OC(C)=O"
+"DAMN": "N#C/C(N)=C(N)\\C#N"
+"DAP": "CCC=[N+]=[N-]"
+"DAST": "CCN(S(F)(F)F)CC"
+"dba": "O=C(/C=C/C1=CC=CC=C1)/C=C/C2=CC=CC=C2"
+"DBA": "BrC1=C2C=CC=CC2=C(Br)C3=CC=CC=C13"
+"DBAD": "O=C(/N=N/C(OC(C)(C)C)=O)OC(C)(C)C"
+"DBAD-H2": "NN(C(OC(C)(C)C)=O)C(OC(C)(C)C)=O"
+"DBB": "BrC1=CC=CC=C1Br"
+"DBBÂ ": "CC(C1=CC=C(C2=CC=C(C(C)(C)C)C=C2)C=C1)(C)C"
+"DBCP": "ClCC(Br)CBr"
+"DBEDA": "C1(/C=N/CC/N=C/C2=CC=CC=C2)=CC=CC=C1"
+"DBMP": "CP(OCCCC)(OCCCC)=O"
+"DBN": "N12CCCN=C1CCC2"
+"DBNE": "OC(C1=CC=CC=C1)C(C)N(CCCC)CCCC"
+"DBPO, BPO": "O=C(OOC(C1=CC=CC=C1)=O)C2=CC=CC=C2"
+"dbpp": "C12=CC=CC(CCCC3=C4C(PC5=CC=CC=C45)=CC=C3)=C1C6=CC=CC=C6P2"
+"DBTDL": "CCCC[Sn+2]CCCC.CCCCCCCCCCCC([O-])=O.CCCCCCCCCCCC([O-])=O"
+"DBTO": "O=S1C2=CC=CC=C2C3=CC=CC=C31"
+"DBU": "N12CCCN=CC1CCCC2"
+"DCA": "N#CC1=C2C=CC=CC2=CC3=CC=CC(C#N)=C13"
+"DCB": "C1(BC2CCCCC2)CCCCC1"
+"DCC": "C1(N=C=NC2CCCCC2)CCCCC1"
+"DCEÂ ": "ClCCCl"
+"DCM": "ClCCl"
+"DCME": "COC(Cl)Cl"
+"DCN": "N#CC1=C2C=CC=CC2=C(C#N)C=C1"
+"DCPE": "P(CCP(C1CCCCC1)C2CCCCC2)(C3CCCCC3)C4CCCCC4"
+"DCU": "O=C(NC1CCCCC1)NC2CCCCC2"
+"DDED": "O=C(C(C(OC)=O)=C(C#N)C#N)OC"
+"DDQ": "O=C(C(C#N)=C1C#N)C(Cl)=C(Cl)C1=O"
+"DDT": "ClC(Cl)(Cl)C(C1=CC=C(Cl)C=C1)C2=CC=C(Cl)C=C2"
+"DEA": "CCN(CC)C1=CC=CC=C1"
+"DEAC": "CC[Al+]CC.[Cl-]"
+"DEAD": "O=C(/N=N/C(OCC)=O)OCC"
+"DEAD-H2": "NN(C(OCC)=O)C(OCC)=O"
+"DEEM": "O=C(OCC)C(C(OCC)=O)=COCC"
+"DEG": "OCCOCCO"
+"DEOM": "O=C(OCC)C(C(OCC)=O)=O"
+"DEPC": "O=P(OCC)(C#N)OCC"
+"depe": "CCP(CCP(CC)CC)CC"
+"DET": "OC(C(C(OCC)=O)O)C(OCC)=O"
+"DETA": "NCCNCCN"
+"DFDA": "CN(C)C(OC)OC"
+"DHAP": "O=C(C)C(OP(O)(O)=O)O"
+"DHP": "C1CC=CCO1"
+"DIAD": "O=C(/N=N/C(OC(C)C)=O)OC(C)C"
+"diars": "C[As](C1=CC=CC=C1[As](C)C)C"
+"DIB": "IC1=CC=CC(OC(C)=O)=C1OC(C)=O"
+"DIBAHÂ ": "CC(C)C[Al+]CC(C)C.[H-]"
+"DIBAL": "CC(C)C[Al+]CC(C)C.[H-]"
+"DIBALÂ ": "CC(C)C[Al+]CC(C)C.[H-]"
+"DIBAL-H": "CC(C)C[Al+]CC(C)C.[H-]"
+"DIBAL-HÂ ": "CC(C)C[Al+]CC(C)C.[H-]"
+"DIBAPyr": "CC(C)C[Al](CC(C)C)N1C=CC=C1"
+"DIC": "CC(N=C=NC(C)C)C"
+"DICÂ ": "CC(N=C=NC(C)C)C"
+"DICIÂ ": "CC(N=C=NC(C)C)C"
+"DIEA": "CC(N(CC)C(C)C)C"
+"dien": "NCCNCCN"
+"Diglyme": "COCCOCCOC"
+"DIM": "C1(CC2=CNC3=C2C=CC=C3)=CNC4=C1C=CC=C4"
+"dimsyl": "[CH2]S(C)=O"
+"diop": "CC1(C)OC(CP(C2=CC=CC=C2)C3=CC=CC=C3)C(CP(C4=CC=CC=C4)C5=CC=CC=C5)O1"
+"DIOZ": "O=C1OC(C2=CC=CC=C2)(C3=CC=CC=C3)C(C(C)C)N1"
+"DIPA": "CC(NC(C)C)C"
+"DIPAM": "Br[Mg]N(C(C)C)C(C)C"
+"dipamp": "COC1=CC=CC=C1P(CCP(C2=CC=CC=C2OC)C3=CC=CC=C3)C4=CC=CC=C4"
+"DIPAT": "CC(O[Al+]OC(C)C)C.O=C([O-])C(F)(F)F"
+"DIPCDI": "CC(N=C=NC(C)C)C"
+"DIPEA": "CCN(C(C)C)C(C)C"
+"diphos (dppe)": "P(CCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4"
+"diphos dppe": "P(CCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4"
+"diphos ": "P(CCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4"
+"dippe": "CC(P(CCP(C(C)C)C(C)C)C(C)C)C"
+"DIPT": "OC(C(C(OC(C)C)=O)O)C(OC(C)C)=O"
+"DLP": "CCCCCCCCCCCC(OOC(CCCCCCCCCCC)=O)=O"
+"DMA": "CC(N(C)C)=O"
+"dma": "CC(N(C)C)=O"
+"DMAÂ ": "CC(N(C)C)=O"
+"DMAc": "CC(N(C)C)=O"
+"DMAc ": "CC(N(C)C)=O"
+"DMAD": "O=C(C#CC(OC)=O)OC"
+"DMAE": "CN(CCO)C"
+"DMAP": "CN(C1=CC=NC=C1)C"
+"Dmb": "[CH2]C1=CC=C(OC)C(OC)=C1"
+"DMBA": "CC1=C(C2=CC=CC=C2C=C3)C3=C(C)C4=CC=CC=C41"
+"DMBD": "C=C(C)C(C)=C"
+"dmbp": "CC1=CC=CC(C2=NC(C)=CC=C2)=N1"
+"DMDÂ ": "CC1(C)OO1"
+"DMDO": "CC1(C)OO1"
+"DMDOÂ ": "CC1(C)OO1"
+"DME": "CC(OC)OC"
+"DMEU": "O=C(N1C)N(CC1)C"
+"DMF": "O=CN(C)C"
+"DMFDMAÂ ": "CN(C)C(OC)OC"
+"DMF-DMAÂ ": "CN(C)C(OC)OC"
+"dmgH": "O/N=C(C)/C(C)=N/O"
+"DMI": "O=C1N(C)CCN1C"
+"Dmips": "CC([Si](C)C)C"
+"DMM": "O=[C]/C(C)=C(C)\\[C]=O"
+"DMN": "COC1=CC=CC2=C(OC)C=CC=C12"
+"DMP": "O=C(O1)C2=CC=CC=C2I1(OC(C)=O)(OC(C)=O)OC(C)=O"
+"dmpe": "CC(P(C)C)P(C)C"
+"DMPEAÂ ": "CC(C1=CC=CC=C1)N(C)C"
+"dmpm": "CP(CP(C)C)C"
+"DMPU": "O=C(N1C)N(CC1C)C"
+"DMS": "CSC"
+"dmso": "O=S(C)C"
+"DMSO": "O=S(C)C"
+"DMSO2": "O=S(C)(C)=O"
+"DMT": "COC1CCC(OC)O1"
+"DMTSF": "CS[S+](C)C.F[B-](F)(F)F"
+"DNB": "O=[N+](C1=CC([N+]([O-])=O)=CC=C1)[O-]"
+"DNBF": "[O-][N+]1=C2C=C([N+]([O-])=O)C=C([N+]([O-])=O)C2=NO1"
+"DNP": "OC1=CC=C([N+]([O-])=O)C=C1[N+]([O-])=O"
+"DNPBA": "O=C(OO)C1=CC=C([N+]([O-])=O)C=C1[N+]([O-])=O"
+"DNPH": "NNC1=CC=C([N+]([O-])=O)C=C1[N+]([O-])=O"
+"DOPO": "CCCCCCCCP(CCCCCCCC)=O"
+"DPAÂ ": "CC(C1=CC=CC=C1)N(C)C"
+"DPC": "O=C(ON1C(C2=CC=CC=C2C1=O)=O)ON3C(C4=CC=CC=C4C3=O)=O"
+"Dpm": "C1([CH]C2=CC=CC=C2)=CC=CC=C1"
+"DPPA": "O=P(C1=CC=CC=C1)(N=[N+]=[N-])C2=CC=CC=C2"
+"dppb": "P(CCCCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4"
+"DPPBz": "O=C([O-])C1=CC=CC=C1P(C2=CC=CC=C2)C3=CC=CC=C3"
+"dppe": "P(CCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4"
+"dppe (diphos)": "P(CCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4"
+"dppe ": "P(CCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4"
+"dppeO": "CCP(C1=CC=CC=C1)(C2=CC=CC=C2)=O"
+"dppf": "C1=CC=C(C=C1)P([C-]2C=CC=C2)C3=CC=CC=C3.C1=CC=C(C=C1)P([C-]2C=CC=C2)C3=CC=CC=C3.[Fe+2]"
+"DPPIO": "CC(C1N=C(C2=CC=CC=C2P(C3=CC=CC=C3)C4=CC=CC=C4)OC1)C"
+"dppm": "C1(P(CP(C2=CC=CC=C2)C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1"
+"dppmO": "CP(C1=CC=CC=C1)(C2=CC=CC=C2)=O"
+"DPPOx": "O=C1OC=CN1P(OC2=CC=CC=C2)(OC3=CC=CC=C3)=O"
+"dppp": "P(CCCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4"
+"dpppO": "CCCP(C1=CC=CC=C1)(C2=CC=CC=C2)=O"
+"DPS": "O=S(C1=CC=CC=C1)(C2=CC=CC=C2)=O"
+"DPTA": "O=C(O)C(C(C(O)=O)OC(C(C)(C)C)=O)OC(C(C)(C)C)=O"
+"DPTC": "S=C(OC1=NC=CC=C1)OC2=NC=CC=C2"
+"DS": "O=S(OCCCCCCCCCCCC)([O-])=O"
+"DSC": "O=C(ON1C(CCC1=O)=O)ON2C(CCC2=O)=O"
+"DTBMP": "CC1=CC(C(C)(C)C)=NC(C(C)(C)C)=C1"
+"DTBP": "CC(C1=CC=CC(C(C)(C)C)=N1)(C)C"
+"DTBPB": "CC(OOC(C)(C)C)(OOC(C)(C)C)CC"
+"dtbpe": "CC(P(CCP(C(C)(C)C)C(C)(C)C)C(C)(C)C)(C)C"
+"DTBPI": "CC(C1=[NH+]C(C(C)(C)C)=CC=C1)(C)C.[I-]"
+"DTMAB": "C[N+](C)(CCCCCCCCCCCC)C.[Br-]"
+"DuPhos": "C12=CC=C3C(POP3)=C1POP2"
+"EACNOx": "O=C(OCC)/C(C#N)=N/O"
+"ebpe": "CC(C1=CC=CC=C1)NCCNC(C2=CC=CC=C2)C"
+"EDA": "O=C(OCC)C=[N+]=[N-]"
+"EDC": ""
+"EDCÂ ": "ClCCCl"
+"EDCI": "CN(CCCN=C=NCC)C"
+"EDCIÂ ": "CCN=C=NCCCN(C)C"
+"EDP": "O=C(C=[N+]=[N-])C(OCC)=O"
+"EDTA": "O=C(CN(CCN(CC(O)=O)CC(O)=O)CC(O)=O)O"
+"EEDQ": "CCOC1N(C(OCC)=O)C2=C(C=CC=C2)C=C1"
+"emim": "C[N+]1=CN(CC)C=C1"
+"EPHP": "CCN1CCCCC1.O=PO"
+"Et2NSF3": "CCN(S(F)(F)F)CC"
+"Et2O": "CCOCC"
+"EtOH": "CCO"
+"ETPB": "CCC12COP(OC2)OC1"
+"F2": "FF"
+"FBA": "F[B-](F)(F)F.[H+]"
+"FC-72": "FC(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)F"
+"FC-75": "FC1(C(F)(F)C(F)(F)C(F)(F)C(F)(F)F)OC(F)(F)C(F)(F)C1(F)F"
+"FDNB": "O=[N+](C1=CC=C(F)C([N+]([O-])=O)=C1)[O-]"
+"FDPP": "O=P(C1=CC=CC=C1)(C2=CC=CC=C2)OC3=C(F)C(F)=C(F)C(F)=C3F"
+"FMS": "FC(C1=CC=C2N=NN(S(=O)(C)=O)C2=C1)(F)F"
+"Fp": "[C-]#[O+].[C-]#[O+].C1=CC(C=C1)[Fe+][C-]=O.C1=CC(C=C1)[Fe+][C-]=O"
+"FS": "ON(S(=O)([O-])=O)S(=O)([O-])=O.[K+].[K+]"
+"GABA": "O=C(O)CCCN"
+"Glc": "O=C[C@@H]([C@H]([C@@H]([C@@H](CO)O)O)O)O"
+"Gln": "N[C@@H](CCC(N)=O)C(O)=O"
+"GLP": "O=C1CC[C@@H](C(O)=O)N1"
+"Glu": "N[C@@H](CCC(N)=O)C(O)=O"
+"Gly": "NCC(O)=O"
+"Glyme": "COCCOC"
+"GSH": "O=C(C(NC(CCC(C(O)=O)N)=O)CS)NCC(O)=O"
+"GSNO": "O=C(C(NC(CCC(C(O)=O)N)=O)CSN=O)NCC(O)=O"
+"gua": "NC(N1)=NC(NC=N2)=C2C1=O"
+"guo": "OC[C@@H]1[C@H]([C@H]([C@H](N2C=NC3=C2N=C(N)NC3=O)O1)O)O"
+"H2": "[H][H]"
+"H2O": "[H]O[H]"
+"H2PO4": "O=P(O)(O)O"
+"H2SO4": "OS(=O)(=O)O"
+"HAP": "O=P([O-])([O-])[O-].O=P([O-])([O-])[O-].O=P([O-])([O-])[O-].[Ca+2].[Ca+2].[Ca+2].[Ca+2].[OH-].[Ca+2]"
+"HASAÂ ": "NOS(O)(=O)=O"
+"HATU": "CN(C)C(N(C)C)=[O+]N1N=NC2=CC=CN=C21.F[P-](F)(F)(F)(F)F"
+"HBGCÂ ": "CCCC[N+](CCCC)(CCCC)/C(N(CCCC)CCCC)=N\\CCCC.[Cl-]"
+"HBGCl ": "CCCC[N+](CCCC)(CCCC)/C(N(CCCC)CCCC)=N\\CCCC.[Cl-]"
+"HBGF": "CCCC[N+](CCCC)(CCCC)/C(N(CCCC)CCCC)=N\\CCCC.[F-]"
+"HBT": "ON1N=NC2=CC=CC=C21"
+"HBTU": "CN(C)C(N(C)C)=[O+]N1N=NC2=CC=CC=C21.F[P-](F)(F)(F)(F)F"
+"HCA": "O=C(C(Cl)(Cl)Cl)C(Cl)(Cl)Cl"
+"HCl": "Cl"
+"HDNIB": "O=S(OI(C1=CC=CC=C1)O)(C2=CC=C([N+]([O-])=O)C=C2[N+]([O-])=O)=O"
+"HEGCÂ ": "CC[N+](CC)(CC)/C(N(CC)CC)=N\\CC.[Cl-]"
+"HEGCl ": "CC[N+](CC)(CC)/C(N(CC)CC)=N\\CC.[Cl-]"
+"HEPES": "O=S(CCN1CCN(CCO)CC1)(O)=O"
+"HexLi": "[Li]CCCCCC"
+"HFA": "O=C(C(F)(F)F)C(F)(F)F"
+"HFAH": "O=C(C(F)(F)F)C(F)(F)F.[H]O[H]"
+"HFIP": "FC(F)(F)C(O)C(F)(F)F"
+"HFP-DA": "FC(F)(F)C(F)C(F)(F)N(CC)CC"
+"HIDA": "ON(CC(O)=O)CC(O)=O"
+"HIDPA": "ON(C(C)C(O)=O)C(C)C(O)=O"
+"His": "N[C@@H](CC1=CNC=N1)C(O)=O"
+"HMDS": "C[Si](C)(C)N(C)[SiH](C)C"
+"HMDSO": "C[Si](C)(C)O[Si](C)(C)C"
+"HMDTS": "C[Si](C)(C)S[Si](C)(C)C"
+"hmpa": "O=P(N(C)C)(N(C)C)N(C)C"
+"HMPA": "O=P(N(C)C)(N(C)C)N(C)C"
+"HMPAÂ ": "O=P(N(C)C)(N(C)C)N(C)C"
+"HMPT": "O=P(N(C)C)(N(C)C)N(C)C"
+"HMPTÂ ": "O=P(N(C)C)(N(C)C)N(C)C"
+"HMTÂ ": "N12CN3CN(C2)CN(C3)C1"
+"hmta": "N12CN3CN(C2)CN(C3)C1"
+"HMTAÂ ": "N12CN3CN(C2)CN(C3)C1"
+"HNIB": "O=S(OI(C1=CC=CC=C1)O)(C2=CC=C([N+]([O-])=O)C=C2)=O"
+"HNO3": "O[N+]([O-])=O"
+"HOAc": "CC(O)=O"
+"HOBt": "ON1N=NC2=CC=CC=C21"
+"HOSAÂ ": "NOS(O)(=O)=O"
+"HOSu ": "O=C(N1O)CCC1=O"
+"HQ": "OC1=CC=C(O)C=C1"
+"HTIB": "O=S(OI(C1=CC=CC=C1)O)(C2=CC=C(C)C=C2)=O"
+"I3C": "OCC1=CNC2=C1C=CC=C2"
+"IAA": "O=C(O)CC1=CNC2=C1C=CC=C2"
+"IBC": "O=[Cr]([O-])(Br)=O.C1=[NH+]C=CN1"
+"IBX": "O=C(C1=CC=CC=C12)OI2(O)=O"
+"ICC": "[O-][Cr](=O)(Cl)=O.C1=[NH+]C=CN1"
+"ICy": "N1(C2CCCCC2)[C]N(C3CCCCC3)C=C1"
+"IDA": "O=C(O)CNCC(O)=O"
+"IDCH": "F[P-](F)(F)(F)(F)F.CC1=NC=CC(C)=C1C.CC2=NC=CC(C)=C2C.[IH2+]"
+"IFC": "[O-][Cr](=O)(F)=O.C1=[NH+]C=CN1"
+"Ile": "N[C@@H]([C@@H](C)CC)C(O)=O"
+"Im": "C1=NC=CN1"
+"IMes": "CC1=CC(C)=CC(C)=C1N2[C]N(C3=C(C)C=C(C)C=C3C)C=C2"
+"IPA": "CC(O)C"
+"Ipc2BH": "CC1(C)C2CC(BC3CC4CC(C3C)C4(C)C)C(C)C1C2"
+"IPCC": "O=C(Cl)OC(C)=C"
+"IPCCÂ ": "O=C(Cl)OC(C)=C"
+"IPCF": "O=C(Cl)OC(C)=C"
+"IPCFÂ ": "O=C(Cl)OC(C)=C"
+"IPr": "CC(C1=C(N2[C]N(C3=C(C(C)C)C=CC=C3C(C)C)C=C2)C(C(C)C)=CC=C1)C"
+"iPrOH": "CC(O)C"
+"i-PrOH": "CC(O)C"
+"isn": "O=C(N)C1=CC=NC=C1"
+"ITMS": "C[Si](C)(I)C"
+"K2CO3": "[O-]C([O-])=O.[K+].[K+]"
+"KAPA": "[NH-]CCCN.[K+]"
+"KBHT": "[O-]C1=C(C(C)(C)C)C=C(C)C=C1C(C)(C)C.[K+]"
+"KDA": "CC([N-]C(C)C)C.[K+]"
+"KDMAN": "O=CC1([N-](C)C)C=CCC2=C1C=CC=C2.[K+]"
+"KHMDS": "C[Si](C)([N-][Si](C)(C)C)C.[K+]"
+"KIPBH": "CC(O[BH-](OC(C)C)OC(C)C)C.[K+]"
+"KMBA": "CCCC[N-]C.[K+]"
+"KOAc": "CC([O-])=O.[K+]"
+"KOAt": "[O-]N1N=NC2=CC=CN=C21.[K+]"
+"KOBT": "[O-]N1N=NC2=CC=CC=C21.[K+]"
+"KOtBu": "CC(C)([O-])C.[K+]"
+"K-Selectride": "CCC([BH-](C(C)CC)C(C)CC)C.[K+]"
+"KS-Selectride": "CCCCC[BH-](CCCCC)CCCCC.[K+]"
+"LAH": "[Al+3].[Li].[H-].[H-].[H-]"
+"LDA": "CC([N-]C(C)C)C.[Li+]"
+"LDBBÂ ": "CC(C1=CC[C-]([C-]2C=CC(C(C)(C)C)=CC2)C=C1)(C)C.[Li+].[Li+]"
+"LDBPA": "[H][Al-](CC(C)C)(CC(C)C)N1CCCCC1.[Li+]"
+"LDMAN": "O=CC1([N-](C)C)C=CCC2=C1C=CC=C2.[Li+]"
+"Leu": "N[C@@H](CC(C)C)C(O)=O"
+"LHMDS": "C[Si](C)(C)[N-][Si](C)(C)C.[Li+]"
+"LiAlH4": "[Al+3].[Li].[H-].[H-].[H-]"
+"LICA": "CC([N-]C1CCCCC1)C.[Li+]"
+"LICAÂ ": "CC([N-]C1CCCCC1)C.[Li+]"
+"LIDBB": "CC(C1=CC[C-]([C-]2C=CC(C(C)(C)C)=CC2)C=C1)(C)C.[Li+].[Li+]"
+"LiDBBÂ ": "CC(C1=CC[C-]([C-]2C=CC(C(C)(C)C)=CC2)C=C1)(C)C.[Li+].[Li+]"
+"LiICAÂ ": "CC([N-]C1CCCCC1)C.[Li+]"
+"LIPCÂ ": "CC([N-]C1CCCCC1)C.[Li+]"
+"LiTMP": "O=CN1CCCCC1.O=CN2CCCCC2.O=CN3CCCCC3.O=CN4CCCCC4.[Li]"
+"LiTMPÂ ": "CC1(C)CCCC(C)(C)[N-]1.[Li+]"
+"L-Selectride": "CCC([BH-](C(C)CC)C(C)CC)C.[Li+]"
+"LS-Selectride": "CCCCC[BH-](CCCCC)CCCCC.[Li+]"
+"LTA": "CC([O-])=O.CC([O-])=O.CC([O-])=O.CC([O-])=O.[Pb+4]"
+"LTBTA": "CC([N-]C(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3)(C)C.[Li+]"
+"LTDHA": "CCCCCCN([Al](N(CCCCCC)CCCCCC)N(CCCCCC)CCCCCC)CCCCCC.[Li+].[H-]"
+"LTMA": "CO[Al](OC)OC.[Li+].[H-]"
+"LTMPÂ ": "CC1(C)CCCC(C)(C)[N-]1.[Li+]"
+"lut": "CC1=CC(C)=NC=C1"
+"Lys": "N[C@@H](CCCCN)C(O)=O"
+"MA": "C=CC(OC)=O"
+"MADP": "[Al+2]C.[O-]C1=CC=CC=C1.[O-]C2=CC=CC=C2"
+"MADPPÂ ": "[Al+2]C.[O-]C1=C(C2=CC=CC=C2)C=CC=C1C3=CC=CC=C3.[O-]C4=C(C5=CC=CC=C5)C=CC=C4C6=CC=CC=C6"
+"MAH": "O=C(O1)C=CC1=O"
+"MAO": "[AlH2]O[AlH]C"
+"MAPHÂ ": "[Al+2]C.[O-]C1=C(C2=CC=CC=C2)C=CC=C1C3=CC=CC=C3.[O-]C4=C(C5=CC=CC=C5)C=CC=C4C6=CC=CC=C6"
+"MBA": "CC(OC1=CC=C(/N=C/C2=CC=C(OC)C=C2)C=C1)=O"
+"MC": "ClCCl"
+"MCF": "O=C(Cl)OC"
+"mCPBA": "O=C(OO)C1=CC=CC(Cl)=C1"
+"MCPBA": "O=C(OO)C1=CC=CC(Cl)=C1"
+"m-CPBA": "O=C(OO)C1=CC=CC(Cl)=C1"
+"MDI": "O=C=NC1=CC=C(CC2=CC=C(N=C=O)C=C2)C=C1"
+"MDO": "C=C1OCCCCO1"
+"MDS": "C[Si](C)(C)N[Si](C)(C)C"
+"Mds": "COC1=CC(C)=CC(C)=C1"
+"MeH4Q": "OC1=NC2=CC=CC=C2C(C)=C1"
+"MEK": "O=C(CC)C"
+"MeLi": "[Li]C"
+"MeOH": "CO"
+"MES": "O=S(CCN1CCOCC1)(O)=O"
+"Met": "N[C@@H](CCSC)C(O)=O"
+"MIBK": "O=C(CC(C)C)C"
+"MICA": "CC([N-]C1CCCCC1)C.CC([N-]C2CCCCC2)C.[Mg+2]"
+"MIM": "CN1C=NC=C1"
+"MMA": "CC(C(OC)=O)=C"
+"MMF": "O=CNC"
+"MMI": "COCC1=CNC2=C1C=CC=C2"
+"MNQ": "O=C(C1=C2C=CC=C1)C(C)=CC2=O"
+"MOPS": "O=S(CCCN1CCOCC1)(O)=O"
+"Moz ": "O=[C]OCC1=CC=C(OC)C=C1"
+"Mpm": "[CH2]C1=CC=C(OC)C=C1"
+"MPPC": "C[NH+]1CCCCC1.[O-][Cr](=O)(Cl)=O"
+"MPPH": "CC(C)(OO)CC1=CC=CC=C1"
+"MSA": "CS(=O)(O)=O"
+"MSH": "ONS(=O)(C(C(C)=CC(C)=C1)=C1C)=O"
+"Msib": "[CH2]C1=CC=C(S(C)=O)C=C1"
+"MSNT": "O=[N+](N1N=NC=C1S(=O)(C(C(C)=CC(C)=C2)=C2C)=O)[O-]"
+"MSTFA": "O=C(N(C)[Si](C)(C)C)C(F)(F)F"
+"Msz": "O=[C]OCC1=CC=C(S(C)=O)C=C1"
+"MTBÂ ": "CC(OC)(C)C"
+"MTBE": "CC(OC)(C)C"
+"MTBEÂ ": "CC(OC)(C)C"
+"MTG": "SCC(OC)=O"
+"MTO": "O=[Re](=O)(C)=O"
+"MTPA": "O=C(O)C(OC)(C1=CC=CC=C1)C(F)(F)F"
+"MTPI": "C[P+](OC1=CC=CC=C1)(OC2=CC=CC=C2)OC3=CC=CC=C3.[I-]"
+"MVK": "O=C(C)C=C"
+"N2": "N#N"
+"Na2CO3": "[O-]C([O-])=O.[Na+].[Na+]"
+"NaOAc": "CC([O-])=O.[Na+]"
+"napy": "C12=CC=CN=C1N=CC=C2"
+"NAS": "O=C(N1OC(C)=O)CCC1=O"
+"NBA": "CC(NBr)=O"
+"nbd": "C12C=CC(C2)C=C1"
+"NBE": "C12C=CC(C2)CC1"
+"NBI": "CC1=CC=[N+](C(C)(C)C)O1"
+"NBP": "O=C1N(CCCC)CCC1"
+"NBS": "O=C(N1Br)CCC1=O"
+"NBSH": "O=S(C1=CC=CC=C1[N+]([O-])=O)(NN)=O"
+"nBuLi": "[Li]CCCC"
+"n-BuLi": "[Li]CCCC"
+"NCA": "CC(N(Cl)C1=CC=CC=C1)=O"
+"NCS": "O=C(N1Cl)CCC1=O"
+"NDA": "CC([N-]C(C)C)C.[Na+]"
+"NDMBA": "O=C(N(C)C(C1)=O)N(C)C1=O"
+"NEM": "CCN1CCOCC1"
+"Neo": "CC(C)(C1=CC=CC=C1)[CH]CC(C)(C)C2=CC=CC=C2"
+"NEP": "CCN1CCCCC1"
+"NH2OH": "NO"
+"NHPI": "O=C(N1O)C2=CC=CC=C2C1=O"
+"NHS": "O=C(N1O)CCC1=O"
+"NHSÂ ": "O=C(N1O)CCC1=O"
+"nia": "O=C(N)C1=CN=CC=C1"
+"NIS": "O=C(N1I)CCC1=O"
+"NISac": "O=C1N(I)S(=O)(C2=C1C=CC=C2)=O"
+"NMM": "O=C(N1C)C=CC1=O"
+"NMO": "[O-][N+]1(C)CCOCC1"
+"nmp": "CN1CCCC1"
+"NMP": "O=C(N1C)C2=CC=CC=C2C1=O"
+"NPM": "O=C(N1C2=CC=CC=C2)C=CC1=O"
+"NPO": "COC1=CC=[N+]([O-])C=C1"
+"NPSP": "O=C(N1[Se]C2=CC=CC=C2)C3=CC=CC=C3C1=O"
+"O2": "O=O"
+"O3": "O=[O+][O-]"
+"OBHA": "NOCC1=CC=CC=C1.[H]Cl"
+"OBT": "CCCCCCCCOC1=CC=C(C=C1)/C=N/C2=CC=C(C)C=C2"
+"OCBN": "N#CC1=CC=CC=C1Cl"
+"OCT": "CC1=CC=CC=C1Cl"
+"OOBA": "O=C(O)C1=CC=C(CCCCCCCC)C=C1"
+"OSu ": "[O]N1C(CCC1=O)=O"
+"PAA": "[O-]/[N+](C1=CC=C(C=C1)OC)=N\\C2=CC=C(C=C2)OC"
+"PABÂ ": "O=C(O)C1=CC=C(N)C=C1"
+"PABAÂ ": "O=C(O)C1=CC=C(N)C=C1"
+"PAL": "C[C@@H](C(O)=O)NC1=CC=CN=C1"
+"PAMP": "P(CCCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4"
+"p-Aom": "[CH2]OC1=CC=C(OC)C=C1"
+"PAP": "[O-]/[N+](C1=CC=C(OCC)C=C1)=N\\C2=CC=C(OCC)C=C2"
+"PBH": "OC(C)(C(C)(C)O)C.B"
+"PBHA": "O=C(N(C1=CC=CC=C1)O)C2=CC=CC=C2"
+"PBQ": "O=C(C=C1)C=CC1=O"
+"PCA": "NC1=CC=C(Cl)C=C1"
+"PCC": "[O-][Cr](=O)(Cl)=O.C1=CC=CC=[NH+]1"
+"PCP": "N1(C2(C3=CC=CC=C3)CCCCC2)CCCCC1"
+"PCPA": "O=C(O)COC1=CC=C(Cl)C=C1"
+"Pd/C": "Pd"
+"PDB": "ClC1=CC=C(Cl)C=C1"
+"PDC": "O=[Cr]([O-])(O[Cr](=O)([O-])=O)=O.C1=CC=CC=[NH+]1.C2=CC=CC=[NH+]2"
+"Pd-C": "Pd"
+"PDS": "C1(SSC2=NC=CC=C2)=NC=CC=C1"
+"PEA": "NC(C1=CC=CC=C1)C"
+"Pel": "CCCCCCCC[C]=O"
+"Pet": "[CH2]CC1=NC=CC=C1"
+"PFA": "CC(C)(C)C(OC=O)=O"
+"PFBMÂ ": "O=C(N)C(F)(F)C(F)(F)C(F)(F)F"
+"PFMÂ ": "O=C(N)C(F)(F)C(F)(F)C(F)(F)F"
+"PH": "C12=CC=CC=C1C=CC3=CC=CC=C23"
+"Phe": "N[C@@H](CC1=CC=CC=C1)C(O)=O"
+"phen": "C12=CC=C3C=CC=NC3=C1N=CC=C2"
+"phen ": "C12=CC=C3C=CC=NC3=C1N=CC=C2"
+"phth ": "C12=CC=C3C=CC=NC3=C1N=CC=C2"
+"PID": "O=C1C(C2=CC=CC=C2)C(C3=C1C=CC=C3)=O"
+"PIDÂ ": "[I+2]C1=CC=CC=C1.CC([O-])=O.CC([O-])=O"
+"PIDAÂ ": "[I+2]C1=CC=CC=C1.CC([O-])=O.CC([O-])=O"
+"PIFA": "IC1=CC=CC(OC(C(F)(F)F)=O)=C1OC(C(F)(F)F)=O"
+"PINO": "O=C(N1[O])C2=CC=CC=C2C1=O"
+"pip": "N1CCCCC1"
+"pmdien": "CN(CCN(C)C)CCN(C)C"
+"PMDS": "C[Si](C)(C)O[SiH](C)C"
+"PMDTA": "CN(CCN(C)C)CCN(C)C"
+"pn": "CC(N)CN"
+"PNAH": "O=C(N)C1=CN(CCC)C=CC1"
+"PNB": "O=C([O-])C1=CC=C([N+]([O-])=O)C=C1"
+"PPA": "O=P(O)(O)O.P1(O2)OOP2OO1"
+"PPI": "C1(C2(C3=CC=CC=C3)NCCN2)=NC=CC=C1"
+"PPSE": "O=P(O[Si](C)(C)C)=O"
+"PPTS": "CC1=CC=C(S(=O)([O-])=O)C=C1.C2=CC=CC=[NH+]2"
+"PPY": "C1(N2CCCC2)=CC=NC=C1"
+"PQQ": "O=C(C(N=C(C(O)=O)C=C1C(O)=O)=C1C2=C3C=C(C(O)=O)N2)C3=O"
+"Pro": "O=C(O)[C@H]1NCCC1"
+"PrOH": "CCC(O)"
+"PRPA": "CCCP(O)(OP(CCC)(O)=O)=O"
+"PSA": "O=[PH2]O"
+"PTAB": "C[N+](C)(C1=CC=CC=C1)C.[Br-].[Br-].[Br-]"
+"PTAD": "O=C(N1C2=CC=CC=C2)N=NC1=O"
+"PTCCl": "S=C(Cl)OC1=CC=CC=C1"
+"ptn": "CC(N)CC(N)C"
+"PTSA": "CC1=CC=C(S(=O)(O)=O)C=C1"
+"Pv ": "CC(C)(C)[C]=O"
+"PVA": "C=CO"
+"Py": "C1=NC=CC=C1"
+"PyBOP": "F[P-](F)(F)(F)(F)F.N1([P+](N2CCCC2)(ON3N=NC4=CC=CC=C43)N5CCCC5)CCCC1"
+"pybox": "C1(C2=NCCO2)=NC(C3=NCCO3)=CC=C1"
+"Pyca": "O=C(C1=NC=CC=C1)[O-]"
+"pyz": "C1=NC=CN=C1"
+"QDC": "O=[Cr]([O-])(O[Cr](=O)([O-])=O)=O.C12=CC=C[NH+]=C1C=CC=C2.C34=CC=C[NH+]=C3C=CC=C4"
+"QNO": "[O-][N+]1=C2C=CC=CC2=CC=C1"
+"QUINAP": "C1(C2=C3C=CC=CC3=CC=C2P(C4=CC=CC=C4)C5=CC=CC=C5)=NC=CC6=C1C=CC=C6"
+"RAMP": "COC[C@@H]1N(N)CCC1"
+"Red-Al": "COCCO[Al+]OCCOC.[Na+].[H-].[H-]"
+"RENORPHOS": "[C@H]1(P(C2=CC=CC=C2)C3=CC=CC=C3)[C@H](P(C4=CC=CC=C4)C5=CC=CC=C5)C6CCC1C6"
+"SAB": "O=C(O[BH-](OC(C)=O)OC(C)=O)C.[Na+]"
+"SAMP": "COC[C@H]1N(N)CCC1"
+"SDS": "O=S(OCCCCCCCCCCCC)([O-])=O.[Na+]"
+"Sec": "N[C@@H](C[SeH])C(O)=O"
+"secBuLi": "[Li]C(C)CC"
+"sec-BuLi": "[Li]C(C)CC"
+"Ser": "N[C@@H](CO)C(O)=O"
+"SMB": "O=C1CC([BH2-]O1)=O.[Na+]"
+"SMP": "COC[C@H]1NCCC1"
+"SPB": "O=B([O-])=O.[Na+]"
+"SPC": "O=C(O[O-])[O-].[Na+].[Na+]"
+"stien": "N/C(C1=CC=CC=C1)=C(N)\\C2=CC=CC=C2"
+"tacn": "N1CCNCCNCC1"
+"TADDOL": "OC(C12CC(C)CCC1C2(C)C)(C34CC(C)CCC3C4(C)C)C5OCOC5C(C67CC(C)CCC6C7(C)C)(C89CC(C)CCC8C9(C)C)O"
+"TAME": "COC(C)(C)CC"
+"tap": "NCC(N)CN"
+"TASF": "CN([S+](N(C)C)N(C)C)C.C[Si-](C)(F)(F)C"
+"TASF ": "CN([S+](N(C)C)N(C)C)C.C[Si-](C)(F)(F)C"
+"TBAB": "CCCC[N+](CCCC)(CCCC)CCCC.[Br-]"
+"TBAC": "CCCC[N+](CCCC)(CCCC)CCCC.[BH3-]C#N"
+"TBACC": "CCCC[N+](CCCC)(CCCC)CCCC.[O-][Cr](=O)(Cl)=O"
+"TBAF": "CCCC[N+](CCCC)(CCCC)CCCC.[F-]"
+"TBAHS": "CCCC[N+](CCCC)(CCCC)CCCC.O=S(O)([O-])=O"
+"TBAI": "CCCC[N+](CCCC)(CCCC)CCCC.[I-]"
+"TBAP": "CCCC[N+](CCCC)(CCCC)CCCC.O=Cl(=O)([O-])=O"
+"TBAT": "CCCC[N+](CCCC)(CCCC)CCCC.F[Si-](C1=CC=CC=C1)(C2=CC=CC=C2)(F)C3=CC=CC=C3"
+"TBATB": "CCCC[N+](CCCC)(CCCC)CCCC.[Br-].[Br-].[Br-]"
+"TBCK": "O=C=C(C(C)(C)C)C#N"
+"TBCO": "O=C1C(Br)=CC(Br)(Br)C=C1Br"
+"TBE": "BrC(Br)(Br)CBr"
+"TBHN": "[O-]N(C(C)(C)C)C(C)(C)C"
+"TBHP": "CC(C)(OO)C"
+"TBHP ": "CC(C)(OO)C"
+"TBME": "COC(C)(C)C"
+"tBMEÂ ": "CC(OC)(C)C"
+"t-BMEÂ ": "CC(OC)(C)C"
+"Tbos": "C[Si](OC(C)(C)C)(Cl)C"
+"TBP": "O=P(OCCCC)(OCCCC)OCCCC"
+"TBST": "S[Si](OC(C)(C)C)(OC(C)(C)C)OC(C)(C)C"
+"TBTH": "CCCC[Sn](CCCC)([H])CCCC"
+"TBTU": "CN(C)C(N(C)C)=[O+]N1N=NC2=CC=CC=C21.F[B-](F)(F)F"
+"tBuLi": "[Li]C(C)(C)C"
+"t-BuLi": "[Li]C(C)(C)C"
+"t-BuOH": "CC(C)(O)C"
+"tBuOK": "CC(C)([O-])C.[K+]"
+"t-BuOK": "CC(C)([O-])C.[K+]"
+"TC": "O=C(C1=CC=CS1)[O-]"
+"TCAA": "O=C(OC(C(Cl)(Cl)Cl)=O)C(Cl)(Cl)Cl"
+"TCB": "ClC1=C(Cl)C=C2N=C(Cl)NC2=C1"
+"tcc-CDT": "C1=C\\C=C\\C=C/CCCCCC/1"
+"TCDD": "ClC1=C(Cl)C=C2C(OC3=CC(Cl)=C(Cl)C=C3O2)=C1"
+"TCDI": "S=C(N1C=NC=C1)N2C=NC=C2"
+"TCE": "ClC(Cl)=C(Cl)Cl"
+"TCEÂ ": "ClC=C(Cl)Cl"
+"TCF": "O=C(Cl)OC(Cl)(Cl)Cl"
+"TCM": "ClC(Cl)Cl"
+"tcne": "N#CC(C#N)=C(C#N)C#N"
+"TCNE": "N#CC(C#N)=C(C#N)C#N"
+"TCNE ": "N#CC(C#N)=C(C#N)C#N"
+"tcnq": "N#CC(C#N)=C1C=CC(C=C1)=C(C#N)C#N"
+"TCNQ": "N#CC(C#N)=C(C=C1)C=CC1=C(C#N)C#N"
+"TCNQ ": "N#CC(C#N)=C(C=C1)C=CC1=C(C#N)C#N"
+"TDMAC": "CCCCCCCCCCCCC[NH2+]C.[Cl-]"
+"TDMPP": "COC1=C(P(C2=C(OC)C=CC=C2OC)C3=C(OC)C=CC=C3OC)C(OC)=CC=C1"
+"TEA": "CCN(CC)CC"
+"TEA ": "CCN(CC)CC"
+"TEAA": "CC[N+](CC)(CC)CC.CC([O-])=O"
+"TEAB": "CC[N+](CC)(CC)CC.[Br-]"
+"TEABH": "CC[N+](CC)(CC)CC.[BH4-]"
+"TEAC": "CC[N+](CC)(CC)CC.[Cl-]"
+"TEAHC": "CC[N+](CC)(CC)CC.OC([O-])=O"
+"TEAOH": "CC[N+](CC)(CC)CC.[OH-]"
+"TEAP": "CC[N+](CC)(CC)CC.O=Cl(=O)([O-])=O"
+"TEBAÂ ": "CC[N+](CC)(CC1=CC=CC=C1)CC.[Cl-]"
+"TEBACÂ ": "CC[N+](CC)(CC1=CC=CC=C1)CC.[Cl-]"
+"TEBACl ": "CC[N+](CC)(CC1=CC=CC=C1)CC.[Cl-]"
+"TEMPO": "CC1(C)CCCC(C)(C)N1[O]"
+"TEOS": "CCO[Si](OCC)(OCC)OCC"
+"TEP": "CCOP(OCC)OCC"
+"terpy": "C1(C2=NC=CC=C2)=NC=CC=C1C3=NC=CC=C3"
+"tertBuli": "[Li]C(C)(C)C"
+"tert-BuLi": "[Li]C(C)(C)C"
+"tert-BuLi,": "[Li]C(C)(C)C"
+"TESOTf": "CC[Si](CC)(CC)OC(C(F)(F)F)=O"
+"tetren": "NCCNCCNCCNCCN"
+"TFA": "O=C(O)C(F)(F)F"
+"TFAA": "O=C(OC(C(F)(F)F)=O)C(F)(F)F"
+"Tfe": "[CH2]C(F)(F)F"
+"TFE": "FC(F)(F)CO"
+"TFFH": "FC(N(C)C)=[N+](C)C.F[P-](F)(F)(F)(F)F"
+"tfp": "P(C1=CC=CO1)(C2=CC=CO2)C3=CC=CO3"
+"TFP": "P(C1=CC=CO1)(C2=CC=CO2)C3=CC=CO3"
+"TFPB": "FC(C1=CC(C(F)(F)F)=CC([B-](C2=CC(C(F)(F)F)=CC(C(F)(F)F)=C2)(C3=CC(C(F)(F)F)=CC(C(F)(F)F)=C3)C4=CC(C(F)(F)F)=CC(C(F)(F)F)=C4)=C1)(F)F"
+"TFTTF": "O=CC1=C(C=O)SC(S1)=C2SC(C=O)=C(C=O)S2"
+"THAB": "CCCCCC[N+](CCCCCC)(CCCCCC)CCCCCC.[Br-]"
+"THAMÂ ": "NC(CO)(CO)CO"
+"THBC": "C12=C(CNCC2)NC3=C1C=CC=C3"
+"ThDP": "CC1=C(CCOP(O)(OP(O)(O)=O)=O)SC=[N+]1CC2=CN=C(C)N=C2N.[Cl-]"
+"thf": "O1CCCC1"
+"THF": "O1CCCC1"
+"thiox": "S1OCCCC1"
+"THP": "C1CCCCO1"
+"THP ": "C1CCCCO1"
+"Thr": "N[C@@H]([C@H](O)C)C(O)=O"
+"tht": "C1CCCS1"
+"THT": "S1CCCC1"
+"thy": "O=C(N1)NC=C(C)C1=O"
+"TIP": "CC([O-])C.CC([O-])C.CC([O-])C.CC([O-])C.[Ti+4]"
+"TMAB": "C[N+](C)(C)C.[Br-]"
+"TMAC": "C[N+](C)(C)C.[Cl-]"
+"TMACC": "C[N+](C)(C)C.[O-][Cr](=O)(Cl)=O"
+"TMAF": "C[N+](C)(C)C.[F-]"
+"TMAH": "C[N+](C)(C)C.[OH-]"
+"TMAM": "C[N+](C)(C)C1=CC=CC=C1.C[O-]"
+"TMANOÂ ": "C[N+](C)([O-])C"
+"TMB": "CC1=CC=CC(C)=C1C"
+"TMCHD": "CN(C)C1C(N(C)C)CCCC1"
+"TMClS": "C[Si](C)(Cl)C"
+"TMEDA": "NC(C)(C)C(C)(C)N"
+"tmeda": "CN(C)CCN(C)C"
+"tmen": "CN(C)CCN(C)C"
+"TMG": "N=C(N(C)C)N(C)C"
+"TMNOÂ ": "C[N+](C)([O-])C"
+"TMOÂ ": "C[N+](C)([O-])C"
+"TMOF": "COC(OC)OC"
+"TMPÂ ": "CC1(C)CCCC(C)(C)N1"
+"TMPDÂ ": "CN(C)CCCN(C)C"
+"TMPDAÂ ": "CN(C)CCCN(C)C"
+"TMPHÂ ": "CC1(C)CCCC(C)(C)N1"
+"TMPO": "CP(C)(C)=O"
+"TMPP": "CCC(CO)(CO)COP(O)O"
+"TMS": "C[Si](C)(C)C"
+"TMSD": "[N-]=[N+]=C[Si](C)(C)C"
+"Tmse ": "[CH2]C[Si](C)(C)C"
+"TMSI": "C[Si](C)(I)C"
+"TMSMA": "C[Si](CN=[N+]=[N-])(C)C"
+"TMSOF": "C[Si](OC1=CC=CO1)(C)C"
+"TMTBG": "CC(N(C)/C(N(C)C)=N/C)(C)C"
+"TMTD": "S=C(SSC(N(C)C)=S)N(C)C"
+"TMTHF": "CC1(C)CCC(C)(C)O1"
+"TMTr": "COC1=CC=C([C](C2=CC=C(OC)C=C2)C3=CC=C(OC)C=C3)C=C1"
+"TMU": "O=C(N(C)C)N(C)C"
+"tn": "NCCCN"
+"TNBS": "O=S(C1=C([N+]([O-])=O)C=C([N+]([O-])=O)C=C1[N+]([O-])=O)(O)=O"
+"TNCB": "[O-][N+]([O-])=O.[O-][N+]([O-])=O.[O-][N+]([O-])=O.O=Br([O-])=O.[Ce+4]"
+"TNN": "O=[N+](C1=CC([N+]([O-])=O)=CC2=CC([N+]([O-])=O)=CC([N+]([O-])=O)=C12)[O-]"
+"TNOHX": "O=NN1CN(N=O)CN(N=O)C1"
+"Tnp": "O=[N+](C1=[C]C([N+]([O-])=O)=CC([N+]([O-])=O)=C1)[O-]"
+"TNT": "CC1=C([N+]([O-])=O)C=C([N+]([O-])=O)C=C1[N+]([O-])=O"
+"TOA": "CCCCCCCCN(CCCCCCCC)CCCCCCCC"
+"TOL": "CC1=CC=CC=C1"
+"TOMAC": "C[N+](CCCCCCCC)(CCCCCCCC)CCCCCCCC.[Cl-]"
+"TosMIC": "[C-]#[N+]CS(=O)(C1=CC=C(C)C=C1)=O"
+"TOSMIC": "O=S(C[N+]#[C-])(C1=CC=C(C)C=C1)=O"
+"TPA": "N(CC1=NC=CC=C1)(CC2=NC=CC=C2)CC3=NC=CC=C3"
+"TPAP": "CCC[N+](CCC)(CCC)CCC.O=[Ru](=O)([O-])=O"
+"TPCD": "O=[Cr]([O-])(O[Cr](=O)([O-])=O)=O.[Co+2].C1=NC=CC=C1.C2=NC=CC=C2.C3=NC=CC=C3.C4=NC=CC=C4"
+"TPDS": "[SiH](C1=CC=CC=C1)(C2=CC=CC=C2)[SiH](C3=CC=CC=C3)C4=CC=CC=C4"
+"TPP": "P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"TPPDS": "O=S(C1=CC=C(P(C2=CC=C(S(=O)([O-])=O)C=C2)C3=CC=CC=C3)C=C1)([O-])=O"
+"TPPO": "O=P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"TPPTS": "O=S(C1=CC(P(C2=CC=CC(S(=O)([O-])=O)=C2)C3=CC=CC(S(=O)([O-])=O)=C3)=CC=C1)([O-])=O.[Na+].[Na+].[Na+]"
+"TPS": "O[Si](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"TPST": "S[Si](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"TPT": "F[B-](F)(F)F.C1(C2=CC=CC=C2)=CC(C3=CC=CC=C3)=CC(C4=CC=CC=C4)=[O+]1"
+"TPTH": "[H][Sn](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"TPTN": "N(CC1=NC=CC=C1)(CC2=NC=CC=C2)CCCN(CC3=NC=CC=C3)CC4=NC=CC=C4"
+"TREAT-HF": "CCN(CC)CC.[H]F.[H]F.[H]F"
+"tren": "NCCN(CCN)CCN"
+"Tri ": "ClC=C(Cl)Cl"
+"trien": "NCCNCCNCCN"
+"triphos": "P(CCP(C1=CC=CC=C1)C2=CC=CC=C2)(CCP(C3=CC=CC=C3)C4=CC=CC=C4)C5=CC=CC=C5"
+"tris": "NC(CO)(CO)CO"
+"TRISÂ ": "NC(CO)(CO)CO"
+"Troc": "O=[C]OC(Cl)(Cl)CCl"
+"Trp": "N[C@@H](CC1=CNC2=C1C=CC=C2)C(O)=O"
+"trpn": "NCCCN(CCCN)CCCN"
+"Tse": "[CH2]CS(=O)(C1=CC=C(C)C=C1)=O"
+"Tse ": "[CH2]C[Si](C)(C)C"
+"TTA": "CC([O-])=O.CC([O-])=O.CC([O-])=O.[Tl+3]"
+"TTBP": "CC(C1=CC(C(C)(C)C)=NC(C(C)(C)C)=N1)(C)C"
+"TTC": "[N+]1(C2=CC=CC=C2)=NC(C3=CC=CC=C3)=NN1C4=CC=CC=C4.[Cl-]"
+"ttc-CDT": "C1=C\\C=C\\C=C/CCCCCC/1"
+"TTF": "C1(SC=CS1)=C2SC=CS2"
+"TTFA": "O=C([O-])C(F)(F)F.O=C([O-])C(F)(F)F.O=C([O-])C(F)(F)F.[Tl+3]"
+"TTFB": "F[B-](F)(F)F.[C+](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3"
+"TTMPP": "COC1=C(P(C2=C(OC)C=C(OC)C=C2OC)C3=C(OC)C=C(OC)C=C3OC)C(OC)=CC(OC)=C1"
+"TTMSS": "C[Si]([SiH]([Si](C)(C)C)[Si](C)(C)C)(C)C"
+"TTN": "[O-][N+]([O-])=O.[O-][N+]([O-])=O.[O-][N+]([O-])=O.[Tl+3]"
+"TTNB": "O=[N+](C1=CC([N+]([O-])=O)=C([N+]([O-])=O)C([N+]([O-])=O)=C1)[O-]"
+"TTT": "N1(CC2=CC=CC=C2)CN(CC3=CC=CC=C3)CN(CC4=CC=CC=C4)C1"
+"ttt-CDT": "C1=C\\C=C\\C=C/CCCCCC/1"
+"tu": "NC(N)=S"
+"Tyr": "N[C@@H](CC1=CC=C(O)C=C1)C(O)=O"
+"tz": "S1C=NC=C1"
+"ura": "O=C(N1)NC=CC1=O"
+"VA": "CC(OC=C)=O"
+"Val": "N[C@@H](C(C)C)C(O)=O"
+"VAL": "N[C@@H](C(C)C)C(O)=O"
+"VAZOÂ ": "N#CC1(/N=N/C2(C#N)CCCCC2)CCCCC1"
+"VB": "CCCC(OC=C)=O"
+"VCH": "C=CC1=CCCCC1"
+"vinfos": "O=P(OC)(O/C(C1=CC(Cl)=C(Cl)C=C1Cl)=C/Cl)OC"
+"VOC-Cl": "O=C(Cl)OC=C"
diff --git a/lib/cdx/parser/arrow.rb b/lib/cdx/parser/arrow.rb
new file mode 100644
index 0000000000..850e51bb52
--- /dev/null
+++ b/lib/cdx/parser/arrow.rb
@@ -0,0 +1,55 @@
+# frozen_string_literal: true
+
+module Cdx
+ module Parser
+ # CDX Geometry parser
+ module Arrow
+ include Base
+
+ # First written/read in: ChemDraw 8.0
+ def do_geometry(cdxr, cid)
+ while (tag = cdxr.read_next).positive?
+ next unless [CDX_PROP_3DHEAD, CDX_PROP_3DTAIL].include?(tag)
+ data = cdxr.data
+ x = read_int32(data) * 1.0e-6
+ y = read_int32(data) * 1.0e-6
+ if tag == CDX_PROP_3DTAIL
+ tail = { x: x, y: y }
+ else
+ head = { x: x, y: y }
+ end
+ end
+ add_to_arrowmap(cid, tail, head)
+ end
+
+ def do_xml_geometry(node, nid)
+ tail = {}
+ head = {}
+
+ node.attributes.each do |key, value|
+ next unless %w[Head3D Tail3D].include?(key)
+ value_arr = value.text.split(' ')
+ x = value_arr[0].to_f
+ y = value_arr[1].to_f
+
+ if key == 'Tail3D'
+ tail = { x: x, y: y }
+ else
+ head = { x: x, y: y }
+ end
+ end
+
+ add_to_arrowmap(nid, tail, head)
+ end
+
+ def add_to_arrowmap(cid, tail, head)
+ center = Geometry::Point.new(
+ (tail[:x] + head[:x]) / 2,
+ (tail[:y] + head[:y]) / 2
+ )
+ @arrowmap[cid] = {} if @arrowmap[cid].nil?
+ @arrowmap[cid].merge!(tail: tail, head: head, center: center)
+ end
+ end
+ end
+end
diff --git a/lib/cdx/parser/atom.rb b/lib/cdx/parser/atom.rb
new file mode 100644
index 0000000000..de5c61fc07
--- /dev/null
+++ b/lib/cdx/parser/atom.rb
@@ -0,0 +1,199 @@
+# frozen_string_literal: true
+
+module Cdx
+ module Parser
+ # CDX Node parser
+ module Atom
+ include Base
+
+ WARNING = 'Chemical Interpretation is not possible for this label'
+
+ def reset_node_params
+ {
+ num_hydrogens: -1,
+ atnum: -1,
+ spin: 0,
+ charge: 0,
+ iso: 0,
+ type: -1,
+ alias_text: '',
+ warning: false,
+ warning_data: '',
+ is_alias: false
+ }
+ end
+
+ def do_node(cdxr, mol, atom, atmap, almap)
+ props = reset_node_params
+ # Read all node properties
+ while (tag = cdxr.read_next).positive?
+ data = cdxr.data
+ case tag
+ # when CDX_PROP_CHEMICALWARNING then is_mol = false
+ when CDX_PROP_NODE_ELEMENT then props[:atnum] = read_int16(data)
+ when CDX_PROP_ATOM_RADICAL then props[:spin] = read_int16(data)
+ when CDX_PROP_ATOM_ISOTOPE then props[:iso] = read_int16(data)
+ when CDX_OBJ_FRAGMENT
+ do_fragment_impl(cdxr, mol, atmap, almap) if props[:is_alias]
+ when CDX_PROP_NODE_TYPE
+ props[:type] = read_int16(data)
+ props[:is_alias] = true if [4, 5, 12].include?(props[:type])
+ when CDX_PROP_2DPOSITION
+ props[:y] = read_int32(data) * 1.0e-6
+ props[:x] = read_int32(data) * 1.0e-6
+ when CDX_PROP_ATOM_CHARGE
+ props[:charge] = cdxr.len == 1 ? data.unpack('c*')[0] : read_int32(data)
+ # when CDX_PROP_ATOM_NUMHYDROGENS then next
+ # when CDX_PROP_ATOM_CIPSTEREOCHEMISTRY then next
+ when CDX_OBJ_TEXT
+ text_props = do_text(cdxr)
+ props[:warning] = text_props[:warning] unless props[:warning]
+ if props[:warning_data].nil? || props[:warning_data].empty?
+ props[:warning_data] = text_props[:warning_data]
+ end
+ props[:alias_text] = text_props[:text]
+ props[:polygon] = text_props[:polygon]
+ when CDX_PROP_CHEMICALWARNING
+ props[:warning] = true
+ props[:warning_data] = data
+ when CDX_PROP_ATOM_NUMHYDROGENS then props[:num_hydrogens] = read_int16(data)
+ else do_unhandled(cdxr, tag)
+ end
+ end
+
+ do_atom(atom, atmap, almap, props)
+ end
+
+ def do_xml_node(node, mol, atom, atmap, almap)
+ props = reset_node_params
+ # Read all node properties
+
+ node.attributes.each do |key, value|
+ case key
+ # when CDX_PROP_CHEMICALWARNING then is_mol = false
+ when 'Element' then props[:atnum] = value.text.to_i
+ when 'Radical' then props[:spin] = value.text.to_i
+ when 'Isotope' then props[:iso] = value.text.to_i
+ when 'NodeType'
+ props[:type] = do_xml_node_type(value.text)
+ props[:is_alias] = true if [4, 5, 12].include?(props[:type])
+ when 'p'
+ value_arr = value.text.split(' ')
+ props[:x] = value_arr[0].to_f
+ props[:y] = value_arr[1].to_f
+ when 'Charge' then props[:charge] = value.text.to_i
+ when 'Warning'
+ props[:warning] = true
+ props[:warning_data] = value.text
+ when 'NumHydrogens' then props[:num_hydrogens] = value.text.to_i
+ end
+ end
+
+ node.xpath('t').each do |t|
+ text_props = do_xml_text(t)
+ props[:warning] = text_props[:warning] unless props[:warning]
+ is_warning = props[:warning_data].nil? || props[:warning_data].empty?
+ props[:warning_data] = text_props[:warning_data] if is_warning
+ props[:alias_text] = text_props[:text]
+ props[:polygon] = text_props[:polygon]
+ end
+
+ if props[:is_alias]
+ node.xpath('fragment').each do |fragment|
+ do_xml_fragment_impl(fragment.element_children, mol, atmap, almap)
+ end
+ end
+
+ do_atom(atom, atmap, almap, props)
+ end
+
+ def do_xml_node_type(type)
+ case type
+ # when 'Unspecified' then 4
+ when 'Nickname' then 4
+ when 'Fragment' then 5
+ when 'GenericNickname' then 7
+ when 'ExternalConnectionPoint' then 12
+ else 0
+ end
+ end
+
+ def do_atom(atom, atmap, almap, props)
+ props[:is_alias] = check_warning(props) unless props[:is_alias]
+ attext = props[:alias_text]
+
+ atom.set_vector(props[:x], props[:y], 0) unless props[:x].nil? || props[:y].nil?
+
+ # Check R-group
+ r_group = attext == 'R' || (attext.size == 2 && attext[1].to_i.positive?)
+
+ # If R-group
+ return atom_alias(atom, attext, props[:polygon]) if props[:type] == 7 && r_group
+ # Treat text as an alias
+ return do_alias(atom, atmap, almap, props) if props[:is_alias]
+
+ set_atom_props(atom, props)
+ end
+
+ def set_atom_props(atom, props)
+ props[:atnum].negative? && props[:atnum] = 6
+ if props[:num_hydrogens] >= 0
+ atom.set_implicit_hcount(props[:num_hydrogens])
+ num_hydrogens(atom)
+ end
+
+ atom.set_atomic_num(props[:atnum])
+ atom.set_formal_charge(props[:charge])
+ atom.set_isotope(props[:iso])
+
+ # New OpenBabel API removed SetSpinMultiplicity
+ # atom.set_spin_multiplicity(props[:spin])
+ end
+
+ def do_alias(atom, atmap, almap, props)
+ atom.set_atomic_num(0)
+ atom_alias(atom, props[:alias_text], props[:polygon])
+
+ nid = atmap.key(atom.get_idx)
+
+ # NodeType: ExternalConnectionPoint - Begin of Bond
+ # NodeType: Nickname or Fragment - End of Bond
+ almap[nid] = { node: atom.get_idx, type: props[:type] }
+
+ # if (!alias_text.empty? && atnum.negative?)
+ # expand_mol(mol, atom, cid, alias_text)
+ # end
+ end
+
+ def atom_alias(atom, text, polygon)
+ data = OpenBabel::OBPairData.new
+ data.set_attribute('Alias')
+ unless polygon.nil?
+ box = polygon.bounding_box
+ text += "$$$$#{box.leftbottom.x}-#{box.leftbottom.y},\
+ #{box.righttop.x}-#{box.righttop.y}"
+ end
+ data.set_value(text)
+ data.set_origin(OpenBabel::UserInput)
+
+ atom.set_atomic_num(0)
+ atom.clone_data(data)
+ end
+
+ def num_hydrogens(atom)
+ label = OpenBabel::OBPairData.new
+ label.set_attribute('NumHydrogens')
+ label.set_value('true')
+ label.set_origin(OpenBabel::UserInput)
+
+ atom.clone_data(label)
+ end
+
+ def check_warning(props)
+ props[:warning] &&
+ props[:warning_data].include?('interpret') &&
+ !props[:alias_text].empty?
+ end
+ end
+ end
+end
diff --git a/lib/cdx/parser/base.rb b/lib/cdx/parser/base.rb
new file mode 100644
index 0000000000..744dac964a
--- /dev/null
+++ b/lib/cdx/parser/base.rb
@@ -0,0 +1,174 @@
+# frozen_string_literal: true
+
+module Cdx
+ module Parser
+ # CDX parser base
+ module Base
+ require 'geometry'
+
+ include Header
+
+ # Don't rely on Reaction Step/Scheme with this ChemDraw version
+ IGNORE_VERSION = '8.0'
+
+ def initialize
+ @tempid = 10_000_000
+ @cdxr = nil
+ @reaction = []
+ # @toplvmap = {}
+ @molmap = {}
+ @arrowmap = {}
+ @graphicmap = {}
+ @ext_arrowmap = {}
+ @reactionmap = {}
+ @textmap = {}
+ @groupmap = {}
+ @temp_removed = {}
+ @obabel = OpenBabel::OBConversion.new
+ end
+
+ def do_unhandled(cdxr, tag)
+ return unless (tag & CDX_TAG_OBJECT).nonzero?
+ loop { break if cdxr.read_next.positive? }
+ end
+
+ def read_int8(buffer)
+ buf = buffer.slice!(0, 1)
+ buf.unpack('c*')[0]
+ end
+
+ def read_int16(buffer)
+ buf = buffer.slice!(0, 2)
+ buf.unpack('s*')[0]
+ end
+
+ def read_int32(buffer)
+ buf = buffer.slice!(0, 4)
+ buf.unpack('l*')[0]
+ end
+
+ def read_uint16(buffer)
+ buf = buffer.slice!(0, 2)
+ buf.unpack('S*')[0]
+ end
+
+ def read_uint32(buffer)
+ buf = buffer.slice!(0, 4)
+ buf.unpack('L*')[0]
+ end
+
+ def lookup_mol(id)
+ @molmap[id] ? @molmap[id] : @textmap[id]
+ end
+
+ def lookup_id(id)
+ return lookup_mol(id) if @groupmap[id].nil?
+ @groupmap[id].each do |gid| lookup_id(gid) end
+ nil
+ end
+
+ def polygon_boundingbox(data)
+ top = read_int32(data) * 1.0e-6
+ left = read_int32(data) * 1.0e-6
+ bottom = read_int32(data) * 1.0e-6
+ right = read_int32(data) * 1.0e-6
+
+ lb = Geometry::Point.new(left, bottom)
+ lt = Geometry::Point.new(left, top)
+ tr = Geometry::Point.new(right, top)
+ tb = Geometry::Point.new(right, bottom)
+
+ Geometry::Polygon.new([lb, lt, tr, tb])
+ end
+
+ def xml_polygon_boundingbox(value)
+ value_arr = value.text.split(' ')
+ left = value_arr[0].to_f
+ top = value_arr[1].to_f
+ right = value_arr[2].to_f
+ bottom = value_arr[3].to_f
+
+ lb = Geometry::Point.new(left, bottom)
+ lt = Geometry::Point.new(left, top)
+ tr = Geometry::Point.new(right, top)
+ tb = Geometry::Point.new(right, bottom)
+
+ Geometry::Polygon.new([lb, lt, tr, tb])
+ end
+
+ def read_boundingbox(data)
+ polygon_boundingbox(data).bounding_box
+ end
+
+ def xml_read_boundingbox(value)
+ xml_polygon_boundingbox(value).bounding_box
+ end
+
+ def arrow_from_box(box)
+ lb = box.leftbottom
+ rt = box.righttop
+ {
+ head: { x: rt.x, y: rt.y },
+ tail: { x: lb.x, y: lb.y }
+ }
+ end
+
+ def vector_from_arrow(arrow)
+ segment_from_arrow(arrow).to_vector
+ end
+
+ def segment_from_arrow(arrow)
+ Geometry::Segment.new_by_arrays(
+ [arrow[:tail][:x], arrow[:tail][:y]],
+ [arrow[:head][:x], arrow[:head][:y]]
+ )
+ end
+
+ def line_from_arrow(arrow)
+ Geometry::Line.new_by_arrays(
+ [arrow[:tail][:x], arrow[:tail][:y]],
+ [arrow[:head][:x], arrow[:head][:y]]
+ )
+ end
+
+ def bb_center(box)
+ x = (box.leftbottom.x + box.righttop.x) / 2
+ y = (box.leftbottom.y + box.righttop.y) / 2
+ Geometry::Point.new(x, y)
+ end
+
+ def molecule_polygon(mol)
+ points = []
+ 1.upto(mol.num_atoms) do |idx|
+ points << point_from_atom(mol.get_atom(idx))
+ end
+ Geometry::Polygon.new(points)
+ end
+
+ def point_from_atom(atom)
+ vector = atom.get_vector
+ Geometry::Point.new(vector.get_x, vector.get_y.abs)
+ end
+
+ def invalid_reaction?(reaction)
+ (
+ reaction[:reactants].nil? || reaction[:reactants].empty? ||
+ reaction[:products].nil? || reaction[:products].empty?
+ )
+ end
+
+ def molecule_output(mol, format)
+ return '' if @obabel.nil?
+ @obabel.set_out_format(format)
+ @obabel.write_string(mol, true)
+ end
+
+ # def obj_box(mbox)
+ # return mbox[:box] unless mbox[:text]
+ # center = mbox[:center]
+ # point = OpenStruct.new(x: center.x, y: center.y)
+ # OpenStruct.new(righttop: point, leftbottom: point)
+ # end
+ end
+ end
+end
diff --git a/lib/cdx/parser/bond.rb b/lib/cdx/parser/bond.rb
new file mode 100644
index 0000000000..714140c461
--- /dev/null
+++ b/lib/cdx/parser/bond.rb
@@ -0,0 +1,158 @@
+# frozen_string_literal: true
+
+module Cdx
+ module Parser
+ # CDX Bond parser
+ module Bond
+ include Base
+ @needs_kekulization = false
+
+ BOND_ORDER = {
+ '0xFFFF': nil,
+ '0x0001': 1,
+ '0x0002': 2,
+ '0x0004': 3,
+ '0x0008': 4,
+ '0x0010': 5,
+ '0x0020': 6,
+ '0x0040': 0.5,
+ '0x0080': 1.5,
+ '0x0100': 2.5,
+ '0x0200': 3.5,
+ '0x0400': 4.5,
+ '0x0800': 5.5
+ }.freeze
+
+ def reset_bond_params
+ @bgn_id = nil
+ @end_id = nil
+ @stereo = 1
+ @order = 1
+ end
+
+ def do_bond(cdxr, mol, atmap, almap)
+ reset_bond_params
+ read_bond(cdxr)
+ @bgn_id, @end_id = @end_id, @bgn_id if [4, 7, 10, 12].include?(@stereo)
+ add_bond(mol, atmap, almap)
+ bond = mol.get_bond(mol.num_bonds - 1)
+ do_bond_stereo(bond) unless bond.nil?
+ end
+
+ def do_xml_bond(node, mol, atmap, almap)
+ reset_bond_params
+
+ node.attributes.each do |key, value|
+ case key
+ when 'B' then @bgn_id = value.text.to_i
+ when 'E' then @end_id = value.text.to_i
+ when 'Order' then @order = value.text.to_i
+ when 'Display' then @stereo = do_xml_bond_display(value.text)
+ end
+ end
+
+ @bgn_id, @end_id = @end_id, @bgn_id if [4, 7, 10, 12].include?(@stereo)
+ add_bond(mol, atmap, almap)
+ bond = mol.get_bond(mol.num_bonds - 1)
+ do_bond_stereo(bond) unless bond.nil?
+ end
+
+ def do_xml_bond_display(val)
+ case val
+ when 'Solid' then 0
+ when 'Dash' then 1
+ when 'Hash' then 2
+ when 'WedgedHashBegin' then 3
+ when 'WedgedHashEnd' then 4
+ when 'Bold' then 5
+ when 'WedgeBegin' then 6
+ when 'WedgeEnd' then 7
+ when 'Wavy' then 8
+ when 'HollowWedgeBegin' then 9
+ when 'HollowWedgeEnd' then 10
+ when 'WavyWedgeBegin' then 11
+ when 'WavyWedgeEnd' then 12
+ when 'Dot' then 13
+ when 'DashDot' then 14
+ end
+ end
+
+ def read_bond(cdxr)
+ while (tag = cdxr.read_next).positive?
+ data = cdxr.data
+ case tag
+ when CDX_PROP_BOND_BEGIN then @bgn_id = read_int32(data)
+ when CDX_PROP_BOND_END then @end_id = read_int32(data)
+ when CDX_PROP_BOND_ORDER then @order = do_bond_order(data)
+ when CDX_PROP_BOND_DISPLAY then @stereo = read_int16(data)
+ end
+ end
+ end
+
+ def do_bond_order(data)
+ # cdx_order = format('0x%04x', read_int16(data).to_s)
+ # BOND_ORDER[cdx_order.to_sym].floor || 1
+
+ cdx_order = read_int16(data)
+
+ case cdx_order
+ when 0x0001 then 1
+ when 0x0002 then 2
+ when 0x0004 then 3
+ when 0x0008 then 4
+ when 0x0080 then 5
+ else 1
+ end
+ end
+
+ def do_bond_stereo(bond)
+ return if @stereo.nil?
+ bond.set_hash if [3, 4].include?(@stereo)
+ bond.set_wedge if [6, 7].include?(@stereo)
+ end
+
+ def add_bond(mol, atmap, almap)
+ bid = ->(x) { atmap[x] || 1 }
+
+ # We will connect bond whose endpoint are either
+ # ExternalConnectionPoint or Nickname (Fragment)
+ if almap.key?(@bgn_id) && almap[@bgn_id][:type] == 12
+ almap[@bgn_id][:to_atom] = bid.call(@end_id)
+ elsif almap.key?(@end_id) && almap[@end_id][:type] == 12
+ almap[@end_id][:to_atom] = bid.call(@bgn_id)
+ elsif almap.key?(@end_id) && [4, 5].include?(almap[@end_id][:type])
+ nid = almap.keys[almap.keys.find_index(@end_id) - 1]
+ ninfo = almap.delete(nid)
+ mol_add_bond(mol, bid.call(@bgn_id), ninfo[:to_atom], @order)
+ almap[:deleted] += [ninfo[:node], almap.delete(@end_id)[:node]]
+ elsif almap.key?(@bgn_id) && [4, 5].include?(almap[@bgn_id][:type])
+ nid = almap.keys[almap.keys.find_index(@bgn_id) - 1]
+ ninfo = almap.delete(nid)
+ mol_add_bond(mol, ninfo[:to_atom], bid.call(@end_id), @order)
+ almap[:deleted] += [ninfo[:node], almap.delete(@bgn_id)[:node]]
+ else
+ # Else add bond normally
+ mol_add_bond(mol, bid.call(@bgn_id), bid.call(@end_id), @order)
+ end
+ end
+
+ def mol_add_bond(mol, bidx, eidx, order)
+ flags = 0
+ if order == 5
+ @needs_kekulization = true
+ flags = OpenBabel::OB_AROMATIC_BOND
+ order = 1
+ end
+
+ mol.add_bond(bidx, eidx, order, flags)
+
+ # return unless flags == OpenBabel::OB_AROMATIC_BOND
+ # bond = mol.get_bond(bidx, eidx)
+ # bond.get_begin_atom.set_aromatic
+ # bond.get_end_atom.set_aromatic
+ # bond.set_aromatic
+ # puts "check aromatic: #{bond.is_aromatic}"
+ end
+ end
+ end
+end
diff --git a/lib/cdx/parser/cdx_parser.rb b/lib/cdx/parser/cdx_parser.rb
new file mode 100644
index 0000000000..44b2124043
--- /dev/null
+++ b/lib/cdx/parser/cdx_parser.rb
@@ -0,0 +1,70 @@
+# frozen_string_literal: true
+
+module Cdx
+ # Main CDX Parser module
+ module Parser
+ # EQUIL_ARROW = 1
+
+ # Class which traverse the tree in CDX binary files
+ class CDXParser
+ include Fragment
+ include ReactionStep
+ include Text
+ include Arrow
+ include Graphic
+ include Refine
+
+ attr_reader :arrowmap, :reaction, :textmap, :molmap, :groupmap,
+ :reactionmap, :toplvmap, :graphicmap
+
+ def read(file, is_path = true)
+ initialize
+
+ @cdxr = Reader.new(file, is_path)
+ return false unless @cdxr.valid
+
+ read_header(@cdxr)
+
+ until @cdxr.end?
+ p = top_level_parse(@cdxr, 0)
+ return false unless p
+ end
+
+ refine_data
+ end
+
+ private
+
+ def read_header(cdxr)
+ tag = cdxr.read_next until tag == CDX_PROP_CREATIONPROGRAM
+ version = cdxr.data.split(' ').last
+ @is_ignore = Gem::Version.new(version) < Gem::Version.new(IGNORE_VERSION)
+ end
+
+ # rubocop:disable Metrics/CyclomaticComplexity
+ def top_level_parse(cdxr, cgroup)
+ while (tag = cdxr.read_next(true)).positive?
+ cid = cdxr.current_id
+
+ case tag
+ when CDX_OBJ_GROUP then do_group(cdxr, cid, cgroup)
+ when CDX_OBJ_FRAGMENT then do_fragment(cdxr, cid, cgroup)
+ when CDX_OBJ_REACTIONSTEP then do_reaction(cdxr, cid)
+ when CDX_OBJ_TEXT then do_text(cdxr, cid)
+ when CDX_OBJ_GEOMETRY then do_geometry(cdxr, cid)
+ when CDX_OBJ_GRAPHIC then do_graphic(cdxr, cid)
+ end
+
+ end
+ true
+ end
+ # rubocop:enable Metrics/CyclomaticComplexity
+
+ def do_group(cdxr, cid, cgroup)
+ @groupmap[cgroup].push(id: cid) if cgroup.positive?
+ @groupmap[cid] = []
+ top_level_parse(cdxr, cid)
+ end
+ end
+ end
+end
diff --git a/lib/cdx/parser/cdxml_parser.rb b/lib/cdx/parser/cdxml_parser.rb
new file mode 100644
index 0000000000..63c86b785b
--- /dev/null
+++ b/lib/cdx/parser/cdxml_parser.rb
@@ -0,0 +1,68 @@
+# frozen_string_literal: true
+
+module Cdx
+ # Main CDX Parser module
+ module Parser
+ # EQUIL_ARROW = 1
+
+ # Read and Parse CDXML
+ class CdxmlParser
+ include Fragment
+ include ReactionStep
+ include Text
+ include Arrow
+ include Graphic
+ include Refine
+
+ CDXML_DOCTYPE = 'http://www.cambridgesoft.com/xml/cdxml.dtd'
+
+ attr_reader :arrowmap, :reaction, :textmap, :molmap, :groupmap,
+ :reactionmap, :toplvmap, :graphicmap
+
+ def read(file, is_path = true)
+ initialize
+
+ fs = is_path ? File.open(file) : file
+ cdxml = Nokogiri::XML(fs)
+ return false if cdxml.internal_subset.system_id != CDXML_DOCTYPE
+
+ read_header(cdxml)
+
+ cdxml.xpath('//page').each do |page|
+ top_level_parse(page, 0)
+
+ refine_data
+ end
+ end
+
+ private
+
+ def read_header(cdxml)
+ version = cdxml.xpath('//CDXML/@CreationProgram').text.split(' ').last
+ @is_ignore = Gem::Version.new(version) < Gem::Version.new(IGNORE_VERSION)
+ end
+
+ def top_level_parse(nodes, cgroup)
+ nodes.element_children.each do |node|
+ nid = (node.attr('id') || 0).to_i
+ nodes = node.element_children
+
+ case node.name
+ when 'group' then do_xml_group(node, nid, cgroup)
+ when 'fragment' then do_xml_fragment(nodes, nid, cgroup)
+ when 'scheme' then do_xml_reaction(nodes)
+ when 't' then do_xml_text(node, nid)
+ when 'graphic' then do_xml_graphic(node, nid)
+ when 'geometry', 'arrow' then do_xml_geometry(node, nid)
+ end
+ end
+ end
+
+ def do_xml_group(node, nid, cgroup)
+ @groupmap[cgroup].push(id: nid) if cgroup.positive?
+ @groupmap[nid] = []
+ top_level_parse(node, nid)
+ end
+ end
+ end
+end
diff --git a/lib/cdx/parser/exml_parser.rb b/lib/cdx/parser/exml_parser.rb
new file mode 100644
index 0000000000..068c7b521c
--- /dev/null
+++ b/lib/cdx/parser/exml_parser.rb
@@ -0,0 +1,214 @@
+# frozen_string_literal: true
+
+module Cdx
+ # Main CDX Parser module
+ module Parser
+ # EQUIL_ARROW = 1
+
+ # Read and Parse ChemDraw ELN XML
+ class ExmlParser
+ attr_reader :reaction, :molmap
+
+ def read(file, is_path = true)
+ @molmap = {}
+ @reactionmap = []
+ @reaction = []
+
+ fs = is_path ? File.open(file) : file
+ xml = Nokogiri::XML(fs)
+
+ infos = []
+ sections = xml.xpath('//section')
+ sections.each do |section|
+ info = do_section(section)
+ infos.push(info)
+ end
+
+ refine_data(infos)
+ true
+ end
+
+ def do_section(section)
+ section_info = {}
+ section_type = section.at_xpath('sectionType')['name']
+
+ section.xpath('./object').each do |child|
+ obj_info = do_object(child)
+ section_info.merge!(obj_info)
+ end
+
+ { 'type' => section_type, 'details' => section_info }
+ end
+
+ def do_object(object)
+ obj_type = object.at_xpath('field')['name']
+ details = do_object_detail(object)
+
+ obj_details = case obj_type
+ when 'Preparation' then details['styledText']
+ when 'Reaction Conditions' then details['propertyInstances']
+ when 'Reaction' then details['chemicalStructure']
+ else details['tableSection']
+ end
+
+ { obj_type => obj_details }
+ end
+
+ def do_object_detail(object)
+ details = {}
+ object.element_children.each do |child|
+ cname = child.name
+ val = case cname
+ when 'styledText' then child.at_xpath('./text').text
+ when 'chemicalStructure' then do_cdxml(child.content)
+ when 'propertyInstances' then do_property_instances(child)
+ when 'tableSection' then do_table_section(child)
+ end
+
+ details[cname] = val unless val.nil?
+ end
+
+ details
+ end
+
+ def do_property_instances(prop_instances)
+ props = {}
+
+ prop_instances.xpath('./propertyInstance').each do |prop|
+ pname = prop.at_xpath('property')['name']
+ val = read_value(prop['minValue'], prop['maxValue'], prop['value'])
+ props[pname] = val unless val.nil?
+ end
+
+ props
+ end
+
+ def do_table_section(table)
+ infos = []
+
+ tprops = do_table_props(table.xpath('./tableProperty'))
+ props = %w[ID parentID].concat(tprops)
+ values = do_table_rows(table.xpath('./tableRow'))
+
+ values.each do |rvalue|
+ info = {}
+ rvalue.each_with_index do |val, idx|
+ info[props[idx]] = val
+ end
+
+ infos.push(info)
+ end
+
+ infos
+ end
+
+ def do_table_props(cols)
+ props = []
+ cols.each do |col|
+ pname = col.at_xpath('property')['name']
+ props.push(pname)
+ end
+
+ props
+ end
+
+ def do_table_rows(rows)
+ rows_values = []
+ rows.each do |row|
+ tags = row.at_xpath('./tags')
+ tags = { 'ID' => nil, 'parentID' => nil } if tags.nil?
+ values = row.xpath('./tableCell').map { |x|
+ read_value(x['minValue'], x['maxValue'], x['value'])
+ }
+ rows_values.push([tags['ID'], tags['parentID']].concat(values))
+ end
+
+ rows_values
+ end
+
+ def do_cdxml(cdxml)
+ cp = Cdx::Parser::CdxmlParser.new
+ cp.read(cdxml, false)
+
+ cp
+ end
+
+ def read_value(min, max, val)
+ mm = min.nil? && max.nil?
+ return nil if mm && val.nil?
+ return val if mm
+
+ min == max ? val : `${min} ~ ${max}`
+ end
+
+ def refine_data(infos)
+ infos.each do |section|
+ section_details = section['details']
+ cp = section_details['Reaction']
+ @molmap.merge!(cp.molmap)
+ @reactionmap = @reactionmap.concat(cp.reactionmap.values)
+ @reaction = @reaction.concat(cp.reaction)
+
+ section_details.each do |key, details|
+ next if key == 'Reaction'
+ add_details(key, details)
+ end
+ end
+ end
+
+ def add_details(key, details)
+ return if details.nil? || details.empty?
+
+ if details.class == Array
+ details.each do |detail|
+ try_add_molecule_details(key, detail)
+ end
+ else
+ add_reaction_details(key, details)
+ end
+ end
+
+ def try_add_molecule_details(key, detail)
+ id_str = detail['ID']
+ if id_str.nil?
+ add_reaction_details(key, detail)
+ return
+ end
+
+ id = id_str.to_i
+ if @molmap.keys.include?(id)
+ detail.delete('Chemical Structure')
+ add_molecule_details(id, key, detail)
+ else
+ add_reaction_details(key, detail)
+ end
+ end
+
+ def add_molecule_details(id, group, detail)
+ @molmap[id][:detail] = detail
+ sgroup = group.downcase.to_sym
+
+ rid = nil
+ gid = nil
+ @reactionmap.each_with_index do |rgroup, rgid|
+ idx = rgroup[sgroup].index(id)
+ next if idx.nil?
+ rid = rgid
+ gid = idx
+ end
+ return if rid.nil? || gid.nil?
+
+ @reaction[rid][sgroup][gid][:detail] = detail
+ end
+
+ def add_reaction_details(group, detail)
+ group = 'Reaction Description' if %w[Reactants Products].include?(group)
+
+ reaction = @reaction.last
+ reaction[:detail] = {} if reaction[:detail].nil?
+ reaction[:detail][group] = [] if reaction[:detail][group].nil?
+ reaction[:detail][group].push(detail)
+ end
+ end
+ end
+end
diff --git a/lib/cdx/parser/fragment.rb b/lib/cdx/parser/fragment.rb
new file mode 100644
index 0000000000..3233316535
--- /dev/null
+++ b/lib/cdx/parser/fragment.rb
@@ -0,0 +1,153 @@
+# frozen_string_literal: true
+
+module Cdx
+ module Parser
+ # CDX Fragment parser
+ module Fragment
+ include Atom
+ include Bond
+
+ def do_fragment(cdxr, cid, cgroup)
+ mol = OpenBabel::OBMol.new
+ add_to_molmap(cid, mol)
+ add_to_groupmap(cid, cgroup)
+
+ mol.begin_modify
+ mol.set_dimension(2)
+ # Inner of do_fragment, since Fragment can be nested
+ do_fragment_impl(cdxr, mol)
+
+ # use 2D coordinates + hash/wedge to determine stereochemistry
+ # updown = create_updown_map(mol)
+ # OpenBabel.stereo_from_2d(mol, updown)
+
+ mol.end_modify
+ true
+ end
+
+ def do_fragment_impl(cdxr, mol, atmap = {}, almap = {})
+ @needs_kekulization = false
+ almap[:deleted] = [] if almap[:deleted].nil?
+ while (tag = cdxr.read_next(true)).positive?
+ case tag
+ when CDX_OBJ_NODE
+ # Read all properties of Node
+ atom = mol.new_atom
+ atmap[cdxr.current_id] = mol.num_atoms
+ do_node(cdxr, mol, atom, atmap, almap)
+ when CDX_OBJ_BOND then do_bond(cdxr, mol, atmap, almap)
+ end
+ end
+
+ kekulize(mol)
+ remove_alias_atom(mol, almap)
+ calculate_implicit_hydrogen(mol)
+
+ true
+ end
+
+ # def create_updown_map(mol)
+ # updown = OpenBabel::BondBondDirectionMap.new
+ # 0.upto(mol.num_bonds - 1).each do |i|
+ # bond = mol.get_bond(i)
+ # bd = OpenBabel::OBStereo::NotStereo
+ # flag = bond.get_flags
+ # bd = OpenBabel::OBStereo::UpBond if (flag & OpenBabel::OBBond::Wedge).positive?
+ # bd = OpenBabel::OBStereo::DownBond if (flag & OpenBabel::OBBond::Hash).positive?
+ # check_unknown = (flag & OpenBabel::OBBond::WedgeOrHash).positive? || (
+ # (flag & OpenBabel::OBBond::CisOrTrans).positive? &&
+ # bond.get_order == 2
+ # )
+ # bd = OpenBabel::OBStereo::UnknownDir if check_unknown
+ # updown[bond] = bd if bd != OpenBabel::OBStereo::NotStereo
+ # end
+ # updown
+ # end
+
+ def do_xml_fragment(nodes, nid, cgroup)
+ mol = OpenBabel::OBMol.new
+ add_to_molmap(nid, mol)
+ add_to_groupmap(nid, cgroup)
+
+ mol.begin_modify
+ mol.set_dimension(2)
+ do_xml_fragment_impl(nodes, mol)
+
+ mol.end_modify
+ true
+ end
+
+ def do_xml_fragment_impl(nodes, mol, atmap = {}, almap = {})
+ @needs_kekulization = false
+ almap[:deleted] = [] if almap[:deleted].nil?
+
+ nodes.each do |node|
+ nid = (node.attr('id') || 0).to_i
+
+ case node.name
+ when 'n'
+ atom = mol.new_atom
+ atmap[nid] = mol.num_atoms
+ do_xml_node(node, mol, atom, atmap, almap)
+ when 'b' then do_xml_bond(node, mol, atmap, almap)
+ end
+ end
+
+ kekulize(mol)
+ remove_alias_atom(mol, almap)
+ calculate_implicit_hydrogen(mol)
+ true
+ end
+
+ def add_to_groupmap(cid, cgroup)
+ return if cgroup.nil? || cgroup.zero?
+ @groupmap[cgroup] = [] if @groupmap[cgroup].nil?
+ @groupmap[cgroup].push(id: cid)
+ end
+
+ def add_to_molmap(cid, mol)
+ if @molmap[cid].nil?
+ id = cid
+ else
+ id = @tempid
+ @tempid += 1
+ end
+ @molmap[id] = {} if @molmap[id].nil?
+ @molmap[id].merge!(mol: mol)
+ end
+
+ def calculate_implicit_hydrogen(mol)
+ (1..mol.num_atoms).each do |i|
+ atom = mol.get_atom(i)
+ next if atom.has_data('NumHydrogens')
+ valence = OpenBabel.get_typical_valence(
+ atom.get_atomic_num, atom.bosum, atom.get_formal_charge
+ )
+ atom.set_implicit_hcount(valence - atom.bosum)
+ end
+ end
+
+ def remove_alias_atom(mol, almap)
+ return unless almap.keys.size == 1
+ almap[:deleted].sort.each_with_index do |val, idx|
+ atom = mol.get_atom(val - idx)
+ mol.delete_atom(atom) if atom.get_atomic_num.zero?
+ end
+ end
+
+ def kekulize(mol)
+ return unless @needs_kekulization
+
+ mol.set_aromatic_perceived
+ (0..mol.num_bonds - 1).each do |i|
+ bond = mol.get_bond(i)
+ next unless bond.is_aromatic
+ bond.get_begin_atom.set_aromatic
+ bond.get_end_atom.set_aromatic
+ end
+
+ OpenBabel.obkekulize(mol)
+ end
+ end
+ end
+end
diff --git a/lib/cdx/parser/geometry_util.rb b/lib/cdx/parser/geometry_util.rb
new file mode 100644
index 0000000000..b928d6b46f
--- /dev/null
+++ b/lib/cdx/parser/geometry_util.rb
@@ -0,0 +1,235 @@
+# frozen_string_literal: true
+
+module Cdx
+ module Parser
+ # Helper for Geometry
+ module GeometryUtil
+ def segment_to_line(segment)
+ Geometry::Line.new(segment.point1, segment.point2)
+ end
+
+ def x_from_y_along(segment, ym)
+ p1 = segment.point1
+ p2 = segment.point2
+ a = (p1.y - ym) * (p1.x - p2.x)
+ b = p1.y - p2.y
+
+ b.zero? ? nil : (p1.x - (a / b))
+ end
+
+ def y_from_x_along(segment, xm)
+ p1 = segment.point1
+ p2 = segment.point2
+ a = (p1.x - xm) * (p1.y - p2.y)
+ b = p1.x - p2.x
+
+ b.zero? ? nil : (p1.y - (a / b))
+ end
+
+ def line_to_segment(line)
+ Geometry::Segment.new(line.point1, line.point2)
+ end
+
+ def line_intersects_with_segment?(line, segment)
+ lseg = line_to_segment(line)
+ yp0 = y_from_x_along(lseg, 0)
+ xp0 = x_from_y_along(lseg, -1_000_000)
+ ypinf = y_from_x_along(lseg, 1_000_000)
+ xpinf = x_from_y_along(lseg, 1_000_000)
+
+ p0 = if yp0.nil?
+ Geometry::Point.new(xp0, -1_000_000)
+ else
+ Geometry::Point.new(0, yp0)
+ end
+
+ pinf = if ypinf.nil?
+ Geometry::Point.new(xpinf, 1_000_000)
+ else
+ Geometry::Point.new(1_000_000, ypinf)
+ end
+ inf_segment = Geometry::Segment.new(p0, pinf)
+
+ segment.intersects_with?(inf_segment)
+ end
+
+ def polygon_intersects_with_line?(polygon, line)
+ box = box_polygon(polygon)
+ box.edges.each do |edge|
+ return true if line_intersects_with_segment?(line, edge)
+ end
+
+ false
+ end
+
+ def polygon_intersects_with_segment?(polygon, segment)
+ polygon.edges.each do |edge|
+ return true if edge.intersects_with?(segment)
+ end
+
+ false
+ end
+
+ def polygon_intersects_with_polygon?(p1, p2)
+ p1.edges.each do |e1|
+ p2.edges.each do |e2|
+ return true if e1.intersects_with?(e2)
+ end
+ end
+
+ false
+ end
+
+ def polygon_contains_polygon?(inside, container)
+ inside.vertices.each do |v1|
+ return false unless container.contains?(v1)
+ end
+
+ true
+ end
+
+ def polygon_around_arrow?(polygon, arrow)
+ box = box_polygon(polygon)
+ apolygon = polygon_arrow(arrow)
+
+ check = polygon_intersects_with_polygon?(box, apolygon)
+ return true if check
+
+ check = polygon_contains_polygon?(box, apolygon) ||
+ polygon_contains_polygon?(apolygon, box)
+ check
+ end
+
+ def arrow_equation(arrow)
+ a, b, = line_params_from_arrow(arrow)
+ l = segment_from_arrow(arrow).length / 2
+
+ [a, b, l]
+ end
+
+ def polygon_arrow(arrow)
+ a, b, l = arrow_equation(arrow)
+
+ head = Geometry::Point.new(arrow[:head][:x], arrow[:head][:y])
+ tail = Geometry::Point.new(arrow[:tail][:x], arrow[:tail][:y])
+ uphead, lowhead = perpen_points(head, a, b, l)
+ uptail, lowtail = perpen_points(tail, a, b, l)
+
+ Geometry::Polygon.new([uphead, lowhead, lowtail, uptail])
+ end
+
+ def box_polygon(polygon)
+ box = polygon.bounding_box
+ rt = box.righttop
+ lb = box.leftbottom
+
+ points = []
+ points << Geometry::Point.new(rt.x, rt.y)
+ points << Geometry::Point.new(rt.x, lb.y)
+ points << Geometry::Point.new(lb.x, lb.y)
+ points << Geometry::Point.new(lb.x, rt.y)
+
+ Geometry::Polygon.new(points)
+ end
+
+ def center_points(arrow)
+ a, b, l = arrow_equation(arrow)
+ perpen_points(arrow[:center], a, b, l)
+ end
+
+ def perpen_points(point, a, b, l)
+ # perpendicular line will be: Bx - Ay + C = 0
+ # Solve these 2 equations to get the point
+ # (x - x0)**2 + (y - y0)**2 = l**2 (1)
+ # B(x - x0) - A(y - y0) = 0 (2)
+ m = (((a**2) * (l**2)) / (b**2 + a**2)).round(4)
+ k = (l**2 - m).round(4)
+
+ x1 = point.x + Math.sqrt(m)
+ x2 = point.x - Math.sqrt(m)
+
+ y1 = point.y + Math.sqrt(k)
+ y2 = point.y - Math.sqrt(k)
+
+ p1 = Geometry::Point.new(x1, y1)
+ p2 = Geometry::Point.new(x2, y2)
+
+ [p1, p2]
+
+ # [upper_point(m, point, l), lower_point(m, point, l)]
+ end
+
+ # def upper_point(m, center, l)
+ # x = center.x + Math.sqrt(m)
+ # k = (l**2 - (x - center.x)**2).abs
+ # y = Math.sqrt(k) + center.y
+
+ # Geometry::Point.new(x, y)
+ # end
+
+ # def lower_point(m, center, l)
+ # x = center.x - Math.sqrt(m)
+ # k = (l**2 - (x - center.x)**2).abs
+ # y = (Math.sqrt(k) - center.y).abs
+
+ # Geometry::Point.new(x, y)
+ # end
+
+ # Line: Ax + By + C = 0
+ def line_params_from_arrow(arrow)
+ x1 = arrow[:head][:x]
+ x2 = arrow[:tail][:x]
+ y1 = arrow[:head][:y]
+ y2 = arrow[:tail][:y]
+
+ a = y1 - y2
+ b = x2 - x1
+ c = x1 * y2 - x2 * y1
+
+ [a, b, c]
+ end
+
+ def extend_arrow_to_max(arrow_id)
+ arrow = @arrowmap[arrow_id]
+ a1, b1, c1 = line_params_from_arrow(arrow)
+
+ xmax = arrow[:head][:x]
+ ymax = arrow[:head][:y]
+ xmin = arrow[:tail][:x]
+ ymin = arrow[:tail][:y]
+
+ @arrowmap.each do |k, v|
+ next if k == arrow_id
+ a2, b2, c2 = line_params_from_arrow(v)
+ d = a1 * b2 - a2 * b1
+
+ if d.zero?
+ # parallel arrow
+ tx = v[:tail][:x]
+ ty = v[:tail][:y]
+ if tx > xmax || ty > ymax
+ xmax = tx
+ ymax = ty
+ end
+ next
+ end
+
+ dx = c1 * b2 - b1 * c2
+ dy = a1 * b2 - b1 * a2
+ x = dx / d
+ y = dy / d
+
+ if x > xmax || y > ymax
+ xmax = x
+ ymax = y
+ elsif x < xmin || y < ymin
+ xmin = x
+ ymin = y
+ end
+ end
+
+ Geometry::Segment.new_by_arrays([xmax, ymax], [xmin, ymin])
+ end
+ end
+ end
+end
diff --git a/lib/cdx/parser/graphic.rb b/lib/cdx/parser/graphic.rb
new file mode 100644
index 0000000000..287165bfd2
--- /dev/null
+++ b/lib/cdx/parser/graphic.rb
@@ -0,0 +1,95 @@
+# frozen_string_literal: true
+
+module Cdx
+ module Parser
+ # CDX Graphic parser
+ module Graphic
+ include Base
+
+ # First written/read in: ChemDraw 4.0
+ def do_graphic(cdxr, cid)
+ arrow_id = nil
+ type = nil
+
+ while (tag = cdxr.read_next).positive?
+ data = cdxr.data
+ case tag
+ when CDX_PROP_ARROW_TYPE
+ type = cdxr.len == 1 ? read_int8(data) : read_int16(data)
+ when CDX_PROP_BOUNDINGBOX
+ # Graphic objects are the only objects whose kCDXProp_BoundingBox
+ # property has a special meaning, representing a pair of points
+ # rather than a rectangle. The meaning of those two points in the
+ # context of each graphic type is shown below
+ box = read_boundingbox(data)
+ when CDX_PROP_SUPERSEDEDBY then arrow_id = read_int32(data)
+ end
+ end
+
+ process_arrow(type, box, arrow_id, cid)
+ end
+
+ def do_xml_graphic(node, nid)
+ arrow_id = nil
+ type = nil
+ box = nil
+
+ node.attributes.each do |key, value|
+ case key
+ when 'ArrowType'
+ type = case value.text
+ when 'NoHead' then 0
+ when 'HalfHead' then 1
+ when 'FullHead' then 2
+ when 'Resonance' then 4
+ when 'Equilibrium' then 8
+ when 'Hollow' then 16
+ when 'RetroSynthetic' then 32
+ when 'NoGo' then 64
+ when 'Dipole' then 128
+ end
+ when 'BoundingBox'
+ # Graphic objects are the only objects whose kCDXProp_BoundingBox
+ # property has a special meaning, representing a pair of points
+ # rather than a rectangle. The meaning of those two points in the
+ # context of each graphic type is shown below
+ box = xml_read_boundingbox(value)
+ when 'SupersededBy' then arrow_id = value.text.to_i
+ end
+ end
+
+ process_arrow(type, box, arrow_id, nid)
+ end
+
+ def process_arrow(type, box, arrow_id, cid)
+ headless = type.nil? || type == CDX_ARROWTYPE_NOHEAD
+ return if headless
+
+ if arrow_id.nil?
+ aid = cid
+ else
+ aid = arrow_id
+ @graphicmap[cid] = arrow_id
+ end
+
+ @arrowmap[aid] = {} if @arrowmap[aid].nil?
+ @arrowmap[aid].merge!(read_arrow(type, box))
+
+ return unless @is_ignore
+ @reactionmap[@tempid] = { arrow: aid }
+ @tempid += 1
+ end
+
+ def read_arrow(type, box)
+ arrow = {}
+ arrow[:type] = type unless type.nil?
+
+ arrow[:box] = box
+ arrow.merge!(arrow_from_box(box))
+ arrow[:center] = bb_center(box)
+
+ arrow
+ end
+ end
+ end
+end
diff --git a/lib/cdx/parser/header.rb b/lib/cdx/parser/header.rb
new file mode 100644
index 0000000000..49f8c7d4b0
--- /dev/null
+++ b/lib/cdx/parser/header.rb
@@ -0,0 +1,784 @@
+# frozen_string_literal: true
+
+require 'English'
+
+module Cdx
+ module Parser
+ # Header port from chemdrawcdx.h
+ module Header
+ CDX_HEADER_STRING_LEN = 8
+ CDX_HEADER_STRING = 'VjCD0100'
+ CDX_SIGNATURE = 'VjCD'
+ CDX_HEADER_LENGTH = 28
+ CDXML_HEADER_STRING = '' +
+ $RS + '' +
+ $RS
+ CDX_TAG_OBJECT = 0x8000
+ CDX_TAG_USER_DEFINED = 0x4000
+
+ # GENERAL PROPERTIES.
+ CDX_PROP_ENDOBJECT = 0x0000 # 0x0000 MARKS END OF OBJECT.
+ CDX_PROP_CREATIONUSERNAME = 0x0001 # 0x0001 THE NAME OF THE CREATOR (PROGRAM USER'S NAME) OF THE DOCUMENT. (CDXSTRING)
+ CDX_PROP_CREATIONDATE = 0x0002 # 0x0002 THE TIME OF OBJECT CREATION. (CDXDATE)
+ CDX_PROP_CREATIONPROGRAM = 0x0003 # 0x0003 THE NAME OF THE PROGRAM INCLUDING VERSION AND PLATFORM THAT CREATED THE ASSOCIATED CDX OBJECT. CHEMDRAW 4.0 USES CHEMDRAW 4.0 AS THE VALUE OF CREATIONPROGRAM. (CDXSTRING)
+ CDX_PROP_MODIFICATIONUSERNAME = 0x0004 # 0x0004 THE NAME OF THE LAST MODIFIER (PROGRAM USER'S NAME) OF THE DOCUMENT. (CDXSTRING)
+ CDX_PROP_MODIFICATIONDATE = 0x0005 # 0x0005 TIME OF THE LAST MODIFICATION. (CDXDATE)
+ CDX_PROP_MODIFICATIONPROGRAM = 0x0006 # 0x0006 THE NAME OF THE PROGRAM INCLUDING VERSION AND PLATFORM OF THE LAST PROGRAM TO PERFORM A MODIFICATION. CHEMDRAW 4.0 USES CHEMDRAW 4.0 AS THE VALUE OF CREATIONPROGRAM. (CDXSTRING)
+ CDX_PROP_UNUSED1 = 0x0007 # 0x0007 TABLE OF CONTENTS. (OBSOLETE)
+ CDX_PROP_NAME = 0x0008 # 0x0008 NAME OF AN OBJECT. (CDXSTRING)
+ CDX_PROP_COMMENT = 0x0009 # 0x0009 AN ARBITRARY STRING INTENDED TO BE MEANINGFUL TO A USER. (CDXSTRING)
+ CDX_PROP_ZORDER = 0x000A # 0x000A BACK-TO-FRONT ORDERING INDEX IN 2D DRAWING. (INT16)
+ CDX_PROP_REGISTRYNUMBER = 0x000B # 0x000B A REGISTRY OR CATALOG NUMBER OF A MOLECULE OBJECT. (CDXSTRING)
+ CDX_PROP_REGISTRYAUTHORITY = 0x000C # 0x000C A STRING THAT SPECIFIES THE AUTHORITY WHICH ISSUED A REGISTRY OR CATALOG NUMBER. SOME EXAMPLES OF REGISTRY AUTHORITIES ARE CAS BEILSTEIN ALDRICH AND MERCK. (CDXSTRING)
+ CDX_PROP_UNUSED2 = 0x000D # 0x000D INDICATES THAT THIS OBJECT (THE REFERENCE OBJECT) IS AN ALIAS TO AN OBJECT ELSEWHERE IN THE DOCUMENT (THE TARGET OBJECT). THE ATTRIBUTES AND CONTAINED OBJECTS SHOULD BE TAKEN FROM THE TARGET OBJECT. (OBSOLETE)
+ CDX_PROP_REPRESENTSPROPERTY = 0x000E # 0x000E INDICATES THAT THIS OBJECT REPRESENTS SOME PROPERTY IN SOME OTHER OBJECT. (CDXREPRESENTSPROPERTY)
+ CDX_PROP_IGNOREWARNINGS = 0x000F # 0x000F SIGNIFIES WHETHER CHEMICAL WARNINGS SHOULD BE SUPPRESSED ON THIS OBJECT. (CDXBOOLEANIMPLIED)
+ CDX_PROP_CHEMICALWARNING = 0x0010 # 0x0010 A WARNING CONCERNING POSSIBLE CHEMICAL PROBLEMS WITH THIS OBJECT. (CDXSTRING)
+ CDX_PROP_VISIBLE = 0x0011 # 0x0011 THE OBJECT IS VISIBLE IF NON-ZERO. (CDXBOOLEAN)
+ # CDX_PROP_SUPERSEDEDBY = 0x0012 # 0x0012 The ID of the object that should be read instead of this one.
+ CDX_PROP_SUPERSEDEDBY = 0x0013 # 0x0013 The ID of the object that should be read instead of this one.
+
+ # FONTS.
+ CDX_PROP_FONTTABLE = 0x0100 # 0x0100 A LIST OF FONTS USED IN THE DOCUMENT. (CDXFONTTABLE)
+
+ # COORDINATES.
+ CDX_PROP_2DPOSITION = 0x0200 # 0x0200 THE 2D LOCATION (IN THE ORDER OF VERTICAL AND HORIZONTAL LOCATIONS) OF AN OBJECT. (CDXPOINT2D)
+ CDX_PROP_3DPOSITION = 0x0201 # 0x0201 THE 3D LOCATION (IN THE ORDER OF X- Y- AND Z-LOCATIONS IN RIGHT-HANDED COORDINATE SYSTEM) OF AN OBJECT IN CDX COORDINATE UNITS. THE PRECISE MEANING OF THIS ATTRIBUTE VARIES DEPENDING ON THE TYPE OF OBJECT. (CDXPOINT3D)
+ CDX_PROP_2DEXTENT = 0x0202 # 0x0202 THE WIDTH AND HEIGHT OF AN OBJECT IN CDX COORDINATE UNITS. THE PRECISE MEANING OF THIS ATTRIBUTE VARIES DEPENDING ON THE TYPE OF OBJECT. (CDXPOINT2D)
+ CDX_PROP_3DEXTENT = 0x0203 # 0x0203 THE WIDTH HEIGHT AND DEPTH OF AN OBJECT IN CDX COORDINATE UNITS (RIGHT-HANDED COORDINATE SYSTEM). THE PRECISE MEANING OF THIS ATTRIBUTE VARIES DEPENDING ON THE TYPE OF OBJECT. (CDXPOINT3D)
+ CDX_PROP_BOUNDINGBOX = 0x0204 # 0x0204 THE SMALLEST RECTANGLE THAT ENCLOSES THE GRAPHICAL REPRESENTATION OF THE OBJECT. (CDXRECTANGLE)
+ CDX_PROP_ROTATIONANGLE = 0x0205 # 0x0205 THE ANGULAR ORIENTATION OF AN OBJECT IN DEGREES * 65536. (INT32)
+ CDX_PROP_BOUNDSINPARENT = 0x0206 # 0x0206 THE BOUNDS OF THIS OBJECT IN THE COORDINATE SYSTEM OF ITS PARENT (USED FOR PAGES WITHIN TABLES). (CDXRECTANGLE)
+ CDX_PROP_3DHEAD = 0x0207 # 0x0207 THE 3D LOCATION (IN THE ORDER OF X- Y- AND Z-LOCATIONS IN RIGHT-HANDED COORDINATE SYSTEM) OF THE HEAD OF AN OBJECT IN CDX COORDINATE UNITS. THE PRECISE MEANING OF THIS ATTRIBUTE VARIES DEPENDING ON THE TYPE OF OBJECT. (CDXPOINT3D)
+ CDX_PROP_3DTAIL = 0x0208 # 0x0208 THE 3D LOCATION (IN THE ORDER OF X- Y- AND Z-LOCATIONS IN RIGHT-HANDED COORDINATE SYSTEM) OF THE TAIL OF AN OBJECT IN CDX COORDINATE UNITS. THE PRECISE MEANING OF THIS ATTRIBUTE VARIES DEPENDING ON THE TYPE OF OBJECT. (CDXPOINT3D)
+ CDX_PROP_TOPLEFT = 0x0209 # 0x0209 THE LOCATION OF THE TOP-LEFT CORNER OF A QUADRILATERAL OBJECT POSSIBLY IN A ROTATED OR SKEWED FRAME. (CDXPOINT2D)
+ CDX_PROP_TOPRIGHT = 0x020A # 0x020A THE LOCATION OF THE TOP-RIGHT CORNER OF A QUADRILATERAL OBJECT POSSIBLY IN A ROTATED OR SKEWED FRAME. (CDXPOINT2D)
+ CDX_PROP_BOTTOMRIGHT = 0x020B # 0x020B THE LOCATION OF THE BOTTOM-RIGHT CORNER OF A QUADRILATERAL OBJECT POSSIBLY IN A ROTATED OR SKEWED FRAME. (CDXPOINT2D)
+ CDX_PROP_BOTTOMLEFT = 0x020C # 0x020C THE LOCATION OF THE BOTTOM-LEFT CORNER OF A QUADRILATERAL OBJECT POSSIBLY IN A ROTATED OR SKEWED FRAME. (CDXPOINT2D)
+
+ # COLORS.
+ CDX_PROP_COLORTABLE = 0x0300 # 0x0300 THE COLOR PALETTE USED THROUGHOUT THE DOCUMENT. (CDXCOLORTABLE)
+ CDX_PROP_FOREGROUNDCOLOR = 0x0301 # 0x0301 THE FOREGROUND COLOR OF AN OBJECT REPRESENTED AS THE TWO-BASED INDEX INTO THE OBJECT'S COLOR TABLE. (UINT16)
+ CDX_PROP_BACKGROUNDCOLOR = 0x0302 # 0x0302 THE BACKGROUND COLOR OF AN OBJECT REPRESENTED AS THE TWO-BASED INDEX INTO THE OBJECT'S COLOR TABLE. (INT16)
+
+ # ATOM PROPERTIES.
+ CDX_PROP_NODE_TYPE = 0x0400 # 0x0400 THE TYPE OF A NODE OBJECT. (INT16)
+ CDX_PROP_NODE_LABELDISPLAY = 0x0401 # 0x0401 THE CHARACTERISTICS OF NODE LABEL DISPLAY. (INT8)
+ CDX_PROP_NODE_ELEMENT = 0x0402 # 0x0402 THE ATOMIC NUMBER OF THE ATOM REPRESENTING THIS NODE. (INT16)
+ CDX_PROP_ATOM_ELEMENTLIST = 0x0403 # 0x0403 A LIST OF ATOMIC NUMBERS. (CDXELEMENTLIST)
+ CDX_PROP_ATOM_FORMULA = 0x0404 # 0x0404 THE COMPOSITION OF A NODE REPRESENTING A FRAGMENT WHOSE COMPOSITION IS KNOWN BUT WHOSE CONNECTIVITY IS NOT. FOR EXAMPLE C4H9 REPRESENTS A MIXTURE OF THE 4 BUTYL ISOMERS. (CDXFORMULA)
+ CDX_PROP_ATOM_ISOTOPE = 0x0420 # 0x0420 THE ABSOLUTE ISOTOPIC MASS OF AN ATOM (2 FOR DEUTERIUM 14 FOR CARBON-14). (INT16)
+ CDX_PROP_ATOM_CHARGE = 0x0421 # 0x0421 THE ATOMIC CHARGE OF AN ATOM. (INT8)
+ CDX_PROP_ATOM_RADICAL = 0x0422 # 0x0422 THE ATOMIC RADICAL ATTRIBUTE OF AN ATOM. (UINT8)
+ CDX_PROP_ATOM_RESTRICTFREESITES = 0x0423 # 0x0423 INDICATES THAT UP TO THE SPECIFIED NUMBER OF ADDITIONAL SUBSTITUENTS ARE PERMITTED ON THIS ATOM. (UINT8)
+ CDX_PROP_ATOM_RESTRICTIMPLICITHYDROGENS = 0x0424 # 0x0424 SIGNIFIES THAT IMPLICIT HYDROGENS ARE NOT ALLOWED ON THIS ATOM. (CDXBOOLEANIMPLIED)
+ CDX_PROP_ATOM_RESTRICTRINGBONDCOUNT = 0x0425 # 0x0425 THE NUMBER OF RING BONDS ATTACHED TO AN ATOM. (INT8)
+ CDX_PROP_ATOM_RESTRICTUNSATURATEDBONDS = 0x0426 # 0x0426 INDICATES WHETHER UNSATURATION SHOULD BE PRESENT OR ABSENT. (INT8)
+ CDX_PROP_ATOM_RESTRICTRXNCHANGE = 0x0427 # 0x0427 IF PRESENT SIGNIFIES THAT THE REACTION CHANGE OF AN ATOM MUST BE AS SPECIFIED. (CDXBOOLEANIMPLIED)
+ CDX_PROP_ATOM_RESTRICTRXNSTEREO = 0x0428 # 0x0428 THE CHANGE OF STEREOCHEMISTRY OF AN ATOM DURING A REACTION. (INT8)
+ CDX_PROP_ATOM_ABNORMALVALENCE = 0x0429 # 0x0429 SIGNIFIES THAT AN ABNORMAL VALENCE FOR AN ATOM IS PERMITTED. (CDXBOOLEANIMPLIED)
+ CDX_PROP_UNUSED3 = 0x042A # 0x042A
+ CDX_PROP_ATOM_NUMHYDROGENS = 0x042B # 0x042B THE NUMBER OF (EXPLICIT) HYDROGENS IN A LABELED ATOM CONSISTING OF ONE HEAVY ATOM AND (OPTIONALLY) THE SYMBOL H (E.G. CH3). (UINT16)
+ CDX_PROP_UNUSED4 = 0x042C # 0x042C
+ CDX_PROP_UNUSED5 = 0x042D # 0x042D
+ CDX_PROP_ATOM_HDOT = 0x042E # 0x042E SIGNIFIES THE PRESENCE OF AN IMPLICIT HYDROGEN WITH STEREOCHEMISTRY SPECIFIED EQUIVALENT TO AN EXPLICIT H ATOM WITH A WEDGED BOND. (CDXBOOLEANIMPLIED)
+ CDX_PROP_ATOM_HDASH = 0x042F # 0x042F SIGNIFIES THE PRESENCE OF AN IMPLICIT HYDROGEN WITH STEREOCHEMISTRY SPECIFIED EQUIVALENT TO AN EXPLICIT H ATOM WITH A HASHED BOND. (CDXBOOLEANIMPLIED)
+ CDX_PROP_ATOM_GEOMETRY = 0x0430 # 0x0430 THE GEOMETRY OF THE BONDS ABOUT THIS ATOM. (INT8)
+ CDX_PROP_ATOM_BONDORDERING = 0x0431 # 0x0431 AN ORDERING OF THE BONDS TO THIS NODE USED FOR STEREOCENTERS FRAGMENTS AND NAMED ALTERNATIVE GROUPS WITH MORE THAN ONE ATTACHMENT. (CDXOBJECTIDARRAY)
+ CDX_PROP_NODE_ATTACHMENTS = 0x0432 # 0x0432 FOR MULTICENTER ATTACHMENT NODES OR VARIABLE ATTACHMENT NODES A LIST OF IDS OF THE NODES WHICH ARE MULTIPLY OR VARIABLY ATTACHED TO THIS NODE. (CDXOBJECTIDARRAYWITHCOUNTS)
+ CDX_PROP_ATOM_GENERICNICKNAME = 0x0433 # 0x0433 THE NAME OF THE GENERIC NICKNAME. (CDXSTRING)
+ CDX_PROP_ATOM_ALTGROUPID = 0x0434 # 0x0434 THE ID OF THE ALTERNATIVE GROUP OBJECT THAT DESCRIBES THIS NODE. (CDXOBJECTID)
+ CDX_PROP_ATOM_RESTRICTSUBSTITUENTSUPTO = 0x0435 # 0x0435 INDICATES THAT SUBSTITUTION IS RESTRICTED TO NO MORE THAN THE SPECIFIED VALUE. (UINT8)
+ CDX_PROP_ATOM_RESTRICTSUBSTITUENTSEXACTLY = 0x0436 # 0x0436 INDICATES THAT EXACTLY THE SPECIFIED NUMBER OF SUBSTITUENTS MUST BE PRESENT. (UINT8)
+ CDX_PROP_ATOM_CIPSTEREOCHEMISTRY = 0x0437 # 0x0437 THE NODE'S ABSOLUTE STEREOCHEMISTRY ACCORDING TO THE CAHN-INGOLD-PRELOG SYSTEM. (INT8)
+ CDX_PROP_ATOM_TRANSLATION = 0x0438 # 0x0438 PROVIDES FOR RESTRICTIONS ON WHETHER A GIVEN NODE MAY MATCH OTHER MORE- OR LESS-GENERAL NODES. (INT8)
+ CDX_PROP_ATOM_ATOMNUMBER = 0x0439 # 0x0439 ATOM NUMBER AS TEXT. (CDXSTRING)
+ CDX_PROP_ATOM_SHOWQUERY = 0x043A # 0x043A SHOW THE QUERY INDICATOR IF NON-ZERO. (CDXBOOLEAN)
+ CDX_PROP_ATOM_SHOWSTEREO = 0x043B # 0x043B SHOW THE STEREOCHEMISTRY INDICATOR IF NON-ZERO. (CDXBOOLEAN)
+ CDX_PROP_ATOM_SHOWATOMNUMBER = 0x043C # 0x043C SHOW THE ATOM NUMBER IF NON-ZERO. (CDXBOOLEAN)
+ CDX_PROP_ATOM_LINKCOUNTLOW = 0x043D # 0x043D LOW END OF REPEAT COUNT FOR LINK NODES. (INT16)
+ CDX_PROP_ATOM_LINKCOUNTHIGH = 0x043E # 0x043E HIGH END OF REPEAT COUNT FOR LINK NODES. (INT16)
+ CDX_PROP_ATOM_ISOTOPICABUNDANCE = 0x043F # 0x043F ISOTOPIC ABUNDANCE OF THIS ATOM'S ISOTOPE. (INT8)
+ CDX_PROP_ATOM_EXTERNALCONNECTIONTYPE = 0x0440 # 0x0440 TYPE OF EXTERNAL CONNECTION FOR ATOMS OF TYPE CDX_NODETYPE_EXTERNALCONNECTIONPOINT. (INT8)
+
+ # MOLECULE PROPERTIES.
+ CDX_PROP_MOLE_RACEMIC = 0x0500 # 0x0500 INDICATES THAT THE MOLECULE IS A RACEMIC MIXTURE. (CDXBOOLEAN)
+ CDX_PROP_MOLE_ABSOLUTE = 0x0501 # 0x0501 INDICATES THAT THE MOLECULE HAS KNOWN ABSOLUTE CONFIGURATION. (CDXBOOLEAN)
+ CDX_PROP_MOLE_RELATIVE = 0x0502 # 0x0502 INDICATES THAT THE MOLECULE HAS KNOWN RELATIVE STEREOCHEMISTRY BUT UNKNOWN ABSOLUTE CONFIGURATION. (CDXBOOLEAN)
+ CDX_PROP_MOLE_FORMULA = 0x0503 # 0x0503 THE MOLECULAR FORMULA REPRESENTATION OF A MOLECULE OBJECT. (CDXFORMULA)
+ CDX_PROP_MOLE_WEIGHT = 0x0504 # 0x0504 THE AVERAGE MOLECULAR WEIGHT OF A MOLECULE OBJECT. (FLOAT64)
+ CDX_PROP_FRAG_CONNECTIONORDER = 0x0505 # 0x0505 AN ORDERED LIST OF ATTACHMENT POINTS WITHIN A FRAGMENT. (CDXOBJECTIDARRAY)
+
+ # BOND PROPERTIES.
+ CDX_PROP_BOND_ORDER = 0x0600 # 0x0600 THE ORDER OF A BOND OBJECT. (INT16)
+ CDX_PROP_BOND_DISPLAY = 0x0601 # 0x0601 THE DISPLAY TYPE OF A BOND OBJECT. (INT16)
+ CDX_PROP_BOND_DISPLAY2 = 0x0602 # 0x0602 THE DISPLAY TYPE FOR THE SECOND LINE OF A DOUBLE BOND. (INT16)
+ CDX_PROP_BOND_DOUBLEPOSITION = 0x0603 # 0x0603 THE POSITION OF THE SECOND LINE OF A DOUBLE BOND. (INT16)
+ CDX_PROP_BOND_BEGIN = 0x0604 # 0x0604 THE ID OF THE CDX NODE OBJECT AT THE FIRST END OF A BOND. (CDXOBJECTID)
+ CDX_PROP_BOND_END = 0x0605 # 0x0605 THE ID OF THE CDX NODE OBJECT AT THE SECOND END OF A BOND. (CDXOBJECTID)
+ CDX_PROP_BOND_RESTRICTTOPOLOGY = 0x0606 # 0x0606 INDICATES THE DESIRED TOPOLOGY OF A BOND IN A QUERY. (INT8)
+ CDX_PROP_BOND_RESTRICTRXNPARTICIPATION = 0x0607 # 0x0607 SPECIFIES THAT A BOND IS AFFECTED BY A REACTION. (INT8)
+ CDX_PROP_BOND_BEGINATTACH = 0x0608 # 0x0608 INDICATES WHERE WITHIN THE BOND_BEGIN NODE A BOND IS ATTACHED. (UINT8)
+ CDX_PROP_BOND_ENDATTACH = 0x0609 # 0x0609 INDICATES WHERE WITHIN THE BOND_END NODE A BOND IS ATTACHED. (UINT8)
+ CDX_PROP_BOND_CIPSTEREOCHEMISTRY = 0x060A # 0x060A THE BOND'S ABSOLUTE STEREOCHEMISTRY ACCORDING TO THE CAHN-INGOLD-PRELOG SYSTEM. (INT8)
+ CDX_PROP_BOND_BONDORDERING = 0x060B # 0x060B ORDERED LIST OF ATTACHED BOND IDS. (CDXOBJECTIDARRAY)
+ CDX_PROP_BOND_SHOWQUERY = 0x060C # 0x060C SHOW THE QUERY INDICATOR IF NON-ZERO. (CDXBOOLEAN)
+ CDX_PROP_BOND_SHOWSTEREO = 0x060D # 0x060D SHOW THE STEREOCHEMISTRY INDICATOR IF NON-ZERO. (CDXBOOLEAN)
+ CDX_PROP_BOND_CROSSINGBONDS = 0x060E # 0x060E UNORDERED LIST OF IDS OF BONDS THAT CROSS THIS ONE (EITHER ABOVE OR BELOW). (CDXOBJECTIDARRAY)
+ CDX_PROP_BOND_SHOWRXN = 0x060F # 0x060F SHOW THE REACTION-CHANGE INDICATOR IF NON-ZERO. (CDXBOOLEAN)
+
+ # TEXT PROPERTIES.
+ CDX_PROP_TEXT = 0x0700 # 0x0700 THE TEXT OF A TEXT OBJECT. (CDXSTRING)
+ CDX_PROP_JUSTIFICATION = 0x0701 # 0x0701 THE HORIZONTAL JUSTIFICATION OF A TEXT OBJECT. (INT8)
+ CDX_PROP_LINEHEIGHT = 0x0702 # 0x0702 THE LINE HEIGHT OF A TEXT OBJECT. (UINT16)
+ CDX_PROP_WORDWRAPWIDTH = 0x0703 # 0x0703 THE WORD-WRAP WIDTH OF A TEXT OBJECT. (INT16)
+ CDX_PROP_LINESTARTS = 0x0704 # 0x0704 THE NUMBER OF LINES OF A TEXT OBJECT FOLLOWED BY THAT MANY VALUES INDICATING THE ZERO-BASED TEXT POSITION OF EACH LINE START. (INT16LISTWITHCOUNTS)
+ CDX_PROP_LABELALIGNMENT = 0x0705 # 0x0705 THE ALIGNMENT OF THE TEXT WITH RESPECT TO THE NODE POSITION. (INT8)
+ CDX_PROP_LABELLINEHEIGHT = 0x0706 # 0x0706 TEXT LINE HEIGHT FOR ATOM LABELS (INT16)
+ CDX_PROP_CAPTIONLINEHEIGHT = 0x0707 # 0x0707 TEXT LINE HEIGHT FOR NON-ATOMLABEL TEXT OBJECTS (INT16)
+ CDX_PROP_INTERPRETCHEMICALLY = 0x0708 # 0x0708 SIGNIFIES WHETHER TO THE TEXT LABEL SHOULD BE INTERPRETED CHEMICALLY (IF POSSIBLE). (CDXBOOLEANIMPLIED)
+
+ # DOCUMENT PROPERTIES.
+ CDX_PROP_MACPRINTINFO = 0x0800 # 0x0800 THE 120 BYTE MACINTOSH TPRINT DATA ASSOCIATED WITH THE CDX DOCUMENT OBJECT. REFER TO MACINTOSH TOOLBOX MANUAL FOR DETAILED DESCRIPTION. (UNFORMATTED)
+ CDX_PROP_WINPRINTINFO = 0x0801 # 0x0801 THE WINDOWS DEVMODE STRUCTURE ASSOCIATED WITH THE CDX DOCUMENT OBJECT. (UNFORMATTED)
+ CDX_PROP_PRINTMARGINS = 0x0802 # 0x0802 THE OUTER MARGINS OF THE DOCUMENT. (CDXRECTANGLE)
+ CDX_PROP_CHAINANGLE = 0x0803 # 0x0803 THE DEFAULT CHAIN ANGLE SETTING IN DEGREES * 65536. (INT32)
+ CDX_PROP_BONDSPACING = 0x0804 # 0x0804 THE SPACING BETWEEN SEGMENTS OF A MULTIPLE BOND MEASURED RELATIVE TO BOND LENGTH. (INT16)
+ CDX_PROP_BONDLENGTH = 0x0805 # 0x0805 THE DEFAULT BOND LENGTH. (CDXCOORDINATE)
+ CDX_PROP_BOLDWIDTH = 0x0806 # 0x0806 THE DEFAULT BOLD BOND WIDTH. (CDXCOORDINATE)
+ CDX_PROP_LINEWIDTH = 0x0807 # 0x0807 THE DEFAULT LINE WIDTH. (CDXCOORDINATE)
+ CDX_PROP_MARGINWIDTH = 0x0808 # 0x0808 THE DEFAULT AMOUNT OF SPACE SURROUNDING ATOM LABELS. (CDXCOORDINATE)
+ CDX_PROP_HASHSPACING = 0x0809 # 0x0809 THE DEFAULT SPACING BETWEEN HASHED LINES USED IN WEDGED HASHED BONDS. (CDXCOORDINATE)
+ CDX_PROP_LABELSTYLE = 0x080A # 0x080A THE DEFAULT STYLE FOR ATOM LABELS. (CDXFONTSTYLE)
+ CDX_PROP_CAPTIONSTYLE = 0x080B # 0x080B THE DEFAULT STYLE FOR NON-ATOMLABEL TEXT OBJECTS. (CDXFONTSTYLE)
+ CDX_PROP_CAPTIONJUSTIFICATION = 0x080C # 0x080C THE HORIZONTAL JUSTIFICATION OF A CAPTION (NON-ATOMLABEL TEXT OBJECT) (INT8)
+ CDX_PROP_FRACTIONALWIDTHS = 0x080D # 0x080D SIGNIFIES WHETHER TO USE FRACTIONAL WIDTH INFORMATION WHEN DRAWING TEXT. (CDXBOOLEANIMPLIED)
+ CDX_PROP_MAGNIFICATION = 0x080E # 0x080E THE VIEW MAGNIFICATION FACTOR (INT16)
+ CDX_PROP_WIDTHPAGES = 0x080F # 0x080F THE WIDTH OF THE DOCUMENT IN PAGES. (INT16)
+ CDX_PROP_HEIGHTPAGES = 0x0810 # 0x0810 THE HEIGHT OF THE DOCUMENT IN PAGES. (INT16)
+ CDX_PROP_DRAWINGSPACETYPE = 0x0811 # 0x0811 THE TYPE OF DRAWING SPACE USED FOR THIS DOCUMENT. (INT8)
+ CDX_PROP_WIDTH = 0x0812 # 0x0812 THE WIDTH OF AN OBJECT IN CDX COORDINATE UNITS POSSIBLY IN A ROTATED OR SKEWED FRAME. (CDXCOORDINATE)
+ CDX_PROP_HEIGHT = 0x0813 # 0x0813 THE HEIGHT OF AN OBJECT IN CDX COORDINATE UNITS POSSIBLY IN A ROTATED OR SKEWED FRAME. (CDXCOORDINATE)
+ CDX_PROP_PAGEOVERLAP = 0x0814 # 0x0814 THE AMOUNT OF OVERLAP OF PAGES WHEN A POSTER IS TILED. (CDXCOORDINATE)
+ CDX_PROP_HEADER = 0x0815 # 0x0815 THE TEXT OF THE HEADER. (CDXSTRING)
+ CDX_PROP_HEADERPOSITION = 0x0816 # 0x0816 THE VERTICAL OFFSET OF THE HEADER BASELINE FROM THE TOP OF THE PAGE. (CDXCOORDINATE)
+ CDX_PROP_FOOTER = 0x0817 # 0x0817 THE TEXT OF THE FOOTER. (CDXSTRING)
+ CDX_PROP_FOOTERPOSITION = 0x0818 # 0x0818 THE VERTICAL OFFSET OF THE FOOTER BASELINE FROM THE BOTTOM OF THE PAGE. (CDXCOORDINATE)
+ CDX_PROP_PRINTTRIMMARKS = 0x0819 # 0x0819 IF PRESENT TRIM MARKS ARE TO PRINTED IN THE MARGINS. (CDXBOOLEANIMPLIED)
+ CDX_PROP_LABELSTYLEFONT = 0x081A # 0x081A THE DEFAULT FONT FAMILY FOR ATOM LABELS. (INT16)
+ CDX_PROP_CAPTIONSTYLEFONT = 0x081B # 0x081B THE DEFAULT FONT STYLE FOR CAPTIONS (NON-ATOM-LABEL TEXT OBJECTS). (INT16)
+ CDX_PROP_LABELSTYLESIZE = 0x081C # 0x081C THE DEFAULT FONT SIZE FOR ATOM LABELS. (INT16)
+ CDX_PROP_CAPTIONSTYLESIZE = 0x081D # 0x081D THE DEFAULT FONT SIZE FOR CAPTIONS (NON-ATOM-LABEL TEXT OBJECTS). (INT16)
+ CDX_PROP_LABELSTYLEFACE = 0x081E # 0x081E THE DEFAULT FONT STYLE FOR ATOM LABELS. (INT16)
+ CDX_PROP_CAPTIONSTYLEFACE = 0x081F # 0x081F THE DEFAULT FONT FACE FOR CAPTIONS (NON-ATOM-LABEL TEXT OBJECTS). (INT16)
+ CDX_PROP_LABELSTYLECOLOR = 0x0820 # 0x0820 THE DEFAULT COLOR FOR ATOM LABELS (INT16)
+ CDX_PROP_CAPTIONSTYLECOLOR = 0x0821 # 0x0821 THE DEFAULT COLOR FOR CAPTIONS (NON-ATOM-LABEL TEXT OBJECTS). (INT16)
+ CDX_PROP_BONDSPACINGABS = 0x0822 # 0x0822 THE ABSOLUTE DISTANCE BETWEEN SEGMENTS OF A MULTIPLE BOND. (CDXCOORDINATE)
+ CDX_PROP_LABELJUSTIFICATION = 0x0823 # 0x0823 THE DEFAULT JUSTIFICATION FOR ATOM LABELS. (INT8)
+ CDX_PROP_FIXINPLACEEXTENT = 0x0824 # 0x0824 DEFINES A SIZE FOR OLE IN-PLACE EDITING. (CDXPOINT2D)
+ CDX_PROP_SIDE = 0x0825 # 0x0825 A SPECIFIC SIDE OF AN OBJECT (RECTANGLE). (INT16)
+ CDX_PROP_FIXINPLACEGAP = 0x0826 # 0x0826 DEFINES A PADDING FOR OLE IN-PLACE EDITING. (CDXPOINT2D)
+
+ # WINDOW PROPERTIES.
+ CDX_PROP_WINDOW_ISZOOMED = 0x0900 # 0x0900 SIGNIFIES WHETHER THE MAIN VIEWING WINDOW IS ZOOMED (MAXIMIZED). (CDXBOOLEANIMPLIED)
+ CDX_PROP_WINDOW_POSITION = 0x0901 # 0x0901 THE TOP-LEFT POSITION OF THE MAIN VIEWING WINDOW. (CDXPOINT2D)
+ CDX_PROP_WINDOW_SIZE = 0x0902 # 0x0902 HEIGHT AND WIDTH OF THE DOCUMENT WINDOW. (CDXPOINT2D)
+
+ # GRAPHIC OBJECT PROPERTIES.
+ CDX_PROP_GRAPHIC_TYPE = 0x0A00 # 0x0A00 THE TYPE OF GRAPHICAL OBJECT. (INT16)
+ CDX_PROP_LINE_TYPE = 0x0A01 # 0x0A01 THE TYPE OF A LINE OBJECT. (INT16)
+ CDX_PROP_ARROW_TYPE = 0x0A02 # 0x0A02 THE TYPE OF ARROW OBJECT WHICH REPRESENTS LINE ARROW ARC RECTANGLE OR ORBITAL. (INT16)
+ CDX_PROP_RECTANGLE_TYPE = 0x0A03 # 0x0A03 THE TYPE OF A RECTANGLE OBJECT. (INT16)
+ CDX_PROP_OVAL_TYPE = 0x0A04 # 0x0A04 THE TYPE OF AN ARROW OBJECT THAT REPRESENTS A CIRCLE OR ELLIPSE. (INT16)
+ CDX_PROP_ORBITAL_TYPE = 0x0A05 # 0x0A05 THE TYPE OF ORBITAL OBJECT. (INT16)
+ CDX_PROP_BRACKET_TYPE = 0x0A06 # 0x0A06 THE TYPE OF SYMBOL OBJECT. (INT16)
+ CDX_PROP_SYMBOL_TYPE = 0x0A07 # 0x0A07 THE TYPE OF SYMBOL OBJECT. (INT16)
+ CDX_PROP_CURVE_TYPE = 0x0A08 # 0x0A08 THE TYPE OF CURVE OBJECT. (INT16)
+ CDX_PROP_ARROW_HEADSIZE = 0x0A20 # 0x0A20 THE SIZE OF THE ARROW'S HEAD. (INT16)
+ CDX_PROP_ARC_ANGULARSIZE = 0x0A21 # 0x0A21 THE SIZE OF AN ARC (IN DEGREES * 10 SO 90 DEGREES = 900). (INT16)
+ CDX_PROP_BRACKET_LIPSIZE = 0x0A22 # 0x0A22 THE SIZE OF A BRACKET. (INT16)
+ CDX_PROP_CURVE_POINTS = 0x0A23 # 0x0A23 THE B&EACUTE;ZIER CURVE'S CONTROL POINT LOCATIONS. (CDXCURVEPOINTS)
+ CDX_PROP_BRACKET_USAGE = 0x0A24 # 0x0A24 THE SYNTACTICAL CHEMICAL MEANING OF THE BRACKET (SRU MER MON XLINK ETC). (INT8)
+ CDX_PROP_POLYMER_REPEATPATTERN = 0x0A25 # 0x0A25 THE HEAD-TO-TAIL CONNECTIVITY OF OBJECTS CONTAINED WITHIN THE BRACKET. (INT8)
+ CDX_PROP_POLYMER_FLIPTYPE = 0x0A26 # 0x0A26 THE FLIP STATE OF OBJECTS CONTAINED WITHIN THE BRACKET. (INT8)
+ CDX_PROP_BRACKETEDOBJECTS = 0x0A27 # 0x0A27 THE SET OF OBJECTS CONTAINED IN A BRACKETEDGROUP. (CDXOBJECTIDARRAY)
+ CDX_PROP_BRACKET_REPEATCOUNT = 0x0A28 # 0x0A28 THE NUMBER OF TIMES A MULTIPLE-GROUP BRACKETEDGROUP IS REPEATED. (INT16)
+ CDX_PROP_BRACKET_COMPONENTORDER = 0x0A29 # 0x0A29 THE COMPONENT ORDER ASSOCIATED WITH A BRACKETEDGROUP. (INT16)
+ CDX_PROP_BRACKET_SRULABEL = 0x0A2A # 0x0A2A THE LABEL ASSOCIATED WITH A BRACKETEDGROUP THAT REPRESENTS AN SRU. (CDXSTRING)
+ CDX_PROP_BRACKET_GRAPHICID = 0x0A2B # 0x0A2B THE ID OF A GRAPHICAL OBJECT (BRACKET BRACE OR PARENTHESIS) ASSOCIATED WITH A BRACKET ATTACHMENT. (CDXOBJECTID)
+ CDX_PROP_BRACKET_BONDID = 0x0A2C # 0x0A2C THE ID OF A BOND THAT CROSSES A BRACKET ATTACHMENT. (CDXOBJECTID)
+ CDX_PROP_BRACKET_INNERATOMID = 0x0A2D # 0x0A2D THE ID OF THE NODE LOCATED WITHIN THE BRACKETED GROUP AND ATTACHED TO A BOND THAT CROSSES A BRACKET ATTACHMENT. (CDXOBJECTID)
+ CDX_PROP_CURVE_POINTS3D = 0x0A2E # 0x0A2E THE B&EACUTE;ZIER CURVE'S CONTROL POINT LOCATIONS. (CDXCURVEPOINTS3D)
+
+ # EMBEDDED PICTURES.
+ CDX_PROP_PICTURE_EDITION = 0x0A60 # 0x0A60 THE SECTION INFORMATION (SECTIONHANDLE) OF THE MACINTOSH PUBLISH & SUBSCRIBE EDITION EMBEDDED IN THE CDX PICTURE OBJECT. (UNFORMATTED)
+ CDX_PROP_PICTURE_EDITIONALIAS = 0x0A61 # 0x0A61 THE ALIAS INFORMATION OF THE MACINTOSH PUBLISH & SUBSCRIBE EDITION EMBEDDED IN THE CDX PICTURE OBJECT. (UNFORMATTED)
+ CDX_PROP_MACPICT = 0x0A62 # 0x0A62 A MACINTOSH PICT DATA OBJECT. (UNFORMATTED)
+ CDX_PROP_WINDOWSMETAFILE = 0x0A63 # 0x0A63 A MICROSOFT WINDOWS METAFILE OBJECT. (UNFORMATTED)
+ CDX_PROP_OLEOBJECT = 0x0A64 # 0x0A64 AN OLE OBJECT. (UNFORMATTED)
+ CDX_PROP_ENHANCEDMETAFILE = 0x0A65 # 0x0A65 A MICROSOFT WINDOWS ENHANCED METAFILE OBJECT. (UNFORMATTED)
+
+ # Spectrum Properties
+ CDX_PROP_SPECTRUM_XSPACING = 0x0A80 # 0x0A80 THE SPACING IN LOGICAL UNITS (PPM HZ WAVENUMBERS) BETWEEN POINTS ALONG THE X-AXIS OF AN EVENLY-SPACED GRID. (FLOAT64)
+ CDX_PROP_SPECTRUM_XLOW = 0x0A81 # 0x0A81 THE FIRST DATA POINT FOR THE X-AXIS OF AN EVENLY-SPACED GRID. (FLOAT64)
+ CDX_PROP_SPECTRUM_XTYPE = 0x0A82 # 0x0A82 THE TYPE OF UNITS THE X-AXIS REPRESENTS. (INT16)
+ CDX_PROP_SPECTRUM_YTYPE = 0x0A83 # 0x0A83 THE TYPE OF UNITS THE Y-AXIS REPRESENTS. (INT16)
+ CDX_PROP_SPECTRUM_XAXISLABEL = 0x0A84 # 0x0A84 A LABEL FOR THE X-AXIS. (CDXSTRING)
+ CDX_PROP_SPECTRUM_YAXISLABEL = 0x0A85 # 0x0A85 A LABEL FOR THE Y-AXIS. (CDXSTRING)
+ CDX_PROP_SPECTRUM_DATAPOINT = 0x0A86 # 0x0A86 THE Y-AXIS VALUES FOR THE SPECTRUM. IT IS AN ARRAY OF DOUBLE VALUES CORRESPONDING TO X-AXIS VALUES. (FLOAT64)
+ CDX_PROP_SPECTRUM_CLASS = 0x0A87 # 0x0A87 THE TYPE OF SPECTRUM REPRESENTED. (INT16)
+ CDX_PROP_SPECTRUM_YLOW = 0x0A88 # 0x0A88 Y VALUE TO BE USED TO OFFSET DATA WHEN STORING XML. (FLOAT64)
+ CDX_PROP_SPECTRUM_YSCALE = 0x0A89 # 0x0A89 Y SCALING USED TO SCALE DATA WHEN STORING XML. (FLOAT64)
+
+ # TLC PROPERTIES
+ CDX_PROP_TLC_ORIGINFRACTION = 0x0AA0 # 0x0AA0 THE DISTANCE OF THE ORIGIN LINE FROM THE BOTTOM OF A TLC PLATE AS A FRACTION OF THE TOTAL HEIGHT OF THE PLATE. (FLOAT64)
+ CDX_PROP_TLC_SOLVENTFRONTFRACTION = 0x0AA1 # 0x0AA1 THE DISTANCE OF THE SOLVENT FRONT FROM THE TOP OF A TLC PLATE AS A FRACTION OF THE TOTAL HEIGHT OF THE PLATE. (FLOAT64)
+ CDX_PROP_TLC_SHOWORIGIN = 0x0AA2 # 0x0AA2 SHOW THE ORIGIN LINE NEAR THE BASE OF THE TLC PLATE IF NON-ZERO. (CDXBOOLEAN)
+ CDX_PROP_TLC_SHOWSOLVENTFRONT = 0x0AA3 # 0x0AA3 SHOW THE SOLVENT FRONT LINE NEAR THE TOP OF THE TLC PLATE IF NON-ZERO. (CDXBOOLEAN)
+ CDX_PROP_TLC_SHOWBORDERS = 0x0AA4 # 0x0AA4 SHOW BORDERS AROUND THE EDGES OF THE TLC PLATE IF NON-ZERO. (CDXBOOLEAN)
+ CDX_PROP_TLC_SHOWSIDETICKS = 0x0AA5 # 0x0AA5 SHOW TICKMARKS UP THE SIDE OF THE TLC PLATE IF NON-ZERO. (CDXBOOLEAN)
+ CDX_PROP_TLC_RF = 0x0AB0 # 0x0AB0 THE RETENTION FACTOR OF AN INDIVIDUAL SPOT. (FLOAT64)
+ CDX_PROP_TLC_TAIL = 0x0AB1 # 0x0AB1 THE LENGTH OF THE "TAIL" OF AN INDIVIDUAL SPOT. (CDXCOORDINATE)
+ CDX_PROP_TLC_SHOWRF = 0x0AB2 # 0x0AB2 SHOW THE SPOT'S RETENTION FRACTION (RF) VALUE IF NON-ZERO. (CDXBOOLEAN)
+
+ # ALTERNATE GROUP PROPERTIES
+ CDX_PROP_NAMEDALTERNATIVEGROUP_TEXTFRAME = 0x0B00 # 0x0B00 THE BOUNDING BOX OF UPPER PORTION OF THE NAMED ALTERNATIVE GROUP CONTAINING THE NAME OF THE GROUP. (CDXRECTANGLE)
+ CDX_PROP_NAMEDALTERNATIVEGROUP_GROUPFRAME = 0x0B01 # 0x0B01 THE BOUNDING BOX OF THE LOWER PORTION OF THE NAMED ALTERNATIVE GROUP CONTAINING THE DEFINITION OF THE GROUP. (CDXRECTANGLE)
+ CDX_PROP_NAMEDALTERNATIVEGROUP_VALENCE = 0x0B02 # 0x0B02 THE NUMBER OF ATTACHMENT POINTS IN EACH ALTERNATIVE IN A NAMED ALTERNATIVE GROUP. (INT16)
+
+ # GEOMETRY AND CONSTRAINT PROPERTIES
+ CDX_PROP_GEOMETRICFEATURE = 0x0B80 # 0x0B80 THE TYPE OF THE GEOMETRICAL FEATURE (POINT LINE PLANE ETC.). (INT8)
+ CDX_PROP_RELATIONVALUE = 0x0B81 # 0x0B81 THE NUMERIC RELATIONSHIP (IF ANY) AMONG THE BASIS OBJECTS USED TO DEFINE THIS OBJECT. (INT8)
+ CDX_PROP_BASISOBJECTS = 0x0B82 # 0x0B82 AN ORDERED LIST OF OBJECTS USED TO DEFINE THIS OBJECT. (CDXOBJECTIDARRAY)
+ CDX_PROP_CONSTRAINTTYPE = 0x0B83 # 0x0B83 THE CONSTRAINT TYPE (DISTANCE OR ANGLE). (INT8)
+ CDX_PROP_CONSTRAINTMIN = 0x0B84 # 0x0B84 THE MINIMUM VALUE OF THE CONSTRAINT (FLOAT64)
+ CDX_PROP_CONSTRAINTMAX = 0x0B85 # 0x0B85 THE MAXIMUM VALUE OF THE CONSTRAINT (FLOAT64)
+ CDX_PROP_IGNOREUNCONNECTEDATOMS = 0x0B86 # 0x0B86 SIGNIFIES WHETHER UNCONNECTED ATOMS SHOULD BE IGNORED WITHIN THE EXCLUSION SPHERE. (CDXBOOLEANIMPLIED)
+ CDX_PROP_DIHEDRALISCHIRAL = 0x0B87 # 0x0B87 SIGNIFIES WHETHER A DIHEDRAL IS SIGNED OR UNSIGNED. (CDXBOOLEANIMPLIED)
+ CDX_PROP_POINTISDIRECTED = 0x0B88 # 0x0B88 FOR A POINT BASED ON A NORMAL SIGNIFIES WHETHER IT IS IN A SPECIFIC DIRECTION RELATIVE TO THE REFERENCE POINT. (CDXBOOLEANIMPLIED)
+
+ # REACTION PROPERTIES
+ CDX_PROP_REACTIONSTEP_ATOM_MAP = 0x0C00 # 0x0C00 REPRESENTS PAIRS OF MAPPED ATOM IDS; EACH PAIR IS A REACTANT ATOM MAPPED TO TO A PRODUCT ATOM. (CDXOBJECTIDARRAY)
+ CDX_PROP_REACTIONSTEP_REACTANTS = 0x0C01 # 0x0C01 AN ORDER LIST OF REACTANTS PRESENT IN THE REACTION STEP. (CDXOBJECTIDARRAY)
+ CDX_PROP_REACTIONSTEP_PRODUCTS = 0x0C02 # 0x0C02 AN ORDER LIST OF PRODUCTS PRESENT IN THE REACTION STEP. (CDXOBJECTIDARRAY)
+ CDX_PROP_REACTIONSTEP_PLUSSES = 0x0C03 # 0x0C03 AN ORDERED LIST OF PLUSES USED TO SEPARATE COMPONENTS OF THE REACTION STEP. (CDXOBJECTIDARRAY)
+ CDX_PROP_REACTIONSTEP_ARROWS = 0x0C04 # 0x0C04 AN ORDERED LIST OF ARROWS USED TO SEPARATE COMPONENTS OF THE REACTION STEP. (CDXOBJECTIDARRAY)
+ CDX_PROP_REACTIONSTEP_OBJECTSABOVEARROW = 0x0C05 # 0x0C05 AN ORDER LIST OF OBJECTS ABOVE THE ARROW IN THE REACTION STEP. (CDXOBJECTIDARRAY)
+ CDX_PROP_REACTIONSTEP_OBJECTSBELOWARROW = 0x0C06 # 0x0C06 AN ORDER LIST OF OBJECTS BELOW THE ARROW IN THE REACTION STEP. (CDXOBJECTIDARRAY)
+ CDX_PROP_REACTIONSTEP_ATOM_MAP_MANUAL = 0x0C07 # 0x0C07 REPRESENTS PAIRS OF MAPPED ATOM IDS; EACH PAIR IS A REACTANT ATOM MAPPED TO TO A PRODUCT ATOM. (CDXOBJECTIDARRAY)
+ CDX_PROP_REACTIONSTEP_ATOM_MAP_AUTO = 0x0C08 # 0x0C08 REPRESENTS PAIRS OF MAPPED ATOM IDS; EACH PAIR IS A REACTANT ATOM MAPPED TO TO A PRODUCT ATOM. (CDXOBJECTIDARRAY)
+
+ # CDOBJECTTAG PROPERTIES
+ CDX_PROP_OBJECTTAG_TYPE = 0x0D00 # 0x0D00 THE TAG'S DATA TYPE. (INT16)
+ CDX_PROP_UNUSED6 = 0x0D01 # 0x0D01 OBSOLETE (OBSOLETE)
+ CDX_PROP_UNUSED7 = 0x0D02 # 0x0D02 OBSOLETE (OBSOLETE)
+ CDX_PROP_OBJECTTAG_TRACKING = 0x0D03 # 0x0D03 THE TAG WILL PARTICIPATE IN TRACKING IF NON-ZERO. (CDXBOOLEAN)
+ CDX_PROP_OBJECTTAG_PERSISTENT = 0x0D04 # 0x0D04 THE TAG WILL BE RESAVED TO A CDX FILE IF NON-ZERO. (CDXBOOLEAN)
+ CDX_PROP_OBJECTTAG_VALUE = 0x0D05 # 0x0D05 THE VALUE IS A INT32 FLOAT64 OR UNFORMATTED STRING DEPENDING ON THE VALUE OF OBJECTTAG_TYPE. (VARIES)
+ CDX_PROP_POSITIONING = 0x0D06 # 0x0D06 HOW THE INDICATOR SHOULD BE POSITIONED WITH RESPECT TO ITS CONTAINING OBJECT. (INT8)
+ CDX_PROP_POSITIONINGANGLE = 0x0D07 # 0x0D07 ANGULAR POSITIONING IN RADIANS * 65536. (INT32)
+ CDX_PROP_POSITIONINGOFFSET = 0x0D08 # 0x0D08 OFFSET POSITIONING. (CDXPOINT2D)
+
+ # CDSEQUENCE PROPERTIES
+ CDX_PROP_SEQUENCE_IDENTIFIER = 0x0E00 # 0x0E00 A UNIQUE (BUT OTHERWISE RANDOM) IDENTIFIER FOR A GIVEN SEQUENCE OBJECT. (CDXSTRING)
+
+ # CDCROSSREFERENCE PROPERTIES
+ CDX_PROP_CROSSREFERENCE_CONTAINER = 0x0F00 # 0x0F00 AN EXTERNAL OBJECT CONTAINING (AS AN EMBEDDED OBJECT) THE DOCUMENT CONTAINING THE SEQUENCE OBJECT BEING REFERENCED. (CDXSTRING)
+ CDX_PROP_CROSSREFERENCE_DOCUMENT = 0x0F01 # 0x0F01 AN EXTERNAL DOCUMENT CONTAINING THE SEQUENCE OBJECT BEING REFERENCED. (CDXSTRING)
+ CDX_PROP_CROSSREFERENCE_IDENTIFIER = 0x0F02 # 0x0F02 A UNIQUE (BUT OTHERWISE RANDOM) IDENTIFIER FOR A GIVEN CROSS-REFERENCE OBJECT. (CDXSTRING)
+ CDX_PROP_CROSSREFERENCE_SEQUENCE = 0x0F03 # 0x0F03 A VALUE MATCHING THE SEQUENCEIDENTIFIER OF THE SEQUENCE OBJECT TO BE REFERENCED. (CDXSTRING)
+
+ # MISCELLANEOUS PROPERTIES.
+ CDX_PROP_TEMPLATE_PANEHEIGHT = 0x1000 # 0x1000 THE HEIGHT OF THE VIEWING WINDOW OF A TEMPLATE GRID. (CDXCOORDINATE)
+ CDX_PROP_TEMPLATE_NUMROWS = 0x1001 # 0x1001 THE NUMBER OF ROWS OF THE CDX TEMPLATEGRID OBJECT. (INT16)
+ CDX_PROP_TEMPLATE_NUMCOLUMNS = 0x1002 # 0x1002 THE NUMBER OF COLUMNS OF THE CDX TEMPLATEGRID OBJECT. (INT16)
+
+ CDX_PROP_GROUP_INTEGRAL = 0x1100 # 0x1100 THE GROUP IS CONSIDERED TO BE INTEGRAL (NON-SUBDIVISIBLE) IF NON-ZERO. (CDXBOOLEAN)
+
+ CDX_PROP_SPLITTERPOSITIONS = 0x1FF0 # 0x1FF0 AN ARRAY OF VERTICAL POSITIONS THAT SUBDIVIDE A PAGE INTO REGIONS. (CDXOBJECTIDARRAY)
+ CDX_PROP_PAGEDEFINITION = 0x1FF1 # 0x1FF1 AN ARRAY OF VERTICAL POSITIONS THAT SUBDIVIDE A PAGE INTO REGIONS. (CDXOBJECTIDARRAY)
+
+ # USER DEFINED PROPERTIES
+ # FIRST 1024 TAGS ARE RESERVED FOR TEMPORARY TAGS USED ONLY DURING THE RUNTIME.
+ CDX_USER_TEMPORARYBEGIN = CDX_TAG_USER_DEFINED
+ CDX_USER_TEMPORARYEND = CDX_TAG_USER_DEFINED + 0x0400
+
+ # OBJECTS.
+ CDX_OBJ_DOCUMENT = CDX_TAG_OBJECT # 0x8000
+ CDX_OBJ_PAGE = 0x8001 # 0x8001
+ CDX_OBJ_GROUP = 0x8002 # 0x8002
+ CDX_OBJ_FRAGMENT = 0x8003 # 0x8003
+ CDX_OBJ_NODE = 0x8004 # 0x8004
+ CDX_OBJ_BOND = 0x8005 # 0x8005
+ CDX_OBJ_TEXT = 0x8006 # 0x8006
+ CDX_OBJ_GRAPHIC = 0x8007 # 0x8007
+ CDX_OBJ_CURVE = 0x8008 # 0x8008
+ CDX_OBJ_EMBEDDEDOBJECT = 0x8009 # 0x8009
+ CDX_OBJ_NAMEDALTERNATIVEGROUP = 0x800A # 0x800A
+ CDX_OBJ_TEMPLATEGRID = 0x800B # 0x800B
+ CDX_OBJ_REGISTRYNUMBER = 0x800C # 0x800C
+ CDX_OBJ_REACTIONSCHEME = 0x800D # 0x800D
+ CDX_OBJ_REACTIONSTEP = 0x800E # 0x800E
+ CDX_OBJ_OBJECTDEFINITION = 0x800F # 0x800F
+ CDX_OBJ_SPECTRUM = 0x8010 # 0x8010
+ CDX_OBJ_OBJECTTAG = 0x8011 # 0x8011
+ CDX_OBJ_OLECLIENTITEM = 0x8012 # 0x8012 # OBSOLETE
+ CDX_OBJ_SEQUENCE = 0x8013 # 0x8013
+ CDX_OBJ_CROSSREFERENCE = 0x8014 # 0x8014
+ CDX_OBJ_SPLITTER = 0x8015 # 0x8015
+ CDX_OBJ_TABLE = 0x8016 # 0x8016
+ CDX_OBJ_BRACKETEDGROUP = 0x8017 # 0x8017
+ CDX_OBJ_BRACKETATTACHMENT = 0x8018 # 0x8018
+ CDX_OBJ_CROSSINGBOND = 0x8019 # 0x8019
+ CDX_OBJ_BORDER = 0x8020 # 0x8020
+ CDX_OBJ_GEOMETRY = 0x8021 # 0x8021
+ CDX_OBJ_CONSTRAINT = 0x8022 # 0x8022
+ CDX_OBJ_TLCPLATE = 0x8023 # 0x8023
+ CDX_OBJ_TLCLANE = 0x8024 # 0x8024
+ CDX_OBJ_TLCSPOT = 0x8025 # 0x8025
+ CDX_OBJ_CHEMICALPROPERTY = 0x8026
+ CDX_OBJ_ARROW = 0x8027
+ # ADD NEW OBJECTS HERE
+ CDX_OBJ_UNKNOWNOBJECT = 0x8FFF
+
+ # CDX_NODETYPE_UNSPECIFIED
+ # CDX_NODETYPE_ELEMENT
+ # CDX_NODETYPE_ELEMENTLIST
+ # CDX_NODETYPE_ELEMENTLISTNICKNAME
+ # CDX_NODETYPE_NICKNAME
+ # CDX_NODETYPE_FRAGMENT
+ # CDX_NODETYPE_FORMULA
+ # CDX_NODETYPE_GENERICNICKNAME
+ # CDX_NODETYPE_ANONYMOUSALTERNATIVEGROUP
+ # CDX_NODETYPE_NAMEDALTERNATIVEGROUP
+ # CDX_NODETYPE_MULTIATTACHMENT
+ # CDX_NODETYPE_VARIABLEATTACHMENT
+ # CDX_NODETYPE_EXTERNALCONNECTIONPOINT
+ # CDX_NODETYPE_LINKNODE
+
+ # CDX_LABELDISPLAY_AUTO
+ # CDX_LABELDISPLAY_LEFT
+ # CDX_LABELDISPLAY_CENTER
+ # CDX_LABELDISPLAY_RIGHT
+ # CDX_LABELDISPLAY_ABOVE
+ # CDX_LABELDISPLAY_BELOW
+ # CDX_LABELDISPLAY_BESTINITIAL
+
+ CDX_RADICAL_NONE = 0
+ CDX_RADICAL_SINGLET = 1 # DIRADICAL SINGLET (TWO DOTS)
+ CDX_RADICAL_DOUBLET = 2 # MONORADICAL (ONE DOT)
+ CDX_RADICAL_TRIPLET = 3 # DIRADICAL TRIPLET (TWO DOTS)
+
+ CDX_ISOTOPE_NATURAL = 0
+
+ CDX_RINGBONDCOUNT_UNSPECIFIED = -1
+ CDX_RINGBONDCOUNT_NORINGBONDS = 0
+ CDX_RINGBONDCOUNT_ASDRAWN = 1
+ CDX_RINGBONDCOUNT_SIMPLERING = 2
+ CDX_RINGBONDCOUNT_FUSION = 3
+ CDX_RINGBONDCOUNT_SPIROORHIGHER = 4
+
+ CDX_UNSATURATION_UNSPECIFIED = 0
+ CDX_UNSATURATION_MUSTBEABSENT = 1
+ CDX_UNSATURATION_MUSTBEPRESENT = 2
+ # CDX_UNSATURATIONLASTENUM
+
+ CDX_REACTIONSTEREO_UNSPECIFIED = 0
+ CDX_REACTIONSTEREO_INVERSION = 1
+ CDX_REACTIONSTEREO_RETENTION = 2
+
+ CDX_TRANSLATION_EQUAL = 0
+ CDX_TRANSLATION_BROAD = 1
+ CDX_TRANSLATION_NARROW = 2
+ CDX_TRANSLATION_ANY = 3
+
+ CDX_ABUNDANCE_UNSPECIFIED = 0
+ CDX_ABUNDANCE_ANY = 1
+ CDX_ABUNDANCE_NATURAL = 2
+ CDX_ABUNDANCE_ENRICHED = 3
+ CDX_ABUNDANCE_DEFICIENT = 4
+ CDX_ABUNDANCE_NONNATURAL = 5
+
+ CDX_EXTERNALCONNECTION_UNSPECIFIED = 0
+ CDX_EXTERNALCONNECTION_DIAMOND = 1
+ CDX_EXTERNALCONNECTION_STAR = 2
+ CDX_EXTERNALCONNECTION_POLYMERBEAD = 3
+ CDX_EXTERNALCONNECTION_WAVY = 4
+
+ CDX_ATOMGEOMETRY_UNKNOWN = 0
+ CDX_ATOMGEOMETRY_1LIGAND = 1
+ CDX_ATOMGEOMETRY_LINEAR = 2
+ CDX_ATOMGEOMETRY_BENT = 3
+ CDX_ATOMGEOMETRY_TRIGONALPLANAR = 4
+ CDX_ATOMGEOMETRY_TRIGONALPYRAMIDAL = 5
+ CDX_ATOMGEOMETRY_SQUAREPLANAR = 6
+ CDX_ATOMGEOMETRY_TETRAHEDRAL = 7
+ CDX_ATOMGEOMETRY_TRIGONALBIPYRAMIDAL = 8
+ CDX_ATOMGEOMETRY_SQUAREPYRAMIDAL = 9
+ CDX_ATOMGEOMETRY_5LIGAND = 10
+ CDX_ATOMGEOMETRY_OCTAHEDRAL = 11
+ CDX_ATOMGEOMETRY_6LIGAND = 12
+ CDX_ATOMGEOMETRY_7LIGAND = 13
+ CDX_ATOMGEOMETRY_8LIGAND = 14
+ CDX_ATOMGEOMETRY_9LIGAND = 15
+ CDX_ATOMGEOMETRY_10LIGAND = 16
+
+ CDX_BONDORDER_SINGLE = 0x0001
+ CDX_BONDORDER_DOUBLE = 0x0002
+ CDX_BONDORDER_TRIPLE = 0x0004
+ CDX_BONDORDER_QUADRUPLE = 0x0008
+ CDX_BONDORDER_QUINTUPLE = 0x0010
+ CDX_BONDORDER_SEXTUPLE = 0x0020
+ CDX_BONDORDER_HALF = 0x0040
+ CDX_BONDORDER_ONEHALF = 0x0080
+ CDX_BONDORDER_TWOHALF = 0x0100
+ CDX_BONDORDER_THREEHALF = 0x0200
+ CDX_BONDORDER_FOURHALF = 0x0400
+ CDX_BONDORDER_FIVEHALF = 0x0800
+ CDX_BONDORDER_DATIVE = 0x1000
+ CDX_BONDORDER_IONIC = 0x2000
+ CDX_BONDORDER_HYDROGEN = 0x4000
+ CDX_BONDORDER_THREECENTER = 0x8000
+ CDX_BONDORDER_SINGLEORDOUBLE = CDX_BONDORDER_SINGLE | CDX_BONDORDER_DOUBLE
+ CDX_BONDORDER_SINGLEORAROMATIC = CDX_BONDORDER_SINGLE | CDX_BONDORDER_ONEHALF
+ CDX_BONDORDER_DOUBLEORAROMATIC = CDX_BONDORDER_DOUBLE | CDX_BONDORDER_ONEHALF
+ CDX_BONDORDER_ANY = -1
+
+ CDX_BONDDISPLAY_SOLID = 0
+ CDX_BONDDISPLAY_DASH = 1
+ CDX_BONDDISPLAY_HASH = 2
+ CDX_BONDDISPLAY_WEDGEDHASHBEGIN = 3
+ CDX_BONDDISPLAY_WEDGEDHASHEND = 4
+ CDX_BONDDISPLAY_BOLD = 5
+ CDX_BONDDISPLAY_WEDGEBEGIN = 6
+ CDX_BONDDISPLAY_WEDGEEND = 7
+ CDX_BONDDISPLAY_WAVY = 8
+ CDX_BONDDISPLAY_HOLLOWWEDGEBEGIN = 9
+ CDX_BONDDISPLAY_HOLLOWWEDGEEND = 10
+ CDX_BONDDISPLAY_WAVYWEDGEBEGIN = 11
+ CDX_BONDDISPLAY_WAVYWEDGEEND = 12
+ CDX_BONDDISPLAY_DOT = 13
+ CDX_BONDDISPLAY_DASHDOT = 14
+
+ CDX_BONDDOUBLEPOSITION_AUTOCENTER = 0x0000
+ CDX_BONDDOUBLEPOSITION_AUTORIGHT = 0x0001
+ CDX_BONDDOUBLEPOSITION_AUTOLEFT = 0x0002
+ CDX_BONDDOUBLEPOSITION_USERCENTER = 0x0100
+ CDX_BONDDOUBLEPOSITION_USERRIGHT = 0x0101
+ CDX_BONDDOUBLEPOSITION_USERLEFT = 0x0102
+
+ CDX_BONDTOPOLOGY_UNSPECIFIED = 0
+ CDX_BONDTOPOLOGY_RING = 1
+ CDX_BONDTOPOLOGY_CHAIN = 2
+ CDX_BONDTOPOLOGY_RINGORCHAIN = 3
+
+ CDX_BONDREACTIONPARTICIPATION_UNSPECIFIED = 0
+ CDX_BONDREACTIONPARTICIPATION_REACTIONCENTER = 1
+ CDX_BONDREACTIONPARTICIPATION_MAKEORBREAK = 2
+ CDX_BONDREACTIONPARTICIPATION_CHANGETYPE = 3
+ CDX_BONDREACTIONPARTICIPATION_MAKEANDCHANGE = 4
+ CDX_BONDREACTIONPARTICIPATION_NOTREACTIONCENTER = 5
+ CDX_BONDREACTIONPARTICIPATION_NOCHANGE = 6
+ CDX_BONDREACTIONPARTICIPATION_UNMAPPED = 7
+
+ CDX_TEXTJUSTIFICATION_RIGHT = -1
+ # CDX_TEXTJUSTIFICATION_LEFT
+ # CDX_TEXTJUSTIFICATION_CENTER
+ # CDX_TEXTJUSTIFICATION_FULL
+ # CDX_TEXTJUSTIFICATION_ABOVE
+ # CDX_TEXTJUSTIFICATION_BELOW
+ # CDX_TEXTJUSTIFICATION_AUTO
+ # CDX_TEXTJUSTIFICATION_BESTINITIAL
+
+ # CDX_TAG_TYPE_UNKNOWN "UNKNOWN"
+ # CDX_TAG_TYPE_QUERY "QUERY"
+ # CDX_TAG_TYPE_RXN "REACTION"
+ # CDX_TAG_TYPE_STEREO "STEREO"
+ # CDX_TAG_TYPE_NUMBER "NUMBER"
+ # CDX_TAG_TYPE_HEADING "HEADING"
+ # CDX_TAG_TYPE_IDTERM "IDTERM"
+ # CDX_TAG_TYPE_BRACKETUSAGE "BRACKETUSAGE"
+ # CDX_TAG_TYPE_POLYMERREPEAT "POLYMERREPEAT"
+ # CDX_TAG_TYPE_POLYMERFLIP "POLYMERFLIP"
+ # CDX_TAG_TYPE_DEVIATION "DEVIATION"
+ # CDX_TAG_TYPE_DISTANCE "DISTANCE"
+ # CDX_TAG_TYPE_ANGLE "ANGLE"
+ # CDX_TAG_TYPE_RF "RF"
+
+ # CDX_POSITIONINGTYPE_AUTO = 0
+ # CDX_POSITIONINGTYPE_ANGLE
+ # CDX_POSITIONINGTYPE_OFFSET
+ # CDX_POSITIONINGTYPE_ABSOLUTE
+
+ # CDX_PAGEDEFINITION_UNDEFINED = 0
+ # CDX_PAGEDEFINITION_CENTER
+ # CDX_PAGEDEFINITION_TL4
+ # CDX_PAGEDEFINITION_IDTERM
+ # CDX_PAGEDEFINITION_FLUSHLEFT
+ # CDX_PAGEDEFINITION_FLUSHRIGHT
+ # CDX_PAGEDEFINITION_REACTION1
+ # CDX_PAGEDEFINITION_REACTION2
+ # CDX_PAGEDEFINITION_MULTICOLUMNTL4
+ # CDX_PAGEDEFINITION_MULTICOLUMNNONTL4
+ # CDX_PAGEDEFINITION_USERDEFINED
+
+ CDX_LINEHEIGHT_VARIABLE = 0
+ CDX_LINEHEIGHT_AUTOMATIC = 1
+
+ # CDX_GRAPHICTYPE_UNDEFINED = 0
+ # CDX_GRAPHICTYPE_LINE
+ # CDX_GRAPHICTYPE_ARC
+ # CDX_GRAPHICTYPE_RECTANGLE
+ # CDX_GRAPHICTYPE_OVAL
+ # CDX_GRAPHICTYPE_ORBITAL
+ # CDX_GRAPHICTYPE_BRACKET
+ # CDX_GRAPHICTYPE_SYMBOL
+
+ # CDX_BRACKETTYPE_ROUNDPAIR
+ # CDX_BRACKETTYPE_SQUAREPAIR
+ # CDX_BRACKETTYPE_CURLYPAIR
+ # CDX_BRACKETTYPE_SQUARE
+ # CDX_BRACKETTYPE_CURLY
+ # CDX_BRACKETTYPE_ROUND
+
+ CDX_RECTANGLETYPE_PLAIN = 0x0000
+ CDX_RECTANGLETYPE_ROUNDEDGE = 0x0001
+ CDX_RECTANGLETYPE_SHADOW = 0x0002
+ CDX_RECTANGLETYPE_SHADED = 0x0004
+ CDX_RECTANGLETYPE_FILLED = 0x0008
+ CDX_RECTANGLETYPE_DASHED = 0x0010
+ CDX_RECTANGLETYPE_BOLD = 0x0020
+
+ CDX_OVALTYPE_CIRCLE = 0x0001
+ CDX_OVALTYPE_SHADED = 0x0002
+ CDX_OVALTYPE_FILLED = 0x0004
+ CDX_OVALTYPE_DASHED = 0x0008
+ CDX_OVALTYPE_BOLD = 0x0010
+ CDX_OVALTYPE_SHADOWED = 0x0020
+
+ # CDX_SYMBOLTYPE_LONEPAIR
+ # CDX_SYMBOLTYPE_ELECTRON
+ # CDX_SYMBOLTYPE_RADICALCATION
+ # CDX_SYMBOLTYPE_RADICALANION
+ # CDX_SYMBOLTYPE_CIRCLEPLUS
+ # CDX_SYMBOLTYPE_CIRCLEMINUS
+ # CDX_SYMBOLTYPE_DAGGER
+ # CDX_SYMBOLTYPE_DOUBLEDAGGER
+ # CDX_SYMBOLTYPE_PLUS
+ # CDX_SYMBOLTYPE_MINUS
+ # CDX_SYMBOLTYPE_RACEMIC
+ # CDX_SYMBOLTYPE_ABSOLUTE
+ # CDX_SYMBOLTYPE_RELATIVE
+
+ CDX_LINETYPE_SOLID = 0x0000
+ CDX_LINETYPE_DASHED = 0x0001
+ CDX_LINETYPE_BOLD = 0x0002
+ CDX_LINETYPE_WAVY = 0x0004
+
+ CDX_ARROWTYPE_NOHEAD = 0
+ CDX_ARROWTYPE_HALFHEAD = 1
+ CDX_ARROWTYPE_FULLHEAD = 2
+ CDX_ARROWTYPE_RESONANCE = 4
+ CDX_ARROWTYPE_EQUILIBRIUM = 8
+ CDX_ARROWTYPE_HOLLOW = 16
+ CDX_ARROWTYPE_RETROSYNTHETIC = 32
+
+ # CDX_ORBITALTYPE_S # S ORBITAL
+ # CDX_ORBITALTYPE_OVAL # OVAL-SHAPED SIGMA OR PI ORBITAL
+ # CDX_ORBITALTYPE_LOBE # ONE LOBE OF A P ORBITAL
+ # CDX_ORBITALTYPE_P # COMPLETE P ORBITAL
+ # CDX_ORBITALTYPE_HYBRIDPLUS # HYDRID ORBITAL
+ # CDX_ORBITALTYPE_HYBRIDMINUS # HYDRID ORBITAL (OPPOSITE SHADING)
+ # CDX_ORBITALTYPE_DZ2PLUS # DZ2 ORBITAL
+ # CDX_ORBITALTYPE_DZ2MINUS # DZ2 ORBITAL (OPPOSITE SHADING)
+ # CDX_ORBITALTYPE_DXY # DXY ORBITAL
+
+ # CDX_ORBITALTYPE_SSHADED = 0x0100 # SHADED S ORBITAL
+ # CDX_ORBITALTYPE_OVALSHADED # SHADED OVAL-SHAPED SIGMA OR PI ORBITAL
+ # CDX_ORBITALTYPE_LOBESHADED # SHADED SINGLE LOBE OF A P ORBITAL
+ # CDX_ORBITALTYPE_PSHADED # SHADED COMPLETE P ORBITAL
+
+ # CDX_ORBITALTYPE_SFILLED = 0x0200 # FILLED S ORBITAL
+ # CDX_ORBITALTYPE_OVALFILLED # FILLED OVAL-SHAPED SIGMA OR PI ORBITAL
+ # CDX_ORBITALTYPE_LOBEFILLED # FILLED SINGLE LOBE OF A P ORBITAL
+ # CDX_ORBITALTYPE_PFILLED # FILLED COMPLETE P ORBITAL
+ # CDX_ORBITALTYPE_HYBRIDPLUSFILLED # FILLED HYDRID ORBITAL
+ # CDX_ORBITALTYPE_HYBRIDMINUSFILLED # FILLED HYDRID ORBITAL (OPPOSITE SHADING)
+ # CDX_ORBITALTYPE_DZ2PLUSFILLED # FILLED DZ2 ORBITAL
+ # CDX_ORBITALTYPE_DZ2MINUSFILLED # FILLED DZ2 ORBITAL (OPPOSITE SHADING)
+ # CDX_ORBITALTYPE_DXYFILLED # FILLED DXY ORBITAL
+
+ CDX_BRACKETUSAGE_UNSPECIFIED = 0
+ CDX_BRACKETUSAGE_ANYPOLYMER = 18
+ CDX_BRACKETUSAGE_COMPONENT = 13
+ CDX_BRACKETUSAGE_COPOLYMER = 6
+ CDX_BRACKETUSAGE_COPOLYMERALTERNATING = 7
+ CDX_BRACKETUSAGE_COPOLYMERBLOCK = 9
+ CDX_BRACKETUSAGE_COPOLYMERRANDOM = 8
+ CDX_BRACKETUSAGE_CROSSLINK = 10
+ CDX_BRACKETUSAGE_GENERIC = 17
+ CDX_BRACKETUSAGE_GRAFT = 11
+ CDX_BRACKETUSAGE_MER = 5
+ CDX_BRACKETUSAGE_MIXTUREORDERED = 15
+ CDX_BRACKETUSAGE_MIXTUREUNORDERED = 14
+ CDX_BRACKETUSAGE_MODIFICATION = 12
+ CDX_BRACKETUSAGE_MONOMER = 4
+ CDX_BRACKETUSAGE_MULTIPLEGROUP = 16
+ CDX_BRACKETUSAGE_SRU = 3
+ CDX_BRACKETUSAGE_UNUSED1 = 1
+ CDX_BRACKETUSAGE_UNUSED2 = 2
+
+ # CDX_POLYMERREPEATPATTERN_HEADTOTAIL = 0
+ # CDX_POLYMERREPEATPATTERN_HEADTOHEAD
+ # CDX_POLYMERREPEATPATTERN_EITHERUNKNOWN
+
+ # CDX_POLYMERFLIPTYPE_UNSPECIFIED = 0
+ # CDX_POLYMERFLIPTYPE_NOFLIP
+ # CDX_POLYMERFLIPTYPE_FLIP
+
+ # CDX_SPECTRUMYTYPE_UNKNOWN
+ # CDX_SPECTRUMYTYPE_ABSORBANCE
+ # CDX_SPECTRUMYTYPE_TRANSMITTANCE
+ # CDX_SPECTRUMYTYPE_PERCENTTRANSMITTANCE
+ # CDX_SPECTRUMYTYPE_OTHER
+ # CDX_SPECTRUMYTYPE_ARBITRARYUNITS
+
+ # CDX_SPECTRUMXTYPE_UNKNOWN
+ # CDX_SPECTRUMXTYPE_WAVENUMBERS
+ # CDX_SPECTRUMXTYPE_MICRONS
+ # CDX_SPECTRUMXTYPE_HERTZ
+ # CDX_SPECTRUMXTYPE_MASSUNITS
+ # CDX_SPECTRUMXTYPE_PARTSPERMILLION
+ # CDX_SPECTRUMXTYPE_OTHER
+
+ # CDX_SPECTRUMCLASS_UNKNOWN
+ # CDX_SPECTRUMCLASS_CHROMATOGRAM
+ # CDX_SPECTRUMCLASS_INFRARED
+ # CDX_SPECTRUMCLASS_UVVIS
+ # CDX_SPECTRUMCLASS_XRAYDIFFRACTION
+ # CDX_SPECTRUMCLASS_MASSSPECTRUM
+ # CDX_SPECTRUMCLASS_NMR
+ # CDX_SPECTRUMCLASS_RAMAN
+ # CDX_SPECTRUMCLASS_FLUORESCENCE
+ # CDX_SPECTRUMCLASS_ATOMIC
+
+ # CDX_DRAWINGSPACE_PAGES
+ # CDX_DRAWINGSPACE_POSTER
+
+ # CDX_CIPATOM_UNDETERMINED = 0
+ # CDX_CIPATOM_NONE
+ # CDX_CIPATOM_R
+ # CDX_CIPATOM_S
+ # CDX_CIPATOM_R
+ # CDX_CIPATOM_S
+ # CDX_CIPATOM_UNSPECIFIED # NO HASH/WEDGE BUT IF THERE WERE ONE IT WOULD HAVE STEREOCHEMISTRY.
+
+ # CDX_CIPBOND_UNDETERMINED = 0
+ # CDX_CIPBOND_NONE
+ # CDX_CIPBOND_E
+ # CDX_CIPBOND_Z
+
+ # CDX_OBJECTTAGTYPE_UNDEFINED = 0
+ # CDX_OBJECTTAGTYPE_DOUBLE
+ # CDX_OBJECTTAGTYPE_LONG
+ # CDX_OBJECTTAGTYPE_STRING
+
+ # CDX_SIDETYPE_UNDEFINED = 0
+ # CDX_SIDETYPE_TOP
+ # CDX_SIDETYPE_LEFT
+ # CDX_SIDETYPE_BOTTOM
+ # CDX_SIDETYPE_RIGHT
+
+ # CDX_GEOMETRICFEATURE_UNDEFINED = 0
+ # CDX_GEOMETRICFEATURE_POINTFROMPOINTPOINTDISTANCE
+ # CDX_GEOMETRICFEATURE_POINTFROMPOINTPOINTPERCENTAGE
+ # CDX_GEOMETRICFEATURE_POINTFROMPOINTNORMALDISTANCE
+ # CDX_GEOMETRICFEATURE_LINEFROMPOINTS
+ # CDX_GEOMETRICFEATURE_PLANEFROMPOINTS
+ # CDX_GEOMETRICFEATURE_PLANEFROMPOINTLINE
+ # CDX_GEOMETRICFEATURE_CENTROIDFROMPOINTS
+ # CDX_GEOMETRICFEATURE_NORMALFROMPOINTPLANE
+
+ # CDX_CONSTRAINTTYPE_UNDEFINED = 0
+ # CDX_CONSTRAINTTYPE_DISTANCE
+ # CDX_CONSTRAINTTYPE_ANGLE
+ # CDX_CONSTRAINTTYPE_EXCLUSIONSPHERE
+
+ CDX_CHARSETUNKNOWN = 0
+ CDX_CHARSETEBCDICOEM = 37
+ CDX_CHARSETMSDOSUS = 437
+ CDX_CHARSETEBCDIC500V1 = 500
+ CDX_CHARSETARABICASMO708 = 708
+ # CDX_CHARSETARABICASMO449P
+ # CDX_CHARSETARABICTRANSPARENT
+ CDX_CHARSETARABICTRANSPARENTASMO = 720
+ CDX_CHARSETGREEK437G = 737
+ CDX_CHARSETBALTICOEM = 775
+ CDX_CHARSETMSDOSLATIN1 = 850
+ CDX_CHARSETMSDOSLATIN2 = 852
+ CDX_CHARSETIBMCYRILLIC = 855
+ CDX_CHARSETIBMTURKISH = 857
+ CDX_CHARSETMSDOSPORTUGUESE = 860
+ # CDX_CHARSETMSDOSICELANDIC
+ # CDX_CHARSETHEBREWOEM
+ # CDX_CHARSETMSDOSCANADIANFRENCH
+ # CDX_CHARSETARABICOEM
+ # CDX_CHARSETMSDOSNORDIC
+ # CDX_CHARSETMSDOSRUSSIAN
+ CDX_CHARSETIBMMODERNGREEK = 869
+ CDX_CHARSETTHAI = 874
+ # CDX_CHARSETEBCDIC
+ CDX_CHARSETJAPANESE = 932
+ CDX_CHARSETCHINESESIMPLIFIED = 936 # PRC SINGAPORE
+ CDX_CHARSETKOREAN = 949
+ CDX_CHARSETCHINESETRADITIONAL = 950 # TAIWAN HONG KONG
+ CDX_CHARSETUNICODEISO10646 = 1200
+ CDX_CHARSETWIN31EASTERNEUROPEAN = 1250
+ # CDX_CHARSETWIN31CYRILLIC
+ # CDX_CHARSETWIN31LATIN1
+ # CDX_CHARSETWIN31GREEK
+ # CDX_CHARSETWIN31TURKISH
+ # CDX_CHARSETHEBREW
+ # CDX_CHARSETARABIC
+ # CDX_CHARSETBALTIC
+ # CDX_CHARSETVIETNAMESE
+ CDX_CHARSETKOREANJOHAB = 1361
+ CDX_CHARSETMACROMAN = 10000
+ # CDX_CHARSETMACJAPANESE
+ # CDX_CHARSETMACTRADCHINESE
+ # CDX_CHARSETMACKOREAN
+ # CDX_CHARSETMACARABIC
+ # CDX_CHARSETMACHEBREW
+ # CDX_CHARSETMACGREEK
+ # CDX_CHARSETMACCYRILLIC
+ # CDX_CHARSETMACRESERVED
+ # CDX_CHARSETMACDEVANAGARI
+ # CDX_CHARSETMACGURMUKHI
+ # CDX_CHARSETMACGUJARATI
+ # CDX_CHARSETMACORIYA
+ # CDX_CHARSETMACBENGALI
+ # CDX_CHARSETMACTAMIL
+ # CDX_CHARSETMACTELUGU
+ # CDX_CHARSETMACKANNADA
+ # CDX_CHARSETMACMALAYALAM
+ # CDX_CHARSETMACSINHALESE
+ # CDX_CHARSETMACBURMESE
+ # CDX_CHARSETMACKHMER
+ # CDX_CHARSETMACTHAI
+ # CDX_CHARSETMACLAO
+ # CDX_CHARSETMACGEORGIAN
+ # CDX_CHARSETMACARMENIAN
+ # CDX_CHARSETMACSIMPCHINESE
+ # CDX_CHARSETMACTIBETAN
+ # CDX_CHARSETMACMONGOLIAN
+ # CDX_CHARSETMACETHIOPIC
+ # CDX_CHARSETMACCENTRALEUROROMAN
+ # CDX_CHARSETMACVIETNAMESE
+ # CDX_CHARSETMACEXTARABIC
+ # CDX_CHARSETMACUNINTERPRETED
+ CDX_CHARSETMACICELANDIC = 10079
+ CDX_CHARSETMACTURKISH = 10081
+ end
+ end
+end
diff --git a/lib/cdx/parser/position_util.rb b/lib/cdx/parser/position_util.rb
new file mode 100644
index 0000000000..381e453398
--- /dev/null
+++ b/lib/cdx/parser/position_util.rb
@@ -0,0 +1,69 @@
+# frozen_string_literal: true
+
+module Cdx
+ module Parser
+ # Utilities for position detection
+ module PositionUtil
+ include GeometryUtil
+
+ def line?(mol)
+ return false if mol.num_atoms < 3
+
+ points = []
+ (1..mol.num_atoms).each do |i|
+ point = point_from_atom(mol.get_atom(i))
+ points << point
+ next if i < 3
+ seg1 = Geometry::Segment.new(points[i - 3], points[i - 2])
+ seg2 = Geometry::Segment.new(points[i - 2], points[i - 1])
+ return false unless seg1.lies_on_one_line_with?(seg2)
+ end
+
+ true
+ end
+
+ def detect_reaction_arrow_id(value, arrow_list)
+ center = value[:center]
+ return if center.nil?
+
+ min_id = arrow_list.first
+ min = 10_000_000
+
+ arrow_list.each do |id|
+ arrow = @arrowmap[id]
+ acenter = arrow[:center]
+ next unless acenter
+ dist = Geometry.distance(center, acenter)
+ if min > dist
+ min = dist
+ min_id = id
+ end
+ end
+
+ min_id
+ end
+
+ def detect_position(mol, arrow)
+ is_around = polygon_around_arrow?(mol[:polygon], arrow)
+ return 'reagents' if is_around
+
+ acenter = arrow[:center]
+ upper, = center_points(arrow)
+
+ pside = side_value(mol[:center], acenter, upper)
+
+ ahead_point = Geometry::Point.new(arrow[:head][:x], arrow[:head][:y])
+ head_side = side_value(ahead_point, acenter, upper)
+
+ (pside * head_side).positive? ? 'products' : 'reactants'
+ end
+
+ def side_value(point, pvector1, pvector2)
+ a = (point.x - pvector1.x) * (pvector2.y - pvector1.y)
+ b = (point.y - pvector1.y) * (pvector2.x - pvector1.x)
+
+ a - b
+ end
+ end
+ end
+end
diff --git a/lib/cdx/parser/reaction_step.rb b/lib/cdx/parser/reaction_step.rb
new file mode 100644
index 0000000000..debe6d919d
--- /dev/null
+++ b/lib/cdx/parser/reaction_step.rb
@@ -0,0 +1,88 @@
+# frozen_string_literal: true
+
+module Cdx
+ module Parser
+ # CDX Reaction parser
+ module ReactionStep
+ include Base
+
+ def do_reaction(cdxr, cid)
+ return if @is_ignore
+
+ react = {}
+ @reactionmap[cid] = react
+
+ while (tag = cdxr.read_next).positive?
+ data = cdxr.data
+ case tag
+ when CDX_PROP_REACTIONSTEP_ARROWS
+ add_arrow(react, read_int32(data))
+ when CDX_PROP_REACTIONSTEP_REACTANTS
+ add_to_react(cdxr, data, react, 'reactants')
+ when CDX_PROP_REACTIONSTEP_PRODUCTS
+ add_to_react(cdxr, data, react, 'products')
+ when CDX_PROP_REACTIONSTEP_OBJECTSABOVEARROW,
+ CDX_PROP_REACTIONSTEP_OBJECTSBELOWARROW
+ add_to_react(cdxr, data, react, 'reagents')
+ end
+ end
+ end
+
+ def do_xml_reaction(nodes)
+ return if @is_ignore
+
+ nodes.each do |node|
+ next unless node.name == 'step'
+ nid = (node.attr('id') || 0).to_i
+ react = {}
+
+ @reactionmap[nid] = react
+
+ node.attributes.each do |key, value|
+ case key
+ when 'ReactionStepArrows'
+ add_arrow(react, value.text.to_i)
+ when 'ReactionStepReactants'
+ xml_add_to_react(value, react, 'reactants')
+ when 'ReactionStepProducts'
+ xml_add_to_react(value, react, 'products')
+ when 'ReactionStepObjectsAboveArrow',
+ 'ReactionStepObjectsBelowArrow'
+ xml_add_to_react(value, react, 'reagents')
+ end
+ end
+ end
+ end
+
+ def xml_add_to_react(value, react, type)
+ value.text.split(' ').each do |val|
+ id = val.to_i
+ react[type.to_sym] = [] if react[type.to_sym].nil?
+ react[type.to_sym].push(id)
+ map_set_added(id)
+ end
+ end
+
+ def add_to_react(cdxr, data, react, type)
+ (cdxr.len / 4).times do
+ id = read_int32(data)
+
+ react[type.to_sym] = [] if react[type.to_sym].nil?
+ react[type.to_sym].push(id)
+ map_set_added(id)
+ end
+ end
+
+ def map_set_added(id)
+ # return @toplvmap unless @toplvmap[id].nil?
+ @molmap[id]&.merge!(added: true)
+ @textmap[id]&.merge!(added: true)
+ @groupmap[id]&.each { |m| m[:added] = true }
+ end
+
+ def add_arrow(react, arrow_id)
+ react[:arrow] = @graphicmap[arrow_id] || arrow_id
+ end
+ end
+ end
+end
diff --git a/lib/cdx/parser/reader.rb b/lib/cdx/parser/reader.rb
new file mode 100644
index 0000000000..6b33dd4e6a
--- /dev/null
+++ b/lib/cdx/parser/reader.rb
@@ -0,0 +1,82 @@
+# frozen_string_literal: true
+
+module Cdx
+ # CDX parser, port from OpenBabel chemdrawcdx
+ module Parser
+ # Class which traverse the tree in CDX binary files
+ class Reader
+ include Cdx::Parser::Header
+ attr_reader :len, :valid, :iter, :bin
+
+ def initialize(file, is_path)
+ @ids = []
+ @depth = 0
+
+ @bin = is_path ? IO.binread(file) : file
+
+ if @bin[0, CDX_HEADER_STRING_LEN] == CDX_HEADER_STRING
+ @iter = CDX_HEADER_LENGTH
+ @valid = true
+ else
+ @valid = false
+ end
+ end
+
+ def end?
+ @iter > @bin.size
+ end
+
+ def read_next(objects_only = false, target_depth = -2)
+ while @iter <= @bin.size
+ tag = read_int16
+ return -1 if tag.nil?
+ if tag.zero?
+ begin @iter = @bin.size; return 0 end if @depth.zero?
+ @depth -= 1
+ @ids.pop
+ return 0 if target_depth.negative? || @depth == target_depth
+ elsif (tag & CDX_TAG_OBJECT).nonzero?
+ @ids.push(read_int32)
+ @depth += 1
+ return tag if target_depth.negative? || @depth - 1 == target_depth
+ else
+ @len = read_int16
+ unless objects_only
+ @buf = @bin[@iter, @len]
+ @iter += @len
+ return tag
+ end
+ @iter += @len
+ end
+ end
+ 0
+ end
+
+ def ignore_object
+ read_next(true, @depth - 1)
+ end
+
+ def current_id
+ @ids.last
+ end
+
+ def data
+ @buf.dup
+ end
+
+ private
+
+ def read_int16
+ buf = @bin[@iter, 2]
+ @iter += 2
+ buf.unpack('S*')[0]
+ end
+
+ def read_int32
+ buf = @bin[@iter, 4]
+ @iter += 4
+ buf.unpack('L*')[0]
+ end
+ end
+ end
+end
diff --git a/lib/cdx/parser/refine.rb b/lib/cdx/parser/refine.rb
new file mode 100644
index 0000000000..b4ff629ee5
--- /dev/null
+++ b/lib/cdx/parser/refine.rb
@@ -0,0 +1,277 @@
+# frozen_string_literal: true
+
+# Overrides Array class for sorted? method
+class Array
+ def sorted?
+ each_cons(2).all? { |a, b| (a <=> b) <= 0 }
+ end
+end
+
+module Cdx
+ module Parser
+ # CDX Graphic parser
+ module Refine
+ include RefineUtil
+
+ def refine_data
+ # First refine the molecules
+ refine_molmap
+
+ if @arrowmap.size == 1 && @reactionmap.size.zero? && @tempid > 10_000_000
+ # ELN DOCX
+ return refine_eln_reaction
+ end
+
+ # Extend the arrow based on the @ext_arrowmap
+ refine_arrow
+
+ # Molecules and text are processed, now adding to reaction properly
+ refine_reaction
+
+ true
+ end
+
+ # Check text within mol
+ # Scan molmap and retrieve the coord from its atom
+ # Detect if there are any "arrow" molecule, the one which
+ # people drawing to be viewed as an arrow
+ def refine_molmap
+ @molmap.each do |key, val|
+ # Sometime user add text as alias to a single molecule
+ # These are considered as text
+ unless molecule?(val[:mol])
+ # Save removed key somewhere, not in used right now
+ @temp_removed[key] = val
+
+ move_mol_to_text(key, val)
+ remove_from_reactionmap(key)
+ @molmap[key] = nil
+ next
+ end
+
+ val[:polygon] = molecule_polygon(val[:mol])
+ val[:box] = val[:polygon].bounding_box
+ val[:center] = bb_center(val[:box])
+
+ # Check if user draw a molecule as an "extended" arrow
+ next unless line?(val[:mol])
+ @ext_arrowmap[key] = val
+ @molmap[key] = nil
+ end
+
+ # - Remove key with nil value
+ # - Remove atom which has no bond connected
+ clean_molmap
+
+ @molmap.each_value do |val|
+ val[:smi] = molecule_output(val[:mol], 'can')
+ end
+ end
+
+ def refine_reaction
+ # Check if there are any "unused" object
+ # Detect and add it to correspond reaction group
+ refine_unused
+
+ @reactionmap.each_value do |value|
+ react = map_reaction_by_id(value)
+ @reaction.push(react)
+ end
+
+ # Link text to molecule of each group
+ refine_reaction_group
+ end
+
+ def refine_unused
+ # Arrange molecule to reaction if current ChemDraw version
+ # fits with IGNORE_VERSION
+ assemble_to_reaction if @is_ignore
+
+ loop do
+ unused = all_unused
+ ral = reaction_arrow_list
+
+ unused.each do |k, v|
+ arrow_id = detect_reaction_arrow_id(v, ral)
+ rid = reaction_id_from_arrow(arrow_id)
+ next if rid.nil?
+ add_to_reaction_by_id(k, v, rid)
+ end
+
+ # Remove invalid reaction before so that "unused" object can be linked
+ # to the valid reaction
+ remove_invalid_reaction
+
+ invalid_count = @reactionmap.select { |_, v|
+ invalid_reaction?(v)
+ }.count
+
+ break if invalid_count.zero? || @arrowmap.count.zero?
+ end
+ end
+
+ def remove_invalid_reaction
+ @reactionmap.delete_if do |_, val| invalid_reaction?(val) end
+ used_mols = @reactionmap.values.uniq
+ @molmap.each do |k, v|
+ v.delete(:added) unless used_mols.include?(k)
+ end
+ end
+
+ def add_to_reaction_by_id(key, obj, reaction_id)
+ reaction = @reactionmap[reaction_id]
+ arrow = @arrowmap[reaction[:arrow]]
+ group = detect_position(obj, arrow)
+
+ return if group.nil?
+
+ sgroup = group.to_sym
+ reaction[sgroup] = [] if reaction[group.to_sym].nil?
+ reaction[sgroup] << key unless reaction[sgroup].include?(key)
+ end
+
+ def refine_arrow
+ return if @ext_arrowmap.size.zero?
+
+ @ext_arrowmap.each do |key, ext|
+ remove_from_reactionmap(key)
+ box = ext[:box]
+ extend_arrow(box.righttop, box.leftbottom)
+ @ext_arrowmap[key].merge!(extended: true)
+ end
+ end
+
+ def refine_eln_reaction
+ arrow = @arrowmap.values.first
+ reaction = { reactants: [], reagents: [], products: [] }
+ @molmap.each_value do |mol|
+ add_mol_to_react(reaction, mol, arrow)
+ end
+
+ @reaction[0] = reaction
+ end
+
+ def clean_molmap
+ @molmap.delete_if do |_, val| val.nil? end
+
+ # Remove atom which have no bond
+ # in case of nested fragment has only 1 atom
+ @molmap.each_value do |m|
+ mol = m[:mol]
+ atom_ids = []
+ (1..mol.num_atoms).each do |i|
+ atom = mol.get_atom(i)
+ # check if atom has any bond, ignore if it has charge (ion)
+ atom_ids << i if atom_no_bond?(atom)
+ end
+
+ atom_ids.each_with_index do |val, idx|
+ atom = mol.get_atom(val - idx)
+ mol.delete_atom(atom)
+ end
+ end
+ end
+
+ def atom_no_bond?(atom)
+ (atom.get_atomic_num != 1 &&
+ atom.get_formal_charge.zero? && # we will not remove ion
+ !atom.has_single_bond &&
+ !atom.has_non_single_bond)
+ end
+
+ def assemble_to_reaction
+ @reactionmap.each do |k, r|
+ reaction = { reactants: [], reagents: [], products: [] }
+ arrow = @arrowmap[r[:arrow]]
+ aline = line_from_arrow(arrow)
+
+ @molmap.each do |kmol, mol|
+ group = detect_position(mol, arrow)
+ intersects = polygon_intersects_with_line?(mol[:polygon], aline)
+ belong_to_reaction = (group == 'reagents') ||
+ (group != 'reagents' && intersects)
+ next unless belong_to_reaction
+
+ mol[:added] = true
+ reaction[group.to_sym] << kmol
+ end
+
+ chain_reaction(k, reaction)
+ @reactionmap[k].merge!(reaction)
+ end
+
+ refine_seperate_mol
+ end
+
+ # Remove molecule(s) which is/are seperated with other
+ # Check A -> B -> C case
+ def chain_reaction(key, reaction)
+ @reactionmap.each do |k, r|
+ next if k == key || r[:reactants].nil? || r[:products].nil?
+
+ check = (reaction[:reactants] & r[:reactants]).count.positive? &&
+ (r[:products] & reaction[:products]).count.positive?
+ next unless check
+
+ if (reaction[:reactants] & r[:reagents]).count.positive?
+ reaction[:reactants] -= r[:reagents]
+ end
+
+ reaction[:reactants] -= r[:reactants]
+ r[:products] -= reaction[:products]
+ end
+ end
+
+ def refine_seperate_mol
+ @reactionmap.each_value do |r|
+ arrow = @arrowmap[r[:arrow]]
+ %w[reactants products].each do |group|
+ rgroup = r[group.to_sym]
+ next if rgroup.count < 2
+ dist_map = {}
+
+ rgroup.each do |id|
+ min = 10_000_000
+ mol = @molmap[id]
+ next if mol.nil?
+
+ da = Geometry.distance(mol[:center], arrow[:center])
+ (rgroup - [id]).each do |mid|
+ om = @molmap[mid]
+ next if om.nil?
+ d = Geometry.distance(mol[:center], om[:center])
+ min = d < min ? d : min
+ end
+ dist_map[id] = da < min ? da : min
+ end
+
+ min_dist = dist_map.sort_by { |_, value| value }.first.last
+ remove_map = dist_map.select { |_, v| v > (1.5 * min_dist) }
+ remove_keys = remove_map.keys
+
+ remove_map.each_key do |k|
+ mol = @molmap[k]
+ (rgroup - [k]).each do |id|
+ om = @molmap[id]
+ d = Geometry.distance(mol[:center], om[:center])
+ remove_keys << id if d < (1.5 * min_dist)
+ end
+ end
+
+ rgroup.delete_if { |x| remove_keys.include?(x) }
+ end
+ end
+ end
+
+ # def refine_text
+ # @textmap.each_value do |value|
+ # text_arr = value[:text].split(/[\s,; ()]/).uniq
+ # text_arr.each do |text|
+ # next if text.empty?
+ # mol = expand_abb(text)
+ # end
+ # end
+ # end
+ end
+ end
+end
diff --git a/lib/cdx/parser/refine_util.rb b/lib/cdx/parser/refine_util.rb
new file mode 100644
index 0000000000..496a074e4b
--- /dev/null
+++ b/lib/cdx/parser/refine_util.rb
@@ -0,0 +1,169 @@
+# frozen_string_literal: true
+
+module Cdx
+ module Parser
+ # Utilities for Refining
+ module RefineUtil
+ include Base
+ include PositionUtil
+
+ def reaction_arrow_list
+ if @is_ignore
+ @arrowmap.keys
+ else
+ @reactionmap.values.map { |r| r[:arrow] }.compact
+ end
+ end
+
+ def molecule?(mol)
+ return false if mol.class != OpenBabel::OBMol || mol.num_atoms.zero?
+ return true if mol.num_atoms > 1
+
+ atom = mol.get_atom(1)
+ atnum = atom.get_atomic_num
+ return false if atnum.zero? || (atnum == 6 && atom.has_data('Alias'))
+
+ true
+ end
+
+ def add_mol_to_react(reaction, mol, arrow)
+ group = detect_position(mol, arrow)
+ reaction[group.to_sym] << mol
+ end
+
+ def map_reaction_by_id(ids)
+ react = {}
+ %w[reactants reagents products].each do |group|
+ next if ids[group.to_sym].nil?
+ gsym = group.to_sym
+
+ react[gsym] = []
+ ids[gsym].each do |mid|
+ obj = lookup_id(mid)
+ no_push = obj.nil? || obj[:text]&.strip == '+'
+ react[gsym].push(obj) unless no_push
+ end
+ end
+ react
+ end
+
+ def extend_arrow(head, tail)
+ return if @arrowmap.count.zero?
+
+ min = { key: 0, val: 9_999_999 }
+
+ @arrowmap.each do |key, value|
+ dist = Geometry.distance(head, value[:center])
+ min = { key: key, val: dist } if min[:val] > dist
+ rid = reaction_id_from_arrow(key)
+ value[:reaction_id] = rid unless rid.nil?
+ end
+
+ @arrowmap[min[:key]][:tail] = { x: tail.x, y: tail.y }
+ end
+
+ def remove_from_reactionmap(id)
+ @reactionmap.each_value do |v|
+ %w[reactants reagents products].each do |group|
+ v[group.to_sym]&.delete_if { |x| x == id }
+ end
+ end
+ end
+
+ def move_mol_to_text(id, obj)
+ atom = obj[:mol].get_atom(1)
+ return unless atom.has_data('Alias')
+
+ x = atom.get_x
+ y = atom.get_y
+ center = Geometry::Point.new(x, y)
+ content = atom.get_data('Alias').get_value.split('$$$$')
+ return if content.count.zero?
+
+ text = content.first
+ coords = content.last.split(',')
+ lb = coords.first.split('-').map(&:to_f)
+ rt = coords.last.split('-').map(&:to_f)
+ lbp = Geometry::Point.new(lb.first, lb.last)
+ ltp = Geometry::Point.new(lb.first, rt.last)
+ rtp = Geometry::Point.new(rt.first, rt.last)
+ rbp = Geometry::Point.new(rt.first, lb.last)
+
+ @textmap[id] = {
+ text: text,
+ polygon: Geometry::Polygon.new([lbp, ltp, rtp, rbp]),
+ center: center
+ }
+ end
+
+ def all_unused
+ res = @molmap.select { |_, v| v[:added].nil? }
+ unused_text = @textmap&.select { |_, v| v[:added].nil? && v[:text].strip != '+' }
+ res.merge!(unused_text)
+
+ res
+ end
+
+ def reaction_id_from_arrow(id)
+ res = @reactionmap.find { |_, v| v[:arrow] == id }
+ return nil if res.nil?
+ res.first
+ end
+
+ def refine_reaction_group
+ @reaction.each do |v|
+ %w[reactants products].each do |group|
+ add_text_to_mol(v[group.to_sym])
+ end
+ end
+
+ @reaction.delete_if { |x| invalid_reaction?(x) }
+ end
+
+ def add_text_to_mol(group)
+ return if group.nil?
+
+ list_mol = []
+ list_text = []
+
+ group.each_with_index do |obj, id|
+ unless obj[:mol].nil?
+ list_mol.push(id: id, obj: obj)
+ next
+ end
+
+ list_text.push(id: id, obj: obj) unless obj[:text].nil?
+ end
+
+ return if list_mol.empty? || list_text.empty?
+
+ ids = []
+ list_text.each do |text_obj|
+ tobj = text_obj[:obj]
+
+ min_id = list_mol.first[:id]
+ min = 10_000_000
+ list_mol.each do |m|
+ tcenter = tobj[:center]
+ mcenter = m[:obj][:center]
+ dist = Geometry.distance(tcenter, mcenter)
+ if min > dist
+ min = dist
+ min_id = m[:id]
+ end
+ end
+
+ mol = list_mol[min_id][:obj]
+ mol[:text] = '' if mol[:text].nil?
+ delim = mol[:text].empty? ? '' : ';'
+ mol[:text] += delim + tobj[:text]
+ ids << text_obj[:id]
+ end
+
+ ids.sort.uniq.each_with_index do |idx, id|
+ group.delete_at(idx - id)
+ end
+ end
+ end
+ end
+end
diff --git a/lib/cdx/parser/text.rb b/lib/cdx/parser/text.rb
new file mode 100644
index 0000000000..c2fa965775
--- /dev/null
+++ b/lib/cdx/parser/text.rb
@@ -0,0 +1,81 @@
+# frozen_string_literal: true
+
+module Cdx
+ module Parser
+ # CDX Text parser
+ module Text
+ include Base
+
+ def do_text(cdxr, cid = nil)
+ text = ''
+ warning = false
+ while (tag = cdxr.read_next).positive?
+ data = cdxr.data
+ case tag
+ when CDX_PROP_TEXT
+ style_runs = read_int16(data) * 10
+ text = data[style_runs, data.size - style_runs]
+ when CDX_PROP_2DPOSITION
+ y = read_int32(data)
+ x = read_int32(data)
+ when CDX_PROP_BOUNDINGBOX then polygon = polygon_boundingbox(data)
+ when CDX_PROP_CHEMICALWARNING
+ warning = true
+ warning_data = data
+ else
+ do_unhandled(cdxr, tag)
+ end
+ end
+
+ add_to_textmap(cid, text, x * 1.0e-6, y * 1.0e-6, polygon)
+ unicode_text = text.force_encoding(Encoding::CP1252).encode(Encoding::UTF_8)
+ {
+ text: unicode_text,
+ warning: warning,
+ polygon: polygon,
+ warning_data: warning_data
+ }
+ end
+
+ def do_xml_text(node, nid = nil)
+ warning = false
+ polygon = nil
+ warning_data = ''
+ x = 0
+ y = 0
+
+ node.attributes.each do |key, value|
+ case key
+ when 'p'
+ value_arr = value.text.split(' ')
+ x = value_arr[0].to_f
+ y = value_arr[1].to_f
+ when 'BoundingBox' then polygon = xml_polygon_boundingbox(value)
+ when 'Warning'
+ warning = true
+ warning_data = value.text
+ end
+ end
+
+ add_to_textmap(nid, node.text, x, y, polygon)
+ {
+ text: node.text,
+ warning: warning,
+ polygon: polygon,
+ warning_data: warning_data
+ }
+ end
+
+ def add_to_textmap(cid, text, x, y, polygon)
+ return if cid.nil?
+ center = Geometry::Point.new(x, y)
+ @textmap[cid] = {
+ text: text,
+ center: center,
+ polygon: polygon,
+ box: polygon.bounding_box
+ }
+ end
+ end
+ end
+end
diff --git a/lib/import/import_reactions.rb b/lib/import/import_reactions.rb
new file mode 100644
index 0000000000..605148c780
--- /dev/null
+++ b/lib/import/import_reactions.rb
@@ -0,0 +1,278 @@
+# frozen_string_literal: true
+
+require 'roo'
+
+# Import reactions from CSV
+class Import::ImportReactions
+ attr_reader :xlsx, :sheet, :header, :mandatory_check, :rows, :unprocessable,
+ :processed, :file_path, :collection_id, :current_user_id
+
+ def initialize
+ @rows = []
+ @unprocessable = []
+ @processed = []
+ end
+
+ def from_file(file_path, collection_id, current_user_id)
+ @file_path = file_path
+ @collection_id = collection_id
+ @current_user_id = current_user_id
+ self
+ end
+
+ def process
+ # begin
+ # read_file
+ # rescue StandardError
+ # return error_process_file
+ # end
+
+ # begin
+ # check_required_fields
+ # rescue StandardError
+ # return error_required_fields
+ # end
+
+ # begin
+ # insert_rows
+ # rescue StandardError
+ # return error_insert_rows
+ # end
+
+ # begin
+ # write_to_db
+ # return @unprocessable.empty? ? success : warning
+ # rescue StandardError
+ # return warning
+ # end
+ end
+
+ private
+
+ def read_file
+ @xlsx = Roo::CSV.open(file_path)
+ end
+
+ def check_required_fields
+ @sheet = xlsx.sheet(0)
+ @header = sheet.row(1)
+ @mandatory_check = {}
+ ["molfile", "smiles", "cano_smiles", "canonical smiles"].each do |check|
+ if header.find { |e| /^\s*#{check}?/i =~ e } != nil
+ @mandatory_check[check] = true
+ end
+ end
+ if mandatory_check.length.zero?
+ raise "Column headers should have: molfile, or Smiles (or cano_smiles, canonical smiles)"
+ end
+ end
+
+ def insert_rows
+ (2..xlsx.last_row).each do |i|
+ row = Hash[[header, xlsx.row(i)].transpose]
+ next unless has_structure(row)
+ rows << row.each_pair{|k,v| v && row[k] = v.to_s }
+ end
+ end
+
+ def write_to_db
+ unprocessable_count = 0
+ ActiveRecord::Base.transaction do
+ rows.map.with_index do |row, i|
+ begin
+ # If molfile and smiles (Canonical smiles) is both present
+ # Double check the rows
+ if has_molfile(row) && has_smiles(row)
+ molfile, go_to_next = get_data_from_molfile_and_smiles(row)
+ next if go_to_next
+ end
+
+ if has_molfile(row)
+ molfile, molecule = get_data_from_molfile(row)
+ elsif has_smiles(row)
+ molfile, molecule, go_to_next = get_data_from_smiles(row)
+ next if go_to_next
+ end
+
+ if molecule_not_exist(molecule)
+ unprocessable_count += 1
+ next
+ end
+
+ sample_save(row, molfile, molecule)
+ rescue
+ unprocessable_count += 1
+ @unprocessable << { row: row, index: i }
+ end
+ end
+ raise "More than 1 row can not be processed" if unprocessable_count > 0
+ end
+ end
+
+ def has_structure row
+ has_molfile(row) || has_smiles(row)
+ end
+
+ def has_molfile(row)
+ mandatory_check["molfile"] && row["molfile"].to_s.present?
+ end
+
+ def has_smiles(row)
+ header = mandatory_check["smiles"] || mandatory_check["cano_smiles"] || mandatory_check["canonical smiles"]
+ cell = row["smiles"].to_s.present? || row["cano_smiles"].to_s.present? || row["canonical smiles"].to_s.present?
+ header && cell
+ end
+
+ def get_data_from_molfile_and_smiles(row)
+ molfile = row["molfile"].presence
+ if molfile
+ babel_info = Chemotion::OpenBabelService.molecule_info_from_molfile(molfile)
+ molfile_smiles = babel_info[:smiles]
+ if mandatory_check["smiles"]
+ molfile_smiles = Chemotion::OpenBabelService.canon_smiles_to_smiles molfile_smiles
+ end
+ end
+ if molfile_smiles.blank? &&
+ (molfile_smiles != row["cano_smiles"] && molfile_smiles != row["smiles"] && molfile_smiles != row["canonical smiles"])
+ @unprocessable << { row: row, index: i }
+ go_to_next = true
+ end
+ return molfile, go_to_next
+ end
+
+ def get_data_from_molfile(row)
+ molfile = row["molfile"].to_s
+ babel_info = Chemotion::OpenBabelService.molecule_info_from_molfile(molfile)
+ inchikey = babel_info[:inchikey]
+ is_partial = babel_info[:is_partial]
+ if inchikey.presence
+ if molecule&.inchikey != inchikey || molecule.is_partial != is_partial
+ molecule = Molecule.find_or_create_by_molfile(molfile, babel_info)
+ end
+ end
+ return molfile, molecule
+ end
+
+ def get_data_from_smiles(row)
+ smiles = (mandatory_check['smiles'] && row['smiles'].presence) ||
+ (mandatory_check['cano_smiles'] && row['cano_smiles'].presence) ||
+ (mandatory_check['canonical smiles'] && row['canonical smiles'].presence)
+ inchikey = Chemotion::OpenBabelService.smiles_to_inchikey smiles
+ ori_molf = Chemotion::OpenBabelService.smiles_to_molfile smiles
+ babel_info = Chemotion::OpenBabelService.molecule_info_from_molfile(ori_molf)
+ molfile_coord = Chemotion::OpenBabelService.add_molfile_coordinate(ori_molf)
+ if inchikey.blank?
+ @unprocessable << { row: row, index: i }
+ go_to_next = true
+ else
+ molecule = Molecule.find_or_create_by(inchikey: inchikey, is_partial: false) do |molecule|
+ pubchem_info =
+ Chemotion::PubchemService.molecule_info_from_inchikey(inchikey)
+ molecule.molfile = molfile_coord
+ molecule.assign_molecule_data babel_info, pubchem_info
+ end
+ end
+ return molfile_coord, molecule, go_to_next
+ end
+
+ def molecule_not_exist(molecule)
+ @unprocessable << { row: row, index: i } if molecule.nil?
+ molecule.nil?
+ end
+
+ def sample_save(row, molfile, molecule)
+ sample = Sample.new(created_by: current_user_id)
+ sample.molfile = molfile
+ sample.molecule = molecule
+ # Populate new sample
+ stereo = {}
+ header.each_with_index do |field, index|
+ if field.to_s.strip =~ /^stereo_(abs|rel)$/
+ stereo[$1] = row[field]
+ end
+ next unless included_fields.include?(field)
+ sample[field] = row[field]
+ end
+ sample.validate_stereo(stereo)
+ sample.collections << Collection.find(collection_id)
+ sample.collections << Collection.get_all_collection_for_user(current_user_id)
+ sample.save!
+ processed.push(sample)
+ end
+
+ def excluded_fields
+ [
+ 'id',
+ # 'name',
+ # 'target_amount_value',
+ # 'target_amount_unit',
+ 'created_at',
+ 'updated_at',
+ # 'description',
+ 'molecule_id',
+ 'molfile',
+ # 'purity',
+ # 'solvent',
+ 'impurities',
+ # 'location',
+ 'is_top_secret',
+ 'ancestry',
+ # 'external_label',
+ 'created_by',
+ 'short_label',
+ # 'real_amount_value',
+ # 'real_amount_unit',
+ # 'imported_readout',
+ 'deleted_at',
+ 'sample_svg_file',
+ 'user_id',
+ 'identifier',
+ # 'density',
+ # 'melting_point',
+ # 'boiling_point',
+ 'fingerprint_id',
+ 'xref',
+ # 'molarity_value',
+ # 'molarity_unit',
+ 'molecule_name_id',
+ ]
+ end
+
+ def included_fields
+ Sample.attribute_names - excluded_fields
+ end
+
+ def error_process_file
+ { status: "invalid",
+ message: "Can not process this type of file.",
+ data: [] }
+ end
+
+ def error_required_fields
+ { status: "invalid",
+ message: "Column headers should have: molfile or Canonical Smiles.",
+ data: [] }
+ end
+
+ def error_insert_rows
+ { status: "invalid",
+ message: "Error while parsing the file.",
+ data: [] }
+ end
+
+ def warning
+ { status: "warning",
+ message: "No data saved, because following rows cannot be processed: #{unprocessable_rows}.",
+ data: unprocessable }
+ end
+
+ def unprocessable_rows
+ unprocessable.map { |u| u[:index] + 2 }.join(', ')
+ end
+
+ def success
+ { status: "ok",
+ message: "",
+ data: processed }
+ end
+end
diff --git a/lib/svg/reaction_composer.rb b/lib/svg/reaction_composer.rb
index 3b68aa6ddc..f08206bf50 100644
--- a/lib/svg/reaction_composer.rb
+++ b/lib/svg/reaction_composer.rb
@@ -27,8 +27,85 @@ def initialize(materials_svg_paths, options = {})
init_svg
end
+ def self.include_with_correct_order?(container, target)
+ first = target.first
+ index_first = container.find_index(first)
+ return false if index_first.nil?
+
+ target[1..-1].each_with_index do |val, k|
+ idx = container.find_index(val)
+ return false if idx.nil? || (idx != (index_first + k + 1))
+ end
+
+ true
+ end
+
+ def self.cr_reaction_svg_from_rsmi(rsmi, solvents_smis, reagents_smis)
+ mol_arr = rsmi.split('>')
+ return nil if mol_arr.size.zero?
+
+ @starting_materials = mol_arr[0].split('.')
+
+ @solvents = []
+ @reactants = []
+ rs = mol_arr[1]
+
+ unless rs.empty?
+ rs_arr = rs.split('.')
+
+ solvents_smis.each do |target|
+ target_arr = target.split('.')
+ check = include_with_correct_order?(rs_arr, target_arr)
+ next unless check
+ rs_arr -= target_arr
+ @solvents.push(target_arr.join('.'))
+ end
+
+ reagents_smis.each do |target|
+ target_arr = target.split('.')
+ check = include_with_correct_order?(rs_arr, target_arr)
+ next unless check
+ rs_arr -= target_arr
+ @reactants.push(target_arr.join('.'))
+ end
+
+ @solvents.reject!(&:empty?)
+ @reactants.concat(rs_arr).reject!(&:empty?)
+ end
+
+ @products = mol_arr[2].split('.')
+ name_arr = %w[starting_materials reactants solvents products]
+
+ files = {}
+ name_arr.each do |g|
+ files[g.to_sym] = instance_variable_get("@#{g}").map { |r, _|
+ mol_svg = Chemotion::OpenBabelService.smi_to_trans_svg(r)
+ tmp_file = Tempfile.new
+ tmp_file.write(mol_svg)
+ tmp_file.close
+ tmp_file
+ }
+ end
+ paths = {}
+ name_arr.each do |g|
+ paths[g.to_sym] = files[g.to_sym].map(&:to_path)
+ end
+
+ svg = new(
+ paths,
+ rails_path: false,
+ solvents: paths[:solvents]
+ ).compose_cr_reaction_svg
+
+ name_arr.each do |g|
+ files[g.to_sym].map(&:unlink)
+ end
+ svg
+ end
+
def self.reaction_svg_from_rsmi(rsmi)
mol_arr = rsmi.split('>')
+ return nil if mol_arr.size.zero?
@starting_materials = mol_arr[0].split('.')
@reactants = mol_arr[1].split('.')
@products = mol_arr[2].split('.')
@@ -64,6 +141,54 @@ def compose_reaction_svg_and_save(options = {})
file_name
end
+ def compose_cr_reaction_svg
+ set_cr_global_view_box_height
+
+ sections = {}
+ y_center = (global_view_box_array[3] / 2).round
+ sections[:starting_materials] = compose_material_group(
+ starting_materials,
+ start_at: 0,
+ y_center: y_center
+ )
+ arrow_x_shift = global_view_box_array[2] += 50
+ arrow_y_shift = y_center
+
+ sections[:reactants] = compose_material_group(
+ reactants,
+ start_at: global_view_box_array[2],
+ scale: REACTANT_SCALE,
+ arrow_width: true,
+ y_center: y_center - 30,
+ is_reactants: true
+ )
+
+ solvent_svg = compose_solvents_below_arrow(
+ solvents,
+ start_at: arrow_x_shift,
+ scale: REACTANT_SCALE,
+ plus_center: global_view_box_array[3],
+ y_center: arrow_y_shift
+ )
+
+ arrow = "" +
+ arrow_it +
+ ''
+ arrow += solvent_svg
+ sections[:arrow] = arrow
+
+ global_view_box_array[2] += 40 # adjust arrow to products
+ @max_height_for_products = find_material_max_height(products)
+ sections[:products] = compose_material_group(
+ products,
+ start_at: global_view_box_array[2],
+ y_center: y_center
+ )
+
+ @sections = sections
+ template_it.strip + sections_string_filtered + ''
+ end
+
def compose_reaction_svg
set_global_view_box_height
section_it
@@ -192,6 +317,20 @@ def set_global_view_box_height
global_view_box_array[3] = [reactant_max*REACTANT_SCALE*2,material_max, global_view_box_array[3]].max+2*YIELD_YOFFSET + 15
end
+ def set_cr_global_view_box_height
+ material_max = find_material_max_height(starting_materials + products)
+ reactant_max = find_material_max_height(reactants)
+ solvent_max = find_material_max_height(solvents)
+
+ global_view_box_array[3] = [
+ reactant_max * REACTANT_SCALE * 2,
+ solvent_max * REACTANT_SCALE * 2,
+ material_max,
+ global_view_box_array[3]
+ ].max + 2 *YIELD_YOFFSET + 15
+ end
+
+
def file_path
File.join(File.dirname(__FILE__), '..', '..', 'public', 'images', 'reactions')
end
@@ -206,7 +345,54 @@ def inner_file_content svg_path
end
end
- def compose_material_group( material_group, options = {} )
+ def compose_solvents_below_arrow(solvent_group, options = {})
+ x_shift = options[:start_at] || 0
+ start_x = x_shift
+ y_center = options[:y_center] || 0
+ plus_center = options[:plus_center] || y_center
+ scale = options[:scale] || 1
+ output = ''
+ group_width = 0
+ solvent_group.map.with_index do |m, ind|
+ if ind.positive?
+ group_width += 10
+ output += divide_it(group_width, plus_center)
+ group_width += 50
+ end
+
+ material, = *separate_material_yield(m)
+ svg = inner_file_content(material)
+ vb = svg['viewBox'] && svg['viewBox'].split(/\s+/).map(&:to_i) || []
+ unless vb.empty?
+ x_shift = group_width + 10 - vb[0]
+ y_shift = (y_center + vb[3] / 2).round
+ group_width += vb[2] + 10
+ svg['width'] = "#{vb[2]}px;"
+ svg['height'] = "#{vb[3]}px;"
+ output += "" +
+ svg.inner_html.to_s +
+ ''
+ end
+ end
+
+ hold = output
+ output = ""
+ output += "#{hold}"
+ scaled_group_width = (group_width * scale).round
+
+ sw = [scaled_group_width, 50].max + 80
+ if sw > @arrow_width
+ gvba = global_view_box_array[2]
+ gvba += (sw - @arrow_width)
+ global_view_box_array[2] = gvba
+
+ @arrow_width = sw
+ end
+
+ output
+ end
+
+ def compose_material_group(material_group, options = {})
gvba = global_view_box_array
w0 = gvba[2]
x_shift = options[:start_at] || 0
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000000..b18cf28d12
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,5953 @@
+{
+ "name": "chemotion",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "JSONStream": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz",
+ "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=",
+ "requires": {
+ "jsonparse": "1.3.1",
+ "through": "2.3.8"
+ }
+ },
+ "abab": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz",
+ "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4="
+ },
+ "acorn": {
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
+ "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c="
+ },
+ "acorn-globals": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz",
+ "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=",
+ "requires": {
+ "acorn": "4.0.13"
+ }
+ },
+ "acorn-jsx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+ "dev": true,
+ "requires": {
+ "acorn": "3.3.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+ "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+ "dev": true
+ }
+ }
+ },
+ "acorn-node": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.3.0.tgz",
+ "integrity": "sha512-efP54n3d1aLfjL2UMdaXa6DsswwzJeI5rqhbFvXMrKiJ6eJFpf+7R0zN7t8IC+XKn2YOAFAv6xbBNgHUkoHWLw==",
+ "requires": {
+ "acorn": "5.5.3",
+ "xtend": "4.0.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.5.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz",
+ "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ=="
+ }
+ }
+ },
+ "ag-grid": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/ag-grid/-/ag-grid-8.0.0.tgz",
+ "integrity": "sha1-lQucDIh9kGjKzh6FP/2abLMN8kU="
+ },
+ "ag-grid-react": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/ag-grid-react/-/ag-grid-react-8.0.0.tgz",
+ "integrity": "sha1-JwwiUMovqDtWrm8kKcRxSZa0cQM="
+ },
+ "ajv": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.0.tgz",
+ "integrity": "sha1-6yhAdG6dxIvV4GOjbj/UAMXqtak=",
+ "requires": {
+ "co": "4.6.0",
+ "fast-deep-equal": "1.0.0",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.3.1"
+ }
+ },
+ "ajv-keywords": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
+ "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=",
+ "dev": true
+ },
+ "alt": {
+ "version": "0.18.6",
+ "resolved": "https://registry.npmjs.org/alt/-/alt-0.18.6.tgz",
+ "integrity": "sha1-2ExsheAXnLbC/Hufms7Iwfqr1gY=",
+ "requires": {
+ "flux": "2.1.1",
+ "is-promise": "2.1.0",
+ "transmitter": "3.0.1"
+ }
+ },
+ "alt-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/alt-utils/-/alt-utils-1.0.0.tgz",
+ "integrity": "sha1-G8PXmv6cPNHTe4WBDeIEYNzHcjQ="
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+ "dev": true
+ },
+ "ansi-escapes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz",
+ "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "argparse": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
+ "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "1.0.3"
+ }
+ },
+ "aria-query": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-0.7.0.tgz",
+ "integrity": "sha512-/r2lHl09V3o74+2MLKEdewoj37YZqiQZnfen1O4iNlrOjUgeKuu1U2yF3iKh6HJxqF+OXkLMfQv65Z/cvxD6vA==",
+ "dev": true,
+ "requires": {
+ "ast-types-flow": "0.0.7"
+ }
+ },
+ "array-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
+ "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM="
+ },
+ "array-filter": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz",
+ "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw="
+ },
+ "array-includes": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz",
+ "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=",
+ "dev": true,
+ "requires": {
+ "define-properties": "1.1.2",
+ "es-abstract": "1.10.0"
+ }
+ },
+ "array-map": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz",
+ "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI="
+ },
+ "array-reduce": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz",
+ "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys="
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "1.0.3"
+ }
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
+ },
+ "asn1": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
+ "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="
+ },
+ "asn1.js": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
+ "requires": {
+ "bn.js": "4.11.8",
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.1"
+ }
+ },
+ "assert": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+ "requires": {
+ "util": "0.10.3"
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+ },
+ "ast-types-flow": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
+ "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=",
+ "dev": true
+ },
+ "astw": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz",
+ "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=",
+ "requires": {
+ "acorn": "4.0.13"
+ }
+ },
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+ },
+ "attr-accept": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-1.1.0.tgz",
+ "integrity": "sha1-tc01In8WOTWo8d4Q7T66FpQfa+Y="
+ },
+ "aviator": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/aviator/-/aviator-0.6.1.tgz",
+ "integrity": "sha1-s486Bwzw4q+3HY562EZldp+nabU="
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
+ },
+ "aws4": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
+ "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4="
+ },
+ "axobject-query": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-0.1.0.tgz",
+ "integrity": "sha1-YvWdvFnJ+SQnWco0mWDnov48NsA=",
+ "dev": true,
+ "requires": {
+ "ast-types-flow": "0.0.7"
+ }
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-core": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz",
+ "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=",
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-generator": "6.26.0",
+ "babel-helpers": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-register": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "convert-source-map": "1.5.1",
+ "debug": "2.6.9",
+ "json5": "0.5.1",
+ "lodash": "4.17.4",
+ "minimatch": "3.0.4",
+ "path-is-absolute": "1.0.1",
+ "private": "0.1.8",
+ "slash": "1.0.0",
+ "source-map": "0.5.7"
+ }
+ },
+ "babel-eslint": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-7.2.2.tgz",
+ "integrity": "sha1-DaLL5lVP0PsGnxlnTy2y+cWScP8=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz",
+ "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=",
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.4",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s="
+ }
+ }
+ },
+ "babel-helper-builder-react-jsx": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz",
+ "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "esutils": "2.0.2"
+ }
+ },
+ "babel-helper-call-delegate": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz",
+ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
+ "requires": {
+ "babel-helper-hoist-variables": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-define-map": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
+ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
+ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
+ "requires": {
+ "babel-helper-get-function-arity": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz",
+ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-hoist-variables": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz",
+ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-optimise-call-expression": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz",
+ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-regex": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
+ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-helper-replace-supers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz",
+ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
+ "requires": {
+ "babel-helper-optimise-call-expression": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helpers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
+ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-check-es2015-constants": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz",
+ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-syntax-flow": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz",
+ "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0="
+ },
+ "babel-plugin-syntax-jsx": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
+ "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY="
+ },
+ "babel-plugin-syntax-object-rest-spread": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
+ "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U="
+ },
+ "babel-plugin-transform-es2015-arrow-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
+ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoped-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",
+ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoping": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
+ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-plugin-transform-es2015-classes": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz",
+ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
+ "requires": {
+ "babel-helper-define-map": "6.26.0",
+ "babel-helper-function-name": "6.24.1",
+ "babel-helper-optimise-call-expression": "6.24.1",
+ "babel-helper-replace-supers": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-computed-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",
+ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-destructuring": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",
+ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-duplicate-keys": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz",
+ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-for-of": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz",
+ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz",
+ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-literals": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz",
+ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-amd": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz",
+ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
+ "requires": {
+ "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-commonjs": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz",
+ "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=",
+ "requires": {
+ "babel-plugin-transform-strict-mode": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-systemjs": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz",
+ "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=",
+ "requires": {
+ "babel-helper-hoist-variables": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-umd": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz",
+ "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=",
+ "requires": {
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-object-super": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz",
+ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
+ "requires": {
+ "babel-helper-replace-supers": "6.24.1",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-parameters": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz",
+ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
+ "requires": {
+ "babel-helper-call-delegate": "6.24.1",
+ "babel-helper-get-function-arity": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-shorthand-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",
+ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-spread": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz",
+ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-sticky-regex": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz",
+ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
+ "requires": {
+ "babel-helper-regex": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-template-literals": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",
+ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-typeof-symbol": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz",
+ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-unicode-regex": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz",
+ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
+ "requires": {
+ "babel-helper-regex": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "regexpu-core": "2.0.0"
+ }
+ },
+ "babel-plugin-transform-flow-strip-types": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz",
+ "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=",
+ "requires": {
+ "babel-plugin-syntax-flow": "6.18.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-object-rest-spread": {
+ "version": "6.8.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.8.0.tgz",
+ "integrity": "sha1-A9EwjiV6nY4agVrh/T2yG96/CNk=",
+ "requires": {
+ "babel-plugin-syntax-object-rest-spread": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-react-display-name": {
+ "version": "6.25.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz",
+ "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-react-jsx": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz",
+ "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=",
+ "requires": {
+ "babel-helper-builder-react-jsx": "6.26.0",
+ "babel-plugin-syntax-jsx": "6.18.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-react-jsx-self": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz",
+ "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=",
+ "requires": {
+ "babel-plugin-syntax-jsx": "6.18.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-react-jsx-source": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz",
+ "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=",
+ "requires": {
+ "babel-plugin-syntax-jsx": "6.18.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-regenerator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
+ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
+ "requires": {
+ "regenerator-transform": "0.10.1"
+ }
+ },
+ "babel-plugin-transform-strict-mode": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz",
+ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-preset-es2015": {
+ "version": "6.13.2",
+ "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.13.2.tgz",
+ "integrity": "sha1-AGxGmnUovQZvKRfItJVTCdzVPPs=",
+ "requires": {
+ "babel-plugin-check-es2015-constants": "6.22.0",
+ "babel-plugin-transform-es2015-arrow-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoping": "6.26.0",
+ "babel-plugin-transform-es2015-classes": "6.24.1",
+ "babel-plugin-transform-es2015-computed-properties": "6.24.1",
+ "babel-plugin-transform-es2015-destructuring": "6.23.0",
+ "babel-plugin-transform-es2015-duplicate-keys": "6.24.1",
+ "babel-plugin-transform-es2015-for-of": "6.23.0",
+ "babel-plugin-transform-es2015-function-name": "6.24.1",
+ "babel-plugin-transform-es2015-literals": "6.22.0",
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+ "babel-plugin-transform-es2015-modules-systemjs": "6.24.1",
+ "babel-plugin-transform-es2015-modules-umd": "6.24.1",
+ "babel-plugin-transform-es2015-object-super": "6.24.1",
+ "babel-plugin-transform-es2015-parameters": "6.24.1",
+ "babel-plugin-transform-es2015-shorthand-properties": "6.24.1",
+ "babel-plugin-transform-es2015-spread": "6.22.0",
+ "babel-plugin-transform-es2015-sticky-regex": "6.24.1",
+ "babel-plugin-transform-es2015-template-literals": "6.22.0",
+ "babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
+ "babel-plugin-transform-es2015-unicode-regex": "6.24.1",
+ "babel-plugin-transform-regenerator": "6.26.0"
+ }
+ },
+ "babel-preset-react": {
+ "version": "6.11.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.11.1.tgz",
+ "integrity": "sha1-mKwr08G3bzBirgglgOreFUoZtZA=",
+ "requires": {
+ "babel-plugin-syntax-flow": "6.18.0",
+ "babel-plugin-syntax-jsx": "6.18.0",
+ "babel-plugin-transform-flow-strip-types": "6.22.0",
+ "babel-plugin-transform-react-display-name": "6.25.0",
+ "babel-plugin-transform-react-jsx": "6.24.1",
+ "babel-plugin-transform-react-jsx-self": "6.22.0",
+ "babel-plugin-transform-react-jsx-source": "6.22.0"
+ }
+ },
+ "babel-register": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
+ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
+ "requires": {
+ "babel-core": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "core-js": "2.5.1",
+ "home-or-tmp": "2.0.0",
+ "lodash": "4.17.4",
+ "mkdirp": "0.5.1",
+ "source-map-support": "0.4.18"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz",
+ "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs="
+ }
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "requires": {
+ "core-js": "2.5.1",
+ "regenerator-runtime": "0.11.0"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz",
+ "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs="
+ }
+ }
+ },
+ "babel-template": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.4",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "babelify": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/babelify/-/babelify-7.3.0.tgz",
+ "integrity": "sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU=",
+ "requires": {
+ "babel-core": "6.26.0",
+ "object-assign": "4.1.1"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ=="
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "base64-js": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.3.tgz",
+ "integrity": "sha512-MsAhsUW1GxCdgYSO6tAfZrNapmUKk7mWx/k5mFY/A1gBtkaCaNapTg+FExCw1r9yeaZhqx/xPg43xgTFH6KL5w=="
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
+ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
+ "optional": true,
+ "requires": {
+ "tweetnacl": "0.14.5"
+ }
+ },
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="
+ },
+ "boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+ "dev": true
+ },
+ "boom": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
+ "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
+ "requires": {
+ "hoek": "4.2.0"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
+ },
+ "browser-pack": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz",
+ "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==",
+ "requires": {
+ "JSONStream": "1.3.1",
+ "combine-source-map": "0.8.0",
+ "defined": "1.0.0",
+ "safe-buffer": "5.1.1",
+ "through2": "2.0.3",
+ "umd": "3.0.1"
+ }
+ },
+ "browser-resolve": {
+ "version": "1.11.2",
+ "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz",
+ "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=",
+ "requires": {
+ "resolve": "1.1.7"
+ },
+ "dependencies": {
+ "resolve": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs="
+ }
+ }
+ },
+ "browser-stdout": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz",
+ "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=",
+ "dev": true
+ },
+ "browser-unpack": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/browser-unpack/-/browser-unpack-1.2.0.tgz",
+ "integrity": "sha1-NXruMfxGeDFoTQY+Q1XgcKeClw0=",
+ "dev": true,
+ "requires": {
+ "acorn": "4.0.13",
+ "browser-pack": "5.0.1",
+ "concat-stream": "1.5.2",
+ "minimist": "1.2.0"
+ },
+ "dependencies": {
+ "browser-pack": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-5.0.1.tgz",
+ "integrity": "sha1-QZdxmyDG4KqglFHFER5T77b7wY0=",
+ "dev": true,
+ "requires": {
+ "JSONStream": "1.3.1",
+ "combine-source-map": "0.6.1",
+ "defined": "1.0.0",
+ "through2": "1.1.1",
+ "umd": "3.0.1"
+ }
+ },
+ "combine-source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.6.1.tgz",
+ "integrity": "sha1-m0oJwxYDPXaODxHgKfonMOB5rZY=",
+ "dev": true,
+ "requires": {
+ "convert-source-map": "1.1.3",
+ "inline-source-map": "0.5.0",
+ "lodash.memoize": "3.0.4",
+ "source-map": "0.4.4"
+ }
+ },
+ "convert-source-map": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz",
+ "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=",
+ "dev": true
+ },
+ "inline-source-map": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.5.0.tgz",
+ "integrity": "sha1-Skxd2OT7Xps82mDIIt+tyu5m4K8=",
+ "dev": true,
+ "requires": {
+ "source-map": "0.4.4"
+ }
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "source-map": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "dev": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
+ },
+ "through2": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz",
+ "integrity": "sha1-CEfLxESfNAVXTb3M2buEG4OsNUU=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.1.14",
+ "xtend": "4.0.1"
+ }
+ }
+ }
+ },
+ "browserify": {
+ "version": "16.1.0",
+ "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.1.0.tgz",
+ "integrity": "sha512-jwSlLNDlNzX6ETpLN12n+BIXN5PlOWqnwNVFQeJ7oN4L26Uy7N8gXXvlVOdwTLi0Q1EVp2oGm1LMqYt0dvVryg==",
+ "requires": {
+ "JSONStream": "1.3.1",
+ "assert": "1.4.1",
+ "browser-pack": "6.1.0",
+ "browser-resolve": "1.11.2",
+ "browserify-zlib": "0.2.0",
+ "buffer": "5.1.0",
+ "cached-path-relative": "1.0.1",
+ "concat-stream": "1.6.2",
+ "console-browserify": "1.1.0",
+ "constants-browserify": "1.0.0",
+ "crypto-browserify": "3.12.0",
+ "defined": "1.0.0",
+ "deps-sort": "2.0.0",
+ "domain-browser": "1.2.0",
+ "duplexer2": "0.1.4",
+ "events": "2.0.0",
+ "glob": "7.1.2",
+ "has": "1.0.1",
+ "htmlescape": "1.1.1",
+ "https-browserify": "1.0.0",
+ "inherits": "2.0.3",
+ "insert-module-globals": "7.0.6",
+ "labeled-stream-splicer": "2.0.1",
+ "mkdirp": "0.5.1",
+ "module-deps": "6.0.2",
+ "os-browserify": "0.3.0",
+ "parents": "1.0.1",
+ "path-browserify": "0.0.0",
+ "process": "0.11.10",
+ "punycode": "1.4.1",
+ "querystring-es3": "0.2.1",
+ "read-only-stream": "2.0.0",
+ "readable-stream": "2.3.3",
+ "resolve": "1.5.0",
+ "shasum": "1.0.2",
+ "shell-quote": "1.6.1",
+ "stream-browserify": "2.0.1",
+ "stream-http": "2.8.1",
+ "string_decoder": "1.0.3",
+ "subarg": "1.0.0",
+ "syntax-error": "1.4.0",
+ "through2": "2.0.3",
+ "timers-browserify": "1.4.2",
+ "tty-browserify": "0.0.1",
+ "url": "0.11.0",
+ "util": "0.10.3",
+ "vm-browserify": "0.0.4",
+ "xtend": "4.0.1"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "1.0.0",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3",
+ "typedarray": "0.0.6"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "browserify-aes": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+ "requires": {
+ "buffer-xor": "1.0.3",
+ "cipher-base": "1.0.4",
+ "create-hash": "1.2.0",
+ "evp_bytestokey": "1.0.3",
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "browserify-cache-api": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-cache-api/-/browserify-cache-api-3.0.1.tgz",
+ "integrity": "sha1-liR+hT8Gj9bg1FzHPwuyzZd47wI=",
+ "requires": {
+ "async": "1.5.2",
+ "through2": "2.0.3",
+ "xtend": "4.0.1"
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+ "requires": {
+ "browserify-aes": "1.2.0",
+ "browserify-des": "1.0.1",
+ "evp_bytestokey": "1.0.3"
+ }
+ },
+ "browserify-des": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.1.tgz",
+ "integrity": "sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==",
+ "requires": {
+ "cipher-base": "1.0.4",
+ "des.js": "1.0.0",
+ "inherits": "2.0.3"
+ }
+ },
+ "browserify-incremental": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/browserify-incremental/-/browserify-incremental-3.1.1.tgz",
+ "integrity": "sha1-BxPLdYckemMqnwjPG9FpuHi2Koo=",
+ "requires": {
+ "JSONStream": "0.10.0",
+ "browserify-cache-api": "3.0.1",
+ "through2": "2.0.3",
+ "xtend": "4.0.1"
+ },
+ "dependencies": {
+ "JSONStream": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.10.0.tgz",
+ "integrity": "sha1-dDSdDYlSK3HzDwoD/5vSDKbxKsA=",
+ "requires": {
+ "jsonparse": "0.0.5",
+ "through": "2.3.8"
+ }
+ },
+ "jsonparse": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz",
+ "integrity": "sha1-MwVCrT8KZUZlt3jz6y2an6UHrGQ="
+ }
+ }
+ },
+ "browserify-rsa": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+ "requires": {
+ "bn.js": "4.11.8",
+ "randombytes": "2.0.6"
+ }
+ },
+ "browserify-sign": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
+ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+ "requires": {
+ "bn.js": "4.11.8",
+ "browserify-rsa": "4.0.1",
+ "create-hash": "1.2.0",
+ "create-hmac": "1.1.7",
+ "elliptic": "6.4.0",
+ "inherits": "2.0.3",
+ "parse-asn1": "5.1.1"
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+ "requires": {
+ "pako": "1.0.6"
+ }
+ },
+ "buffer": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.1.0.tgz",
+ "integrity": "sha512-YkIRgwsZwJWTnyQrsBTWefizHh+8GYj3kbL1BTiAQ/9pwpino0G7B2gp5tx/FUBqUlvtxV85KNR3mwfAtv15Yw==",
+ "requires": {
+ "base64-js": "1.2.3",
+ "ieee754": "1.1.11"
+ }
+ },
+ "buffer-from": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz",
+ "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA=="
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
+ },
+ "builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+ "dev": true
+ },
+ "builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug="
+ },
+ "bundle-collapser": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/bundle-collapser/-/bundle-collapser-1.3.0.tgz",
+ "integrity": "sha1-9LT/WLLyLudwGyD6djBuI/U6P7Y=",
+ "dev": true,
+ "requires": {
+ "browser-pack": "5.0.1",
+ "browser-unpack": "1.2.0",
+ "concat-stream": "1.5.2",
+ "falafel": "2.1.0",
+ "minimist": "1.2.0",
+ "through2": "2.0.3"
+ },
+ "dependencies": {
+ "browser-pack": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-5.0.1.tgz",
+ "integrity": "sha1-QZdxmyDG4KqglFHFER5T77b7wY0=",
+ "dev": true,
+ "requires": {
+ "JSONStream": "1.3.1",
+ "combine-source-map": "0.6.1",
+ "defined": "1.0.0",
+ "through2": "1.1.1",
+ "umd": "3.0.1"
+ },
+ "dependencies": {
+ "through2": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz",
+ "integrity": "sha1-CEfLxESfNAVXTb3M2buEG4OsNUU=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.1.14",
+ "xtend": "4.0.1"
+ }
+ }
+ }
+ },
+ "combine-source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.6.1.tgz",
+ "integrity": "sha1-m0oJwxYDPXaODxHgKfonMOB5rZY=",
+ "dev": true,
+ "requires": {
+ "convert-source-map": "1.1.3",
+ "inline-source-map": "0.5.0",
+ "lodash.memoize": "3.0.4",
+ "source-map": "0.4.4"
+ }
+ },
+ "convert-source-map": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz",
+ "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=",
+ "dev": true
+ },
+ "inline-source-map": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.5.0.tgz",
+ "integrity": "sha1-Skxd2OT7Xps82mDIIt+tyu5m4K8=",
+ "dev": true,
+ "requires": {
+ "source-map": "0.4.4"
+ }
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "source-map": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "dev": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
+ }
+ }
+ },
+ "cached-path-relative": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz",
+ "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc="
+ },
+ "caller-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+ "dev": true,
+ "requires": {
+ "callsites": "0.2.0"
+ }
+ },
+ "callsites": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "chardet": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.0.tgz",
+ "integrity": "sha1-C74TVaxE16PtSpJXB8TvcPgZD2w=",
+ "dev": true
+ },
+ "cheerio": {
+ "version": "0.22.0",
+ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz",
+ "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=",
+ "dev": true,
+ "requires": {
+ "css-select": "1.2.0",
+ "dom-serializer": "0.1.0",
+ "entities": "1.1.1",
+ "htmlparser2": "3.9.2",
+ "lodash.assignin": "4.2.0",
+ "lodash.bind": "4.2.1",
+ "lodash.defaults": "4.2.0",
+ "lodash.filter": "4.6.0",
+ "lodash.flatten": "4.4.0",
+ "lodash.foreach": "4.5.0",
+ "lodash.map": "4.6.0",
+ "lodash.merge": "4.6.0",
+ "lodash.pick": "4.4.0",
+ "lodash.reduce": "4.6.0",
+ "lodash.reject": "4.6.0",
+ "lodash.some": "4.6.0"
+ }
+ },
+ "cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "requires": {
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "circular-json": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
+ "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
+ "dev": true
+ },
+ "classnames": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.5.tgz",
+ "integrity": "sha1-+zgB1FNGdknvNgPH1hoCvRKb3m0="
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "2.0.0"
+ }
+ },
+ "cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+ "dev": true
+ },
+ "clipboard": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-1.7.1.tgz",
+ "integrity": "sha1-Ng1taUbpmnof7zleQrqStem1oWs=",
+ "requires": {
+ "good-listener": "1.2.2",
+ "select": "1.1.2",
+ "tiny-emitter": "2.0.2"
+ }
+ },
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs="
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
+ },
+ "collapse-white-space": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.3.tgz",
+ "integrity": "sha1-S5BvZw5aljqHt2sOFolkM0G2Ajw=",
+ "dev": true
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "combine-source-map": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz",
+ "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=",
+ "requires": {
+ "convert-source-map": "1.1.3",
+ "inline-source-map": "0.6.2",
+ "lodash.memoize": "3.0.4",
+ "source-map": "0.5.7"
+ },
+ "dependencies": {
+ "convert-source-map": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz",
+ "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA="
+ }
+ }
+ },
+ "combined-stream": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
+ "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
+ "requires": {
+ "delayed-stream": "1.0.0"
+ }
+ },
+ "commander": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
+ "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
+ "dev": true,
+ "requires": {
+ "graceful-readlink": "1.0.1"
+ }
+ },
+ "commonmark": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/commonmark/-/commonmark-0.28.1.tgz",
+ "integrity": "sha1-Buq41SM4uDn6Gi11rwCF7tGxvq4=",
+ "requires": {
+ "entities": "1.1.1",
+ "mdurl": "1.0.1",
+ "minimist": "1.2.0",
+ "string.prototype.repeat": "0.2.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ }
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "concat-stream": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz",
+ "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.0.6",
+ "typedarray": "0.0.6"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
+ "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "string_decoder": "0.10.31",
+ "util-deprecate": "1.0.2"
+ }
+ }
+ }
+ },
+ "console-browserify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+ "requires": {
+ "date-now": "0.1.4"
+ }
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U="
+ },
+ "contains-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
+ "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
+ "dev": true
+ },
+ "content-type-parser": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.2.tgz",
+ "integrity": "sha512-lM4l4CnMEwOLHAHr/P6MEZwZFPJFtAAKgL6pogbXmVZggIqXhdB6RbBtPOTsw2FcXwYhehRGERJmRrjOiIB8pQ=="
+ },
+ "convert-hex": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/convert-hex/-/convert-hex-0.1.0.tgz",
+ "integrity": "sha1-CMBFaJIsJ3drii6BqV05M2LqC2U="
+ },
+ "convert-source-map": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz",
+ "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU="
+ },
+ "convert-string": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/convert-string/-/convert-string-0.1.0.tgz",
+ "integrity": "sha1-ec5BqbsNA7z3LNxqjzxW+7xkQQo="
+ },
+ "cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
+ },
+ "core-js": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
+ "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY="
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ },
+ "create-ecdh": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.1.tgz",
+ "integrity": "sha512-iZvCCg8XqHQZ1ioNBTzXS/cQSkqkqcPs8xSX4upNB+DAk9Ht3uzQf2J32uAHNCne8LDmKr29AgZrEs4oIrwLuQ==",
+ "requires": {
+ "bn.js": "4.11.8",
+ "elliptic": "6.4.0"
+ }
+ },
+ "create-hash": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+ "requires": {
+ "cipher-base": "1.0.4",
+ "inherits": "2.0.3",
+ "md5.js": "1.3.4",
+ "ripemd160": "2.0.1",
+ "sha.js": "2.4.11"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "requires": {
+ "cipher-base": "1.0.4",
+ "create-hash": "1.2.0",
+ "inherits": "2.0.3",
+ "ripemd160": "2.0.1",
+ "safe-buffer": "5.1.1",
+ "sha.js": "2.4.11"
+ }
+ },
+ "create-react-class": {
+ "version": "15.6.2",
+ "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.2.tgz",
+ "integrity": "sha1-zx7RXxKq1/FO9fLf4F5sQvke8Co=",
+ "requires": {
+ "fbjs": "0.8.16",
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1"
+ },
+ "dependencies": {
+ "fbjs": {
+ "version": "0.8.16",
+ "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz",
+ "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=",
+ "requires": {
+ "core-js": "1.2.7",
+ "isomorphic-fetch": "2.2.1",
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1",
+ "promise": "7.3.1",
+ "setimmediate": "1.0.5",
+ "ua-parser-js": "0.7.17"
+ }
+ }
+ }
+ },
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "4.1.1",
+ "shebang-command": "1.2.0",
+ "which": "1.3.0"
+ }
+ },
+ "cryptiles": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz",
+ "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=",
+ "requires": {
+ "boom": "5.2.0"
+ },
+ "dependencies": {
+ "boom": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
+ "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
+ "requires": {
+ "hoek": "4.2.0"
+ }
+ }
+ }
+ },
+ "crypto-browserify": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+ "requires": {
+ "browserify-cipher": "1.0.1",
+ "browserify-sign": "4.0.4",
+ "create-ecdh": "4.0.1",
+ "create-hash": "1.2.0",
+ "create-hmac": "1.1.7",
+ "diffie-hellman": "5.0.3",
+ "inherits": "2.0.3",
+ "pbkdf2": "3.0.14",
+ "public-encrypt": "4.0.2",
+ "randombytes": "2.0.6",
+ "randomfill": "1.0.4"
+ }
+ },
+ "css-select": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
+ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
+ "dev": true,
+ "requires": {
+ "boolbase": "1.0.0",
+ "css-what": "2.1.0",
+ "domutils": "1.5.1",
+ "nth-check": "1.0.1"
+ }
+ },
+ "css-what": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz",
+ "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=",
+ "dev": true
+ },
+ "cssom": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz",
+ "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs="
+ },
+ "cssstyle": {
+ "version": "0.2.37",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz",
+ "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=",
+ "requires": {
+ "cssom": "0.3.2"
+ }
+ },
+ "cwise-compiler": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/cwise-compiler/-/cwise-compiler-1.1.3.tgz",
+ "integrity": "sha1-9NZnQQ6FDToxOn0tt7HlBbsDTMU=",
+ "requires": {
+ "uniq": "1.0.1"
+ }
+ },
+ "d3": {
+ "version": "3.5.17",
+ "resolved": "https://registry.npmjs.org/d3/-/d3-3.5.17.tgz",
+ "integrity": "sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g="
+ },
+ "damerau-levenshtein": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz",
+ "integrity": "sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ=",
+ "dev": true
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "requires": {
+ "assert-plus": "1.0.0"
+ }
+ },
+ "data-uri-to-buffer": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-0.0.3.tgz",
+ "integrity": "sha1-GK6XmmoMqZSwYlhTkW0mYruuCxo="
+ },
+ "date-now": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
+ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs="
+ },
+ "debounce": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.1.0.tgz",
+ "integrity": "sha512-ZQVKfRVlwRfD150ndzEK8M90ABT+Y/JQKs4Y7U4MXdpuoUkkrr4DwKbVux3YjylA5bUMUj0Nc3pMxPJX6N2QQQ=="
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-equal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
+ "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU="
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ="
+ },
+ "define-properties": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz",
+ "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=",
+ "dev": true,
+ "requires": {
+ "foreach": "2.0.5",
+ "object-keys": "1.0.11"
+ }
+ },
+ "defined": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM="
+ },
+ "del": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
+ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
+ "dev": true,
+ "requires": {
+ "globby": "5.0.0",
+ "is-path-cwd": "1.0.0",
+ "is-path-in-cwd": "1.0.0",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "rimraf": "2.6.2"
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
+ },
+ "delegate": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.1.3.tgz",
+ "integrity": "sha1-moJRp3fXAl+qVXN7w7BxdCEnqf0="
+ },
+ "deps-sort": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz",
+ "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=",
+ "requires": {
+ "JSONStream": "1.3.1",
+ "shasum": "1.0.2",
+ "subarg": "1.0.0",
+ "through2": "2.0.3"
+ }
+ },
+ "des.js": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
+ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+ "requires": {
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.1"
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "detective": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/detective/-/detective-5.1.0.tgz",
+ "integrity": "sha512-TFHMqfOvxlgrfVzTEkNBSh9SvSNX/HfF4OFI2QFGCyPm02EsyILqnUeb5P6q7JZ3SFNTBL5t2sePRgrN4epUWQ==",
+ "requires": {
+ "acorn-node": "1.3.0",
+ "defined": "1.0.0",
+ "minimist": "1.2.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ }
+ }
+ },
+ "diff": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz",
+ "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=",
+ "dev": true
+ },
+ "diffie-hellman": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+ "requires": {
+ "bn.js": "4.11.8",
+ "miller-rabin": "4.0.1",
+ "randombytes": "2.0.6"
+ }
+ },
+ "disposables": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/disposables/-/disposables-1.0.1.tgz",
+ "integrity": "sha1-BkcnoltU9QK9griaot+4358bOeM="
+ },
+ "dnd-core": {
+ "version": "2.5.4",
+ "resolved": "https://registry.npmjs.org/dnd-core/-/dnd-core-2.5.4.tgz",
+ "integrity": "sha512-BcI782MfTm3wCxeIS5c7tAutyTwEIANtuu3W6/xkoJRwiqhRXKX3BbGlycUxxyzMsKdvvoavxgrC3EMPFNYL9A==",
+ "requires": {
+ "asap": "2.0.6",
+ "invariant": "2.2.2",
+ "lodash": "4.17.4",
+ "redux": "3.7.2"
+ }
+ },
+ "doctrine": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.2.tgz",
+ "integrity": "sha512-y0tm5Pq6ywp3qSTZ1vPgVdAnbDEoeoc5wlOHXoY1c4Wug/a7JvqHIl7BTvwodaHmejWkK/9dSb3sCYfyo/om8A==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom-find": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/dom-find/-/dom-find-0.3.5.tgz",
+ "integrity": "sha1-krbdQzRurOVKp9Wq7G079cVDzw0="
+ },
+ "dom-helpers": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.2.1.tgz",
+ "integrity": "sha1-MgPgf+0he9H0JLAZc1WC/Deyglo="
+ },
+ "dom-serializer": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
+ "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.1.3",
+ "entities": "1.1.1"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
+ "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=",
+ "dev": true
+ }
+ }
+ },
+ "domain-browser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA=="
+ },
+ "domelementtype": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
+ "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=",
+ "dev": true
+ },
+ "domhandler": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz",
+ "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.3.0"
+ }
+ },
+ "domutils": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "0.1.0",
+ "domelementtype": "1.3.0"
+ }
+ },
+ "duplexer2": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
+ "requires": {
+ "readable-stream": "2.3.3"
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
+ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1"
+ }
+ },
+ "editions": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.3.tgz",
+ "integrity": "sha1-CQcQG92iD6w8vjNMJ8vQaI3Jmls=",
+ "dev": true
+ },
+ "elliptic": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
+ "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=",
+ "requires": {
+ "bn.js": "4.11.8",
+ "brorand": "1.1.0",
+ "hash.js": "1.1.3",
+ "hmac-drbg": "1.0.1",
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.1",
+ "minimalistic-crypto-utils": "1.0.1"
+ }
+ },
+ "emoji-regex": {
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.1.tgz",
+ "integrity": "sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ==",
+ "dev": true
+ },
+ "encoding": {
+ "version": "0.1.12",
+ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
+ "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
+ "requires": {
+ "iconv-lite": "0.4.19"
+ }
+ },
+ "entities": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
+ "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA="
+ },
+ "envify": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/envify/-/envify-4.1.0.tgz",
+ "integrity": "sha512-IKRVVoAYr4pIx4yIWNsz9mOsboxlNXiu7TNBnem/K/uTHdkyzXWDzHCK7UTolqBbgaBz0tQHsD3YNls0uIIjiw==",
+ "dev": true,
+ "requires": {
+ "esprima": "4.0.0",
+ "through": "2.3.8"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
+ "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==",
+ "dev": true
+ }
+ }
+ },
+ "enzyme": {
+ "version": "2.9.1",
+ "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-2.9.1.tgz",
+ "integrity": "sha1-B9XOaRJBJA+4F78sSxjW5TAkDfY=",
+ "dev": true,
+ "requires": {
+ "cheerio": "0.22.0",
+ "function.prototype.name": "1.0.3",
+ "is-subset": "0.1.1",
+ "lodash": "4.17.4",
+ "object-is": "1.0.1",
+ "object.assign": "4.0.4",
+ "object.entries": "1.0.4",
+ "object.values": "1.0.4",
+ "prop-types": "15.6.0",
+ "uuid": "3.1.0"
+ },
+ "dependencies": {
+ "uuid": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz",
+ "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==",
+ "dev": true
+ }
+ }
+ },
+ "error-ex": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
+ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "0.2.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.10.0.tgz",
+ "integrity": "sha512-/uh/DhdqIOSkAWifU+8nG78vlQxdLckUdI/sPgy0VhuXi2qJ7T8czBmqIYtLQVpCIFYafChnsRsB5pyb1JdmCQ==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "1.1.1",
+ "function-bind": "1.1.1",
+ "has": "1.0.1",
+ "is-callable": "1.1.3",
+ "is-regex": "1.0.4"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz",
+ "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=",
+ "dev": true,
+ "requires": {
+ "is-callable": "1.1.3",
+ "is-date-object": "1.0.1",
+ "is-symbol": "1.0.1"
+ }
+ },
+ "es6-promise-debounce": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/es6-promise-debounce/-/es6-promise-debounce-1.0.1.tgz",
+ "integrity": "sha1-bUez3S2sX+DH2ve068mGmhl9kdg="
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+ },
+ "escodegen": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz",
+ "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==",
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.5.7"
+ }
+ },
+ "eslint": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.12.0.tgz",
+ "integrity": "sha512-Ohv4NU0FffkEe4so8DBrdfRUbGUtM4XnBTDll2pY7OdW3VkjBOZPerx3Bmuhg6S6D6r8+cli0EezN0xawUfYwg==",
+ "dev": true,
+ "requires": {
+ "ajv": "5.5.0",
+ "babel-code-frame": "6.26.0",
+ "chalk": "2.3.0",
+ "concat-stream": "1.6.0",
+ "cross-spawn": "5.1.0",
+ "debug": "3.1.0",
+ "doctrine": "2.0.2",
+ "eslint-scope": "3.7.1",
+ "espree": "3.5.2",
+ "esquery": "1.0.0",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "file-entry-cache": "2.0.0",
+ "functional-red-black-tree": "1.0.1",
+ "glob": "7.1.2",
+ "globals": "11.0.1",
+ "ignore": "3.3.7",
+ "imurmurhash": "0.1.4",
+ "inquirer": "3.3.0",
+ "is-resolvable": "1.0.0",
+ "js-yaml": "3.10.0",
+ "json-stable-stringify-without-jsonify": "1.0.1",
+ "levn": "0.3.0",
+ "lodash": "4.17.4",
+ "minimatch": "3.0.4",
+ "mkdirp": "0.5.1",
+ "natural-compare": "1.4.0",
+ "optionator": "0.8.2",
+ "path-is-inside": "1.0.2",
+ "pluralize": "7.0.0",
+ "progress": "2.0.0",
+ "require-uncached": "1.0.3",
+ "semver": "5.4.1",
+ "strip-ansi": "4.0.0",
+ "strip-json-comments": "2.0.1",
+ "table": "4.0.2",
+ "text-table": "0.2.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "concat-stream": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
+ "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3",
+ "typedarray": "0.0.6"
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "globals": {
+ "version": "11.0.1",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.0.1.tgz",
+ "integrity": "sha1-Eqh7sBDlFUOWrMU14eQ/x1Ow5eg=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "3.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "eslint-config-airbnb": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-15.1.0.tgz",
+ "integrity": "sha512-m0q9fiMBzDAIbirlGnpJNWToIhdhJmXXnMG+IFflYzzod9231ZhtmGKegKg8E9T8F1YuVaDSU1FnCm5b9iXVhQ==",
+ "dev": true,
+ "requires": {
+ "eslint-config-airbnb-base": "11.3.2"
+ }
+ },
+ "eslint-config-airbnb-base": {
+ "version": "11.3.2",
+ "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.3.2.tgz",
+ "integrity": "sha512-/fhjt/VqzBA2SRsx7ErDtv6Ayf+XLw9LIOqmpBuHFCVwyJo2EtzGWMB9fYRFBoWWQLxmNmCpenNiH0RxyeS41w==",
+ "dev": true,
+ "requires": {
+ "eslint-restricted-globals": "0.1.1"
+ }
+ },
+ "eslint-import-resolver-node": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz",
+ "integrity": "sha512-yUtXS15gIcij68NmXmP9Ni77AQuCN0itXbCc/jWd8C6/yKZaSNXicpC8cgvjnxVdmfsosIXrjpzFq7GcDryb6A==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "resolve": "1.5.0"
+ }
+ },
+ "eslint-module-utils": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz",
+ "integrity": "sha512-jDI/X5l/6D1rRD/3T43q8Qgbls2nq5km5KSqiwlyUbGo5+04fXhMKdCPhjwbqAa6HXWaMxj8Q4hQDIh7IadJQw==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "pkg-dir": "1.0.0"
+ }
+ },
+ "eslint-plugin-import": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz",
+ "integrity": "sha512-Rf7dfKJxZ16QuTgVv1OYNxkZcsu/hULFnC+e+w0Gzi6jMC3guQoWQgxYxc54IDRinlb6/0v5z/PxxIKmVctN+g==",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "1.1.1",
+ "contains-path": "0.1.0",
+ "debug": "2.6.9",
+ "doctrine": "1.5.0",
+ "eslint-import-resolver-node": "0.3.1",
+ "eslint-module-utils": "2.1.1",
+ "has": "1.0.1",
+ "lodash.cond": "4.5.2",
+ "minimatch": "3.0.4",
+ "read-pkg-up": "2.0.0"
+ },
+ "dependencies": {
+ "doctrine": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
+ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "eslint-plugin-jsx-a11y": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.1.1.tgz",
+ "integrity": "sha512-5I9SpoP7gT4wBFOtXT8/tXNPYohHBVfyVfO17vkbC7r9kEIxYJF12D3pKqhk8+xnk12rfxKClS3WCFpVckFTPQ==",
+ "dev": true,
+ "requires": {
+ "aria-query": "0.7.0",
+ "array-includes": "3.0.3",
+ "ast-types-flow": "0.0.7",
+ "axobject-query": "0.1.0",
+ "damerau-levenshtein": "1.0.4",
+ "emoji-regex": "6.5.1",
+ "jsx-ast-utils": "1.4.1"
+ }
+ },
+ "eslint-plugin-react": {
+ "version": "7.5.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.5.1.tgz",
+ "integrity": "sha512-YGSjB9Qu6QbVTroUZi66pYky3DfoIPLdHQ/wmrBGyBRnwxQsBXAov9j2rpXt/55i8nyMv6IRWJv2s4d4YnduzQ==",
+ "dev": true,
+ "requires": {
+ "doctrine": "2.0.2",
+ "has": "1.0.1",
+ "jsx-ast-utils": "2.0.1",
+ "prop-types": "15.6.0"
+ },
+ "dependencies": {
+ "jsx-ast-utils": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz",
+ "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=",
+ "dev": true,
+ "requires": {
+ "array-includes": "3.0.3"
+ }
+ }
+ }
+ },
+ "eslint-restricted-globals": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz",
+ "integrity": "sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=",
+ "dev": true
+ },
+ "eslint-scope": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz",
+ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
+ "dev": true,
+ "requires": {
+ "esrecurse": "4.2.0",
+ "estraverse": "4.2.0"
+ }
+ },
+ "espree": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.2.tgz",
+ "integrity": "sha512-sadKeYwaR/aJ3stC2CdvgXu1T16TdYN+qwCpcWbMnGJ8s0zNWemzrvb2GbD4OhmJ/fwpJjudThAlLobGbWZbCQ==",
+ "dev": true,
+ "requires": {
+ "acorn": "5.2.1",
+ "acorn-jsx": "3.0.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz",
+ "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==",
+ "dev": true
+ }
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM="
+ },
+ "esquery": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz",
+ "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=",
+ "dev": true,
+ "requires": {
+ "estraverse": "4.2.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz",
+ "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=",
+ "dev": true,
+ "requires": {
+ "estraverse": "4.2.0",
+ "object-assign": "4.1.1"
+ }
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM="
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
+ },
+ "eventemitter3": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz",
+ "integrity": "sha1-teEHm1n7XhuidxwKmTvgYKWMmbo="
+ },
+ "events": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-2.0.0.tgz",
+ "integrity": "sha512-r/M5YkNg9zwI8QbSf7tsDWWJvO3PGwZXyG7GpFAxtMASnHL2eblFd7iHiGPtyGKKFPZ59S63NeX10Ws6WqGDcg=="
+ },
+ "evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "requires": {
+ "md5.js": "1.3.4",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "expect": {
+ "version": "1.20.2",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-1.20.2.tgz",
+ "integrity": "sha1-1Fj+TFYAQDa64yMkFqP2Nh8E+WU=",
+ "dev": true,
+ "requires": {
+ "define-properties": "1.1.2",
+ "has": "1.0.1",
+ "is-equal": "1.5.5",
+ "is-regex": "1.0.4",
+ "object-inspect": "1.4.0",
+ "object-keys": "1.0.11",
+ "tmatch": "2.0.1"
+ }
+ },
+ "expect-jsx": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/expect-jsx/-/expect-jsx-2.6.0.tgz",
+ "integrity": "sha1-Q/SEgoB305QkZEISBbeMdbl5Hms=",
+ "dev": true,
+ "requires": {
+ "collapse-white-space": "1.0.3",
+ "react": "15.3.2",
+ "react-element-to-jsx-string": "3.2.0"
+ }
+ },
+ "extend": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
+ "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ="
+ },
+ "external-editor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz",
+ "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==",
+ "dev": true,
+ "requires": {
+ "chardet": "0.4.0",
+ "iconv-lite": "0.4.19",
+ "tmp": "0.0.33"
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
+ },
+ "falafel": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.1.0.tgz",
+ "integrity": "sha1-lrsXdh2rqU9G0AFzizzt86Z/4Gw=",
+ "dev": true,
+ "requires": {
+ "acorn": "5.2.1",
+ "foreach": "2.0.5",
+ "isarray": "0.0.1",
+ "object-keys": "1.0.11"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz",
+ "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ }
+ }
+ },
+ "fast-deep-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz",
+ "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8="
+ },
+ "fast-diff": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.1.tgz",
+ "integrity": "sha1-CuoOTmBbaiGJ8Ok21Lf7rxt8/Zs="
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
+ },
+ "fbemitter": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-2.1.1.tgz",
+ "integrity": "sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU=",
+ "requires": {
+ "fbjs": "0.8.16"
+ },
+ "dependencies": {
+ "fbjs": {
+ "version": "0.8.16",
+ "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz",
+ "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=",
+ "requires": {
+ "core-js": "1.2.7",
+ "isomorphic-fetch": "2.2.1",
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1",
+ "promise": "7.3.1",
+ "setimmediate": "1.0.5",
+ "ua-parser-js": "0.7.17"
+ }
+ }
+ }
+ },
+ "fbjs": {
+ "version": "0.1.0-alpha.7",
+ "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.1.0-alpha.7.tgz",
+ "integrity": "sha1-rUMIuPIy+zxzYDNJ6nJdHpw5Mjw=",
+ "requires": {
+ "core-js": "1.2.7",
+ "promise": "7.3.1",
+ "whatwg-fetch": "0.9.0"
+ },
+ "dependencies": {
+ "whatwg-fetch": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-0.9.0.tgz",
+ "integrity": "sha1-DjaExsuZlbQ+/J3wPkw2XZX9nMA="
+ }
+ }
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
+ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+ "dev": true,
+ "requires": {
+ "flat-cache": "1.3.0",
+ "object-assign": "4.1.1"
+ }
+ },
+ "file-saver": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-1.3.4.tgz",
+ "integrity": "sha512-4cUSbUiW6YI1WU2Mra5Be4hvX3bA1uO4s1aO0bfNK0npwDHluyGCC6JXBl1gI6wF4DmqjEmNoMSBn5N0Y9Kj1w=="
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "2.1.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "flat-cache": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz",
+ "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
+ "dev": true,
+ "requires": {
+ "circular-json": "0.3.3",
+ "del": "2.2.2",
+ "graceful-fs": "4.1.11",
+ "write": "0.2.1"
+ }
+ },
+ "flux": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/flux/-/flux-2.1.1.tgz",
+ "integrity": "sha1-LGrGUtQzdIiWhInGWG86/yajjqQ=",
+ "requires": {
+ "fbemitter": "2.1.1",
+ "fbjs": "0.1.0-alpha.7",
+ "immutable": "3.8.2"
+ }
+ },
+ "foreach": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
+ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
+ "dev": true
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
+ },
+ "form-data": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz",
+ "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=",
+ "requires": {
+ "asynckit": "0.4.0",
+ "combined-stream": "1.0.5",
+ "mime-types": "2.1.17"
+ }
+ },
+ "formatio": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.1.1.tgz",
+ "integrity": "sha1-XtPM1jZVEJc4NGXZlhmRAOhhYek=",
+ "dev": true,
+ "requires": {
+ "samsam": "1.1.2"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "function.prototype.name": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.0.3.tgz",
+ "integrity": "sha512-5EblxZUdioXi2JiMZ9FUbwYj40eQ9MFHyzFLBSPdlRl3SO8l7SLWuAnQ/at/1Wi4hjJwME/C5WpF2ZfAc8nGNw==",
+ "dev": true,
+ "requires": {
+ "define-properties": "1.1.2",
+ "function-bind": "1.1.1",
+ "is-callable": "1.1.3"
+ }
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "get-pixels": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/get-pixels/-/get-pixels-3.3.0.tgz",
+ "integrity": "sha1-jZeVvq4YhQuED3SVgbrcBdPjbkE=",
+ "requires": {
+ "data-uri-to-buffer": "0.0.3",
+ "jpeg-js": "0.1.2",
+ "mime-types": "2.1.17",
+ "ndarray": "1.0.18",
+ "ndarray-pack": "1.2.1",
+ "node-bitmap": "0.0.1",
+ "omggif": "1.0.8",
+ "parse-data-uri": "0.2.0",
+ "pngjs": "2.3.1",
+ "request": "2.83.0",
+ "through": "2.3.8"
+ }
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "requires": {
+ "assert-plus": "1.0.0"
+ }
+ },
+ "gl-mat2": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gl-mat2/-/gl-mat2-1.0.1.tgz",
+ "integrity": "sha1-FCUFcwpcL+Hp8l2ezj0NbMJxCjA="
+ },
+ "gl-vec2": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gl-vec2/-/gl-vec2-1.0.0.tgz",
+ "integrity": "sha1-d/zmrpYShW1si2Ic0mHNgoG5xjc="
+ },
+ "gl-vec3": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/gl-vec3/-/gl-vec3-1.0.3.tgz",
+ "integrity": "sha1-EQ/Yl9Byn2OYMHOBVn0JRJQb8is="
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ=="
+ },
+ "globby": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
+ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
+ "dev": true,
+ "requires": {
+ "array-union": "1.0.2",
+ "arrify": "1.0.1",
+ "glob": "7.1.2",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ }
+ }
+ },
+ "good-listener": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz",
+ "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=",
+ "requires": {
+ "delegate": "3.1.3"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "graceful-readlink": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
+ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
+ "dev": true
+ },
+ "growl": {
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz",
+ "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=",
+ "dev": true
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
+ },
+ "har-validator": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
+ "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
+ "requires": {
+ "ajv": "5.5.0",
+ "har-schema": "2.0.0"
+ }
+ },
+ "has": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz",
+ "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=",
+ "requires": {
+ "function-bind": "1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "hash-base": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "requires": {
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "hash.js": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz",
+ "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==",
+ "requires": {
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.1"
+ }
+ },
+ "hawk": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
+ "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==",
+ "requires": {
+ "boom": "4.3.1",
+ "cryptiles": "3.1.2",
+ "hoek": "4.2.0",
+ "sntp": "2.1.0"
+ }
+ },
+ "he": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
+ "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
+ "dev": true
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "requires": {
+ "hash.js": "1.1.3",
+ "minimalistic-assert": "1.0.1",
+ "minimalistic-crypto-utils": "1.0.1"
+ }
+ },
+ "hoek": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz",
+ "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ=="
+ },
+ "hoist-non-react-statics": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz",
+ "integrity": "sha1-ND24TGAYxlB3iJgkATWhQg7iLOA="
+ },
+ "home-or-tmp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
+ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "hosted-git-info": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz",
+ "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==",
+ "dev": true
+ },
+ "html-encoding-sniffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",
+ "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==",
+ "requires": {
+ "whatwg-encoding": "1.0.3"
+ }
+ },
+ "htmlescape": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz",
+ "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E="
+ },
+ "htmlparser2": {
+ "version": "3.9.2",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz",
+ "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.3.0",
+ "domhandler": "2.4.1",
+ "domutils": "1.5.1",
+ "entities": "1.1.1",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "requires": {
+ "assert-plus": "1.0.0",
+ "jsprim": "1.4.1",
+ "sshpk": "1.13.1"
+ }
+ },
+ "httpplease": {
+ "version": "0.16.4",
+ "resolved": "https://registry.npmjs.org/httpplease/-/httpplease-0.16.4.tgz",
+ "integrity": "sha1-04Lr4jDvUHkIC06f/r8xap51wNo=",
+ "requires": {
+ "urllite": "0.5.0",
+ "xmlhttprequest": "1.8.0",
+ "xtend": "3.0.0"
+ },
+ "dependencies": {
+ "xtend": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz",
+ "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo="
+ }
+ }
+ },
+ "https-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM="
+ },
+ "iconv-lite": {
+ "version": "0.4.19",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
+ "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
+ },
+ "ieee754": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz",
+ "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg=="
+ },
+ "ignore": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz",
+ "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==",
+ "dev": true
+ },
+ "immutable": {
+ "version": "3.8.2",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz",
+ "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM="
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "inline-source-map": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz",
+ "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=",
+ "requires": {
+ "source-map": "0.5.7"
+ }
+ },
+ "inquirer": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
+ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "3.0.0",
+ "chalk": "2.3.0",
+ "cli-cursor": "2.1.0",
+ "cli-width": "2.2.0",
+ "external-editor": "2.1.0",
+ "figures": "2.0.0",
+ "lodash": "4.17.4",
+ "mute-stream": "0.0.7",
+ "run-async": "2.3.0",
+ "rx-lite": "4.0.8",
+ "rx-lite-aggregates": "4.0.8",
+ "string-width": "2.1.1",
+ "strip-ansi": "4.0.0",
+ "through": "2.3.8"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "3.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "insert-module-globals": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.6.tgz",
+ "integrity": "sha512-R3sidKJr3SsggqQQ5cEwQb3pWG8RNx0UnpyeiOSR6jorRIeAOzH2gkTWnNdMnyRiVbjrG047K7UCtlMkQ1Mo9w==",
+ "requires": {
+ "JSONStream": "1.3.1",
+ "combine-source-map": "0.8.0",
+ "concat-stream": "1.6.2",
+ "is-buffer": "1.1.6",
+ "lexical-scope": "1.2.0",
+ "path-is-absolute": "1.0.1",
+ "process": "0.11.10",
+ "through2": "2.0.3",
+ "xtend": "4.0.1"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "1.0.0",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3",
+ "typedarray": "0.0.6"
+ }
+ }
+ }
+ },
+ "invariant": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
+ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "iota-array": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/iota-array/-/iota-array-1.0.0.tgz",
+ "integrity": "sha1-ge9X/l0FgUzVjCSDYyqZwwoOgIc="
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-arrow-function": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-arrow-function/-/is-arrow-function-2.0.3.tgz",
+ "integrity": "sha1-Kb4sLY2UUIUri7r7Y1unuNjofsI=",
+ "dev": true,
+ "requires": {
+ "is-callable": "1.1.3"
+ }
+ },
+ "is-boolean-object": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.0.tgz",
+ "integrity": "sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=",
+ "dev": true
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+ },
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "1.1.1"
+ }
+ },
+ "is-callable": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz",
+ "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=",
+ "dev": true
+ },
+ "is-date-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
+ "dev": true
+ },
+ "is-equal": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/is-equal/-/is-equal-1.5.5.tgz",
+ "integrity": "sha1-XoXxlX4FKIMkf+s4aWWju6Ffuz0=",
+ "dev": true,
+ "requires": {
+ "has": "1.0.1",
+ "is-arrow-function": "2.0.3",
+ "is-boolean-object": "1.0.0",
+ "is-callable": "1.1.3",
+ "is-date-object": "1.0.1",
+ "is-generator-function": "1.0.6",
+ "is-number-object": "1.0.3",
+ "is-regex": "1.0.4",
+ "is-string": "1.0.4",
+ "is-symbol": "1.0.1",
+ "object.entries": "1.0.4"
+ }
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "is-generator-function": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.6.tgz",
+ "integrity": "sha1-nnFlPNFf/zQcecQVFGChMdMen8Q=",
+ "dev": true
+ },
+ "is-number-object": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.3.tgz",
+ "integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=",
+ "dev": true
+ },
+ "is-path-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
+ "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
+ "dev": true
+ },
+ "is-path-in-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz",
+ "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=",
+ "dev": true,
+ "requires": {
+ "is-path-inside": "1.0.0"
+ }
+ },
+ "is-path-inside": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz",
+ "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=",
+ "dev": true,
+ "requires": {
+ "path-is-inside": "1.0.2"
+ }
+ },
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+ "dev": true
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
+ },
+ "is-regex": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "dev": true,
+ "requires": {
+ "has": "1.0.1"
+ }
+ },
+ "is-regexp": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
+ "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=",
+ "dev": true
+ },
+ "is-resolvable": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz",
+ "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=",
+ "dev": true,
+ "requires": {
+ "tryit": "1.0.3"
+ }
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
+ },
+ "is-string": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz",
+ "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=",
+ "dev": true
+ },
+ "is-subset": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
+ "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=",
+ "dev": true
+ },
+ "is-symbol": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz",
+ "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=",
+ "dev": true
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isomorphic-fetch": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
+ "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
+ "requires": {
+ "node-fetch": "1.7.3",
+ "whatwg-fetch": "2.0.3"
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+ },
+ "jcampconverter": {
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/jcampconverter/-/jcampconverter-2.9.2.tgz",
+ "integrity": "sha512-iyzJsA6aR7j0GeydMmvy20DeHT0WkzEMf37BE26fyjMNxAsohIjCPxzdzJ4tzNKoySfrco/HejGbQb+3ITFOCQ=="
+ },
+ "jpeg-js": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.1.2.tgz",
+ "integrity": "sha1-E1uZLAV1yYXPoPSUoyJ+0jhYPs4="
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
+ },
+ "js-tree": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/js-tree/-/js-tree-1.1.0.tgz",
+ "integrity": "sha1-CH7j7DZqW3TrFPSGAWxeDmMfFnA="
+ },
+ "js-yaml": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz",
+ "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==",
+ "dev": true,
+ "requires": {
+ "argparse": "1.0.9",
+ "esprima": "4.0.0"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
+ "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==",
+ "dev": true
+ }
+ }
+ },
+ "jsbarcode": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/jsbarcode/-/jsbarcode-3.8.0.tgz",
+ "integrity": "sha1-opA3mnRJ+5J/JtJrMZwkvy3ryPw="
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "optional": true
+ },
+ "jsdom": {
+ "version": "9.12.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-9.12.0.tgz",
+ "integrity": "sha1-6MVG//ywbADUgzyoRBD+1/igl9Q=",
+ "requires": {
+ "abab": "1.0.4",
+ "acorn": "4.0.13",
+ "acorn-globals": "3.1.0",
+ "array-equal": "1.0.0",
+ "content-type-parser": "1.0.2",
+ "cssom": "0.3.2",
+ "cssstyle": "0.2.37",
+ "escodegen": "1.9.0",
+ "html-encoding-sniffer": "1.0.2",
+ "nwmatcher": "1.4.3",
+ "parse5": "1.5.1",
+ "request": "2.83.0",
+ "sax": "1.2.4",
+ "symbol-tree": "3.2.2",
+ "tough-cookie": "2.3.3",
+ "webidl-conversions": "4.0.2",
+ "whatwg-encoding": "1.0.3",
+ "whatwg-url": "4.8.0",
+ "xml-name-validator": "2.0.1"
+ }
+ },
+ "jsdom-global": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/jsdom-global/-/jsdom-global-2.1.0.tgz",
+ "integrity": "sha1-cLo/3bWnNdrIhsSbsRaPoEoQ6Nw=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0="
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
+ },
+ "json-schema-traverse": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="
+ },
+ "json-stable-stringify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz",
+ "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=",
+ "requires": {
+ "jsonify": "0.0.0"
+ }
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
+ },
+ "json3": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
+ "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=",
+ "dev": true
+ },
+ "json5": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="
+ },
+ "jsonify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM="
+ },
+ "jsonparse": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA="
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
+ "jsqr": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/jsqr/-/jsqr-0.2.2.tgz",
+ "integrity": "sha1-jB8Ceft8lFQqqp6K63xyLVI+oJI="
+ },
+ "jsx-ast-utils": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz",
+ "integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=",
+ "dev": true
+ },
+ "keycode": {
+ "version": "2.1.9",
+ "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.1.9.tgz",
+ "integrity": "sha1-lkojxU5IiUBbSGGlyfBIDUUUHfo="
+ },
+ "labeled-stream-splicer": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz",
+ "integrity": "sha512-MC94mHZRvJ3LfykJlTUipBqenZz1pacOZEMhhQ8dMGcDHs0SBE5GbsavUXV7YtP3icBW17W0Zy1I0lfASmo9Pg==",
+ "requires": {
+ "inherits": "2.0.3",
+ "isarray": "2.0.4",
+ "stream-splicer": "2.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.4.tgz",
+ "integrity": "sha512-GMxXOiUirWg1xTKRipM0Ek07rX+ubx4nNVElTJdNLYmNO/2YrDkgJGw9CljXn+r4EWiDQg/8lsRdHyg2PJuUaA=="
+ }
+ }
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lexical-scope": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz",
+ "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=",
+ "requires": {
+ "astw": "2.2.0"
+ }
+ },
+ "load-json-file": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
+ "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "strip-bom": "3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "2.0.0",
+ "path-exists": "3.0.0"
+ },
+ "dependencies": {
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ }
+ }
+ },
+ "lodash": {
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4="
+ },
+ "lodash-es": {
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.4.tgz",
+ "integrity": "sha1-3MHXVS4VCgZABzupyzHXDwMpUOc="
+ },
+ "lodash._baseassign": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz",
+ "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=",
+ "dev": true,
+ "requires": {
+ "lodash._basecopy": "3.0.1",
+ "lodash.keys": "3.1.2"
+ }
+ },
+ "lodash._basecopy": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
+ "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
+ "dev": true
+ },
+ "lodash._basecreate": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz",
+ "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=",
+ "dev": true
+ },
+ "lodash._getnative": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
+ "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
+ "dev": true
+ },
+ "lodash._isiterateecall": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
+ "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
+ "dev": true
+ },
+ "lodash.assignin": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz",
+ "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=",
+ "dev": true
+ },
+ "lodash.bind": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz",
+ "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=",
+ "dev": true
+ },
+ "lodash.cond": {
+ "version": "4.5.2",
+ "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz",
+ "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=",
+ "dev": true
+ },
+ "lodash.create": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz",
+ "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=",
+ "dev": true,
+ "requires": {
+ "lodash._baseassign": "3.2.0",
+ "lodash._basecreate": "3.0.3",
+ "lodash._isiterateecall": "3.0.9"
+ }
+ },
+ "lodash.defaults": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
+ "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=",
+ "dev": true
+ },
+ "lodash.filter": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz",
+ "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=",
+ "dev": true
+ },
+ "lodash.flatten": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
+ "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=",
+ "dev": true
+ },
+ "lodash.foreach": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
+ "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=",
+ "dev": true
+ },
+ "lodash.isarguments": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+ "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
+ "dev": true
+ },
+ "lodash.isarray": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
+ "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
+ "dev": true
+ },
+ "lodash.keys": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
+ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
+ "dev": true,
+ "requires": {
+ "lodash._getnative": "3.9.1",
+ "lodash.isarguments": "3.1.0",
+ "lodash.isarray": "3.0.4"
+ }
+ },
+ "lodash.map": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
+ "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=",
+ "dev": true
+ },
+ "lodash.memoize": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz",
+ "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8="
+ },
+ "lodash.merge": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.0.tgz",
+ "integrity": "sha1-aYhLoUSsM/5plzemCG3v+t0PicU=",
+ "dev": true
+ },
+ "lodash.pick": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
+ "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=",
+ "dev": true
+ },
+ "lodash.reduce": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz",
+ "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=",
+ "dev": true
+ },
+ "lodash.reject": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz",
+ "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=",
+ "dev": true
+ },
+ "lodash.some": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz",
+ "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=",
+ "dev": true
+ },
+ "lolex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.3.2.tgz",
+ "integrity": "sha1-fD2mL/yzDw9agKJWbKJORdigHzE=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "lru-cache": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz",
+ "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "1.0.2",
+ "yallist": "2.1.2"
+ }
+ },
+ "md-gum-polyfill": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/md-gum-polyfill/-/md-gum-polyfill-1.0.0.tgz",
+ "integrity": "sha1-gppRLSXtAxjAxJqWEEi1BfZwots="
+ },
+ "md5.js": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz",
+ "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=",
+ "requires": {
+ "hash-base": "3.0.4",
+ "inherits": "2.0.3"
+ }
+ },
+ "mdurl": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
+ "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4="
+ },
+ "miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+ "requires": {
+ "bn.js": "4.11.8",
+ "brorand": "1.1.0"
+ }
+ },
+ "mime-db": {
+ "version": "1.30.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz",
+ "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE="
+ },
+ "mime-types": {
+ "version": "2.1.17",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz",
+ "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=",
+ "requires": {
+ "mime-db": "1.30.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz",
+ "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=",
+ "dev": true
+ },
+ "minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "mocha": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz",
+ "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==",
+ "dev": true,
+ "requires": {
+ "browser-stdout": "1.3.0",
+ "commander": "2.9.0",
+ "debug": "2.6.8",
+ "diff": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "glob": "7.1.1",
+ "growl": "1.9.2",
+ "he": "1.1.1",
+ "json3": "3.3.2",
+ "lodash.create": "3.1.1",
+ "mkdirp": "0.5.1",
+ "supports-color": "3.1.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.8",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
+ "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz",
+ "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz",
+ "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=",
+ "dev": true,
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "module-deps": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.0.2.tgz",
+ "integrity": "sha512-KWBI3009iRnHjRlxRhe8nJ6kdeBTg4sMi5N6AZgg5f1/v5S7EBCRBOY854I4P5Anl4kx6AJH+4bBBC2Gi3nkvg==",
+ "requires": {
+ "JSONStream": "1.3.1",
+ "browser-resolve": "1.11.2",
+ "cached-path-relative": "1.0.1",
+ "concat-stream": "1.6.2",
+ "defined": "1.0.0",
+ "detective": "5.1.0",
+ "duplexer2": "0.1.4",
+ "inherits": "2.0.3",
+ "parents": "1.0.1",
+ "readable-stream": "2.3.3",
+ "resolve": "1.5.0",
+ "stream-combiner2": "1.1.1",
+ "subarg": "1.0.0",
+ "through2": "2.0.3",
+ "xtend": "4.0.1"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "1.0.0",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3",
+ "typedarray": "0.0.6"
+ }
+ }
+ }
+ },
+ "moment": {
+ "version": "2.19.2",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.19.2.tgz",
+ "integrity": "sha512-Rf6jiHPEfxp9+dlzxPTmRHbvoFXsh2L/U8hOupUMpnuecHQmI6cF6lUbJl3QqKPko1u6ujO+FxtcajLVfLpAtA=="
+ },
+ "moment-precise-range-plugin": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/moment-precise-range-plugin/-/moment-precise-range-plugin-1.2.4.tgz",
+ "integrity": "sha1-hkpdmnsDITJAfUJ8/lG+BWLmzfw=",
+ "requires": {
+ "moment": "2.19.2"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+ "dev": true
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "ndarray": {
+ "version": "1.0.18",
+ "resolved": "https://registry.npmjs.org/ndarray/-/ndarray-1.0.18.tgz",
+ "integrity": "sha1-tg06cyJOxVXQ+qeXEeUCRI/T95M=",
+ "requires": {
+ "iota-array": "1.0.0",
+ "is-buffer": "1.1.6"
+ }
+ },
+ "ndarray-linear-interpolate": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/ndarray-linear-interpolate/-/ndarray-linear-interpolate-1.0.0.tgz",
+ "integrity": "sha1-eLySuFuavBW25n7mWCj54hN65ys="
+ },
+ "ndarray-pack": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ndarray-pack/-/ndarray-pack-1.2.1.tgz",
+ "integrity": "sha1-jK6+qqJNXs9w/4YCBjeXfajuWFo=",
+ "requires": {
+ "cwise-compiler": "1.1.3",
+ "ndarray": "1.0.18"
+ }
+ },
+ "node-bitmap": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/node-bitmap/-/node-bitmap-0.0.1.tgz",
+ "integrity": "sha1-GA6scAPgxwdhjvMTaPYvhLKmkJE="
+ },
+ "node-fetch": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
+ "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
+ "requires": {
+ "encoding": "0.1.12",
+ "is-stream": "1.1.0"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "2.5.0",
+ "is-builtin-module": "1.0.0",
+ "semver": "5.4.1",
+ "validate-npm-package-license": "3.0.1"
+ }
+ },
+ "nth-check": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz",
+ "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=",
+ "dev": true,
+ "requires": {
+ "boolbase": "1.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+ },
+ "numeral": {
+ "version": "1.5.6",
+ "resolved": "https://registry.npmjs.org/numeral/-/numeral-1.5.6.tgz",
+ "integrity": "sha1-ODHbloRRuc9q/5v5WSXx7443sz8="
+ },
+ "nwmatcher": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.3.tgz",
+ "integrity": "sha512-IKdSTiDWCarf2JTS5e9e2+5tPZGdkRJ79XjYV0pzK8Q9BpsFyBq1RGKxzs7Q8UBushGw7m6TzVKz6fcY99iSWw=="
+ },
+ "oauth-sign": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
+ "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM="
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "object-inspect": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.0.tgz",
+ "integrity": "sha512-6QW38aBzieGzJqBaq0VBCgVMuluSYAHMH0xR1CMGfVU3mWLimWhkP97NGBLpJZXYDswaY+Qbo7ExFMTE0w/6zQ==",
+ "dev": true
+ },
+ "object-is": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz",
+ "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
+ "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=",
+ "dev": true
+ },
+ "object.assign": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.0.4.tgz",
+ "integrity": "sha1-scnMBE7xuf5jYG/BQau7MuFHMMw=",
+ "dev": true,
+ "requires": {
+ "define-properties": "1.1.2",
+ "function-bind": "1.1.1",
+ "object-keys": "1.0.11"
+ }
+ },
+ "object.entries": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.0.4.tgz",
+ "integrity": "sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8=",
+ "dev": true,
+ "requires": {
+ "define-properties": "1.1.2",
+ "es-abstract": "1.10.0",
+ "function-bind": "1.1.1",
+ "has": "1.0.1"
+ }
+ },
+ "object.values": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz",
+ "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=",
+ "dev": true,
+ "requires": {
+ "define-properties": "1.1.2",
+ "es-abstract": "1.10.0",
+ "function-bind": "1.1.1",
+ "has": "1.0.1"
+ }
+ },
+ "omggif": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.8.tgz",
+ "integrity": "sha1-F483sqsLPXtG7ToORr0HkLWNNTA="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "1.1.0"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "os-browserify": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc="
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
+ },
+ "p-limit": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz",
+ "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=",
+ "dev": true
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "requires": {
+ "p-limit": "1.1.0"
+ }
+ },
+ "pako": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz",
+ "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg=="
+ },
+ "parchment": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/parchment/-/parchment-1.0.8.tgz",
+ "integrity": "sha1-E+xr7M5sFnSB8Xcr1RpZBt51oDg="
+ },
+ "parents": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz",
+ "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=",
+ "requires": {
+ "path-platform": "0.11.15"
+ }
+ },
+ "parse-asn1": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz",
+ "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==",
+ "requires": {
+ "asn1.js": "4.10.1",
+ "browserify-aes": "1.2.0",
+ "create-hash": "1.2.0",
+ "evp_bytestokey": "1.0.3",
+ "pbkdf2": "3.0.14"
+ }
+ },
+ "parse-data-uri": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/parse-data-uri/-/parse-data-uri-0.2.0.tgz",
+ "integrity": "sha1-vwTYUd1ch7CrI45dAazklLYEtMk=",
+ "requires": {
+ "data-uri-to-buffer": "0.0.3"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "1.3.1"
+ }
+ },
+ "parse5": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz",
+ "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ="
+ },
+ "path": {
+ "version": "0.12.7",
+ "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz",
+ "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=",
+ "requires": {
+ "process": "0.11.10",
+ "util": "0.10.3"
+ }
+ },
+ "path-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
+ "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo="
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME="
+ },
+ "path-platform": {
+ "version": "0.11.15",
+ "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz",
+ "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I="
+ },
+ "path-type": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
+ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+ "dev": true,
+ "requires": {
+ "pify": "2.3.0"
+ }
+ },
+ "pbkdf2": {
+ "version": "3.0.14",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz",
+ "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==",
+ "requires": {
+ "create-hash": "1.2.0",
+ "create-hmac": "1.1.7",
+ "ripemd160": "2.0.1",
+ "safe-buffer": "5.1.1",
+ "sha.js": "2.4.11"
+ }
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "2.0.4"
+ }
+ },
+ "pkg-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
+ "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
+ "dev": true,
+ "requires": {
+ "find-up": "1.1.2"
+ }
+ },
+ "pluralize": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
+ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
+ "dev": true
+ },
+ "pngjs": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-2.3.1.tgz",
+ "integrity": "sha1-EdHhK5y2TWPjDBQ6Mw9MH1Z9qF8="
+ },
+ "popper.js": {
+ "version": "1.12.9",
+ "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.12.9.tgz",
+ "integrity": "sha1-DfvC3/lsRRuzMu3Pz6r1ZtMx1bM="
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg=="
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
+ },
+ "progress": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz",
+ "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=",
+ "dev": true
+ },
+ "promise": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
+ "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
+ "requires": {
+ "asap": "2.0.6"
+ }
+ },
+ "prop-types": {
+ "version": "15.6.0",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.0.tgz",
+ "integrity": "sha1-zq8IMCL8RrSjX2nhPvda7Q1jmFY=",
+ "requires": {
+ "fbjs": "0.8.16",
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1"
+ },
+ "dependencies": {
+ "fbjs": {
+ "version": "0.8.16",
+ "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz",
+ "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=",
+ "requires": {
+ "core-js": "1.2.7",
+ "isomorphic-fetch": "2.2.1",
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1",
+ "promise": "7.3.1",
+ "setimmediate": "1.0.5",
+ "ua-parser-js": "0.7.17"
+ }
+ }
+ }
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "public-encrypt": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz",
+ "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==",
+ "requires": {
+ "bn.js": "4.11.8",
+ "browserify-rsa": "4.0.1",
+ "create-hash": "1.2.0",
+ "parse-asn1": "5.1.1",
+ "randombytes": "2.0.6"
+ }
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+ },
+ "qr.js": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/qr.js/-/qr.js-0.0.0.tgz",
+ "integrity": "sha1-ys6GOG9ZoNuAUPqQ2baw6IoeNk8="
+ },
+ "qrcode.react": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/qrcode.react/-/qrcode.react-0.6.1.tgz",
+ "integrity": "sha1-5xgZLRfN+Hyx8VajTOoW3WdXWTI=",
+ "requires": {
+ "qr.js": "0.0.0"
+ }
+ },
+ "qs": {
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
+ "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A=="
+ },
+ "quagga": {
+ "version": "0.11.6",
+ "resolved": "https://registry.npmjs.org/quagga/-/quagga-0.11.6.tgz",
+ "integrity": "sha1-p5n5QQyTZhUHxTCdWd7vjD0ywXU=",
+ "requires": {
+ "get-pixels": "3.3.0",
+ "gl-mat2": "1.0.1",
+ "gl-vec2": "1.0.0",
+ "gl-vec3": "1.0.3",
+ "lodash": "4.17.4",
+ "ndarray": "1.0.18",
+ "ndarray-linear-interpolate": "1.0.0",
+ "webrtc-adapter": "2.1.0"
+ }
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM="
+ },
+ "quill": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/quill/-/quill-1.1.9.tgz",
+ "integrity": "sha1-hY83OXo5zkBzMomWX4zihDBji5o=",
+ "requires": {
+ "clone": "2.1.1",
+ "deep-equal": "1.0.1",
+ "eventemitter3": "2.0.3",
+ "extend": "3.0.1",
+ "parchment": "1.0.8",
+ "quill-delta": "3.4.3"
+ }
+ },
+ "quill-delta": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-3.4.3.tgz",
+ "integrity": "sha1-K4zDAPjJjVsXnvP9H/S1IvhXodM=",
+ "requires": {
+ "deep-equal": "1.0.1",
+ "extend": "3.0.1",
+ "fast-diff": "1.1.1"
+ }
+ },
+ "randombytes": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
+ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "randomfill": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+ "requires": {
+ "randombytes": "2.0.6",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "react": {
+ "version": "15.3.2",
+ "resolved": "https://registry.npmjs.org/react/-/react-15.3.2.tgz",
+ "integrity": "sha1-p7zNL+6K8SawMX4iLCjR1UUo0J4=",
+ "requires": {
+ "fbjs": "0.8.16",
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1"
+ },
+ "dependencies": {
+ "fbjs": {
+ "version": "0.8.16",
+ "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz",
+ "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=",
+ "requires": {
+ "core-js": "1.2.7",
+ "isomorphic-fetch": "2.2.1",
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1",
+ "promise": "7.3.1",
+ "setimmediate": "1.0.5",
+ "ua-parser-js": "0.7.17"
+ }
+ }
+ }
+ },
+ "react-addons-test-utils": {
+ "version": "15.3.2",
+ "resolved": "https://registry.npmjs.org/react-addons-test-utils/-/react-addons-test-utils-15.3.2.tgz",
+ "integrity": "sha1-wJpE9YNCWkqcGzhETXpsPm8PQfY=",
+ "dev": true
+ },
+ "react-addons-update": {
+ "version": "15.3.2",
+ "resolved": "https://registry.npmjs.org/react-addons-update/-/react-addons-update-15.3.2.tgz",
+ "integrity": "sha1-tjhcTbHl3zcYJeBhWwQ2DtlEMP4="
+ },
+ "react-barcode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/react-barcode/-/react-barcode-1.3.2.tgz",
+ "integrity": "sha1-DJjS0ucUC1YZ0yHBzhN0wWXAFPI=",
+ "requires": {
+ "jsbarcode": "3.8.0"
+ }
+ },
+ "react-bootstrap": {
+ "version": "0.30.10",
+ "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-0.30.10.tgz",
+ "integrity": "sha1-27ppCVlfKvTZGTfbD5bsjC3y0ag=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "classnames": "2.2.5",
+ "dom-helpers": "3.2.1",
+ "invariant": "2.2.2",
+ "keycode": "2.1.9",
+ "prop-types": "15.6.0",
+ "react-overlays": "0.6.12",
+ "react-prop-types": "0.4.0",
+ "uncontrollable": "4.1.0",
+ "warning": "3.0.0"
+ }
+ },
+ "react-cookie": {
+ "version": "0.4.9",
+ "resolved": "https://registry.npmjs.org/react-cookie/-/react-cookie-0.4.9.tgz",
+ "integrity": "sha1-IaD8ycYmWqhrum0XQSKss4UbhzY=",
+ "requires": {
+ "cookie": "0.3.1"
+ }
+ },
+ "react-datepicker": {
+ "version": "0.60.2",
+ "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-0.60.2.tgz",
+ "integrity": "sha512-5WNtLhozO5i6iGlcgpvjP/Wu4l7RqvTC48CEE/pS1juUny/T4juYHSv53mo+Z90qO4qfyUj59jECTT8AIwAVRQ==",
+ "requires": {
+ "classnames": "2.2.5",
+ "moment": "2.19.2",
+ "prop-types": "15.6.0",
+ "react-onclickoutside": "6.7.0",
+ "react-popper": "0.7.5"
+ }
+ },
+ "react-dnd": {
+ "version": "2.5.4",
+ "resolved": "https://registry.npmjs.org/react-dnd/-/react-dnd-2.5.4.tgz",
+ "integrity": "sha512-y9YmnusURc+3KPgvhYKvZ9oCucj51MSZWODyaeV0KFU0cquzA7dCD1g/OIYUKtNoZ+MXtacDngkdud2TklMSjw==",
+ "requires": {
+ "disposables": "1.0.1",
+ "dnd-core": "2.5.4",
+ "hoist-non-react-statics": "2.3.1",
+ "invariant": "2.2.2",
+ "lodash": "4.17.4",
+ "prop-types": "15.6.0"
+ }
+ },
+ "react-dnd-html5-backend": {
+ "version": "2.5.4",
+ "resolved": "https://registry.npmjs.org/react-dnd-html5-backend/-/react-dnd-html5-backend-2.5.4.tgz",
+ "integrity": "sha512-jDqAkm/hI8Tl4HcsbhkBgB6HgpJR1e+ML1SbfxaegXYiuMxEVQm0FOwEH5WxUoo6fmIG4N+H0rSm59POuZOCaA==",
+ "requires": {
+ "lodash": "4.17.4"
+ }
+ },
+ "react-dom": {
+ "version": "15.3.2",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.3.2.tgz",
+ "integrity": "sha1-xGsKpTgNe4OOelnEp77/LtMVUx8="
+ },
+ "react-dropzone": {
+ "version": "3.13.4",
+ "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-3.13.4.tgz",
+ "integrity": "sha1-hNomgVxAM5aRxJtFRMLvehaRLMw=",
+ "requires": {
+ "attr-accept": "1.1.0",
+ "prop-types": "15.6.0"
+ }
+ },
+ "react-element-to-jsx-string": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/react-element-to-jsx-string/-/react-element-to-jsx-string-3.2.0.tgz",
+ "integrity": "sha1-J614aehPHTLz2Kc4XkS8aT3It7s=",
+ "dev": true,
+ "requires": {
+ "collapse-white-space": "1.0.3",
+ "is-plain-object": "2.0.4",
+ "lodash": "4.17.4",
+ "react-addons-test-utils": "15.3.2",
+ "sortobject": "1.1.1",
+ "stringify-object": "2.4.0",
+ "traverse": "0.6.6"
+ }
+ },
+ "react-inlinesvg": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/react-inlinesvg/-/react-inlinesvg-0.4.2.tgz",
+ "integrity": "sha1-RYklvwpXbkFiAO62uYDC/yddZfg=",
+ "requires": {
+ "httpplease": "0.16.4",
+ "once": "1.3.3"
+ },
+ "dependencies": {
+ "once": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
+ "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=",
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ }
+ }
+ },
+ "react-input-autosize": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/react-input-autosize/-/react-input-autosize-1.1.0.tgz",
+ "integrity": "sha1-P+GsgyOH2KurhfYFHOqxyeVXCFM="
+ },
+ "react-notification-system": {
+ "version": "0.2.16",
+ "resolved": "https://registry.npmjs.org/react-notification-system/-/react-notification-system-0.2.16.tgz",
+ "integrity": "sha1-m52iCw00eGtgBXxStCUW6hKVN0o=",
+ "requires": {
+ "create-react-class": "15.6.2",
+ "object-assign": "4.1.1",
+ "prop-types": "15.6.0"
+ }
+ },
+ "react-onclickoutside": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.7.0.tgz",
+ "integrity": "sha512-IBivBP7xayM7SbbVlAnKgHgoWdfCVqnNBNgQRY5x9iFQm55tFdolR02hX1fCJJtTEKnbaL1stB72/TZc6+p2+Q=="
+ },
+ "react-overlays": {
+ "version": "0.6.12",
+ "resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-0.6.12.tgz",
+ "integrity": "sha1-oHnHUMxCnX20x0dKlbS1QDPiVcM=",
+ "requires": {
+ "classnames": "2.2.5",
+ "dom-helpers": "3.2.1",
+ "react-prop-types": "0.4.0",
+ "warning": "3.0.0"
+ }
+ },
+ "react-popper": {
+ "version": "0.7.5",
+ "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-0.7.5.tgz",
+ "integrity": "sha512-ya9dhhGCf74JTOB2uyksEHhIGw7w9tNZRUJF73lEq2h4H5JT6MBa4PdT4G+sx6fZwq+xKZAL/sVNAIuojPn7Dg==",
+ "requires": {
+ "popper.js": "1.12.9",
+ "prop-types": "15.6.0"
+ }
+ },
+ "react-prop-types": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/react-prop-types/-/react-prop-types-0.4.0.tgz",
+ "integrity": "sha1-+ZsL+0AGkpya8gUefBQUpcdbk9A=",
+ "requires": {
+ "warning": "3.0.0"
+ }
+ },
+ "react-qr-reader": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/react-qr-reader/-/react-qr-reader-0.3.2.tgz",
+ "integrity": "sha1-qD4V2zSxEJXvTnkIcEIO1fKDLvg=",
+ "requires": {
+ "jsqr": "0.2.2",
+ "md-gum-polyfill": "1.0.0",
+ "webrtc-adapter": "2.1.0"
+ }
+ },
+ "react-select": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/react-select/-/react-select-1.1.0.tgz",
+ "integrity": "sha512-c4CdxweEHN9ra85HGWjSjIMBlJ5c0fsIXOymLFZS5UbZEQCiJGHnZTVLTt6/wDh8RKQnxl85gHUwzhG5XZLcyw==",
+ "requires": {
+ "classnames": "2.2.5",
+ "prop-types": "15.6.0",
+ "react-input-autosize": "2.2.1"
+ },
+ "dependencies": {
+ "react-input-autosize": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/react-input-autosize/-/react-input-autosize-2.2.1.tgz",
+ "integrity": "sha512-3+K4CD13iE4lQQ2WlF8PuV5htfmTRLH6MDnfndHM6LuBRszuXnuyIfE7nhSKt8AzRBZ50bu0sAhkNMeS5pxQQA==",
+ "requires": {
+ "prop-types": "15.6.0"
+ }
+ }
+ }
+ },
+ "react-stickydiv": {
+ "version": "3.4.20",
+ "resolved": "https://registry.npmjs.org/react-stickydiv/-/react-stickydiv-3.4.20.tgz",
+ "integrity": "sha512-OpvOVuu3gXBYPP30q5EQfn5oApgeON1SAU73OweKHPuwlAUytz2shhqv7gqxlBUQq7onKlGE6ImLM9ELbRLbcw==",
+ "requires": {
+ "dom-find": "0.3.5"
+ }
+ },
+ "react-svg-file-zoom-pan": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/react-svg-file-zoom-pan/-/react-svg-file-zoom-pan-0.1.4.tgz",
+ "integrity": "sha1-dE3OLHCP6PBB569tAghsp/rLmuU=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "d3": "3.5.17"
+ }
+ },
+ "react-svg-inline": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/react-svg-inline/-/react-svg-inline-1.2.0.tgz",
+ "integrity": "sha1-oCv4Gg7XYV4xlKAUtY2YrqVSH9U=",
+ "requires": {
+ "classnames": "2.2.5"
+ }
+ },
+ "react-treeview": {
+ "version": "0.4.7",
+ "resolved": "https://registry.npmjs.org/react-treeview/-/react-treeview-0.4.7.tgz",
+ "integrity": "sha1-9kfgT3BJbrEfsJEsNRh+gOtg1Fg=",
+ "requires": {
+ "prop-types": "15.6.0"
+ }
+ },
+ "react-ui-tree": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/react-ui-tree/-/react-ui-tree-3.0.0.tgz",
+ "integrity": "sha512-D4nmEGgUKrYoLPkBSg+vkdLLW6z2dJAUe4EsD/DEhAKGxBjkwXJkV5qHCxO2CVwKEH+Dpf/gJOXoA+TauOE2/A==",
+ "requires": {
+ "classnames": "2.2.5",
+ "js-tree": "1.1.0",
+ "prop-types": "15.6.0"
+ }
+ },
+ "react-virtualized": {
+ "version": "9.18.5",
+ "resolved": "https://registry.npmjs.org/react-virtualized/-/react-virtualized-9.18.5.tgz",
+ "integrity": "sha512-eC9ortLeHkQs+WvpxVYJfiQqv7h+QoFmRGvYLi5UN0oKjcni/km9skrBKKw6xsYJRMMy7wnkEMOsBD28f41ovQ==",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "classnames": "2.2.5",
+ "dom-helpers": "3.2.1",
+ "loose-envify": "1.3.1",
+ "prop-types": "15.6.0"
+ }
+ },
+ "react-virtualized-select": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/react-virtualized-select/-/react-virtualized-select-3.0.1.tgz",
+ "integrity": "sha1-epcnhJmHydSbu9hweoJUxCiKgVo=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "prop-types": "15.6.0",
+ "react-select": "1.1.0",
+ "react-virtualized": "9.18.5"
+ }
+ },
+ "read-only-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz",
+ "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=",
+ "requires": {
+ "readable-stream": "2.3.3"
+ }
+ },
+ "read-pkg": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "2.0.0",
+ "normalize-package-data": "2.4.0",
+ "path-type": "2.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+ "dev": true,
+ "requires": {
+ "find-up": "2.1.0",
+ "read-pkg": "2.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "2.0.0"
+ }
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ },
+ "dependencies": {
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "redux": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz",
+ "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==",
+ "requires": {
+ "lodash": "4.17.4",
+ "lodash-es": "4.17.4",
+ "loose-envify": "1.3.1",
+ "symbol-observable": "1.0.4"
+ }
+ },
+ "regenerate": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz",
+ "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg=="
+ },
+ "regenerator-runtime": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz",
+ "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A=="
+ },
+ "regenerator-transform": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
+ "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "private": "0.1.8"
+ }
+ },
+ "regexpu-core": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz",
+ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
+ "requires": {
+ "regenerate": "1.3.3",
+ "regjsgen": "0.2.0",
+ "regjsparser": "0.1.5"
+ }
+ },
+ "regjsgen": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
+ "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc="
+ },
+ "regjsparser": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
+ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
+ "requires": {
+ "jsesc": "0.5.0"
+ }
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "request": {
+ "version": "2.83.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz",
+ "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==",
+ "requires": {
+ "aws-sign2": "0.7.0",
+ "aws4": "1.6.0",
+ "caseless": "0.12.0",
+ "combined-stream": "1.0.5",
+ "extend": "3.0.1",
+ "forever-agent": "0.6.1",
+ "form-data": "2.3.1",
+ "har-validator": "5.0.3",
+ "hawk": "6.0.2",
+ "http-signature": "1.2.0",
+ "is-typedarray": "1.0.0",
+ "isstream": "0.1.2",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.17",
+ "oauth-sign": "0.8.2",
+ "performance-now": "2.1.0",
+ "qs": "6.5.1",
+ "safe-buffer": "5.1.1",
+ "stringstream": "0.0.5",
+ "tough-cookie": "2.3.3",
+ "tunnel-agent": "0.6.0",
+ "uuid": "3.1.0"
+ },
+ "dependencies": {
+ "uuid": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz",
+ "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g=="
+ }
+ }
+ },
+ "require-uncached": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+ "dev": true,
+ "requires": {
+ "caller-path": "0.1.0",
+ "resolve-from": "1.0.1"
+ }
+ },
+ "resolve": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
+ "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==",
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-from": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
+ "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "2.0.1",
+ "signal-exit": "3.0.2"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ }
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz",
+ "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=",
+ "requires": {
+ "hash-base": "2.0.2",
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "hash-base": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz",
+ "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=",
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ }
+ }
+ },
+ "run-async": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+ "dev": true,
+ "requires": {
+ "is-promise": "2.1.0"
+ }
+ },
+ "rx-lite": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
+ "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
+ "dev": true
+ },
+ "rx-lite-aggregates": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
+ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
+ "dev": true,
+ "requires": {
+ "rx-lite": "4.0.8"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
+ },
+ "samsam": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.1.2.tgz",
+ "integrity": "sha1-vsEf3IOp/aBjQBIQ5AF2wwJNFWc=",
+ "dev": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
+ },
+ "sdp": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/sdp/-/sdp-1.5.4.tgz",
+ "integrity": "sha1-jgOPbdsUvXZa4fS1IW4SCUUR4NA="
+ },
+ "select": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz",
+ "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0="
+ },
+ "semver": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
+ "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==",
+ "dev": true
+ },
+ "setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
+ },
+ "sha.js": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "requires": {
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "sha256": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/sha256/-/sha256-0.2.0.tgz",
+ "integrity": "sha1-c6C0GNqrcDW/+G6EkeNjQS/CqwU=",
+ "requires": {
+ "convert-hex": "0.1.0",
+ "convert-string": "0.1.0"
+ }
+ },
+ "shasum": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz",
+ "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=",
+ "requires": {
+ "json-stable-stringify": "0.0.1",
+ "sha.js": "2.4.11"
+ }
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "shell-quote": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz",
+ "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=",
+ "requires": {
+ "array-filter": "0.0.1",
+ "array-map": "0.0.0",
+ "array-reduce": "0.0.0",
+ "jsonify": "0.0.0"
+ }
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ },
+ "sinon": {
+ "version": "1.17.7",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-1.17.7.tgz",
+ "integrity": "sha1-RUKk9JugxFwF6y6d2dID4rjv4L8=",
+ "dev": true,
+ "requires": {
+ "formatio": "1.1.1",
+ "lolex": "1.3.2",
+ "samsam": "1.1.2",
+ "util": "0.10.3"
+ }
+ },
+ "sinon-spy-react": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/sinon-spy-react/-/sinon-spy-react-2.0.1.tgz",
+ "integrity": "sha1-54aoZxXoy1x5AymXhnYUrKciCKs=",
+ "dev": true
+ },
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU="
+ },
+ "slice-ansi": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
+ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0"
+ }
+ },
+ "sntp": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz",
+ "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==",
+ "requires": {
+ "hoek": "4.2.0"
+ }
+ },
+ "sortobject": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/sortobject/-/sortobject-1.1.1.tgz",
+ "integrity": "sha1-T2ldTUTtCkwGSCw0wlgqLc3CqzQ=",
+ "dev": true,
+ "requires": {
+ "editions": "1.3.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "source-map-support": {
+ "version": "0.4.18",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
+ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
+ "requires": {
+ "source-map": "0.5.7"
+ }
+ },
+ "spdx-correct": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
+ "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=",
+ "dev": true,
+ "requires": {
+ "spdx-license-ids": "1.2.2"
+ }
+ },
+ "spdx-expression-parse": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz",
+ "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=",
+ "dev": true
+ },
+ "spdx-license-ids": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz",
+ "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=",
+ "dev": true
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "sshpk": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz",
+ "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=",
+ "requires": {
+ "asn1": "0.2.3",
+ "assert-plus": "1.0.0",
+ "bcrypt-pbkdf": "1.0.1",
+ "dashdash": "1.14.1",
+ "ecc-jsbn": "0.1.1",
+ "getpass": "0.1.7",
+ "jsbn": "0.1.1",
+ "tweetnacl": "0.14.5"
+ }
+ },
+ "stream-browserify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
+ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "stream-combiner2": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz",
+ "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=",
+ "requires": {
+ "duplexer2": "0.1.4",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "stream-http": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.1.tgz",
+ "integrity": "sha512-cQ0jo17BLca2r0GfRdZKYAGLU6JRoIWxqSOakUMuKOT6MOK7AAlE856L33QuDmAy/eeOrhLee3dZKX0Uadu93A==",
+ "requires": {
+ "builtin-status-codes": "3.0.0",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3",
+ "to-arraybuffer": "1.0.1",
+ "xtend": "4.0.1"
+ }
+ },
+ "stream-splicer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz",
+ "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=",
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0",
+ "strip-ansi": "4.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "3.0.0"
+ }
+ }
+ }
+ },
+ "string.prototype.repeat": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-0.2.0.tgz",
+ "integrity": "sha1-q6Nt4I3O5qWjN9SbLqHaGyj8Ds8="
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "stringify-object": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-2.4.0.tgz",
+ "integrity": "sha1-xi0RAj6yH+LZsIe+A5om3zsioJ0=",
+ "dev": true,
+ "requires": {
+ "is-plain-obj": "1.1.0",
+ "is-regexp": "1.0.0"
+ }
+ },
+ "stringstream": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
+ "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg="
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ },
+ "subarg": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz",
+ "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=",
+ "requires": {
+ "minimist": "1.2.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ }
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ },
+ "symbol-observable": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.4.tgz",
+ "integrity": "sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0="
+ },
+ "symbol-tree": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz",
+ "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY="
+ },
+ "syntax-error": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz",
+ "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==",
+ "requires": {
+ "acorn-node": "1.3.0"
+ }
+ },
+ "table": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
+ "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
+ "dev": true,
+ "requires": {
+ "ajv": "5.5.0",
+ "ajv-keywords": "2.1.1",
+ "chalk": "2.3.0",
+ "lodash": "4.17.4",
+ "slice-ansi": "1.0.0",
+ "string-width": "2.1.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "requires": {
+ "readable-stream": "2.3.3",
+ "xtend": "4.0.1"
+ }
+ },
+ "timers-browserify": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz",
+ "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=",
+ "requires": {
+ "process": "0.11.10"
+ }
+ },
+ "tiny-emitter": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.0.2.tgz",
+ "integrity": "sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow=="
+ },
+ "tmatch": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/tmatch/-/tmatch-2.0.1.tgz",
+ "integrity": "sha1-DFYkbzPzDaG409colauvFmYPOM8=",
+ "dev": true
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M="
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc="
+ },
+ "tough-cookie": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz",
+ "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=",
+ "requires": {
+ "punycode": "1.4.1"
+ }
+ },
+ "tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
+ },
+ "transmitter": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/transmitter/-/transmitter-3.0.1.tgz",
+ "integrity": "sha1-MumeQ9EyHkncLhlPp130/oSouRg="
+ },
+ "traverse": {
+ "version": "0.6.6",
+ "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz",
+ "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM="
+ },
+ "tryit": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz",
+ "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=",
+ "dev": true
+ },
+ "tty-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz",
+ "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw=="
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "optional": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
+ },
+ "ua-parser-js": {
+ "version": "0.7.17",
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz",
+ "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g=="
+ },
+ "uglify-js": {
+ "version": "3.3.21",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.21.tgz",
+ "integrity": "sha512-uy82472lH8tshK3jS3c5IFb5MmNKd/5qyBd0ih8sM42L3jWvxnE339U9gZU1zufnLVs98Stib9twq8dLm2XYCA==",
+ "dev": true,
+ "requires": {
+ "commander": "2.15.1",
+ "source-map": "0.6.1"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.15.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
+ "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "uglifyify": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/uglifyify/-/uglifyify-4.0.5.tgz",
+ "integrity": "sha512-vVvJjL5rxAbvUs5m0zfxLCwy5fu6+6HBRY06cpWfOGTtKgAONWy7HDovTr28Y7kwXFNAAt+OMbRGP6ulqWqakA==",
+ "dev": true,
+ "requires": {
+ "convert-source-map": "1.1.3",
+ "extend": "1.3.0",
+ "minimatch": "3.0.4",
+ "through": "2.3.8",
+ "uglify-es": "3.3.9"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz",
+ "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz",
+ "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=",
+ "dev": true
+ },
+ "extend": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-1.3.0.tgz",
+ "integrity": "sha1-0VFvsP9WJNLr+RI+odrFoZlABPg=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "uglify-es": {
+ "version": "3.3.9",
+ "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz",
+ "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==",
+ "dev": true,
+ "requires": {
+ "commander": "2.13.0",
+ "source-map": "0.6.1"
+ }
+ }
+ }
+ },
+ "umd": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.1.tgz",
+ "integrity": "sha1-iuVW4RAR9jwllnCKiDclnwGz1g4="
+ },
+ "uncontrollable": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-4.1.0.tgz",
+ "integrity": "sha1-4DWCkSUuGGUiLZCTmxny9J+Bwak=",
+ "requires": {
+ "invariant": "2.2.2"
+ }
+ },
+ "uniq": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
+ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8="
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
+ }
+ }
+ },
+ "urllite": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/urllite/-/urllite-0.5.0.tgz",
+ "integrity": "sha1-G3u5yj+w25Ug3hE0ZrvPfMNBRRo=",
+ "requires": {
+ "xtend": "4.0.1"
+ }
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "requires": {
+ "inherits": "2.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
+ }
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "uuid": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
+ "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho="
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
+ "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "1.0.2",
+ "spdx-expression-parse": "1.0.4"
+ }
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "requires": {
+ "assert-plus": "1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "1.3.0"
+ }
+ },
+ "vm-browserify": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
+ "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
+ "requires": {
+ "indexof": "0.0.1"
+ }
+ },
+ "warning": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
+ "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg=="
+ },
+ "webrtc-adapter": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/webrtc-adapter/-/webrtc-adapter-2.1.0.tgz",
+ "integrity": "sha1-YStbxs6Oc8nQZgA4oh+SVahnvz4=",
+ "requires": {
+ "sdp": "1.5.4"
+ }
+ },
+ "whatwg-encoding": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz",
+ "integrity": "sha512-jLBwwKUhi8WtBfsMQlL4bUUcT8sMkAtQinscJAe/M4KHCkHuUJAF6vuB0tueNIw4c8ziO6AkRmgY+jL3a0iiPw==",
+ "requires": {
+ "iconv-lite": "0.4.19"
+ }
+ },
+ "whatwg-fetch": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz",
+ "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ="
+ },
+ "whatwg-url": {
+ "version": "4.8.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-4.8.0.tgz",
+ "integrity": "sha1-0pgaqRSMHgCkHFphMRZqtGg7vMA=",
+ "requires": {
+ "tr46": "0.0.3",
+ "webidl-conversions": "3.0.1"
+ },
+ "dependencies": {
+ "webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
+ }
+ }
+ },
+ "which": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
+ "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
+ "dev": true,
+ "requires": {
+ "isexe": "2.0.0"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus="
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "write": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
+ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+ "dev": true,
+ "requires": {
+ "mkdirp": "0.5.1"
+ }
+ },
+ "xml-name-validator": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz",
+ "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU="
+ },
+ "xmlhttprequest": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz",
+ "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw="
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ }
+ }
+}
diff --git a/package.json b/package.json
index e416c6af10..e5a8c21067 100644
--- a/package.json
+++ b/package.json
@@ -56,8 +56,9 @@
"sha256": "^0.2.0",
"uuid": "^2.0.2",
"commonmark": "^0.28.1",
- "whatwg-fetch": "1.0.0",
- "@novnc/noVNC": "novnc/noVNC#v1.0.0"
+ "@novnc/noVNC": "novnc/noVNC#v1.0.0",
+ "whatwg-fetch": "2.0.3",
+ "xlsx": "^0.12.9"
},
"browserify": {
"transform": [